@praxisui/table 9.0.0-beta.71 → 9.0.0-beta.72

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,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, EventEmitter, Output, Input, Optional, Inject, Component, ChangeDetectionStrategy, Injectable, LOCALE_ID, inject, DestroyRef, Directive, ElementRef, ChangeDetectorRef, ViewChild, HostListener, ENVIRONMENT_INITIALIZER, effect, booleanAttribute, HostBinding, ContentChild } from '@angular/core';
3
- import * as i10$1 from '@angular/common';
3
+ import * as i10$2 from '@angular/common';
4
4
  import { UpperCasePipe, LowerCasePipe, TitleCasePipe, PercentPipe, CurrencyPipe, DecimalPipe, DatePipe, CommonModule } from '@angular/common';
5
5
  import { DomSanitizer } from '@angular/platform-browser';
6
6
  import * as i8$1 from '@angular/material/table';
@@ -27,7 +27,7 @@ import * as i8 from '@angular/material/checkbox';
27
27
  import { MatCheckboxModule } from '@angular/material/checkbox';
28
28
  import * as i17$1 from '@angular/material/radio';
29
29
  import { MatRadioModule } from '@angular/material/radio';
30
- import * as i15$1 from '@angular/material/badge';
30
+ import * as i15 from '@angular/material/badge';
31
31
  import { MatBadgeModule } from '@angular/material/badge';
32
32
  import * as i1$1 from '@angular/forms';
33
33
  import { FormsModule, ReactiveFormsModule, Validators, FormGroup, FormControl } from '@angular/forms';
@@ -63,23 +63,23 @@ import { MatDividerModule } from '@angular/material/divider';
63
63
  import * as i6 from '@angular/material/expansion';
64
64
  import { MatExpansionModule } from '@angular/material/expansion';
65
65
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
66
- import * as i15 from '@angular/material/chips';
66
+ import * as i10$1 from '@angular/material/chips';
67
67
  import { MatChipsModule } from '@angular/material/chips';
68
68
  import * as i1$2 from '@angular/material/dialog';
69
69
  import { MatDialogModule } from '@angular/material/dialog';
70
70
  import { distinctUntilChanged, debounceTime as debounceTime$1, take, map, startWith, takeUntil as takeUntil$1 } from 'rxjs/operators';
71
- import * as i15$2 from '@angular/material/datepicker';
71
+ import * as i15$1 from '@angular/material/datepicker';
72
72
  import { MatDatepickerModule } from '@angular/material/datepicker';
73
73
  import { MatNativeDateModule } from '@angular/material/core';
74
74
  import { toCellClassAndStyle, RuleEffectsPanelComponent } from '@praxisui/table-rule-builder';
75
75
  import { DynamicFieldLoaderDirective, supportsClearButtonControlType } from '@praxisui/dynamic-fields';
76
- import * as i14$1 from '@angular/material/progress-bar';
76
+ import * as i13$1 from '@angular/material/progress-bar';
77
77
  import { MatProgressBarModule } from '@angular/material/progress-bar';
78
- import * as i15$3 from '@angular/material/progress-spinner';
78
+ import * as i14$1 from '@angular/material/progress-spinner';
79
79
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
80
80
  import * as i12 from '@angular/cdk/overlay';
81
81
  import { OverlayModule, CdkOverlayOrigin } from '@angular/cdk/overlay';
82
- import * as i19 from '@angular/cdk/a11y';
82
+ import * as i18 from '@angular/cdk/a11y';
83
83
  import { A11yModule } from '@angular/cdk/a11y';
84
84
  import * as i6$1 from '@angular/router';
85
85
  import * as i11$1 from '@angular/cdk/scrolling';
@@ -4614,7 +4614,7 @@ class VisualFormulaBuilderComponent {
4614
4614
  </mat-expansion-panel>
4615
4615
  }
4616
4616
  </div>
4617
- `, isInline: true, styles: [":host{--vfb-primary: var(--md-sys-color-primary);--vfb-primary-container: var(--md-sys-color-primary-container);--vfb-on-primary-container: var(--md-sys-color-on-primary-container);--vfb-surface-container-low: var(--md-sys-color-surface-container-low);--vfb-surface-container: var(--md-sys-color-surface-container);--vfb-outline: var(--md-sys-color-outline);--vfb-on-surface-variant: var(--md-sys-color-on-surface-variant);--vfb-error: var(--md-sys-color-error);--vfb-error-container: var(--md-sys-color-error-container);--vfb-on-error-container: var(--md-sys-color-on-error-container)}.visual-formula-builder{display:flex;flex-direction:column;gap:16px}.formula-type-card,.parameters-card,.expression-preview-card{background-color:var(--vfb-surface-container-low)}.compact-header{padding-bottom:8px;align-items:center}.compact-header .mat-mdc-card-title{font-size:1.1rem;margin:0;line-height:1.2}.compact-header .mat-mdc-card-subtitle{font-size:.875rem;margin:0}.compact-header .mat-mdc-card-avatar{align-self:center}.formula-icon,.params-icon,.preview-icon{background-color:var(--vfb-primary-container);color:var(--vfb-on-primary-container);border-radius:50%;width:36px;height:36px;font-size:20px;display:inline-flex;align-items:center;justify-content:center}.formula-type-select{width:100%}.help-icon-button{--mdc-icon-button-state-layer-size: 28px;--mdc-icon-button-icon-size: 18px;width:28px;height:28px;padding:0;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}.help-icon-button mat-icon{font-size:18px;line-height:18px;width:18px;height:18px}.formula-option{display:flex;align-items:center;gap:12px;padding:8px 0}.option-icon{color:var(--vfb-primary);font-size:20px;opacity:.95}.option-content{display:flex;flex-direction:column}.option-label{font-weight:500;font-size:.9rem}.option-description{font-size:.8rem;color:var(--vfb-on-surface-variant)}.parameters-form{display:flex;flex-direction:column;gap:16px}.parameter-field{display:flex;flex-direction:column}.full-width{width:100%}.field-option{display:flex;align-items:center;gap:8px}.field-type-icon{font-size:16px;color:var(--vfb-outline)}.field-info{display:flex;flex-direction:column}.field-label{font-weight:500;font-size:.9rem}.field-name{font-size:.8rem;color:var(--vfb-on-surface-variant);font-family:monospace}.checkbox-field{padding:8px 0}.checkbox-hint{font-size:.75rem;color:var(--vfb-on-surface-variant);margin-top:4px;margin-left:32px}.expression-textarea{font-family:Monaco,Menlo,Ubuntu Mono,Consolas,monospace!important;font-size:13px!important;line-height:1.4!important}.test-panel{margin-top:8px}.test-content{padding:16px 0}.test-actions{display:flex;gap:12px;margin-bottom:16px}.sample-data-section{margin:16px 0}.sample-data{background-color:var(--vfb-surface-container);padding:12px;border-radius:4px;font-size:12px;overflow-x:auto}.test-result{margin:16px 0}.success-result,.error-result{display:flex;align-items:center;gap:8px;padding:12px;border-radius:4px}.success-result{background-color:var(--vfb-primary-container);color:var(--vfb-on-primary-container)}.error-result{background-color:var(--vfb-error-container);color:var(--vfb-on-error-container)}.result-icon.success{color:var(--vfb-primary)}.result-icon.error{color:var(--vfb-error)}.result-value{font-weight:500;font-family:monospace}.validation-errors{margin:16px 0}.error-chip{background-color:var(--vfb-error-container);color:var(--vfb-on-error-container)}.value-input-container{display:flex;flex-direction:column;gap:12px}.value-input-selector{display:flex;align-items:center;margin-bottom:8px}.input-mode-toggle{font-size:.875rem}.input-mode-toggle .mat-button-toggle{height:36px;display:flex;align-items:center;gap:6px}.literal-input-container{width:100%}@media(max-width:768px){.test-actions{flex-direction:column}.sample-data{font-size:10px}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.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: i1$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { 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: MatFormFieldModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3$1.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: i4$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: i4$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i9.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i9.MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "directive", type: i9.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i9.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i9.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: i9.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i15.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i15.MatChipAvatar, selector: "mat-chip-avatar, [matChipAvatar]" }, { kind: "component", type: i15.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { 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: MatDividerModule }, { kind: "component", type: i9$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i14.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i14.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4617
+ `, isInline: true, styles: [":host{--vfb-primary: var(--md-sys-color-primary);--vfb-primary-container: var(--md-sys-color-primary-container);--vfb-on-primary-container: var(--md-sys-color-on-primary-container);--vfb-surface-container-low: var(--md-sys-color-surface-container-low);--vfb-surface-container: var(--md-sys-color-surface-container);--vfb-outline: var(--md-sys-color-outline);--vfb-on-surface-variant: var(--md-sys-color-on-surface-variant);--vfb-error: var(--md-sys-color-error);--vfb-error-container: var(--md-sys-color-error-container);--vfb-on-error-container: var(--md-sys-color-on-error-container)}.visual-formula-builder{display:flex;flex-direction:column;gap:16px}.formula-type-card,.parameters-card,.expression-preview-card{background-color:var(--vfb-surface-container-low)}.compact-header{padding-bottom:8px;align-items:center}.compact-header .mat-mdc-card-title{font-size:1.1rem;margin:0;line-height:1.2}.compact-header .mat-mdc-card-subtitle{font-size:.875rem;margin:0}.compact-header .mat-mdc-card-avatar{align-self:center}.formula-icon,.params-icon,.preview-icon{background-color:var(--vfb-primary-container);color:var(--vfb-on-primary-container);border-radius:50%;width:36px;height:36px;font-size:20px;display:inline-flex;align-items:center;justify-content:center}.formula-type-select{width:100%}.help-icon-button{--mdc-icon-button-state-layer-size: 28px;--mdc-icon-button-icon-size: 18px;width:28px;height:28px;padding:0;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}.help-icon-button mat-icon{font-size:18px;line-height:18px;width:18px;height:18px}.formula-option{display:flex;align-items:center;gap:12px;padding:8px 0}.option-icon{color:var(--vfb-primary);font-size:20px;opacity:.95}.option-content{display:flex;flex-direction:column}.option-label{font-weight:500;font-size:.9rem}.option-description{font-size:.8rem;color:var(--vfb-on-surface-variant)}.parameters-form{display:flex;flex-direction:column;gap:16px}.parameter-field{display:flex;flex-direction:column}.full-width{width:100%}.field-option{display:flex;align-items:center;gap:8px}.field-type-icon{font-size:16px;color:var(--vfb-outline)}.field-info{display:flex;flex-direction:column}.field-label{font-weight:500;font-size:.9rem}.field-name{font-size:.8rem;color:var(--vfb-on-surface-variant);font-family:monospace}.checkbox-field{padding:8px 0}.checkbox-hint{font-size:.75rem;color:var(--vfb-on-surface-variant);margin-top:4px;margin-left:32px}.expression-textarea{font-family:Monaco,Menlo,Ubuntu Mono,Consolas,monospace!important;font-size:13px!important;line-height:1.4!important}.test-panel{margin-top:8px}.test-content{padding:16px 0}.test-actions{display:flex;gap:12px;margin-bottom:16px}.sample-data-section{margin:16px 0}.sample-data{background-color:var(--vfb-surface-container);padding:12px;border-radius:4px;font-size:12px;overflow-x:auto}.test-result{margin:16px 0}.success-result,.error-result{display:flex;align-items:center;gap:8px;padding:12px;border-radius:4px}.success-result{background-color:var(--vfb-primary-container);color:var(--vfb-on-primary-container)}.error-result{background-color:var(--vfb-error-container);color:var(--vfb-on-error-container)}.result-icon.success{color:var(--vfb-primary)}.result-icon.error{color:var(--vfb-error)}.result-value{font-weight:500;font-family:monospace}.validation-errors{margin:16px 0}.error-chip{background-color:var(--vfb-error-container);color:var(--vfb-on-error-container)}.value-input-container{display:flex;flex-direction:column;gap:12px}.value-input-selector{display:flex;align-items:center;margin-bottom:8px}.input-mode-toggle{font-size:.875rem}.input-mode-toggle .mat-button-toggle{height:36px;display:flex;align-items:center;gap:6px}.literal-input-container{width:100%}@media(max-width:768px){.test-actions{flex-direction:column}.sample-data{font-size:10px}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.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: i1$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { 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: MatFormFieldModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3$1.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: i4$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: i4$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i9.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i9.MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "directive", type: i9.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i9.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i9.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: i9.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i10$1.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i10$1.MatChipAvatar, selector: "mat-chip-avatar, [matChipAvatar]" }, { kind: "component", type: i10$1.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { 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: MatDividerModule }, { kind: "component", type: i9$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i14.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i14.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4618
4618
  }
4619
4619
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: VisualFormulaBuilderComponent, decorators: [{
4620
4620
  type: Component,
@@ -14735,7 +14735,7 @@ class ColumnsConfigEditorComponent {
14735
14735
  </div>
14736
14736
  </div>
14737
14737
  </div>
14738
- `, isInline: true, styles: [".columns-config-editor{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;gap:16px}.educational-card{background:var(--md-sys-color-surface-container-low);border-left:4px solid var(--md-sys-color-primary);margin-bottom:12px}.inline-icon{font-size:18px;width:18px;height:18px;color:var(--md-sys-color-primary)}.help-icon-button{--mdc-icon-button-state-layer-size: 28px;--mdc-icon-button-icon-size: 18px;width:28px;height:28px;padding:0;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}.help-icon-button mat-icon{font-size:18px;line-height:18px;width:18px;height:18px}.global-config-accordion{margin-bottom:16px}.global-config-panel{background:var(--md-sys-color-surface-container);border-left:4px solid var(--md-sys-color-secondary)}.config-panel-content{padding:16px 20px 20px}.config-layout{display:flex;flex-wrap:wrap;gap:24px;align-items:flex-start}.config-group{display:flex;flex-direction:column;min-width:0}.config-group:not(.features-group){flex:0 0 auto}.features-group{flex:1 1 300px;min-width:300px}.control-section{display:flex;flex-direction:column;gap:8px}.control-label{font-size:.875rem;font-weight:500;color:var(--md-sys-color-on-surface);margin:0}.control-status{font-weight:400;color:var(--md-sys-color-on-surface-variant);font-size:.75rem;margin-left:4px}.visibility-toggle-group,.alignment-toggle-group{display:flex}.visibility-toggle-group .mat-button-toggle{min-width:90px;height:40px}.alignment-toggle-group .mat-button-toggle{min-width:56px;width:auto;height:40px;padding:0 8px}.features-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin-top:4px}.feature-checkbox{justify-self:start}.master-detail-layout{display:flex;flex:1;gap:16px;min-height:0}.master-panel{flex:0 0 350px;display:flex;flex-direction:column;background:var(--md-sys-color-surface-container-low);border-radius:8px;overflow:hidden}.list-header{display:flex;justify-content:space-between;align-items:center;padding:16px;background:var(--md-sys-color-surface-container);border-bottom:1px solid var(--md-sys-color-outline-variant)}.list-header h3{margin:0;font-size:1.1rem;font-weight:500}.add-column-fab{transform:scale(.7)}.columns-list-container{flex:1;overflow-y:auto}.columns-list{padding:0}.column-item{border-bottom:1px solid var(--md-sys-color-outline-variant);cursor:pointer;transition:background-color .2s}.column-item:hover{background:var(--md-sys-color-surface-container)}.column-item.selected{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.column-item-content{display:flex;justify-content:space-between;align-items:center;width:100%;padding:12px 16px}.column-main-info{flex:1;display:flex;flex-direction:column;gap:4px}.column-header{display:flex;align-items:center;gap:8px;width:100%}.drag-handle{cursor:grab;color:var(--md-sys-color-on-surface-variant);font-size:18px;flex-shrink:0}.column-text-info{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}.column-title{font-weight:600;font-size:.9rem;color:var(--md-sys-color-on-surface);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.column-field{font-size:.75rem;color:var(--md-sys-color-on-surface-variant);font-family:monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.column-indicators{display:flex;align-items:center;gap:6px;flex-shrink:0}.column-type-icon,.mapping-indicator-icon,.renderer-indicator-icon{font-size:16px;color:var(--md-sys-color-on-surface-variant)}.visibility-checkbox{transform:scale(.9)}.remove-button{opacity:.7;transition:opacity .2s}.remove-button:hover{opacity:1}.detail-panel{flex:1;display:flex;flex-direction:column;background:var(--md-sys-color-surface-container-low);border-radius:8px;overflow:hidden}.no-selection-message{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;text-align:center;padding:48px;color:var(--md-sys-color-on-surface-variant)}.no-selection-message mat-icon{font-size:48px;width:48px;height:48px;margin-bottom:16px}.editor-header{padding:16px 24px;background:var(--md-sys-color-surface-container);border-bottom:1px solid var(--md-sys-color-outline-variant)}.editor-title{margin:0;font-size:1.1rem;font-weight:500;color:var(--md-sys-color-on-surface)}.column-form{flex:1;padding:24px;overflow:visible}.form-row{display:flex;gap:16px;margin-bottom:24px;align-items:flex-start}.field-input,.header-input,.width-input,.data-type-input{flex:1}.header-input{flex:2}.alignment-group,.sticky-group{display:flex;flex-direction:column;gap:8px}.control-label{font-size:.875rem;font-weight:500;color:var(--md-sys-color-on-surface)}.renderer-grid,.renderer-config{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}.compose-preset-panel{grid-column:1/-1;display:grid;gap:12px;padding:12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;background:var(--md-sys-color-surface-container-low)}.compose-preset-copy,.compose-editor-heading{display:grid;gap:4px}.compose-preset-copy strong,.compose-editor-heading strong{color:var(--md-sys-color-on-surface);font-weight:600}.compose-preset-actions,.compose-item-actions{display:flex;flex-wrap:wrap;gap:8px}.compose-preset-actions button,.compose-item-actions button{min-height:36px;white-space:normal;text-align:left;line-height:1.2}.compose-preset-actions--inline{margin:0 0 12px}.compose-editor-heading{margin-bottom:12px}.renderer-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px}.renderer-errors{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container);border:1px solid var(--md-sys-color-error);padding:8px 12px;border-radius:6px;font-size:.85rem}.renderer-preview{margin-top:8px;padding:8px 12px;background:var(--md-sys-color-surface-container-low);border:1px solid var(--md-sys-color-outline-variant);border-radius:6px}.renderer-preview-list{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.renderer-preview-list .pfx-compose{display:inline-flex;gap:6px;align-items:center}.pfx-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;border-radius:10px;font-size:12px;line-height:1}.pfx-badge-icon{font-size:14px;width:14px;height:14px}.pfx-badge--plain{border:1px solid transparent;color:inherit;background:transparent}.pfx-badge--outlined{border:1px solid var(--md-sys-color-outline-variant);color:var(--md-sys-color-on-surface);background:transparent}.pfx-badge--filled-primary{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pfx-badge--filled-accent{background:var(--md-sys-color-secondary);color:var(--md-sys-color-on-secondary)}.pfx-badge--filled-warn,.pfx-badge--filled-danger{background:var(--md-sys-color-error);color:var(--md-sys-color-on-error)}.pfx-badge--filled-success{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container)}.pfx-badge--filled-info{background:var(--md-sys-color-tertiary);color:var(--md-sys-color-on-tertiary)}.pfx-badge--filled-basic{background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface);border:1px solid var(--md-sys-color-outline-variant)}.pfx-badge--soft-primary{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.pfx-badge--soft-accent{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}.pfx-badge--soft-warn,.pfx-badge--soft-danger{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}.pfx-badge--soft-success,.pfx-badge--soft-info{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container)}.pfx-badge--soft-basic{background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface);border:1px solid var(--md-sys-color-outline-variant)}.pfx-cell-image{display:inline-block;border-radius:4px;object-fit:cover}.pfx-link{color:var(--md-sys-color-primary);text-decoration:underline;cursor:pointer}.pfx-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:10px;font-size:12px;border:1px solid transparent}.pfx-chip--plain{background:transparent;border-color:transparent;color:var(--md-sys-color-on-surface)}.pfx-chip--outlined{border-color:var(--md-sys-color-outline-variant);color:var(--md-sys-color-on-surface)}.pfx-chip--filled-primary{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pfx-chip--filled-accent{background:var(--md-sys-color-secondary);color:var(--md-sys-color-on-secondary)}.pfx-chip--filled-warn,.pfx-chip--filled-danger{background:var(--md-sys-color-error);color:var(--md-sys-color-on-error)}.pfx-chip--filled-success{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container)}.pfx-chip--filled-info{background:var(--md-sys-color-tertiary);color:var(--md-sys-color-on-tertiary)}.pfx-chip--filled-basic{background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface);border-color:var(--md-sys-color-outline-variant)}.pfx-chip--soft-primary{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.pfx-chip--soft-accent{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}.pfx-chip--soft-warn,.pfx-chip--soft-danger{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}.pfx-chip--soft-success,.pfx-chip--soft-info{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container)}.pfx-chip--soft-basic{background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface);border-color:var(--md-sys-color-outline-variant)}.pfx-progress{position:relative;width:120px;height:8px;background:var(--md-sys-color-surface-container-highest);border-radius:4px;overflow:hidden}.pfx-progress-bar{height:100%;background:var(--md-sys-color-primary)}.pfx-avatar{display:inline-flex;align-items:center;justify-content:center;background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface);border-radius:4px;overflow:hidden;font-weight:600;width:32px;height:32px}.pfx-avatar.shape-rounded{border-radius:8px}.pfx-avatar.shape-circle{border-radius:999px}.pfx-avatar--initials{text-transform:uppercase;font-size:12px}@media(max-width:768px){.master-detail-layout{flex-direction:column}.master-panel{flex:0 0 auto;max-height:300px}.form-row{flex-direction:column;gap:12px}.config-layout{flex-direction:column;gap:20px}.features-group{min-width:auto}.features-grid{grid-template-columns:1fr;gap:8px}.visibility-toggle-group .mat-button-toggle{min-width:80px;font-size:.875rem}}@media(max-width:480px){.visibility-toggle-group .mat-button-toggle{min-width:70px;font-size:.8rem}.alignment-toggle-group .mat-button-toggle{min-width:48px;padding:0 6px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.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: i1$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { 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: "component", type: i3.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], 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: MatFormFieldModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3$1.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: MatCardModule }, { kind: "component", type: i9.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i9.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i14.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i14.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4$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: i4$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i11.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i11.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "component", type: i9$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i6.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { 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: MatBadgeModule }, { kind: "directive", type: i15$1.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i5$1.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: DragDropModule }, { kind: "directive", type: i13.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i13.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i13.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: VisualFormulaBuilderComponent, selector: "visual-formula-builder", inputs: ["availableDataSchema", "currentFormula"], outputs: ["formulaChange", "generatedExpressionChange"] }, { kind: "component", type: ValueMappingEditorComponent, selector: "value-mapping-editor", inputs: ["currentMapping", "keyInputType", "labelKey", "labelValue"], outputs: ["mappingChange"] }, { kind: "component", type: DataFormatterComponent, selector: "data-formatter", inputs: ["columnType", "currentFormat"], outputs: ["formatChange"] }, { kind: "component", type: TableRatingCellComponent, selector: "praxis-table-rating", inputs: ["itemsCount", "value", "size", "ratingColor", "outlineColor", "ariaLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
14738
+ `, isInline: true, styles: [".columns-config-editor{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;gap:16px}.educational-card{background:var(--md-sys-color-surface-container-low);border-left:4px solid var(--md-sys-color-primary);margin-bottom:12px}.inline-icon{font-size:18px;width:18px;height:18px;color:var(--md-sys-color-primary)}.help-icon-button{--mdc-icon-button-state-layer-size: 28px;--mdc-icon-button-icon-size: 18px;width:28px;height:28px;padding:0;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}.help-icon-button mat-icon{font-size:18px;line-height:18px;width:18px;height:18px}.global-config-accordion{margin-bottom:16px}.global-config-panel{background:var(--md-sys-color-surface-container);border-left:4px solid var(--md-sys-color-secondary)}.config-panel-content{padding:16px 20px 20px}.config-layout{display:flex;flex-wrap:wrap;gap:24px;align-items:flex-start}.config-group{display:flex;flex-direction:column;min-width:0}.config-group:not(.features-group){flex:0 0 auto}.features-group{flex:1 1 300px;min-width:300px}.control-section{display:flex;flex-direction:column;gap:8px}.control-label{font-size:.875rem;font-weight:500;color:var(--md-sys-color-on-surface);margin:0}.control-status{font-weight:400;color:var(--md-sys-color-on-surface-variant);font-size:.75rem;margin-left:4px}.visibility-toggle-group,.alignment-toggle-group{display:flex}.visibility-toggle-group .mat-button-toggle{min-width:90px;height:40px}.alignment-toggle-group .mat-button-toggle{min-width:56px;width:auto;height:40px;padding:0 8px}.features-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin-top:4px}.feature-checkbox{justify-self:start}.master-detail-layout{display:flex;flex:1;gap:16px;min-height:0}.master-panel{flex:0 0 350px;display:flex;flex-direction:column;background:var(--md-sys-color-surface-container-low);border-radius:8px;overflow:hidden}.list-header{display:flex;justify-content:space-between;align-items:center;padding:16px;background:var(--md-sys-color-surface-container);border-bottom:1px solid var(--md-sys-color-outline-variant)}.list-header h3{margin:0;font-size:1.1rem;font-weight:500}.add-column-fab{transform:scale(.7)}.columns-list-container{flex:1;overflow-y:auto}.columns-list{padding:0}.column-item{border-bottom:1px solid var(--md-sys-color-outline-variant);cursor:pointer;transition:background-color .2s}.column-item:hover{background:var(--md-sys-color-surface-container)}.column-item.selected{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.column-item-content{display:flex;justify-content:space-between;align-items:center;width:100%;padding:12px 16px}.column-main-info{flex:1;display:flex;flex-direction:column;gap:4px}.column-header{display:flex;align-items:center;gap:8px;width:100%}.drag-handle{cursor:grab;color:var(--md-sys-color-on-surface-variant);font-size:18px;flex-shrink:0}.column-text-info{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}.column-title{font-weight:600;font-size:.9rem;color:var(--md-sys-color-on-surface);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.column-field{font-size:.75rem;color:var(--md-sys-color-on-surface-variant);font-family:monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.column-indicators{display:flex;align-items:center;gap:6px;flex-shrink:0}.column-type-icon,.mapping-indicator-icon,.renderer-indicator-icon{font-size:16px;color:var(--md-sys-color-on-surface-variant)}.visibility-checkbox{transform:scale(.9)}.remove-button{opacity:.7;transition:opacity .2s}.remove-button:hover{opacity:1}.detail-panel{flex:1;display:flex;flex-direction:column;background:var(--md-sys-color-surface-container-low);border-radius:8px;overflow:hidden}.no-selection-message{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;text-align:center;padding:48px;color:var(--md-sys-color-on-surface-variant)}.no-selection-message mat-icon{font-size:48px;width:48px;height:48px;margin-bottom:16px}.editor-header{padding:16px 24px;background:var(--md-sys-color-surface-container);border-bottom:1px solid var(--md-sys-color-outline-variant)}.editor-title{margin:0;font-size:1.1rem;font-weight:500;color:var(--md-sys-color-on-surface)}.column-form{flex:1;padding:24px;overflow:visible}.form-row{display:flex;gap:16px;margin-bottom:24px;align-items:flex-start}.field-input,.header-input,.width-input,.data-type-input{flex:1}.header-input{flex:2}.alignment-group,.sticky-group{display:flex;flex-direction:column;gap:8px}.control-label{font-size:.875rem;font-weight:500;color:var(--md-sys-color-on-surface)}.renderer-grid,.renderer-config{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}.compose-preset-panel{grid-column:1/-1;display:grid;gap:12px;padding:12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;background:var(--md-sys-color-surface-container-low)}.compose-preset-copy,.compose-editor-heading{display:grid;gap:4px}.compose-preset-copy strong,.compose-editor-heading strong{color:var(--md-sys-color-on-surface);font-weight:600}.compose-preset-actions,.compose-item-actions{display:flex;flex-wrap:wrap;gap:8px}.compose-preset-actions button,.compose-item-actions button{min-height:36px;white-space:normal;text-align:left;line-height:1.2}.compose-preset-actions--inline{margin:0 0 12px}.compose-editor-heading{margin-bottom:12px}.renderer-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px}.renderer-errors{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container);border:1px solid var(--md-sys-color-error);padding:8px 12px;border-radius:6px;font-size:.85rem}.renderer-preview{margin-top:8px;padding:8px 12px;background:var(--md-sys-color-surface-container-low);border:1px solid var(--md-sys-color-outline-variant);border-radius:6px}.renderer-preview-list{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.renderer-preview-list .pfx-compose{display:inline-flex;gap:6px;align-items:center}.pfx-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;border-radius:10px;font-size:12px;line-height:1}.pfx-badge-icon{font-size:14px;width:14px;height:14px}.pfx-badge--plain{border:1px solid transparent;color:inherit;background:transparent}.pfx-badge--outlined{border:1px solid var(--md-sys-color-outline-variant);color:var(--md-sys-color-on-surface);background:transparent}.pfx-badge--filled-primary{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pfx-badge--filled-accent{background:var(--md-sys-color-secondary);color:var(--md-sys-color-on-secondary)}.pfx-badge--filled-warn,.pfx-badge--filled-danger{background:var(--md-sys-color-error);color:var(--md-sys-color-on-error)}.pfx-badge--filled-success{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container)}.pfx-badge--filled-info{background:var(--md-sys-color-tertiary);color:var(--md-sys-color-on-tertiary)}.pfx-badge--filled-basic{background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface);border:1px solid var(--md-sys-color-outline-variant)}.pfx-badge--soft-primary{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.pfx-badge--soft-accent{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}.pfx-badge--soft-warn,.pfx-badge--soft-danger{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}.pfx-badge--soft-success,.pfx-badge--soft-info{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container)}.pfx-badge--soft-basic{background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface);border:1px solid var(--md-sys-color-outline-variant)}.pfx-cell-image{display:inline-block;border-radius:4px;object-fit:cover}.pfx-link{color:var(--md-sys-color-primary);text-decoration:underline;cursor:pointer}.pfx-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:10px;font-size:12px;border:1px solid transparent}.pfx-chip--plain{background:transparent;border-color:transparent;color:var(--md-sys-color-on-surface)}.pfx-chip--outlined{border-color:var(--md-sys-color-outline-variant);color:var(--md-sys-color-on-surface)}.pfx-chip--filled-primary{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pfx-chip--filled-accent{background:var(--md-sys-color-secondary);color:var(--md-sys-color-on-secondary)}.pfx-chip--filled-warn,.pfx-chip--filled-danger{background:var(--md-sys-color-error);color:var(--md-sys-color-on-error)}.pfx-chip--filled-success{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container)}.pfx-chip--filled-info{background:var(--md-sys-color-tertiary);color:var(--md-sys-color-on-tertiary)}.pfx-chip--filled-basic{background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface);border-color:var(--md-sys-color-outline-variant)}.pfx-chip--soft-primary{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.pfx-chip--soft-accent{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}.pfx-chip--soft-warn,.pfx-chip--soft-danger{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}.pfx-chip--soft-success,.pfx-chip--soft-info{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container)}.pfx-chip--soft-basic{background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface);border-color:var(--md-sys-color-outline-variant)}.pfx-progress{position:relative;width:120px;height:8px;background:var(--md-sys-color-surface-container-highest);border-radius:4px;overflow:hidden}.pfx-progress-bar{height:100%;background:var(--md-sys-color-primary)}.pfx-avatar{display:inline-flex;align-items:center;justify-content:center;background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface);border-radius:4px;overflow:hidden;font-weight:600;width:32px;height:32px}.pfx-avatar.shape-rounded{border-radius:8px}.pfx-avatar.shape-circle{border-radius:999px}.pfx-avatar--initials{text-transform:uppercase;font-size:12px}@media(max-width:768px){.master-detail-layout{flex-direction:column}.master-panel{flex:0 0 auto;max-height:300px}.form-row{flex-direction:column;gap:12px}.config-layout{flex-direction:column;gap:20px}.features-group{min-width:auto}.features-grid{grid-template-columns:1fr;gap:8px}.visibility-toggle-group .mat-button-toggle{min-width:80px;font-size:.875rem}}@media(max-width:480px){.visibility-toggle-group .mat-button-toggle{min-width:70px;font-size:.8rem}.alignment-toggle-group .mat-button-toggle{min-width:48px;padding:0 6px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.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: i1$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { 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: "component", type: i3.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], 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: MatFormFieldModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3$1.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: MatCardModule }, { kind: "component", type: i9.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i9.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i14.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i14.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4$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: i4$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i11.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i11.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "component", type: i9$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i6.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { 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: MatBadgeModule }, { kind: "directive", type: i15.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i5$1.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: DragDropModule }, { kind: "directive", type: i13.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i13.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i13.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: VisualFormulaBuilderComponent, selector: "visual-formula-builder", inputs: ["availableDataSchema", "currentFormula"], outputs: ["formulaChange", "generatedExpressionChange"] }, { kind: "component", type: ValueMappingEditorComponent, selector: "value-mapping-editor", inputs: ["currentMapping", "keyInputType", "labelKey", "labelValue"], outputs: ["mappingChange"] }, { kind: "component", type: DataFormatterComponent, selector: "data-formatter", inputs: ["columnType", "currentFormat"], outputs: ["formatChange"] }, { kind: "component", type: TableRatingCellComponent, selector: "praxis-table-rating", inputs: ["itemsCount", "value", "size", "ratingColor", "outlineColor", "ariaLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
14739
14739
  }
14740
14740
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ColumnsConfigEditorComponent, decorators: [{
14741
14741
  type: Component,
@@ -22742,7 +22742,7 @@ class ToolbarActionsEditorComponent {
22742
22742
  } }
22743
22743
  </form>
22744
22744
  </div>
22745
- `, isInline: true, styles: [":host{--tae-primary: var(--md-sys-color-primary);--tae-surface: var(--md-sys-color-surface);--tae-surface-low: var(--md-sys-color-surface-container-low);--tae-surface-variant: var(--md-sys-color-surface-variant);--tae-outline-variant: var(--md-sys-color-outline-variant);--tae-on-surface: var(--md-sys-color-on-surface);--tae-on-surface-variant: var(--md-sys-color-on-surface-variant)}.toolbar-actions-container{width:100%;padding:8px}.config-section{padding:16px}.section-hint{color:var(--tae-on-surface-variant);font-size:12px;margin-bottom:12px}.config-fields{display:flex;flex-direction:column;gap:16px;margin-top:16px}.nested-fields{display:flex;flex-direction:column;gap:12px;margin-left:24px;margin-top:12px;padding:16px;background-color:var(--tae-surface-variant);border-radius:8px}.action-section-title{width:100%;margin:12px 0 4px;font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--tae-on-surface-variant)}.help-icon-button{--mdc-icon-button-state-layer-size: 28px;--mdc-icon-button-icon-size: 18px;width:28px;height:28px;padding:0;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}.help-icon-button mat-icon{font-size:18px;line-height:18px;width:18px;height:18px}.action-field-error{color:var(--md-sys-color-error, #ba1a1a);font-weight:500}.action-global-fields .mat-mdc-form-field-icon-suffix{align-self:center}.toggle-field{display:flex;align-items:center;gap:8px}.section-icon{margin-right:8px;color:var(--tae-primary)}.subsection{margin-top:24px;padding:16px;border:1px solid var(--tae-outline-variant);border-radius:8px}.subsection h4{margin:0 0 16px;color:var(--tae-on-surface);font-weight:500}.actions-header{margin:16px 0;display:flex;justify-content:flex-start}.actions-list{display:flex;flex-direction:column;gap:8px;min-height:60px}.action-item{border:1px solid var(--tae-outline-variant);border-radius:8px;background-color:var(--tae-surface);overflow:hidden}.action-header{display:flex;align-items:center;padding:12px 16px;background-color:var(--tae-surface-low);cursor:move}.drag-handle{margin-right:8px;color:var(--tae-on-surface-variant);cursor:grab}.drag-handle:active{cursor:grabbing}.action-label{flex:1;margin-left:8px;font-weight:500}.action-controls{display:flex;gap:4px}.action-details{padding:16px;border-top:1px solid var(--tae-outline-variant);background-color:var(--tae-surface)}.action-form{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px}.action-global-fields{grid-column:1 / -1;padding:12px 14px;border:1px dashed var(--tae-outline-variant);border-radius:10px;background:var(--md-sys-color-surface-container)}.action-global-title{font-size:12px;font-weight:600;letter-spacing:.02em;text-transform:uppercase;color:var(--tae-on-surface-variant);margin-bottom:10px}.action-global-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px 16px}mat-form-field{width:100%}mat-expansion-panel{margin-bottom:8px;border-radius:8px;overflow:hidden}mat-expansion-panel-header{min-height:56px}mat-panel-description{color:var(--tae-on-surface-variant)}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:var(--md-sys-elevation-level3)}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.actions-list.cdk-drop-list-dragging .action-item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.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: i1$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1$1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2$1.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3$1.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: i4$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: i4$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i4$1.MatOptgroup, selector: "mat-optgroup", inputs: ["label", "disabled"], exportAs: ["matOptgroup"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i5$1.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: 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: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatDividerModule }, { 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: MatListModule }, { kind: "ngmodule", type: MatChipsModule }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i13.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i13.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i13.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "component", type: SurfaceOpenActionEditorComponent, selector: "praxis-surface-open-action-editor", inputs: ["value", "hostKind"], outputs: ["valueChange"] }] });
22745
+ `, isInline: true, styles: [":host{--tae-primary: var(--md-sys-color-primary);--tae-surface: var(--md-sys-color-surface);--tae-surface-low: var(--md-sys-color-surface-container-low);--tae-surface-variant: var(--md-sys-color-surface-variant);--tae-outline-variant: var(--md-sys-color-outline-variant);--tae-on-surface: var(--md-sys-color-on-surface);--tae-on-surface-variant: var(--md-sys-color-on-surface-variant)}.toolbar-actions-container{width:100%;padding:8px}.config-section{padding:16px}.section-hint{color:var(--tae-on-surface-variant);font-size:12px;margin-bottom:12px}.config-fields{display:flex;flex-direction:column;gap:16px;margin-top:16px}.nested-fields{display:flex;flex-direction:column;gap:12px;margin-left:24px;margin-top:12px;padding:16px;background-color:var(--tae-surface-variant);border-radius:8px}.action-section-title{width:100%;margin:12px 0 4px;font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--tae-on-surface-variant)}.help-icon-button{--mdc-icon-button-state-layer-size: 28px;--mdc-icon-button-icon-size: 18px;width:28px;height:28px;padding:0;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}.help-icon-button mat-icon{font-size:18px;line-height:18px;width:18px;height:18px}.action-field-error{color:var(--md-sys-color-error, #ba1a1a);font-weight:500}.action-global-fields .mat-mdc-form-field-icon-suffix{align-self:center}.toggle-field{display:flex;align-items:center;gap:8px}.section-icon{margin-right:8px;color:var(--tae-primary)}.subsection{margin-top:24px;padding:16px;border:1px solid var(--tae-outline-variant);border-radius:8px}.subsection h4{margin:0 0 16px;color:var(--tae-on-surface);font-weight:500}.actions-header{margin:16px 0;display:flex;justify-content:flex-start}.actions-list{display:flex;flex-direction:column;gap:8px;min-height:60px}.action-item{border:1px solid var(--tae-outline-variant);border-radius:8px;background-color:var(--tae-surface);overflow:hidden}.action-header{display:flex;align-items:center;padding:12px 16px;background-color:var(--tae-surface-low);cursor:move}.drag-handle{margin-right:8px;color:var(--tae-on-surface-variant);cursor:grab}.drag-handle:active{cursor:grabbing}.action-label{flex:1;margin-left:8px;font-weight:500}.action-controls{display:flex;gap:4px}.action-details{padding:16px;border-top:1px solid var(--tae-outline-variant);background-color:var(--tae-surface)}.action-form{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px}.action-global-fields{grid-column:1 / -1;padding:12px 14px;border:1px dashed var(--tae-outline-variant);border-radius:10px;background:var(--md-sys-color-surface-container)}.action-global-title{font-size:12px;font-weight:600;letter-spacing:.02em;text-transform:uppercase;color:var(--tae-on-surface-variant);margin-bottom:10px}.action-global-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px 16px}mat-form-field{width:100%}mat-expansion-panel{margin-bottom:8px;border-radius:8px;overflow:hidden}mat-expansion-panel-header{min-height:56px}mat-panel-description{color:var(--tae-on-surface-variant)}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:var(--md-sys-elevation-level3)}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.actions-list.cdk-drop-list-dragging .action-item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.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: i1$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1$1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2$1.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3$1.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: i4$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: i4$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i4$1.MatOptgroup, selector: "mat-optgroup", inputs: ["label", "disabled"], exportAs: ["matOptgroup"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i5$1.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: 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: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatDividerModule }, { 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: MatListModule }, { kind: "ngmodule", type: MatChipsModule }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i13.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i13.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i13.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "component", type: SurfaceOpenActionEditorComponent, selector: "praxis-surface-open-action-editor", inputs: ["value", "hostKind"], outputs: ["valueChange"] }] });
22746
22746
  }
22747
22747
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ToolbarActionsEditorComponent, decorators: [{
22748
22748
  type: Component,
@@ -27984,7 +27984,7 @@ class FilterSettingsComponent {
27984
27984
  // In a real implementation, this would trigger schema reload in PraxisFilter
27985
27985
  }
27986
27986
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: FilterSettingsComponent, deps: [{ token: i1$1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
27987
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: FilterSettingsComponent, isStandalone: true, selector: "filter-settings", inputs: { metadata: "metadata", metadataSource: "metadataSource", metadataLoading: "metadataLoading", metadataErrorMsg: "metadataErrorMsg", settings: "settings", configKey: "configKey" }, outputs: { settingsChange: "settingsChange" }, usesOnChanges: true, ngImport: i0, template: "<form [formGroup]=\"form\">\n <mat-tab-group (selectedTabChange)=\"onTabChange($event)\">\n <mat-tab label=\"Sempre Vis\u00EDveis\">\n <div class=\"always-visible-tab-flow\">\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"full-width\">\n <mat-label>Campos sempre vis\u00EDveis</mat-label>\n <mat-select\n formControlName=\"alwaysVisibleFields\"\n multiple\n >\n @for (meta of filteredAlwaysVisibleMetadata(); track trackFieldMetadataByName($index, meta)) {\n <mat-option\n [value]=\"meta.name\"\n >\n {{ meta.label || meta.name }}\n </mat-option>\n }\n </mat-select>\n @if (metadataLoading && metadataSource === 'filter-dto') {\n <mat-hint>\n Carregando campos do DTO de filtro...\n </mat-hint>\n }\n @if (metadataErrorMsg) {\n <mat-error>{{ metadataErrorMsg }}</mat-error>\n }\n @if (!metadataLoading && !metadataErrorMsg && !metadata.length && metadataSource === 'filter-dto') {\n <mat-hint\n >\n Nenhum campo do DTO de filtro dispon\u00EDvel para este recurso.\n </mat-hint>\n }\n @if (!metadataLoading && !metadataErrorMsg && metadata.length && !hasAlwaysVisibleMetadataResults() && alwaysVisibleFieldSearchText) {\n <mat-hint\n >\n Nenhum campo encontrado para \"{{ alwaysVisibleFieldSearchText }}\".\n </mat-hint>\n }\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Escolha os campos que aparecem sempre na barra de filtros.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Buscar campo</mat-label>\n <input\n matInput\n [ngModel]=\"alwaysVisibleFieldSearchText\"\n (ngModelChange)=\"onAlwaysVisibleFieldSearchChange($event)\"\n [ngModelOptions]=\"{standalone: true}\"\n placeholder=\"Filtrar por nome ou label\"\n />\n @if (alwaysVisibleFieldSearchText) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"clearAlwaysVisibleFieldSearch()\"\n aria-label=\"Limpar busca de campo\"\n >\n <mat-icon [praxisIcon]=\"'close'\"></mat-icon>\n </button>\n }\n </mat-form-field>\n <p class=\"field-hint\">\n {{ alwaysVisibleSelectionCount() }} campo(s) selecionado(s).\n </p>\n <div class=\"always-visible-context\">\n <div class=\"always-visible-summary\" role=\"status\" aria-live=\"polite\">\n <div class=\"always-visible-summary-item\">\n <span class=\"summary-value\">{{ alwaysVisibleSelectionCount() }}</span>\n <span class=\"summary-label\">campos fixos</span>\n </div>\n <div class=\"always-visible-summary-item\">\n <span class=\"summary-value\">{{ activeAlwaysVisibleOverrideCount() }}</span>\n <span class=\"summary-label\">overrides ativos</span>\n </div>\n </div>\n <nav\n class=\"always-visible-quick-nav\"\n aria-label=\"Navega\u00E7\u00E3o r\u00E1pida da se\u00E7\u00E3o Sempre Vis\u00EDveis\"\n >\n <button\n mat-stroked-button\n type=\"button\"\n [class.quick-nav-active]=\"isAlwaysVisibleSectionActive('always-visible-order')\"\n [attr.aria-current]=\"isAlwaysVisibleSectionActive('always-visible-order') ? 'location' : null\"\n aria-controls=\"always-visible-order\"\n (click)=\"scrollToAlwaysVisibleSection('always-visible-order')\"\n >\n Ordem\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n [class.quick-nav-active]=\"isAlwaysVisibleSectionActive('always-visible-metadata')\"\n [attr.aria-current]=\"isAlwaysVisibleSectionActive('always-visible-metadata') ? 'location' : null\"\n aria-controls=\"always-visible-metadata\"\n (click)=\"scrollToAlwaysVisibleSection('always-visible-metadata')\"\n >\n Metadados\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n [class.quick-nav-active]=\"isAlwaysVisibleSectionActive('always-visible-json')\"\n [attr.aria-current]=\"isAlwaysVisibleSectionActive('always-visible-json') ? 'location' : null\"\n aria-controls=\"always-visible-json\"\n (click)=\"scrollToAlwaysVisibleSection('always-visible-json')\"\n >\n JSON\n </button>\n </nav>\n </div>\n\n <div\n id=\"always-visible-order\"\n class=\"options options-compact-flow always-visible-section-anchor\"\n [class.section-active]=\"isAlwaysVisibleSectionActive('always-visible-order')\"\n [style.--section-enter-delay]=\"sectionEnterDelay('always-visible-order')\"\n tabindex=\"-1\"\n (focusin)=\"onAlwaysVisibleSectionFocus('always-visible-order')\"\n >\n <div class=\"options-header\">\n <h4 class=\"section-title\">Ordem dos campos</h4>\n <p class=\"section-help\">\n Reordene no formato mais pr\u00F3ximo da toolbar real: faixa de a\u00E7\u00F5es, barra inline e grid.\n </p>\n </div>\n <div class=\"order-layout-toolbar\">\n <mat-button-toggle-group\n class=\"order-viewport-toggle-group\"\n [value]=\"orderPreviewViewport\"\n (change)=\"onAlwaysVisibleViewportChange($event.value)\"\n aria-label=\"Largura simulada da toolbar\"\n >\n @for (viewport of alwaysVisibleViewports; track viewport) {\n <mat-button-toggle\n [value]=\"viewport\"\n [attr.aria-label]=\"alwaysVisibleViewportHint(viewport)\"\n >\n {{ alwaysVisibleViewportLabel(viewport) }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n <span class=\"order-viewport-caption\">\n {{ alwaysVisibleViewportWidth() }}px\n </span>\n </div>\n <p class=\"section-help\">\n Ajuste o viewport para simular a quebra real das linhas na toolbar.\n </p>\n <div class=\"order-layout-viewport\">\n <div\n class=\"order-layout-frame\"\n [attr.data-viewport]=\"orderPreviewViewport\"\n [style.maxWidth.px]=\"alwaysVisibleViewportWidth()\"\n >\n <div class=\"order-layout-composer\" cdkDropListGroup>\n @for (lane of alwaysVisibleLayoutLanes; track lane) {\n <section\n class=\"order-lane\"\n [attr.data-lane]=\"lane\"\n >\n @if (alwaysVisibleLaneItems(lane); as laneItems) {\n <header class=\"order-lane-header\">\n <div class=\"order-lane-title-block\">\n <h5 class=\"order-lane-title\">{{ alwaysVisibleLaneLabel(lane) }}</h5>\n <p class=\"order-lane-help\">{{ alwaysVisibleLaneHint(lane) }}</p>\n </div>\n <span class=\"order-lane-count\">{{ laneItems.length }}</span>\n </header>\n <div\n cdkDropList\n class=\"order-lane-canvas\"\n [id]=\"alwaysVisibleLaneDropListId(lane)\"\n [class.is-empty]=\"!laneItems.length\"\n [cdkDropListData]=\"laneItems\"\n [cdkDropListEnterPredicate]=\"allowAlwaysVisibleLaneEnter\"\n cdkDropListOrientation=\"horizontal\"\n [attr.aria-label]=\"'Faixa ' + alwaysVisibleLaneLabel(lane)\"\n (cdkDropListDropped)=\"dropAlwaysVisibleLane(lane, $event)\"\n >\n @for (item of laneItems; track trackAlwaysVisibleLayoutItemByName(i, item); let i = $index) {\n <button\n type=\"button\"\n class=\"order-pill\"\n cdkDrag\n [cdkDragData]=\"item\"\n [attr.aria-label]=\"alwaysVisibleLayoutItemAriaLabel(item, lane, i, laneItems.length)\"\n (keydown)=\"onAlwaysVisibleLaneItemKeydown($event, lane, item.name)\"\n >\n <mat-icon [praxisIcon]=\"'drag_indicator'\" cdkDragHandle></mat-icon>\n <span class=\"order-pill-label\">{{ item.label }}</span>\n <span class=\"order-pill-badges\">\n <span class=\"order-pill-chip\">{{ item.controlTypeLabel }}</span>\n <span class=\"order-pill-chip order-pill-chip-width\">{{ item.widthHint }}</span>\n @if (item.hasOverride) {\n <span class=\"order-pill-chip order-pill-chip-override\">\n Override\n </span>\n }\n </span>\n </button>\n }\n @if (!laneItems.length) {\n <p class=\"order-lane-empty\">\n {{ alwaysVisibleLaneEmptyHint(lane) }}\n </p>\n }\n </div>\n }\n </section>\n }\n </div>\n </div>\n </div>\n <p class=\"field-hint\">\n Acessibilidade: use Alt/Ctrl + setas para reordenar dentro de cada faixa. O drag & drop n\u00E3o mistura faixas.\n </p>\n @if (!form.controls.alwaysVisibleFields.value?.length) {\n <p class=\"section-help\">\n Nenhum campo selecionado. Use o seletor acima para adicionar.\n </p>\n }\n </div>\n\n <mat-divider class=\"section-divider\" role=\"presentation\"></mat-divider>\n\n <div\n id=\"always-visible-metadata\"\n class=\"options options-compact-flow always-visible-section-anchor\"\n [class.section-active]=\"isAlwaysVisibleSectionActive('always-visible-metadata')\"\n [style.--section-enter-delay]=\"sectionEnterDelay('always-visible-metadata')\"\n tabindex=\"-1\"\n (focusin)=\"onAlwaysVisibleSectionFocus('always-visible-metadata')\"\n >\n <div class=\"options-header\">\n <h4 class=\"section-title\">Editor visual de metadados</h4>\n <p class=\"section-help\">\n Edite os principais ajustes dos campos sempre vis\u00EDveis no fluxo visual. Para propriedades avan\u00E7adas, use o JSON abaixo.\n </p>\n </div>\n @if (!form.controls.alwaysVisibleFields.value?.length) {\n <p class=\"section-help\">\n Selecione campos em \u201CCampos sempre vis\u00EDveis\u201D para habilitar a edi\u00E7\u00E3o visual.\n </p>\n }\n @if (form.controls.alwaysVisibleFields.value?.length) {\n <div class=\"metadata-card-grid\">\n @for (name of form.controls.alwaysVisibleFields.value; track name) {\n <article class=\"metadata-card\">\n <header class=\"metadata-card-header\">\n <div class=\"metadata-card-title\">\n <strong>{{ getFieldLabel(name) }}</strong>\n <span>{{ name }}</span>\n </div>\n <div class=\"metadata-card-badges\">\n <span class=\"metadata-chip\">{{ getAlwaysVisibleControlTypeLabel(name) }}</span>\n @if (hasAlwaysVisibleOverride(name)) {\n <span class=\"metadata-chip metadata-chip-override\">\n Override ativo\n </span>\n }\n </div>\n </header>\n <p class=\"metadata-card-summary\">{{ getAlwaysVisibleOverridePreview(name) }}</p>\n <div class=\"metadata-card-actions\">\n <button mat-stroked-button type=\"button\" (click)=\"openAlwaysVisibleMetadataEditor(name)\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n Editar campo\n </button>\n <button\n mat-button\n type=\"button\"\n color=\"warn\"\n (click)=\"clearAlwaysVisibleOverride(name)\"\n [disabled]=\"!hasAlwaysVisibleOverride(name)\"\n >\n Limpar override\n </button>\n </div>\n </article>\n }\n </div>\n }\n </div>\n\n <mat-divider class=\"section-divider\" role=\"presentation\"></mat-divider>\n\n <div\n id=\"always-visible-json\"\n class=\"always-visible-section-anchor\"\n [class.section-active]=\"isAlwaysVisibleSectionActive('always-visible-json')\"\n [style.--section-enter-delay]=\"sectionEnterDelay('always-visible-json')\"\n tabindex=\"-1\"\n (focusin)=\"onAlwaysVisibleSectionFocus('always-visible-json')\"\n >\n <mat-expansion-panel\n class=\"options options-compact-flow options-advanced-json\"\n [expanded]=\"!!alwaysVisibleOverridesErrorMsg\"\n >\n <mat-expansion-panel-header>\n <mat-panel-title>Avan\u00E7ado (JSON opcional)</mat-panel-title>\n <mat-panel-description>Para ajustes n\u00E3o expostos no editor visual</mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"options-header\">\n <h4 class=\"section-title\">Modo avan\u00E7ado (JSON)</h4>\n <p class=\"section-help\">\n Use JSON para ajustes em lote ou propriedades ainda n\u00E3o expostas no editor visual.\n </p>\n </div>\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>alwaysVisibleFieldMetadataOverrides (JSON)</mat-label>\n <textarea\n matInput\n rows=\"8\"\n [(ngModel)]=\"alwaysVisibleOverridesJsonText\"\n [ngModelOptions]=\"{standalone: true}\"\n ></textarea>\n </mat-form-field>\n <div class=\"actions\">\n <button mat-stroked-button type=\"button\" (click)=\"formatAlwaysVisibleOverridesJson()\">Formatar</button>\n <button mat-stroked-button color=\"primary\" type=\"button\" (click)=\"applyAlwaysVisibleOverridesJson()\">\n Validar e carregar no editor\n </button>\n </div>\n <p class=\"json-tip\">\n Esta a\u00E7\u00E3o n\u00E3o persiste a configura\u00E7\u00E3o. Para persistir, use \u201CSalvar &amp; Fechar\u201D no rodap\u00E9.\n </p>\n <p class=\"json-tip\">\n Exemplo:\n &#123;\"status\":&#123;\"controlType\":\"inlineSelect\",\"clearButton\":&#123;\"enabled\":true&#125;,\"inlineAutoSize\":&#123;\"minWidth\":140,\"maxWidth\":280&#125;&#125;&#125;\n </p>\n @if (alwaysVisibleOverridesErrorMsg) {\n <p class=\"json-error\" role=\"status\" aria-live=\"polite\">{{ alwaysVisibleOverridesErrorMsg }}</p>\n }\n </mat-expansion-panel>\n </div>\n </div>\n </mat-tab>\n <mat-tab label=\"Layout\">\n <div class=\"options\">\n <div class=\"options-header\">\n <h4 class=\"section-title\">Grid e responsividade</h4>\n <p class=\"section-help\">\n Ajuste largura m\u00EDnima e n\u00FAmero de colunas por breakpoint. Em telas menores que 600px, o layout usa 1 coluna.\n </p>\n </div>\n <div class=\"layout-preview-section\" aria-live=\"polite\">\n <h5 class=\"layout-preview-title\">Pr\u00E9-visualiza\u00E7\u00E3o do grid</h5>\n <p class=\"section-help\">\n Simula\u00E7\u00E3o com {{ layoutPreviewFields.length }} campos e largura m\u00EDnima de {{ layoutMinWidth() }}px por campo.\n </p>\n <div class=\"layout-preview-cards\">\n <article class=\"layout-preview-card\">\n <div class=\"layout-preview-header\">\n <strong>Mobile</strong>\n <span>&lt;600px \u00B7 {{ layoutColsFor('sm') }} coluna</span>\n </div>\n <div class=\"layout-mini-grid\" [style.gridTemplateColumns]=\"'repeat(' + layoutColsFor('sm') + ', minmax(0, 1fr))'\">\n @for (field of layoutPreviewFields; track field) {\n <span>{{ field }}</span>\n }\n </div>\n </article>\n <article class=\"layout-preview-card\">\n <div class=\"layout-preview-header\">\n <strong>Tablet</strong>\n <span>&ge;600px \u00B7 {{ layoutColsFor('md') }} colunas</span>\n </div>\n <div class=\"layout-mini-grid\" [style.gridTemplateColumns]=\"'repeat(' + layoutColsFor('md') + ', minmax(0, 1fr))'\">\n @for (field of layoutPreviewFields; track field) {\n <span>{{ field }}</span>\n }\n </div>\n </article>\n <article class=\"layout-preview-card\">\n <div class=\"layout-preview-header\">\n <strong>Desktop</strong>\n <span>&ge;960px \u00B7 {{ layoutColsFor('lg') }} colunas</span>\n </div>\n <div class=\"layout-mini-grid\" [style.gridTemplateColumns]=\"'repeat(' + layoutColsFor('lg') + ', minmax(0, 1fr))'\">\n @for (field of layoutPreviewFields; track field) {\n <span>{{ field }}</span>\n }\n </div>\n </article>\n </div>\n </div>\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Largura m\u00EDnima por campo (px)</mat-label>\n <input\n matInput\n type=\"number\"\n formControlName=\"alwaysMinWidth\"\n min=\"180\"\n max=\"480\"\n step=\"1\"\n inputmode=\"numeric\"\n praxisNumberWheelBlur\n (blur)=\"normalizeLayoutControl('alwaysMinWidth')\"\n />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n aria-label=\"Ajuda sobre largura m\u00EDnima por campo\"\n matTooltip=\"Define a largura m\u00EDnima de cada campo no grid. Recomendado entre 200 e 300px.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n <mat-hint align=\"start\">Intervalo permitido: 180 a 480px.</mat-hint>\n <mat-hint align=\"end\">Recomendado: 200 a 300px.</mat-hint>\n @if (layoutControlError('alwaysMinWidth'); as error) {\n <mat-error>{{ error }}</mat-error>\n }\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Colunas em tablet (&ge;600px)</mat-label>\n <input\n matInput\n type=\"number\"\n formControlName=\"alwaysColsMd\"\n min=\"1\"\n max=\"3\"\n step=\"1\"\n inputmode=\"numeric\"\n praxisNumberWheelBlur\n (blur)=\"normalizeLayoutControl('alwaysColsMd')\"\n />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n aria-label=\"Ajuda sobre colunas em tablet\"\n matTooltip=\"Define quantas colunas aparecem em telas m\u00E9dias (a partir de 600px).\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n <mat-hint align=\"start\">Mobile (&lt;600px) usa 1 coluna.</mat-hint>\n <mat-hint align=\"end\">Intervalo: 1 a 3 colunas.</mat-hint>\n @if (layoutControlError('alwaysColsMd'); as error) {\n <mat-error>{{ error }}</mat-error>\n }\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Colunas em desktop (&ge;960px)</mat-label>\n <input\n matInput\n type=\"number\"\n formControlName=\"alwaysColsLg\"\n min=\"1\"\n max=\"4\"\n step=\"1\"\n inputmode=\"numeric\"\n praxisNumberWheelBlur\n (blur)=\"normalizeLayoutControl('alwaysColsLg')\"\n />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n aria-label=\"Ajuda sobre colunas em desktop\"\n matTooltip=\"Define quantas colunas aparecem em telas grandes (a partir de 960px).\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n <mat-hint align=\"start\">Use mais colunas apenas quando houver espa\u00E7o.</mat-hint>\n <mat-hint align=\"end\">Intervalo: 1 a 4 colunas.</mat-hint>\n @if (layoutControlError('alwaysColsLg'); as error) {\n <mat-error>{{ error }}</mat-error>\n }\n </mat-form-field>\n </div>\n </mat-tab>\n <mat-tab label=\"Booleanos\">\n <div class=\"options\">\n @if (!hasBooleanFieldMetadata()) {\n <p class=\"section-help\">\n Nenhum campo booleano foi detectado no schema atual. Estas prefer\u00EAncias ser\u00E3o aplicadas quando houver\n campos `toggle`/boolean no filtro.\n </p>\n }\n @if (hasBooleanFieldMetadata()) {\n <div class=\"toggle-preview-section\">\n <h4>Visualiza\u00E7\u00E3o dos Booleanos</h4>\n <p class=\"section-help\">Veja o comportamento dos booleanos inline (com texto ou compacto) e a posi\u00E7\u00E3o na barra.</p>\n <div class=\"preview-container\">\n <div class=\"preview-item\">\n <strong>Grade Principal</strong>\n <div class=\"mock-grid\" [class.with-booleans]=\"!form.controls.placeBooleansInActions.value\">\n <div class=\"mock-field\">Campo 1</div>\n <div class=\"mock-field\">Campo 2</div>\n @if (!form.controls.placeBooleansInActions.value) {\n <div class=\"mock-pill\"\n [class.compact]=\"!form.controls.showToggleLabels.value\">\n <mat-slide-toggle [checked]=\"true\"></mat-slide-toggle>\n @if (form.controls.showToggleLabels.value) {\n <span>Ativo</span>\n }\n </div>\n }\n </div>\n </div>\n <div class=\"preview-item\">\n <strong>\u00C1rea de A\u00E7\u00F5es</strong>\n <div class=\"mock-actions\" [class.with-booleans]=\"form.controls.placeBooleansInActions.value\">\n <button mat-icon-button><mat-icon>search</mat-icon></button>\n <button mat-icon-button><mat-icon>tune</mat-icon></button>\n @if (form.controls.placeBooleansInActions.value) {\n <div class=\"mock-pill\"\n [class.compact]=\"!form.controls.showToggleLabels.value\">\n <mat-slide-toggle [checked]=\"true\"></mat-slide-toggle>\n @if (form.controls.showToggleLabels.value) {\n <span>Ativo</span>\n }\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n }\n <mat-checkbox formControlName=\"placeBooleansInActions\">\n <mat-icon>swap_horiz</mat-icon>\n Posicionar booleanos na \u00E1rea de a\u00E7\u00F5es\n </mat-checkbox>\n <p class=\"field-hint\">Move os booleanos da grade para os bot\u00F5es de a\u00E7\u00E3o, liberando espa\u00E7o horizontal.</p>\n <mat-checkbox formControlName=\"showToggleLabels\">\n <mat-icon>text_fields</mat-icon>\n Mostrar texto nos booleanos inline\n </mat-checkbox>\n <p class=\"field-hint\">Quando desativado, os booleanos ficam em modo compacto (somente controle, sem texto).</p>\n </div>\n </mat-tab>\n <mat-tab label=\"Op\u00E7\u00F5es\">\n <div class=\"options\">\n <div class=\"options-header\">\n <h4 class=\"section-title\">Painel Avan\u00E7ado</h4>\n <p class=\"section-help\">Apar\u00EAncia e comportamento do painel de filtros avan\u00E7ados.</p>\n </div>\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Modo de abertura do Avan\u00E7ado</mat-label>\n <mat-select formControlName=\"advancedOpenMode\">\n <mat-option value=\"modal\">Modal (padr\u00E3o)</mat-option>\n <mat-option value=\"drawer\">Drawer (direita)</mat-option>\n </mat-select>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Escolha como o painel de filtros avan\u00E7ados ser\u00E1 exibido: centralizado ou lateral.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-checkbox formControlName=\"advancedClearButtonsEnabled\">\n Mostrar bot\u00E3o de limpar nos campos\n </mat-checkbox>\n <p class=\"field-hint\">\n Desative para ocultar o bot\u00E3o de limpar nos campos do painel avan\u00E7ado.\n </p>\n\n <mat-checkbox formControlName=\"useInlineSearchableSelectVariant\">\n Compactar selects com busca/async/autocomplete na barra inline\n </mat-checkbox>\n <p class=\"field-hint\">\n Padr\u00E3o do filtro din\u00E2mico. Desative apenas quando o host precisar preservar o renderer dedicado por compatibilidade, performance ou comportamento legado. O lookup de entidade inline \u00E9 configurado por controlType expl\u00EDcito (`inlineEntityLookup`).\n </p>\n\n <mat-checkbox formControlName=\"useInlineRangeVariant\">\n Compactar range slider na barra inline\n </mat-checkbox>\n <p class=\"field-hint\">\n Usa o componente inline em formato chip + popover para rangeSlider (single e faixa).\n </p>\n\n <mat-checkbox formControlName=\"useInlineDateVariant\">\n Compactar campos de data na barra inline\n </mat-checkbox>\n <p class=\"field-hint\">\n Usa o componente inline dedicado para date/dateInput/datepicker, com largura por conte\u00FAdo e placeholder compacto.\n </p>\n\n <mat-checkbox formControlName=\"useInlineDateRangeVariant\">\n Compactar intervalo de datas na barra inline\n </mat-checkbox>\n <p class=\"field-hint\">\n Padr\u00E3o do filtro din\u00E2mico para dateRange/daterange. Desative apenas para preservar o renderer tradicional em hosts legados.\n </p>\n\n <mat-checkbox formControlName=\"useInlineTimeVariant\">\n Compactar campos de horario na barra inline\n </mat-checkbox>\n <p class=\"field-hint\">\n Padr\u00E3o do filtro din\u00E2mico para time/timePicker, com largura por conteudo e clear rapido. Desative apenas para manter a experi\u00EAncia legada.\n </p>\n\n <mat-checkbox formControlName=\"useInlineTimeRangeVariant\">\n Compactar intervalo de horario na barra inline\n </mat-checkbox>\n <p class=\"field-hint\">\n Padr\u00E3o do filtro din\u00E2mico para timeRange/timerange. Desative apenas para preservar o renderer tradicional em hosts legados.\n </p>\n\n <mat-checkbox formControlName=\"useInlineTreeSelectVariant\">\n Compactar tree select na barra inline\n </mat-checkbox>\n <p class=\"field-hint\">\n Padr\u00E3o do filtro din\u00E2mico para treeSelect na faixa compacta. Desative apenas quando o host depender do renderer dedicado. multiSelectTree mant\u00E9m o componente dedicado.\n </p>\n\n <mat-checkbox formControlName=\"confirmTagDelete\">Confirmar exclus\u00E3o de atalho</mat-checkbox>\n <p class=\"field-hint\">Solicita confirma\u00E7\u00E3o antes de apagar atalhos salvos.</p>\n\n <div class=\"options\">\n <h4>Tema dos Atalhos (Tags)</h4>\n\n <!-- Preview Section -->\n <div class=\"preview-section\" [class.mdc-theme-dark]=\"previewDarkMode\" [class.dark-mode]=\"previewDarkMode\">\n <div class=\"preview-controls\">\n <span class=\"preview-label\">Pr\u00E9-visualiza\u00E7\u00E3o</span>\n <button mat-icon-button (click)=\"previewDarkMode = !previewDarkMode\"\n [matTooltip]=\"previewDarkMode ? 'Mudar para fundo claro' : 'Mudar para fundo escuro'\">\n <mat-icon>{{ previewDarkMode ? 'light_mode' : 'dark_mode' }}</mat-icon>\n </button>\n </div>\n\n <div class=\"preview-chips praxis-filter-tags\"\n [class.outlined]=\"form.controls.tagVariant.value === 'outlined'\"\n [class.tag-color-basic]=\"form.controls.tagColor.value === 'basic'\"\n [class.tag-color-primary]=\"form.controls.tagColor.value === 'primary'\"\n [class.tag-color-accent]=\"form.controls.tagColor.value === 'accent'\"\n [class.tag-color-warn]=\"form.controls.tagColor.value === 'warn'\">\n <mat-chip-set>\n <!-- Inactive Chip -->\n <mat-chip\n [color]=\"form.controls.tagVariant.value === 'outlined' || form.controls.tagColor.value === 'basic' ? null : form.controls.tagColor.value\"\n [highlighted]=\"form.controls.tagVariant.value === 'filled' && form.controls.tagColor.value !== 'basic'\">\n Atalho Inativo\n </mat-chip>\n\n <!-- Active Chip -->\n <mat-chip class=\"active\"\n [color]=\"form.controls.tagVariant.value === 'outlined' || form.controls.tagColor.value === 'basic' ? null : form.controls.tagColor.value\"\n [highlighted]=\"form.controls.tagVariant.value === 'filled' && form.controls.tagColor.value !== 'basic'\">\n <mat-icon matChipAvatar>check</mat-icon>\n Atalho Ativo\n <button matChipTrailingIcon mat-icon-button\n [color]=\"form.controls.tagButtonColor.value === 'basic' ? null : form.controls.tagButtonColor.value\">\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n </mat-chip>\n </mat-chip-set>\n </div>\n\n @if (getContrastWarning(); as warning) {\n <div class=\"contrast-warning\">\n <mat-icon>warning</mat-icon>\n <span>{{ warning }}</span>\n </div>\n }\n </div>\n\n <!-- Reordered Fields -->\n <mat-form-field appearance=\"outline\">\n <mat-label>Variante do atalho</mat-label>\n <mat-select formControlName=\"tagVariant\">\n <mat-option value=\"filled\">Filled (Preenchido)</mat-option>\n <mat-option value=\"outlined\">Outlined (Contorno)</mat-option>\n </mat-select>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Define o estilo base do atalho.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do atalho</mat-label>\n <mat-select formControlName=\"tagColor\">\n <mat-option value=\"primary\">Primary</mat-option>\n <mat-option value=\"accent\">Accent</mat-option>\n <mat-option value=\"warn\">Warn</mat-option>\n <mat-option value=\"basic\">Basic</mat-option>\n </mat-select>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Cor de fundo (Filled) ou de contorno (Outlined).\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do bot\u00E3o do menu do atalho</mat-label>\n <mat-select formControlName=\"tagButtonColor\">\n <mat-option value=\"basic\">Basic</mat-option>\n <mat-option value=\"primary\">Primary</mat-option>\n <mat-option value=\"accent\">Accent</mat-option>\n <mat-option value=\"warn\">Warn</mat-option>\n </mat-select>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Cor do bot\u00E3o de dropdown dentro do atalho ativo.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n </div>\n\n <div class=\"options\">\n <h4>Tema dos bot\u00F5es de a\u00E7\u00E3o</h4>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor dos bot\u00F5es</mat-label>\n <mat-select formControlName=\"actionsButtonColor\">\n <mat-option value=\"basic\">Basic</mat-option>\n <mat-option value=\"primary\">Primary</mat-option>\n <mat-option value=\"accent\">Accent</mat-option>\n <mat-option value=\"warn\">Warn</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Variante dos bot\u00F5es</mat-label>\n <mat-select formControlName=\"actionsVariant\">\n <mat-option value=\"standard\">Standard</mat-option>\n <mat-option value=\"outlined\">Outlined</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"options\">\n <h4>Predefini\u00E7\u00F5es de tema</h4>\n <div class=\"preset-grid\">\n @for (p of presets; track p) {\n <button\n type=\"button\"\n class=\"preset-card\"\n (click)=\"applyPreset(p.key)\"\n [class.preset-active]=\"isPresetActive(p.key)\"\n [attr.aria-pressed]=\"isPresetActive(p.key)\"\n [attr.aria-label]=\"'Aplicar predefini\u00E7\u00E3o: ' + p.label\"\n >\n <div class=\"preset-preview\" [ngClass]=\"p.previewClass\"></div>\n <div class=\"preset-info\">\n <span class=\"preset-name\">{{ p.label }}</span>\n <span class=\"preset-desc\">{{ p.description }}</span>\n </div>\n </button>\n }\n </div>\n <button mat-button color=\"warn\" (click)=\"resetPreferences()\" class=\"restore-btn\">\n Restaurar padr\u00E3o\n </button>\n </div>\n </div>\n </mat-tab>\n @if (configKey) {\n <mat-tab label=\"Atalhos\">\n <div class=\"options\">\n <p class=\"section-help\">Os atalhos s\u00E3o salvos por chave de configura\u00E7\u00E3o e compartilhados entre sess\u00F5es.</p>\n <div class=\"tags-header\">\n <span><strong>Atalhos salvos</strong></span>\n <span class=\"spacer\"></span>\n <button mat-stroked-button color=\"warn\" (click)=\"clearTags()\">Apagar tudo</button>\n </div>\n <div class=\"new-tag\">\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>R\u00F3tulo do novo atalho</mat-label>\n <input matInput [(ngModel)]=\"newTagLabel\" [ngModelOptions]=\"{standalone: true}\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Patch (JSON, opcional)</mat-label>\n <textarea matInput rows=\"3\" [(ngModel)]=\"newTagPatchText\" [ngModelOptions]=\"{standalone: true}\"></textarea>\n </mat-form-field>\n <div>\n <button mat-stroked-button color=\"primary\" (click)=\"addTag()\">Adicionar</button>\n @if (hasCurrentDto()) {\n <button mat-stroked-button (click)=\"addTagFromCurrent()\">Adicionar a partir dos filtros atuais</button>\n }\n </div>\n <div>\n <button mat-stroked-button color=\"primary\" (click)=\"importTags()\">Importar</button>\n <button mat-stroked-button (click)=\"loadTags()\">Recarregar</button>\n <button mat-stroked-button (click)=\"saveTags()\">Salvar</button>\n </div>\n </div>\n </div>\n </mat-tab>\n }\n <mat-tab label=\"JSON\">\n <div class=\"options\">\n <p><strong>Configura\u00E7\u00E3o atual (somente leitura)</strong></p>\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Atual</mat-label>\n <textarea matInput rows=\"8\" [value]=\"effectiveJson\" readonly></textarea>\n </mat-form-field>\n\n <p><strong>Editar JSON</strong></p>\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>JSON</mat-label>\n <textarea matInput rows=\"12\" [(ngModel)]=\"settingsJsonText\" [ngModelOptions]=\"{standalone: true}\"></textarea>\n </mat-form-field>\n <div class=\"actions\">\n <button mat-stroked-button (click)=\"onJsonReload()\">Recarregar do formul\u00E1rio</button>\n <button mat-stroked-button (click)=\"onJsonFormat()\">Formatar</button>\n <button mat-stroked-button color=\"primary\" (click)=\"onJsonApply()\">Carregar JSON no formul\u00E1rio</button>\n </div>\n <p class=\"json-tip\">\n Dica: esta a\u00E7\u00E3o apenas atualiza o editor local. Para persistir, use os bot\u00F5es Aplicar ou\n Salvar &amp; Fechar no rodap\u00E9 do painel.\n </p>\n @if (jsonErrorMsg) {\n <p class=\"json-error\" role=\"status\" aria-live=\"polite\">{{ jsonErrorMsg }}</p>\n }\n </div>\n </mat-tab>\n <mat-tab label=\"Comportamento\">\n <div class=\"options\">\n <mat-checkbox formControlName=\"allowSaveTags\">Permitir salvar atalhos</mat-checkbox>\n </div>\n </mat-tab>\n <mat-tab label=\"Avan\u00E7ado\">\n <div class=\"options\">\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Debounce de altera\u00E7\u00F5es (ms)</mat-label>\n <input matInput type=\"number\" formControlName=\"changeDebounceMs\" min=\"100\" max=\"1000\" />\n @if (form.controls.changeDebounceMs.invalid) { <mat-error>Valor deve estar entre 100 e 1000</mat-error> }\n </mat-form-field>\n <div class=\"actions\">\n <button mat-stroked-button color=\"warn\" (click)=\"resetPreferences()\">\n <mat-icon [praxisIcon]=\"'restart_alt'\"></mat-icon>\n Redefinir prefer\u00EAncias do filtro\n </button>\n <button mat-stroked-button color=\"accent\" (click)=\"clearPersistedFilters()\">\n <mat-icon [praxisIcon]=\"'clear_all'\"></mat-icon>\n Limpar filtros salvos\n </button>\n <button mat-stroked-button (click)=\"forceSchemaReload()\">\n <mat-icon [praxisIcon]=\"'refresh'\"></mat-icon>\n For\u00E7ar recarregamento do schema\n </button>\n </div>\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>N\u00EDvel de log</mat-label>\n <mat-select formControlName=\"logLevel\">\n <mat-option value=\"none\">Nenhum</mat-option>\n <mat-option value=\"error\">Erro</mat-option>\n <mat-option value=\"warn\">Aviso</mat-option>\n <mat-option value=\"info\">Info</mat-option>\n <mat-option value=\"debug\">Debug</mat-option>\n </mat-select>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Persistido no contrato para integra\u00E7\u00E3o host. Sem efeito direto no runtime atual do filtro.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n <mat-checkbox formControlName=\"enablePerformanceMetrics\">Habilitar m\u00E9tricas de performance</mat-checkbox>\n <p class=\"field-hint\">Prefer\u00EAncia persistida para integra\u00E7\u00E3o host. Sem efeito direto no runtime atual do filtro.</p>\n </div>\n </mat-tab>\n </mat-tab-group>\n</form>\n", styles: [":host{display:block;min-width:0}.full-width{width:100%}.always-visible-tab-flow{display:flex;flex-direction:column;gap:4px;padding-top:12px}.always-visible-context{position:sticky;top:0;z-index:var(--praxis-layer-sticky-local, 100);display:flex;flex-direction:column;gap:6px;padding:8px;border-radius:10px;border:1px solid var(--md-sys-color-outline-variant);background:color-mix(in srgb,var(--md-sys-color-surface-container-high) 88%,transparent);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.always-visible-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;padding:8px 10px;border:1px solid var(--md-sys-color-outline-variant);border-radius:10px;background:var(--md-sys-color-surface-container-low)}.always-visible-summary-item{display:flex;align-items:baseline;gap:6px;min-width:0}.summary-value{font-size:1rem;font-weight:700;color:var(--md-sys-color-primary)}.summary-label{font-size:.8rem;color:var(--md-sys-color-on-surface-variant);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.always-visible-quick-nav{display:flex;flex-wrap:wrap;gap:6px}.always-visible-quick-nav button{min-height:30px;font-size:.76rem;padding-inline:10px;transition:border-color .18s ease,background-color .18s ease,color .18s ease}.always-visible-quick-nav button.quick-nav-active{border-color:color-mix(in srgb,var(--md-sys-color-primary) 50%,var(--md-sys-color-outline-variant));background:color-mix(in srgb,var(--md-sys-color-primary-container) 34%,var(--md-sys-color-surface-container-low));color:var(--md-sys-color-primary)}.always-visible-section-anchor{scroll-margin-top:140px;opacity:0;transform:translateY(8px);animation:always-visible-section-enter .22s cubic-bezier(.2,0,0,1) forwards;animation-delay:var(--section-enter-delay, 0ms)}.always-visible-section-anchor.section-active,.always-visible-section-anchor.section-active .options-advanced-json{box-shadow:0 0 0 1px color-mix(in srgb,var(--md-sys-color-primary) 40%,transparent)}.always-visible-section-anchor:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}@keyframes always-visible-section-enter{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.options{display:flex;flex-direction:column;gap:.75rem;padding:12px;width:100%;max-width:100%;min-width:0;box-sizing:border-box;border:1px solid var(--md-sys-color-outline-variant);border-radius:12px;background:var(--md-sys-color-surface-container)}.options .options{padding:0;border:0;border-radius:0;background:transparent}.options-compact-flow{gap:8px;padding-top:10px;padding-bottom:10px}.section-divider{margin:2px;border-top-style:dashed;border-top-color:var(--md-sys-color-outline-variant);opacity:.28}.options-advanced-json{display:block;padding:0;overflow:hidden}:host ::ng-deep .options-advanced-json .mat-expansion-panel-header{padding:0 12px;min-height:52px}:host ::ng-deep .options-advanced-json .mat-expansion-panel-body{padding:0 12px 12px}.options-header{display:flex;flex-direction:column;gap:6px}.section-title{margin:0;font-size:.95rem;font-weight:600;color:var(--md-sys-color-on-surface)}.section-help{margin:0;font-size:.85rem;color:var(--md-sys-color-on-surface);opacity:.84}.field-hint{margin:-4px 0 0;font-size:.8rem;color:var(--md-sys-color-on-surface);opacity:.78}.help-icon-button{--mdc-icon-button-state-layer-size: 28px;--mdc-icon-button-icon-size: 18px;width:28px;height:28px;padding:0;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}.help-icon-button mat-icon{font-size:18px;line-height:18px;width:18px;height:18px}.order-layout-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px}.order-viewport-toggle-group{max-width:100%}.order-viewport-caption{display:inline-flex;align-items:center;min-height:28px;padding:0 10px;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-lowest);font-size:.75rem;font-weight:600;color:var(--md-sys-color-on-surface-variant)}.order-layout-viewport{width:100%;display:flex;justify-content:center;padding:10px;border-radius:14px;border:1px solid var(--md-sys-color-outline-variant);background:color-mix(in srgb,var(--md-sys-color-surface-container-high) 74%,transparent)}.order-layout-frame{width:100%;transition:max-width .18s ease}.order-layout-frame[data-viewport=tablet] .order-lane-canvas{gap:7px}.order-layout-frame[data-viewport=mobile] .order-lane-canvas{gap:6px;padding:7px}.order-layout-frame[data-viewport=mobile] .order-pill{width:100%;max-width:100%;border-radius:12px}.order-layout-composer{display:flex;flex-direction:column;gap:9px}.order-lane{display:flex;flex-direction:column;gap:6px}.order-lane-header{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.order-lane-title-block{display:flex;flex-direction:column;gap:2px;min-width:0}.order-lane-title{margin:0;font-size:.85rem;font-weight:600;color:var(--md-sys-color-on-surface)}.order-lane-help{margin:0;font-size:.76rem;color:var(--md-sys-color-on-surface-variant)}.order-lane-count{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-low);color:var(--md-sys-color-on-surface-variant);font-size:.76rem;font-weight:600;padding:0 8px}.order-lane-canvas{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-height:56px;padding:8px;border:1px dashed var(--md-sys-color-outline-variant);border-radius:12px;background:var(--md-sys-color-surface-container-low)}.order-lane-canvas.cdk-drop-list-dragging{border-color:color-mix(in srgb,var(--md-sys-color-primary) 45%,var(--md-sys-color-outline-variant))}.order-lane[data-lane=actions] .order-lane-canvas{background:color-mix(in srgb,var(--md-sys-color-secondary-container) 28%,var(--md-sys-color-surface-container-low))}.order-lane[data-lane=inline] .order-lane-canvas{background:color-mix(in srgb,var(--md-sys-color-primary-container) 22%,var(--md-sys-color-surface-container-low))}.order-lane[data-lane=grid] .order-lane-canvas{background:color-mix(in srgb,var(--md-sys-color-tertiary-container) 18%,var(--md-sys-color-surface-container-low))}.order-lane-canvas.is-empty{justify-content:flex-start}.order-pill{display:inline-flex;align-items:center;gap:8px;max-width:min(100%,520px);min-height:38px;border:1px solid var(--md-sys-color-outline-variant);border-radius:999px;background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface);padding:4px 8px;box-sizing:border-box;cursor:grab;font:inherit;text-align:left}.order-pill:hover{border-color:var(--md-sys-color-outline)}.order-pill:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.order-pill mat-icon{opacity:.75}.order-pill-label{min-width:0;max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.86rem;font-weight:500}.order-pill-badges{display:inline-flex;flex-wrap:wrap;align-items:center;gap:4px}.order-pill-chip{display:inline-flex;align-items:center;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-lowest);color:var(--md-sys-color-on-surface-variant);font-size:.7rem;font-weight:600;padding:1px 7px;white-space:nowrap}.order-pill-chip-width{font-weight:500;opacity:.86}.order-pill-chip-override{border-color:color-mix(in srgb,var(--md-sys-color-primary) 42%,var(--md-sys-color-outline-variant));color:var(--md-sys-color-primary)}.order-lane-empty{margin:0;font-size:.78rem;color:var(--md-sys-color-on-surface-variant)}.order-pill.cdk-drag-preview{box-shadow:var(--md-sys-elevation-level2)}.order-pill.cdk-drag-placeholder{opacity:.45}.layout-preview-section{display:flex;flex-direction:column;gap:10px;padding:12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:10px;background:var(--md-sys-color-surface-container-low);min-width:0}.layout-preview-title{margin:0;font-size:.95rem;font-weight:600;color:var(--md-sys-color-on-surface)}.layout-preview-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;min-width:0}.layout-preview-card{display:flex;flex-direction:column;gap:8px;padding:10px;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;background:var(--md-sys-color-surface-container);min-width:0}.layout-preview-header{display:flex;flex-direction:column;gap:2px}.layout-preview-header strong{font-size:.85rem;color:var(--md-sys-color-on-surface)}.layout-preview-header span{font-size:.78rem;color:var(--md-sys-color-on-surface-variant)}.layout-mini-grid{display:grid;gap:6px;min-width:0}.layout-mini-grid span{display:block;min-width:0;padding:6px 8px;border-radius:6px;background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container);font-size:.75rem;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tags-header{display:flex;align-items:center;gap:8px}.spacer{flex:1 1 auto}.new-tag{display:flex;flex-direction:column;gap:8px}.preset-row{display:flex;flex-wrap:wrap;gap:8px}.option-with-preview{display:flex;align-items:center;gap:8px}.preview-card{width:20px;height:20px;background:var(--md-sys-color-surface-container-high);border:1px solid var(--md-sys-color-outline-variant);border-radius:4px}.preview-frosted{width:20px;height:20px;background:var(--md-sys-color-surface-container);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid var(--md-sys-color-outline-variant);border-radius:4px}.toggle-preview-section{margin-bottom:1.5rem;padding:1rem;background:var(--md-sys-color-surface-container-low);border-radius:8px;border:1px solid var(--md-sys-color-outline-variant)}.toggle-preview-section h4{margin:0 0 1rem;font-size:1.1rem;color:var(--md-sys-color-on-surface)}.preview-container{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1rem}.preview-item{text-align:center}.preview-item strong{display:block;margin-bottom:.5rem;font-weight:500}.mock-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:center;gap:8px;padding:8px;background:var(--md-sys-color-surface);border:1px solid var(--md-sys-color-outline);border-radius:8px;min-height:72px}.mock-grid.with-booleans{grid-template-columns:repeat(3,minmax(0,1fr))}.mock-field{padding:4px 8px;background:var(--md-sys-color-primary-container);border-radius:6px;font-size:.8rem;text-align:center}.mock-actions{display:flex;align-items:center;gap:8px;padding:8px;background:var(--md-sys-color-surface);border:1px solid var(--md-sys-color-outline);border-radius:8px;min-height:48px}.mock-actions button{width:34px;height:34px}.mock-pill{display:flex;align-items:center;gap:8px;min-height:34px;padding:0 10px;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant);font-size:.82rem;justify-self:start}.mock-pill.compact{padding-inline:8px;gap:0}.mock-pill mat-slide-toggle{--mdc-switch-selected-track-color: var(--md-sys-color-primary);--mdc-switch-selected-handle-color: var(--md-sys-color-on-primary);transform:scale(.8);pointer-events:none}.mock-pill span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:500}.preview-section{display:flex;flex-direction:column;gap:16px;padding:16px;background:var(--md-sys-color-surface-container-low);border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;margin-bottom:16px;box-shadow:var(--md-sys-elevation-level1);transition:background-color .3s,color .3s}.preview-section.dark-mode{background:var(--md-sys-color-surface-container-low);color:var(--md-sys-color-on-surface);border-color:var(--md-sys-color-outline-variant)}.preview-section.dark-mode .preview-label{color:var(--md-sys-color-on-surface-variant)}.preview-controls{display:flex;justify-content:space-between;align-items:center}.preview-label{font-weight:500;font-size:.9rem;color:var(--md-sys-color-on-surface-variant)}.preview-chips{display:flex;justify-content:center;padding:16px 0}.praxis-filter-tags.outlined .mat-mdc-chip{background:transparent!important;--mat-chip-outline-width: 1px;--mat-chip-outline-color: var(--md-sys-color-outline-variant);box-shadow:inset 0 0 0 var(--mat-chip-outline-width) var(--mat-chip-outline-color)}.praxis-filter-tags.outlined.tag-color-primary .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-primary)}.praxis-filter-tags.outlined.tag-color-accent .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-tertiary)}.praxis-filter-tags.outlined.tag-color-warn .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-error)}.praxis-filter-tags.outlined mat-chip.active .mat-mdc-chip,.praxis-filter-tags.outlined .mat-mdc-chip.mat-mdc-chip-highlighted{--mat-chip-outline-width: 2px;box-shadow:inset 0 0 0 var(--mat-chip-outline-width) var(--mat-chip-outline-color)!important}.praxis-filter-tags.outlined.tag-color-basic mat-chip.active .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-primary)}.praxis-filter-tags .mat-mdc-standard-chip .mdc-evolution-chip__text-label{display:flex;align-items:center;gap:4px}.contrast-warning{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container);border-radius:4px;font-size:.85rem}.contrast-warning mat-icon{font-size:20px;width:20px;height:20px}.preset-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px;margin-bottom:12px}.preset-card{display:flex;width:100%;flex-direction:column;gap:8px;padding:12px;text-align:left;font:inherit;color:inherit;background:transparent;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;cursor:pointer;transition:all .2s}.preset-card:hover{background:var(--md-sys-color-surface-container-high);border-color:var(--md-sys-color-outline)}.preset-card:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.preset-card.preset-active{border-color:var(--md-sys-color-primary);background:color-mix(in srgb,var(--md-sys-color-primary-container) 34%,transparent);box-shadow:inset 0 0 0 1px var(--md-sys-color-primary)}.preset-preview{height:24px;border-radius:4px;background:var(--md-sys-color-surface-variant)}.preset-preview.preview-minimal{background:transparent;border:1px solid var(--md-sys-color-outline)}.preset-preview.preview-primary{background:var(--md-sys-color-primary-container)}.preset-preview.preview-accent{background:var(--md-sys-color-tertiary-container)}.preset-preview.preview-warn{background:var(--md-sys-color-error-container)}.preset-info{display:flex;flex-direction:column}.preset-name{font-weight:500;font-size:.9rem}.preset-desc{font-size:.75rem;opacity:.7}.restore-btn{align-self:flex-start}.metadata-card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:10px}.metadata-card{display:flex;flex-direction:column;gap:10px;padding:12px;border-radius:10px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-low)}.metadata-card-header{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}.metadata-card-title{display:flex;flex-direction:column;min-width:0}.metadata-card-title strong{font-size:.92rem;color:var(--md-sys-color-on-surface)}.metadata-card-title span{font-size:.78rem;color:var(--md-sys-color-on-surface-variant);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.metadata-card-badges{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px}.metadata-chip{display:inline-flex;align-items:center;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface-variant);font-size:.78rem;font-weight:500;padding:2px 8px;white-space:nowrap}.metadata-chip-override{border-color:color-mix(in srgb,var(--md-sys-color-primary) 40%,var(--md-sys-color-outline-variant));color:var(--md-sys-color-primary);background:color-mix(in srgb,var(--md-sys-color-primary-container) 38%,var(--md-sys-color-surface-container))}.metadata-card-summary{margin:0;font-size:.8rem;color:var(--md-sys-color-on-surface-variant)}.metadata-card-actions{display:flex;flex-wrap:wrap;gap:6px}.metadata-card-actions button{display:inline-flex;align-items:center;gap:4px}.metadata-card-actions button:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:1px}:host ::ng-deep .metadata-card-actions button[disabled]{opacity:.62}.json-tip{margin:6px 0 0;font-size:.85rem;color:var(--md-sys-color-on-surface-variant)}.json-error{margin-top:6px;font-size:.85rem;color:var(--md-sys-color-error)}@media(prefers-reduced-motion:reduce){.always-visible-section-anchor{animation:none;opacity:1;transform:none}.always-visible-quick-nav button{transition:none}}@media(max-width:680px){.order-layout-toolbar{flex-direction:column;align-items:stretch}.order-viewport-caption{align-self:flex-start}.order-layout-viewport{padding:8px}.always-visible-context{position:static;-webkit-backdrop-filter:none;backdrop-filter:none}.always-visible-summary{grid-template-columns:1fr}.always-visible-quick-nav{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}.order-pill{width:100%;max-width:100%}.order-pill-label{max-width:none}.order-pill-badges{display:none}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.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: i1$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1$1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i3$2.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i3$2.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: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4$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: i4$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3$1.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: MatCheckboxModule }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i9$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { 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: MatButtonToggleModule }, { kind: "directive", type: i14.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i14.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i13.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i13.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i13.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i13.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i5$1.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: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i15.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i15.MatChipAvatar, selector: "mat-chip-avatar, [matChipAvatar]" }, { kind: "component", type: i15.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "directive", type: i15.MatChipTrailingIcon, selector: "mat-chip-trailing-icon, [matChipTrailingIcon]" }, { kind: "ngmodule", type: MatDividerModule }, { 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: "directive", type: PraxisNumberWheelBlurDirective, selector: "input[type=number][praxisNumberWheelBlur]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
27987
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: FilterSettingsComponent, isStandalone: true, selector: "filter-settings", inputs: { metadata: "metadata", metadataSource: "metadataSource", metadataLoading: "metadataLoading", metadataErrorMsg: "metadataErrorMsg", settings: "settings", configKey: "configKey" }, outputs: { settingsChange: "settingsChange" }, usesOnChanges: true, ngImport: i0, template: "<form [formGroup]=\"form\">\n <mat-tab-group (selectedTabChange)=\"onTabChange($event)\">\n <mat-tab label=\"Sempre Vis\u00EDveis\">\n <div class=\"always-visible-tab-flow\">\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"full-width\">\n <mat-label>Campos sempre vis\u00EDveis</mat-label>\n <mat-select\n formControlName=\"alwaysVisibleFields\"\n multiple\n >\n @for (meta of filteredAlwaysVisibleMetadata(); track trackFieldMetadataByName($index, meta)) {\n <mat-option\n [value]=\"meta.name\"\n >\n {{ meta.label || meta.name }}\n </mat-option>\n }\n </mat-select>\n @if (metadataLoading && metadataSource === 'filter-dto') {\n <mat-hint>\n Carregando campos do DTO de filtro...\n </mat-hint>\n }\n @if (metadataErrorMsg) {\n <mat-error>{{ metadataErrorMsg }}</mat-error>\n }\n @if (!metadataLoading && !metadataErrorMsg && !metadata.length && metadataSource === 'filter-dto') {\n <mat-hint\n >\n Nenhum campo do DTO de filtro dispon\u00EDvel para este recurso.\n </mat-hint>\n }\n @if (!metadataLoading && !metadataErrorMsg && metadata.length && !hasAlwaysVisibleMetadataResults() && alwaysVisibleFieldSearchText) {\n <mat-hint\n >\n Nenhum campo encontrado para \"{{ alwaysVisibleFieldSearchText }}\".\n </mat-hint>\n }\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Escolha os campos que aparecem sempre na barra de filtros.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Buscar campo</mat-label>\n <input\n matInput\n [ngModel]=\"alwaysVisibleFieldSearchText\"\n (ngModelChange)=\"onAlwaysVisibleFieldSearchChange($event)\"\n [ngModelOptions]=\"{standalone: true}\"\n placeholder=\"Filtrar por nome ou label\"\n />\n @if (alwaysVisibleFieldSearchText) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"clearAlwaysVisibleFieldSearch()\"\n aria-label=\"Limpar busca de campo\"\n >\n <mat-icon [praxisIcon]=\"'close'\"></mat-icon>\n </button>\n }\n </mat-form-field>\n <p class=\"field-hint\">\n {{ alwaysVisibleSelectionCount() }} campo(s) selecionado(s).\n </p>\n <div class=\"always-visible-context\">\n <div class=\"always-visible-summary\" role=\"status\" aria-live=\"polite\">\n <div class=\"always-visible-summary-item\">\n <span class=\"summary-value\">{{ alwaysVisibleSelectionCount() }}</span>\n <span class=\"summary-label\">campos fixos</span>\n </div>\n <div class=\"always-visible-summary-item\">\n <span class=\"summary-value\">{{ activeAlwaysVisibleOverrideCount() }}</span>\n <span class=\"summary-label\">overrides ativos</span>\n </div>\n </div>\n <nav\n class=\"always-visible-quick-nav\"\n aria-label=\"Navega\u00E7\u00E3o r\u00E1pida da se\u00E7\u00E3o Sempre Vis\u00EDveis\"\n >\n <button\n mat-stroked-button\n type=\"button\"\n [class.quick-nav-active]=\"isAlwaysVisibleSectionActive('always-visible-order')\"\n [attr.aria-current]=\"isAlwaysVisibleSectionActive('always-visible-order') ? 'location' : null\"\n aria-controls=\"always-visible-order\"\n (click)=\"scrollToAlwaysVisibleSection('always-visible-order')\"\n >\n Ordem\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n [class.quick-nav-active]=\"isAlwaysVisibleSectionActive('always-visible-metadata')\"\n [attr.aria-current]=\"isAlwaysVisibleSectionActive('always-visible-metadata') ? 'location' : null\"\n aria-controls=\"always-visible-metadata\"\n (click)=\"scrollToAlwaysVisibleSection('always-visible-metadata')\"\n >\n Metadados\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n [class.quick-nav-active]=\"isAlwaysVisibleSectionActive('always-visible-json')\"\n [attr.aria-current]=\"isAlwaysVisibleSectionActive('always-visible-json') ? 'location' : null\"\n aria-controls=\"always-visible-json\"\n (click)=\"scrollToAlwaysVisibleSection('always-visible-json')\"\n >\n JSON\n </button>\n </nav>\n </div>\n\n <div\n id=\"always-visible-order\"\n class=\"options options-compact-flow always-visible-section-anchor\"\n [class.section-active]=\"isAlwaysVisibleSectionActive('always-visible-order')\"\n [style.--section-enter-delay]=\"sectionEnterDelay('always-visible-order')\"\n tabindex=\"-1\"\n (focusin)=\"onAlwaysVisibleSectionFocus('always-visible-order')\"\n >\n <div class=\"options-header\">\n <h4 class=\"section-title\">Ordem dos campos</h4>\n <p class=\"section-help\">\n Reordene no formato mais pr\u00F3ximo da toolbar real: faixa de a\u00E7\u00F5es, barra inline e grid.\n </p>\n </div>\n <div class=\"order-layout-toolbar\">\n <mat-button-toggle-group\n class=\"order-viewport-toggle-group\"\n [value]=\"orderPreviewViewport\"\n (change)=\"onAlwaysVisibleViewportChange($event.value)\"\n aria-label=\"Largura simulada da toolbar\"\n >\n @for (viewport of alwaysVisibleViewports; track viewport) {\n <mat-button-toggle\n [value]=\"viewport\"\n [attr.aria-label]=\"alwaysVisibleViewportHint(viewport)\"\n >\n {{ alwaysVisibleViewportLabel(viewport) }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n <span class=\"order-viewport-caption\">\n {{ alwaysVisibleViewportWidth() }}px\n </span>\n </div>\n <p class=\"section-help\">\n Ajuste o viewport para simular a quebra real das linhas na toolbar.\n </p>\n <div class=\"order-layout-viewport\">\n <div\n class=\"order-layout-frame\"\n [attr.data-viewport]=\"orderPreviewViewport\"\n [style.maxWidth.px]=\"alwaysVisibleViewportWidth()\"\n >\n <div class=\"order-layout-composer\" cdkDropListGroup>\n @for (lane of alwaysVisibleLayoutLanes; track lane) {\n <section\n class=\"order-lane\"\n [attr.data-lane]=\"lane\"\n >\n @if (alwaysVisibleLaneItems(lane); as laneItems) {\n <header class=\"order-lane-header\">\n <div class=\"order-lane-title-block\">\n <h5 class=\"order-lane-title\">{{ alwaysVisibleLaneLabel(lane) }}</h5>\n <p class=\"order-lane-help\">{{ alwaysVisibleLaneHint(lane) }}</p>\n </div>\n <span class=\"order-lane-count\">{{ laneItems.length }}</span>\n </header>\n <div\n cdkDropList\n class=\"order-lane-canvas\"\n [id]=\"alwaysVisibleLaneDropListId(lane)\"\n [class.is-empty]=\"!laneItems.length\"\n [cdkDropListData]=\"laneItems\"\n [cdkDropListEnterPredicate]=\"allowAlwaysVisibleLaneEnter\"\n cdkDropListOrientation=\"horizontal\"\n [attr.aria-label]=\"'Faixa ' + alwaysVisibleLaneLabel(lane)\"\n (cdkDropListDropped)=\"dropAlwaysVisibleLane(lane, $event)\"\n >\n @for (item of laneItems; track trackAlwaysVisibleLayoutItemByName(i, item); let i = $index) {\n <button\n type=\"button\"\n class=\"order-pill\"\n cdkDrag\n [cdkDragData]=\"item\"\n [attr.aria-label]=\"alwaysVisibleLayoutItemAriaLabel(item, lane, i, laneItems.length)\"\n (keydown)=\"onAlwaysVisibleLaneItemKeydown($event, lane, item.name)\"\n >\n <mat-icon [praxisIcon]=\"'drag_indicator'\" cdkDragHandle></mat-icon>\n <span class=\"order-pill-label\">{{ item.label }}</span>\n <span class=\"order-pill-badges\">\n <span class=\"order-pill-chip\">{{ item.controlTypeLabel }}</span>\n <span class=\"order-pill-chip order-pill-chip-width\">{{ item.widthHint }}</span>\n @if (item.hasOverride) {\n <span class=\"order-pill-chip order-pill-chip-override\">\n Override\n </span>\n }\n </span>\n </button>\n }\n @if (!laneItems.length) {\n <p class=\"order-lane-empty\">\n {{ alwaysVisibleLaneEmptyHint(lane) }}\n </p>\n }\n </div>\n }\n </section>\n }\n </div>\n </div>\n </div>\n <p class=\"field-hint\">\n Acessibilidade: use Alt/Ctrl + setas para reordenar dentro de cada faixa. O drag & drop n\u00E3o mistura faixas.\n </p>\n @if (!form.controls.alwaysVisibleFields.value?.length) {\n <p class=\"section-help\">\n Nenhum campo selecionado. Use o seletor acima para adicionar.\n </p>\n }\n </div>\n\n <mat-divider class=\"section-divider\" role=\"presentation\"></mat-divider>\n\n <div\n id=\"always-visible-metadata\"\n class=\"options options-compact-flow always-visible-section-anchor\"\n [class.section-active]=\"isAlwaysVisibleSectionActive('always-visible-metadata')\"\n [style.--section-enter-delay]=\"sectionEnterDelay('always-visible-metadata')\"\n tabindex=\"-1\"\n (focusin)=\"onAlwaysVisibleSectionFocus('always-visible-metadata')\"\n >\n <div class=\"options-header\">\n <h4 class=\"section-title\">Editor visual de metadados</h4>\n <p class=\"section-help\">\n Edite os principais ajustes dos campos sempre vis\u00EDveis no fluxo visual. Para propriedades avan\u00E7adas, use o JSON abaixo.\n </p>\n </div>\n @if (!form.controls.alwaysVisibleFields.value?.length) {\n <p class=\"section-help\">\n Selecione campos em \u201CCampos sempre vis\u00EDveis\u201D para habilitar a edi\u00E7\u00E3o visual.\n </p>\n }\n @if (form.controls.alwaysVisibleFields.value?.length) {\n <div class=\"metadata-card-grid\">\n @for (name of form.controls.alwaysVisibleFields.value; track name) {\n <article class=\"metadata-card\">\n <header class=\"metadata-card-header\">\n <div class=\"metadata-card-title\">\n <strong>{{ getFieldLabel(name) }}</strong>\n <span>{{ name }}</span>\n </div>\n <div class=\"metadata-card-badges\">\n <span class=\"metadata-chip\">{{ getAlwaysVisibleControlTypeLabel(name) }}</span>\n @if (hasAlwaysVisibleOverride(name)) {\n <span class=\"metadata-chip metadata-chip-override\">\n Override ativo\n </span>\n }\n </div>\n </header>\n <p class=\"metadata-card-summary\">{{ getAlwaysVisibleOverridePreview(name) }}</p>\n <div class=\"metadata-card-actions\">\n <button mat-stroked-button type=\"button\" (click)=\"openAlwaysVisibleMetadataEditor(name)\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n Editar campo\n </button>\n <button\n mat-button\n type=\"button\"\n color=\"warn\"\n (click)=\"clearAlwaysVisibleOverride(name)\"\n [disabled]=\"!hasAlwaysVisibleOverride(name)\"\n >\n Limpar override\n </button>\n </div>\n </article>\n }\n </div>\n }\n </div>\n\n <mat-divider class=\"section-divider\" role=\"presentation\"></mat-divider>\n\n <div\n id=\"always-visible-json\"\n class=\"always-visible-section-anchor\"\n [class.section-active]=\"isAlwaysVisibleSectionActive('always-visible-json')\"\n [style.--section-enter-delay]=\"sectionEnterDelay('always-visible-json')\"\n tabindex=\"-1\"\n (focusin)=\"onAlwaysVisibleSectionFocus('always-visible-json')\"\n >\n <mat-expansion-panel\n class=\"options options-compact-flow options-advanced-json\"\n [expanded]=\"!!alwaysVisibleOverridesErrorMsg\"\n >\n <mat-expansion-panel-header>\n <mat-panel-title>Avan\u00E7ado (JSON opcional)</mat-panel-title>\n <mat-panel-description>Para ajustes n\u00E3o expostos no editor visual</mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"options-header\">\n <h4 class=\"section-title\">Modo avan\u00E7ado (JSON)</h4>\n <p class=\"section-help\">\n Use JSON para ajustes em lote ou propriedades ainda n\u00E3o expostas no editor visual.\n </p>\n </div>\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>alwaysVisibleFieldMetadataOverrides (JSON)</mat-label>\n <textarea\n matInput\n rows=\"8\"\n [(ngModel)]=\"alwaysVisibleOverridesJsonText\"\n [ngModelOptions]=\"{standalone: true}\"\n ></textarea>\n </mat-form-field>\n <div class=\"actions\">\n <button mat-stroked-button type=\"button\" (click)=\"formatAlwaysVisibleOverridesJson()\">Formatar</button>\n <button mat-stroked-button color=\"primary\" type=\"button\" (click)=\"applyAlwaysVisibleOverridesJson()\">\n Validar e carregar no editor\n </button>\n </div>\n <p class=\"json-tip\">\n Esta a\u00E7\u00E3o n\u00E3o persiste a configura\u00E7\u00E3o. Para persistir, use \u201CSalvar &amp; Fechar\u201D no rodap\u00E9.\n </p>\n <p class=\"json-tip\">\n Exemplo:\n &#123;\"status\":&#123;\"controlType\":\"inlineSelect\",\"clearButton\":&#123;\"enabled\":true&#125;,\"inlineAutoSize\":&#123;\"minWidth\":140,\"maxWidth\":280&#125;&#125;&#125;\n </p>\n @if (alwaysVisibleOverridesErrorMsg) {\n <p class=\"json-error\" role=\"status\" aria-live=\"polite\">{{ alwaysVisibleOverridesErrorMsg }}</p>\n }\n </mat-expansion-panel>\n </div>\n </div>\n </mat-tab>\n <mat-tab label=\"Layout\">\n <div class=\"options\">\n <div class=\"options-header\">\n <h4 class=\"section-title\">Grid e responsividade</h4>\n <p class=\"section-help\">\n Ajuste largura m\u00EDnima e n\u00FAmero de colunas por breakpoint. Em telas menores que 600px, o layout usa 1 coluna.\n </p>\n </div>\n <div class=\"layout-preview-section\" aria-live=\"polite\">\n <h5 class=\"layout-preview-title\">Pr\u00E9-visualiza\u00E7\u00E3o do grid</h5>\n <p class=\"section-help\">\n Simula\u00E7\u00E3o com {{ layoutPreviewFields.length }} campos e largura m\u00EDnima de {{ layoutMinWidth() }}px por campo.\n </p>\n <div class=\"layout-preview-cards\">\n <article class=\"layout-preview-card\">\n <div class=\"layout-preview-header\">\n <strong>Mobile</strong>\n <span>&lt;600px \u00B7 {{ layoutColsFor('sm') }} coluna</span>\n </div>\n <div class=\"layout-mini-grid\" [style.gridTemplateColumns]=\"'repeat(' + layoutColsFor('sm') + ', minmax(0, 1fr))'\">\n @for (field of layoutPreviewFields; track field) {\n <span>{{ field }}</span>\n }\n </div>\n </article>\n <article class=\"layout-preview-card\">\n <div class=\"layout-preview-header\">\n <strong>Tablet</strong>\n <span>&ge;600px \u00B7 {{ layoutColsFor('md') }} colunas</span>\n </div>\n <div class=\"layout-mini-grid\" [style.gridTemplateColumns]=\"'repeat(' + layoutColsFor('md') + ', minmax(0, 1fr))'\">\n @for (field of layoutPreviewFields; track field) {\n <span>{{ field }}</span>\n }\n </div>\n </article>\n <article class=\"layout-preview-card\">\n <div class=\"layout-preview-header\">\n <strong>Desktop</strong>\n <span>&ge;960px \u00B7 {{ layoutColsFor('lg') }} colunas</span>\n </div>\n <div class=\"layout-mini-grid\" [style.gridTemplateColumns]=\"'repeat(' + layoutColsFor('lg') + ', minmax(0, 1fr))'\">\n @for (field of layoutPreviewFields; track field) {\n <span>{{ field }}</span>\n }\n </div>\n </article>\n </div>\n </div>\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Largura m\u00EDnima por campo (px)</mat-label>\n <input\n matInput\n type=\"number\"\n formControlName=\"alwaysMinWidth\"\n min=\"180\"\n max=\"480\"\n step=\"1\"\n inputmode=\"numeric\"\n praxisNumberWheelBlur\n (blur)=\"normalizeLayoutControl('alwaysMinWidth')\"\n />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n aria-label=\"Ajuda sobre largura m\u00EDnima por campo\"\n matTooltip=\"Define a largura m\u00EDnima de cada campo no grid. Recomendado entre 200 e 300px.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n <mat-hint align=\"start\">Intervalo permitido: 180 a 480px.</mat-hint>\n <mat-hint align=\"end\">Recomendado: 200 a 300px.</mat-hint>\n @if (layoutControlError('alwaysMinWidth'); as error) {\n <mat-error>{{ error }}</mat-error>\n }\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Colunas em tablet (&ge;600px)</mat-label>\n <input\n matInput\n type=\"number\"\n formControlName=\"alwaysColsMd\"\n min=\"1\"\n max=\"3\"\n step=\"1\"\n inputmode=\"numeric\"\n praxisNumberWheelBlur\n (blur)=\"normalizeLayoutControl('alwaysColsMd')\"\n />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n aria-label=\"Ajuda sobre colunas em tablet\"\n matTooltip=\"Define quantas colunas aparecem em telas m\u00E9dias (a partir de 600px).\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n <mat-hint align=\"start\">Mobile (&lt;600px) usa 1 coluna.</mat-hint>\n <mat-hint align=\"end\">Intervalo: 1 a 3 colunas.</mat-hint>\n @if (layoutControlError('alwaysColsMd'); as error) {\n <mat-error>{{ error }}</mat-error>\n }\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Colunas em desktop (&ge;960px)</mat-label>\n <input\n matInput\n type=\"number\"\n formControlName=\"alwaysColsLg\"\n min=\"1\"\n max=\"4\"\n step=\"1\"\n inputmode=\"numeric\"\n praxisNumberWheelBlur\n (blur)=\"normalizeLayoutControl('alwaysColsLg')\"\n />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n aria-label=\"Ajuda sobre colunas em desktop\"\n matTooltip=\"Define quantas colunas aparecem em telas grandes (a partir de 960px).\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n <mat-hint align=\"start\">Use mais colunas apenas quando houver espa\u00E7o.</mat-hint>\n <mat-hint align=\"end\">Intervalo: 1 a 4 colunas.</mat-hint>\n @if (layoutControlError('alwaysColsLg'); as error) {\n <mat-error>{{ error }}</mat-error>\n }\n </mat-form-field>\n </div>\n </mat-tab>\n <mat-tab label=\"Booleanos\">\n <div class=\"options\">\n @if (!hasBooleanFieldMetadata()) {\n <p class=\"section-help\">\n Nenhum campo booleano foi detectado no schema atual. Estas prefer\u00EAncias ser\u00E3o aplicadas quando houver\n campos `toggle`/boolean no filtro.\n </p>\n }\n @if (hasBooleanFieldMetadata()) {\n <div class=\"toggle-preview-section\">\n <h4>Visualiza\u00E7\u00E3o dos Booleanos</h4>\n <p class=\"section-help\">Veja o comportamento dos booleanos inline (com texto ou compacto) e a posi\u00E7\u00E3o na barra.</p>\n <div class=\"preview-container\">\n <div class=\"preview-item\">\n <strong>Grade Principal</strong>\n <div class=\"mock-grid\" [class.with-booleans]=\"!form.controls.placeBooleansInActions.value\">\n <div class=\"mock-field\">Campo 1</div>\n <div class=\"mock-field\">Campo 2</div>\n @if (!form.controls.placeBooleansInActions.value) {\n <div class=\"mock-pill\"\n [class.compact]=\"!form.controls.showToggleLabels.value\">\n <mat-slide-toggle [checked]=\"true\"></mat-slide-toggle>\n @if (form.controls.showToggleLabels.value) {\n <span>Ativo</span>\n }\n </div>\n }\n </div>\n </div>\n <div class=\"preview-item\">\n <strong>\u00C1rea de A\u00E7\u00F5es</strong>\n <div class=\"mock-actions\" [class.with-booleans]=\"form.controls.placeBooleansInActions.value\">\n <button mat-icon-button><mat-icon>search</mat-icon></button>\n <button mat-icon-button><mat-icon>tune</mat-icon></button>\n @if (form.controls.placeBooleansInActions.value) {\n <div class=\"mock-pill\"\n [class.compact]=\"!form.controls.showToggleLabels.value\">\n <mat-slide-toggle [checked]=\"true\"></mat-slide-toggle>\n @if (form.controls.showToggleLabels.value) {\n <span>Ativo</span>\n }\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n }\n <mat-checkbox formControlName=\"placeBooleansInActions\">\n <mat-icon>swap_horiz</mat-icon>\n Posicionar booleanos na \u00E1rea de a\u00E7\u00F5es\n </mat-checkbox>\n <p class=\"field-hint\">Move os booleanos da grade para os bot\u00F5es de a\u00E7\u00E3o, liberando espa\u00E7o horizontal.</p>\n <mat-checkbox formControlName=\"showToggleLabels\">\n <mat-icon>text_fields</mat-icon>\n Mostrar texto nos booleanos inline\n </mat-checkbox>\n <p class=\"field-hint\">Quando desativado, os booleanos ficam em modo compacto (somente controle, sem texto).</p>\n </div>\n </mat-tab>\n <mat-tab label=\"Op\u00E7\u00F5es\">\n <div class=\"options\">\n <div class=\"options-header\">\n <h4 class=\"section-title\">Painel Avan\u00E7ado</h4>\n <p class=\"section-help\">Apar\u00EAncia e comportamento do painel de filtros avan\u00E7ados.</p>\n </div>\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Modo de abertura do Avan\u00E7ado</mat-label>\n <mat-select formControlName=\"advancedOpenMode\">\n <mat-option value=\"modal\">Modal (padr\u00E3o)</mat-option>\n <mat-option value=\"drawer\">Drawer (direita)</mat-option>\n </mat-select>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Escolha como o painel de filtros avan\u00E7ados ser\u00E1 exibido: centralizado ou lateral.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-checkbox formControlName=\"advancedClearButtonsEnabled\">\n Mostrar bot\u00E3o de limpar nos campos\n </mat-checkbox>\n <p class=\"field-hint\">\n Desative para ocultar o bot\u00E3o de limpar nos campos do painel avan\u00E7ado.\n </p>\n\n <mat-checkbox formControlName=\"useInlineSearchableSelectVariant\">\n Compactar selects com busca/async/autocomplete na barra inline\n </mat-checkbox>\n <p class=\"field-hint\">\n Padr\u00E3o do filtro din\u00E2mico. Desative apenas quando o host precisar preservar o renderer dedicado por compatibilidade, performance ou comportamento legado. O lookup de entidade inline \u00E9 configurado por controlType expl\u00EDcito (`inlineEntityLookup`).\n </p>\n\n <mat-checkbox formControlName=\"useInlineRangeVariant\">\n Compactar range slider na barra inline\n </mat-checkbox>\n <p class=\"field-hint\">\n Usa o componente inline em formato chip + popover para rangeSlider (single e faixa).\n </p>\n\n <mat-checkbox formControlName=\"useInlineDateVariant\">\n Compactar campos de data na barra inline\n </mat-checkbox>\n <p class=\"field-hint\">\n Usa o componente inline dedicado para date/dateInput/datepicker, com largura por conte\u00FAdo e placeholder compacto.\n </p>\n\n <mat-checkbox formControlName=\"useInlineDateRangeVariant\">\n Compactar intervalo de datas na barra inline\n </mat-checkbox>\n <p class=\"field-hint\">\n Padr\u00E3o do filtro din\u00E2mico para dateRange/daterange. Desative apenas para preservar o renderer tradicional em hosts legados.\n </p>\n\n <mat-checkbox formControlName=\"useInlineTimeVariant\">\n Compactar campos de horario na barra inline\n </mat-checkbox>\n <p class=\"field-hint\">\n Padr\u00E3o do filtro din\u00E2mico para time/timePicker, com largura por conteudo e clear rapido. Desative apenas para manter a experi\u00EAncia legada.\n </p>\n\n <mat-checkbox formControlName=\"useInlineTimeRangeVariant\">\n Compactar intervalo de horario na barra inline\n </mat-checkbox>\n <p class=\"field-hint\">\n Padr\u00E3o do filtro din\u00E2mico para timeRange/timerange. Desative apenas para preservar o renderer tradicional em hosts legados.\n </p>\n\n <mat-checkbox formControlName=\"useInlineTreeSelectVariant\">\n Compactar tree select na barra inline\n </mat-checkbox>\n <p class=\"field-hint\">\n Padr\u00E3o do filtro din\u00E2mico para treeSelect na faixa compacta. Desative apenas quando o host depender do renderer dedicado. multiSelectTree mant\u00E9m o componente dedicado.\n </p>\n\n <mat-checkbox formControlName=\"confirmTagDelete\">Confirmar exclus\u00E3o de atalho</mat-checkbox>\n <p class=\"field-hint\">Solicita confirma\u00E7\u00E3o antes de apagar atalhos salvos.</p>\n\n <div class=\"options\">\n <h4>Tema dos Atalhos (Tags)</h4>\n\n <!-- Preview Section -->\n <div class=\"preview-section\" [class.mdc-theme-dark]=\"previewDarkMode\" [class.dark-mode]=\"previewDarkMode\">\n <div class=\"preview-controls\">\n <span class=\"preview-label\">Pr\u00E9-visualiza\u00E7\u00E3o</span>\n <button mat-icon-button (click)=\"previewDarkMode = !previewDarkMode\"\n [matTooltip]=\"previewDarkMode ? 'Mudar para fundo claro' : 'Mudar para fundo escuro'\">\n <mat-icon>{{ previewDarkMode ? 'light_mode' : 'dark_mode' }}</mat-icon>\n </button>\n </div>\n\n <div class=\"preview-chips praxis-filter-tags\"\n [class.outlined]=\"form.controls.tagVariant.value === 'outlined'\"\n [class.tag-color-basic]=\"form.controls.tagColor.value === 'basic'\"\n [class.tag-color-primary]=\"form.controls.tagColor.value === 'primary'\"\n [class.tag-color-accent]=\"form.controls.tagColor.value === 'accent'\"\n [class.tag-color-warn]=\"form.controls.tagColor.value === 'warn'\">\n <mat-chip-set>\n <!-- Inactive Chip -->\n <mat-chip\n [color]=\"form.controls.tagVariant.value === 'outlined' || form.controls.tagColor.value === 'basic' ? null : form.controls.tagColor.value\"\n [highlighted]=\"form.controls.tagVariant.value === 'filled' && form.controls.tagColor.value !== 'basic'\">\n Atalho Inativo\n </mat-chip>\n\n <!-- Active Chip -->\n <mat-chip class=\"active\"\n [color]=\"form.controls.tagVariant.value === 'outlined' || form.controls.tagColor.value === 'basic' ? null : form.controls.tagColor.value\"\n [highlighted]=\"form.controls.tagVariant.value === 'filled' && form.controls.tagColor.value !== 'basic'\">\n <mat-icon matChipAvatar>check</mat-icon>\n Atalho Ativo\n <button matChipTrailingIcon mat-icon-button\n [color]=\"form.controls.tagButtonColor.value === 'basic' ? null : form.controls.tagButtonColor.value\">\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n </mat-chip>\n </mat-chip-set>\n </div>\n\n @if (getContrastWarning(); as warning) {\n <div class=\"contrast-warning\">\n <mat-icon>warning</mat-icon>\n <span>{{ warning }}</span>\n </div>\n }\n </div>\n\n <!-- Reordered Fields -->\n <mat-form-field appearance=\"outline\">\n <mat-label>Variante do atalho</mat-label>\n <mat-select formControlName=\"tagVariant\">\n <mat-option value=\"filled\">Filled (Preenchido)</mat-option>\n <mat-option value=\"outlined\">Outlined (Contorno)</mat-option>\n </mat-select>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Define o estilo base do atalho.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do atalho</mat-label>\n <mat-select formControlName=\"tagColor\">\n <mat-option value=\"primary\">Primary</mat-option>\n <mat-option value=\"accent\">Accent</mat-option>\n <mat-option value=\"warn\">Warn</mat-option>\n <mat-option value=\"basic\">Basic</mat-option>\n </mat-select>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Cor de fundo (Filled) ou de contorno (Outlined).\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do bot\u00E3o do menu do atalho</mat-label>\n <mat-select formControlName=\"tagButtonColor\">\n <mat-option value=\"basic\">Basic</mat-option>\n <mat-option value=\"primary\">Primary</mat-option>\n <mat-option value=\"accent\">Accent</mat-option>\n <mat-option value=\"warn\">Warn</mat-option>\n </mat-select>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Cor do bot\u00E3o de dropdown dentro do atalho ativo.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n </div>\n\n <div class=\"options\">\n <h4>Tema dos bot\u00F5es de a\u00E7\u00E3o</h4>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor dos bot\u00F5es</mat-label>\n <mat-select formControlName=\"actionsButtonColor\">\n <mat-option value=\"basic\">Basic</mat-option>\n <mat-option value=\"primary\">Primary</mat-option>\n <mat-option value=\"accent\">Accent</mat-option>\n <mat-option value=\"warn\">Warn</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Variante dos bot\u00F5es</mat-label>\n <mat-select formControlName=\"actionsVariant\">\n <mat-option value=\"standard\">Standard</mat-option>\n <mat-option value=\"outlined\">Outlined</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"options\">\n <h4>Predefini\u00E7\u00F5es de tema</h4>\n <div class=\"preset-grid\">\n @for (p of presets; track p) {\n <button\n type=\"button\"\n class=\"preset-card\"\n (click)=\"applyPreset(p.key)\"\n [class.preset-active]=\"isPresetActive(p.key)\"\n [attr.aria-pressed]=\"isPresetActive(p.key)\"\n [attr.aria-label]=\"'Aplicar predefini\u00E7\u00E3o: ' + p.label\"\n >\n <div class=\"preset-preview\" [ngClass]=\"p.previewClass\"></div>\n <div class=\"preset-info\">\n <span class=\"preset-name\">{{ p.label }}</span>\n <span class=\"preset-desc\">{{ p.description }}</span>\n </div>\n </button>\n }\n </div>\n <button mat-button color=\"warn\" (click)=\"resetPreferences()\" class=\"restore-btn\">\n Restaurar padr\u00E3o\n </button>\n </div>\n </div>\n </mat-tab>\n @if (configKey) {\n <mat-tab label=\"Atalhos\">\n <div class=\"options\">\n <p class=\"section-help\">Os atalhos s\u00E3o salvos por chave de configura\u00E7\u00E3o e compartilhados entre sess\u00F5es.</p>\n <div class=\"tags-header\">\n <span><strong>Atalhos salvos</strong></span>\n <span class=\"spacer\"></span>\n <button mat-stroked-button color=\"warn\" (click)=\"clearTags()\">Apagar tudo</button>\n </div>\n <div class=\"new-tag\">\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>R\u00F3tulo do novo atalho</mat-label>\n <input matInput [(ngModel)]=\"newTagLabel\" [ngModelOptions]=\"{standalone: true}\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Patch (JSON, opcional)</mat-label>\n <textarea matInput rows=\"3\" [(ngModel)]=\"newTagPatchText\" [ngModelOptions]=\"{standalone: true}\"></textarea>\n </mat-form-field>\n <div>\n <button mat-stroked-button color=\"primary\" (click)=\"addTag()\">Adicionar</button>\n @if (hasCurrentDto()) {\n <button mat-stroked-button (click)=\"addTagFromCurrent()\">Adicionar a partir dos filtros atuais</button>\n }\n </div>\n <div>\n <button mat-stroked-button color=\"primary\" (click)=\"importTags()\">Importar</button>\n <button mat-stroked-button (click)=\"loadTags()\">Recarregar</button>\n <button mat-stroked-button (click)=\"saveTags()\">Salvar</button>\n </div>\n </div>\n </div>\n </mat-tab>\n }\n <mat-tab label=\"JSON\">\n <div class=\"options\">\n <p><strong>Configura\u00E7\u00E3o atual (somente leitura)</strong></p>\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Atual</mat-label>\n <textarea matInput rows=\"8\" [value]=\"effectiveJson\" readonly></textarea>\n </mat-form-field>\n\n <p><strong>Editar JSON</strong></p>\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>JSON</mat-label>\n <textarea matInput rows=\"12\" [(ngModel)]=\"settingsJsonText\" [ngModelOptions]=\"{standalone: true}\"></textarea>\n </mat-form-field>\n <div class=\"actions\">\n <button mat-stroked-button (click)=\"onJsonReload()\">Recarregar do formul\u00E1rio</button>\n <button mat-stroked-button (click)=\"onJsonFormat()\">Formatar</button>\n <button mat-stroked-button color=\"primary\" (click)=\"onJsonApply()\">Carregar JSON no formul\u00E1rio</button>\n </div>\n <p class=\"json-tip\">\n Dica: esta a\u00E7\u00E3o apenas atualiza o editor local. Para persistir, use os bot\u00F5es Aplicar ou\n Salvar &amp; Fechar no rodap\u00E9 do painel.\n </p>\n @if (jsonErrorMsg) {\n <p class=\"json-error\" role=\"status\" aria-live=\"polite\">{{ jsonErrorMsg }}</p>\n }\n </div>\n </mat-tab>\n <mat-tab label=\"Comportamento\">\n <div class=\"options\">\n <mat-checkbox formControlName=\"allowSaveTags\">Permitir salvar atalhos</mat-checkbox>\n </div>\n </mat-tab>\n <mat-tab label=\"Avan\u00E7ado\">\n <div class=\"options\">\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Debounce de altera\u00E7\u00F5es (ms)</mat-label>\n <input matInput type=\"number\" formControlName=\"changeDebounceMs\" min=\"100\" max=\"1000\" />\n @if (form.controls.changeDebounceMs.invalid) { <mat-error>Valor deve estar entre 100 e 1000</mat-error> }\n </mat-form-field>\n <div class=\"actions\">\n <button mat-stroked-button color=\"warn\" (click)=\"resetPreferences()\">\n <mat-icon [praxisIcon]=\"'restart_alt'\"></mat-icon>\n Redefinir prefer\u00EAncias do filtro\n </button>\n <button mat-stroked-button color=\"accent\" (click)=\"clearPersistedFilters()\">\n <mat-icon [praxisIcon]=\"'clear_all'\"></mat-icon>\n Limpar filtros salvos\n </button>\n <button mat-stroked-button (click)=\"forceSchemaReload()\">\n <mat-icon [praxisIcon]=\"'refresh'\"></mat-icon>\n For\u00E7ar recarregamento do schema\n </button>\n </div>\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>N\u00EDvel de log</mat-label>\n <mat-select formControlName=\"logLevel\">\n <mat-option value=\"none\">Nenhum</mat-option>\n <mat-option value=\"error\">Erro</mat-option>\n <mat-option value=\"warn\">Aviso</mat-option>\n <mat-option value=\"info\">Info</mat-option>\n <mat-option value=\"debug\">Debug</mat-option>\n </mat-select>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Persistido no contrato para integra\u00E7\u00E3o host. Sem efeito direto no runtime atual do filtro.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n <mat-checkbox formControlName=\"enablePerformanceMetrics\">Habilitar m\u00E9tricas de performance</mat-checkbox>\n <p class=\"field-hint\">Prefer\u00EAncia persistida para integra\u00E7\u00E3o host. Sem efeito direto no runtime atual do filtro.</p>\n </div>\n </mat-tab>\n </mat-tab-group>\n</form>\n", styles: [":host{display:block;min-width:0}.full-width{width:100%}.always-visible-tab-flow{display:flex;flex-direction:column;gap:4px;padding-top:12px}.always-visible-context{position:sticky;top:0;z-index:var(--praxis-layer-sticky-local, 100);display:flex;flex-direction:column;gap:6px;padding:8px;border-radius:10px;border:1px solid var(--md-sys-color-outline-variant);background:color-mix(in srgb,var(--md-sys-color-surface-container-high) 88%,transparent);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.always-visible-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;padding:8px 10px;border:1px solid var(--md-sys-color-outline-variant);border-radius:10px;background:var(--md-sys-color-surface-container-low)}.always-visible-summary-item{display:flex;align-items:baseline;gap:6px;min-width:0}.summary-value{font-size:1rem;font-weight:700;color:var(--md-sys-color-primary)}.summary-label{font-size:.8rem;color:var(--md-sys-color-on-surface-variant);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.always-visible-quick-nav{display:flex;flex-wrap:wrap;gap:6px}.always-visible-quick-nav button{min-height:30px;font-size:.76rem;padding-inline:10px;transition:border-color .18s ease,background-color .18s ease,color .18s ease}.always-visible-quick-nav button.quick-nav-active{border-color:color-mix(in srgb,var(--md-sys-color-primary) 50%,var(--md-sys-color-outline-variant));background:color-mix(in srgb,var(--md-sys-color-primary-container) 34%,var(--md-sys-color-surface-container-low));color:var(--md-sys-color-primary)}.always-visible-section-anchor{scroll-margin-top:140px;opacity:0;transform:translateY(8px);animation:always-visible-section-enter .22s cubic-bezier(.2,0,0,1) forwards;animation-delay:var(--section-enter-delay, 0ms)}.always-visible-section-anchor.section-active,.always-visible-section-anchor.section-active .options-advanced-json{box-shadow:0 0 0 1px color-mix(in srgb,var(--md-sys-color-primary) 40%,transparent)}.always-visible-section-anchor:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}@keyframes always-visible-section-enter{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.options{display:flex;flex-direction:column;gap:.75rem;padding:12px;width:100%;max-width:100%;min-width:0;box-sizing:border-box;border:1px solid var(--md-sys-color-outline-variant);border-radius:12px;background:var(--md-sys-color-surface-container)}.options .options{padding:0;border:0;border-radius:0;background:transparent}.options-compact-flow{gap:8px;padding-top:10px;padding-bottom:10px}.section-divider{margin:2px;border-top-style:dashed;border-top-color:var(--md-sys-color-outline-variant);opacity:.28}.options-advanced-json{display:block;padding:0;overflow:hidden}:host ::ng-deep .options-advanced-json .mat-expansion-panel-header{padding:0 12px;min-height:52px}:host ::ng-deep .options-advanced-json .mat-expansion-panel-body{padding:0 12px 12px}.options-header{display:flex;flex-direction:column;gap:6px}.section-title{margin:0;font-size:.95rem;font-weight:600;color:var(--md-sys-color-on-surface)}.section-help{margin:0;font-size:.85rem;color:var(--md-sys-color-on-surface);opacity:.84}.field-hint{margin:-4px 0 0;font-size:.8rem;color:var(--md-sys-color-on-surface);opacity:.78}.help-icon-button{--mdc-icon-button-state-layer-size: 28px;--mdc-icon-button-icon-size: 18px;width:28px;height:28px;padding:0;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}.help-icon-button mat-icon{font-size:18px;line-height:18px;width:18px;height:18px}.order-layout-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px}.order-viewport-toggle-group{max-width:100%}.order-viewport-caption{display:inline-flex;align-items:center;min-height:28px;padding:0 10px;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-lowest);font-size:.75rem;font-weight:600;color:var(--md-sys-color-on-surface-variant)}.order-layout-viewport{width:100%;display:flex;justify-content:center;padding:10px;border-radius:14px;border:1px solid var(--md-sys-color-outline-variant);background:color-mix(in srgb,var(--md-sys-color-surface-container-high) 74%,transparent)}.order-layout-frame{width:100%;transition:max-width .18s ease}.order-layout-frame[data-viewport=tablet] .order-lane-canvas{gap:7px}.order-layout-frame[data-viewport=mobile] .order-lane-canvas{gap:6px;padding:7px}.order-layout-frame[data-viewport=mobile] .order-pill{width:100%;max-width:100%;border-radius:12px}.order-layout-composer{display:flex;flex-direction:column;gap:9px}.order-lane{display:flex;flex-direction:column;gap:6px}.order-lane-header{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.order-lane-title-block{display:flex;flex-direction:column;gap:2px;min-width:0}.order-lane-title{margin:0;font-size:.85rem;font-weight:600;color:var(--md-sys-color-on-surface)}.order-lane-help{margin:0;font-size:.76rem;color:var(--md-sys-color-on-surface-variant)}.order-lane-count{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-low);color:var(--md-sys-color-on-surface-variant);font-size:.76rem;font-weight:600;padding:0 8px}.order-lane-canvas{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-height:56px;padding:8px;border:1px dashed var(--md-sys-color-outline-variant);border-radius:12px;background:var(--md-sys-color-surface-container-low)}.order-lane-canvas.cdk-drop-list-dragging{border-color:color-mix(in srgb,var(--md-sys-color-primary) 45%,var(--md-sys-color-outline-variant))}.order-lane[data-lane=actions] .order-lane-canvas{background:color-mix(in srgb,var(--md-sys-color-secondary-container) 28%,var(--md-sys-color-surface-container-low))}.order-lane[data-lane=inline] .order-lane-canvas{background:color-mix(in srgb,var(--md-sys-color-primary-container) 22%,var(--md-sys-color-surface-container-low))}.order-lane[data-lane=grid] .order-lane-canvas{background:color-mix(in srgb,var(--md-sys-color-tertiary-container) 18%,var(--md-sys-color-surface-container-low))}.order-lane-canvas.is-empty{justify-content:flex-start}.order-pill{display:inline-flex;align-items:center;gap:8px;max-width:min(100%,520px);min-height:38px;border:1px solid var(--md-sys-color-outline-variant);border-radius:999px;background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface);padding:4px 8px;box-sizing:border-box;cursor:grab;font:inherit;text-align:left}.order-pill:hover{border-color:var(--md-sys-color-outline)}.order-pill:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.order-pill mat-icon{opacity:.75}.order-pill-label{min-width:0;max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.86rem;font-weight:500}.order-pill-badges{display:inline-flex;flex-wrap:wrap;align-items:center;gap:4px}.order-pill-chip{display:inline-flex;align-items:center;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-lowest);color:var(--md-sys-color-on-surface-variant);font-size:.7rem;font-weight:600;padding:1px 7px;white-space:nowrap}.order-pill-chip-width{font-weight:500;opacity:.86}.order-pill-chip-override{border-color:color-mix(in srgb,var(--md-sys-color-primary) 42%,var(--md-sys-color-outline-variant));color:var(--md-sys-color-primary)}.order-lane-empty{margin:0;font-size:.78rem;color:var(--md-sys-color-on-surface-variant)}.order-pill.cdk-drag-preview{box-shadow:var(--md-sys-elevation-level2)}.order-pill.cdk-drag-placeholder{opacity:.45}.layout-preview-section{display:flex;flex-direction:column;gap:10px;padding:12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:10px;background:var(--md-sys-color-surface-container-low);min-width:0}.layout-preview-title{margin:0;font-size:.95rem;font-weight:600;color:var(--md-sys-color-on-surface)}.layout-preview-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;min-width:0}.layout-preview-card{display:flex;flex-direction:column;gap:8px;padding:10px;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;background:var(--md-sys-color-surface-container);min-width:0}.layout-preview-header{display:flex;flex-direction:column;gap:2px}.layout-preview-header strong{font-size:.85rem;color:var(--md-sys-color-on-surface)}.layout-preview-header span{font-size:.78rem;color:var(--md-sys-color-on-surface-variant)}.layout-mini-grid{display:grid;gap:6px;min-width:0}.layout-mini-grid span{display:block;min-width:0;padding:6px 8px;border-radius:6px;background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container);font-size:.75rem;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tags-header{display:flex;align-items:center;gap:8px}.spacer{flex:1 1 auto}.new-tag{display:flex;flex-direction:column;gap:8px}.preset-row{display:flex;flex-wrap:wrap;gap:8px}.option-with-preview{display:flex;align-items:center;gap:8px}.preview-card{width:20px;height:20px;background:var(--md-sys-color-surface-container-high);border:1px solid var(--md-sys-color-outline-variant);border-radius:4px}.preview-frosted{width:20px;height:20px;background:var(--md-sys-color-surface-container);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid var(--md-sys-color-outline-variant);border-radius:4px}.toggle-preview-section{margin-bottom:1.5rem;padding:1rem;background:var(--md-sys-color-surface-container-low);border-radius:8px;border:1px solid var(--md-sys-color-outline-variant)}.toggle-preview-section h4{margin:0 0 1rem;font-size:1.1rem;color:var(--md-sys-color-on-surface)}.preview-container{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1rem}.preview-item{text-align:center}.preview-item strong{display:block;margin-bottom:.5rem;font-weight:500}.mock-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:center;gap:8px;padding:8px;background:var(--md-sys-color-surface);border:1px solid var(--md-sys-color-outline);border-radius:8px;min-height:72px}.mock-grid.with-booleans{grid-template-columns:repeat(3,minmax(0,1fr))}.mock-field{padding:4px 8px;background:var(--md-sys-color-primary-container);border-radius:6px;font-size:.8rem;text-align:center}.mock-actions{display:flex;align-items:center;gap:8px;padding:8px;background:var(--md-sys-color-surface);border:1px solid var(--md-sys-color-outline);border-radius:8px;min-height:48px}.mock-actions button{width:34px;height:34px}.mock-pill{display:flex;align-items:center;gap:8px;min-height:34px;padding:0 10px;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant);font-size:.82rem;justify-self:start}.mock-pill.compact{padding-inline:8px;gap:0}.mock-pill mat-slide-toggle{--mdc-switch-selected-track-color: var(--md-sys-color-primary);--mdc-switch-selected-handle-color: var(--md-sys-color-on-primary);transform:scale(.8);pointer-events:none}.mock-pill span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:500}.preview-section{display:flex;flex-direction:column;gap:16px;padding:16px;background:var(--md-sys-color-surface-container-low);border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;margin-bottom:16px;box-shadow:var(--md-sys-elevation-level1);transition:background-color .3s,color .3s}.preview-section.dark-mode{background:var(--md-sys-color-surface-container-low);color:var(--md-sys-color-on-surface);border-color:var(--md-sys-color-outline-variant)}.preview-section.dark-mode .preview-label{color:var(--md-sys-color-on-surface-variant)}.preview-controls{display:flex;justify-content:space-between;align-items:center}.preview-label{font-weight:500;font-size:.9rem;color:var(--md-sys-color-on-surface-variant)}.preview-chips{display:flex;justify-content:center;padding:16px 0}.praxis-filter-tags.outlined .mat-mdc-chip{background:transparent!important;--mat-chip-outline-width: 1px;--mat-chip-outline-color: var(--md-sys-color-outline-variant);box-shadow:inset 0 0 0 var(--mat-chip-outline-width) var(--mat-chip-outline-color)}.praxis-filter-tags.outlined.tag-color-primary .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-primary)}.praxis-filter-tags.outlined.tag-color-accent .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-tertiary)}.praxis-filter-tags.outlined.tag-color-warn .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-error)}.praxis-filter-tags.outlined mat-chip.active .mat-mdc-chip,.praxis-filter-tags.outlined .mat-mdc-chip.mat-mdc-chip-highlighted{--mat-chip-outline-width: 2px;box-shadow:inset 0 0 0 var(--mat-chip-outline-width) var(--mat-chip-outline-color)!important}.praxis-filter-tags.outlined.tag-color-basic mat-chip.active .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-primary)}.praxis-filter-tags .mat-mdc-standard-chip .mdc-evolution-chip__text-label{display:flex;align-items:center;gap:4px}.contrast-warning{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container);border-radius:4px;font-size:.85rem}.contrast-warning mat-icon{font-size:20px;width:20px;height:20px}.preset-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px;margin-bottom:12px}.preset-card{display:flex;width:100%;flex-direction:column;gap:8px;padding:12px;text-align:left;font:inherit;color:inherit;background:transparent;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;cursor:pointer;transition:all .2s}.preset-card:hover{background:var(--md-sys-color-surface-container-high);border-color:var(--md-sys-color-outline)}.preset-card:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.preset-card.preset-active{border-color:var(--md-sys-color-primary);background:color-mix(in srgb,var(--md-sys-color-primary-container) 34%,transparent);box-shadow:inset 0 0 0 1px var(--md-sys-color-primary)}.preset-preview{height:24px;border-radius:4px;background:var(--md-sys-color-surface-variant)}.preset-preview.preview-minimal{background:transparent;border:1px solid var(--md-sys-color-outline)}.preset-preview.preview-primary{background:var(--md-sys-color-primary-container)}.preset-preview.preview-accent{background:var(--md-sys-color-tertiary-container)}.preset-preview.preview-warn{background:var(--md-sys-color-error-container)}.preset-info{display:flex;flex-direction:column}.preset-name{font-weight:500;font-size:.9rem}.preset-desc{font-size:.75rem;opacity:.7}.restore-btn{align-self:flex-start}.metadata-card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:10px}.metadata-card{display:flex;flex-direction:column;gap:10px;padding:12px;border-radius:10px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-low)}.metadata-card-header{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}.metadata-card-title{display:flex;flex-direction:column;min-width:0}.metadata-card-title strong{font-size:.92rem;color:var(--md-sys-color-on-surface)}.metadata-card-title span{font-size:.78rem;color:var(--md-sys-color-on-surface-variant);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.metadata-card-badges{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px}.metadata-chip{display:inline-flex;align-items:center;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface-variant);font-size:.78rem;font-weight:500;padding:2px 8px;white-space:nowrap}.metadata-chip-override{border-color:color-mix(in srgb,var(--md-sys-color-primary) 40%,var(--md-sys-color-outline-variant));color:var(--md-sys-color-primary);background:color-mix(in srgb,var(--md-sys-color-primary-container) 38%,var(--md-sys-color-surface-container))}.metadata-card-summary{margin:0;font-size:.8rem;color:var(--md-sys-color-on-surface-variant)}.metadata-card-actions{display:flex;flex-wrap:wrap;gap:6px}.metadata-card-actions button{display:inline-flex;align-items:center;gap:4px}.metadata-card-actions button:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:1px}:host ::ng-deep .metadata-card-actions button[disabled]{opacity:.62}.json-tip{margin:6px 0 0;font-size:.85rem;color:var(--md-sys-color-on-surface-variant)}.json-error{margin-top:6px;font-size:.85rem;color:var(--md-sys-color-error)}@media(prefers-reduced-motion:reduce){.always-visible-section-anchor{animation:none;opacity:1;transform:none}.always-visible-quick-nav button{transition:none}}@media(max-width:680px){.order-layout-toolbar{flex-direction:column;align-items:stretch}.order-viewport-caption{align-self:flex-start}.order-layout-viewport{padding:8px}.always-visible-context{position:static;-webkit-backdrop-filter:none;backdrop-filter:none}.always-visible-summary{grid-template-columns:1fr}.always-visible-quick-nav{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}.order-pill{width:100%;max-width:100%}.order-pill-label{max-width:none}.order-pill-badges{display:none}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.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: i1$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1$1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i3$2.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i3$2.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: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4$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: i4$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3$1.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: MatCheckboxModule }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i9$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { 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: MatButtonToggleModule }, { kind: "directive", type: i14.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i14.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i13.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i13.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i13.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i13.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i5$1.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: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i10$1.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i10$1.MatChipAvatar, selector: "mat-chip-avatar, [matChipAvatar]" }, { kind: "component", type: i10$1.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "directive", type: i10$1.MatChipTrailingIcon, selector: "mat-chip-trailing-icon, [matChipTrailingIcon]" }, { kind: "ngmodule", type: MatDividerModule }, { 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: "directive", type: PraxisNumberWheelBlurDirective, selector: "input[type=number][praxisNumberWheelBlur]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
27988
27988
  }
27989
27989
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: FilterSettingsComponent, decorators: [{
27990
27990
  type: Component,
@@ -32435,7 +32435,7 @@ class TableRulesEditorComponent {
32435
32435
 
32436
32436
  </mat-accordion>
32437
32437
  </div>
32438
- `, isInline: true, styles: [".rules-editor{display:flex;flex-direction:column;gap:12px;min-width:0;scroll-margin-block:72px 88px}.editor-alert{display:flex;align-items:flex-start;gap:8px;padding:8px 12px;border-radius:8px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-low);color:var(--md-sys-color-on-surface);font-size:.85rem;line-height:1.35}.editor-alert mat-icon{flex:0 0 auto;font-size:18px;width:18px;height:18px}.editor-alert--warning{border-color:var(--md-sys-color-tertiary, var(--md-sys-color-outline-variant));background:var(--md-sys-color-tertiary-container, var(--md-sys-color-surface-container-low));color:var(--md-sys-color-on-tertiary-container, var(--md-sys-color-on-surface))}.editor-alert--error{border-color:var(--md-sys-color-error);background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}.editor-alert--success{border-color:var(--md-sys-color-primary, var(--md-sys-color-outline-variant));background:var(--md-sys-color-primary-container, var(--md-sys-color-surface-container-low));color:var(--md-sys-color-on-primary-container, var(--md-sys-color-on-surface))}.block{border:1px solid var(--md-sys-color-outline-variant);border-radius:12px;background:linear-gradient(180deg,var(--md-sys-color-surface-container-low),var(--md-sys-color-surface));-webkit-backdrop-filter:saturate(140%) blur(2px);backdrop-filter:saturate(140%) blur(2px);transition:all .2s ease;min-width:0;scroll-margin-block:72px 88px}.block.is-expanded{box-shadow:var(--md-sys-elevation-level2)}.block-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;padding:6px 12px;min-height:40px;background:linear-gradient(180deg,var(--md-sys-color-surface-container-low),var(--md-sys-color-surface));border-bottom:1px solid var(--md-sys-color-outline-variant);transition:all .2s ease;min-width:0}.block-title{font-weight:600;font-size:.95rem;letter-spacing:0;display:flex;align-items:center;gap:6px;flex:0 1 auto;min-width:0;max-width:100%;overflow:hidden;overflow-wrap:normal;text-overflow:ellipsis;white-space:nowrap}.block-subtitle{opacity:.7;font-size:.8rem;margin-left:8px;flex:1 1 180px;min-width:0;overflow:hidden;overflow-wrap:normal;text-overflow:ellipsis;white-space:nowrap}.block-body{padding:12px;display:flex;flex-direction:column;gap:12px;min-width:0}.a-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}.a-actions{grid-column:1 / -1;min-width:0}.mode-tabs{--mat-tab-header-inactive-label-text-color: var(--md-sys-color-on-surface-variant)}.mode-tabs ::ng-deep .mat-mdc-tab-body-wrapper,.mode-tabs ::ng-deep .mat-mdc-tab-body,.mode-tabs ::ng-deep .mat-mdc-tab-body-content{overflow:visible}.mode-tabs ::ng-deep .mat-mdc-tab-body-content{padding-top:14px}.basic-grid{display:grid;grid-template-columns:repeat(3,minmax(180px,1fr));gap:12px;align-items:center;min-width:0}.rules-grid mat-form-field:nth-of-type(1){grid-column:1}.rules-grid mat-form-field:nth-of-type(2){grid-column:2}.rules-grid .value-host{grid-column:3;min-width:0;display:flex;align-items:center}.rules-grid .value-host>*{min-width:0;width:100%}.rules-grid mat-form-field,.group-header mat-form-field{margin:0}@media(max-width:991.98px){.basic-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.rules-grid .value-host{grid-column:1 / -1}}.basic-grid .mat-mdc-form-field .mdc-floating-label{font-size:.85rem}.spacer{flex:1}.effects-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;min-width:0}.quick-effects{display:block}.qe-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;align-items:start}.qe-group{display:flex;flex-direction:column;gap:6px}.qe-title{font-size:.85rem;opacity:.8}.qe-inline{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.qe-presets{display:grid;grid-template-columns:repeat(auto-fill,minmax(32px,1fr));gap:8px;align-items:center;max-width:280px}.qe-presets .mat-mdc-icon-button.mat-mdc-button-base{justify-self:start}.qe-presets .mat-stroked-button{grid-column:1 / -1;justify-self:start}.qe-inline .mat-mdc-icon-button.mat-mdc-button-base{width:32px;height:32px;padding:0}.qe-inline .mat-mdc-icon-button .mat-icon{font-size:18px;line-height:32px;width:18px;height:18px;transition:all .2s ease}.qe-label{display:flex;gap:6px;align-items:center;font-size:.85rem}.qe-number{width:84px;padding:6px}.qe-suffix{opacity:.7}.qe-select{width:120px}.qe-text{min-width:160px;padding:6px}.qe-toggle-group{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.qe-desc{font-size:.8rem;opacity:.75}.effects-preview{grid-column:1 / -1}.effects-preview-box{display:flex;align-items:center;gap:8px;border:1px dashed var(--md-sys-color-outline-variant);border-radius:6px;padding:6px 8px;background:var(--md-sys-color-surface-container-low);width:100%;min-height:36px;transition:all .2s ease}.pfx-badge-preview{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;border-radius:999px;font-size:12px;line-height:16px;transition:all .2s ease}.pfx-badge-preview.v-filled.c-primary{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.pfx-badge-preview.v-filled.c-accent{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}.pfx-badge-preview.v-filled.c-warn{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}.pfx-badge-preview.v-outlined{border:1px solid var(--md-sys-color-outline-variant)}.pfx-badge-preview.v-soft{background:var(--md-sys-color-surface-container-highest)}.manual-box .full{width:100%}.range-grid{display:grid;grid-template-columns:repeat(2,minmax(160px,1fr));gap:12px;align-items:center}.no-value-hint{align-self:center;opacity:.7;font-size:.85rem}.errors{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container);padding:8px 12px;border:1px solid var(--md-sys-color-error);border-radius:6px}.group-card{border:1px solid var(--md-sys-color-outline-variant);padding:8px 12px;border-radius:10px;display:flex;flex-direction:column;gap:8px;background:var(--md-sys-color-surface-container-lowest);transition:all .2s ease}.group-header{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.group-header h4{flex:0 0 auto;margin:0}.group-header mat-form-field{flex:1 1 180px;min-width:160px}.group-header .spacer{display:none}.group-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:flex-end;flex:0 1 auto;min-height:56px;max-width:100%;min-width:0}.group-actions ::ng-deep .mat-button-toggle{flex:0 1 auto;min-width:0}.group-actions ::ng-deep .mat-button-toggle-button{min-height:48px;display:inline-flex;align-items:center;min-width:0}.group-actions ::ng-deep .mat-button-toggle-label-content{display:inline-flex;align-items:center;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:991.98px){.group-actions{width:100%}}.group-list{display:grid;gap:6px}.group-item{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 8px;border:1px solid var(--md-sys-color-outline-variant);border-radius:6px;background:var(--md-sys-color-surface-container-low);transition:all .2s ease;min-width:0}.item-main{display:flex;align-items:center;gap:8px;min-width:0;flex:1 1 auto}.drag-handle{cursor:grab;opacity:.7}.expr{font-family:monospace;font-size:.85rem;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.group-footer{display:flex;gap:8px;align-items:center}.subgroups{display:grid;gap:8px;margin-top:8px}.subgroup{border:1px dashed var(--md-sys-color-outline-variant);border-radius:6px;padding:6px 8px;background:var(--md-sys-color-surface-container-low);transition:all .2s ease}.sub-header{display:flex;align-items:center;gap:8px}.sub-body{display:flex;align-items:center;justify-content:space-between;gap:12px}.rules-list .list-header{padding:4px 0}.rule-item .rule-content{display:flex;gap:12px;align-items:center;justify-content:space-between;width:100%}.rule-main{display:flex;flex-direction:column;gap:6px;min-width:0}.rule-cond{font-family:monospace;font-size:.9rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.chip{display:inline-block;padding:2px 6px;border:1px solid var(--md-sys-color-outline-variant);border-radius:10px;font-size:12px;margin-right:6px}.rule-actions{display:flex;gap:6px;align-items:center}.preview{background:var(--md-sys-color-surface-container-low);padding:8px 12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:6px}.preview-rows{display:grid;gap:6px}.p-row{display:flex;align-items:center;gap:8px}.row-title{width:72px;opacity:.7}.row-effects{display:flex;gap:6px;flex-wrap:wrap}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.rules-nav-chips{margin-bottom:6px}@media(max-width:520px){.rules-editor{gap:10px}.block-header{align-items:flex-start;flex-wrap:wrap;padding:8px 10px}.block-title{flex:1 1 100%}.block-subtitle{flex:1 1 100%;margin-left:0;overflow:visible;text-overflow:clip;white-space:normal}.block-body{padding:10px}.a-grid,.basic-grid,.range-grid,.effects-grid,.qe-row{grid-template-columns:1fr}.rules-grid mat-form-field:nth-of-type(1),.rules-grid mat-form-field:nth-of-type(2),.rules-grid .value-host{grid-column:1 / -1}.group-item,.sub-body,.rule-item .rule-content,.p-row{align-items:flex-start;flex-direction:column}.rule-actions,.group-footer{flex-wrap:wrap}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.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: i1$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3$1.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: i4$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: i4$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { 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: MatButtonToggleModule }, { kind: "directive", type: i14.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i14.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i5$1.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: MatListModule }, { kind: "component", type: i11.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i11.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i15$2.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i15$2.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i15.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i15.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i15.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i17.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: "directive", type: i17.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i3$2.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i3$2.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: "ngmodule", type: DragDropModule }, { kind: "directive", type: i13.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i13.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i13.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: DynamicFieldLoaderDirective, selector: "[dynamicFieldLoader]", inputs: ["fields", "formGroup", "enableExternalControlBinding", "itemTemplate", "debugTrace", "debugTraceLabel", "readonlyMode", "disabledMode", "presentationMode", "visible", "canvasMode"], outputs: ["componentsCreated", "fieldCreated", "fieldDestroyed", "renderError", "canvasMouseEnter", "canvasMouseLeave", "canvasClick", "canvasFocus"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i6.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { 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: "component", type: TableConfigToolbarComponent, selector: "pfx-table-config-toolbar", inputs: ["applyDisabled", "ariaLabel", "exportLabel", "importLabel", "resetLabel", "resetLabelShort", "applyLabel"], outputs: ["export", "import", "reset", "apply"] }, { kind: "component", type: RuleEffectsPanelComponent, selector: "praxis-rule-effects-panel", inputs: ["labels", "scope", "value"], outputs: ["valueChange", "apply", "reset"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
32438
+ `, isInline: true, styles: [".rules-editor{display:flex;flex-direction:column;gap:12px;min-width:0;scroll-margin-block:72px 88px}.editor-alert{display:flex;align-items:flex-start;gap:8px;padding:8px 12px;border-radius:8px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-low);color:var(--md-sys-color-on-surface);font-size:.85rem;line-height:1.35}.editor-alert mat-icon{flex:0 0 auto;font-size:18px;width:18px;height:18px}.editor-alert--warning{border-color:var(--md-sys-color-tertiary, var(--md-sys-color-outline-variant));background:var(--md-sys-color-tertiary-container, var(--md-sys-color-surface-container-low));color:var(--md-sys-color-on-tertiary-container, var(--md-sys-color-on-surface))}.editor-alert--error{border-color:var(--md-sys-color-error);background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}.editor-alert--success{border-color:var(--md-sys-color-primary, var(--md-sys-color-outline-variant));background:var(--md-sys-color-primary-container, var(--md-sys-color-surface-container-low));color:var(--md-sys-color-on-primary-container, var(--md-sys-color-on-surface))}.block{border:1px solid var(--md-sys-color-outline-variant);border-radius:12px;background:linear-gradient(180deg,var(--md-sys-color-surface-container-low),var(--md-sys-color-surface));-webkit-backdrop-filter:saturate(140%) blur(2px);backdrop-filter:saturate(140%) blur(2px);transition:all .2s ease;min-width:0;scroll-margin-block:72px 88px}.block.is-expanded{box-shadow:var(--md-sys-elevation-level2)}.block-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;padding:6px 12px;min-height:40px;background:linear-gradient(180deg,var(--md-sys-color-surface-container-low),var(--md-sys-color-surface));border-bottom:1px solid var(--md-sys-color-outline-variant);transition:all .2s ease;min-width:0}.block-title{font-weight:600;font-size:.95rem;letter-spacing:0;display:flex;align-items:center;gap:6px;flex:0 1 auto;min-width:0;max-width:100%;overflow:hidden;overflow-wrap:normal;text-overflow:ellipsis;white-space:nowrap}.block-subtitle{opacity:.7;font-size:.8rem;margin-left:8px;flex:1 1 180px;min-width:0;overflow:hidden;overflow-wrap:normal;text-overflow:ellipsis;white-space:nowrap}.block-body{padding:12px;display:flex;flex-direction:column;gap:12px;min-width:0}.a-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}.a-actions{grid-column:1 / -1;min-width:0}.mode-tabs{--mat-tab-header-inactive-label-text-color: var(--md-sys-color-on-surface-variant)}.mode-tabs ::ng-deep .mat-mdc-tab-body-wrapper,.mode-tabs ::ng-deep .mat-mdc-tab-body,.mode-tabs ::ng-deep .mat-mdc-tab-body-content{overflow:visible}.mode-tabs ::ng-deep .mat-mdc-tab-body-content{padding-top:14px}.basic-grid{display:grid;grid-template-columns:repeat(3,minmax(180px,1fr));gap:12px;align-items:center;min-width:0}.rules-grid mat-form-field:nth-of-type(1){grid-column:1}.rules-grid mat-form-field:nth-of-type(2){grid-column:2}.rules-grid .value-host{grid-column:3;min-width:0;display:flex;align-items:center}.rules-grid .value-host>*{min-width:0;width:100%}.rules-grid mat-form-field,.group-header mat-form-field{margin:0}@media(max-width:991.98px){.basic-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.rules-grid .value-host{grid-column:1 / -1}}.basic-grid .mat-mdc-form-field .mdc-floating-label{font-size:.85rem}.spacer{flex:1}.effects-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;min-width:0}.quick-effects{display:block}.qe-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;align-items:start}.qe-group{display:flex;flex-direction:column;gap:6px}.qe-title{font-size:.85rem;opacity:.8}.qe-inline{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.qe-presets{display:grid;grid-template-columns:repeat(auto-fill,minmax(32px,1fr));gap:8px;align-items:center;max-width:280px}.qe-presets .mat-mdc-icon-button.mat-mdc-button-base{justify-self:start}.qe-presets .mat-stroked-button{grid-column:1 / -1;justify-self:start}.qe-inline .mat-mdc-icon-button.mat-mdc-button-base{width:32px;height:32px;padding:0}.qe-inline .mat-mdc-icon-button .mat-icon{font-size:18px;line-height:32px;width:18px;height:18px;transition:all .2s ease}.qe-label{display:flex;gap:6px;align-items:center;font-size:.85rem}.qe-number{width:84px;padding:6px}.qe-suffix{opacity:.7}.qe-select{width:120px}.qe-text{min-width:160px;padding:6px}.qe-toggle-group{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.qe-desc{font-size:.8rem;opacity:.75}.effects-preview{grid-column:1 / -1}.effects-preview-box{display:flex;align-items:center;gap:8px;border:1px dashed var(--md-sys-color-outline-variant);border-radius:6px;padding:6px 8px;background:var(--md-sys-color-surface-container-low);width:100%;min-height:36px;transition:all .2s ease}.pfx-badge-preview{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;border-radius:999px;font-size:12px;line-height:16px;transition:all .2s ease}.pfx-badge-preview.v-filled.c-primary{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.pfx-badge-preview.v-filled.c-accent{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}.pfx-badge-preview.v-filled.c-warn{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}.pfx-badge-preview.v-outlined{border:1px solid var(--md-sys-color-outline-variant)}.pfx-badge-preview.v-soft{background:var(--md-sys-color-surface-container-highest)}.manual-box .full{width:100%}.range-grid{display:grid;grid-template-columns:repeat(2,minmax(160px,1fr));gap:12px;align-items:center}.no-value-hint{align-self:center;opacity:.7;font-size:.85rem}.errors{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container);padding:8px 12px;border:1px solid var(--md-sys-color-error);border-radius:6px}.group-card{border:1px solid var(--md-sys-color-outline-variant);padding:8px 12px;border-radius:10px;display:flex;flex-direction:column;gap:8px;background:var(--md-sys-color-surface-container-lowest);transition:all .2s ease}.group-header{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.group-header h4{flex:0 0 auto;margin:0}.group-header mat-form-field{flex:1 1 180px;min-width:160px}.group-header .spacer{display:none}.group-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:flex-end;flex:0 1 auto;min-height:56px;max-width:100%;min-width:0}.group-actions ::ng-deep .mat-button-toggle{flex:0 1 auto;min-width:0}.group-actions ::ng-deep .mat-button-toggle-button{min-height:48px;display:inline-flex;align-items:center;min-width:0}.group-actions ::ng-deep .mat-button-toggle-label-content{display:inline-flex;align-items:center;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:991.98px){.group-actions{width:100%}}.group-list{display:grid;gap:6px}.group-item{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 8px;border:1px solid var(--md-sys-color-outline-variant);border-radius:6px;background:var(--md-sys-color-surface-container-low);transition:all .2s ease;min-width:0}.item-main{display:flex;align-items:center;gap:8px;min-width:0;flex:1 1 auto}.drag-handle{cursor:grab;opacity:.7}.expr{font-family:monospace;font-size:.85rem;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.group-footer{display:flex;gap:8px;align-items:center}.subgroups{display:grid;gap:8px;margin-top:8px}.subgroup{border:1px dashed var(--md-sys-color-outline-variant);border-radius:6px;padding:6px 8px;background:var(--md-sys-color-surface-container-low);transition:all .2s ease}.sub-header{display:flex;align-items:center;gap:8px}.sub-body{display:flex;align-items:center;justify-content:space-between;gap:12px}.rules-list .list-header{padding:4px 0}.rule-item .rule-content{display:flex;gap:12px;align-items:center;justify-content:space-between;width:100%}.rule-main{display:flex;flex-direction:column;gap:6px;min-width:0}.rule-cond{font-family:monospace;font-size:.9rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.chip{display:inline-block;padding:2px 6px;border:1px solid var(--md-sys-color-outline-variant);border-radius:10px;font-size:12px;margin-right:6px}.rule-actions{display:flex;gap:6px;align-items:center}.preview{background:var(--md-sys-color-surface-container-low);padding:8px 12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:6px}.preview-rows{display:grid;gap:6px}.p-row{display:flex;align-items:center;gap:8px}.row-title{width:72px;opacity:.7}.row-effects{display:flex;gap:6px;flex-wrap:wrap}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.rules-nav-chips{margin-bottom:6px}@media(max-width:520px){.rules-editor{gap:10px}.block-header{align-items:flex-start;flex-wrap:wrap;padding:8px 10px}.block-title{flex:1 1 100%}.block-subtitle{flex:1 1 100%;margin-left:0;overflow:visible;text-overflow:clip;white-space:normal}.block-body{padding:10px}.a-grid,.basic-grid,.range-grid,.effects-grid,.qe-row{grid-template-columns:1fr}.rules-grid mat-form-field:nth-of-type(1),.rules-grid mat-form-field:nth-of-type(2),.rules-grid .value-host{grid-column:1 / -1}.group-item,.sub-body,.rule-item .rule-content,.p-row{align-items:flex-start;flex-direction:column}.rule-actions,.group-footer{flex-wrap:wrap}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.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: i1$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3$1.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: i4$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: i4$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { 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: MatButtonToggleModule }, { kind: "directive", type: i14.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i14.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i5$1.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: MatListModule }, { kind: "component", type: i11.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i11.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i15$1.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i15$1.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i10$1.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i10$1.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i10$1.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i17.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: "directive", type: i17.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i3$2.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i3$2.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: "ngmodule", type: DragDropModule }, { kind: "directive", type: i13.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i13.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i13.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: DynamicFieldLoaderDirective, selector: "[dynamicFieldLoader]", inputs: ["fields", "formGroup", "enableExternalControlBinding", "itemTemplate", "debugTrace", "debugTraceLabel", "readonlyMode", "disabledMode", "presentationMode", "visible", "canvasMode"], outputs: ["componentsCreated", "fieldCreated", "fieldDestroyed", "renderError", "canvasMouseEnter", "canvasMouseLeave", "canvasClick", "canvasFocus"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i6.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { 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: "component", type: TableConfigToolbarComponent, selector: "pfx-table-config-toolbar", inputs: ["applyDisabled", "ariaLabel", "exportLabel", "importLabel", "resetLabel", "resetLabelShort", "applyLabel"], outputs: ["export", "import", "reset", "apply"] }, { kind: "component", type: RuleEffectsPanelComponent, selector: "praxis-rule-effects-panel", inputs: ["labels", "scope", "value"], outputs: ["valueChange", "apply", "reset"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
32439
32439
  }
32440
32440
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TableRulesEditorComponent, decorators: [{
32441
32441
  type: Component,
@@ -34381,6 +34381,11 @@ const DEFAULT_I18N = {
34381
34381
  close: 'Fechar',
34382
34382
  clearSearch: 'Limpar busca',
34383
34383
  selectedFieldsSuffix: 'campos exibidos',
34384
+ selectedFieldsCount: '{count} campos exibidos',
34385
+ selectedFieldsCountSingular: '{count} campo exibido',
34386
+ selectedFieldsSectionTitle: 'Campos exibidos',
34387
+ availableFieldsSectionTitle: 'Campos disponíveis',
34388
+ manageFieldsApply: 'Aplicar',
34384
34389
  selectAllResults: 'Selecionar todos os resultados',
34385
34390
  noFilterFieldsFound: 'Nenhum campo encontrado.',
34386
34391
  fieldSelectionConflict: 'A seleção de campos foi atualizada externamente. Feche e abra novamente para continuar.',
@@ -34672,6 +34677,7 @@ class PraxisFilter {
34672
34677
  addDraftSelectedFieldIds = [];
34673
34678
  addManagerOpen = false;
34674
34679
  addManagerConflict = false;
34680
+ addManagerItemMotion = null;
34675
34681
  addManagerTitleId = `praxis-filter-fields-title-${Math.random().toString(36).slice(2)}`;
34676
34682
  addManagerDescriptionId = `praxis-filter-fields-description-${Math.random().toString(36).slice(2)}`;
34677
34683
  addOverlayPositions = [
@@ -37499,6 +37505,7 @@ class PraxisFilter {
37499
37505
  else {
37500
37506
  this.addQuery = '';
37501
37507
  this.addDraftSelectedFieldIds = [...(this.selectedFieldIds || [])];
37508
+ this.addManagerItemMotion = null;
37502
37509
  this.addManagerConflict = false;
37503
37510
  this.updateAddItems();
37504
37511
  }
@@ -37518,6 +37525,27 @@ class PraxisFilter {
37518
37525
  const current = new Set(this.addDraftSelectedFieldIds || []);
37519
37526
  checked ? current.add(fieldId) : current.delete(fieldId);
37520
37527
  this.addDraftSelectedFieldIds = [...current];
37528
+ this.startAddManagerItemMotion(fieldId, checked ? 'added' : 'removed');
37529
+ setTimeout(() => this.focusAddManagerField(fieldId));
37530
+ }
37531
+ isAddManagerItemInMotion(fieldId, type) {
37532
+ return this.addManagerItemMotion?.id === fieldId && this.addManagerItemMotion.type === type;
37533
+ }
37534
+ startAddManagerItemMotion(fieldId, type) {
37535
+ this.addManagerItemMotion = { id: fieldId, type };
37536
+ this.cdr.markForCheck();
37537
+ setTimeout(() => {
37538
+ if (this.addManagerItemMotion?.id !== fieldId || this.addManagerItemMotion.type !== type)
37539
+ return;
37540
+ this.addManagerItemMotion = null;
37541
+ this.cdr.markForCheck();
37542
+ }, 220);
37543
+ }
37544
+ focusAddManagerField(fieldId) {
37545
+ if (!this.addManagerOpen || typeof document === 'undefined')
37546
+ return;
37547
+ const item = Array.from(document.querySelectorAll('.add-manager [data-field-id]')).find((element) => element.dataset['fieldId'] === fieldId);
37548
+ item?.querySelector('input[type="checkbox"]')?.focus();
37521
37549
  }
37522
37550
  applyAddManager() {
37523
37551
  if (this.addManagerConflict)
@@ -37546,6 +37574,27 @@ class PraxisFilter {
37546
37574
  count += 1;
37547
37575
  return count;
37548
37576
  }
37577
+ getAddManagerSelectedFieldsSummary() {
37578
+ return this.getAddManagerFieldsSummary(this.addDraftSelectedFieldIds.length);
37579
+ }
37580
+ getAddManagerVisibleSelectedFieldsSummary() {
37581
+ return this.getAddManagerFieldsSummary(this.getAddManagerSelectedItems().length);
37582
+ }
37583
+ getAddManagerFieldsSummary(count) {
37584
+ const template = count === 1
37585
+ ? this.i18nLabels.selectedFieldsCountSingular || '{count} campo exibido'
37586
+ : this.i18nLabels.selectedFieldsCount ||
37587
+ `{count} ${this.i18nLabels.selectedFieldsSuffix || 'campos exibidos'}`;
37588
+ return this.formatWithCount(template, count);
37589
+ }
37590
+ getAddManagerSelectedItems() {
37591
+ const selected = new Set(this.addDraftSelectedFieldIds);
37592
+ return this.addItems.filter((item) => selected.has(item.id));
37593
+ }
37594
+ getAddManagerAvailableItems() {
37595
+ const selected = new Set(this.addDraftSelectedFieldIds);
37596
+ return this.addItems.filter((item) => !selected.has(item.id));
37597
+ }
37549
37598
  getRemovedActiveFieldLabels() {
37550
37599
  const draft = new Set(this.normalizeFieldIdList(this.addDraftSelectedFieldIds));
37551
37600
  const labels = new Map(this.getManageableFilterItems('').map((item) => [item.id, item.label]));
@@ -37580,11 +37629,28 @@ class PraxisFilter {
37580
37629
  const items = (this.schemaMetas || [])
37581
37630
  .filter((m) => !this.isFilterFieldHidden(m))
37582
37631
  .filter((m) => !fixed.has(m.name))
37583
- .map((m) => ({ id: m.name, label: m.label || m.name }));
37632
+ .map((m) => {
37633
+ const description = this.getManagedFieldDescription(m);
37634
+ return {
37635
+ id: m.name,
37636
+ label: m.label || m.name,
37637
+ ...(description ? { description } : {}),
37638
+ };
37639
+ });
37584
37640
  return q
37585
- ? items.filter((it) => it.id.toLowerCase().includes(q) || it.label.toLowerCase().includes(q))
37641
+ ? items.filter((it) => it.id.toLowerCase().includes(q) ||
37642
+ it.label.toLowerCase().includes(q) ||
37643
+ (it.description || '').toLowerCase().includes(q))
37586
37644
  : items;
37587
37645
  }
37646
+ /**
37647
+ * Uses authored field metadata only. The manager must not invent domain help
37648
+ * while an operator decides among similar filters (for example, date variants).
37649
+ */
37650
+ getManagedFieldDescription(meta) {
37651
+ const candidates = [meta.description, meta.tooltip, meta.helpText, meta.hint];
37652
+ return candidates.find((candidate) => typeof candidate === 'string' && candidate.trim().length > 0);
37653
+ }
37588
37654
  updateAddItems() {
37589
37655
  this.addItems = this.getManageableFilterItems().slice().sort((a, b) => {
37590
37656
  return a.label.localeCompare(b.label);
@@ -38233,7 +38299,7 @@ class PraxisFilter {
38233
38299
  this.advancedOpen = true;
38234
38300
  this.saveConfig();
38235
38301
  try {
38236
- const { FilterFormDialogHostComponent } = await import('./praxisui-table-filter-form-dialog-host.component-DbwGIMjF.mjs');
38302
+ const { FilterFormDialogHostComponent } = await import('./praxisui-table-filter-form-dialog-host.component-CStl0VfD.mjs');
38237
38303
  const formId = this.formId || this.filterId || 'filter';
38238
38304
  const ref = this.dialog.open(FilterFormDialogHostComponent, {
38239
38305
  width: '780px',
@@ -38606,13 +38672,12 @@ class PraxisFilter {
38606
38672
  }
38607
38673
  }
38608
38674
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisFilter, deps: [{ token: i1.GenericCrudService }, { token: ASYNC_CONFIG_STORAGE }, { token: i0.DestroyRef }, { token: FilterConfigService }, { token: i3$3.SettingsPanelService }, { token: i2$2.MatSnackBar }, { token: i1$2.MatDialog }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i1.DynamicFormService }, { token: i1.SchemaNormalizerService }, { token: i1.ComponentKeyService }, { token: i6$1.ActivatedRoute, optional: true }, { token: i1.LoggerService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
38609
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PraxisFilter, isStandalone: true, selector: "praxis-filter", inputs: { resourcePath: "resourcePath", apiUrlEntry: "apiUrlEntry", fieldMetadata: "fieldMetadata", filterId: "filterId", formId: "formId", componentInstanceId: "componentInstanceId", mode: "mode", notifyIfOutdated: "notifyIfOutdated", snoozeMs: "snoozeMs", autoOpenSettingsOnOutdated: "autoOpenSettingsOnOutdated", enableCustomization: "enableCustomization", value: "value", alwaysVisibleFields: "alwaysVisibleFields", alwaysVisibleFieldMetadataOverrides: "alwaysVisibleFieldMetadataOverrides", selectedFieldIds: "selectedFieldIds", tags: "tags", allowSaveTags: "allowSaveTags", persistenceKey: "persistenceKey", disablePersistence: "disablePersistence", i18n: "i18n", changeDebounceMs: "changeDebounceMs", showFilterSettings: "showFilterSettings", showAdvancedButton: "showAdvancedButton", showAddButton: "showAddButton", showClearButton: "showClearButton", showSearchButton: "showSearchButton", confirmTagDelete: "confirmTagDelete", placeBooleansInActions: "placeBooleansInActions", showToggleLabels: "showToggleLabels", useInlineSelectVariant: "useInlineSelectVariant", useInlineSearchableSelectVariant: "useInlineSearchableSelectVariant", useInlineMultiSelectVariant: "useInlineMultiSelectVariant", useInlineInputVariant: "useInlineInputVariant", useInlineToggleVariant: "useInlineToggleVariant", useInlineRangeVariant: "useInlineRangeVariant", useInlineDateVariant: "useInlineDateVariant", useInlineDateRangeVariant: "useInlineDateRangeVariant", useInlineTimeVariant: "useInlineTimeVariant", useInlineTimeRangeVariant: "useInlineTimeRangeVariant", useInlineTreeSelectVariant: "useInlineTreeSelectVariant", alwaysMinWidth: "alwaysMinWidth", alwaysColsMd: "alwaysColsMd", alwaysColsLg: "alwaysColsLg", tagColor: "tagColor", tagVariant: "tagVariant", tagButtonColor: "tagButtonColor", actionsButtonColor: "actionsButtonColor", actionsVariant: "actionsVariant", overlayVariant: "overlayVariant", overlayBackdrop: "overlayBackdrop", advancedOpenMode: "advancedOpenMode", advancedClearButtonsEnabled: "advancedClearButtonsEnabled" }, outputs: { submit: "submit", change: "change", clear: "clear", modeChange: "modeChange", requestSearch: "requestSearch", tagsChange: "tagsChange", selectedFieldIdsChange: "selectedFieldIdsChange", metaChanged: "metaChanged", schemaStatusChange: "schemaStatusChange" }, host: { listeners: { "window:resize": "onWindowResize()", "document:keydown": "onGlobalKeydown($event)" }, properties: { "style.--pfx-always-min": "alwaysMinWidth + \"px\"", "style.--pfx-always-cols-md": "alwaysColsMd", "style.--pfx-always-cols-lg": "alwaysColsLg" } }, viewQueries: [{ propertyName: "addManagerOrigin", first: true, predicate: ["addManagerOrigin"], descendants: true, read: ElementRef }, { propertyName: "anchorRef", first: true, predicate: ["anchorRef"], descendants: true, read: CdkOverlayOrigin }, { propertyName: "addAnchor", first: true, predicate: ["addAnchor"], descendants: true, read: CdkOverlayOrigin }, { propertyName: "advancedButton", first: true, predicate: ["advancedButton"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "@if (saving) {\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n}\n@if (schemaError) {\n <div class=\"schema-error-banner\" role=\"alert\" aria-live=\"polite\">\n <mat-icon [praxisIcon]=\"'error_outline'\" aria-hidden=\"true\"></mat-icon>\n <span class=\"schema-error-message\">{{ i18nLabels.errorLoadingFilters || 'Erro ao carregar filtros.' }}</span>\n <button\n mat-stroked-button\n class=\"schema-error-retry\"\n type=\"button\"\n (click)=\"retrySchemaLoad()\"\n [attr.aria-label]=\"i18nLabels.retry || 'Tentar novamente'\"\n >\n {{ i18nLabels.retry || 'Tentar novamente' }}\n </button>\n </div>\n}\n\n<form class=\"praxis-filter-bar\" [class.is-open]=\"advancedOpen\"\n [class.has-compact]=\"compactSelectedMetas.length || compactAlwaysVisibleMetas.length\"\n [class.tag-variant-filled]=\"tagVariant === 'filled'\"\n [class.tag-variant-outlined]=\"tagVariant === 'outlined'\"\n [class.tag-color-basic]=\"tagColor === 'basic'\"\n [class.tag-color-primary]=\"tagColor === 'primary'\"\n [class.tag-color-accent]=\"tagColor === 'accent'\"\n [class.tag-color-warn]=\"tagColor === 'warn'\"\n (click)=\"onFieldInteraction($event)\"\n (focusin)=\"onFieldInteraction($event)\"\n (change)=\"$event.stopPropagation()\"\n (submit)=\"onSubmit(); $event.preventDefault(); $event.stopPropagation()\">\n <div class=\"inline-actions\" [class.actions-outlined]=\"actionsVariant==='outlined'\">\n <div class=\"actions-anchor\" #anchorRef=\"cdkOverlayOrigin\" cdkOverlayOrigin></div>\n @if (toggleMetas.length) {\n <div class=\"inline-toggles\">\n <ng-container dynamicFieldLoader [fields]=\"toggleMetas\" [formGroup]=\"alwaysForm\"\n (componentsCreated)=\"onToggleComponents($event)\"></ng-container>\n </div>\n }\n\n @if (showAdvancedButton || showAddButton || showFilterSettings || isFieldAuthoringEnabled()) {\n <div class=\"action-cluster action-cluster--manage\">\n @if (showAdvancedButton) {\n <button #advancedButton mat-icon-button class=\"cluster-btn\"\n [class.is-opening]=\"advancedOpening\" [class.is-disabled]=\"!hasAdvancedFields()\"\n [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\" type=\"button\"\n [matBadge]=\"activeFiltersCount\" [matBadgeHidden]=\"!activeFiltersCount || !hasAdvancedFields()\" matBadgeSize=\"small\"\n matBadgeColor=\"primary\" [matBadgeOverlap]=\"false\" (click)=\"toggleAdvanced()\"\n [attr.aria-label]=\"getAdvancedAriaLabel()\" [attr.aria-expanded]=\"advancedOpen\"\n [attr.aria-disabled]=\"!hasAdvancedFields()\"\n [attr.aria-busy]=\"advancedOpening ? 'true' : null\"\n [matTooltip]=\"getAdvancedTooltip()\"\n matTooltipPosition=\"below\"\n [attr.aria-controls]=\"advancedPanelId\">\n @if (advancedOpening) {\n <mat-progress-spinner\n class=\"cluster-btn-spinner\"\n mode=\"indeterminate\"\n diameter=\"18\"\n strokeWidth=\"3\"\n aria-hidden=\"true\"\n ></mat-progress-spinner>\n } @else {\n <mat-icon [praxisIcon]=\"'filter_list'\"></mat-icon>\n }\n </button>\n }\n @if (showAddButton) {\n <button #addManagerOrigin=\"cdkOverlayOrigin\" cdkOverlayOrigin mat-icon-button class=\"cluster-btn\"\n [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\"\n type=\"button\" [attr.aria-label]=\"getAddAriaLabel()\" [matTooltip]=\"getAddTooltip()\"\n matTooltipPosition=\"below\" [class.is-disabled]=\"!hasAddableFields()\"\n [attr.aria-disabled]=\"!hasAddableFields()\" [attr.aria-expanded]=\"addManagerOpen\"\n aria-haspopup=\"dialog\" [attr.aria-controls]=\"addManagerOpen ? addManagerTitleId : null\"\n (click)=\"toggleAddManager()\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n </button>\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"addManagerOrigin\"\n [cdkConnectedOverlayOpen]=\"addManagerOpen\" [cdkConnectedOverlayPositions]=\"addOverlayPositions\"\n [cdkConnectedOverlayHasBackdrop]=\"true\" cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"closeAddManager()\" (detach)=\"closeAddManager()\"\n (overlayKeydown)=\"$event.key === 'Escape' && closeAddManager()\">\n <section class=\"add-manager\" role=\"dialog\" [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"addManagerTitleId\" [attr.aria-describedby]=\"addManagerDescriptionId\"\n cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <header class=\"add-manager__header\">\n <div>\n <h2 [id]=\"addManagerTitleId\">{{ i18nLabels.manageFieldsTitle || 'Gerenciar campos de filtro' }}</h2>\n <p [id]=\"addManagerDescriptionId\">{{ i18nLabels.manageFieldsDescription || 'Escolha os campos exibidos na barra de filtros.' }}</p>\n </div>\n <button mat-icon-button type=\"button\" (click)=\"closeAddManager()\"\n [attr.aria-label]=\"i18nLabels.close || 'Fechar'\">\n <mat-icon [praxisIcon]=\"'close'\" aria-hidden=\"true\"></mat-icon>\n </button>\n </header>\n <div class=\"add-manager__search\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>{{ i18nLabels.filtersSearch || i18nLabels.searchPlaceholder }}</mat-label>\n <mat-icon matPrefix [praxisIcon]=\"'search'\" aria-hidden=\"true\"></mat-icon>\n <input #addSearchInput matInput cdkFocusInitial [value]=\"addQuery\"\n (input)=\"onAddQuery(($any($event.target)).value)\" />\n @if (addQuery) {\n <button matSuffix mat-icon-button type=\"button\" (click)=\"onAddQuery(''); addSearchInput.focus()\"\n [attr.aria-label]=\"i18nLabels.clearSearch || 'Limpar busca'\">\n <mat-icon [praxisIcon]=\"'close'\" aria-hidden=\"true\"></mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n <div class=\"add-manager__summary\" aria-live=\"polite\">\n {{ addDraftSelectedFieldIds.length }} {{ i18nLabels.selectedFieldsSuffix || 'campos exibidos' }}\n </div>\n <div class=\"add-manager__bulk\">\n <mat-checkbox [checked]=\"isAllSelected()\" [indeterminate]=\"isSomeSelected() && !isAllSelected()\"\n [disabled]=\"!addItems.length || addManagerConflict\"\n (change)=\"toggleSelectAll()\">\n {{ i18nLabels.selectAllResults || i18nLabels.selectAll || 'Selecionar todos os resultados' }}\n </mat-checkbox>\n </div>\n <div class=\"add-manager__list\" role=\"group\" [attr.aria-label]=\"i18nLabels.manageFieldsTitle || 'Gerenciar campos de filtro'\">\n @for (it of addItems; track trackById($index, it)) {\n <mat-checkbox class=\"add-manager__item\" [checked]=\"addDraftSelectedFieldIds.includes(it.id)\"\n [disabled]=\"addManagerConflict\"\n (change)=\"toggleManagedField(it.id, $event.checked)\">{{ it.label }}</mat-checkbox>\n }\n @if (!addItems.length) {\n <div class=\"add-manager__empty\" role=\"status\">\n <mat-icon [praxisIcon]=\"'search_off'\" aria-hidden=\"true\"></mat-icon>\n <span>{{ addQuery ? (i18nLabels.noFilterFieldsFound || 'Nenhum campo encontrado.') : (i18nLabels.addUnavailable || 'Todos os campos j\u00E1 est\u00E3o vis\u00EDveis') }}</span>\n </div>\n }\n </div>\n @if (addManagerConflict) {\n <div class=\"add-manager__notice add-manager__notice--conflict\" role=\"alert\">\n <mat-icon [praxisIcon]=\"'sync_problem'\" aria-hidden=\"true\"></mat-icon>\n <span>{{ i18nLabels.fieldSelectionConflict }}</span>\n </div>\n } @else if (getRemovedActiveFieldLabels().length) {\n <div class=\"add-manager__notice add-manager__notice--warning\" role=\"status\">\n <mat-icon [praxisIcon]=\"'warning_amber'\" aria-hidden=\"true\"></mat-icon>\n <span>{{ i18nLabels.removingActiveFields }} {{ getRemovedActiveFieldLabels().join(', ') }}</span>\n </div>\n }\n <footer class=\"add-manager__footer\">\n <button mat-button type=\"button\" (click)=\"closeAddManager()\">{{ i18nLabels.cancel }}</button>\n <button mat-flat-button color=\"primary\" type=\"button\"\n [disabled]=\"!isAddManagerDirty() || addManagerConflict\"\n (click)=\"applyAddManager()\">\n {{ i18nLabels.apply }}\n @if (isAddManagerDirty()) { ({{ getAddManagerChangeCount() }}) }\n </button>\n </footer>\n </section>\n </ng-template>\n }\n @if (showFilterSettings) {\n <button mat-icon-button class=\"cluster-btn separator-before\" [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\"\n type=\"button\" (click)=\"openSettings()\" [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\" matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"getSettingsTooltip()\"\n matTooltipPosition=\"below\" [attr.aria-label]=\"getSettingsAriaLabel()\">\n <mat-icon [praxisIcon]=\"'settings'\"></mat-icon>\n </button>\n }\n @if (isFieldAuthoringEnabled() && activeEditableFieldMeta) {\n <button\n mat-icon-button\n class=\"cluster-btn\"\n [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\"\n type=\"button\"\n data-testid=\"filter-field-settings-trigger\"\n [attr.aria-label]=\"activeEditableFieldLabel\"\n (click)=\"openSelectedFieldEditor()\"\n >\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n </button>\n }\n </div>\n }\n\n @if ((showClearButton && activeFiltersCount > 0) || showSearchButton) {\n <div class=\"action-cluster action-cluster--query\">\n @if (showClearButton && activeFiltersCount > 0) {\n <button\n mat-icon-button\n class=\"cluster-btn\"\n [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\"\n type=\"button\"\n data-testid=\"filter-clear-trigger\"\n (click)=\"onClear()\"\n [attr.aria-label]=\"i18nLabels.clear\"\n [matTooltip]=\"i18nLabels.clear\"\n matTooltipPosition=\"below\"\n >\n <mat-icon [praxisIcon]=\"'filter_alt_off'\"></mat-icon>\n </button>\n }\n @if (showSearchButton) {\n <button\n mat-icon-button\n class=\"cluster-btn\"\n [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\"\n type=\"submit\"\n [attr.aria-label]=\"i18nLabels.apply\"\n [matTooltip]=\"i18nLabels.apply\"\n matTooltipPosition=\"below\"\n >\n <mat-icon [praxisIcon]=\"'search'\"></mat-icon>\n </button>\n }\n </div>\n }\n\n <span class=\"sr-only\" aria-live=\"polite\">{{ advancedOpening ? (i18nLabels.advancedOpening || 'Abrindo filtro avan\u00E7ado...') : getAddAriaLabel() }}</span>\n</div>\n\n@if (compactSelectedMetas.length || compactAlwaysVisibleMetas.length) {\n <div class=\"compact-fields\">\n @if (compactSelectedMetas.length) {\n <ng-container dynamicFieldLoader [fields]=\"compactSelectedMetas\"\n [formGroup]=\"alwaysForm\" (componentsCreated)=\"onSelectedComponents($event)\"></ng-container>\n }\n @if (compactAlwaysVisibleMetas.length) {\n <ng-container dynamicFieldLoader [fields]=\"compactAlwaysVisibleMetas\"\n [formGroup]=\"alwaysForm\" (componentsCreated)=\"onAlwaysComponents($event)\"></ng-container>\n }\n </div>\n}\n\n@if (gridSelectedMetas.length || gridAlwaysVisibleMetas.length) {\n <div class=\"fields-grid\">\n @if (gridSelectedMetas.length) {\n <ng-container dynamicFieldLoader [fields]=\"gridSelectedMetas\" [formGroup]=\"alwaysForm\"\n (componentsCreated)=\"onSelectedComponents($event)\"></ng-container>\n }\n @if (gridAlwaysVisibleMetas.length) {\n <ng-container dynamicFieldLoader [fields]=\"gridAlwaysVisibleMetas\"\n [formGroup]=\"alwaysForm\" (componentsCreated)=\"onAlwaysComponents($event)\"></ng-container>\n }\n </div>\n}\n\n<span class=\"sr-only\" aria-live=\"polite\">\n {{ activeFiltersCount ? (activeFiltersCount + ' filtros ativos') : '' }}\n</span>\n<button type=\"submit\" class=\"hidden-submit\" aria-hidden=\"true\" tabindex=\"-1\"></button>\n</form>\n\n@if (displayedTags.length) {\n <div\n class=\"praxis-filter-tags\"\n [class.outlined]=\"tagVariant==='outlined'\"\n [class.tag-color-basic]=\"tagColor === 'basic'\"\n [class.tag-color-primary]=\"tagColor === 'primary'\"\n [class.tag-color-accent]=\"tagColor === 'accent'\"\n [class.tag-color-warn]=\"tagColor === 'warn'\"\n >\n <mat-chip-set [attr.aria-label]=\"i18nLabels.shortcutsLabel || 'Atalhos'\">\n @for (tag of displayedTags; track trackById($index, tag)) {\n <mat-chip [class.active]=\"isActiveTag(tag)\"\n [color]=\"tagVariant === 'outlined' || tagColor === 'basic' ? null : tagColor\"\n [highlighted]=\"tagVariant === 'filled' && tagColor !== 'basic'\" (click)=\"applyTag(tag)\"\n (keydown.enter)=\"applyTag(tag)\" (keydown.space)=\"applyTag(tag)\" tabindex=\"0\" role=\"button\"\n [attr.aria-pressed]=\"isActiveTag(tag)\">\n @if (editingTagId !== tag.id) {\n @if (isActiveTag(tag)) {\n <span class=\"chip-leading\">\n <mat-icon class=\"leading-check\">check</mat-icon>\n </span>\n }\n <span class=\"chip-label\">{{ tag.label }}</span>\n @if (isUserTag(tag)) {\n <span class=\"chip-trailing\">\n <button mat-icon-button [color]=\"tagButtonColor === 'basic' ? null : tagButtonColor\"\n [matMenuTriggerFor]=\"tagMenu\" (click)=\"$event.stopPropagation()\" [attr.aria-label]=\"getTagActionsAriaLabel(tag)\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #tagMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item (click)=\"startEditTag(tag, $event)\">\n <mat-icon>edit</mat-icon>\n <span>{{ i18nLabels.renameShortcut }}</span>\n </button>\n <button mat-menu-item (click)=\"deleteTag(tag)\">\n <mat-icon>delete</mat-icon>\n <span>{{ i18nLabels.removeShortcut }}</span>\n </button>\n </mat-menu>\n </span>\n } @else {\n <span class=\"chip-readonly\" [matTooltip]=\"i18nLabels.readonlyShortcut\">\n <mat-icon>lock</mat-icon>\n </span>\n }\n } @else {\n <input matInput class=\"chip-editor\" [formControl]=\"editingTagLabel\" autofocus\n [matTooltip]=\"'Enter para salvar, Esc para cancelar'\" matTooltipPosition=\"below\"\n (keydown.enter)=\"commitEditTag(tag, $event)\" (keydown.escape)=\"cancelEditTag($event)\"\n (blur)=\"commitEditTag(tag, $event)\" (click)=\"$event.stopPropagation()\" />\n }\n </mat-chip>\n }\n </mat-chip-set>\n </div>\n}\n", styles: ["@charset \"UTF-8\";:root{--pfx-filter-h: 42px;--pfx-filter-align-offset: 2px;--pfx-gap-x: 12px;--pfx-gap-y: 8px;--pfx-always-max-desktop: 380px;--pfx-slider-span-desktop: 2;--pfx-advanced-pad-x: 24px;--pfx-field-min: 280px;--pfx-overlay-margin-y: 16px;--pfx-overlay-margin-x: 16px}:host-context(.theme-light){--pfx-surface-border: var(--md-sys-color-outline)}:host{--border-color: var(--md-sys-color-outline-variant);--border-color-hover: var(--md-sys-color-outline);--pfx-overlay-surface: var(--md-sys-color-surface-container);--pfx-overlay-surface-elev: var(--md-sys-color-surface-container-high);--pfx-overlay-surface-variant: var(--md-sys-color-surface-variant);--pfx-overlay-on-surface: var(--md-sys-color-on-surface);--pfx-overlay-on-surface-variant: var(--md-sys-color-on-surface-variant);display:block;width:100%;min-width:0;flex:1 1 auto}.schema-error-banner{display:flex;align-items:center;gap:8px;margin:0 0 8px;padding:8px 10px;border-radius:10px;border:1px solid color-mix(in srgb,var(--md-sys-color-error) 50%,transparent);background:color-mix(in srgb,var(--md-sys-color-error-container) 85%,transparent);color:var(--md-sys-color-on-error-container)}.schema-error-message{min-width:0;flex:1 1 auto;font-size:.8125rem}:host ::ng-deep .schema-error-retry.mat-mdc-outlined-button{--mdc-outlined-button-outline-color: color-mix( in srgb, var(--md-sys-color-error) 55%, var(--md-sys-color-outline) )}.praxis-filter-bar{display:grid;width:100%;grid-template-columns:minmax(0,1fr) auto;column-gap:6px;row-gap:6px;align-items:center}.inline-actions .actions-anchor{width:0;height:0;overflow:hidden}.inline-actions{grid-column:2;grid-row:1;flex:0 0 auto;display:flex;gap:6px;justify-self:end;align-self:center;width:fit-content;white-space:nowrap;height:var(--pfx-filter-h);align-items:center;padding:0 2px}.action-cluster{flex:0 0 auto;display:inline-flex;align-items:center;gap:2px;min-height:36px;padding:2px;border-radius:999px;border:1px solid var(--pfx-surface-border, var(--md-sys-color-outline-variant));background:var(--md-sys-color-surface-container-highest)}.action-cluster--manage{position:relative;border-color:color-mix(in srgb,var(--md-sys-color-primary) 35%,var(--md-sys-color-outline-variant));background:var(--md-sys-color-surface-container-high)}:host ::ng-deep .action-cluster .mat-mdc-icon-button,:host ::ng-deep .action-cluster .cluster-btn.mat-mdc-icon-button{width:32px;height:32px;padding:0;display:inline-grid;place-items:center;--mat-icon-button-state-layer-size: 32px}.action-cluster .cluster-btn.is-opening{pointer-events:none}.action-cluster .cluster-btn.is-disabled{color:color-mix(in srgb,var(--md-sys-color-on-surface) 38%,transparent);cursor:default;opacity:.56}.action-cluster .cluster-btn-spinner{width:18px!important;height:18px!important;display:block;grid-area:1/1;--mdc-circular-progress-active-indicator-color: currentColor}.inline-actions.actions-outlined button.mat-mdc-icon-button{border:1px solid var(--pfx-surface-border, var(--md-sys-color-outline-variant));border-radius:50%}.inline-actions.actions-outlined .action-cluster button.mat-mdc-icon-button{border-color:transparent}.separator-before{position:relative;margin-left:10px}.separator-before:before{content:\"\";position:absolute;left:-7px;top:50%;width:1px;height:18px;transform:translateY(-50%);background:color-mix(in srgb,var(--md-sys-color-outline) 72%,transparent)}.inline-actions mat-icon{width:20px;height:20px;font-size:20px}.fields-grid{grid-column:1;grid-row:1;display:grid;grid-template-columns:repeat(auto-fit,minmax(var(--pfx-always-min, 220px),1fr));grid-auto-flow:row dense;gap:6px}.compact-fields{grid-column:1;grid-row:1;display:flex;flex-wrap:wrap;justify-content:flex-start;align-content:center;align-items:center;gap:6px;min-width:0;min-height:var(--pfx-filter-h)}:host ::ng-deep .compact-fields .pfx-field-shell,:host ::ng-deep .compact-fields .pfx-field-shell-wrapper,:host ::ng-deep .compact-fields .pfx-field-shell-host{--pfx-field-shell-width: fit-content;--pfx-field-shell-field-width: auto;width:fit-content!important;max-width:100%;min-width:0;flex:0 1 auto!important}:host ::ng-deep .compact-fields>.pfx-field-shell,:host ::ng-deep .compact-fields>praxis-field-shell{flex:0 1 auto!important;width:fit-content!important;max-width:100%;min-width:0}:host ::ng-deep .compact-fields .pfx-field-shell .mat-mdc-form-field{width:auto!important;max-width:100%;margin-bottom:0}:host ::ng-deep .compact-fields .pfx-field-shell[data-control-type=inlineTime] .mat-mdc-form-field.pdx-inline-time{width:var(--pdx-inline-time-field-w, auto)!important;inline-size:var(--pdx-inline-time-field-w, auto)!important;max-width:min(var(--pdx-inline-time-max-w, 280px),100vw - 48px)!important}:host ::ng-deep .compact-fields .pfx-field-shell[data-control-type=inlineDateRange] .mat-mdc-form-field{width:var(--pdx-inline-date-range-shell-width, auto)!important;max-width:100%!important}.praxis-filter-bar.has-compact .compact-fields{grid-column:1;grid-row:1}.praxis-filter-bar.has-compact .fields-grid{grid-column:1/-1;grid-row:2}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=slider] mat-slider,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=range-slider] mat-slider,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeSlider] mat-slider{width:100%;display:block}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=slider] .pdx-slider-wrapper,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=range-slider] .pdx-slider-wrapper,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeSlider] .pdx-slider-wrapper{padding-top:2px}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=range-slider] .pdx-range-slider-container,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeSlider] .pdx-range-slider-container{padding:2px 0 0}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=range-slider] .pdx-slider-label,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeSlider] .pdx-slider-label{margin-bottom:4px;line-height:1.15}:host ::ng-deep .fields-grid .mat-mdc-text-field-wrapper.mdc-text-field--outlined{min-height:var(--pfx-filter-h);align-items:center}:host ::ng-deep .fields-grid .mat-mdc-form-field-infix{min-height:var(--pfx-filter-h)}:host ::ng-deep .fields-grid .mat-mdc-select-trigger{height:var(--pfx-filter-h);align-items:center}:host ::ng-deep .fields-grid .mat-mdc-form-field{width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineSelect]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineSelect] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineSearchableSelect]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineSearchableSelect] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineMultiSelect]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineMultiSelect] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineInput]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineInput] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlinePhone]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlinePhone] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineToggle]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineToggle] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineRange]{justify-self:start}:host ::ng-deep .compact-fields .pfx-field-shell[data-control-type=inlineRange]{max-width:min(340px,100%)}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineDate]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineDate] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineDateRange]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineDateRange] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .mat-mdc-form-field-subscript-wrapper{min-height:0;margin-top:0}:host ::ng-deep .fields-grid .mat-mdc-form-field{margin-bottom:0}.praxis-filter-bar.has-compact{--pfx-filter-tag-color: var(--md-sys-color-primary-container);--pfx-filter-tag-on-color: var(--md-sys-color-on-primary-container);--pfx-filter-tag-outline-color: var(--md-sys-color-primary);--pdx-inline-control-height: var(--pfx-filter-inline-control-height, 42px);--pdx-inline-control-height-mobile: var(--pfx-filter-inline-control-height-mobile, 40px);--pdx-inline-control-padding-x: var(--pfx-filter-inline-control-padding-x, 12px);--pdx-inline-control-padding-x-mobile: var(--pfx-filter-inline-control-padding-x-mobile, 12px);--pdx-inline-clear-size: var(--pfx-filter-inline-clear-size, 22px);--pdx-inline-chip-radius: var(--pfx-filter-inline-chip-radius, var(--md-sys-shape-corner-full, 999px));--pdx-inline-chip-active-bg: var(--pfx-filter-tag-color);--pdx-inline-chip-active-fg: var(--pfx-filter-tag-on-color);--pdx-inline-chip-active-clear-color: var(--pfx-filter-tag-on-color);--pdx-inline-field-focus-outline: var(--pfx-filter-tag-outline-color)}.praxis-filter-bar.has-compact.tag-color-accent{--pfx-filter-tag-color: var(--md-sys-color-tertiary-container, var(--md-sys-color-secondary-container));--pfx-filter-tag-on-color: var(--md-sys-color-on-tertiary-container, var(--md-sys-color-on-secondary-container));--pfx-filter-tag-outline-color: var(--md-sys-color-tertiary, var(--md-sys-color-secondary))}.praxis-filter-bar.has-compact.tag-color-warn{--pfx-filter-tag-color: var(--md-sys-color-error-container);--pfx-filter-tag-on-color: var(--md-sys-color-on-error-container);--pfx-filter-tag-outline-color: var(--md-sys-color-error)}.praxis-filter-bar.has-compact.tag-color-basic{--pfx-filter-tag-color: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);--pfx-filter-tag-on-color: var(--md-sys-color-on-surface);--pfx-filter-tag-outline-color: var(--md-sys-color-outline-variant)}:host ::ng-deep .praxis-filter-bar.has-compact{--pfx-filter-inline-chip-padding-x: var(--pdx-inline-control-padding-x);--pfx-filter-inline-icon-gap: 4px}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-text-field-wrapper.mdc-text-field--outlined{padding-inline:var(--pfx-filter-inline-chip-padding-x)!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-form-field-icon-prefix{align-items:center;display:inline-flex;flex:0 0 auto;margin-right:var(--pfx-filter-inline-icon-gap)!important;padding:0!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-form-field-icon-suffix{align-items:center;display:inline-flex;flex:0 0 auto;gap:var(--pfx-filter-inline-icon-gap)!important;margin-left:var(--pfx-filter-inline-icon-gap)!important;padding:0!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-form-field-icon-prefix>.mat-icon,:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-form-field-icon-suffix>.mat-icon{flex:0 0 16px!important;font-size:16px!important;height:16px!important;line-height:16px!important;margin:0!important;padding:0!important;width:16px!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-form-field-infix{padding-inline:0!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select) .pdx-chip-trigger{gap:var(--pfx-filter-inline-icon-gap)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-chip-trigger.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-currency-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .mat-mdc-form-field.pdx-has-value .mat-mdc-text-field-wrapper,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-select .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-searchable-select .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-async-select.pdx-has-selection .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-date-range.pdx-inline-date-range-has-value .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-date-range.pdx-inline-date-range-has-both .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-entity-lookup.pdx-has-selection .pdx-chip-trigger,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-multi-select.pdx-has-selection .pdx-chip-trigger,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-distance-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-score-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-relative-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-relative-period-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-rating-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-pipeline-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-sentiment-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-color-label-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-time-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-toggle-pill.is-active{--pdx-inline-currency-symbol-color: var(--pfx-filter-tag-on-color);background:var(--pfx-filter-tag-color)!important;border-color:transparent!important;color:var(--pfx-filter-tag-on-color)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-chip-trigger.is-active :where(.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-currency-range-chip.is-active :where(.mat-icon,.pdx-inline-currency-range-value,.pdx-inline-currency-range-text,.pdx-inline-currency-range-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .mat-mdc-form-field.pdx-has-value :where(input,.mat-mdc-input-element,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,.pdx-inline-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear) :where(input,.mat-mdc-input-element,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,.pdx-inline-clear,.pdx-inline-number-suffix),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled :where(.pdx-inline-select,.pdx-inline-searchable-select) .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active) :where(.mat-mdc-select-value,.mat-mdc-select-min-line,.mat-mdc-select-placeholder,.pdx-chip-trigger,.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-async-select.pdx-has-selection :where(.mat-mdc-select-value,.mat-mdc-select-min-line,.mat-mdc-select-placeholder,.pdx-chip-trigger,.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-date-range.pdx-inline-date-range-has-value :where(.mat-date-range-input-inner,.mat-date-range-input-separator,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,input),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-date-range.pdx-inline-date-range-has-both :where(.mat-date-range-input-inner,.mat-date-range-input-separator,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,input),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled :where(.pdx-inline-entity-lookup.pdx-has-selection,.pdx-inline-multi-select.pdx-has-selection) .pdx-chip-trigger :where(.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled :where(.pdx-inline-range-chip.is-active,.pdx-inline-distance-chip.is-active,.pdx-inline-score-chip.is-active,.pdx-inline-relative-chip.is-active,.pdx-inline-relative-period-chip.is-active,.pdx-inline-rating-chip.is-active,.pdx-inline-pipeline-chip.is-active,.pdx-inline-sentiment-chip.is-active,.pdx-inline-color-label-chip.is-active) :where(.mat-icon,button,span),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-time-range-chip.is-active :where(.pdx-inline-time-range-icon,.pdx-inline-time-range-text,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-toggle-pill.is-active :where(.pdx-inline-toggle-label,.mat-icon){color:var(--pfx-filter-tag-on-color)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-chip-trigger.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-currency-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .mat-mdc-form-field.pdx-has-value .mat-mdc-text-field-wrapper,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-select .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-searchable-select .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-async-select.pdx-has-selection .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-date-range.pdx-inline-date-range-has-value .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-date-range.pdx-inline-date-range-has-both .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-entity-lookup.pdx-has-selection .pdx-chip-trigger,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-multi-select.pdx-has-selection .pdx-chip-trigger,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-distance-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-score-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-relative-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-relative-period-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-rating-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-pipeline-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-sentiment-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-color-label-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-time-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-toggle-pill.is-active{--pdx-inline-currency-symbol-color: var(--pfx-filter-tag-outline-color);background:transparent!important;border-color:var(--pfx-filter-tag-outline-color)!important;box-shadow:inset 0 0 0 1px var(--pfx-filter-tag-outline-color);color:var(--pfx-filter-tag-outline-color)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-chip-trigger.is-active :where(.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-currency-range-chip.is-active :where(.mat-icon,.pdx-inline-currency-range-value,.pdx-inline-currency-range-text,.pdx-inline-currency-range-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .mat-mdc-form-field.pdx-has-value :where(input,.mat-mdc-input-element,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,.pdx-inline-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear) :where(input,.mat-mdc-input-element,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,.pdx-inline-clear,.pdx-inline-number-suffix),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined :where(.pdx-inline-select,.pdx-inline-searchable-select) .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active) :where(.mat-mdc-select-value,.mat-mdc-select-min-line,.mat-mdc-select-placeholder,.pdx-chip-trigger,.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-async-select.pdx-has-selection :where(.mat-mdc-select-value,.mat-mdc-select-min-line,.mat-mdc-select-placeholder,.pdx-chip-trigger,.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-date-range.pdx-inline-date-range-has-value :where(.mat-date-range-input-inner,.mat-date-range-input-separator,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,input),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-date-range.pdx-inline-date-range-has-both :where(.mat-date-range-input-inner,.mat-date-range-input-separator,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,input),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined :where(.pdx-inline-entity-lookup.pdx-has-selection,.pdx-inline-multi-select.pdx-has-selection) .pdx-chip-trigger :where(.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined :where(.pdx-inline-range-chip.is-active,.pdx-inline-distance-chip.is-active,.pdx-inline-score-chip.is-active,.pdx-inline-relative-chip.is-active,.pdx-inline-relative-period-chip.is-active,.pdx-inline-rating-chip.is-active,.pdx-inline-pipeline-chip.is-active,.pdx-inline-sentiment-chip.is-active,.pdx-inline-color-label-chip.is-active) :where(.mat-icon,button,span),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-time-range-chip.is-active :where(.pdx-inline-time-range-icon,.pdx-inline-time-range-text,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-toggle-pill.is-active :where(.pdx-inline-toggle-label,.mat-icon){color:var(--pfx-filter-tag-outline-color)!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-chip-trigger.is-active,.mat-mdc-form-field.pdx-has-value,.pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear),.pdx-inline-currency-range-chip.is-active,.pdx-inline-range-chip.is-active,.pdx-inline-distance-chip.is-active,.pdx-inline-score-chip.is-active,.pdx-inline-relative-chip.is-active,.pdx-inline-relative-period-chip.is-active,.pdx-inline-rating-chip.is-active,.pdx-inline-pipeline-chip.is-active,.pdx-inline-sentiment-chip.is-active,.pdx-inline-color-label-chip.is-active,.pdx-inline-time-range-chip.is-active,.pdx-inline-toggle-pill.is-active) :where(.pdx-chip-clear,.pdx-inline-clear,.pdx-inline-currency-range-clear,.pdx-inline-range-clear,.pdx-inline-distance-clear,.pdx-inline-score-clear,.pdx-inline-relative-clear,.pdx-inline-rating-clear,.pdx-inline-pipeline-clear,.pdx-inline-sentiment-clear,.pdx-inline-color-label-clear,.pdx-inline-time-range-clear,.pdx-inline-toggle-clear){background:color-mix(in srgb,currentColor 16%,transparent)!important;border-radius:50%!important;color:inherit!important;display:inline-grid!important;flex:0 0 var(--pdx-inline-clear-size, 22px)!important;height:var(--pdx-inline-clear-size, 22px)!important;min-width:var(--pdx-inline-clear-size, 22px)!important;place-items:center!important;width:var(--pdx-inline-clear-size, 22px)!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-chip-trigger.is-active,.mat-mdc-form-field.pdx-has-value,.pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear),.pdx-inline-currency-range-chip.is-active,.pdx-inline-range-chip.is-active,.pdx-inline-distance-chip.is-active,.pdx-inline-score-chip.is-active,.pdx-inline-relative-chip.is-active,.pdx-inline-relative-period-chip.is-active,.pdx-inline-rating-chip.is-active,.pdx-inline-pipeline-chip.is-active,.pdx-inline-sentiment-chip.is-active,.pdx-inline-color-label-chip.is-active,.pdx-inline-time-range-chip.is-active,.pdx-inline-toggle-pill.is-active) :where(.pdx-chip-clear,.pdx-inline-clear,.pdx-inline-currency-range-clear,.pdx-inline-range-clear,.pdx-inline-distance-clear,.pdx-inline-score-clear,.pdx-inline-relative-clear,.pdx-inline-rating-clear,.pdx-inline-pipeline-clear,.pdx-inline-sentiment-clear,.pdx-inline-color-label-clear,.pdx-inline-time-range-clear,.pdx-inline-toggle-clear):hover{background:color-mix(in srgb,currentColor 24%,transparent)!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-chip-trigger.is-active,.mat-mdc-form-field.pdx-has-value,.pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear),.pdx-inline-currency-range-chip.is-active,.pdx-inline-range-chip.is-active,.pdx-inline-distance-chip.is-active,.pdx-inline-score-chip.is-active,.pdx-inline-relative-chip.is-active,.pdx-inline-relative-period-chip.is-active,.pdx-inline-rating-chip.is-active,.pdx-inline-pipeline-chip.is-active,.pdx-inline-sentiment-chip.is-active,.pdx-inline-color-label-chip.is-active,.pdx-inline-time-range-chip.is-active,.pdx-inline-toggle-pill.is-active) :where(.pdx-chip-clear,.pdx-inline-clear,.pdx-inline-currency-range-clear,.pdx-inline-range-clear,.pdx-inline-distance-clear,.pdx-inline-score-clear,.pdx-inline-relative-clear,.pdx-inline-rating-clear,.pdx-inline-pipeline-clear,.pdx-inline-sentiment-clear,.pdx-inline-color-label-clear,.pdx-inline-time-range-clear,.pdx-inline-toggle-clear) .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}:host ::ng-deep .praxis-filter-bar.has-compact .mat-mdc-form-field.pdx-has-value .pdx-inline-clear .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .mat-mdc-form-field.pdx-has-value .pdx-inline-clear .mat-icon,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .mat-mdc-form-field.pdx-has-value .pdx-inline-clear .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-number .mat-mdc-text-field-wrapper:has(.pdx-inline-clear) .pdx-inline-clear .mat-icon,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-number .mat-mdc-text-field-wrapper:has(.pdx-inline-clear) .pdx-inline-clear .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-toggle-pill.is-active .pdx-inline-toggle-clear .mat-icon,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-toggle-pill.is-active .pdx-inline-toggle-clear .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-chip-trigger.is-active .pdx-chip-clear .mat-icon,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-chip-trigger.is-active .pdx-chip-clear .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}.praxis-filter-tags.outlined .mat-mdc-chip{background:transparent!important;--mat-chip-outline-width: 1px;--mat-chip-outline-color: var(--md-sys-color-outline-variant);box-shadow:inset 0 0 0 var(--mat-chip-outline-width) var(--mat-chip-outline-color)}.praxis-filter-tags.outlined.tag-color-primary .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-primary)}.praxis-filter-tags.outlined.tag-color-accent .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-tertiary)}.praxis-filter-tags.outlined.tag-color-warn .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-error)}.praxis-filter-tags.outlined mat-chip.active .mat-mdc-chip,.praxis-filter-tags.outlined .mat-mdc-chip.mat-mdc-chip-highlighted{--mat-chip-outline-width: 2px;box-shadow:inset 0 0 0 var(--mat-chip-outline-width) var(--mat-chip-outline-color)!important}.praxis-filter-tags.outlined.tag-color-basic mat-chip.active .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-primary)}.praxis-filter-tags .mat-mdc-standard-chip .mdc-evolution-chip__text-label{display:flex;align-items:center;justify-content:center;gap:4px;line-height:1.2;font-size:.875rem}.praxis-filter-tags .chip-leading,.praxis-filter-tags .chip-trailing{display:inline-flex;align-items:center}.praxis-filter-tags .leading-check{width:18px;height:18px;font-size:18px;line-height:1}.praxis-filter-tags .chip-label{position:relative;top:-6px}.praxis-filter-tags .chip-trailing .mat-mdc-icon-button{width:28px;height:28px;padding:0;display:flex;align-items:center;justify-content:center;line-height:28px}.praxis-filter-tags .mat-mdc-standard-chip{--mat-chip-container-height: 36px}.praxis-filter-advanced{display:flex;flex-direction:column;min-width:400px;max-width:90vw;min-height:260px;max-height:min(80vh,720px);margin:var(--pfx-overlay-margin-y) var(--pfx-overlay-margin-x);background-color:var(--pfx-overlay-surface)!important;background:var(--pfx-overlay-surface)!important;color:var(--pfx-overlay-on-surface);border:1px solid var(--border-color);border-radius:12px;box-shadow:var(--md-sys-elevation-level3)}.advanced-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px var(--pfx-advanced-pad-x) 10px;border-bottom:1px solid var(--border-color);background:var(--pfx-overlay-surface)}.advanced-title-block{display:flex;flex-direction:column;gap:2px}.advanced-title{font-size:1rem;font-weight:600;color:var(--pfx-overlay-on-surface)}.advanced-subtitle{font-size:.85rem;color:var(--pfx-overlay-on-surface-variant)}.advanced-close{align-self:flex-start}.praxis-filter-overlay.mobile .praxis-filter-advanced{height:100vh;max-height:100vh;margin:0;border-radius:0}:host ::ng-deep .praxis-overlay-backdrop{background:var(--md-sys-color-scrim);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}:host ::ng-deep .praxis-filter-overlay.frosted .praxis-filter-advanced{background:var(--pfx-overlay-surface-variant)!important;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-color:var(--border-color)}:host ::ng-deep .praxis-filter-overlay.frosted .advanced-header,:host ::ng-deep .praxis-filter-overlay.frosted .advanced-actions{background:var(--pfx-overlay-surface-variant)!important}.advanced-body{padding:12px var(--pfx-advanced-pad-x) 72px;overflow:auto;flex:1 1 auto;overscroll-behavior:contain}:host ::ng-deep .praxis-filter-advanced .praxis-filter-form .filter-row{display:grid!important;grid-template-columns:repeat(auto-fit,minmax(var(--pfx-field-min),1fr));gap:var(--pfx-gap-y) var(--pfx-gap-x)}:host ::ng-deep .praxis-filter-advanced .praxis-filter-form .filter-column{min-width:0}:host ::ng-deep .praxis-filter-advanced .praxis-filter-form .filter-column .mat-mdc-form-field{width:100%}.advanced-actions{position:sticky;bottom:0;z-index:2;display:flex;justify-content:flex-end;gap:8px;padding:var(--pfx-gap-y) var(--pfx-advanced-pad-x);background-color:var(--pfx-overlay-surface)!important;background:var(--pfx-overlay-surface)!important;border-top:1px solid var(--border-color);box-shadow:0 -1px 0 var(--md-sys-color-outline-variant)}.advanced-actions .mat-mdc-button-base{height:40px}.advanced-actions .mat-mdc-raised-button.mat-primary{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}:host ::ng-deep .praxis-filter-advanced .mat-mdc-text-field-wrapper.mdc-text-field--outlined{--mdc-outlined-text-field-outline-color: var(--border-color);--mdc-outlined-text-field-hover-outline-color: var(--border-color-hover);--mdc-outlined-text-field-focus-outline-color: var(--md-sys-color-primary);--mdc-outlined-text-field-label-text-color: var(--pfx-overlay-on-surface-variant);--mdc-outlined-text-field-input-text-color: var(--pfx-overlay-on-surface);--mdc-outlined-text-field-container-color: var(--pfx-overlay-surface)}:host ::ng-deep .praxis-filter-advanced .mat-mdc-select-trigger,:host ::ng-deep .praxis-filter-advanced .mat-mdc-form-field-subscript-wrapper,:host ::ng-deep .praxis-filter-advanced .mat-mdc-form-field-infix{color:var(--pfx-overlay-on-surface)}@media(min-width:600px){.fields-grid{gap:6px 8px}:host ::ng-deep .praxis-filter-advanced .praxis-filter-form .filter-row{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:640px){.praxis-filter-bar.has-compact{grid-template-columns:minmax(0,1fr);align-items:start}.praxis-filter-bar.has-compact .compact-fields{grid-column:1;grid-row:1;display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));align-items:start;justify-items:stretch;width:100%}.praxis-filter-bar.has-compact .inline-actions{grid-column:1;grid-row:2;justify-self:start;width:100%;height:auto}.praxis-filter-bar.has-compact .inline-actions .action-cluster{max-width:100%}:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields>.pfx-field-shell,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields>praxis-field-shell,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell-wrapper,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell-host{--pfx-field-shell-width: auto;--pfx-field-shell-field-width: auto;width:100%!important;max-width:100%!important}:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .mat-mdc-form-field,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .mat-mdc-text-field-wrapper,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-chip-trigger,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-range-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-currency-range-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-distance-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-score-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-relative-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-relative-period-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-rating-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-pipeline-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-sentiment-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-color-label-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-time-range-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-toggle-pill{width:100%!important;max-width:100%!important}:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields :where(.pdx-chip-label,.pdx-chip-trigger,.pdx-inline-range-text,.pdx-inline-currency-range-text,.pdx-inline-distance-text,.pdx-inline-score-text,.pdx-inline-relative-text,.pdx-inline-relative-period-text,.pdx-inline-rating-text,.pdx-inline-pipeline-text,.pdx-inline-sentiment-text,.pdx-inline-color-label-text,.pdx-inline-time-range-text,.pdx-inline-toggle-label){min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell[data-control-type=inlineTime],:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell[data-control-type=inlineTime] .pfx-field-shell-wrapper,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell[data-control-type=inlineTime] .pfx-field-shell-host{--pfx-field-shell-width: fit-content;--pfx-field-shell-field-width: var(--pdx-inline-time-field-w, auto);justify-self:start;width:fit-content!important;max-width:100%!important}:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell[data-control-type=inlineTime] .mat-mdc-form-field.pdx-inline-time{width:var(--pdx-inline-time-field-w, auto)!important;inline-size:var(--pdx-inline-time-field-w, auto)!important;max-width:min(var(--pdx-inline-time-max-w, 280px),100vw - 48px)!important}}@media(min-width:960px){.fields-grid{gap:6px 10px}}@media(min-width:1200px){.fields-grid{grid-template-columns:repeat(auto-fit,minmax(var(--pfx-always-min, 220px),var(--pfx-always-max-desktop, 380px)));justify-content:start;align-content:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=slider],:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=range-slider],:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeSlider],:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeslider]{grid-column:span var(--pfx-slider-span-desktop, 2)}}.inline-toggles{display:flex;align-items:center;gap:8px;margin:0 4px 0 6px}:host ::ng-deep .inline-actions .mat-mdc-slide-toggle{height:var(--pfx-filter-h);display:flex;align-items:center}:host ::ng-deep .inline-actions .mat-mdc-slide-toggle .mdc-form-field{align-items:center}::ng-deep .praxis-filter-overlay .praxis-filter-advanced .praxis-filter-form .filter-row{display:grid!important;gap:var(--pfx-gap-y, 1px) var(--pfx-gap-x, 6px)}@media(min-width:600px){::ng-deep .praxis-filter-overlay .praxis-filter-advanced .praxis-filter-form .filter-row{grid-template-columns:repeat(2,minmax(0,1fr))}}.sr-only{position:absolute!important;width:1px!important;height:1px!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important}.hidden-submit{position:absolute!important;width:0!important;height:0!important;padding:0!important;margin:0!important;border:0!important;opacity:0!important;pointer-events:none!important;clip:rect(0 0 0 0)!important;clip-path:inset(50%)!important;overflow:hidden!important}:host ::ng-deep .inline-actions [matBadge] .mat-badge-content{top:-6px;right:-6px;min-width:16px;height:16px;padding:0 4px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;font-size:10px;font-weight:700;line-height:16px;letter-spacing:0;text-indent:0;color:var(--md-sys-color-on-primary, #fff)}:host ::ng-deep .inline-actions [matBadge][matbadgecolor=warn] .mat-badge-content,:host ::ng-deep .inline-actions [matBadge].mat-badge-warn .mat-badge-content{color:var(--md-sys-color-on-error, #fff)}.praxis-filter-bar :where(.mat-mdc-slide-toggle .mdc-switch__icons){display:none!important}.praxis-filter-bar{--mdc-switch-unselected-icon-size: 0px;--mdc-switch-selected-icon-size: 0px;--pfx-always-min: 220px}.praxis-filter-card{display:flex;flex-direction:column;gap:6px;padding:8px 12px;border-radius:12px;border:1px solid var(--pfx-surface-border, var(--md-sys-color-outline-variant));background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface)}.add-manager{display:flex;flex-direction:column;width:min(400px,100vw - 24px);max-height:min(70vh,560px);overflow:hidden;border:1px solid var(--pfx-surface-border, var(--md-sys-color-outline-variant));border-radius:var(--pfx-overlay-radius, 16px);background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface);box-shadow:var(--md-sys-elevation-level3)}.add-manager__header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:16px 16px 8px 20px}.add-manager__header h2{margin:0;font:var(--md-sys-typescale-title-medium)}.add-manager__header p{margin:4px 0 0;color:var(--md-sys-color-on-surface-variant);font:var(--md-sys-typescale-body-small)}.add-manager__search{padding:8px 20px}.add-manager__search mat-form-field{width:100%}.add-manager__summary{padding:0 20px 8px;color:var(--md-sys-color-on-surface-variant);font:var(--md-sys-typescale-label-medium)}.add-manager__bulk{padding:8px 20px;border-block:1px solid var(--pfx-surface-border, var(--md-sys-color-outline-variant))}.add-manager__list{display:flex;flex-direction:column;min-height:80px;overflow:auto;padding:8px 12px 12px}.add-manager__item{min-height:48px;padding-inline:8px;border-radius:var(--pfx-control-radius, 8px)}.add-manager__item:hover{background:var(--md-sys-color-surface-container-high)}.add-manager__empty{display:flex;align-items:center;justify-content:center;gap:8px;min-height:96px;padding:16px;color:var(--md-sys-color-on-surface-variant);text-align:center}.add-manager__footer{display:flex;justify-content:flex-end;gap:8px;padding:12px 16px;border-top:1px solid var(--pfx-surface-border, var(--md-sys-color-outline-variant));background:var(--md-sys-color-surface-container-highest)}.add-manager__notice{display:flex;align-items:flex-start;gap:8px;padding:10px 16px;font:var(--md-sys-typescale-body-small)}.add-manager__notice mat-icon{flex:0 0 auto}.add-manager__notice--warning{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container)}.add-manager__notice--conflict{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}@media(max-width:600px){.add-manager{width:calc(100vw - 16px);max-height:min(78dvh,640px);border-radius:var(--pfx-overlay-radius, 16px)}.add-manager__header,.add-manager__search{padding-inline:16px}}.inline-actions .add-trigger{display:inline-flex;align-items:center;gap:6px;height:32px;width:100%;max-width:100%;min-width:0;padding:0 10px;border-radius:0;border:0;background:transparent;overflow:visible}.inline-actions .add-trigger--icon{justify-content:center;width:32px;min-width:32px;padding:0}:host ::ng-deep .inline-actions .add-trigger mat-icon{width:18px;height:18px;font-size:18px;flex:0 0 auto}.inline-actions .add-trigger-label{display:inline-block;flex:1 1 auto;min-width:0;max-width:100%;text-align:left;direction:ltr;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.82rem;line-height:1}:host ::ng-deep .action-cluster--manage .mat-mdc-select{flex:0 0 auto;width:180px;min-width:0;max-width:180px}:host ::ng-deep .action-cluster--manage .cluster-select--hidden.mat-mdc-select{position:absolute;width:1px;min-width:1px;max-width:1px;height:1px;opacity:0;pointer-events:none;overflow:hidden}:host ::ng-deep .action-cluster--manage .mat-mdc-select-trigger{min-height:32px;padding:0}:host ::ng-deep .action-cluster--manage .mat-mdc-select-value,:host ::ng-deep .action-cluster--manage .mat-mdc-select-value-text,:host ::ng-deep .action-cluster--manage .mat-mdc-select-min-line{width:auto;min-width:0;max-width:100%;display:inline-flex;align-items:center;justify-content:flex-start;overflow:visible}.praxis-filter-card .summary-header{display:flex;align-items:center;gap:10px}.praxis-filter-card .summary-avatar{width:32px;height:32px;border-radius:50%;object-fit:cover}.praxis-filter-card .summary-title{font-weight:600}.praxis-filter-card .summary-subtitle{opacity:.8;font-size:.875rem}.praxis-filter-card .summary-badges{display:flex;flex-wrap:wrap;gap:6px}.praxis-filter-card .summary-badges span{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;background:var(--md-sys-color-primary-container);border:1px solid var(--md-sys-color-outline-variant);color:var(--md-sys-color-on-primary-container);font-size:12px}.praxis-filter-card .card-actions{display:flex;gap:8px}:host ::ng-deep .inline-actions .mat-mdc-select-arrow-wrapper{display:none}.inline-actions .add-filter-btn{height:36px;border-radius:18px;padding:0 16px 0 12px}.inline-actions .add-filter-btn mat-icon{margin-right:8px;margin-left:-4px}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.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: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3$1.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: 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: MatChipsModule }, { kind: "component", type: i15.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i15.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i15$1.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i14$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i15$3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatSnackBarModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: DynamicFieldLoaderDirective, selector: "[dynamicFieldLoader]", inputs: ["fields", "formGroup", "enableExternalControlBinding", "itemTemplate", "debugTrace", "debugTraceLabel", "readonlyMode", "disabledMode", "presentationMode", "visible", "canvasMode"], outputs: ["componentsCreated", "fieldCreated", "fieldDestroyed", "renderError", "canvasMouseEnter", "canvasMouseLeave", "canvasClick", "canvasFocus"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i12.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i12.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i19.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }] });
38675
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PraxisFilter, isStandalone: true, selector: "praxis-filter", inputs: { resourcePath: "resourcePath", apiUrlEntry: "apiUrlEntry", fieldMetadata: "fieldMetadata", filterId: "filterId", formId: "formId", componentInstanceId: "componentInstanceId", mode: "mode", notifyIfOutdated: "notifyIfOutdated", snoozeMs: "snoozeMs", autoOpenSettingsOnOutdated: "autoOpenSettingsOnOutdated", enableCustomization: "enableCustomization", value: "value", alwaysVisibleFields: "alwaysVisibleFields", alwaysVisibleFieldMetadataOverrides: "alwaysVisibleFieldMetadataOverrides", selectedFieldIds: "selectedFieldIds", tags: "tags", allowSaveTags: "allowSaveTags", persistenceKey: "persistenceKey", disablePersistence: "disablePersistence", i18n: "i18n", changeDebounceMs: "changeDebounceMs", showFilterSettings: "showFilterSettings", showAdvancedButton: "showAdvancedButton", showAddButton: "showAddButton", showClearButton: "showClearButton", showSearchButton: "showSearchButton", confirmTagDelete: "confirmTagDelete", placeBooleansInActions: "placeBooleansInActions", showToggleLabels: "showToggleLabels", useInlineSelectVariant: "useInlineSelectVariant", useInlineSearchableSelectVariant: "useInlineSearchableSelectVariant", useInlineMultiSelectVariant: "useInlineMultiSelectVariant", useInlineInputVariant: "useInlineInputVariant", useInlineToggleVariant: "useInlineToggleVariant", useInlineRangeVariant: "useInlineRangeVariant", useInlineDateVariant: "useInlineDateVariant", useInlineDateRangeVariant: "useInlineDateRangeVariant", useInlineTimeVariant: "useInlineTimeVariant", useInlineTimeRangeVariant: "useInlineTimeRangeVariant", useInlineTreeSelectVariant: "useInlineTreeSelectVariant", alwaysMinWidth: "alwaysMinWidth", alwaysColsMd: "alwaysColsMd", alwaysColsLg: "alwaysColsLg", tagColor: "tagColor", tagVariant: "tagVariant", tagButtonColor: "tagButtonColor", actionsButtonColor: "actionsButtonColor", actionsVariant: "actionsVariant", overlayVariant: "overlayVariant", overlayBackdrop: "overlayBackdrop", advancedOpenMode: "advancedOpenMode", advancedClearButtonsEnabled: "advancedClearButtonsEnabled" }, outputs: { submit: "submit", change: "change", clear: "clear", modeChange: "modeChange", requestSearch: "requestSearch", tagsChange: "tagsChange", selectedFieldIdsChange: "selectedFieldIdsChange", metaChanged: "metaChanged", schemaStatusChange: "schemaStatusChange" }, host: { listeners: { "window:resize": "onWindowResize()", "document:keydown": "onGlobalKeydown($event)" }, properties: { "style.--pfx-always-min": "alwaysMinWidth + \"px\"", "style.--pfx-always-cols-md": "alwaysColsMd", "style.--pfx-always-cols-lg": "alwaysColsLg" } }, viewQueries: [{ propertyName: "addManagerOrigin", first: true, predicate: ["addManagerOrigin"], descendants: true, read: ElementRef }, { propertyName: "anchorRef", first: true, predicate: ["anchorRef"], descendants: true, read: CdkOverlayOrigin }, { propertyName: "addAnchor", first: true, predicate: ["addAnchor"], descendants: true, read: CdkOverlayOrigin }, { propertyName: "advancedButton", first: true, predicate: ["advancedButton"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "@if (saving) {\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n}\n@if (schemaError) {\n <div class=\"schema-error-banner\" role=\"alert\" aria-live=\"polite\">\n <mat-icon [praxisIcon]=\"'error_outline'\" aria-hidden=\"true\"></mat-icon>\n <span class=\"schema-error-message\">{{ i18nLabels.errorLoadingFilters || 'Erro ao carregar filtros.' }}</span>\n <button\n mat-stroked-button\n class=\"schema-error-retry\"\n type=\"button\"\n (click)=\"retrySchemaLoad()\"\n [attr.aria-label]=\"i18nLabels.retry || 'Tentar novamente'\"\n >\n {{ i18nLabels.retry || 'Tentar novamente' }}\n </button>\n </div>\n}\n\n<form class=\"praxis-filter-bar\" [class.is-open]=\"advancedOpen\"\n [class.has-compact]=\"compactSelectedMetas.length || compactAlwaysVisibleMetas.length\"\n [class.tag-variant-filled]=\"tagVariant === 'filled'\"\n [class.tag-variant-outlined]=\"tagVariant === 'outlined'\"\n [class.tag-color-basic]=\"tagColor === 'basic'\"\n [class.tag-color-primary]=\"tagColor === 'primary'\"\n [class.tag-color-accent]=\"tagColor === 'accent'\"\n [class.tag-color-warn]=\"tagColor === 'warn'\"\n (click)=\"onFieldInteraction($event)\"\n (focusin)=\"onFieldInteraction($event)\"\n (change)=\"$event.stopPropagation()\"\n (submit)=\"onSubmit(); $event.preventDefault(); $event.stopPropagation()\">\n <div class=\"inline-actions\" [class.actions-outlined]=\"actionsVariant==='outlined'\">\n <div class=\"actions-anchor\" #anchorRef=\"cdkOverlayOrigin\" cdkOverlayOrigin></div>\n @if (toggleMetas.length) {\n <div class=\"inline-toggles\">\n <ng-container dynamicFieldLoader [fields]=\"toggleMetas\" [formGroup]=\"alwaysForm\"\n (componentsCreated)=\"onToggleComponents($event)\"></ng-container>\n </div>\n }\n\n @if (showAdvancedButton || showAddButton || showFilterSettings || isFieldAuthoringEnabled()) {\n <div class=\"action-cluster action-cluster--manage\">\n @if (showAdvancedButton) {\n <button #advancedButton mat-icon-button class=\"cluster-btn\"\n [class.is-opening]=\"advancedOpening\" [class.is-disabled]=\"!hasAdvancedFields()\"\n [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\" type=\"button\"\n [matBadge]=\"activeFiltersCount\" [matBadgeHidden]=\"!activeFiltersCount || !hasAdvancedFields()\" matBadgeSize=\"small\"\n matBadgeColor=\"primary\" [matBadgeOverlap]=\"false\" (click)=\"toggleAdvanced()\"\n [attr.aria-label]=\"getAdvancedAriaLabel()\" [attr.aria-expanded]=\"advancedOpen\"\n [attr.aria-disabled]=\"!hasAdvancedFields()\"\n [attr.aria-busy]=\"advancedOpening ? 'true' : null\"\n [matTooltip]=\"getAdvancedTooltip()\"\n matTooltipPosition=\"below\"\n [attr.aria-controls]=\"advancedPanelId\">\n @if (advancedOpening) {\n <mat-progress-spinner\n class=\"cluster-btn-spinner\"\n mode=\"indeterminate\"\n diameter=\"18\"\n strokeWidth=\"3\"\n aria-hidden=\"true\"\n ></mat-progress-spinner>\n } @else {\n <mat-icon [praxisIcon]=\"'filter_list'\"></mat-icon>\n }\n </button>\n }\n @if (showAddButton) {\n <button #addManagerOrigin=\"cdkOverlayOrigin\" cdkOverlayOrigin mat-icon-button class=\"cluster-btn\"\n [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\"\n type=\"button\" [attr.aria-label]=\"getAddAriaLabel()\" [matTooltip]=\"getAddTooltip()\"\n matTooltipPosition=\"below\" [class.is-disabled]=\"!hasAddableFields()\"\n [attr.aria-disabled]=\"!hasAddableFields()\" [attr.aria-expanded]=\"addManagerOpen\"\n aria-haspopup=\"dialog\" [attr.aria-controls]=\"addManagerOpen ? addManagerTitleId : null\"\n (click)=\"toggleAddManager()\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n </button>\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"addManagerOrigin\"\n [cdkConnectedOverlayOpen]=\"addManagerOpen\" [cdkConnectedOverlayPositions]=\"addOverlayPositions\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayHasBackdrop]=\"true\" cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"closeAddManager()\" (detach)=\"closeAddManager()\"\n (overlayKeydown)=\"$event.key === 'Escape' && closeAddManager()\">\n <section class=\"add-manager\" role=\"dialog\" [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"addManagerTitleId\" [attr.aria-describedby]=\"addManagerDescriptionId\"\n cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <header class=\"add-manager__header\">\n <div>\n <h2 [id]=\"addManagerTitleId\">{{ i18nLabels.manageFieldsTitle || 'Gerenciar campos de filtro' }}</h2>\n <p [id]=\"addManagerDescriptionId\">{{ i18nLabels.manageFieldsDescription || 'Escolha os campos exibidos na barra de filtros.' }}</p>\n </div>\n <button mat-icon-button type=\"button\" (click)=\"closeAddManager()\"\n [attr.aria-label]=\"i18nLabels.close || 'Fechar'\">\n <mat-icon [praxisIcon]=\"'close'\" aria-hidden=\"true\"></mat-icon>\n </button>\n </header>\n <div class=\"add-manager__search\">\n <div class=\"add-manager__search-field\">\n <mat-icon class=\"add-manager__search-icon\" [praxisIcon]=\"'search'\" aria-hidden=\"true\"></mat-icon>\n <input #addSearchInput cdkFocusInitial type=\"search\" [value]=\"addQuery\"\n [placeholder]=\"i18nLabels.filtersSearch || i18nLabels.searchPlaceholder\"\n [attr.aria-label]=\"i18nLabels.filtersSearch || i18nLabels.searchPlaceholder\"\n (input)=\"onAddQuery(($any($event.target)).value)\" />\n @if (addQuery) {\n <button mat-icon-button type=\"button\" class=\"add-manager__clear-search\"\n (click)=\"onAddQuery(''); addSearchInput.focus()\"\n [attr.aria-label]=\"i18nLabels.clearSearch || 'Limpar busca'\">\n <mat-icon [praxisIcon]=\"'close'\" aria-hidden=\"true\"></mat-icon>\n </button>\n }\n </div>\n </div>\n <div class=\"add-manager__bulk\">\n <mat-checkbox [checked]=\"isAllSelected()\" [indeterminate]=\"isSomeSelected() && !isAllSelected()\"\n [disabled]=\"!addItems.length || addManagerConflict\"\n (change)=\"toggleSelectAll()\">\n {{ i18nLabels.selectAllResults || i18nLabels.selectAll || 'Selecionar todos os resultados' }}\n </mat-checkbox>\n </div>\n <div class=\"add-manager__list\" role=\"group\" [attr.aria-label]=\"i18nLabels.manageFieldsTitle || 'Gerenciar campos de filtro'\">\n @if (getAddManagerSelectedItems().length) {\n <section class=\"add-manager__section add-manager__section--selected\"\n [attr.aria-label]=\"i18nLabels.selectedFieldsSectionTitle || 'Campos exibidos'\">\n <h3 class=\"add-manager__section-title\">\n {{ i18nLabels.selectedFieldsSectionTitle || 'Campos exibidos' }}\n <span>{{ getAddManagerVisibleSelectedFieldsSummary() }}</span>\n </h3>\n @for (it of getAddManagerSelectedItems(); track trackById($index, it)) {\n <mat-checkbox class=\"add-manager__item\" [attr.data-field-id]=\"it.id\" [checked]=\"true\"\n [matTooltip]=\"it.description || ''\" [matTooltipDisabled]=\"!it.description\"\n matTooltipPosition=\"above\" [attr.aria-description]=\"it.description || null\"\n [class.add-manager__item--added]=\"isAddManagerItemInMotion(it.id, 'added')\"\n [disabled]=\"addManagerConflict\"\n (change)=\"toggleManagedField(it.id, $event.checked)\">\n {{ it.label }}\n @if (it.description) {\n <mat-icon class=\"add-manager__item-info\" [praxisIcon]=\"'info_outline'\" aria-hidden=\"true\"></mat-icon>\n }\n </mat-checkbox>\n }\n </section>\n }\n @if (getAddManagerAvailableItems().length) {\n <section class=\"add-manager__section\"\n [attr.aria-label]=\"i18nLabels.availableFieldsSectionTitle || 'Campos dispon\u00EDveis'\">\n <h3 class=\"add-manager__section-title\">\n {{ i18nLabels.availableFieldsSectionTitle || 'Campos dispon\u00EDveis' }}\n </h3>\n @for (it of getAddManagerAvailableItems(); track trackById($index, it)) {\n <mat-checkbox class=\"add-manager__item\" [attr.data-field-id]=\"it.id\" [checked]=\"false\"\n [matTooltip]=\"it.description || ''\" [matTooltipDisabled]=\"!it.description\"\n matTooltipPosition=\"above\" [attr.aria-description]=\"it.description || null\"\n [class.add-manager__item--removed]=\"isAddManagerItemInMotion(it.id, 'removed')\"\n [disabled]=\"addManagerConflict\"\n (change)=\"toggleManagedField(it.id, $event.checked)\">\n {{ it.label }}\n @if (it.description) {\n <mat-icon class=\"add-manager__item-info\" [praxisIcon]=\"'info_outline'\" aria-hidden=\"true\"></mat-icon>\n }\n </mat-checkbox>\n }\n </section>\n }\n @if (!addItems.length) {\n <div class=\"add-manager__empty\" role=\"status\">\n <mat-icon [praxisIcon]=\"'search_off'\" aria-hidden=\"true\"></mat-icon>\n <span>{{ addQuery ? (i18nLabels.noFilterFieldsFound || 'Nenhum campo encontrado.') : (i18nLabels.addUnavailable || 'Todos os campos j\u00E1 est\u00E3o vis\u00EDveis') }}</span>\n </div>\n }\n </div>\n @if (addManagerConflict) {\n <div class=\"add-manager__notice add-manager__notice--conflict\" role=\"alert\">\n <mat-icon [praxisIcon]=\"'sync_problem'\" aria-hidden=\"true\"></mat-icon>\n <span>{{ i18nLabels.fieldSelectionConflict }}</span>\n </div>\n } @else if (getRemovedActiveFieldLabels().length) {\n <div class=\"add-manager__notice add-manager__notice--warning\" role=\"status\">\n <mat-icon [praxisIcon]=\"'warning_amber'\" aria-hidden=\"true\"></mat-icon>\n <span>{{ i18nLabels.removingActiveFields }} {{ getRemovedActiveFieldLabels().join(', ') }}</span>\n </div>\n }\n <footer class=\"add-manager__footer\">\n <button mat-button type=\"button\" (click)=\"closeAddManager()\">{{ i18nLabels.cancel }}</button>\n <button mat-flat-button color=\"primary\" type=\"button\"\n [disabled]=\"!isAddManagerDirty() || addManagerConflict\"\n (click)=\"applyAddManager()\">\n {{ i18nLabels.manageFieldsApply || 'Aplicar' }}\n @if (isAddManagerDirty()) { ({{ getAddManagerChangeCount() }}) }\n </button>\n </footer>\n </section>\n </ng-template>\n }\n @if (showFilterSettings) {\n <button mat-icon-button class=\"cluster-btn separator-before\" [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\"\n type=\"button\" (click)=\"openSettings()\" [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\" matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"getSettingsTooltip()\"\n matTooltipPosition=\"below\" [attr.aria-label]=\"getSettingsAriaLabel()\">\n <mat-icon [praxisIcon]=\"'settings'\"></mat-icon>\n </button>\n }\n @if (isFieldAuthoringEnabled() && activeEditableFieldMeta) {\n <button\n mat-icon-button\n class=\"cluster-btn\"\n [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\"\n type=\"button\"\n data-testid=\"filter-field-settings-trigger\"\n [attr.aria-label]=\"activeEditableFieldLabel\"\n (click)=\"openSelectedFieldEditor()\"\n >\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n </button>\n }\n </div>\n }\n\n @if ((showClearButton && activeFiltersCount > 0) || showSearchButton) {\n <div class=\"action-cluster action-cluster--query\">\n @if (showClearButton && activeFiltersCount > 0) {\n <button\n mat-icon-button\n class=\"cluster-btn\"\n [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\"\n type=\"button\"\n data-testid=\"filter-clear-trigger\"\n (click)=\"onClear()\"\n [attr.aria-label]=\"i18nLabels.clear\"\n [matTooltip]=\"i18nLabels.clear\"\n matTooltipPosition=\"below\"\n >\n <mat-icon [praxisIcon]=\"'filter_alt_off'\"></mat-icon>\n </button>\n }\n @if (showSearchButton) {\n <button\n mat-icon-button\n class=\"cluster-btn\"\n [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\"\n type=\"submit\"\n [attr.aria-label]=\"i18nLabels.apply\"\n [matTooltip]=\"i18nLabels.apply\"\n matTooltipPosition=\"below\"\n >\n <mat-icon [praxisIcon]=\"'search'\"></mat-icon>\n </button>\n }\n </div>\n }\n\n <span class=\"sr-only\" aria-live=\"polite\">{{ advancedOpening ? (i18nLabels.advancedOpening || 'Abrindo filtro avan\u00E7ado...') : getAddAriaLabel() }}</span>\n</div>\n\n@if (compactSelectedMetas.length || compactAlwaysVisibleMetas.length) {\n <div class=\"compact-fields\">\n @if (compactSelectedMetas.length) {\n <ng-container dynamicFieldLoader [fields]=\"compactSelectedMetas\"\n [formGroup]=\"alwaysForm\" (componentsCreated)=\"onSelectedComponents($event)\"></ng-container>\n }\n @if (compactAlwaysVisibleMetas.length) {\n <ng-container dynamicFieldLoader [fields]=\"compactAlwaysVisibleMetas\"\n [formGroup]=\"alwaysForm\" (componentsCreated)=\"onAlwaysComponents($event)\"></ng-container>\n }\n </div>\n}\n\n@if (gridSelectedMetas.length || gridAlwaysVisibleMetas.length) {\n <div class=\"fields-grid\">\n @if (gridSelectedMetas.length) {\n <ng-container dynamicFieldLoader [fields]=\"gridSelectedMetas\" [formGroup]=\"alwaysForm\"\n (componentsCreated)=\"onSelectedComponents($event)\"></ng-container>\n }\n @if (gridAlwaysVisibleMetas.length) {\n <ng-container dynamicFieldLoader [fields]=\"gridAlwaysVisibleMetas\"\n [formGroup]=\"alwaysForm\" (componentsCreated)=\"onAlwaysComponents($event)\"></ng-container>\n }\n </div>\n}\n\n<span class=\"sr-only\" aria-live=\"polite\">\n {{ activeFiltersCount ? (activeFiltersCount + ' filtros ativos') : '' }}\n</span>\n<button type=\"submit\" class=\"hidden-submit\" aria-hidden=\"true\" tabindex=\"-1\"></button>\n</form>\n\n@if (displayedTags.length) {\n <div\n class=\"praxis-filter-tags\"\n [class.outlined]=\"tagVariant==='outlined'\"\n [class.tag-color-basic]=\"tagColor === 'basic'\"\n [class.tag-color-primary]=\"tagColor === 'primary'\"\n [class.tag-color-accent]=\"tagColor === 'accent'\"\n [class.tag-color-warn]=\"tagColor === 'warn'\"\n >\n <mat-chip-set [attr.aria-label]=\"i18nLabels.shortcutsLabel || 'Atalhos'\">\n @for (tag of displayedTags; track trackById($index, tag)) {\n <mat-chip [class.active]=\"isActiveTag(tag)\"\n [color]=\"tagVariant === 'outlined' || tagColor === 'basic' ? null : tagColor\"\n [highlighted]=\"tagVariant === 'filled' && tagColor !== 'basic'\" (click)=\"applyTag(tag)\"\n (keydown.enter)=\"applyTag(tag)\" (keydown.space)=\"applyTag(tag)\" tabindex=\"0\" role=\"button\"\n [attr.aria-pressed]=\"isActiveTag(tag)\">\n @if (editingTagId !== tag.id) {\n @if (isActiveTag(tag)) {\n <span class=\"chip-leading\">\n <mat-icon class=\"leading-check\">check</mat-icon>\n </span>\n }\n <span class=\"chip-label\">{{ tag.label }}</span>\n @if (isUserTag(tag)) {\n <span class=\"chip-trailing\">\n <button mat-icon-button [color]=\"tagButtonColor === 'basic' ? null : tagButtonColor\"\n [matMenuTriggerFor]=\"tagMenu\" (click)=\"$event.stopPropagation()\" [attr.aria-label]=\"getTagActionsAriaLabel(tag)\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #tagMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item (click)=\"startEditTag(tag, $event)\">\n <mat-icon>edit</mat-icon>\n <span>{{ i18nLabels.renameShortcut }}</span>\n </button>\n <button mat-menu-item (click)=\"deleteTag(tag)\">\n <mat-icon>delete</mat-icon>\n <span>{{ i18nLabels.removeShortcut }}</span>\n </button>\n </mat-menu>\n </span>\n } @else {\n <span class=\"chip-readonly\" [matTooltip]=\"i18nLabels.readonlyShortcut\">\n <mat-icon>lock</mat-icon>\n </span>\n }\n } @else {\n <input matInput class=\"chip-editor\" [formControl]=\"editingTagLabel\" autofocus\n [matTooltip]=\"'Enter para salvar, Esc para cancelar'\" matTooltipPosition=\"below\"\n (keydown.enter)=\"commitEditTag(tag, $event)\" (keydown.escape)=\"cancelEditTag($event)\"\n (blur)=\"commitEditTag(tag, $event)\" (click)=\"$event.stopPropagation()\" />\n }\n </mat-chip>\n }\n </mat-chip-set>\n </div>\n}\n", styles: ["@charset \"UTF-8\";:root{--pfx-filter-h: 42px;--pfx-filter-align-offset: 2px;--pfx-gap-x: 12px;--pfx-gap-y: 8px;--pfx-always-max-desktop: 380px;--pfx-slider-span-desktop: 2;--pfx-advanced-pad-x: 24px;--pfx-field-min: 280px;--pfx-overlay-margin-y: 16px;--pfx-overlay-margin-x: 16px}:host-context(.theme-light){--pfx-surface-border: var(--praxis-theme-outline-strong, var(--md-sys-color-outline))}:host{--border-color: var(--praxis-theme-outline, var(--md-sys-color-outline-variant));--border-color-hover: var(--praxis-theme-outline-strong, var(--md-sys-color-outline));--pfx-overlay-surface: var(--praxis-theme-surface-raised, var(--md-sys-color-surface-container));--pfx-overlay-surface-elev: var(--praxis-theme-surface-overlay, var(--md-sys-color-surface-container-high));--pfx-overlay-surface-variant: var(--praxis-theme-surface-raised, var(--md-sys-color-surface-variant));--pfx-overlay-on-surface: var(--praxis-theme-on-surface, var(--md-sys-color-on-surface));--pfx-overlay-on-surface-variant: var(--praxis-theme-on-surface-muted, var(--md-sys-color-on-surface-variant));display:block;width:100%;min-width:0;flex:1 1 auto}.schema-error-banner{display:flex;align-items:center;gap:8px;margin:0 0 8px;padding:8px 10px;border-radius:10px;border:1px solid color-mix(in srgb,var(--md-sys-color-error) 50%,transparent);background:color-mix(in srgb,var(--md-sys-color-error-container) 85%,transparent);color:var(--md-sys-color-on-error-container)}.schema-error-message{min-width:0;flex:1 1 auto;font-size:.8125rem}:host ::ng-deep .schema-error-retry.mat-mdc-outlined-button{--mdc-outlined-button-outline-color: color-mix( in srgb, var(--md-sys-color-error) 55%, var(--md-sys-color-outline) )}.praxis-filter-bar{display:grid;width:100%;grid-template-columns:minmax(0,1fr) auto;column-gap:6px;row-gap:6px;align-items:center}.inline-actions .actions-anchor{width:0;height:0;overflow:hidden}.inline-actions{grid-column:2;grid-row:1;flex:0 0 auto;display:flex;gap:6px;justify-self:end;align-self:center;width:fit-content;white-space:nowrap;height:var(--pfx-filter-h);align-items:center;padding:0 2px}.action-cluster{flex:0 0 auto;display:inline-flex;align-items:center;gap:2px;min-height:36px;padding:2px;border-radius:999px;border:1px solid var(--pfx-surface-border, var(--md-sys-color-outline-variant));background:var(--md-sys-color-surface-container-highest)}.action-cluster--manage{position:relative;border-color:color-mix(in srgb,var(--md-sys-color-primary) 35%,var(--md-sys-color-outline-variant));background:var(--md-sys-color-surface-container-high)}:host ::ng-deep .action-cluster .mat-mdc-icon-button,:host ::ng-deep .action-cluster .cluster-btn.mat-mdc-icon-button{width:32px;height:32px;padding:0;display:inline-grid;place-items:center;--mat-icon-button-state-layer-size: 32px}.action-cluster .cluster-btn.is-opening{pointer-events:none}.action-cluster .cluster-btn.is-disabled{color:color-mix(in srgb,var(--md-sys-color-on-surface) 38%,transparent);cursor:default;opacity:.56}.action-cluster .cluster-btn-spinner{width:18px!important;height:18px!important;display:block;grid-area:1/1;--mdc-circular-progress-active-indicator-color: currentColor}.inline-actions.actions-outlined button.mat-mdc-icon-button{border:1px solid var(--pfx-surface-border, var(--md-sys-color-outline-variant));border-radius:50%}.inline-actions.actions-outlined .action-cluster button.mat-mdc-icon-button{border-color:transparent}.separator-before{position:relative;margin-left:10px}.separator-before:before{content:\"\";position:absolute;left:-7px;top:50%;width:1px;height:18px;transform:translateY(-50%);background:color-mix(in srgb,var(--md-sys-color-outline) 72%,transparent)}.inline-actions mat-icon{width:20px;height:20px;font-size:20px}.fields-grid{grid-column:1;grid-row:1;display:grid;grid-template-columns:repeat(auto-fit,minmax(var(--pfx-always-min, 220px),1fr));grid-auto-flow:row dense;gap:6px}.compact-fields{grid-column:1;grid-row:1;display:flex;flex-wrap:wrap;justify-content:flex-start;align-content:center;align-items:center;gap:6px;min-width:0;min-height:var(--pfx-filter-h)}:host ::ng-deep .compact-fields .pfx-field-shell,:host ::ng-deep .compact-fields .pfx-field-shell-wrapper,:host ::ng-deep .compact-fields .pfx-field-shell-host{--pfx-field-shell-width: fit-content;--pfx-field-shell-field-width: auto;width:fit-content!important;max-width:100%;min-width:0;flex:0 1 auto!important}:host ::ng-deep .compact-fields>.pfx-field-shell,:host ::ng-deep .compact-fields>praxis-field-shell{flex:0 1 auto!important;width:fit-content!important;max-width:100%;min-width:0}:host ::ng-deep .compact-fields .pfx-field-shell .mat-mdc-form-field{width:auto!important;max-width:100%;margin-bottom:0}:host ::ng-deep .compact-fields .pfx-field-shell[data-control-type=inlineTime] .mat-mdc-form-field.pdx-inline-time{width:var(--pdx-inline-time-field-w, auto)!important;inline-size:var(--pdx-inline-time-field-w, auto)!important;max-width:min(var(--pdx-inline-time-max-w, 280px),100vw - 48px)!important}:host ::ng-deep .compact-fields .pfx-field-shell[data-control-type=inlineDateRange] .mat-mdc-form-field{width:var(--pdx-inline-date-range-shell-width, auto)!important;max-width:100%!important}.praxis-filter-bar.has-compact .compact-fields{grid-column:1;grid-row:1}.praxis-filter-bar.has-compact .fields-grid{grid-column:1/-1;grid-row:2}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=slider] mat-slider,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=range-slider] mat-slider,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeSlider] mat-slider{width:100%;display:block}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=slider] .pdx-slider-wrapper,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=range-slider] .pdx-slider-wrapper,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeSlider] .pdx-slider-wrapper{padding-top:2px}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=range-slider] .pdx-range-slider-container,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeSlider] .pdx-range-slider-container{padding:2px 0 0}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=range-slider] .pdx-slider-label,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeSlider] .pdx-slider-label{margin-bottom:4px;line-height:1.15}:host ::ng-deep .fields-grid .mat-mdc-text-field-wrapper.mdc-text-field--outlined{min-height:var(--pfx-filter-h);align-items:center}:host ::ng-deep .fields-grid .mat-mdc-form-field-infix{min-height:var(--pfx-filter-h)}:host ::ng-deep .fields-grid .mat-mdc-select-trigger{height:var(--pfx-filter-h);align-items:center}:host ::ng-deep .fields-grid .mat-mdc-form-field{width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineSelect]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineSelect] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineSearchableSelect]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineSearchableSelect] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineMultiSelect]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineMultiSelect] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineInput]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineInput] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlinePhone]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlinePhone] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineToggle]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineToggle] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineRange]{justify-self:start}:host ::ng-deep .compact-fields .pfx-field-shell[data-control-type=inlineRange]{max-width:min(340px,100%)}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineDate]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineDate] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineDateRange]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineDateRange] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .mat-mdc-form-field-subscript-wrapper{min-height:0;margin-top:0}:host ::ng-deep .fields-grid .mat-mdc-form-field{margin-bottom:0}.praxis-filter-bar.has-compact{--pfx-filter-tag-color: var(--md-sys-color-primary-container);--pfx-filter-tag-on-color: var(--md-sys-color-on-primary-container);--pfx-filter-tag-outline-color: var(--md-sys-color-primary);--pdx-inline-control-height: var(--pfx-filter-inline-control-height, 42px);--pdx-inline-control-height-mobile: var(--pfx-filter-inline-control-height-mobile, 40px);--pdx-inline-control-padding-x: var(--pfx-filter-inline-control-padding-x, 12px);--pdx-inline-control-padding-x-mobile: var(--pfx-filter-inline-control-padding-x-mobile, 12px);--pdx-inline-clear-size: var(--pfx-filter-inline-clear-size, 22px);--pdx-inline-chip-radius: var(--pfx-filter-inline-chip-radius, var(--md-sys-shape-corner-full, 999px));--pdx-inline-chip-active-bg: var(--pfx-filter-tag-color);--pdx-inline-chip-active-fg: var(--pfx-filter-tag-on-color);--pdx-inline-chip-active-clear-color: var(--pfx-filter-tag-on-color);--pdx-inline-field-focus-outline: var(--pfx-filter-tag-outline-color)}.praxis-filter-bar.has-compact.tag-color-accent{--pfx-filter-tag-color: var(--md-sys-color-tertiary-container, var(--md-sys-color-secondary-container));--pfx-filter-tag-on-color: var(--md-sys-color-on-tertiary-container, var(--md-sys-color-on-secondary-container));--pfx-filter-tag-outline-color: var(--md-sys-color-tertiary, var(--md-sys-color-secondary))}.praxis-filter-bar.has-compact.tag-color-warn{--pfx-filter-tag-color: var(--md-sys-color-error-container);--pfx-filter-tag-on-color: var(--md-sys-color-on-error-container);--pfx-filter-tag-outline-color: var(--md-sys-color-error)}.praxis-filter-bar.has-compact.tag-color-basic{--pfx-filter-tag-color: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);--pfx-filter-tag-on-color: var(--md-sys-color-on-surface);--pfx-filter-tag-outline-color: var(--md-sys-color-outline-variant)}:host ::ng-deep .praxis-filter-bar.has-compact{--pfx-filter-inline-chip-padding-x: var(--pdx-inline-control-padding-x);--pfx-filter-inline-icon-gap: 4px}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-text-field-wrapper.mdc-text-field--outlined{padding-inline:var(--pfx-filter-inline-chip-padding-x)!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-form-field-icon-prefix{align-items:center;display:inline-flex;flex:0 0 auto;margin-right:var(--pfx-filter-inline-icon-gap)!important;padding:0!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-form-field-icon-suffix{align-items:center;display:inline-flex;flex:0 0 auto;gap:var(--pfx-filter-inline-icon-gap)!important;margin-left:var(--pfx-filter-inline-icon-gap)!important;padding:0!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-form-field-icon-prefix>.mat-icon,:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-form-field-icon-suffix>.mat-icon{flex:0 0 16px!important;font-size:16px!important;height:16px!important;line-height:16px!important;margin:0!important;padding:0!important;width:16px!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-form-field-infix{padding-inline:0!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select) .pdx-chip-trigger{gap:var(--pfx-filter-inline-icon-gap)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-chip-trigger.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-currency-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .mat-mdc-form-field.pdx-has-value .mat-mdc-text-field-wrapper,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-select .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-searchable-select .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-async-select.pdx-has-selection .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-date-range.pdx-inline-date-range-has-value .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-date-range.pdx-inline-date-range-has-both .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-entity-lookup.pdx-has-selection .pdx-chip-trigger,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-multi-select.pdx-has-selection .pdx-chip-trigger,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-distance-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-score-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-relative-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-relative-period-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-rating-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-pipeline-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-sentiment-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-color-label-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-time-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-toggle-pill.is-active{--pdx-inline-currency-symbol-color: var(--pfx-filter-tag-on-color);background:var(--pfx-filter-tag-color)!important;border-color:transparent!important;color:var(--pfx-filter-tag-on-color)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-chip-trigger.is-active :where(.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-currency-range-chip.is-active :where(.mat-icon,.pdx-inline-currency-range-value,.pdx-inline-currency-range-text,.pdx-inline-currency-range-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .mat-mdc-form-field.pdx-has-value :where(input,.mat-mdc-input-element,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,.pdx-inline-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear) :where(input,.mat-mdc-input-element,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,.pdx-inline-clear,.pdx-inline-number-suffix),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled :where(.pdx-inline-select,.pdx-inline-searchable-select) .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active) :where(.mat-mdc-select-value,.mat-mdc-select-min-line,.mat-mdc-select-placeholder,.pdx-chip-trigger,.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-async-select.pdx-has-selection :where(.mat-mdc-select-value,.mat-mdc-select-min-line,.mat-mdc-select-placeholder,.pdx-chip-trigger,.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-date-range.pdx-inline-date-range-has-value :where(.mat-date-range-input-inner,.mat-date-range-input-separator,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,input),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-date-range.pdx-inline-date-range-has-both :where(.mat-date-range-input-inner,.mat-date-range-input-separator,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,input),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled :where(.pdx-inline-entity-lookup.pdx-has-selection,.pdx-inline-multi-select.pdx-has-selection) .pdx-chip-trigger :where(.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled :where(.pdx-inline-range-chip.is-active,.pdx-inline-distance-chip.is-active,.pdx-inline-score-chip.is-active,.pdx-inline-relative-chip.is-active,.pdx-inline-relative-period-chip.is-active,.pdx-inline-rating-chip.is-active,.pdx-inline-pipeline-chip.is-active,.pdx-inline-sentiment-chip.is-active,.pdx-inline-color-label-chip.is-active) :where(.mat-icon,button,span),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-time-range-chip.is-active :where(.pdx-inline-time-range-icon,.pdx-inline-time-range-text,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-toggle-pill.is-active :where(.pdx-inline-toggle-label,.mat-icon){color:var(--pfx-filter-tag-on-color)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-chip-trigger.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-currency-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .mat-mdc-form-field.pdx-has-value .mat-mdc-text-field-wrapper,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-select .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-searchable-select .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-async-select.pdx-has-selection .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-date-range.pdx-inline-date-range-has-value .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-date-range.pdx-inline-date-range-has-both .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-entity-lookup.pdx-has-selection .pdx-chip-trigger,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-multi-select.pdx-has-selection .pdx-chip-trigger,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-distance-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-score-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-relative-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-relative-period-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-rating-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-pipeline-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-sentiment-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-color-label-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-time-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-toggle-pill.is-active{--pdx-inline-currency-symbol-color: var(--pfx-filter-tag-outline-color);background:transparent!important;border-color:var(--pfx-filter-tag-outline-color)!important;box-shadow:inset 0 0 0 1px var(--pfx-filter-tag-outline-color);color:var(--pfx-filter-tag-outline-color)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-chip-trigger.is-active :where(.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-currency-range-chip.is-active :where(.mat-icon,.pdx-inline-currency-range-value,.pdx-inline-currency-range-text,.pdx-inline-currency-range-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .mat-mdc-form-field.pdx-has-value :where(input,.mat-mdc-input-element,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,.pdx-inline-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear) :where(input,.mat-mdc-input-element,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,.pdx-inline-clear,.pdx-inline-number-suffix),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined :where(.pdx-inline-select,.pdx-inline-searchable-select) .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active) :where(.mat-mdc-select-value,.mat-mdc-select-min-line,.mat-mdc-select-placeholder,.pdx-chip-trigger,.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-async-select.pdx-has-selection :where(.mat-mdc-select-value,.mat-mdc-select-min-line,.mat-mdc-select-placeholder,.pdx-chip-trigger,.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-date-range.pdx-inline-date-range-has-value :where(.mat-date-range-input-inner,.mat-date-range-input-separator,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,input),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-date-range.pdx-inline-date-range-has-both :where(.mat-date-range-input-inner,.mat-date-range-input-separator,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,input),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined :where(.pdx-inline-entity-lookup.pdx-has-selection,.pdx-inline-multi-select.pdx-has-selection) .pdx-chip-trigger :where(.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined :where(.pdx-inline-range-chip.is-active,.pdx-inline-distance-chip.is-active,.pdx-inline-score-chip.is-active,.pdx-inline-relative-chip.is-active,.pdx-inline-relative-period-chip.is-active,.pdx-inline-rating-chip.is-active,.pdx-inline-pipeline-chip.is-active,.pdx-inline-sentiment-chip.is-active,.pdx-inline-color-label-chip.is-active) :where(.mat-icon,button,span),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-time-range-chip.is-active :where(.pdx-inline-time-range-icon,.pdx-inline-time-range-text,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-toggle-pill.is-active :where(.pdx-inline-toggle-label,.mat-icon){color:var(--pfx-filter-tag-outline-color)!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-chip-trigger.is-active,.mat-mdc-form-field.pdx-has-value,.pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear),.pdx-inline-currency-range-chip.is-active,.pdx-inline-range-chip.is-active,.pdx-inline-distance-chip.is-active,.pdx-inline-score-chip.is-active,.pdx-inline-relative-chip.is-active,.pdx-inline-relative-period-chip.is-active,.pdx-inline-rating-chip.is-active,.pdx-inline-pipeline-chip.is-active,.pdx-inline-sentiment-chip.is-active,.pdx-inline-color-label-chip.is-active,.pdx-inline-time-range-chip.is-active,.pdx-inline-toggle-pill.is-active) :where(.pdx-chip-clear,.pdx-inline-clear,.pdx-inline-currency-range-clear,.pdx-inline-range-clear,.pdx-inline-distance-clear,.pdx-inline-score-clear,.pdx-inline-relative-clear,.pdx-inline-rating-clear,.pdx-inline-pipeline-clear,.pdx-inline-sentiment-clear,.pdx-inline-color-label-clear,.pdx-inline-time-range-clear,.pdx-inline-toggle-clear){background:color-mix(in srgb,currentColor 16%,transparent)!important;border-radius:50%!important;color:inherit!important;display:inline-grid!important;flex:0 0 var(--pdx-inline-clear-size, 22px)!important;height:var(--pdx-inline-clear-size, 22px)!important;min-width:var(--pdx-inline-clear-size, 22px)!important;place-items:center!important;width:var(--pdx-inline-clear-size, 22px)!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-chip-trigger.is-active,.mat-mdc-form-field.pdx-has-value,.pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear),.pdx-inline-currency-range-chip.is-active,.pdx-inline-range-chip.is-active,.pdx-inline-distance-chip.is-active,.pdx-inline-score-chip.is-active,.pdx-inline-relative-chip.is-active,.pdx-inline-relative-period-chip.is-active,.pdx-inline-rating-chip.is-active,.pdx-inline-pipeline-chip.is-active,.pdx-inline-sentiment-chip.is-active,.pdx-inline-color-label-chip.is-active,.pdx-inline-time-range-chip.is-active,.pdx-inline-toggle-pill.is-active) :where(.pdx-chip-clear,.pdx-inline-clear,.pdx-inline-currency-range-clear,.pdx-inline-range-clear,.pdx-inline-distance-clear,.pdx-inline-score-clear,.pdx-inline-relative-clear,.pdx-inline-rating-clear,.pdx-inline-pipeline-clear,.pdx-inline-sentiment-clear,.pdx-inline-color-label-clear,.pdx-inline-time-range-clear,.pdx-inline-toggle-clear):hover{background:color-mix(in srgb,currentColor 24%,transparent)!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-chip-trigger.is-active,.mat-mdc-form-field.pdx-has-value,.pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear),.pdx-inline-currency-range-chip.is-active,.pdx-inline-range-chip.is-active,.pdx-inline-distance-chip.is-active,.pdx-inline-score-chip.is-active,.pdx-inline-relative-chip.is-active,.pdx-inline-relative-period-chip.is-active,.pdx-inline-rating-chip.is-active,.pdx-inline-pipeline-chip.is-active,.pdx-inline-sentiment-chip.is-active,.pdx-inline-color-label-chip.is-active,.pdx-inline-time-range-chip.is-active,.pdx-inline-toggle-pill.is-active) :where(.pdx-chip-clear,.pdx-inline-clear,.pdx-inline-currency-range-clear,.pdx-inline-range-clear,.pdx-inline-distance-clear,.pdx-inline-score-clear,.pdx-inline-relative-clear,.pdx-inline-rating-clear,.pdx-inline-pipeline-clear,.pdx-inline-sentiment-clear,.pdx-inline-color-label-clear,.pdx-inline-time-range-clear,.pdx-inline-toggle-clear) .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}:host ::ng-deep .praxis-filter-bar.has-compact .mat-mdc-form-field.pdx-has-value .pdx-inline-clear .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .mat-mdc-form-field.pdx-has-value .pdx-inline-clear .mat-icon,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .mat-mdc-form-field.pdx-has-value .pdx-inline-clear .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-number .mat-mdc-text-field-wrapper:has(.pdx-inline-clear) .pdx-inline-clear .mat-icon,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-number .mat-mdc-text-field-wrapper:has(.pdx-inline-clear) .pdx-inline-clear .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-toggle-pill.is-active .pdx-inline-toggle-clear .mat-icon,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-toggle-pill.is-active .pdx-inline-toggle-clear .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-chip-trigger.is-active .pdx-chip-clear .mat-icon,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-chip-trigger.is-active .pdx-chip-clear .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}.praxis-filter-tags.outlined .mat-mdc-chip{background:transparent!important;--mat-chip-outline-width: 1px;--mat-chip-outline-color: var(--md-sys-color-outline-variant);box-shadow:inset 0 0 0 var(--mat-chip-outline-width) var(--mat-chip-outline-color)}.praxis-filter-tags.outlined.tag-color-primary .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-primary)}.praxis-filter-tags.outlined.tag-color-accent .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-tertiary)}.praxis-filter-tags.outlined.tag-color-warn .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-error)}.praxis-filter-tags.outlined mat-chip.active .mat-mdc-chip,.praxis-filter-tags.outlined .mat-mdc-chip.mat-mdc-chip-highlighted{--mat-chip-outline-width: 2px;box-shadow:inset 0 0 0 var(--mat-chip-outline-width) var(--mat-chip-outline-color)!important}.praxis-filter-tags.outlined.tag-color-basic mat-chip.active .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-primary)}.praxis-filter-tags .mat-mdc-standard-chip .mdc-evolution-chip__text-label{display:flex;align-items:center;justify-content:center;gap:4px;line-height:1.2;font-size:.875rem}.praxis-filter-tags .chip-leading,.praxis-filter-tags .chip-trailing{display:inline-flex;align-items:center}.praxis-filter-tags .leading-check{width:18px;height:18px;font-size:18px;line-height:1}.praxis-filter-tags .chip-label{position:relative;top:-6px}.praxis-filter-tags .chip-trailing .mat-mdc-icon-button{width:28px;height:28px;padding:0;display:flex;align-items:center;justify-content:center;line-height:28px}.praxis-filter-tags .mat-mdc-standard-chip{--mat-chip-container-height: 36px}.praxis-filter-advanced{display:flex;flex-direction:column;min-width:400px;max-width:90vw;min-height:260px;max-height:min(80vh,720px);margin:var(--pfx-overlay-margin-y) var(--pfx-overlay-margin-x);background-color:var(--pfx-overlay-surface)!important;background:var(--pfx-overlay-surface)!important;color:var(--pfx-overlay-on-surface);border:1px solid var(--border-color);border-radius:12px;box-shadow:var(--md-sys-elevation-level3)}.advanced-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px var(--pfx-advanced-pad-x) 10px;border-bottom:1px solid var(--border-color);background:var(--pfx-overlay-surface)}.advanced-title-block{display:flex;flex-direction:column;gap:2px}.advanced-title{font-size:1rem;font-weight:600;color:var(--pfx-overlay-on-surface)}.advanced-subtitle{font-size:.85rem;color:var(--pfx-overlay-on-surface-variant)}.advanced-close{align-self:flex-start}.praxis-filter-overlay.mobile .praxis-filter-advanced{height:100vh;max-height:100vh;margin:0;border-radius:0}:host ::ng-deep .praxis-overlay-backdrop{background:var(--md-sys-color-scrim);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}:host ::ng-deep .praxis-filter-overlay.frosted .praxis-filter-advanced{background:var(--pfx-overlay-surface-variant)!important;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-color:var(--border-color)}:host ::ng-deep .praxis-filter-overlay.frosted .advanced-header,:host ::ng-deep .praxis-filter-overlay.frosted .advanced-actions{background:var(--pfx-overlay-surface-variant)!important}.advanced-body{padding:12px var(--pfx-advanced-pad-x) 72px;overflow:auto;flex:1 1 auto;overscroll-behavior:contain}:host ::ng-deep .praxis-filter-advanced .praxis-filter-form .filter-row{display:grid!important;grid-template-columns:repeat(auto-fit,minmax(var(--pfx-field-min),1fr));gap:var(--pfx-gap-y) var(--pfx-gap-x)}:host ::ng-deep .praxis-filter-advanced .praxis-filter-form .filter-column{min-width:0}:host ::ng-deep .praxis-filter-advanced .praxis-filter-form .filter-column .mat-mdc-form-field{width:100%}.advanced-actions{position:sticky;bottom:0;z-index:2;display:flex;justify-content:flex-end;gap:8px;padding:var(--pfx-gap-y) var(--pfx-advanced-pad-x);background-color:var(--pfx-overlay-surface)!important;background:var(--pfx-overlay-surface)!important;border-top:1px solid var(--border-color);box-shadow:0 -1px 0 var(--md-sys-color-outline-variant)}.advanced-actions .mat-mdc-button-base{height:40px}.advanced-actions .mat-mdc-raised-button.mat-primary{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}:host ::ng-deep .praxis-filter-advanced .mat-mdc-text-field-wrapper.mdc-text-field--outlined{--mdc-outlined-text-field-outline-color: var(--border-color);--mdc-outlined-text-field-hover-outline-color: var(--border-color-hover);--mdc-outlined-text-field-focus-outline-color: var(--md-sys-color-primary);--mdc-outlined-text-field-label-text-color: var(--pfx-overlay-on-surface-variant);--mdc-outlined-text-field-input-text-color: var(--pfx-overlay-on-surface);--mdc-outlined-text-field-container-color: var(--pfx-overlay-surface)}:host ::ng-deep .praxis-filter-advanced .mat-mdc-select-trigger,:host ::ng-deep .praxis-filter-advanced .mat-mdc-form-field-subscript-wrapper,:host ::ng-deep .praxis-filter-advanced .mat-mdc-form-field-infix{color:var(--pfx-overlay-on-surface)}@media(min-width:600px){.fields-grid{gap:6px 8px}:host ::ng-deep .praxis-filter-advanced .praxis-filter-form .filter-row{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:640px){.praxis-filter-bar.has-compact{grid-template-columns:minmax(0,1fr);align-items:start}.praxis-filter-bar.has-compact .compact-fields{grid-column:1;grid-row:1;display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));align-items:start;justify-items:stretch;width:100%}.praxis-filter-bar.has-compact .inline-actions{grid-column:1;grid-row:2;justify-self:start;width:100%;height:auto}.praxis-filter-bar.has-compact .inline-actions .action-cluster{max-width:100%}:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields>.pfx-field-shell,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields>praxis-field-shell,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell-wrapper,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell-host{--pfx-field-shell-width: auto;--pfx-field-shell-field-width: auto;width:100%!important;max-width:100%!important}:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .mat-mdc-form-field,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .mat-mdc-text-field-wrapper,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-chip-trigger,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-range-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-currency-range-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-distance-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-score-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-relative-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-relative-period-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-rating-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-pipeline-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-sentiment-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-color-label-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-time-range-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-toggle-pill{width:100%!important;max-width:100%!important}:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields :where(.pdx-chip-label,.pdx-chip-trigger,.pdx-inline-range-text,.pdx-inline-currency-range-text,.pdx-inline-distance-text,.pdx-inline-score-text,.pdx-inline-relative-text,.pdx-inline-relative-period-text,.pdx-inline-rating-text,.pdx-inline-pipeline-text,.pdx-inline-sentiment-text,.pdx-inline-color-label-text,.pdx-inline-time-range-text,.pdx-inline-toggle-label){min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell[data-control-type=inlineTime],:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell[data-control-type=inlineTime] .pfx-field-shell-wrapper,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell[data-control-type=inlineTime] .pfx-field-shell-host{--pfx-field-shell-width: fit-content;--pfx-field-shell-field-width: var(--pdx-inline-time-field-w, auto);justify-self:start;width:fit-content!important;max-width:100%!important}:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell[data-control-type=inlineTime] .mat-mdc-form-field.pdx-inline-time{width:var(--pdx-inline-time-field-w, auto)!important;inline-size:var(--pdx-inline-time-field-w, auto)!important;max-width:min(var(--pdx-inline-time-max-w, 280px),100vw - 48px)!important}}@media(min-width:960px){.fields-grid{gap:6px 10px}}@media(min-width:1200px){.fields-grid{grid-template-columns:repeat(auto-fit,minmax(var(--pfx-always-min, 220px),var(--pfx-always-max-desktop, 380px)));justify-content:start;align-content:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=slider],:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=range-slider],:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeSlider],:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeslider]{grid-column:span var(--pfx-slider-span-desktop, 2)}}.inline-toggles{display:flex;align-items:center;gap:8px;margin:0 4px 0 6px}:host ::ng-deep .inline-actions .mat-mdc-slide-toggle{height:var(--pfx-filter-h);display:flex;align-items:center}:host ::ng-deep .inline-actions .mat-mdc-slide-toggle .mdc-form-field{align-items:center}::ng-deep .praxis-filter-overlay .praxis-filter-advanced .praxis-filter-form .filter-row{display:grid!important;gap:var(--pfx-gap-y, 1px) var(--pfx-gap-x, 6px)}@media(min-width:600px){::ng-deep .praxis-filter-overlay .praxis-filter-advanced .praxis-filter-form .filter-row{grid-template-columns:repeat(2,minmax(0,1fr))}}.sr-only{position:absolute!important;width:1px!important;height:1px!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important}.hidden-submit{position:absolute!important;width:0!important;height:0!important;padding:0!important;margin:0!important;border:0!important;opacity:0!important;pointer-events:none!important;clip:rect(0 0 0 0)!important;clip-path:inset(50%)!important;overflow:hidden!important}:host ::ng-deep .inline-actions [matBadge] .mat-badge-content{top:-6px;right:-6px;min-width:16px;height:16px;padding:0 4px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;font-size:10px;font-weight:700;line-height:16px;letter-spacing:0;text-indent:0;color:var(--md-sys-color-on-primary, #fff)}:host ::ng-deep .inline-actions [matBadge][matbadgecolor=warn] .mat-badge-content,:host ::ng-deep .inline-actions [matBadge].mat-badge-warn .mat-badge-content{color:var(--md-sys-color-on-error, #fff)}.praxis-filter-bar :where(.mat-mdc-slide-toggle .mdc-switch__icons){display:none!important}.praxis-filter-bar{--mdc-switch-unselected-icon-size: 0px;--mdc-switch-selected-icon-size: 0px;--pfx-always-min: 220px}.praxis-filter-card{display:flex;flex-direction:column;gap:6px;padding:8px 12px;border-radius:12px;border:1px solid var(--pfx-surface-border, var(--praxis-theme-outline, var(--md-sys-color-outline-variant)));background:var(--praxis-theme-surface-raised, var(--md-sys-color-surface-container));color:var(--praxis-theme-on-surface, var(--md-sys-color-on-surface))}.add-manager{--_pfx-field-manager-surface: var(--pfx-field-manager-surface, var(--praxis-theme-surface-overlay, var(--md-sys-color-surface-container-highest)));--_pfx-field-manager-on-surface: var(--pfx-field-manager-on-surface, var(--praxis-theme-on-surface, var(--md-sys-color-on-surface)));--_pfx-field-manager-on-surface-muted: var(--pfx-field-manager-on-surface-muted, var(--praxis-theme-on-surface-muted, var(--md-sys-color-on-surface-variant)));--_pfx-field-manager-outline: var(--pfx-field-manager-outline, var(--pdx-inline-field-outline, var(--praxis-theme-outline, var(--md-sys-color-outline-variant))));--_pfx-field-manager-focus-outline: var(--pfx-field-manager-focus-outline, var(--pdx-inline-field-focus-outline, var(--praxis-theme-focus-outline, var(--md-sys-color-primary))));--_pfx-field-manager-search-surface: var(--pfx-field-manager-search-surface, var(--pdx-inline-field-surface, var(--praxis-theme-surface-raised, var(--md-sys-color-surface-container-high))));--_pfx-field-manager-search-on-surface: var(--pfx-field-manager-search-on-surface, var(--pdx-inline-field-on-surface, var(--praxis-theme-on-surface, var(--md-sys-color-on-surface))));--_pfx-field-manager-search-placeholder: var(--pfx-field-manager-search-placeholder, var(--pdx-inline-field-on-surface-muted, var(--praxis-theme-on-surface-muted, var(--md-sys-color-on-surface-variant))));--_pfx-field-manager-search-height: var(--pfx-field-manager-search-height, var(--pdx-inline-control-height-mobile, 40px));--_pfx-field-manager-search-font-size: var(--pfx-field-manager-search-font-size, var(--md-sys-typescale-body-medium-size, .875rem));--_pfx-field-manager-search-line-height: var(--pfx-field-manager-search-line-height, var(--md-sys-typescale-body-medium-line-height, 1.25rem));--_pfx-field-manager-search-font-weight: var(--pfx-field-manager-search-font-weight, var(--md-sys-typescale-body-medium-weight, 400));--_pfx-field-manager-search-icon-size: var(--pfx-field-manager-search-icon-size, 18px);display:flex;flex-direction:column;width:min(400px,100vw - 24px);max-height:min(70vh,560px);overflow:hidden;border:1px solid var(--_pfx-field-manager-outline);border-radius:var(--pfx-overlay-radius, 16px);background:var(--_pfx-field-manager-surface);color:var(--_pfx-field-manager-on-surface);box-shadow:var(--praxis-theme-elevation, var(--md-sys-elevation-level3))}.add-manager__header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:16px 16px 8px 20px}.add-manager__header h2{margin:0;font:var(--md-sys-typescale-title-medium)}.add-manager__header p{margin:4px 0 0;color:var(--_pfx-field-manager-on-surface-muted);font:var(--md-sys-typescale-body-small)}.add-manager__search{padding:8px 20px}.add-manager__search-field{display:flex;align-items:center;min-height:var(--_pfx-field-manager-search-height);padding-inline:12px;border:1px solid var(--_pfx-field-manager-outline);border-radius:var(--pfx-field-manager-search-radius, 999px);background:var(--_pfx-field-manager-search-surface);color:var(--_pfx-field-manager-search-on-surface);box-sizing:border-box;transition:border-color .12s ease}.add-manager__search-field:focus-within{border:2px solid var(--_pfx-field-manager-focus-outline)}.add-manager__search-field input{flex:1 1 auto;min-width:0;height:var(--_pfx-field-manager-search-height);padding:0;border:0;outline:none;background:transparent;color:var(--_pfx-field-manager-search-on-surface);font-size:var(--_pfx-field-manager-search-font-size);line-height:var(--_pfx-field-manager-search-line-height);font-weight:var(--_pfx-field-manager-search-font-weight);caret-color:var(--_pfx-field-manager-focus-outline)}.add-manager__search-field input::placeholder{color:var(--_pfx-field-manager-search-placeholder);opacity:1}.add-manager__search-field input[type=search]{appearance:none}.add-manager__search-field input[type=search]::-webkit-search-cancel-button{display:none}.add-manager__search-icon{flex:0 0 auto;width:var(--_pfx-field-manager-search-icon-size);height:var(--_pfx-field-manager-search-icon-size);margin-right:8px;color:var(--_pfx-field-manager-search-placeholder);font-size:var(--_pfx-field-manager-search-icon-size)}.add-manager__clear-search{flex:0 0 auto;width:28px;height:28px;padding:2px;color:var(--_pfx-field-manager-search-placeholder)}.add-manager__clear-search mat-icon{width:18px;height:18px;font-size:18px}.add-manager__bulk{padding:8px 20px;border-block:1px solid var(--_pfx-field-manager-outline)}.add-manager__list{display:flex;flex-direction:column;min-height:80px;overflow:auto;padding:4px 12px 12px}.add-manager__section+.add-manager__section{margin-top:8px;padding-top:8px;border-top:1px solid var(--_pfx-field-manager-outline)}.add-manager__section-title{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin:0;padding:8px 8px 4px;color:var(--_pfx-field-manager-on-surface-muted);font:var(--md-sys-typescale-label-medium)}.add-manager__section-title span{color:var(--_pfx-field-manager-on-surface-muted);font:var(--md-sys-typescale-label-small);white-space:nowrap}.add-manager__item{display:flex;align-items:center;min-height:48px;padding-inline:8px;border-radius:var(--pfx-control-radius, 8px)}::ng-deep .add-manager__item .mdc-form-field{align-items:center}::ng-deep .add-manager__item .mdc-label{display:inline-flex;align-items:center;min-height:20px}.add-manager__item:hover{background:color-mix(in srgb,var(--_pfx-field-manager-on-surface) 6%,var(--_pfx-field-manager-surface))}.add-manager__item-info{width:16px;height:16px;margin-left:4px;vertical-align:text-bottom;color:var(--_pfx-field-manager-on-surface-muted);font-size:16px}.add-manager__section--selected .add-manager__item{box-shadow:inset 2px 0 color-mix(in srgb,var(--_pfx-field-manager-focus-outline) 56%,transparent)}.add-manager__item--added{animation:add-manager-item-added var(--md-sys-motion-duration-short4, .2s) var(--md-sys-motion-easing-emphasized-decelerate, cubic-bezier(.05, .7, .1, 1)) both}.add-manager__item--removed{animation:add-manager-item-removed var(--md-sys-motion-duration-short4, .2s) var(--md-sys-motion-easing-emphasized-decelerate, cubic-bezier(.05, .7, .1, 1)) both}@keyframes add-manager-item-added{0%{opacity:.44;transform:translateY(8px) scale(.98);background:color-mix(in srgb,var(--_pfx-field-manager-focus-outline) 24%,var(--_pfx-field-manager-surface))}to{opacity:1;transform:translateY(0) scale(1);background:transparent}}@keyframes add-manager-item-removed{0%{opacity:.44;transform:translateY(-8px) scale(.98);background:color-mix(in srgb,var(--md-sys-color-surface-container-high) 72%,transparent)}to{opacity:1;transform:translateY(0) scale(1);background:transparent}}@media(prefers-reduced-motion:reduce){.add-manager__item--added,.add-manager__item--removed{animation:none}}.add-manager__empty{display:flex;align-items:center;justify-content:center;gap:8px;min-height:96px;padding:16px;color:var(--_pfx-field-manager-on-surface-muted);text-align:center}.add-manager__footer{display:flex;justify-content:flex-end;gap:8px;padding:12px 16px;border-top:1px solid var(--_pfx-field-manager-outline);background:var(--_pfx-field-manager-surface)}.add-manager__notice{display:flex;align-items:flex-start;gap:8px;padding:10px 16px;font:var(--md-sys-typescale-body-small)}.add-manager__notice mat-icon{flex:0 0 auto}.add-manager__notice--warning{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container)}.add-manager__notice--conflict{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}@media(max-width:600px){.add-manager{width:calc(100vw - 16px);max-height:min(78dvh,640px);border-radius:var(--pfx-overlay-radius, 16px)}.add-manager__header,.add-manager__search{padding-inline:16px}}.inline-actions .add-trigger{display:inline-flex;align-items:center;gap:6px;height:32px;width:100%;max-width:100%;min-width:0;padding:0 10px;border-radius:0;border:0;background:transparent;overflow:visible}.inline-actions .add-trigger--icon{justify-content:center;width:32px;min-width:32px;padding:0}:host ::ng-deep .inline-actions .add-trigger mat-icon{width:18px;height:18px;font-size:18px;flex:0 0 auto}.inline-actions .add-trigger-label{display:inline-block;flex:1 1 auto;min-width:0;max-width:100%;text-align:left;direction:ltr;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.82rem;line-height:1}:host ::ng-deep .action-cluster--manage .mat-mdc-select{flex:0 0 auto;width:180px;min-width:0;max-width:180px}:host ::ng-deep .action-cluster--manage .cluster-select--hidden.mat-mdc-select{position:absolute;width:1px;min-width:1px;max-width:1px;height:1px;opacity:0;pointer-events:none;overflow:hidden}:host ::ng-deep .action-cluster--manage .mat-mdc-select-trigger{min-height:32px;padding:0}:host ::ng-deep .action-cluster--manage .mat-mdc-select-value,:host ::ng-deep .action-cluster--manage .mat-mdc-select-value-text,:host ::ng-deep .action-cluster--manage .mat-mdc-select-min-line{width:auto;min-width:0;max-width:100%;display:inline-flex;align-items:center;justify-content:flex-start;overflow:visible}.praxis-filter-card .summary-header{display:flex;align-items:center;gap:10px}.praxis-filter-card .summary-avatar{width:32px;height:32px;border-radius:50%;object-fit:cover}.praxis-filter-card .summary-title{font-weight:600}.praxis-filter-card .summary-subtitle{opacity:.8;font-size:.875rem}.praxis-filter-card .summary-badges{display:flex;flex-wrap:wrap;gap:6px}.praxis-filter-card .summary-badges span{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;background:var(--md-sys-color-primary-container);border:1px solid var(--md-sys-color-outline-variant);color:var(--md-sys-color-on-primary-container);font-size:12px}.praxis-filter-card .card-actions{display:flex;gap:8px}:host ::ng-deep .inline-actions .mat-mdc-select-arrow-wrapper{display:none}.inline-actions .add-filter-btn{height:36px;border-radius:18px;padding:0 16px 0 12px}.inline-actions .add-filter-btn mat-icon{margin-right:8px;margin-left:-4px}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.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: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3$1.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: 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: MatChipsModule }, { kind: "component", type: i10$1.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i10$1.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i15.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i13$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i14$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatSnackBarModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: DynamicFieldLoaderDirective, selector: "[dynamicFieldLoader]", inputs: ["fields", "formGroup", "enableExternalControlBinding", "itemTemplate", "debugTrace", "debugTraceLabel", "readonlyMode", "disabledMode", "presentationMode", "visible", "canvasMode"], outputs: ["componentsCreated", "fieldCreated", "fieldDestroyed", "renderError", "canvasMouseEnter", "canvasMouseLeave", "canvasClick", "canvasFocus"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i12.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i12.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i18.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }] });
38610
38676
  }
38611
38677
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisFilter, decorators: [{
38612
38678
  type: Component,
38613
38679
  args: [{ selector: 'praxis-filter', standalone: true, imports: [
38614
38680
  ReactiveFormsModule,
38615
- MatFormFieldModule,
38616
38681
  MatInputModule,
38617
38682
  MatButtonModule,
38618
38683
  MatChipsModule,
@@ -38633,7 +38698,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
38633
38698
  '[style.--pfx-always-min]': 'alwaysMinWidth + "px"',
38634
38699
  '[style.--pfx-always-cols-md]': 'alwaysColsMd',
38635
38700
  '[style.--pfx-always-cols-lg]': 'alwaysColsLg',
38636
- }, template: "@if (saving) {\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n}\n@if (schemaError) {\n <div class=\"schema-error-banner\" role=\"alert\" aria-live=\"polite\">\n <mat-icon [praxisIcon]=\"'error_outline'\" aria-hidden=\"true\"></mat-icon>\n <span class=\"schema-error-message\">{{ i18nLabels.errorLoadingFilters || 'Erro ao carregar filtros.' }}</span>\n <button\n mat-stroked-button\n class=\"schema-error-retry\"\n type=\"button\"\n (click)=\"retrySchemaLoad()\"\n [attr.aria-label]=\"i18nLabels.retry || 'Tentar novamente'\"\n >\n {{ i18nLabels.retry || 'Tentar novamente' }}\n </button>\n </div>\n}\n\n<form class=\"praxis-filter-bar\" [class.is-open]=\"advancedOpen\"\n [class.has-compact]=\"compactSelectedMetas.length || compactAlwaysVisibleMetas.length\"\n [class.tag-variant-filled]=\"tagVariant === 'filled'\"\n [class.tag-variant-outlined]=\"tagVariant === 'outlined'\"\n [class.tag-color-basic]=\"tagColor === 'basic'\"\n [class.tag-color-primary]=\"tagColor === 'primary'\"\n [class.tag-color-accent]=\"tagColor === 'accent'\"\n [class.tag-color-warn]=\"tagColor === 'warn'\"\n (click)=\"onFieldInteraction($event)\"\n (focusin)=\"onFieldInteraction($event)\"\n (change)=\"$event.stopPropagation()\"\n (submit)=\"onSubmit(); $event.preventDefault(); $event.stopPropagation()\">\n <div class=\"inline-actions\" [class.actions-outlined]=\"actionsVariant==='outlined'\">\n <div class=\"actions-anchor\" #anchorRef=\"cdkOverlayOrigin\" cdkOverlayOrigin></div>\n @if (toggleMetas.length) {\n <div class=\"inline-toggles\">\n <ng-container dynamicFieldLoader [fields]=\"toggleMetas\" [formGroup]=\"alwaysForm\"\n (componentsCreated)=\"onToggleComponents($event)\"></ng-container>\n </div>\n }\n\n @if (showAdvancedButton || showAddButton || showFilterSettings || isFieldAuthoringEnabled()) {\n <div class=\"action-cluster action-cluster--manage\">\n @if (showAdvancedButton) {\n <button #advancedButton mat-icon-button class=\"cluster-btn\"\n [class.is-opening]=\"advancedOpening\" [class.is-disabled]=\"!hasAdvancedFields()\"\n [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\" type=\"button\"\n [matBadge]=\"activeFiltersCount\" [matBadgeHidden]=\"!activeFiltersCount || !hasAdvancedFields()\" matBadgeSize=\"small\"\n matBadgeColor=\"primary\" [matBadgeOverlap]=\"false\" (click)=\"toggleAdvanced()\"\n [attr.aria-label]=\"getAdvancedAriaLabel()\" [attr.aria-expanded]=\"advancedOpen\"\n [attr.aria-disabled]=\"!hasAdvancedFields()\"\n [attr.aria-busy]=\"advancedOpening ? 'true' : null\"\n [matTooltip]=\"getAdvancedTooltip()\"\n matTooltipPosition=\"below\"\n [attr.aria-controls]=\"advancedPanelId\">\n @if (advancedOpening) {\n <mat-progress-spinner\n class=\"cluster-btn-spinner\"\n mode=\"indeterminate\"\n diameter=\"18\"\n strokeWidth=\"3\"\n aria-hidden=\"true\"\n ></mat-progress-spinner>\n } @else {\n <mat-icon [praxisIcon]=\"'filter_list'\"></mat-icon>\n }\n </button>\n }\n @if (showAddButton) {\n <button #addManagerOrigin=\"cdkOverlayOrigin\" cdkOverlayOrigin mat-icon-button class=\"cluster-btn\"\n [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\"\n type=\"button\" [attr.aria-label]=\"getAddAriaLabel()\" [matTooltip]=\"getAddTooltip()\"\n matTooltipPosition=\"below\" [class.is-disabled]=\"!hasAddableFields()\"\n [attr.aria-disabled]=\"!hasAddableFields()\" [attr.aria-expanded]=\"addManagerOpen\"\n aria-haspopup=\"dialog\" [attr.aria-controls]=\"addManagerOpen ? addManagerTitleId : null\"\n (click)=\"toggleAddManager()\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n </button>\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"addManagerOrigin\"\n [cdkConnectedOverlayOpen]=\"addManagerOpen\" [cdkConnectedOverlayPositions]=\"addOverlayPositions\"\n [cdkConnectedOverlayHasBackdrop]=\"true\" cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"closeAddManager()\" (detach)=\"closeAddManager()\"\n (overlayKeydown)=\"$event.key === 'Escape' && closeAddManager()\">\n <section class=\"add-manager\" role=\"dialog\" [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"addManagerTitleId\" [attr.aria-describedby]=\"addManagerDescriptionId\"\n cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <header class=\"add-manager__header\">\n <div>\n <h2 [id]=\"addManagerTitleId\">{{ i18nLabels.manageFieldsTitle || 'Gerenciar campos de filtro' }}</h2>\n <p [id]=\"addManagerDescriptionId\">{{ i18nLabels.manageFieldsDescription || 'Escolha os campos exibidos na barra de filtros.' }}</p>\n </div>\n <button mat-icon-button type=\"button\" (click)=\"closeAddManager()\"\n [attr.aria-label]=\"i18nLabels.close || 'Fechar'\">\n <mat-icon [praxisIcon]=\"'close'\" aria-hidden=\"true\"></mat-icon>\n </button>\n </header>\n <div class=\"add-manager__search\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>{{ i18nLabels.filtersSearch || i18nLabels.searchPlaceholder }}</mat-label>\n <mat-icon matPrefix [praxisIcon]=\"'search'\" aria-hidden=\"true\"></mat-icon>\n <input #addSearchInput matInput cdkFocusInitial [value]=\"addQuery\"\n (input)=\"onAddQuery(($any($event.target)).value)\" />\n @if (addQuery) {\n <button matSuffix mat-icon-button type=\"button\" (click)=\"onAddQuery(''); addSearchInput.focus()\"\n [attr.aria-label]=\"i18nLabels.clearSearch || 'Limpar busca'\">\n <mat-icon [praxisIcon]=\"'close'\" aria-hidden=\"true\"></mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n <div class=\"add-manager__summary\" aria-live=\"polite\">\n {{ addDraftSelectedFieldIds.length }} {{ i18nLabels.selectedFieldsSuffix || 'campos exibidos' }}\n </div>\n <div class=\"add-manager__bulk\">\n <mat-checkbox [checked]=\"isAllSelected()\" [indeterminate]=\"isSomeSelected() && !isAllSelected()\"\n [disabled]=\"!addItems.length || addManagerConflict\"\n (change)=\"toggleSelectAll()\">\n {{ i18nLabels.selectAllResults || i18nLabels.selectAll || 'Selecionar todos os resultados' }}\n </mat-checkbox>\n </div>\n <div class=\"add-manager__list\" role=\"group\" [attr.aria-label]=\"i18nLabels.manageFieldsTitle || 'Gerenciar campos de filtro'\">\n @for (it of addItems; track trackById($index, it)) {\n <mat-checkbox class=\"add-manager__item\" [checked]=\"addDraftSelectedFieldIds.includes(it.id)\"\n [disabled]=\"addManagerConflict\"\n (change)=\"toggleManagedField(it.id, $event.checked)\">{{ it.label }}</mat-checkbox>\n }\n @if (!addItems.length) {\n <div class=\"add-manager__empty\" role=\"status\">\n <mat-icon [praxisIcon]=\"'search_off'\" aria-hidden=\"true\"></mat-icon>\n <span>{{ addQuery ? (i18nLabels.noFilterFieldsFound || 'Nenhum campo encontrado.') : (i18nLabels.addUnavailable || 'Todos os campos j\u00E1 est\u00E3o vis\u00EDveis') }}</span>\n </div>\n }\n </div>\n @if (addManagerConflict) {\n <div class=\"add-manager__notice add-manager__notice--conflict\" role=\"alert\">\n <mat-icon [praxisIcon]=\"'sync_problem'\" aria-hidden=\"true\"></mat-icon>\n <span>{{ i18nLabels.fieldSelectionConflict }}</span>\n </div>\n } @else if (getRemovedActiveFieldLabels().length) {\n <div class=\"add-manager__notice add-manager__notice--warning\" role=\"status\">\n <mat-icon [praxisIcon]=\"'warning_amber'\" aria-hidden=\"true\"></mat-icon>\n <span>{{ i18nLabels.removingActiveFields }} {{ getRemovedActiveFieldLabels().join(', ') }}</span>\n </div>\n }\n <footer class=\"add-manager__footer\">\n <button mat-button type=\"button\" (click)=\"closeAddManager()\">{{ i18nLabels.cancel }}</button>\n <button mat-flat-button color=\"primary\" type=\"button\"\n [disabled]=\"!isAddManagerDirty() || addManagerConflict\"\n (click)=\"applyAddManager()\">\n {{ i18nLabels.apply }}\n @if (isAddManagerDirty()) { ({{ getAddManagerChangeCount() }}) }\n </button>\n </footer>\n </section>\n </ng-template>\n }\n @if (showFilterSettings) {\n <button mat-icon-button class=\"cluster-btn separator-before\" [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\"\n type=\"button\" (click)=\"openSettings()\" [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\" matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"getSettingsTooltip()\"\n matTooltipPosition=\"below\" [attr.aria-label]=\"getSettingsAriaLabel()\">\n <mat-icon [praxisIcon]=\"'settings'\"></mat-icon>\n </button>\n }\n @if (isFieldAuthoringEnabled() && activeEditableFieldMeta) {\n <button\n mat-icon-button\n class=\"cluster-btn\"\n [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\"\n type=\"button\"\n data-testid=\"filter-field-settings-trigger\"\n [attr.aria-label]=\"activeEditableFieldLabel\"\n (click)=\"openSelectedFieldEditor()\"\n >\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n </button>\n }\n </div>\n }\n\n @if ((showClearButton && activeFiltersCount > 0) || showSearchButton) {\n <div class=\"action-cluster action-cluster--query\">\n @if (showClearButton && activeFiltersCount > 0) {\n <button\n mat-icon-button\n class=\"cluster-btn\"\n [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\"\n type=\"button\"\n data-testid=\"filter-clear-trigger\"\n (click)=\"onClear()\"\n [attr.aria-label]=\"i18nLabels.clear\"\n [matTooltip]=\"i18nLabels.clear\"\n matTooltipPosition=\"below\"\n >\n <mat-icon [praxisIcon]=\"'filter_alt_off'\"></mat-icon>\n </button>\n }\n @if (showSearchButton) {\n <button\n mat-icon-button\n class=\"cluster-btn\"\n [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\"\n type=\"submit\"\n [attr.aria-label]=\"i18nLabels.apply\"\n [matTooltip]=\"i18nLabels.apply\"\n matTooltipPosition=\"below\"\n >\n <mat-icon [praxisIcon]=\"'search'\"></mat-icon>\n </button>\n }\n </div>\n }\n\n <span class=\"sr-only\" aria-live=\"polite\">{{ advancedOpening ? (i18nLabels.advancedOpening || 'Abrindo filtro avan\u00E7ado...') : getAddAriaLabel() }}</span>\n</div>\n\n@if (compactSelectedMetas.length || compactAlwaysVisibleMetas.length) {\n <div class=\"compact-fields\">\n @if (compactSelectedMetas.length) {\n <ng-container dynamicFieldLoader [fields]=\"compactSelectedMetas\"\n [formGroup]=\"alwaysForm\" (componentsCreated)=\"onSelectedComponents($event)\"></ng-container>\n }\n @if (compactAlwaysVisibleMetas.length) {\n <ng-container dynamicFieldLoader [fields]=\"compactAlwaysVisibleMetas\"\n [formGroup]=\"alwaysForm\" (componentsCreated)=\"onAlwaysComponents($event)\"></ng-container>\n }\n </div>\n}\n\n@if (gridSelectedMetas.length || gridAlwaysVisibleMetas.length) {\n <div class=\"fields-grid\">\n @if (gridSelectedMetas.length) {\n <ng-container dynamicFieldLoader [fields]=\"gridSelectedMetas\" [formGroup]=\"alwaysForm\"\n (componentsCreated)=\"onSelectedComponents($event)\"></ng-container>\n }\n @if (gridAlwaysVisibleMetas.length) {\n <ng-container dynamicFieldLoader [fields]=\"gridAlwaysVisibleMetas\"\n [formGroup]=\"alwaysForm\" (componentsCreated)=\"onAlwaysComponents($event)\"></ng-container>\n }\n </div>\n}\n\n<span class=\"sr-only\" aria-live=\"polite\">\n {{ activeFiltersCount ? (activeFiltersCount + ' filtros ativos') : '' }}\n</span>\n<button type=\"submit\" class=\"hidden-submit\" aria-hidden=\"true\" tabindex=\"-1\"></button>\n</form>\n\n@if (displayedTags.length) {\n <div\n class=\"praxis-filter-tags\"\n [class.outlined]=\"tagVariant==='outlined'\"\n [class.tag-color-basic]=\"tagColor === 'basic'\"\n [class.tag-color-primary]=\"tagColor === 'primary'\"\n [class.tag-color-accent]=\"tagColor === 'accent'\"\n [class.tag-color-warn]=\"tagColor === 'warn'\"\n >\n <mat-chip-set [attr.aria-label]=\"i18nLabels.shortcutsLabel || 'Atalhos'\">\n @for (tag of displayedTags; track trackById($index, tag)) {\n <mat-chip [class.active]=\"isActiveTag(tag)\"\n [color]=\"tagVariant === 'outlined' || tagColor === 'basic' ? null : tagColor\"\n [highlighted]=\"tagVariant === 'filled' && tagColor !== 'basic'\" (click)=\"applyTag(tag)\"\n (keydown.enter)=\"applyTag(tag)\" (keydown.space)=\"applyTag(tag)\" tabindex=\"0\" role=\"button\"\n [attr.aria-pressed]=\"isActiveTag(tag)\">\n @if (editingTagId !== tag.id) {\n @if (isActiveTag(tag)) {\n <span class=\"chip-leading\">\n <mat-icon class=\"leading-check\">check</mat-icon>\n </span>\n }\n <span class=\"chip-label\">{{ tag.label }}</span>\n @if (isUserTag(tag)) {\n <span class=\"chip-trailing\">\n <button mat-icon-button [color]=\"tagButtonColor === 'basic' ? null : tagButtonColor\"\n [matMenuTriggerFor]=\"tagMenu\" (click)=\"$event.stopPropagation()\" [attr.aria-label]=\"getTagActionsAriaLabel(tag)\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #tagMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item (click)=\"startEditTag(tag, $event)\">\n <mat-icon>edit</mat-icon>\n <span>{{ i18nLabels.renameShortcut }}</span>\n </button>\n <button mat-menu-item (click)=\"deleteTag(tag)\">\n <mat-icon>delete</mat-icon>\n <span>{{ i18nLabels.removeShortcut }}</span>\n </button>\n </mat-menu>\n </span>\n } @else {\n <span class=\"chip-readonly\" [matTooltip]=\"i18nLabels.readonlyShortcut\">\n <mat-icon>lock</mat-icon>\n </span>\n }\n } @else {\n <input matInput class=\"chip-editor\" [formControl]=\"editingTagLabel\" autofocus\n [matTooltip]=\"'Enter para salvar, Esc para cancelar'\" matTooltipPosition=\"below\"\n (keydown.enter)=\"commitEditTag(tag, $event)\" (keydown.escape)=\"cancelEditTag($event)\"\n (blur)=\"commitEditTag(tag, $event)\" (click)=\"$event.stopPropagation()\" />\n }\n </mat-chip>\n }\n </mat-chip-set>\n </div>\n}\n", styles: ["@charset \"UTF-8\";:root{--pfx-filter-h: 42px;--pfx-filter-align-offset: 2px;--pfx-gap-x: 12px;--pfx-gap-y: 8px;--pfx-always-max-desktop: 380px;--pfx-slider-span-desktop: 2;--pfx-advanced-pad-x: 24px;--pfx-field-min: 280px;--pfx-overlay-margin-y: 16px;--pfx-overlay-margin-x: 16px}:host-context(.theme-light){--pfx-surface-border: var(--md-sys-color-outline)}:host{--border-color: var(--md-sys-color-outline-variant);--border-color-hover: var(--md-sys-color-outline);--pfx-overlay-surface: var(--md-sys-color-surface-container);--pfx-overlay-surface-elev: var(--md-sys-color-surface-container-high);--pfx-overlay-surface-variant: var(--md-sys-color-surface-variant);--pfx-overlay-on-surface: var(--md-sys-color-on-surface);--pfx-overlay-on-surface-variant: var(--md-sys-color-on-surface-variant);display:block;width:100%;min-width:0;flex:1 1 auto}.schema-error-banner{display:flex;align-items:center;gap:8px;margin:0 0 8px;padding:8px 10px;border-radius:10px;border:1px solid color-mix(in srgb,var(--md-sys-color-error) 50%,transparent);background:color-mix(in srgb,var(--md-sys-color-error-container) 85%,transparent);color:var(--md-sys-color-on-error-container)}.schema-error-message{min-width:0;flex:1 1 auto;font-size:.8125rem}:host ::ng-deep .schema-error-retry.mat-mdc-outlined-button{--mdc-outlined-button-outline-color: color-mix( in srgb, var(--md-sys-color-error) 55%, var(--md-sys-color-outline) )}.praxis-filter-bar{display:grid;width:100%;grid-template-columns:minmax(0,1fr) auto;column-gap:6px;row-gap:6px;align-items:center}.inline-actions .actions-anchor{width:0;height:0;overflow:hidden}.inline-actions{grid-column:2;grid-row:1;flex:0 0 auto;display:flex;gap:6px;justify-self:end;align-self:center;width:fit-content;white-space:nowrap;height:var(--pfx-filter-h);align-items:center;padding:0 2px}.action-cluster{flex:0 0 auto;display:inline-flex;align-items:center;gap:2px;min-height:36px;padding:2px;border-radius:999px;border:1px solid var(--pfx-surface-border, var(--md-sys-color-outline-variant));background:var(--md-sys-color-surface-container-highest)}.action-cluster--manage{position:relative;border-color:color-mix(in srgb,var(--md-sys-color-primary) 35%,var(--md-sys-color-outline-variant));background:var(--md-sys-color-surface-container-high)}:host ::ng-deep .action-cluster .mat-mdc-icon-button,:host ::ng-deep .action-cluster .cluster-btn.mat-mdc-icon-button{width:32px;height:32px;padding:0;display:inline-grid;place-items:center;--mat-icon-button-state-layer-size: 32px}.action-cluster .cluster-btn.is-opening{pointer-events:none}.action-cluster .cluster-btn.is-disabled{color:color-mix(in srgb,var(--md-sys-color-on-surface) 38%,transparent);cursor:default;opacity:.56}.action-cluster .cluster-btn-spinner{width:18px!important;height:18px!important;display:block;grid-area:1/1;--mdc-circular-progress-active-indicator-color: currentColor}.inline-actions.actions-outlined button.mat-mdc-icon-button{border:1px solid var(--pfx-surface-border, var(--md-sys-color-outline-variant));border-radius:50%}.inline-actions.actions-outlined .action-cluster button.mat-mdc-icon-button{border-color:transparent}.separator-before{position:relative;margin-left:10px}.separator-before:before{content:\"\";position:absolute;left:-7px;top:50%;width:1px;height:18px;transform:translateY(-50%);background:color-mix(in srgb,var(--md-sys-color-outline) 72%,transparent)}.inline-actions mat-icon{width:20px;height:20px;font-size:20px}.fields-grid{grid-column:1;grid-row:1;display:grid;grid-template-columns:repeat(auto-fit,minmax(var(--pfx-always-min, 220px),1fr));grid-auto-flow:row dense;gap:6px}.compact-fields{grid-column:1;grid-row:1;display:flex;flex-wrap:wrap;justify-content:flex-start;align-content:center;align-items:center;gap:6px;min-width:0;min-height:var(--pfx-filter-h)}:host ::ng-deep .compact-fields .pfx-field-shell,:host ::ng-deep .compact-fields .pfx-field-shell-wrapper,:host ::ng-deep .compact-fields .pfx-field-shell-host{--pfx-field-shell-width: fit-content;--pfx-field-shell-field-width: auto;width:fit-content!important;max-width:100%;min-width:0;flex:0 1 auto!important}:host ::ng-deep .compact-fields>.pfx-field-shell,:host ::ng-deep .compact-fields>praxis-field-shell{flex:0 1 auto!important;width:fit-content!important;max-width:100%;min-width:0}:host ::ng-deep .compact-fields .pfx-field-shell .mat-mdc-form-field{width:auto!important;max-width:100%;margin-bottom:0}:host ::ng-deep .compact-fields .pfx-field-shell[data-control-type=inlineTime] .mat-mdc-form-field.pdx-inline-time{width:var(--pdx-inline-time-field-w, auto)!important;inline-size:var(--pdx-inline-time-field-w, auto)!important;max-width:min(var(--pdx-inline-time-max-w, 280px),100vw - 48px)!important}:host ::ng-deep .compact-fields .pfx-field-shell[data-control-type=inlineDateRange] .mat-mdc-form-field{width:var(--pdx-inline-date-range-shell-width, auto)!important;max-width:100%!important}.praxis-filter-bar.has-compact .compact-fields{grid-column:1;grid-row:1}.praxis-filter-bar.has-compact .fields-grid{grid-column:1/-1;grid-row:2}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=slider] mat-slider,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=range-slider] mat-slider,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeSlider] mat-slider{width:100%;display:block}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=slider] .pdx-slider-wrapper,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=range-slider] .pdx-slider-wrapper,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeSlider] .pdx-slider-wrapper{padding-top:2px}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=range-slider] .pdx-range-slider-container,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeSlider] .pdx-range-slider-container{padding:2px 0 0}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=range-slider] .pdx-slider-label,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeSlider] .pdx-slider-label{margin-bottom:4px;line-height:1.15}:host ::ng-deep .fields-grid .mat-mdc-text-field-wrapper.mdc-text-field--outlined{min-height:var(--pfx-filter-h);align-items:center}:host ::ng-deep .fields-grid .mat-mdc-form-field-infix{min-height:var(--pfx-filter-h)}:host ::ng-deep .fields-grid .mat-mdc-select-trigger{height:var(--pfx-filter-h);align-items:center}:host ::ng-deep .fields-grid .mat-mdc-form-field{width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineSelect]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineSelect] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineSearchableSelect]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineSearchableSelect] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineMultiSelect]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineMultiSelect] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineInput]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineInput] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlinePhone]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlinePhone] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineToggle]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineToggle] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineRange]{justify-self:start}:host ::ng-deep .compact-fields .pfx-field-shell[data-control-type=inlineRange]{max-width:min(340px,100%)}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineDate]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineDate] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineDateRange]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineDateRange] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .mat-mdc-form-field-subscript-wrapper{min-height:0;margin-top:0}:host ::ng-deep .fields-grid .mat-mdc-form-field{margin-bottom:0}.praxis-filter-bar.has-compact{--pfx-filter-tag-color: var(--md-sys-color-primary-container);--pfx-filter-tag-on-color: var(--md-sys-color-on-primary-container);--pfx-filter-tag-outline-color: var(--md-sys-color-primary);--pdx-inline-control-height: var(--pfx-filter-inline-control-height, 42px);--pdx-inline-control-height-mobile: var(--pfx-filter-inline-control-height-mobile, 40px);--pdx-inline-control-padding-x: var(--pfx-filter-inline-control-padding-x, 12px);--pdx-inline-control-padding-x-mobile: var(--pfx-filter-inline-control-padding-x-mobile, 12px);--pdx-inline-clear-size: var(--pfx-filter-inline-clear-size, 22px);--pdx-inline-chip-radius: var(--pfx-filter-inline-chip-radius, var(--md-sys-shape-corner-full, 999px));--pdx-inline-chip-active-bg: var(--pfx-filter-tag-color);--pdx-inline-chip-active-fg: var(--pfx-filter-tag-on-color);--pdx-inline-chip-active-clear-color: var(--pfx-filter-tag-on-color);--pdx-inline-field-focus-outline: var(--pfx-filter-tag-outline-color)}.praxis-filter-bar.has-compact.tag-color-accent{--pfx-filter-tag-color: var(--md-sys-color-tertiary-container, var(--md-sys-color-secondary-container));--pfx-filter-tag-on-color: var(--md-sys-color-on-tertiary-container, var(--md-sys-color-on-secondary-container));--pfx-filter-tag-outline-color: var(--md-sys-color-tertiary, var(--md-sys-color-secondary))}.praxis-filter-bar.has-compact.tag-color-warn{--pfx-filter-tag-color: var(--md-sys-color-error-container);--pfx-filter-tag-on-color: var(--md-sys-color-on-error-container);--pfx-filter-tag-outline-color: var(--md-sys-color-error)}.praxis-filter-bar.has-compact.tag-color-basic{--pfx-filter-tag-color: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);--pfx-filter-tag-on-color: var(--md-sys-color-on-surface);--pfx-filter-tag-outline-color: var(--md-sys-color-outline-variant)}:host ::ng-deep .praxis-filter-bar.has-compact{--pfx-filter-inline-chip-padding-x: var(--pdx-inline-control-padding-x);--pfx-filter-inline-icon-gap: 4px}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-text-field-wrapper.mdc-text-field--outlined{padding-inline:var(--pfx-filter-inline-chip-padding-x)!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-form-field-icon-prefix{align-items:center;display:inline-flex;flex:0 0 auto;margin-right:var(--pfx-filter-inline-icon-gap)!important;padding:0!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-form-field-icon-suffix{align-items:center;display:inline-flex;flex:0 0 auto;gap:var(--pfx-filter-inline-icon-gap)!important;margin-left:var(--pfx-filter-inline-icon-gap)!important;padding:0!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-form-field-icon-prefix>.mat-icon,:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-form-field-icon-suffix>.mat-icon{flex:0 0 16px!important;font-size:16px!important;height:16px!important;line-height:16px!important;margin:0!important;padding:0!important;width:16px!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-form-field-infix{padding-inline:0!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select) .pdx-chip-trigger{gap:var(--pfx-filter-inline-icon-gap)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-chip-trigger.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-currency-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .mat-mdc-form-field.pdx-has-value .mat-mdc-text-field-wrapper,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-select .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-searchable-select .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-async-select.pdx-has-selection .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-date-range.pdx-inline-date-range-has-value .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-date-range.pdx-inline-date-range-has-both .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-entity-lookup.pdx-has-selection .pdx-chip-trigger,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-multi-select.pdx-has-selection .pdx-chip-trigger,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-distance-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-score-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-relative-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-relative-period-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-rating-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-pipeline-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-sentiment-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-color-label-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-time-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-toggle-pill.is-active{--pdx-inline-currency-symbol-color: var(--pfx-filter-tag-on-color);background:var(--pfx-filter-tag-color)!important;border-color:transparent!important;color:var(--pfx-filter-tag-on-color)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-chip-trigger.is-active :where(.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-currency-range-chip.is-active :where(.mat-icon,.pdx-inline-currency-range-value,.pdx-inline-currency-range-text,.pdx-inline-currency-range-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .mat-mdc-form-field.pdx-has-value :where(input,.mat-mdc-input-element,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,.pdx-inline-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear) :where(input,.mat-mdc-input-element,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,.pdx-inline-clear,.pdx-inline-number-suffix),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled :where(.pdx-inline-select,.pdx-inline-searchable-select) .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active) :where(.mat-mdc-select-value,.mat-mdc-select-min-line,.mat-mdc-select-placeholder,.pdx-chip-trigger,.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-async-select.pdx-has-selection :where(.mat-mdc-select-value,.mat-mdc-select-min-line,.mat-mdc-select-placeholder,.pdx-chip-trigger,.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-date-range.pdx-inline-date-range-has-value :where(.mat-date-range-input-inner,.mat-date-range-input-separator,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,input),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-date-range.pdx-inline-date-range-has-both :where(.mat-date-range-input-inner,.mat-date-range-input-separator,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,input),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled :where(.pdx-inline-entity-lookup.pdx-has-selection,.pdx-inline-multi-select.pdx-has-selection) .pdx-chip-trigger :where(.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled :where(.pdx-inline-range-chip.is-active,.pdx-inline-distance-chip.is-active,.pdx-inline-score-chip.is-active,.pdx-inline-relative-chip.is-active,.pdx-inline-relative-period-chip.is-active,.pdx-inline-rating-chip.is-active,.pdx-inline-pipeline-chip.is-active,.pdx-inline-sentiment-chip.is-active,.pdx-inline-color-label-chip.is-active) :where(.mat-icon,button,span),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-time-range-chip.is-active :where(.pdx-inline-time-range-icon,.pdx-inline-time-range-text,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-toggle-pill.is-active :where(.pdx-inline-toggle-label,.mat-icon){color:var(--pfx-filter-tag-on-color)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-chip-trigger.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-currency-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .mat-mdc-form-field.pdx-has-value .mat-mdc-text-field-wrapper,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-select .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-searchable-select .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-async-select.pdx-has-selection .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-date-range.pdx-inline-date-range-has-value .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-date-range.pdx-inline-date-range-has-both .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-entity-lookup.pdx-has-selection .pdx-chip-trigger,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-multi-select.pdx-has-selection .pdx-chip-trigger,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-distance-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-score-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-relative-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-relative-period-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-rating-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-pipeline-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-sentiment-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-color-label-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-time-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-toggle-pill.is-active{--pdx-inline-currency-symbol-color: var(--pfx-filter-tag-outline-color);background:transparent!important;border-color:var(--pfx-filter-tag-outline-color)!important;box-shadow:inset 0 0 0 1px var(--pfx-filter-tag-outline-color);color:var(--pfx-filter-tag-outline-color)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-chip-trigger.is-active :where(.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-currency-range-chip.is-active :where(.mat-icon,.pdx-inline-currency-range-value,.pdx-inline-currency-range-text,.pdx-inline-currency-range-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .mat-mdc-form-field.pdx-has-value :where(input,.mat-mdc-input-element,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,.pdx-inline-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear) :where(input,.mat-mdc-input-element,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,.pdx-inline-clear,.pdx-inline-number-suffix),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined :where(.pdx-inline-select,.pdx-inline-searchable-select) .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active) :where(.mat-mdc-select-value,.mat-mdc-select-min-line,.mat-mdc-select-placeholder,.pdx-chip-trigger,.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-async-select.pdx-has-selection :where(.mat-mdc-select-value,.mat-mdc-select-min-line,.mat-mdc-select-placeholder,.pdx-chip-trigger,.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-date-range.pdx-inline-date-range-has-value :where(.mat-date-range-input-inner,.mat-date-range-input-separator,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,input),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-date-range.pdx-inline-date-range-has-both :where(.mat-date-range-input-inner,.mat-date-range-input-separator,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,input),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined :where(.pdx-inline-entity-lookup.pdx-has-selection,.pdx-inline-multi-select.pdx-has-selection) .pdx-chip-trigger :where(.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined :where(.pdx-inline-range-chip.is-active,.pdx-inline-distance-chip.is-active,.pdx-inline-score-chip.is-active,.pdx-inline-relative-chip.is-active,.pdx-inline-relative-period-chip.is-active,.pdx-inline-rating-chip.is-active,.pdx-inline-pipeline-chip.is-active,.pdx-inline-sentiment-chip.is-active,.pdx-inline-color-label-chip.is-active) :where(.mat-icon,button,span),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-time-range-chip.is-active :where(.pdx-inline-time-range-icon,.pdx-inline-time-range-text,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-toggle-pill.is-active :where(.pdx-inline-toggle-label,.mat-icon){color:var(--pfx-filter-tag-outline-color)!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-chip-trigger.is-active,.mat-mdc-form-field.pdx-has-value,.pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear),.pdx-inline-currency-range-chip.is-active,.pdx-inline-range-chip.is-active,.pdx-inline-distance-chip.is-active,.pdx-inline-score-chip.is-active,.pdx-inline-relative-chip.is-active,.pdx-inline-relative-period-chip.is-active,.pdx-inline-rating-chip.is-active,.pdx-inline-pipeline-chip.is-active,.pdx-inline-sentiment-chip.is-active,.pdx-inline-color-label-chip.is-active,.pdx-inline-time-range-chip.is-active,.pdx-inline-toggle-pill.is-active) :where(.pdx-chip-clear,.pdx-inline-clear,.pdx-inline-currency-range-clear,.pdx-inline-range-clear,.pdx-inline-distance-clear,.pdx-inline-score-clear,.pdx-inline-relative-clear,.pdx-inline-rating-clear,.pdx-inline-pipeline-clear,.pdx-inline-sentiment-clear,.pdx-inline-color-label-clear,.pdx-inline-time-range-clear,.pdx-inline-toggle-clear){background:color-mix(in srgb,currentColor 16%,transparent)!important;border-radius:50%!important;color:inherit!important;display:inline-grid!important;flex:0 0 var(--pdx-inline-clear-size, 22px)!important;height:var(--pdx-inline-clear-size, 22px)!important;min-width:var(--pdx-inline-clear-size, 22px)!important;place-items:center!important;width:var(--pdx-inline-clear-size, 22px)!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-chip-trigger.is-active,.mat-mdc-form-field.pdx-has-value,.pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear),.pdx-inline-currency-range-chip.is-active,.pdx-inline-range-chip.is-active,.pdx-inline-distance-chip.is-active,.pdx-inline-score-chip.is-active,.pdx-inline-relative-chip.is-active,.pdx-inline-relative-period-chip.is-active,.pdx-inline-rating-chip.is-active,.pdx-inline-pipeline-chip.is-active,.pdx-inline-sentiment-chip.is-active,.pdx-inline-color-label-chip.is-active,.pdx-inline-time-range-chip.is-active,.pdx-inline-toggle-pill.is-active) :where(.pdx-chip-clear,.pdx-inline-clear,.pdx-inline-currency-range-clear,.pdx-inline-range-clear,.pdx-inline-distance-clear,.pdx-inline-score-clear,.pdx-inline-relative-clear,.pdx-inline-rating-clear,.pdx-inline-pipeline-clear,.pdx-inline-sentiment-clear,.pdx-inline-color-label-clear,.pdx-inline-time-range-clear,.pdx-inline-toggle-clear):hover{background:color-mix(in srgb,currentColor 24%,transparent)!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-chip-trigger.is-active,.mat-mdc-form-field.pdx-has-value,.pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear),.pdx-inline-currency-range-chip.is-active,.pdx-inline-range-chip.is-active,.pdx-inline-distance-chip.is-active,.pdx-inline-score-chip.is-active,.pdx-inline-relative-chip.is-active,.pdx-inline-relative-period-chip.is-active,.pdx-inline-rating-chip.is-active,.pdx-inline-pipeline-chip.is-active,.pdx-inline-sentiment-chip.is-active,.pdx-inline-color-label-chip.is-active,.pdx-inline-time-range-chip.is-active,.pdx-inline-toggle-pill.is-active) :where(.pdx-chip-clear,.pdx-inline-clear,.pdx-inline-currency-range-clear,.pdx-inline-range-clear,.pdx-inline-distance-clear,.pdx-inline-score-clear,.pdx-inline-relative-clear,.pdx-inline-rating-clear,.pdx-inline-pipeline-clear,.pdx-inline-sentiment-clear,.pdx-inline-color-label-clear,.pdx-inline-time-range-clear,.pdx-inline-toggle-clear) .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}:host ::ng-deep .praxis-filter-bar.has-compact .mat-mdc-form-field.pdx-has-value .pdx-inline-clear .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .mat-mdc-form-field.pdx-has-value .pdx-inline-clear .mat-icon,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .mat-mdc-form-field.pdx-has-value .pdx-inline-clear .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-number .mat-mdc-text-field-wrapper:has(.pdx-inline-clear) .pdx-inline-clear .mat-icon,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-number .mat-mdc-text-field-wrapper:has(.pdx-inline-clear) .pdx-inline-clear .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-toggle-pill.is-active .pdx-inline-toggle-clear .mat-icon,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-toggle-pill.is-active .pdx-inline-toggle-clear .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-chip-trigger.is-active .pdx-chip-clear .mat-icon,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-chip-trigger.is-active .pdx-chip-clear .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}.praxis-filter-tags.outlined .mat-mdc-chip{background:transparent!important;--mat-chip-outline-width: 1px;--mat-chip-outline-color: var(--md-sys-color-outline-variant);box-shadow:inset 0 0 0 var(--mat-chip-outline-width) var(--mat-chip-outline-color)}.praxis-filter-tags.outlined.tag-color-primary .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-primary)}.praxis-filter-tags.outlined.tag-color-accent .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-tertiary)}.praxis-filter-tags.outlined.tag-color-warn .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-error)}.praxis-filter-tags.outlined mat-chip.active .mat-mdc-chip,.praxis-filter-tags.outlined .mat-mdc-chip.mat-mdc-chip-highlighted{--mat-chip-outline-width: 2px;box-shadow:inset 0 0 0 var(--mat-chip-outline-width) var(--mat-chip-outline-color)!important}.praxis-filter-tags.outlined.tag-color-basic mat-chip.active .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-primary)}.praxis-filter-tags .mat-mdc-standard-chip .mdc-evolution-chip__text-label{display:flex;align-items:center;justify-content:center;gap:4px;line-height:1.2;font-size:.875rem}.praxis-filter-tags .chip-leading,.praxis-filter-tags .chip-trailing{display:inline-flex;align-items:center}.praxis-filter-tags .leading-check{width:18px;height:18px;font-size:18px;line-height:1}.praxis-filter-tags .chip-label{position:relative;top:-6px}.praxis-filter-tags .chip-trailing .mat-mdc-icon-button{width:28px;height:28px;padding:0;display:flex;align-items:center;justify-content:center;line-height:28px}.praxis-filter-tags .mat-mdc-standard-chip{--mat-chip-container-height: 36px}.praxis-filter-advanced{display:flex;flex-direction:column;min-width:400px;max-width:90vw;min-height:260px;max-height:min(80vh,720px);margin:var(--pfx-overlay-margin-y) var(--pfx-overlay-margin-x);background-color:var(--pfx-overlay-surface)!important;background:var(--pfx-overlay-surface)!important;color:var(--pfx-overlay-on-surface);border:1px solid var(--border-color);border-radius:12px;box-shadow:var(--md-sys-elevation-level3)}.advanced-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px var(--pfx-advanced-pad-x) 10px;border-bottom:1px solid var(--border-color);background:var(--pfx-overlay-surface)}.advanced-title-block{display:flex;flex-direction:column;gap:2px}.advanced-title{font-size:1rem;font-weight:600;color:var(--pfx-overlay-on-surface)}.advanced-subtitle{font-size:.85rem;color:var(--pfx-overlay-on-surface-variant)}.advanced-close{align-self:flex-start}.praxis-filter-overlay.mobile .praxis-filter-advanced{height:100vh;max-height:100vh;margin:0;border-radius:0}:host ::ng-deep .praxis-overlay-backdrop{background:var(--md-sys-color-scrim);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}:host ::ng-deep .praxis-filter-overlay.frosted .praxis-filter-advanced{background:var(--pfx-overlay-surface-variant)!important;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-color:var(--border-color)}:host ::ng-deep .praxis-filter-overlay.frosted .advanced-header,:host ::ng-deep .praxis-filter-overlay.frosted .advanced-actions{background:var(--pfx-overlay-surface-variant)!important}.advanced-body{padding:12px var(--pfx-advanced-pad-x) 72px;overflow:auto;flex:1 1 auto;overscroll-behavior:contain}:host ::ng-deep .praxis-filter-advanced .praxis-filter-form .filter-row{display:grid!important;grid-template-columns:repeat(auto-fit,minmax(var(--pfx-field-min),1fr));gap:var(--pfx-gap-y) var(--pfx-gap-x)}:host ::ng-deep .praxis-filter-advanced .praxis-filter-form .filter-column{min-width:0}:host ::ng-deep .praxis-filter-advanced .praxis-filter-form .filter-column .mat-mdc-form-field{width:100%}.advanced-actions{position:sticky;bottom:0;z-index:2;display:flex;justify-content:flex-end;gap:8px;padding:var(--pfx-gap-y) var(--pfx-advanced-pad-x);background-color:var(--pfx-overlay-surface)!important;background:var(--pfx-overlay-surface)!important;border-top:1px solid var(--border-color);box-shadow:0 -1px 0 var(--md-sys-color-outline-variant)}.advanced-actions .mat-mdc-button-base{height:40px}.advanced-actions .mat-mdc-raised-button.mat-primary{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}:host ::ng-deep .praxis-filter-advanced .mat-mdc-text-field-wrapper.mdc-text-field--outlined{--mdc-outlined-text-field-outline-color: var(--border-color);--mdc-outlined-text-field-hover-outline-color: var(--border-color-hover);--mdc-outlined-text-field-focus-outline-color: var(--md-sys-color-primary);--mdc-outlined-text-field-label-text-color: var(--pfx-overlay-on-surface-variant);--mdc-outlined-text-field-input-text-color: var(--pfx-overlay-on-surface);--mdc-outlined-text-field-container-color: var(--pfx-overlay-surface)}:host ::ng-deep .praxis-filter-advanced .mat-mdc-select-trigger,:host ::ng-deep .praxis-filter-advanced .mat-mdc-form-field-subscript-wrapper,:host ::ng-deep .praxis-filter-advanced .mat-mdc-form-field-infix{color:var(--pfx-overlay-on-surface)}@media(min-width:600px){.fields-grid{gap:6px 8px}:host ::ng-deep .praxis-filter-advanced .praxis-filter-form .filter-row{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:640px){.praxis-filter-bar.has-compact{grid-template-columns:minmax(0,1fr);align-items:start}.praxis-filter-bar.has-compact .compact-fields{grid-column:1;grid-row:1;display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));align-items:start;justify-items:stretch;width:100%}.praxis-filter-bar.has-compact .inline-actions{grid-column:1;grid-row:2;justify-self:start;width:100%;height:auto}.praxis-filter-bar.has-compact .inline-actions .action-cluster{max-width:100%}:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields>.pfx-field-shell,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields>praxis-field-shell,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell-wrapper,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell-host{--pfx-field-shell-width: auto;--pfx-field-shell-field-width: auto;width:100%!important;max-width:100%!important}:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .mat-mdc-form-field,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .mat-mdc-text-field-wrapper,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-chip-trigger,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-range-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-currency-range-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-distance-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-score-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-relative-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-relative-period-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-rating-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-pipeline-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-sentiment-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-color-label-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-time-range-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-toggle-pill{width:100%!important;max-width:100%!important}:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields :where(.pdx-chip-label,.pdx-chip-trigger,.pdx-inline-range-text,.pdx-inline-currency-range-text,.pdx-inline-distance-text,.pdx-inline-score-text,.pdx-inline-relative-text,.pdx-inline-relative-period-text,.pdx-inline-rating-text,.pdx-inline-pipeline-text,.pdx-inline-sentiment-text,.pdx-inline-color-label-text,.pdx-inline-time-range-text,.pdx-inline-toggle-label){min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell[data-control-type=inlineTime],:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell[data-control-type=inlineTime] .pfx-field-shell-wrapper,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell[data-control-type=inlineTime] .pfx-field-shell-host{--pfx-field-shell-width: fit-content;--pfx-field-shell-field-width: var(--pdx-inline-time-field-w, auto);justify-self:start;width:fit-content!important;max-width:100%!important}:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell[data-control-type=inlineTime] .mat-mdc-form-field.pdx-inline-time{width:var(--pdx-inline-time-field-w, auto)!important;inline-size:var(--pdx-inline-time-field-w, auto)!important;max-width:min(var(--pdx-inline-time-max-w, 280px),100vw - 48px)!important}}@media(min-width:960px){.fields-grid{gap:6px 10px}}@media(min-width:1200px){.fields-grid{grid-template-columns:repeat(auto-fit,minmax(var(--pfx-always-min, 220px),var(--pfx-always-max-desktop, 380px)));justify-content:start;align-content:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=slider],:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=range-slider],:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeSlider],:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeslider]{grid-column:span var(--pfx-slider-span-desktop, 2)}}.inline-toggles{display:flex;align-items:center;gap:8px;margin:0 4px 0 6px}:host ::ng-deep .inline-actions .mat-mdc-slide-toggle{height:var(--pfx-filter-h);display:flex;align-items:center}:host ::ng-deep .inline-actions .mat-mdc-slide-toggle .mdc-form-field{align-items:center}::ng-deep .praxis-filter-overlay .praxis-filter-advanced .praxis-filter-form .filter-row{display:grid!important;gap:var(--pfx-gap-y, 1px) var(--pfx-gap-x, 6px)}@media(min-width:600px){::ng-deep .praxis-filter-overlay .praxis-filter-advanced .praxis-filter-form .filter-row{grid-template-columns:repeat(2,minmax(0,1fr))}}.sr-only{position:absolute!important;width:1px!important;height:1px!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important}.hidden-submit{position:absolute!important;width:0!important;height:0!important;padding:0!important;margin:0!important;border:0!important;opacity:0!important;pointer-events:none!important;clip:rect(0 0 0 0)!important;clip-path:inset(50%)!important;overflow:hidden!important}:host ::ng-deep .inline-actions [matBadge] .mat-badge-content{top:-6px;right:-6px;min-width:16px;height:16px;padding:0 4px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;font-size:10px;font-weight:700;line-height:16px;letter-spacing:0;text-indent:0;color:var(--md-sys-color-on-primary, #fff)}:host ::ng-deep .inline-actions [matBadge][matbadgecolor=warn] .mat-badge-content,:host ::ng-deep .inline-actions [matBadge].mat-badge-warn .mat-badge-content{color:var(--md-sys-color-on-error, #fff)}.praxis-filter-bar :where(.mat-mdc-slide-toggle .mdc-switch__icons){display:none!important}.praxis-filter-bar{--mdc-switch-unselected-icon-size: 0px;--mdc-switch-selected-icon-size: 0px;--pfx-always-min: 220px}.praxis-filter-card{display:flex;flex-direction:column;gap:6px;padding:8px 12px;border-radius:12px;border:1px solid var(--pfx-surface-border, var(--md-sys-color-outline-variant));background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface)}.add-manager{display:flex;flex-direction:column;width:min(400px,100vw - 24px);max-height:min(70vh,560px);overflow:hidden;border:1px solid var(--pfx-surface-border, var(--md-sys-color-outline-variant));border-radius:var(--pfx-overlay-radius, 16px);background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface);box-shadow:var(--md-sys-elevation-level3)}.add-manager__header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:16px 16px 8px 20px}.add-manager__header h2{margin:0;font:var(--md-sys-typescale-title-medium)}.add-manager__header p{margin:4px 0 0;color:var(--md-sys-color-on-surface-variant);font:var(--md-sys-typescale-body-small)}.add-manager__search{padding:8px 20px}.add-manager__search mat-form-field{width:100%}.add-manager__summary{padding:0 20px 8px;color:var(--md-sys-color-on-surface-variant);font:var(--md-sys-typescale-label-medium)}.add-manager__bulk{padding:8px 20px;border-block:1px solid var(--pfx-surface-border, var(--md-sys-color-outline-variant))}.add-manager__list{display:flex;flex-direction:column;min-height:80px;overflow:auto;padding:8px 12px 12px}.add-manager__item{min-height:48px;padding-inline:8px;border-radius:var(--pfx-control-radius, 8px)}.add-manager__item:hover{background:var(--md-sys-color-surface-container-high)}.add-manager__empty{display:flex;align-items:center;justify-content:center;gap:8px;min-height:96px;padding:16px;color:var(--md-sys-color-on-surface-variant);text-align:center}.add-manager__footer{display:flex;justify-content:flex-end;gap:8px;padding:12px 16px;border-top:1px solid var(--pfx-surface-border, var(--md-sys-color-outline-variant));background:var(--md-sys-color-surface-container-highest)}.add-manager__notice{display:flex;align-items:flex-start;gap:8px;padding:10px 16px;font:var(--md-sys-typescale-body-small)}.add-manager__notice mat-icon{flex:0 0 auto}.add-manager__notice--warning{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container)}.add-manager__notice--conflict{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}@media(max-width:600px){.add-manager{width:calc(100vw - 16px);max-height:min(78dvh,640px);border-radius:var(--pfx-overlay-radius, 16px)}.add-manager__header,.add-manager__search{padding-inline:16px}}.inline-actions .add-trigger{display:inline-flex;align-items:center;gap:6px;height:32px;width:100%;max-width:100%;min-width:0;padding:0 10px;border-radius:0;border:0;background:transparent;overflow:visible}.inline-actions .add-trigger--icon{justify-content:center;width:32px;min-width:32px;padding:0}:host ::ng-deep .inline-actions .add-trigger mat-icon{width:18px;height:18px;font-size:18px;flex:0 0 auto}.inline-actions .add-trigger-label{display:inline-block;flex:1 1 auto;min-width:0;max-width:100%;text-align:left;direction:ltr;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.82rem;line-height:1}:host ::ng-deep .action-cluster--manage .mat-mdc-select{flex:0 0 auto;width:180px;min-width:0;max-width:180px}:host ::ng-deep .action-cluster--manage .cluster-select--hidden.mat-mdc-select{position:absolute;width:1px;min-width:1px;max-width:1px;height:1px;opacity:0;pointer-events:none;overflow:hidden}:host ::ng-deep .action-cluster--manage .mat-mdc-select-trigger{min-height:32px;padding:0}:host ::ng-deep .action-cluster--manage .mat-mdc-select-value,:host ::ng-deep .action-cluster--manage .mat-mdc-select-value-text,:host ::ng-deep .action-cluster--manage .mat-mdc-select-min-line{width:auto;min-width:0;max-width:100%;display:inline-flex;align-items:center;justify-content:flex-start;overflow:visible}.praxis-filter-card .summary-header{display:flex;align-items:center;gap:10px}.praxis-filter-card .summary-avatar{width:32px;height:32px;border-radius:50%;object-fit:cover}.praxis-filter-card .summary-title{font-weight:600}.praxis-filter-card .summary-subtitle{opacity:.8;font-size:.875rem}.praxis-filter-card .summary-badges{display:flex;flex-wrap:wrap;gap:6px}.praxis-filter-card .summary-badges span{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;background:var(--md-sys-color-primary-container);border:1px solid var(--md-sys-color-outline-variant);color:var(--md-sys-color-on-primary-container);font-size:12px}.praxis-filter-card .card-actions{display:flex;gap:8px}:host ::ng-deep .inline-actions .mat-mdc-select-arrow-wrapper{display:none}.inline-actions .add-filter-btn{height:36px;border-radius:18px;padding:0 16px 0 12px}.inline-actions .add-filter-btn mat-icon{margin-right:8px;margin-left:-4px}\n"] }]
38701
+ }, template: "@if (saving) {\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n}\n@if (schemaError) {\n <div class=\"schema-error-banner\" role=\"alert\" aria-live=\"polite\">\n <mat-icon [praxisIcon]=\"'error_outline'\" aria-hidden=\"true\"></mat-icon>\n <span class=\"schema-error-message\">{{ i18nLabels.errorLoadingFilters || 'Erro ao carregar filtros.' }}</span>\n <button\n mat-stroked-button\n class=\"schema-error-retry\"\n type=\"button\"\n (click)=\"retrySchemaLoad()\"\n [attr.aria-label]=\"i18nLabels.retry || 'Tentar novamente'\"\n >\n {{ i18nLabels.retry || 'Tentar novamente' }}\n </button>\n </div>\n}\n\n<form class=\"praxis-filter-bar\" [class.is-open]=\"advancedOpen\"\n [class.has-compact]=\"compactSelectedMetas.length || compactAlwaysVisibleMetas.length\"\n [class.tag-variant-filled]=\"tagVariant === 'filled'\"\n [class.tag-variant-outlined]=\"tagVariant === 'outlined'\"\n [class.tag-color-basic]=\"tagColor === 'basic'\"\n [class.tag-color-primary]=\"tagColor === 'primary'\"\n [class.tag-color-accent]=\"tagColor === 'accent'\"\n [class.tag-color-warn]=\"tagColor === 'warn'\"\n (click)=\"onFieldInteraction($event)\"\n (focusin)=\"onFieldInteraction($event)\"\n (change)=\"$event.stopPropagation()\"\n (submit)=\"onSubmit(); $event.preventDefault(); $event.stopPropagation()\">\n <div class=\"inline-actions\" [class.actions-outlined]=\"actionsVariant==='outlined'\">\n <div class=\"actions-anchor\" #anchorRef=\"cdkOverlayOrigin\" cdkOverlayOrigin></div>\n @if (toggleMetas.length) {\n <div class=\"inline-toggles\">\n <ng-container dynamicFieldLoader [fields]=\"toggleMetas\" [formGroup]=\"alwaysForm\"\n (componentsCreated)=\"onToggleComponents($event)\"></ng-container>\n </div>\n }\n\n @if (showAdvancedButton || showAddButton || showFilterSettings || isFieldAuthoringEnabled()) {\n <div class=\"action-cluster action-cluster--manage\">\n @if (showAdvancedButton) {\n <button #advancedButton mat-icon-button class=\"cluster-btn\"\n [class.is-opening]=\"advancedOpening\" [class.is-disabled]=\"!hasAdvancedFields()\"\n [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\" type=\"button\"\n [matBadge]=\"activeFiltersCount\" [matBadgeHidden]=\"!activeFiltersCount || !hasAdvancedFields()\" matBadgeSize=\"small\"\n matBadgeColor=\"primary\" [matBadgeOverlap]=\"false\" (click)=\"toggleAdvanced()\"\n [attr.aria-label]=\"getAdvancedAriaLabel()\" [attr.aria-expanded]=\"advancedOpen\"\n [attr.aria-disabled]=\"!hasAdvancedFields()\"\n [attr.aria-busy]=\"advancedOpening ? 'true' : null\"\n [matTooltip]=\"getAdvancedTooltip()\"\n matTooltipPosition=\"below\"\n [attr.aria-controls]=\"advancedPanelId\">\n @if (advancedOpening) {\n <mat-progress-spinner\n class=\"cluster-btn-spinner\"\n mode=\"indeterminate\"\n diameter=\"18\"\n strokeWidth=\"3\"\n aria-hidden=\"true\"\n ></mat-progress-spinner>\n } @else {\n <mat-icon [praxisIcon]=\"'filter_list'\"></mat-icon>\n }\n </button>\n }\n @if (showAddButton) {\n <button #addManagerOrigin=\"cdkOverlayOrigin\" cdkOverlayOrigin mat-icon-button class=\"cluster-btn\"\n [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\"\n type=\"button\" [attr.aria-label]=\"getAddAriaLabel()\" [matTooltip]=\"getAddTooltip()\"\n matTooltipPosition=\"below\" [class.is-disabled]=\"!hasAddableFields()\"\n [attr.aria-disabled]=\"!hasAddableFields()\" [attr.aria-expanded]=\"addManagerOpen\"\n aria-haspopup=\"dialog\" [attr.aria-controls]=\"addManagerOpen ? addManagerTitleId : null\"\n (click)=\"toggleAddManager()\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n </button>\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"addManagerOrigin\"\n [cdkConnectedOverlayOpen]=\"addManagerOpen\" [cdkConnectedOverlayPositions]=\"addOverlayPositions\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayHasBackdrop]=\"true\" cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"closeAddManager()\" (detach)=\"closeAddManager()\"\n (overlayKeydown)=\"$event.key === 'Escape' && closeAddManager()\">\n <section class=\"add-manager\" role=\"dialog\" [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"addManagerTitleId\" [attr.aria-describedby]=\"addManagerDescriptionId\"\n cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <header class=\"add-manager__header\">\n <div>\n <h2 [id]=\"addManagerTitleId\">{{ i18nLabels.manageFieldsTitle || 'Gerenciar campos de filtro' }}</h2>\n <p [id]=\"addManagerDescriptionId\">{{ i18nLabels.manageFieldsDescription || 'Escolha os campos exibidos na barra de filtros.' }}</p>\n </div>\n <button mat-icon-button type=\"button\" (click)=\"closeAddManager()\"\n [attr.aria-label]=\"i18nLabels.close || 'Fechar'\">\n <mat-icon [praxisIcon]=\"'close'\" aria-hidden=\"true\"></mat-icon>\n </button>\n </header>\n <div class=\"add-manager__search\">\n <div class=\"add-manager__search-field\">\n <mat-icon class=\"add-manager__search-icon\" [praxisIcon]=\"'search'\" aria-hidden=\"true\"></mat-icon>\n <input #addSearchInput cdkFocusInitial type=\"search\" [value]=\"addQuery\"\n [placeholder]=\"i18nLabels.filtersSearch || i18nLabels.searchPlaceholder\"\n [attr.aria-label]=\"i18nLabels.filtersSearch || i18nLabels.searchPlaceholder\"\n (input)=\"onAddQuery(($any($event.target)).value)\" />\n @if (addQuery) {\n <button mat-icon-button type=\"button\" class=\"add-manager__clear-search\"\n (click)=\"onAddQuery(''); addSearchInput.focus()\"\n [attr.aria-label]=\"i18nLabels.clearSearch || 'Limpar busca'\">\n <mat-icon [praxisIcon]=\"'close'\" aria-hidden=\"true\"></mat-icon>\n </button>\n }\n </div>\n </div>\n <div class=\"add-manager__bulk\">\n <mat-checkbox [checked]=\"isAllSelected()\" [indeterminate]=\"isSomeSelected() && !isAllSelected()\"\n [disabled]=\"!addItems.length || addManagerConflict\"\n (change)=\"toggleSelectAll()\">\n {{ i18nLabels.selectAllResults || i18nLabels.selectAll || 'Selecionar todos os resultados' }}\n </mat-checkbox>\n </div>\n <div class=\"add-manager__list\" role=\"group\" [attr.aria-label]=\"i18nLabels.manageFieldsTitle || 'Gerenciar campos de filtro'\">\n @if (getAddManagerSelectedItems().length) {\n <section class=\"add-manager__section add-manager__section--selected\"\n [attr.aria-label]=\"i18nLabels.selectedFieldsSectionTitle || 'Campos exibidos'\">\n <h3 class=\"add-manager__section-title\">\n {{ i18nLabels.selectedFieldsSectionTitle || 'Campos exibidos' }}\n <span>{{ getAddManagerVisibleSelectedFieldsSummary() }}</span>\n </h3>\n @for (it of getAddManagerSelectedItems(); track trackById($index, it)) {\n <mat-checkbox class=\"add-manager__item\" [attr.data-field-id]=\"it.id\" [checked]=\"true\"\n [matTooltip]=\"it.description || ''\" [matTooltipDisabled]=\"!it.description\"\n matTooltipPosition=\"above\" [attr.aria-description]=\"it.description || null\"\n [class.add-manager__item--added]=\"isAddManagerItemInMotion(it.id, 'added')\"\n [disabled]=\"addManagerConflict\"\n (change)=\"toggleManagedField(it.id, $event.checked)\">\n {{ it.label }}\n @if (it.description) {\n <mat-icon class=\"add-manager__item-info\" [praxisIcon]=\"'info_outline'\" aria-hidden=\"true\"></mat-icon>\n }\n </mat-checkbox>\n }\n </section>\n }\n @if (getAddManagerAvailableItems().length) {\n <section class=\"add-manager__section\"\n [attr.aria-label]=\"i18nLabels.availableFieldsSectionTitle || 'Campos dispon\u00EDveis'\">\n <h3 class=\"add-manager__section-title\">\n {{ i18nLabels.availableFieldsSectionTitle || 'Campos dispon\u00EDveis' }}\n </h3>\n @for (it of getAddManagerAvailableItems(); track trackById($index, it)) {\n <mat-checkbox class=\"add-manager__item\" [attr.data-field-id]=\"it.id\" [checked]=\"false\"\n [matTooltip]=\"it.description || ''\" [matTooltipDisabled]=\"!it.description\"\n matTooltipPosition=\"above\" [attr.aria-description]=\"it.description || null\"\n [class.add-manager__item--removed]=\"isAddManagerItemInMotion(it.id, 'removed')\"\n [disabled]=\"addManagerConflict\"\n (change)=\"toggleManagedField(it.id, $event.checked)\">\n {{ it.label }}\n @if (it.description) {\n <mat-icon class=\"add-manager__item-info\" [praxisIcon]=\"'info_outline'\" aria-hidden=\"true\"></mat-icon>\n }\n </mat-checkbox>\n }\n </section>\n }\n @if (!addItems.length) {\n <div class=\"add-manager__empty\" role=\"status\">\n <mat-icon [praxisIcon]=\"'search_off'\" aria-hidden=\"true\"></mat-icon>\n <span>{{ addQuery ? (i18nLabels.noFilterFieldsFound || 'Nenhum campo encontrado.') : (i18nLabels.addUnavailable || 'Todos os campos j\u00E1 est\u00E3o vis\u00EDveis') }}</span>\n </div>\n }\n </div>\n @if (addManagerConflict) {\n <div class=\"add-manager__notice add-manager__notice--conflict\" role=\"alert\">\n <mat-icon [praxisIcon]=\"'sync_problem'\" aria-hidden=\"true\"></mat-icon>\n <span>{{ i18nLabels.fieldSelectionConflict }}</span>\n </div>\n } @else if (getRemovedActiveFieldLabels().length) {\n <div class=\"add-manager__notice add-manager__notice--warning\" role=\"status\">\n <mat-icon [praxisIcon]=\"'warning_amber'\" aria-hidden=\"true\"></mat-icon>\n <span>{{ i18nLabels.removingActiveFields }} {{ getRemovedActiveFieldLabels().join(', ') }}</span>\n </div>\n }\n <footer class=\"add-manager__footer\">\n <button mat-button type=\"button\" (click)=\"closeAddManager()\">{{ i18nLabels.cancel }}</button>\n <button mat-flat-button color=\"primary\" type=\"button\"\n [disabled]=\"!isAddManagerDirty() || addManagerConflict\"\n (click)=\"applyAddManager()\">\n {{ i18nLabels.manageFieldsApply || 'Aplicar' }}\n @if (isAddManagerDirty()) { ({{ getAddManagerChangeCount() }}) }\n </button>\n </footer>\n </section>\n </ng-template>\n }\n @if (showFilterSettings) {\n <button mat-icon-button class=\"cluster-btn separator-before\" [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\"\n type=\"button\" (click)=\"openSettings()\" [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\" matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"getSettingsTooltip()\"\n matTooltipPosition=\"below\" [attr.aria-label]=\"getSettingsAriaLabel()\">\n <mat-icon [praxisIcon]=\"'settings'\"></mat-icon>\n </button>\n }\n @if (isFieldAuthoringEnabled() && activeEditableFieldMeta) {\n <button\n mat-icon-button\n class=\"cluster-btn\"\n [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\"\n type=\"button\"\n data-testid=\"filter-field-settings-trigger\"\n [attr.aria-label]=\"activeEditableFieldLabel\"\n (click)=\"openSelectedFieldEditor()\"\n >\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n </button>\n }\n </div>\n }\n\n @if ((showClearButton && activeFiltersCount > 0) || showSearchButton) {\n <div class=\"action-cluster action-cluster--query\">\n @if (showClearButton && activeFiltersCount > 0) {\n <button\n mat-icon-button\n class=\"cluster-btn\"\n [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\"\n type=\"button\"\n data-testid=\"filter-clear-trigger\"\n (click)=\"onClear()\"\n [attr.aria-label]=\"i18nLabels.clear\"\n [matTooltip]=\"i18nLabels.clear\"\n matTooltipPosition=\"below\"\n >\n <mat-icon [praxisIcon]=\"'filter_alt_off'\"></mat-icon>\n </button>\n }\n @if (showSearchButton) {\n <button\n mat-icon-button\n class=\"cluster-btn\"\n [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\"\n type=\"submit\"\n [attr.aria-label]=\"i18nLabels.apply\"\n [matTooltip]=\"i18nLabels.apply\"\n matTooltipPosition=\"below\"\n >\n <mat-icon [praxisIcon]=\"'search'\"></mat-icon>\n </button>\n }\n </div>\n }\n\n <span class=\"sr-only\" aria-live=\"polite\">{{ advancedOpening ? (i18nLabels.advancedOpening || 'Abrindo filtro avan\u00E7ado...') : getAddAriaLabel() }}</span>\n</div>\n\n@if (compactSelectedMetas.length || compactAlwaysVisibleMetas.length) {\n <div class=\"compact-fields\">\n @if (compactSelectedMetas.length) {\n <ng-container dynamicFieldLoader [fields]=\"compactSelectedMetas\"\n [formGroup]=\"alwaysForm\" (componentsCreated)=\"onSelectedComponents($event)\"></ng-container>\n }\n @if (compactAlwaysVisibleMetas.length) {\n <ng-container dynamicFieldLoader [fields]=\"compactAlwaysVisibleMetas\"\n [formGroup]=\"alwaysForm\" (componentsCreated)=\"onAlwaysComponents($event)\"></ng-container>\n }\n </div>\n}\n\n@if (gridSelectedMetas.length || gridAlwaysVisibleMetas.length) {\n <div class=\"fields-grid\">\n @if (gridSelectedMetas.length) {\n <ng-container dynamicFieldLoader [fields]=\"gridSelectedMetas\" [formGroup]=\"alwaysForm\"\n (componentsCreated)=\"onSelectedComponents($event)\"></ng-container>\n }\n @if (gridAlwaysVisibleMetas.length) {\n <ng-container dynamicFieldLoader [fields]=\"gridAlwaysVisibleMetas\"\n [formGroup]=\"alwaysForm\" (componentsCreated)=\"onAlwaysComponents($event)\"></ng-container>\n }\n </div>\n}\n\n<span class=\"sr-only\" aria-live=\"polite\">\n {{ activeFiltersCount ? (activeFiltersCount + ' filtros ativos') : '' }}\n</span>\n<button type=\"submit\" class=\"hidden-submit\" aria-hidden=\"true\" tabindex=\"-1\"></button>\n</form>\n\n@if (displayedTags.length) {\n <div\n class=\"praxis-filter-tags\"\n [class.outlined]=\"tagVariant==='outlined'\"\n [class.tag-color-basic]=\"tagColor === 'basic'\"\n [class.tag-color-primary]=\"tagColor === 'primary'\"\n [class.tag-color-accent]=\"tagColor === 'accent'\"\n [class.tag-color-warn]=\"tagColor === 'warn'\"\n >\n <mat-chip-set [attr.aria-label]=\"i18nLabels.shortcutsLabel || 'Atalhos'\">\n @for (tag of displayedTags; track trackById($index, tag)) {\n <mat-chip [class.active]=\"isActiveTag(tag)\"\n [color]=\"tagVariant === 'outlined' || tagColor === 'basic' ? null : tagColor\"\n [highlighted]=\"tagVariant === 'filled' && tagColor !== 'basic'\" (click)=\"applyTag(tag)\"\n (keydown.enter)=\"applyTag(tag)\" (keydown.space)=\"applyTag(tag)\" tabindex=\"0\" role=\"button\"\n [attr.aria-pressed]=\"isActiveTag(tag)\">\n @if (editingTagId !== tag.id) {\n @if (isActiveTag(tag)) {\n <span class=\"chip-leading\">\n <mat-icon class=\"leading-check\">check</mat-icon>\n </span>\n }\n <span class=\"chip-label\">{{ tag.label }}</span>\n @if (isUserTag(tag)) {\n <span class=\"chip-trailing\">\n <button mat-icon-button [color]=\"tagButtonColor === 'basic' ? null : tagButtonColor\"\n [matMenuTriggerFor]=\"tagMenu\" (click)=\"$event.stopPropagation()\" [attr.aria-label]=\"getTagActionsAriaLabel(tag)\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #tagMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item (click)=\"startEditTag(tag, $event)\">\n <mat-icon>edit</mat-icon>\n <span>{{ i18nLabels.renameShortcut }}</span>\n </button>\n <button mat-menu-item (click)=\"deleteTag(tag)\">\n <mat-icon>delete</mat-icon>\n <span>{{ i18nLabels.removeShortcut }}</span>\n </button>\n </mat-menu>\n </span>\n } @else {\n <span class=\"chip-readonly\" [matTooltip]=\"i18nLabels.readonlyShortcut\">\n <mat-icon>lock</mat-icon>\n </span>\n }\n } @else {\n <input matInput class=\"chip-editor\" [formControl]=\"editingTagLabel\" autofocus\n [matTooltip]=\"'Enter para salvar, Esc para cancelar'\" matTooltipPosition=\"below\"\n (keydown.enter)=\"commitEditTag(tag, $event)\" (keydown.escape)=\"cancelEditTag($event)\"\n (blur)=\"commitEditTag(tag, $event)\" (click)=\"$event.stopPropagation()\" />\n }\n </mat-chip>\n }\n </mat-chip-set>\n </div>\n}\n", styles: ["@charset \"UTF-8\";:root{--pfx-filter-h: 42px;--pfx-filter-align-offset: 2px;--pfx-gap-x: 12px;--pfx-gap-y: 8px;--pfx-always-max-desktop: 380px;--pfx-slider-span-desktop: 2;--pfx-advanced-pad-x: 24px;--pfx-field-min: 280px;--pfx-overlay-margin-y: 16px;--pfx-overlay-margin-x: 16px}:host-context(.theme-light){--pfx-surface-border: var(--praxis-theme-outline-strong, var(--md-sys-color-outline))}:host{--border-color: var(--praxis-theme-outline, var(--md-sys-color-outline-variant));--border-color-hover: var(--praxis-theme-outline-strong, var(--md-sys-color-outline));--pfx-overlay-surface: var(--praxis-theme-surface-raised, var(--md-sys-color-surface-container));--pfx-overlay-surface-elev: var(--praxis-theme-surface-overlay, var(--md-sys-color-surface-container-high));--pfx-overlay-surface-variant: var(--praxis-theme-surface-raised, var(--md-sys-color-surface-variant));--pfx-overlay-on-surface: var(--praxis-theme-on-surface, var(--md-sys-color-on-surface));--pfx-overlay-on-surface-variant: var(--praxis-theme-on-surface-muted, var(--md-sys-color-on-surface-variant));display:block;width:100%;min-width:0;flex:1 1 auto}.schema-error-banner{display:flex;align-items:center;gap:8px;margin:0 0 8px;padding:8px 10px;border-radius:10px;border:1px solid color-mix(in srgb,var(--md-sys-color-error) 50%,transparent);background:color-mix(in srgb,var(--md-sys-color-error-container) 85%,transparent);color:var(--md-sys-color-on-error-container)}.schema-error-message{min-width:0;flex:1 1 auto;font-size:.8125rem}:host ::ng-deep .schema-error-retry.mat-mdc-outlined-button{--mdc-outlined-button-outline-color: color-mix( in srgb, var(--md-sys-color-error) 55%, var(--md-sys-color-outline) )}.praxis-filter-bar{display:grid;width:100%;grid-template-columns:minmax(0,1fr) auto;column-gap:6px;row-gap:6px;align-items:center}.inline-actions .actions-anchor{width:0;height:0;overflow:hidden}.inline-actions{grid-column:2;grid-row:1;flex:0 0 auto;display:flex;gap:6px;justify-self:end;align-self:center;width:fit-content;white-space:nowrap;height:var(--pfx-filter-h);align-items:center;padding:0 2px}.action-cluster{flex:0 0 auto;display:inline-flex;align-items:center;gap:2px;min-height:36px;padding:2px;border-radius:999px;border:1px solid var(--pfx-surface-border, var(--md-sys-color-outline-variant));background:var(--md-sys-color-surface-container-highest)}.action-cluster--manage{position:relative;border-color:color-mix(in srgb,var(--md-sys-color-primary) 35%,var(--md-sys-color-outline-variant));background:var(--md-sys-color-surface-container-high)}:host ::ng-deep .action-cluster .mat-mdc-icon-button,:host ::ng-deep .action-cluster .cluster-btn.mat-mdc-icon-button{width:32px;height:32px;padding:0;display:inline-grid;place-items:center;--mat-icon-button-state-layer-size: 32px}.action-cluster .cluster-btn.is-opening{pointer-events:none}.action-cluster .cluster-btn.is-disabled{color:color-mix(in srgb,var(--md-sys-color-on-surface) 38%,transparent);cursor:default;opacity:.56}.action-cluster .cluster-btn-spinner{width:18px!important;height:18px!important;display:block;grid-area:1/1;--mdc-circular-progress-active-indicator-color: currentColor}.inline-actions.actions-outlined button.mat-mdc-icon-button{border:1px solid var(--pfx-surface-border, var(--md-sys-color-outline-variant));border-radius:50%}.inline-actions.actions-outlined .action-cluster button.mat-mdc-icon-button{border-color:transparent}.separator-before{position:relative;margin-left:10px}.separator-before:before{content:\"\";position:absolute;left:-7px;top:50%;width:1px;height:18px;transform:translateY(-50%);background:color-mix(in srgb,var(--md-sys-color-outline) 72%,transparent)}.inline-actions mat-icon{width:20px;height:20px;font-size:20px}.fields-grid{grid-column:1;grid-row:1;display:grid;grid-template-columns:repeat(auto-fit,minmax(var(--pfx-always-min, 220px),1fr));grid-auto-flow:row dense;gap:6px}.compact-fields{grid-column:1;grid-row:1;display:flex;flex-wrap:wrap;justify-content:flex-start;align-content:center;align-items:center;gap:6px;min-width:0;min-height:var(--pfx-filter-h)}:host ::ng-deep .compact-fields .pfx-field-shell,:host ::ng-deep .compact-fields .pfx-field-shell-wrapper,:host ::ng-deep .compact-fields .pfx-field-shell-host{--pfx-field-shell-width: fit-content;--pfx-field-shell-field-width: auto;width:fit-content!important;max-width:100%;min-width:0;flex:0 1 auto!important}:host ::ng-deep .compact-fields>.pfx-field-shell,:host ::ng-deep .compact-fields>praxis-field-shell{flex:0 1 auto!important;width:fit-content!important;max-width:100%;min-width:0}:host ::ng-deep .compact-fields .pfx-field-shell .mat-mdc-form-field{width:auto!important;max-width:100%;margin-bottom:0}:host ::ng-deep .compact-fields .pfx-field-shell[data-control-type=inlineTime] .mat-mdc-form-field.pdx-inline-time{width:var(--pdx-inline-time-field-w, auto)!important;inline-size:var(--pdx-inline-time-field-w, auto)!important;max-width:min(var(--pdx-inline-time-max-w, 280px),100vw - 48px)!important}:host ::ng-deep .compact-fields .pfx-field-shell[data-control-type=inlineDateRange] .mat-mdc-form-field{width:var(--pdx-inline-date-range-shell-width, auto)!important;max-width:100%!important}.praxis-filter-bar.has-compact .compact-fields{grid-column:1;grid-row:1}.praxis-filter-bar.has-compact .fields-grid{grid-column:1/-1;grid-row:2}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=slider] mat-slider,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=range-slider] mat-slider,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeSlider] mat-slider{width:100%;display:block}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=slider] .pdx-slider-wrapper,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=range-slider] .pdx-slider-wrapper,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeSlider] .pdx-slider-wrapper{padding-top:2px}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=range-slider] .pdx-range-slider-container,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeSlider] .pdx-range-slider-container{padding:2px 0 0}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=range-slider] .pdx-slider-label,:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeSlider] .pdx-slider-label{margin-bottom:4px;line-height:1.15}:host ::ng-deep .fields-grid .mat-mdc-text-field-wrapper.mdc-text-field--outlined{min-height:var(--pfx-filter-h);align-items:center}:host ::ng-deep .fields-grid .mat-mdc-form-field-infix{min-height:var(--pfx-filter-h)}:host ::ng-deep .fields-grid .mat-mdc-select-trigger{height:var(--pfx-filter-h);align-items:center}:host ::ng-deep .fields-grid .mat-mdc-form-field{width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineSelect]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineSelect] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineSearchableSelect]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineSearchableSelect] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineMultiSelect]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineMultiSelect] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineInput]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineInput] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlinePhone]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlinePhone] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineToggle]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineToggle] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineRange]{justify-self:start}:host ::ng-deep .compact-fields .pfx-field-shell[data-control-type=inlineRange]{max-width:min(340px,100%)}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineDate]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineDate] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineDateRange]{justify-self:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=inlineDateRange] .mat-mdc-form-field{width:auto;min-width:0;max-width:100%}:host ::ng-deep .fields-grid .mat-mdc-form-field-subscript-wrapper{min-height:0;margin-top:0}:host ::ng-deep .fields-grid .mat-mdc-form-field{margin-bottom:0}.praxis-filter-bar.has-compact{--pfx-filter-tag-color: var(--md-sys-color-primary-container);--pfx-filter-tag-on-color: var(--md-sys-color-on-primary-container);--pfx-filter-tag-outline-color: var(--md-sys-color-primary);--pdx-inline-control-height: var(--pfx-filter-inline-control-height, 42px);--pdx-inline-control-height-mobile: var(--pfx-filter-inline-control-height-mobile, 40px);--pdx-inline-control-padding-x: var(--pfx-filter-inline-control-padding-x, 12px);--pdx-inline-control-padding-x-mobile: var(--pfx-filter-inline-control-padding-x-mobile, 12px);--pdx-inline-clear-size: var(--pfx-filter-inline-clear-size, 22px);--pdx-inline-chip-radius: var(--pfx-filter-inline-chip-radius, var(--md-sys-shape-corner-full, 999px));--pdx-inline-chip-active-bg: var(--pfx-filter-tag-color);--pdx-inline-chip-active-fg: var(--pfx-filter-tag-on-color);--pdx-inline-chip-active-clear-color: var(--pfx-filter-tag-on-color);--pdx-inline-field-focus-outline: var(--pfx-filter-tag-outline-color)}.praxis-filter-bar.has-compact.tag-color-accent{--pfx-filter-tag-color: var(--md-sys-color-tertiary-container, var(--md-sys-color-secondary-container));--pfx-filter-tag-on-color: var(--md-sys-color-on-tertiary-container, var(--md-sys-color-on-secondary-container));--pfx-filter-tag-outline-color: var(--md-sys-color-tertiary, var(--md-sys-color-secondary))}.praxis-filter-bar.has-compact.tag-color-warn{--pfx-filter-tag-color: var(--md-sys-color-error-container);--pfx-filter-tag-on-color: var(--md-sys-color-on-error-container);--pfx-filter-tag-outline-color: var(--md-sys-color-error)}.praxis-filter-bar.has-compact.tag-color-basic{--pfx-filter-tag-color: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);--pfx-filter-tag-on-color: var(--md-sys-color-on-surface);--pfx-filter-tag-outline-color: var(--md-sys-color-outline-variant)}:host ::ng-deep .praxis-filter-bar.has-compact{--pfx-filter-inline-chip-padding-x: var(--pdx-inline-control-padding-x);--pfx-filter-inline-icon-gap: 4px}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-text-field-wrapper.mdc-text-field--outlined{padding-inline:var(--pfx-filter-inline-chip-padding-x)!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-form-field-icon-prefix{align-items:center;display:inline-flex;flex:0 0 auto;margin-right:var(--pfx-filter-inline-icon-gap)!important;padding:0!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-form-field-icon-suffix{align-items:center;display:inline-flex;flex:0 0 auto;gap:var(--pfx-filter-inline-icon-gap)!important;margin-left:var(--pfx-filter-inline-icon-gap)!important;padding:0!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-form-field-icon-prefix>.mat-icon,:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-form-field-icon-suffix>.mat-icon{flex:0 0 16px!important;font-size:16px!important;height:16px!important;line-height:16px!important;margin:0!important;padding:0!important;width:16px!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select,.pdx-inline-date,.pdx-inline-date-range,.pdx-inline-autocomplete,.pdx-inline-currency,.pdx-inline-time) .mat-mdc-form-field-infix{padding-inline:0!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-inline-select,.pdx-inline-searchable-select,.pdx-inline-async-select) .pdx-chip-trigger{gap:var(--pfx-filter-inline-icon-gap)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-chip-trigger.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-currency-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .mat-mdc-form-field.pdx-has-value .mat-mdc-text-field-wrapper,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-select .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-searchable-select .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-async-select.pdx-has-selection .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-date-range.pdx-inline-date-range-has-value .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-date-range.pdx-inline-date-range-has-both .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-entity-lookup.pdx-has-selection .pdx-chip-trigger,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-multi-select.pdx-has-selection .pdx-chip-trigger,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-distance-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-score-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-relative-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-relative-period-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-rating-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-pipeline-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-sentiment-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-color-label-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-time-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-toggle-pill.is-active{--pdx-inline-currency-symbol-color: var(--pfx-filter-tag-on-color);background:var(--pfx-filter-tag-color)!important;border-color:transparent!important;color:var(--pfx-filter-tag-on-color)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-chip-trigger.is-active :where(.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-currency-range-chip.is-active :where(.mat-icon,.pdx-inline-currency-range-value,.pdx-inline-currency-range-text,.pdx-inline-currency-range-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .mat-mdc-form-field.pdx-has-value :where(input,.mat-mdc-input-element,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,.pdx-inline-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear) :where(input,.mat-mdc-input-element,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,.pdx-inline-clear,.pdx-inline-number-suffix),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled :where(.pdx-inline-select,.pdx-inline-searchable-select) .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active) :where(.mat-mdc-select-value,.mat-mdc-select-min-line,.mat-mdc-select-placeholder,.pdx-chip-trigger,.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-async-select.pdx-has-selection :where(.mat-mdc-select-value,.mat-mdc-select-min-line,.mat-mdc-select-placeholder,.pdx-chip-trigger,.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-date-range.pdx-inline-date-range-has-value :where(.mat-date-range-input-inner,.mat-date-range-input-separator,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,input),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-date-range.pdx-inline-date-range-has-both :where(.mat-date-range-input-inner,.mat-date-range-input-separator,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,input),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled :where(.pdx-inline-entity-lookup.pdx-has-selection,.pdx-inline-multi-select.pdx-has-selection) .pdx-chip-trigger :where(.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled :where(.pdx-inline-range-chip.is-active,.pdx-inline-distance-chip.is-active,.pdx-inline-score-chip.is-active,.pdx-inline-relative-chip.is-active,.pdx-inline-relative-period-chip.is-active,.pdx-inline-rating-chip.is-active,.pdx-inline-pipeline-chip.is-active,.pdx-inline-sentiment-chip.is-active,.pdx-inline-color-label-chip.is-active) :where(.mat-icon,button,span),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-time-range-chip.is-active :where(.pdx-inline-time-range-icon,.pdx-inline-time-range-text,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-toggle-pill.is-active :where(.pdx-inline-toggle-label,.mat-icon){color:var(--pfx-filter-tag-on-color)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-chip-trigger.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-currency-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .mat-mdc-form-field.pdx-has-value .mat-mdc-text-field-wrapper,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-select .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-searchable-select .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-async-select.pdx-has-selection .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-date-range.pdx-inline-date-range-has-value .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-date-range.pdx-inline-date-range-has-both .mat-mdc-text-field-wrapper.mdc-text-field--outlined,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-entity-lookup.pdx-has-selection .pdx-chip-trigger,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-multi-select.pdx-has-selection .pdx-chip-trigger,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-distance-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-score-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-relative-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-relative-period-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-rating-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-pipeline-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-sentiment-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-color-label-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-time-range-chip.is-active,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-toggle-pill.is-active{--pdx-inline-currency-symbol-color: var(--pfx-filter-tag-outline-color);background:transparent!important;border-color:var(--pfx-filter-tag-outline-color)!important;box-shadow:inset 0 0 0 1px var(--pfx-filter-tag-outline-color);color:var(--pfx-filter-tag-outline-color)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-chip-trigger.is-active :where(.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-currency-range-chip.is-active :where(.mat-icon,.pdx-inline-currency-range-value,.pdx-inline-currency-range-text,.pdx-inline-currency-range-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .mat-mdc-form-field.pdx-has-value :where(input,.mat-mdc-input-element,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,.pdx-inline-clear),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear) :where(input,.mat-mdc-input-element,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,.pdx-inline-clear,.pdx-inline-number-suffix),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined :where(.pdx-inline-select,.pdx-inline-searchable-select) .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-chip-trigger.is-active) :where(.mat-mdc-select-value,.mat-mdc-select-min-line,.mat-mdc-select-placeholder,.pdx-chip-trigger,.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-async-select.pdx-has-selection :where(.mat-mdc-select-value,.mat-mdc-select-min-line,.mat-mdc-select-placeholder,.pdx-chip-trigger,.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-date-range.pdx-inline-date-range-has-value :where(.mat-date-range-input-inner,.mat-date-range-input-separator,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,input),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-date-range.pdx-inline-date-range-has-both :where(.mat-date-range-input-inner,.mat-date-range-input-separator,.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix,.mat-icon,input),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined :where(.pdx-inline-entity-lookup.pdx-has-selection,.pdx-inline-multi-select.pdx-has-selection) .pdx-chip-trigger :where(.pdx-chip-field-icon,.pdx-chip-leading-icon,.pdx-chip-trailing-icon,.pdx-chip-label,.pdx-chip-count,.pdx-chip-clear,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined :where(.pdx-inline-range-chip.is-active,.pdx-inline-distance-chip.is-active,.pdx-inline-score-chip.is-active,.pdx-inline-relative-chip.is-active,.pdx-inline-relative-period-chip.is-active,.pdx-inline-rating-chip.is-active,.pdx-inline-pipeline-chip.is-active,.pdx-inline-sentiment-chip.is-active,.pdx-inline-color-label-chip.is-active) :where(.mat-icon,button,span),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-time-range-chip.is-active :where(.pdx-inline-time-range-icon,.pdx-inline-time-range-text,.mat-icon),:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-toggle-pill.is-active :where(.pdx-inline-toggle-label,.mat-icon){color:var(--pfx-filter-tag-outline-color)!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-chip-trigger.is-active,.mat-mdc-form-field.pdx-has-value,.pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear),.pdx-inline-currency-range-chip.is-active,.pdx-inline-range-chip.is-active,.pdx-inline-distance-chip.is-active,.pdx-inline-score-chip.is-active,.pdx-inline-relative-chip.is-active,.pdx-inline-relative-period-chip.is-active,.pdx-inline-rating-chip.is-active,.pdx-inline-pipeline-chip.is-active,.pdx-inline-sentiment-chip.is-active,.pdx-inline-color-label-chip.is-active,.pdx-inline-time-range-chip.is-active,.pdx-inline-toggle-pill.is-active) :where(.pdx-chip-clear,.pdx-inline-clear,.pdx-inline-currency-range-clear,.pdx-inline-range-clear,.pdx-inline-distance-clear,.pdx-inline-score-clear,.pdx-inline-relative-clear,.pdx-inline-rating-clear,.pdx-inline-pipeline-clear,.pdx-inline-sentiment-clear,.pdx-inline-color-label-clear,.pdx-inline-time-range-clear,.pdx-inline-toggle-clear){background:color-mix(in srgb,currentColor 16%,transparent)!important;border-radius:50%!important;color:inherit!important;display:inline-grid!important;flex:0 0 var(--pdx-inline-clear-size, 22px)!important;height:var(--pdx-inline-clear-size, 22px)!important;min-width:var(--pdx-inline-clear-size, 22px)!important;place-items:center!important;width:var(--pdx-inline-clear-size, 22px)!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-chip-trigger.is-active,.mat-mdc-form-field.pdx-has-value,.pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear),.pdx-inline-currency-range-chip.is-active,.pdx-inline-range-chip.is-active,.pdx-inline-distance-chip.is-active,.pdx-inline-score-chip.is-active,.pdx-inline-relative-chip.is-active,.pdx-inline-relative-period-chip.is-active,.pdx-inline-rating-chip.is-active,.pdx-inline-pipeline-chip.is-active,.pdx-inline-sentiment-chip.is-active,.pdx-inline-color-label-chip.is-active,.pdx-inline-time-range-chip.is-active,.pdx-inline-toggle-pill.is-active) :where(.pdx-chip-clear,.pdx-inline-clear,.pdx-inline-currency-range-clear,.pdx-inline-range-clear,.pdx-inline-distance-clear,.pdx-inline-score-clear,.pdx-inline-relative-clear,.pdx-inline-rating-clear,.pdx-inline-pipeline-clear,.pdx-inline-sentiment-clear,.pdx-inline-color-label-clear,.pdx-inline-time-range-clear,.pdx-inline-toggle-clear):hover{background:color-mix(in srgb,currentColor 24%,transparent)!important}:host ::ng-deep .praxis-filter-bar.has-compact :where(.pdx-chip-trigger.is-active,.mat-mdc-form-field.pdx-has-value,.pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:has(.pdx-inline-clear),.pdx-inline-currency-range-chip.is-active,.pdx-inline-range-chip.is-active,.pdx-inline-distance-chip.is-active,.pdx-inline-score-chip.is-active,.pdx-inline-relative-chip.is-active,.pdx-inline-relative-period-chip.is-active,.pdx-inline-rating-chip.is-active,.pdx-inline-pipeline-chip.is-active,.pdx-inline-sentiment-chip.is-active,.pdx-inline-color-label-chip.is-active,.pdx-inline-time-range-chip.is-active,.pdx-inline-toggle-pill.is-active) :where(.pdx-chip-clear,.pdx-inline-clear,.pdx-inline-currency-range-clear,.pdx-inline-range-clear,.pdx-inline-distance-clear,.pdx-inline-score-clear,.pdx-inline-relative-clear,.pdx-inline-rating-clear,.pdx-inline-pipeline-clear,.pdx-inline-sentiment-clear,.pdx-inline-color-label-clear,.pdx-inline-time-range-clear,.pdx-inline-toggle-clear) .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}:host ::ng-deep .praxis-filter-bar.has-compact .mat-mdc-form-field.pdx-has-value .pdx-inline-clear .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .mat-mdc-form-field.pdx-has-value .pdx-inline-clear .mat-icon,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .mat-mdc-form-field.pdx-has-value .pdx-inline-clear .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-number .mat-mdc-text-field-wrapper:has(.pdx-inline-clear) .pdx-inline-clear .mat-icon,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-number .mat-mdc-text-field-wrapper:has(.pdx-inline-clear) .pdx-inline-clear .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-inline-toggle-pill.is-active .pdx-inline-toggle-clear .mat-icon,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-inline-toggle-pill.is-active .pdx-inline-toggle-clear .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-filled .pdx-chip-trigger.is-active .pdx-chip-clear .mat-icon,:host ::ng-deep .praxis-filter-bar.has-compact.tag-variant-outlined .pdx-chip-trigger.is-active .pdx-chip-clear .mat-icon{color:var(--pdx-inline-clear-icon-color, currentColor)!important}.praxis-filter-tags.outlined .mat-mdc-chip{background:transparent!important;--mat-chip-outline-width: 1px;--mat-chip-outline-color: var(--md-sys-color-outline-variant);box-shadow:inset 0 0 0 var(--mat-chip-outline-width) var(--mat-chip-outline-color)}.praxis-filter-tags.outlined.tag-color-primary .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-primary)}.praxis-filter-tags.outlined.tag-color-accent .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-tertiary)}.praxis-filter-tags.outlined.tag-color-warn .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-error)}.praxis-filter-tags.outlined mat-chip.active .mat-mdc-chip,.praxis-filter-tags.outlined .mat-mdc-chip.mat-mdc-chip-highlighted{--mat-chip-outline-width: 2px;box-shadow:inset 0 0 0 var(--mat-chip-outline-width) var(--mat-chip-outline-color)!important}.praxis-filter-tags.outlined.tag-color-basic mat-chip.active .mat-mdc-chip{--mat-chip-outline-color: var(--md-sys-color-primary)}.praxis-filter-tags .mat-mdc-standard-chip .mdc-evolution-chip__text-label{display:flex;align-items:center;justify-content:center;gap:4px;line-height:1.2;font-size:.875rem}.praxis-filter-tags .chip-leading,.praxis-filter-tags .chip-trailing{display:inline-flex;align-items:center}.praxis-filter-tags .leading-check{width:18px;height:18px;font-size:18px;line-height:1}.praxis-filter-tags .chip-label{position:relative;top:-6px}.praxis-filter-tags .chip-trailing .mat-mdc-icon-button{width:28px;height:28px;padding:0;display:flex;align-items:center;justify-content:center;line-height:28px}.praxis-filter-tags .mat-mdc-standard-chip{--mat-chip-container-height: 36px}.praxis-filter-advanced{display:flex;flex-direction:column;min-width:400px;max-width:90vw;min-height:260px;max-height:min(80vh,720px);margin:var(--pfx-overlay-margin-y) var(--pfx-overlay-margin-x);background-color:var(--pfx-overlay-surface)!important;background:var(--pfx-overlay-surface)!important;color:var(--pfx-overlay-on-surface);border:1px solid var(--border-color);border-radius:12px;box-shadow:var(--md-sys-elevation-level3)}.advanced-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px var(--pfx-advanced-pad-x) 10px;border-bottom:1px solid var(--border-color);background:var(--pfx-overlay-surface)}.advanced-title-block{display:flex;flex-direction:column;gap:2px}.advanced-title{font-size:1rem;font-weight:600;color:var(--pfx-overlay-on-surface)}.advanced-subtitle{font-size:.85rem;color:var(--pfx-overlay-on-surface-variant)}.advanced-close{align-self:flex-start}.praxis-filter-overlay.mobile .praxis-filter-advanced{height:100vh;max-height:100vh;margin:0;border-radius:0}:host ::ng-deep .praxis-overlay-backdrop{background:var(--md-sys-color-scrim);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}:host ::ng-deep .praxis-filter-overlay.frosted .praxis-filter-advanced{background:var(--pfx-overlay-surface-variant)!important;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-color:var(--border-color)}:host ::ng-deep .praxis-filter-overlay.frosted .advanced-header,:host ::ng-deep .praxis-filter-overlay.frosted .advanced-actions{background:var(--pfx-overlay-surface-variant)!important}.advanced-body{padding:12px var(--pfx-advanced-pad-x) 72px;overflow:auto;flex:1 1 auto;overscroll-behavior:contain}:host ::ng-deep .praxis-filter-advanced .praxis-filter-form .filter-row{display:grid!important;grid-template-columns:repeat(auto-fit,minmax(var(--pfx-field-min),1fr));gap:var(--pfx-gap-y) var(--pfx-gap-x)}:host ::ng-deep .praxis-filter-advanced .praxis-filter-form .filter-column{min-width:0}:host ::ng-deep .praxis-filter-advanced .praxis-filter-form .filter-column .mat-mdc-form-field{width:100%}.advanced-actions{position:sticky;bottom:0;z-index:2;display:flex;justify-content:flex-end;gap:8px;padding:var(--pfx-gap-y) var(--pfx-advanced-pad-x);background-color:var(--pfx-overlay-surface)!important;background:var(--pfx-overlay-surface)!important;border-top:1px solid var(--border-color);box-shadow:0 -1px 0 var(--md-sys-color-outline-variant)}.advanced-actions .mat-mdc-button-base{height:40px}.advanced-actions .mat-mdc-raised-button.mat-primary{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}:host ::ng-deep .praxis-filter-advanced .mat-mdc-text-field-wrapper.mdc-text-field--outlined{--mdc-outlined-text-field-outline-color: var(--border-color);--mdc-outlined-text-field-hover-outline-color: var(--border-color-hover);--mdc-outlined-text-field-focus-outline-color: var(--md-sys-color-primary);--mdc-outlined-text-field-label-text-color: var(--pfx-overlay-on-surface-variant);--mdc-outlined-text-field-input-text-color: var(--pfx-overlay-on-surface);--mdc-outlined-text-field-container-color: var(--pfx-overlay-surface)}:host ::ng-deep .praxis-filter-advanced .mat-mdc-select-trigger,:host ::ng-deep .praxis-filter-advanced .mat-mdc-form-field-subscript-wrapper,:host ::ng-deep .praxis-filter-advanced .mat-mdc-form-field-infix{color:var(--pfx-overlay-on-surface)}@media(min-width:600px){.fields-grid{gap:6px 8px}:host ::ng-deep .praxis-filter-advanced .praxis-filter-form .filter-row{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:640px){.praxis-filter-bar.has-compact{grid-template-columns:minmax(0,1fr);align-items:start}.praxis-filter-bar.has-compact .compact-fields{grid-column:1;grid-row:1;display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));align-items:start;justify-items:stretch;width:100%}.praxis-filter-bar.has-compact .inline-actions{grid-column:1;grid-row:2;justify-self:start;width:100%;height:auto}.praxis-filter-bar.has-compact .inline-actions .action-cluster{max-width:100%}:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields>.pfx-field-shell,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields>praxis-field-shell,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell-wrapper,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell-host{--pfx-field-shell-width: auto;--pfx-field-shell-field-width: auto;width:100%!important;max-width:100%!important}:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .mat-mdc-form-field,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .mat-mdc-text-field-wrapper,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-chip-trigger,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-range-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-currency-range-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-distance-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-score-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-relative-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-relative-period-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-rating-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-pipeline-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-sentiment-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-color-label-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-time-range-chip,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pdx-inline-toggle-pill{width:100%!important;max-width:100%!important}:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields :where(.pdx-chip-label,.pdx-chip-trigger,.pdx-inline-range-text,.pdx-inline-currency-range-text,.pdx-inline-distance-text,.pdx-inline-score-text,.pdx-inline-relative-text,.pdx-inline-relative-period-text,.pdx-inline-rating-text,.pdx-inline-pipeline-text,.pdx-inline-sentiment-text,.pdx-inline-color-label-text,.pdx-inline-time-range-text,.pdx-inline-toggle-label){min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell[data-control-type=inlineTime],:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell[data-control-type=inlineTime] .pfx-field-shell-wrapper,:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell[data-control-type=inlineTime] .pfx-field-shell-host{--pfx-field-shell-width: fit-content;--pfx-field-shell-field-width: var(--pdx-inline-time-field-w, auto);justify-self:start;width:fit-content!important;max-width:100%!important}:host ::ng-deep .praxis-filter-bar.has-compact .compact-fields .pfx-field-shell[data-control-type=inlineTime] .mat-mdc-form-field.pdx-inline-time{width:var(--pdx-inline-time-field-w, auto)!important;inline-size:var(--pdx-inline-time-field-w, auto)!important;max-width:min(var(--pdx-inline-time-max-w, 280px),100vw - 48px)!important}}@media(min-width:960px){.fields-grid{gap:6px 10px}}@media(min-width:1200px){.fields-grid{grid-template-columns:repeat(auto-fit,minmax(var(--pfx-always-min, 220px),var(--pfx-always-max-desktop, 380px)));justify-content:start;align-content:start}:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=slider],:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=range-slider],:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeSlider],:host ::ng-deep .fields-grid .pfx-field-shell[data-control-type=rangeslider]{grid-column:span var(--pfx-slider-span-desktop, 2)}}.inline-toggles{display:flex;align-items:center;gap:8px;margin:0 4px 0 6px}:host ::ng-deep .inline-actions .mat-mdc-slide-toggle{height:var(--pfx-filter-h);display:flex;align-items:center}:host ::ng-deep .inline-actions .mat-mdc-slide-toggle .mdc-form-field{align-items:center}::ng-deep .praxis-filter-overlay .praxis-filter-advanced .praxis-filter-form .filter-row{display:grid!important;gap:var(--pfx-gap-y, 1px) var(--pfx-gap-x, 6px)}@media(min-width:600px){::ng-deep .praxis-filter-overlay .praxis-filter-advanced .praxis-filter-form .filter-row{grid-template-columns:repeat(2,minmax(0,1fr))}}.sr-only{position:absolute!important;width:1px!important;height:1px!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important}.hidden-submit{position:absolute!important;width:0!important;height:0!important;padding:0!important;margin:0!important;border:0!important;opacity:0!important;pointer-events:none!important;clip:rect(0 0 0 0)!important;clip-path:inset(50%)!important;overflow:hidden!important}:host ::ng-deep .inline-actions [matBadge] .mat-badge-content{top:-6px;right:-6px;min-width:16px;height:16px;padding:0 4px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;font-size:10px;font-weight:700;line-height:16px;letter-spacing:0;text-indent:0;color:var(--md-sys-color-on-primary, #fff)}:host ::ng-deep .inline-actions [matBadge][matbadgecolor=warn] .mat-badge-content,:host ::ng-deep .inline-actions [matBadge].mat-badge-warn .mat-badge-content{color:var(--md-sys-color-on-error, #fff)}.praxis-filter-bar :where(.mat-mdc-slide-toggle .mdc-switch__icons){display:none!important}.praxis-filter-bar{--mdc-switch-unselected-icon-size: 0px;--mdc-switch-selected-icon-size: 0px;--pfx-always-min: 220px}.praxis-filter-card{display:flex;flex-direction:column;gap:6px;padding:8px 12px;border-radius:12px;border:1px solid var(--pfx-surface-border, var(--praxis-theme-outline, var(--md-sys-color-outline-variant)));background:var(--praxis-theme-surface-raised, var(--md-sys-color-surface-container));color:var(--praxis-theme-on-surface, var(--md-sys-color-on-surface))}.add-manager{--_pfx-field-manager-surface: var(--pfx-field-manager-surface, var(--praxis-theme-surface-overlay, var(--md-sys-color-surface-container-highest)));--_pfx-field-manager-on-surface: var(--pfx-field-manager-on-surface, var(--praxis-theme-on-surface, var(--md-sys-color-on-surface)));--_pfx-field-manager-on-surface-muted: var(--pfx-field-manager-on-surface-muted, var(--praxis-theme-on-surface-muted, var(--md-sys-color-on-surface-variant)));--_pfx-field-manager-outline: var(--pfx-field-manager-outline, var(--pdx-inline-field-outline, var(--praxis-theme-outline, var(--md-sys-color-outline-variant))));--_pfx-field-manager-focus-outline: var(--pfx-field-manager-focus-outline, var(--pdx-inline-field-focus-outline, var(--praxis-theme-focus-outline, var(--md-sys-color-primary))));--_pfx-field-manager-search-surface: var(--pfx-field-manager-search-surface, var(--pdx-inline-field-surface, var(--praxis-theme-surface-raised, var(--md-sys-color-surface-container-high))));--_pfx-field-manager-search-on-surface: var(--pfx-field-manager-search-on-surface, var(--pdx-inline-field-on-surface, var(--praxis-theme-on-surface, var(--md-sys-color-on-surface))));--_pfx-field-manager-search-placeholder: var(--pfx-field-manager-search-placeholder, var(--pdx-inline-field-on-surface-muted, var(--praxis-theme-on-surface-muted, var(--md-sys-color-on-surface-variant))));--_pfx-field-manager-search-height: var(--pfx-field-manager-search-height, var(--pdx-inline-control-height-mobile, 40px));--_pfx-field-manager-search-font-size: var(--pfx-field-manager-search-font-size, var(--md-sys-typescale-body-medium-size, .875rem));--_pfx-field-manager-search-line-height: var(--pfx-field-manager-search-line-height, var(--md-sys-typescale-body-medium-line-height, 1.25rem));--_pfx-field-manager-search-font-weight: var(--pfx-field-manager-search-font-weight, var(--md-sys-typescale-body-medium-weight, 400));--_pfx-field-manager-search-icon-size: var(--pfx-field-manager-search-icon-size, 18px);display:flex;flex-direction:column;width:min(400px,100vw - 24px);max-height:min(70vh,560px);overflow:hidden;border:1px solid var(--_pfx-field-manager-outline);border-radius:var(--pfx-overlay-radius, 16px);background:var(--_pfx-field-manager-surface);color:var(--_pfx-field-manager-on-surface);box-shadow:var(--praxis-theme-elevation, var(--md-sys-elevation-level3))}.add-manager__header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:16px 16px 8px 20px}.add-manager__header h2{margin:0;font:var(--md-sys-typescale-title-medium)}.add-manager__header p{margin:4px 0 0;color:var(--_pfx-field-manager-on-surface-muted);font:var(--md-sys-typescale-body-small)}.add-manager__search{padding:8px 20px}.add-manager__search-field{display:flex;align-items:center;min-height:var(--_pfx-field-manager-search-height);padding-inline:12px;border:1px solid var(--_pfx-field-manager-outline);border-radius:var(--pfx-field-manager-search-radius, 999px);background:var(--_pfx-field-manager-search-surface);color:var(--_pfx-field-manager-search-on-surface);box-sizing:border-box;transition:border-color .12s ease}.add-manager__search-field:focus-within{border:2px solid var(--_pfx-field-manager-focus-outline)}.add-manager__search-field input{flex:1 1 auto;min-width:0;height:var(--_pfx-field-manager-search-height);padding:0;border:0;outline:none;background:transparent;color:var(--_pfx-field-manager-search-on-surface);font-size:var(--_pfx-field-manager-search-font-size);line-height:var(--_pfx-field-manager-search-line-height);font-weight:var(--_pfx-field-manager-search-font-weight);caret-color:var(--_pfx-field-manager-focus-outline)}.add-manager__search-field input::placeholder{color:var(--_pfx-field-manager-search-placeholder);opacity:1}.add-manager__search-field input[type=search]{appearance:none}.add-manager__search-field input[type=search]::-webkit-search-cancel-button{display:none}.add-manager__search-icon{flex:0 0 auto;width:var(--_pfx-field-manager-search-icon-size);height:var(--_pfx-field-manager-search-icon-size);margin-right:8px;color:var(--_pfx-field-manager-search-placeholder);font-size:var(--_pfx-field-manager-search-icon-size)}.add-manager__clear-search{flex:0 0 auto;width:28px;height:28px;padding:2px;color:var(--_pfx-field-manager-search-placeholder)}.add-manager__clear-search mat-icon{width:18px;height:18px;font-size:18px}.add-manager__bulk{padding:8px 20px;border-block:1px solid var(--_pfx-field-manager-outline)}.add-manager__list{display:flex;flex-direction:column;min-height:80px;overflow:auto;padding:4px 12px 12px}.add-manager__section+.add-manager__section{margin-top:8px;padding-top:8px;border-top:1px solid var(--_pfx-field-manager-outline)}.add-manager__section-title{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin:0;padding:8px 8px 4px;color:var(--_pfx-field-manager-on-surface-muted);font:var(--md-sys-typescale-label-medium)}.add-manager__section-title span{color:var(--_pfx-field-manager-on-surface-muted);font:var(--md-sys-typescale-label-small);white-space:nowrap}.add-manager__item{display:flex;align-items:center;min-height:48px;padding-inline:8px;border-radius:var(--pfx-control-radius, 8px)}::ng-deep .add-manager__item .mdc-form-field{align-items:center}::ng-deep .add-manager__item .mdc-label{display:inline-flex;align-items:center;min-height:20px}.add-manager__item:hover{background:color-mix(in srgb,var(--_pfx-field-manager-on-surface) 6%,var(--_pfx-field-manager-surface))}.add-manager__item-info{width:16px;height:16px;margin-left:4px;vertical-align:text-bottom;color:var(--_pfx-field-manager-on-surface-muted);font-size:16px}.add-manager__section--selected .add-manager__item{box-shadow:inset 2px 0 color-mix(in srgb,var(--_pfx-field-manager-focus-outline) 56%,transparent)}.add-manager__item--added{animation:add-manager-item-added var(--md-sys-motion-duration-short4, .2s) var(--md-sys-motion-easing-emphasized-decelerate, cubic-bezier(.05, .7, .1, 1)) both}.add-manager__item--removed{animation:add-manager-item-removed var(--md-sys-motion-duration-short4, .2s) var(--md-sys-motion-easing-emphasized-decelerate, cubic-bezier(.05, .7, .1, 1)) both}@keyframes add-manager-item-added{0%{opacity:.44;transform:translateY(8px) scale(.98);background:color-mix(in srgb,var(--_pfx-field-manager-focus-outline) 24%,var(--_pfx-field-manager-surface))}to{opacity:1;transform:translateY(0) scale(1);background:transparent}}@keyframes add-manager-item-removed{0%{opacity:.44;transform:translateY(-8px) scale(.98);background:color-mix(in srgb,var(--md-sys-color-surface-container-high) 72%,transparent)}to{opacity:1;transform:translateY(0) scale(1);background:transparent}}@media(prefers-reduced-motion:reduce){.add-manager__item--added,.add-manager__item--removed{animation:none}}.add-manager__empty{display:flex;align-items:center;justify-content:center;gap:8px;min-height:96px;padding:16px;color:var(--_pfx-field-manager-on-surface-muted);text-align:center}.add-manager__footer{display:flex;justify-content:flex-end;gap:8px;padding:12px 16px;border-top:1px solid var(--_pfx-field-manager-outline);background:var(--_pfx-field-manager-surface)}.add-manager__notice{display:flex;align-items:flex-start;gap:8px;padding:10px 16px;font:var(--md-sys-typescale-body-small)}.add-manager__notice mat-icon{flex:0 0 auto}.add-manager__notice--warning{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container)}.add-manager__notice--conflict{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}@media(max-width:600px){.add-manager{width:calc(100vw - 16px);max-height:min(78dvh,640px);border-radius:var(--pfx-overlay-radius, 16px)}.add-manager__header,.add-manager__search{padding-inline:16px}}.inline-actions .add-trigger{display:inline-flex;align-items:center;gap:6px;height:32px;width:100%;max-width:100%;min-width:0;padding:0 10px;border-radius:0;border:0;background:transparent;overflow:visible}.inline-actions .add-trigger--icon{justify-content:center;width:32px;min-width:32px;padding:0}:host ::ng-deep .inline-actions .add-trigger mat-icon{width:18px;height:18px;font-size:18px;flex:0 0 auto}.inline-actions .add-trigger-label{display:inline-block;flex:1 1 auto;min-width:0;max-width:100%;text-align:left;direction:ltr;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.82rem;line-height:1}:host ::ng-deep .action-cluster--manage .mat-mdc-select{flex:0 0 auto;width:180px;min-width:0;max-width:180px}:host ::ng-deep .action-cluster--manage .cluster-select--hidden.mat-mdc-select{position:absolute;width:1px;min-width:1px;max-width:1px;height:1px;opacity:0;pointer-events:none;overflow:hidden}:host ::ng-deep .action-cluster--manage .mat-mdc-select-trigger{min-height:32px;padding:0}:host ::ng-deep .action-cluster--manage .mat-mdc-select-value,:host ::ng-deep .action-cluster--manage .mat-mdc-select-value-text,:host ::ng-deep .action-cluster--manage .mat-mdc-select-min-line{width:auto;min-width:0;max-width:100%;display:inline-flex;align-items:center;justify-content:flex-start;overflow:visible}.praxis-filter-card .summary-header{display:flex;align-items:center;gap:10px}.praxis-filter-card .summary-avatar{width:32px;height:32px;border-radius:50%;object-fit:cover}.praxis-filter-card .summary-title{font-weight:600}.praxis-filter-card .summary-subtitle{opacity:.8;font-size:.875rem}.praxis-filter-card .summary-badges{display:flex;flex-wrap:wrap;gap:6px}.praxis-filter-card .summary-badges span{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;background:var(--md-sys-color-primary-container);border:1px solid var(--md-sys-color-outline-variant);color:var(--md-sys-color-on-primary-container);font-size:12px}.praxis-filter-card .card-actions{display:flex;gap:8px}:host ::ng-deep .inline-actions .mat-mdc-select-arrow-wrapper{display:none}.inline-actions .add-filter-btn{height:36px;border-radius:18px;padding:0 16px 0 12px}.inline-actions .add-filter-btn mat-icon{margin-right:8px;margin-left:-4px}\n"] }]
38637
38702
  }], ctorParameters: () => [{ type: i1.GenericCrudService }, { type: undefined, decorators: [{
38638
38703
  type: Inject,
38639
38704
  args: [ASYNC_CONFIG_STORAGE]
@@ -39808,6 +39873,7 @@ class PraxisTable {
39808
39873
  componentKeys;
39809
39874
  loadingOrchestrator;
39810
39875
  globalActions;
39876
+ enterpriseRuntimeContext;
39811
39877
  loadingRenderer;
39812
39878
  route;
39813
39879
  logger;
@@ -40447,11 +40513,15 @@ class PraxisTable {
40447
40513
  }
40448
40514
  getNoDataStateIcon() {
40449
40515
  const emptyState = this.resolveNoDataStateConfig();
40450
- return (emptyState.icon || '').trim();
40516
+ const configuredIcon = (emptyState.icon || '').trim();
40517
+ if (configuredIcon) {
40518
+ return configuredIcon;
40519
+ }
40520
+ return this.hasActiveEmptyStateFilters() ? 'search_off' : 'inbox';
40451
40521
  }
40452
40522
  getNoDataStateTone() {
40453
40523
  const tone = this.resolveNoDataStateConfig().tone;
40454
- return tone === 'primary' || tone === 'secondary' ? tone : 'neutral';
40524
+ return tone === 'neutral' || tone === 'secondary' ? tone : 'primary';
40455
40525
  }
40456
40526
  getNoDataStateVariant() {
40457
40527
  const variant = this.resolveNoDataStateConfig().variant;
@@ -40460,17 +40530,31 @@ class PraxisTable {
40460
40530
  || variant === 'panel'
40461
40531
  || variant === 'transparent'
40462
40532
  ? variant
40463
- : 'inline';
40533
+ : 'transparent';
40464
40534
  }
40465
40535
  getNoDataStateAlignment() {
40466
- return this.resolveNoDataStateConfig().alignment === 'center' ? 'center' : 'start';
40536
+ return this.resolveNoDataStateConfig().alignment === 'start' ? 'start' : 'center';
40467
40537
  }
40468
40538
  getNoDataStateDensity() {
40469
- return this.resolveNoDataStateConfig().density === 'compact' ? 'compact' : 'comfortable';
40539
+ return this.resolveNoDataStateConfig().density === 'comfortable' ? 'comfortable' : 'compact';
40540
+ }
40541
+ getNoDataStateActionSize() {
40542
+ const configuredSize = String(this.config?.toolbar?.appearance?.tokens?.actionSize || '').trim();
40543
+ if (configuredSize) {
40544
+ return configuredSize;
40545
+ }
40546
+ switch (this.config?.toolbar?.appearance?.density || this.resolveAppearanceDensity()) {
40547
+ case 'compact':
40548
+ return '32px';
40549
+ case 'spacious':
40550
+ return '40px';
40551
+ default:
40552
+ return '36px';
40553
+ }
40470
40554
  }
40471
40555
  getNoDataStateIconContainer() {
40472
40556
  const iconContainer = this.resolveNoDataStateConfig().iconContainer;
40473
- return iconContainer === 'circle' || iconContainer === 'soft' ? iconContainer : 'none';
40557
+ return iconContainer === 'none' || iconContainer === 'circle' ? iconContainer : 'soft';
40474
40558
  }
40475
40559
  getNoDataStatePrimaryAction() {
40476
40560
  const actions = this.resolveNoDataStateConfig().actions ?? [];
@@ -40645,6 +40729,9 @@ class PraxisTable {
40645
40729
  };
40646
40730
  schemaOutdated = false;
40647
40731
  enableCustomization = false;
40732
+ /** Capability publica exigida para materializar configuracao governada. */
40733
+ authoringCapability = null;
40734
+ activeTableSettingsRef;
40648
40735
  _resolvedPrefs = {};
40649
40736
  set resolvedPrefs(val) { this._resolvedPrefs = val; }
40650
40737
  get resolvedPrefs() { return this._resolvedPrefs; }
@@ -41853,7 +41940,7 @@ class PraxisTable {
41853
41940
  isCreateToolbarAction(action) {
41854
41941
  return String(action?.action || action?.id || '').trim().toLowerCase() === 'create';
41855
41942
  }
41856
- constructor(cdr, settingsPanel, crudService, tableDefaultsProvider, filterConfig, formattingService, pxDialog, snackBar, asyncConfigStorage, connectionStorage, hostRef, global, injector, componentKeys, loadingOrchestrator, globalActions, loadingRenderer, route, logger, analyticsStatsApi) {
41943
+ constructor(cdr, settingsPanel, crudService, tableDefaultsProvider, filterConfig, formattingService, pxDialog, snackBar, asyncConfigStorage, connectionStorage, hostRef, global, injector, componentKeys, loadingOrchestrator, globalActions, enterpriseRuntimeContext, loadingRenderer, route, logger, analyticsStatsApi) {
41857
41944
  this.cdr = cdr;
41858
41945
  this.settingsPanel = settingsPanel;
41859
41946
  this.crudService = crudService;
@@ -41870,6 +41957,7 @@ class PraxisTable {
41870
41957
  this.componentKeys = componentKeys;
41871
41958
  this.loadingOrchestrator = loadingOrchestrator;
41872
41959
  this.globalActions = globalActions;
41960
+ this.enterpriseRuntimeContext = enterpriseRuntimeContext;
41873
41961
  this.loadingRenderer = loadingRenderer;
41874
41962
  this.route = route;
41875
41963
  this.logger = logger;
@@ -41901,6 +41989,16 @@ class PraxisTable {
41901
41989
  }
41902
41990
  catch { }
41903
41991
  }));
41992
+ if (this.enterpriseRuntimeContext) {
41993
+ this.subscriptions.push(this.enterpriseRuntimeContext.contextChanges$.subscribe(() => {
41994
+ if (!this.isCustomizationAvailable()) {
41995
+ this.activeTableSettingsRef?.close();
41996
+ this.activeTableSettingsRef = undefined;
41997
+ this.disableAiAssistantSession();
41998
+ }
41999
+ this.cdr.markForCheck();
42000
+ }));
42001
+ }
41904
42002
  }
41905
42003
  get resourceDiscovery() {
41906
42004
  return this._resourceDiscovery ??= this.injector.get(ResourceDiscoveryService);
@@ -41918,7 +42016,7 @@ class PraxisTable {
41918
42016
  if (this.aiAdapter || this.aiAdapterLoadStarted)
41919
42017
  return;
41920
42018
  this.aiAdapterLoadStarted = true;
41921
- import('./praxisui-table-table-ai.adapter-BjFMwbS0.mjs')
42019
+ import('./praxisui-table-table-ai.adapter-BNA88l5o.mjs')
41922
42020
  .then(({ TableAiAdapter }) => {
41923
42021
  if (!this.isAiAssistantEnabled()) {
41924
42022
  this.aiAssistantOpenAfterAdapterLoad = false;
@@ -41943,7 +42041,7 @@ class PraxisTable {
41943
42041
  });
41944
42042
  }
41945
42043
  openAiAssistant() {
41946
- if (!this.isAiAssistantEnabled())
42044
+ if (!this.isAuthoringAssistantAvailable())
41947
42045
  return;
41948
42046
  this.ensureAiAdapterLoaded(true);
41949
42047
  if (!this.aiAdapter)
@@ -41982,10 +42080,10 @@ class PraxisTable {
41982
42080
  return this.config?.ai?.assistant?.enabled !== false;
41983
42081
  }
41984
42082
  shouldShowAiAssistantEntrypoint() {
41985
- return this.isAiAssistantEnabled() && !!this.aiAdapter;
42083
+ return this.isAuthoringAssistantAvailable() && !!this.aiAdapter;
41986
42084
  }
41987
42085
  openAiAssistantFromSession(session) {
41988
- if (!this.isAiAssistantEnabled())
42086
+ if (!this.isAuthoringAssistantAvailable())
41989
42087
  return;
41990
42088
  if (session.id !== this.resolveAiAssistantSessionId())
41991
42089
  return;
@@ -42772,7 +42870,7 @@ class PraxisTable {
42772
42870
  label: this.title || this.tableId || 'Tabela',
42773
42871
  metadata: {
42774
42872
  hasResourcePath: !!this.resourcePath,
42775
- hasCustomization: !!this.enableCustomization,
42873
+ hasCustomization: this.isCustomizationAvailable(),
42776
42874
  },
42777
42875
  },
42778
42876
  contextItems: this.buildAiAssistantContextItems().map((item) => ({
@@ -43057,7 +43155,7 @@ class PraxisTable {
43057
43155
  return native.isConnected !== false;
43058
43156
  }
43059
43157
  syncAiAssistantSession(visibility = null) {
43060
- if (!this.enableCustomization || !this.aiAdapter)
43158
+ if (!this.isAuthoringAssistantAvailable() || !this.aiAdapter)
43061
43159
  return;
43062
43160
  if (!this.aiAssistantOpen && !this.hasAiAssistantSessionState())
43063
43161
  return;
@@ -48338,7 +48436,25 @@ class PraxisTable {
48338
48436
  this.cdr.markForCheck();
48339
48437
  this.configChange.emit(this.config);
48340
48438
  }
48439
+ isCustomizationAvailable() {
48440
+ if (!this.enableCustomization) {
48441
+ return false;
48442
+ }
48443
+ const requiredCapability = String(this.authoringCapability || '').trim();
48444
+ if (!requiredCapability) {
48445
+ return true;
48446
+ }
48447
+ const capabilities = this.enterpriseRuntimeContext?.snapshot?.capabilities;
48448
+ return Array.isArray(capabilities)
48449
+ && capabilities.some((capability) => capability === requiredCapability);
48450
+ }
48451
+ isAuthoringAssistantAvailable() {
48452
+ return this.isAiAssistantEnabled() && this.isCustomizationAvailable();
48453
+ }
48341
48454
  openTableSettings() {
48455
+ if (!this.isCustomizationAvailable()) {
48456
+ return;
48457
+ }
48342
48458
  try {
48343
48459
  this.debugLog('[PraxisTable] Opening table settings', {
48344
48460
  tableId: this.tableId,
@@ -48378,6 +48494,7 @@ class PraxisTable {
48378
48494
  title: 'Configurações da Tabela',
48379
48495
  content: { component: PraxisTableConfigEditor, inputs: panelInputs },
48380
48496
  });
48497
+ this.activeTableSettingsRef = ref;
48381
48498
  this.subscriptions.push(ref.applied$.subscribe((val) => {
48382
48499
  if (!val)
48383
48500
  return;
@@ -48407,6 +48524,10 @@ class PraxisTable {
48407
48524
  inputsTrigger: 'table-settings-reset-inputs',
48408
48525
  successTrigger: 'table-settings-reset',
48409
48526
  });
48527
+ }), ref.closed$.subscribe(() => {
48528
+ if (this.activeTableSettingsRef === ref) {
48529
+ this.activeTableSettingsRef = undefined;
48530
+ }
48410
48531
  }));
48411
48532
  }
48412
48533
  catch (error) {
@@ -55138,11 +55259,13 @@ class PraxisTable {
55138
55259
  if (!selectedRows.length) {
55139
55260
  return;
55140
55261
  }
55141
- const sourceRows = Array.isArray(this.localSource) && this.localSource.length
55142
- ? this.localSource
55143
- : Array.isArray(currentData)
55144
- ? currentData
55145
- : [];
55262
+ const persistOnDataUpdate = this.config?.behavior?.selection?.persistOnDataUpdate === true;
55263
+ const persistSelection = this.config?.behavior?.selection?.persistSelection === true;
55264
+ const visibleRows = Array.isArray(currentData) ? currentData : [];
55265
+ const authoritativeLocalRows = this.isLocalDataModeActive()
55266
+ ? (Array.isArray(this.localSource) ? this.localSource : [])
55267
+ : null;
55268
+ const sourceRows = authoritativeLocalRows ?? visibleRows;
55146
55269
  const rowsByIdentity = new Map();
55147
55270
  sourceRows.forEach((row) => {
55148
55271
  const identity = this.getComparableRowIdentity(row);
@@ -55150,22 +55273,41 @@ class PraxisTable {
55150
55273
  rowsByIdentity.set(identity, row);
55151
55274
  }
55152
55275
  });
55276
+ const visibleRowsByIdentity = new Map();
55277
+ visibleRows.forEach((row) => {
55278
+ const identity = this.getComparableRowIdentity(row);
55279
+ if (identity)
55280
+ visibleRowsByIdentity.set(identity, row);
55281
+ });
55153
55282
  const nextSelection = [];
55154
55283
  for (const row of selectedRows) {
55155
55284
  const identity = this.getComparableRowIdentity(row);
55285
+ if (persistSelection) {
55286
+ if (identity && authoritativeLocalRows && !rowsByIdentity.has(identity))
55287
+ continue;
55288
+ nextSelection.push((identity && (rowsByIdentity.get(identity) ?? visibleRowsByIdentity.get(identity))) || row);
55289
+ continue;
55290
+ }
55291
+ if (!persistOnDataUpdate)
55292
+ continue;
55156
55293
  if (identity) {
55157
- const canonicalRow = rowsByIdentity.get(identity);
55158
- if (canonicalRow !== undefined) {
55159
- nextSelection.push(canonicalRow);
55160
- }
55294
+ const visibleRow = visibleRowsByIdentity.get(identity);
55295
+ if (visibleRow !== undefined)
55296
+ nextSelection.push(visibleRow);
55161
55297
  continue;
55162
55298
  }
55163
- if (sourceRows.includes(row)) {
55299
+ if (visibleRows.includes(row))
55164
55300
  nextSelection.push(row);
55165
- }
55166
55301
  }
55302
+ const previousIdentities = selectedRows.map((row) => this.getComparableRowIdentity(row));
55303
+ const nextIdentities = nextSelection.map((row) => this.getComparableRowIdentity(row));
55304
+ const selectionChanged = previousIdentities.length !== nextIdentities.length
55305
+ || previousIdentities.some((identity, index) => identity !== nextIdentities[index]);
55167
55306
  this.selection.clear();
55168
55307
  nextSelection.forEach((row) => this.selection.select(row));
55308
+ if (selectionChanged) {
55309
+ this.emitSelectionChange('data-reconcile');
55310
+ }
55169
55311
  }
55170
55312
  getComparableRowIdentity(row) {
55171
55313
  const rawId = this.getRowId(row);
@@ -56405,8 +56547,8 @@ class PraxisTable {
56405
56547
  this.removeViewportChangeListeners?.();
56406
56548
  this.removeViewportChangeListeners = null;
56407
56549
  }
56408
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisTable, deps: [{ token: i0.ChangeDetectorRef }, { token: i3$3.SettingsPanelService }, { token: i1.GenericCrudService }, { token: TableDefaultsProvider }, { token: FilterConfigService }, { token: DataFormattingService }, { token: i6$2.PraxisDialog }, { token: i2$2.MatSnackBar }, { token: ASYNC_CONFIG_STORAGE }, { token: CONNECTION_STORAGE }, { token: i0.ElementRef }, { token: i1.GlobalConfigService }, { token: i0.Injector }, { token: i1.ComponentKeyService }, { token: i1.LoadingOrchestrator }, { token: i1.GlobalActionService }, { token: PRAXIS_LOADING_RENDERER, optional: true }, { token: i6$1.ActivatedRoute, optional: true }, { token: i1.LoggerService, optional: true }, { token: AnalyticsTableStatsApiService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
56409
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PraxisTable, isStandalone: true, selector: "praxis-table", inputs: { config: "config", resourcePath: "resourcePath", data: "data", tableId: "tableId", componentInstanceId: "componentInstanceId", configPersistenceStrategy: "configPersistenceStrategy", title: "title", subtitle: "subtitle", icon: "icon", autoDelete: "autoDelete", notifyIfOutdated: "notifyIfOutdated", snoozeMs: "snoozeMs", autoOpenSettingsOnOutdated: "autoOpenSettingsOnOutdated", crudContext: "crudContext", filterCriteria: "filterCriteria", queryContext: "queryContext", aiContext: "aiContext", aiAssistantVoiceInputMode: "aiAssistantVoiceInputMode", aiAssistantVoiceLanguage: "aiAssistantVoiceLanguage", horizontalScroll: "horizontalScroll", enableCustomization: ["enableCustomization", "enableCustomization", booleanAttribute], dense: "dense" }, outputs: { rowClick: "rowClick", widgetEvent: "widgetEvent", resourceEvent: "resourceEvent", rowDoubleClick: "rowDoubleClick", rowExpansionChange: "rowExpansionChange", rowAction: "rowAction", toolbarAction: "toolbarAction", bulkAction: "bulkAction", exportAction: "exportAction", columnReorder: "columnReorder", columnReorderAttempt: "columnReorderAttempt", columnResize: "columnResize", beforeDelete: "beforeDelete", afterDelete: "afterDelete", deleteError: "deleteError", beforeBulkDelete: "beforeBulkDelete", afterBulkDelete: "afterBulkDelete", bulkDeleteError: "bulkDeleteError", schemaStatusChange: "schemaStatusChange", configChange: "configChange", metadataChange: "metadataChange", loadingStateChange: "loadingStateChange", collectionLinksChange: "collectionLinksChange", selectionChange: "selectionChange" }, host: { properties: { "class.density-compact": "this.hostDensityCompactClass", "class.density-comfortable": "this.hostDensityComfortableClass", "class.density-spacious": "this.hostDensitySpaciousClass", "class.row-borders": "this.hostRowBordersClass", "class.col-borders": "this.hostColumnBordersClass" } }, providers: [
56550
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisTable, deps: [{ token: i0.ChangeDetectorRef }, { token: i3$3.SettingsPanelService }, { token: i1.GenericCrudService }, { token: TableDefaultsProvider }, { token: FilterConfigService }, { token: DataFormattingService }, { token: i6$2.PraxisDialog }, { token: i2$2.MatSnackBar }, { token: ASYNC_CONFIG_STORAGE }, { token: CONNECTION_STORAGE }, { token: i0.ElementRef }, { token: i1.GlobalConfigService }, { token: i0.Injector }, { token: i1.ComponentKeyService }, { token: i1.LoadingOrchestrator }, { token: i1.GlobalActionService }, { token: i1.EnterpriseRuntimeContextService, optional: true }, { token: PRAXIS_LOADING_RENDERER, optional: true }, { token: i6$1.ActivatedRoute, optional: true }, { token: i1.LoggerService, optional: true }, { token: AnalyticsTableStatsApiService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
56551
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PraxisTable, isStandalone: true, selector: "praxis-table", inputs: { config: "config", resourcePath: "resourcePath", data: "data", tableId: "tableId", componentInstanceId: "componentInstanceId", configPersistenceStrategy: "configPersistenceStrategy", title: "title", subtitle: "subtitle", icon: "icon", autoDelete: "autoDelete", notifyIfOutdated: "notifyIfOutdated", snoozeMs: "snoozeMs", autoOpenSettingsOnOutdated: "autoOpenSettingsOnOutdated", crudContext: "crudContext", filterCriteria: "filterCriteria", queryContext: "queryContext", aiContext: "aiContext", aiAssistantVoiceInputMode: "aiAssistantVoiceInputMode", aiAssistantVoiceLanguage: "aiAssistantVoiceLanguage", horizontalScroll: "horizontalScroll", enableCustomization: ["enableCustomization", "enableCustomization", booleanAttribute], authoringCapability: "authoringCapability", dense: "dense" }, outputs: { rowClick: "rowClick", widgetEvent: "widgetEvent", resourceEvent: "resourceEvent", rowDoubleClick: "rowDoubleClick", rowExpansionChange: "rowExpansionChange", rowAction: "rowAction", toolbarAction: "toolbarAction", bulkAction: "bulkAction", exportAction: "exportAction", columnReorder: "columnReorder", columnReorderAttempt: "columnReorderAttempt", columnResize: "columnResize", beforeDelete: "beforeDelete", afterDelete: "afterDelete", deleteError: "deleteError", beforeBulkDelete: "beforeBulkDelete", afterBulkDelete: "afterBulkDelete", bulkDeleteError: "bulkDeleteError", schemaStatusChange: "schemaStatusChange", configChange: "configChange", metadataChange: "metadataChange", loadingStateChange: "loadingStateChange", collectionLinksChange: "collectionLinksChange", selectionChange: "selectionChange" }, host: { properties: { "class.density-compact": "this.hostDensityCompactClass", "class.density-comfortable": "this.hostDensityComfortableClass", "class.density-spacious": "this.hostDensitySpaciousClass", "class.row-borders": "this.hostRowBordersClass", "class.col-borders": "this.hostColumnBordersClass" } }, providers: [
56410
56552
  providePraxisI18nConfig(RESOURCE_DISCOVERY_I18N_CONFIG),
56411
56553
  providePraxisI18nConfig(PRAXIS_TABLE_RUNTIME_I18N_CONFIG),
56412
56554
  MatPaginatorIntl,
@@ -56414,7 +56556,7 @@ class PraxisTable {
56414
56556
  TableDefaultsProvider,
56415
56557
  FilterConfigService,
56416
56558
  DataFormattingService
56417
- ], queries: [{ propertyName: "toolbar", first: true, predicate: PraxisTableToolbar, descendants: true }, { propertyName: "projectedFilter", first: true, predicate: ["projectedFilter"], descendants: true }], viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "materialTable", first: true, predicate: MatTable, descendants: true }, { propertyName: "internalFilter", first: true, predicate: PraxisFilter, descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (shouldShowEmptyState()) {\n <praxis-empty-state-card\n icon=\"link\"\n [title]=\"'Escolha o recurso da tabela'\"\n [description]=\"'Selecione um recurso da API para carregar colunas, registros e a\u00E7\u00F5es da tabela automaticamente.'\"\n [primaryAction]=\"{ label: 'Selecionar recurso', icon: 'bolt', action: openQuickConnect.bind(this) }\"\n ></praxis-empty-state-card>\n}\n\n<!-- Error State with Quick Connect CTA -->\n@if (isRemoteMode() && (schemaError || dataError)) {\n <div class=\"ptable-error\" role=\"alert\" aria-live=\"assertive\">\n <mat-icon color=\"warn\" aria-hidden=\"true\">error</mat-icon>\n <div class=\"ptable-error__content\">\n <praxis-rich-content\n rootClassName=\"ptable-error__title\"\n [nodes]=\"getTableChromeTextRichContentNodes('Erro', 'ptable-error__title-text')\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"ptable-error__message\"\n [nodes]=\"getTableChromeTextRichContentNodes(errorMessage || 'Ocorreu um erro ao carregar a tabela.', 'ptable-error__message-text')\"\n ></praxis-rich-content>\n </div>\n <button mat-flat-button color=\"primary\" (click)=\"openQuickConnect()\">\n <mat-icon>bolt</mat-icon>\n <praxis-rich-content\n rootClassName=\"ptable-error__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Selecionar recurso', 'ptable-error__action-label-text')\"\n ></praxis-rich-content>\n </button>\n @if (enableCustomization) {\n <button\n mat-icon-button\n color=\"primary\"\n data-role=\"table-settings\"\n data-testid=\"table-settings-trigger\"\n (click)=\"openTableSettings()\"\n [attr.aria-label]=\"getTableSettingsLabel()\"\n [matTooltip]=\"getTableSettingsLabel()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>settings</mat-icon>\n </button>\n }\n @if (!schemaError) {\n <button mat-stroked-button (click)=\"retryData()\">\n <praxis-rich-content\n rootClassName=\"ptable-error__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Tentar novamente', 'ptable-error__action-label-text')\"\n ></praxis-rich-content>\n </button>\n }\n @if (schemaError) {\n <button mat-stroked-button (click)=\"reloadSchema()\">\n <praxis-rich-content\n rootClassName=\"ptable-error__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Recarregar colunas', 'ptable-error__action-label-text')\"\n ></praxis-rich-content>\n </button>\n }\n </div>\n}\n\n<!-- Inline banner for schema change (only in edit mode) -->\n@if (shouldShowOutdatedInline()) {\n <div class=\"ptable-info-banner\" role=\"status\" aria-live=\"polite\">\n <praxis-rich-content\n rootClassName=\"text\"\n [nodes]=\"getTableChromeTextRichContentNodes('O schema do servidor mudou. Reconciliar agora?', 'ptable-info-banner__text')\"\n ></praxis-rich-content>\n <div class=\"actions\">\n <button mat-stroked-button color=\"primary\" (click)=\"onReconcileRequested()\">\n <mat-icon>sync</mat-icon>\n <praxis-rich-content\n rootClassName=\"ptable-info-banner__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Reconciliar', 'ptable-info-banner__action-label-text')\"\n ></praxis-rich-content>\n </button>\n <button mat-button (click)=\"onSnoozeOutdated()\">\n <praxis-rich-content\n rootClassName=\"ptable-info-banner__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Lembrar depois', 'ptable-info-banner__action-label-text')\"\n ></praxis-rich-content>\n </button>\n <button mat-button (click)=\"onIgnoreOutdated()\">\n <praxis-rich-content\n rootClassName=\"ptable-info-banner__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Ignorar', 'ptable-info-banner__action-label-text')\"\n ></praxis-rich-content>\n </button>\n </div>\n </div>\n}\n\n@if (isAiAssistantEnabled() && aiAssistantOpen && aiAssistantViewState) {\n <praxis-ai-assistant-shell\n [labels]=\"aiAssistantLabels\"\n [mode]=\"aiAssistantViewState.mode\"\n [state]=\"aiAssistantViewState.state\"\n [contextItems]=\"aiAssistantViewState.contextItems\"\n [attachments]=\"aiAssistantViewState.attachments\"\n [messages]=\"aiAssistantViewState.messages\"\n [quickReplies]=\"aiAssistantViewState.quickReplies\"\n [recommendedIntents]=\"getAiAssistantRecommendedIntents()\"\n [prompt]=\"aiAssistantPrompt\"\n [statusText]=\"aiAssistantViewState.statusText\"\n [errorText]=\"aiAssistantViewState.errorText\"\n [busy]=\"aiAssistantViewState.state === 'processing' || aiAssistantViewState.state === 'applying'\"\n [canApply]=\"aiAssistantViewState.canApply\"\n [showAttachAction]=\"false\"\n [enablePastedAttachments]=\"false\"\n [voiceInputMode]=\"aiAssistantVoiceInputMode\"\n [voiceLanguage]=\"aiAssistantVoiceLanguage\"\n [layout]=\"aiAssistantLayout\"\n testIdPrefix=\"table-ai-assistant\"\n panelTestId=\"table-ai-assistant-panel\"\n submitTestId=\"table-ai-assistant-submit\"\n applyTestId=\"table-ai-assistant-apply\"\n (promptChange)=\"onAiAssistantPromptChange($event)\"\n (submitPrompt)=\"onAiAssistantSubmit($event)\"\n (apply)=\"onAiAssistantApply()\"\n (retryTurn)=\"onAiAssistantRetry()\"\n (cancelTurn)=\"onAiAssistantCancel()\"\n (quickReply)=\"onAiAssistantQuickReply($event)\"\n (recommendedIntent)=\"onAiAssistantRecommendedIntent($event)\"\n (editMessage)=\"onAiAssistantEditMessage($event)\"\n (resendMessage)=\"onAiAssistantResendMessage($event)\"\n (layoutChange)=\"onAiAssistantLayoutChange($event)\"\n (close)=\"closeAiAssistant()\"\n ></praxis-ai-assistant-shell>\n}\n\n@if (shouldRenderDataSurface() && !schemaError && !dataError && toolbarV2) {\n <div class=\"praxis-table-header\" [class.edit-mode]=\"enableCustomization\" [class.stacked]=\"hasTopToolbarStack()\">\n @if (showToolbar && shouldShowToolbarTopPlacement()) {\n <praxis-table-toolbar\n class=\"praxis-toolbar-stack-top\"\n [config]=\"config\"\n [backgroundColor]=\"getToolbarActionsBackgroundColor()\"\n [style.--pfx-filter-h]=\"getToolbarLayoutHeightHostStyle()\"\n [evaluationContext]=\"getToolbarEvaluationContext()\"\n [columnVisibilityController]=\"toolbarColumnVisibilityController\"\n [showActionsGroup]=\"shouldShowToolbarActionsTop()\"\n [showMobileActions]=\"shouldShowToolbarActionsTop()\"\n [exportBusy]=\"exportBusy\"\n (toolbarAction)=\"onToolbarAction($event)\"\n (exportAction)=\"onExportAction($event)\"\n >\n @if (shouldRenderAdvancedFilter()) {\n <praxis-filter\n advancedFilter\n [resourcePath]=\"getAdvancedFilterResourcePath()\"\n [filterId]=\"tableId\"\n [formId]=\"tableId\"\n [persistenceKey]=\"getAdvancedFilterPersistenceKey()\"\n [fieldMetadata]=\"getAdvancedFilterFieldMetadata()\"\n [enableCustomization]=\"enableCustomization\"\n [value]=\"advancedFilterValue\"\n\n [alwaysVisibleFields]=\"getAdvancedFilterAlwaysVisibleFields()\"\n [alwaysVisibleFieldMetadataOverrides]=\"getAdvancedFilterAlwaysVisibleFieldMetadataOverrides()\"\n [selectedFieldIds]=\"config.behavior?.filtering?.advancedFilters?.settings?.selectedFieldIds ?? []\"\n [allowSaveTags]=\"config.behavior?.filtering?.advancedFilters?.settings?.allowSaveTags\"\n [changeDebounceMs]=\"config.behavior?.filtering?.advancedFilters?.settings?.changeDebounceMs ?? 300\"\n [i18n]=\"getFilterI18n()\"\n [mode]=\"'filter'\"\n [showFilterSettings]=\"enableCustomization\"\n (change)=\"onAdvancedFilterChange($event)\"\n (requestSearch)=\"onAdvancedFilterSubmit($event)\"\n (clear)=\"onAdvancedFilterClear()\"\n ></praxis-filter>\n }\n <ng-content select=\"[advancedFilter]\" />\n <ng-content select=\"[toolbar]\" />\n\n <!-- AI Assistant in Toolbar -->\n @if (shouldShowAiAssistantEntrypoint()) {\n <button\n end-actions\n mat-icon-button\n color=\"primary\"\n type=\"button\"\n class=\"praxis-table-ai-trigger praxis-table-toolbar-action--ai\"\n [class.praxis-table-ai-trigger--minimized]=\"hasMinimizedAiAssistantSession()\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('toolbar-top')\"\n (click)=\"openAiAssistant()\"\n [attr.aria-label]=\"aiAssistantTriggerLabel()\"\n [matBadge]=\"aiAssistantTriggerBadge()\"\n [matBadgeHidden]=\"!hasMinimizedAiAssistantSession()\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"aiAssistantTriggerTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>{{ aiAssistantTriggerIcon() }}</mat-icon>\n </button>\n }\n\n @if (enableCustomization) {\n <button end-actions mat-icon-button color=\"primary\" class=\"praxis-table-toolbar-action--configuration\" data-role=\"table-settings\" data-testid=\"table-settings-trigger\"\n (click)=\"openTableSettings()\" [attr.aria-label]=\"getTableSettingsLabel()\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"getTableSettingsTooltip()\"\n matTooltipPosition=\"below\">\n <mat-icon>settings</mat-icon>\n </button>\n }\n </praxis-table-toolbar>\n }\n @if (!showToolbar && enableCustomization) {\n <div class=\"ptable-header-actions\">\n @if (shouldShowAiAssistantEntrypoint()) {\n <button\n mat-icon-button\n color=\"primary\"\n type=\"button\"\n class=\"praxis-table-ai-trigger praxis-table-toolbar-action--ai\"\n [class.praxis-table-ai-trigger--minimized]=\"hasMinimizedAiAssistantSession()\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('header-top')\"\n (click)=\"openAiAssistant()\"\n [attr.aria-label]=\"aiAssistantTriggerLabel()\"\n [matBadge]=\"aiAssistantTriggerBadge()\"\n [matBadgeHidden]=\"!hasMinimizedAiAssistantSession()\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"aiAssistantTriggerTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>{{ aiAssistantTriggerIcon() }}</mat-icon>\n </button>\n }\n <button mat-icon-button color=\"primary\" class=\"praxis-table-toolbar-action--configuration\" data-role=\"table-settings\" data-testid=\"table-settings-trigger\" (click)=\"openTableSettings()\" [attr.aria-label]=\"getTableSettingsLabel()\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"getTableSettingsTooltip()\"\n matTooltipPosition=\"below\">\n <mat-icon>settings</mat-icon>\n </button>\n @if (isRemoteMode()) {\n <button mat-icon-button (click)=\"disconnect()\" [attr.aria-label]=\"getDisconnectLabel()\" [matTooltip]=\"getDisconnectTooltip()\">\n <mat-icon>link_off</mat-icon>\n </button>\n }\n </div>\n }\n </div>\n} @else {\n @if (shouldRenderDataSurface() && !schemaError && !dataError) {\n @if (showToolbar && shouldShowToolbarTopPlacement()) {\n <praxis-table-toolbar\n class=\"praxis-toolbar-stack-top\"\n [config]=\"config\"\n [backgroundColor]=\"getToolbarActionsBackgroundColor()\"\n [style.--pfx-filter-h]=\"getToolbarLayoutHeightHostStyle()\"\n [evaluationContext]=\"getToolbarEvaluationContext()\"\n [showActionsGroup]=\"shouldShowToolbarActionsTop()\"\n [showMobileActions]=\"shouldShowToolbarActionsTop()\"\n [exportBusy]=\"exportBusy\"\n (toolbarAction)=\"onToolbarAction($event)\"\n (exportAction)=\"onExportAction($event)\"\n >\n @if (shouldRenderAdvancedFilter()) {\n <praxis-filter\n advancedFilter\n [resourcePath]=\"getAdvancedFilterResourcePath()\"\n [filterId]=\"tableId\"\n [formId]=\"tableId\"\n [persistenceKey]=\"getAdvancedFilterPersistenceKey()\"\n [fieldMetadata]=\"getAdvancedFilterFieldMetadata()\"\n [enableCustomization]=\"enableCustomization\"\n [value]=\"advancedFilterValue\"\n\n [alwaysVisibleFields]=\"getAdvancedFilterAlwaysVisibleFields()\"\n [alwaysVisibleFieldMetadataOverrides]=\"getAdvancedFilterAlwaysVisibleFieldMetadataOverrides()\"\n [selectedFieldIds]=\"config.behavior?.filtering?.advancedFilters?.settings?.selectedFieldIds ?? []\"\n [allowSaveTags]=\"config.behavior?.filtering?.advancedFilters?.settings?.allowSaveTags\"\n [changeDebounceMs]=\"config.behavior?.filtering?.advancedFilters?.settings?.changeDebounceMs ?? 300\"\n [i18n]=\"getFilterI18n()\"\n [mode]=\"'filter'\"\n [showFilterSettings]=\"enableCustomization\"\n (change)=\"onAdvancedFilterChange($event)\"\n (requestSearch)=\"onAdvancedFilterSubmit($event)\"\n (clear)=\"onAdvancedFilterClear()\"\n ></praxis-filter>\n }\n <ng-content select=\"[advancedFilter]\" />\n <ng-content select=\"[toolbar]\" />\n @if (shouldShowAiAssistantEntrypoint()) {\n <button\n end-actions\n mat-icon-button\n color=\"primary\"\n type=\"button\"\n class=\"praxis-table-ai-trigger praxis-table-toolbar-action--ai\"\n [class.praxis-table-ai-trigger--minimized]=\"hasMinimizedAiAssistantSession()\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('toolbar-stacked')\"\n (click)=\"openAiAssistant()\"\n [attr.aria-label]=\"aiAssistantTriggerLabel()\"\n [matBadge]=\"aiAssistantTriggerBadge()\"\n [matBadgeHidden]=\"!hasMinimizedAiAssistantSession()\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"aiAssistantTriggerTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>{{ aiAssistantTriggerIcon() }}</mat-icon>\n </button>\n }\n @if (enableCustomization) {\n <button end-actions mat-icon-button color=\"primary\" class=\"praxis-table-toolbar-action--configuration\" data-role=\"table-settings\" data-testid=\"table-settings-trigger\"\n (click)=\"openTableSettings()\" [attr.aria-label]=\"getTableSettingsLabel()\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"getTableSettingsTooltip()\"\n matTooltipPosition=\"below\">\n <mat-icon>settings</mat-icon>\n </button>\n }\n </praxis-table-toolbar>\n }\n @if (!showToolbar && enableCustomization) {\n <div class=\"ptable-header-actions\">\n @if (shouldShowAiAssistantEntrypoint()) {\n <button\n mat-icon-button\n color=\"primary\"\n type=\"button\"\n class=\"praxis-table-ai-trigger praxis-table-toolbar-action--ai\"\n [class.praxis-table-ai-trigger--minimized]=\"hasMinimizedAiAssistantSession()\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('header-stacked')\"\n (click)=\"openAiAssistant()\"\n [attr.aria-label]=\"aiAssistantTriggerLabel()\"\n [matBadge]=\"aiAssistantTriggerBadge()\"\n [matBadgeHidden]=\"!hasMinimizedAiAssistantSession()\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"aiAssistantTriggerTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>{{ aiAssistantTriggerIcon() }}</mat-icon>\n </button>\n }\n <button mat-icon-button color=\"primary\" class=\"praxis-table-toolbar-action--configuration\" data-role=\"table-settings\" data-testid=\"table-settings-trigger\" (click)=\"openTableSettings()\" [attr.aria-label]=\"getTableSettingsLabel()\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"getTableSettingsTooltip()\"\n matTooltipPosition=\"below\">\n <mat-icon>settings</mat-icon>\n </button>\n </div>\n }\n }\n}\n<!-- Paginador superior -->\n@if (shouldRenderDataSurface() && !schemaError && !dataError && getPaginationEnabled() && (config.behavior?.pagination?.position === 'top' || config.behavior?.pagination?.position === 'both')) {\n <mat-paginator\n [length]=\"getPaginationLength()\"\n [pageSize]=\"getPaginationPageSize()\"\n [pageSizeOptions]=\"getPaginationPageSizeOptions()\"\n [selectConfig]=\"paginatorSelectConfig\"\n [showFirstLastButtons]=\"getPaginationShowFirstLast()\"\n (page)=\"onPageChange($event)\"\n [class.compact]=\"config.behavior?.pagination?.style === 'compact'\"\n >\n </mat-paginator>\n}\n<div class=\"px-scroll-viewport\"\n cdkScrollable\n [class.scroll-auto]=\"horizontalScroll === 'auto'\"\n [class.scroll-wrap]=\"horizontalScroll === 'wrap'\"\n [class.scroll-none]=\"horizontalScroll === 'none'\">\n\n @if (shouldRenderDataSurface() && !schemaError && !dataError) {\n <div class=\"praxis-visually-hidden-status\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ columnReorderStatusMessage }}\n </div>\n @if (exportStatusMessage) {\n <div class=\"praxis-visually-hidden-status\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ exportStatusMessage }}\n </div>\n }\n @if (columnReorderVisualStatusMessage) {\n <div class=\"praxis-column-reorder-status\" role=\"note\">\n {{ columnReorderVisualStatusMessage }}\n </div>\n }\n <table\n mat-table\n data-testid=\"table-column-drag-drop-list\"\n [dataSource]=\"dataSource\"\n [multiTemplateDataRows]=\"isRowExpansionRuntimeEnabled()\"\n cdkDropList\n [cdkDropListDisabled]=\"!isColumnDraggingEnabled() || isColumnResizeActive()\"\n [cdkDropListData]=\"visibleDataColumnsForDrag\"\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"onColumnDrop($event)\"\n matSort\n (matSortChange)=\"onSortChange($event)\"\n [matSortDisabled]=\"!getSortingEnabled() || isColumnResizeActive()\"\n [ngClass]=\"getTableElevationClassName()\"\n [class.table-stack-top]=\"hasTopToolbarStack()\"\n [class.pfx-column-drag-enabled]=\"isColumnDraggingEnabled()\"\n [class.pfx-column-drag-indicator]=\"isColumnDragIndicatorEnabled()\"\n [class.pfx-column-resize-enabled]=\"isColumnResizeEnabled()\"\n [class.pfx-column-resizing]=\"isColumnResizeActive()\"\n [style.width]=\"getColumnResizeTableWidthStyle()\"\n [style.min-width]=\"getColumnResizeTableWidthStyle()\"\n [style.max-width]=\"getColumnResizeTableWidthStyle()\"\n >\n @if (isSelectionColumnEnabled()) {\n <ng-container\n matColumnDef=\"_select\"\n >\n <th mat-header-cell *matHeaderCellDef>\n @if (canSelectAll()) {\n <mat-checkbox\n (change)=\"masterToggle()\"\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\n [attr.aria-label]=\"getMasterSelectionAriaLabel()\"\n ></mat-checkbox>\n }\n </th>\n <td mat-cell *matCellDef=\"let row; let i = index\">\n @if (config.behavior?.selection?.type !== 'multiple') {\n <mat-radio-button\n (click)=\"$event.stopPropagation(); toggleRow(row)\"\n [checked]=\"selection.isSelected(row)\"\n [attr.aria-label]=\"getRowSelectionAriaLabel(row, i)\"\n ></mat-radio-button>\n } @else {\n <mat-checkbox\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleRow(row)\"\n [checked]=\"selection.isSelected(row)\"\n [attr.aria-label]=\"getRowSelectionAriaLabel(row, i)\"\n ></mat-checkbox>\n }\n </td>\n </ng-container>\n }\n\n @if (isRowExpansionRuntimeEnabled()) {\n <ng-container matColumnDef=\"_expander\">\n <th mat-header-cell *matHeaderCellDef class=\"pfx-expansion-col-header\">\n <span class=\"praxis-visually-hidden-status\">Expandir detalhes da linha</span>\n </th>\n <td mat-cell *matCellDef=\"let row; let i = index\" class=\"pfx-expansion-col-cell\">\n <button\n mat-icon-button\n class=\"pfx-expansion-toggle\"\n [disabled]=\"!isRowExpandable(row, i) || !isExpansionIconTriggerEnabled()\"\n [attr.aria-expanded]=\"isRowExpanded(row, i) ? 'true' : 'false'\"\n [attr.aria-controls]=\"getRowExpansionDetailId(row, i)\"\n [attr.aria-label]=\"getRowExpansionToggleAriaLabel(row, i)\"\n (click)=\"onExpansionToggleFromIcon(row, i, $event)\"\n (keydown)=\"onExpansionToggleKeydown($event, row, i)\"\n >\n <mat-icon [praxisIcon]=\"isRowExpanded(row, i)\n ? getExpansionExpandedIcon()\n : getExpansionCollapsedIcon()\"></mat-icon>\n </button>\n </td>\n </ng-container>\n }\n @for (column of visibleColumns; track column.field) {\n <ng-container\n [matColumnDef]=\"column.field\"\n [sticky]=\"column.sticky === true || column.sticky === 'start'\"\n [stickyEnd]=\"column.sticky === 'end'\"\n >\n <th\n mat-header-cell\n *matHeaderCellDef\n cdkDrag\n [cdkDragData]=\"column\"\n cdkDragLockAxis=\"x\"\n cdkDragPreviewClass=\"pfx-column-drag-preview\"\n (cdkDragStarted)=\"onColumnDragStarted(column)\"\n (cdkDragEnded)=\"onColumnDragEnded($event, column)\"\n [cdkDragDisabled]=\"!isColumnDraggingEnabled() || !isColumnDraggable(column) || isColumnResizeActive()\"\n [class.praxis-header-draggable]=\"isColumnDraggingEnabled() && isColumnDraggable(column)\"\n [class.praxis-header-resizable]=\"isColumnResizable(column)\"\n [class.praxis-header-resizing]=\"isColumnResizeActive(column)\"\n [class.praxis-header-align-left]=\"column.align === 'left'\"\n [class.praxis-header-align-center]=\"column.align === 'center'\"\n [class.praxis-header-align-right]=\"column.align === 'right'\"\n [style.text-align]=\"getColumnTextAlignStyle(column)\"\n [style.width]=\"getColumnWidthStyle(column)\"\n [attr.style]=\"getColumnHeaderAttrStyle(column)\"\n [ngStyle]=\"getColumnHeaderNgStyle(column)\"\n >\n <span\n class=\"praxis-header-sort-trigger\"\n [mat-sort-header]=\"column.field\"\n [disabled]=\"!getSortingEnabled() || column.sortable === false || isColumnResizeActive()\"\n (keydown)=\"onColumnHeaderReorderKeydown($event, column)\"\n >\n <span class=\"praxis-header-label\" data-testid=\"column-header-label\">\n <span class=\"praxis-header-label-text\">{{ column.header }}</span>\n </span>\n </span>\n <ng-template cdkDragPreview [matchSize]=\"true\">\n <div\n class=\"pfx-column-drag-preview pfx-column-drag-preview-custom\"\n [class.praxis-header-align-left]=\"column.align === 'left'\"\n [class.praxis-header-align-center]=\"column.align === 'center'\"\n [class.praxis-header-align-right]=\"column.align === 'right'\"\n [style.text-align]=\"getColumnTextAlignStyle(column)\"\n >\n <span class=\"praxis-header-label\">\n <span class=\"praxis-header-label-text\">{{ column.header }}</span>\n </span>\n </div>\n </ng-template>\n @if (isColumnResizable(column)) {\n <span\n class=\"praxis-column-resize-handle\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n tabindex=\"0\"\n [attr.aria-label]=\"getColumnResizeHandleAriaLabel(column)\"\n [attr.aria-valuemin]=\"getColumnResizeMinWidthAriaValue(column)\"\n [attr.aria-valuemax]=\"getColumnResizeMaxWidthAriaValue(column)\"\n [attr.aria-valuenow]=\"getColumnResizeCurrentWidthAriaValue(column)\"\n [attr.title]=\"getColumnResizeHandleTooltip(column)\"\n (pointerdown)=\"onColumnResizePointerDown($event, column)\"\n (keydown)=\"onColumnResizeHandleKeydown($event, column)\"\n (click)=\"onColumnResizeHandleClick($event)\"\n ></span>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n [style.text-align]=\"getColumnTextAlignStyle(column)\"\n [style.width]=\"getColumnWidthStyle(column)\"\n [attr.style]=\"getColumnCellAttrStyle(column)\"\n [ngClass]=\"getCellClasses(element, column)\"\n [ngStyle]=\"getCellNgStyle(element, column)\"\n [matTooltip]=\"getCellTooltip(element, column) || ''\"\n [matTooltipPosition]=\"getCellTooltipPosition(element, column)\"\n [matTooltipDisabled]=\"!getCellTooltip(element, column)\"\n [attr.title]=\"getCellTooltip(element, column) || null\"\n >\n <div\n class=\"pfx-cell-content\"\n [ngClass]=\"getCellContentClasses(element, column)\"\n [ngStyle]=\"getCellContentNgStyle(element, column)\"\n >\n @switch (getEffectiveRendererType(element, column)) {\n <!-- Icon renderer -->\n @case ('icon') {\n <span\n class=\"pfx-icon-renderer\"\n [style.color]=\"getIconColor(element, column) || null\"\n [ngStyle]=\"getIconStyle(element, column)\"\n [attr.aria-label]=\"getIconAriaLabel(element, column) || null\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-icon-renderer__content\"\n [nodes]=\"getIconRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </span>\n }\n <!-- Image renderer -->\n @case ('image') {\n <span class=\"pfx-cell-image\">\n <praxis-rich-content\n rootClassName=\"pfx-cell-image__content\"\n [nodes]=\"getImageRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </span>\n }\n <!-- Badge renderer -->\n @case ('badge') {\n @if (shouldRenderBadge(element, column)) {\n <span class=\"pfx-badge\" [ngClass]=\"getBadgeClasses(element, column)\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-badge__content\"\n [nodes]=\"getBadgeRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </span>\n }\n }\n <!-- Link renderer -->\n @case ('link') {\n <a\n class=\"pfx-link\"\n [attr.href]=\"getLinkHref(element, column) || null\"\n [attr.target]=\"getLinkTarget(element, column) || null\"\n [attr.rel]=\"getLinkRel(element, column) || null\"\n (click)=\"$event.stopPropagation()\"\n ><praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-link__content\"\n [nodes]=\"getLinkRichContentNodes(element, column)\"\n ></praxis-rich-content></a\n >\n }\n <!-- Button renderer -->\n @case ('button') {\n @switch (getButtonVariant(element, column)) {\n @case ('outlined') {\n <button\n mat-stroked-button\n [color]=\"getButtonColor(element, column) || null\"\n [disabled]=\"isButtonDisabled(element, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(element, column) || getButtonLabel(element, column)\"\n (click)=\"onButtonClick(element, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </button>\n }\n @case ('text') {\n <button\n mat-button\n [color]=\"getButtonColor(element, column) || null\"\n [disabled]=\"isButtonDisabled(element, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(element, column) || getButtonLabel(element, column)\"\n (click)=\"onButtonClick(element, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </button>\n }\n @default {\n <button\n mat-flat-button\n [color]=\"getButtonColor(element, column) || null\"\n [disabled]=\"isButtonDisabled(element, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(element, column) || getButtonLabel(element, column)\"\n (click)=\"onButtonClick(element, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </button>\n }\n }\n }\n <!-- Chip renderer -->\n @case ('chip') {\n @if (shouldRenderChip(element, column)) {\n <span class=\"pfx-chip\" [ngClass]=\"getChipClasses(element, column)\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-chip__content\"\n [nodes]=\"getChipRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </span>\n }\n }\n <!-- Progress renderer -->\n @case ('progress') {\n <div class=\"pfx-progress\">\n <praxis-rich-content\n rootClassName=\"pfx-progress__content\"\n [context]=\"getProgressRichContentContext(element, column)\"\n [nodes]=\"getProgressRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </div>\n }\n <!-- Micro visualization renderer -->\n @case ('microVisualization') {\n <span class=\"pfx-micro-viz-cell\" [innerHTML]=\"getMicroVisualizationHtml(element, column)\"></span>\n }\n <!-- Avatar renderer -->\n @case ('avatar') {\n <span class=\"pfx-avatar-renderer\"\n [ngStyle]=\"getAvatarStyle(element, column)\"\n [class.shape-rounded]=\"getAvatarShape(element, column) === 'rounded'\"\n [class.shape-circle]=\"getAvatarShape(element, column) === 'circle'\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-avatar-renderer__content\"\n [nodes]=\"getAvatarRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </span>\n }\n <!-- Toggle renderer -->\n @case ('toggle') {\n <mat-slide-toggle\n [checked]=\"getToggleState(element, column)\"\n [disabled]=\"isToggleDisabled(element, column)\"\n [attr.aria-label]=\"getToggleAriaLabel(element, column) || 'Alternar'\"\n (change)=\"onToggleChange(element, column, $event)\"\n (click)=\"$event.stopPropagation()\"\n ></mat-slide-toggle>\n }\n <!-- Menu renderer -->\n @case ('menu') {\n <button mat-icon-button [matMenuTriggerFor]=\"menuRef\" (click)=\"$event.stopPropagation()\" [attr.aria-label]=\"getMenuAriaLabel(element, column) || 'Menu'\">\n <praxis-rich-content rootClassName=\"pfx-menu-trigger__content\" [nodes]=\"getMenuTriggerRichContentNodes()\"></praxis-rich-content>\n </button>\n <mat-menu #menuRef=\"matMenu\">\n @for (it of getMenuItems(element, column); track it.id) {\n <button mat-menu-item (click)=\"onMenuItemClick(it, element, $event)\" [disabled]=\"!it.__visible\" >\n <praxis-rich-content\n rootClassName=\"pfx-menu-item__content\"\n [nodes]=\"getMenuItemRichContentNodes(it)\"\n ></praxis-rich-content>\n </button>\n }\n </mat-menu>\n }\n <!-- Rating renderer -->\n @case ('rating') {\n <praxis-table-rating\n class=\"pfx-rating-cell\"\n [itemsCount]=\"getRatingMax(element, column)\"\n [value]=\"getRatingValue(element, column)\"\n [size]=\"getRatingSize(element, column)\"\n [ratingColor]=\"getRatingColor(element, column)\"\n [outlineColor]=\"getRatingOutlineColor(element, column)\"\n [ariaLabel]=\"getRatingAriaLabel(element, column) || column.header\">\n </praxis-table-rating>\n }\n <!-- HTML renderer (sanitizado) -->\n @case ('html') {\n <span [innerHTML]=\"getSafeHtml(element, column)\"></span>\n }\n <!-- Compose renderer -->\n @case ('compose') {\n <span class=\"pfx-cell-compose\" [ngClass]=\"getComposeClasses(element, column)\" [ngStyle]=\"getComposeGapStyle(element, column)\">\n @for (it of getComposeItems(element, column); track trackComposeItem($index, it)) {\n @switch (getItemEffectiveType(element, column, it)) {\n <!-- Reuse helpers by projecting item as faux column -->\n @case ('icon') {\n <span class=\"pfx-icon-renderer\" [style.color]=\"getIconColor(element, asItemColumn(column, it)) || null\" [ngStyle]=\"getIconStyle(element, asItemColumn(column, it))\" [attr.aria-label]=\"getIconAriaLabel(element, asItemColumn(column, it)) || null\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-icon-renderer__content\" [nodes]=\"getIconRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></span>\n }\n @case ('image') {\n <span class=\"pfx-cell-image\"><praxis-rich-content rootClassName=\"pfx-cell-image__content\" [nodes]=\"getImageRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></span>\n }\n @case ('badge') {\n @if (shouldRenderBadge(element, asItemColumn(column, it))) {\n <span class=\"pfx-badge\" [ngClass]=\"getBadgeClasses(element, asItemColumn(column, it))\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-badge__content\" [nodes]=\"getBadgeRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></span>\n }\n }\n @case ('link') {\n <a class=\"pfx-link\" [attr.href]=\"getLinkHref(element, asItemColumn(column, it)) || null\" [attr.target]=\"getLinkTarget(element, asItemColumn(column, it)) || null\" [attr.rel]=\"getLinkRel(element, asItemColumn(column, it)) || null\" (click)=\"$event.stopPropagation()\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-link__content\" [nodes]=\"getLinkRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></a>\n }\n @case ('button') {\n @switch (getButtonVariant(element, asItemColumn(column, it))) {\n @case ('outlined') {\n <button mat-stroked-button [color]=\"getButtonColor(element, asItemColumn(column, it)) || null\" [disabled]=\"isButtonDisabled(element, asItemColumn(column, it))\" [attr.aria-label]=\"getButtonAriaLabel(element, asItemColumn(column, it)) || getButtonLabel(element, asItemColumn(column, it))\" (click)=\"onButtonClick(element, asItemColumn(column, it), $event)\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-button-renderer__content\" [nodes]=\"getButtonRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></button>\n }\n @case ('text') {\n <button mat-button [color]=\"getButtonColor(element, asItemColumn(column, it)) || null\" [disabled]=\"isButtonDisabled(element, asItemColumn(column, it))\" [attr.aria-label]=\"getButtonAriaLabel(element, asItemColumn(column, it)) || getButtonLabel(element, asItemColumn(column, it))\" (click)=\"onButtonClick(element, asItemColumn(column, it), $event)\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-button-renderer__content\" [nodes]=\"getButtonRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></button>\n }\n @default {\n <button mat-flat-button [color]=\"getButtonColor(element, asItemColumn(column, it)) || null\" [disabled]=\"isButtonDisabled(element, asItemColumn(column, it))\" [attr.aria-label]=\"getButtonAriaLabel(element, asItemColumn(column, it)) || getButtonLabel(element, asItemColumn(column, it))\" (click)=\"onButtonClick(element, asItemColumn(column, it), $event)\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-button-renderer__content\" [nodes]=\"getButtonRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></button>\n }\n }\n }\n @case ('chip') {\n @if (shouldRenderChip(element, asItemColumn(column, it))) {\n <span class=\"pfx-chip\" [ngClass]=\"getChipClasses(element, asItemColumn(column, it))\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-chip__content\" [nodes]=\"getChipRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></span>\n }\n }\n @case ('progress') {\n <div class=\"pfx-progress\">\n <praxis-rich-content\n rootClassName=\"pfx-progress__content\"\n [context]=\"getProgressRichContentContext(element, asItemColumn(column, it))\"\n [nodes]=\"getProgressRichContentNodes(element, asItemColumn(column, it))\"\n ></praxis-rich-content>\n </div>\n }\n @case ('microVisualization') {\n <span class=\"pfx-micro-viz-cell\" [innerHTML]=\"getMicroVisualizationHtml(element, asItemColumn(column, it))\"></span>\n }\n @case ('avatar') {\n <span class=\"pfx-avatar-renderer\" [ngStyle]=\"getAvatarStyle(element, asItemColumn(column, it))\" [class.shape-rounded]=\"getAvatarShape(element, asItemColumn(column, it)) === 'rounded'\" [class.shape-circle]=\"getAvatarShape(element, asItemColumn(column, it)) === 'circle'\"><praxis-rich-content rootClassName=\"pfx-avatar-renderer__content\" [nodes]=\"getAvatarRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></span>\n }\n @case ('toggle') {\n <mat-slide-toggle [checked]=\"getToggleState(element, asItemColumn(column, it))\" [disabled]=\"isToggleDisabled(element, asItemColumn(column, it))\" [attr.aria-label]=\"getToggleAriaLabel(element, asItemColumn(column, it)) || 'Alternar'\" (change)=\"onToggleChange(element, asItemColumn(column, it), $event)\" (click)=\"$event.stopPropagation()\"></mat-slide-toggle>\n }\n @case ('menu') {\n <button mat-icon-button [matMenuTriggerFor]=\"menuRef\" (click)=\"$event.stopPropagation()\" [attr.aria-label]=\"getMenuAriaLabel(element, asItemColumn(column, it)) || 'Menu'\"><praxis-rich-content rootClassName=\"pfx-menu-trigger__content\" [nodes]=\"getMenuTriggerRichContentNodes()\"></praxis-rich-content></button>\n <mat-menu #menuRef=\"matMenu\">\n @for (mi of getMenuItems(element, asItemColumn(column, it)); track mi.id) {\n <button mat-menu-item (click)=\"onMenuItemClick(mi, element, $event)\" [disabled]=\"!mi.__visible\">\n <praxis-rich-content\n rootClassName=\"pfx-menu-item__content\"\n [nodes]=\"getMenuItemRichContentNodes(mi)\"\n ></praxis-rich-content>\n </button>\n }\n </mat-menu>\n }\n @case ('rating') {\n <praxis-table-rating\n class=\"pfx-rating-cell\"\n [itemsCount]=\"getRatingMax(element, asItemColumn(column, it))\"\n [value]=\"getRatingValue(element, asItemColumn(column, it))\"\n [size]=\"getRatingSize(element, asItemColumn(column, it))\"\n [ratingColor]=\"getRatingColor(element, asItemColumn(column, it))\"\n [outlineColor]=\"getRatingOutlineColor(element, asItemColumn(column, it))\"\n [ariaLabel]=\"getRatingAriaLabel(element, asItemColumn(column, it)) || column.header\">\n </praxis-table-rating>\n }\n @case ('html') {\n <span [innerHTML]=\"getSafeHtml(element, asItemColumn(column, it))\"></span>\n }\n <!-- Value item: render base cell text alongside visuals -->\n @case ('value') {\n <span class=\"pfx-cell-value\">{{ getComposeItemValue(element, column, it) }}</span>\n }\n }\n }\n </span>\n }\n <!-- Default text rendering -->\n @default {\n {{ getCellValue(element, column) }}\n }\n }\n </div>\n </td>\n </ng-container>\n }\n @if (config.actions?.row?.enabled) {\n <ng-container matColumnDef=\"_actions\" [sticky]=\"config.actions?.row?.sticky === true || config.actions?.row?.sticky === 'start'\" [stickyEnd]=\"config.actions?.row?.sticky === 'end'\">\n <th mat-header-cell *matHeaderCellDef #actionsHeaderCell [style.width]=\"getRowActionsWidthStyle()\" class=\"praxis-actions-header\" [class.align-start]=\"getActionsHeaderAlign() === 'start'\" [class.align-center]=\"getActionsHeaderAlign() === 'center'\" [class.align-end]=\"getActionsHeaderAlign() === 'end'\">\n <div class=\"praxis-actions-header__content\" [matTooltip]=\"getActionsHeaderTooltip() || ''\" [matTooltipDisabled]=\"!getActionsHeaderTooltip()\">\n <praxis-rich-content\n rootClassName=\"praxis-actions-header__nodes\"\n [nodes]=\"getActionsHeaderRichContentNodes()\"\n ></praxis-rich-content>\n </div>\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"praxis-actions-cell\"\n [class.dense]=\"dense\"\n [style.width]=\"getRowActionsWidthStyle()\"\n >\n <div\n class=\"praxis-actions-cell__content\"\n [class.praxis-actions-cell__content--discovering]=\"isRowDiscoveryPending(row)\"\n [attr.aria-busy]=\"isRowDiscoveryPending(row) ? 'true' : null\"\n >\n <!-- A\u00C3\u00A7\u00C3\u00B5es inline -->\n <!-- Inline actions: icons mode -->\n @if (config.actions?.row?.display === 'icons' || !config.actions?.row?.display) {\n @for (a of getInlineRowActions(row); track trackAction($index, a)) {\n <span\n class=\"praxis-row-action-anchor\"\n [class.praxis-row-action-anchor--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-action-anchor--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [matTooltip]=\"getActionTooltip(a, row)\"\n [matTooltipDisabled]=\"!getActionTooltip(a, row)\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"praxis-tooltip\"\n >\n <button\n mat-icon-button\n class=\"praxis-icon-btn\"\n [class.praxis-icon-btn--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-icon-btn--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [disabled]=\"isActionDisabled(a, row)\"\n (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\"\n [attr.aria-label]=\"a.label || getActionId(a)\"\n [color]=\"a.color || null\"\n >\n <praxis-rich-content\n layout=\"inline\"\n rootClassName=\"praxis-row-action__content\"\n [nodes]=\"getRowActionIconRichContentNodes(a)\"\n ></praxis-rich-content>\n </button>\n </span>\n }\n }\n\n <!-- Inline actions: buttons mode (show label + icon) -->\n @if (config.actions?.row?.display === 'buttons') {\n @for (a of getInlineRowActions(row); track trackAction($index, a)) {\n <span\n class=\"praxis-row-action-anchor\"\n [class.praxis-row-action-anchor--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-action-anchor--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [matTooltip]=\"getActionTooltip(a, row)\"\n [matTooltipDisabled]=\"!getActionTooltip(a, row)\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"praxis-tooltip\"\n >\n <button\n mat-flat-button\n class=\"praxis-row-btn\"\n [class.praxis-row-btn--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-btn--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [disabled]=\"isActionDisabled(a, row)\"\n (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\"\n [attr.aria-label]=\"a.label || getActionId(a)\"\n [color]=\"a.color || null\"\n >\n <praxis-rich-content\n layout=\"inline\"\n rootClassName=\"praxis-row-action__content\"\n [nodes]=\"getRowActionRichContentNodes(a)\"\n ></praxis-rich-content>\n </button>\n </span>\n }\n }\n\n <!-- Menu de overflow -->\n @if (hasOverflowRowActions(row)) {\n <button\n mat-icon-button\n class=\"praxis-icon-btn praxis-more-btn\"\n [matMenuTriggerFor]=\"rowMoreMenu\"\n (menuOpened)=\"onRowOverflowMenuOpened(row)\"\n [color]=\"getRowMenuButtonColor() || null\"\n [attr.aria-label]=\"getRowMenuTooltip(row)\"\n [matTooltip]=\"getRowMenuTooltip(row)\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"getRowMenuIcon()\"></mat-icon>\n </button>\n }\n <mat-menu #rowMoreMenu=\"matMenu\" xPosition=\"before\">\n @if (hasRowOverflowMenuLoadingState(row)) {\n <button mat-menu-item disabled>\n <mat-icon>hourglass_empty</mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(getRowOverflowMenuLoadingLabel(), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n @for (a of getOverflowRowActions(row); track trackAction($index, a)) {\n <button\n mat-menu-item\n (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\"\n [disabled]=\"isActionDisabled(a, row)\"\n >\n <mat-icon [color]=\"a.color || null\" [praxisIcon]=\"a.icon\"></mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(a.label || getActionId(a), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n @if (hasRowOverflowMenuEmptyState(row)) {\n <button mat-menu-item disabled>\n <mat-icon>info</mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(getRowOverflowMenuEmptyLabel(row), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n </mat-menu>\n </div>\n </td>\n </ng-container>\n }\n\n <tr\n mat-header-row\n *matHeaderRowDef=\"displayedColumns\"\n ></tr>\n @if (!isVirtualized()) {\n <tr\n mat-row\n *matRowDef=\"let row; let i = index; columns: displayedColumns\"\n [class.pfx-row-selected]=\"selection.isSelected(row)\"\n [class.pfx-row-click-selectable]=\"isRowClickSelectable()\"\n [class.pfx-row-expanded]=\"isRowExpansionRuntimeEnabled() && isRowExpanded(row, i)\"\n [attr.aria-selected]=\"config.behavior?.selection?.enabled ? (selection.isSelected(row) ? 'true' : 'false') : null\"\n [attr.aria-expanded]=\"isRowExpansionRuntimeEnabled() ? (isRowExpanded(row, i) ? 'true' : 'false') : null\"\n [ngClass]=\"getRowClasses(row)\"\n [ngStyle]=\"getRowNgStyle(row)\"\n [matTooltip]=\"getRowTooltip(row) || null\"\n [matTooltipDisabled]=\"!getRowTooltip(row)\"\n [matTooltipPosition]=\"getRowTooltipPosition(row)\"\n [matTooltipShowDelay]=\"getRowTooltipShowDelay(row)\"\n (click)=\"onRowClicked(row, i, $event)\"\n (dblclick)=\"onRowDoubleClicked(row, i)\"\n ></tr>\n @if (isRowExpansionRuntimeEnabled()) {\n <ng-container matColumnDef=\"_detail\">\n <td\n mat-cell\n *matCellDef=\"let row; let i = index\"\n class=\"pfx-expansion-detail-cell\"\n [attr.colspan]=\"displayedColumns.length\"\n >\n <section\n class=\"pfx-expansion-detail-panel\"\n [ngClass]=\"getExpansionMotionPresetClass()\"\n [ngStyle]=\"getExpansionMotionStyle()\"\n [attr.id]=\"getRowExpansionDetailId(row, i)\"\n role=\"region\"\n [attr.aria-label]=\"getRowExpansionRegionAriaLabel(row, i)\"\n [attr.aria-busy]=\"getExpansionDetailViewState(row, i).status === 'loading' ? 'true' : 'false'\"\n >\n @let detailState = getExpansionDetailViewState(row, i);\n @if (detailState.status === 'loading') {\n <div class=\"pfx-expansion-detail-message\" role=\"status\" aria-live=\"polite\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-detail-message__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Carregando detail schema...', 'pfx-expansion-detail-message__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, i)\"\n ></praxis-rich-content>\n </div>\n } @else if (detailState.status !== 'ready') {\n <div\n class=\"pfx-expansion-detail-message pfx-expansion-detail-message--error\"\n role=\"alert\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n >\n <praxis-rich-content\n rootClassName=\"pfx-expansion-detail-message__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(detailState.message || 'Detail indispon\u00EDvel para esta linha.', 'pfx-expansion-detail-message__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, i)\"\n ></praxis-rich-content>\n </div>\n } @else {\n @if (getExpansionDetailLayout(detailState.schema) === 'tabs') {\n @let detailTabs = getExpansionDetailTabs(detailState.schema);\n @if (detailTabs.length) {\n <div class=\"pfx-expansion-detail-tabs\" role=\"tablist\" aria-label=\"Se\u00C3\u00A7\u00C3\u00B5es do detail\">\n @for (tab of detailTabs; track $index; let tabIndex = $index) {\n <button\n type=\"button\"\n class=\"pfx-expansion-detail-tab-btn\"\n role=\"tab\"\n [attr.id]=\"getExpansionDetailTabId(row, i, tab, tabIndex)\"\n [attr.aria-controls]=\"getExpansionDetailPanelId(row, i, tab, tabIndex)\"\n [attr.aria-selected]=\"isExpansionDetailTabActive(row, i, tab, tabIndex, detailTabs) ? 'true' : 'false'\"\n [attr.tabindex]=\"isExpansionDetailTabActive(row, i, tab, tabIndex, detailTabs) ? '0' : '-1'\"\n [class.is-active]=\"isExpansionDetailTabActive(row, i, tab, tabIndex, detailTabs)\"\n (click)=\"onExpansionDetailTabSelect(row, i, tab, tabIndex, $event)\"\n (keydown)=\"onExpansionDetailTabKeydown($event, row, i, tabIndex, detailTabs)\"\n >\n <praxis-rich-content\n rootClassName=\"pfx-expansion-detail-tab-btn__content\"\n [nodes]=\"getExpansionDetailTabButtonRichContentNodes(tab)\"\n [context]=\"getExpansionDetailRichContentContext(row, i)\"\n ></praxis-rich-content>\n </button>\n }\n </div>\n @for (tab of detailTabs; track $index; let tabIndex = $index) {\n @if (isExpansionDetailTabActive(row, i, tab, tabIndex, detailTabs)) {\n <div\n class=\"pfx-expansion-detail-tab-panel\"\n role=\"tabpanel\"\n [attr.id]=\"getExpansionDetailPanelId(row, i, tab, tabIndex)\"\n [attr.aria-labelledby]=\"getExpansionDetailTabId(row, i, tab, tabIndex)\"\n >\n @if (getExpansionDetailTabRichContentNodes(tab, row, i); as richNodes) {\n <praxis-rich-content\n class=\"pfx-expansion-node-host pfx-expansion-node-host--tab\"\n [nodes]=\"richNodes\"\n [context]=\"getExpansionDetailRichContentContext(row, i)\"\n ></praxis-rich-content>\n } @else {\n @for (childNode of getExpansionDetailNodeChildren(tab); track $index) {\n <ng-container\n *ngTemplateOutlet=\"\n expansionDetailNodeTemplate;\n context: { $implicit: childNode, row: row, index: i }\n \"\n ></ng-container>\n }\n }\n </div>\n }\n }\n } @else {\n <div class=\"pfx-expansion-detail-message\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-detail-message__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Schema em layout tabs sem abas v\u00E1lidas.', 'pfx-expansion-detail-message__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, i)\"\n ></praxis-rich-content>\n </div>\n }\n } @else {\n <div class=\"pfx-expansion-detail-stack\">\n @for (node of getExpansionDetailItems(detailState.schema); track $index) {\n <ng-container\n *ngTemplateOutlet=\"\n expansionDetailNodeTemplate;\n context: { $implicit: node, row: row, index: i }\n \"\n ></ng-container>\n }\n </div>\n }\n }\n\n <ng-template #expansionDetailNodeTemplate let-node let-row=\"row\" let-index=\"index\">\n @if (getExpansionDetailRichContentNodes(node, row, index); as richNodes) {\n <praxis-rich-content\n class=\"pfx-expansion-node-host\"\n [nodes]=\"richNodes\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n } @else {\n @switch (getExpansionDetailNodeType(node)) {\n @case ('list') {\n <section class=\"pfx-expansion-node pfx-expansion-node-list\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-list__title\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailNodeTitle(node, 'Lista'), 'pfx-expansion-node-list__title-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @let listItems = getExpansionDetailListItems(row, node);\n @let listEntries = getExpansionDetailListEntries(row, node);\n @if (listItems.length) {\n <ul>\n @for (entry of listEntries; track $index) {\n <li>\n @if (getExpansionDetailListItemRichContentNodes(entry); as richNodes) {\n <praxis-rich-content\n class=\"pfx-expansion-node-list__item-host\"\n [nodes]=\"richNodes\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n } @else {\n {{ formatExpansionDetailListEntry(entry) }}\n }\n </li>\n }\n </ul>\n } @else {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Sem itens.', 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </section>\n }\n @case ('detailList') {\n <section class=\"pfx-expansion-node pfx-expansion-node-rich-list\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-rich-list__title\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailNodeTitle(node, 'Cole\u00E7\u00E3o rica'), 'pfx-expansion-node-rich-list__title-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @let richListEntries = getExpansionDetailRichListEntries(row, node);\n @if (richListEntries.length) {\n <div class=\"pfx-expansion-node-rich-list__items\">\n @for (entry of richListEntries; track $index) {\n <article [class]=\"getExpansionDetailRichListItemClassName(node)\">\n <praxis-rich-content\n class=\"pfx-expansion-node-rich-list__item-host\"\n [nodes]=\"getExpansionDetailRichListItemNodes(node)\"\n [context]=\"getExpansionDetailRichListItemContext(row, index, node, entry, $index)\"\n ></praxis-rich-content>\n @let itemActions = getExpansionDetailRichListItemActions(node, row, index, entry, $index);\n @if (itemActions.length) {\n <div class=\"pfx-expansion-node-rich-list__item-actions\">\n @for (action of itemActions; track action.actionId) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-rich-list__item-action-btn\"\n [disabled]=\"isExpansionDetailRichListItemActionDisabled(action, row, index, node, entry, $index)\"\n (click)=\"onExpansionDetailRichListItemAction(action, row, index, node, entry, $index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-rich-list__item-action-host\"\n [nodes]=\"getExpansionDetailRichListItemActionNodes(action)\"\n [context]=\"getExpansionDetailRichListItemContext(row, index, node, entry, $index)\"\n ></praxis-rich-content>\n </button>\n }\n </div>\n }\n </article>\n }\n </div>\n } @else {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailRichListEmptyText(node), 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </section>\n }\n @case ('card') {\n <section class=\"pfx-expansion-node pfx-expansion-node-card\">\n <header class=\"pfx-expansion-node-card__header\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-card__title\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailNodeTitle(node, 'Card'), 'pfx-expansion-node-card__title-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (node?.subtitle) {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-card__subtitle\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(node.subtitle, 'pfx-expansion-node-card__subtitle-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </header>\n @if (getExpansionDetailNodeChildren(node).length) {\n <div class=\"pfx-expansion-node-card__content\">\n @for (childNode of getExpansionDetailNodeChildren(node); track $index) {\n <ng-container\n *ngTemplateOutlet=\"\n expansionDetailNodeTemplate;\n context: { $implicit: childNode, row: row, index: index }\n \"\n ></ng-container>\n }\n </div>\n }\n </section>\n }\n @case ('cardGrid') {\n <section class=\"pfx-expansion-node pfx-expansion-node-card-grid\">\n @if (getExpansionDetailCardGridHeaderNodes(node); as cardGridHeaderNodes) {\n @if (cardGridHeaderNodes.length) {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-card-grid__header\"\n [nodes]=\"cardGridHeaderNodes\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n }\n @let gridCards = getExpansionDetailCardGridCards(node);\n @if (gridCards.length) {\n <div\n class=\"pfx-expansion-node-card-grid__cards\"\n [ngStyle]=\"getExpansionDetailCardGridStyles(node)\"\n >\n @for (card of gridCards; track $index) {\n <praxis-rich-content\n class=\"pfx-expansion-node-card-grid__card-host\"\n [nodes]=\"getExpansionDetailCardGridCardNodes(card)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </div>\n } @else {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Sem itens.', 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </section>\n }\n @case ('richText') {\n <div\n class=\"pfx-expansion-node pfx-expansion-node-richtext\"\n [innerHTML]=\"getExpansionDetailRichText(node)\"\n ></div>\n }\n @case ('formRef') {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__meta\"\n [nodes]=\"getExpansionDetailEmbedMetaNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__empty\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailEmbedEmptyText(node), 'pfx-expansion-node-embed__empty-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n }\n @case ('tableRef') {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__meta\"\n [nodes]=\"getExpansionDetailEmbedMetaNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__empty\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailEmbedEmptyText(node), 'pfx-expansion-node-embed__empty-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n }\n @case ('chartRef') {\n @if (getExpansionDetailInlineRendererView(node, row, index); as inlineRenderer) {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed pfx-expansion-node-embed--inline pfx-expansion-node-embed--chart\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <ng-container\n *ngComponentOutlet=\"inlineRenderer.component; inputs: inlineRenderer.inputs\"\n ></ng-container>\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n } @else {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__meta\"\n [nodes]=\"getExpansionDetailEmbedMetaNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__empty\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailEmbedEmptyText(node), 'pfx-expansion-node-embed__empty-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n }\n }\n @case ('templateRef') {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__meta\"\n [nodes]=\"getExpansionDetailEmbedMetaNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__empty\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailEmbedEmptyText(node), 'pfx-expansion-node-embed__empty-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n }\n @case ('diagramEmbed') {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__meta\"\n [nodes]=\"getExpansionDetailEmbedMetaNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (getExpansionDetailDiagramSource(row, node); as diagramSource) {\n <div class=\"pfx-expansion-node-embed__diagram\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__diagram-label\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailDiagramSourceLabel(), 'pfx-expansion-node-embed__diagram-label-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <pre class=\"pfx-expansion-node-embed__diagram-source\">{{ diagramSource }}</pre>\n </div>\n } @else {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__empty\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailEmbedEmptyText(node), 'pfx-expansion-node-embed__empty-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n }\n @case ('action') {\n <div class=\"pfx-expansion-node pfx-expansion-node-action\">\n <button\n type=\"button\"\n mat-stroked-button\n [disabled]=\"isExpansionDetailActionDisabled(node)\"\n (click)=\"onExpansionDetailAction(node, row, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-action__content\"\n [nodes]=\"getExpansionDetailActionRichContentNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n @if (getExpansionDetailActionStatusText(node); as actionStatusText) {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-action__status\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(actionStatusText, 'pfx-expansion-node-action__status-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </div>\n }\n @case ('actionBar') {\n <section class=\"pfx-expansion-node pfx-expansion-node-action-bar\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-action-bar__title\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailActionBarTitle(node), 'pfx-expansion-node-action-bar__title-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @let actionBarActions = getExpansionDetailActionBarActions(node, row, index);\n @if (actionBarActions.length) {\n <div class=\"pfx-expansion-node-action-bar__actions\">\n @for (action of actionBarActions; track action.actionId) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-action-bar__action-btn\"\n [disabled]=\"isExpansionDetailActionBarActionDisabled(action, row, index)\"\n (click)=\"onExpansionDetailActionBarAction(action, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-action-bar__action-host\"\n [nodes]=\"getExpansionDetailActionBarActionNodes(action)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </div>\n } @else {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailActionBarEmptyText(node), 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </section>\n }\n @case ('tab') {\n <div class=\"pfx-expansion-node pfx-expansion-node-placeholder\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Node', 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <code>tab</code>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('fora de contexto de tabs.', 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </div>\n }\n @default {\n <div class=\"pfx-expansion-node pfx-expansion-node-placeholder\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Node n\u00E3o suportado:', 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <code>{{ getExpansionDetailNodeType(node) }}</code>\n </div>\n }\n }\n }\n </ng-template>\n </section>\n </td>\n </ng-container>\n <tr\n mat-row\n *matRowDef=\"let row; columns: expansionDetailRowColumns; when: isExpansionDetailRow\"\n class=\"pfx-expansion-detail-row\"\n ></tr>\n }\n }\n </table>\n }\n\n <!-- Virtual rows path (header preserved above) -->\n @if (shouldRenderDataSurface() && !schemaError && !dataError && isVirtualized()) {\n <cdk-virtual-scroll-viewport\n class=\"ptable-viewport\"\n [itemSize]=\"getVirtItemHeight()\"\n [minBufferPx]=\"getVirtBufferSize() * getVirtItemHeight()\"\n [maxBufferPx]=\"getVirtBufferSize() * getVirtItemHeight() * 2\"\n [style.minHeight]=\"getVirtMinHeightHostStyle()\"\n >\n <table\n class=\"mat-mdc-table\"\n [ngClass]=\"getTableElevationClassName()\"\n [class.table-stack-top]=\"hasTopToolbarStack()\"\n [style.width]=\"getVirtualTableWidthStyle()\"\n >\n <tbody>\n <tr class=\"mat-mdc-row\"\n *cdkVirtualFor=\"let row of dataSource.data; let i = index; trackBy: trackByRow\"\n [class.pfx-row-selected]=\"selection.isSelected(row)\"\n [class.pfx-row-click-selectable]=\"isRowClickSelectable()\"\n [attr.aria-selected]=\"config.behavior?.selection?.enabled ? (selection.isSelected(row) ? 'true' : 'false') : null\"\n [ngClass]=\"getRowClasses(row)\"\n [ngStyle]=\"getRowNgStyle(row)\"\n [matTooltip]=\"getRowTooltip(row) || null\"\n [matTooltipDisabled]=\"!getRowTooltip(row)\"\n [matTooltipPosition]=\"getRowTooltipPosition(row)\"\n [matTooltipShowDelay]=\"getRowTooltipShowDelay(row)\"\n (click)=\"onRowClicked(row, i, $event)\"\n (dblclick)=\"onRowDoubleClicked(row, i)\">\n <!-- Selection column -->\n @if (isSelectionColumnEnabled()) { <td class=\"mat-mdc-cell\">\n <mat-checkbox\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleRow(row)\"\n [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </td> }\n <!-- Data columns -->\n @for (column of visibleColumns; track column.field) {\n <td class=\"mat-mdc-cell\"\n [style.text-align]=\"getColumnTextAlignStyle(column)\"\n [style.width]=\"getColumnWidthStyle(column)\"\n [attr.style]=\"getColumnCellAttrStyle(column)\"\n [ngClass]=\"getCellClasses(row, column)\"\n [ngStyle]=\"getCellNgStyle(row, column)\"\n [matTooltip]=\"getCellTooltip(row, column) || ''\"\n [matTooltipPosition]=\"getCellTooltipPosition(row, column)\"\n [matTooltipDisabled]=\"!getCellTooltip(row, column)\"\n [attr.title]=\"getCellTooltip(row, column) || null\">\n <div\n class=\"pfx-cell-content\"\n [ngClass]=\"getCellContentClasses(row, column)\"\n [ngStyle]=\"getCellContentNgStyle(row, column)\"\n >\n @switch (getEffectiveRendererType(row, column)) {\n @case ('icon') {\n <span class=\"pfx-icon-renderer\"\n [style.color]=\"getIconColor(row, column) || null\"\n [ngStyle]=\"getIconStyle(row, column)\"\n [attr.aria-label]=\"getIconAriaLabel(row, column) || null\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-icon-renderer__content\"\n [nodes]=\"getIconRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </span>\n }\n @case ('image') {\n <span class=\"pfx-cell-image\">\n <praxis-rich-content\n rootClassName=\"pfx-cell-image__content\"\n [nodes]=\"getImageRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </span>\n }\n @case ('badge') {\n @if (shouldRenderBadge(row, column)) {\n <span class=\"pfx-badge\" [ngClass]=\"getBadgeClasses(row, column)\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-badge__content\"\n [nodes]=\"getBadgeRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </span>\n }\n }\n @case ('chip') {\n @if (shouldRenderChip(row, column)) {\n <span class=\"pfx-chip\" [ngClass]=\"getChipClasses(row, column)\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-chip__content\"\n [nodes]=\"getChipRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </span>\n }\n }\n @case ('progress') {\n <div class=\"pfx-progress\">\n <praxis-rich-content\n rootClassName=\"pfx-progress__content\"\n [context]=\"getProgressRichContentContext(row, column)\"\n [nodes]=\"getProgressRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </div>\n }\n @case ('microVisualization') {\n <span class=\"pfx-micro-viz-cell\" [innerHTML]=\"getMicroVisualizationHtml(row, column)\"></span>\n }\n @case ('avatar') {\n <span\n class=\"pfx-avatar-renderer\"\n [ngStyle]=\"getAvatarStyle(row, column)\"\n [class.shape-rounded]=\"getAvatarShape(row, column) === 'rounded'\"\n [class.shape-circle]=\"getAvatarShape(row, column) === 'circle'\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-avatar-renderer__content\"\n [nodes]=\"getAvatarRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </span>\n }\n @case ('link') {\n <a\n class=\"pfx-link\"\n [attr.href]=\"getLinkHref(row, column) || null\"\n [attr.target]=\"getLinkTarget(row, column) || null\"\n [attr.rel]=\"getLinkRel(row, column) || null\"\n (click)=\"$event.stopPropagation()\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-link__content\"\n [nodes]=\"getLinkRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </a>\n }\n @case ('button') {\n @switch (getButtonVariant(row, column)) {\n @case ('outlined') {\n <button\n mat-stroked-button\n [color]=\"getButtonColor(row, column) || null\"\n [disabled]=\"isButtonDisabled(row, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(row, column) || getButtonLabel(row, column)\"\n (click)=\"onButtonClick(row, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </button>\n }\n @case ('text') {\n <button\n mat-button\n [color]=\"getButtonColor(row, column) || null\"\n [disabled]=\"isButtonDisabled(row, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(row, column) || getButtonLabel(row, column)\"\n (click)=\"onButtonClick(row, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </button>\n }\n @default {\n <button\n mat-flat-button\n [color]=\"getButtonColor(row, column) || null\"\n [disabled]=\"isButtonDisabled(row, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(row, column) || getButtonLabel(row, column)\"\n (click)=\"onButtonClick(row, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </button>\n }\n }\n }\n @case ('menu') {\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"menuRef\"\n (click)=\"$event.stopPropagation()\"\n [attr.aria-label]=\"getMenuAriaLabel(row, column) || 'Menu'\"\n >\n <praxis-rich-content\n rootClassName=\"pfx-menu-trigger__content\"\n [nodes]=\"getMenuTriggerRichContentNodes()\"\n ></praxis-rich-content>\n </button>\n <mat-menu #menuRef=\"matMenu\">\n @for (it of getMenuItems(row, column); track it.id) {\n <button\n mat-menu-item\n (click)=\"onMenuItemClick(it, row, $event)\"\n [disabled]=\"!it.__visible\"\n >\n <praxis-rich-content\n rootClassName=\"pfx-menu-item__content\"\n [nodes]=\"getMenuItemRichContentNodes(it)\"\n ></praxis-rich-content>\n </button>\n }\n </mat-menu>\n }\n @default {\n {{ getCellValue(row, column) }}\n }\n }\n </div>\n </td>\n }\n\n <!-- Actions column -->\n @if (config.actions?.row?.enabled) {\n <td class=\"mat-mdc-cell praxis-actions-cell\" [class.dense]=\"dense\" [style.width]=\"getRowActionsWidthStyle()\">\n <div\n class=\"praxis-actions-cell__content\"\n [class.praxis-actions-cell__content--discovering]=\"isRowDiscoveryPending(row)\"\n [attr.aria-busy]=\"isRowDiscoveryPending(row) ? 'true' : null\"\n >\n @if (config.actions?.row?.display === 'icons' || !config.actions?.row?.display) {\n @for (a of getInlineRowActions(row); track trackAction($index, a)) {\n <span\n class=\"praxis-row-action-anchor\"\n [class.praxis-row-action-anchor--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-action-anchor--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [matTooltip]=\"getActionTooltip(a, row)\"\n [matTooltipDisabled]=\"!getActionTooltip(a, row)\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"praxis-tooltip\"\n >\n <button mat-icon-button class=\"praxis-icon-btn\"\n [class.praxis-icon-btn--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-icon-btn--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [disabled]=\"isActionDisabled(a, row)\"\n (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\"\n [attr.aria-label]=\"a.label || getActionId(a)\"\n [color]=\"a.color || null\">\n <praxis-rich-content\n layout=\"inline\"\n rootClassName=\"praxis-row-action__content\"\n [nodes]=\"getRowActionIconRichContentNodes(a)\"\n ></praxis-rich-content>\n </button>\n </span>\n }\n }\n @if (config.actions?.row?.display === 'buttons') {\n @for (a of getInlineRowActions(row); track trackAction($index, a)) {\n <span\n class=\"praxis-row-action-anchor\"\n [class.praxis-row-action-anchor--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-action-anchor--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [matTooltip]=\"getActionTooltip(a, row)\"\n [matTooltipDisabled]=\"!getActionTooltip(a, row)\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"praxis-tooltip\"\n >\n <button mat-flat-button class=\"praxis-row-btn\"\n [class.praxis-row-btn--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-btn--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [disabled]=\"isActionDisabled(a, row)\"\n (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\"\n [attr.aria-label]=\"a.label || getActionId(a)\"\n [color]=\"a.color || null\">\n <praxis-rich-content\n layout=\"inline\"\n rootClassName=\"praxis-row-action__content\"\n [nodes]=\"getRowActionRichContentNodes(a)\"\n ></praxis-rich-content>\n </button>\n </span>\n }\n }\n @if (hasOverflowRowActions(row)) {\n <button mat-icon-button class=\"praxis-icon-btn praxis-more-btn\"\n [matMenuTriggerFor]=\"rowMoreMenuV\"\n (menuOpened)=\"onRowOverflowMenuOpened(row)\"\n [color]=\"getRowMenuButtonColor() || null\"\n [attr.aria-label]=\"getRowMenuTooltip(row)\"\n [matTooltip]=\"getRowMenuTooltip(row)\"\n matTooltipPosition=\"above\">\n <mat-icon [praxisIcon]=\"getRowMenuIcon()\"></mat-icon>\n </button>\n }\n <mat-menu #rowMoreMenuV=\"matMenu\" xPosition=\"before\">\n @if (hasRowOverflowMenuLoadingState(row)) {\n <button mat-menu-item disabled>\n <mat-icon>hourglass_empty</mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(getRowOverflowMenuLoadingLabel(), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n @for (a of getOverflowRowActions(row); track trackAction($index, a)) {\n <button mat-menu-item (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\" [disabled]=\"isActionDisabled(a, row)\">\n <mat-icon [color]=\"a.color || null\" [praxisIcon]=\"a.icon\"></mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(a.label || getActionId(a), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n @if (hasRowOverflowMenuEmptyState(row)) {\n <button mat-menu-item disabled>\n <mat-icon>info</mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(getRowOverflowMenuEmptyLabel(row), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n </mat-menu>\n </div>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n }\n\n</div>\n@if (shouldShowLoadingSurface()) {\n <div class=\"ptable-loading-state\" role=\"status\" aria-live=\"polite\">\n <div class=\"ptable-loading-state__hero\" aria-hidden=\"true\">\n <span class=\"ptable-loading-state__line ptable-loading-state__line--wide\"></span>\n <span class=\"ptable-loading-state__line ptable-loading-state__line--short\"></span>\n <div class=\"ptable-loading-state__rows\">\n @for (placeholder of [1, 2, 3]; track placeholder) {\n <div class=\"ptable-loading-state__row\">\n <span class=\"ptable-loading-state__cell ptable-loading-state__cell--short\"></span>\n <span class=\"ptable-loading-state__cell\"></span>\n <span class=\"ptable-loading-state__cell ptable-loading-state__cell--wide\"></span>\n </div>\n }\n </div>\n </div>\n <div class=\"ptable-loading-state__message\">\n {{ getLoadingSurfaceMessage() }}\n </div>\n </div>\n}\n@if (shouldShowNoDataState()) {\n <div class=\"ptable-no-data-state\" role=\"status\" aria-live=\"polite\">\n <praxis-empty-state-card\n [icon]=\"getNoDataStateIcon()\"\n [title]=\"getNoDataStateTitle()\"\n [description]=\"getNoDataStateDescription()\"\n [primaryAction]=\"getNoDataStatePrimaryAction()\"\n [secondaryActions]=\"getNoDataStateSecondaryActions()\"\n [inline]=\"true\"\n [tone]=\"getNoDataStateTone()\"\n [variant]=\"getNoDataStateVariant()\"\n [alignment]=\"getNoDataStateAlignment()\"\n [density]=\"getNoDataStateDensity()\"\n [iconContainer]=\"getNoDataStateIconContainer()\"\n ></praxis-empty-state-card>\n </div>\n}\n@if (\n shouldRenderDataSurface()\n && !schemaError\n && !dataError\n && shouldRenderFloatingBulkActions()\n && getFloatingBulkActions().length\n && !shouldHideFloatingBulkActions()\n ) {\n <div [class]=\"'praxis-floating-bulk-actions ' + getFloatingBulkPositionClass()\">\n @for (action of getFloatingBulkActions(); track getActionId(action)) {\n <button\n mat-mini-fab\n [color]=\"action.color || 'primary'\"\n [disabled]=\"isFloatingBulkActionDisabled(action)\"\n (click)=\"onToolbarAction({ action: getActionId(action), actionConfig: action })\"\n [attr.aria-label]=\"action.label || getActionId(action)\"\n [matTooltip]=\"action.label || getActionId(action)\"\n matTooltipPosition=\"left\"\n >\n <praxis-rich-content\n rootClassName=\"praxis-floating-bulk-actions__content\"\n [nodes]=\"getFloatingBulkActionRichContentNodes(action)\"\n ></praxis-rich-content>\n </button>\n }\n </div>\n}\n<!-- Barra de a\u00C3\u00A7\u00C3\u00B5es no rodap\u00C3\u00A9 (opcional) -->\n@if (shouldRenderDataSurface() && !schemaError && !dataError && showToolbar && shouldRenderFooterToolbar()) {\n <praxis-table-toolbar\n [config]=\"config\"\n [backgroundColor]=\"getToolbarActionsBackgroundColor()\"\n [style.--pfx-filter-h]=\"getToolbarLayoutHeightHostStyle()\"\n [class.footer-flat]=\"hasBottomPaginator()\"\n class=\"praxis-toolbar-footer\"\n placement=\"footer\"\n [showMain]=\"shouldShowFooterToolbarMain()\"\n [showEndActions]=\"shouldShowFooterToolbarEndActions()\"\n [showActionsGroup]=\"shouldShowToolbarActionsBottom()\"\n [showMobileActions]=\"shouldShowToolbarActionsBottom()\"\n [evaluationContext]=\"getToolbarEvaluationContext()\"\n [columnVisibilityController]=\"toolbarColumnVisibilityController\"\n [exportBusy]=\"exportBusy\"\n (toolbarAction)=\"onToolbarAction($event)\"\n (exportAction)=\"onExportAction($event)\"\n >\n @if (shouldShowFooterToolbarMain() && shouldRenderAdvancedFilter()) {\n <praxis-filter\n advancedFilter\n [resourcePath]=\"getAdvancedFilterResourcePath()\"\n [filterId]=\"tableId\"\n [formId]=\"tableId\"\n [persistenceKey]=\"getAdvancedFilterPersistenceKey()\"\n [fieldMetadata]=\"getAdvancedFilterFieldMetadata()\"\n [enableCustomization]=\"enableCustomization\"\n [value]=\"advancedFilterValue\"\n [alwaysVisibleFields]=\"getAdvancedFilterAlwaysVisibleFields()\"\n [alwaysVisibleFieldMetadataOverrides]=\"getAdvancedFilterAlwaysVisibleFieldMetadataOverrides()\"\n [selectedFieldIds]=\"config.behavior?.filtering?.advancedFilters?.settings?.selectedFieldIds ?? []\"\n [allowSaveTags]=\"config.behavior?.filtering?.advancedFilters?.settings?.allowSaveTags\"\n [changeDebounceMs]=\"config.behavior?.filtering?.advancedFilters?.settings?.changeDebounceMs ?? 300\"\n [i18n]=\"getFilterI18n()\"\n [mode]=\"'filter'\"\n [showFilterSettings]=\"enableCustomization\"\n (change)=\"onAdvancedFilterChange($event)\"\n (requestSearch)=\"onAdvancedFilterSubmit($event)\"\n (clear)=\"onAdvancedFilterClear()\"\n ></praxis-filter>\n }\n @if (shouldShowFooterToolbarMain() && shouldRenderAdvancedFilter()) {\n <ng-content select=\"[advancedFilter]\"></ng-content>\n }\n @if (shouldShowFooterToolbarMain() && shouldRenderAdvancedFilter()) {\n <ng-content select=\"[toolbar]\"></ng-content>\n }\n @if (shouldShowFooterToolbarMain() && shouldRenderAdvancedFilter()) {\n @if (shouldShowAiAssistantEntrypoint()) {\n <button\n end-actions\n mat-icon-button\n color=\"primary\"\n type=\"button\"\n class=\"praxis-table-ai-trigger praxis-table-toolbar-action--ai\"\n [class.praxis-table-ai-trigger--minimized]=\"hasMinimizedAiAssistantSession()\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('footer')\"\n (click)=\"openAiAssistant()\"\n [attr.aria-label]=\"aiAssistantTriggerLabel()\"\n [matBadge]=\"aiAssistantTriggerBadge()\"\n [matBadgeHidden]=\"!hasMinimizedAiAssistantSession()\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"aiAssistantTriggerTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>{{ aiAssistantTriggerIcon() }}</mat-icon>\n </button>\n }\n }\n @if (shouldShowFooterToolbarMain() && shouldRenderAdvancedFilter() && enableCustomization) {\n <button\n end-actions\n mat-icon-button\n color=\"primary\"\n data-role=\"table-settings\"\n class=\"praxis-table-toolbar-action--configuration\"\n data-testid=\"table-settings-trigger\"\n (click)=\"openTableSettings()\"\n [attr.aria-label]=\"getTableSettingsLabel()\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"getTableSettingsTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>settings</mat-icon>\n </button>\n }\n </praxis-table-toolbar>\n}\n@if (shouldRenderDataSurface() && !schemaError && !dataError && getPaginationEnabled() && (config.behavior?.pagination?.position === 'bottom' || config.behavior?.pagination?.position === 'both' || !config.behavior?.pagination?.position)) {\n <mat-paginator\n [length]=\"getPaginationLength()\"\n [pageSize]=\"getPaginationPageSize()\"\n [pageSizeOptions]=\"getPaginationPageSizeOptions()\"\n [selectConfig]=\"paginatorSelectConfig\"\n [showFirstLastButtons]=\"getPaginationShowFirstLast()\"\n (page)=\"onPageChange($event)\"\n [class.compact]=\"config.behavior?.pagination?.style === 'compact'\"\n [class.footer-stack]=\"shouldShowToolbarActionsBottom()\"\n >\n </mat-paginator>\n}\n", styles: ["@charset \"UTF-8\";table{width:100%}.praxis-visually-hidden-status{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.praxis-column-reorder-status{margin:8px 0;padding:10px 12px;border-radius:8px;border:1px solid var(--p-table-border-color);background:var(--p-table-row-hover-bg);color:var(--p-table-header-fg);font-size:12px;line-height:1.4;box-shadow:0 4px 12px #00000014;animation:pfx-column-reorder-status-in var(--p-table-drag-status-enter-duration, .18s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1))}@keyframes pfx-column-reorder-status-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.praxis-actions-cell{height:100%;padding-inline:12px;white-space:nowrap}.pfx-expansion-col-header,.pfx-expansion-col-cell{width:52px;min-width:52px;text-align:center}.pfx-expansion-toggle:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.pfx-expansion-detail-row{background:var(--md-sys-color-surface-container-low)}.pfx-expansion-detail-cell{padding:0!important;border-bottom:1px solid var(--p-table-border-color)}.pfx-expansion-detail-panel{padding:12px 16px;border-left:3px solid var(--md-sys-color-primary)}.pfx-expansion-detail-panel.pfx-expansion-motion-none{animation:none;transition:none}.pfx-expansion-detail-panel.pfx-expansion-motion-subtle-slide{animation:pfx-expansion-subtle-slide-in var(--pfx-expansion-motion-duration, .16s) var(--pfx-expansion-motion-easing, cubic-bezier(.2, 0, 0, 1))}.pfx-expansion-detail-panel.pfx-expansion-motion-accordion{animation:pfx-expansion-accordion-in var(--pfx-expansion-motion-duration, .18s) var(--pfx-expansion-motion-easing, cubic-bezier(.2, 0, 0, 1));transform-origin:top center}.pfx-expansion-detail-panel.pfx-expansion-motion-fade-scale{animation:pfx-expansion-fade-scale-in var(--pfx-expansion-motion-duration, .16s) var(--pfx-expansion-motion-easing, cubic-bezier(.2, 0, 0, 1));transform-origin:top center}@keyframes pfx-expansion-subtle-slide-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes pfx-expansion-accordion-in{0%{opacity:0;transform:scaleY(.96)}to{opacity:1;transform:scaleY(1)}}@keyframes pfx-expansion-fade-scale-in{0%{opacity:0;transform:translateY(-2px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}.pfx-expansion-detail-schema{margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:12px;line-height:1.4;white-space:pre-wrap;word-break:break-word;color:var(--md-sys-color-on-surface-variant)}.pfx-expansion-detail-message{font-size:13px;color:var(--md-sys-color-on-surface-variant)}.pfx-expansion-detail-message--error{color:var(--md-sys-color-error)}.pfx-expansion-detail-stack{display:grid;gap:10px}.pfx-expansion-detail-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}.pfx-expansion-detail-tab-btn{border:1px solid var(--p-table-border-color);background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);border-radius:999px;padding:6px 12px;font-size:12px;line-height:1.2;cursor:pointer}.pfx-expansion-detail-tab-btn__content{display:inline-flex;align-items:center;gap:6px;min-width:0}.pfx-expansion-detail-tab-btn__icon .prx-rich-icon{font-size:16px;line-height:1}.pfx-expansion-detail-tab-btn__title{white-space:nowrap}.pfx-expansion-detail-tab-btn__badge .prx-rich-badge{padding:0 8px;min-height:18px;background:color-mix(in srgb,currentColor 12%,transparent);color:inherit}.pfx-expansion-detail-tab-btn.is-active{border-color:var(--md-sys-color-primary);color:var(--md-sys-color-primary);font-weight:600}.pfx-expansion-detail-tab-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.pfx-expansion-detail-tab-panel{display:grid;gap:10px}.pfx-expansion-node{border:1px solid var(--p-table-border-color);border-radius:8px;padding:10px 12px;background:var(--md-sys-color-surface)}.pfx-expansion-node-card__header{margin-bottom:8px}.pfx-expansion-node-card__title{margin:0;font-size:14px;line-height:1.3}.pfx-expansion-node-card__subtitle{margin:4px 0 0;font-size:12px;color:var(--md-sys-color-on-surface-variant)}.pfx-expansion-node-card__content{display:grid;gap:10px}.pfx-expansion-node-value{display:flex;align-items:baseline;gap:8px}.pfx-expansion-node-value__label{color:var(--md-sys-color-on-surface-variant);font-size:12px}.pfx-expansion-node-value__content{font-size:14px}.pfx-expansion-node-list__title{margin:0 0 6px;font-size:13px}.pfx-expansion-node-list ul{margin:0;padding-left:18px}.pfx-expansion-node-rich-list__title{margin:0 0 8px;font-size:13px}.pfx-expansion-node-rich-list__items{display:grid;gap:12px}.pfx-expansion-node-rich-list__item{display:grid;gap:10px;padding:12px;border:1px solid var(--md-sys-color-outline-variant, #d7dbe5);border-radius:14px;background:var(--md-sys-color-surface-container-lowest, #fff)}.pfx-expansion-node-rich-list__item--row{grid-template-columns:minmax(0,1fr) auto;align-items:center}.pfx-expansion-node-rich-list__item--stack{grid-template-columns:minmax(0,1fr)}.pfx-expansion-node-rich-list__item--card-list{grid-template-columns:minmax(0,1fr);box-shadow:0 4px 14px #0f172a0a}.pfx-expansion-node-rich-list__item-host{min-width:0}.pfx-expansion-node-rich-list__item-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.pfx-expansion-node-rich-list__item-action-btn{min-width:0}.pfx-expansion-node-rich-list__item-action-host{display:inline-flex;align-items:center}.pfx-expansion-node-action-bar__title{margin:0 0 12px}.pfx-expansion-node-action-bar__actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.pfx-expansion-node-action-bar__action-btn{min-width:0}.pfx-expansion-node-action-bar__action-host{display:inline-flex;align-items:center}.pfx-expansion-node-card-grid__header{margin:0 0 12px}.pfx-expansion-node-card-grid__cards{display:grid;gap:12px;grid-template-columns:var(--pfx-expansion-card-grid-columns, repeat(auto-fit, minmax(var(--pfx-expansion-card-grid-min-width, 220px), 1fr)))}.pfx-expansion-node-card-grid__card-host{min-width:0}.pfx-expansion-node-card-grid__card-host [data-rich-node-type=card]{height:100%}.pfx-expansion-node-richtext :where(p,ul,ol,h1,h2,h3,h4,h5,h6){margin-top:0;margin-bottom:8px}.pfx-expansion-node-placeholder{font-size:12px;color:var(--md-sys-color-on-surface-variant)}:host.density-compact{--p-table-header-height-default: 32px;--p-table-row-height-default: 30px;--p-header-padding-default: 4px 8px;--p-cell-padding-default: 3px 8px;--p-header-font-size-default: 11.5px;--p-cell-font-size-default: 12px;--p-actions-btn-size-default: 28px;--p-actions-icon-size-default: 15px;--p-actions-more-btn-size-default: 28px;--p-actions-more-icon-size-default: 15px;--p-table-paginator-container-min-height-default: 32px;--p-table-paginator-container-padding-default: 2px 8px;--p-table-paginator-container-gap-default: 6px;--p-table-paginator-select-width-default: 64px;--p-table-paginator-select-height-default: 28px;--p-table-paginator-select-padding-inline-default: 8px 6px;--p-table-paginator-action-size-default: 28px}:host.density-comfortable{--p-table-header-height-default: 40px;--p-table-row-height-default: 44px;--p-header-padding-default: 10px 14px;--p-cell-padding-default: 10px 14px;--p-header-font-size-default: inherit;--p-cell-font-size-default: inherit;--p-actions-btn-size-default: 36px;--p-actions-icon-size-default: 18px;--p-actions-more-btn-size-default: 36px;--p-actions-more-icon-size-default: 18px;--p-table-paginator-container-min-height-default: 44px;--p-table-paginator-container-padding-default: 6px 10px;--p-table-paginator-container-gap-default: 10px;--p-table-paginator-select-width-default: 78px;--p-table-paginator-select-height-default: 36px;--p-table-paginator-select-padding-inline-default: 12px 10px;--p-table-paginator-action-size-default: 36px}:host.density-spacious{--p-table-header-height-default: 52px;--p-table-row-height-default: 56px;--p-header-padding-default: 16px 20px;--p-cell-padding-default: 16px 20px;--p-header-font-size-default: inherit;--p-cell-font-size-default: inherit;--p-actions-btn-size-default: 44px;--p-actions-icon-size-default: 24px;--p-actions-more-btn-size-default: 44px;--p-actions-more-icon-size-default: 24px;--p-table-paginator-container-min-height-default: 52px;--p-table-paginator-container-padding-default: 8px 14px;--p-table-paginator-container-gap-default: 12px;--p-table-paginator-select-width-default: 86px;--p-table-paginator-select-height-default: 40px;--p-table-paginator-select-padding-inline-default: 14px 12px;--p-table-paginator-action-size-default: 40px}@media(pointer:coarse){:host.density-compact{--p-table-row-height-default: 44px;--p-table-header-height-default: 44px;--p-table-paginator-container-min-height-default: 44px;--p-table-paginator-action-size-default: 40px}}:host.density-compact .praxis-actions-cell{padding-inline:8px}:host.density-spacious .praxis-actions-cell{padding-inline:16px}.praxis-actions-cell__content{display:flex;align-items:center;justify-content:flex-end;gap:6px;width:100%;transition:opacity .12s ease}.praxis-actions-cell.dense .praxis-actions-cell__content{gap:6px}.praxis-actions-cell__content--discovering{opacity:.78}.praxis-row-action-anchor{display:inline-flex;align-items:center}.praxis-row-action-anchor--workflow{position:relative}.praxis-row-action-anchor--workflow:after{content:\"\";position:absolute;right:4px;top:4px;width:6px;height:6px;border-radius:999px;background:var(--md-sys-color-secondary);opacity:.9;pointer-events:none}.praxis-row-action-anchor--blocked:after{background:var(--md-sys-color-error)}.praxis-icon-btn{width:var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px));height:var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px));border:0;background:transparent;padding:0;display:inline-flex;align-items:center;justify-content:center;border-radius:9999px;cursor:pointer;--mat-icon-button-state-layer-size: var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px))}.praxis-icon-btn:hover{background:var(--md-sys-color-surface-variant)}.praxis-icon-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.praxis-icon-btn mat-icon,.praxis-icon-btn .mat-icon{font-size:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));width:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));line-height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))}.praxis-icon-btn praxis-rich-content{display:inline-flex;align-items:center;justify-content:center;width:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));line-height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))}:host ::ng-deep .praxis-icon-btn .praxis-row-action__content,:host ::ng-deep .praxis-icon-btn .praxis-row-action__icon{display:inline-flex;align-items:center;justify-content:center;width:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));line-height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))}:host ::ng-deep .praxis-icon-btn .praxis-row-action__icon .prx-rich-icon{font-size:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));width:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));line-height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))}.praxis-icon-btn--workflow{background:color-mix(in srgb,var(--md-sys-color-secondary-container) 36%,transparent)}.praxis-icon-btn--blocked{background:color-mix(in srgb,var(--md-sys-color-error-container) 42%,transparent)}.praxis-more-btn{width:var(--p-actions-more-btn-size, var(--p-actions-more-btn-size-default, var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px))));height:var(--p-actions-more-btn-size, var(--p-actions-more-btn-size-default, var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px))));--mat-icon-button-state-layer-size: var(--p-actions-more-btn-size, var(--p-actions-more-btn-size-default, var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px))));background-image:var(--p-actions-more-btn-gradient, none);background-size:100% 100%;background-repeat:no-repeat}.praxis-more-btn mat-icon,.praxis-more-btn .mat-icon{font-size:var(--p-actions-more-icon-size, var(--p-actions-more-icon-size-default, var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))));width:var(--p-actions-more-icon-size, var(--p-actions-more-icon-size-default, var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))));height:var(--p-actions-more-icon-size, var(--p-actions-more-icon-size-default, var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))));line-height:var(--p-actions-more-icon-size, var(--p-actions-more-icon-size-default, var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))));color:var(--p-actions-more-icon-color);background-image:var(--p-actions-more-icon-gradient, none);-webkit-background-clip:text;background-clip:text}.praxis-row-btn--workflow{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--md-sys-color-secondary) 28%,transparent)}.praxis-row-btn--blocked{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--md-sys-color-error) 28%,transparent)}.praxis-icon-btn.destructive mat-icon{color:var(--md-sys-color-error)}.mat-mdc-tooltip.praxis-tooltip{margin-top:-8px;margin-bottom:8px}.spacer{flex:1 1 auto}.praxis-table-header{display:flex;flex-wrap:wrap;align-items:flex-start;gap:6px;margin:10px 0 8px;width:100%;clear:both;position:relative}.praxis-table-header.stacked{margin:0}.praxis-table-header>praxis-table-toolbar{flex:1 0 100%}.praxis-floating-bulk-actions{position:fixed;z-index:var(--praxis-layer-floating-local, 200);display:inline-flex;align-items:center;gap:8px;padding:8px;border-radius:999px;background:var(--md-sys-color-surface-container-highest);box-shadow:0 8px 20px #00000029}.praxis-floating-bulk-actions.pos-bottom-right{right:20px;bottom:20px}.praxis-floating-bulk-actions.pos-bottom-left{left:20px;bottom:20px}.praxis-floating-bulk-actions.pos-top-right{right:20px;top:20px}.praxis-floating-bulk-actions.pos-top-left{left:20px;top:20px}@media(max-width:768px){.praxis-floating-bulk-actions{gap:6px;padding:6px}.praxis-floating-bulk-actions.pos-bottom-right{right:12px;left:auto;bottom:12px}.praxis-floating-bulk-actions.pos-bottom-left{left:12px;right:auto;bottom:12px}.praxis-floating-bulk-actions.pos-top-right{right:12px;left:auto;top:12px}.praxis-floating-bulk-actions.pos-top-left{left:12px;right:auto;top:12px}}:host{display:block;width:100%;min-width:0;max-width:100%;--pfx-toolbar-pad-y: 6px;--pfx-toolbar-pad-x: 12px;--p-table-bg: var(--md-sys-color-surface-container-highest);--p-table-text-color: var(--md-sys-color-on-surface);--p-table-header-bg: var(--md-sys-color-surface-container-highest);--p-table-header-fg: var(--md-sys-color-on-surface);--p-table-border-color: var(--md-sys-color-outline-variant);--p-table-row-even-bg: var(--md-sys-color-surface-container);--p-table-row-hover-bg: var(--md-sys-color-surface-container-high);--p-table-row-selected-bg: var(--md-sys-color-primary-container);--p-table-row-selected-fg: var(--md-sys-color-on-primary-container);--p-table-row-selected-font-weight: 600;--p-table-row-selected-indicator: linear-gradient( 180deg, var(--md-sys-color-primary), var(--md-sys-color-secondary) );--p-table-badge-soft-primary-bg: var(--md-sys-color-primary-container);--p-table-badge-soft-primary-fg: var(--md-sys-color-on-primary-container);--p-table-badge-soft-accent-bg: var(--md-sys-color-secondary-container);--p-table-badge-soft-accent-fg: var(--md-sys-color-on-secondary-container);--p-table-badge-soft-warn-bg: var(--md-sys-color-error-container);--p-table-badge-soft-warn-fg: var(--md-sys-color-on-error-container);--p-table-state-success-bg: var(--md-sys-color-tertiary-container);--p-table-state-success-fg: var(--md-sys-color-on-tertiary-container);--p-table-state-warning-bg: var(--md-sys-color-secondary-container);--p-table-state-warning-fg: var(--md-sys-color-on-secondary-container);--p-table-state-danger-bg: var(--md-sys-color-error-container);--p-table-state-danger-fg: var(--md-sys-color-on-error-container);--p-table-state-highlight-bg: var(--md-sys-color-primary-container);--p-table-state-highlight-fg: var(--md-sys-color-on-primary-container);--p-table-reorder-transition-duration: .16s;--p-table-drag-preview-scale: 1.01;--p-table-drag-status-enter-duration: .18s;--p-table-drag-preview-shadow: 0 14px 32px rgba(0, 0, 0, .28), 0 0 0 1px var(--p-table-border-color);--p-table-column-resize-hit-area: 10px;--p-table-column-resize-line-width: 1px;--p-table-column-resize-separator-color: color-mix( in srgb, var(--p-table-border-color) 78%, transparent );--p-table-column-resize-separator-hover-color: var(--md-sys-color-primary);--p-table-column-resize-active-color: var(--md-sys-color-primary)}:host ::ng-deep .mat-mdc-table{background:var(--p-table-bg);color:var(--p-table-text-color);border-radius:12px 12px 0 0;width:100%;box-shadow:var(--p-table-surface-shadow);transition:box-shadow var(--p-table-selection-transition-duration, .18s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1))}:host ::ng-deep .mat-mdc-table:hover{box-shadow:var(--p-table-surface-shadow-hover, var(--p-table-surface-shadow))}:host ::ng-deep .mat-mdc-table.pfx-column-resize-enabled{table-layout:fixed}:host ::ng-deep .mat-mdc-table.table-stack-top{border-top-left-radius:0;border-top-right-radius:0}:host ::ng-deep .praxis-toolbar-footer{border:0 solid var(--p-table-border-color);border-top:0;border-radius:0;background:var(--p-table-bg)}:host ::ng-deep .mat-mdc-paginator.footer-stack{border-top-left-radius:0;border-top-right-radius:0;border-top:0}:host ::ng-deep .mat-mdc-paginator.footer-stack .mat-mdc-paginator-container{padding:var(--p-table-paginator-footer-stack-padding, 6px 10px)}:host ::ng-deep .mat-mdc-paginator{--p-table-paginator-bg-default: color-mix( in srgb, var(--p-table-bg) 94%, var(--md-sys-color-surface, white) 6% );--p-table-paginator-border-color-default: color-mix(in srgb, var(--p-table-border-color) 82%, transparent);--p-table-paginator-select-bg-default: color-mix(in srgb, var(--p-table-bg) 88%, var(--p-table-text-color) 12%);--p-table-paginator-select-border-color-default: color-mix( in srgb, var(--p-table-border-color) 74%, transparent );--p-table-paginator-select-border-color-hover-default: color-mix( in srgb, var(--md-sys-color-primary) 36%, var(--p-table-border-color) );--p-table-paginator-select-border-color-focus-default: color-mix( in srgb, var(--md-sys-color-primary) 72%, var(--p-table-border-color) );--p-table-paginator-select-focus-ring-default: color-mix(in srgb, var(--md-sys-color-primary) 18%, transparent);--p-table-paginator-select-radius-default: 999px;--p-table-paginator-select-shadow-default: inset 0 1px 0 color-mix(in srgb, var(--md-sys-color-on-surface) 8%, transparent);--p-table-paginator-select-text-color-default: var(--p-table-text-color);--p-table-paginator-select-icon-color-default: color-mix(in srgb, var(--p-table-text-color) 72%, transparent);--p-table-paginator-range-text-color-default: color-mix(in srgb, var(--p-table-text-color) 78%, transparent);border-top:1px solid var(--p-table-paginator-border-color, var(--p-table-paginator-border-color-default));background:var(--p-table-paginator-bg, var(--p-table-paginator-bg-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-container{min-height:var(--p-table-paginator-container-min-height, var(--p-table-paginator-container-min-height-default, 44px));padding:var(--p-table-paginator-container-padding, var(--p-table-paginator-container-padding-default, 6px 10px));gap:var(--p-table-paginator-container-gap, var(--p-table-paginator-container-gap-default, 10px))}:host ::ng-deep .mat-mdc-paginator.compact{--p-table-paginator-container-min-height-default: 30px;--p-table-paginator-container-padding-default: 2px 8px;--p-table-paginator-container-gap-default: 6px;--p-table-paginator-select-width-default: 62px;--p-table-paginator-select-height-default: 28px;--p-table-paginator-select-padding-inline-default: 8px 6px;--p-table-paginator-action-size-default: 28px}:host ::ng-deep .mat-mdc-paginator .mat-mdc-icon-button{width:var(--p-table-paginator-action-size, var(--p-table-paginator-action-size-default, 36px));height:var(--p-table-paginator-action-size, var(--p-table-paginator-action-size-default, 36px));display:inline-grid;place-items:center;padding:0;line-height:0;--mdc-icon-button-state-layer-size: var(--p-table-paginator-action-size, var(--p-table-paginator-action-size-default, 36px));--mat-icon-button-state-layer-size: var(--p-table-paginator-action-size, var(--p-table-paginator-action-size-default, 36px))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-icon{display:block;flex:0 0 auto;margin:0}.praxis-table-ai-trigger{transition:background-color .16s ease,box-shadow .16s ease,color .16s ease}.praxis-table-ai-trigger--minimized{background:color-mix(in srgb,var(--md-sys-color-primary-container, rgba(59, 130, 246, .22)) 72%,transparent);color:var(--md-sys-color-on-primary-container, var(--md-sys-color-primary, #2563eb));box-shadow:0 0 0 1px color-mix(in srgb,var(--md-sys-color-primary, #2563eb) 34%,transparent),0 8px 20px color-mix(in srgb,var(--md-sys-color-primary, #2563eb) 16%,transparent)}.praxis-table-ai-trigger--minimized:hover,.praxis-table-ai-trigger--minimized:focus-visible{background:color-mix(in srgb,var(--md-sys-color-primary-container, rgba(59, 130, 246, .22)) 86%,transparent)}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select{margin-left:4px;width:var(--p-table-paginator-select-width, var(--p-table-paginator-select-width-default, 78px))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-text-field-wrapper{--mdc-outlined-text-field-container-color: var( --p-table-paginator-select-bg, var(--p-table-paginator-select-bg-default) );--mdc-outlined-text-field-input-text-color: var( --p-table-paginator-select-text-color, var(--p-table-paginator-select-text-color-default) );min-height:var(--p-table-paginator-select-height, var(--p-table-paginator-select-height-default, 36px));height:var(--p-table-paginator-select-height, var(--p-table-paginator-select-height-default, 36px));padding-inline:var(--p-table-paginator-select-padding-inline, var(--p-table-paginator-select-padding-inline-default, 12px 10px));border:1px solid var(--p-table-paginator-select-border-color, var(--p-table-paginator-select-border-color-default));border-radius:var(--p-table-paginator-select-radius, var(--p-table-paginator-select-radius-default));background:var(--p-table-paginator-select-bg, var(--p-table-paginator-select-bg-default))!important;background-color:var(--p-table-paginator-select-bg, var(--p-table-paginator-select-bg-default))!important;color:var(--p-table-paginator-select-text-color, var(--p-table-paginator-select-text-color-default))!important;box-shadow:var(--p-table-paginator-select-shadow, var(--p-table-paginator-select-shadow-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-text-field-wrapper:hover{border-color:var(--p-table-paginator-select-border-color-hover, var(--p-table-paginator-select-border-color-hover-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select.mat-focused .mat-mdc-text-field-wrapper{border-color:var(--p-table-paginator-select-border-color-focus, var(--p-table-paginator-select-border-color-focus-default));box-shadow:0 0 0 3px var(--p-table-paginator-select-focus-ring, var(--p-table-paginator-select-focus-ring-default)),var(--p-table-paginator-select-shadow, var(--p-table-paginator-select-shadow-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-form-field-flex{min-height:var(--p-table-paginator-select-height, var(--p-table-paginator-select-height-default, 36px));align-items:center}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-form-field-infix{display:flex;align-items:center;min-height:var(--p-table-paginator-select-height, var(--p-table-paginator-select-height-default, 36px));padding-block:0;width:auto}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-select-trigger{min-height:var(--p-table-paginator-select-height, var(--p-table-paginator-select-height-default, 36px));padding-right:2px;color:var(--p-table-paginator-select-text-color, var(--p-table-paginator-select-text-color-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-select-arrow{color:var(--p-table-paginator-select-icon-color, var(--p-table-paginator-select-icon-color-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mdc-notched-outline__leading,:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mdc-notched-outline__notch,:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mdc-notched-outline__trailing{border-color:transparent!important;border-width:0!important}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-range-label{font-size:12px;font-weight:600;color:var(--p-table-paginator-range-text-color, var(--p-table-paginator-range-text-color-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-select-value-text{font-size:12px;font-weight:700;color:var(--p-table-paginator-select-text-color, var(--p-table-paginator-select-text-color-default))}::ng-deep .praxis-table-paginator-select-panel.mat-mdc-select-panel{--mat-select-panel-background-color: var(--md-sys-color-surface-container, #fff);background:var(--md-sys-color-surface-container, #fff)!important;background-color:var(--md-sys-color-surface-container, #fff)!important;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #d7dbe5) 70%,transparent);box-shadow:0 12px 28px color-mix(in srgb,var(--md-sys-color-shadow, #000) 28%,transparent)}::ng-deep .praxis-table-paginator-select-panel .mat-mdc-option{--mat-option-label-text-color: var(--md-sys-color-on-surface, #111827);color:var(--md-sys-color-on-surface, #111827)!important}::ng-deep .praxis-table-paginator-select-panel .mat-mdc-option:hover:not(.mdc-list-item--disabled),::ng-deep .praxis-table-paginator-select-panel .mat-mdc-option.mat-mdc-option-active{--mat-option-hover-state-layer-color: color-mix( in srgb, var(--md-sys-color-primary, #2f7cff) 14%, transparent );background:color-mix(in srgb,var(--md-sys-color-primary, #2f7cff) 14%,transparent)!important;color:var(--md-sys-color-on-surface, #111827)!important}:host [data-role=table-settings].mat-mdc-icon-button{--mdc-icon-button-icon-color: var(--md-sys-color-primary);color:var(--md-sys-color-primary)}.pfx-link{color:var(--md-sys-color-primary);text-decoration:underline;cursor:pointer}.pfx-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:10px;font-size:12px;line-height:1;border:1px solid transparent;white-space:nowrap;--prx-rich-content-inline-gap: 6px}.pfx-chip-icon{font-size:14px;width:14px;height:14px}.pfx-chip--plain{background:transparent;border-color:transparent;color:var(--md-sys-color-on-surface)}.pfx-chip--outlined{background:transparent;border-color:var(--md-sys-color-outline-variant);color:var(--md-sys-color-on-surface)}.pfx-chip--filled-primary{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pfx-chip--filled-accent{background:var(--md-sys-color-secondary);color:var(--md-sys-color-on-secondary)}.pfx-chip--filled-warn,.pfx-chip--filled-danger{background:var(--md-sys-color-error);color:var(--md-sys-color-on-error)}.pfx-chip--filled-success{background:var(--p-table-state-success-bg);color:var(--p-table-state-success-fg)}.pfx-chip--filled-info{background:var(--md-sys-color-tertiary);color:var(--md-sys-color-on-tertiary)}.pfx-chip--filled-basic{background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface);border-color:var(--md-sys-color-outline-variant)}.pfx-chip--soft-primary{background:var(--p-table-badge-soft-primary-bg);color:var(--p-table-badge-soft-primary-fg)}.pfx-chip--soft-accent{background:var(--p-table-badge-soft-accent-bg);color:var(--p-table-badge-soft-accent-fg)}.pfx-chip--soft-warn{background:var(--p-table-badge-soft-warn-bg);color:var(--p-table-badge-soft-warn-fg)}.pfx-chip--soft-danger{background:color-mix(in srgb,var(--p-table-state-danger-bg) 72%,transparent);color:var(--p-table-state-danger-fg);border-color:color-mix(in srgb,var(--p-table-state-danger-fg) 18%,transparent)}.pfx-chip--soft-success{background:color-mix(in srgb,var(--p-table-state-success-bg) 72%,transparent);color:var(--p-table-state-success-fg);border-color:color-mix(in srgb,var(--p-table-state-success-fg) 18%,transparent)}.pfx-chip--soft-info{background:color-mix(in srgb,var(--md-sys-color-tertiary-container) 72%,transparent);color:var(--md-sys-color-on-tertiary-container);border-color:color-mix(in srgb,var(--md-sys-color-tertiary) 18%,transparent)}.pfx-chip--soft-basic{background:color-mix(in srgb,var(--md-sys-color-surface-container-highest) 82%,transparent);color:color-mix(in srgb,var(--md-sys-color-on-surface) 76%,transparent);border-color:color-mix(in srgb,var(--md-sys-color-outline-variant) 65%,transparent)}.pfx-progress{position:relative;width:100%;min-width:0;max-width:140px;display:inline-block;vertical-align:middle}.pfx-progress .pfx-progress__content{width:100%;min-width:0}.pfx-progress .prx-rich-progress{width:100%}.pfx-progress-bar{height:100%;background:var(--md-sys-color-primary);transition:width .2s ease}.pfx-progress-label{margin-left:8px;font-size:12px;opacity:.8;display:inline-block;vertical-align:middle}.pfx-micro-viz-cell{display:inline-block;width:min(100%,180px);min-width:112px;max-width:220px;vertical-align:middle}.pfx-micro-viz-cell .pfx-micro-viz{display:grid;gap:4px;width:100%;min-width:0;color:var(--md-sys-color-on-surface);font-size:12px;line-height:1.2}.pfx-micro-viz-cell .pfx-micro-viz__row{display:grid;grid-template-columns:minmax(42px,.8fr) minmax(52px,1fr) auto;align-items:center;gap:6px;min-width:0}.pfx-micro-viz-cell .pfx-micro-viz__label,.pfx-micro-viz-cell .pfx-micro-viz__value{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pfx-micro-viz-cell .pfx-micro-viz__track{position:relative;display:block;height:8px;min-width:0;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-outline-variant) 62%,transparent);overflow:hidden}.pfx-micro-viz-cell .pfx-micro-viz__bar,.pfx-micro-viz-cell .pfx-micro-viz__segment{display:block;height:100%;border-radius:inherit;background:var(--md-sys-color-primary)}.pfx-micro-viz-cell .pfx-micro-viz__row[data-tone=success] .pfx-micro-viz__bar,.pfx-micro-viz-cell .pfx-micro-viz__segment[data-tone=success],.pfx-micro-viz-cell .pfx-micro-viz[data-tone=success] .pfx-micro-viz__bar{background:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-viz-cell .pfx-micro-viz__row[data-tone=warning] .pfx-micro-viz__bar,.pfx-micro-viz-cell .pfx-micro-viz__segment[data-tone=warning],.pfx-micro-viz-cell .pfx-micro-viz[data-tone=warning] .pfx-micro-viz__bar{background:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-viz-cell .pfx-micro-viz__row[data-tone=danger] .pfx-micro-viz__bar,.pfx-micro-viz-cell .pfx-micro-viz__segment[data-tone=danger],.pfx-micro-viz-cell .pfx-micro-viz[data-tone=danger] .pfx-micro-viz__bar{background:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-viz-cell .pfx-micro-viz__segments{display:flex;width:100%;height:8px;overflow:hidden;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-outline-variant) 62%,transparent)}.pfx-micro-viz-cell .pfx-micro-viz__meta{display:flex;justify-content:space-between;gap:8px;min-width:0;color:color-mix(in srgb,var(--md-sys-color-on-surface) 72%,transparent)}.pfx-micro-viz-cell .pfx-micro-viz__bullet .pfx-micro-viz__target{position:absolute;top:-2px;bottom:-2px;width:2px;border-radius:999px;background:var(--md-sys-color-on-surface)}.pfx-micro-viz-cell .pfx-micro-viz__delta[data-tone=success]{color:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-viz-cell .pfx-micro-viz__delta[data-tone=warning]{color:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-viz-cell .pfx-micro-viz__delta[data-tone=danger]{color:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-viz-cell .pfx-micro-viz__fallback{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__radial,.pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__harvey,.pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__process{display:inline-flex}.pfx-micro-viz__radial{align-items:center;justify-content:center;position:relative}.pfx-micro-radial-svg{width:24px;height:24px;overflow:visible;flex-shrink:0;display:block}.pfx-micro-radial-svg__track{fill:none;stroke:var(--pfx-micro-track-color, var(--md-sys-color-surface-container-high, #e5e7eb));stroke-width:3}.pfx-micro-radial-svg__bar{fill:none;stroke:currentColor;stroke-width:3;stroke-linecap:round;transform:rotate(-90deg);transform-origin:50% 50%;transition:stroke-dasharray .35s ease}.pfx-micro-radial-svg__text{font-size:8px;font-weight:700;text-anchor:middle;fill:currentColor;font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif)}.pfx-micro-viz__harvey{align-items:center;gap:0}.pfx-micro-harvey-svg{width:18px;height:18px;overflow:visible;flex-shrink:0}.pfx-micro-harvey-svg__track{fill:none;stroke:var(--pfx-micro-track-color, var(--md-sys-color-surface-container-high, #e5e7eb));stroke-width:2}.pfx-micro-harvey-svg__bar{fill:none;stroke:currentColor;stroke-width:16;transform:rotate(-90deg);transform-origin:50% 50%;transition:stroke-dasharray .35s ease}.pfx-micro-harvey-fraction{display:inline-flex;align-items:center;font-size:11px;font-variant-numeric:tabular-nums;margin-left:6px;font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif)}.pfx-micro-harvey-fraction strong{color:currentColor;font-weight:700}.pfx-separator{opacity:.6;color:var(--md-sys-color-on-surface-variant, #4b5563);margin-inline:2px}.pfx-total{color:var(--md-sys-color-on-surface-variant, #4b5563)}.pfx-micro-viz__bullet{display:flex;flex-direction:column;gap:4px;width:100%}.pfx-micro-bullet__top{display:flex;justify-content:space-between;align-items:baseline;font-size:11px}.pfx-micro-bullet__label{color:var(--md-sys-color-on-surface-variant, #4b5563);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pfx-micro-bullet__value{font-weight:700;color:currentColor;font-variant-numeric:tabular-nums;flex-shrink:0}.pfx-micro-bullet__target-val{font-weight:400;font-size:10px;color:var(--md-sys-color-on-surface-variant, #4b5563);margin-left:4px}.pfx-micro-bullet__track{position:relative;display:block;overflow:hidden;border-radius:var(--pfx-micro-track-radius, 999px);background:var(--pfx-micro-track-color, var(--md-sys-color-surface-container-high, #e5e7eb));block-size:10px;width:100%}.pfx-micro-bullet__range{position:absolute;inset-block:0;display:block;block-size:100%;opacity:.32}.pfx-micro-bullet__range[data-tone=success]{background:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-bullet__range[data-tone=warning]{background:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-bullet__range[data-tone=danger],.pfx-micro-bullet__range[data-tone=critical]{background:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-bullet__range[data-tone=info]{background:var(--md-sys-color-primary, #2563eb)}.pfx-micro-bullet__actual{position:absolute;inset-block-start:3px;inset-inline-start:0;block-size:4px;border-radius:inherit}.pfx-micro-bullet__actual[data-tone=success]{background:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-bullet__actual[data-tone=warning]{background:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-bullet__actual[data-tone=danger],.pfx-micro-bullet__actual[data-tone=critical]{background:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-bullet__actual[data-tone=info]{background:var(--md-sys-color-primary, #2563eb)}.pfx-micro-bullet__target{position:absolute;inset-block:0;inline-size:2px;background:var(--md-sys-color-on-surface, #111827)}.pfx-micro-bullet__bottom{display:flex;justify-content:space-between;font-size:9px;color:var(--md-sys-color-on-surface-variant, #4b5563)}.pfx-micro-viz-container{display:flex;align-items:center;gap:8px;width:100%}.pfx-micro-trend__label-col{display:flex;flex-direction:column;justify-content:center;font-size:11px;line-height:1.2;flex-shrink:0;min-width:24px;font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif)}.pfx-micro-trend__label-col--start{align-items:flex-end;text-align:right}.pfx-micro-trend__label-col--end{align-items:flex-start;text-align:left}.pfx-micro-trend__value{font-weight:700;color:var(--md-sys-color-on-surface, #1f2937)}.pfx-micro-trend__label{color:var(--md-sys-color-on-surface-variant, #4b5563);font-size:9px}.pfx-micro-viz__line,.pfx-micro-viz__area,.pfx-micro-viz__column{display:block;width:100%;height:30px;overflow:visible;flex:1 1 auto}.pfx-micro-line__svg,.pfx-micro-area__svg,.pfx-micro-column__svg{width:100%;height:100%;display:block;overflow:visible}.pfx-micro-line__path,.pfx-micro-area__path{stroke:currentColor}.pfx-micro-area__fill{fill:currentColor}.pfx-micro-trend__marker{fill:currentColor;stroke:var(--md-sys-color-surface, #ffffff);stroke-width:1.5px}.pfx-micro-trend__marker[data-tone=success]{fill:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-trend__marker[data-tone=warning]{fill:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-trend__marker[data-tone=danger],.pfx-micro-trend__marker[data-tone=critical]{fill:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-trend__marker[data-tone=info]{fill:var(--md-sys-color-primary, #2563eb)}.pfx-micro-viz__process{align-items:center;width:100%;min-width:120px;padding-block:4px;overflow-x:auto;-webkit-overflow-scrolling:touch}.pfx-micro-step{display:flex;align-items:center;flex:1 1 0%;min-width:0}.pfx-micro-step[data-state=future]{opacity:.38}.pfx-micro-step[data-state=disabled]{opacity:.28;pointer-events:none}.pfx-micro-step__node-wrapper{display:flex;flex-direction:column;align-items:center;position:relative;flex-shrink:0}.pfx-micro-step__node{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;font-size:11px;font-weight:700;background:var(--md-sys-color-surface-container-high, #e5e7eb);color:var(--md-sys-color-on-surface, #1f2937);border:2px solid transparent;transition:all .2s ease}.pfx-micro-step__node[data-tone=success]{background:var(--p-table-state-success-fg, #168a4a);color:#fff}.pfx-micro-step__node[data-tone=warning]{background:var(--p-table-state-warning-fg, #b45f06);color:#fff}.pfx-micro-step__node[data-tone=danger],.pfx-micro-step__node[data-tone=critical]{background:var(--p-table-state-danger-fg, #b3261e);color:#fff}.pfx-micro-step__node[data-tone=info]{background:var(--md-sys-color-primary, #2563eb);color:#fff}.pfx-micro-step__icon{font-size:12px}.pfx-micro-step__label{font-size:9px;margin-top:4px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:72px;color:var(--md-sys-color-on-surface-variant, #4b5563)}.pfx-micro-step__connector{flex:1 1 auto;height:2px;background:var(--md-sys-color-surface-container-high, #e5e7eb);margin-inline:8px;min-width:16px}.pfx-micro-step__connector[data-tone=success]{background:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-step__connector[data-tone=warning]{background:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-step__connector[data-tone=danger],.pfx-micro-step__connector[data-tone=critical]{background:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-step__connector[data-tone=info]{background:var(--md-sys-color-primary, #2563eb)}.pfx-micro-viz[data-tone=success]{color:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-viz[data-tone=warning]{color:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-viz[data-tone=danger],.pfx-micro-viz[data-tone=critical]{color:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-viz[data-tone=info]{color:var(--md-sys-color-primary, #2563eb)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz[data-tone=success]{color:var(--p-table-state-success-fg, #168a4a)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz[data-tone=warning]{color:var(--p-table-state-warning-fg, #b45f06)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz[data-tone=critical]{color:var(--p-table-state-danger-fg, #b3261e)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz[data-tone=info]{color:var(--md-sys-color-primary, #2563eb)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__delta{display:inline-flex;align-items:center;justify-content:flex-end;gap:5px;width:auto;min-width:0;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz__delta-symbol{display:inline-grid;width:12px;min-width:12px;height:12px;min-height:12px;place-items:center;border-radius:0;background:transparent;font-size:11px;line-height:1;transform:translateY(-.5px)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__radial,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__harvey{display:inline-flex;align-items:center;justify-content:center;width:auto;min-width:0;height:auto;gap:8px}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__radial{justify-content:flex-start;gap:7px}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-radial-svg{display:block;width:24px;height:24px;overflow:visible;flex:0 0 auto}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-radial-svg__track{fill:none;stroke:var(--pfx-micro-track-color, var(--md-sys-color-surface-container-high, #e5e7eb));stroke-width:3.4}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-radial-svg__bar{fill:none;stroke:currentColor;stroke-width:3.4;stroke-linecap:round;transform:rotate(-90deg);transform-origin:50% 50%}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-radial-svg__text{font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif);font-size:8.5px;font-weight:700;text-anchor:middle;fill:currentColor}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-radial-value{color:currentColor;font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif);font-size:12px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1;white-space:nowrap}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-harvey-svg{display:block;width:26px;height:26px;overflow:visible;flex:0 0 auto}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-harvey-svg__track{fill:none;stroke:var(--pfx-micro-track-color, var(--md-sys-color-surface-container-high, #e5e7eb));stroke-width:2.4}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-harvey-svg__bar{fill:none;stroke:currentColor;stroke-width:16;transform:rotate(-90deg);transform-origin:50% 50%}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-harvey-fraction{display:inline-flex;align-items:center;font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif);font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-harvey-fraction strong{color:currentColor;font-weight:700}:host ::ng-deep .pfx-micro-viz-cell .pfx-separator{margin-inline:2px;color:var(--md-sys-color-on-surface-variant, #4b5563);opacity:.6}:host ::ng-deep .pfx-micro-viz-cell .pfx-total{color:var(--md-sys-color-on-surface-variant, #4b5563)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__process{display:inline-flex;align-items:center;justify-content:center;width:100%;min-width:112px;overflow:hidden}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz-container{display:flex;align-items:center;gap:8px;width:100%;min-width:0}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__line,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__area,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__column{display:block;flex:1 1 auto;width:100%;min-width:0;height:30px;overflow:visible}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-line__svg,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-area__svg,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__svg{display:block;width:100%;height:100%;overflow:visible}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-line__path,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-area__path{stroke:currentColor}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-area__fill{fill:currentColor}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker{fill:currentColor}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar[data-tone=success],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker[data-tone=success]{fill:var(--p-table-state-success-fg, #168a4a)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar[data-tone=warning],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker[data-tone=warning]{fill:var(--p-table-state-warning-fg, #b45f06)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar[data-tone=critical],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker[data-tone=critical]{fill:var(--p-table-state-danger-fg, #b3261e)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar[data-tone=info],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker[data-tone=info]{fill:var(--md-sys-color-primary, #2563eb)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step{display:flex;align-items:center;flex:0 1 auto;min-width:0}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node-wrapper{display:inline-flex;align-items:center;min-width:0}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;background:var(--md-sys-color-surface-container-high, #e5e7eb);color:var(--md-sys-color-on-surface, #1f2937);font-size:12px;font-weight:700;line-height:1;flex:0 0 auto}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__icon{font-size:15px;line-height:1}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__label{display:none}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector{flex:0 1 24px;min-width:12px;max-width:28px;height:2px;margin-inline:6px;background:var(--md-sys-color-surface-container-high, #e5e7eb)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=success],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector[data-tone=success]{background:var(--p-table-state-success-fg, #168a4a)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=warning],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector[data-tone=warning]{background:var(--p-table-state-warning-fg, #b45f06)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=critical],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector[data-tone=critical]{background:var(--p-table-state-danger-fg, #b3261e)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=info],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector[data-tone=info]{background:var(--md-sys-color-primary, #2563eb)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=success],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=warning],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=critical],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=info]{color:var(--md-sys-color-on-primary, #ffffff)}.pfx-avatar{display:inline-flex;align-items:center;justify-content:center;background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface);border-radius:4px;overflow:hidden;font-weight:600}.pfx-avatar.shape-rounded{border-radius:8px}.pfx-avatar.shape-circle{border-radius:999px}.pfx-avatar--initials{text-transform:uppercase;font-size:12px}.pfx-cell-compose{display:inline-flex;align-items:center;gap:6px}.pfx-cell-compose.dir-col{flex-direction:column;align-items:stretch}.pfx-cell-compose.align-start{justify-content:flex-start}.pfx-cell-compose.align-center{justify-content:center}.pfx-cell-compose.align-end{justify-content:flex-end}.pfx-cell-compose.wrap{flex-wrap:wrap}.pfx-cell-compose.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.px-scroll-viewport{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;background:var(--p-table-bg);border-radius:12px 12px 0 0}.px-scroll-viewport:has(.mat-mdc-table.table-stack-top){border-top-left-radius:0;border-top-right-radius:0}.px-scroll-viewport.scroll-none{overflow-x:visible}.px-scroll-viewport.scroll-auto ::ng-deep .mat-mdc-table{width:max-content;min-width:100%}.px-scroll-viewport.scroll-wrap ::ng-deep .mat-mdc-header-cell,.px-scroll-viewport.scroll-wrap ::ng-deep .mat-mdc-cell{white-space:normal;text-overflow:initial}.px-scroll-viewport.scroll-wrap ::ng-deep .mat-mdc-table{width:100%}:host ::ng-deep .mat-mdc-header-row{position:sticky;top:0;z-index:var(--praxis-layer-sticky-local, 100);height:var(--p-table-header-height, var(--p-table-header-height-default, var(--mat-table-header-container-height, 40px)));min-height:var(--p-table-header-height, var(--p-table-header-height-default, var(--mat-table-header-container-height, 40px)));background:var(--p-table-header-bg);color:var(--p-table-header-fg);box-shadow:var(--p-table-header-shadow, 0 1px 0 var(--p-table-border-color));border-bottom:1px solid var(--p-table-border-color)}:host ::ng-deep .mat-mdc-header-cell{color:var(--p-table-header-fg);font-weight:600}:host ::ng-deep .mat-sort-header-content,:host ::ng-deep .mat-mdc-header-row .mat-icon{color:inherit;font-weight:600}:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow,:host ::ng-deep .mat-mdc-header-cell:hover .mat-sort-header-arrow{color:var(--p-table-header-fg)!important}:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow .mat-sort-header-indicator,:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow .mat-sort-header-stem,:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow .mat-sort-header-pointer,:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow .mat-sort-header-pointer-left,:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow .mat-sort-header-pointer-right{border-color:var(--p-table-header-fg)!important;background:var(--p-table-header-fg)!important}:host ::ng-deep .mat-mdc-header-cell{height:var(--p-table-header-height, var(--p-table-header-height-default, var(--mat-table-header-container-height, 40px)));padding:var(--p-header-padding, var(--p-header-padding-default, 12px 16px))!important;font-size:var(--p-header-font-size, var(--p-header-font-size-default, inherit));font-weight:var(--p-header-font-weight, 600);letter-spacing:var(--p-header-letter-spacing, normal);text-transform:var(--p-header-text-transform, none);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-left .mat-sort-header-container{justify-content:flex-start}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-center .mat-sort-header-container{justify-content:center}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-right .mat-sort-header-container{justify-content:flex-end}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-left .praxis-header-label-text{text-align:left}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-center .praxis-header-label-text{text-align:center}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-right .praxis-header-label-text{text-align:right}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell.praxis-header-draggable .mat-sort-header-container{display:flex;align-items:center;width:100%;gap:4px}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell.praxis-header-draggable{-webkit-user-select:none;user-select:none}:host ::ng-deep .mat-mdc-header-cell .praxis-header-sort-trigger{display:block;width:100%;min-width:0}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable{overflow:visible}:host ::ng-deep .mat-mdc-header-cell .praxis-column-resize-handle{position:absolute;z-index:2;inset-block:0;inset-inline-end:0;width:var(--p-table-column-resize-hit-area);cursor:col-resize;touch-action:none;-webkit-user-select:none;user-select:none}:host ::ng-deep .mat-mdc-header-cell .praxis-column-resize-handle:after{content:\"\";position:absolute;inset-block:6px;inset-inline-start:calc((var(--p-table-column-resize-hit-area) - var(--p-table-column-resize-line-width)) / 2);width:var(--p-table-column-resize-line-width);background:var(--p-table-column-resize-separator-color);opacity:.76;transition:background-color .12s ease,opacity .12s ease,transform .12s ease,inset-block .12s ease}:host ::ng-deep .mat-mdc-header-cell .praxis-column-resize-handle:focus-visible{outline:2px solid var(--p-table-column-resize-separator-hover-color);outline-offset:-2px}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable:hover .praxis-column-resize-handle:after,:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable:focus-within .praxis-column-resize-handle:after,:host ::ng-deep .mat-mdc-header-cell .praxis-column-resize-handle:hover:after,:host ::ng-deep .mat-mdc-header-cell .praxis-column-resize-handle:focus-visible:after{background:var(--p-table-column-resize-separator-hover-color);opacity:1}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizing .praxis-column-resize-handle:after{background:var(--p-table-column-resize-active-color);inset-block:0;opacity:1;transform:scaleX(2)}:host ::ng-deep .pfx-column-resizing,:host ::ng-deep .pfx-column-resizing .mat-mdc-header-cell{cursor:col-resize}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell.praxis-header-draggable.cdk-drag-dragging{cursor:grabbing}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell.praxis-header-draggable .mat-sort-header-content{display:inline-flex;align-items:center;gap:4px;flex:1 1 auto;min-width:0;max-width:100%;overflow:hidden}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell .praxis-header-label{display:inline-flex;align-items:center;gap:4px;flex:1 1 auto;min-width:0}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell .praxis-header-label-text{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host ::ng-deep .pfx-column-drag-indicator .cdk-drop-list-dragging .mat-mdc-header-cell:not(.cdk-drag-placeholder){transition:transform var(--p-table-reorder-transition-duration, .18s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1))}:host ::ng-deep .pfx-column-drag-indicator .mat-mdc-header-cell.cdk-drag-animating{transition:transform var(--p-table-reorder-transition-duration, .16s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1))}.pfx-column-drag-preview{box-sizing:border-box;display:flex;align-items:center;border-radius:10px;border:1px solid var(--p-table-border-color);background:linear-gradient(135deg,var(--p-table-header-bg) 0%,var(--p-table-row-hover-bg) 100%);color:var(--p-table-header-fg);box-shadow:var(--p-table-drag-preview-shadow);transform:scale(var(--p-table-drag-preview-scale, 1.01));pointer-events:none;z-index:var(--praxis-layer-authoring-hover, 300)}.pfx-column-drag-preview-custom{height:100%;padding:var(--p-header-padding, var(--p-header-padding-default, 12px 16px))}.pfx-column-drag-preview .mat-sort-header-arrow,.pfx-column-drag-preview .mat-sort-header-indicator,.pfx-column-drag-preview .mat-sort-header-stem,.pfx-column-drag-preview .mat-sort-header-pointer,.pfx-column-drag-preview .mat-sort-header-pointer-left,.pfx-column-drag-preview .mat-sort-header-pointer-right{display:none!important}.pfx-column-drag-preview .mat-sort-header-container{display:flex;align-items:center;width:100%;min-height:100%;padding-right:0!important}.pfx-column-drag-preview .praxis-header-sort-trigger{display:block;width:100%;min-width:0}.pfx-column-drag-preview .mat-sort-header-content,.pfx-column-drag-preview .praxis-header-label{display:inline-flex;align-items:center;flex:1 1 auto;min-width:0;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pfx-column-drag-preview.praxis-header-align-left .mat-sort-header-container,.pfx-column-drag-preview.praxis-header-align-left,.pfx-column-drag-preview.praxis-header-align-left .mat-sort-header-content,.pfx-column-drag-preview.praxis-header-align-left .praxis-header-label{justify-content:flex-start}.pfx-column-drag-preview.praxis-header-align-center .mat-sort-header-container,.pfx-column-drag-preview.praxis-header-align-center,.pfx-column-drag-preview.praxis-header-align-center .mat-sort-header-content,.pfx-column-drag-preview.praxis-header-align-center .praxis-header-label{justify-content:center}.pfx-column-drag-preview.praxis-header-align-right .mat-sort-header-container,.pfx-column-drag-preview.praxis-header-align-right,.pfx-column-drag-preview.praxis-header-align-right .mat-sort-header-content,.pfx-column-drag-preview.praxis-header-align-right .praxis-header-label{justify-content:flex-end}.pfx-column-drag-preview.praxis-header-align-right .mat-sort-header-content{flex:0 1 auto;width:auto;margin-inline-start:auto}.pfx-column-drag-preview.praxis-header-align-right .praxis-header-label{width:auto}.pfx-column-drag-preview.praxis-header-align-left .praxis-header-label-text{text-align:left}.pfx-column-drag-preview.praxis-header-align-center .praxis-header-label-text{text-align:center}.pfx-column-drag-preview.praxis-header-align-right .praxis-header-label-text{text-align:right}:host ::ng-deep .pfx-column-drag-indicator .cdk-drag-placeholder{opacity:1;border:1px dashed var(--p-table-border-color);background:var(--p-table-row-hover-bg)}:host ::ng-deep .pfx-column-drag-indicator .cdk-drag-placeholder *{opacity:0}:host ::ng-deep .pfx-column-drag-indicator .mat-mdc-header-cell.cdk-drag-dragging{opacity:.58}@media(prefers-reduced-motion:reduce){:host ::ng-deep .pfx-column-drag-indicator .cdk-drop-list-dragging .mat-mdc-header-cell:not(.cdk-drag-placeholder){transition:none}.pfx-column-drag-preview{transition:none;transform:none}.praxis-column-reorder-status{animation:none}.pfx-expansion-detail-panel{animation:none!important;transition:none!important;transform:none!important}:host ::ng-deep .mat-mdc-row{transition:none}:host ::ng-deep .mat-mdc-table{transition:none}}.praxis-actions-header{text-align:right}.praxis-actions-header.align-start{text-align:left}.praxis-actions-header.align-center{text-align:center}.praxis-actions-header.align-end{text-align:right}.praxis-actions-header .praxis-actions-header__content{display:inline-flex;align-items:center;gap:var(--p-actions-header-gap, 6px);justify-content:center;max-width:100%;min-width:0;white-space:nowrap;color:var(--p-actions-header-color, inherit)}.praxis-actions-header .praxis-actions-header__content .mat-icon{font-size:18px;width:18px;height:18px;line-height:18px}.praxis-actions-header .praxis-actions-header__label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:640px){.praxis-actions-header .praxis-actions-header__label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}}:host ::ng-deep .mat-mdc-header-cell .mat-sort-header-container{box-sizing:border-box;padding-inline-end:0;position:static}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell.praxis-header-draggable .mat-sort-header-container{padding-inline-end:0}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable:not(.praxis-header-align-right) .mat-sort-header-container{padding-inline-end:calc(var(--p-table-column-resize-hit-area) + 8px)}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable.praxis-header-align-center .mat-sort-header-container{padding-inline-start:calc(var(--p-table-column-resize-hit-area) + 8px)}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable.praxis-header-align-right .mat-sort-header-container{padding-inline-end:0}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable:not(.praxis-header-align-right) .mat-sort-header-content{box-sizing:border-box;padding-inline-end:18px}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable.praxis-header-align-center .mat-sort-header-content{padding-inline-start:0;padding-inline-end:0}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable.praxis-header-align-right .mat-sort-header-content{box-sizing:border-box;flex:0 1 auto;width:auto;padding-inline-start:0;padding-inline-end:0}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable.praxis-header-align-right .praxis-header-label{width:auto}:host ::ng-deep .mat-mdc-header-cell .mat-sort-header-arrow{position:absolute;inset-inline-end:var(--p-table-sort-arrow-overlay-inset, 2px);top:50%;margin:0;transform:translateY(-50%)}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable:not(.praxis-header-align-right) .mat-sort-header-arrow{inset-inline-end:calc(var(--p-table-column-resize-hit-area) + 2px)}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-right .mat-sort-header-arrow{position:static;order:-1;flex:0 0 auto;margin-inline:0 4px;transform:none}:host ::ng-deep .mat-mdc-cell{color:var(--p-table-text-color);height:var(--p-table-row-height, var(--p-table-row-height-default, 44px));padding:var(--p-cell-padding, var(--p-cell-padding-default, 10px 14px));font-size:var(--p-cell-font-size, var(--p-cell-font-size-default, inherit));line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .mat-mdc-cell .pfx-cell-content,:host ::ng-deep .mat-cell .pfx-cell-content{display:inline-flex;align-items:center;gap:6px;width:100%;min-width:0;overflow:hidden}:host ::ng-deep .pfx-cell-content.pfx-cell-anim{animation-duration:var(--pfx-cell-anim-duration, .8s);animation-delay:var(--pfx-cell-anim-delay, 0ms);animation-fill-mode:both;animation-timing-function:ease-in-out}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--once{animation-iteration-count:1}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--loop{animation-iteration-count:infinite}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--count{animation-iteration-count:var(--pfx-cell-anim-iteration-count, 1)}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--on-hover{animation-play-state:paused}:host ::ng-deep .mat-mdc-cell:hover .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--on-hover,:host ::ng-deep .mat-cell:hover .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--on-hover{animation-play-state:running}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--pulse{animation-name:pfx-cell-pulse}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--blink{animation-name:pfx-cell-blink}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--grow{animation-name:pfx-cell-grow}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--fade{animation-name:pfx-cell-fade}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--slide-in{animation-name:pfx-cell-slide-in}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--border-pulse{animation-name:pfx-cell-border-pulse}@keyframes pfx-cell-pulse{0%{transform:scale(1)}50%{transform:scale(var(--pfx-cell-anim-scale-peak, 1.015))}to{transform:scale(1)}}@keyframes pfx-cell-blink{0%,49%{opacity:1}50%,to{opacity:var(--pfx-cell-anim-min-opacity, .35)}}@keyframes pfx-cell-grow{0%{transform:scale(.985)}to{transform:scale(1)}}@keyframes pfx-cell-fade{0%{opacity:0}to{opacity:1}}@keyframes pfx-cell-slide-in{0%{opacity:0;transform:translateY(var(--pfx-cell-anim-slide-distance, 4px))}to{opacity:1;transform:translateY(0)}}@keyframes pfx-cell-border-pulse{0%,to{box-shadow:inset 0 0 rgba(var(--pfx-cell-anim-border-rgb, 25, 118, 210),0)}50%{box-shadow:inset 0 0 0 2px rgba(var(--pfx-cell-anim-border-rgb, 25, 118, 210),var(--pfx-cell-anim-border-strength, .3))}}:host ::ng-deep .mat-mdc-row.pfx-row-anim{animation-duration:var(--pfx-row-anim-duration, .8s);animation-delay:var(--pfx-row-anim-delay, 0ms);animation-fill-mode:both;animation-timing-function:ease-in-out}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--once{animation-iteration-count:1}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--loop{animation-iteration-count:infinite}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--count{animation-iteration-count:var(--pfx-row-anim-iteration-count, 1)}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--on-hover{animation-play-state:paused}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--on-hover:hover{animation-play-state:running}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--pulse{animation-name:pfx-row-pulse}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--blink{animation-name:pfx-row-blink}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--grow{animation-name:pfx-row-grow}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--fade{animation-name:pfx-row-fade}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--slide-in{animation-name:pfx-row-slide-in}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--border-pulse{animation-name:pfx-row-border-pulse}@keyframes pfx-row-pulse{0%{transform:scale(1)}50%{transform:scale(var(--pfx-row-anim-scale-peak, 1.015))}to{transform:scale(1)}}@keyframes pfx-row-blink{0%,49%{opacity:1}50%,to{opacity:var(--pfx-row-anim-min-opacity, .35)}}@keyframes pfx-row-grow{0%{transform:scale(.985)}to{transform:scale(1)}}@keyframes pfx-row-fade{0%{opacity:0}to{opacity:1}}@keyframes pfx-row-slide-in{0%{opacity:0;transform:translateY(var(--pfx-row-anim-slide-distance, 4px))}to{opacity:1;transform:translateY(0)}}@keyframes pfx-row-border-pulse{0%,to{box-shadow:inset 0 0 rgba(var(--pfx-row-anim-border-rgb, 25, 118, 210),0)}50%{box-shadow:inset 0 0 0 2px rgba(var(--pfx-row-anim-border-rgb, 25, 118, 210),var(--pfx-row-anim-border-strength, .3))}}@media(prefers-reduced-motion:reduce){:host ::ng-deep .pfx-cell-content.pfx-cell-anim,:host ::ng-deep .mat-mdc-row.pfx-row-anim{animation:none!important}}:host ::ng-deep .mat-mdc-row:hover{background:var(--p-table-row-hover-bg)}:host ::ng-deep .mat-mdc-row{height:var(--p-table-row-height, var(--p-table-row-height-default, 44px));min-height:var(--p-table-row-height, var(--p-table-row-height-default, 44px));transition:background-color var(--p-table-hover-transition-duration, .18s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1)),box-shadow var(--p-table-selection-transition-duration, .18s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1))}:host ::ng-deep .mat-mdc-row.pfx-row-click-selectable{cursor:pointer}:host ::ng-deep .mat-mdc-row:nth-child(2n){background:var(--p-table-row-even-bg)}:host ::ng-deep .mat-mdc-row:nth-child(2n):hover{background:var(--p-table-row-hover-bg)}:host ::ng-deep .mat-mdc-row.pfx-row-selected,:host ::ng-deep .mat-mdc-row.pfx-row-selected:hover{background:var(--p-table-row-selected-bg)}:host ::ng-deep .mat-mdc-row.pfx-row-selected .mat-mdc-cell{background:var(--p-table-row-selected-bg);color:var(--p-table-row-selected-fg);font-weight:var(--p-table-row-selected-font-weight)}:host ::ng-deep .mat-mdc-row.pfx-row-selected .mat-mdc-cell:first-child{position:relative}:host ::ng-deep .mat-mdc-row.pfx-row-selected .mat-mdc-cell:first-child:before{content:\"\";position:absolute;inset:0 auto 0 0;width:4px;border-radius:0 4px 4px 0;background:var(--p-table-row-selected-indicator);pointer-events:none}:host.row-borders ::ng-deep .mat-mdc-row .mat-mdc-cell{border-bottom:1px solid var(--p-table-border-color)}:host.row-borders ::ng-deep .mat-mdc-header-row .mat-mdc-header-cell{border-bottom:none}:host.col-borders ::ng-deep .mat-mdc-header-row .mat-mdc-header-cell,:host.col-borders ::ng-deep .mat-mdc-row .mat-mdc-cell{border-right:1px solid var(--p-table-border-color)}:host.col-borders ::ng-deep .mat-mdc-header-row .mat-mdc-header-cell:last-child,:host.col-borders ::ng-deep .mat-mdc-row .mat-mdc-cell:last-child{border-right:none}.ptable-error{display:flex;align-items:center;gap:12px;padding:12px;margin:8px 0;border:1px solid var(--md-sys-color-error);border-radius:8px}.ptable-error__content{flex:1}.ptable-error__title{font-weight:600}.ptable-info-banner{display:flex;gap:12px;align-items:center;padding:8px 12px;margin:8px 0;border-radius:8px;border:1px solid var(--md-sys-color-primary);background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.ptable-info-banner .text{flex:1;font-weight:600}.ptable-info-banner .actions{display:flex;gap:8px}.pfx-cell-image{display:inline-block;vertical-align:middle;background:var(--md-sys-color-surface-variant);border:1px solid var(--md-sys-color-outline-variant)}.pfx-cell-image.shape-rounded{border-radius:8px}.pfx-cell-image.shape-circle{border-radius:9999px}.pfx-badge{display:inline-flex;align-items:center;gap:6px;line-height:1;padding:4px 8px;border-radius:9999px;font-size:12px;font-weight:600;border:1px solid transparent;white-space:nowrap;--prx-rich-content-inline-gap: 6px}.pfx-badge .pfx-badge-icon{font-size:16px;width:16px;height:16px}.pfx-badge--plain{background:transparent;border-color:transparent;color:inherit}.pfx-badge--filled-primary{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pfx-badge--filled-accent{background:var(--md-sys-color-secondary);color:var(--md-sys-color-on-secondary)}.pfx-badge--filled-warn,.pfx-badge--filled-danger{background:var(--md-sys-color-error);color:var(--md-sys-color-on-error)}.pfx-badge--filled-success{background:var(--p-table-state-success-bg);color:var(--p-table-state-success-fg)}.pfx-badge--filled-info{background:var(--md-sys-color-tertiary);color:var(--md-sys-color-on-tertiary)}.pfx-badge--filled-basic{background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface);border-color:var(--md-sys-color-outline-variant)}.pfx-badge--outlined{background:transparent;border-color:var(--md-sys-color-outline-variant);color:inherit}.pfx-badge--soft-primary{background:var(--p-table-badge-soft-primary-bg);color:var(--p-table-badge-soft-primary-fg)}.pfx-badge--soft-accent{background:var(--p-table-badge-soft-accent-bg);color:var(--p-table-badge-soft-accent-fg)}.pfx-badge--soft-warn{background:var(--p-table-badge-soft-warn-bg);color:var(--p-table-badge-soft-warn-fg)}.pfx-badge--soft-danger{background:color-mix(in srgb,var(--p-table-state-danger-bg) 72%,transparent);color:var(--p-table-state-danger-fg);border-color:color-mix(in srgb,var(--p-table-state-danger-fg) 18%,transparent)}.pfx-badge--soft-success{background:color-mix(in srgb,var(--p-table-state-success-bg) 72%,transparent);color:var(--p-table-state-success-fg);border-color:color-mix(in srgb,var(--p-table-state-success-fg) 18%,transparent)}.pfx-badge--soft-info{background:color-mix(in srgb,var(--md-sys-color-tertiary-container) 72%,transparent);color:var(--md-sys-color-on-tertiary-container);border-color:color-mix(in srgb,var(--md-sys-color-tertiary) 18%,transparent)}.pfx-badge--soft-basic{background:color-mix(in srgb,var(--md-sys-color-surface-container-highest) 82%,transparent);color:color-mix(in srgb,var(--md-sys-color-on-surface) 76%,transparent);border-color:color-mix(in srgb,var(--md-sys-color-outline-variant) 65%,transparent)}.pfx-icon-renderer,:host ::ng-deep .pfx-icon-renderer__content{--prx-rich-content-inline-gap: var(--p-table-icon-value-gap, .04rem)}.pfx-icon-renderer__prefix,.pfx-icon-renderer__suffix,:host ::ng-deep .pfx-icon-renderer__prefix,:host ::ng-deep .pfx-icon-renderer__suffix{color:var(--p-table-icon-value-affix-color, currentColor);font-size:var(--p-table-icon-value-affix-font-size, .95em);font-weight:var(--p-table-icon-value-affix-font-weight, 500);line-height:1;opacity:var(--p-table-icon-value-affix-opacity, .72)}.pfx-icon-renderer__label,:host ::ng-deep .pfx-icon-renderer__label{color:var(--p-table-icon-value-color, currentColor);font-weight:var(--p-table-icon-value-font-weight, inherit);font-variant-numeric:tabular-nums;line-height:1}.row--success,.row--success td,td.row--success{background-color:var(--p-table-state-success-bg)!important;color:var(--p-table-state-success-fg)!important}.row--warning,.row--warning td,td.row--warning{background-color:var(--p-table-state-warning-bg)!important;color:var(--p-table-state-warning-fg)!important}.row--danger,.row--danger td,td.row--danger{background-color:var(--p-table-state-danger-bg)!important;color:var(--p-table-state-danger-fg)!important}.row--highlight,.row--highlight td,td.row--highlight{background-color:var(--p-table-state-highlight-bg)!important;color:var(--p-table-state-highlight-fg)!important;font-weight:600}.row--muted,.row--muted td,td.row--muted{opacity:.7;filter:saturate(.6)}.pfx-expansion-node-embed{display:flex;flex-direction:column;gap:12px;padding:16px;border:1px solid var(--md-sys-color-outline-variant);border-radius:16px;background:var(--md-sys-color-surface-container-low, var(--md-sys-color-surface))}.ptable-loading-state{padding:8px 12px 4px;display:grid;gap:10px}.ptable-loading-state__hero{display:grid;gap:10px;padding:14px;border-radius:8px;border:1px solid rgba(18,99,180,.08);background:linear-gradient(180deg,#ffffffa6,#ffffff47),linear-gradient(0deg,#1263b408,#1263b400)}.ptable-loading-state__rows{display:grid;gap:8px}.ptable-loading-state__row{display:grid;grid-template-columns:96px minmax(0,1fr) minmax(140px,1.2fr);gap:8px}.ptable-loading-state__line,.ptable-loading-state__cell{display:block;height:12px;border-radius:999px;background:linear-gradient(90deg,#1263b414,#1263b42e,#1263b414);background-size:200% 100%;animation:ptable-loading-wave 1.2s ease-in-out infinite}.ptable-loading-state__line--wide{width:180px}.ptable-loading-state__line--short{width:96px}.ptable-loading-state__cell--short{width:100%;max-width:84px}.ptable-loading-state__cell--wide{width:100%}.ptable-loading-state__message{font-size:.85rem;color:var(--md-sys-color-on-surface-variant, #5a5d67);padding-inline:4px}.pfx-expansion-node-embed__header,.pfx-expansion-node-embed__meta,.pfx-expansion-node-embed__empty,.pfx-expansion-node-embed__diagram-label{display:block}.pfx-expansion-node-embed--inline{min-width:0}.pfx-expansion-node-embed--chart praxis-chart{display:block;min-height:280px}.ptable-no-data-state{padding:8px 12px 4px}.ptable-no-data-state ::ng-deep .empty-card{margin:0;border-radius:8px}@keyframes ptable-loading-wave{0%{background-position:100% 0}to{background-position:-100% 0}}.pfx-expansion-node-embed__diagram{display:flex;flex-direction:column;gap:8px}.pfx-expansion-node-embed__diagram-source{margin:0;padding:12px;overflow:auto;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-highest, var(--md-sys-color-surface));color:var(--md-sys-color-on-surface);font-family:Consolas,Courier New,monospace;font-size:12px;line-height:1.4;white-space:pre-wrap}.pfx-expansion-node-embed__action-btn{align-self:flex-start}.pfx-expansion-node-embed__action-host{display:inline-flex}.praxis-table-columns-menu{max-height:320px;overflow-y:auto;padding:8px 0}.praxis-table-column-menu-item{display:flex!important;align-items:center;width:100%;box-sizing:border-box;padding:6px 16px;min-height:40px}.praxis-table-column-menu-item mat-checkbox{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10$1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: i10$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i10$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i11$1.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "directive", type: i12.ɵɵCdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i12.ɵɵCdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i12.ɵɵCdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i13.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i13.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i13.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i15$1.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { 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.MatMiniFabButton, selector: "button[mat-mini-fab], a[mat-mini-fab], button[matMiniFab], a[matMiniFab]", 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: MatCheckboxModule }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "component", type: i17$1.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i20.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i5$1.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: MatSnackBarModule }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i22.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i22.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i8$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i8$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i8$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i8$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i8$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i8$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i8$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i8$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i8$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i8$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: PraxisAiAssistantShellComponent, selector: "praxis-ai-assistant-shell", inputs: ["labels", "mode", "state", "contextItems", "attachments", "messages", "quickReplies", "recommendedIntents", "prompt", "statusText", "errorText", "testIdPrefix", "panelTestId", "submitTestId", "applyTestId", "primaryAction", "secondaryActions", "governanceActions", "busy", "canSubmit", "canApply", "submitOnEnter", "showAttachAction", "enablePastedAttachments", "enableFileAttachments", "attachmentAccept", "attachmentMultiple", "voiceInputMode", "voiceLanguage", "draggable", "resizable", "minWidth", "minHeight", "margin", "layout"], outputs: ["promptChange", "submitPrompt", "apply", "retryTurn", "cancelTurn", "shellAction", "close", "attach", "attachmentsPasted", "attachmentsSelected", "removeAttachment", "messageAction", "editMessage", "resendMessage", "quickReply", "recommendedIntent", "layoutChange"] }, { kind: "component", type: PraxisFilter, selector: "praxis-filter", inputs: ["resourcePath", "apiUrlEntry", "fieldMetadata", "filterId", "formId", "componentInstanceId", "mode", "notifyIfOutdated", "snoozeMs", "autoOpenSettingsOnOutdated", "enableCustomization", "value", "alwaysVisibleFields", "alwaysVisibleFieldMetadataOverrides", "selectedFieldIds", "tags", "allowSaveTags", "persistenceKey", "disablePersistence", "i18n", "changeDebounceMs", "showFilterSettings", "showAdvancedButton", "showAddButton", "showClearButton", "showSearchButton", "confirmTagDelete", "placeBooleansInActions", "showToggleLabels", "useInlineSelectVariant", "useInlineSearchableSelectVariant", "useInlineMultiSelectVariant", "useInlineInputVariant", "useInlineToggleVariant", "useInlineRangeVariant", "useInlineDateVariant", "useInlineDateRangeVariant", "useInlineTimeVariant", "useInlineTimeRangeVariant", "useInlineTreeSelectVariant", "alwaysMinWidth", "alwaysColsMd", "alwaysColsLg", "tagColor", "tagVariant", "tagButtonColor", "actionsButtonColor", "actionsVariant", "overlayVariant", "overlayBackdrop", "advancedOpenMode", "advancedClearButtonsEnabled"], outputs: ["submit", "change", "clear", "modeChange", "requestSearch", "tagsChange", "selectedFieldIdsChange", "metaChanged", "schemaStatusChange"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "component", type: PraxisTableToolbar, selector: "praxis-table-toolbar", inputs: ["config", "appearance", "backgroundColor", "placement", "showMain", "showActionsGroup", "showEndActions", "showMobileActions", "exportBusy", "evaluationContext", "columnVisibilityController"], outputs: ["toolbarAction", "exportAction", "columnVisibilityToggle"] }, { kind: "component", type: PraxisRichContent, selector: "praxis-rich-content", inputs: ["document", "nodes", "context", "hostCapabilities", "layout", "rootClassName"] }, { kind: "component", type: EmptyStateCardComponent, selector: "praxis-empty-state-card", inputs: ["icon", "title", "description", "primaryAction", "secondaryActions", "inline", "tone", "variant", "alignment", "density", "iconContainer"] }, { kind: "component", type: TableRatingCellComponent, selector: "praxis-table-rating", inputs: ["itemsCount", "value", "size", "ratingColor", "outlineColor", "ariaLabel"] }] });
56559
+ ], queries: [{ propertyName: "toolbar", first: true, predicate: PraxisTableToolbar, descendants: true }, { propertyName: "projectedFilter", first: true, predicate: ["projectedFilter"], descendants: true }], viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "materialTable", first: true, predicate: MatTable, descendants: true }, { propertyName: "internalFilter", first: true, predicate: PraxisFilter, descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (shouldShowEmptyState()) {\n <praxis-empty-state-card\n icon=\"link\"\n [title]=\"'Escolha o recurso da tabela'\"\n [description]=\"'Selecione um recurso da API para carregar colunas, registros e a\u00E7\u00F5es da tabela automaticamente.'\"\n [primaryAction]=\"{ label: 'Selecionar recurso', icon: 'bolt', action: openQuickConnect.bind(this) }\"\n ></praxis-empty-state-card>\n}\n\n<!-- Error State with Quick Connect CTA -->\n@if (isRemoteMode() && (schemaError || dataError)) {\n <div class=\"ptable-error\" role=\"alert\" aria-live=\"assertive\">\n <mat-icon color=\"warn\" aria-hidden=\"true\">error</mat-icon>\n <div class=\"ptable-error__content\">\n <praxis-rich-content\n rootClassName=\"ptable-error__title\"\n [nodes]=\"getTableChromeTextRichContentNodes('Erro', 'ptable-error__title-text')\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"ptable-error__message\"\n [nodes]=\"getTableChromeTextRichContentNodes(errorMessage || 'Ocorreu um erro ao carregar a tabela.', 'ptable-error__message-text')\"\n ></praxis-rich-content>\n </div>\n <button mat-flat-button color=\"primary\" (click)=\"openQuickConnect()\">\n <mat-icon>bolt</mat-icon>\n <praxis-rich-content\n rootClassName=\"ptable-error__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Selecionar recurso', 'ptable-error__action-label-text')\"\n ></praxis-rich-content>\n </button>\n @if (isCustomizationAvailable()) {\n <button\n mat-icon-button\n color=\"primary\"\n data-role=\"table-settings\"\n data-testid=\"table-settings-trigger\"\n (click)=\"openTableSettings()\"\n [attr.aria-label]=\"getTableSettingsLabel()\"\n [matTooltip]=\"getTableSettingsLabel()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>settings</mat-icon>\n </button>\n }\n @if (!schemaError) {\n <button mat-stroked-button (click)=\"retryData()\">\n <praxis-rich-content\n rootClassName=\"ptable-error__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Tentar novamente', 'ptable-error__action-label-text')\"\n ></praxis-rich-content>\n </button>\n }\n @if (schemaError) {\n <button mat-stroked-button (click)=\"reloadSchema()\">\n <praxis-rich-content\n rootClassName=\"ptable-error__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Recarregar colunas', 'ptable-error__action-label-text')\"\n ></praxis-rich-content>\n </button>\n }\n </div>\n}\n\n<!-- Inline banner for schema change (only in edit mode) -->\n@if (shouldShowOutdatedInline()) {\n <div class=\"ptable-info-banner\" role=\"status\" aria-live=\"polite\">\n <praxis-rich-content\n rootClassName=\"text\"\n [nodes]=\"getTableChromeTextRichContentNodes('O schema do servidor mudou. Reconciliar agora?', 'ptable-info-banner__text')\"\n ></praxis-rich-content>\n <div class=\"actions\">\n <button mat-stroked-button color=\"primary\" (click)=\"onReconcileRequested()\">\n <mat-icon>sync</mat-icon>\n <praxis-rich-content\n rootClassName=\"ptable-info-banner__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Reconciliar', 'ptable-info-banner__action-label-text')\"\n ></praxis-rich-content>\n </button>\n <button mat-button (click)=\"onSnoozeOutdated()\">\n <praxis-rich-content\n rootClassName=\"ptable-info-banner__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Lembrar depois', 'ptable-info-banner__action-label-text')\"\n ></praxis-rich-content>\n </button>\n <button mat-button (click)=\"onIgnoreOutdated()\">\n <praxis-rich-content\n rootClassName=\"ptable-info-banner__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Ignorar', 'ptable-info-banner__action-label-text')\"\n ></praxis-rich-content>\n </button>\n </div>\n </div>\n}\n\n@if (isAiAssistantEnabled() && aiAssistantOpen && aiAssistantViewState) {\n <praxis-ai-assistant-shell\n [labels]=\"aiAssistantLabels\"\n [mode]=\"aiAssistantViewState.mode\"\n [state]=\"aiAssistantViewState.state\"\n [contextItems]=\"aiAssistantViewState.contextItems\"\n [attachments]=\"aiAssistantViewState.attachments\"\n [messages]=\"aiAssistantViewState.messages\"\n [quickReplies]=\"aiAssistantViewState.quickReplies\"\n [recommendedIntents]=\"getAiAssistantRecommendedIntents()\"\n [prompt]=\"aiAssistantPrompt\"\n [statusText]=\"aiAssistantViewState.statusText\"\n [errorText]=\"aiAssistantViewState.errorText\"\n [busy]=\"aiAssistantViewState.state === 'processing' || aiAssistantViewState.state === 'applying'\"\n [canApply]=\"aiAssistantViewState.canApply\"\n [showAttachAction]=\"false\"\n [enablePastedAttachments]=\"false\"\n [voiceInputMode]=\"aiAssistantVoiceInputMode\"\n [voiceLanguage]=\"aiAssistantVoiceLanguage\"\n [layout]=\"aiAssistantLayout\"\n testIdPrefix=\"table-ai-assistant\"\n panelTestId=\"table-ai-assistant-panel\"\n submitTestId=\"table-ai-assistant-submit\"\n applyTestId=\"table-ai-assistant-apply\"\n (promptChange)=\"onAiAssistantPromptChange($event)\"\n (submitPrompt)=\"onAiAssistantSubmit($event)\"\n (apply)=\"onAiAssistantApply()\"\n (retryTurn)=\"onAiAssistantRetry()\"\n (cancelTurn)=\"onAiAssistantCancel()\"\n (quickReply)=\"onAiAssistantQuickReply($event)\"\n (recommendedIntent)=\"onAiAssistantRecommendedIntent($event)\"\n (editMessage)=\"onAiAssistantEditMessage($event)\"\n (resendMessage)=\"onAiAssistantResendMessage($event)\"\n (layoutChange)=\"onAiAssistantLayoutChange($event)\"\n (close)=\"closeAiAssistant()\"\n ></praxis-ai-assistant-shell>\n}\n\n@if (shouldRenderDataSurface() && !schemaError && !dataError && toolbarV2) {\n <div class=\"praxis-table-header\" [class.edit-mode]=\"isCustomizationAvailable()\" [class.stacked]=\"hasTopToolbarStack()\">\n @if (showToolbar && shouldShowToolbarTopPlacement()) {\n <praxis-table-toolbar\n class=\"praxis-toolbar-stack-top\"\n [config]=\"config\"\n [backgroundColor]=\"getToolbarActionsBackgroundColor()\"\n [style.--pfx-filter-h]=\"getToolbarLayoutHeightHostStyle()\"\n [evaluationContext]=\"getToolbarEvaluationContext()\"\n [columnVisibilityController]=\"toolbarColumnVisibilityController\"\n [showActionsGroup]=\"shouldShowToolbarActionsTop()\"\n [showMobileActions]=\"shouldShowToolbarActionsTop()\"\n [exportBusy]=\"exportBusy\"\n (toolbarAction)=\"onToolbarAction($event)\"\n (exportAction)=\"onExportAction($event)\"\n >\n @if (shouldRenderAdvancedFilter()) {\n <praxis-filter\n advancedFilter\n [resourcePath]=\"getAdvancedFilterResourcePath()\"\n [filterId]=\"tableId\"\n [formId]=\"tableId\"\n [persistenceKey]=\"getAdvancedFilterPersistenceKey()\"\n [fieldMetadata]=\"getAdvancedFilterFieldMetadata()\"\n [enableCustomization]=\"isCustomizationAvailable()\"\n [value]=\"advancedFilterValue\"\n\n [alwaysVisibleFields]=\"getAdvancedFilterAlwaysVisibleFields()\"\n [alwaysVisibleFieldMetadataOverrides]=\"getAdvancedFilterAlwaysVisibleFieldMetadataOverrides()\"\n [selectedFieldIds]=\"config.behavior?.filtering?.advancedFilters?.settings?.selectedFieldIds ?? []\"\n [allowSaveTags]=\"config.behavior?.filtering?.advancedFilters?.settings?.allowSaveTags\"\n [changeDebounceMs]=\"config.behavior?.filtering?.advancedFilters?.settings?.changeDebounceMs ?? 300\"\n [i18n]=\"getFilterI18n()\"\n [mode]=\"'filter'\"\n [showFilterSettings]=\"isCustomizationAvailable()\"\n (change)=\"onAdvancedFilterChange($event)\"\n (requestSearch)=\"onAdvancedFilterSubmit($event)\"\n (clear)=\"onAdvancedFilterClear()\"\n ></praxis-filter>\n }\n <ng-content select=\"[advancedFilter]\" />\n <ng-content select=\"[toolbar]\" />\n\n <!-- AI Assistant in Toolbar -->\n @if (shouldShowAiAssistantEntrypoint()) {\n <button\n end-actions\n mat-icon-button\n color=\"primary\"\n type=\"button\"\n class=\"praxis-table-ai-trigger praxis-table-toolbar-action--ai\"\n [class.praxis-table-ai-trigger--minimized]=\"hasMinimizedAiAssistantSession()\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('toolbar-top')\"\n (click)=\"openAiAssistant()\"\n [attr.aria-label]=\"aiAssistantTriggerLabel()\"\n [matBadge]=\"aiAssistantTriggerBadge()\"\n [matBadgeHidden]=\"!hasMinimizedAiAssistantSession()\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"aiAssistantTriggerTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>{{ aiAssistantTriggerIcon() }}</mat-icon>\n </button>\n }\n\n @if (isCustomizationAvailable()) {\n <button end-actions mat-icon-button color=\"primary\" class=\"praxis-table-toolbar-action--configuration\" data-role=\"table-settings\" data-testid=\"table-settings-trigger\"\n (click)=\"openTableSettings()\" [attr.aria-label]=\"getTableSettingsLabel()\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"getTableSettingsTooltip()\"\n matTooltipPosition=\"below\">\n <mat-icon>settings</mat-icon>\n </button>\n }\n </praxis-table-toolbar>\n }\n @if (!showToolbar && isCustomizationAvailable()) {\n <div class=\"ptable-header-actions\">\n @if (shouldShowAiAssistantEntrypoint()) {\n <button\n mat-icon-button\n color=\"primary\"\n type=\"button\"\n class=\"praxis-table-ai-trigger praxis-table-toolbar-action--ai\"\n [class.praxis-table-ai-trigger--minimized]=\"hasMinimizedAiAssistantSession()\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('header-top')\"\n (click)=\"openAiAssistant()\"\n [attr.aria-label]=\"aiAssistantTriggerLabel()\"\n [matBadge]=\"aiAssistantTriggerBadge()\"\n [matBadgeHidden]=\"!hasMinimizedAiAssistantSession()\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"aiAssistantTriggerTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>{{ aiAssistantTriggerIcon() }}</mat-icon>\n </button>\n }\n <button mat-icon-button color=\"primary\" class=\"praxis-table-toolbar-action--configuration\" data-role=\"table-settings\" data-testid=\"table-settings-trigger\" (click)=\"openTableSettings()\" [attr.aria-label]=\"getTableSettingsLabel()\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"getTableSettingsTooltip()\"\n matTooltipPosition=\"below\">\n <mat-icon>settings</mat-icon>\n </button>\n @if (isRemoteMode()) {\n <button mat-icon-button (click)=\"disconnect()\" [attr.aria-label]=\"getDisconnectLabel()\" [matTooltip]=\"getDisconnectTooltip()\">\n <mat-icon>link_off</mat-icon>\n </button>\n }\n </div>\n }\n </div>\n} @else {\n @if (shouldRenderDataSurface() && !schemaError && !dataError) {\n @if (showToolbar && shouldShowToolbarTopPlacement()) {\n <praxis-table-toolbar\n class=\"praxis-toolbar-stack-top\"\n [config]=\"config\"\n [backgroundColor]=\"getToolbarActionsBackgroundColor()\"\n [style.--pfx-filter-h]=\"getToolbarLayoutHeightHostStyle()\"\n [evaluationContext]=\"getToolbarEvaluationContext()\"\n [showActionsGroup]=\"shouldShowToolbarActionsTop()\"\n [showMobileActions]=\"shouldShowToolbarActionsTop()\"\n [exportBusy]=\"exportBusy\"\n (toolbarAction)=\"onToolbarAction($event)\"\n (exportAction)=\"onExportAction($event)\"\n >\n @if (shouldRenderAdvancedFilter()) {\n <praxis-filter\n advancedFilter\n [resourcePath]=\"getAdvancedFilterResourcePath()\"\n [filterId]=\"tableId\"\n [formId]=\"tableId\"\n [persistenceKey]=\"getAdvancedFilterPersistenceKey()\"\n [fieldMetadata]=\"getAdvancedFilterFieldMetadata()\"\n [enableCustomization]=\"isCustomizationAvailable()\"\n [value]=\"advancedFilterValue\"\n\n [alwaysVisibleFields]=\"getAdvancedFilterAlwaysVisibleFields()\"\n [alwaysVisibleFieldMetadataOverrides]=\"getAdvancedFilterAlwaysVisibleFieldMetadataOverrides()\"\n [selectedFieldIds]=\"config.behavior?.filtering?.advancedFilters?.settings?.selectedFieldIds ?? []\"\n [allowSaveTags]=\"config.behavior?.filtering?.advancedFilters?.settings?.allowSaveTags\"\n [changeDebounceMs]=\"config.behavior?.filtering?.advancedFilters?.settings?.changeDebounceMs ?? 300\"\n [i18n]=\"getFilterI18n()\"\n [mode]=\"'filter'\"\n [showFilterSettings]=\"isCustomizationAvailable()\"\n (change)=\"onAdvancedFilterChange($event)\"\n (requestSearch)=\"onAdvancedFilterSubmit($event)\"\n (clear)=\"onAdvancedFilterClear()\"\n ></praxis-filter>\n }\n <ng-content select=\"[advancedFilter]\" />\n <ng-content select=\"[toolbar]\" />\n @if (shouldShowAiAssistantEntrypoint()) {\n <button\n end-actions\n mat-icon-button\n color=\"primary\"\n type=\"button\"\n class=\"praxis-table-ai-trigger praxis-table-toolbar-action--ai\"\n [class.praxis-table-ai-trigger--minimized]=\"hasMinimizedAiAssistantSession()\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('toolbar-stacked')\"\n (click)=\"openAiAssistant()\"\n [attr.aria-label]=\"aiAssistantTriggerLabel()\"\n [matBadge]=\"aiAssistantTriggerBadge()\"\n [matBadgeHidden]=\"!hasMinimizedAiAssistantSession()\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"aiAssistantTriggerTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>{{ aiAssistantTriggerIcon() }}</mat-icon>\n </button>\n }\n @if (isCustomizationAvailable()) {\n <button end-actions mat-icon-button color=\"primary\" class=\"praxis-table-toolbar-action--configuration\" data-role=\"table-settings\" data-testid=\"table-settings-trigger\"\n (click)=\"openTableSettings()\" [attr.aria-label]=\"getTableSettingsLabel()\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"getTableSettingsTooltip()\"\n matTooltipPosition=\"below\">\n <mat-icon>settings</mat-icon>\n </button>\n }\n </praxis-table-toolbar>\n }\n @if (!showToolbar && isCustomizationAvailable()) {\n <div class=\"ptable-header-actions\">\n @if (shouldShowAiAssistantEntrypoint()) {\n <button\n mat-icon-button\n color=\"primary\"\n type=\"button\"\n class=\"praxis-table-ai-trigger praxis-table-toolbar-action--ai\"\n [class.praxis-table-ai-trigger--minimized]=\"hasMinimizedAiAssistantSession()\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('header-stacked')\"\n (click)=\"openAiAssistant()\"\n [attr.aria-label]=\"aiAssistantTriggerLabel()\"\n [matBadge]=\"aiAssistantTriggerBadge()\"\n [matBadgeHidden]=\"!hasMinimizedAiAssistantSession()\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"aiAssistantTriggerTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>{{ aiAssistantTriggerIcon() }}</mat-icon>\n </button>\n }\n <button mat-icon-button color=\"primary\" class=\"praxis-table-toolbar-action--configuration\" data-role=\"table-settings\" data-testid=\"table-settings-trigger\" (click)=\"openTableSettings()\" [attr.aria-label]=\"getTableSettingsLabel()\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"getTableSettingsTooltip()\"\n matTooltipPosition=\"below\">\n <mat-icon>settings</mat-icon>\n </button>\n </div>\n }\n }\n}\n<!-- Paginador superior -->\n@if (shouldRenderDataSurface() && !schemaError && !dataError && getPaginationEnabled() && (config.behavior?.pagination?.position === 'top' || config.behavior?.pagination?.position === 'both')) {\n <mat-paginator\n [length]=\"getPaginationLength()\"\n [pageSize]=\"getPaginationPageSize()\"\n [pageSizeOptions]=\"getPaginationPageSizeOptions()\"\n [selectConfig]=\"paginatorSelectConfig\"\n [showFirstLastButtons]=\"getPaginationShowFirstLast()\"\n (page)=\"onPageChange($event)\"\n [class.compact]=\"config.behavior?.pagination?.style === 'compact'\"\n >\n </mat-paginator>\n}\n<div class=\"px-scroll-viewport\"\n cdkScrollable\n [class.scroll-auto]=\"horizontalScroll === 'auto'\"\n [class.scroll-wrap]=\"horizontalScroll === 'wrap'\"\n [class.scroll-none]=\"horizontalScroll === 'none'\">\n\n @if (shouldRenderDataSurface() && !schemaError && !dataError) {\n <div class=\"praxis-visually-hidden-status\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ columnReorderStatusMessage }}\n </div>\n @if (exportStatusMessage) {\n <div class=\"praxis-visually-hidden-status\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ exportStatusMessage }}\n </div>\n }\n @if (columnReorderVisualStatusMessage) {\n <div class=\"praxis-column-reorder-status\" role=\"note\">\n {{ columnReorderVisualStatusMessage }}\n </div>\n }\n <table\n mat-table\n data-testid=\"table-column-drag-drop-list\"\n [dataSource]=\"dataSource\"\n [multiTemplateDataRows]=\"isRowExpansionRuntimeEnabled()\"\n cdkDropList\n [cdkDropListDisabled]=\"!isColumnDraggingEnabled() || isColumnResizeActive()\"\n [cdkDropListData]=\"visibleDataColumnsForDrag\"\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"onColumnDrop($event)\"\n matSort\n (matSortChange)=\"onSortChange($event)\"\n [matSortDisabled]=\"!getSortingEnabled() || isColumnResizeActive()\"\n [ngClass]=\"getTableElevationClassName()\"\n [class.table-stack-top]=\"hasTopToolbarStack()\"\n [class.pfx-column-drag-enabled]=\"isColumnDraggingEnabled()\"\n [class.pfx-column-drag-indicator]=\"isColumnDragIndicatorEnabled()\"\n [class.pfx-column-resize-enabled]=\"isColumnResizeEnabled()\"\n [class.pfx-column-resizing]=\"isColumnResizeActive()\"\n [style.width]=\"getColumnResizeTableWidthStyle()\"\n [style.min-width]=\"getColumnResizeTableWidthStyle()\"\n [style.max-width]=\"getColumnResizeTableWidthStyle()\"\n >\n @if (isSelectionColumnEnabled()) {\n <ng-container\n matColumnDef=\"_select\"\n >\n <th mat-header-cell *matHeaderCellDef>\n @if (canSelectAll()) {\n <mat-checkbox\n (change)=\"masterToggle()\"\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\n [attr.aria-label]=\"getMasterSelectionAriaLabel()\"\n ></mat-checkbox>\n }\n </th>\n <td mat-cell *matCellDef=\"let row; let i = index\">\n @if (config.behavior?.selection?.type !== 'multiple') {\n <mat-radio-button\n (click)=\"$event.stopPropagation(); toggleRow(row)\"\n [checked]=\"selection.isSelected(row)\"\n [attr.aria-label]=\"getRowSelectionAriaLabel(row, i)\"\n ></mat-radio-button>\n } @else {\n <mat-checkbox\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleRow(row)\"\n [checked]=\"selection.isSelected(row)\"\n [attr.aria-label]=\"getRowSelectionAriaLabel(row, i)\"\n ></mat-checkbox>\n }\n </td>\n </ng-container>\n }\n\n @if (isRowExpansionRuntimeEnabled()) {\n <ng-container matColumnDef=\"_expander\">\n <th mat-header-cell *matHeaderCellDef class=\"pfx-expansion-col-header\">\n <span class=\"praxis-visually-hidden-status\">Expandir detalhes da linha</span>\n </th>\n <td mat-cell *matCellDef=\"let row; let i = index\" class=\"pfx-expansion-col-cell\">\n <button\n mat-icon-button\n class=\"pfx-expansion-toggle\"\n [disabled]=\"!isRowExpandable(row, i) || !isExpansionIconTriggerEnabled()\"\n [attr.aria-expanded]=\"isRowExpanded(row, i) ? 'true' : 'false'\"\n [attr.aria-controls]=\"getRowExpansionDetailId(row, i)\"\n [attr.aria-label]=\"getRowExpansionToggleAriaLabel(row, i)\"\n (click)=\"onExpansionToggleFromIcon(row, i, $event)\"\n (keydown)=\"onExpansionToggleKeydown($event, row, i)\"\n >\n <mat-icon [praxisIcon]=\"isRowExpanded(row, i)\n ? getExpansionExpandedIcon()\n : getExpansionCollapsedIcon()\"></mat-icon>\n </button>\n </td>\n </ng-container>\n }\n @for (column of visibleColumns; track column.field) {\n <ng-container\n [matColumnDef]=\"column.field\"\n [sticky]=\"column.sticky === true || column.sticky === 'start'\"\n [stickyEnd]=\"column.sticky === 'end'\"\n >\n <th\n mat-header-cell\n *matHeaderCellDef\n cdkDrag\n [cdkDragData]=\"column\"\n cdkDragLockAxis=\"x\"\n cdkDragPreviewClass=\"pfx-column-drag-preview\"\n (cdkDragStarted)=\"onColumnDragStarted(column)\"\n (cdkDragEnded)=\"onColumnDragEnded($event, column)\"\n [cdkDragDisabled]=\"!isColumnDraggingEnabled() || !isColumnDraggable(column) || isColumnResizeActive()\"\n [class.praxis-header-draggable]=\"isColumnDraggingEnabled() && isColumnDraggable(column)\"\n [class.praxis-header-resizable]=\"isColumnResizable(column)\"\n [class.praxis-header-resizing]=\"isColumnResizeActive(column)\"\n [class.praxis-header-align-left]=\"column.align === 'left'\"\n [class.praxis-header-align-center]=\"column.align === 'center'\"\n [class.praxis-header-align-right]=\"column.align === 'right'\"\n [style.text-align]=\"getColumnTextAlignStyle(column)\"\n [style.width]=\"getColumnWidthStyle(column)\"\n [attr.style]=\"getColumnHeaderAttrStyle(column)\"\n [ngStyle]=\"getColumnHeaderNgStyle(column)\"\n >\n <span\n class=\"praxis-header-sort-trigger\"\n [mat-sort-header]=\"column.field\"\n [disabled]=\"!getSortingEnabled() || column.sortable === false || isColumnResizeActive()\"\n (keydown)=\"onColumnHeaderReorderKeydown($event, column)\"\n >\n <span class=\"praxis-header-label\" data-testid=\"column-header-label\">\n <span class=\"praxis-header-label-text\">{{ column.header }}</span>\n </span>\n </span>\n <ng-template cdkDragPreview [matchSize]=\"true\">\n <div\n class=\"pfx-column-drag-preview pfx-column-drag-preview-custom\"\n [class.praxis-header-align-left]=\"column.align === 'left'\"\n [class.praxis-header-align-center]=\"column.align === 'center'\"\n [class.praxis-header-align-right]=\"column.align === 'right'\"\n [style.text-align]=\"getColumnTextAlignStyle(column)\"\n >\n <span class=\"praxis-header-label\">\n <span class=\"praxis-header-label-text\">{{ column.header }}</span>\n </span>\n </div>\n </ng-template>\n @if (isColumnResizable(column)) {\n <span\n class=\"praxis-column-resize-handle\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n tabindex=\"0\"\n [attr.aria-label]=\"getColumnResizeHandleAriaLabel(column)\"\n [attr.aria-valuemin]=\"getColumnResizeMinWidthAriaValue(column)\"\n [attr.aria-valuemax]=\"getColumnResizeMaxWidthAriaValue(column)\"\n [attr.aria-valuenow]=\"getColumnResizeCurrentWidthAriaValue(column)\"\n [attr.title]=\"getColumnResizeHandleTooltip(column)\"\n (pointerdown)=\"onColumnResizePointerDown($event, column)\"\n (keydown)=\"onColumnResizeHandleKeydown($event, column)\"\n (click)=\"onColumnResizeHandleClick($event)\"\n ></span>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n [style.text-align]=\"getColumnTextAlignStyle(column)\"\n [style.width]=\"getColumnWidthStyle(column)\"\n [attr.style]=\"getColumnCellAttrStyle(column)\"\n [ngClass]=\"getCellClasses(element, column)\"\n [ngStyle]=\"getCellNgStyle(element, column)\"\n [matTooltip]=\"getCellTooltip(element, column) || ''\"\n [matTooltipPosition]=\"getCellTooltipPosition(element, column)\"\n [matTooltipDisabled]=\"!getCellTooltip(element, column)\"\n [attr.title]=\"getCellTooltip(element, column) || null\"\n >\n <div\n class=\"pfx-cell-content\"\n [ngClass]=\"getCellContentClasses(element, column)\"\n [ngStyle]=\"getCellContentNgStyle(element, column)\"\n >\n @switch (getEffectiveRendererType(element, column)) {\n <!-- Icon renderer -->\n @case ('icon') {\n <span\n class=\"pfx-icon-renderer\"\n [style.color]=\"getIconColor(element, column) || null\"\n [ngStyle]=\"getIconStyle(element, column)\"\n [attr.aria-label]=\"getIconAriaLabel(element, column) || null\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-icon-renderer__content\"\n [nodes]=\"getIconRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </span>\n }\n <!-- Image renderer -->\n @case ('image') {\n <span class=\"pfx-cell-image\">\n <praxis-rich-content\n rootClassName=\"pfx-cell-image__content\"\n [nodes]=\"getImageRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </span>\n }\n <!-- Badge renderer -->\n @case ('badge') {\n @if (shouldRenderBadge(element, column)) {\n <span class=\"pfx-badge\" [ngClass]=\"getBadgeClasses(element, column)\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-badge__content\"\n [nodes]=\"getBadgeRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </span>\n }\n }\n <!-- Link renderer -->\n @case ('link') {\n <a\n class=\"pfx-link\"\n [attr.href]=\"getLinkHref(element, column) || null\"\n [attr.target]=\"getLinkTarget(element, column) || null\"\n [attr.rel]=\"getLinkRel(element, column) || null\"\n (click)=\"$event.stopPropagation()\"\n ><praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-link__content\"\n [nodes]=\"getLinkRichContentNodes(element, column)\"\n ></praxis-rich-content></a\n >\n }\n <!-- Button renderer -->\n @case ('button') {\n @switch (getButtonVariant(element, column)) {\n @case ('outlined') {\n <button\n mat-stroked-button\n [color]=\"getButtonColor(element, column) || null\"\n [disabled]=\"isButtonDisabled(element, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(element, column) || getButtonLabel(element, column)\"\n (click)=\"onButtonClick(element, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </button>\n }\n @case ('text') {\n <button\n mat-button\n [color]=\"getButtonColor(element, column) || null\"\n [disabled]=\"isButtonDisabled(element, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(element, column) || getButtonLabel(element, column)\"\n (click)=\"onButtonClick(element, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </button>\n }\n @default {\n <button\n mat-flat-button\n [color]=\"getButtonColor(element, column) || null\"\n [disabled]=\"isButtonDisabled(element, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(element, column) || getButtonLabel(element, column)\"\n (click)=\"onButtonClick(element, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </button>\n }\n }\n }\n <!-- Chip renderer -->\n @case ('chip') {\n @if (shouldRenderChip(element, column)) {\n <span class=\"pfx-chip\" [ngClass]=\"getChipClasses(element, column)\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-chip__content\"\n [nodes]=\"getChipRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </span>\n }\n }\n <!-- Progress renderer -->\n @case ('progress') {\n <div class=\"pfx-progress\">\n <praxis-rich-content\n rootClassName=\"pfx-progress__content\"\n [context]=\"getProgressRichContentContext(element, column)\"\n [nodes]=\"getProgressRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </div>\n }\n <!-- Micro visualization renderer -->\n @case ('microVisualization') {\n <span class=\"pfx-micro-viz-cell\" [innerHTML]=\"getMicroVisualizationHtml(element, column)\"></span>\n }\n <!-- Avatar renderer -->\n @case ('avatar') {\n <span class=\"pfx-avatar-renderer\"\n [ngStyle]=\"getAvatarStyle(element, column)\"\n [class.shape-rounded]=\"getAvatarShape(element, column) === 'rounded'\"\n [class.shape-circle]=\"getAvatarShape(element, column) === 'circle'\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-avatar-renderer__content\"\n [nodes]=\"getAvatarRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </span>\n }\n <!-- Toggle renderer -->\n @case ('toggle') {\n <mat-slide-toggle\n [checked]=\"getToggleState(element, column)\"\n [disabled]=\"isToggleDisabled(element, column)\"\n [attr.aria-label]=\"getToggleAriaLabel(element, column) || 'Alternar'\"\n (change)=\"onToggleChange(element, column, $event)\"\n (click)=\"$event.stopPropagation()\"\n ></mat-slide-toggle>\n }\n <!-- Menu renderer -->\n @case ('menu') {\n <button mat-icon-button [matMenuTriggerFor]=\"menuRef\" (click)=\"$event.stopPropagation()\" [attr.aria-label]=\"getMenuAriaLabel(element, column) || 'Menu'\">\n <praxis-rich-content rootClassName=\"pfx-menu-trigger__content\" [nodes]=\"getMenuTriggerRichContentNodes()\"></praxis-rich-content>\n </button>\n <mat-menu #menuRef=\"matMenu\">\n @for (it of getMenuItems(element, column); track it.id) {\n <button mat-menu-item (click)=\"onMenuItemClick(it, element, $event)\" [disabled]=\"!it.__visible\" >\n <praxis-rich-content\n rootClassName=\"pfx-menu-item__content\"\n [nodes]=\"getMenuItemRichContentNodes(it)\"\n ></praxis-rich-content>\n </button>\n }\n </mat-menu>\n }\n <!-- Rating renderer -->\n @case ('rating') {\n <praxis-table-rating\n class=\"pfx-rating-cell\"\n [itemsCount]=\"getRatingMax(element, column)\"\n [value]=\"getRatingValue(element, column)\"\n [size]=\"getRatingSize(element, column)\"\n [ratingColor]=\"getRatingColor(element, column)\"\n [outlineColor]=\"getRatingOutlineColor(element, column)\"\n [ariaLabel]=\"getRatingAriaLabel(element, column) || column.header\">\n </praxis-table-rating>\n }\n <!-- HTML renderer (sanitizado) -->\n @case ('html') {\n <span [innerHTML]=\"getSafeHtml(element, column)\"></span>\n }\n <!-- Compose renderer -->\n @case ('compose') {\n <span class=\"pfx-cell-compose\" [ngClass]=\"getComposeClasses(element, column)\" [ngStyle]=\"getComposeGapStyle(element, column)\">\n @for (it of getComposeItems(element, column); track trackComposeItem($index, it)) {\n @switch (getItemEffectiveType(element, column, it)) {\n <!-- Reuse helpers by projecting item as faux column -->\n @case ('icon') {\n <span class=\"pfx-icon-renderer\" [style.color]=\"getIconColor(element, asItemColumn(column, it)) || null\" [ngStyle]=\"getIconStyle(element, asItemColumn(column, it))\" [attr.aria-label]=\"getIconAriaLabel(element, asItemColumn(column, it)) || null\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-icon-renderer__content\" [nodes]=\"getIconRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></span>\n }\n @case ('image') {\n <span class=\"pfx-cell-image\"><praxis-rich-content rootClassName=\"pfx-cell-image__content\" [nodes]=\"getImageRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></span>\n }\n @case ('badge') {\n @if (shouldRenderBadge(element, asItemColumn(column, it))) {\n <span class=\"pfx-badge\" [ngClass]=\"getBadgeClasses(element, asItemColumn(column, it))\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-badge__content\" [nodes]=\"getBadgeRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></span>\n }\n }\n @case ('link') {\n <a class=\"pfx-link\" [attr.href]=\"getLinkHref(element, asItemColumn(column, it)) || null\" [attr.target]=\"getLinkTarget(element, asItemColumn(column, it)) || null\" [attr.rel]=\"getLinkRel(element, asItemColumn(column, it)) || null\" (click)=\"$event.stopPropagation()\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-link__content\" [nodes]=\"getLinkRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></a>\n }\n @case ('button') {\n @switch (getButtonVariant(element, asItemColumn(column, it))) {\n @case ('outlined') {\n <button mat-stroked-button [color]=\"getButtonColor(element, asItemColumn(column, it)) || null\" [disabled]=\"isButtonDisabled(element, asItemColumn(column, it))\" [attr.aria-label]=\"getButtonAriaLabel(element, asItemColumn(column, it)) || getButtonLabel(element, asItemColumn(column, it))\" (click)=\"onButtonClick(element, asItemColumn(column, it), $event)\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-button-renderer__content\" [nodes]=\"getButtonRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></button>\n }\n @case ('text') {\n <button mat-button [color]=\"getButtonColor(element, asItemColumn(column, it)) || null\" [disabled]=\"isButtonDisabled(element, asItemColumn(column, it))\" [attr.aria-label]=\"getButtonAriaLabel(element, asItemColumn(column, it)) || getButtonLabel(element, asItemColumn(column, it))\" (click)=\"onButtonClick(element, asItemColumn(column, it), $event)\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-button-renderer__content\" [nodes]=\"getButtonRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></button>\n }\n @default {\n <button mat-flat-button [color]=\"getButtonColor(element, asItemColumn(column, it)) || null\" [disabled]=\"isButtonDisabled(element, asItemColumn(column, it))\" [attr.aria-label]=\"getButtonAriaLabel(element, asItemColumn(column, it)) || getButtonLabel(element, asItemColumn(column, it))\" (click)=\"onButtonClick(element, asItemColumn(column, it), $event)\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-button-renderer__content\" [nodes]=\"getButtonRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></button>\n }\n }\n }\n @case ('chip') {\n @if (shouldRenderChip(element, asItemColumn(column, it))) {\n <span class=\"pfx-chip\" [ngClass]=\"getChipClasses(element, asItemColumn(column, it))\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-chip__content\" [nodes]=\"getChipRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></span>\n }\n }\n @case ('progress') {\n <div class=\"pfx-progress\">\n <praxis-rich-content\n rootClassName=\"pfx-progress__content\"\n [context]=\"getProgressRichContentContext(element, asItemColumn(column, it))\"\n [nodes]=\"getProgressRichContentNodes(element, asItemColumn(column, it))\"\n ></praxis-rich-content>\n </div>\n }\n @case ('microVisualization') {\n <span class=\"pfx-micro-viz-cell\" [innerHTML]=\"getMicroVisualizationHtml(element, asItemColumn(column, it))\"></span>\n }\n @case ('avatar') {\n <span class=\"pfx-avatar-renderer\" [ngStyle]=\"getAvatarStyle(element, asItemColumn(column, it))\" [class.shape-rounded]=\"getAvatarShape(element, asItemColumn(column, it)) === 'rounded'\" [class.shape-circle]=\"getAvatarShape(element, asItemColumn(column, it)) === 'circle'\"><praxis-rich-content rootClassName=\"pfx-avatar-renderer__content\" [nodes]=\"getAvatarRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></span>\n }\n @case ('toggle') {\n <mat-slide-toggle [checked]=\"getToggleState(element, asItemColumn(column, it))\" [disabled]=\"isToggleDisabled(element, asItemColumn(column, it))\" [attr.aria-label]=\"getToggleAriaLabel(element, asItemColumn(column, it)) || 'Alternar'\" (change)=\"onToggleChange(element, asItemColumn(column, it), $event)\" (click)=\"$event.stopPropagation()\"></mat-slide-toggle>\n }\n @case ('menu') {\n <button mat-icon-button [matMenuTriggerFor]=\"menuRef\" (click)=\"$event.stopPropagation()\" [attr.aria-label]=\"getMenuAriaLabel(element, asItemColumn(column, it)) || 'Menu'\"><praxis-rich-content rootClassName=\"pfx-menu-trigger__content\" [nodes]=\"getMenuTriggerRichContentNodes()\"></praxis-rich-content></button>\n <mat-menu #menuRef=\"matMenu\">\n @for (mi of getMenuItems(element, asItemColumn(column, it)); track mi.id) {\n <button mat-menu-item (click)=\"onMenuItemClick(mi, element, $event)\" [disabled]=\"!mi.__visible\">\n <praxis-rich-content\n rootClassName=\"pfx-menu-item__content\"\n [nodes]=\"getMenuItemRichContentNodes(mi)\"\n ></praxis-rich-content>\n </button>\n }\n </mat-menu>\n }\n @case ('rating') {\n <praxis-table-rating\n class=\"pfx-rating-cell\"\n [itemsCount]=\"getRatingMax(element, asItemColumn(column, it))\"\n [value]=\"getRatingValue(element, asItemColumn(column, it))\"\n [size]=\"getRatingSize(element, asItemColumn(column, it))\"\n [ratingColor]=\"getRatingColor(element, asItemColumn(column, it))\"\n [outlineColor]=\"getRatingOutlineColor(element, asItemColumn(column, it))\"\n [ariaLabel]=\"getRatingAriaLabel(element, asItemColumn(column, it)) || column.header\">\n </praxis-table-rating>\n }\n @case ('html') {\n <span [innerHTML]=\"getSafeHtml(element, asItemColumn(column, it))\"></span>\n }\n <!-- Value item: render base cell text alongside visuals -->\n @case ('value') {\n <span class=\"pfx-cell-value\">{{ getComposeItemValue(element, column, it) }}</span>\n }\n }\n }\n </span>\n }\n <!-- Default text rendering -->\n @default {\n {{ getCellValue(element, column) }}\n }\n }\n </div>\n </td>\n </ng-container>\n }\n @if (config.actions?.row?.enabled) {\n <ng-container matColumnDef=\"_actions\" [sticky]=\"config.actions?.row?.sticky === true || config.actions?.row?.sticky === 'start'\" [stickyEnd]=\"config.actions?.row?.sticky === 'end'\">\n <th mat-header-cell *matHeaderCellDef #actionsHeaderCell [style.width]=\"getRowActionsWidthStyle()\" class=\"praxis-actions-header\" [class.align-start]=\"getActionsHeaderAlign() === 'start'\" [class.align-center]=\"getActionsHeaderAlign() === 'center'\" [class.align-end]=\"getActionsHeaderAlign() === 'end'\">\n <div class=\"praxis-actions-header__content\" [matTooltip]=\"getActionsHeaderTooltip() || ''\" [matTooltipDisabled]=\"!getActionsHeaderTooltip()\">\n <praxis-rich-content\n rootClassName=\"praxis-actions-header__nodes\"\n [nodes]=\"getActionsHeaderRichContentNodes()\"\n ></praxis-rich-content>\n </div>\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"praxis-actions-cell\"\n [class.dense]=\"dense\"\n [style.width]=\"getRowActionsWidthStyle()\"\n >\n <div\n class=\"praxis-actions-cell__content\"\n [class.praxis-actions-cell__content--discovering]=\"isRowDiscoveryPending(row)\"\n [attr.aria-busy]=\"isRowDiscoveryPending(row) ? 'true' : null\"\n >\n <!-- A\u00C3\u00A7\u00C3\u00B5es inline -->\n <!-- Inline actions: icons mode -->\n @if (config.actions?.row?.display === 'icons' || !config.actions?.row?.display) {\n @for (a of getInlineRowActions(row); track trackAction($index, a)) {\n <span\n class=\"praxis-row-action-anchor\"\n [class.praxis-row-action-anchor--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-action-anchor--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [matTooltip]=\"getActionTooltip(a, row)\"\n [matTooltipDisabled]=\"!getActionTooltip(a, row)\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"praxis-tooltip\"\n >\n <button\n mat-icon-button\n class=\"praxis-icon-btn\"\n [class.praxis-icon-btn--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-icon-btn--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [disabled]=\"isActionDisabled(a, row)\"\n (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\"\n [attr.aria-label]=\"a.label || getActionId(a)\"\n [color]=\"a.color || null\"\n >\n <praxis-rich-content\n layout=\"inline\"\n rootClassName=\"praxis-row-action__content\"\n [nodes]=\"getRowActionIconRichContentNodes(a)\"\n ></praxis-rich-content>\n </button>\n </span>\n }\n }\n\n <!-- Inline actions: buttons mode (show label + icon) -->\n @if (config.actions?.row?.display === 'buttons') {\n @for (a of getInlineRowActions(row); track trackAction($index, a)) {\n <span\n class=\"praxis-row-action-anchor\"\n [class.praxis-row-action-anchor--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-action-anchor--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [matTooltip]=\"getActionTooltip(a, row)\"\n [matTooltipDisabled]=\"!getActionTooltip(a, row)\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"praxis-tooltip\"\n >\n <button\n mat-flat-button\n class=\"praxis-row-btn\"\n [class.praxis-row-btn--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-btn--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [disabled]=\"isActionDisabled(a, row)\"\n (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\"\n [attr.aria-label]=\"a.label || getActionId(a)\"\n [color]=\"a.color || null\"\n >\n <praxis-rich-content\n layout=\"inline\"\n rootClassName=\"praxis-row-action__content\"\n [nodes]=\"getRowActionRichContentNodes(a)\"\n ></praxis-rich-content>\n </button>\n </span>\n }\n }\n\n <!-- Menu de overflow -->\n @if (hasOverflowRowActions(row)) {\n <button\n mat-icon-button\n class=\"praxis-icon-btn praxis-more-btn\"\n [matMenuTriggerFor]=\"rowMoreMenu\"\n (menuOpened)=\"onRowOverflowMenuOpened(row)\"\n [color]=\"getRowMenuButtonColor() || null\"\n [attr.aria-label]=\"getRowMenuTooltip(row)\"\n [matTooltip]=\"getRowMenuTooltip(row)\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"getRowMenuIcon()\"></mat-icon>\n </button>\n }\n <mat-menu #rowMoreMenu=\"matMenu\" xPosition=\"before\">\n @if (hasRowOverflowMenuLoadingState(row)) {\n <button mat-menu-item disabled>\n <mat-icon>hourglass_empty</mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(getRowOverflowMenuLoadingLabel(), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n @for (a of getOverflowRowActions(row); track trackAction($index, a)) {\n <button\n mat-menu-item\n (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\"\n [disabled]=\"isActionDisabled(a, row)\"\n >\n <mat-icon [color]=\"a.color || null\" [praxisIcon]=\"a.icon\"></mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(a.label || getActionId(a), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n @if (hasRowOverflowMenuEmptyState(row)) {\n <button mat-menu-item disabled>\n <mat-icon>info</mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(getRowOverflowMenuEmptyLabel(row), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n </mat-menu>\n </div>\n </td>\n </ng-container>\n }\n\n <tr\n mat-header-row\n *matHeaderRowDef=\"displayedColumns\"\n ></tr>\n @if (!isVirtualized()) {\n <tr\n mat-row\n *matRowDef=\"let row; let i = index; columns: displayedColumns\"\n [class.pfx-row-selected]=\"selection.isSelected(row)\"\n [class.pfx-row-click-selectable]=\"isRowClickSelectable()\"\n [class.pfx-row-expanded]=\"isRowExpansionRuntimeEnabled() && isRowExpanded(row, i)\"\n [attr.aria-selected]=\"config.behavior?.selection?.enabled ? (selection.isSelected(row) ? 'true' : 'false') : null\"\n [attr.aria-expanded]=\"isRowExpansionRuntimeEnabled() ? (isRowExpanded(row, i) ? 'true' : 'false') : null\"\n [ngClass]=\"getRowClasses(row)\"\n [ngStyle]=\"getRowNgStyle(row)\"\n [matTooltip]=\"getRowTooltip(row) || null\"\n [matTooltipDisabled]=\"!getRowTooltip(row)\"\n [matTooltipPosition]=\"getRowTooltipPosition(row)\"\n [matTooltipShowDelay]=\"getRowTooltipShowDelay(row)\"\n (click)=\"onRowClicked(row, i, $event)\"\n (dblclick)=\"onRowDoubleClicked(row, i)\"\n ></tr>\n @if (isRowExpansionRuntimeEnabled()) {\n <ng-container matColumnDef=\"_detail\">\n <td\n mat-cell\n *matCellDef=\"let row; let i = index\"\n class=\"pfx-expansion-detail-cell\"\n [attr.colspan]=\"displayedColumns.length\"\n >\n <section\n class=\"pfx-expansion-detail-panel\"\n [ngClass]=\"getExpansionMotionPresetClass()\"\n [ngStyle]=\"getExpansionMotionStyle()\"\n [attr.id]=\"getRowExpansionDetailId(row, i)\"\n role=\"region\"\n [attr.aria-label]=\"getRowExpansionRegionAriaLabel(row, i)\"\n [attr.aria-busy]=\"getExpansionDetailViewState(row, i).status === 'loading' ? 'true' : 'false'\"\n >\n @let detailState = getExpansionDetailViewState(row, i);\n @if (detailState.status === 'loading') {\n <div class=\"pfx-expansion-detail-message\" role=\"status\" aria-live=\"polite\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-detail-message__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Carregando detail schema...', 'pfx-expansion-detail-message__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, i)\"\n ></praxis-rich-content>\n </div>\n } @else if (detailState.status !== 'ready') {\n <div\n class=\"pfx-expansion-detail-message pfx-expansion-detail-message--error\"\n role=\"alert\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n >\n <praxis-rich-content\n rootClassName=\"pfx-expansion-detail-message__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(detailState.message || 'Detail indispon\u00EDvel para esta linha.', 'pfx-expansion-detail-message__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, i)\"\n ></praxis-rich-content>\n </div>\n } @else {\n @if (getExpansionDetailLayout(detailState.schema) === 'tabs') {\n @let detailTabs = getExpansionDetailTabs(detailState.schema);\n @if (detailTabs.length) {\n <div class=\"pfx-expansion-detail-tabs\" role=\"tablist\" aria-label=\"Se\u00C3\u00A7\u00C3\u00B5es do detail\">\n @for (tab of detailTabs; track $index; let tabIndex = $index) {\n <button\n type=\"button\"\n class=\"pfx-expansion-detail-tab-btn\"\n role=\"tab\"\n [attr.id]=\"getExpansionDetailTabId(row, i, tab, tabIndex)\"\n [attr.aria-controls]=\"getExpansionDetailPanelId(row, i, tab, tabIndex)\"\n [attr.aria-selected]=\"isExpansionDetailTabActive(row, i, tab, tabIndex, detailTabs) ? 'true' : 'false'\"\n [attr.tabindex]=\"isExpansionDetailTabActive(row, i, tab, tabIndex, detailTabs) ? '0' : '-1'\"\n [class.is-active]=\"isExpansionDetailTabActive(row, i, tab, tabIndex, detailTabs)\"\n (click)=\"onExpansionDetailTabSelect(row, i, tab, tabIndex, $event)\"\n (keydown)=\"onExpansionDetailTabKeydown($event, row, i, tabIndex, detailTabs)\"\n >\n <praxis-rich-content\n rootClassName=\"pfx-expansion-detail-tab-btn__content\"\n [nodes]=\"getExpansionDetailTabButtonRichContentNodes(tab)\"\n [context]=\"getExpansionDetailRichContentContext(row, i)\"\n ></praxis-rich-content>\n </button>\n }\n </div>\n @for (tab of detailTabs; track $index; let tabIndex = $index) {\n @if (isExpansionDetailTabActive(row, i, tab, tabIndex, detailTabs)) {\n <div\n class=\"pfx-expansion-detail-tab-panel\"\n role=\"tabpanel\"\n [attr.id]=\"getExpansionDetailPanelId(row, i, tab, tabIndex)\"\n [attr.aria-labelledby]=\"getExpansionDetailTabId(row, i, tab, tabIndex)\"\n >\n @if (getExpansionDetailTabRichContentNodes(tab, row, i); as richNodes) {\n <praxis-rich-content\n class=\"pfx-expansion-node-host pfx-expansion-node-host--tab\"\n [nodes]=\"richNodes\"\n [context]=\"getExpansionDetailRichContentContext(row, i)\"\n ></praxis-rich-content>\n } @else {\n @for (childNode of getExpansionDetailNodeChildren(tab); track $index) {\n <ng-container\n *ngTemplateOutlet=\"\n expansionDetailNodeTemplate;\n context: { $implicit: childNode, row: row, index: i }\n \"\n ></ng-container>\n }\n }\n </div>\n }\n }\n } @else {\n <div class=\"pfx-expansion-detail-message\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-detail-message__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Schema em layout tabs sem abas v\u00E1lidas.', 'pfx-expansion-detail-message__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, i)\"\n ></praxis-rich-content>\n </div>\n }\n } @else {\n <div class=\"pfx-expansion-detail-stack\">\n @for (node of getExpansionDetailItems(detailState.schema); track $index) {\n <ng-container\n *ngTemplateOutlet=\"\n expansionDetailNodeTemplate;\n context: { $implicit: node, row: row, index: i }\n \"\n ></ng-container>\n }\n </div>\n }\n }\n\n <ng-template #expansionDetailNodeTemplate let-node let-row=\"row\" let-index=\"index\">\n @if (getExpansionDetailRichContentNodes(node, row, index); as richNodes) {\n <praxis-rich-content\n class=\"pfx-expansion-node-host\"\n [nodes]=\"richNodes\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n } @else {\n @switch (getExpansionDetailNodeType(node)) {\n @case ('list') {\n <section class=\"pfx-expansion-node pfx-expansion-node-list\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-list__title\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailNodeTitle(node, 'Lista'), 'pfx-expansion-node-list__title-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @let listItems = getExpansionDetailListItems(row, node);\n @let listEntries = getExpansionDetailListEntries(row, node);\n @if (listItems.length) {\n <ul>\n @for (entry of listEntries; track $index) {\n <li>\n @if (getExpansionDetailListItemRichContentNodes(entry); as richNodes) {\n <praxis-rich-content\n class=\"pfx-expansion-node-list__item-host\"\n [nodes]=\"richNodes\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n } @else {\n {{ formatExpansionDetailListEntry(entry) }}\n }\n </li>\n }\n </ul>\n } @else {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Sem itens.', 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </section>\n }\n @case ('detailList') {\n <section class=\"pfx-expansion-node pfx-expansion-node-rich-list\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-rich-list__title\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailNodeTitle(node, 'Cole\u00E7\u00E3o rica'), 'pfx-expansion-node-rich-list__title-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @let richListEntries = getExpansionDetailRichListEntries(row, node);\n @if (richListEntries.length) {\n <div class=\"pfx-expansion-node-rich-list__items\">\n @for (entry of richListEntries; track $index) {\n <article [class]=\"getExpansionDetailRichListItemClassName(node)\">\n <praxis-rich-content\n class=\"pfx-expansion-node-rich-list__item-host\"\n [nodes]=\"getExpansionDetailRichListItemNodes(node)\"\n [context]=\"getExpansionDetailRichListItemContext(row, index, node, entry, $index)\"\n ></praxis-rich-content>\n @let itemActions = getExpansionDetailRichListItemActions(node, row, index, entry, $index);\n @if (itemActions.length) {\n <div class=\"pfx-expansion-node-rich-list__item-actions\">\n @for (action of itemActions; track action.actionId) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-rich-list__item-action-btn\"\n [disabled]=\"isExpansionDetailRichListItemActionDisabled(action, row, index, node, entry, $index)\"\n (click)=\"onExpansionDetailRichListItemAction(action, row, index, node, entry, $index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-rich-list__item-action-host\"\n [nodes]=\"getExpansionDetailRichListItemActionNodes(action)\"\n [context]=\"getExpansionDetailRichListItemContext(row, index, node, entry, $index)\"\n ></praxis-rich-content>\n </button>\n }\n </div>\n }\n </article>\n }\n </div>\n } @else {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailRichListEmptyText(node), 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </section>\n }\n @case ('card') {\n <section class=\"pfx-expansion-node pfx-expansion-node-card\">\n <header class=\"pfx-expansion-node-card__header\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-card__title\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailNodeTitle(node, 'Card'), 'pfx-expansion-node-card__title-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (node?.subtitle) {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-card__subtitle\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(node.subtitle, 'pfx-expansion-node-card__subtitle-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </header>\n @if (getExpansionDetailNodeChildren(node).length) {\n <div class=\"pfx-expansion-node-card__content\">\n @for (childNode of getExpansionDetailNodeChildren(node); track $index) {\n <ng-container\n *ngTemplateOutlet=\"\n expansionDetailNodeTemplate;\n context: { $implicit: childNode, row: row, index: index }\n \"\n ></ng-container>\n }\n </div>\n }\n </section>\n }\n @case ('cardGrid') {\n <section class=\"pfx-expansion-node pfx-expansion-node-card-grid\">\n @if (getExpansionDetailCardGridHeaderNodes(node); as cardGridHeaderNodes) {\n @if (cardGridHeaderNodes.length) {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-card-grid__header\"\n [nodes]=\"cardGridHeaderNodes\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n }\n @let gridCards = getExpansionDetailCardGridCards(node);\n @if (gridCards.length) {\n <div\n class=\"pfx-expansion-node-card-grid__cards\"\n [ngStyle]=\"getExpansionDetailCardGridStyles(node)\"\n >\n @for (card of gridCards; track $index) {\n <praxis-rich-content\n class=\"pfx-expansion-node-card-grid__card-host\"\n [nodes]=\"getExpansionDetailCardGridCardNodes(card)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </div>\n } @else {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Sem itens.', 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </section>\n }\n @case ('richText') {\n <div\n class=\"pfx-expansion-node pfx-expansion-node-richtext\"\n [innerHTML]=\"getExpansionDetailRichText(node)\"\n ></div>\n }\n @case ('formRef') {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__meta\"\n [nodes]=\"getExpansionDetailEmbedMetaNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__empty\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailEmbedEmptyText(node), 'pfx-expansion-node-embed__empty-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n }\n @case ('tableRef') {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__meta\"\n [nodes]=\"getExpansionDetailEmbedMetaNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__empty\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailEmbedEmptyText(node), 'pfx-expansion-node-embed__empty-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n }\n @case ('chartRef') {\n @if (getExpansionDetailInlineRendererView(node, row, index); as inlineRenderer) {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed pfx-expansion-node-embed--inline pfx-expansion-node-embed--chart\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <ng-container\n *ngComponentOutlet=\"inlineRenderer.component; inputs: inlineRenderer.inputs\"\n ></ng-container>\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n } @else {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__meta\"\n [nodes]=\"getExpansionDetailEmbedMetaNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__empty\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailEmbedEmptyText(node), 'pfx-expansion-node-embed__empty-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n }\n }\n @case ('templateRef') {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__meta\"\n [nodes]=\"getExpansionDetailEmbedMetaNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__empty\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailEmbedEmptyText(node), 'pfx-expansion-node-embed__empty-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n }\n @case ('diagramEmbed') {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__meta\"\n [nodes]=\"getExpansionDetailEmbedMetaNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (getExpansionDetailDiagramSource(row, node); as diagramSource) {\n <div class=\"pfx-expansion-node-embed__diagram\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__diagram-label\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailDiagramSourceLabel(), 'pfx-expansion-node-embed__diagram-label-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <pre class=\"pfx-expansion-node-embed__diagram-source\">{{ diagramSource }}</pre>\n </div>\n } @else {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__empty\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailEmbedEmptyText(node), 'pfx-expansion-node-embed__empty-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n }\n @case ('action') {\n <div class=\"pfx-expansion-node pfx-expansion-node-action\">\n <button\n type=\"button\"\n mat-stroked-button\n [disabled]=\"isExpansionDetailActionDisabled(node)\"\n (click)=\"onExpansionDetailAction(node, row, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-action__content\"\n [nodes]=\"getExpansionDetailActionRichContentNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n @if (getExpansionDetailActionStatusText(node); as actionStatusText) {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-action__status\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(actionStatusText, 'pfx-expansion-node-action__status-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </div>\n }\n @case ('actionBar') {\n <section class=\"pfx-expansion-node pfx-expansion-node-action-bar\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-action-bar__title\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailActionBarTitle(node), 'pfx-expansion-node-action-bar__title-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @let actionBarActions = getExpansionDetailActionBarActions(node, row, index);\n @if (actionBarActions.length) {\n <div class=\"pfx-expansion-node-action-bar__actions\">\n @for (action of actionBarActions; track action.actionId) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-action-bar__action-btn\"\n [disabled]=\"isExpansionDetailActionBarActionDisabled(action, row, index)\"\n (click)=\"onExpansionDetailActionBarAction(action, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-action-bar__action-host\"\n [nodes]=\"getExpansionDetailActionBarActionNodes(action)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </div>\n } @else {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailActionBarEmptyText(node), 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </section>\n }\n @case ('tab') {\n <div class=\"pfx-expansion-node pfx-expansion-node-placeholder\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Node', 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <code>tab</code>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('fora de contexto de tabs.', 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </div>\n }\n @default {\n <div class=\"pfx-expansion-node pfx-expansion-node-placeholder\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Node n\u00E3o suportado:', 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <code>{{ getExpansionDetailNodeType(node) }}</code>\n </div>\n }\n }\n }\n </ng-template>\n </section>\n </td>\n </ng-container>\n <tr\n mat-row\n *matRowDef=\"let row; columns: expansionDetailRowColumns; when: isExpansionDetailRow\"\n class=\"pfx-expansion-detail-row\"\n ></tr>\n }\n }\n </table>\n }\n\n <!-- Virtual rows path (header preserved above) -->\n @if (shouldRenderDataSurface() && !schemaError && !dataError && isVirtualized()) {\n <cdk-virtual-scroll-viewport\n class=\"ptable-viewport\"\n [itemSize]=\"getVirtItemHeight()\"\n [minBufferPx]=\"getVirtBufferSize() * getVirtItemHeight()\"\n [maxBufferPx]=\"getVirtBufferSize() * getVirtItemHeight() * 2\"\n [style.minHeight]=\"getVirtMinHeightHostStyle()\"\n >\n <table\n class=\"mat-mdc-table\"\n [ngClass]=\"getTableElevationClassName()\"\n [class.table-stack-top]=\"hasTopToolbarStack()\"\n [style.width]=\"getVirtualTableWidthStyle()\"\n >\n <tbody>\n <tr class=\"mat-mdc-row\"\n *cdkVirtualFor=\"let row of dataSource.data; let i = index; trackBy: trackByRow\"\n [class.pfx-row-selected]=\"selection.isSelected(row)\"\n [class.pfx-row-click-selectable]=\"isRowClickSelectable()\"\n [attr.aria-selected]=\"config.behavior?.selection?.enabled ? (selection.isSelected(row) ? 'true' : 'false') : null\"\n [ngClass]=\"getRowClasses(row)\"\n [ngStyle]=\"getRowNgStyle(row)\"\n [matTooltip]=\"getRowTooltip(row) || null\"\n [matTooltipDisabled]=\"!getRowTooltip(row)\"\n [matTooltipPosition]=\"getRowTooltipPosition(row)\"\n [matTooltipShowDelay]=\"getRowTooltipShowDelay(row)\"\n (click)=\"onRowClicked(row, i, $event)\"\n (dblclick)=\"onRowDoubleClicked(row, i)\">\n <!-- Selection column -->\n @if (isSelectionColumnEnabled()) { <td class=\"mat-mdc-cell\">\n <mat-checkbox\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleRow(row)\"\n [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </td> }\n <!-- Data columns -->\n @for (column of visibleColumns; track column.field) {\n <td class=\"mat-mdc-cell\"\n [style.text-align]=\"getColumnTextAlignStyle(column)\"\n [style.width]=\"getColumnWidthStyle(column)\"\n [attr.style]=\"getColumnCellAttrStyle(column)\"\n [ngClass]=\"getCellClasses(row, column)\"\n [ngStyle]=\"getCellNgStyle(row, column)\"\n [matTooltip]=\"getCellTooltip(row, column) || ''\"\n [matTooltipPosition]=\"getCellTooltipPosition(row, column)\"\n [matTooltipDisabled]=\"!getCellTooltip(row, column)\"\n [attr.title]=\"getCellTooltip(row, column) || null\">\n <div\n class=\"pfx-cell-content\"\n [ngClass]=\"getCellContentClasses(row, column)\"\n [ngStyle]=\"getCellContentNgStyle(row, column)\"\n >\n @switch (getEffectiveRendererType(row, column)) {\n @case ('icon') {\n <span class=\"pfx-icon-renderer\"\n [style.color]=\"getIconColor(row, column) || null\"\n [ngStyle]=\"getIconStyle(row, column)\"\n [attr.aria-label]=\"getIconAriaLabel(row, column) || null\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-icon-renderer__content\"\n [nodes]=\"getIconRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </span>\n }\n @case ('image') {\n <span class=\"pfx-cell-image\">\n <praxis-rich-content\n rootClassName=\"pfx-cell-image__content\"\n [nodes]=\"getImageRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </span>\n }\n @case ('badge') {\n @if (shouldRenderBadge(row, column)) {\n <span class=\"pfx-badge\" [ngClass]=\"getBadgeClasses(row, column)\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-badge__content\"\n [nodes]=\"getBadgeRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </span>\n }\n }\n @case ('chip') {\n @if (shouldRenderChip(row, column)) {\n <span class=\"pfx-chip\" [ngClass]=\"getChipClasses(row, column)\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-chip__content\"\n [nodes]=\"getChipRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </span>\n }\n }\n @case ('progress') {\n <div class=\"pfx-progress\">\n <praxis-rich-content\n rootClassName=\"pfx-progress__content\"\n [context]=\"getProgressRichContentContext(row, column)\"\n [nodes]=\"getProgressRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </div>\n }\n @case ('microVisualization') {\n <span class=\"pfx-micro-viz-cell\" [innerHTML]=\"getMicroVisualizationHtml(row, column)\"></span>\n }\n @case ('avatar') {\n <span\n class=\"pfx-avatar-renderer\"\n [ngStyle]=\"getAvatarStyle(row, column)\"\n [class.shape-rounded]=\"getAvatarShape(row, column) === 'rounded'\"\n [class.shape-circle]=\"getAvatarShape(row, column) === 'circle'\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-avatar-renderer__content\"\n [nodes]=\"getAvatarRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </span>\n }\n @case ('link') {\n <a\n class=\"pfx-link\"\n [attr.href]=\"getLinkHref(row, column) || null\"\n [attr.target]=\"getLinkTarget(row, column) || null\"\n [attr.rel]=\"getLinkRel(row, column) || null\"\n (click)=\"$event.stopPropagation()\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-link__content\"\n [nodes]=\"getLinkRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </a>\n }\n @case ('button') {\n @switch (getButtonVariant(row, column)) {\n @case ('outlined') {\n <button\n mat-stroked-button\n [color]=\"getButtonColor(row, column) || null\"\n [disabled]=\"isButtonDisabled(row, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(row, column) || getButtonLabel(row, column)\"\n (click)=\"onButtonClick(row, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </button>\n }\n @case ('text') {\n <button\n mat-button\n [color]=\"getButtonColor(row, column) || null\"\n [disabled]=\"isButtonDisabled(row, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(row, column) || getButtonLabel(row, column)\"\n (click)=\"onButtonClick(row, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </button>\n }\n @default {\n <button\n mat-flat-button\n [color]=\"getButtonColor(row, column) || null\"\n [disabled]=\"isButtonDisabled(row, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(row, column) || getButtonLabel(row, column)\"\n (click)=\"onButtonClick(row, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </button>\n }\n }\n }\n @case ('menu') {\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"menuRef\"\n (click)=\"$event.stopPropagation()\"\n [attr.aria-label]=\"getMenuAriaLabel(row, column) || 'Menu'\"\n >\n <praxis-rich-content\n rootClassName=\"pfx-menu-trigger__content\"\n [nodes]=\"getMenuTriggerRichContentNodes()\"\n ></praxis-rich-content>\n </button>\n <mat-menu #menuRef=\"matMenu\">\n @for (it of getMenuItems(row, column); track it.id) {\n <button\n mat-menu-item\n (click)=\"onMenuItemClick(it, row, $event)\"\n [disabled]=\"!it.__visible\"\n >\n <praxis-rich-content\n rootClassName=\"pfx-menu-item__content\"\n [nodes]=\"getMenuItemRichContentNodes(it)\"\n ></praxis-rich-content>\n </button>\n }\n </mat-menu>\n }\n @default {\n {{ getCellValue(row, column) }}\n }\n }\n </div>\n </td>\n }\n\n <!-- Actions column -->\n @if (config.actions?.row?.enabled) {\n <td class=\"mat-mdc-cell praxis-actions-cell\" [class.dense]=\"dense\" [style.width]=\"getRowActionsWidthStyle()\">\n <div\n class=\"praxis-actions-cell__content\"\n [class.praxis-actions-cell__content--discovering]=\"isRowDiscoveryPending(row)\"\n [attr.aria-busy]=\"isRowDiscoveryPending(row) ? 'true' : null\"\n >\n @if (config.actions?.row?.display === 'icons' || !config.actions?.row?.display) {\n @for (a of getInlineRowActions(row); track trackAction($index, a)) {\n <span\n class=\"praxis-row-action-anchor\"\n [class.praxis-row-action-anchor--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-action-anchor--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [matTooltip]=\"getActionTooltip(a, row)\"\n [matTooltipDisabled]=\"!getActionTooltip(a, row)\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"praxis-tooltip\"\n >\n <button mat-icon-button class=\"praxis-icon-btn\"\n [class.praxis-icon-btn--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-icon-btn--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [disabled]=\"isActionDisabled(a, row)\"\n (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\"\n [attr.aria-label]=\"a.label || getActionId(a)\"\n [color]=\"a.color || null\">\n <praxis-rich-content\n layout=\"inline\"\n rootClassName=\"praxis-row-action__content\"\n [nodes]=\"getRowActionIconRichContentNodes(a)\"\n ></praxis-rich-content>\n </button>\n </span>\n }\n }\n @if (config.actions?.row?.display === 'buttons') {\n @for (a of getInlineRowActions(row); track trackAction($index, a)) {\n <span\n class=\"praxis-row-action-anchor\"\n [class.praxis-row-action-anchor--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-action-anchor--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [matTooltip]=\"getActionTooltip(a, row)\"\n [matTooltipDisabled]=\"!getActionTooltip(a, row)\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"praxis-tooltip\"\n >\n <button mat-flat-button class=\"praxis-row-btn\"\n [class.praxis-row-btn--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-btn--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [disabled]=\"isActionDisabled(a, row)\"\n (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\"\n [attr.aria-label]=\"a.label || getActionId(a)\"\n [color]=\"a.color || null\">\n <praxis-rich-content\n layout=\"inline\"\n rootClassName=\"praxis-row-action__content\"\n [nodes]=\"getRowActionRichContentNodes(a)\"\n ></praxis-rich-content>\n </button>\n </span>\n }\n }\n @if (hasOverflowRowActions(row)) {\n <button mat-icon-button class=\"praxis-icon-btn praxis-more-btn\"\n [matMenuTriggerFor]=\"rowMoreMenuV\"\n (menuOpened)=\"onRowOverflowMenuOpened(row)\"\n [color]=\"getRowMenuButtonColor() || null\"\n [attr.aria-label]=\"getRowMenuTooltip(row)\"\n [matTooltip]=\"getRowMenuTooltip(row)\"\n matTooltipPosition=\"above\">\n <mat-icon [praxisIcon]=\"getRowMenuIcon()\"></mat-icon>\n </button>\n }\n <mat-menu #rowMoreMenuV=\"matMenu\" xPosition=\"before\">\n @if (hasRowOverflowMenuLoadingState(row)) {\n <button mat-menu-item disabled>\n <mat-icon>hourglass_empty</mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(getRowOverflowMenuLoadingLabel(), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n @for (a of getOverflowRowActions(row); track trackAction($index, a)) {\n <button mat-menu-item (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\" [disabled]=\"isActionDisabled(a, row)\">\n <mat-icon [color]=\"a.color || null\" [praxisIcon]=\"a.icon\"></mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(a.label || getActionId(a), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n @if (hasRowOverflowMenuEmptyState(row)) {\n <button mat-menu-item disabled>\n <mat-icon>info</mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(getRowOverflowMenuEmptyLabel(row), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n </mat-menu>\n </div>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n }\n\n</div>\n@if (shouldShowLoadingSurface()) {\n <div class=\"ptable-loading-state\" role=\"status\" aria-live=\"polite\">\n <div class=\"ptable-loading-state__hero\" aria-hidden=\"true\">\n <span class=\"ptable-loading-state__line ptable-loading-state__line--wide\"></span>\n <span class=\"ptable-loading-state__line ptable-loading-state__line--short\"></span>\n <div class=\"ptable-loading-state__rows\">\n @for (placeholder of [1, 2, 3]; track placeholder) {\n <div class=\"ptable-loading-state__row\">\n <span class=\"ptable-loading-state__cell ptable-loading-state__cell--short\"></span>\n <span class=\"ptable-loading-state__cell\"></span>\n <span class=\"ptable-loading-state__cell ptable-loading-state__cell--wide\"></span>\n </div>\n }\n </div>\n </div>\n <div class=\"ptable-loading-state__message\">\n {{ getLoadingSurfaceMessage() }}\n </div>\n </div>\n}\n@if (shouldShowNoDataState()) {\n <div\n class=\"ptable-no-data-state\"\n [style.--p-table-empty-action-size]=\"getNoDataStateActionSize()\"\n >\n <span class=\"ptable-no-data-state__announcement\" role=\"status\" aria-live=\"polite\">\n {{ getNoDataStateTitle() }}. {{ getNoDataStateDescription() }}\n </span>\n <praxis-empty-state-card\n [icon]=\"getNoDataStateIcon()\"\n [title]=\"getNoDataStateTitle()\"\n [description]=\"getNoDataStateDescription()\"\n [primaryAction]=\"getNoDataStatePrimaryAction()\"\n [secondaryActions]=\"getNoDataStateSecondaryActions()\"\n [inline]=\"true\"\n [tone]=\"getNoDataStateTone()\"\n [variant]=\"getNoDataStateVariant()\"\n [alignment]=\"getNoDataStateAlignment()\"\n [density]=\"getNoDataStateDensity()\"\n [iconContainer]=\"getNoDataStateIconContainer()\"\n ></praxis-empty-state-card>\n </div>\n}\n@if (\n shouldRenderDataSurface()\n && !schemaError\n && !dataError\n && shouldRenderFloatingBulkActions()\n && getFloatingBulkActions().length\n && !shouldHideFloatingBulkActions()\n ) {\n <div [class]=\"'praxis-floating-bulk-actions ' + getFloatingBulkPositionClass()\">\n @for (action of getFloatingBulkActions(); track getActionId(action)) {\n <button\n mat-mini-fab\n [color]=\"action.color || 'primary'\"\n [disabled]=\"isFloatingBulkActionDisabled(action)\"\n (click)=\"onToolbarAction({ action: getActionId(action), actionConfig: action })\"\n [attr.aria-label]=\"action.label || getActionId(action)\"\n [matTooltip]=\"action.label || getActionId(action)\"\n matTooltipPosition=\"left\"\n >\n <praxis-rich-content\n rootClassName=\"praxis-floating-bulk-actions__content\"\n [nodes]=\"getFloatingBulkActionRichContentNodes(action)\"\n ></praxis-rich-content>\n </button>\n }\n </div>\n}\n<!-- Barra de a\u00C3\u00A7\u00C3\u00B5es no rodap\u00C3\u00A9 (opcional) -->\n@if (shouldRenderDataSurface() && !schemaError && !dataError && showToolbar && shouldRenderFooterToolbar()) {\n <praxis-table-toolbar\n [config]=\"config\"\n [backgroundColor]=\"getToolbarActionsBackgroundColor()\"\n [style.--pfx-filter-h]=\"getToolbarLayoutHeightHostStyle()\"\n [class.footer-flat]=\"hasBottomPaginator()\"\n class=\"praxis-toolbar-footer\"\n placement=\"footer\"\n [showMain]=\"shouldShowFooterToolbarMain()\"\n [showEndActions]=\"shouldShowFooterToolbarEndActions()\"\n [showActionsGroup]=\"shouldShowToolbarActionsBottom()\"\n [showMobileActions]=\"shouldShowToolbarActionsBottom()\"\n [evaluationContext]=\"getToolbarEvaluationContext()\"\n [columnVisibilityController]=\"toolbarColumnVisibilityController\"\n [exportBusy]=\"exportBusy\"\n (toolbarAction)=\"onToolbarAction($event)\"\n (exportAction)=\"onExportAction($event)\"\n >\n @if (shouldShowFooterToolbarMain() && shouldRenderAdvancedFilter()) {\n <praxis-filter\n advancedFilter\n [resourcePath]=\"getAdvancedFilterResourcePath()\"\n [filterId]=\"tableId\"\n [formId]=\"tableId\"\n [persistenceKey]=\"getAdvancedFilterPersistenceKey()\"\n [fieldMetadata]=\"getAdvancedFilterFieldMetadata()\"\n [enableCustomization]=\"isCustomizationAvailable()\"\n [value]=\"advancedFilterValue\"\n [alwaysVisibleFields]=\"getAdvancedFilterAlwaysVisibleFields()\"\n [alwaysVisibleFieldMetadataOverrides]=\"getAdvancedFilterAlwaysVisibleFieldMetadataOverrides()\"\n [selectedFieldIds]=\"config.behavior?.filtering?.advancedFilters?.settings?.selectedFieldIds ?? []\"\n [allowSaveTags]=\"config.behavior?.filtering?.advancedFilters?.settings?.allowSaveTags\"\n [changeDebounceMs]=\"config.behavior?.filtering?.advancedFilters?.settings?.changeDebounceMs ?? 300\"\n [i18n]=\"getFilterI18n()\"\n [mode]=\"'filter'\"\n [showFilterSettings]=\"isCustomizationAvailable()\"\n (change)=\"onAdvancedFilterChange($event)\"\n (requestSearch)=\"onAdvancedFilterSubmit($event)\"\n (clear)=\"onAdvancedFilterClear()\"\n ></praxis-filter>\n }\n @if (shouldShowFooterToolbarMain() && shouldRenderAdvancedFilter()) {\n <ng-content select=\"[advancedFilter]\"></ng-content>\n }\n @if (shouldShowFooterToolbarMain() && shouldRenderAdvancedFilter()) {\n <ng-content select=\"[toolbar]\"></ng-content>\n }\n @if (shouldShowFooterToolbarMain() && shouldRenderAdvancedFilter()) {\n @if (shouldShowAiAssistantEntrypoint()) {\n <button\n end-actions\n mat-icon-button\n color=\"primary\"\n type=\"button\"\n class=\"praxis-table-ai-trigger praxis-table-toolbar-action--ai\"\n [class.praxis-table-ai-trigger--minimized]=\"hasMinimizedAiAssistantSession()\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('footer')\"\n (click)=\"openAiAssistant()\"\n [attr.aria-label]=\"aiAssistantTriggerLabel()\"\n [matBadge]=\"aiAssistantTriggerBadge()\"\n [matBadgeHidden]=\"!hasMinimizedAiAssistantSession()\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"aiAssistantTriggerTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>{{ aiAssistantTriggerIcon() }}</mat-icon>\n </button>\n }\n }\n @if (shouldShowFooterToolbarMain() && shouldRenderAdvancedFilter() && isCustomizationAvailable()) {\n <button\n end-actions\n mat-icon-button\n color=\"primary\"\n data-role=\"table-settings\"\n class=\"praxis-table-toolbar-action--configuration\"\n data-testid=\"table-settings-trigger\"\n (click)=\"openTableSettings()\"\n [attr.aria-label]=\"getTableSettingsLabel()\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"getTableSettingsTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>settings</mat-icon>\n </button>\n }\n </praxis-table-toolbar>\n}\n@if (shouldRenderDataSurface() && !schemaError && !dataError && getPaginationEnabled() && (config.behavior?.pagination?.position === 'bottom' || config.behavior?.pagination?.position === 'both' || !config.behavior?.pagination?.position)) {\n <mat-paginator\n [length]=\"getPaginationLength()\"\n [pageSize]=\"getPaginationPageSize()\"\n [pageSizeOptions]=\"getPaginationPageSizeOptions()\"\n [selectConfig]=\"paginatorSelectConfig\"\n [showFirstLastButtons]=\"getPaginationShowFirstLast()\"\n (page)=\"onPageChange($event)\"\n [class.compact]=\"config.behavior?.pagination?.style === 'compact'\"\n [class.footer-stack]=\"shouldShowToolbarActionsBottom()\"\n >\n </mat-paginator>\n}\n", styles: ["@charset \"UTF-8\";table{width:100%}.praxis-visually-hidden-status{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.praxis-column-reorder-status{margin:8px 0;padding:10px 12px;border-radius:8px;border:1px solid var(--p-table-border-color);background:var(--p-table-row-hover-bg);color:var(--p-table-header-fg);font-size:12px;line-height:1.4;box-shadow:0 4px 12px #00000014;animation:pfx-column-reorder-status-in var(--p-table-drag-status-enter-duration, .18s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1))}@keyframes pfx-column-reorder-status-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.praxis-actions-cell{height:100%;padding-inline:12px;white-space:nowrap}.pfx-expansion-col-header,.pfx-expansion-col-cell{width:52px;min-width:52px;text-align:center}.pfx-expansion-toggle:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.pfx-expansion-detail-row{background:var(--md-sys-color-surface-container-low)}.pfx-expansion-detail-cell{padding:0!important;border-bottom:1px solid var(--p-table-border-color)}.pfx-expansion-detail-panel{padding:12px 16px;border-left:3px solid var(--md-sys-color-primary)}.pfx-expansion-detail-panel.pfx-expansion-motion-none{animation:none;transition:none}.pfx-expansion-detail-panel.pfx-expansion-motion-subtle-slide{animation:pfx-expansion-subtle-slide-in var(--pfx-expansion-motion-duration, .16s) var(--pfx-expansion-motion-easing, cubic-bezier(.2, 0, 0, 1))}.pfx-expansion-detail-panel.pfx-expansion-motion-accordion{animation:pfx-expansion-accordion-in var(--pfx-expansion-motion-duration, .18s) var(--pfx-expansion-motion-easing, cubic-bezier(.2, 0, 0, 1));transform-origin:top center}.pfx-expansion-detail-panel.pfx-expansion-motion-fade-scale{animation:pfx-expansion-fade-scale-in var(--pfx-expansion-motion-duration, .16s) var(--pfx-expansion-motion-easing, cubic-bezier(.2, 0, 0, 1));transform-origin:top center}@keyframes pfx-expansion-subtle-slide-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes pfx-expansion-accordion-in{0%{opacity:0;transform:scaleY(.96)}to{opacity:1;transform:scaleY(1)}}@keyframes pfx-expansion-fade-scale-in{0%{opacity:0;transform:translateY(-2px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}.pfx-expansion-detail-schema{margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:12px;line-height:1.4;white-space:pre-wrap;word-break:break-word;color:var(--md-sys-color-on-surface-variant)}.pfx-expansion-detail-message{font-size:13px;color:var(--md-sys-color-on-surface-variant)}.pfx-expansion-detail-message--error{color:var(--md-sys-color-error)}.pfx-expansion-detail-stack{display:grid;gap:10px}.pfx-expansion-detail-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}.pfx-expansion-detail-tab-btn{border:1px solid var(--p-table-border-color);background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);border-radius:999px;padding:6px 12px;font-size:12px;line-height:1.2;cursor:pointer}.pfx-expansion-detail-tab-btn__content{display:inline-flex;align-items:center;gap:6px;min-width:0}.pfx-expansion-detail-tab-btn__icon .prx-rich-icon{font-size:16px;line-height:1}.pfx-expansion-detail-tab-btn__title{white-space:nowrap}.pfx-expansion-detail-tab-btn__badge .prx-rich-badge{padding:0 8px;min-height:18px;background:color-mix(in srgb,currentColor 12%,transparent);color:inherit}.pfx-expansion-detail-tab-btn.is-active{border-color:var(--md-sys-color-primary);color:var(--md-sys-color-primary);font-weight:600}.pfx-expansion-detail-tab-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.pfx-expansion-detail-tab-panel{display:grid;gap:10px}.pfx-expansion-node{border:1px solid var(--p-table-border-color);border-radius:8px;padding:10px 12px;background:var(--md-sys-color-surface)}.pfx-expansion-node-card__header{margin-bottom:8px}.pfx-expansion-node-card__title{margin:0;font-size:14px;line-height:1.3}.pfx-expansion-node-card__subtitle{margin:4px 0 0;font-size:12px;color:var(--md-sys-color-on-surface-variant)}.pfx-expansion-node-card__content{display:grid;gap:10px}.pfx-expansion-node-value{display:flex;align-items:baseline;gap:8px}.pfx-expansion-node-value__label{color:var(--md-sys-color-on-surface-variant);font-size:12px}.pfx-expansion-node-value__content{font-size:14px}.pfx-expansion-node-list__title{margin:0 0 6px;font-size:13px}.pfx-expansion-node-list ul{margin:0;padding-left:18px}.pfx-expansion-node-rich-list__title{margin:0 0 8px;font-size:13px}.pfx-expansion-node-rich-list__items{display:grid;gap:12px}.pfx-expansion-node-rich-list__item{display:grid;gap:10px;padding:12px;border:1px solid var(--md-sys-color-outline-variant, #d7dbe5);border-radius:14px;background:var(--md-sys-color-surface-container-lowest, #fff)}.pfx-expansion-node-rich-list__item--row{grid-template-columns:minmax(0,1fr) auto;align-items:center}.pfx-expansion-node-rich-list__item--stack{grid-template-columns:minmax(0,1fr)}.pfx-expansion-node-rich-list__item--card-list{grid-template-columns:minmax(0,1fr);box-shadow:0 4px 14px #0f172a0a}.pfx-expansion-node-rich-list__item-host{min-width:0}.pfx-expansion-node-rich-list__item-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.pfx-expansion-node-rich-list__item-action-btn{min-width:0}.pfx-expansion-node-rich-list__item-action-host{display:inline-flex;align-items:center}.pfx-expansion-node-action-bar__title{margin:0 0 12px}.pfx-expansion-node-action-bar__actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.pfx-expansion-node-action-bar__action-btn{min-width:0}.pfx-expansion-node-action-bar__action-host{display:inline-flex;align-items:center}.pfx-expansion-node-card-grid__header{margin:0 0 12px}.pfx-expansion-node-card-grid__cards{display:grid;gap:12px;grid-template-columns:var(--pfx-expansion-card-grid-columns, repeat(auto-fit, minmax(var(--pfx-expansion-card-grid-min-width, 220px), 1fr)))}.pfx-expansion-node-card-grid__card-host{min-width:0}.pfx-expansion-node-card-grid__card-host [data-rich-node-type=card]{height:100%}.pfx-expansion-node-richtext :where(p,ul,ol,h1,h2,h3,h4,h5,h6){margin-top:0;margin-bottom:8px}.pfx-expansion-node-placeholder{font-size:12px;color:var(--md-sys-color-on-surface-variant)}:host.density-compact{--p-table-header-height-default: 32px;--p-table-row-height-default: 30px;--p-header-padding-default: 4px 8px;--p-cell-padding-default: 3px 8px;--p-header-font-size-default: 11.5px;--p-cell-font-size-default: 12px;--p-actions-btn-size-default: 28px;--p-actions-icon-size-default: 15px;--p-actions-more-btn-size-default: 28px;--p-actions-more-icon-size-default: 15px;--p-table-paginator-container-min-height-default: 32px;--p-table-paginator-container-padding-default: 2px 8px;--p-table-paginator-container-gap-default: 6px;--p-table-paginator-select-width-default: 64px;--p-table-paginator-select-height-default: 28px;--p-table-paginator-select-padding-inline-default: 8px 6px;--p-table-paginator-action-size-default: 28px}:host.density-comfortable{--p-table-header-height-default: 40px;--p-table-row-height-default: 44px;--p-header-padding-default: 10px 14px;--p-cell-padding-default: 10px 14px;--p-header-font-size-default: inherit;--p-cell-font-size-default: inherit;--p-actions-btn-size-default: 36px;--p-actions-icon-size-default: 18px;--p-actions-more-btn-size-default: 36px;--p-actions-more-icon-size-default: 18px;--p-table-paginator-container-min-height-default: 44px;--p-table-paginator-container-padding-default: 6px 10px;--p-table-paginator-container-gap-default: 10px;--p-table-paginator-select-width-default: 78px;--p-table-paginator-select-height-default: 36px;--p-table-paginator-select-padding-inline-default: 12px 10px;--p-table-paginator-action-size-default: 36px}:host.density-spacious{--p-table-header-height-default: 52px;--p-table-row-height-default: 56px;--p-header-padding-default: 16px 20px;--p-cell-padding-default: 16px 20px;--p-header-font-size-default: inherit;--p-cell-font-size-default: inherit;--p-actions-btn-size-default: 44px;--p-actions-icon-size-default: 24px;--p-actions-more-btn-size-default: 44px;--p-actions-more-icon-size-default: 24px;--p-table-paginator-container-min-height-default: 52px;--p-table-paginator-container-padding-default: 8px 14px;--p-table-paginator-container-gap-default: 12px;--p-table-paginator-select-width-default: 86px;--p-table-paginator-select-height-default: 40px;--p-table-paginator-select-padding-inline-default: 14px 12px;--p-table-paginator-action-size-default: 40px}@media(pointer:coarse){:host.density-compact{--p-table-row-height-default: 44px;--p-table-header-height-default: 44px;--p-table-paginator-container-min-height-default: 44px;--p-table-paginator-action-size-default: 40px}}:host.density-compact .praxis-actions-cell{padding-inline:8px}:host.density-spacious .praxis-actions-cell{padding-inline:16px}.praxis-actions-cell__content{display:flex;align-items:center;justify-content:flex-end;gap:6px;width:100%;transition:opacity .12s ease}.praxis-actions-cell.dense .praxis-actions-cell__content{gap:6px}.praxis-actions-cell__content--discovering{opacity:.78}.praxis-row-action-anchor{display:inline-flex;align-items:center}.praxis-row-action-anchor--workflow{position:relative}.praxis-row-action-anchor--workflow:after{content:\"\";position:absolute;right:4px;top:4px;width:6px;height:6px;border-radius:999px;background:var(--md-sys-color-secondary);opacity:.9;pointer-events:none}.praxis-row-action-anchor--blocked:after{background:var(--md-sys-color-error)}.praxis-icon-btn{width:var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px));height:var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px));border:0;background:transparent;padding:0;display:inline-flex;align-items:center;justify-content:center;border-radius:9999px;cursor:pointer;--mat-icon-button-state-layer-size: var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px))}.praxis-icon-btn:hover{background:var(--md-sys-color-surface-variant)}.praxis-icon-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.praxis-icon-btn mat-icon,.praxis-icon-btn .mat-icon{font-size:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));width:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));line-height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))}.praxis-icon-btn praxis-rich-content{display:inline-flex;align-items:center;justify-content:center;width:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));line-height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))}:host ::ng-deep .praxis-icon-btn .praxis-row-action__content,:host ::ng-deep .praxis-icon-btn .praxis-row-action__icon{display:inline-flex;align-items:center;justify-content:center;width:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));line-height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))}:host ::ng-deep .praxis-icon-btn .praxis-row-action__icon .prx-rich-icon{font-size:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));width:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));line-height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))}.praxis-icon-btn--workflow{background:color-mix(in srgb,var(--md-sys-color-secondary-container) 36%,transparent)}.praxis-icon-btn--blocked{background:color-mix(in srgb,var(--md-sys-color-error-container) 42%,transparent)}.praxis-more-btn{width:var(--p-actions-more-btn-size, var(--p-actions-more-btn-size-default, var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px))));height:var(--p-actions-more-btn-size, var(--p-actions-more-btn-size-default, var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px))));--mat-icon-button-state-layer-size: var(--p-actions-more-btn-size, var(--p-actions-more-btn-size-default, var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px))));background-image:var(--p-actions-more-btn-gradient, none);background-size:100% 100%;background-repeat:no-repeat}.praxis-more-btn mat-icon,.praxis-more-btn .mat-icon{font-size:var(--p-actions-more-icon-size, var(--p-actions-more-icon-size-default, var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))));width:var(--p-actions-more-icon-size, var(--p-actions-more-icon-size-default, var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))));height:var(--p-actions-more-icon-size, var(--p-actions-more-icon-size-default, var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))));line-height:var(--p-actions-more-icon-size, var(--p-actions-more-icon-size-default, var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))));color:var(--p-actions-more-icon-color);background-image:var(--p-actions-more-icon-gradient, none);-webkit-background-clip:text;background-clip:text}.praxis-row-btn--workflow{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--md-sys-color-secondary) 28%,transparent)}.praxis-row-btn--blocked{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--md-sys-color-error) 28%,transparent)}.praxis-icon-btn.destructive mat-icon{color:var(--md-sys-color-error)}.mat-mdc-tooltip.praxis-tooltip{margin-top:-8px;margin-bottom:8px}.spacer{flex:1 1 auto}.praxis-table-header{display:flex;flex-wrap:wrap;align-items:flex-start;gap:6px;margin:10px 0 8px;width:100%;clear:both;position:relative}.praxis-table-header.stacked{margin:0}.praxis-table-header>praxis-table-toolbar{flex:1 0 100%}.praxis-floating-bulk-actions{position:fixed;z-index:var(--praxis-layer-floating-local, 200);display:inline-flex;align-items:center;gap:8px;padding:8px;border-radius:999px;background:var(--md-sys-color-surface-container-highest);box-shadow:0 8px 20px #00000029}.praxis-floating-bulk-actions.pos-bottom-right{right:20px;bottom:20px}.praxis-floating-bulk-actions.pos-bottom-left{left:20px;bottom:20px}.praxis-floating-bulk-actions.pos-top-right{right:20px;top:20px}.praxis-floating-bulk-actions.pos-top-left{left:20px;top:20px}@media(max-width:768px){.praxis-floating-bulk-actions{gap:6px;padding:6px}.praxis-floating-bulk-actions.pos-bottom-right{right:12px;left:auto;bottom:12px}.praxis-floating-bulk-actions.pos-bottom-left{left:12px;right:auto;bottom:12px}.praxis-floating-bulk-actions.pos-top-right{right:12px;left:auto;top:12px}.praxis-floating-bulk-actions.pos-top-left{left:12px;right:auto;top:12px}}:host{display:block;width:100%;min-width:0;max-width:100%;--pfx-toolbar-pad-y: 6px;--pfx-toolbar-pad-x: 12px;--p-table-bg: var(--md-sys-color-surface-container-highest);--p-table-text-color: var(--md-sys-color-on-surface);--p-table-header-bg: var(--md-sys-color-surface-container-highest);--p-table-header-fg: var(--md-sys-color-on-surface);--p-table-border-color: var(--md-sys-color-outline-variant);--p-table-row-even-bg: var(--md-sys-color-surface-container);--p-table-row-hover-bg: var(--md-sys-color-surface-container-high);--p-table-row-selected-bg: var(--md-sys-color-primary-container);--p-table-row-selected-fg: var(--md-sys-color-on-primary-container);--p-table-row-selected-font-weight: 600;--p-table-row-selected-indicator: linear-gradient( 180deg, var(--md-sys-color-primary), var(--md-sys-color-secondary) );--p-table-badge-soft-primary-bg: var(--md-sys-color-primary-container);--p-table-badge-soft-primary-fg: var(--md-sys-color-on-primary-container);--p-table-badge-soft-accent-bg: var(--md-sys-color-secondary-container);--p-table-badge-soft-accent-fg: var(--md-sys-color-on-secondary-container);--p-table-badge-soft-warn-bg: var(--md-sys-color-error-container);--p-table-badge-soft-warn-fg: var(--md-sys-color-on-error-container);--p-table-state-success-bg: var(--md-sys-color-tertiary-container);--p-table-state-success-fg: var(--md-sys-color-on-tertiary-container);--p-table-state-warning-bg: var(--md-sys-color-secondary-container);--p-table-state-warning-fg: var(--md-sys-color-on-secondary-container);--p-table-state-danger-bg: var(--md-sys-color-error-container);--p-table-state-danger-fg: var(--md-sys-color-on-error-container);--p-table-state-highlight-bg: var(--md-sys-color-primary-container);--p-table-state-highlight-fg: var(--md-sys-color-on-primary-container);--p-table-reorder-transition-duration: .16s;--p-table-drag-preview-scale: 1.01;--p-table-drag-status-enter-duration: .18s;--p-table-drag-preview-shadow: 0 14px 32px rgba(0, 0, 0, .28), 0 0 0 1px var(--p-table-border-color);--p-table-column-resize-hit-area: 10px;--p-table-column-resize-line-width: 1px;--p-table-column-resize-separator-color: color-mix( in srgb, var(--p-table-border-color) 78%, transparent );--p-table-column-resize-separator-hover-color: var(--md-sys-color-primary);--p-table-column-resize-active-color: var(--md-sys-color-primary)}:host ::ng-deep .mat-mdc-table{background:var(--p-table-bg);color:var(--p-table-text-color);border-radius:12px 12px 0 0;width:100%;box-shadow:var(--p-table-surface-shadow);transition:box-shadow var(--p-table-selection-transition-duration, .18s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1))}:host ::ng-deep .mat-mdc-table:hover{box-shadow:var(--p-table-surface-shadow-hover, var(--p-table-surface-shadow))}:host ::ng-deep .mat-mdc-table.pfx-column-resize-enabled{table-layout:fixed}:host ::ng-deep .mat-mdc-table.table-stack-top{border-top-left-radius:0;border-top-right-radius:0}:host ::ng-deep .praxis-toolbar-footer{border:0 solid var(--p-table-border-color);border-top:0;border-radius:0;background:var(--p-table-bg)}:host ::ng-deep .mat-mdc-paginator.footer-stack{border-top-left-radius:0;border-top-right-radius:0;border-top:0}:host ::ng-deep .mat-mdc-paginator.footer-stack .mat-mdc-paginator-container{padding:var(--p-table-paginator-footer-stack-padding, 6px 10px)}:host ::ng-deep .mat-mdc-paginator{--p-table-paginator-bg-default: color-mix( in srgb, var(--p-table-bg) 94%, var(--md-sys-color-surface, white) 6% );--p-table-paginator-border-color-default: color-mix(in srgb, var(--p-table-border-color) 82%, transparent);--p-table-paginator-select-bg-default: color-mix(in srgb, var(--p-table-bg) 88%, var(--p-table-text-color) 12%);--p-table-paginator-select-border-color-default: color-mix( in srgb, var(--p-table-border-color) 74%, transparent );--p-table-paginator-select-border-color-hover-default: color-mix( in srgb, var(--md-sys-color-primary) 36%, var(--p-table-border-color) );--p-table-paginator-select-border-color-focus-default: color-mix( in srgb, var(--md-sys-color-primary) 72%, var(--p-table-border-color) );--p-table-paginator-select-focus-ring-default: color-mix(in srgb, var(--md-sys-color-primary) 18%, transparent);--p-table-paginator-select-radius-default: 999px;--p-table-paginator-select-shadow-default: inset 0 1px 0 color-mix(in srgb, var(--md-sys-color-on-surface) 8%, transparent);--p-table-paginator-select-text-color-default: var(--p-table-text-color);--p-table-paginator-select-icon-color-default: color-mix(in srgb, var(--p-table-text-color) 72%, transparent);--p-table-paginator-range-text-color-default: color-mix(in srgb, var(--p-table-text-color) 78%, transparent);border-top:1px solid var(--p-table-paginator-border-color, var(--p-table-paginator-border-color-default));background:var(--p-table-paginator-bg, var(--p-table-paginator-bg-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-container{min-height:var(--p-table-paginator-container-min-height, var(--p-table-paginator-container-min-height-default, 44px));padding:var(--p-table-paginator-container-padding, var(--p-table-paginator-container-padding-default, 6px 10px));gap:var(--p-table-paginator-container-gap, var(--p-table-paginator-container-gap-default, 10px))}:host ::ng-deep .mat-mdc-paginator.compact{--p-table-paginator-container-min-height-default: 30px;--p-table-paginator-container-padding-default: 2px 8px;--p-table-paginator-container-gap-default: 6px;--p-table-paginator-select-width-default: 62px;--p-table-paginator-select-height-default: 28px;--p-table-paginator-select-padding-inline-default: 8px 6px;--p-table-paginator-action-size-default: 28px}:host ::ng-deep .mat-mdc-paginator .mat-mdc-icon-button{width:var(--p-table-paginator-action-size, var(--p-table-paginator-action-size-default, 36px));height:var(--p-table-paginator-action-size, var(--p-table-paginator-action-size-default, 36px));display:inline-grid;place-items:center;padding:0;line-height:0;--mdc-icon-button-state-layer-size: var(--p-table-paginator-action-size, var(--p-table-paginator-action-size-default, 36px));--mat-icon-button-state-layer-size: var(--p-table-paginator-action-size, var(--p-table-paginator-action-size-default, 36px))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-icon{display:block;flex:0 0 auto;margin:0}.praxis-table-ai-trigger{transition:background-color .16s ease,box-shadow .16s ease,color .16s ease}.praxis-table-ai-trigger--minimized{background:color-mix(in srgb,var(--md-sys-color-primary-container, rgba(59, 130, 246, .22)) 72%,transparent);color:var(--md-sys-color-on-primary-container, var(--md-sys-color-primary, #2563eb));box-shadow:0 0 0 1px color-mix(in srgb,var(--md-sys-color-primary, #2563eb) 34%,transparent),0 8px 20px color-mix(in srgb,var(--md-sys-color-primary, #2563eb) 16%,transparent)}.praxis-table-ai-trigger--minimized:hover,.praxis-table-ai-trigger--minimized:focus-visible{background:color-mix(in srgb,var(--md-sys-color-primary-container, rgba(59, 130, 246, .22)) 86%,transparent)}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select{margin-left:4px;width:var(--p-table-paginator-select-width, var(--p-table-paginator-select-width-default, 78px))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-text-field-wrapper{--mdc-outlined-text-field-container-color: var( --p-table-paginator-select-bg, var(--p-table-paginator-select-bg-default) );--mdc-outlined-text-field-input-text-color: var( --p-table-paginator-select-text-color, var(--p-table-paginator-select-text-color-default) );min-height:var(--p-table-paginator-select-height, var(--p-table-paginator-select-height-default, 36px));height:var(--p-table-paginator-select-height, var(--p-table-paginator-select-height-default, 36px));padding-inline:var(--p-table-paginator-select-padding-inline, var(--p-table-paginator-select-padding-inline-default, 12px 10px));border:1px solid var(--p-table-paginator-select-border-color, var(--p-table-paginator-select-border-color-default));border-radius:var(--p-table-paginator-select-radius, var(--p-table-paginator-select-radius-default));background:var(--p-table-paginator-select-bg, var(--p-table-paginator-select-bg-default))!important;background-color:var(--p-table-paginator-select-bg, var(--p-table-paginator-select-bg-default))!important;color:var(--p-table-paginator-select-text-color, var(--p-table-paginator-select-text-color-default))!important;box-shadow:var(--p-table-paginator-select-shadow, var(--p-table-paginator-select-shadow-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-text-field-wrapper:hover{border-color:var(--p-table-paginator-select-border-color-hover, var(--p-table-paginator-select-border-color-hover-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select.mat-focused .mat-mdc-text-field-wrapper{border-color:var(--p-table-paginator-select-border-color-focus, var(--p-table-paginator-select-border-color-focus-default));box-shadow:0 0 0 3px var(--p-table-paginator-select-focus-ring, var(--p-table-paginator-select-focus-ring-default)),var(--p-table-paginator-select-shadow, var(--p-table-paginator-select-shadow-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-form-field-flex{min-height:var(--p-table-paginator-select-height, var(--p-table-paginator-select-height-default, 36px));align-items:center}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-form-field-infix{display:flex;align-items:center;min-height:var(--p-table-paginator-select-height, var(--p-table-paginator-select-height-default, 36px));padding-block:0;width:auto}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-select-trigger{min-height:var(--p-table-paginator-select-height, var(--p-table-paginator-select-height-default, 36px));padding-right:2px;color:var(--p-table-paginator-select-text-color, var(--p-table-paginator-select-text-color-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-select-arrow{color:var(--p-table-paginator-select-icon-color, var(--p-table-paginator-select-icon-color-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mdc-notched-outline__leading,:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mdc-notched-outline__notch,:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mdc-notched-outline__trailing{border-color:transparent!important;border-width:0!important}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-range-label{font-size:12px;font-weight:600;color:var(--p-table-paginator-range-text-color, var(--p-table-paginator-range-text-color-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-select-value-text{font-size:12px;font-weight:700;color:var(--p-table-paginator-select-text-color, var(--p-table-paginator-select-text-color-default))}::ng-deep .praxis-table-paginator-select-panel.mat-mdc-select-panel{--mat-select-panel-background-color: var(--md-sys-color-surface-container, #fff);background:var(--md-sys-color-surface-container, #fff)!important;background-color:var(--md-sys-color-surface-container, #fff)!important;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #d7dbe5) 70%,transparent);box-shadow:0 12px 28px color-mix(in srgb,var(--md-sys-color-shadow, #000) 28%,transparent)}::ng-deep .praxis-table-paginator-select-panel .mat-mdc-option{--mat-option-label-text-color: var(--md-sys-color-on-surface, #111827);color:var(--md-sys-color-on-surface, #111827)!important}::ng-deep .praxis-table-paginator-select-panel .mat-mdc-option:hover:not(.mdc-list-item--disabled),::ng-deep .praxis-table-paginator-select-panel .mat-mdc-option.mat-mdc-option-active{--mat-option-hover-state-layer-color: color-mix( in srgb, var(--md-sys-color-primary, #2f7cff) 14%, transparent );background:color-mix(in srgb,var(--md-sys-color-primary, #2f7cff) 14%,transparent)!important;color:var(--md-sys-color-on-surface, #111827)!important}:host [data-role=table-settings].mat-mdc-icon-button{--mdc-icon-button-icon-color: var(--md-sys-color-primary);color:var(--md-sys-color-primary)}.pfx-link{color:var(--md-sys-color-primary);text-decoration:underline;cursor:pointer}.pfx-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:10px;font-size:12px;line-height:1;border:1px solid transparent;white-space:nowrap;--prx-rich-content-inline-gap: 6px}.pfx-chip-icon{font-size:14px;width:14px;height:14px}.pfx-chip--plain{background:transparent;border-color:transparent;color:var(--md-sys-color-on-surface)}.pfx-chip--outlined{background:transparent;border-color:var(--md-sys-color-outline-variant);color:var(--md-sys-color-on-surface)}.pfx-chip--filled-primary{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pfx-chip--filled-accent{background:var(--md-sys-color-secondary);color:var(--md-sys-color-on-secondary)}.pfx-chip--filled-warn,.pfx-chip--filled-danger{background:var(--md-sys-color-error);color:var(--md-sys-color-on-error)}.pfx-chip--filled-success{background:var(--p-table-state-success-bg);color:var(--p-table-state-success-fg)}.pfx-chip--filled-info{background:var(--md-sys-color-tertiary);color:var(--md-sys-color-on-tertiary)}.pfx-chip--filled-basic{background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface);border-color:var(--md-sys-color-outline-variant)}.pfx-chip--soft-primary{background:var(--p-table-badge-soft-primary-bg);color:var(--p-table-badge-soft-primary-fg)}.pfx-chip--soft-accent{background:var(--p-table-badge-soft-accent-bg);color:var(--p-table-badge-soft-accent-fg)}.pfx-chip--soft-warn{background:var(--p-table-badge-soft-warn-bg);color:var(--p-table-badge-soft-warn-fg)}.pfx-chip--soft-danger{background:color-mix(in srgb,var(--p-table-state-danger-bg) 72%,transparent);color:var(--p-table-state-danger-fg);border-color:color-mix(in srgb,var(--p-table-state-danger-fg) 18%,transparent)}.pfx-chip--soft-success{background:color-mix(in srgb,var(--p-table-state-success-bg) 72%,transparent);color:var(--p-table-state-success-fg);border-color:color-mix(in srgb,var(--p-table-state-success-fg) 18%,transparent)}.pfx-chip--soft-info{background:color-mix(in srgb,var(--md-sys-color-tertiary-container) 72%,transparent);color:var(--md-sys-color-on-tertiary-container);border-color:color-mix(in srgb,var(--md-sys-color-tertiary) 18%,transparent)}.pfx-chip--soft-basic{background:color-mix(in srgb,var(--md-sys-color-surface-container-highest) 82%,transparent);color:color-mix(in srgb,var(--md-sys-color-on-surface) 76%,transparent);border-color:color-mix(in srgb,var(--md-sys-color-outline-variant) 65%,transparent)}.pfx-progress{position:relative;width:100%;min-width:0;max-width:140px;display:inline-block;vertical-align:middle}.pfx-progress .pfx-progress__content{width:100%;min-width:0}.pfx-progress .prx-rich-progress{width:100%}.pfx-progress-bar{height:100%;background:var(--md-sys-color-primary);transition:width .2s ease}.pfx-progress-label{margin-left:8px;font-size:12px;opacity:.8;display:inline-block;vertical-align:middle}.pfx-micro-viz-cell{display:inline-block;width:min(100%,180px);min-width:112px;max-width:220px;vertical-align:middle}.pfx-micro-viz-cell .pfx-micro-viz{display:grid;gap:4px;width:100%;min-width:0;color:var(--md-sys-color-on-surface);font-size:12px;line-height:1.2}.pfx-micro-viz-cell .pfx-micro-viz__row{display:grid;grid-template-columns:minmax(42px,.8fr) minmax(52px,1fr) auto;align-items:center;gap:6px;min-width:0}.pfx-micro-viz-cell .pfx-micro-viz__label,.pfx-micro-viz-cell .pfx-micro-viz__value{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pfx-micro-viz-cell .pfx-micro-viz__track{position:relative;display:block;height:8px;min-width:0;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-outline-variant) 62%,transparent);overflow:hidden}.pfx-micro-viz-cell .pfx-micro-viz__bar,.pfx-micro-viz-cell .pfx-micro-viz__segment{display:block;height:100%;border-radius:inherit;background:var(--md-sys-color-primary)}.pfx-micro-viz-cell .pfx-micro-viz__row[data-tone=success] .pfx-micro-viz__bar,.pfx-micro-viz-cell .pfx-micro-viz__segment[data-tone=success],.pfx-micro-viz-cell .pfx-micro-viz[data-tone=success] .pfx-micro-viz__bar{background:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-viz-cell .pfx-micro-viz__row[data-tone=warning] .pfx-micro-viz__bar,.pfx-micro-viz-cell .pfx-micro-viz__segment[data-tone=warning],.pfx-micro-viz-cell .pfx-micro-viz[data-tone=warning] .pfx-micro-viz__bar{background:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-viz-cell .pfx-micro-viz__row[data-tone=danger] .pfx-micro-viz__bar,.pfx-micro-viz-cell .pfx-micro-viz__segment[data-tone=danger],.pfx-micro-viz-cell .pfx-micro-viz[data-tone=danger] .pfx-micro-viz__bar{background:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-viz-cell .pfx-micro-viz__segments{display:flex;width:100%;height:8px;overflow:hidden;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-outline-variant) 62%,transparent)}.pfx-micro-viz-cell .pfx-micro-viz__meta{display:flex;justify-content:space-between;gap:8px;min-width:0;color:color-mix(in srgb,var(--md-sys-color-on-surface) 72%,transparent)}.pfx-micro-viz-cell .pfx-micro-viz__bullet .pfx-micro-viz__target{position:absolute;top:-2px;bottom:-2px;width:2px;border-radius:999px;background:var(--md-sys-color-on-surface)}.pfx-micro-viz-cell .pfx-micro-viz__delta[data-tone=success]{color:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-viz-cell .pfx-micro-viz__delta[data-tone=warning]{color:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-viz-cell .pfx-micro-viz__delta[data-tone=danger]{color:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-viz-cell .pfx-micro-viz__fallback{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__radial,.pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__harvey,.pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__process{display:inline-flex}.pfx-micro-viz__radial{align-items:center;justify-content:center;position:relative}.pfx-micro-radial-svg{width:24px;height:24px;overflow:visible;flex-shrink:0;display:block}.pfx-micro-radial-svg__track{fill:none;stroke:var(--pfx-micro-track-color, var(--md-sys-color-surface-container-high, #e5e7eb));stroke-width:3}.pfx-micro-radial-svg__bar{fill:none;stroke:currentColor;stroke-width:3;stroke-linecap:round;transform:rotate(-90deg);transform-origin:50% 50%;transition:stroke-dasharray .35s ease}.pfx-micro-radial-svg__text{font-size:8px;font-weight:700;text-anchor:middle;fill:currentColor;font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif)}.pfx-micro-viz__harvey{align-items:center;gap:0}.pfx-micro-harvey-svg{width:18px;height:18px;overflow:visible;flex-shrink:0}.pfx-micro-harvey-svg__track{fill:none;stroke:var(--pfx-micro-track-color, var(--md-sys-color-surface-container-high, #e5e7eb));stroke-width:2}.pfx-micro-harvey-svg__bar{fill:none;stroke:currentColor;stroke-width:16;transform:rotate(-90deg);transform-origin:50% 50%;transition:stroke-dasharray .35s ease}.pfx-micro-harvey-fraction{display:inline-flex;align-items:center;font-size:11px;font-variant-numeric:tabular-nums;margin-left:6px;font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif)}.pfx-micro-harvey-fraction strong{color:currentColor;font-weight:700}.pfx-separator{opacity:.6;color:var(--md-sys-color-on-surface-variant, #4b5563);margin-inline:2px}.pfx-total{color:var(--md-sys-color-on-surface-variant, #4b5563)}.pfx-micro-viz__bullet{display:flex;flex-direction:column;gap:4px;width:100%}.pfx-micro-bullet__top{display:flex;justify-content:space-between;align-items:baseline;font-size:11px}.pfx-micro-bullet__label{color:var(--md-sys-color-on-surface-variant, #4b5563);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pfx-micro-bullet__value{font-weight:700;color:currentColor;font-variant-numeric:tabular-nums;flex-shrink:0}.pfx-micro-bullet__target-val{font-weight:400;font-size:10px;color:var(--md-sys-color-on-surface-variant, #4b5563);margin-left:4px}.pfx-micro-bullet__track{position:relative;display:block;overflow:hidden;border-radius:var(--pfx-micro-track-radius, 999px);background:var(--pfx-micro-track-color, var(--md-sys-color-surface-container-high, #e5e7eb));block-size:10px;width:100%}.pfx-micro-bullet__range{position:absolute;inset-block:0;display:block;block-size:100%;opacity:.32}.pfx-micro-bullet__range[data-tone=success]{background:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-bullet__range[data-tone=warning]{background:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-bullet__range[data-tone=danger],.pfx-micro-bullet__range[data-tone=critical]{background:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-bullet__range[data-tone=info]{background:var(--md-sys-color-primary, #2563eb)}.pfx-micro-bullet__actual{position:absolute;inset-block-start:3px;inset-inline-start:0;block-size:4px;border-radius:inherit}.pfx-micro-bullet__actual[data-tone=success]{background:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-bullet__actual[data-tone=warning]{background:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-bullet__actual[data-tone=danger],.pfx-micro-bullet__actual[data-tone=critical]{background:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-bullet__actual[data-tone=info]{background:var(--md-sys-color-primary, #2563eb)}.pfx-micro-bullet__target{position:absolute;inset-block:0;inline-size:2px;background:var(--md-sys-color-on-surface, #111827)}.pfx-micro-bullet__bottom{display:flex;justify-content:space-between;font-size:9px;color:var(--md-sys-color-on-surface-variant, #4b5563)}.pfx-micro-viz-container{display:flex;align-items:center;gap:8px;width:100%}.pfx-micro-trend__label-col{display:flex;flex-direction:column;justify-content:center;font-size:11px;line-height:1.2;flex-shrink:0;min-width:24px;font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif)}.pfx-micro-trend__label-col--start{align-items:flex-end;text-align:right}.pfx-micro-trend__label-col--end{align-items:flex-start;text-align:left}.pfx-micro-trend__value{font-weight:700;color:var(--md-sys-color-on-surface, #1f2937)}.pfx-micro-trend__label{color:var(--md-sys-color-on-surface-variant, #4b5563);font-size:9px}.pfx-micro-viz__line,.pfx-micro-viz__area,.pfx-micro-viz__column{display:block;width:100%;height:30px;overflow:visible;flex:1 1 auto}.pfx-micro-line__svg,.pfx-micro-area__svg,.pfx-micro-column__svg{width:100%;height:100%;display:block;overflow:visible}.pfx-micro-line__path,.pfx-micro-area__path{stroke:currentColor}.pfx-micro-area__fill{fill:currentColor}.pfx-micro-trend__marker{fill:currentColor;stroke:var(--md-sys-color-surface, #ffffff);stroke-width:1.5px}.pfx-micro-trend__marker[data-tone=success]{fill:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-trend__marker[data-tone=warning]{fill:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-trend__marker[data-tone=danger],.pfx-micro-trend__marker[data-tone=critical]{fill:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-trend__marker[data-tone=info]{fill:var(--md-sys-color-primary, #2563eb)}.pfx-micro-viz__process{align-items:center;width:100%;min-width:120px;padding-block:4px;overflow-x:auto;-webkit-overflow-scrolling:touch}.pfx-micro-step{display:flex;align-items:center;flex:1 1 0%;min-width:0}.pfx-micro-step[data-state=future]{opacity:.38}.pfx-micro-step[data-state=disabled]{opacity:.28;pointer-events:none}.pfx-micro-step__node-wrapper{display:flex;flex-direction:column;align-items:center;position:relative;flex-shrink:0}.pfx-micro-step__node{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;font-size:11px;font-weight:700;background:var(--md-sys-color-surface-container-high, #e5e7eb);color:var(--md-sys-color-on-surface, #1f2937);border:2px solid transparent;transition:all .2s ease}.pfx-micro-step__node[data-tone=success]{background:var(--p-table-state-success-fg, #168a4a);color:#fff}.pfx-micro-step__node[data-tone=warning]{background:var(--p-table-state-warning-fg, #b45f06);color:#fff}.pfx-micro-step__node[data-tone=danger],.pfx-micro-step__node[data-tone=critical]{background:var(--p-table-state-danger-fg, #b3261e);color:#fff}.pfx-micro-step__node[data-tone=info]{background:var(--md-sys-color-primary, #2563eb);color:#fff}.pfx-micro-step__icon{font-size:12px}.pfx-micro-step__label{font-size:9px;margin-top:4px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:72px;color:var(--md-sys-color-on-surface-variant, #4b5563)}.pfx-micro-step__connector{flex:1 1 auto;height:2px;background:var(--md-sys-color-surface-container-high, #e5e7eb);margin-inline:8px;min-width:16px}.pfx-micro-step__connector[data-tone=success]{background:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-step__connector[data-tone=warning]{background:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-step__connector[data-tone=danger],.pfx-micro-step__connector[data-tone=critical]{background:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-step__connector[data-tone=info]{background:var(--md-sys-color-primary, #2563eb)}.pfx-micro-viz[data-tone=success]{color:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-viz[data-tone=warning]{color:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-viz[data-tone=danger],.pfx-micro-viz[data-tone=critical]{color:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-viz[data-tone=info]{color:var(--md-sys-color-primary, #2563eb)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz[data-tone=success]{color:var(--p-table-state-success-fg, #168a4a)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz[data-tone=warning]{color:var(--p-table-state-warning-fg, #b45f06)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz[data-tone=critical]{color:var(--p-table-state-danger-fg, #b3261e)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz[data-tone=info]{color:var(--md-sys-color-primary, #2563eb)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__delta{display:inline-flex;align-items:center;justify-content:flex-end;gap:5px;width:auto;min-width:0;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz__delta-symbol{display:inline-grid;width:12px;min-width:12px;height:12px;min-height:12px;place-items:center;border-radius:0;background:transparent;font-size:11px;line-height:1;transform:translateY(-.5px)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__radial,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__harvey{display:inline-flex;align-items:center;justify-content:center;width:auto;min-width:0;height:auto;gap:8px}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__radial{justify-content:flex-start;gap:7px}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-radial-svg{display:block;width:24px;height:24px;overflow:visible;flex:0 0 auto}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-radial-svg__track{fill:none;stroke:var(--pfx-micro-track-color, var(--md-sys-color-surface-container-high, #e5e7eb));stroke-width:3.4}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-radial-svg__bar{fill:none;stroke:currentColor;stroke-width:3.4;stroke-linecap:round;transform:rotate(-90deg);transform-origin:50% 50%}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-radial-svg__text{font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif);font-size:8.5px;font-weight:700;text-anchor:middle;fill:currentColor}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-radial-value{color:currentColor;font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif);font-size:12px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1;white-space:nowrap}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-harvey-svg{display:block;width:26px;height:26px;overflow:visible;flex:0 0 auto}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-harvey-svg__track{fill:none;stroke:var(--pfx-micro-track-color, var(--md-sys-color-surface-container-high, #e5e7eb));stroke-width:2.4}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-harvey-svg__bar{fill:none;stroke:currentColor;stroke-width:16;transform:rotate(-90deg);transform-origin:50% 50%}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-harvey-fraction{display:inline-flex;align-items:center;font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif);font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-harvey-fraction strong{color:currentColor;font-weight:700}:host ::ng-deep .pfx-micro-viz-cell .pfx-separator{margin-inline:2px;color:var(--md-sys-color-on-surface-variant, #4b5563);opacity:.6}:host ::ng-deep .pfx-micro-viz-cell .pfx-total{color:var(--md-sys-color-on-surface-variant, #4b5563)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__process{display:inline-flex;align-items:center;justify-content:center;width:100%;min-width:112px;overflow:hidden}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz-container{display:flex;align-items:center;gap:8px;width:100%;min-width:0}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__line,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__area,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__column{display:block;flex:1 1 auto;width:100%;min-width:0;height:30px;overflow:visible}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-line__svg,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-area__svg,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__svg{display:block;width:100%;height:100%;overflow:visible}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-line__path,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-area__path{stroke:currentColor}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-area__fill{fill:currentColor}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker{fill:currentColor}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar[data-tone=success],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker[data-tone=success]{fill:var(--p-table-state-success-fg, #168a4a)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar[data-tone=warning],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker[data-tone=warning]{fill:var(--p-table-state-warning-fg, #b45f06)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar[data-tone=critical],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker[data-tone=critical]{fill:var(--p-table-state-danger-fg, #b3261e)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar[data-tone=info],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker[data-tone=info]{fill:var(--md-sys-color-primary, #2563eb)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step{display:flex;align-items:center;flex:0 1 auto;min-width:0}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node-wrapper{display:inline-flex;align-items:center;min-width:0}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;background:var(--md-sys-color-surface-container-high, #e5e7eb);color:var(--md-sys-color-on-surface, #1f2937);font-size:12px;font-weight:700;line-height:1;flex:0 0 auto}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__icon{font-size:15px;line-height:1}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__label{display:none}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector{flex:0 1 24px;min-width:12px;max-width:28px;height:2px;margin-inline:6px;background:var(--md-sys-color-surface-container-high, #e5e7eb)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=success],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector[data-tone=success]{background:var(--p-table-state-success-fg, #168a4a)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=warning],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector[data-tone=warning]{background:var(--p-table-state-warning-fg, #b45f06)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=critical],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector[data-tone=critical]{background:var(--p-table-state-danger-fg, #b3261e)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=info],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector[data-tone=info]{background:var(--md-sys-color-primary, #2563eb)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=success],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=warning],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=critical],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=info]{color:var(--md-sys-color-on-primary, #ffffff)}.pfx-avatar{display:inline-flex;align-items:center;justify-content:center;background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface);border-radius:4px;overflow:hidden;font-weight:600}.pfx-avatar.shape-rounded{border-radius:8px}.pfx-avatar.shape-circle{border-radius:999px}.pfx-avatar--initials{text-transform:uppercase;font-size:12px}.pfx-cell-compose{display:inline-flex;align-items:center;gap:6px}.pfx-cell-compose.dir-col{flex-direction:column;align-items:stretch}.pfx-cell-compose.align-start{justify-content:flex-start}.pfx-cell-compose.align-center{justify-content:center}.pfx-cell-compose.align-end{justify-content:flex-end}.pfx-cell-compose.wrap{flex-wrap:wrap}.pfx-cell-compose.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.px-scroll-viewport{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;background:var(--p-table-bg);border-radius:12px 12px 0 0}.px-scroll-viewport:has(.mat-mdc-table.table-stack-top){border-top-left-radius:0;border-top-right-radius:0}.px-scroll-viewport.scroll-none{overflow-x:visible}.px-scroll-viewport.scroll-auto ::ng-deep .mat-mdc-table{width:max-content;min-width:100%}.px-scroll-viewport.scroll-wrap ::ng-deep .mat-mdc-header-cell,.px-scroll-viewport.scroll-wrap ::ng-deep .mat-mdc-cell{white-space:normal;text-overflow:initial}.px-scroll-viewport.scroll-wrap ::ng-deep .mat-mdc-table{width:100%}:host ::ng-deep .mat-mdc-header-row{position:sticky;top:0;z-index:var(--praxis-layer-sticky-local, 100);height:var(--p-table-header-height, var(--p-table-header-height-default, var(--mat-table-header-container-height, 40px)));min-height:var(--p-table-header-height, var(--p-table-header-height-default, var(--mat-table-header-container-height, 40px)));background:var(--p-table-header-bg);color:var(--p-table-header-fg);box-shadow:var(--p-table-header-shadow, 0 1px 0 var(--p-table-border-color));border-bottom:1px solid var(--p-table-border-color)}:host ::ng-deep .mat-mdc-header-cell{color:var(--p-table-header-fg);font-weight:600}:host ::ng-deep .mat-sort-header-content,:host ::ng-deep .mat-mdc-header-row .mat-icon{color:inherit;font-weight:600}:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow,:host ::ng-deep .mat-mdc-header-cell:hover .mat-sort-header-arrow{color:var(--p-table-header-fg)!important}:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow .mat-sort-header-indicator,:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow .mat-sort-header-stem,:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow .mat-sort-header-pointer,:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow .mat-sort-header-pointer-left,:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow .mat-sort-header-pointer-right{border-color:var(--p-table-header-fg)!important;background:var(--p-table-header-fg)!important}:host ::ng-deep .mat-mdc-header-cell{height:var(--p-table-header-height, var(--p-table-header-height-default, var(--mat-table-header-container-height, 40px)));padding:var(--p-header-padding, var(--p-header-padding-default, 12px 16px))!important;font-size:var(--p-header-font-size, var(--p-header-font-size-default, inherit));font-weight:var(--p-header-font-weight, 600);letter-spacing:var(--p-header-letter-spacing, normal);text-transform:var(--p-header-text-transform, none);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-left .mat-sort-header-container{justify-content:flex-start}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-center .mat-sort-header-container{justify-content:center}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-right .mat-sort-header-container{justify-content:flex-end}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-left .praxis-header-label-text{text-align:left}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-center .praxis-header-label-text{text-align:center}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-right .praxis-header-label-text{text-align:right}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell.praxis-header-draggable .mat-sort-header-container{display:flex;align-items:center;width:100%;gap:4px}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell.praxis-header-draggable{-webkit-user-select:none;user-select:none}:host ::ng-deep .mat-mdc-header-cell .praxis-header-sort-trigger{display:block;width:100%;min-width:0}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable{overflow:visible}:host ::ng-deep .mat-mdc-header-cell .praxis-column-resize-handle{position:absolute;z-index:2;inset-block:0;inset-inline-end:0;width:var(--p-table-column-resize-hit-area);cursor:col-resize;touch-action:none;-webkit-user-select:none;user-select:none}:host ::ng-deep .mat-mdc-header-cell .praxis-column-resize-handle:after{content:\"\";position:absolute;inset-block:6px;inset-inline-start:calc((var(--p-table-column-resize-hit-area) - var(--p-table-column-resize-line-width)) / 2);width:var(--p-table-column-resize-line-width);background:var(--p-table-column-resize-separator-color);opacity:.76;transition:background-color .12s ease,opacity .12s ease,transform .12s ease,inset-block .12s ease}:host ::ng-deep .mat-mdc-header-cell .praxis-column-resize-handle:focus-visible{outline:2px solid var(--p-table-column-resize-separator-hover-color);outline-offset:-2px}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable:hover .praxis-column-resize-handle:after,:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable:focus-within .praxis-column-resize-handle:after,:host ::ng-deep .mat-mdc-header-cell .praxis-column-resize-handle:hover:after,:host ::ng-deep .mat-mdc-header-cell .praxis-column-resize-handle:focus-visible:after{background:var(--p-table-column-resize-separator-hover-color);opacity:1}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizing .praxis-column-resize-handle:after{background:var(--p-table-column-resize-active-color);inset-block:0;opacity:1;transform:scaleX(2)}:host ::ng-deep .pfx-column-resizing,:host ::ng-deep .pfx-column-resizing .mat-mdc-header-cell{cursor:col-resize}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell.praxis-header-draggable.cdk-drag-dragging{cursor:grabbing}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell.praxis-header-draggable .mat-sort-header-content{display:inline-flex;align-items:center;gap:4px;flex:1 1 auto;min-width:0;max-width:100%;overflow:hidden}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell .praxis-header-label{display:inline-flex;align-items:center;gap:4px;flex:1 1 auto;min-width:0}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell .praxis-header-label-text{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host ::ng-deep .pfx-column-drag-indicator .cdk-drop-list-dragging .mat-mdc-header-cell:not(.cdk-drag-placeholder){transition:transform var(--p-table-reorder-transition-duration, .18s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1))}:host ::ng-deep .pfx-column-drag-indicator .mat-mdc-header-cell.cdk-drag-animating{transition:transform var(--p-table-reorder-transition-duration, .16s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1))}.pfx-column-drag-preview{box-sizing:border-box;display:flex;align-items:center;border-radius:10px;border:1px solid var(--p-table-border-color);background:linear-gradient(135deg,var(--p-table-header-bg) 0%,var(--p-table-row-hover-bg) 100%);color:var(--p-table-header-fg);box-shadow:var(--p-table-drag-preview-shadow);transform:scale(var(--p-table-drag-preview-scale, 1.01));pointer-events:none;z-index:var(--praxis-layer-authoring-hover, 300)}.pfx-column-drag-preview-custom{height:100%;padding:var(--p-header-padding, var(--p-header-padding-default, 12px 16px))}.pfx-column-drag-preview .mat-sort-header-arrow,.pfx-column-drag-preview .mat-sort-header-indicator,.pfx-column-drag-preview .mat-sort-header-stem,.pfx-column-drag-preview .mat-sort-header-pointer,.pfx-column-drag-preview .mat-sort-header-pointer-left,.pfx-column-drag-preview .mat-sort-header-pointer-right{display:none!important}.pfx-column-drag-preview .mat-sort-header-container{display:flex;align-items:center;width:100%;min-height:100%;padding-right:0!important}.pfx-column-drag-preview .praxis-header-sort-trigger{display:block;width:100%;min-width:0}.pfx-column-drag-preview .mat-sort-header-content,.pfx-column-drag-preview .praxis-header-label{display:inline-flex;align-items:center;flex:1 1 auto;min-width:0;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pfx-column-drag-preview.praxis-header-align-left .mat-sort-header-container,.pfx-column-drag-preview.praxis-header-align-left,.pfx-column-drag-preview.praxis-header-align-left .mat-sort-header-content,.pfx-column-drag-preview.praxis-header-align-left .praxis-header-label{justify-content:flex-start}.pfx-column-drag-preview.praxis-header-align-center .mat-sort-header-container,.pfx-column-drag-preview.praxis-header-align-center,.pfx-column-drag-preview.praxis-header-align-center .mat-sort-header-content,.pfx-column-drag-preview.praxis-header-align-center .praxis-header-label{justify-content:center}.pfx-column-drag-preview.praxis-header-align-right .mat-sort-header-container,.pfx-column-drag-preview.praxis-header-align-right,.pfx-column-drag-preview.praxis-header-align-right .mat-sort-header-content,.pfx-column-drag-preview.praxis-header-align-right .praxis-header-label{justify-content:flex-end}.pfx-column-drag-preview.praxis-header-align-right .mat-sort-header-content{flex:0 1 auto;width:auto;margin-inline-start:auto}.pfx-column-drag-preview.praxis-header-align-right .praxis-header-label{width:auto}.pfx-column-drag-preview.praxis-header-align-left .praxis-header-label-text{text-align:left}.pfx-column-drag-preview.praxis-header-align-center .praxis-header-label-text{text-align:center}.pfx-column-drag-preview.praxis-header-align-right .praxis-header-label-text{text-align:right}:host ::ng-deep .pfx-column-drag-indicator .cdk-drag-placeholder{opacity:1;border:1px dashed var(--p-table-border-color);background:var(--p-table-row-hover-bg)}:host ::ng-deep .pfx-column-drag-indicator .cdk-drag-placeholder *{opacity:0}:host ::ng-deep .pfx-column-drag-indicator .mat-mdc-header-cell.cdk-drag-dragging{opacity:.58}@media(prefers-reduced-motion:reduce){:host ::ng-deep .pfx-column-drag-indicator .cdk-drop-list-dragging .mat-mdc-header-cell:not(.cdk-drag-placeholder){transition:none}.pfx-column-drag-preview{transition:none;transform:none}.praxis-column-reorder-status{animation:none}.pfx-expansion-detail-panel{animation:none!important;transition:none!important;transform:none!important}:host ::ng-deep .mat-mdc-row{transition:none}:host ::ng-deep .mat-mdc-table{transition:none}}.praxis-actions-header{text-align:right}.praxis-actions-header.align-start{text-align:left}.praxis-actions-header.align-center{text-align:center}.praxis-actions-header.align-end{text-align:right}.praxis-actions-header .praxis-actions-header__content{display:inline-flex;align-items:center;gap:var(--p-actions-header-gap, 6px);justify-content:center;max-width:100%;min-width:0;white-space:nowrap;color:var(--p-actions-header-color, inherit)}.praxis-actions-header .praxis-actions-header__content .mat-icon{font-size:18px;width:18px;height:18px;line-height:18px}.praxis-actions-header .praxis-actions-header__label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:640px){.praxis-actions-header .praxis-actions-header__label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}}:host ::ng-deep .mat-mdc-header-cell .mat-sort-header-container{box-sizing:border-box;padding-inline-end:0;position:static}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell.praxis-header-draggable .mat-sort-header-container{padding-inline-end:0}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable:not(.praxis-header-align-right) .mat-sort-header-container{padding-inline-end:calc(var(--p-table-column-resize-hit-area) + 8px)}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable.praxis-header-align-center .mat-sort-header-container{padding-inline-start:calc(var(--p-table-column-resize-hit-area) + 8px)}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable.praxis-header-align-right .mat-sort-header-container{padding-inline-end:0}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable:not(.praxis-header-align-right) .mat-sort-header-content{box-sizing:border-box;padding-inline-end:18px}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable.praxis-header-align-center .mat-sort-header-content{padding-inline-start:0;padding-inline-end:0}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable.praxis-header-align-right .mat-sort-header-content{box-sizing:border-box;flex:0 1 auto;width:auto;padding-inline-start:0;padding-inline-end:0}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable.praxis-header-align-right .praxis-header-label{width:auto}:host ::ng-deep .mat-mdc-header-cell .mat-sort-header-arrow{position:absolute;inset-inline-end:var(--p-table-sort-arrow-overlay-inset, 2px);top:50%;margin:0;transform:translateY(-50%)}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable:not(.praxis-header-align-right) .mat-sort-header-arrow{inset-inline-end:calc(var(--p-table-column-resize-hit-area) + 2px)}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-right .mat-sort-header-arrow{position:static;order:-1;flex:0 0 auto;margin-inline:0 4px;transform:none}:host ::ng-deep .mat-mdc-cell{color:var(--p-table-text-color);height:var(--p-table-row-height, var(--p-table-row-height-default, 44px));padding:var(--p-cell-padding, var(--p-cell-padding-default, 10px 14px));font-size:var(--p-cell-font-size, var(--p-cell-font-size-default, inherit));line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .mat-mdc-cell .pfx-cell-content,:host ::ng-deep .mat-cell .pfx-cell-content{display:inline-flex;align-items:center;gap:6px;width:100%;min-width:0;overflow:hidden}:host ::ng-deep .pfx-cell-content.pfx-cell-anim{animation-duration:var(--pfx-cell-anim-duration, .8s);animation-delay:var(--pfx-cell-anim-delay, 0ms);animation-fill-mode:both;animation-timing-function:ease-in-out}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--once{animation-iteration-count:1}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--loop{animation-iteration-count:infinite}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--count{animation-iteration-count:var(--pfx-cell-anim-iteration-count, 1)}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--on-hover{animation-play-state:paused}:host ::ng-deep .mat-mdc-cell:hover .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--on-hover,:host ::ng-deep .mat-cell:hover .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--on-hover{animation-play-state:running}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--pulse{animation-name:pfx-cell-pulse}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--blink{animation-name:pfx-cell-blink}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--grow{animation-name:pfx-cell-grow}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--fade{animation-name:pfx-cell-fade}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--slide-in{animation-name:pfx-cell-slide-in}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--border-pulse{animation-name:pfx-cell-border-pulse}@keyframes pfx-cell-pulse{0%{transform:scale(1)}50%{transform:scale(var(--pfx-cell-anim-scale-peak, 1.015))}to{transform:scale(1)}}@keyframes pfx-cell-blink{0%,49%{opacity:1}50%,to{opacity:var(--pfx-cell-anim-min-opacity, .35)}}@keyframes pfx-cell-grow{0%{transform:scale(.985)}to{transform:scale(1)}}@keyframes pfx-cell-fade{0%{opacity:0}to{opacity:1}}@keyframes pfx-cell-slide-in{0%{opacity:0;transform:translateY(var(--pfx-cell-anim-slide-distance, 4px))}to{opacity:1;transform:translateY(0)}}@keyframes pfx-cell-border-pulse{0%,to{box-shadow:inset 0 0 rgba(var(--pfx-cell-anim-border-rgb, 25, 118, 210),0)}50%{box-shadow:inset 0 0 0 2px rgba(var(--pfx-cell-anim-border-rgb, 25, 118, 210),var(--pfx-cell-anim-border-strength, .3))}}:host ::ng-deep .mat-mdc-row.pfx-row-anim{animation-duration:var(--pfx-row-anim-duration, .8s);animation-delay:var(--pfx-row-anim-delay, 0ms);animation-fill-mode:both;animation-timing-function:ease-in-out}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--once{animation-iteration-count:1}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--loop{animation-iteration-count:infinite}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--count{animation-iteration-count:var(--pfx-row-anim-iteration-count, 1)}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--on-hover{animation-play-state:paused}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--on-hover:hover{animation-play-state:running}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--pulse{animation-name:pfx-row-pulse}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--blink{animation-name:pfx-row-blink}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--grow{animation-name:pfx-row-grow}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--fade{animation-name:pfx-row-fade}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--slide-in{animation-name:pfx-row-slide-in}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--border-pulse{animation-name:pfx-row-border-pulse}@keyframes pfx-row-pulse{0%{transform:scale(1)}50%{transform:scale(var(--pfx-row-anim-scale-peak, 1.015))}to{transform:scale(1)}}@keyframes pfx-row-blink{0%,49%{opacity:1}50%,to{opacity:var(--pfx-row-anim-min-opacity, .35)}}@keyframes pfx-row-grow{0%{transform:scale(.985)}to{transform:scale(1)}}@keyframes pfx-row-fade{0%{opacity:0}to{opacity:1}}@keyframes pfx-row-slide-in{0%{opacity:0;transform:translateY(var(--pfx-row-anim-slide-distance, 4px))}to{opacity:1;transform:translateY(0)}}@keyframes pfx-row-border-pulse{0%,to{box-shadow:inset 0 0 rgba(var(--pfx-row-anim-border-rgb, 25, 118, 210),0)}50%{box-shadow:inset 0 0 0 2px rgba(var(--pfx-row-anim-border-rgb, 25, 118, 210),var(--pfx-row-anim-border-strength, .3))}}@media(prefers-reduced-motion:reduce){:host ::ng-deep .pfx-cell-content.pfx-cell-anim,:host ::ng-deep .mat-mdc-row.pfx-row-anim{animation:none!important}}:host ::ng-deep .mat-mdc-row:hover{background:var(--p-table-row-hover-bg)}:host ::ng-deep .mat-mdc-row{height:var(--p-table-row-height, var(--p-table-row-height-default, 44px));min-height:var(--p-table-row-height, var(--p-table-row-height-default, 44px));transition:background-color var(--p-table-hover-transition-duration, .18s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1)),box-shadow var(--p-table-selection-transition-duration, .18s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1))}:host ::ng-deep .mat-mdc-row.pfx-row-click-selectable{cursor:pointer}:host ::ng-deep .mat-mdc-row:nth-child(2n){background:var(--p-table-row-even-bg)}:host ::ng-deep .mat-mdc-row:nth-child(2n):hover{background:var(--p-table-row-hover-bg)}:host ::ng-deep .mat-mdc-row.pfx-row-selected,:host ::ng-deep .mat-mdc-row.pfx-row-selected:hover{background:var(--p-table-row-selected-bg)}:host ::ng-deep .mat-mdc-row.pfx-row-selected .mat-mdc-cell{background:var(--p-table-row-selected-bg);color:var(--p-table-row-selected-fg);font-weight:var(--p-table-row-selected-font-weight)}:host ::ng-deep .mat-mdc-row.pfx-row-selected .mat-mdc-cell:first-child{position:relative}:host ::ng-deep .mat-mdc-row.pfx-row-selected .mat-mdc-cell:first-child:before{content:\"\";position:absolute;inset:0 auto 0 0;width:4px;border-radius:0 4px 4px 0;background:var(--p-table-row-selected-indicator);pointer-events:none}:host.row-borders ::ng-deep .mat-mdc-row .mat-mdc-cell{border-bottom:1px solid var(--p-table-border-color)}:host.row-borders ::ng-deep .mat-mdc-header-row .mat-mdc-header-cell{border-bottom:none}:host.col-borders ::ng-deep .mat-mdc-header-row .mat-mdc-header-cell,:host.col-borders ::ng-deep .mat-mdc-row .mat-mdc-cell{border-right:1px solid var(--p-table-border-color)}:host.col-borders ::ng-deep .mat-mdc-header-row .mat-mdc-header-cell:last-child,:host.col-borders ::ng-deep .mat-mdc-row .mat-mdc-cell:last-child{border-right:none}.ptable-error{display:flex;align-items:center;gap:12px;padding:12px;margin:8px 0;border:1px solid var(--md-sys-color-error);border-radius:8px}.ptable-error__content{flex:1}.ptable-error__title{font-weight:600}.ptable-info-banner{display:flex;gap:12px;align-items:center;padding:8px 12px;margin:8px 0;border-radius:8px;border:1px solid var(--md-sys-color-primary);background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.ptable-info-banner .text{flex:1;font-weight:600}.ptable-info-banner .actions{display:flex;gap:8px}.pfx-cell-image{display:inline-block;vertical-align:middle;background:var(--md-sys-color-surface-variant);border:1px solid var(--md-sys-color-outline-variant)}.pfx-cell-image.shape-rounded{border-radius:8px}.pfx-cell-image.shape-circle{border-radius:9999px}.pfx-badge{display:inline-flex;align-items:center;gap:6px;line-height:1;padding:4px 8px;border-radius:9999px;font-size:12px;font-weight:600;border:1px solid transparent;white-space:nowrap;--prx-rich-content-inline-gap: 6px}.pfx-badge .pfx-badge-icon{font-size:16px;width:16px;height:16px}.pfx-badge--plain{background:transparent;border-color:transparent;color:inherit}.pfx-badge--filled-primary{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pfx-badge--filled-accent{background:var(--md-sys-color-secondary);color:var(--md-sys-color-on-secondary)}.pfx-badge--filled-warn,.pfx-badge--filled-danger{background:var(--md-sys-color-error);color:var(--md-sys-color-on-error)}.pfx-badge--filled-success{background:var(--p-table-state-success-bg);color:var(--p-table-state-success-fg)}.pfx-badge--filled-info{background:var(--md-sys-color-tertiary);color:var(--md-sys-color-on-tertiary)}.pfx-badge--filled-basic{background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface);border-color:var(--md-sys-color-outline-variant)}.pfx-badge--outlined{background:transparent;border-color:var(--md-sys-color-outline-variant);color:inherit}.pfx-badge--soft-primary{background:var(--p-table-badge-soft-primary-bg);color:var(--p-table-badge-soft-primary-fg)}.pfx-badge--soft-accent{background:var(--p-table-badge-soft-accent-bg);color:var(--p-table-badge-soft-accent-fg)}.pfx-badge--soft-warn{background:var(--p-table-badge-soft-warn-bg);color:var(--p-table-badge-soft-warn-fg)}.pfx-badge--soft-danger{background:color-mix(in srgb,var(--p-table-state-danger-bg) 72%,transparent);color:var(--p-table-state-danger-fg);border-color:color-mix(in srgb,var(--p-table-state-danger-fg) 18%,transparent)}.pfx-badge--soft-success{background:color-mix(in srgb,var(--p-table-state-success-bg) 72%,transparent);color:var(--p-table-state-success-fg);border-color:color-mix(in srgb,var(--p-table-state-success-fg) 18%,transparent)}.pfx-badge--soft-info{background:color-mix(in srgb,var(--md-sys-color-tertiary-container) 72%,transparent);color:var(--md-sys-color-on-tertiary-container);border-color:color-mix(in srgb,var(--md-sys-color-tertiary) 18%,transparent)}.pfx-badge--soft-basic{background:color-mix(in srgb,var(--md-sys-color-surface-container-highest) 82%,transparent);color:color-mix(in srgb,var(--md-sys-color-on-surface) 76%,transparent);border-color:color-mix(in srgb,var(--md-sys-color-outline-variant) 65%,transparent)}.pfx-icon-renderer,:host ::ng-deep .pfx-icon-renderer__content{--prx-rich-content-inline-gap: var(--p-table-icon-value-gap, .04rem)}.pfx-icon-renderer__prefix,.pfx-icon-renderer__suffix,:host ::ng-deep .pfx-icon-renderer__prefix,:host ::ng-deep .pfx-icon-renderer__suffix{color:var(--p-table-icon-value-affix-color, currentColor);font-size:var(--p-table-icon-value-affix-font-size, .95em);font-weight:var(--p-table-icon-value-affix-font-weight, 500);line-height:1;opacity:var(--p-table-icon-value-affix-opacity, .72)}.pfx-icon-renderer__label,:host ::ng-deep .pfx-icon-renderer__label{color:var(--p-table-icon-value-color, currentColor);font-weight:var(--p-table-icon-value-font-weight, inherit);font-variant-numeric:tabular-nums;line-height:1}.row--success,.row--success td,td.row--success{background-color:var(--p-table-state-success-bg)!important;color:var(--p-table-state-success-fg)!important}.row--warning,.row--warning td,td.row--warning{background-color:var(--p-table-state-warning-bg)!important;color:var(--p-table-state-warning-fg)!important}.row--danger,.row--danger td,td.row--danger{background-color:var(--p-table-state-danger-bg)!important;color:var(--p-table-state-danger-fg)!important}.row--highlight,.row--highlight td,td.row--highlight{background-color:var(--p-table-state-highlight-bg)!important;color:var(--p-table-state-highlight-fg)!important;font-weight:600}.row--muted,.row--muted td,td.row--muted{opacity:.7;filter:saturate(.6)}.pfx-expansion-node-embed{display:flex;flex-direction:column;gap:12px;padding:16px;border:1px solid var(--md-sys-color-outline-variant);border-radius:16px;background:var(--md-sys-color-surface-container-low, var(--md-sys-color-surface))}.ptable-loading-state{padding:8px 12px 4px;display:grid;gap:10px}.ptable-loading-state__hero{display:grid;gap:10px;padding:14px;border-radius:8px;border:1px solid rgba(18,99,180,.08);background:linear-gradient(180deg,#ffffffa6,#ffffff47),linear-gradient(0deg,#1263b408,#1263b400)}.ptable-loading-state__rows{display:grid;gap:8px}.ptable-loading-state__row{display:grid;grid-template-columns:96px minmax(0,1fr) minmax(140px,1.2fr);gap:8px}.ptable-loading-state__line,.ptable-loading-state__cell{display:block;height:12px;border-radius:999px;background:linear-gradient(90deg,#1263b414,#1263b42e,#1263b414);background-size:200% 100%;animation:ptable-loading-wave 1.2s ease-in-out infinite}.ptable-loading-state__line--wide{width:180px}.ptable-loading-state__line--short{width:96px}.ptable-loading-state__cell--short{width:100%;max-width:84px}.ptable-loading-state__cell--wide{width:100%}.ptable-loading-state__message{font-size:.85rem;color:var(--md-sys-color-on-surface-variant, #5a5d67);padding-inline:4px}.pfx-expansion-node-embed__header,.pfx-expansion-node-embed__meta,.pfx-expansion-node-embed__empty,.pfx-expansion-node-embed__diagram-label{display:block}.pfx-expansion-node-embed--inline{min-width:0}.pfx-expansion-node-embed--chart praxis-chart{display:block;min-height:280px}.ptable-no-data-state{padding:12px;border-inline:1px solid var(--p-table-border-color);background:var(--p-table-paginator-bg, var(--p-table-bg));--pdx-empty-state-action-height: var(--p-table-empty-action-size, 36px);--pdx-empty-state-transparent-margin: 0}.ptable-no-data-state ::ng-deep .empty-card{margin:0;min-block-size:clamp(9rem,22vh,13.75rem);border:0;border-radius:0;background:transparent;box-shadow:none}.ptable-no-data-state ::ng-deep .empty-card mat-card-content{display:flex;min-block-size:inherit;flex-direction:column;align-items:center;justify-content:center;padding:24px}.ptable-no-data-state ::ng-deep .empty-card .content{align-items:center;text-align:center}.ptable-no-data-state ::ng-deep .empty-card .texts{justify-items:center}.ptable-no-data-state ::ng-deep .empty-card .desc{max-width:min(100%,42rem)}.ptable-no-data-state__announcement{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@keyframes ptable-loading-wave{0%{background-position:100% 0}to{background-position:-100% 0}}.pfx-expansion-node-embed__diagram{display:flex;flex-direction:column;gap:8px}.pfx-expansion-node-embed__diagram-source{margin:0;padding:12px;overflow:auto;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-highest, var(--md-sys-color-surface));color:var(--md-sys-color-on-surface);font-family:Consolas,Courier New,monospace;font-size:12px;line-height:1.4;white-space:pre-wrap}.pfx-expansion-node-embed__action-btn{align-self:flex-start}.pfx-expansion-node-embed__action-host{display:inline-flex}.praxis-table-columns-menu{max-height:320px;overflow-y:auto;padding:8px 0}.praxis-table-column-menu-item{display:flex!important;align-items:center;width:100%;box-sizing:border-box;padding:6px 16px;min-height:40px}.praxis-table-column-menu-item mat-checkbox{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10$2.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: i10$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i10$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i11$1.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "directive", type: i12.ɵɵCdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i12.ɵɵCdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i12.ɵɵCdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i13.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i13.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i13.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i15.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { 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.MatMiniFabButton, selector: "button[mat-mini-fab], a[mat-mini-fab], button[matMiniFab], a[matMiniFab]", 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: MatCheckboxModule }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "component", type: i17$1.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i20.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i5$1.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: MatSnackBarModule }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i22.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i22.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i8$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i8$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i8$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i8$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i8$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i8$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i8$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i8$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i8$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i8$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: PraxisAiAssistantShellComponent, selector: "praxis-ai-assistant-shell", inputs: ["labels", "mode", "state", "contextItems", "attachments", "messages", "quickReplies", "recommendedIntents", "prompt", "statusText", "errorText", "testIdPrefix", "panelTestId", "submitTestId", "applyTestId", "primaryAction", "secondaryActions", "governanceActions", "busy", "canSubmit", "canApply", "submitOnEnter", "showAttachAction", "enablePastedAttachments", "enableFileAttachments", "attachmentAccept", "attachmentMultiple", "voiceInputMode", "voiceLanguage", "draggable", "resizable", "minWidth", "minHeight", "margin", "layout"], outputs: ["promptChange", "submitPrompt", "apply", "retryTurn", "cancelTurn", "shellAction", "close", "attach", "attachmentsPasted", "attachmentsSelected", "removeAttachment", "messageAction", "editMessage", "resendMessage", "quickReply", "recommendedIntent", "layoutChange"] }, { kind: "component", type: PraxisFilter, selector: "praxis-filter", inputs: ["resourcePath", "apiUrlEntry", "fieldMetadata", "filterId", "formId", "componentInstanceId", "mode", "notifyIfOutdated", "snoozeMs", "autoOpenSettingsOnOutdated", "enableCustomization", "value", "alwaysVisibleFields", "alwaysVisibleFieldMetadataOverrides", "selectedFieldIds", "tags", "allowSaveTags", "persistenceKey", "disablePersistence", "i18n", "changeDebounceMs", "showFilterSettings", "showAdvancedButton", "showAddButton", "showClearButton", "showSearchButton", "confirmTagDelete", "placeBooleansInActions", "showToggleLabels", "useInlineSelectVariant", "useInlineSearchableSelectVariant", "useInlineMultiSelectVariant", "useInlineInputVariant", "useInlineToggleVariant", "useInlineRangeVariant", "useInlineDateVariant", "useInlineDateRangeVariant", "useInlineTimeVariant", "useInlineTimeRangeVariant", "useInlineTreeSelectVariant", "alwaysMinWidth", "alwaysColsMd", "alwaysColsLg", "tagColor", "tagVariant", "tagButtonColor", "actionsButtonColor", "actionsVariant", "overlayVariant", "overlayBackdrop", "advancedOpenMode", "advancedClearButtonsEnabled"], outputs: ["submit", "change", "clear", "modeChange", "requestSearch", "tagsChange", "selectedFieldIdsChange", "metaChanged", "schemaStatusChange"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "component", type: PraxisTableToolbar, selector: "praxis-table-toolbar", inputs: ["config", "appearance", "backgroundColor", "placement", "showMain", "showActionsGroup", "showEndActions", "showMobileActions", "exportBusy", "evaluationContext", "columnVisibilityController"], outputs: ["toolbarAction", "exportAction", "columnVisibilityToggle"] }, { kind: "component", type: PraxisRichContent, selector: "praxis-rich-content", inputs: ["document", "nodes", "context", "hostCapabilities", "layout", "rootClassName"] }, { kind: "component", type: EmptyStateCardComponent, selector: "praxis-empty-state-card", inputs: ["icon", "title", "description", "primaryAction", "secondaryActions", "inline", "tone", "variant", "alignment", "density", "iconContainer"] }, { kind: "component", type: TableRatingCellComponent, selector: "praxis-table-rating", inputs: ["itemsCount", "value", "size", "ratingColor", "outlineColor", "ariaLabel"] }] });
56418
56560
  }
56419
56561
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisTable, decorators: [{
56420
56562
  type: Component,
@@ -56450,14 +56592,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
56450
56592
  TableDefaultsProvider,
56451
56593
  FilterConfigService,
56452
56594
  DataFormattingService
56453
- ], template: "@if (shouldShowEmptyState()) {\n <praxis-empty-state-card\n icon=\"link\"\n [title]=\"'Escolha o recurso da tabela'\"\n [description]=\"'Selecione um recurso da API para carregar colunas, registros e a\u00E7\u00F5es da tabela automaticamente.'\"\n [primaryAction]=\"{ label: 'Selecionar recurso', icon: 'bolt', action: openQuickConnect.bind(this) }\"\n ></praxis-empty-state-card>\n}\n\n<!-- Error State with Quick Connect CTA -->\n@if (isRemoteMode() && (schemaError || dataError)) {\n <div class=\"ptable-error\" role=\"alert\" aria-live=\"assertive\">\n <mat-icon color=\"warn\" aria-hidden=\"true\">error</mat-icon>\n <div class=\"ptable-error__content\">\n <praxis-rich-content\n rootClassName=\"ptable-error__title\"\n [nodes]=\"getTableChromeTextRichContentNodes('Erro', 'ptable-error__title-text')\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"ptable-error__message\"\n [nodes]=\"getTableChromeTextRichContentNodes(errorMessage || 'Ocorreu um erro ao carregar a tabela.', 'ptable-error__message-text')\"\n ></praxis-rich-content>\n </div>\n <button mat-flat-button color=\"primary\" (click)=\"openQuickConnect()\">\n <mat-icon>bolt</mat-icon>\n <praxis-rich-content\n rootClassName=\"ptable-error__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Selecionar recurso', 'ptable-error__action-label-text')\"\n ></praxis-rich-content>\n </button>\n @if (enableCustomization) {\n <button\n mat-icon-button\n color=\"primary\"\n data-role=\"table-settings\"\n data-testid=\"table-settings-trigger\"\n (click)=\"openTableSettings()\"\n [attr.aria-label]=\"getTableSettingsLabel()\"\n [matTooltip]=\"getTableSettingsLabel()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>settings</mat-icon>\n </button>\n }\n @if (!schemaError) {\n <button mat-stroked-button (click)=\"retryData()\">\n <praxis-rich-content\n rootClassName=\"ptable-error__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Tentar novamente', 'ptable-error__action-label-text')\"\n ></praxis-rich-content>\n </button>\n }\n @if (schemaError) {\n <button mat-stroked-button (click)=\"reloadSchema()\">\n <praxis-rich-content\n rootClassName=\"ptable-error__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Recarregar colunas', 'ptable-error__action-label-text')\"\n ></praxis-rich-content>\n </button>\n }\n </div>\n}\n\n<!-- Inline banner for schema change (only in edit mode) -->\n@if (shouldShowOutdatedInline()) {\n <div class=\"ptable-info-banner\" role=\"status\" aria-live=\"polite\">\n <praxis-rich-content\n rootClassName=\"text\"\n [nodes]=\"getTableChromeTextRichContentNodes('O schema do servidor mudou. Reconciliar agora?', 'ptable-info-banner__text')\"\n ></praxis-rich-content>\n <div class=\"actions\">\n <button mat-stroked-button color=\"primary\" (click)=\"onReconcileRequested()\">\n <mat-icon>sync</mat-icon>\n <praxis-rich-content\n rootClassName=\"ptable-info-banner__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Reconciliar', 'ptable-info-banner__action-label-text')\"\n ></praxis-rich-content>\n </button>\n <button mat-button (click)=\"onSnoozeOutdated()\">\n <praxis-rich-content\n rootClassName=\"ptable-info-banner__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Lembrar depois', 'ptable-info-banner__action-label-text')\"\n ></praxis-rich-content>\n </button>\n <button mat-button (click)=\"onIgnoreOutdated()\">\n <praxis-rich-content\n rootClassName=\"ptable-info-banner__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Ignorar', 'ptable-info-banner__action-label-text')\"\n ></praxis-rich-content>\n </button>\n </div>\n </div>\n}\n\n@if (isAiAssistantEnabled() && aiAssistantOpen && aiAssistantViewState) {\n <praxis-ai-assistant-shell\n [labels]=\"aiAssistantLabels\"\n [mode]=\"aiAssistantViewState.mode\"\n [state]=\"aiAssistantViewState.state\"\n [contextItems]=\"aiAssistantViewState.contextItems\"\n [attachments]=\"aiAssistantViewState.attachments\"\n [messages]=\"aiAssistantViewState.messages\"\n [quickReplies]=\"aiAssistantViewState.quickReplies\"\n [recommendedIntents]=\"getAiAssistantRecommendedIntents()\"\n [prompt]=\"aiAssistantPrompt\"\n [statusText]=\"aiAssistantViewState.statusText\"\n [errorText]=\"aiAssistantViewState.errorText\"\n [busy]=\"aiAssistantViewState.state === 'processing' || aiAssistantViewState.state === 'applying'\"\n [canApply]=\"aiAssistantViewState.canApply\"\n [showAttachAction]=\"false\"\n [enablePastedAttachments]=\"false\"\n [voiceInputMode]=\"aiAssistantVoiceInputMode\"\n [voiceLanguage]=\"aiAssistantVoiceLanguage\"\n [layout]=\"aiAssistantLayout\"\n testIdPrefix=\"table-ai-assistant\"\n panelTestId=\"table-ai-assistant-panel\"\n submitTestId=\"table-ai-assistant-submit\"\n applyTestId=\"table-ai-assistant-apply\"\n (promptChange)=\"onAiAssistantPromptChange($event)\"\n (submitPrompt)=\"onAiAssistantSubmit($event)\"\n (apply)=\"onAiAssistantApply()\"\n (retryTurn)=\"onAiAssistantRetry()\"\n (cancelTurn)=\"onAiAssistantCancel()\"\n (quickReply)=\"onAiAssistantQuickReply($event)\"\n (recommendedIntent)=\"onAiAssistantRecommendedIntent($event)\"\n (editMessage)=\"onAiAssistantEditMessage($event)\"\n (resendMessage)=\"onAiAssistantResendMessage($event)\"\n (layoutChange)=\"onAiAssistantLayoutChange($event)\"\n (close)=\"closeAiAssistant()\"\n ></praxis-ai-assistant-shell>\n}\n\n@if (shouldRenderDataSurface() && !schemaError && !dataError && toolbarV2) {\n <div class=\"praxis-table-header\" [class.edit-mode]=\"enableCustomization\" [class.stacked]=\"hasTopToolbarStack()\">\n @if (showToolbar && shouldShowToolbarTopPlacement()) {\n <praxis-table-toolbar\n class=\"praxis-toolbar-stack-top\"\n [config]=\"config\"\n [backgroundColor]=\"getToolbarActionsBackgroundColor()\"\n [style.--pfx-filter-h]=\"getToolbarLayoutHeightHostStyle()\"\n [evaluationContext]=\"getToolbarEvaluationContext()\"\n [columnVisibilityController]=\"toolbarColumnVisibilityController\"\n [showActionsGroup]=\"shouldShowToolbarActionsTop()\"\n [showMobileActions]=\"shouldShowToolbarActionsTop()\"\n [exportBusy]=\"exportBusy\"\n (toolbarAction)=\"onToolbarAction($event)\"\n (exportAction)=\"onExportAction($event)\"\n >\n @if (shouldRenderAdvancedFilter()) {\n <praxis-filter\n advancedFilter\n [resourcePath]=\"getAdvancedFilterResourcePath()\"\n [filterId]=\"tableId\"\n [formId]=\"tableId\"\n [persistenceKey]=\"getAdvancedFilterPersistenceKey()\"\n [fieldMetadata]=\"getAdvancedFilterFieldMetadata()\"\n [enableCustomization]=\"enableCustomization\"\n [value]=\"advancedFilterValue\"\n\n [alwaysVisibleFields]=\"getAdvancedFilterAlwaysVisibleFields()\"\n [alwaysVisibleFieldMetadataOverrides]=\"getAdvancedFilterAlwaysVisibleFieldMetadataOverrides()\"\n [selectedFieldIds]=\"config.behavior?.filtering?.advancedFilters?.settings?.selectedFieldIds ?? []\"\n [allowSaveTags]=\"config.behavior?.filtering?.advancedFilters?.settings?.allowSaveTags\"\n [changeDebounceMs]=\"config.behavior?.filtering?.advancedFilters?.settings?.changeDebounceMs ?? 300\"\n [i18n]=\"getFilterI18n()\"\n [mode]=\"'filter'\"\n [showFilterSettings]=\"enableCustomization\"\n (change)=\"onAdvancedFilterChange($event)\"\n (requestSearch)=\"onAdvancedFilterSubmit($event)\"\n (clear)=\"onAdvancedFilterClear()\"\n ></praxis-filter>\n }\n <ng-content select=\"[advancedFilter]\" />\n <ng-content select=\"[toolbar]\" />\n\n <!-- AI Assistant in Toolbar -->\n @if (shouldShowAiAssistantEntrypoint()) {\n <button\n end-actions\n mat-icon-button\n color=\"primary\"\n type=\"button\"\n class=\"praxis-table-ai-trigger praxis-table-toolbar-action--ai\"\n [class.praxis-table-ai-trigger--minimized]=\"hasMinimizedAiAssistantSession()\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('toolbar-top')\"\n (click)=\"openAiAssistant()\"\n [attr.aria-label]=\"aiAssistantTriggerLabel()\"\n [matBadge]=\"aiAssistantTriggerBadge()\"\n [matBadgeHidden]=\"!hasMinimizedAiAssistantSession()\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"aiAssistantTriggerTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>{{ aiAssistantTriggerIcon() }}</mat-icon>\n </button>\n }\n\n @if (enableCustomization) {\n <button end-actions mat-icon-button color=\"primary\" class=\"praxis-table-toolbar-action--configuration\" data-role=\"table-settings\" data-testid=\"table-settings-trigger\"\n (click)=\"openTableSettings()\" [attr.aria-label]=\"getTableSettingsLabel()\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"getTableSettingsTooltip()\"\n matTooltipPosition=\"below\">\n <mat-icon>settings</mat-icon>\n </button>\n }\n </praxis-table-toolbar>\n }\n @if (!showToolbar && enableCustomization) {\n <div class=\"ptable-header-actions\">\n @if (shouldShowAiAssistantEntrypoint()) {\n <button\n mat-icon-button\n color=\"primary\"\n type=\"button\"\n class=\"praxis-table-ai-trigger praxis-table-toolbar-action--ai\"\n [class.praxis-table-ai-trigger--minimized]=\"hasMinimizedAiAssistantSession()\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('header-top')\"\n (click)=\"openAiAssistant()\"\n [attr.aria-label]=\"aiAssistantTriggerLabel()\"\n [matBadge]=\"aiAssistantTriggerBadge()\"\n [matBadgeHidden]=\"!hasMinimizedAiAssistantSession()\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"aiAssistantTriggerTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>{{ aiAssistantTriggerIcon() }}</mat-icon>\n </button>\n }\n <button mat-icon-button color=\"primary\" class=\"praxis-table-toolbar-action--configuration\" data-role=\"table-settings\" data-testid=\"table-settings-trigger\" (click)=\"openTableSettings()\" [attr.aria-label]=\"getTableSettingsLabel()\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"getTableSettingsTooltip()\"\n matTooltipPosition=\"below\">\n <mat-icon>settings</mat-icon>\n </button>\n @if (isRemoteMode()) {\n <button mat-icon-button (click)=\"disconnect()\" [attr.aria-label]=\"getDisconnectLabel()\" [matTooltip]=\"getDisconnectTooltip()\">\n <mat-icon>link_off</mat-icon>\n </button>\n }\n </div>\n }\n </div>\n} @else {\n @if (shouldRenderDataSurface() && !schemaError && !dataError) {\n @if (showToolbar && shouldShowToolbarTopPlacement()) {\n <praxis-table-toolbar\n class=\"praxis-toolbar-stack-top\"\n [config]=\"config\"\n [backgroundColor]=\"getToolbarActionsBackgroundColor()\"\n [style.--pfx-filter-h]=\"getToolbarLayoutHeightHostStyle()\"\n [evaluationContext]=\"getToolbarEvaluationContext()\"\n [showActionsGroup]=\"shouldShowToolbarActionsTop()\"\n [showMobileActions]=\"shouldShowToolbarActionsTop()\"\n [exportBusy]=\"exportBusy\"\n (toolbarAction)=\"onToolbarAction($event)\"\n (exportAction)=\"onExportAction($event)\"\n >\n @if (shouldRenderAdvancedFilter()) {\n <praxis-filter\n advancedFilter\n [resourcePath]=\"getAdvancedFilterResourcePath()\"\n [filterId]=\"tableId\"\n [formId]=\"tableId\"\n [persistenceKey]=\"getAdvancedFilterPersistenceKey()\"\n [fieldMetadata]=\"getAdvancedFilterFieldMetadata()\"\n [enableCustomization]=\"enableCustomization\"\n [value]=\"advancedFilterValue\"\n\n [alwaysVisibleFields]=\"getAdvancedFilterAlwaysVisibleFields()\"\n [alwaysVisibleFieldMetadataOverrides]=\"getAdvancedFilterAlwaysVisibleFieldMetadataOverrides()\"\n [selectedFieldIds]=\"config.behavior?.filtering?.advancedFilters?.settings?.selectedFieldIds ?? []\"\n [allowSaveTags]=\"config.behavior?.filtering?.advancedFilters?.settings?.allowSaveTags\"\n [changeDebounceMs]=\"config.behavior?.filtering?.advancedFilters?.settings?.changeDebounceMs ?? 300\"\n [i18n]=\"getFilterI18n()\"\n [mode]=\"'filter'\"\n [showFilterSettings]=\"enableCustomization\"\n (change)=\"onAdvancedFilterChange($event)\"\n (requestSearch)=\"onAdvancedFilterSubmit($event)\"\n (clear)=\"onAdvancedFilterClear()\"\n ></praxis-filter>\n }\n <ng-content select=\"[advancedFilter]\" />\n <ng-content select=\"[toolbar]\" />\n @if (shouldShowAiAssistantEntrypoint()) {\n <button\n end-actions\n mat-icon-button\n color=\"primary\"\n type=\"button\"\n class=\"praxis-table-ai-trigger praxis-table-toolbar-action--ai\"\n [class.praxis-table-ai-trigger--minimized]=\"hasMinimizedAiAssistantSession()\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('toolbar-stacked')\"\n (click)=\"openAiAssistant()\"\n [attr.aria-label]=\"aiAssistantTriggerLabel()\"\n [matBadge]=\"aiAssistantTriggerBadge()\"\n [matBadgeHidden]=\"!hasMinimizedAiAssistantSession()\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"aiAssistantTriggerTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>{{ aiAssistantTriggerIcon() }}</mat-icon>\n </button>\n }\n @if (enableCustomization) {\n <button end-actions mat-icon-button color=\"primary\" class=\"praxis-table-toolbar-action--configuration\" data-role=\"table-settings\" data-testid=\"table-settings-trigger\"\n (click)=\"openTableSettings()\" [attr.aria-label]=\"getTableSettingsLabel()\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"getTableSettingsTooltip()\"\n matTooltipPosition=\"below\">\n <mat-icon>settings</mat-icon>\n </button>\n }\n </praxis-table-toolbar>\n }\n @if (!showToolbar && enableCustomization) {\n <div class=\"ptable-header-actions\">\n @if (shouldShowAiAssistantEntrypoint()) {\n <button\n mat-icon-button\n color=\"primary\"\n type=\"button\"\n class=\"praxis-table-ai-trigger praxis-table-toolbar-action--ai\"\n [class.praxis-table-ai-trigger--minimized]=\"hasMinimizedAiAssistantSession()\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('header-stacked')\"\n (click)=\"openAiAssistant()\"\n [attr.aria-label]=\"aiAssistantTriggerLabel()\"\n [matBadge]=\"aiAssistantTriggerBadge()\"\n [matBadgeHidden]=\"!hasMinimizedAiAssistantSession()\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"aiAssistantTriggerTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>{{ aiAssistantTriggerIcon() }}</mat-icon>\n </button>\n }\n <button mat-icon-button color=\"primary\" class=\"praxis-table-toolbar-action--configuration\" data-role=\"table-settings\" data-testid=\"table-settings-trigger\" (click)=\"openTableSettings()\" [attr.aria-label]=\"getTableSettingsLabel()\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"getTableSettingsTooltip()\"\n matTooltipPosition=\"below\">\n <mat-icon>settings</mat-icon>\n </button>\n </div>\n }\n }\n}\n<!-- Paginador superior -->\n@if (shouldRenderDataSurface() && !schemaError && !dataError && getPaginationEnabled() && (config.behavior?.pagination?.position === 'top' || config.behavior?.pagination?.position === 'both')) {\n <mat-paginator\n [length]=\"getPaginationLength()\"\n [pageSize]=\"getPaginationPageSize()\"\n [pageSizeOptions]=\"getPaginationPageSizeOptions()\"\n [selectConfig]=\"paginatorSelectConfig\"\n [showFirstLastButtons]=\"getPaginationShowFirstLast()\"\n (page)=\"onPageChange($event)\"\n [class.compact]=\"config.behavior?.pagination?.style === 'compact'\"\n >\n </mat-paginator>\n}\n<div class=\"px-scroll-viewport\"\n cdkScrollable\n [class.scroll-auto]=\"horizontalScroll === 'auto'\"\n [class.scroll-wrap]=\"horizontalScroll === 'wrap'\"\n [class.scroll-none]=\"horizontalScroll === 'none'\">\n\n @if (shouldRenderDataSurface() && !schemaError && !dataError) {\n <div class=\"praxis-visually-hidden-status\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ columnReorderStatusMessage }}\n </div>\n @if (exportStatusMessage) {\n <div class=\"praxis-visually-hidden-status\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ exportStatusMessage }}\n </div>\n }\n @if (columnReorderVisualStatusMessage) {\n <div class=\"praxis-column-reorder-status\" role=\"note\">\n {{ columnReorderVisualStatusMessage }}\n </div>\n }\n <table\n mat-table\n data-testid=\"table-column-drag-drop-list\"\n [dataSource]=\"dataSource\"\n [multiTemplateDataRows]=\"isRowExpansionRuntimeEnabled()\"\n cdkDropList\n [cdkDropListDisabled]=\"!isColumnDraggingEnabled() || isColumnResizeActive()\"\n [cdkDropListData]=\"visibleDataColumnsForDrag\"\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"onColumnDrop($event)\"\n matSort\n (matSortChange)=\"onSortChange($event)\"\n [matSortDisabled]=\"!getSortingEnabled() || isColumnResizeActive()\"\n [ngClass]=\"getTableElevationClassName()\"\n [class.table-stack-top]=\"hasTopToolbarStack()\"\n [class.pfx-column-drag-enabled]=\"isColumnDraggingEnabled()\"\n [class.pfx-column-drag-indicator]=\"isColumnDragIndicatorEnabled()\"\n [class.pfx-column-resize-enabled]=\"isColumnResizeEnabled()\"\n [class.pfx-column-resizing]=\"isColumnResizeActive()\"\n [style.width]=\"getColumnResizeTableWidthStyle()\"\n [style.min-width]=\"getColumnResizeTableWidthStyle()\"\n [style.max-width]=\"getColumnResizeTableWidthStyle()\"\n >\n @if (isSelectionColumnEnabled()) {\n <ng-container\n matColumnDef=\"_select\"\n >\n <th mat-header-cell *matHeaderCellDef>\n @if (canSelectAll()) {\n <mat-checkbox\n (change)=\"masterToggle()\"\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\n [attr.aria-label]=\"getMasterSelectionAriaLabel()\"\n ></mat-checkbox>\n }\n </th>\n <td mat-cell *matCellDef=\"let row; let i = index\">\n @if (config.behavior?.selection?.type !== 'multiple') {\n <mat-radio-button\n (click)=\"$event.stopPropagation(); toggleRow(row)\"\n [checked]=\"selection.isSelected(row)\"\n [attr.aria-label]=\"getRowSelectionAriaLabel(row, i)\"\n ></mat-radio-button>\n } @else {\n <mat-checkbox\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleRow(row)\"\n [checked]=\"selection.isSelected(row)\"\n [attr.aria-label]=\"getRowSelectionAriaLabel(row, i)\"\n ></mat-checkbox>\n }\n </td>\n </ng-container>\n }\n\n @if (isRowExpansionRuntimeEnabled()) {\n <ng-container matColumnDef=\"_expander\">\n <th mat-header-cell *matHeaderCellDef class=\"pfx-expansion-col-header\">\n <span class=\"praxis-visually-hidden-status\">Expandir detalhes da linha</span>\n </th>\n <td mat-cell *matCellDef=\"let row; let i = index\" class=\"pfx-expansion-col-cell\">\n <button\n mat-icon-button\n class=\"pfx-expansion-toggle\"\n [disabled]=\"!isRowExpandable(row, i) || !isExpansionIconTriggerEnabled()\"\n [attr.aria-expanded]=\"isRowExpanded(row, i) ? 'true' : 'false'\"\n [attr.aria-controls]=\"getRowExpansionDetailId(row, i)\"\n [attr.aria-label]=\"getRowExpansionToggleAriaLabel(row, i)\"\n (click)=\"onExpansionToggleFromIcon(row, i, $event)\"\n (keydown)=\"onExpansionToggleKeydown($event, row, i)\"\n >\n <mat-icon [praxisIcon]=\"isRowExpanded(row, i)\n ? getExpansionExpandedIcon()\n : getExpansionCollapsedIcon()\"></mat-icon>\n </button>\n </td>\n </ng-container>\n }\n @for (column of visibleColumns; track column.field) {\n <ng-container\n [matColumnDef]=\"column.field\"\n [sticky]=\"column.sticky === true || column.sticky === 'start'\"\n [stickyEnd]=\"column.sticky === 'end'\"\n >\n <th\n mat-header-cell\n *matHeaderCellDef\n cdkDrag\n [cdkDragData]=\"column\"\n cdkDragLockAxis=\"x\"\n cdkDragPreviewClass=\"pfx-column-drag-preview\"\n (cdkDragStarted)=\"onColumnDragStarted(column)\"\n (cdkDragEnded)=\"onColumnDragEnded($event, column)\"\n [cdkDragDisabled]=\"!isColumnDraggingEnabled() || !isColumnDraggable(column) || isColumnResizeActive()\"\n [class.praxis-header-draggable]=\"isColumnDraggingEnabled() && isColumnDraggable(column)\"\n [class.praxis-header-resizable]=\"isColumnResizable(column)\"\n [class.praxis-header-resizing]=\"isColumnResizeActive(column)\"\n [class.praxis-header-align-left]=\"column.align === 'left'\"\n [class.praxis-header-align-center]=\"column.align === 'center'\"\n [class.praxis-header-align-right]=\"column.align === 'right'\"\n [style.text-align]=\"getColumnTextAlignStyle(column)\"\n [style.width]=\"getColumnWidthStyle(column)\"\n [attr.style]=\"getColumnHeaderAttrStyle(column)\"\n [ngStyle]=\"getColumnHeaderNgStyle(column)\"\n >\n <span\n class=\"praxis-header-sort-trigger\"\n [mat-sort-header]=\"column.field\"\n [disabled]=\"!getSortingEnabled() || column.sortable === false || isColumnResizeActive()\"\n (keydown)=\"onColumnHeaderReorderKeydown($event, column)\"\n >\n <span class=\"praxis-header-label\" data-testid=\"column-header-label\">\n <span class=\"praxis-header-label-text\">{{ column.header }}</span>\n </span>\n </span>\n <ng-template cdkDragPreview [matchSize]=\"true\">\n <div\n class=\"pfx-column-drag-preview pfx-column-drag-preview-custom\"\n [class.praxis-header-align-left]=\"column.align === 'left'\"\n [class.praxis-header-align-center]=\"column.align === 'center'\"\n [class.praxis-header-align-right]=\"column.align === 'right'\"\n [style.text-align]=\"getColumnTextAlignStyle(column)\"\n >\n <span class=\"praxis-header-label\">\n <span class=\"praxis-header-label-text\">{{ column.header }}</span>\n </span>\n </div>\n </ng-template>\n @if (isColumnResizable(column)) {\n <span\n class=\"praxis-column-resize-handle\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n tabindex=\"0\"\n [attr.aria-label]=\"getColumnResizeHandleAriaLabel(column)\"\n [attr.aria-valuemin]=\"getColumnResizeMinWidthAriaValue(column)\"\n [attr.aria-valuemax]=\"getColumnResizeMaxWidthAriaValue(column)\"\n [attr.aria-valuenow]=\"getColumnResizeCurrentWidthAriaValue(column)\"\n [attr.title]=\"getColumnResizeHandleTooltip(column)\"\n (pointerdown)=\"onColumnResizePointerDown($event, column)\"\n (keydown)=\"onColumnResizeHandleKeydown($event, column)\"\n (click)=\"onColumnResizeHandleClick($event)\"\n ></span>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n [style.text-align]=\"getColumnTextAlignStyle(column)\"\n [style.width]=\"getColumnWidthStyle(column)\"\n [attr.style]=\"getColumnCellAttrStyle(column)\"\n [ngClass]=\"getCellClasses(element, column)\"\n [ngStyle]=\"getCellNgStyle(element, column)\"\n [matTooltip]=\"getCellTooltip(element, column) || ''\"\n [matTooltipPosition]=\"getCellTooltipPosition(element, column)\"\n [matTooltipDisabled]=\"!getCellTooltip(element, column)\"\n [attr.title]=\"getCellTooltip(element, column) || null\"\n >\n <div\n class=\"pfx-cell-content\"\n [ngClass]=\"getCellContentClasses(element, column)\"\n [ngStyle]=\"getCellContentNgStyle(element, column)\"\n >\n @switch (getEffectiveRendererType(element, column)) {\n <!-- Icon renderer -->\n @case ('icon') {\n <span\n class=\"pfx-icon-renderer\"\n [style.color]=\"getIconColor(element, column) || null\"\n [ngStyle]=\"getIconStyle(element, column)\"\n [attr.aria-label]=\"getIconAriaLabel(element, column) || null\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-icon-renderer__content\"\n [nodes]=\"getIconRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </span>\n }\n <!-- Image renderer -->\n @case ('image') {\n <span class=\"pfx-cell-image\">\n <praxis-rich-content\n rootClassName=\"pfx-cell-image__content\"\n [nodes]=\"getImageRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </span>\n }\n <!-- Badge renderer -->\n @case ('badge') {\n @if (shouldRenderBadge(element, column)) {\n <span class=\"pfx-badge\" [ngClass]=\"getBadgeClasses(element, column)\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-badge__content\"\n [nodes]=\"getBadgeRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </span>\n }\n }\n <!-- Link renderer -->\n @case ('link') {\n <a\n class=\"pfx-link\"\n [attr.href]=\"getLinkHref(element, column) || null\"\n [attr.target]=\"getLinkTarget(element, column) || null\"\n [attr.rel]=\"getLinkRel(element, column) || null\"\n (click)=\"$event.stopPropagation()\"\n ><praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-link__content\"\n [nodes]=\"getLinkRichContentNodes(element, column)\"\n ></praxis-rich-content></a\n >\n }\n <!-- Button renderer -->\n @case ('button') {\n @switch (getButtonVariant(element, column)) {\n @case ('outlined') {\n <button\n mat-stroked-button\n [color]=\"getButtonColor(element, column) || null\"\n [disabled]=\"isButtonDisabled(element, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(element, column) || getButtonLabel(element, column)\"\n (click)=\"onButtonClick(element, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </button>\n }\n @case ('text') {\n <button\n mat-button\n [color]=\"getButtonColor(element, column) || null\"\n [disabled]=\"isButtonDisabled(element, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(element, column) || getButtonLabel(element, column)\"\n (click)=\"onButtonClick(element, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </button>\n }\n @default {\n <button\n mat-flat-button\n [color]=\"getButtonColor(element, column) || null\"\n [disabled]=\"isButtonDisabled(element, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(element, column) || getButtonLabel(element, column)\"\n (click)=\"onButtonClick(element, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </button>\n }\n }\n }\n <!-- Chip renderer -->\n @case ('chip') {\n @if (shouldRenderChip(element, column)) {\n <span class=\"pfx-chip\" [ngClass]=\"getChipClasses(element, column)\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-chip__content\"\n [nodes]=\"getChipRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </span>\n }\n }\n <!-- Progress renderer -->\n @case ('progress') {\n <div class=\"pfx-progress\">\n <praxis-rich-content\n rootClassName=\"pfx-progress__content\"\n [context]=\"getProgressRichContentContext(element, column)\"\n [nodes]=\"getProgressRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </div>\n }\n <!-- Micro visualization renderer -->\n @case ('microVisualization') {\n <span class=\"pfx-micro-viz-cell\" [innerHTML]=\"getMicroVisualizationHtml(element, column)\"></span>\n }\n <!-- Avatar renderer -->\n @case ('avatar') {\n <span class=\"pfx-avatar-renderer\"\n [ngStyle]=\"getAvatarStyle(element, column)\"\n [class.shape-rounded]=\"getAvatarShape(element, column) === 'rounded'\"\n [class.shape-circle]=\"getAvatarShape(element, column) === 'circle'\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-avatar-renderer__content\"\n [nodes]=\"getAvatarRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </span>\n }\n <!-- Toggle renderer -->\n @case ('toggle') {\n <mat-slide-toggle\n [checked]=\"getToggleState(element, column)\"\n [disabled]=\"isToggleDisabled(element, column)\"\n [attr.aria-label]=\"getToggleAriaLabel(element, column) || 'Alternar'\"\n (change)=\"onToggleChange(element, column, $event)\"\n (click)=\"$event.stopPropagation()\"\n ></mat-slide-toggle>\n }\n <!-- Menu renderer -->\n @case ('menu') {\n <button mat-icon-button [matMenuTriggerFor]=\"menuRef\" (click)=\"$event.stopPropagation()\" [attr.aria-label]=\"getMenuAriaLabel(element, column) || 'Menu'\">\n <praxis-rich-content rootClassName=\"pfx-menu-trigger__content\" [nodes]=\"getMenuTriggerRichContentNodes()\"></praxis-rich-content>\n </button>\n <mat-menu #menuRef=\"matMenu\">\n @for (it of getMenuItems(element, column); track it.id) {\n <button mat-menu-item (click)=\"onMenuItemClick(it, element, $event)\" [disabled]=\"!it.__visible\" >\n <praxis-rich-content\n rootClassName=\"pfx-menu-item__content\"\n [nodes]=\"getMenuItemRichContentNodes(it)\"\n ></praxis-rich-content>\n </button>\n }\n </mat-menu>\n }\n <!-- Rating renderer -->\n @case ('rating') {\n <praxis-table-rating\n class=\"pfx-rating-cell\"\n [itemsCount]=\"getRatingMax(element, column)\"\n [value]=\"getRatingValue(element, column)\"\n [size]=\"getRatingSize(element, column)\"\n [ratingColor]=\"getRatingColor(element, column)\"\n [outlineColor]=\"getRatingOutlineColor(element, column)\"\n [ariaLabel]=\"getRatingAriaLabel(element, column) || column.header\">\n </praxis-table-rating>\n }\n <!-- HTML renderer (sanitizado) -->\n @case ('html') {\n <span [innerHTML]=\"getSafeHtml(element, column)\"></span>\n }\n <!-- Compose renderer -->\n @case ('compose') {\n <span class=\"pfx-cell-compose\" [ngClass]=\"getComposeClasses(element, column)\" [ngStyle]=\"getComposeGapStyle(element, column)\">\n @for (it of getComposeItems(element, column); track trackComposeItem($index, it)) {\n @switch (getItemEffectiveType(element, column, it)) {\n <!-- Reuse helpers by projecting item as faux column -->\n @case ('icon') {\n <span class=\"pfx-icon-renderer\" [style.color]=\"getIconColor(element, asItemColumn(column, it)) || null\" [ngStyle]=\"getIconStyle(element, asItemColumn(column, it))\" [attr.aria-label]=\"getIconAriaLabel(element, asItemColumn(column, it)) || null\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-icon-renderer__content\" [nodes]=\"getIconRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></span>\n }\n @case ('image') {\n <span class=\"pfx-cell-image\"><praxis-rich-content rootClassName=\"pfx-cell-image__content\" [nodes]=\"getImageRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></span>\n }\n @case ('badge') {\n @if (shouldRenderBadge(element, asItemColumn(column, it))) {\n <span class=\"pfx-badge\" [ngClass]=\"getBadgeClasses(element, asItemColumn(column, it))\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-badge__content\" [nodes]=\"getBadgeRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></span>\n }\n }\n @case ('link') {\n <a class=\"pfx-link\" [attr.href]=\"getLinkHref(element, asItemColumn(column, it)) || null\" [attr.target]=\"getLinkTarget(element, asItemColumn(column, it)) || null\" [attr.rel]=\"getLinkRel(element, asItemColumn(column, it)) || null\" (click)=\"$event.stopPropagation()\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-link__content\" [nodes]=\"getLinkRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></a>\n }\n @case ('button') {\n @switch (getButtonVariant(element, asItemColumn(column, it))) {\n @case ('outlined') {\n <button mat-stroked-button [color]=\"getButtonColor(element, asItemColumn(column, it)) || null\" [disabled]=\"isButtonDisabled(element, asItemColumn(column, it))\" [attr.aria-label]=\"getButtonAriaLabel(element, asItemColumn(column, it)) || getButtonLabel(element, asItemColumn(column, it))\" (click)=\"onButtonClick(element, asItemColumn(column, it), $event)\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-button-renderer__content\" [nodes]=\"getButtonRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></button>\n }\n @case ('text') {\n <button mat-button [color]=\"getButtonColor(element, asItemColumn(column, it)) || null\" [disabled]=\"isButtonDisabled(element, asItemColumn(column, it))\" [attr.aria-label]=\"getButtonAriaLabel(element, asItemColumn(column, it)) || getButtonLabel(element, asItemColumn(column, it))\" (click)=\"onButtonClick(element, asItemColumn(column, it), $event)\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-button-renderer__content\" [nodes]=\"getButtonRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></button>\n }\n @default {\n <button mat-flat-button [color]=\"getButtonColor(element, asItemColumn(column, it)) || null\" [disabled]=\"isButtonDisabled(element, asItemColumn(column, it))\" [attr.aria-label]=\"getButtonAriaLabel(element, asItemColumn(column, it)) || getButtonLabel(element, asItemColumn(column, it))\" (click)=\"onButtonClick(element, asItemColumn(column, it), $event)\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-button-renderer__content\" [nodes]=\"getButtonRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></button>\n }\n }\n }\n @case ('chip') {\n @if (shouldRenderChip(element, asItemColumn(column, it))) {\n <span class=\"pfx-chip\" [ngClass]=\"getChipClasses(element, asItemColumn(column, it))\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-chip__content\" [nodes]=\"getChipRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></span>\n }\n }\n @case ('progress') {\n <div class=\"pfx-progress\">\n <praxis-rich-content\n rootClassName=\"pfx-progress__content\"\n [context]=\"getProgressRichContentContext(element, asItemColumn(column, it))\"\n [nodes]=\"getProgressRichContentNodes(element, asItemColumn(column, it))\"\n ></praxis-rich-content>\n </div>\n }\n @case ('microVisualization') {\n <span class=\"pfx-micro-viz-cell\" [innerHTML]=\"getMicroVisualizationHtml(element, asItemColumn(column, it))\"></span>\n }\n @case ('avatar') {\n <span class=\"pfx-avatar-renderer\" [ngStyle]=\"getAvatarStyle(element, asItemColumn(column, it))\" [class.shape-rounded]=\"getAvatarShape(element, asItemColumn(column, it)) === 'rounded'\" [class.shape-circle]=\"getAvatarShape(element, asItemColumn(column, it)) === 'circle'\"><praxis-rich-content rootClassName=\"pfx-avatar-renderer__content\" [nodes]=\"getAvatarRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></span>\n }\n @case ('toggle') {\n <mat-slide-toggle [checked]=\"getToggleState(element, asItemColumn(column, it))\" [disabled]=\"isToggleDisabled(element, asItemColumn(column, it))\" [attr.aria-label]=\"getToggleAriaLabel(element, asItemColumn(column, it)) || 'Alternar'\" (change)=\"onToggleChange(element, asItemColumn(column, it), $event)\" (click)=\"$event.stopPropagation()\"></mat-slide-toggle>\n }\n @case ('menu') {\n <button mat-icon-button [matMenuTriggerFor]=\"menuRef\" (click)=\"$event.stopPropagation()\" [attr.aria-label]=\"getMenuAriaLabel(element, asItemColumn(column, it)) || 'Menu'\"><praxis-rich-content rootClassName=\"pfx-menu-trigger__content\" [nodes]=\"getMenuTriggerRichContentNodes()\"></praxis-rich-content></button>\n <mat-menu #menuRef=\"matMenu\">\n @for (mi of getMenuItems(element, asItemColumn(column, it)); track mi.id) {\n <button mat-menu-item (click)=\"onMenuItemClick(mi, element, $event)\" [disabled]=\"!mi.__visible\">\n <praxis-rich-content\n rootClassName=\"pfx-menu-item__content\"\n [nodes]=\"getMenuItemRichContentNodes(mi)\"\n ></praxis-rich-content>\n </button>\n }\n </mat-menu>\n }\n @case ('rating') {\n <praxis-table-rating\n class=\"pfx-rating-cell\"\n [itemsCount]=\"getRatingMax(element, asItemColumn(column, it))\"\n [value]=\"getRatingValue(element, asItemColumn(column, it))\"\n [size]=\"getRatingSize(element, asItemColumn(column, it))\"\n [ratingColor]=\"getRatingColor(element, asItemColumn(column, it))\"\n [outlineColor]=\"getRatingOutlineColor(element, asItemColumn(column, it))\"\n [ariaLabel]=\"getRatingAriaLabel(element, asItemColumn(column, it)) || column.header\">\n </praxis-table-rating>\n }\n @case ('html') {\n <span [innerHTML]=\"getSafeHtml(element, asItemColumn(column, it))\"></span>\n }\n <!-- Value item: render base cell text alongside visuals -->\n @case ('value') {\n <span class=\"pfx-cell-value\">{{ getComposeItemValue(element, column, it) }}</span>\n }\n }\n }\n </span>\n }\n <!-- Default text rendering -->\n @default {\n {{ getCellValue(element, column) }}\n }\n }\n </div>\n </td>\n </ng-container>\n }\n @if (config.actions?.row?.enabled) {\n <ng-container matColumnDef=\"_actions\" [sticky]=\"config.actions?.row?.sticky === true || config.actions?.row?.sticky === 'start'\" [stickyEnd]=\"config.actions?.row?.sticky === 'end'\">\n <th mat-header-cell *matHeaderCellDef #actionsHeaderCell [style.width]=\"getRowActionsWidthStyle()\" class=\"praxis-actions-header\" [class.align-start]=\"getActionsHeaderAlign() === 'start'\" [class.align-center]=\"getActionsHeaderAlign() === 'center'\" [class.align-end]=\"getActionsHeaderAlign() === 'end'\">\n <div class=\"praxis-actions-header__content\" [matTooltip]=\"getActionsHeaderTooltip() || ''\" [matTooltipDisabled]=\"!getActionsHeaderTooltip()\">\n <praxis-rich-content\n rootClassName=\"praxis-actions-header__nodes\"\n [nodes]=\"getActionsHeaderRichContentNodes()\"\n ></praxis-rich-content>\n </div>\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"praxis-actions-cell\"\n [class.dense]=\"dense\"\n [style.width]=\"getRowActionsWidthStyle()\"\n >\n <div\n class=\"praxis-actions-cell__content\"\n [class.praxis-actions-cell__content--discovering]=\"isRowDiscoveryPending(row)\"\n [attr.aria-busy]=\"isRowDiscoveryPending(row) ? 'true' : null\"\n >\n <!-- A\u00C3\u00A7\u00C3\u00B5es inline -->\n <!-- Inline actions: icons mode -->\n @if (config.actions?.row?.display === 'icons' || !config.actions?.row?.display) {\n @for (a of getInlineRowActions(row); track trackAction($index, a)) {\n <span\n class=\"praxis-row-action-anchor\"\n [class.praxis-row-action-anchor--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-action-anchor--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [matTooltip]=\"getActionTooltip(a, row)\"\n [matTooltipDisabled]=\"!getActionTooltip(a, row)\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"praxis-tooltip\"\n >\n <button\n mat-icon-button\n class=\"praxis-icon-btn\"\n [class.praxis-icon-btn--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-icon-btn--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [disabled]=\"isActionDisabled(a, row)\"\n (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\"\n [attr.aria-label]=\"a.label || getActionId(a)\"\n [color]=\"a.color || null\"\n >\n <praxis-rich-content\n layout=\"inline\"\n rootClassName=\"praxis-row-action__content\"\n [nodes]=\"getRowActionIconRichContentNodes(a)\"\n ></praxis-rich-content>\n </button>\n </span>\n }\n }\n\n <!-- Inline actions: buttons mode (show label + icon) -->\n @if (config.actions?.row?.display === 'buttons') {\n @for (a of getInlineRowActions(row); track trackAction($index, a)) {\n <span\n class=\"praxis-row-action-anchor\"\n [class.praxis-row-action-anchor--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-action-anchor--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [matTooltip]=\"getActionTooltip(a, row)\"\n [matTooltipDisabled]=\"!getActionTooltip(a, row)\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"praxis-tooltip\"\n >\n <button\n mat-flat-button\n class=\"praxis-row-btn\"\n [class.praxis-row-btn--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-btn--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [disabled]=\"isActionDisabled(a, row)\"\n (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\"\n [attr.aria-label]=\"a.label || getActionId(a)\"\n [color]=\"a.color || null\"\n >\n <praxis-rich-content\n layout=\"inline\"\n rootClassName=\"praxis-row-action__content\"\n [nodes]=\"getRowActionRichContentNodes(a)\"\n ></praxis-rich-content>\n </button>\n </span>\n }\n }\n\n <!-- Menu de overflow -->\n @if (hasOverflowRowActions(row)) {\n <button\n mat-icon-button\n class=\"praxis-icon-btn praxis-more-btn\"\n [matMenuTriggerFor]=\"rowMoreMenu\"\n (menuOpened)=\"onRowOverflowMenuOpened(row)\"\n [color]=\"getRowMenuButtonColor() || null\"\n [attr.aria-label]=\"getRowMenuTooltip(row)\"\n [matTooltip]=\"getRowMenuTooltip(row)\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"getRowMenuIcon()\"></mat-icon>\n </button>\n }\n <mat-menu #rowMoreMenu=\"matMenu\" xPosition=\"before\">\n @if (hasRowOverflowMenuLoadingState(row)) {\n <button mat-menu-item disabled>\n <mat-icon>hourglass_empty</mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(getRowOverflowMenuLoadingLabel(), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n @for (a of getOverflowRowActions(row); track trackAction($index, a)) {\n <button\n mat-menu-item\n (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\"\n [disabled]=\"isActionDisabled(a, row)\"\n >\n <mat-icon [color]=\"a.color || null\" [praxisIcon]=\"a.icon\"></mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(a.label || getActionId(a), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n @if (hasRowOverflowMenuEmptyState(row)) {\n <button mat-menu-item disabled>\n <mat-icon>info</mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(getRowOverflowMenuEmptyLabel(row), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n </mat-menu>\n </div>\n </td>\n </ng-container>\n }\n\n <tr\n mat-header-row\n *matHeaderRowDef=\"displayedColumns\"\n ></tr>\n @if (!isVirtualized()) {\n <tr\n mat-row\n *matRowDef=\"let row; let i = index; columns: displayedColumns\"\n [class.pfx-row-selected]=\"selection.isSelected(row)\"\n [class.pfx-row-click-selectable]=\"isRowClickSelectable()\"\n [class.pfx-row-expanded]=\"isRowExpansionRuntimeEnabled() && isRowExpanded(row, i)\"\n [attr.aria-selected]=\"config.behavior?.selection?.enabled ? (selection.isSelected(row) ? 'true' : 'false') : null\"\n [attr.aria-expanded]=\"isRowExpansionRuntimeEnabled() ? (isRowExpanded(row, i) ? 'true' : 'false') : null\"\n [ngClass]=\"getRowClasses(row)\"\n [ngStyle]=\"getRowNgStyle(row)\"\n [matTooltip]=\"getRowTooltip(row) || null\"\n [matTooltipDisabled]=\"!getRowTooltip(row)\"\n [matTooltipPosition]=\"getRowTooltipPosition(row)\"\n [matTooltipShowDelay]=\"getRowTooltipShowDelay(row)\"\n (click)=\"onRowClicked(row, i, $event)\"\n (dblclick)=\"onRowDoubleClicked(row, i)\"\n ></tr>\n @if (isRowExpansionRuntimeEnabled()) {\n <ng-container matColumnDef=\"_detail\">\n <td\n mat-cell\n *matCellDef=\"let row; let i = index\"\n class=\"pfx-expansion-detail-cell\"\n [attr.colspan]=\"displayedColumns.length\"\n >\n <section\n class=\"pfx-expansion-detail-panel\"\n [ngClass]=\"getExpansionMotionPresetClass()\"\n [ngStyle]=\"getExpansionMotionStyle()\"\n [attr.id]=\"getRowExpansionDetailId(row, i)\"\n role=\"region\"\n [attr.aria-label]=\"getRowExpansionRegionAriaLabel(row, i)\"\n [attr.aria-busy]=\"getExpansionDetailViewState(row, i).status === 'loading' ? 'true' : 'false'\"\n >\n @let detailState = getExpansionDetailViewState(row, i);\n @if (detailState.status === 'loading') {\n <div class=\"pfx-expansion-detail-message\" role=\"status\" aria-live=\"polite\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-detail-message__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Carregando detail schema...', 'pfx-expansion-detail-message__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, i)\"\n ></praxis-rich-content>\n </div>\n } @else if (detailState.status !== 'ready') {\n <div\n class=\"pfx-expansion-detail-message pfx-expansion-detail-message--error\"\n role=\"alert\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n >\n <praxis-rich-content\n rootClassName=\"pfx-expansion-detail-message__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(detailState.message || 'Detail indispon\u00EDvel para esta linha.', 'pfx-expansion-detail-message__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, i)\"\n ></praxis-rich-content>\n </div>\n } @else {\n @if (getExpansionDetailLayout(detailState.schema) === 'tabs') {\n @let detailTabs = getExpansionDetailTabs(detailState.schema);\n @if (detailTabs.length) {\n <div class=\"pfx-expansion-detail-tabs\" role=\"tablist\" aria-label=\"Se\u00C3\u00A7\u00C3\u00B5es do detail\">\n @for (tab of detailTabs; track $index; let tabIndex = $index) {\n <button\n type=\"button\"\n class=\"pfx-expansion-detail-tab-btn\"\n role=\"tab\"\n [attr.id]=\"getExpansionDetailTabId(row, i, tab, tabIndex)\"\n [attr.aria-controls]=\"getExpansionDetailPanelId(row, i, tab, tabIndex)\"\n [attr.aria-selected]=\"isExpansionDetailTabActive(row, i, tab, tabIndex, detailTabs) ? 'true' : 'false'\"\n [attr.tabindex]=\"isExpansionDetailTabActive(row, i, tab, tabIndex, detailTabs) ? '0' : '-1'\"\n [class.is-active]=\"isExpansionDetailTabActive(row, i, tab, tabIndex, detailTabs)\"\n (click)=\"onExpansionDetailTabSelect(row, i, tab, tabIndex, $event)\"\n (keydown)=\"onExpansionDetailTabKeydown($event, row, i, tabIndex, detailTabs)\"\n >\n <praxis-rich-content\n rootClassName=\"pfx-expansion-detail-tab-btn__content\"\n [nodes]=\"getExpansionDetailTabButtonRichContentNodes(tab)\"\n [context]=\"getExpansionDetailRichContentContext(row, i)\"\n ></praxis-rich-content>\n </button>\n }\n </div>\n @for (tab of detailTabs; track $index; let tabIndex = $index) {\n @if (isExpansionDetailTabActive(row, i, tab, tabIndex, detailTabs)) {\n <div\n class=\"pfx-expansion-detail-tab-panel\"\n role=\"tabpanel\"\n [attr.id]=\"getExpansionDetailPanelId(row, i, tab, tabIndex)\"\n [attr.aria-labelledby]=\"getExpansionDetailTabId(row, i, tab, tabIndex)\"\n >\n @if (getExpansionDetailTabRichContentNodes(tab, row, i); as richNodes) {\n <praxis-rich-content\n class=\"pfx-expansion-node-host pfx-expansion-node-host--tab\"\n [nodes]=\"richNodes\"\n [context]=\"getExpansionDetailRichContentContext(row, i)\"\n ></praxis-rich-content>\n } @else {\n @for (childNode of getExpansionDetailNodeChildren(tab); track $index) {\n <ng-container\n *ngTemplateOutlet=\"\n expansionDetailNodeTemplate;\n context: { $implicit: childNode, row: row, index: i }\n \"\n ></ng-container>\n }\n }\n </div>\n }\n }\n } @else {\n <div class=\"pfx-expansion-detail-message\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-detail-message__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Schema em layout tabs sem abas v\u00E1lidas.', 'pfx-expansion-detail-message__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, i)\"\n ></praxis-rich-content>\n </div>\n }\n } @else {\n <div class=\"pfx-expansion-detail-stack\">\n @for (node of getExpansionDetailItems(detailState.schema); track $index) {\n <ng-container\n *ngTemplateOutlet=\"\n expansionDetailNodeTemplate;\n context: { $implicit: node, row: row, index: i }\n \"\n ></ng-container>\n }\n </div>\n }\n }\n\n <ng-template #expansionDetailNodeTemplate let-node let-row=\"row\" let-index=\"index\">\n @if (getExpansionDetailRichContentNodes(node, row, index); as richNodes) {\n <praxis-rich-content\n class=\"pfx-expansion-node-host\"\n [nodes]=\"richNodes\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n } @else {\n @switch (getExpansionDetailNodeType(node)) {\n @case ('list') {\n <section class=\"pfx-expansion-node pfx-expansion-node-list\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-list__title\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailNodeTitle(node, 'Lista'), 'pfx-expansion-node-list__title-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @let listItems = getExpansionDetailListItems(row, node);\n @let listEntries = getExpansionDetailListEntries(row, node);\n @if (listItems.length) {\n <ul>\n @for (entry of listEntries; track $index) {\n <li>\n @if (getExpansionDetailListItemRichContentNodes(entry); as richNodes) {\n <praxis-rich-content\n class=\"pfx-expansion-node-list__item-host\"\n [nodes]=\"richNodes\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n } @else {\n {{ formatExpansionDetailListEntry(entry) }}\n }\n </li>\n }\n </ul>\n } @else {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Sem itens.', 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </section>\n }\n @case ('detailList') {\n <section class=\"pfx-expansion-node pfx-expansion-node-rich-list\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-rich-list__title\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailNodeTitle(node, 'Cole\u00E7\u00E3o rica'), 'pfx-expansion-node-rich-list__title-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @let richListEntries = getExpansionDetailRichListEntries(row, node);\n @if (richListEntries.length) {\n <div class=\"pfx-expansion-node-rich-list__items\">\n @for (entry of richListEntries; track $index) {\n <article [class]=\"getExpansionDetailRichListItemClassName(node)\">\n <praxis-rich-content\n class=\"pfx-expansion-node-rich-list__item-host\"\n [nodes]=\"getExpansionDetailRichListItemNodes(node)\"\n [context]=\"getExpansionDetailRichListItemContext(row, index, node, entry, $index)\"\n ></praxis-rich-content>\n @let itemActions = getExpansionDetailRichListItemActions(node, row, index, entry, $index);\n @if (itemActions.length) {\n <div class=\"pfx-expansion-node-rich-list__item-actions\">\n @for (action of itemActions; track action.actionId) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-rich-list__item-action-btn\"\n [disabled]=\"isExpansionDetailRichListItemActionDisabled(action, row, index, node, entry, $index)\"\n (click)=\"onExpansionDetailRichListItemAction(action, row, index, node, entry, $index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-rich-list__item-action-host\"\n [nodes]=\"getExpansionDetailRichListItemActionNodes(action)\"\n [context]=\"getExpansionDetailRichListItemContext(row, index, node, entry, $index)\"\n ></praxis-rich-content>\n </button>\n }\n </div>\n }\n </article>\n }\n </div>\n } @else {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailRichListEmptyText(node), 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </section>\n }\n @case ('card') {\n <section class=\"pfx-expansion-node pfx-expansion-node-card\">\n <header class=\"pfx-expansion-node-card__header\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-card__title\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailNodeTitle(node, 'Card'), 'pfx-expansion-node-card__title-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (node?.subtitle) {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-card__subtitle\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(node.subtitle, 'pfx-expansion-node-card__subtitle-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </header>\n @if (getExpansionDetailNodeChildren(node).length) {\n <div class=\"pfx-expansion-node-card__content\">\n @for (childNode of getExpansionDetailNodeChildren(node); track $index) {\n <ng-container\n *ngTemplateOutlet=\"\n expansionDetailNodeTemplate;\n context: { $implicit: childNode, row: row, index: index }\n \"\n ></ng-container>\n }\n </div>\n }\n </section>\n }\n @case ('cardGrid') {\n <section class=\"pfx-expansion-node pfx-expansion-node-card-grid\">\n @if (getExpansionDetailCardGridHeaderNodes(node); as cardGridHeaderNodes) {\n @if (cardGridHeaderNodes.length) {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-card-grid__header\"\n [nodes]=\"cardGridHeaderNodes\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n }\n @let gridCards = getExpansionDetailCardGridCards(node);\n @if (gridCards.length) {\n <div\n class=\"pfx-expansion-node-card-grid__cards\"\n [ngStyle]=\"getExpansionDetailCardGridStyles(node)\"\n >\n @for (card of gridCards; track $index) {\n <praxis-rich-content\n class=\"pfx-expansion-node-card-grid__card-host\"\n [nodes]=\"getExpansionDetailCardGridCardNodes(card)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </div>\n } @else {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Sem itens.', 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </section>\n }\n @case ('richText') {\n <div\n class=\"pfx-expansion-node pfx-expansion-node-richtext\"\n [innerHTML]=\"getExpansionDetailRichText(node)\"\n ></div>\n }\n @case ('formRef') {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__meta\"\n [nodes]=\"getExpansionDetailEmbedMetaNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__empty\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailEmbedEmptyText(node), 'pfx-expansion-node-embed__empty-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n }\n @case ('tableRef') {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__meta\"\n [nodes]=\"getExpansionDetailEmbedMetaNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__empty\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailEmbedEmptyText(node), 'pfx-expansion-node-embed__empty-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n }\n @case ('chartRef') {\n @if (getExpansionDetailInlineRendererView(node, row, index); as inlineRenderer) {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed pfx-expansion-node-embed--inline pfx-expansion-node-embed--chart\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <ng-container\n *ngComponentOutlet=\"inlineRenderer.component; inputs: inlineRenderer.inputs\"\n ></ng-container>\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n } @else {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__meta\"\n [nodes]=\"getExpansionDetailEmbedMetaNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__empty\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailEmbedEmptyText(node), 'pfx-expansion-node-embed__empty-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n }\n }\n @case ('templateRef') {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__meta\"\n [nodes]=\"getExpansionDetailEmbedMetaNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__empty\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailEmbedEmptyText(node), 'pfx-expansion-node-embed__empty-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n }\n @case ('diagramEmbed') {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__meta\"\n [nodes]=\"getExpansionDetailEmbedMetaNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (getExpansionDetailDiagramSource(row, node); as diagramSource) {\n <div class=\"pfx-expansion-node-embed__diagram\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__diagram-label\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailDiagramSourceLabel(), 'pfx-expansion-node-embed__diagram-label-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <pre class=\"pfx-expansion-node-embed__diagram-source\">{{ diagramSource }}</pre>\n </div>\n } @else {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__empty\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailEmbedEmptyText(node), 'pfx-expansion-node-embed__empty-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n }\n @case ('action') {\n <div class=\"pfx-expansion-node pfx-expansion-node-action\">\n <button\n type=\"button\"\n mat-stroked-button\n [disabled]=\"isExpansionDetailActionDisabled(node)\"\n (click)=\"onExpansionDetailAction(node, row, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-action__content\"\n [nodes]=\"getExpansionDetailActionRichContentNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n @if (getExpansionDetailActionStatusText(node); as actionStatusText) {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-action__status\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(actionStatusText, 'pfx-expansion-node-action__status-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </div>\n }\n @case ('actionBar') {\n <section class=\"pfx-expansion-node pfx-expansion-node-action-bar\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-action-bar__title\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailActionBarTitle(node), 'pfx-expansion-node-action-bar__title-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @let actionBarActions = getExpansionDetailActionBarActions(node, row, index);\n @if (actionBarActions.length) {\n <div class=\"pfx-expansion-node-action-bar__actions\">\n @for (action of actionBarActions; track action.actionId) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-action-bar__action-btn\"\n [disabled]=\"isExpansionDetailActionBarActionDisabled(action, row, index)\"\n (click)=\"onExpansionDetailActionBarAction(action, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-action-bar__action-host\"\n [nodes]=\"getExpansionDetailActionBarActionNodes(action)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </div>\n } @else {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailActionBarEmptyText(node), 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </section>\n }\n @case ('tab') {\n <div class=\"pfx-expansion-node pfx-expansion-node-placeholder\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Node', 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <code>tab</code>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('fora de contexto de tabs.', 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </div>\n }\n @default {\n <div class=\"pfx-expansion-node pfx-expansion-node-placeholder\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Node n\u00E3o suportado:', 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <code>{{ getExpansionDetailNodeType(node) }}</code>\n </div>\n }\n }\n }\n </ng-template>\n </section>\n </td>\n </ng-container>\n <tr\n mat-row\n *matRowDef=\"let row; columns: expansionDetailRowColumns; when: isExpansionDetailRow\"\n class=\"pfx-expansion-detail-row\"\n ></tr>\n }\n }\n </table>\n }\n\n <!-- Virtual rows path (header preserved above) -->\n @if (shouldRenderDataSurface() && !schemaError && !dataError && isVirtualized()) {\n <cdk-virtual-scroll-viewport\n class=\"ptable-viewport\"\n [itemSize]=\"getVirtItemHeight()\"\n [minBufferPx]=\"getVirtBufferSize() * getVirtItemHeight()\"\n [maxBufferPx]=\"getVirtBufferSize() * getVirtItemHeight() * 2\"\n [style.minHeight]=\"getVirtMinHeightHostStyle()\"\n >\n <table\n class=\"mat-mdc-table\"\n [ngClass]=\"getTableElevationClassName()\"\n [class.table-stack-top]=\"hasTopToolbarStack()\"\n [style.width]=\"getVirtualTableWidthStyle()\"\n >\n <tbody>\n <tr class=\"mat-mdc-row\"\n *cdkVirtualFor=\"let row of dataSource.data; let i = index; trackBy: trackByRow\"\n [class.pfx-row-selected]=\"selection.isSelected(row)\"\n [class.pfx-row-click-selectable]=\"isRowClickSelectable()\"\n [attr.aria-selected]=\"config.behavior?.selection?.enabled ? (selection.isSelected(row) ? 'true' : 'false') : null\"\n [ngClass]=\"getRowClasses(row)\"\n [ngStyle]=\"getRowNgStyle(row)\"\n [matTooltip]=\"getRowTooltip(row) || null\"\n [matTooltipDisabled]=\"!getRowTooltip(row)\"\n [matTooltipPosition]=\"getRowTooltipPosition(row)\"\n [matTooltipShowDelay]=\"getRowTooltipShowDelay(row)\"\n (click)=\"onRowClicked(row, i, $event)\"\n (dblclick)=\"onRowDoubleClicked(row, i)\">\n <!-- Selection column -->\n @if (isSelectionColumnEnabled()) { <td class=\"mat-mdc-cell\">\n <mat-checkbox\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleRow(row)\"\n [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </td> }\n <!-- Data columns -->\n @for (column of visibleColumns; track column.field) {\n <td class=\"mat-mdc-cell\"\n [style.text-align]=\"getColumnTextAlignStyle(column)\"\n [style.width]=\"getColumnWidthStyle(column)\"\n [attr.style]=\"getColumnCellAttrStyle(column)\"\n [ngClass]=\"getCellClasses(row, column)\"\n [ngStyle]=\"getCellNgStyle(row, column)\"\n [matTooltip]=\"getCellTooltip(row, column) || ''\"\n [matTooltipPosition]=\"getCellTooltipPosition(row, column)\"\n [matTooltipDisabled]=\"!getCellTooltip(row, column)\"\n [attr.title]=\"getCellTooltip(row, column) || null\">\n <div\n class=\"pfx-cell-content\"\n [ngClass]=\"getCellContentClasses(row, column)\"\n [ngStyle]=\"getCellContentNgStyle(row, column)\"\n >\n @switch (getEffectiveRendererType(row, column)) {\n @case ('icon') {\n <span class=\"pfx-icon-renderer\"\n [style.color]=\"getIconColor(row, column) || null\"\n [ngStyle]=\"getIconStyle(row, column)\"\n [attr.aria-label]=\"getIconAriaLabel(row, column) || null\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-icon-renderer__content\"\n [nodes]=\"getIconRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </span>\n }\n @case ('image') {\n <span class=\"pfx-cell-image\">\n <praxis-rich-content\n rootClassName=\"pfx-cell-image__content\"\n [nodes]=\"getImageRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </span>\n }\n @case ('badge') {\n @if (shouldRenderBadge(row, column)) {\n <span class=\"pfx-badge\" [ngClass]=\"getBadgeClasses(row, column)\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-badge__content\"\n [nodes]=\"getBadgeRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </span>\n }\n }\n @case ('chip') {\n @if (shouldRenderChip(row, column)) {\n <span class=\"pfx-chip\" [ngClass]=\"getChipClasses(row, column)\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-chip__content\"\n [nodes]=\"getChipRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </span>\n }\n }\n @case ('progress') {\n <div class=\"pfx-progress\">\n <praxis-rich-content\n rootClassName=\"pfx-progress__content\"\n [context]=\"getProgressRichContentContext(row, column)\"\n [nodes]=\"getProgressRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </div>\n }\n @case ('microVisualization') {\n <span class=\"pfx-micro-viz-cell\" [innerHTML]=\"getMicroVisualizationHtml(row, column)\"></span>\n }\n @case ('avatar') {\n <span\n class=\"pfx-avatar-renderer\"\n [ngStyle]=\"getAvatarStyle(row, column)\"\n [class.shape-rounded]=\"getAvatarShape(row, column) === 'rounded'\"\n [class.shape-circle]=\"getAvatarShape(row, column) === 'circle'\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-avatar-renderer__content\"\n [nodes]=\"getAvatarRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </span>\n }\n @case ('link') {\n <a\n class=\"pfx-link\"\n [attr.href]=\"getLinkHref(row, column) || null\"\n [attr.target]=\"getLinkTarget(row, column) || null\"\n [attr.rel]=\"getLinkRel(row, column) || null\"\n (click)=\"$event.stopPropagation()\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-link__content\"\n [nodes]=\"getLinkRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </a>\n }\n @case ('button') {\n @switch (getButtonVariant(row, column)) {\n @case ('outlined') {\n <button\n mat-stroked-button\n [color]=\"getButtonColor(row, column) || null\"\n [disabled]=\"isButtonDisabled(row, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(row, column) || getButtonLabel(row, column)\"\n (click)=\"onButtonClick(row, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </button>\n }\n @case ('text') {\n <button\n mat-button\n [color]=\"getButtonColor(row, column) || null\"\n [disabled]=\"isButtonDisabled(row, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(row, column) || getButtonLabel(row, column)\"\n (click)=\"onButtonClick(row, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </button>\n }\n @default {\n <button\n mat-flat-button\n [color]=\"getButtonColor(row, column) || null\"\n [disabled]=\"isButtonDisabled(row, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(row, column) || getButtonLabel(row, column)\"\n (click)=\"onButtonClick(row, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </button>\n }\n }\n }\n @case ('menu') {\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"menuRef\"\n (click)=\"$event.stopPropagation()\"\n [attr.aria-label]=\"getMenuAriaLabel(row, column) || 'Menu'\"\n >\n <praxis-rich-content\n rootClassName=\"pfx-menu-trigger__content\"\n [nodes]=\"getMenuTriggerRichContentNodes()\"\n ></praxis-rich-content>\n </button>\n <mat-menu #menuRef=\"matMenu\">\n @for (it of getMenuItems(row, column); track it.id) {\n <button\n mat-menu-item\n (click)=\"onMenuItemClick(it, row, $event)\"\n [disabled]=\"!it.__visible\"\n >\n <praxis-rich-content\n rootClassName=\"pfx-menu-item__content\"\n [nodes]=\"getMenuItemRichContentNodes(it)\"\n ></praxis-rich-content>\n </button>\n }\n </mat-menu>\n }\n @default {\n {{ getCellValue(row, column) }}\n }\n }\n </div>\n </td>\n }\n\n <!-- Actions column -->\n @if (config.actions?.row?.enabled) {\n <td class=\"mat-mdc-cell praxis-actions-cell\" [class.dense]=\"dense\" [style.width]=\"getRowActionsWidthStyle()\">\n <div\n class=\"praxis-actions-cell__content\"\n [class.praxis-actions-cell__content--discovering]=\"isRowDiscoveryPending(row)\"\n [attr.aria-busy]=\"isRowDiscoveryPending(row) ? 'true' : null\"\n >\n @if (config.actions?.row?.display === 'icons' || !config.actions?.row?.display) {\n @for (a of getInlineRowActions(row); track trackAction($index, a)) {\n <span\n class=\"praxis-row-action-anchor\"\n [class.praxis-row-action-anchor--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-action-anchor--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [matTooltip]=\"getActionTooltip(a, row)\"\n [matTooltipDisabled]=\"!getActionTooltip(a, row)\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"praxis-tooltip\"\n >\n <button mat-icon-button class=\"praxis-icon-btn\"\n [class.praxis-icon-btn--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-icon-btn--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [disabled]=\"isActionDisabled(a, row)\"\n (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\"\n [attr.aria-label]=\"a.label || getActionId(a)\"\n [color]=\"a.color || null\">\n <praxis-rich-content\n layout=\"inline\"\n rootClassName=\"praxis-row-action__content\"\n [nodes]=\"getRowActionIconRichContentNodes(a)\"\n ></praxis-rich-content>\n </button>\n </span>\n }\n }\n @if (config.actions?.row?.display === 'buttons') {\n @for (a of getInlineRowActions(row); track trackAction($index, a)) {\n <span\n class=\"praxis-row-action-anchor\"\n [class.praxis-row-action-anchor--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-action-anchor--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [matTooltip]=\"getActionTooltip(a, row)\"\n [matTooltipDisabled]=\"!getActionTooltip(a, row)\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"praxis-tooltip\"\n >\n <button mat-flat-button class=\"praxis-row-btn\"\n [class.praxis-row-btn--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-btn--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [disabled]=\"isActionDisabled(a, row)\"\n (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\"\n [attr.aria-label]=\"a.label || getActionId(a)\"\n [color]=\"a.color || null\">\n <praxis-rich-content\n layout=\"inline\"\n rootClassName=\"praxis-row-action__content\"\n [nodes]=\"getRowActionRichContentNodes(a)\"\n ></praxis-rich-content>\n </button>\n </span>\n }\n }\n @if (hasOverflowRowActions(row)) {\n <button mat-icon-button class=\"praxis-icon-btn praxis-more-btn\"\n [matMenuTriggerFor]=\"rowMoreMenuV\"\n (menuOpened)=\"onRowOverflowMenuOpened(row)\"\n [color]=\"getRowMenuButtonColor() || null\"\n [attr.aria-label]=\"getRowMenuTooltip(row)\"\n [matTooltip]=\"getRowMenuTooltip(row)\"\n matTooltipPosition=\"above\">\n <mat-icon [praxisIcon]=\"getRowMenuIcon()\"></mat-icon>\n </button>\n }\n <mat-menu #rowMoreMenuV=\"matMenu\" xPosition=\"before\">\n @if (hasRowOverflowMenuLoadingState(row)) {\n <button mat-menu-item disabled>\n <mat-icon>hourglass_empty</mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(getRowOverflowMenuLoadingLabel(), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n @for (a of getOverflowRowActions(row); track trackAction($index, a)) {\n <button mat-menu-item (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\" [disabled]=\"isActionDisabled(a, row)\">\n <mat-icon [color]=\"a.color || null\" [praxisIcon]=\"a.icon\"></mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(a.label || getActionId(a), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n @if (hasRowOverflowMenuEmptyState(row)) {\n <button mat-menu-item disabled>\n <mat-icon>info</mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(getRowOverflowMenuEmptyLabel(row), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n </mat-menu>\n </div>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n }\n\n</div>\n@if (shouldShowLoadingSurface()) {\n <div class=\"ptable-loading-state\" role=\"status\" aria-live=\"polite\">\n <div class=\"ptable-loading-state__hero\" aria-hidden=\"true\">\n <span class=\"ptable-loading-state__line ptable-loading-state__line--wide\"></span>\n <span class=\"ptable-loading-state__line ptable-loading-state__line--short\"></span>\n <div class=\"ptable-loading-state__rows\">\n @for (placeholder of [1, 2, 3]; track placeholder) {\n <div class=\"ptable-loading-state__row\">\n <span class=\"ptable-loading-state__cell ptable-loading-state__cell--short\"></span>\n <span class=\"ptable-loading-state__cell\"></span>\n <span class=\"ptable-loading-state__cell ptable-loading-state__cell--wide\"></span>\n </div>\n }\n </div>\n </div>\n <div class=\"ptable-loading-state__message\">\n {{ getLoadingSurfaceMessage() }}\n </div>\n </div>\n}\n@if (shouldShowNoDataState()) {\n <div class=\"ptable-no-data-state\" role=\"status\" aria-live=\"polite\">\n <praxis-empty-state-card\n [icon]=\"getNoDataStateIcon()\"\n [title]=\"getNoDataStateTitle()\"\n [description]=\"getNoDataStateDescription()\"\n [primaryAction]=\"getNoDataStatePrimaryAction()\"\n [secondaryActions]=\"getNoDataStateSecondaryActions()\"\n [inline]=\"true\"\n [tone]=\"getNoDataStateTone()\"\n [variant]=\"getNoDataStateVariant()\"\n [alignment]=\"getNoDataStateAlignment()\"\n [density]=\"getNoDataStateDensity()\"\n [iconContainer]=\"getNoDataStateIconContainer()\"\n ></praxis-empty-state-card>\n </div>\n}\n@if (\n shouldRenderDataSurface()\n && !schemaError\n && !dataError\n && shouldRenderFloatingBulkActions()\n && getFloatingBulkActions().length\n && !shouldHideFloatingBulkActions()\n ) {\n <div [class]=\"'praxis-floating-bulk-actions ' + getFloatingBulkPositionClass()\">\n @for (action of getFloatingBulkActions(); track getActionId(action)) {\n <button\n mat-mini-fab\n [color]=\"action.color || 'primary'\"\n [disabled]=\"isFloatingBulkActionDisabled(action)\"\n (click)=\"onToolbarAction({ action: getActionId(action), actionConfig: action })\"\n [attr.aria-label]=\"action.label || getActionId(action)\"\n [matTooltip]=\"action.label || getActionId(action)\"\n matTooltipPosition=\"left\"\n >\n <praxis-rich-content\n rootClassName=\"praxis-floating-bulk-actions__content\"\n [nodes]=\"getFloatingBulkActionRichContentNodes(action)\"\n ></praxis-rich-content>\n </button>\n }\n </div>\n}\n<!-- Barra de a\u00C3\u00A7\u00C3\u00B5es no rodap\u00C3\u00A9 (opcional) -->\n@if (shouldRenderDataSurface() && !schemaError && !dataError && showToolbar && shouldRenderFooterToolbar()) {\n <praxis-table-toolbar\n [config]=\"config\"\n [backgroundColor]=\"getToolbarActionsBackgroundColor()\"\n [style.--pfx-filter-h]=\"getToolbarLayoutHeightHostStyle()\"\n [class.footer-flat]=\"hasBottomPaginator()\"\n class=\"praxis-toolbar-footer\"\n placement=\"footer\"\n [showMain]=\"shouldShowFooterToolbarMain()\"\n [showEndActions]=\"shouldShowFooterToolbarEndActions()\"\n [showActionsGroup]=\"shouldShowToolbarActionsBottom()\"\n [showMobileActions]=\"shouldShowToolbarActionsBottom()\"\n [evaluationContext]=\"getToolbarEvaluationContext()\"\n [columnVisibilityController]=\"toolbarColumnVisibilityController\"\n [exportBusy]=\"exportBusy\"\n (toolbarAction)=\"onToolbarAction($event)\"\n (exportAction)=\"onExportAction($event)\"\n >\n @if (shouldShowFooterToolbarMain() && shouldRenderAdvancedFilter()) {\n <praxis-filter\n advancedFilter\n [resourcePath]=\"getAdvancedFilterResourcePath()\"\n [filterId]=\"tableId\"\n [formId]=\"tableId\"\n [persistenceKey]=\"getAdvancedFilterPersistenceKey()\"\n [fieldMetadata]=\"getAdvancedFilterFieldMetadata()\"\n [enableCustomization]=\"enableCustomization\"\n [value]=\"advancedFilterValue\"\n [alwaysVisibleFields]=\"getAdvancedFilterAlwaysVisibleFields()\"\n [alwaysVisibleFieldMetadataOverrides]=\"getAdvancedFilterAlwaysVisibleFieldMetadataOverrides()\"\n [selectedFieldIds]=\"config.behavior?.filtering?.advancedFilters?.settings?.selectedFieldIds ?? []\"\n [allowSaveTags]=\"config.behavior?.filtering?.advancedFilters?.settings?.allowSaveTags\"\n [changeDebounceMs]=\"config.behavior?.filtering?.advancedFilters?.settings?.changeDebounceMs ?? 300\"\n [i18n]=\"getFilterI18n()\"\n [mode]=\"'filter'\"\n [showFilterSettings]=\"enableCustomization\"\n (change)=\"onAdvancedFilterChange($event)\"\n (requestSearch)=\"onAdvancedFilterSubmit($event)\"\n (clear)=\"onAdvancedFilterClear()\"\n ></praxis-filter>\n }\n @if (shouldShowFooterToolbarMain() && shouldRenderAdvancedFilter()) {\n <ng-content select=\"[advancedFilter]\"></ng-content>\n }\n @if (shouldShowFooterToolbarMain() && shouldRenderAdvancedFilter()) {\n <ng-content select=\"[toolbar]\"></ng-content>\n }\n @if (shouldShowFooterToolbarMain() && shouldRenderAdvancedFilter()) {\n @if (shouldShowAiAssistantEntrypoint()) {\n <button\n end-actions\n mat-icon-button\n color=\"primary\"\n type=\"button\"\n class=\"praxis-table-ai-trigger praxis-table-toolbar-action--ai\"\n [class.praxis-table-ai-trigger--minimized]=\"hasMinimizedAiAssistantSession()\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('footer')\"\n (click)=\"openAiAssistant()\"\n [attr.aria-label]=\"aiAssistantTriggerLabel()\"\n [matBadge]=\"aiAssistantTriggerBadge()\"\n [matBadgeHidden]=\"!hasMinimizedAiAssistantSession()\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"aiAssistantTriggerTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>{{ aiAssistantTriggerIcon() }}</mat-icon>\n </button>\n }\n }\n @if (shouldShowFooterToolbarMain() && shouldRenderAdvancedFilter() && enableCustomization) {\n <button\n end-actions\n mat-icon-button\n color=\"primary\"\n data-role=\"table-settings\"\n class=\"praxis-table-toolbar-action--configuration\"\n data-testid=\"table-settings-trigger\"\n (click)=\"openTableSettings()\"\n [attr.aria-label]=\"getTableSettingsLabel()\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"getTableSettingsTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>settings</mat-icon>\n </button>\n }\n </praxis-table-toolbar>\n}\n@if (shouldRenderDataSurface() && !schemaError && !dataError && getPaginationEnabled() && (config.behavior?.pagination?.position === 'bottom' || config.behavior?.pagination?.position === 'both' || !config.behavior?.pagination?.position)) {\n <mat-paginator\n [length]=\"getPaginationLength()\"\n [pageSize]=\"getPaginationPageSize()\"\n [pageSizeOptions]=\"getPaginationPageSizeOptions()\"\n [selectConfig]=\"paginatorSelectConfig\"\n [showFirstLastButtons]=\"getPaginationShowFirstLast()\"\n (page)=\"onPageChange($event)\"\n [class.compact]=\"config.behavior?.pagination?.style === 'compact'\"\n [class.footer-stack]=\"shouldShowToolbarActionsBottom()\"\n >\n </mat-paginator>\n}\n", styles: ["@charset \"UTF-8\";table{width:100%}.praxis-visually-hidden-status{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.praxis-column-reorder-status{margin:8px 0;padding:10px 12px;border-radius:8px;border:1px solid var(--p-table-border-color);background:var(--p-table-row-hover-bg);color:var(--p-table-header-fg);font-size:12px;line-height:1.4;box-shadow:0 4px 12px #00000014;animation:pfx-column-reorder-status-in var(--p-table-drag-status-enter-duration, .18s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1))}@keyframes pfx-column-reorder-status-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.praxis-actions-cell{height:100%;padding-inline:12px;white-space:nowrap}.pfx-expansion-col-header,.pfx-expansion-col-cell{width:52px;min-width:52px;text-align:center}.pfx-expansion-toggle:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.pfx-expansion-detail-row{background:var(--md-sys-color-surface-container-low)}.pfx-expansion-detail-cell{padding:0!important;border-bottom:1px solid var(--p-table-border-color)}.pfx-expansion-detail-panel{padding:12px 16px;border-left:3px solid var(--md-sys-color-primary)}.pfx-expansion-detail-panel.pfx-expansion-motion-none{animation:none;transition:none}.pfx-expansion-detail-panel.pfx-expansion-motion-subtle-slide{animation:pfx-expansion-subtle-slide-in var(--pfx-expansion-motion-duration, .16s) var(--pfx-expansion-motion-easing, cubic-bezier(.2, 0, 0, 1))}.pfx-expansion-detail-panel.pfx-expansion-motion-accordion{animation:pfx-expansion-accordion-in var(--pfx-expansion-motion-duration, .18s) var(--pfx-expansion-motion-easing, cubic-bezier(.2, 0, 0, 1));transform-origin:top center}.pfx-expansion-detail-panel.pfx-expansion-motion-fade-scale{animation:pfx-expansion-fade-scale-in var(--pfx-expansion-motion-duration, .16s) var(--pfx-expansion-motion-easing, cubic-bezier(.2, 0, 0, 1));transform-origin:top center}@keyframes pfx-expansion-subtle-slide-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes pfx-expansion-accordion-in{0%{opacity:0;transform:scaleY(.96)}to{opacity:1;transform:scaleY(1)}}@keyframes pfx-expansion-fade-scale-in{0%{opacity:0;transform:translateY(-2px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}.pfx-expansion-detail-schema{margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:12px;line-height:1.4;white-space:pre-wrap;word-break:break-word;color:var(--md-sys-color-on-surface-variant)}.pfx-expansion-detail-message{font-size:13px;color:var(--md-sys-color-on-surface-variant)}.pfx-expansion-detail-message--error{color:var(--md-sys-color-error)}.pfx-expansion-detail-stack{display:grid;gap:10px}.pfx-expansion-detail-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}.pfx-expansion-detail-tab-btn{border:1px solid var(--p-table-border-color);background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);border-radius:999px;padding:6px 12px;font-size:12px;line-height:1.2;cursor:pointer}.pfx-expansion-detail-tab-btn__content{display:inline-flex;align-items:center;gap:6px;min-width:0}.pfx-expansion-detail-tab-btn__icon .prx-rich-icon{font-size:16px;line-height:1}.pfx-expansion-detail-tab-btn__title{white-space:nowrap}.pfx-expansion-detail-tab-btn__badge .prx-rich-badge{padding:0 8px;min-height:18px;background:color-mix(in srgb,currentColor 12%,transparent);color:inherit}.pfx-expansion-detail-tab-btn.is-active{border-color:var(--md-sys-color-primary);color:var(--md-sys-color-primary);font-weight:600}.pfx-expansion-detail-tab-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.pfx-expansion-detail-tab-panel{display:grid;gap:10px}.pfx-expansion-node{border:1px solid var(--p-table-border-color);border-radius:8px;padding:10px 12px;background:var(--md-sys-color-surface)}.pfx-expansion-node-card__header{margin-bottom:8px}.pfx-expansion-node-card__title{margin:0;font-size:14px;line-height:1.3}.pfx-expansion-node-card__subtitle{margin:4px 0 0;font-size:12px;color:var(--md-sys-color-on-surface-variant)}.pfx-expansion-node-card__content{display:grid;gap:10px}.pfx-expansion-node-value{display:flex;align-items:baseline;gap:8px}.pfx-expansion-node-value__label{color:var(--md-sys-color-on-surface-variant);font-size:12px}.pfx-expansion-node-value__content{font-size:14px}.pfx-expansion-node-list__title{margin:0 0 6px;font-size:13px}.pfx-expansion-node-list ul{margin:0;padding-left:18px}.pfx-expansion-node-rich-list__title{margin:0 0 8px;font-size:13px}.pfx-expansion-node-rich-list__items{display:grid;gap:12px}.pfx-expansion-node-rich-list__item{display:grid;gap:10px;padding:12px;border:1px solid var(--md-sys-color-outline-variant, #d7dbe5);border-radius:14px;background:var(--md-sys-color-surface-container-lowest, #fff)}.pfx-expansion-node-rich-list__item--row{grid-template-columns:minmax(0,1fr) auto;align-items:center}.pfx-expansion-node-rich-list__item--stack{grid-template-columns:minmax(0,1fr)}.pfx-expansion-node-rich-list__item--card-list{grid-template-columns:minmax(0,1fr);box-shadow:0 4px 14px #0f172a0a}.pfx-expansion-node-rich-list__item-host{min-width:0}.pfx-expansion-node-rich-list__item-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.pfx-expansion-node-rich-list__item-action-btn{min-width:0}.pfx-expansion-node-rich-list__item-action-host{display:inline-flex;align-items:center}.pfx-expansion-node-action-bar__title{margin:0 0 12px}.pfx-expansion-node-action-bar__actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.pfx-expansion-node-action-bar__action-btn{min-width:0}.pfx-expansion-node-action-bar__action-host{display:inline-flex;align-items:center}.pfx-expansion-node-card-grid__header{margin:0 0 12px}.pfx-expansion-node-card-grid__cards{display:grid;gap:12px;grid-template-columns:var(--pfx-expansion-card-grid-columns, repeat(auto-fit, minmax(var(--pfx-expansion-card-grid-min-width, 220px), 1fr)))}.pfx-expansion-node-card-grid__card-host{min-width:0}.pfx-expansion-node-card-grid__card-host [data-rich-node-type=card]{height:100%}.pfx-expansion-node-richtext :where(p,ul,ol,h1,h2,h3,h4,h5,h6){margin-top:0;margin-bottom:8px}.pfx-expansion-node-placeholder{font-size:12px;color:var(--md-sys-color-on-surface-variant)}:host.density-compact{--p-table-header-height-default: 32px;--p-table-row-height-default: 30px;--p-header-padding-default: 4px 8px;--p-cell-padding-default: 3px 8px;--p-header-font-size-default: 11.5px;--p-cell-font-size-default: 12px;--p-actions-btn-size-default: 28px;--p-actions-icon-size-default: 15px;--p-actions-more-btn-size-default: 28px;--p-actions-more-icon-size-default: 15px;--p-table-paginator-container-min-height-default: 32px;--p-table-paginator-container-padding-default: 2px 8px;--p-table-paginator-container-gap-default: 6px;--p-table-paginator-select-width-default: 64px;--p-table-paginator-select-height-default: 28px;--p-table-paginator-select-padding-inline-default: 8px 6px;--p-table-paginator-action-size-default: 28px}:host.density-comfortable{--p-table-header-height-default: 40px;--p-table-row-height-default: 44px;--p-header-padding-default: 10px 14px;--p-cell-padding-default: 10px 14px;--p-header-font-size-default: inherit;--p-cell-font-size-default: inherit;--p-actions-btn-size-default: 36px;--p-actions-icon-size-default: 18px;--p-actions-more-btn-size-default: 36px;--p-actions-more-icon-size-default: 18px;--p-table-paginator-container-min-height-default: 44px;--p-table-paginator-container-padding-default: 6px 10px;--p-table-paginator-container-gap-default: 10px;--p-table-paginator-select-width-default: 78px;--p-table-paginator-select-height-default: 36px;--p-table-paginator-select-padding-inline-default: 12px 10px;--p-table-paginator-action-size-default: 36px}:host.density-spacious{--p-table-header-height-default: 52px;--p-table-row-height-default: 56px;--p-header-padding-default: 16px 20px;--p-cell-padding-default: 16px 20px;--p-header-font-size-default: inherit;--p-cell-font-size-default: inherit;--p-actions-btn-size-default: 44px;--p-actions-icon-size-default: 24px;--p-actions-more-btn-size-default: 44px;--p-actions-more-icon-size-default: 24px;--p-table-paginator-container-min-height-default: 52px;--p-table-paginator-container-padding-default: 8px 14px;--p-table-paginator-container-gap-default: 12px;--p-table-paginator-select-width-default: 86px;--p-table-paginator-select-height-default: 40px;--p-table-paginator-select-padding-inline-default: 14px 12px;--p-table-paginator-action-size-default: 40px}@media(pointer:coarse){:host.density-compact{--p-table-row-height-default: 44px;--p-table-header-height-default: 44px;--p-table-paginator-container-min-height-default: 44px;--p-table-paginator-action-size-default: 40px}}:host.density-compact .praxis-actions-cell{padding-inline:8px}:host.density-spacious .praxis-actions-cell{padding-inline:16px}.praxis-actions-cell__content{display:flex;align-items:center;justify-content:flex-end;gap:6px;width:100%;transition:opacity .12s ease}.praxis-actions-cell.dense .praxis-actions-cell__content{gap:6px}.praxis-actions-cell__content--discovering{opacity:.78}.praxis-row-action-anchor{display:inline-flex;align-items:center}.praxis-row-action-anchor--workflow{position:relative}.praxis-row-action-anchor--workflow:after{content:\"\";position:absolute;right:4px;top:4px;width:6px;height:6px;border-radius:999px;background:var(--md-sys-color-secondary);opacity:.9;pointer-events:none}.praxis-row-action-anchor--blocked:after{background:var(--md-sys-color-error)}.praxis-icon-btn{width:var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px));height:var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px));border:0;background:transparent;padding:0;display:inline-flex;align-items:center;justify-content:center;border-radius:9999px;cursor:pointer;--mat-icon-button-state-layer-size: var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px))}.praxis-icon-btn:hover{background:var(--md-sys-color-surface-variant)}.praxis-icon-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.praxis-icon-btn mat-icon,.praxis-icon-btn .mat-icon{font-size:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));width:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));line-height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))}.praxis-icon-btn praxis-rich-content{display:inline-flex;align-items:center;justify-content:center;width:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));line-height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))}:host ::ng-deep .praxis-icon-btn .praxis-row-action__content,:host ::ng-deep .praxis-icon-btn .praxis-row-action__icon{display:inline-flex;align-items:center;justify-content:center;width:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));line-height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))}:host ::ng-deep .praxis-icon-btn .praxis-row-action__icon .prx-rich-icon{font-size:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));width:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));line-height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))}.praxis-icon-btn--workflow{background:color-mix(in srgb,var(--md-sys-color-secondary-container) 36%,transparent)}.praxis-icon-btn--blocked{background:color-mix(in srgb,var(--md-sys-color-error-container) 42%,transparent)}.praxis-more-btn{width:var(--p-actions-more-btn-size, var(--p-actions-more-btn-size-default, var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px))));height:var(--p-actions-more-btn-size, var(--p-actions-more-btn-size-default, var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px))));--mat-icon-button-state-layer-size: var(--p-actions-more-btn-size, var(--p-actions-more-btn-size-default, var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px))));background-image:var(--p-actions-more-btn-gradient, none);background-size:100% 100%;background-repeat:no-repeat}.praxis-more-btn mat-icon,.praxis-more-btn .mat-icon{font-size:var(--p-actions-more-icon-size, var(--p-actions-more-icon-size-default, var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))));width:var(--p-actions-more-icon-size, var(--p-actions-more-icon-size-default, var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))));height:var(--p-actions-more-icon-size, var(--p-actions-more-icon-size-default, var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))));line-height:var(--p-actions-more-icon-size, var(--p-actions-more-icon-size-default, var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))));color:var(--p-actions-more-icon-color);background-image:var(--p-actions-more-icon-gradient, none);-webkit-background-clip:text;background-clip:text}.praxis-row-btn--workflow{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--md-sys-color-secondary) 28%,transparent)}.praxis-row-btn--blocked{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--md-sys-color-error) 28%,transparent)}.praxis-icon-btn.destructive mat-icon{color:var(--md-sys-color-error)}.mat-mdc-tooltip.praxis-tooltip{margin-top:-8px;margin-bottom:8px}.spacer{flex:1 1 auto}.praxis-table-header{display:flex;flex-wrap:wrap;align-items:flex-start;gap:6px;margin:10px 0 8px;width:100%;clear:both;position:relative}.praxis-table-header.stacked{margin:0}.praxis-table-header>praxis-table-toolbar{flex:1 0 100%}.praxis-floating-bulk-actions{position:fixed;z-index:var(--praxis-layer-floating-local, 200);display:inline-flex;align-items:center;gap:8px;padding:8px;border-radius:999px;background:var(--md-sys-color-surface-container-highest);box-shadow:0 8px 20px #00000029}.praxis-floating-bulk-actions.pos-bottom-right{right:20px;bottom:20px}.praxis-floating-bulk-actions.pos-bottom-left{left:20px;bottom:20px}.praxis-floating-bulk-actions.pos-top-right{right:20px;top:20px}.praxis-floating-bulk-actions.pos-top-left{left:20px;top:20px}@media(max-width:768px){.praxis-floating-bulk-actions{gap:6px;padding:6px}.praxis-floating-bulk-actions.pos-bottom-right{right:12px;left:auto;bottom:12px}.praxis-floating-bulk-actions.pos-bottom-left{left:12px;right:auto;bottom:12px}.praxis-floating-bulk-actions.pos-top-right{right:12px;left:auto;top:12px}.praxis-floating-bulk-actions.pos-top-left{left:12px;right:auto;top:12px}}:host{display:block;width:100%;min-width:0;max-width:100%;--pfx-toolbar-pad-y: 6px;--pfx-toolbar-pad-x: 12px;--p-table-bg: var(--md-sys-color-surface-container-highest);--p-table-text-color: var(--md-sys-color-on-surface);--p-table-header-bg: var(--md-sys-color-surface-container-highest);--p-table-header-fg: var(--md-sys-color-on-surface);--p-table-border-color: var(--md-sys-color-outline-variant);--p-table-row-even-bg: var(--md-sys-color-surface-container);--p-table-row-hover-bg: var(--md-sys-color-surface-container-high);--p-table-row-selected-bg: var(--md-sys-color-primary-container);--p-table-row-selected-fg: var(--md-sys-color-on-primary-container);--p-table-row-selected-font-weight: 600;--p-table-row-selected-indicator: linear-gradient( 180deg, var(--md-sys-color-primary), var(--md-sys-color-secondary) );--p-table-badge-soft-primary-bg: var(--md-sys-color-primary-container);--p-table-badge-soft-primary-fg: var(--md-sys-color-on-primary-container);--p-table-badge-soft-accent-bg: var(--md-sys-color-secondary-container);--p-table-badge-soft-accent-fg: var(--md-sys-color-on-secondary-container);--p-table-badge-soft-warn-bg: var(--md-sys-color-error-container);--p-table-badge-soft-warn-fg: var(--md-sys-color-on-error-container);--p-table-state-success-bg: var(--md-sys-color-tertiary-container);--p-table-state-success-fg: var(--md-sys-color-on-tertiary-container);--p-table-state-warning-bg: var(--md-sys-color-secondary-container);--p-table-state-warning-fg: var(--md-sys-color-on-secondary-container);--p-table-state-danger-bg: var(--md-sys-color-error-container);--p-table-state-danger-fg: var(--md-sys-color-on-error-container);--p-table-state-highlight-bg: var(--md-sys-color-primary-container);--p-table-state-highlight-fg: var(--md-sys-color-on-primary-container);--p-table-reorder-transition-duration: .16s;--p-table-drag-preview-scale: 1.01;--p-table-drag-status-enter-duration: .18s;--p-table-drag-preview-shadow: 0 14px 32px rgba(0, 0, 0, .28), 0 0 0 1px var(--p-table-border-color);--p-table-column-resize-hit-area: 10px;--p-table-column-resize-line-width: 1px;--p-table-column-resize-separator-color: color-mix( in srgb, var(--p-table-border-color) 78%, transparent );--p-table-column-resize-separator-hover-color: var(--md-sys-color-primary);--p-table-column-resize-active-color: var(--md-sys-color-primary)}:host ::ng-deep .mat-mdc-table{background:var(--p-table-bg);color:var(--p-table-text-color);border-radius:12px 12px 0 0;width:100%;box-shadow:var(--p-table-surface-shadow);transition:box-shadow var(--p-table-selection-transition-duration, .18s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1))}:host ::ng-deep .mat-mdc-table:hover{box-shadow:var(--p-table-surface-shadow-hover, var(--p-table-surface-shadow))}:host ::ng-deep .mat-mdc-table.pfx-column-resize-enabled{table-layout:fixed}:host ::ng-deep .mat-mdc-table.table-stack-top{border-top-left-radius:0;border-top-right-radius:0}:host ::ng-deep .praxis-toolbar-footer{border:0 solid var(--p-table-border-color);border-top:0;border-radius:0;background:var(--p-table-bg)}:host ::ng-deep .mat-mdc-paginator.footer-stack{border-top-left-radius:0;border-top-right-radius:0;border-top:0}:host ::ng-deep .mat-mdc-paginator.footer-stack .mat-mdc-paginator-container{padding:var(--p-table-paginator-footer-stack-padding, 6px 10px)}:host ::ng-deep .mat-mdc-paginator{--p-table-paginator-bg-default: color-mix( in srgb, var(--p-table-bg) 94%, var(--md-sys-color-surface, white) 6% );--p-table-paginator-border-color-default: color-mix(in srgb, var(--p-table-border-color) 82%, transparent);--p-table-paginator-select-bg-default: color-mix(in srgb, var(--p-table-bg) 88%, var(--p-table-text-color) 12%);--p-table-paginator-select-border-color-default: color-mix( in srgb, var(--p-table-border-color) 74%, transparent );--p-table-paginator-select-border-color-hover-default: color-mix( in srgb, var(--md-sys-color-primary) 36%, var(--p-table-border-color) );--p-table-paginator-select-border-color-focus-default: color-mix( in srgb, var(--md-sys-color-primary) 72%, var(--p-table-border-color) );--p-table-paginator-select-focus-ring-default: color-mix(in srgb, var(--md-sys-color-primary) 18%, transparent);--p-table-paginator-select-radius-default: 999px;--p-table-paginator-select-shadow-default: inset 0 1px 0 color-mix(in srgb, var(--md-sys-color-on-surface) 8%, transparent);--p-table-paginator-select-text-color-default: var(--p-table-text-color);--p-table-paginator-select-icon-color-default: color-mix(in srgb, var(--p-table-text-color) 72%, transparent);--p-table-paginator-range-text-color-default: color-mix(in srgb, var(--p-table-text-color) 78%, transparent);border-top:1px solid var(--p-table-paginator-border-color, var(--p-table-paginator-border-color-default));background:var(--p-table-paginator-bg, var(--p-table-paginator-bg-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-container{min-height:var(--p-table-paginator-container-min-height, var(--p-table-paginator-container-min-height-default, 44px));padding:var(--p-table-paginator-container-padding, var(--p-table-paginator-container-padding-default, 6px 10px));gap:var(--p-table-paginator-container-gap, var(--p-table-paginator-container-gap-default, 10px))}:host ::ng-deep .mat-mdc-paginator.compact{--p-table-paginator-container-min-height-default: 30px;--p-table-paginator-container-padding-default: 2px 8px;--p-table-paginator-container-gap-default: 6px;--p-table-paginator-select-width-default: 62px;--p-table-paginator-select-height-default: 28px;--p-table-paginator-select-padding-inline-default: 8px 6px;--p-table-paginator-action-size-default: 28px}:host ::ng-deep .mat-mdc-paginator .mat-mdc-icon-button{width:var(--p-table-paginator-action-size, var(--p-table-paginator-action-size-default, 36px));height:var(--p-table-paginator-action-size, var(--p-table-paginator-action-size-default, 36px));display:inline-grid;place-items:center;padding:0;line-height:0;--mdc-icon-button-state-layer-size: var(--p-table-paginator-action-size, var(--p-table-paginator-action-size-default, 36px));--mat-icon-button-state-layer-size: var(--p-table-paginator-action-size, var(--p-table-paginator-action-size-default, 36px))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-icon{display:block;flex:0 0 auto;margin:0}.praxis-table-ai-trigger{transition:background-color .16s ease,box-shadow .16s ease,color .16s ease}.praxis-table-ai-trigger--minimized{background:color-mix(in srgb,var(--md-sys-color-primary-container, rgba(59, 130, 246, .22)) 72%,transparent);color:var(--md-sys-color-on-primary-container, var(--md-sys-color-primary, #2563eb));box-shadow:0 0 0 1px color-mix(in srgb,var(--md-sys-color-primary, #2563eb) 34%,transparent),0 8px 20px color-mix(in srgb,var(--md-sys-color-primary, #2563eb) 16%,transparent)}.praxis-table-ai-trigger--minimized:hover,.praxis-table-ai-trigger--minimized:focus-visible{background:color-mix(in srgb,var(--md-sys-color-primary-container, rgba(59, 130, 246, .22)) 86%,transparent)}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select{margin-left:4px;width:var(--p-table-paginator-select-width, var(--p-table-paginator-select-width-default, 78px))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-text-field-wrapper{--mdc-outlined-text-field-container-color: var( --p-table-paginator-select-bg, var(--p-table-paginator-select-bg-default) );--mdc-outlined-text-field-input-text-color: var( --p-table-paginator-select-text-color, var(--p-table-paginator-select-text-color-default) );min-height:var(--p-table-paginator-select-height, var(--p-table-paginator-select-height-default, 36px));height:var(--p-table-paginator-select-height, var(--p-table-paginator-select-height-default, 36px));padding-inline:var(--p-table-paginator-select-padding-inline, var(--p-table-paginator-select-padding-inline-default, 12px 10px));border:1px solid var(--p-table-paginator-select-border-color, var(--p-table-paginator-select-border-color-default));border-radius:var(--p-table-paginator-select-radius, var(--p-table-paginator-select-radius-default));background:var(--p-table-paginator-select-bg, var(--p-table-paginator-select-bg-default))!important;background-color:var(--p-table-paginator-select-bg, var(--p-table-paginator-select-bg-default))!important;color:var(--p-table-paginator-select-text-color, var(--p-table-paginator-select-text-color-default))!important;box-shadow:var(--p-table-paginator-select-shadow, var(--p-table-paginator-select-shadow-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-text-field-wrapper:hover{border-color:var(--p-table-paginator-select-border-color-hover, var(--p-table-paginator-select-border-color-hover-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select.mat-focused .mat-mdc-text-field-wrapper{border-color:var(--p-table-paginator-select-border-color-focus, var(--p-table-paginator-select-border-color-focus-default));box-shadow:0 0 0 3px var(--p-table-paginator-select-focus-ring, var(--p-table-paginator-select-focus-ring-default)),var(--p-table-paginator-select-shadow, var(--p-table-paginator-select-shadow-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-form-field-flex{min-height:var(--p-table-paginator-select-height, var(--p-table-paginator-select-height-default, 36px));align-items:center}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-form-field-infix{display:flex;align-items:center;min-height:var(--p-table-paginator-select-height, var(--p-table-paginator-select-height-default, 36px));padding-block:0;width:auto}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-select-trigger{min-height:var(--p-table-paginator-select-height, var(--p-table-paginator-select-height-default, 36px));padding-right:2px;color:var(--p-table-paginator-select-text-color, var(--p-table-paginator-select-text-color-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-select-arrow{color:var(--p-table-paginator-select-icon-color, var(--p-table-paginator-select-icon-color-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mdc-notched-outline__leading,:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mdc-notched-outline__notch,:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mdc-notched-outline__trailing{border-color:transparent!important;border-width:0!important}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-range-label{font-size:12px;font-weight:600;color:var(--p-table-paginator-range-text-color, var(--p-table-paginator-range-text-color-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-select-value-text{font-size:12px;font-weight:700;color:var(--p-table-paginator-select-text-color, var(--p-table-paginator-select-text-color-default))}::ng-deep .praxis-table-paginator-select-panel.mat-mdc-select-panel{--mat-select-panel-background-color: var(--md-sys-color-surface-container, #fff);background:var(--md-sys-color-surface-container, #fff)!important;background-color:var(--md-sys-color-surface-container, #fff)!important;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #d7dbe5) 70%,transparent);box-shadow:0 12px 28px color-mix(in srgb,var(--md-sys-color-shadow, #000) 28%,transparent)}::ng-deep .praxis-table-paginator-select-panel .mat-mdc-option{--mat-option-label-text-color: var(--md-sys-color-on-surface, #111827);color:var(--md-sys-color-on-surface, #111827)!important}::ng-deep .praxis-table-paginator-select-panel .mat-mdc-option:hover:not(.mdc-list-item--disabled),::ng-deep .praxis-table-paginator-select-panel .mat-mdc-option.mat-mdc-option-active{--mat-option-hover-state-layer-color: color-mix( in srgb, var(--md-sys-color-primary, #2f7cff) 14%, transparent );background:color-mix(in srgb,var(--md-sys-color-primary, #2f7cff) 14%,transparent)!important;color:var(--md-sys-color-on-surface, #111827)!important}:host [data-role=table-settings].mat-mdc-icon-button{--mdc-icon-button-icon-color: var(--md-sys-color-primary);color:var(--md-sys-color-primary)}.pfx-link{color:var(--md-sys-color-primary);text-decoration:underline;cursor:pointer}.pfx-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:10px;font-size:12px;line-height:1;border:1px solid transparent;white-space:nowrap;--prx-rich-content-inline-gap: 6px}.pfx-chip-icon{font-size:14px;width:14px;height:14px}.pfx-chip--plain{background:transparent;border-color:transparent;color:var(--md-sys-color-on-surface)}.pfx-chip--outlined{background:transparent;border-color:var(--md-sys-color-outline-variant);color:var(--md-sys-color-on-surface)}.pfx-chip--filled-primary{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pfx-chip--filled-accent{background:var(--md-sys-color-secondary);color:var(--md-sys-color-on-secondary)}.pfx-chip--filled-warn,.pfx-chip--filled-danger{background:var(--md-sys-color-error);color:var(--md-sys-color-on-error)}.pfx-chip--filled-success{background:var(--p-table-state-success-bg);color:var(--p-table-state-success-fg)}.pfx-chip--filled-info{background:var(--md-sys-color-tertiary);color:var(--md-sys-color-on-tertiary)}.pfx-chip--filled-basic{background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface);border-color:var(--md-sys-color-outline-variant)}.pfx-chip--soft-primary{background:var(--p-table-badge-soft-primary-bg);color:var(--p-table-badge-soft-primary-fg)}.pfx-chip--soft-accent{background:var(--p-table-badge-soft-accent-bg);color:var(--p-table-badge-soft-accent-fg)}.pfx-chip--soft-warn{background:var(--p-table-badge-soft-warn-bg);color:var(--p-table-badge-soft-warn-fg)}.pfx-chip--soft-danger{background:color-mix(in srgb,var(--p-table-state-danger-bg) 72%,transparent);color:var(--p-table-state-danger-fg);border-color:color-mix(in srgb,var(--p-table-state-danger-fg) 18%,transparent)}.pfx-chip--soft-success{background:color-mix(in srgb,var(--p-table-state-success-bg) 72%,transparent);color:var(--p-table-state-success-fg);border-color:color-mix(in srgb,var(--p-table-state-success-fg) 18%,transparent)}.pfx-chip--soft-info{background:color-mix(in srgb,var(--md-sys-color-tertiary-container) 72%,transparent);color:var(--md-sys-color-on-tertiary-container);border-color:color-mix(in srgb,var(--md-sys-color-tertiary) 18%,transparent)}.pfx-chip--soft-basic{background:color-mix(in srgb,var(--md-sys-color-surface-container-highest) 82%,transparent);color:color-mix(in srgb,var(--md-sys-color-on-surface) 76%,transparent);border-color:color-mix(in srgb,var(--md-sys-color-outline-variant) 65%,transparent)}.pfx-progress{position:relative;width:100%;min-width:0;max-width:140px;display:inline-block;vertical-align:middle}.pfx-progress .pfx-progress__content{width:100%;min-width:0}.pfx-progress .prx-rich-progress{width:100%}.pfx-progress-bar{height:100%;background:var(--md-sys-color-primary);transition:width .2s ease}.pfx-progress-label{margin-left:8px;font-size:12px;opacity:.8;display:inline-block;vertical-align:middle}.pfx-micro-viz-cell{display:inline-block;width:min(100%,180px);min-width:112px;max-width:220px;vertical-align:middle}.pfx-micro-viz-cell .pfx-micro-viz{display:grid;gap:4px;width:100%;min-width:0;color:var(--md-sys-color-on-surface);font-size:12px;line-height:1.2}.pfx-micro-viz-cell .pfx-micro-viz__row{display:grid;grid-template-columns:minmax(42px,.8fr) minmax(52px,1fr) auto;align-items:center;gap:6px;min-width:0}.pfx-micro-viz-cell .pfx-micro-viz__label,.pfx-micro-viz-cell .pfx-micro-viz__value{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pfx-micro-viz-cell .pfx-micro-viz__track{position:relative;display:block;height:8px;min-width:0;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-outline-variant) 62%,transparent);overflow:hidden}.pfx-micro-viz-cell .pfx-micro-viz__bar,.pfx-micro-viz-cell .pfx-micro-viz__segment{display:block;height:100%;border-radius:inherit;background:var(--md-sys-color-primary)}.pfx-micro-viz-cell .pfx-micro-viz__row[data-tone=success] .pfx-micro-viz__bar,.pfx-micro-viz-cell .pfx-micro-viz__segment[data-tone=success],.pfx-micro-viz-cell .pfx-micro-viz[data-tone=success] .pfx-micro-viz__bar{background:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-viz-cell .pfx-micro-viz__row[data-tone=warning] .pfx-micro-viz__bar,.pfx-micro-viz-cell .pfx-micro-viz__segment[data-tone=warning],.pfx-micro-viz-cell .pfx-micro-viz[data-tone=warning] .pfx-micro-viz__bar{background:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-viz-cell .pfx-micro-viz__row[data-tone=danger] .pfx-micro-viz__bar,.pfx-micro-viz-cell .pfx-micro-viz__segment[data-tone=danger],.pfx-micro-viz-cell .pfx-micro-viz[data-tone=danger] .pfx-micro-viz__bar{background:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-viz-cell .pfx-micro-viz__segments{display:flex;width:100%;height:8px;overflow:hidden;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-outline-variant) 62%,transparent)}.pfx-micro-viz-cell .pfx-micro-viz__meta{display:flex;justify-content:space-between;gap:8px;min-width:0;color:color-mix(in srgb,var(--md-sys-color-on-surface) 72%,transparent)}.pfx-micro-viz-cell .pfx-micro-viz__bullet .pfx-micro-viz__target{position:absolute;top:-2px;bottom:-2px;width:2px;border-radius:999px;background:var(--md-sys-color-on-surface)}.pfx-micro-viz-cell .pfx-micro-viz__delta[data-tone=success]{color:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-viz-cell .pfx-micro-viz__delta[data-tone=warning]{color:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-viz-cell .pfx-micro-viz__delta[data-tone=danger]{color:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-viz-cell .pfx-micro-viz__fallback{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__radial,.pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__harvey,.pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__process{display:inline-flex}.pfx-micro-viz__radial{align-items:center;justify-content:center;position:relative}.pfx-micro-radial-svg{width:24px;height:24px;overflow:visible;flex-shrink:0;display:block}.pfx-micro-radial-svg__track{fill:none;stroke:var(--pfx-micro-track-color, var(--md-sys-color-surface-container-high, #e5e7eb));stroke-width:3}.pfx-micro-radial-svg__bar{fill:none;stroke:currentColor;stroke-width:3;stroke-linecap:round;transform:rotate(-90deg);transform-origin:50% 50%;transition:stroke-dasharray .35s ease}.pfx-micro-radial-svg__text{font-size:8px;font-weight:700;text-anchor:middle;fill:currentColor;font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif)}.pfx-micro-viz__harvey{align-items:center;gap:0}.pfx-micro-harvey-svg{width:18px;height:18px;overflow:visible;flex-shrink:0}.pfx-micro-harvey-svg__track{fill:none;stroke:var(--pfx-micro-track-color, var(--md-sys-color-surface-container-high, #e5e7eb));stroke-width:2}.pfx-micro-harvey-svg__bar{fill:none;stroke:currentColor;stroke-width:16;transform:rotate(-90deg);transform-origin:50% 50%;transition:stroke-dasharray .35s ease}.pfx-micro-harvey-fraction{display:inline-flex;align-items:center;font-size:11px;font-variant-numeric:tabular-nums;margin-left:6px;font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif)}.pfx-micro-harvey-fraction strong{color:currentColor;font-weight:700}.pfx-separator{opacity:.6;color:var(--md-sys-color-on-surface-variant, #4b5563);margin-inline:2px}.pfx-total{color:var(--md-sys-color-on-surface-variant, #4b5563)}.pfx-micro-viz__bullet{display:flex;flex-direction:column;gap:4px;width:100%}.pfx-micro-bullet__top{display:flex;justify-content:space-between;align-items:baseline;font-size:11px}.pfx-micro-bullet__label{color:var(--md-sys-color-on-surface-variant, #4b5563);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pfx-micro-bullet__value{font-weight:700;color:currentColor;font-variant-numeric:tabular-nums;flex-shrink:0}.pfx-micro-bullet__target-val{font-weight:400;font-size:10px;color:var(--md-sys-color-on-surface-variant, #4b5563);margin-left:4px}.pfx-micro-bullet__track{position:relative;display:block;overflow:hidden;border-radius:var(--pfx-micro-track-radius, 999px);background:var(--pfx-micro-track-color, var(--md-sys-color-surface-container-high, #e5e7eb));block-size:10px;width:100%}.pfx-micro-bullet__range{position:absolute;inset-block:0;display:block;block-size:100%;opacity:.32}.pfx-micro-bullet__range[data-tone=success]{background:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-bullet__range[data-tone=warning]{background:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-bullet__range[data-tone=danger],.pfx-micro-bullet__range[data-tone=critical]{background:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-bullet__range[data-tone=info]{background:var(--md-sys-color-primary, #2563eb)}.pfx-micro-bullet__actual{position:absolute;inset-block-start:3px;inset-inline-start:0;block-size:4px;border-radius:inherit}.pfx-micro-bullet__actual[data-tone=success]{background:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-bullet__actual[data-tone=warning]{background:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-bullet__actual[data-tone=danger],.pfx-micro-bullet__actual[data-tone=critical]{background:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-bullet__actual[data-tone=info]{background:var(--md-sys-color-primary, #2563eb)}.pfx-micro-bullet__target{position:absolute;inset-block:0;inline-size:2px;background:var(--md-sys-color-on-surface, #111827)}.pfx-micro-bullet__bottom{display:flex;justify-content:space-between;font-size:9px;color:var(--md-sys-color-on-surface-variant, #4b5563)}.pfx-micro-viz-container{display:flex;align-items:center;gap:8px;width:100%}.pfx-micro-trend__label-col{display:flex;flex-direction:column;justify-content:center;font-size:11px;line-height:1.2;flex-shrink:0;min-width:24px;font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif)}.pfx-micro-trend__label-col--start{align-items:flex-end;text-align:right}.pfx-micro-trend__label-col--end{align-items:flex-start;text-align:left}.pfx-micro-trend__value{font-weight:700;color:var(--md-sys-color-on-surface, #1f2937)}.pfx-micro-trend__label{color:var(--md-sys-color-on-surface-variant, #4b5563);font-size:9px}.pfx-micro-viz__line,.pfx-micro-viz__area,.pfx-micro-viz__column{display:block;width:100%;height:30px;overflow:visible;flex:1 1 auto}.pfx-micro-line__svg,.pfx-micro-area__svg,.pfx-micro-column__svg{width:100%;height:100%;display:block;overflow:visible}.pfx-micro-line__path,.pfx-micro-area__path{stroke:currentColor}.pfx-micro-area__fill{fill:currentColor}.pfx-micro-trend__marker{fill:currentColor;stroke:var(--md-sys-color-surface, #ffffff);stroke-width:1.5px}.pfx-micro-trend__marker[data-tone=success]{fill:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-trend__marker[data-tone=warning]{fill:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-trend__marker[data-tone=danger],.pfx-micro-trend__marker[data-tone=critical]{fill:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-trend__marker[data-tone=info]{fill:var(--md-sys-color-primary, #2563eb)}.pfx-micro-viz__process{align-items:center;width:100%;min-width:120px;padding-block:4px;overflow-x:auto;-webkit-overflow-scrolling:touch}.pfx-micro-step{display:flex;align-items:center;flex:1 1 0%;min-width:0}.pfx-micro-step[data-state=future]{opacity:.38}.pfx-micro-step[data-state=disabled]{opacity:.28;pointer-events:none}.pfx-micro-step__node-wrapper{display:flex;flex-direction:column;align-items:center;position:relative;flex-shrink:0}.pfx-micro-step__node{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;font-size:11px;font-weight:700;background:var(--md-sys-color-surface-container-high, #e5e7eb);color:var(--md-sys-color-on-surface, #1f2937);border:2px solid transparent;transition:all .2s ease}.pfx-micro-step__node[data-tone=success]{background:var(--p-table-state-success-fg, #168a4a);color:#fff}.pfx-micro-step__node[data-tone=warning]{background:var(--p-table-state-warning-fg, #b45f06);color:#fff}.pfx-micro-step__node[data-tone=danger],.pfx-micro-step__node[data-tone=critical]{background:var(--p-table-state-danger-fg, #b3261e);color:#fff}.pfx-micro-step__node[data-tone=info]{background:var(--md-sys-color-primary, #2563eb);color:#fff}.pfx-micro-step__icon{font-size:12px}.pfx-micro-step__label{font-size:9px;margin-top:4px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:72px;color:var(--md-sys-color-on-surface-variant, #4b5563)}.pfx-micro-step__connector{flex:1 1 auto;height:2px;background:var(--md-sys-color-surface-container-high, #e5e7eb);margin-inline:8px;min-width:16px}.pfx-micro-step__connector[data-tone=success]{background:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-step__connector[data-tone=warning]{background:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-step__connector[data-tone=danger],.pfx-micro-step__connector[data-tone=critical]{background:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-step__connector[data-tone=info]{background:var(--md-sys-color-primary, #2563eb)}.pfx-micro-viz[data-tone=success]{color:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-viz[data-tone=warning]{color:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-viz[data-tone=danger],.pfx-micro-viz[data-tone=critical]{color:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-viz[data-tone=info]{color:var(--md-sys-color-primary, #2563eb)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz[data-tone=success]{color:var(--p-table-state-success-fg, #168a4a)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz[data-tone=warning]{color:var(--p-table-state-warning-fg, #b45f06)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz[data-tone=critical]{color:var(--p-table-state-danger-fg, #b3261e)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz[data-tone=info]{color:var(--md-sys-color-primary, #2563eb)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__delta{display:inline-flex;align-items:center;justify-content:flex-end;gap:5px;width:auto;min-width:0;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz__delta-symbol{display:inline-grid;width:12px;min-width:12px;height:12px;min-height:12px;place-items:center;border-radius:0;background:transparent;font-size:11px;line-height:1;transform:translateY(-.5px)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__radial,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__harvey{display:inline-flex;align-items:center;justify-content:center;width:auto;min-width:0;height:auto;gap:8px}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__radial{justify-content:flex-start;gap:7px}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-radial-svg{display:block;width:24px;height:24px;overflow:visible;flex:0 0 auto}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-radial-svg__track{fill:none;stroke:var(--pfx-micro-track-color, var(--md-sys-color-surface-container-high, #e5e7eb));stroke-width:3.4}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-radial-svg__bar{fill:none;stroke:currentColor;stroke-width:3.4;stroke-linecap:round;transform:rotate(-90deg);transform-origin:50% 50%}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-radial-svg__text{font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif);font-size:8.5px;font-weight:700;text-anchor:middle;fill:currentColor}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-radial-value{color:currentColor;font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif);font-size:12px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1;white-space:nowrap}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-harvey-svg{display:block;width:26px;height:26px;overflow:visible;flex:0 0 auto}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-harvey-svg__track{fill:none;stroke:var(--pfx-micro-track-color, var(--md-sys-color-surface-container-high, #e5e7eb));stroke-width:2.4}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-harvey-svg__bar{fill:none;stroke:currentColor;stroke-width:16;transform:rotate(-90deg);transform-origin:50% 50%}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-harvey-fraction{display:inline-flex;align-items:center;font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif);font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-harvey-fraction strong{color:currentColor;font-weight:700}:host ::ng-deep .pfx-micro-viz-cell .pfx-separator{margin-inline:2px;color:var(--md-sys-color-on-surface-variant, #4b5563);opacity:.6}:host ::ng-deep .pfx-micro-viz-cell .pfx-total{color:var(--md-sys-color-on-surface-variant, #4b5563)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__process{display:inline-flex;align-items:center;justify-content:center;width:100%;min-width:112px;overflow:hidden}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz-container{display:flex;align-items:center;gap:8px;width:100%;min-width:0}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__line,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__area,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__column{display:block;flex:1 1 auto;width:100%;min-width:0;height:30px;overflow:visible}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-line__svg,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-area__svg,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__svg{display:block;width:100%;height:100%;overflow:visible}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-line__path,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-area__path{stroke:currentColor}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-area__fill{fill:currentColor}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker{fill:currentColor}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar[data-tone=success],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker[data-tone=success]{fill:var(--p-table-state-success-fg, #168a4a)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar[data-tone=warning],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker[data-tone=warning]{fill:var(--p-table-state-warning-fg, #b45f06)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar[data-tone=critical],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker[data-tone=critical]{fill:var(--p-table-state-danger-fg, #b3261e)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar[data-tone=info],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker[data-tone=info]{fill:var(--md-sys-color-primary, #2563eb)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step{display:flex;align-items:center;flex:0 1 auto;min-width:0}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node-wrapper{display:inline-flex;align-items:center;min-width:0}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;background:var(--md-sys-color-surface-container-high, #e5e7eb);color:var(--md-sys-color-on-surface, #1f2937);font-size:12px;font-weight:700;line-height:1;flex:0 0 auto}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__icon{font-size:15px;line-height:1}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__label{display:none}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector{flex:0 1 24px;min-width:12px;max-width:28px;height:2px;margin-inline:6px;background:var(--md-sys-color-surface-container-high, #e5e7eb)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=success],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector[data-tone=success]{background:var(--p-table-state-success-fg, #168a4a)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=warning],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector[data-tone=warning]{background:var(--p-table-state-warning-fg, #b45f06)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=critical],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector[data-tone=critical]{background:var(--p-table-state-danger-fg, #b3261e)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=info],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector[data-tone=info]{background:var(--md-sys-color-primary, #2563eb)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=success],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=warning],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=critical],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=info]{color:var(--md-sys-color-on-primary, #ffffff)}.pfx-avatar{display:inline-flex;align-items:center;justify-content:center;background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface);border-radius:4px;overflow:hidden;font-weight:600}.pfx-avatar.shape-rounded{border-radius:8px}.pfx-avatar.shape-circle{border-radius:999px}.pfx-avatar--initials{text-transform:uppercase;font-size:12px}.pfx-cell-compose{display:inline-flex;align-items:center;gap:6px}.pfx-cell-compose.dir-col{flex-direction:column;align-items:stretch}.pfx-cell-compose.align-start{justify-content:flex-start}.pfx-cell-compose.align-center{justify-content:center}.pfx-cell-compose.align-end{justify-content:flex-end}.pfx-cell-compose.wrap{flex-wrap:wrap}.pfx-cell-compose.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.px-scroll-viewport{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;background:var(--p-table-bg);border-radius:12px 12px 0 0}.px-scroll-viewport:has(.mat-mdc-table.table-stack-top){border-top-left-radius:0;border-top-right-radius:0}.px-scroll-viewport.scroll-none{overflow-x:visible}.px-scroll-viewport.scroll-auto ::ng-deep .mat-mdc-table{width:max-content;min-width:100%}.px-scroll-viewport.scroll-wrap ::ng-deep .mat-mdc-header-cell,.px-scroll-viewport.scroll-wrap ::ng-deep .mat-mdc-cell{white-space:normal;text-overflow:initial}.px-scroll-viewport.scroll-wrap ::ng-deep .mat-mdc-table{width:100%}:host ::ng-deep .mat-mdc-header-row{position:sticky;top:0;z-index:var(--praxis-layer-sticky-local, 100);height:var(--p-table-header-height, var(--p-table-header-height-default, var(--mat-table-header-container-height, 40px)));min-height:var(--p-table-header-height, var(--p-table-header-height-default, var(--mat-table-header-container-height, 40px)));background:var(--p-table-header-bg);color:var(--p-table-header-fg);box-shadow:var(--p-table-header-shadow, 0 1px 0 var(--p-table-border-color));border-bottom:1px solid var(--p-table-border-color)}:host ::ng-deep .mat-mdc-header-cell{color:var(--p-table-header-fg);font-weight:600}:host ::ng-deep .mat-sort-header-content,:host ::ng-deep .mat-mdc-header-row .mat-icon{color:inherit;font-weight:600}:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow,:host ::ng-deep .mat-mdc-header-cell:hover .mat-sort-header-arrow{color:var(--p-table-header-fg)!important}:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow .mat-sort-header-indicator,:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow .mat-sort-header-stem,:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow .mat-sort-header-pointer,:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow .mat-sort-header-pointer-left,:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow .mat-sort-header-pointer-right{border-color:var(--p-table-header-fg)!important;background:var(--p-table-header-fg)!important}:host ::ng-deep .mat-mdc-header-cell{height:var(--p-table-header-height, var(--p-table-header-height-default, var(--mat-table-header-container-height, 40px)));padding:var(--p-header-padding, var(--p-header-padding-default, 12px 16px))!important;font-size:var(--p-header-font-size, var(--p-header-font-size-default, inherit));font-weight:var(--p-header-font-weight, 600);letter-spacing:var(--p-header-letter-spacing, normal);text-transform:var(--p-header-text-transform, none);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-left .mat-sort-header-container{justify-content:flex-start}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-center .mat-sort-header-container{justify-content:center}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-right .mat-sort-header-container{justify-content:flex-end}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-left .praxis-header-label-text{text-align:left}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-center .praxis-header-label-text{text-align:center}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-right .praxis-header-label-text{text-align:right}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell.praxis-header-draggable .mat-sort-header-container{display:flex;align-items:center;width:100%;gap:4px}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell.praxis-header-draggable{-webkit-user-select:none;user-select:none}:host ::ng-deep .mat-mdc-header-cell .praxis-header-sort-trigger{display:block;width:100%;min-width:0}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable{overflow:visible}:host ::ng-deep .mat-mdc-header-cell .praxis-column-resize-handle{position:absolute;z-index:2;inset-block:0;inset-inline-end:0;width:var(--p-table-column-resize-hit-area);cursor:col-resize;touch-action:none;-webkit-user-select:none;user-select:none}:host ::ng-deep .mat-mdc-header-cell .praxis-column-resize-handle:after{content:\"\";position:absolute;inset-block:6px;inset-inline-start:calc((var(--p-table-column-resize-hit-area) - var(--p-table-column-resize-line-width)) / 2);width:var(--p-table-column-resize-line-width);background:var(--p-table-column-resize-separator-color);opacity:.76;transition:background-color .12s ease,opacity .12s ease,transform .12s ease,inset-block .12s ease}:host ::ng-deep .mat-mdc-header-cell .praxis-column-resize-handle:focus-visible{outline:2px solid var(--p-table-column-resize-separator-hover-color);outline-offset:-2px}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable:hover .praxis-column-resize-handle:after,:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable:focus-within .praxis-column-resize-handle:after,:host ::ng-deep .mat-mdc-header-cell .praxis-column-resize-handle:hover:after,:host ::ng-deep .mat-mdc-header-cell .praxis-column-resize-handle:focus-visible:after{background:var(--p-table-column-resize-separator-hover-color);opacity:1}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizing .praxis-column-resize-handle:after{background:var(--p-table-column-resize-active-color);inset-block:0;opacity:1;transform:scaleX(2)}:host ::ng-deep .pfx-column-resizing,:host ::ng-deep .pfx-column-resizing .mat-mdc-header-cell{cursor:col-resize}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell.praxis-header-draggable.cdk-drag-dragging{cursor:grabbing}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell.praxis-header-draggable .mat-sort-header-content{display:inline-flex;align-items:center;gap:4px;flex:1 1 auto;min-width:0;max-width:100%;overflow:hidden}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell .praxis-header-label{display:inline-flex;align-items:center;gap:4px;flex:1 1 auto;min-width:0}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell .praxis-header-label-text{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host ::ng-deep .pfx-column-drag-indicator .cdk-drop-list-dragging .mat-mdc-header-cell:not(.cdk-drag-placeholder){transition:transform var(--p-table-reorder-transition-duration, .18s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1))}:host ::ng-deep .pfx-column-drag-indicator .mat-mdc-header-cell.cdk-drag-animating{transition:transform var(--p-table-reorder-transition-duration, .16s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1))}.pfx-column-drag-preview{box-sizing:border-box;display:flex;align-items:center;border-radius:10px;border:1px solid var(--p-table-border-color);background:linear-gradient(135deg,var(--p-table-header-bg) 0%,var(--p-table-row-hover-bg) 100%);color:var(--p-table-header-fg);box-shadow:var(--p-table-drag-preview-shadow);transform:scale(var(--p-table-drag-preview-scale, 1.01));pointer-events:none;z-index:var(--praxis-layer-authoring-hover, 300)}.pfx-column-drag-preview-custom{height:100%;padding:var(--p-header-padding, var(--p-header-padding-default, 12px 16px))}.pfx-column-drag-preview .mat-sort-header-arrow,.pfx-column-drag-preview .mat-sort-header-indicator,.pfx-column-drag-preview .mat-sort-header-stem,.pfx-column-drag-preview .mat-sort-header-pointer,.pfx-column-drag-preview .mat-sort-header-pointer-left,.pfx-column-drag-preview .mat-sort-header-pointer-right{display:none!important}.pfx-column-drag-preview .mat-sort-header-container{display:flex;align-items:center;width:100%;min-height:100%;padding-right:0!important}.pfx-column-drag-preview .praxis-header-sort-trigger{display:block;width:100%;min-width:0}.pfx-column-drag-preview .mat-sort-header-content,.pfx-column-drag-preview .praxis-header-label{display:inline-flex;align-items:center;flex:1 1 auto;min-width:0;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pfx-column-drag-preview.praxis-header-align-left .mat-sort-header-container,.pfx-column-drag-preview.praxis-header-align-left,.pfx-column-drag-preview.praxis-header-align-left .mat-sort-header-content,.pfx-column-drag-preview.praxis-header-align-left .praxis-header-label{justify-content:flex-start}.pfx-column-drag-preview.praxis-header-align-center .mat-sort-header-container,.pfx-column-drag-preview.praxis-header-align-center,.pfx-column-drag-preview.praxis-header-align-center .mat-sort-header-content,.pfx-column-drag-preview.praxis-header-align-center .praxis-header-label{justify-content:center}.pfx-column-drag-preview.praxis-header-align-right .mat-sort-header-container,.pfx-column-drag-preview.praxis-header-align-right,.pfx-column-drag-preview.praxis-header-align-right .mat-sort-header-content,.pfx-column-drag-preview.praxis-header-align-right .praxis-header-label{justify-content:flex-end}.pfx-column-drag-preview.praxis-header-align-right .mat-sort-header-content{flex:0 1 auto;width:auto;margin-inline-start:auto}.pfx-column-drag-preview.praxis-header-align-right .praxis-header-label{width:auto}.pfx-column-drag-preview.praxis-header-align-left .praxis-header-label-text{text-align:left}.pfx-column-drag-preview.praxis-header-align-center .praxis-header-label-text{text-align:center}.pfx-column-drag-preview.praxis-header-align-right .praxis-header-label-text{text-align:right}:host ::ng-deep .pfx-column-drag-indicator .cdk-drag-placeholder{opacity:1;border:1px dashed var(--p-table-border-color);background:var(--p-table-row-hover-bg)}:host ::ng-deep .pfx-column-drag-indicator .cdk-drag-placeholder *{opacity:0}:host ::ng-deep .pfx-column-drag-indicator .mat-mdc-header-cell.cdk-drag-dragging{opacity:.58}@media(prefers-reduced-motion:reduce){:host ::ng-deep .pfx-column-drag-indicator .cdk-drop-list-dragging .mat-mdc-header-cell:not(.cdk-drag-placeholder){transition:none}.pfx-column-drag-preview{transition:none;transform:none}.praxis-column-reorder-status{animation:none}.pfx-expansion-detail-panel{animation:none!important;transition:none!important;transform:none!important}:host ::ng-deep .mat-mdc-row{transition:none}:host ::ng-deep .mat-mdc-table{transition:none}}.praxis-actions-header{text-align:right}.praxis-actions-header.align-start{text-align:left}.praxis-actions-header.align-center{text-align:center}.praxis-actions-header.align-end{text-align:right}.praxis-actions-header .praxis-actions-header__content{display:inline-flex;align-items:center;gap:var(--p-actions-header-gap, 6px);justify-content:center;max-width:100%;min-width:0;white-space:nowrap;color:var(--p-actions-header-color, inherit)}.praxis-actions-header .praxis-actions-header__content .mat-icon{font-size:18px;width:18px;height:18px;line-height:18px}.praxis-actions-header .praxis-actions-header__label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:640px){.praxis-actions-header .praxis-actions-header__label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}}:host ::ng-deep .mat-mdc-header-cell .mat-sort-header-container{box-sizing:border-box;padding-inline-end:0;position:static}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell.praxis-header-draggable .mat-sort-header-container{padding-inline-end:0}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable:not(.praxis-header-align-right) .mat-sort-header-container{padding-inline-end:calc(var(--p-table-column-resize-hit-area) + 8px)}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable.praxis-header-align-center .mat-sort-header-container{padding-inline-start:calc(var(--p-table-column-resize-hit-area) + 8px)}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable.praxis-header-align-right .mat-sort-header-container{padding-inline-end:0}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable:not(.praxis-header-align-right) .mat-sort-header-content{box-sizing:border-box;padding-inline-end:18px}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable.praxis-header-align-center .mat-sort-header-content{padding-inline-start:0;padding-inline-end:0}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable.praxis-header-align-right .mat-sort-header-content{box-sizing:border-box;flex:0 1 auto;width:auto;padding-inline-start:0;padding-inline-end:0}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable.praxis-header-align-right .praxis-header-label{width:auto}:host ::ng-deep .mat-mdc-header-cell .mat-sort-header-arrow{position:absolute;inset-inline-end:var(--p-table-sort-arrow-overlay-inset, 2px);top:50%;margin:0;transform:translateY(-50%)}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable:not(.praxis-header-align-right) .mat-sort-header-arrow{inset-inline-end:calc(var(--p-table-column-resize-hit-area) + 2px)}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-right .mat-sort-header-arrow{position:static;order:-1;flex:0 0 auto;margin-inline:0 4px;transform:none}:host ::ng-deep .mat-mdc-cell{color:var(--p-table-text-color);height:var(--p-table-row-height, var(--p-table-row-height-default, 44px));padding:var(--p-cell-padding, var(--p-cell-padding-default, 10px 14px));font-size:var(--p-cell-font-size, var(--p-cell-font-size-default, inherit));line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .mat-mdc-cell .pfx-cell-content,:host ::ng-deep .mat-cell .pfx-cell-content{display:inline-flex;align-items:center;gap:6px;width:100%;min-width:0;overflow:hidden}:host ::ng-deep .pfx-cell-content.pfx-cell-anim{animation-duration:var(--pfx-cell-anim-duration, .8s);animation-delay:var(--pfx-cell-anim-delay, 0ms);animation-fill-mode:both;animation-timing-function:ease-in-out}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--once{animation-iteration-count:1}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--loop{animation-iteration-count:infinite}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--count{animation-iteration-count:var(--pfx-cell-anim-iteration-count, 1)}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--on-hover{animation-play-state:paused}:host ::ng-deep .mat-mdc-cell:hover .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--on-hover,:host ::ng-deep .mat-cell:hover .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--on-hover{animation-play-state:running}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--pulse{animation-name:pfx-cell-pulse}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--blink{animation-name:pfx-cell-blink}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--grow{animation-name:pfx-cell-grow}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--fade{animation-name:pfx-cell-fade}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--slide-in{animation-name:pfx-cell-slide-in}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--border-pulse{animation-name:pfx-cell-border-pulse}@keyframes pfx-cell-pulse{0%{transform:scale(1)}50%{transform:scale(var(--pfx-cell-anim-scale-peak, 1.015))}to{transform:scale(1)}}@keyframes pfx-cell-blink{0%,49%{opacity:1}50%,to{opacity:var(--pfx-cell-anim-min-opacity, .35)}}@keyframes pfx-cell-grow{0%{transform:scale(.985)}to{transform:scale(1)}}@keyframes pfx-cell-fade{0%{opacity:0}to{opacity:1}}@keyframes pfx-cell-slide-in{0%{opacity:0;transform:translateY(var(--pfx-cell-anim-slide-distance, 4px))}to{opacity:1;transform:translateY(0)}}@keyframes pfx-cell-border-pulse{0%,to{box-shadow:inset 0 0 rgba(var(--pfx-cell-anim-border-rgb, 25, 118, 210),0)}50%{box-shadow:inset 0 0 0 2px rgba(var(--pfx-cell-anim-border-rgb, 25, 118, 210),var(--pfx-cell-anim-border-strength, .3))}}:host ::ng-deep .mat-mdc-row.pfx-row-anim{animation-duration:var(--pfx-row-anim-duration, .8s);animation-delay:var(--pfx-row-anim-delay, 0ms);animation-fill-mode:both;animation-timing-function:ease-in-out}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--once{animation-iteration-count:1}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--loop{animation-iteration-count:infinite}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--count{animation-iteration-count:var(--pfx-row-anim-iteration-count, 1)}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--on-hover{animation-play-state:paused}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--on-hover:hover{animation-play-state:running}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--pulse{animation-name:pfx-row-pulse}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--blink{animation-name:pfx-row-blink}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--grow{animation-name:pfx-row-grow}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--fade{animation-name:pfx-row-fade}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--slide-in{animation-name:pfx-row-slide-in}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--border-pulse{animation-name:pfx-row-border-pulse}@keyframes pfx-row-pulse{0%{transform:scale(1)}50%{transform:scale(var(--pfx-row-anim-scale-peak, 1.015))}to{transform:scale(1)}}@keyframes pfx-row-blink{0%,49%{opacity:1}50%,to{opacity:var(--pfx-row-anim-min-opacity, .35)}}@keyframes pfx-row-grow{0%{transform:scale(.985)}to{transform:scale(1)}}@keyframes pfx-row-fade{0%{opacity:0}to{opacity:1}}@keyframes pfx-row-slide-in{0%{opacity:0;transform:translateY(var(--pfx-row-anim-slide-distance, 4px))}to{opacity:1;transform:translateY(0)}}@keyframes pfx-row-border-pulse{0%,to{box-shadow:inset 0 0 rgba(var(--pfx-row-anim-border-rgb, 25, 118, 210),0)}50%{box-shadow:inset 0 0 0 2px rgba(var(--pfx-row-anim-border-rgb, 25, 118, 210),var(--pfx-row-anim-border-strength, .3))}}@media(prefers-reduced-motion:reduce){:host ::ng-deep .pfx-cell-content.pfx-cell-anim,:host ::ng-deep .mat-mdc-row.pfx-row-anim{animation:none!important}}:host ::ng-deep .mat-mdc-row:hover{background:var(--p-table-row-hover-bg)}:host ::ng-deep .mat-mdc-row{height:var(--p-table-row-height, var(--p-table-row-height-default, 44px));min-height:var(--p-table-row-height, var(--p-table-row-height-default, 44px));transition:background-color var(--p-table-hover-transition-duration, .18s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1)),box-shadow var(--p-table-selection-transition-duration, .18s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1))}:host ::ng-deep .mat-mdc-row.pfx-row-click-selectable{cursor:pointer}:host ::ng-deep .mat-mdc-row:nth-child(2n){background:var(--p-table-row-even-bg)}:host ::ng-deep .mat-mdc-row:nth-child(2n):hover{background:var(--p-table-row-hover-bg)}:host ::ng-deep .mat-mdc-row.pfx-row-selected,:host ::ng-deep .mat-mdc-row.pfx-row-selected:hover{background:var(--p-table-row-selected-bg)}:host ::ng-deep .mat-mdc-row.pfx-row-selected .mat-mdc-cell{background:var(--p-table-row-selected-bg);color:var(--p-table-row-selected-fg);font-weight:var(--p-table-row-selected-font-weight)}:host ::ng-deep .mat-mdc-row.pfx-row-selected .mat-mdc-cell:first-child{position:relative}:host ::ng-deep .mat-mdc-row.pfx-row-selected .mat-mdc-cell:first-child:before{content:\"\";position:absolute;inset:0 auto 0 0;width:4px;border-radius:0 4px 4px 0;background:var(--p-table-row-selected-indicator);pointer-events:none}:host.row-borders ::ng-deep .mat-mdc-row .mat-mdc-cell{border-bottom:1px solid var(--p-table-border-color)}:host.row-borders ::ng-deep .mat-mdc-header-row .mat-mdc-header-cell{border-bottom:none}:host.col-borders ::ng-deep .mat-mdc-header-row .mat-mdc-header-cell,:host.col-borders ::ng-deep .mat-mdc-row .mat-mdc-cell{border-right:1px solid var(--p-table-border-color)}:host.col-borders ::ng-deep .mat-mdc-header-row .mat-mdc-header-cell:last-child,:host.col-borders ::ng-deep .mat-mdc-row .mat-mdc-cell:last-child{border-right:none}.ptable-error{display:flex;align-items:center;gap:12px;padding:12px;margin:8px 0;border:1px solid var(--md-sys-color-error);border-radius:8px}.ptable-error__content{flex:1}.ptable-error__title{font-weight:600}.ptable-info-banner{display:flex;gap:12px;align-items:center;padding:8px 12px;margin:8px 0;border-radius:8px;border:1px solid var(--md-sys-color-primary);background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.ptable-info-banner .text{flex:1;font-weight:600}.ptable-info-banner .actions{display:flex;gap:8px}.pfx-cell-image{display:inline-block;vertical-align:middle;background:var(--md-sys-color-surface-variant);border:1px solid var(--md-sys-color-outline-variant)}.pfx-cell-image.shape-rounded{border-radius:8px}.pfx-cell-image.shape-circle{border-radius:9999px}.pfx-badge{display:inline-flex;align-items:center;gap:6px;line-height:1;padding:4px 8px;border-radius:9999px;font-size:12px;font-weight:600;border:1px solid transparent;white-space:nowrap;--prx-rich-content-inline-gap: 6px}.pfx-badge .pfx-badge-icon{font-size:16px;width:16px;height:16px}.pfx-badge--plain{background:transparent;border-color:transparent;color:inherit}.pfx-badge--filled-primary{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pfx-badge--filled-accent{background:var(--md-sys-color-secondary);color:var(--md-sys-color-on-secondary)}.pfx-badge--filled-warn,.pfx-badge--filled-danger{background:var(--md-sys-color-error);color:var(--md-sys-color-on-error)}.pfx-badge--filled-success{background:var(--p-table-state-success-bg);color:var(--p-table-state-success-fg)}.pfx-badge--filled-info{background:var(--md-sys-color-tertiary);color:var(--md-sys-color-on-tertiary)}.pfx-badge--filled-basic{background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface);border-color:var(--md-sys-color-outline-variant)}.pfx-badge--outlined{background:transparent;border-color:var(--md-sys-color-outline-variant);color:inherit}.pfx-badge--soft-primary{background:var(--p-table-badge-soft-primary-bg);color:var(--p-table-badge-soft-primary-fg)}.pfx-badge--soft-accent{background:var(--p-table-badge-soft-accent-bg);color:var(--p-table-badge-soft-accent-fg)}.pfx-badge--soft-warn{background:var(--p-table-badge-soft-warn-bg);color:var(--p-table-badge-soft-warn-fg)}.pfx-badge--soft-danger{background:color-mix(in srgb,var(--p-table-state-danger-bg) 72%,transparent);color:var(--p-table-state-danger-fg);border-color:color-mix(in srgb,var(--p-table-state-danger-fg) 18%,transparent)}.pfx-badge--soft-success{background:color-mix(in srgb,var(--p-table-state-success-bg) 72%,transparent);color:var(--p-table-state-success-fg);border-color:color-mix(in srgb,var(--p-table-state-success-fg) 18%,transparent)}.pfx-badge--soft-info{background:color-mix(in srgb,var(--md-sys-color-tertiary-container) 72%,transparent);color:var(--md-sys-color-on-tertiary-container);border-color:color-mix(in srgb,var(--md-sys-color-tertiary) 18%,transparent)}.pfx-badge--soft-basic{background:color-mix(in srgb,var(--md-sys-color-surface-container-highest) 82%,transparent);color:color-mix(in srgb,var(--md-sys-color-on-surface) 76%,transparent);border-color:color-mix(in srgb,var(--md-sys-color-outline-variant) 65%,transparent)}.pfx-icon-renderer,:host ::ng-deep .pfx-icon-renderer__content{--prx-rich-content-inline-gap: var(--p-table-icon-value-gap, .04rem)}.pfx-icon-renderer__prefix,.pfx-icon-renderer__suffix,:host ::ng-deep .pfx-icon-renderer__prefix,:host ::ng-deep .pfx-icon-renderer__suffix{color:var(--p-table-icon-value-affix-color, currentColor);font-size:var(--p-table-icon-value-affix-font-size, .95em);font-weight:var(--p-table-icon-value-affix-font-weight, 500);line-height:1;opacity:var(--p-table-icon-value-affix-opacity, .72)}.pfx-icon-renderer__label,:host ::ng-deep .pfx-icon-renderer__label{color:var(--p-table-icon-value-color, currentColor);font-weight:var(--p-table-icon-value-font-weight, inherit);font-variant-numeric:tabular-nums;line-height:1}.row--success,.row--success td,td.row--success{background-color:var(--p-table-state-success-bg)!important;color:var(--p-table-state-success-fg)!important}.row--warning,.row--warning td,td.row--warning{background-color:var(--p-table-state-warning-bg)!important;color:var(--p-table-state-warning-fg)!important}.row--danger,.row--danger td,td.row--danger{background-color:var(--p-table-state-danger-bg)!important;color:var(--p-table-state-danger-fg)!important}.row--highlight,.row--highlight td,td.row--highlight{background-color:var(--p-table-state-highlight-bg)!important;color:var(--p-table-state-highlight-fg)!important;font-weight:600}.row--muted,.row--muted td,td.row--muted{opacity:.7;filter:saturate(.6)}.pfx-expansion-node-embed{display:flex;flex-direction:column;gap:12px;padding:16px;border:1px solid var(--md-sys-color-outline-variant);border-radius:16px;background:var(--md-sys-color-surface-container-low, var(--md-sys-color-surface))}.ptable-loading-state{padding:8px 12px 4px;display:grid;gap:10px}.ptable-loading-state__hero{display:grid;gap:10px;padding:14px;border-radius:8px;border:1px solid rgba(18,99,180,.08);background:linear-gradient(180deg,#ffffffa6,#ffffff47),linear-gradient(0deg,#1263b408,#1263b400)}.ptable-loading-state__rows{display:grid;gap:8px}.ptable-loading-state__row{display:grid;grid-template-columns:96px minmax(0,1fr) minmax(140px,1.2fr);gap:8px}.ptable-loading-state__line,.ptable-loading-state__cell{display:block;height:12px;border-radius:999px;background:linear-gradient(90deg,#1263b414,#1263b42e,#1263b414);background-size:200% 100%;animation:ptable-loading-wave 1.2s ease-in-out infinite}.ptable-loading-state__line--wide{width:180px}.ptable-loading-state__line--short{width:96px}.ptable-loading-state__cell--short{width:100%;max-width:84px}.ptable-loading-state__cell--wide{width:100%}.ptable-loading-state__message{font-size:.85rem;color:var(--md-sys-color-on-surface-variant, #5a5d67);padding-inline:4px}.pfx-expansion-node-embed__header,.pfx-expansion-node-embed__meta,.pfx-expansion-node-embed__empty,.pfx-expansion-node-embed__diagram-label{display:block}.pfx-expansion-node-embed--inline{min-width:0}.pfx-expansion-node-embed--chart praxis-chart{display:block;min-height:280px}.ptable-no-data-state{padding:8px 12px 4px}.ptable-no-data-state ::ng-deep .empty-card{margin:0;border-radius:8px}@keyframes ptable-loading-wave{0%{background-position:100% 0}to{background-position:-100% 0}}.pfx-expansion-node-embed__diagram{display:flex;flex-direction:column;gap:8px}.pfx-expansion-node-embed__diagram-source{margin:0;padding:12px;overflow:auto;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-highest, var(--md-sys-color-surface));color:var(--md-sys-color-on-surface);font-family:Consolas,Courier New,monospace;font-size:12px;line-height:1.4;white-space:pre-wrap}.pfx-expansion-node-embed__action-btn{align-self:flex-start}.pfx-expansion-node-embed__action-host{display:inline-flex}.praxis-table-columns-menu{max-height:320px;overflow-y:auto;padding:8px 0}.praxis-table-column-menu-item{display:flex!important;align-items:center;width:100%;box-sizing:border-box;padding:6px 16px;min-height:40px}.praxis-table-column-menu-item mat-checkbox{width:100%}\n"] }]
56595
+ ], template: "@if (shouldShowEmptyState()) {\n <praxis-empty-state-card\n icon=\"link\"\n [title]=\"'Escolha o recurso da tabela'\"\n [description]=\"'Selecione um recurso da API para carregar colunas, registros e a\u00E7\u00F5es da tabela automaticamente.'\"\n [primaryAction]=\"{ label: 'Selecionar recurso', icon: 'bolt', action: openQuickConnect.bind(this) }\"\n ></praxis-empty-state-card>\n}\n\n<!-- Error State with Quick Connect CTA -->\n@if (isRemoteMode() && (schemaError || dataError)) {\n <div class=\"ptable-error\" role=\"alert\" aria-live=\"assertive\">\n <mat-icon color=\"warn\" aria-hidden=\"true\">error</mat-icon>\n <div class=\"ptable-error__content\">\n <praxis-rich-content\n rootClassName=\"ptable-error__title\"\n [nodes]=\"getTableChromeTextRichContentNodes('Erro', 'ptable-error__title-text')\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"ptable-error__message\"\n [nodes]=\"getTableChromeTextRichContentNodes(errorMessage || 'Ocorreu um erro ao carregar a tabela.', 'ptable-error__message-text')\"\n ></praxis-rich-content>\n </div>\n <button mat-flat-button color=\"primary\" (click)=\"openQuickConnect()\">\n <mat-icon>bolt</mat-icon>\n <praxis-rich-content\n rootClassName=\"ptable-error__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Selecionar recurso', 'ptable-error__action-label-text')\"\n ></praxis-rich-content>\n </button>\n @if (isCustomizationAvailable()) {\n <button\n mat-icon-button\n color=\"primary\"\n data-role=\"table-settings\"\n data-testid=\"table-settings-trigger\"\n (click)=\"openTableSettings()\"\n [attr.aria-label]=\"getTableSettingsLabel()\"\n [matTooltip]=\"getTableSettingsLabel()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>settings</mat-icon>\n </button>\n }\n @if (!schemaError) {\n <button mat-stroked-button (click)=\"retryData()\">\n <praxis-rich-content\n rootClassName=\"ptable-error__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Tentar novamente', 'ptable-error__action-label-text')\"\n ></praxis-rich-content>\n </button>\n }\n @if (schemaError) {\n <button mat-stroked-button (click)=\"reloadSchema()\">\n <praxis-rich-content\n rootClassName=\"ptable-error__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Recarregar colunas', 'ptable-error__action-label-text')\"\n ></praxis-rich-content>\n </button>\n }\n </div>\n}\n\n<!-- Inline banner for schema change (only in edit mode) -->\n@if (shouldShowOutdatedInline()) {\n <div class=\"ptable-info-banner\" role=\"status\" aria-live=\"polite\">\n <praxis-rich-content\n rootClassName=\"text\"\n [nodes]=\"getTableChromeTextRichContentNodes('O schema do servidor mudou. Reconciliar agora?', 'ptable-info-banner__text')\"\n ></praxis-rich-content>\n <div class=\"actions\">\n <button mat-stroked-button color=\"primary\" (click)=\"onReconcileRequested()\">\n <mat-icon>sync</mat-icon>\n <praxis-rich-content\n rootClassName=\"ptable-info-banner__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Reconciliar', 'ptable-info-banner__action-label-text')\"\n ></praxis-rich-content>\n </button>\n <button mat-button (click)=\"onSnoozeOutdated()\">\n <praxis-rich-content\n rootClassName=\"ptable-info-banner__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Lembrar depois', 'ptable-info-banner__action-label-text')\"\n ></praxis-rich-content>\n </button>\n <button mat-button (click)=\"onIgnoreOutdated()\">\n <praxis-rich-content\n rootClassName=\"ptable-info-banner__action-label\"\n [nodes]=\"getTableChromeTextRichContentNodes('Ignorar', 'ptable-info-banner__action-label-text')\"\n ></praxis-rich-content>\n </button>\n </div>\n </div>\n}\n\n@if (isAiAssistantEnabled() && aiAssistantOpen && aiAssistantViewState) {\n <praxis-ai-assistant-shell\n [labels]=\"aiAssistantLabels\"\n [mode]=\"aiAssistantViewState.mode\"\n [state]=\"aiAssistantViewState.state\"\n [contextItems]=\"aiAssistantViewState.contextItems\"\n [attachments]=\"aiAssistantViewState.attachments\"\n [messages]=\"aiAssistantViewState.messages\"\n [quickReplies]=\"aiAssistantViewState.quickReplies\"\n [recommendedIntents]=\"getAiAssistantRecommendedIntents()\"\n [prompt]=\"aiAssistantPrompt\"\n [statusText]=\"aiAssistantViewState.statusText\"\n [errorText]=\"aiAssistantViewState.errorText\"\n [busy]=\"aiAssistantViewState.state === 'processing' || aiAssistantViewState.state === 'applying'\"\n [canApply]=\"aiAssistantViewState.canApply\"\n [showAttachAction]=\"false\"\n [enablePastedAttachments]=\"false\"\n [voiceInputMode]=\"aiAssistantVoiceInputMode\"\n [voiceLanguage]=\"aiAssistantVoiceLanguage\"\n [layout]=\"aiAssistantLayout\"\n testIdPrefix=\"table-ai-assistant\"\n panelTestId=\"table-ai-assistant-panel\"\n submitTestId=\"table-ai-assistant-submit\"\n applyTestId=\"table-ai-assistant-apply\"\n (promptChange)=\"onAiAssistantPromptChange($event)\"\n (submitPrompt)=\"onAiAssistantSubmit($event)\"\n (apply)=\"onAiAssistantApply()\"\n (retryTurn)=\"onAiAssistantRetry()\"\n (cancelTurn)=\"onAiAssistantCancel()\"\n (quickReply)=\"onAiAssistantQuickReply($event)\"\n (recommendedIntent)=\"onAiAssistantRecommendedIntent($event)\"\n (editMessage)=\"onAiAssistantEditMessage($event)\"\n (resendMessage)=\"onAiAssistantResendMessage($event)\"\n (layoutChange)=\"onAiAssistantLayoutChange($event)\"\n (close)=\"closeAiAssistant()\"\n ></praxis-ai-assistant-shell>\n}\n\n@if (shouldRenderDataSurface() && !schemaError && !dataError && toolbarV2) {\n <div class=\"praxis-table-header\" [class.edit-mode]=\"isCustomizationAvailable()\" [class.stacked]=\"hasTopToolbarStack()\">\n @if (showToolbar && shouldShowToolbarTopPlacement()) {\n <praxis-table-toolbar\n class=\"praxis-toolbar-stack-top\"\n [config]=\"config\"\n [backgroundColor]=\"getToolbarActionsBackgroundColor()\"\n [style.--pfx-filter-h]=\"getToolbarLayoutHeightHostStyle()\"\n [evaluationContext]=\"getToolbarEvaluationContext()\"\n [columnVisibilityController]=\"toolbarColumnVisibilityController\"\n [showActionsGroup]=\"shouldShowToolbarActionsTop()\"\n [showMobileActions]=\"shouldShowToolbarActionsTop()\"\n [exportBusy]=\"exportBusy\"\n (toolbarAction)=\"onToolbarAction($event)\"\n (exportAction)=\"onExportAction($event)\"\n >\n @if (shouldRenderAdvancedFilter()) {\n <praxis-filter\n advancedFilter\n [resourcePath]=\"getAdvancedFilterResourcePath()\"\n [filterId]=\"tableId\"\n [formId]=\"tableId\"\n [persistenceKey]=\"getAdvancedFilterPersistenceKey()\"\n [fieldMetadata]=\"getAdvancedFilterFieldMetadata()\"\n [enableCustomization]=\"isCustomizationAvailable()\"\n [value]=\"advancedFilterValue\"\n\n [alwaysVisibleFields]=\"getAdvancedFilterAlwaysVisibleFields()\"\n [alwaysVisibleFieldMetadataOverrides]=\"getAdvancedFilterAlwaysVisibleFieldMetadataOverrides()\"\n [selectedFieldIds]=\"config.behavior?.filtering?.advancedFilters?.settings?.selectedFieldIds ?? []\"\n [allowSaveTags]=\"config.behavior?.filtering?.advancedFilters?.settings?.allowSaveTags\"\n [changeDebounceMs]=\"config.behavior?.filtering?.advancedFilters?.settings?.changeDebounceMs ?? 300\"\n [i18n]=\"getFilterI18n()\"\n [mode]=\"'filter'\"\n [showFilterSettings]=\"isCustomizationAvailable()\"\n (change)=\"onAdvancedFilterChange($event)\"\n (requestSearch)=\"onAdvancedFilterSubmit($event)\"\n (clear)=\"onAdvancedFilterClear()\"\n ></praxis-filter>\n }\n <ng-content select=\"[advancedFilter]\" />\n <ng-content select=\"[toolbar]\" />\n\n <!-- AI Assistant in Toolbar -->\n @if (shouldShowAiAssistantEntrypoint()) {\n <button\n end-actions\n mat-icon-button\n color=\"primary\"\n type=\"button\"\n class=\"praxis-table-ai-trigger praxis-table-toolbar-action--ai\"\n [class.praxis-table-ai-trigger--minimized]=\"hasMinimizedAiAssistantSession()\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('toolbar-top')\"\n (click)=\"openAiAssistant()\"\n [attr.aria-label]=\"aiAssistantTriggerLabel()\"\n [matBadge]=\"aiAssistantTriggerBadge()\"\n [matBadgeHidden]=\"!hasMinimizedAiAssistantSession()\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"aiAssistantTriggerTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>{{ aiAssistantTriggerIcon() }}</mat-icon>\n </button>\n }\n\n @if (isCustomizationAvailable()) {\n <button end-actions mat-icon-button color=\"primary\" class=\"praxis-table-toolbar-action--configuration\" data-role=\"table-settings\" data-testid=\"table-settings-trigger\"\n (click)=\"openTableSettings()\" [attr.aria-label]=\"getTableSettingsLabel()\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"getTableSettingsTooltip()\"\n matTooltipPosition=\"below\">\n <mat-icon>settings</mat-icon>\n </button>\n }\n </praxis-table-toolbar>\n }\n @if (!showToolbar && isCustomizationAvailable()) {\n <div class=\"ptable-header-actions\">\n @if (shouldShowAiAssistantEntrypoint()) {\n <button\n mat-icon-button\n color=\"primary\"\n type=\"button\"\n class=\"praxis-table-ai-trigger praxis-table-toolbar-action--ai\"\n [class.praxis-table-ai-trigger--minimized]=\"hasMinimizedAiAssistantSession()\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('header-top')\"\n (click)=\"openAiAssistant()\"\n [attr.aria-label]=\"aiAssistantTriggerLabel()\"\n [matBadge]=\"aiAssistantTriggerBadge()\"\n [matBadgeHidden]=\"!hasMinimizedAiAssistantSession()\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"aiAssistantTriggerTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>{{ aiAssistantTriggerIcon() }}</mat-icon>\n </button>\n }\n <button mat-icon-button color=\"primary\" class=\"praxis-table-toolbar-action--configuration\" data-role=\"table-settings\" data-testid=\"table-settings-trigger\" (click)=\"openTableSettings()\" [attr.aria-label]=\"getTableSettingsLabel()\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"getTableSettingsTooltip()\"\n matTooltipPosition=\"below\">\n <mat-icon>settings</mat-icon>\n </button>\n @if (isRemoteMode()) {\n <button mat-icon-button (click)=\"disconnect()\" [attr.aria-label]=\"getDisconnectLabel()\" [matTooltip]=\"getDisconnectTooltip()\">\n <mat-icon>link_off</mat-icon>\n </button>\n }\n </div>\n }\n </div>\n} @else {\n @if (shouldRenderDataSurface() && !schemaError && !dataError) {\n @if (showToolbar && shouldShowToolbarTopPlacement()) {\n <praxis-table-toolbar\n class=\"praxis-toolbar-stack-top\"\n [config]=\"config\"\n [backgroundColor]=\"getToolbarActionsBackgroundColor()\"\n [style.--pfx-filter-h]=\"getToolbarLayoutHeightHostStyle()\"\n [evaluationContext]=\"getToolbarEvaluationContext()\"\n [showActionsGroup]=\"shouldShowToolbarActionsTop()\"\n [showMobileActions]=\"shouldShowToolbarActionsTop()\"\n [exportBusy]=\"exportBusy\"\n (toolbarAction)=\"onToolbarAction($event)\"\n (exportAction)=\"onExportAction($event)\"\n >\n @if (shouldRenderAdvancedFilter()) {\n <praxis-filter\n advancedFilter\n [resourcePath]=\"getAdvancedFilterResourcePath()\"\n [filterId]=\"tableId\"\n [formId]=\"tableId\"\n [persistenceKey]=\"getAdvancedFilterPersistenceKey()\"\n [fieldMetadata]=\"getAdvancedFilterFieldMetadata()\"\n [enableCustomization]=\"isCustomizationAvailable()\"\n [value]=\"advancedFilterValue\"\n\n [alwaysVisibleFields]=\"getAdvancedFilterAlwaysVisibleFields()\"\n [alwaysVisibleFieldMetadataOverrides]=\"getAdvancedFilterAlwaysVisibleFieldMetadataOverrides()\"\n [selectedFieldIds]=\"config.behavior?.filtering?.advancedFilters?.settings?.selectedFieldIds ?? []\"\n [allowSaveTags]=\"config.behavior?.filtering?.advancedFilters?.settings?.allowSaveTags\"\n [changeDebounceMs]=\"config.behavior?.filtering?.advancedFilters?.settings?.changeDebounceMs ?? 300\"\n [i18n]=\"getFilterI18n()\"\n [mode]=\"'filter'\"\n [showFilterSettings]=\"isCustomizationAvailable()\"\n (change)=\"onAdvancedFilterChange($event)\"\n (requestSearch)=\"onAdvancedFilterSubmit($event)\"\n (clear)=\"onAdvancedFilterClear()\"\n ></praxis-filter>\n }\n <ng-content select=\"[advancedFilter]\" />\n <ng-content select=\"[toolbar]\" />\n @if (shouldShowAiAssistantEntrypoint()) {\n <button\n end-actions\n mat-icon-button\n color=\"primary\"\n type=\"button\"\n class=\"praxis-table-ai-trigger praxis-table-toolbar-action--ai\"\n [class.praxis-table-ai-trigger--minimized]=\"hasMinimizedAiAssistantSession()\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('toolbar-stacked')\"\n (click)=\"openAiAssistant()\"\n [attr.aria-label]=\"aiAssistantTriggerLabel()\"\n [matBadge]=\"aiAssistantTriggerBadge()\"\n [matBadgeHidden]=\"!hasMinimizedAiAssistantSession()\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"aiAssistantTriggerTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>{{ aiAssistantTriggerIcon() }}</mat-icon>\n </button>\n }\n @if (isCustomizationAvailable()) {\n <button end-actions mat-icon-button color=\"primary\" class=\"praxis-table-toolbar-action--configuration\" data-role=\"table-settings\" data-testid=\"table-settings-trigger\"\n (click)=\"openTableSettings()\" [attr.aria-label]=\"getTableSettingsLabel()\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"getTableSettingsTooltip()\"\n matTooltipPosition=\"below\">\n <mat-icon>settings</mat-icon>\n </button>\n }\n </praxis-table-toolbar>\n }\n @if (!showToolbar && isCustomizationAvailable()) {\n <div class=\"ptable-header-actions\">\n @if (shouldShowAiAssistantEntrypoint()) {\n <button\n mat-icon-button\n color=\"primary\"\n type=\"button\"\n class=\"praxis-table-ai-trigger praxis-table-toolbar-action--ai\"\n [class.praxis-table-ai-trigger--minimized]=\"hasMinimizedAiAssistantSession()\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('header-stacked')\"\n (click)=\"openAiAssistant()\"\n [attr.aria-label]=\"aiAssistantTriggerLabel()\"\n [matBadge]=\"aiAssistantTriggerBadge()\"\n [matBadgeHidden]=\"!hasMinimizedAiAssistantSession()\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"aiAssistantTriggerTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>{{ aiAssistantTriggerIcon() }}</mat-icon>\n </button>\n }\n <button mat-icon-button color=\"primary\" class=\"praxis-table-toolbar-action--configuration\" data-role=\"table-settings\" data-testid=\"table-settings-trigger\" (click)=\"openTableSettings()\" [attr.aria-label]=\"getTableSettingsLabel()\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"getTableSettingsTooltip()\"\n matTooltipPosition=\"below\">\n <mat-icon>settings</mat-icon>\n </button>\n </div>\n }\n }\n}\n<!-- Paginador superior -->\n@if (shouldRenderDataSurface() && !schemaError && !dataError && getPaginationEnabled() && (config.behavior?.pagination?.position === 'top' || config.behavior?.pagination?.position === 'both')) {\n <mat-paginator\n [length]=\"getPaginationLength()\"\n [pageSize]=\"getPaginationPageSize()\"\n [pageSizeOptions]=\"getPaginationPageSizeOptions()\"\n [selectConfig]=\"paginatorSelectConfig\"\n [showFirstLastButtons]=\"getPaginationShowFirstLast()\"\n (page)=\"onPageChange($event)\"\n [class.compact]=\"config.behavior?.pagination?.style === 'compact'\"\n >\n </mat-paginator>\n}\n<div class=\"px-scroll-viewport\"\n cdkScrollable\n [class.scroll-auto]=\"horizontalScroll === 'auto'\"\n [class.scroll-wrap]=\"horizontalScroll === 'wrap'\"\n [class.scroll-none]=\"horizontalScroll === 'none'\">\n\n @if (shouldRenderDataSurface() && !schemaError && !dataError) {\n <div class=\"praxis-visually-hidden-status\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ columnReorderStatusMessage }}\n </div>\n @if (exportStatusMessage) {\n <div class=\"praxis-visually-hidden-status\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ exportStatusMessage }}\n </div>\n }\n @if (columnReorderVisualStatusMessage) {\n <div class=\"praxis-column-reorder-status\" role=\"note\">\n {{ columnReorderVisualStatusMessage }}\n </div>\n }\n <table\n mat-table\n data-testid=\"table-column-drag-drop-list\"\n [dataSource]=\"dataSource\"\n [multiTemplateDataRows]=\"isRowExpansionRuntimeEnabled()\"\n cdkDropList\n [cdkDropListDisabled]=\"!isColumnDraggingEnabled() || isColumnResizeActive()\"\n [cdkDropListData]=\"visibleDataColumnsForDrag\"\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"onColumnDrop($event)\"\n matSort\n (matSortChange)=\"onSortChange($event)\"\n [matSortDisabled]=\"!getSortingEnabled() || isColumnResizeActive()\"\n [ngClass]=\"getTableElevationClassName()\"\n [class.table-stack-top]=\"hasTopToolbarStack()\"\n [class.pfx-column-drag-enabled]=\"isColumnDraggingEnabled()\"\n [class.pfx-column-drag-indicator]=\"isColumnDragIndicatorEnabled()\"\n [class.pfx-column-resize-enabled]=\"isColumnResizeEnabled()\"\n [class.pfx-column-resizing]=\"isColumnResizeActive()\"\n [style.width]=\"getColumnResizeTableWidthStyle()\"\n [style.min-width]=\"getColumnResizeTableWidthStyle()\"\n [style.max-width]=\"getColumnResizeTableWidthStyle()\"\n >\n @if (isSelectionColumnEnabled()) {\n <ng-container\n matColumnDef=\"_select\"\n >\n <th mat-header-cell *matHeaderCellDef>\n @if (canSelectAll()) {\n <mat-checkbox\n (change)=\"masterToggle()\"\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\n [attr.aria-label]=\"getMasterSelectionAriaLabel()\"\n ></mat-checkbox>\n }\n </th>\n <td mat-cell *matCellDef=\"let row; let i = index\">\n @if (config.behavior?.selection?.type !== 'multiple') {\n <mat-radio-button\n (click)=\"$event.stopPropagation(); toggleRow(row)\"\n [checked]=\"selection.isSelected(row)\"\n [attr.aria-label]=\"getRowSelectionAriaLabel(row, i)\"\n ></mat-radio-button>\n } @else {\n <mat-checkbox\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleRow(row)\"\n [checked]=\"selection.isSelected(row)\"\n [attr.aria-label]=\"getRowSelectionAriaLabel(row, i)\"\n ></mat-checkbox>\n }\n </td>\n </ng-container>\n }\n\n @if (isRowExpansionRuntimeEnabled()) {\n <ng-container matColumnDef=\"_expander\">\n <th mat-header-cell *matHeaderCellDef class=\"pfx-expansion-col-header\">\n <span class=\"praxis-visually-hidden-status\">Expandir detalhes da linha</span>\n </th>\n <td mat-cell *matCellDef=\"let row; let i = index\" class=\"pfx-expansion-col-cell\">\n <button\n mat-icon-button\n class=\"pfx-expansion-toggle\"\n [disabled]=\"!isRowExpandable(row, i) || !isExpansionIconTriggerEnabled()\"\n [attr.aria-expanded]=\"isRowExpanded(row, i) ? 'true' : 'false'\"\n [attr.aria-controls]=\"getRowExpansionDetailId(row, i)\"\n [attr.aria-label]=\"getRowExpansionToggleAriaLabel(row, i)\"\n (click)=\"onExpansionToggleFromIcon(row, i, $event)\"\n (keydown)=\"onExpansionToggleKeydown($event, row, i)\"\n >\n <mat-icon [praxisIcon]=\"isRowExpanded(row, i)\n ? getExpansionExpandedIcon()\n : getExpansionCollapsedIcon()\"></mat-icon>\n </button>\n </td>\n </ng-container>\n }\n @for (column of visibleColumns; track column.field) {\n <ng-container\n [matColumnDef]=\"column.field\"\n [sticky]=\"column.sticky === true || column.sticky === 'start'\"\n [stickyEnd]=\"column.sticky === 'end'\"\n >\n <th\n mat-header-cell\n *matHeaderCellDef\n cdkDrag\n [cdkDragData]=\"column\"\n cdkDragLockAxis=\"x\"\n cdkDragPreviewClass=\"pfx-column-drag-preview\"\n (cdkDragStarted)=\"onColumnDragStarted(column)\"\n (cdkDragEnded)=\"onColumnDragEnded($event, column)\"\n [cdkDragDisabled]=\"!isColumnDraggingEnabled() || !isColumnDraggable(column) || isColumnResizeActive()\"\n [class.praxis-header-draggable]=\"isColumnDraggingEnabled() && isColumnDraggable(column)\"\n [class.praxis-header-resizable]=\"isColumnResizable(column)\"\n [class.praxis-header-resizing]=\"isColumnResizeActive(column)\"\n [class.praxis-header-align-left]=\"column.align === 'left'\"\n [class.praxis-header-align-center]=\"column.align === 'center'\"\n [class.praxis-header-align-right]=\"column.align === 'right'\"\n [style.text-align]=\"getColumnTextAlignStyle(column)\"\n [style.width]=\"getColumnWidthStyle(column)\"\n [attr.style]=\"getColumnHeaderAttrStyle(column)\"\n [ngStyle]=\"getColumnHeaderNgStyle(column)\"\n >\n <span\n class=\"praxis-header-sort-trigger\"\n [mat-sort-header]=\"column.field\"\n [disabled]=\"!getSortingEnabled() || column.sortable === false || isColumnResizeActive()\"\n (keydown)=\"onColumnHeaderReorderKeydown($event, column)\"\n >\n <span class=\"praxis-header-label\" data-testid=\"column-header-label\">\n <span class=\"praxis-header-label-text\">{{ column.header }}</span>\n </span>\n </span>\n <ng-template cdkDragPreview [matchSize]=\"true\">\n <div\n class=\"pfx-column-drag-preview pfx-column-drag-preview-custom\"\n [class.praxis-header-align-left]=\"column.align === 'left'\"\n [class.praxis-header-align-center]=\"column.align === 'center'\"\n [class.praxis-header-align-right]=\"column.align === 'right'\"\n [style.text-align]=\"getColumnTextAlignStyle(column)\"\n >\n <span class=\"praxis-header-label\">\n <span class=\"praxis-header-label-text\">{{ column.header }}</span>\n </span>\n </div>\n </ng-template>\n @if (isColumnResizable(column)) {\n <span\n class=\"praxis-column-resize-handle\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n tabindex=\"0\"\n [attr.aria-label]=\"getColumnResizeHandleAriaLabel(column)\"\n [attr.aria-valuemin]=\"getColumnResizeMinWidthAriaValue(column)\"\n [attr.aria-valuemax]=\"getColumnResizeMaxWidthAriaValue(column)\"\n [attr.aria-valuenow]=\"getColumnResizeCurrentWidthAriaValue(column)\"\n [attr.title]=\"getColumnResizeHandleTooltip(column)\"\n (pointerdown)=\"onColumnResizePointerDown($event, column)\"\n (keydown)=\"onColumnResizeHandleKeydown($event, column)\"\n (click)=\"onColumnResizeHandleClick($event)\"\n ></span>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n [style.text-align]=\"getColumnTextAlignStyle(column)\"\n [style.width]=\"getColumnWidthStyle(column)\"\n [attr.style]=\"getColumnCellAttrStyle(column)\"\n [ngClass]=\"getCellClasses(element, column)\"\n [ngStyle]=\"getCellNgStyle(element, column)\"\n [matTooltip]=\"getCellTooltip(element, column) || ''\"\n [matTooltipPosition]=\"getCellTooltipPosition(element, column)\"\n [matTooltipDisabled]=\"!getCellTooltip(element, column)\"\n [attr.title]=\"getCellTooltip(element, column) || null\"\n >\n <div\n class=\"pfx-cell-content\"\n [ngClass]=\"getCellContentClasses(element, column)\"\n [ngStyle]=\"getCellContentNgStyle(element, column)\"\n >\n @switch (getEffectiveRendererType(element, column)) {\n <!-- Icon renderer -->\n @case ('icon') {\n <span\n class=\"pfx-icon-renderer\"\n [style.color]=\"getIconColor(element, column) || null\"\n [ngStyle]=\"getIconStyle(element, column)\"\n [attr.aria-label]=\"getIconAriaLabel(element, column) || null\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-icon-renderer__content\"\n [nodes]=\"getIconRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </span>\n }\n <!-- Image renderer -->\n @case ('image') {\n <span class=\"pfx-cell-image\">\n <praxis-rich-content\n rootClassName=\"pfx-cell-image__content\"\n [nodes]=\"getImageRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </span>\n }\n <!-- Badge renderer -->\n @case ('badge') {\n @if (shouldRenderBadge(element, column)) {\n <span class=\"pfx-badge\" [ngClass]=\"getBadgeClasses(element, column)\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-badge__content\"\n [nodes]=\"getBadgeRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </span>\n }\n }\n <!-- Link renderer -->\n @case ('link') {\n <a\n class=\"pfx-link\"\n [attr.href]=\"getLinkHref(element, column) || null\"\n [attr.target]=\"getLinkTarget(element, column) || null\"\n [attr.rel]=\"getLinkRel(element, column) || null\"\n (click)=\"$event.stopPropagation()\"\n ><praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-link__content\"\n [nodes]=\"getLinkRichContentNodes(element, column)\"\n ></praxis-rich-content></a\n >\n }\n <!-- Button renderer -->\n @case ('button') {\n @switch (getButtonVariant(element, column)) {\n @case ('outlined') {\n <button\n mat-stroked-button\n [color]=\"getButtonColor(element, column) || null\"\n [disabled]=\"isButtonDisabled(element, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(element, column) || getButtonLabel(element, column)\"\n (click)=\"onButtonClick(element, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </button>\n }\n @case ('text') {\n <button\n mat-button\n [color]=\"getButtonColor(element, column) || null\"\n [disabled]=\"isButtonDisabled(element, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(element, column) || getButtonLabel(element, column)\"\n (click)=\"onButtonClick(element, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </button>\n }\n @default {\n <button\n mat-flat-button\n [color]=\"getButtonColor(element, column) || null\"\n [disabled]=\"isButtonDisabled(element, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(element, column) || getButtonLabel(element, column)\"\n (click)=\"onButtonClick(element, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </button>\n }\n }\n }\n <!-- Chip renderer -->\n @case ('chip') {\n @if (shouldRenderChip(element, column)) {\n <span class=\"pfx-chip\" [ngClass]=\"getChipClasses(element, column)\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-chip__content\"\n [nodes]=\"getChipRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </span>\n }\n }\n <!-- Progress renderer -->\n @case ('progress') {\n <div class=\"pfx-progress\">\n <praxis-rich-content\n rootClassName=\"pfx-progress__content\"\n [context]=\"getProgressRichContentContext(element, column)\"\n [nodes]=\"getProgressRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </div>\n }\n <!-- Micro visualization renderer -->\n @case ('microVisualization') {\n <span class=\"pfx-micro-viz-cell\" [innerHTML]=\"getMicroVisualizationHtml(element, column)\"></span>\n }\n <!-- Avatar renderer -->\n @case ('avatar') {\n <span class=\"pfx-avatar-renderer\"\n [ngStyle]=\"getAvatarStyle(element, column)\"\n [class.shape-rounded]=\"getAvatarShape(element, column) === 'rounded'\"\n [class.shape-circle]=\"getAvatarShape(element, column) === 'circle'\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-avatar-renderer__content\"\n [nodes]=\"getAvatarRichContentNodes(element, column)\"\n ></praxis-rich-content>\n </span>\n }\n <!-- Toggle renderer -->\n @case ('toggle') {\n <mat-slide-toggle\n [checked]=\"getToggleState(element, column)\"\n [disabled]=\"isToggleDisabled(element, column)\"\n [attr.aria-label]=\"getToggleAriaLabel(element, column) || 'Alternar'\"\n (change)=\"onToggleChange(element, column, $event)\"\n (click)=\"$event.stopPropagation()\"\n ></mat-slide-toggle>\n }\n <!-- Menu renderer -->\n @case ('menu') {\n <button mat-icon-button [matMenuTriggerFor]=\"menuRef\" (click)=\"$event.stopPropagation()\" [attr.aria-label]=\"getMenuAriaLabel(element, column) || 'Menu'\">\n <praxis-rich-content rootClassName=\"pfx-menu-trigger__content\" [nodes]=\"getMenuTriggerRichContentNodes()\"></praxis-rich-content>\n </button>\n <mat-menu #menuRef=\"matMenu\">\n @for (it of getMenuItems(element, column); track it.id) {\n <button mat-menu-item (click)=\"onMenuItemClick(it, element, $event)\" [disabled]=\"!it.__visible\" >\n <praxis-rich-content\n rootClassName=\"pfx-menu-item__content\"\n [nodes]=\"getMenuItemRichContentNodes(it)\"\n ></praxis-rich-content>\n </button>\n }\n </mat-menu>\n }\n <!-- Rating renderer -->\n @case ('rating') {\n <praxis-table-rating\n class=\"pfx-rating-cell\"\n [itemsCount]=\"getRatingMax(element, column)\"\n [value]=\"getRatingValue(element, column)\"\n [size]=\"getRatingSize(element, column)\"\n [ratingColor]=\"getRatingColor(element, column)\"\n [outlineColor]=\"getRatingOutlineColor(element, column)\"\n [ariaLabel]=\"getRatingAriaLabel(element, column) || column.header\">\n </praxis-table-rating>\n }\n <!-- HTML renderer (sanitizado) -->\n @case ('html') {\n <span [innerHTML]=\"getSafeHtml(element, column)\"></span>\n }\n <!-- Compose renderer -->\n @case ('compose') {\n <span class=\"pfx-cell-compose\" [ngClass]=\"getComposeClasses(element, column)\" [ngStyle]=\"getComposeGapStyle(element, column)\">\n @for (it of getComposeItems(element, column); track trackComposeItem($index, it)) {\n @switch (getItemEffectiveType(element, column, it)) {\n <!-- Reuse helpers by projecting item as faux column -->\n @case ('icon') {\n <span class=\"pfx-icon-renderer\" [style.color]=\"getIconColor(element, asItemColumn(column, it)) || null\" [ngStyle]=\"getIconStyle(element, asItemColumn(column, it))\" [attr.aria-label]=\"getIconAriaLabel(element, asItemColumn(column, it)) || null\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-icon-renderer__content\" [nodes]=\"getIconRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></span>\n }\n @case ('image') {\n <span class=\"pfx-cell-image\"><praxis-rich-content rootClassName=\"pfx-cell-image__content\" [nodes]=\"getImageRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></span>\n }\n @case ('badge') {\n @if (shouldRenderBadge(element, asItemColumn(column, it))) {\n <span class=\"pfx-badge\" [ngClass]=\"getBadgeClasses(element, asItemColumn(column, it))\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-badge__content\" [nodes]=\"getBadgeRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></span>\n }\n }\n @case ('link') {\n <a class=\"pfx-link\" [attr.href]=\"getLinkHref(element, asItemColumn(column, it)) || null\" [attr.target]=\"getLinkTarget(element, asItemColumn(column, it)) || null\" [attr.rel]=\"getLinkRel(element, asItemColumn(column, it)) || null\" (click)=\"$event.stopPropagation()\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-link__content\" [nodes]=\"getLinkRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></a>\n }\n @case ('button') {\n @switch (getButtonVariant(element, asItemColumn(column, it))) {\n @case ('outlined') {\n <button mat-stroked-button [color]=\"getButtonColor(element, asItemColumn(column, it)) || null\" [disabled]=\"isButtonDisabled(element, asItemColumn(column, it))\" [attr.aria-label]=\"getButtonAriaLabel(element, asItemColumn(column, it)) || getButtonLabel(element, asItemColumn(column, it))\" (click)=\"onButtonClick(element, asItemColumn(column, it), $event)\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-button-renderer__content\" [nodes]=\"getButtonRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></button>\n }\n @case ('text') {\n <button mat-button [color]=\"getButtonColor(element, asItemColumn(column, it)) || null\" [disabled]=\"isButtonDisabled(element, asItemColumn(column, it))\" [attr.aria-label]=\"getButtonAriaLabel(element, asItemColumn(column, it)) || getButtonLabel(element, asItemColumn(column, it))\" (click)=\"onButtonClick(element, asItemColumn(column, it), $event)\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-button-renderer__content\" [nodes]=\"getButtonRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></button>\n }\n @default {\n <button mat-flat-button [color]=\"getButtonColor(element, asItemColumn(column, it)) || null\" [disabled]=\"isButtonDisabled(element, asItemColumn(column, it))\" [attr.aria-label]=\"getButtonAriaLabel(element, asItemColumn(column, it)) || getButtonLabel(element, asItemColumn(column, it))\" (click)=\"onButtonClick(element, asItemColumn(column, it), $event)\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-button-renderer__content\" [nodes]=\"getButtonRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></button>\n }\n }\n }\n @case ('chip') {\n @if (shouldRenderChip(element, asItemColumn(column, it))) {\n <span class=\"pfx-chip\" [ngClass]=\"getChipClasses(element, asItemColumn(column, it))\"><praxis-rich-content [layout]=\"'inline'\" rootClassName=\"pfx-chip__content\" [nodes]=\"getChipRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></span>\n }\n }\n @case ('progress') {\n <div class=\"pfx-progress\">\n <praxis-rich-content\n rootClassName=\"pfx-progress__content\"\n [context]=\"getProgressRichContentContext(element, asItemColumn(column, it))\"\n [nodes]=\"getProgressRichContentNodes(element, asItemColumn(column, it))\"\n ></praxis-rich-content>\n </div>\n }\n @case ('microVisualization') {\n <span class=\"pfx-micro-viz-cell\" [innerHTML]=\"getMicroVisualizationHtml(element, asItemColumn(column, it))\"></span>\n }\n @case ('avatar') {\n <span class=\"pfx-avatar-renderer\" [ngStyle]=\"getAvatarStyle(element, asItemColumn(column, it))\" [class.shape-rounded]=\"getAvatarShape(element, asItemColumn(column, it)) === 'rounded'\" [class.shape-circle]=\"getAvatarShape(element, asItemColumn(column, it)) === 'circle'\"><praxis-rich-content rootClassName=\"pfx-avatar-renderer__content\" [nodes]=\"getAvatarRichContentNodes(element, asItemColumn(column, it))\"></praxis-rich-content></span>\n }\n @case ('toggle') {\n <mat-slide-toggle [checked]=\"getToggleState(element, asItemColumn(column, it))\" [disabled]=\"isToggleDisabled(element, asItemColumn(column, it))\" [attr.aria-label]=\"getToggleAriaLabel(element, asItemColumn(column, it)) || 'Alternar'\" (change)=\"onToggleChange(element, asItemColumn(column, it), $event)\" (click)=\"$event.stopPropagation()\"></mat-slide-toggle>\n }\n @case ('menu') {\n <button mat-icon-button [matMenuTriggerFor]=\"menuRef\" (click)=\"$event.stopPropagation()\" [attr.aria-label]=\"getMenuAriaLabel(element, asItemColumn(column, it)) || 'Menu'\"><praxis-rich-content rootClassName=\"pfx-menu-trigger__content\" [nodes]=\"getMenuTriggerRichContentNodes()\"></praxis-rich-content></button>\n <mat-menu #menuRef=\"matMenu\">\n @for (mi of getMenuItems(element, asItemColumn(column, it)); track mi.id) {\n <button mat-menu-item (click)=\"onMenuItemClick(mi, element, $event)\" [disabled]=\"!mi.__visible\">\n <praxis-rich-content\n rootClassName=\"pfx-menu-item__content\"\n [nodes]=\"getMenuItemRichContentNodes(mi)\"\n ></praxis-rich-content>\n </button>\n }\n </mat-menu>\n }\n @case ('rating') {\n <praxis-table-rating\n class=\"pfx-rating-cell\"\n [itemsCount]=\"getRatingMax(element, asItemColumn(column, it))\"\n [value]=\"getRatingValue(element, asItemColumn(column, it))\"\n [size]=\"getRatingSize(element, asItemColumn(column, it))\"\n [ratingColor]=\"getRatingColor(element, asItemColumn(column, it))\"\n [outlineColor]=\"getRatingOutlineColor(element, asItemColumn(column, it))\"\n [ariaLabel]=\"getRatingAriaLabel(element, asItemColumn(column, it)) || column.header\">\n </praxis-table-rating>\n }\n @case ('html') {\n <span [innerHTML]=\"getSafeHtml(element, asItemColumn(column, it))\"></span>\n }\n <!-- Value item: render base cell text alongside visuals -->\n @case ('value') {\n <span class=\"pfx-cell-value\">{{ getComposeItemValue(element, column, it) }}</span>\n }\n }\n }\n </span>\n }\n <!-- Default text rendering -->\n @default {\n {{ getCellValue(element, column) }}\n }\n }\n </div>\n </td>\n </ng-container>\n }\n @if (config.actions?.row?.enabled) {\n <ng-container matColumnDef=\"_actions\" [sticky]=\"config.actions?.row?.sticky === true || config.actions?.row?.sticky === 'start'\" [stickyEnd]=\"config.actions?.row?.sticky === 'end'\">\n <th mat-header-cell *matHeaderCellDef #actionsHeaderCell [style.width]=\"getRowActionsWidthStyle()\" class=\"praxis-actions-header\" [class.align-start]=\"getActionsHeaderAlign() === 'start'\" [class.align-center]=\"getActionsHeaderAlign() === 'center'\" [class.align-end]=\"getActionsHeaderAlign() === 'end'\">\n <div class=\"praxis-actions-header__content\" [matTooltip]=\"getActionsHeaderTooltip() || ''\" [matTooltipDisabled]=\"!getActionsHeaderTooltip()\">\n <praxis-rich-content\n rootClassName=\"praxis-actions-header__nodes\"\n [nodes]=\"getActionsHeaderRichContentNodes()\"\n ></praxis-rich-content>\n </div>\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"praxis-actions-cell\"\n [class.dense]=\"dense\"\n [style.width]=\"getRowActionsWidthStyle()\"\n >\n <div\n class=\"praxis-actions-cell__content\"\n [class.praxis-actions-cell__content--discovering]=\"isRowDiscoveryPending(row)\"\n [attr.aria-busy]=\"isRowDiscoveryPending(row) ? 'true' : null\"\n >\n <!-- A\u00C3\u00A7\u00C3\u00B5es inline -->\n <!-- Inline actions: icons mode -->\n @if (config.actions?.row?.display === 'icons' || !config.actions?.row?.display) {\n @for (a of getInlineRowActions(row); track trackAction($index, a)) {\n <span\n class=\"praxis-row-action-anchor\"\n [class.praxis-row-action-anchor--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-action-anchor--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [matTooltip]=\"getActionTooltip(a, row)\"\n [matTooltipDisabled]=\"!getActionTooltip(a, row)\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"praxis-tooltip\"\n >\n <button\n mat-icon-button\n class=\"praxis-icon-btn\"\n [class.praxis-icon-btn--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-icon-btn--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [disabled]=\"isActionDisabled(a, row)\"\n (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\"\n [attr.aria-label]=\"a.label || getActionId(a)\"\n [color]=\"a.color || null\"\n >\n <praxis-rich-content\n layout=\"inline\"\n rootClassName=\"praxis-row-action__content\"\n [nodes]=\"getRowActionIconRichContentNodes(a)\"\n ></praxis-rich-content>\n </button>\n </span>\n }\n }\n\n <!-- Inline actions: buttons mode (show label + icon) -->\n @if (config.actions?.row?.display === 'buttons') {\n @for (a of getInlineRowActions(row); track trackAction($index, a)) {\n <span\n class=\"praxis-row-action-anchor\"\n [class.praxis-row-action-anchor--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-action-anchor--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [matTooltip]=\"getActionTooltip(a, row)\"\n [matTooltipDisabled]=\"!getActionTooltip(a, row)\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"praxis-tooltip\"\n >\n <button\n mat-flat-button\n class=\"praxis-row-btn\"\n [class.praxis-row-btn--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-btn--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [disabled]=\"isActionDisabled(a, row)\"\n (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\"\n [attr.aria-label]=\"a.label || getActionId(a)\"\n [color]=\"a.color || null\"\n >\n <praxis-rich-content\n layout=\"inline\"\n rootClassName=\"praxis-row-action__content\"\n [nodes]=\"getRowActionRichContentNodes(a)\"\n ></praxis-rich-content>\n </button>\n </span>\n }\n }\n\n <!-- Menu de overflow -->\n @if (hasOverflowRowActions(row)) {\n <button\n mat-icon-button\n class=\"praxis-icon-btn praxis-more-btn\"\n [matMenuTriggerFor]=\"rowMoreMenu\"\n (menuOpened)=\"onRowOverflowMenuOpened(row)\"\n [color]=\"getRowMenuButtonColor() || null\"\n [attr.aria-label]=\"getRowMenuTooltip(row)\"\n [matTooltip]=\"getRowMenuTooltip(row)\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"getRowMenuIcon()\"></mat-icon>\n </button>\n }\n <mat-menu #rowMoreMenu=\"matMenu\" xPosition=\"before\">\n @if (hasRowOverflowMenuLoadingState(row)) {\n <button mat-menu-item disabled>\n <mat-icon>hourglass_empty</mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(getRowOverflowMenuLoadingLabel(), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n @for (a of getOverflowRowActions(row); track trackAction($index, a)) {\n <button\n mat-menu-item\n (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\"\n [disabled]=\"isActionDisabled(a, row)\"\n >\n <mat-icon [color]=\"a.color || null\" [praxisIcon]=\"a.icon\"></mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(a.label || getActionId(a), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n @if (hasRowOverflowMenuEmptyState(row)) {\n <button mat-menu-item disabled>\n <mat-icon>info</mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(getRowOverflowMenuEmptyLabel(row), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n </mat-menu>\n </div>\n </td>\n </ng-container>\n }\n\n <tr\n mat-header-row\n *matHeaderRowDef=\"displayedColumns\"\n ></tr>\n @if (!isVirtualized()) {\n <tr\n mat-row\n *matRowDef=\"let row; let i = index; columns: displayedColumns\"\n [class.pfx-row-selected]=\"selection.isSelected(row)\"\n [class.pfx-row-click-selectable]=\"isRowClickSelectable()\"\n [class.pfx-row-expanded]=\"isRowExpansionRuntimeEnabled() && isRowExpanded(row, i)\"\n [attr.aria-selected]=\"config.behavior?.selection?.enabled ? (selection.isSelected(row) ? 'true' : 'false') : null\"\n [attr.aria-expanded]=\"isRowExpansionRuntimeEnabled() ? (isRowExpanded(row, i) ? 'true' : 'false') : null\"\n [ngClass]=\"getRowClasses(row)\"\n [ngStyle]=\"getRowNgStyle(row)\"\n [matTooltip]=\"getRowTooltip(row) || null\"\n [matTooltipDisabled]=\"!getRowTooltip(row)\"\n [matTooltipPosition]=\"getRowTooltipPosition(row)\"\n [matTooltipShowDelay]=\"getRowTooltipShowDelay(row)\"\n (click)=\"onRowClicked(row, i, $event)\"\n (dblclick)=\"onRowDoubleClicked(row, i)\"\n ></tr>\n @if (isRowExpansionRuntimeEnabled()) {\n <ng-container matColumnDef=\"_detail\">\n <td\n mat-cell\n *matCellDef=\"let row; let i = index\"\n class=\"pfx-expansion-detail-cell\"\n [attr.colspan]=\"displayedColumns.length\"\n >\n <section\n class=\"pfx-expansion-detail-panel\"\n [ngClass]=\"getExpansionMotionPresetClass()\"\n [ngStyle]=\"getExpansionMotionStyle()\"\n [attr.id]=\"getRowExpansionDetailId(row, i)\"\n role=\"region\"\n [attr.aria-label]=\"getRowExpansionRegionAriaLabel(row, i)\"\n [attr.aria-busy]=\"getExpansionDetailViewState(row, i).status === 'loading' ? 'true' : 'false'\"\n >\n @let detailState = getExpansionDetailViewState(row, i);\n @if (detailState.status === 'loading') {\n <div class=\"pfx-expansion-detail-message\" role=\"status\" aria-live=\"polite\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-detail-message__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Carregando detail schema...', 'pfx-expansion-detail-message__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, i)\"\n ></praxis-rich-content>\n </div>\n } @else if (detailState.status !== 'ready') {\n <div\n class=\"pfx-expansion-detail-message pfx-expansion-detail-message--error\"\n role=\"alert\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n >\n <praxis-rich-content\n rootClassName=\"pfx-expansion-detail-message__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(detailState.message || 'Detail indispon\u00EDvel para esta linha.', 'pfx-expansion-detail-message__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, i)\"\n ></praxis-rich-content>\n </div>\n } @else {\n @if (getExpansionDetailLayout(detailState.schema) === 'tabs') {\n @let detailTabs = getExpansionDetailTabs(detailState.schema);\n @if (detailTabs.length) {\n <div class=\"pfx-expansion-detail-tabs\" role=\"tablist\" aria-label=\"Se\u00C3\u00A7\u00C3\u00B5es do detail\">\n @for (tab of detailTabs; track $index; let tabIndex = $index) {\n <button\n type=\"button\"\n class=\"pfx-expansion-detail-tab-btn\"\n role=\"tab\"\n [attr.id]=\"getExpansionDetailTabId(row, i, tab, tabIndex)\"\n [attr.aria-controls]=\"getExpansionDetailPanelId(row, i, tab, tabIndex)\"\n [attr.aria-selected]=\"isExpansionDetailTabActive(row, i, tab, tabIndex, detailTabs) ? 'true' : 'false'\"\n [attr.tabindex]=\"isExpansionDetailTabActive(row, i, tab, tabIndex, detailTabs) ? '0' : '-1'\"\n [class.is-active]=\"isExpansionDetailTabActive(row, i, tab, tabIndex, detailTabs)\"\n (click)=\"onExpansionDetailTabSelect(row, i, tab, tabIndex, $event)\"\n (keydown)=\"onExpansionDetailTabKeydown($event, row, i, tabIndex, detailTabs)\"\n >\n <praxis-rich-content\n rootClassName=\"pfx-expansion-detail-tab-btn__content\"\n [nodes]=\"getExpansionDetailTabButtonRichContentNodes(tab)\"\n [context]=\"getExpansionDetailRichContentContext(row, i)\"\n ></praxis-rich-content>\n </button>\n }\n </div>\n @for (tab of detailTabs; track $index; let tabIndex = $index) {\n @if (isExpansionDetailTabActive(row, i, tab, tabIndex, detailTabs)) {\n <div\n class=\"pfx-expansion-detail-tab-panel\"\n role=\"tabpanel\"\n [attr.id]=\"getExpansionDetailPanelId(row, i, tab, tabIndex)\"\n [attr.aria-labelledby]=\"getExpansionDetailTabId(row, i, tab, tabIndex)\"\n >\n @if (getExpansionDetailTabRichContentNodes(tab, row, i); as richNodes) {\n <praxis-rich-content\n class=\"pfx-expansion-node-host pfx-expansion-node-host--tab\"\n [nodes]=\"richNodes\"\n [context]=\"getExpansionDetailRichContentContext(row, i)\"\n ></praxis-rich-content>\n } @else {\n @for (childNode of getExpansionDetailNodeChildren(tab); track $index) {\n <ng-container\n *ngTemplateOutlet=\"\n expansionDetailNodeTemplate;\n context: { $implicit: childNode, row: row, index: i }\n \"\n ></ng-container>\n }\n }\n </div>\n }\n }\n } @else {\n <div class=\"pfx-expansion-detail-message\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-detail-message__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Schema em layout tabs sem abas v\u00E1lidas.', 'pfx-expansion-detail-message__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, i)\"\n ></praxis-rich-content>\n </div>\n }\n } @else {\n <div class=\"pfx-expansion-detail-stack\">\n @for (node of getExpansionDetailItems(detailState.schema); track $index) {\n <ng-container\n *ngTemplateOutlet=\"\n expansionDetailNodeTemplate;\n context: { $implicit: node, row: row, index: i }\n \"\n ></ng-container>\n }\n </div>\n }\n }\n\n <ng-template #expansionDetailNodeTemplate let-node let-row=\"row\" let-index=\"index\">\n @if (getExpansionDetailRichContentNodes(node, row, index); as richNodes) {\n <praxis-rich-content\n class=\"pfx-expansion-node-host\"\n [nodes]=\"richNodes\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n } @else {\n @switch (getExpansionDetailNodeType(node)) {\n @case ('list') {\n <section class=\"pfx-expansion-node pfx-expansion-node-list\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-list__title\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailNodeTitle(node, 'Lista'), 'pfx-expansion-node-list__title-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @let listItems = getExpansionDetailListItems(row, node);\n @let listEntries = getExpansionDetailListEntries(row, node);\n @if (listItems.length) {\n <ul>\n @for (entry of listEntries; track $index) {\n <li>\n @if (getExpansionDetailListItemRichContentNodes(entry); as richNodes) {\n <praxis-rich-content\n class=\"pfx-expansion-node-list__item-host\"\n [nodes]=\"richNodes\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n } @else {\n {{ formatExpansionDetailListEntry(entry) }}\n }\n </li>\n }\n </ul>\n } @else {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Sem itens.', 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </section>\n }\n @case ('detailList') {\n <section class=\"pfx-expansion-node pfx-expansion-node-rich-list\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-rich-list__title\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailNodeTitle(node, 'Cole\u00E7\u00E3o rica'), 'pfx-expansion-node-rich-list__title-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @let richListEntries = getExpansionDetailRichListEntries(row, node);\n @if (richListEntries.length) {\n <div class=\"pfx-expansion-node-rich-list__items\">\n @for (entry of richListEntries; track $index) {\n <article [class]=\"getExpansionDetailRichListItemClassName(node)\">\n <praxis-rich-content\n class=\"pfx-expansion-node-rich-list__item-host\"\n [nodes]=\"getExpansionDetailRichListItemNodes(node)\"\n [context]=\"getExpansionDetailRichListItemContext(row, index, node, entry, $index)\"\n ></praxis-rich-content>\n @let itemActions = getExpansionDetailRichListItemActions(node, row, index, entry, $index);\n @if (itemActions.length) {\n <div class=\"pfx-expansion-node-rich-list__item-actions\">\n @for (action of itemActions; track action.actionId) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-rich-list__item-action-btn\"\n [disabled]=\"isExpansionDetailRichListItemActionDisabled(action, row, index, node, entry, $index)\"\n (click)=\"onExpansionDetailRichListItemAction(action, row, index, node, entry, $index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-rich-list__item-action-host\"\n [nodes]=\"getExpansionDetailRichListItemActionNodes(action)\"\n [context]=\"getExpansionDetailRichListItemContext(row, index, node, entry, $index)\"\n ></praxis-rich-content>\n </button>\n }\n </div>\n }\n </article>\n }\n </div>\n } @else {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailRichListEmptyText(node), 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </section>\n }\n @case ('card') {\n <section class=\"pfx-expansion-node pfx-expansion-node-card\">\n <header class=\"pfx-expansion-node-card__header\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-card__title\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailNodeTitle(node, 'Card'), 'pfx-expansion-node-card__title-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (node?.subtitle) {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-card__subtitle\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(node.subtitle, 'pfx-expansion-node-card__subtitle-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </header>\n @if (getExpansionDetailNodeChildren(node).length) {\n <div class=\"pfx-expansion-node-card__content\">\n @for (childNode of getExpansionDetailNodeChildren(node); track $index) {\n <ng-container\n *ngTemplateOutlet=\"\n expansionDetailNodeTemplate;\n context: { $implicit: childNode, row: row, index: index }\n \"\n ></ng-container>\n }\n </div>\n }\n </section>\n }\n @case ('cardGrid') {\n <section class=\"pfx-expansion-node pfx-expansion-node-card-grid\">\n @if (getExpansionDetailCardGridHeaderNodes(node); as cardGridHeaderNodes) {\n @if (cardGridHeaderNodes.length) {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-card-grid__header\"\n [nodes]=\"cardGridHeaderNodes\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n }\n @let gridCards = getExpansionDetailCardGridCards(node);\n @if (gridCards.length) {\n <div\n class=\"pfx-expansion-node-card-grid__cards\"\n [ngStyle]=\"getExpansionDetailCardGridStyles(node)\"\n >\n @for (card of gridCards; track $index) {\n <praxis-rich-content\n class=\"pfx-expansion-node-card-grid__card-host\"\n [nodes]=\"getExpansionDetailCardGridCardNodes(card)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </div>\n } @else {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Sem itens.', 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </section>\n }\n @case ('richText') {\n <div\n class=\"pfx-expansion-node pfx-expansion-node-richtext\"\n [innerHTML]=\"getExpansionDetailRichText(node)\"\n ></div>\n }\n @case ('formRef') {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__meta\"\n [nodes]=\"getExpansionDetailEmbedMetaNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__empty\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailEmbedEmptyText(node), 'pfx-expansion-node-embed__empty-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n }\n @case ('tableRef') {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__meta\"\n [nodes]=\"getExpansionDetailEmbedMetaNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__empty\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailEmbedEmptyText(node), 'pfx-expansion-node-embed__empty-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n }\n @case ('chartRef') {\n @if (getExpansionDetailInlineRendererView(node, row, index); as inlineRenderer) {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed pfx-expansion-node-embed--inline pfx-expansion-node-embed--chart\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <ng-container\n *ngComponentOutlet=\"inlineRenderer.component; inputs: inlineRenderer.inputs\"\n ></ng-container>\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n } @else {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__meta\"\n [nodes]=\"getExpansionDetailEmbedMetaNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__empty\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailEmbedEmptyText(node), 'pfx-expansion-node-embed__empty-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n }\n }\n @case ('templateRef') {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__meta\"\n [nodes]=\"getExpansionDetailEmbedMetaNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__empty\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailEmbedEmptyText(node), 'pfx-expansion-node-embed__empty-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n }\n @case ('diagramEmbed') {\n <section class=\"pfx-expansion-node pfx-expansion-node-embed\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__header\"\n [nodes]=\"getExpansionDetailEmbedHeaderNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__meta\"\n [nodes]=\"getExpansionDetailEmbedMetaNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @if (getExpansionDetailDiagramSource(row, node); as diagramSource) {\n <div class=\"pfx-expansion-node-embed__diagram\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__diagram-label\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailDiagramSourceLabel(), 'pfx-expansion-node-embed__diagram-label-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <pre class=\"pfx-expansion-node-embed__diagram-source\">{{ diagramSource }}</pre>\n </div>\n } @else {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-embed__empty\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailEmbedEmptyText(node), 'pfx-expansion-node-embed__empty-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n @if (getExpansionDetailEmbedAction(node, row, index); as embedAction) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-embed__action-btn\"\n [disabled]=\"isExpansionDetailEmbedActionDisabled(embedAction, row, index)\"\n (click)=\"onExpansionDetailEmbedAction(embedAction, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-embed__action-host\"\n [nodes]=\"getExpansionDetailEmbedActionNodes(embedAction)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </section>\n }\n @case ('action') {\n <div class=\"pfx-expansion-node pfx-expansion-node-action\">\n <button\n type=\"button\"\n mat-stroked-button\n [disabled]=\"isExpansionDetailActionDisabled(node)\"\n (click)=\"onExpansionDetailAction(node, row, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-action__content\"\n [nodes]=\"getExpansionDetailActionRichContentNodes(node)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n @if (getExpansionDetailActionStatusText(node); as actionStatusText) {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-action__status\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(actionStatusText, 'pfx-expansion-node-action__status-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </div>\n }\n @case ('actionBar') {\n <section class=\"pfx-expansion-node pfx-expansion-node-action-bar\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-action-bar__title\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailActionBarTitle(node), 'pfx-expansion-node-action-bar__title-text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n @let actionBarActions = getExpansionDetailActionBarActions(node, row, index);\n @if (actionBarActions.length) {\n <div class=\"pfx-expansion-node-action-bar__actions\">\n @for (action of actionBarActions; track action.actionId) {\n <button\n type=\"button\"\n mat-stroked-button\n class=\"pfx-expansion-node-action-bar__action-btn\"\n [disabled]=\"isExpansionDetailActionBarActionDisabled(action, row, index)\"\n (click)=\"onExpansionDetailActionBarAction(action, row, index, $event)\"\n >\n <praxis-rich-content\n class=\"pfx-expansion-node-action-bar__action-host\"\n [nodes]=\"getExpansionDetailActionBarActionNodes(action)\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </button>\n }\n </div>\n } @else {\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder\"\n [nodes]=\"getExpansionDetailTextRichContentNodes(getExpansionDetailActionBarEmptyText(node), 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n }\n </section>\n }\n @case ('tab') {\n <div class=\"pfx-expansion-node pfx-expansion-node-placeholder\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Node', 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <code>tab</code>\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('fora de contexto de tabs.', 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n </div>\n }\n @default {\n <div class=\"pfx-expansion-node pfx-expansion-node-placeholder\">\n <praxis-rich-content\n rootClassName=\"pfx-expansion-node-placeholder__content\"\n [nodes]=\"getExpansionDetailTextRichContentNodes('Node n\u00E3o suportado:', 'pfx-expansion-node-placeholder__text')\"\n [context]=\"getExpansionDetailRichContentContext(row, index)\"\n ></praxis-rich-content>\n <code>{{ getExpansionDetailNodeType(node) }}</code>\n </div>\n }\n }\n }\n </ng-template>\n </section>\n </td>\n </ng-container>\n <tr\n mat-row\n *matRowDef=\"let row; columns: expansionDetailRowColumns; when: isExpansionDetailRow\"\n class=\"pfx-expansion-detail-row\"\n ></tr>\n }\n }\n </table>\n }\n\n <!-- Virtual rows path (header preserved above) -->\n @if (shouldRenderDataSurface() && !schemaError && !dataError && isVirtualized()) {\n <cdk-virtual-scroll-viewport\n class=\"ptable-viewport\"\n [itemSize]=\"getVirtItemHeight()\"\n [minBufferPx]=\"getVirtBufferSize() * getVirtItemHeight()\"\n [maxBufferPx]=\"getVirtBufferSize() * getVirtItemHeight() * 2\"\n [style.minHeight]=\"getVirtMinHeightHostStyle()\"\n >\n <table\n class=\"mat-mdc-table\"\n [ngClass]=\"getTableElevationClassName()\"\n [class.table-stack-top]=\"hasTopToolbarStack()\"\n [style.width]=\"getVirtualTableWidthStyle()\"\n >\n <tbody>\n <tr class=\"mat-mdc-row\"\n *cdkVirtualFor=\"let row of dataSource.data; let i = index; trackBy: trackByRow\"\n [class.pfx-row-selected]=\"selection.isSelected(row)\"\n [class.pfx-row-click-selectable]=\"isRowClickSelectable()\"\n [attr.aria-selected]=\"config.behavior?.selection?.enabled ? (selection.isSelected(row) ? 'true' : 'false') : null\"\n [ngClass]=\"getRowClasses(row)\"\n [ngStyle]=\"getRowNgStyle(row)\"\n [matTooltip]=\"getRowTooltip(row) || null\"\n [matTooltipDisabled]=\"!getRowTooltip(row)\"\n [matTooltipPosition]=\"getRowTooltipPosition(row)\"\n [matTooltipShowDelay]=\"getRowTooltipShowDelay(row)\"\n (click)=\"onRowClicked(row, i, $event)\"\n (dblclick)=\"onRowDoubleClicked(row, i)\">\n <!-- Selection column -->\n @if (isSelectionColumnEnabled()) { <td class=\"mat-mdc-cell\">\n <mat-checkbox\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleRow(row)\"\n [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </td> }\n <!-- Data columns -->\n @for (column of visibleColumns; track column.field) {\n <td class=\"mat-mdc-cell\"\n [style.text-align]=\"getColumnTextAlignStyle(column)\"\n [style.width]=\"getColumnWidthStyle(column)\"\n [attr.style]=\"getColumnCellAttrStyle(column)\"\n [ngClass]=\"getCellClasses(row, column)\"\n [ngStyle]=\"getCellNgStyle(row, column)\"\n [matTooltip]=\"getCellTooltip(row, column) || ''\"\n [matTooltipPosition]=\"getCellTooltipPosition(row, column)\"\n [matTooltipDisabled]=\"!getCellTooltip(row, column)\"\n [attr.title]=\"getCellTooltip(row, column) || null\">\n <div\n class=\"pfx-cell-content\"\n [ngClass]=\"getCellContentClasses(row, column)\"\n [ngStyle]=\"getCellContentNgStyle(row, column)\"\n >\n @switch (getEffectiveRendererType(row, column)) {\n @case ('icon') {\n <span class=\"pfx-icon-renderer\"\n [style.color]=\"getIconColor(row, column) || null\"\n [ngStyle]=\"getIconStyle(row, column)\"\n [attr.aria-label]=\"getIconAriaLabel(row, column) || null\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-icon-renderer__content\"\n [nodes]=\"getIconRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </span>\n }\n @case ('image') {\n <span class=\"pfx-cell-image\">\n <praxis-rich-content\n rootClassName=\"pfx-cell-image__content\"\n [nodes]=\"getImageRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </span>\n }\n @case ('badge') {\n @if (shouldRenderBadge(row, column)) {\n <span class=\"pfx-badge\" [ngClass]=\"getBadgeClasses(row, column)\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-badge__content\"\n [nodes]=\"getBadgeRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </span>\n }\n }\n @case ('chip') {\n @if (shouldRenderChip(row, column)) {\n <span class=\"pfx-chip\" [ngClass]=\"getChipClasses(row, column)\">\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-chip__content\"\n [nodes]=\"getChipRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </span>\n }\n }\n @case ('progress') {\n <div class=\"pfx-progress\">\n <praxis-rich-content\n rootClassName=\"pfx-progress__content\"\n [context]=\"getProgressRichContentContext(row, column)\"\n [nodes]=\"getProgressRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </div>\n }\n @case ('microVisualization') {\n <span class=\"pfx-micro-viz-cell\" [innerHTML]=\"getMicroVisualizationHtml(row, column)\"></span>\n }\n @case ('avatar') {\n <span\n class=\"pfx-avatar-renderer\"\n [ngStyle]=\"getAvatarStyle(row, column)\"\n [class.shape-rounded]=\"getAvatarShape(row, column) === 'rounded'\"\n [class.shape-circle]=\"getAvatarShape(row, column) === 'circle'\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-avatar-renderer__content\"\n [nodes]=\"getAvatarRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </span>\n }\n @case ('link') {\n <a\n class=\"pfx-link\"\n [attr.href]=\"getLinkHref(row, column) || null\"\n [attr.target]=\"getLinkTarget(row, column) || null\"\n [attr.rel]=\"getLinkRel(row, column) || null\"\n (click)=\"$event.stopPropagation()\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-link__content\"\n [nodes]=\"getLinkRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </a>\n }\n @case ('button') {\n @switch (getButtonVariant(row, column)) {\n @case ('outlined') {\n <button\n mat-stroked-button\n [color]=\"getButtonColor(row, column) || null\"\n [disabled]=\"isButtonDisabled(row, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(row, column) || getButtonLabel(row, column)\"\n (click)=\"onButtonClick(row, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </button>\n }\n @case ('text') {\n <button\n mat-button\n [color]=\"getButtonColor(row, column) || null\"\n [disabled]=\"isButtonDisabled(row, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(row, column) || getButtonLabel(row, column)\"\n (click)=\"onButtonClick(row, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </button>\n }\n @default {\n <button\n mat-flat-button\n [color]=\"getButtonColor(row, column) || null\"\n [disabled]=\"isButtonDisabled(row, column)\"\n [attr.aria-label]=\"getButtonAriaLabel(row, column) || getButtonLabel(row, column)\"\n (click)=\"onButtonClick(row, column, $event)\"\n >\n <praxis-rich-content\n [layout]=\"'inline'\"\n rootClassName=\"pfx-button-renderer__content\"\n [nodes]=\"getButtonRichContentNodes(row, column)\"\n ></praxis-rich-content>\n </button>\n }\n }\n }\n @case ('menu') {\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"menuRef\"\n (click)=\"$event.stopPropagation()\"\n [attr.aria-label]=\"getMenuAriaLabel(row, column) || 'Menu'\"\n >\n <praxis-rich-content\n rootClassName=\"pfx-menu-trigger__content\"\n [nodes]=\"getMenuTriggerRichContentNodes()\"\n ></praxis-rich-content>\n </button>\n <mat-menu #menuRef=\"matMenu\">\n @for (it of getMenuItems(row, column); track it.id) {\n <button\n mat-menu-item\n (click)=\"onMenuItemClick(it, row, $event)\"\n [disabled]=\"!it.__visible\"\n >\n <praxis-rich-content\n rootClassName=\"pfx-menu-item__content\"\n [nodes]=\"getMenuItemRichContentNodes(it)\"\n ></praxis-rich-content>\n </button>\n }\n </mat-menu>\n }\n @default {\n {{ getCellValue(row, column) }}\n }\n }\n </div>\n </td>\n }\n\n <!-- Actions column -->\n @if (config.actions?.row?.enabled) {\n <td class=\"mat-mdc-cell praxis-actions-cell\" [class.dense]=\"dense\" [style.width]=\"getRowActionsWidthStyle()\">\n <div\n class=\"praxis-actions-cell__content\"\n [class.praxis-actions-cell__content--discovering]=\"isRowDiscoveryPending(row)\"\n [attr.aria-busy]=\"isRowDiscoveryPending(row) ? 'true' : null\"\n >\n @if (config.actions?.row?.display === 'icons' || !config.actions?.row?.display) {\n @for (a of getInlineRowActions(row); track trackAction($index, a)) {\n <span\n class=\"praxis-row-action-anchor\"\n [class.praxis-row-action-anchor--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-action-anchor--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [matTooltip]=\"getActionTooltip(a, row)\"\n [matTooltipDisabled]=\"!getActionTooltip(a, row)\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"praxis-tooltip\"\n >\n <button mat-icon-button class=\"praxis-icon-btn\"\n [class.praxis-icon-btn--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-icon-btn--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [disabled]=\"isActionDisabled(a, row)\"\n (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\"\n [attr.aria-label]=\"a.label || getActionId(a)\"\n [color]=\"a.color || null\">\n <praxis-rich-content\n layout=\"inline\"\n rootClassName=\"praxis-row-action__content\"\n [nodes]=\"getRowActionIconRichContentNodes(a)\"\n ></praxis-rich-content>\n </button>\n </span>\n }\n }\n @if (config.actions?.row?.display === 'buttons') {\n @for (a of getInlineRowActions(row); track trackAction($index, a)) {\n <span\n class=\"praxis-row-action-anchor\"\n [class.praxis-row-action-anchor--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-action-anchor--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [matTooltip]=\"getActionTooltip(a, row)\"\n [matTooltipDisabled]=\"!getActionTooltip(a, row)\"\n matTooltipPosition=\"above\"\n matTooltipClass=\"praxis-tooltip\"\n >\n <button mat-flat-button class=\"praxis-row-btn\"\n [class.praxis-row-btn--workflow]=\"isWorkflowRowAction(a)\"\n [class.praxis-row-btn--blocked]=\"isBlockedWorkflowRowAction(a, row)\"\n [disabled]=\"isActionDisabled(a, row)\"\n (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\"\n [attr.aria-label]=\"a.label || getActionId(a)\"\n [color]=\"a.color || null\">\n <praxis-rich-content\n layout=\"inline\"\n rootClassName=\"praxis-row-action__content\"\n [nodes]=\"getRowActionRichContentNodes(a)\"\n ></praxis-rich-content>\n </button>\n </span>\n }\n }\n @if (hasOverflowRowActions(row)) {\n <button mat-icon-button class=\"praxis-icon-btn praxis-more-btn\"\n [matMenuTriggerFor]=\"rowMoreMenuV\"\n (menuOpened)=\"onRowOverflowMenuOpened(row)\"\n [color]=\"getRowMenuButtonColor() || null\"\n [attr.aria-label]=\"getRowMenuTooltip(row)\"\n [matTooltip]=\"getRowMenuTooltip(row)\"\n matTooltipPosition=\"above\">\n <mat-icon [praxisIcon]=\"getRowMenuIcon()\"></mat-icon>\n </button>\n }\n <mat-menu #rowMoreMenuV=\"matMenu\" xPosition=\"before\">\n @if (hasRowOverflowMenuLoadingState(row)) {\n <button mat-menu-item disabled>\n <mat-icon>hourglass_empty</mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(getRowOverflowMenuLoadingLabel(), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n @for (a of getOverflowRowActions(row); track trackAction($index, a)) {\n <button mat-menu-item (click)=\"onRowAction(getActionId(a), row, $event, getRowActionRuntimeOptions(a, row))\" [disabled]=\"isActionDisabled(a, row)\">\n <mat-icon [color]=\"a.color || null\" [praxisIcon]=\"a.icon\"></mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(a.label || getActionId(a), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n @if (hasRowOverflowMenuEmptyState(row)) {\n <button mat-menu-item disabled>\n <mat-icon>info</mat-icon>\n <praxis-rich-content\n rootClassName=\"praxis-row-overflow-menu__label\"\n [nodes]=\"getTableChromeTextRichContentNodes(getRowOverflowMenuEmptyLabel(row), 'praxis-row-overflow-menu__label-text')\"\n ></praxis-rich-content>\n </button>\n }\n </mat-menu>\n </div>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n }\n\n</div>\n@if (shouldShowLoadingSurface()) {\n <div class=\"ptable-loading-state\" role=\"status\" aria-live=\"polite\">\n <div class=\"ptable-loading-state__hero\" aria-hidden=\"true\">\n <span class=\"ptable-loading-state__line ptable-loading-state__line--wide\"></span>\n <span class=\"ptable-loading-state__line ptable-loading-state__line--short\"></span>\n <div class=\"ptable-loading-state__rows\">\n @for (placeholder of [1, 2, 3]; track placeholder) {\n <div class=\"ptable-loading-state__row\">\n <span class=\"ptable-loading-state__cell ptable-loading-state__cell--short\"></span>\n <span class=\"ptable-loading-state__cell\"></span>\n <span class=\"ptable-loading-state__cell ptable-loading-state__cell--wide\"></span>\n </div>\n }\n </div>\n </div>\n <div class=\"ptable-loading-state__message\">\n {{ getLoadingSurfaceMessage() }}\n </div>\n </div>\n}\n@if (shouldShowNoDataState()) {\n <div\n class=\"ptable-no-data-state\"\n [style.--p-table-empty-action-size]=\"getNoDataStateActionSize()\"\n >\n <span class=\"ptable-no-data-state__announcement\" role=\"status\" aria-live=\"polite\">\n {{ getNoDataStateTitle() }}. {{ getNoDataStateDescription() }}\n </span>\n <praxis-empty-state-card\n [icon]=\"getNoDataStateIcon()\"\n [title]=\"getNoDataStateTitle()\"\n [description]=\"getNoDataStateDescription()\"\n [primaryAction]=\"getNoDataStatePrimaryAction()\"\n [secondaryActions]=\"getNoDataStateSecondaryActions()\"\n [inline]=\"true\"\n [tone]=\"getNoDataStateTone()\"\n [variant]=\"getNoDataStateVariant()\"\n [alignment]=\"getNoDataStateAlignment()\"\n [density]=\"getNoDataStateDensity()\"\n [iconContainer]=\"getNoDataStateIconContainer()\"\n ></praxis-empty-state-card>\n </div>\n}\n@if (\n shouldRenderDataSurface()\n && !schemaError\n && !dataError\n && shouldRenderFloatingBulkActions()\n && getFloatingBulkActions().length\n && !shouldHideFloatingBulkActions()\n ) {\n <div [class]=\"'praxis-floating-bulk-actions ' + getFloatingBulkPositionClass()\">\n @for (action of getFloatingBulkActions(); track getActionId(action)) {\n <button\n mat-mini-fab\n [color]=\"action.color || 'primary'\"\n [disabled]=\"isFloatingBulkActionDisabled(action)\"\n (click)=\"onToolbarAction({ action: getActionId(action), actionConfig: action })\"\n [attr.aria-label]=\"action.label || getActionId(action)\"\n [matTooltip]=\"action.label || getActionId(action)\"\n matTooltipPosition=\"left\"\n >\n <praxis-rich-content\n rootClassName=\"praxis-floating-bulk-actions__content\"\n [nodes]=\"getFloatingBulkActionRichContentNodes(action)\"\n ></praxis-rich-content>\n </button>\n }\n </div>\n}\n<!-- Barra de a\u00C3\u00A7\u00C3\u00B5es no rodap\u00C3\u00A9 (opcional) -->\n@if (shouldRenderDataSurface() && !schemaError && !dataError && showToolbar && shouldRenderFooterToolbar()) {\n <praxis-table-toolbar\n [config]=\"config\"\n [backgroundColor]=\"getToolbarActionsBackgroundColor()\"\n [style.--pfx-filter-h]=\"getToolbarLayoutHeightHostStyle()\"\n [class.footer-flat]=\"hasBottomPaginator()\"\n class=\"praxis-toolbar-footer\"\n placement=\"footer\"\n [showMain]=\"shouldShowFooterToolbarMain()\"\n [showEndActions]=\"shouldShowFooterToolbarEndActions()\"\n [showActionsGroup]=\"shouldShowToolbarActionsBottom()\"\n [showMobileActions]=\"shouldShowToolbarActionsBottom()\"\n [evaluationContext]=\"getToolbarEvaluationContext()\"\n [columnVisibilityController]=\"toolbarColumnVisibilityController\"\n [exportBusy]=\"exportBusy\"\n (toolbarAction)=\"onToolbarAction($event)\"\n (exportAction)=\"onExportAction($event)\"\n >\n @if (shouldShowFooterToolbarMain() && shouldRenderAdvancedFilter()) {\n <praxis-filter\n advancedFilter\n [resourcePath]=\"getAdvancedFilterResourcePath()\"\n [filterId]=\"tableId\"\n [formId]=\"tableId\"\n [persistenceKey]=\"getAdvancedFilterPersistenceKey()\"\n [fieldMetadata]=\"getAdvancedFilterFieldMetadata()\"\n [enableCustomization]=\"isCustomizationAvailable()\"\n [value]=\"advancedFilterValue\"\n [alwaysVisibleFields]=\"getAdvancedFilterAlwaysVisibleFields()\"\n [alwaysVisibleFieldMetadataOverrides]=\"getAdvancedFilterAlwaysVisibleFieldMetadataOverrides()\"\n [selectedFieldIds]=\"config.behavior?.filtering?.advancedFilters?.settings?.selectedFieldIds ?? []\"\n [allowSaveTags]=\"config.behavior?.filtering?.advancedFilters?.settings?.allowSaveTags\"\n [changeDebounceMs]=\"config.behavior?.filtering?.advancedFilters?.settings?.changeDebounceMs ?? 300\"\n [i18n]=\"getFilterI18n()\"\n [mode]=\"'filter'\"\n [showFilterSettings]=\"isCustomizationAvailable()\"\n (change)=\"onAdvancedFilterChange($event)\"\n (requestSearch)=\"onAdvancedFilterSubmit($event)\"\n (clear)=\"onAdvancedFilterClear()\"\n ></praxis-filter>\n }\n @if (shouldShowFooterToolbarMain() && shouldRenderAdvancedFilter()) {\n <ng-content select=\"[advancedFilter]\"></ng-content>\n }\n @if (shouldShowFooterToolbarMain() && shouldRenderAdvancedFilter()) {\n <ng-content select=\"[toolbar]\"></ng-content>\n }\n @if (shouldShowFooterToolbarMain() && shouldRenderAdvancedFilter()) {\n @if (shouldShowAiAssistantEntrypoint()) {\n <button\n end-actions\n mat-icon-button\n color=\"primary\"\n type=\"button\"\n class=\"praxis-table-ai-trigger praxis-table-toolbar-action--ai\"\n [class.praxis-table-ai-trigger--minimized]=\"hasMinimizedAiAssistantSession()\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('footer')\"\n (click)=\"openAiAssistant()\"\n [attr.aria-label]=\"aiAssistantTriggerLabel()\"\n [matBadge]=\"aiAssistantTriggerBadge()\"\n [matBadgeHidden]=\"!hasMinimizedAiAssistantSession()\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"aiAssistantTriggerTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>{{ aiAssistantTriggerIcon() }}</mat-icon>\n </button>\n }\n }\n @if (shouldShowFooterToolbarMain() && shouldRenderAdvancedFilter() && isCustomizationAvailable()) {\n <button\n end-actions\n mat-icon-button\n color=\"primary\"\n data-role=\"table-settings\"\n class=\"praxis-table-toolbar-action--configuration\"\n data-testid=\"table-settings-trigger\"\n (click)=\"openTableSettings()\"\n [attr.aria-label]=\"getTableSettingsLabel()\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"getTableSettingsTooltip()\"\n matTooltipPosition=\"below\"\n >\n <mat-icon>settings</mat-icon>\n </button>\n }\n </praxis-table-toolbar>\n}\n@if (shouldRenderDataSurface() && !schemaError && !dataError && getPaginationEnabled() && (config.behavior?.pagination?.position === 'bottom' || config.behavior?.pagination?.position === 'both' || !config.behavior?.pagination?.position)) {\n <mat-paginator\n [length]=\"getPaginationLength()\"\n [pageSize]=\"getPaginationPageSize()\"\n [pageSizeOptions]=\"getPaginationPageSizeOptions()\"\n [selectConfig]=\"paginatorSelectConfig\"\n [showFirstLastButtons]=\"getPaginationShowFirstLast()\"\n (page)=\"onPageChange($event)\"\n [class.compact]=\"config.behavior?.pagination?.style === 'compact'\"\n [class.footer-stack]=\"shouldShowToolbarActionsBottom()\"\n >\n </mat-paginator>\n}\n", styles: ["@charset \"UTF-8\";table{width:100%}.praxis-visually-hidden-status{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.praxis-column-reorder-status{margin:8px 0;padding:10px 12px;border-radius:8px;border:1px solid var(--p-table-border-color);background:var(--p-table-row-hover-bg);color:var(--p-table-header-fg);font-size:12px;line-height:1.4;box-shadow:0 4px 12px #00000014;animation:pfx-column-reorder-status-in var(--p-table-drag-status-enter-duration, .18s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1))}@keyframes pfx-column-reorder-status-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.praxis-actions-cell{height:100%;padding-inline:12px;white-space:nowrap}.pfx-expansion-col-header,.pfx-expansion-col-cell{width:52px;min-width:52px;text-align:center}.pfx-expansion-toggle:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.pfx-expansion-detail-row{background:var(--md-sys-color-surface-container-low)}.pfx-expansion-detail-cell{padding:0!important;border-bottom:1px solid var(--p-table-border-color)}.pfx-expansion-detail-panel{padding:12px 16px;border-left:3px solid var(--md-sys-color-primary)}.pfx-expansion-detail-panel.pfx-expansion-motion-none{animation:none;transition:none}.pfx-expansion-detail-panel.pfx-expansion-motion-subtle-slide{animation:pfx-expansion-subtle-slide-in var(--pfx-expansion-motion-duration, .16s) var(--pfx-expansion-motion-easing, cubic-bezier(.2, 0, 0, 1))}.pfx-expansion-detail-panel.pfx-expansion-motion-accordion{animation:pfx-expansion-accordion-in var(--pfx-expansion-motion-duration, .18s) var(--pfx-expansion-motion-easing, cubic-bezier(.2, 0, 0, 1));transform-origin:top center}.pfx-expansion-detail-panel.pfx-expansion-motion-fade-scale{animation:pfx-expansion-fade-scale-in var(--pfx-expansion-motion-duration, .16s) var(--pfx-expansion-motion-easing, cubic-bezier(.2, 0, 0, 1));transform-origin:top center}@keyframes pfx-expansion-subtle-slide-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes pfx-expansion-accordion-in{0%{opacity:0;transform:scaleY(.96)}to{opacity:1;transform:scaleY(1)}}@keyframes pfx-expansion-fade-scale-in{0%{opacity:0;transform:translateY(-2px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}.pfx-expansion-detail-schema{margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:12px;line-height:1.4;white-space:pre-wrap;word-break:break-word;color:var(--md-sys-color-on-surface-variant)}.pfx-expansion-detail-message{font-size:13px;color:var(--md-sys-color-on-surface-variant)}.pfx-expansion-detail-message--error{color:var(--md-sys-color-error)}.pfx-expansion-detail-stack{display:grid;gap:10px}.pfx-expansion-detail-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}.pfx-expansion-detail-tab-btn{border:1px solid var(--p-table-border-color);background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);border-radius:999px;padding:6px 12px;font-size:12px;line-height:1.2;cursor:pointer}.pfx-expansion-detail-tab-btn__content{display:inline-flex;align-items:center;gap:6px;min-width:0}.pfx-expansion-detail-tab-btn__icon .prx-rich-icon{font-size:16px;line-height:1}.pfx-expansion-detail-tab-btn__title{white-space:nowrap}.pfx-expansion-detail-tab-btn__badge .prx-rich-badge{padding:0 8px;min-height:18px;background:color-mix(in srgb,currentColor 12%,transparent);color:inherit}.pfx-expansion-detail-tab-btn.is-active{border-color:var(--md-sys-color-primary);color:var(--md-sys-color-primary);font-weight:600}.pfx-expansion-detail-tab-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.pfx-expansion-detail-tab-panel{display:grid;gap:10px}.pfx-expansion-node{border:1px solid var(--p-table-border-color);border-radius:8px;padding:10px 12px;background:var(--md-sys-color-surface)}.pfx-expansion-node-card__header{margin-bottom:8px}.pfx-expansion-node-card__title{margin:0;font-size:14px;line-height:1.3}.pfx-expansion-node-card__subtitle{margin:4px 0 0;font-size:12px;color:var(--md-sys-color-on-surface-variant)}.pfx-expansion-node-card__content{display:grid;gap:10px}.pfx-expansion-node-value{display:flex;align-items:baseline;gap:8px}.pfx-expansion-node-value__label{color:var(--md-sys-color-on-surface-variant);font-size:12px}.pfx-expansion-node-value__content{font-size:14px}.pfx-expansion-node-list__title{margin:0 0 6px;font-size:13px}.pfx-expansion-node-list ul{margin:0;padding-left:18px}.pfx-expansion-node-rich-list__title{margin:0 0 8px;font-size:13px}.pfx-expansion-node-rich-list__items{display:grid;gap:12px}.pfx-expansion-node-rich-list__item{display:grid;gap:10px;padding:12px;border:1px solid var(--md-sys-color-outline-variant, #d7dbe5);border-radius:14px;background:var(--md-sys-color-surface-container-lowest, #fff)}.pfx-expansion-node-rich-list__item--row{grid-template-columns:minmax(0,1fr) auto;align-items:center}.pfx-expansion-node-rich-list__item--stack{grid-template-columns:minmax(0,1fr)}.pfx-expansion-node-rich-list__item--card-list{grid-template-columns:minmax(0,1fr);box-shadow:0 4px 14px #0f172a0a}.pfx-expansion-node-rich-list__item-host{min-width:0}.pfx-expansion-node-rich-list__item-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.pfx-expansion-node-rich-list__item-action-btn{min-width:0}.pfx-expansion-node-rich-list__item-action-host{display:inline-flex;align-items:center}.pfx-expansion-node-action-bar__title{margin:0 0 12px}.pfx-expansion-node-action-bar__actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.pfx-expansion-node-action-bar__action-btn{min-width:0}.pfx-expansion-node-action-bar__action-host{display:inline-flex;align-items:center}.pfx-expansion-node-card-grid__header{margin:0 0 12px}.pfx-expansion-node-card-grid__cards{display:grid;gap:12px;grid-template-columns:var(--pfx-expansion-card-grid-columns, repeat(auto-fit, minmax(var(--pfx-expansion-card-grid-min-width, 220px), 1fr)))}.pfx-expansion-node-card-grid__card-host{min-width:0}.pfx-expansion-node-card-grid__card-host [data-rich-node-type=card]{height:100%}.pfx-expansion-node-richtext :where(p,ul,ol,h1,h2,h3,h4,h5,h6){margin-top:0;margin-bottom:8px}.pfx-expansion-node-placeholder{font-size:12px;color:var(--md-sys-color-on-surface-variant)}:host.density-compact{--p-table-header-height-default: 32px;--p-table-row-height-default: 30px;--p-header-padding-default: 4px 8px;--p-cell-padding-default: 3px 8px;--p-header-font-size-default: 11.5px;--p-cell-font-size-default: 12px;--p-actions-btn-size-default: 28px;--p-actions-icon-size-default: 15px;--p-actions-more-btn-size-default: 28px;--p-actions-more-icon-size-default: 15px;--p-table-paginator-container-min-height-default: 32px;--p-table-paginator-container-padding-default: 2px 8px;--p-table-paginator-container-gap-default: 6px;--p-table-paginator-select-width-default: 64px;--p-table-paginator-select-height-default: 28px;--p-table-paginator-select-padding-inline-default: 8px 6px;--p-table-paginator-action-size-default: 28px}:host.density-comfortable{--p-table-header-height-default: 40px;--p-table-row-height-default: 44px;--p-header-padding-default: 10px 14px;--p-cell-padding-default: 10px 14px;--p-header-font-size-default: inherit;--p-cell-font-size-default: inherit;--p-actions-btn-size-default: 36px;--p-actions-icon-size-default: 18px;--p-actions-more-btn-size-default: 36px;--p-actions-more-icon-size-default: 18px;--p-table-paginator-container-min-height-default: 44px;--p-table-paginator-container-padding-default: 6px 10px;--p-table-paginator-container-gap-default: 10px;--p-table-paginator-select-width-default: 78px;--p-table-paginator-select-height-default: 36px;--p-table-paginator-select-padding-inline-default: 12px 10px;--p-table-paginator-action-size-default: 36px}:host.density-spacious{--p-table-header-height-default: 52px;--p-table-row-height-default: 56px;--p-header-padding-default: 16px 20px;--p-cell-padding-default: 16px 20px;--p-header-font-size-default: inherit;--p-cell-font-size-default: inherit;--p-actions-btn-size-default: 44px;--p-actions-icon-size-default: 24px;--p-actions-more-btn-size-default: 44px;--p-actions-more-icon-size-default: 24px;--p-table-paginator-container-min-height-default: 52px;--p-table-paginator-container-padding-default: 8px 14px;--p-table-paginator-container-gap-default: 12px;--p-table-paginator-select-width-default: 86px;--p-table-paginator-select-height-default: 40px;--p-table-paginator-select-padding-inline-default: 14px 12px;--p-table-paginator-action-size-default: 40px}@media(pointer:coarse){:host.density-compact{--p-table-row-height-default: 44px;--p-table-header-height-default: 44px;--p-table-paginator-container-min-height-default: 44px;--p-table-paginator-action-size-default: 40px}}:host.density-compact .praxis-actions-cell{padding-inline:8px}:host.density-spacious .praxis-actions-cell{padding-inline:16px}.praxis-actions-cell__content{display:flex;align-items:center;justify-content:flex-end;gap:6px;width:100%;transition:opacity .12s ease}.praxis-actions-cell.dense .praxis-actions-cell__content{gap:6px}.praxis-actions-cell__content--discovering{opacity:.78}.praxis-row-action-anchor{display:inline-flex;align-items:center}.praxis-row-action-anchor--workflow{position:relative}.praxis-row-action-anchor--workflow:after{content:\"\";position:absolute;right:4px;top:4px;width:6px;height:6px;border-radius:999px;background:var(--md-sys-color-secondary);opacity:.9;pointer-events:none}.praxis-row-action-anchor--blocked:after{background:var(--md-sys-color-error)}.praxis-icon-btn{width:var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px));height:var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px));border:0;background:transparent;padding:0;display:inline-flex;align-items:center;justify-content:center;border-radius:9999px;cursor:pointer;--mat-icon-button-state-layer-size: var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px))}.praxis-icon-btn:hover{background:var(--md-sys-color-surface-variant)}.praxis-icon-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.praxis-icon-btn mat-icon,.praxis-icon-btn .mat-icon{font-size:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));width:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));line-height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))}.praxis-icon-btn praxis-rich-content{display:inline-flex;align-items:center;justify-content:center;width:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));line-height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))}:host ::ng-deep .praxis-icon-btn .praxis-row-action__content,:host ::ng-deep .praxis-icon-btn .praxis-row-action__icon{display:inline-flex;align-items:center;justify-content:center;width:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));line-height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))}:host ::ng-deep .praxis-icon-btn .praxis-row-action__icon .prx-rich-icon{font-size:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));width:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px));line-height:var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))}.praxis-icon-btn--workflow{background:color-mix(in srgb,var(--md-sys-color-secondary-container) 36%,transparent)}.praxis-icon-btn--blocked{background:color-mix(in srgb,var(--md-sys-color-error-container) 42%,transparent)}.praxis-more-btn{width:var(--p-actions-more-btn-size, var(--p-actions-more-btn-size-default, var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px))));height:var(--p-actions-more-btn-size, var(--p-actions-more-btn-size-default, var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px))));--mat-icon-button-state-layer-size: var(--p-actions-more-btn-size, var(--p-actions-more-btn-size-default, var(--p-actions-btn-size, var(--p-actions-btn-size-default, 40px))));background-image:var(--p-actions-more-btn-gradient, none);background-size:100% 100%;background-repeat:no-repeat}.praxis-more-btn mat-icon,.praxis-more-btn .mat-icon{font-size:var(--p-actions-more-icon-size, var(--p-actions-more-icon-size-default, var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))));width:var(--p-actions-more-icon-size, var(--p-actions-more-icon-size-default, var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))));height:var(--p-actions-more-icon-size, var(--p-actions-more-icon-size-default, var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))));line-height:var(--p-actions-more-icon-size, var(--p-actions-more-icon-size-default, var(--p-actions-icon-size, var(--p-actions-icon-size-default, 22px))));color:var(--p-actions-more-icon-color);background-image:var(--p-actions-more-icon-gradient, none);-webkit-background-clip:text;background-clip:text}.praxis-row-btn--workflow{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--md-sys-color-secondary) 28%,transparent)}.praxis-row-btn--blocked{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--md-sys-color-error) 28%,transparent)}.praxis-icon-btn.destructive mat-icon{color:var(--md-sys-color-error)}.mat-mdc-tooltip.praxis-tooltip{margin-top:-8px;margin-bottom:8px}.spacer{flex:1 1 auto}.praxis-table-header{display:flex;flex-wrap:wrap;align-items:flex-start;gap:6px;margin:10px 0 8px;width:100%;clear:both;position:relative}.praxis-table-header.stacked{margin:0}.praxis-table-header>praxis-table-toolbar{flex:1 0 100%}.praxis-floating-bulk-actions{position:fixed;z-index:var(--praxis-layer-floating-local, 200);display:inline-flex;align-items:center;gap:8px;padding:8px;border-radius:999px;background:var(--md-sys-color-surface-container-highest);box-shadow:0 8px 20px #00000029}.praxis-floating-bulk-actions.pos-bottom-right{right:20px;bottom:20px}.praxis-floating-bulk-actions.pos-bottom-left{left:20px;bottom:20px}.praxis-floating-bulk-actions.pos-top-right{right:20px;top:20px}.praxis-floating-bulk-actions.pos-top-left{left:20px;top:20px}@media(max-width:768px){.praxis-floating-bulk-actions{gap:6px;padding:6px}.praxis-floating-bulk-actions.pos-bottom-right{right:12px;left:auto;bottom:12px}.praxis-floating-bulk-actions.pos-bottom-left{left:12px;right:auto;bottom:12px}.praxis-floating-bulk-actions.pos-top-right{right:12px;left:auto;top:12px}.praxis-floating-bulk-actions.pos-top-left{left:12px;right:auto;top:12px}}:host{display:block;width:100%;min-width:0;max-width:100%;--pfx-toolbar-pad-y: 6px;--pfx-toolbar-pad-x: 12px;--p-table-bg: var(--md-sys-color-surface-container-highest);--p-table-text-color: var(--md-sys-color-on-surface);--p-table-header-bg: var(--md-sys-color-surface-container-highest);--p-table-header-fg: var(--md-sys-color-on-surface);--p-table-border-color: var(--md-sys-color-outline-variant);--p-table-row-even-bg: var(--md-sys-color-surface-container);--p-table-row-hover-bg: var(--md-sys-color-surface-container-high);--p-table-row-selected-bg: var(--md-sys-color-primary-container);--p-table-row-selected-fg: var(--md-sys-color-on-primary-container);--p-table-row-selected-font-weight: 600;--p-table-row-selected-indicator: linear-gradient( 180deg, var(--md-sys-color-primary), var(--md-sys-color-secondary) );--p-table-badge-soft-primary-bg: var(--md-sys-color-primary-container);--p-table-badge-soft-primary-fg: var(--md-sys-color-on-primary-container);--p-table-badge-soft-accent-bg: var(--md-sys-color-secondary-container);--p-table-badge-soft-accent-fg: var(--md-sys-color-on-secondary-container);--p-table-badge-soft-warn-bg: var(--md-sys-color-error-container);--p-table-badge-soft-warn-fg: var(--md-sys-color-on-error-container);--p-table-state-success-bg: var(--md-sys-color-tertiary-container);--p-table-state-success-fg: var(--md-sys-color-on-tertiary-container);--p-table-state-warning-bg: var(--md-sys-color-secondary-container);--p-table-state-warning-fg: var(--md-sys-color-on-secondary-container);--p-table-state-danger-bg: var(--md-sys-color-error-container);--p-table-state-danger-fg: var(--md-sys-color-on-error-container);--p-table-state-highlight-bg: var(--md-sys-color-primary-container);--p-table-state-highlight-fg: var(--md-sys-color-on-primary-container);--p-table-reorder-transition-duration: .16s;--p-table-drag-preview-scale: 1.01;--p-table-drag-status-enter-duration: .18s;--p-table-drag-preview-shadow: 0 14px 32px rgba(0, 0, 0, .28), 0 0 0 1px var(--p-table-border-color);--p-table-column-resize-hit-area: 10px;--p-table-column-resize-line-width: 1px;--p-table-column-resize-separator-color: color-mix( in srgb, var(--p-table-border-color) 78%, transparent );--p-table-column-resize-separator-hover-color: var(--md-sys-color-primary);--p-table-column-resize-active-color: var(--md-sys-color-primary)}:host ::ng-deep .mat-mdc-table{background:var(--p-table-bg);color:var(--p-table-text-color);border-radius:12px 12px 0 0;width:100%;box-shadow:var(--p-table-surface-shadow);transition:box-shadow var(--p-table-selection-transition-duration, .18s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1))}:host ::ng-deep .mat-mdc-table:hover{box-shadow:var(--p-table-surface-shadow-hover, var(--p-table-surface-shadow))}:host ::ng-deep .mat-mdc-table.pfx-column-resize-enabled{table-layout:fixed}:host ::ng-deep .mat-mdc-table.table-stack-top{border-top-left-radius:0;border-top-right-radius:0}:host ::ng-deep .praxis-toolbar-footer{border:0 solid var(--p-table-border-color);border-top:0;border-radius:0;background:var(--p-table-bg)}:host ::ng-deep .mat-mdc-paginator.footer-stack{border-top-left-radius:0;border-top-right-radius:0;border-top:0}:host ::ng-deep .mat-mdc-paginator.footer-stack .mat-mdc-paginator-container{padding:var(--p-table-paginator-footer-stack-padding, 6px 10px)}:host ::ng-deep .mat-mdc-paginator{--p-table-paginator-bg-default: color-mix( in srgb, var(--p-table-bg) 94%, var(--md-sys-color-surface, white) 6% );--p-table-paginator-border-color-default: color-mix(in srgb, var(--p-table-border-color) 82%, transparent);--p-table-paginator-select-bg-default: color-mix(in srgb, var(--p-table-bg) 88%, var(--p-table-text-color) 12%);--p-table-paginator-select-border-color-default: color-mix( in srgb, var(--p-table-border-color) 74%, transparent );--p-table-paginator-select-border-color-hover-default: color-mix( in srgb, var(--md-sys-color-primary) 36%, var(--p-table-border-color) );--p-table-paginator-select-border-color-focus-default: color-mix( in srgb, var(--md-sys-color-primary) 72%, var(--p-table-border-color) );--p-table-paginator-select-focus-ring-default: color-mix(in srgb, var(--md-sys-color-primary) 18%, transparent);--p-table-paginator-select-radius-default: 999px;--p-table-paginator-select-shadow-default: inset 0 1px 0 color-mix(in srgb, var(--md-sys-color-on-surface) 8%, transparent);--p-table-paginator-select-text-color-default: var(--p-table-text-color);--p-table-paginator-select-icon-color-default: color-mix(in srgb, var(--p-table-text-color) 72%, transparent);--p-table-paginator-range-text-color-default: color-mix(in srgb, var(--p-table-text-color) 78%, transparent);border-top:1px solid var(--p-table-paginator-border-color, var(--p-table-paginator-border-color-default));background:var(--p-table-paginator-bg, var(--p-table-paginator-bg-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-container{min-height:var(--p-table-paginator-container-min-height, var(--p-table-paginator-container-min-height-default, 44px));padding:var(--p-table-paginator-container-padding, var(--p-table-paginator-container-padding-default, 6px 10px));gap:var(--p-table-paginator-container-gap, var(--p-table-paginator-container-gap-default, 10px))}:host ::ng-deep .mat-mdc-paginator.compact{--p-table-paginator-container-min-height-default: 30px;--p-table-paginator-container-padding-default: 2px 8px;--p-table-paginator-container-gap-default: 6px;--p-table-paginator-select-width-default: 62px;--p-table-paginator-select-height-default: 28px;--p-table-paginator-select-padding-inline-default: 8px 6px;--p-table-paginator-action-size-default: 28px}:host ::ng-deep .mat-mdc-paginator .mat-mdc-icon-button{width:var(--p-table-paginator-action-size, var(--p-table-paginator-action-size-default, 36px));height:var(--p-table-paginator-action-size, var(--p-table-paginator-action-size-default, 36px));display:inline-grid;place-items:center;padding:0;line-height:0;--mdc-icon-button-state-layer-size: var(--p-table-paginator-action-size, var(--p-table-paginator-action-size-default, 36px));--mat-icon-button-state-layer-size: var(--p-table-paginator-action-size, var(--p-table-paginator-action-size-default, 36px))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-icon{display:block;flex:0 0 auto;margin:0}.praxis-table-ai-trigger{transition:background-color .16s ease,box-shadow .16s ease,color .16s ease}.praxis-table-ai-trigger--minimized{background:color-mix(in srgb,var(--md-sys-color-primary-container, rgba(59, 130, 246, .22)) 72%,transparent);color:var(--md-sys-color-on-primary-container, var(--md-sys-color-primary, #2563eb));box-shadow:0 0 0 1px color-mix(in srgb,var(--md-sys-color-primary, #2563eb) 34%,transparent),0 8px 20px color-mix(in srgb,var(--md-sys-color-primary, #2563eb) 16%,transparent)}.praxis-table-ai-trigger--minimized:hover,.praxis-table-ai-trigger--minimized:focus-visible{background:color-mix(in srgb,var(--md-sys-color-primary-container, rgba(59, 130, 246, .22)) 86%,transparent)}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select{margin-left:4px;width:var(--p-table-paginator-select-width, var(--p-table-paginator-select-width-default, 78px))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-text-field-wrapper{--mdc-outlined-text-field-container-color: var( --p-table-paginator-select-bg, var(--p-table-paginator-select-bg-default) );--mdc-outlined-text-field-input-text-color: var( --p-table-paginator-select-text-color, var(--p-table-paginator-select-text-color-default) );min-height:var(--p-table-paginator-select-height, var(--p-table-paginator-select-height-default, 36px));height:var(--p-table-paginator-select-height, var(--p-table-paginator-select-height-default, 36px));padding-inline:var(--p-table-paginator-select-padding-inline, var(--p-table-paginator-select-padding-inline-default, 12px 10px));border:1px solid var(--p-table-paginator-select-border-color, var(--p-table-paginator-select-border-color-default));border-radius:var(--p-table-paginator-select-radius, var(--p-table-paginator-select-radius-default));background:var(--p-table-paginator-select-bg, var(--p-table-paginator-select-bg-default))!important;background-color:var(--p-table-paginator-select-bg, var(--p-table-paginator-select-bg-default))!important;color:var(--p-table-paginator-select-text-color, var(--p-table-paginator-select-text-color-default))!important;box-shadow:var(--p-table-paginator-select-shadow, var(--p-table-paginator-select-shadow-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-text-field-wrapper:hover{border-color:var(--p-table-paginator-select-border-color-hover, var(--p-table-paginator-select-border-color-hover-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select.mat-focused .mat-mdc-text-field-wrapper{border-color:var(--p-table-paginator-select-border-color-focus, var(--p-table-paginator-select-border-color-focus-default));box-shadow:0 0 0 3px var(--p-table-paginator-select-focus-ring, var(--p-table-paginator-select-focus-ring-default)),var(--p-table-paginator-select-shadow, var(--p-table-paginator-select-shadow-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-form-field-flex{min-height:var(--p-table-paginator-select-height, var(--p-table-paginator-select-height-default, 36px));align-items:center}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-form-field-infix{display:flex;align-items:center;min-height:var(--p-table-paginator-select-height, var(--p-table-paginator-select-height-default, 36px));padding-block:0;width:auto}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-select-trigger{min-height:var(--p-table-paginator-select-height, var(--p-table-paginator-select-height-default, 36px));padding-right:2px;color:var(--p-table-paginator-select-text-color, var(--p-table-paginator-select-text-color-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-select-arrow{color:var(--p-table-paginator-select-icon-color, var(--p-table-paginator-select-icon-color-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mdc-notched-outline__leading,:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mdc-notched-outline__notch,:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mdc-notched-outline__trailing{border-color:transparent!important;border-width:0!important}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .mat-mdc-paginator .mat-mdc-paginator-range-label{font-size:12px;font-weight:600;color:var(--p-table-paginator-range-text-color, var(--p-table-paginator-range-text-color-default))}:host ::ng-deep .mat-mdc-paginator .mat-mdc-select-value-text{font-size:12px;font-weight:700;color:var(--p-table-paginator-select-text-color, var(--p-table-paginator-select-text-color-default))}::ng-deep .praxis-table-paginator-select-panel.mat-mdc-select-panel{--mat-select-panel-background-color: var(--md-sys-color-surface-container, #fff);background:var(--md-sys-color-surface-container, #fff)!important;background-color:var(--md-sys-color-surface-container, #fff)!important;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #d7dbe5) 70%,transparent);box-shadow:0 12px 28px color-mix(in srgb,var(--md-sys-color-shadow, #000) 28%,transparent)}::ng-deep .praxis-table-paginator-select-panel .mat-mdc-option{--mat-option-label-text-color: var(--md-sys-color-on-surface, #111827);color:var(--md-sys-color-on-surface, #111827)!important}::ng-deep .praxis-table-paginator-select-panel .mat-mdc-option:hover:not(.mdc-list-item--disabled),::ng-deep .praxis-table-paginator-select-panel .mat-mdc-option.mat-mdc-option-active{--mat-option-hover-state-layer-color: color-mix( in srgb, var(--md-sys-color-primary, #2f7cff) 14%, transparent );background:color-mix(in srgb,var(--md-sys-color-primary, #2f7cff) 14%,transparent)!important;color:var(--md-sys-color-on-surface, #111827)!important}:host [data-role=table-settings].mat-mdc-icon-button{--mdc-icon-button-icon-color: var(--md-sys-color-primary);color:var(--md-sys-color-primary)}.pfx-link{color:var(--md-sys-color-primary);text-decoration:underline;cursor:pointer}.pfx-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:10px;font-size:12px;line-height:1;border:1px solid transparent;white-space:nowrap;--prx-rich-content-inline-gap: 6px}.pfx-chip-icon{font-size:14px;width:14px;height:14px}.pfx-chip--plain{background:transparent;border-color:transparent;color:var(--md-sys-color-on-surface)}.pfx-chip--outlined{background:transparent;border-color:var(--md-sys-color-outline-variant);color:var(--md-sys-color-on-surface)}.pfx-chip--filled-primary{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pfx-chip--filled-accent{background:var(--md-sys-color-secondary);color:var(--md-sys-color-on-secondary)}.pfx-chip--filled-warn,.pfx-chip--filled-danger{background:var(--md-sys-color-error);color:var(--md-sys-color-on-error)}.pfx-chip--filled-success{background:var(--p-table-state-success-bg);color:var(--p-table-state-success-fg)}.pfx-chip--filled-info{background:var(--md-sys-color-tertiary);color:var(--md-sys-color-on-tertiary)}.pfx-chip--filled-basic{background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface);border-color:var(--md-sys-color-outline-variant)}.pfx-chip--soft-primary{background:var(--p-table-badge-soft-primary-bg);color:var(--p-table-badge-soft-primary-fg)}.pfx-chip--soft-accent{background:var(--p-table-badge-soft-accent-bg);color:var(--p-table-badge-soft-accent-fg)}.pfx-chip--soft-warn{background:var(--p-table-badge-soft-warn-bg);color:var(--p-table-badge-soft-warn-fg)}.pfx-chip--soft-danger{background:color-mix(in srgb,var(--p-table-state-danger-bg) 72%,transparent);color:var(--p-table-state-danger-fg);border-color:color-mix(in srgb,var(--p-table-state-danger-fg) 18%,transparent)}.pfx-chip--soft-success{background:color-mix(in srgb,var(--p-table-state-success-bg) 72%,transparent);color:var(--p-table-state-success-fg);border-color:color-mix(in srgb,var(--p-table-state-success-fg) 18%,transparent)}.pfx-chip--soft-info{background:color-mix(in srgb,var(--md-sys-color-tertiary-container) 72%,transparent);color:var(--md-sys-color-on-tertiary-container);border-color:color-mix(in srgb,var(--md-sys-color-tertiary) 18%,transparent)}.pfx-chip--soft-basic{background:color-mix(in srgb,var(--md-sys-color-surface-container-highest) 82%,transparent);color:color-mix(in srgb,var(--md-sys-color-on-surface) 76%,transparent);border-color:color-mix(in srgb,var(--md-sys-color-outline-variant) 65%,transparent)}.pfx-progress{position:relative;width:100%;min-width:0;max-width:140px;display:inline-block;vertical-align:middle}.pfx-progress .pfx-progress__content{width:100%;min-width:0}.pfx-progress .prx-rich-progress{width:100%}.pfx-progress-bar{height:100%;background:var(--md-sys-color-primary);transition:width .2s ease}.pfx-progress-label{margin-left:8px;font-size:12px;opacity:.8;display:inline-block;vertical-align:middle}.pfx-micro-viz-cell{display:inline-block;width:min(100%,180px);min-width:112px;max-width:220px;vertical-align:middle}.pfx-micro-viz-cell .pfx-micro-viz{display:grid;gap:4px;width:100%;min-width:0;color:var(--md-sys-color-on-surface);font-size:12px;line-height:1.2}.pfx-micro-viz-cell .pfx-micro-viz__row{display:grid;grid-template-columns:minmax(42px,.8fr) minmax(52px,1fr) auto;align-items:center;gap:6px;min-width:0}.pfx-micro-viz-cell .pfx-micro-viz__label,.pfx-micro-viz-cell .pfx-micro-viz__value{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pfx-micro-viz-cell .pfx-micro-viz__track{position:relative;display:block;height:8px;min-width:0;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-outline-variant) 62%,transparent);overflow:hidden}.pfx-micro-viz-cell .pfx-micro-viz__bar,.pfx-micro-viz-cell .pfx-micro-viz__segment{display:block;height:100%;border-radius:inherit;background:var(--md-sys-color-primary)}.pfx-micro-viz-cell .pfx-micro-viz__row[data-tone=success] .pfx-micro-viz__bar,.pfx-micro-viz-cell .pfx-micro-viz__segment[data-tone=success],.pfx-micro-viz-cell .pfx-micro-viz[data-tone=success] .pfx-micro-viz__bar{background:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-viz-cell .pfx-micro-viz__row[data-tone=warning] .pfx-micro-viz__bar,.pfx-micro-viz-cell .pfx-micro-viz__segment[data-tone=warning],.pfx-micro-viz-cell .pfx-micro-viz[data-tone=warning] .pfx-micro-viz__bar{background:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-viz-cell .pfx-micro-viz__row[data-tone=danger] .pfx-micro-viz__bar,.pfx-micro-viz-cell .pfx-micro-viz__segment[data-tone=danger],.pfx-micro-viz-cell .pfx-micro-viz[data-tone=danger] .pfx-micro-viz__bar{background:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-viz-cell .pfx-micro-viz__segments{display:flex;width:100%;height:8px;overflow:hidden;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-outline-variant) 62%,transparent)}.pfx-micro-viz-cell .pfx-micro-viz__meta{display:flex;justify-content:space-between;gap:8px;min-width:0;color:color-mix(in srgb,var(--md-sys-color-on-surface) 72%,transparent)}.pfx-micro-viz-cell .pfx-micro-viz__bullet .pfx-micro-viz__target{position:absolute;top:-2px;bottom:-2px;width:2px;border-radius:999px;background:var(--md-sys-color-on-surface)}.pfx-micro-viz-cell .pfx-micro-viz__delta[data-tone=success]{color:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-viz-cell .pfx-micro-viz__delta[data-tone=warning]{color:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-viz-cell .pfx-micro-viz__delta[data-tone=danger]{color:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-viz-cell .pfx-micro-viz__fallback{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__radial,.pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__harvey,.pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__process{display:inline-flex}.pfx-micro-viz__radial{align-items:center;justify-content:center;position:relative}.pfx-micro-radial-svg{width:24px;height:24px;overflow:visible;flex-shrink:0;display:block}.pfx-micro-radial-svg__track{fill:none;stroke:var(--pfx-micro-track-color, var(--md-sys-color-surface-container-high, #e5e7eb));stroke-width:3}.pfx-micro-radial-svg__bar{fill:none;stroke:currentColor;stroke-width:3;stroke-linecap:round;transform:rotate(-90deg);transform-origin:50% 50%;transition:stroke-dasharray .35s ease}.pfx-micro-radial-svg__text{font-size:8px;font-weight:700;text-anchor:middle;fill:currentColor;font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif)}.pfx-micro-viz__harvey{align-items:center;gap:0}.pfx-micro-harvey-svg{width:18px;height:18px;overflow:visible;flex-shrink:0}.pfx-micro-harvey-svg__track{fill:none;stroke:var(--pfx-micro-track-color, var(--md-sys-color-surface-container-high, #e5e7eb));stroke-width:2}.pfx-micro-harvey-svg__bar{fill:none;stroke:currentColor;stroke-width:16;transform:rotate(-90deg);transform-origin:50% 50%;transition:stroke-dasharray .35s ease}.pfx-micro-harvey-fraction{display:inline-flex;align-items:center;font-size:11px;font-variant-numeric:tabular-nums;margin-left:6px;font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif)}.pfx-micro-harvey-fraction strong{color:currentColor;font-weight:700}.pfx-separator{opacity:.6;color:var(--md-sys-color-on-surface-variant, #4b5563);margin-inline:2px}.pfx-total{color:var(--md-sys-color-on-surface-variant, #4b5563)}.pfx-micro-viz__bullet{display:flex;flex-direction:column;gap:4px;width:100%}.pfx-micro-bullet__top{display:flex;justify-content:space-between;align-items:baseline;font-size:11px}.pfx-micro-bullet__label{color:var(--md-sys-color-on-surface-variant, #4b5563);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pfx-micro-bullet__value{font-weight:700;color:currentColor;font-variant-numeric:tabular-nums;flex-shrink:0}.pfx-micro-bullet__target-val{font-weight:400;font-size:10px;color:var(--md-sys-color-on-surface-variant, #4b5563);margin-left:4px}.pfx-micro-bullet__track{position:relative;display:block;overflow:hidden;border-radius:var(--pfx-micro-track-radius, 999px);background:var(--pfx-micro-track-color, var(--md-sys-color-surface-container-high, #e5e7eb));block-size:10px;width:100%}.pfx-micro-bullet__range{position:absolute;inset-block:0;display:block;block-size:100%;opacity:.32}.pfx-micro-bullet__range[data-tone=success]{background:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-bullet__range[data-tone=warning]{background:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-bullet__range[data-tone=danger],.pfx-micro-bullet__range[data-tone=critical]{background:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-bullet__range[data-tone=info]{background:var(--md-sys-color-primary, #2563eb)}.pfx-micro-bullet__actual{position:absolute;inset-block-start:3px;inset-inline-start:0;block-size:4px;border-radius:inherit}.pfx-micro-bullet__actual[data-tone=success]{background:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-bullet__actual[data-tone=warning]{background:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-bullet__actual[data-tone=danger],.pfx-micro-bullet__actual[data-tone=critical]{background:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-bullet__actual[data-tone=info]{background:var(--md-sys-color-primary, #2563eb)}.pfx-micro-bullet__target{position:absolute;inset-block:0;inline-size:2px;background:var(--md-sys-color-on-surface, #111827)}.pfx-micro-bullet__bottom{display:flex;justify-content:space-between;font-size:9px;color:var(--md-sys-color-on-surface-variant, #4b5563)}.pfx-micro-viz-container{display:flex;align-items:center;gap:8px;width:100%}.pfx-micro-trend__label-col{display:flex;flex-direction:column;justify-content:center;font-size:11px;line-height:1.2;flex-shrink:0;min-width:24px;font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif)}.pfx-micro-trend__label-col--start{align-items:flex-end;text-align:right}.pfx-micro-trend__label-col--end{align-items:flex-start;text-align:left}.pfx-micro-trend__value{font-weight:700;color:var(--md-sys-color-on-surface, #1f2937)}.pfx-micro-trend__label{color:var(--md-sys-color-on-surface-variant, #4b5563);font-size:9px}.pfx-micro-viz__line,.pfx-micro-viz__area,.pfx-micro-viz__column{display:block;width:100%;height:30px;overflow:visible;flex:1 1 auto}.pfx-micro-line__svg,.pfx-micro-area__svg,.pfx-micro-column__svg{width:100%;height:100%;display:block;overflow:visible}.pfx-micro-line__path,.pfx-micro-area__path{stroke:currentColor}.pfx-micro-area__fill{fill:currentColor}.pfx-micro-trend__marker{fill:currentColor;stroke:var(--md-sys-color-surface, #ffffff);stroke-width:1.5px}.pfx-micro-trend__marker[data-tone=success]{fill:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-trend__marker[data-tone=warning]{fill:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-trend__marker[data-tone=danger],.pfx-micro-trend__marker[data-tone=critical]{fill:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-trend__marker[data-tone=info]{fill:var(--md-sys-color-primary, #2563eb)}.pfx-micro-viz__process{align-items:center;width:100%;min-width:120px;padding-block:4px;overflow-x:auto;-webkit-overflow-scrolling:touch}.pfx-micro-step{display:flex;align-items:center;flex:1 1 0%;min-width:0}.pfx-micro-step[data-state=future]{opacity:.38}.pfx-micro-step[data-state=disabled]{opacity:.28;pointer-events:none}.pfx-micro-step__node-wrapper{display:flex;flex-direction:column;align-items:center;position:relative;flex-shrink:0}.pfx-micro-step__node{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;font-size:11px;font-weight:700;background:var(--md-sys-color-surface-container-high, #e5e7eb);color:var(--md-sys-color-on-surface, #1f2937);border:2px solid transparent;transition:all .2s ease}.pfx-micro-step__node[data-tone=success]{background:var(--p-table-state-success-fg, #168a4a);color:#fff}.pfx-micro-step__node[data-tone=warning]{background:var(--p-table-state-warning-fg, #b45f06);color:#fff}.pfx-micro-step__node[data-tone=danger],.pfx-micro-step__node[data-tone=critical]{background:var(--p-table-state-danger-fg, #b3261e);color:#fff}.pfx-micro-step__node[data-tone=info]{background:var(--md-sys-color-primary, #2563eb);color:#fff}.pfx-micro-step__icon{font-size:12px}.pfx-micro-step__label{font-size:9px;margin-top:4px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:72px;color:var(--md-sys-color-on-surface-variant, #4b5563)}.pfx-micro-step__connector{flex:1 1 auto;height:2px;background:var(--md-sys-color-surface-container-high, #e5e7eb);margin-inline:8px;min-width:16px}.pfx-micro-step__connector[data-tone=success]{background:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-step__connector[data-tone=warning]{background:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-step__connector[data-tone=danger],.pfx-micro-step__connector[data-tone=critical]{background:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-step__connector[data-tone=info]{background:var(--md-sys-color-primary, #2563eb)}.pfx-micro-viz[data-tone=success]{color:var(--p-table-state-success-fg, #168a4a)}.pfx-micro-viz[data-tone=warning]{color:var(--p-table-state-warning-fg, #b45f06)}.pfx-micro-viz[data-tone=danger],.pfx-micro-viz[data-tone=critical]{color:var(--p-table-state-danger-fg, #b3261e)}.pfx-micro-viz[data-tone=info]{color:var(--md-sys-color-primary, #2563eb)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz[data-tone=success]{color:var(--p-table-state-success-fg, #168a4a)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz[data-tone=warning]{color:var(--p-table-state-warning-fg, #b45f06)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz[data-tone=critical]{color:var(--p-table-state-danger-fg, #b3261e)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz[data-tone=info]{color:var(--md-sys-color-primary, #2563eb)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__delta{display:inline-flex;align-items:center;justify-content:flex-end;gap:5px;width:auto;min-width:0;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz__delta-symbol{display:inline-grid;width:12px;min-width:12px;height:12px;min-height:12px;place-items:center;border-radius:0;background:transparent;font-size:11px;line-height:1;transform:translateY(-.5px)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__radial,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__harvey{display:inline-flex;align-items:center;justify-content:center;width:auto;min-width:0;height:auto;gap:8px}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__radial{justify-content:flex-start;gap:7px}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-radial-svg{display:block;width:24px;height:24px;overflow:visible;flex:0 0 auto}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-radial-svg__track{fill:none;stroke:var(--pfx-micro-track-color, var(--md-sys-color-surface-container-high, #e5e7eb));stroke-width:3.4}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-radial-svg__bar{fill:none;stroke:currentColor;stroke-width:3.4;stroke-linecap:round;transform:rotate(-90deg);transform-origin:50% 50%}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-radial-svg__text{font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif);font-size:8.5px;font-weight:700;text-anchor:middle;fill:currentColor}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-radial-value{color:currentColor;font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif);font-size:12px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1;white-space:nowrap}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-harvey-svg{display:block;width:26px;height:26px;overflow:visible;flex:0 0 auto}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-harvey-svg__track{fill:none;stroke:var(--pfx-micro-track-color, var(--md-sys-color-surface-container-high, #e5e7eb));stroke-width:2.4}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-harvey-svg__bar{fill:none;stroke:currentColor;stroke-width:16;transform:rotate(-90deg);transform-origin:50% 50%}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-harvey-fraction{display:inline-flex;align-items:center;font-family:var(--md-sys-typescale-body-medium-font-family, sans-serif);font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-harvey-fraction strong{color:currentColor;font-weight:700}:host ::ng-deep .pfx-micro-viz-cell .pfx-separator{margin-inline:2px;color:var(--md-sys-color-on-surface-variant, #4b5563);opacity:.6}:host ::ng-deep .pfx-micro-viz-cell .pfx-total{color:var(--md-sys-color-on-surface-variant, #4b5563)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__process{display:inline-flex;align-items:center;justify-content:center;width:100%;min-width:112px;overflow:hidden}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz-container{display:flex;align-items:center;gap:8px;width:100%;min-width:0}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__line,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__area,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-viz.pfx-micro-viz__column{display:block;flex:1 1 auto;width:100%;min-width:0;height:30px;overflow:visible}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-line__svg,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-area__svg,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__svg{display:block;width:100%;height:100%;overflow:visible}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-line__path,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-area__path{stroke:currentColor}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-area__fill{fill:currentColor}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar,:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker{fill:currentColor}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar[data-tone=success],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker[data-tone=success]{fill:var(--p-table-state-success-fg, #168a4a)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar[data-tone=warning],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker[data-tone=warning]{fill:var(--p-table-state-warning-fg, #b45f06)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar[data-tone=critical],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker[data-tone=critical]{fill:var(--p-table-state-danger-fg, #b3261e)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-column__bar[data-tone=info],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-trend__marker[data-tone=info]{fill:var(--md-sys-color-primary, #2563eb)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step{display:flex;align-items:center;flex:0 1 auto;min-width:0}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node-wrapper{display:inline-flex;align-items:center;min-width:0}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;background:var(--md-sys-color-surface-container-high, #e5e7eb);color:var(--md-sys-color-on-surface, #1f2937);font-size:12px;font-weight:700;line-height:1;flex:0 0 auto}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__icon{font-size:15px;line-height:1}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__label{display:none}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector{flex:0 1 24px;min-width:12px;max-width:28px;height:2px;margin-inline:6px;background:var(--md-sys-color-surface-container-high, #e5e7eb)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=success],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector[data-tone=success]{background:var(--p-table-state-success-fg, #168a4a)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=warning],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector[data-tone=warning]{background:var(--p-table-state-warning-fg, #b45f06)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=critical],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector[data-tone=critical]{background:var(--p-table-state-danger-fg, #b3261e)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=info],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__connector[data-tone=info]{background:var(--md-sys-color-primary, #2563eb)}:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=success],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=warning],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=danger],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=critical],:host ::ng-deep .pfx-micro-viz-cell .pfx-micro-step__node[data-tone=info]{color:var(--md-sys-color-on-primary, #ffffff)}.pfx-avatar{display:inline-flex;align-items:center;justify-content:center;background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface);border-radius:4px;overflow:hidden;font-weight:600}.pfx-avatar.shape-rounded{border-radius:8px}.pfx-avatar.shape-circle{border-radius:999px}.pfx-avatar--initials{text-transform:uppercase;font-size:12px}.pfx-cell-compose{display:inline-flex;align-items:center;gap:6px}.pfx-cell-compose.dir-col{flex-direction:column;align-items:stretch}.pfx-cell-compose.align-start{justify-content:flex-start}.pfx-cell-compose.align-center{justify-content:center}.pfx-cell-compose.align-end{justify-content:flex-end}.pfx-cell-compose.wrap{flex-wrap:wrap}.pfx-cell-compose.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.px-scroll-viewport{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;background:var(--p-table-bg);border-radius:12px 12px 0 0}.px-scroll-viewport:has(.mat-mdc-table.table-stack-top){border-top-left-radius:0;border-top-right-radius:0}.px-scroll-viewport.scroll-none{overflow-x:visible}.px-scroll-viewport.scroll-auto ::ng-deep .mat-mdc-table{width:max-content;min-width:100%}.px-scroll-viewport.scroll-wrap ::ng-deep .mat-mdc-header-cell,.px-scroll-viewport.scroll-wrap ::ng-deep .mat-mdc-cell{white-space:normal;text-overflow:initial}.px-scroll-viewport.scroll-wrap ::ng-deep .mat-mdc-table{width:100%}:host ::ng-deep .mat-mdc-header-row{position:sticky;top:0;z-index:var(--praxis-layer-sticky-local, 100);height:var(--p-table-header-height, var(--p-table-header-height-default, var(--mat-table-header-container-height, 40px)));min-height:var(--p-table-header-height, var(--p-table-header-height-default, var(--mat-table-header-container-height, 40px)));background:var(--p-table-header-bg);color:var(--p-table-header-fg);box-shadow:var(--p-table-header-shadow, 0 1px 0 var(--p-table-border-color));border-bottom:1px solid var(--p-table-border-color)}:host ::ng-deep .mat-mdc-header-cell{color:var(--p-table-header-fg);font-weight:600}:host ::ng-deep .mat-sort-header-content,:host ::ng-deep .mat-mdc-header-row .mat-icon{color:inherit;font-weight:600}:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow,:host ::ng-deep .mat-mdc-header-cell:hover .mat-sort-header-arrow{color:var(--p-table-header-fg)!important}:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow .mat-sort-header-indicator,:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow .mat-sort-header-stem,:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow .mat-sort-header-pointer,:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow .mat-sort-header-pointer-left,:host ::ng-deep .mat-mdc-header-cell.mat-sort-header-sorted .mat-sort-header-arrow .mat-sort-header-pointer-right{border-color:var(--p-table-header-fg)!important;background:var(--p-table-header-fg)!important}:host ::ng-deep .mat-mdc-header-cell{height:var(--p-table-header-height, var(--p-table-header-height-default, var(--mat-table-header-container-height, 40px)));padding:var(--p-header-padding, var(--p-header-padding-default, 12px 16px))!important;font-size:var(--p-header-font-size, var(--p-header-font-size-default, inherit));font-weight:var(--p-header-font-weight, 600);letter-spacing:var(--p-header-letter-spacing, normal);text-transform:var(--p-header-text-transform, none);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-left .mat-sort-header-container{justify-content:flex-start}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-center .mat-sort-header-container{justify-content:center}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-right .mat-sort-header-container{justify-content:flex-end}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-left .praxis-header-label-text{text-align:left}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-center .praxis-header-label-text{text-align:center}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-right .praxis-header-label-text{text-align:right}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell.praxis-header-draggable .mat-sort-header-container{display:flex;align-items:center;width:100%;gap:4px}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell.praxis-header-draggable{-webkit-user-select:none;user-select:none}:host ::ng-deep .mat-mdc-header-cell .praxis-header-sort-trigger{display:block;width:100%;min-width:0}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable{overflow:visible}:host ::ng-deep .mat-mdc-header-cell .praxis-column-resize-handle{position:absolute;z-index:2;inset-block:0;inset-inline-end:0;width:var(--p-table-column-resize-hit-area);cursor:col-resize;touch-action:none;-webkit-user-select:none;user-select:none}:host ::ng-deep .mat-mdc-header-cell .praxis-column-resize-handle:after{content:\"\";position:absolute;inset-block:6px;inset-inline-start:calc((var(--p-table-column-resize-hit-area) - var(--p-table-column-resize-line-width)) / 2);width:var(--p-table-column-resize-line-width);background:var(--p-table-column-resize-separator-color);opacity:.76;transition:background-color .12s ease,opacity .12s ease,transform .12s ease,inset-block .12s ease}:host ::ng-deep .mat-mdc-header-cell .praxis-column-resize-handle:focus-visible{outline:2px solid var(--p-table-column-resize-separator-hover-color);outline-offset:-2px}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable:hover .praxis-column-resize-handle:after,:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable:focus-within .praxis-column-resize-handle:after,:host ::ng-deep .mat-mdc-header-cell .praxis-column-resize-handle:hover:after,:host ::ng-deep .mat-mdc-header-cell .praxis-column-resize-handle:focus-visible:after{background:var(--p-table-column-resize-separator-hover-color);opacity:1}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizing .praxis-column-resize-handle:after{background:var(--p-table-column-resize-active-color);inset-block:0;opacity:1;transform:scaleX(2)}:host ::ng-deep .pfx-column-resizing,:host ::ng-deep .pfx-column-resizing .mat-mdc-header-cell{cursor:col-resize}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell.praxis-header-draggable.cdk-drag-dragging{cursor:grabbing}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell.praxis-header-draggable .mat-sort-header-content{display:inline-flex;align-items:center;gap:4px;flex:1 1 auto;min-width:0;max-width:100%;overflow:hidden}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell .praxis-header-label{display:inline-flex;align-items:center;gap:4px;flex:1 1 auto;min-width:0}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell .praxis-header-label-text{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host ::ng-deep .pfx-column-drag-indicator .cdk-drop-list-dragging .mat-mdc-header-cell:not(.cdk-drag-placeholder){transition:transform var(--p-table-reorder-transition-duration, .18s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1))}:host ::ng-deep .pfx-column-drag-indicator .mat-mdc-header-cell.cdk-drag-animating{transition:transform var(--p-table-reorder-transition-duration, .16s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1))}.pfx-column-drag-preview{box-sizing:border-box;display:flex;align-items:center;border-radius:10px;border:1px solid var(--p-table-border-color);background:linear-gradient(135deg,var(--p-table-header-bg) 0%,var(--p-table-row-hover-bg) 100%);color:var(--p-table-header-fg);box-shadow:var(--p-table-drag-preview-shadow);transform:scale(var(--p-table-drag-preview-scale, 1.01));pointer-events:none;z-index:var(--praxis-layer-authoring-hover, 300)}.pfx-column-drag-preview-custom{height:100%;padding:var(--p-header-padding, var(--p-header-padding-default, 12px 16px))}.pfx-column-drag-preview .mat-sort-header-arrow,.pfx-column-drag-preview .mat-sort-header-indicator,.pfx-column-drag-preview .mat-sort-header-stem,.pfx-column-drag-preview .mat-sort-header-pointer,.pfx-column-drag-preview .mat-sort-header-pointer-left,.pfx-column-drag-preview .mat-sort-header-pointer-right{display:none!important}.pfx-column-drag-preview .mat-sort-header-container{display:flex;align-items:center;width:100%;min-height:100%;padding-right:0!important}.pfx-column-drag-preview .praxis-header-sort-trigger{display:block;width:100%;min-width:0}.pfx-column-drag-preview .mat-sort-header-content,.pfx-column-drag-preview .praxis-header-label{display:inline-flex;align-items:center;flex:1 1 auto;min-width:0;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pfx-column-drag-preview.praxis-header-align-left .mat-sort-header-container,.pfx-column-drag-preview.praxis-header-align-left,.pfx-column-drag-preview.praxis-header-align-left .mat-sort-header-content,.pfx-column-drag-preview.praxis-header-align-left .praxis-header-label{justify-content:flex-start}.pfx-column-drag-preview.praxis-header-align-center .mat-sort-header-container,.pfx-column-drag-preview.praxis-header-align-center,.pfx-column-drag-preview.praxis-header-align-center .mat-sort-header-content,.pfx-column-drag-preview.praxis-header-align-center .praxis-header-label{justify-content:center}.pfx-column-drag-preview.praxis-header-align-right .mat-sort-header-container,.pfx-column-drag-preview.praxis-header-align-right,.pfx-column-drag-preview.praxis-header-align-right .mat-sort-header-content,.pfx-column-drag-preview.praxis-header-align-right .praxis-header-label{justify-content:flex-end}.pfx-column-drag-preview.praxis-header-align-right .mat-sort-header-content{flex:0 1 auto;width:auto;margin-inline-start:auto}.pfx-column-drag-preview.praxis-header-align-right .praxis-header-label{width:auto}.pfx-column-drag-preview.praxis-header-align-left .praxis-header-label-text{text-align:left}.pfx-column-drag-preview.praxis-header-align-center .praxis-header-label-text{text-align:center}.pfx-column-drag-preview.praxis-header-align-right .praxis-header-label-text{text-align:right}:host ::ng-deep .pfx-column-drag-indicator .cdk-drag-placeholder{opacity:1;border:1px dashed var(--p-table-border-color);background:var(--p-table-row-hover-bg)}:host ::ng-deep .pfx-column-drag-indicator .cdk-drag-placeholder *{opacity:0}:host ::ng-deep .pfx-column-drag-indicator .mat-mdc-header-cell.cdk-drag-dragging{opacity:.58}@media(prefers-reduced-motion:reduce){:host ::ng-deep .pfx-column-drag-indicator .cdk-drop-list-dragging .mat-mdc-header-cell:not(.cdk-drag-placeholder){transition:none}.pfx-column-drag-preview{transition:none;transform:none}.praxis-column-reorder-status{animation:none}.pfx-expansion-detail-panel{animation:none!important;transition:none!important;transform:none!important}:host ::ng-deep .mat-mdc-row{transition:none}:host ::ng-deep .mat-mdc-table{transition:none}}.praxis-actions-header{text-align:right}.praxis-actions-header.align-start{text-align:left}.praxis-actions-header.align-center{text-align:center}.praxis-actions-header.align-end{text-align:right}.praxis-actions-header .praxis-actions-header__content{display:inline-flex;align-items:center;gap:var(--p-actions-header-gap, 6px);justify-content:center;max-width:100%;min-width:0;white-space:nowrap;color:var(--p-actions-header-color, inherit)}.praxis-actions-header .praxis-actions-header__content .mat-icon{font-size:18px;width:18px;height:18px;line-height:18px}.praxis-actions-header .praxis-actions-header__label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:640px){.praxis-actions-header .praxis-actions-header__label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}}:host ::ng-deep .mat-mdc-header-cell .mat-sort-header-container{box-sizing:border-box;padding-inline-end:0;position:static}:host ::ng-deep .pfx-column-drag-enabled .mat-mdc-header-cell.praxis-header-draggable .mat-sort-header-container{padding-inline-end:0}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable:not(.praxis-header-align-right) .mat-sort-header-container{padding-inline-end:calc(var(--p-table-column-resize-hit-area) + 8px)}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable.praxis-header-align-center .mat-sort-header-container{padding-inline-start:calc(var(--p-table-column-resize-hit-area) + 8px)}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable.praxis-header-align-right .mat-sort-header-container{padding-inline-end:0}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable:not(.praxis-header-align-right) .mat-sort-header-content{box-sizing:border-box;padding-inline-end:18px}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable.praxis-header-align-center .mat-sort-header-content{padding-inline-start:0;padding-inline-end:0}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable.praxis-header-align-right .mat-sort-header-content{box-sizing:border-box;flex:0 1 auto;width:auto;padding-inline-start:0;padding-inline-end:0}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable.praxis-header-align-right .praxis-header-label{width:auto}:host ::ng-deep .mat-mdc-header-cell .mat-sort-header-arrow{position:absolute;inset-inline-end:var(--p-table-sort-arrow-overlay-inset, 2px);top:50%;margin:0;transform:translateY(-50%)}:host ::ng-deep .mat-mdc-header-cell.praxis-header-resizable:not(.praxis-header-align-right) .mat-sort-header-arrow{inset-inline-end:calc(var(--p-table-column-resize-hit-area) + 2px)}:host ::ng-deep .mat-mdc-header-cell.praxis-header-align-right .mat-sort-header-arrow{position:static;order:-1;flex:0 0 auto;margin-inline:0 4px;transform:none}:host ::ng-deep .mat-mdc-cell{color:var(--p-table-text-color);height:var(--p-table-row-height, var(--p-table-row-height-default, 44px));padding:var(--p-cell-padding, var(--p-cell-padding-default, 10px 14px));font-size:var(--p-cell-font-size, var(--p-cell-font-size-default, inherit));line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .mat-mdc-cell .pfx-cell-content,:host ::ng-deep .mat-cell .pfx-cell-content{display:inline-flex;align-items:center;gap:6px;width:100%;min-width:0;overflow:hidden}:host ::ng-deep .pfx-cell-content.pfx-cell-anim{animation-duration:var(--pfx-cell-anim-duration, .8s);animation-delay:var(--pfx-cell-anim-delay, 0ms);animation-fill-mode:both;animation-timing-function:ease-in-out}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--once{animation-iteration-count:1}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--loop{animation-iteration-count:infinite}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--count{animation-iteration-count:var(--pfx-cell-anim-iteration-count, 1)}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--on-hover{animation-play-state:paused}:host ::ng-deep .mat-mdc-cell:hover .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--on-hover,:host ::ng-deep .mat-cell:hover .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--on-hover{animation-play-state:running}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--pulse{animation-name:pfx-cell-pulse}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--blink{animation-name:pfx-cell-blink}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--grow{animation-name:pfx-cell-grow}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--fade{animation-name:pfx-cell-fade}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--slide-in{animation-name:pfx-cell-slide-in}:host ::ng-deep .pfx-cell-content.pfx-cell-anim.pfx-cell-anim--border-pulse{animation-name:pfx-cell-border-pulse}@keyframes pfx-cell-pulse{0%{transform:scale(1)}50%{transform:scale(var(--pfx-cell-anim-scale-peak, 1.015))}to{transform:scale(1)}}@keyframes pfx-cell-blink{0%,49%{opacity:1}50%,to{opacity:var(--pfx-cell-anim-min-opacity, .35)}}@keyframes pfx-cell-grow{0%{transform:scale(.985)}to{transform:scale(1)}}@keyframes pfx-cell-fade{0%{opacity:0}to{opacity:1}}@keyframes pfx-cell-slide-in{0%{opacity:0;transform:translateY(var(--pfx-cell-anim-slide-distance, 4px))}to{opacity:1;transform:translateY(0)}}@keyframes pfx-cell-border-pulse{0%,to{box-shadow:inset 0 0 rgba(var(--pfx-cell-anim-border-rgb, 25, 118, 210),0)}50%{box-shadow:inset 0 0 0 2px rgba(var(--pfx-cell-anim-border-rgb, 25, 118, 210),var(--pfx-cell-anim-border-strength, .3))}}:host ::ng-deep .mat-mdc-row.pfx-row-anim{animation-duration:var(--pfx-row-anim-duration, .8s);animation-delay:var(--pfx-row-anim-delay, 0ms);animation-fill-mode:both;animation-timing-function:ease-in-out}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--once{animation-iteration-count:1}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--loop{animation-iteration-count:infinite}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--count{animation-iteration-count:var(--pfx-row-anim-iteration-count, 1)}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--on-hover{animation-play-state:paused}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--on-hover:hover{animation-play-state:running}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--pulse{animation-name:pfx-row-pulse}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--blink{animation-name:pfx-row-blink}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--grow{animation-name:pfx-row-grow}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--fade{animation-name:pfx-row-fade}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--slide-in{animation-name:pfx-row-slide-in}:host ::ng-deep .mat-mdc-row.pfx-row-anim.pfx-row-anim--border-pulse{animation-name:pfx-row-border-pulse}@keyframes pfx-row-pulse{0%{transform:scale(1)}50%{transform:scale(var(--pfx-row-anim-scale-peak, 1.015))}to{transform:scale(1)}}@keyframes pfx-row-blink{0%,49%{opacity:1}50%,to{opacity:var(--pfx-row-anim-min-opacity, .35)}}@keyframes pfx-row-grow{0%{transform:scale(.985)}to{transform:scale(1)}}@keyframes pfx-row-fade{0%{opacity:0}to{opacity:1}}@keyframes pfx-row-slide-in{0%{opacity:0;transform:translateY(var(--pfx-row-anim-slide-distance, 4px))}to{opacity:1;transform:translateY(0)}}@keyframes pfx-row-border-pulse{0%,to{box-shadow:inset 0 0 rgba(var(--pfx-row-anim-border-rgb, 25, 118, 210),0)}50%{box-shadow:inset 0 0 0 2px rgba(var(--pfx-row-anim-border-rgb, 25, 118, 210),var(--pfx-row-anim-border-strength, .3))}}@media(prefers-reduced-motion:reduce){:host ::ng-deep .pfx-cell-content.pfx-cell-anim,:host ::ng-deep .mat-mdc-row.pfx-row-anim{animation:none!important}}:host ::ng-deep .mat-mdc-row:hover{background:var(--p-table-row-hover-bg)}:host ::ng-deep .mat-mdc-row{height:var(--p-table-row-height, var(--p-table-row-height-default, 44px));min-height:var(--p-table-row-height, var(--p-table-row-height-default, 44px));transition:background-color var(--p-table-hover-transition-duration, .18s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1)),box-shadow var(--p-table-selection-transition-duration, .18s) var(--p-table-motion-easing, cubic-bezier(0, 0, .2, 1))}:host ::ng-deep .mat-mdc-row.pfx-row-click-selectable{cursor:pointer}:host ::ng-deep .mat-mdc-row:nth-child(2n){background:var(--p-table-row-even-bg)}:host ::ng-deep .mat-mdc-row:nth-child(2n):hover{background:var(--p-table-row-hover-bg)}:host ::ng-deep .mat-mdc-row.pfx-row-selected,:host ::ng-deep .mat-mdc-row.pfx-row-selected:hover{background:var(--p-table-row-selected-bg)}:host ::ng-deep .mat-mdc-row.pfx-row-selected .mat-mdc-cell{background:var(--p-table-row-selected-bg);color:var(--p-table-row-selected-fg);font-weight:var(--p-table-row-selected-font-weight)}:host ::ng-deep .mat-mdc-row.pfx-row-selected .mat-mdc-cell:first-child{position:relative}:host ::ng-deep .mat-mdc-row.pfx-row-selected .mat-mdc-cell:first-child:before{content:\"\";position:absolute;inset:0 auto 0 0;width:4px;border-radius:0 4px 4px 0;background:var(--p-table-row-selected-indicator);pointer-events:none}:host.row-borders ::ng-deep .mat-mdc-row .mat-mdc-cell{border-bottom:1px solid var(--p-table-border-color)}:host.row-borders ::ng-deep .mat-mdc-header-row .mat-mdc-header-cell{border-bottom:none}:host.col-borders ::ng-deep .mat-mdc-header-row .mat-mdc-header-cell,:host.col-borders ::ng-deep .mat-mdc-row .mat-mdc-cell{border-right:1px solid var(--p-table-border-color)}:host.col-borders ::ng-deep .mat-mdc-header-row .mat-mdc-header-cell:last-child,:host.col-borders ::ng-deep .mat-mdc-row .mat-mdc-cell:last-child{border-right:none}.ptable-error{display:flex;align-items:center;gap:12px;padding:12px;margin:8px 0;border:1px solid var(--md-sys-color-error);border-radius:8px}.ptable-error__content{flex:1}.ptable-error__title{font-weight:600}.ptable-info-banner{display:flex;gap:12px;align-items:center;padding:8px 12px;margin:8px 0;border-radius:8px;border:1px solid var(--md-sys-color-primary);background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.ptable-info-banner .text{flex:1;font-weight:600}.ptable-info-banner .actions{display:flex;gap:8px}.pfx-cell-image{display:inline-block;vertical-align:middle;background:var(--md-sys-color-surface-variant);border:1px solid var(--md-sys-color-outline-variant)}.pfx-cell-image.shape-rounded{border-radius:8px}.pfx-cell-image.shape-circle{border-radius:9999px}.pfx-badge{display:inline-flex;align-items:center;gap:6px;line-height:1;padding:4px 8px;border-radius:9999px;font-size:12px;font-weight:600;border:1px solid transparent;white-space:nowrap;--prx-rich-content-inline-gap: 6px}.pfx-badge .pfx-badge-icon{font-size:16px;width:16px;height:16px}.pfx-badge--plain{background:transparent;border-color:transparent;color:inherit}.pfx-badge--filled-primary{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pfx-badge--filled-accent{background:var(--md-sys-color-secondary);color:var(--md-sys-color-on-secondary)}.pfx-badge--filled-warn,.pfx-badge--filled-danger{background:var(--md-sys-color-error);color:var(--md-sys-color-on-error)}.pfx-badge--filled-success{background:var(--p-table-state-success-bg);color:var(--p-table-state-success-fg)}.pfx-badge--filled-info{background:var(--md-sys-color-tertiary);color:var(--md-sys-color-on-tertiary)}.pfx-badge--filled-basic{background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface);border-color:var(--md-sys-color-outline-variant)}.pfx-badge--outlined{background:transparent;border-color:var(--md-sys-color-outline-variant);color:inherit}.pfx-badge--soft-primary{background:var(--p-table-badge-soft-primary-bg);color:var(--p-table-badge-soft-primary-fg)}.pfx-badge--soft-accent{background:var(--p-table-badge-soft-accent-bg);color:var(--p-table-badge-soft-accent-fg)}.pfx-badge--soft-warn{background:var(--p-table-badge-soft-warn-bg);color:var(--p-table-badge-soft-warn-fg)}.pfx-badge--soft-danger{background:color-mix(in srgb,var(--p-table-state-danger-bg) 72%,transparent);color:var(--p-table-state-danger-fg);border-color:color-mix(in srgb,var(--p-table-state-danger-fg) 18%,transparent)}.pfx-badge--soft-success{background:color-mix(in srgb,var(--p-table-state-success-bg) 72%,transparent);color:var(--p-table-state-success-fg);border-color:color-mix(in srgb,var(--p-table-state-success-fg) 18%,transparent)}.pfx-badge--soft-info{background:color-mix(in srgb,var(--md-sys-color-tertiary-container) 72%,transparent);color:var(--md-sys-color-on-tertiary-container);border-color:color-mix(in srgb,var(--md-sys-color-tertiary) 18%,transparent)}.pfx-badge--soft-basic{background:color-mix(in srgb,var(--md-sys-color-surface-container-highest) 82%,transparent);color:color-mix(in srgb,var(--md-sys-color-on-surface) 76%,transparent);border-color:color-mix(in srgb,var(--md-sys-color-outline-variant) 65%,transparent)}.pfx-icon-renderer,:host ::ng-deep .pfx-icon-renderer__content{--prx-rich-content-inline-gap: var(--p-table-icon-value-gap, .04rem)}.pfx-icon-renderer__prefix,.pfx-icon-renderer__suffix,:host ::ng-deep .pfx-icon-renderer__prefix,:host ::ng-deep .pfx-icon-renderer__suffix{color:var(--p-table-icon-value-affix-color, currentColor);font-size:var(--p-table-icon-value-affix-font-size, .95em);font-weight:var(--p-table-icon-value-affix-font-weight, 500);line-height:1;opacity:var(--p-table-icon-value-affix-opacity, .72)}.pfx-icon-renderer__label,:host ::ng-deep .pfx-icon-renderer__label{color:var(--p-table-icon-value-color, currentColor);font-weight:var(--p-table-icon-value-font-weight, inherit);font-variant-numeric:tabular-nums;line-height:1}.row--success,.row--success td,td.row--success{background-color:var(--p-table-state-success-bg)!important;color:var(--p-table-state-success-fg)!important}.row--warning,.row--warning td,td.row--warning{background-color:var(--p-table-state-warning-bg)!important;color:var(--p-table-state-warning-fg)!important}.row--danger,.row--danger td,td.row--danger{background-color:var(--p-table-state-danger-bg)!important;color:var(--p-table-state-danger-fg)!important}.row--highlight,.row--highlight td,td.row--highlight{background-color:var(--p-table-state-highlight-bg)!important;color:var(--p-table-state-highlight-fg)!important;font-weight:600}.row--muted,.row--muted td,td.row--muted{opacity:.7;filter:saturate(.6)}.pfx-expansion-node-embed{display:flex;flex-direction:column;gap:12px;padding:16px;border:1px solid var(--md-sys-color-outline-variant);border-radius:16px;background:var(--md-sys-color-surface-container-low, var(--md-sys-color-surface))}.ptable-loading-state{padding:8px 12px 4px;display:grid;gap:10px}.ptable-loading-state__hero{display:grid;gap:10px;padding:14px;border-radius:8px;border:1px solid rgba(18,99,180,.08);background:linear-gradient(180deg,#ffffffa6,#ffffff47),linear-gradient(0deg,#1263b408,#1263b400)}.ptable-loading-state__rows{display:grid;gap:8px}.ptable-loading-state__row{display:grid;grid-template-columns:96px minmax(0,1fr) minmax(140px,1.2fr);gap:8px}.ptable-loading-state__line,.ptable-loading-state__cell{display:block;height:12px;border-radius:999px;background:linear-gradient(90deg,#1263b414,#1263b42e,#1263b414);background-size:200% 100%;animation:ptable-loading-wave 1.2s ease-in-out infinite}.ptable-loading-state__line--wide{width:180px}.ptable-loading-state__line--short{width:96px}.ptable-loading-state__cell--short{width:100%;max-width:84px}.ptable-loading-state__cell--wide{width:100%}.ptable-loading-state__message{font-size:.85rem;color:var(--md-sys-color-on-surface-variant, #5a5d67);padding-inline:4px}.pfx-expansion-node-embed__header,.pfx-expansion-node-embed__meta,.pfx-expansion-node-embed__empty,.pfx-expansion-node-embed__diagram-label{display:block}.pfx-expansion-node-embed--inline{min-width:0}.pfx-expansion-node-embed--chart praxis-chart{display:block;min-height:280px}.ptable-no-data-state{padding:12px;border-inline:1px solid var(--p-table-border-color);background:var(--p-table-paginator-bg, var(--p-table-bg));--pdx-empty-state-action-height: var(--p-table-empty-action-size, 36px);--pdx-empty-state-transparent-margin: 0}.ptable-no-data-state ::ng-deep .empty-card{margin:0;min-block-size:clamp(9rem,22vh,13.75rem);border:0;border-radius:0;background:transparent;box-shadow:none}.ptable-no-data-state ::ng-deep .empty-card mat-card-content{display:flex;min-block-size:inherit;flex-direction:column;align-items:center;justify-content:center;padding:24px}.ptable-no-data-state ::ng-deep .empty-card .content{align-items:center;text-align:center}.ptable-no-data-state ::ng-deep .empty-card .texts{justify-items:center}.ptable-no-data-state ::ng-deep .empty-card .desc{max-width:min(100%,42rem)}.ptable-no-data-state__announcement{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@keyframes ptable-loading-wave{0%{background-position:100% 0}to{background-position:-100% 0}}.pfx-expansion-node-embed__diagram{display:flex;flex-direction:column;gap:8px}.pfx-expansion-node-embed__diagram-source{margin:0;padding:12px;overflow:auto;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-highest, var(--md-sys-color-surface));color:var(--md-sys-color-on-surface);font-family:Consolas,Courier New,monospace;font-size:12px;line-height:1.4;white-space:pre-wrap}.pfx-expansion-node-embed__action-btn{align-self:flex-start}.pfx-expansion-node-embed__action-host{display:inline-flex}.praxis-table-columns-menu{max-height:320px;overflow-y:auto;padding:8px 0}.praxis-table-column-menu-item{display:flex!important;align-items:center;width:100%;box-sizing:border-box;padding:6px 16px;min-height:40px}.praxis-table-column-menu-item mat-checkbox{width:100%}\n"] }]
56454
56596
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i3$3.SettingsPanelService }, { type: i1.GenericCrudService }, { type: TableDefaultsProvider }, { type: FilterConfigService }, { type: DataFormattingService }, { type: i6$2.PraxisDialog }, { type: i2$2.MatSnackBar }, { type: undefined, decorators: [{
56455
56597
  type: Inject,
56456
56598
  args: [ASYNC_CONFIG_STORAGE]
56457
56599
  }] }, { type: undefined, decorators: [{
56458
56600
  type: Inject,
56459
56601
  args: [CONNECTION_STORAGE]
56460
- }] }, { type: i0.ElementRef }, { type: i1.GlobalConfigService }, { type: i0.Injector }, { type: i1.ComponentKeyService }, { type: i1.LoadingOrchestrator }, { type: i1.GlobalActionService }, { type: undefined, decorators: [{
56602
+ }] }, { type: i0.ElementRef }, { type: i1.GlobalConfigService }, { type: i0.Injector }, { type: i1.ComponentKeyService }, { type: i1.LoadingOrchestrator }, { type: i1.GlobalActionService }, { type: i1.EnterpriseRuntimeContextService, decorators: [{
56603
+ type: Optional
56604
+ }] }, { type: undefined, decorators: [{
56461
56605
  type: Optional
56462
56606
  }, {
56463
56607
  type: Inject,
@@ -56578,6 +56722,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
56578
56722
  }], enableCustomization: [{
56579
56723
  type: Input,
56580
56724
  args: [{ transform: booleanAttribute }]
56725
+ }], authoringCapability: [{
56726
+ type: Input
56581
56727
  }], dense: [{
56582
56728
  type: Input
56583
56729
  }], hostDensityCompactClass: [{
@@ -58206,7 +58352,8 @@ const PRAXIS_TABLE_AUTHORING_MANIFEST = {
58206
58352
  { name: 'queryContext', type: 'PraxisDataQueryContext', description: 'Contexto de consulta declarativo' },
58207
58353
  { name: 'title', type: 'string', description: 'Título da tabela' },
58208
58354
  { name: 'subtitle', type: 'string', description: 'Subtítulo da tabela' },
58209
- { name: 'enableCustomization', type: 'boolean', description: 'Habilita modo de edição' }
58355
+ { name: 'enableCustomization', type: 'boolean', description: 'Habilita modo de edição' },
58356
+ { name: 'authoringCapability', type: 'string', description: 'Capability pública do contexto corporativo exigida para materializar authoring governado.' }
58210
58357
  ],
58211
58358
  editableTargets: [
58212
58359
  { kind: 'column', resolver: 'column-by-field', description: 'Colunas base da tabela' },
@@ -61758,6 +61905,11 @@ const PRAXIS_TABLE_COMPONENT_METADATA = {
61758
61905
  default: false,
61759
61906
  description: 'Permite customização runtime da tabela',
61760
61907
  },
61908
+ {
61909
+ name: 'authoringCapability',
61910
+ type: 'string',
61911
+ description: 'Capability publica do EnterpriseRuntimeContext exigida para exibir e abrir configuracao governada da tabela.',
61912
+ },
61761
61913
  {
61762
61914
  name: 'dense',
61763
61915
  type: 'boolean',