@praxisui/table 1.0.0-beta.24 → 1.0.0-beta.25
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.
|
@@ -21428,7 +21428,7 @@ class PraxisFilter {
|
|
|
21428
21428
|
}
|
|
21429
21429
|
}
|
|
21430
21430
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: PraxisFilter, deps: [{ token: i1$3.GenericCrudService }, { token: CONFIG_STORAGE }, { token: i0.DestroyRef }, { token: FilterConfigService }, { token: i3$2.SettingsPanelService }, { token: i2$1.MatSnackBar }, { token: i1$2.MatDialog }, { token: i0.ChangeDetectorRef }, { token: i1$3.DynamicFormService }, { token: i1$3.SchemaNormalizerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
21431
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: PraxisFilter, isStandalone: true, selector: "praxis-filter", inputs: { resourcePath: "resourcePath", formId: "formId", mode: "mode", notifyIfOutdated: "notifyIfOutdated", snoozeMs: "snoozeMs", autoOpenSettingsOnOutdated: "autoOpenSettingsOnOutdated", editModeEnabled: "editModeEnabled", value: "value", quickField: "quickField", alwaysVisibleFields: "alwaysVisibleFields", tags: "tags", allowSaveTags: "allowSaveTags", persistenceKey: "persistenceKey", i18n: "i18n", changeDebounceMs: "changeDebounceMs", showFilterSettings: "showFilterSettings", summary: "summary", summaryTemplate: "summaryTemplate", summaryMap: "summaryMap", autoSummary: "autoSummary", confirmTagDelete: "confirmTagDelete", debugLayout: "debugLayout", placeBooleansInActions: "placeBooleansInActions", showToggleLabels: "showToggleLabels", alwaysMinWidth: "alwaysMinWidth", alwaysColsMd: "alwaysColsMd", alwaysColsLg: "alwaysColsLg", tagColor: "tagColor", tagVariant: "tagVariant", tagButtonColor: "tagButtonColor", actionsButtonColor: "actionsButtonColor", actionsVariant: "actionsVariant", overlayVariant: "overlayVariant", overlayBackdrop: "overlayBackdrop", advancedOpenMode: "advancedOpenMode" }, outputs: { submit: "submit", change: "change", clear: "clear", modeChange: "modeChange", requestSearch: "requestSearch", tagsChange: "tagsChange", metaChanged: "metaChanged", schemaStatusChange: "schemaStatusChange" }, host: { listeners: { "window:resize": "onWindowResize()", "document:keydown": "onGlobalKeydown($event)" }, properties: { "class.debug-layout": "debugLayout", "style.--pfx-always-min": "alwaysMinWidth + \"px\"", "style.--pfx-always-cols-md": "alwaysColsMd", "style.--pfx-always-cols-lg": "alwaysColsLg" } }, viewQueries: [{ propertyName: "anchorRef", first: true, predicate: ["anchorRef"], descendants: true, read: CdkOverlayOrigin }, { propertyName: "quickHostRef", first: true, predicate: ["quickHostRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"modeState === 'filter'; else summaryCard\">\n <mat-progress-bar *ngIf=\"saving\" mode=\"indeterminate\"></mat-progress-bar>\n\n <form class=\"praxis-filter-bar\" [class.is-open]=\"advancedOpen\" (submit)=\"onSubmit(); $event.preventDefault()\">\n <!-- QUICK FIELD -->\n <div class=\"quick-field\" *ngIf=\"quickFieldMeta; else fallbackQuick\">\n <div class=\"filter-anchor quick-shell\" #anchorRef=\"cdkOverlayOrigin\" cdkOverlayOrigin>\n\n <!-- din\u00E2mico: envolvido por host para garantir layout flex correto -->\n <div *ngIf=\"quickFieldMode === 'dynamic'\" class=\"quick-field-host\" #quickHostRef\n dynamicFieldLoader\n [fields]=\"quickFieldMetaArray\"\n [formGroup]=\"quickForm\"\n (componentsCreated)=\"onQuickComponents($event)\"\n (fieldCreated)=\"onQuickFieldCreated($event)\">\n </div>\n\n <!-- fallback (com meta) \u2014 sem suffix, s\u00F3 o input -->\n <mat-form-field *ngIf=\"quickFieldMode === 'fallback'\"\n appearance=\"outline\"\n floatLabel=\"always\"\n class=\"fallback-quick-field\">\n <mat-label>{{ quickFieldMeta.label || quickField }}</mat-label>\n <input matInput [formControl]=\"quickControl\"\n [type]=\"getQuickInputType()\"\n [attr.inputmode]=\"getQuickInputMode()\"\n [attr.aria-label]=\"quickFieldMeta.label || quickField\"\n (keydown.escape)=\"onQuickClear()\"\n (keypress)=\"onQuickNumericKeypress($event)\"\n (blur)=\"onQuickBlurFormat()\">\n </mat-form-field>\n\n \n </div>\n </div>\n\n\n <!-- QUICK \u201Cfalso\u201D (quando n\u00E3o h\u00E1 meta) -->\n <ng-template #fallbackQuick>\n <div class=\"filter-anchor quick-shell\" #anchorRef=\"cdkOverlayOrigin\" cdkOverlayOrigin>\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"fallback-quick-field\">\n <mat-label>{{ i18nLabels.searchPlaceholder }}</mat-label>\n <input matInput [formControl]=\"quickControl\"\n [attr.aria-label]=\"i18nLabels.searchPlaceholder\"\n (keydown.escape)=\"onQuickClear()\" />\n </mat-form-field>\n </div>\n </ng-template>\n\n <!-- A\u00C7\u00D5ES INLINE (fixas \u00E0 direita da barra) -->\n <div class=\"inline-actions\" [class.actions-outlined]=\"actionsVariant==='outlined'\">\n <!-- Toggles/booleans simples realocados para a barra de a\u00E7\u00F5es -->\n <div class=\"inline-toggles\" *ngIf=\"toggleMetas.length\">\n <ng-container dynamicFieldLoader [fields]=\"toggleMetas\" [formGroup]=\"alwaysForm\"\n (componentsCreated)=\"onToggleComponents($event)\"></ng-container>\n </div>\n <button mat-icon-button [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\" type=\"button\" *ngIf=\"quickHasValue()\"\n (click)=\"onQuickClear()\" [attr.aria-label]=\"i18nLabels.clear\">\n <mat-icon [praxisIcon]=\"'close'\"></mat-icon>\n </button>\n <button mat-icon-button [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\" type=\"button\" (click)=\"onSubmit()\" [attr.aria-label]=\"i18nLabels.apply\">\n <mat-icon [praxisIcon]=\"'search'\"></mat-icon>\n </button>\n <button mat-icon-button [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\" type=\"button\"\n [matBadge]=\"activeFiltersCount\"\n [matBadgeHidden]=\"!activeFiltersCount\"\n matBadgeSize=\"small\"\n matBadgeColor=\"primary\"\n [matBadgeOverlap]=\"false\"\n (click)=\"toggleAdvanced()\"\n [attr.aria-label]=\"getAdvancedAriaLabel()\"\n [attr.aria-expanded]=\"advancedOpen\"\n [attr.aria-controls]=\"advancedPanelId\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n </button>\n <button mat-icon-button [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\" type=\"button\" (click)=\"openSettings()\" *ngIf=\"showFilterSettings\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"schemaOutdated ? 'Schema do servidor mudou \u2014 Reconciliar' : i18nLabels.settings\"\n matTooltipPosition=\"below\">\n <mat-icon [praxisIcon]=\"'settings'\"></mat-icon>\n </button>\n </div>\n\n <!-- campos sempre vis\u00EDveis (se houver) -->\n <div class=\"always-fields\" *ngIf=\"alwaysVisibleMetas.length\">\n <ng-container dynamicFieldLoader [fields]=\"alwaysVisibleMetas\" [formGroup]=\"alwaysForm\"\n (componentsCreated)=\"onAlwaysComponents($event)\"></ng-container>\n </div>\n\n <!-- acessibilidade -->\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 <!-- tags -->\n <div class=\"praxis-filter-tags\" *ngIf=\"displayedTags.length\" [class.outlined]=\"tagVariant==='outlined'\">\n <mat-chip-set>\n <mat-chip *ngFor=\"let tag of displayedTags\"\n [color]=\"tagColor === 'basic' ? null : tagColor\"\n (click)=\"applyTag(tag)\" (keydown.enter)=\"applyTag(tag)\"\n tabindex=\"0\" role=\"button\">\n <ng-container *ngIf=\"editingTagId !== tag.id; else editChip\">\n <span class=\"chip-label\">{{ tag.label }}</span>\n <span class=\"chip-actions\" *ngIf=\"isUserTag(tag)\">\n <button mat-icon-button [color]=\"tagButtonColor === 'basic' ? null : tagButtonColor\"\n (click)=\"startEditTag(tag, $event)\" aria-label=\"edit tag\">\n <mat-icon>edit</mat-icon>\n </button>\n <button mat-icon-button [color]=\"tagButtonColor === 'basic' ? null : tagButtonColor\"\n (click)=\"deleteTag(tag)\" aria-label=\"remove tag\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </ng-container>\n <ng-template #editChip>\n <input matInput class=\"chip-editor\" [formControl]=\"editingTagLabel\"\n (keydown.enter)=\"commitEditTag(tag, $event)\" (keydown.escape)=\"cancelEditTag($event)\" (click)=\"$event.stopPropagation()\" />\n <button mat-button color=\"primary\" (click)=\"commitEditTag(tag, $event)\">{{ i18nLabels.save }}</button>\n <button mat-button (click)=\"cancelEditTag($event)\">{{ i18nLabels.cancel }}</button>\n </ng-template>\n </mat-chip>\n </mat-chip-set>\n </div>\n\n <!-- OVERLAY -->\n <ng-container *ngIf=\"overlayOrigin\">\n <ng-template cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin!\"\n [cdkConnectedOverlayOpen]=\"advancedOpen\"\n [cdkConnectedOverlayHasBackdrop]=\"overlayBackdrop\"\n [cdkConnectedOverlayBackdropClass]=\"'praxis-overlay-backdrop'\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayOffsetY]=\"8\"\n [cdkConnectedOverlayLockPosition]=\"true\"\n [cdkConnectedOverlayWidth]=\"overlayWidth\"\n [cdkConnectedOverlayPanelClass]=\"['praxis-filter-overlay', isMobile ? 'mobile' : '', overlayVariant === 'frosted' ? 'frosted' : '']\"\n (overlayOutsideClick)=\"onOverlayOutsideClick($event)\"\n (backdropClick)=\"onOverlayDetach()\"\n (detach)=\"onOverlayDetach()\">\n <div class=\"praxis-filter-advanced\" (keydown.escape)=\"toggleAdvanced()\" role=\"dialog\" aria-modal=\"true\" [attr.id]=\"advancedPanelId\">\n <div class=\"advanced-body\">\n <mat-progress-bar *ngIf=\"schemaLoading\" mode=\"indeterminate\"></mat-progress-bar>\n <p *ngIf=\"schemaError\" class=\"schema-error\">\n {{ i18nLabels.errorLoadingFilters }}\n <button mat-button type=\"button\" (click)=\"loadSchema()\">{{ i18nLabels.retry }}</button>\n </p>\n <praxis-filter-form *ngIf=\"!schemaLoading && !schemaError && advancedConfig\"\n [formId]=\"formId\" [resourcePath]=\"resourcePath\" [mode]=\"'edit'\" [config]=\"advancedConfig\"\n (formReady)=\"onAdvancedReady($event)\" (valueChange)=\"onAdvancedChange($event)\"\n (validityChange)=\"onAdvancedValidityChange($event)\" (submit)=\"onAdvancedSubmit($event)\">\n </praxis-filter-form>\n <p *ngIf=\"!schemaLoading && !schemaError && !advancedConfig\">{{ i18nLabels.noData }}</p>\n </div>\n <div class=\"advanced-actions\" *ngIf=\"!schemaLoading && !schemaError && advancedConfig\">\n <button mat-raised-button color=\"primary\" type=\"button\"\n (click)=\"onAdvancedSubmit({ formData: (advancedForm?.getRawValue?.() || {}) })\"\n [disabled]=\"!advancedValid\">\n {{ i18nLabels.apply }}\n </button>\n <button mat-button type=\"button\" (click)=\"onClear()\">{{ i18nLabels.clear }}</button>\n </div>\n </div>\n </ng-template>\n </ng-container>\n</ng-container>\n\n<!-- resumo -->\n<ng-template #summaryCard>\n <div class=\"praxis-filter-card\" (keydown.escape)=\"onClear()\">\n <div class=\"summary-header\">\n <img *ngIf=\"currentSummaryMap?.avatar?.(currentSummary)\" [src]=\"currentSummaryMap?.avatar?.(currentSummary)\"\n class=\"summary-avatar\" alt=\"\" />\n <div class=\"summary-text\">\n <div class=\"summary-title\">{{ currentSummaryMap?.title?.(currentSummary) || '' }}</div>\n <div class=\"summary-subtitle\" *ngIf=\"currentSummaryMap?.subtitle\">{{ currentSummaryMap?.subtitle?.(currentSummary) }}</div>\n </div>\n </div>\n <div class=\"summary-badges\" *ngIf=\"currentSummaryMap?.badges?.length\">\n <span *ngFor=\"let b of currentSummaryMap!.badges\">{{ b(currentSummary) }}</span>\n </div>\n <div class=\"card-actions\">\n <button mat-button type=\"button\" (click)=\"switchToFilter()\">{{ i18nLabels.edit }}</button>\n <button mat-button type=\"button\" (click)=\"onClear()\">{{ i18nLabels.clear }}</button>\n </div>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:root{--pfx-filter-h: 40px;--pfx-filter-align-offset: 2px;--pfx-gap-x: 16px;--pfx-gap-y: 12px;--pfx-quick-pad-top: 5px;--pfx-quick-pad-left: 12px;--pfx-advanced-pad-x: 24px;--pfx-field-min: 280px;--pfx-quick-bg: var(--surface-2, #232a32);--pfx-quick-border: var(--pfx-surface-border, rgba(255,255,255,.08));--pfx-quick-radius: 12px}.praxis-filter-bar{display:grid;width:100%;grid-template-columns:1fr auto;grid-template-areas:\"quick actions\" \"always always\";column-gap:0;row-gap:8px;align-items:center}:host.debug-layout{background-image:repeating-linear-gradient(to right,rgba(147,197,253,.08) 0,rgba(147,197,253,.08) 1px,transparent 1px,transparent var(--pfx-gap-x)),repeating-linear-gradient(to bottom,rgba(163,230,53,.08) 0,rgba(163,230,53,.08) 1px,transparent 1px,transparent 8px)}:host.debug-layout .praxis-filter-bar{outline:1px dashed #f59e0b}:host.debug-layout .quick-shell{outline:1px dashed #3b82f6}:host.debug-layout .always-fields{outline:1px dashed #22c55e}:host.debug-layout .praxis-filter-overlay .praxis-filter-advanced{outline:2px solid #a855f7}.quick-field{grid-area:quick;min-width:280px;align-self:center}.inline-actions{grid-area:actions;justify-self:end}.always-fields{grid-area:always}.quick-shell{min-height:var(--pfx-filter-h);padding:0 0 0 var(--pfx-quick-pad-left);display:flex;align-items:center;flex-wrap:nowrap;gap:6px;overflow:hidden;background:var(--pfx-quick-bg);border:1px solid var(--pfx-quick-border);border-right:none;border-radius:var(--pfx-quick-radius) 0 0 var(--pfx-quick-radius)}.quick-shell>*{flex:1 1 auto;min-width:0}.quick-field-host{display:contents}:host ::ng-deep .quick-shell .mat-mdc-form-field{width:100%!important;flex:1 1 auto}:host ::ng-deep .quick-shell .mat-mdc-form-field{margin:0!important}:host ::ng-deep .quick-shell pdx-text-input,:host ::ng-deep .quick-shell pdx-select,:host ::ng-deep .quick-shell pdx-date-input,:host ::ng-deep .quick-shell pdx-auto-complete{flex:1 1 auto;min-width:0;display:block}.inline-actions{flex:0 0 auto;display:flex;gap:4px;align-self:start;white-space:nowrap;height:var(--pfx-filter-h);align-items:center;background:var(--pfx-quick-bg);border:1px solid var(--pfx-quick-border);border-left:none;border-radius:0 var(--pfx-quick-radius) var(--pfx-quick-radius) 0;padding-right:4px;margin-left:-1px}.inline-actions.actions-outlined button.mat-mdc-icon-button{border:1px solid var(--pfx-quick-border);border-radius:50%}.inline-actions .mat-mdc-icon-button{width:36px;height:36px}.inline-actions mat-icon{width:20px;height:20px;font-size:20px}.fallback-quick-field{height:var(--pfx-filter-h);display:flex;align-items:center}:host ::ng-deep .fallback-quick-field .mat-mdc-text-field-wrapper.mdc-text-field--outlined{height:var(--pfx-filter-h);align-items:center;padding-top:var(--pfx-quick-pad-top)}:host ::ng-deep .quick-shell .mat-mdc-text-field-wrapper.mdc-text-field--outlined{min-height:var(--pfx-filter-h);align-items:center;padding-top:var(--pfx-quick-pad-top)}:host ::ng-deep .quick-shell .mat-mdc-form-field-infix{min-height:var(--pfx-filter-h);padding-top:8px}:host ::ng-deep .quick-shell .mat-mdc-select-trigger{height:var(--pfx-filter-h);align-items:center}:host ::ng-deep .quick-shell .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .quick-shell .mdc-line-ripple{display:none!important}.always-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(var(--pfx-always-min, 300px),1fr));gap:8px}:host ::ng-deep .always-fields .mat-mdc-text-field-wrapper.mdc-text-field--outlined{min-height:var(--pfx-filter-h);align-items:center}:host ::ng-deep .always-fields .mat-mdc-form-field-infix{min-height:var(--pfx-filter-h)}:host ::ng-deep .always-fields .mat-mdc-select-trigger{height:var(--pfx-filter-h);align-items:center}:host ::ng-deep .always-fields .mat-mdc-form-field{width:100%}.praxis-filter-tags{display:flex;flex-wrap:wrap;gap:6px}.praxis-filter-tags mat-chip{border-radius:16px;padding:0 6px}.praxis-filter-tags .chip-actions{display:inline-flex;align-items:center;gap:2px;margin-left:4px}.chip-editor{width:140px;margin-right:8px}.praxis-filter-tags.outlined mat-chip{background:transparent!important;border:1px solid var(--pfx-quick-border)}.praxis-filter-advanced{display:flex;flex-direction:column;min-width:400px;max-width:90vw;min-height:260px;max-height:80vh;margin-top:25px;margin-right:15px;margin-left:25px;background:var(--md-sys-color-surface-container, #2a3038)!important;background-color:var(--md-sys-color-surface-container, #2a3038)!important;background:color-mix(in srgb,var(--md-sys-color-surface-container, #2a3038),transparent 6%)!important;color:var(--md-sys-color-on-surface, #e6eaf2);border:1px solid var(--border-color);border-radius:12px;box-shadow:0 8px 24px #00000052,0 2px 8px #0000002e}.praxis-filter-overlay.mobile .praxis-filter-advanced{height:100vh;max-height:100vh}:host ::ng-deep .praxis-overlay-backdrop{background:#0006;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.advanced-body{padding:var(--pfx-gap-y) 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:var(--md-sys-color-surface-container, #2a3038)!important;background-color:var(--md-sys-color-surface-container, #2a3038)!important;background:color-mix(in srgb,var(--md-sys-color-surface-container, #2a3038),transparent 0%)!important;border-top:1px solid var(--border-color);box-shadow:0 -1px #0000002e}.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(--md-sys-color-on-surface-variant);--mdc-outlined-text-field-input-text-color: var(--md-sys-color-on-surface);--mdc-outlined-text-field-container-color: var(--md-sys-color-surface-container, #2a3038);--mdc-outlined-text-field-container-color: color-mix(in srgb, var(--md-sys-color-surface-container, #2a3038), transparent 90%)}: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(--md-sys-color-on-surface)}@media (min-width: 600px){.always-fields{grid-template-columns:repeat(var(--pfx-always-cols-md, 2),minmax(0,1fr))}:host ::ng-deep .praxis-filter-advanced .praxis-filter-form .filter-row{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 960px){.always-fields{grid-template-columns:repeat(var(--pfx-always-cols-lg, 3),minmax(0,1fr))}}.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}.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}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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],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: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$1.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.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: i11.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: i11.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: i14$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { 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: "directive", type: DynamicFieldLoaderDirective, selector: "[dynamicFieldLoader]", inputs: ["fields", "formGroup", "enableExternalControlBinding", "itemTemplate", "readonlyMode", "disabledMode", "presentationMode", "visible", "canvasMode"], outputs: ["componentsCreated", "fieldCreated", "fieldDestroyed", "canvasMouseEnter", "canvasMouseLeave", "canvasClick"] }, { kind: "component", type: PraxisFilterForm, selector: "praxis-filter-form", inputs: ["config", "formId", "resourcePath", "mode"], outputs: ["formReady", "valueChange", "submit", "validityChange"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i19.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"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i19.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "ngmodule", type: MatDialogModule }] });
|
|
21431
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: PraxisFilter, isStandalone: true, selector: "praxis-filter", inputs: { resourcePath: "resourcePath", formId: "formId", mode: "mode", notifyIfOutdated: "notifyIfOutdated", snoozeMs: "snoozeMs", autoOpenSettingsOnOutdated: "autoOpenSettingsOnOutdated", editModeEnabled: "editModeEnabled", value: "value", quickField: "quickField", alwaysVisibleFields: "alwaysVisibleFields", tags: "tags", allowSaveTags: "allowSaveTags", persistenceKey: "persistenceKey", i18n: "i18n", changeDebounceMs: "changeDebounceMs", showFilterSettings: "showFilterSettings", summary: "summary", summaryTemplate: "summaryTemplate", summaryMap: "summaryMap", autoSummary: "autoSummary", confirmTagDelete: "confirmTagDelete", debugLayout: "debugLayout", placeBooleansInActions: "placeBooleansInActions", showToggleLabels: "showToggleLabels", alwaysMinWidth: "alwaysMinWidth", alwaysColsMd: "alwaysColsMd", alwaysColsLg: "alwaysColsLg", tagColor: "tagColor", tagVariant: "tagVariant", tagButtonColor: "tagButtonColor", actionsButtonColor: "actionsButtonColor", actionsVariant: "actionsVariant", overlayVariant: "overlayVariant", overlayBackdrop: "overlayBackdrop", advancedOpenMode: "advancedOpenMode" }, outputs: { submit: "submit", change: "change", clear: "clear", modeChange: "modeChange", requestSearch: "requestSearch", tagsChange: "tagsChange", metaChanged: "metaChanged", schemaStatusChange: "schemaStatusChange" }, host: { listeners: { "window:resize": "onWindowResize()", "document:keydown": "onGlobalKeydown($event)" }, properties: { "class.debug-layout": "debugLayout", "style.--pfx-always-min": "alwaysMinWidth + \"px\"", "style.--pfx-always-cols-md": "alwaysColsMd", "style.--pfx-always-cols-lg": "alwaysColsLg" } }, viewQueries: [{ propertyName: "anchorRef", first: true, predicate: ["anchorRef"], descendants: true, read: CdkOverlayOrigin }, { propertyName: "quickHostRef", first: true, predicate: ["quickHostRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"modeState === 'filter'; else summaryCard\">\n <mat-progress-bar *ngIf=\"saving\" mode=\"indeterminate\"></mat-progress-bar>\n\n <form class=\"praxis-filter-bar\" [class.is-open]=\"advancedOpen\" (submit)=\"onSubmit(); $event.preventDefault()\">\n <!-- QUICK FIELD -->\n <div class=\"quick-field\" *ngIf=\"quickFieldMeta; else fallbackQuick\">\n <div class=\"filter-anchor quick-shell\" #anchorRef=\"cdkOverlayOrigin\" cdkOverlayOrigin>\n\n <!-- din\u00E2mico: envolvido por host para garantir layout flex correto -->\n <div *ngIf=\"quickFieldMode === 'dynamic'\" class=\"quick-field-host\" #quickHostRef\n dynamicFieldLoader\n [fields]=\"quickFieldMetaArray\"\n [formGroup]=\"quickForm\"\n (componentsCreated)=\"onQuickComponents($event)\"\n (fieldCreated)=\"onQuickFieldCreated($event)\">\n </div>\n\n <!-- fallback (com meta) \u2014 sem suffix, s\u00F3 o input -->\n <mat-form-field *ngIf=\"quickFieldMode === 'fallback'\"\n appearance=\"outline\"\n floatLabel=\"always\"\n class=\"fallback-quick-field\">\n <mat-label>{{ quickFieldMeta.label || quickField }}</mat-label>\n <input matInput [formControl]=\"quickControl\"\n [type]=\"getQuickInputType()\"\n [attr.inputmode]=\"getQuickInputMode()\"\n [attr.aria-label]=\"quickFieldMeta.label || quickField\"\n (keydown.escape)=\"onQuickClear()\"\n (keypress)=\"onQuickNumericKeypress($event)\"\n (blur)=\"onQuickBlurFormat()\">\n </mat-form-field>\n\n \n </div>\n </div>\n\n\n <!-- QUICK \u201Cfalso\u201D (quando n\u00E3o h\u00E1 meta) -->\n <ng-template #fallbackQuick>\n <div class=\"filter-anchor quick-shell\" #anchorRef=\"cdkOverlayOrigin\" cdkOverlayOrigin>\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"fallback-quick-field\">\n <mat-label>{{ i18nLabels.searchPlaceholder }}</mat-label>\n <input matInput [formControl]=\"quickControl\"\n [attr.aria-label]=\"i18nLabels.searchPlaceholder\"\n (keydown.escape)=\"onQuickClear()\" />\n </mat-form-field>\n </div>\n </ng-template>\n\n <!-- A\u00C7\u00D5ES INLINE (fixas \u00E0 direita da barra) -->\n <div class=\"inline-actions\" [class.actions-outlined]=\"actionsVariant==='outlined'\">\n <!-- Toggles/booleans simples realocados para a barra de a\u00E7\u00F5es -->\n <div class=\"inline-toggles\" *ngIf=\"toggleMetas.length\">\n <ng-container dynamicFieldLoader [fields]=\"toggleMetas\" [formGroup]=\"alwaysForm\"\n (componentsCreated)=\"onToggleComponents($event)\"></ng-container>\n </div>\n <button mat-icon-button [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\" type=\"button\" *ngIf=\"quickHasValue()\"\n (click)=\"onQuickClear()\" [attr.aria-label]=\"i18nLabels.clear\">\n <mat-icon [praxisIcon]=\"'close'\"></mat-icon>\n </button>\n <button mat-icon-button [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\" type=\"button\" (click)=\"onSubmit()\" [attr.aria-label]=\"i18nLabels.apply\">\n <mat-icon [praxisIcon]=\"'search'\"></mat-icon>\n </button>\n <button mat-icon-button [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\" type=\"button\"\n [matBadge]=\"activeFiltersCount\"\n [matBadgeHidden]=\"!activeFiltersCount\"\n matBadgeSize=\"small\"\n matBadgeColor=\"primary\"\n [matBadgeOverlap]=\"false\"\n (click)=\"toggleAdvanced()\"\n [attr.aria-label]=\"getAdvancedAriaLabel()\"\n [attr.aria-expanded]=\"advancedOpen\"\n [attr.aria-controls]=\"advancedPanelId\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n </button>\n <button mat-icon-button [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\" type=\"button\" (click)=\"openSettings()\" *ngIf=\"showFilterSettings\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"schemaOutdated ? 'Schema do servidor mudou \u2014 Reconciliar' : i18nLabels.settings\"\n matTooltipPosition=\"below\">\n <mat-icon [praxisIcon]=\"'settings'\"></mat-icon>\n </button>\n </div>\n\n <!-- campos sempre vis\u00EDveis (se houver) -->\n <div class=\"always-fields\" *ngIf=\"alwaysVisibleMetas.length\">\n <ng-container dynamicFieldLoader [fields]=\"alwaysVisibleMetas\" [formGroup]=\"alwaysForm\"\n (componentsCreated)=\"onAlwaysComponents($event)\"></ng-container>\n </div>\n\n <!-- acessibilidade -->\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 <!-- tags -->\n <div class=\"praxis-filter-tags\" *ngIf=\"displayedTags.length\" [class.outlined]=\"tagVariant==='outlined'\">\n <mat-chip-set>\n <mat-chip *ngFor=\"let tag of displayedTags\"\n [color]=\"tagColor === 'basic' ? null : tagColor\"\n (click)=\"applyTag(tag)\" (keydown.enter)=\"applyTag(tag)\"\n tabindex=\"0\" role=\"button\">\n <ng-container *ngIf=\"editingTagId !== tag.id; else editChip\">\n <span class=\"chip-label\">{{ tag.label }}</span>\n <span class=\"chip-actions\" *ngIf=\"isUserTag(tag)\">\n <button mat-icon-button [color]=\"tagButtonColor === 'basic' ? null : tagButtonColor\"\n (click)=\"startEditTag(tag, $event)\" aria-label=\"edit tag\">\n <mat-icon>edit</mat-icon>\n </button>\n <button mat-icon-button [color]=\"tagButtonColor === 'basic' ? null : tagButtonColor\"\n (click)=\"deleteTag(tag)\" aria-label=\"remove tag\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </ng-container>\n <ng-template #editChip>\n <input matInput class=\"chip-editor\" [formControl]=\"editingTagLabel\"\n (keydown.enter)=\"commitEditTag(tag, $event)\" (keydown.escape)=\"cancelEditTag($event)\" (click)=\"$event.stopPropagation()\" />\n <button mat-button color=\"primary\" (click)=\"commitEditTag(tag, $event)\">{{ i18nLabels.save }}</button>\n <button mat-button (click)=\"cancelEditTag($event)\">{{ i18nLabels.cancel }}</button>\n </ng-template>\n </mat-chip>\n </mat-chip-set>\n </div>\n\n <!-- OVERLAY -->\n <ng-container *ngIf=\"overlayOrigin\">\n <ng-template cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin!\"\n [cdkConnectedOverlayOpen]=\"advancedOpen\"\n [cdkConnectedOverlayHasBackdrop]=\"overlayBackdrop\"\n [cdkConnectedOverlayBackdropClass]=\"'praxis-overlay-backdrop'\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayOffsetY]=\"8\"\n [cdkConnectedOverlayLockPosition]=\"true\"\n [cdkConnectedOverlayWidth]=\"overlayWidth\"\n [cdkConnectedOverlayPanelClass]=\"['praxis-filter-overlay', isMobile ? 'mobile' : '', overlayVariant === 'frosted' ? 'frosted' : '']\"\n (overlayOutsideClick)=\"onOverlayOutsideClick($event)\"\n (backdropClick)=\"onOverlayDetach()\"\n (detach)=\"onOverlayDetach()\">\n <div class=\"praxis-filter-advanced\" (keydown.escape)=\"toggleAdvanced()\" role=\"dialog\" aria-modal=\"true\" [attr.id]=\"advancedPanelId\">\n <div class=\"advanced-body\">\n <mat-progress-bar *ngIf=\"schemaLoading\" mode=\"indeterminate\"></mat-progress-bar>\n <p *ngIf=\"schemaError\" class=\"schema-error\">\n {{ i18nLabels.errorLoadingFilters }}\n <button mat-button type=\"button\" (click)=\"loadSchema()\">{{ i18nLabels.retry }}</button>\n </p>\n <praxis-filter-form *ngIf=\"!schemaLoading && !schemaError && advancedConfig\"\n [formId]=\"formId\" [resourcePath]=\"resourcePath\" [mode]=\"'edit'\" [config]=\"advancedConfig\"\n (formReady)=\"onAdvancedReady($event)\" (valueChange)=\"onAdvancedChange($event)\"\n (validityChange)=\"onAdvancedValidityChange($event)\" (submit)=\"onAdvancedSubmit($event)\">\n </praxis-filter-form>\n <p *ngIf=\"!schemaLoading && !schemaError && !advancedConfig\">{{ i18nLabels.noData }}</p>\n </div>\n <div class=\"advanced-actions\" *ngIf=\"!schemaLoading && !schemaError && advancedConfig\">\n <button mat-raised-button color=\"primary\" type=\"button\"\n (click)=\"onAdvancedSubmit({ formData: (advancedForm?.getRawValue?.() || {}) })\"\n [disabled]=\"!advancedValid\">\n {{ i18nLabels.apply }}\n </button>\n <button mat-button type=\"button\" (click)=\"onClear()\">{{ i18nLabels.clear }}</button>\n </div>\n </div>\n </ng-template>\n </ng-container>\n</ng-container>\n\n<!-- resumo -->\n<ng-template #summaryCard>\n <div class=\"praxis-filter-card\" (keydown.escape)=\"onClear()\">\n <div class=\"summary-header\">\n <img *ngIf=\"currentSummaryMap?.avatar?.(currentSummary)\" [src]=\"currentSummaryMap?.avatar?.(currentSummary)\"\n class=\"summary-avatar\" alt=\"\" />\n <div class=\"summary-text\">\n <div class=\"summary-title\">{{ currentSummaryMap?.title?.(currentSummary) || '' }}</div>\n <div class=\"summary-subtitle\" *ngIf=\"currentSummaryMap?.subtitle\">{{ currentSummaryMap?.subtitle?.(currentSummary) }}</div>\n </div>\n </div>\n <div class=\"summary-badges\" *ngIf=\"currentSummaryMap?.badges?.length\">\n <span *ngFor=\"let b of currentSummaryMap!.badges\">{{ b(currentSummary) }}</span>\n </div>\n <div class=\"card-actions\">\n <button mat-button type=\"button\" (click)=\"switchToFilter()\">{{ i18nLabels.edit }}</button>\n <button mat-button type=\"button\" (click)=\"onClear()\">{{ i18nLabels.clear }}</button>\n </div>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:root{--pfx-filter-h: 40px;--pfx-filter-align-offset: 2px;--pfx-gap-x: 16px;--pfx-gap-y: 12px;--pfx-quick-pad-top: 5px;--pfx-quick-pad-left: 12px;--pfx-advanced-pad-x: 24px;--pfx-field-min: 280px;--pfx-quick-bg: var(--surface-2, #232a32);--pfx-quick-border: var(--pfx-surface-border, rgba(255,255,255,.08));--pfx-quick-radius: 12px}.praxis-filter-bar{display:grid;width:100%;grid-template-columns:1fr auto;grid-template-areas:\"quick actions\" \"always always\";column-gap:0;row-gap:8px;align-items:center}:host.debug-layout{background-image:repeating-linear-gradient(to right,rgba(147,197,253,.08) 0,rgba(147,197,253,.08) 1px,transparent 1px,transparent var(--pfx-gap-x)),repeating-linear-gradient(to bottom,rgba(163,230,53,.08) 0,rgba(163,230,53,.08) 1px,transparent 1px,transparent 8px)}:host.debug-layout .praxis-filter-bar{outline:1px dashed #f59e0b}:host.debug-layout .quick-shell{outline:1px dashed #3b82f6}:host.debug-layout .always-fields{outline:1px dashed #22c55e}:host.debug-layout .praxis-filter-overlay .praxis-filter-advanced{outline:2px solid #a855f7}.quick-field{grid-area:quick;min-width:280px;align-self:center}.inline-actions{grid-area:actions;justify-self:end}.always-fields{grid-area:always}.quick-shell{min-height:var(--pfx-filter-h);padding:0 0 0 var(--pfx-quick-pad-left);display:flex;align-items:center;flex-wrap:nowrap;gap:6px;overflow:hidden;background:var(--pfx-quick-bg);border:1px solid var(--pfx-quick-border);border-right:none;border-radius:var(--pfx-quick-radius) 0 0 var(--pfx-quick-radius)}.quick-shell>*{flex:1 1 auto;min-width:0}.quick-field-host{display:contents}:host ::ng-deep .quick-shell .mat-mdc-form-field{width:100%!important;flex:1 1 auto}:host ::ng-deep .quick-shell .mat-mdc-form-field{margin:0!important}:host ::ng-deep .quick-shell pdx-text-input,:host ::ng-deep .quick-shell pdx-select,:host ::ng-deep .quick-shell pdx-date-input,:host ::ng-deep .quick-shell pdx-auto-complete{flex:1 1 auto;min-width:0;display:block}.inline-actions{flex:0 0 auto;display:flex;gap:4px;align-self:start;white-space:nowrap;height:var(--pfx-filter-h);align-items:center;background:var(--pfx-quick-bg);border:1px solid var(--pfx-quick-border);border-left:none;border-radius:0 var(--pfx-quick-radius) var(--pfx-quick-radius) 0;padding-right:4px;margin-left:-1px}.inline-actions.actions-outlined button.mat-mdc-icon-button{border:1px solid var(--pfx-quick-border);border-radius:50%}.inline-actions .mat-mdc-icon-button{width:36px;height:36px}.inline-actions mat-icon{width:20px;height:20px;font-size:20px}.fallback-quick-field{height:var(--pfx-filter-h);display:flex;align-items:center}:host ::ng-deep .fallback-quick-field .mat-mdc-text-field-wrapper.mdc-text-field--outlined{height:var(--pfx-filter-h);align-items:center;padding-top:var(--pfx-quick-pad-top)}:host ::ng-deep .quick-shell .mat-mdc-text-field-wrapper.mdc-text-field--outlined{min-height:var(--pfx-filter-h);align-items:center;padding-top:var(--pfx-quick-pad-top)}:host ::ng-deep .quick-shell .mat-mdc-form-field-infix{min-height:var(--pfx-filter-h);padding-top:8px}:host ::ng-deep .quick-shell .mat-mdc-select-trigger{height:var(--pfx-filter-h);align-items:center}:host ::ng-deep .quick-shell .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .quick-shell .mdc-line-ripple{display:none!important}.always-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(var(--pfx-always-min, 300px),1fr));gap:8px}:host ::ng-deep .always-fields .mat-mdc-text-field-wrapper.mdc-text-field--outlined{min-height:var(--pfx-filter-h);align-items:center}:host ::ng-deep .always-fields .mat-mdc-form-field-infix{min-height:var(--pfx-filter-h)}:host ::ng-deep .always-fields .mat-mdc-select-trigger{height:var(--pfx-filter-h);align-items:center}:host ::ng-deep .always-fields .mat-mdc-form-field{width:100%}.praxis-filter-tags{display:flex;flex-wrap:wrap;gap:6px}.praxis-filter-tags mat-chip{border-radius:16px;padding:0 6px}.praxis-filter-tags .chip-actions{display:inline-flex;align-items:center;gap:2px;margin-left:4px}.chip-editor{width:140px;margin-right:8px}.praxis-filter-tags.outlined mat-chip{background:transparent!important;border:1px solid var(--pfx-quick-border)}.praxis-filter-advanced{display:flex;flex-direction:column;min-width:400px;max-width:90vw;min-height:260px;max-height:80vh;margin-top:25px;margin-right:15px;margin-left:25px;background:var(--md-sys-color-surface-container, #2a3038)!important;background-color:var(--md-sys-color-surface-container, #2a3038)!important;background:color-mix(in srgb,var(--md-sys-color-surface-container, #2a3038),transparent 6%)!important;color:var(--md-sys-color-on-surface, #e6eaf2);border:1px solid var(--border-color);border-radius:12px;box-shadow:0 8px 24px #00000052,0 2px 8px #0000002e}.praxis-filter-overlay.mobile .praxis-filter-advanced{height:100vh;max-height:100vh}:host ::ng-deep .praxis-overlay-backdrop{background:#0006;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.advanced-body{padding:var(--pfx-gap-y) 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:var(--md-sys-color-surface-container, #2a3038)!important;background-color:var(--md-sys-color-surface-container, #2a3038)!important;background:color-mix(in srgb,var(--md-sys-color-surface-container, #2a3038),transparent 0%)!important;border-top:1px solid var(--border-color);box-shadow:0 -1px #0000002e}.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(--md-sys-color-on-surface-variant);--mdc-outlined-text-field-input-text-color: var(--md-sys-color-on-surface);--mdc-outlined-text-field-container-color: var(--md-sys-color-surface-container, #2a3038);--mdc-outlined-text-field-container-color: color-mix(in srgb, var(--md-sys-color-surface-container, #2a3038), transparent 90%)}: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(--md-sys-color-on-surface)}@media (min-width: 600px){.always-fields{grid-template-columns:repeat(var(--pfx-always-cols-md, 2),minmax(0,1fr))}:host ::ng-deep .praxis-filter-advanced .praxis-filter-form .filter-row{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 960px){.always-fields{grid-template-columns:repeat(var(--pfx-always-cols-lg, 3),minmax(0,1fr))}}.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}.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}.praxis-filter-card{display:flex;flex-direction:column;gap:6px;padding:8px 12px;border-radius:12px;border:1px solid var(--pfx-quick-border);background:var(--pfx-quick-bg);color:var(--md-sys-color-on-surface, #2B2A28)}.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:color-mix(in oklab,var(--md-sys-color-primary, #3FBCA5),transparent 88%);border:1px solid color-mix(in oklab,var(--md-sys-color-primary, #3FBCA5),transparent 70%);color:var(--md-sys-color-on-surface, #2B2A28);font-size:12px}.praxis-filter-card .card-actions{display:flex;gap:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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],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: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$1.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.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: i11.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: i11.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: i14$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { 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: "directive", type: DynamicFieldLoaderDirective, selector: "[dynamicFieldLoader]", inputs: ["fields", "formGroup", "enableExternalControlBinding", "itemTemplate", "readonlyMode", "disabledMode", "presentationMode", "visible", "canvasMode"], outputs: ["componentsCreated", "fieldCreated", "fieldDestroyed", "canvasMouseEnter", "canvasMouseLeave", "canvasClick"] }, { kind: "component", type: PraxisFilterForm, selector: "praxis-filter-form", inputs: ["config", "formId", "resourcePath", "mode"], outputs: ["formReady", "valueChange", "submit", "validityChange"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i19.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"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i19.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "ngmodule", type: MatDialogModule }] });
|
|
21432
21432
|
}
|
|
21433
21433
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: PraxisFilter, decorators: [{
|
|
21434
21434
|
type: Component,
|
|
@@ -21454,7 +21454,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImpor
|
|
|
21454
21454
|
'[style.--pfx-always-min]': 'alwaysMinWidth + "px"',
|
|
21455
21455
|
'[style.--pfx-always-cols-md]': 'alwaysColsMd',
|
|
21456
21456
|
'[style.--pfx-always-cols-lg]': 'alwaysColsLg',
|
|
21457
|
-
}, template: "<ng-container *ngIf=\"modeState === 'filter'; else summaryCard\">\n <mat-progress-bar *ngIf=\"saving\" mode=\"indeterminate\"></mat-progress-bar>\n\n <form class=\"praxis-filter-bar\" [class.is-open]=\"advancedOpen\" (submit)=\"onSubmit(); $event.preventDefault()\">\n <!-- QUICK FIELD -->\n <div class=\"quick-field\" *ngIf=\"quickFieldMeta; else fallbackQuick\">\n <div class=\"filter-anchor quick-shell\" #anchorRef=\"cdkOverlayOrigin\" cdkOverlayOrigin>\n\n <!-- din\u00E2mico: envolvido por host para garantir layout flex correto -->\n <div *ngIf=\"quickFieldMode === 'dynamic'\" class=\"quick-field-host\" #quickHostRef\n dynamicFieldLoader\n [fields]=\"quickFieldMetaArray\"\n [formGroup]=\"quickForm\"\n (componentsCreated)=\"onQuickComponents($event)\"\n (fieldCreated)=\"onQuickFieldCreated($event)\">\n </div>\n\n <!-- fallback (com meta) \u2014 sem suffix, s\u00F3 o input -->\n <mat-form-field *ngIf=\"quickFieldMode === 'fallback'\"\n appearance=\"outline\"\n floatLabel=\"always\"\n class=\"fallback-quick-field\">\n <mat-label>{{ quickFieldMeta.label || quickField }}</mat-label>\n <input matInput [formControl]=\"quickControl\"\n [type]=\"getQuickInputType()\"\n [attr.inputmode]=\"getQuickInputMode()\"\n [attr.aria-label]=\"quickFieldMeta.label || quickField\"\n (keydown.escape)=\"onQuickClear()\"\n (keypress)=\"onQuickNumericKeypress($event)\"\n (blur)=\"onQuickBlurFormat()\">\n </mat-form-field>\n\n \n </div>\n </div>\n\n\n <!-- QUICK \u201Cfalso\u201D (quando n\u00E3o h\u00E1 meta) -->\n <ng-template #fallbackQuick>\n <div class=\"filter-anchor quick-shell\" #anchorRef=\"cdkOverlayOrigin\" cdkOverlayOrigin>\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"fallback-quick-field\">\n <mat-label>{{ i18nLabels.searchPlaceholder }}</mat-label>\n <input matInput [formControl]=\"quickControl\"\n [attr.aria-label]=\"i18nLabels.searchPlaceholder\"\n (keydown.escape)=\"onQuickClear()\" />\n </mat-form-field>\n </div>\n </ng-template>\n\n <!-- A\u00C7\u00D5ES INLINE (fixas \u00E0 direita da barra) -->\n <div class=\"inline-actions\" [class.actions-outlined]=\"actionsVariant==='outlined'\">\n <!-- Toggles/booleans simples realocados para a barra de a\u00E7\u00F5es -->\n <div class=\"inline-toggles\" *ngIf=\"toggleMetas.length\">\n <ng-container dynamicFieldLoader [fields]=\"toggleMetas\" [formGroup]=\"alwaysForm\"\n (componentsCreated)=\"onToggleComponents($event)\"></ng-container>\n </div>\n <button mat-icon-button [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\" type=\"button\" *ngIf=\"quickHasValue()\"\n (click)=\"onQuickClear()\" [attr.aria-label]=\"i18nLabels.clear\">\n <mat-icon [praxisIcon]=\"'close'\"></mat-icon>\n </button>\n <button mat-icon-button [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\" type=\"button\" (click)=\"onSubmit()\" [attr.aria-label]=\"i18nLabels.apply\">\n <mat-icon [praxisIcon]=\"'search'\"></mat-icon>\n </button>\n <button mat-icon-button [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\" type=\"button\"\n [matBadge]=\"activeFiltersCount\"\n [matBadgeHidden]=\"!activeFiltersCount\"\n matBadgeSize=\"small\"\n matBadgeColor=\"primary\"\n [matBadgeOverlap]=\"false\"\n (click)=\"toggleAdvanced()\"\n [attr.aria-label]=\"getAdvancedAriaLabel()\"\n [attr.aria-expanded]=\"advancedOpen\"\n [attr.aria-controls]=\"advancedPanelId\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n </button>\n <button mat-icon-button [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\" type=\"button\" (click)=\"openSettings()\" *ngIf=\"showFilterSettings\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"schemaOutdated ? 'Schema do servidor mudou \u2014 Reconciliar' : i18nLabels.settings\"\n matTooltipPosition=\"below\">\n <mat-icon [praxisIcon]=\"'settings'\"></mat-icon>\n </button>\n </div>\n\n <!-- campos sempre vis\u00EDveis (se houver) -->\n <div class=\"always-fields\" *ngIf=\"alwaysVisibleMetas.length\">\n <ng-container dynamicFieldLoader [fields]=\"alwaysVisibleMetas\" [formGroup]=\"alwaysForm\"\n (componentsCreated)=\"onAlwaysComponents($event)\"></ng-container>\n </div>\n\n <!-- acessibilidade -->\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 <!-- tags -->\n <div class=\"praxis-filter-tags\" *ngIf=\"displayedTags.length\" [class.outlined]=\"tagVariant==='outlined'\">\n <mat-chip-set>\n <mat-chip *ngFor=\"let tag of displayedTags\"\n [color]=\"tagColor === 'basic' ? null : tagColor\"\n (click)=\"applyTag(tag)\" (keydown.enter)=\"applyTag(tag)\"\n tabindex=\"0\" role=\"button\">\n <ng-container *ngIf=\"editingTagId !== tag.id; else editChip\">\n <span class=\"chip-label\">{{ tag.label }}</span>\n <span class=\"chip-actions\" *ngIf=\"isUserTag(tag)\">\n <button mat-icon-button [color]=\"tagButtonColor === 'basic' ? null : tagButtonColor\"\n (click)=\"startEditTag(tag, $event)\" aria-label=\"edit tag\">\n <mat-icon>edit</mat-icon>\n </button>\n <button mat-icon-button [color]=\"tagButtonColor === 'basic' ? null : tagButtonColor\"\n (click)=\"deleteTag(tag)\" aria-label=\"remove tag\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </ng-container>\n <ng-template #editChip>\n <input matInput class=\"chip-editor\" [formControl]=\"editingTagLabel\"\n (keydown.enter)=\"commitEditTag(tag, $event)\" (keydown.escape)=\"cancelEditTag($event)\" (click)=\"$event.stopPropagation()\" />\n <button mat-button color=\"primary\" (click)=\"commitEditTag(tag, $event)\">{{ i18nLabels.save }}</button>\n <button mat-button (click)=\"cancelEditTag($event)\">{{ i18nLabels.cancel }}</button>\n </ng-template>\n </mat-chip>\n </mat-chip-set>\n </div>\n\n <!-- OVERLAY -->\n <ng-container *ngIf=\"overlayOrigin\">\n <ng-template cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin!\"\n [cdkConnectedOverlayOpen]=\"advancedOpen\"\n [cdkConnectedOverlayHasBackdrop]=\"overlayBackdrop\"\n [cdkConnectedOverlayBackdropClass]=\"'praxis-overlay-backdrop'\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayOffsetY]=\"8\"\n [cdkConnectedOverlayLockPosition]=\"true\"\n [cdkConnectedOverlayWidth]=\"overlayWidth\"\n [cdkConnectedOverlayPanelClass]=\"['praxis-filter-overlay', isMobile ? 'mobile' : '', overlayVariant === 'frosted' ? 'frosted' : '']\"\n (overlayOutsideClick)=\"onOverlayOutsideClick($event)\"\n (backdropClick)=\"onOverlayDetach()\"\n (detach)=\"onOverlayDetach()\">\n <div class=\"praxis-filter-advanced\" (keydown.escape)=\"toggleAdvanced()\" role=\"dialog\" aria-modal=\"true\" [attr.id]=\"advancedPanelId\">\n <div class=\"advanced-body\">\n <mat-progress-bar *ngIf=\"schemaLoading\" mode=\"indeterminate\"></mat-progress-bar>\n <p *ngIf=\"schemaError\" class=\"schema-error\">\n {{ i18nLabels.errorLoadingFilters }}\n <button mat-button type=\"button\" (click)=\"loadSchema()\">{{ i18nLabels.retry }}</button>\n </p>\n <praxis-filter-form *ngIf=\"!schemaLoading && !schemaError && advancedConfig\"\n [formId]=\"formId\" [resourcePath]=\"resourcePath\" [mode]=\"'edit'\" [config]=\"advancedConfig\"\n (formReady)=\"onAdvancedReady($event)\" (valueChange)=\"onAdvancedChange($event)\"\n (validityChange)=\"onAdvancedValidityChange($event)\" (submit)=\"onAdvancedSubmit($event)\">\n </praxis-filter-form>\n <p *ngIf=\"!schemaLoading && !schemaError && !advancedConfig\">{{ i18nLabels.noData }}</p>\n </div>\n <div class=\"advanced-actions\" *ngIf=\"!schemaLoading && !schemaError && advancedConfig\">\n <button mat-raised-button color=\"primary\" type=\"button\"\n (click)=\"onAdvancedSubmit({ formData: (advancedForm?.getRawValue?.() || {}) })\"\n [disabled]=\"!advancedValid\">\n {{ i18nLabels.apply }}\n </button>\n <button mat-button type=\"button\" (click)=\"onClear()\">{{ i18nLabels.clear }}</button>\n </div>\n </div>\n </ng-template>\n </ng-container>\n</ng-container>\n\n<!-- resumo -->\n<ng-template #summaryCard>\n <div class=\"praxis-filter-card\" (keydown.escape)=\"onClear()\">\n <div class=\"summary-header\">\n <img *ngIf=\"currentSummaryMap?.avatar?.(currentSummary)\" [src]=\"currentSummaryMap?.avatar?.(currentSummary)\"\n class=\"summary-avatar\" alt=\"\" />\n <div class=\"summary-text\">\n <div class=\"summary-title\">{{ currentSummaryMap?.title?.(currentSummary) || '' }}</div>\n <div class=\"summary-subtitle\" *ngIf=\"currentSummaryMap?.subtitle\">{{ currentSummaryMap?.subtitle?.(currentSummary) }}</div>\n </div>\n </div>\n <div class=\"summary-badges\" *ngIf=\"currentSummaryMap?.badges?.length\">\n <span *ngFor=\"let b of currentSummaryMap!.badges\">{{ b(currentSummary) }}</span>\n </div>\n <div class=\"card-actions\">\n <button mat-button type=\"button\" (click)=\"switchToFilter()\">{{ i18nLabels.edit }}</button>\n <button mat-button type=\"button\" (click)=\"onClear()\">{{ i18nLabels.clear }}</button>\n </div>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:root{--pfx-filter-h: 40px;--pfx-filter-align-offset: 2px;--pfx-gap-x: 16px;--pfx-gap-y: 12px;--pfx-quick-pad-top: 5px;--pfx-quick-pad-left: 12px;--pfx-advanced-pad-x: 24px;--pfx-field-min: 280px;--pfx-quick-bg: var(--surface-2, #232a32);--pfx-quick-border: var(--pfx-surface-border, rgba(255,255,255,.08));--pfx-quick-radius: 12px}.praxis-filter-bar{display:grid;width:100%;grid-template-columns:1fr auto;grid-template-areas:\"quick actions\" \"always always\";column-gap:0;row-gap:8px;align-items:center}:host.debug-layout{background-image:repeating-linear-gradient(to right,rgba(147,197,253,.08) 0,rgba(147,197,253,.08) 1px,transparent 1px,transparent var(--pfx-gap-x)),repeating-linear-gradient(to bottom,rgba(163,230,53,.08) 0,rgba(163,230,53,.08) 1px,transparent 1px,transparent 8px)}:host.debug-layout .praxis-filter-bar{outline:1px dashed #f59e0b}:host.debug-layout .quick-shell{outline:1px dashed #3b82f6}:host.debug-layout .always-fields{outline:1px dashed #22c55e}:host.debug-layout .praxis-filter-overlay .praxis-filter-advanced{outline:2px solid #a855f7}.quick-field{grid-area:quick;min-width:280px;align-self:center}.inline-actions{grid-area:actions;justify-self:end}.always-fields{grid-area:always}.quick-shell{min-height:var(--pfx-filter-h);padding:0 0 0 var(--pfx-quick-pad-left);display:flex;align-items:center;flex-wrap:nowrap;gap:6px;overflow:hidden;background:var(--pfx-quick-bg);border:1px solid var(--pfx-quick-border);border-right:none;border-radius:var(--pfx-quick-radius) 0 0 var(--pfx-quick-radius)}.quick-shell>*{flex:1 1 auto;min-width:0}.quick-field-host{display:contents}:host ::ng-deep .quick-shell .mat-mdc-form-field{width:100%!important;flex:1 1 auto}:host ::ng-deep .quick-shell .mat-mdc-form-field{margin:0!important}:host ::ng-deep .quick-shell pdx-text-input,:host ::ng-deep .quick-shell pdx-select,:host ::ng-deep .quick-shell pdx-date-input,:host ::ng-deep .quick-shell pdx-auto-complete{flex:1 1 auto;min-width:0;display:block}.inline-actions{flex:0 0 auto;display:flex;gap:4px;align-self:start;white-space:nowrap;height:var(--pfx-filter-h);align-items:center;background:var(--pfx-quick-bg);border:1px solid var(--pfx-quick-border);border-left:none;border-radius:0 var(--pfx-quick-radius) var(--pfx-quick-radius) 0;padding-right:4px;margin-left:-1px}.inline-actions.actions-outlined button.mat-mdc-icon-button{border:1px solid var(--pfx-quick-border);border-radius:50%}.inline-actions .mat-mdc-icon-button{width:36px;height:36px}.inline-actions mat-icon{width:20px;height:20px;font-size:20px}.fallback-quick-field{height:var(--pfx-filter-h);display:flex;align-items:center}:host ::ng-deep .fallback-quick-field .mat-mdc-text-field-wrapper.mdc-text-field--outlined{height:var(--pfx-filter-h);align-items:center;padding-top:var(--pfx-quick-pad-top)}:host ::ng-deep .quick-shell .mat-mdc-text-field-wrapper.mdc-text-field--outlined{min-height:var(--pfx-filter-h);align-items:center;padding-top:var(--pfx-quick-pad-top)}:host ::ng-deep .quick-shell .mat-mdc-form-field-infix{min-height:var(--pfx-filter-h);padding-top:8px}:host ::ng-deep .quick-shell .mat-mdc-select-trigger{height:var(--pfx-filter-h);align-items:center}:host ::ng-deep .quick-shell .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .quick-shell .mdc-line-ripple{display:none!important}.always-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(var(--pfx-always-min, 300px),1fr));gap:8px}:host ::ng-deep .always-fields .mat-mdc-text-field-wrapper.mdc-text-field--outlined{min-height:var(--pfx-filter-h);align-items:center}:host ::ng-deep .always-fields .mat-mdc-form-field-infix{min-height:var(--pfx-filter-h)}:host ::ng-deep .always-fields .mat-mdc-select-trigger{height:var(--pfx-filter-h);align-items:center}:host ::ng-deep .always-fields .mat-mdc-form-field{width:100%}.praxis-filter-tags{display:flex;flex-wrap:wrap;gap:6px}.praxis-filter-tags mat-chip{border-radius:16px;padding:0 6px}.praxis-filter-tags .chip-actions{display:inline-flex;align-items:center;gap:2px;margin-left:4px}.chip-editor{width:140px;margin-right:8px}.praxis-filter-tags.outlined mat-chip{background:transparent!important;border:1px solid var(--pfx-quick-border)}.praxis-filter-advanced{display:flex;flex-direction:column;min-width:400px;max-width:90vw;min-height:260px;max-height:80vh;margin-top:25px;margin-right:15px;margin-left:25px;background:var(--md-sys-color-surface-container, #2a3038)!important;background-color:var(--md-sys-color-surface-container, #2a3038)!important;background:color-mix(in srgb,var(--md-sys-color-surface-container, #2a3038),transparent 6%)!important;color:var(--md-sys-color-on-surface, #e6eaf2);border:1px solid var(--border-color);border-radius:12px;box-shadow:0 8px 24px #00000052,0 2px 8px #0000002e}.praxis-filter-overlay.mobile .praxis-filter-advanced{height:100vh;max-height:100vh}:host ::ng-deep .praxis-overlay-backdrop{background:#0006;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.advanced-body{padding:var(--pfx-gap-y) 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:var(--md-sys-color-surface-container, #2a3038)!important;background-color:var(--md-sys-color-surface-container, #2a3038)!important;background:color-mix(in srgb,var(--md-sys-color-surface-container, #2a3038),transparent 0%)!important;border-top:1px solid var(--border-color);box-shadow:0 -1px #0000002e}.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(--md-sys-color-on-surface-variant);--mdc-outlined-text-field-input-text-color: var(--md-sys-color-on-surface);--mdc-outlined-text-field-container-color: var(--md-sys-color-surface-container, #2a3038);--mdc-outlined-text-field-container-color: color-mix(in srgb, var(--md-sys-color-surface-container, #2a3038), transparent 90%)}: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(--md-sys-color-on-surface)}@media (min-width: 600px){.always-fields{grid-template-columns:repeat(var(--pfx-always-cols-md, 2),minmax(0,1fr))}:host ::ng-deep .praxis-filter-advanced .praxis-filter-form .filter-row{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 960px){.always-fields{grid-template-columns:repeat(var(--pfx-always-cols-lg, 3),minmax(0,1fr))}}.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}.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}\n"] }]
|
|
21457
|
+
}, template: "<ng-container *ngIf=\"modeState === 'filter'; else summaryCard\">\n <mat-progress-bar *ngIf=\"saving\" mode=\"indeterminate\"></mat-progress-bar>\n\n <form class=\"praxis-filter-bar\" [class.is-open]=\"advancedOpen\" (submit)=\"onSubmit(); $event.preventDefault()\">\n <!-- QUICK FIELD -->\n <div class=\"quick-field\" *ngIf=\"quickFieldMeta; else fallbackQuick\">\n <div class=\"filter-anchor quick-shell\" #anchorRef=\"cdkOverlayOrigin\" cdkOverlayOrigin>\n\n <!-- din\u00E2mico: envolvido por host para garantir layout flex correto -->\n <div *ngIf=\"quickFieldMode === 'dynamic'\" class=\"quick-field-host\" #quickHostRef\n dynamicFieldLoader\n [fields]=\"quickFieldMetaArray\"\n [formGroup]=\"quickForm\"\n (componentsCreated)=\"onQuickComponents($event)\"\n (fieldCreated)=\"onQuickFieldCreated($event)\">\n </div>\n\n <!-- fallback (com meta) \u2014 sem suffix, s\u00F3 o input -->\n <mat-form-field *ngIf=\"quickFieldMode === 'fallback'\"\n appearance=\"outline\"\n floatLabel=\"always\"\n class=\"fallback-quick-field\">\n <mat-label>{{ quickFieldMeta.label || quickField }}</mat-label>\n <input matInput [formControl]=\"quickControl\"\n [type]=\"getQuickInputType()\"\n [attr.inputmode]=\"getQuickInputMode()\"\n [attr.aria-label]=\"quickFieldMeta.label || quickField\"\n (keydown.escape)=\"onQuickClear()\"\n (keypress)=\"onQuickNumericKeypress($event)\"\n (blur)=\"onQuickBlurFormat()\">\n </mat-form-field>\n\n \n </div>\n </div>\n\n\n <!-- QUICK \u201Cfalso\u201D (quando n\u00E3o h\u00E1 meta) -->\n <ng-template #fallbackQuick>\n <div class=\"filter-anchor quick-shell\" #anchorRef=\"cdkOverlayOrigin\" cdkOverlayOrigin>\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"fallback-quick-field\">\n <mat-label>{{ i18nLabels.searchPlaceholder }}</mat-label>\n <input matInput [formControl]=\"quickControl\"\n [attr.aria-label]=\"i18nLabels.searchPlaceholder\"\n (keydown.escape)=\"onQuickClear()\" />\n </mat-form-field>\n </div>\n </ng-template>\n\n <!-- A\u00C7\u00D5ES INLINE (fixas \u00E0 direita da barra) -->\n <div class=\"inline-actions\" [class.actions-outlined]=\"actionsVariant==='outlined'\">\n <!-- Toggles/booleans simples realocados para a barra de a\u00E7\u00F5es -->\n <div class=\"inline-toggles\" *ngIf=\"toggleMetas.length\">\n <ng-container dynamicFieldLoader [fields]=\"toggleMetas\" [formGroup]=\"alwaysForm\"\n (componentsCreated)=\"onToggleComponents($event)\"></ng-container>\n </div>\n <button mat-icon-button [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\" type=\"button\" *ngIf=\"quickHasValue()\"\n (click)=\"onQuickClear()\" [attr.aria-label]=\"i18nLabels.clear\">\n <mat-icon [praxisIcon]=\"'close'\"></mat-icon>\n </button>\n <button mat-icon-button [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\" type=\"button\" (click)=\"onSubmit()\" [attr.aria-label]=\"i18nLabels.apply\">\n <mat-icon [praxisIcon]=\"'search'\"></mat-icon>\n </button>\n <button mat-icon-button [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\" type=\"button\"\n [matBadge]=\"activeFiltersCount\"\n [matBadgeHidden]=\"!activeFiltersCount\"\n matBadgeSize=\"small\"\n matBadgeColor=\"primary\"\n [matBadgeOverlap]=\"false\"\n (click)=\"toggleAdvanced()\"\n [attr.aria-label]=\"getAdvancedAriaLabel()\"\n [attr.aria-expanded]=\"advancedOpen\"\n [attr.aria-controls]=\"advancedPanelId\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n </button>\n <button mat-icon-button [color]=\"actionsButtonColor==='basic'? null : actionsButtonColor\" type=\"button\" (click)=\"openSettings()\" *ngIf=\"showFilterSettings\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"schemaOutdated ? 'Schema do servidor mudou \u2014 Reconciliar' : i18nLabels.settings\"\n matTooltipPosition=\"below\">\n <mat-icon [praxisIcon]=\"'settings'\"></mat-icon>\n </button>\n </div>\n\n <!-- campos sempre vis\u00EDveis (se houver) -->\n <div class=\"always-fields\" *ngIf=\"alwaysVisibleMetas.length\">\n <ng-container dynamicFieldLoader [fields]=\"alwaysVisibleMetas\" [formGroup]=\"alwaysForm\"\n (componentsCreated)=\"onAlwaysComponents($event)\"></ng-container>\n </div>\n\n <!-- acessibilidade -->\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 <!-- tags -->\n <div class=\"praxis-filter-tags\" *ngIf=\"displayedTags.length\" [class.outlined]=\"tagVariant==='outlined'\">\n <mat-chip-set>\n <mat-chip *ngFor=\"let tag of displayedTags\"\n [color]=\"tagColor === 'basic' ? null : tagColor\"\n (click)=\"applyTag(tag)\" (keydown.enter)=\"applyTag(tag)\"\n tabindex=\"0\" role=\"button\">\n <ng-container *ngIf=\"editingTagId !== tag.id; else editChip\">\n <span class=\"chip-label\">{{ tag.label }}</span>\n <span class=\"chip-actions\" *ngIf=\"isUserTag(tag)\">\n <button mat-icon-button [color]=\"tagButtonColor === 'basic' ? null : tagButtonColor\"\n (click)=\"startEditTag(tag, $event)\" aria-label=\"edit tag\">\n <mat-icon>edit</mat-icon>\n </button>\n <button mat-icon-button [color]=\"tagButtonColor === 'basic' ? null : tagButtonColor\"\n (click)=\"deleteTag(tag)\" aria-label=\"remove tag\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </ng-container>\n <ng-template #editChip>\n <input matInput class=\"chip-editor\" [formControl]=\"editingTagLabel\"\n (keydown.enter)=\"commitEditTag(tag, $event)\" (keydown.escape)=\"cancelEditTag($event)\" (click)=\"$event.stopPropagation()\" />\n <button mat-button color=\"primary\" (click)=\"commitEditTag(tag, $event)\">{{ i18nLabels.save }}</button>\n <button mat-button (click)=\"cancelEditTag($event)\">{{ i18nLabels.cancel }}</button>\n </ng-template>\n </mat-chip>\n </mat-chip-set>\n </div>\n\n <!-- OVERLAY -->\n <ng-container *ngIf=\"overlayOrigin\">\n <ng-template cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin!\"\n [cdkConnectedOverlayOpen]=\"advancedOpen\"\n [cdkConnectedOverlayHasBackdrop]=\"overlayBackdrop\"\n [cdkConnectedOverlayBackdropClass]=\"'praxis-overlay-backdrop'\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayOffsetY]=\"8\"\n [cdkConnectedOverlayLockPosition]=\"true\"\n [cdkConnectedOverlayWidth]=\"overlayWidth\"\n [cdkConnectedOverlayPanelClass]=\"['praxis-filter-overlay', isMobile ? 'mobile' : '', overlayVariant === 'frosted' ? 'frosted' : '']\"\n (overlayOutsideClick)=\"onOverlayOutsideClick($event)\"\n (backdropClick)=\"onOverlayDetach()\"\n (detach)=\"onOverlayDetach()\">\n <div class=\"praxis-filter-advanced\" (keydown.escape)=\"toggleAdvanced()\" role=\"dialog\" aria-modal=\"true\" [attr.id]=\"advancedPanelId\">\n <div class=\"advanced-body\">\n <mat-progress-bar *ngIf=\"schemaLoading\" mode=\"indeterminate\"></mat-progress-bar>\n <p *ngIf=\"schemaError\" class=\"schema-error\">\n {{ i18nLabels.errorLoadingFilters }}\n <button mat-button type=\"button\" (click)=\"loadSchema()\">{{ i18nLabels.retry }}</button>\n </p>\n <praxis-filter-form *ngIf=\"!schemaLoading && !schemaError && advancedConfig\"\n [formId]=\"formId\" [resourcePath]=\"resourcePath\" [mode]=\"'edit'\" [config]=\"advancedConfig\"\n (formReady)=\"onAdvancedReady($event)\" (valueChange)=\"onAdvancedChange($event)\"\n (validityChange)=\"onAdvancedValidityChange($event)\" (submit)=\"onAdvancedSubmit($event)\">\n </praxis-filter-form>\n <p *ngIf=\"!schemaLoading && !schemaError && !advancedConfig\">{{ i18nLabels.noData }}</p>\n </div>\n <div class=\"advanced-actions\" *ngIf=\"!schemaLoading && !schemaError && advancedConfig\">\n <button mat-raised-button color=\"primary\" type=\"button\"\n (click)=\"onAdvancedSubmit({ formData: (advancedForm?.getRawValue?.() || {}) })\"\n [disabled]=\"!advancedValid\">\n {{ i18nLabels.apply }}\n </button>\n <button mat-button type=\"button\" (click)=\"onClear()\">{{ i18nLabels.clear }}</button>\n </div>\n </div>\n </ng-template>\n </ng-container>\n</ng-container>\n\n<!-- resumo -->\n<ng-template #summaryCard>\n <div class=\"praxis-filter-card\" (keydown.escape)=\"onClear()\">\n <div class=\"summary-header\">\n <img *ngIf=\"currentSummaryMap?.avatar?.(currentSummary)\" [src]=\"currentSummaryMap?.avatar?.(currentSummary)\"\n class=\"summary-avatar\" alt=\"\" />\n <div class=\"summary-text\">\n <div class=\"summary-title\">{{ currentSummaryMap?.title?.(currentSummary) || '' }}</div>\n <div class=\"summary-subtitle\" *ngIf=\"currentSummaryMap?.subtitle\">{{ currentSummaryMap?.subtitle?.(currentSummary) }}</div>\n </div>\n </div>\n <div class=\"summary-badges\" *ngIf=\"currentSummaryMap?.badges?.length\">\n <span *ngFor=\"let b of currentSummaryMap!.badges\">{{ b(currentSummary) }}</span>\n </div>\n <div class=\"card-actions\">\n <button mat-button type=\"button\" (click)=\"switchToFilter()\">{{ i18nLabels.edit }}</button>\n <button mat-button type=\"button\" (click)=\"onClear()\">{{ i18nLabels.clear }}</button>\n </div>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:root{--pfx-filter-h: 40px;--pfx-filter-align-offset: 2px;--pfx-gap-x: 16px;--pfx-gap-y: 12px;--pfx-quick-pad-top: 5px;--pfx-quick-pad-left: 12px;--pfx-advanced-pad-x: 24px;--pfx-field-min: 280px;--pfx-quick-bg: var(--surface-2, #232a32);--pfx-quick-border: var(--pfx-surface-border, rgba(255,255,255,.08));--pfx-quick-radius: 12px}.praxis-filter-bar{display:grid;width:100%;grid-template-columns:1fr auto;grid-template-areas:\"quick actions\" \"always always\";column-gap:0;row-gap:8px;align-items:center}:host.debug-layout{background-image:repeating-linear-gradient(to right,rgba(147,197,253,.08) 0,rgba(147,197,253,.08) 1px,transparent 1px,transparent var(--pfx-gap-x)),repeating-linear-gradient(to bottom,rgba(163,230,53,.08) 0,rgba(163,230,53,.08) 1px,transparent 1px,transparent 8px)}:host.debug-layout .praxis-filter-bar{outline:1px dashed #f59e0b}:host.debug-layout .quick-shell{outline:1px dashed #3b82f6}:host.debug-layout .always-fields{outline:1px dashed #22c55e}:host.debug-layout .praxis-filter-overlay .praxis-filter-advanced{outline:2px solid #a855f7}.quick-field{grid-area:quick;min-width:280px;align-self:center}.inline-actions{grid-area:actions;justify-self:end}.always-fields{grid-area:always}.quick-shell{min-height:var(--pfx-filter-h);padding:0 0 0 var(--pfx-quick-pad-left);display:flex;align-items:center;flex-wrap:nowrap;gap:6px;overflow:hidden;background:var(--pfx-quick-bg);border:1px solid var(--pfx-quick-border);border-right:none;border-radius:var(--pfx-quick-radius) 0 0 var(--pfx-quick-radius)}.quick-shell>*{flex:1 1 auto;min-width:0}.quick-field-host{display:contents}:host ::ng-deep .quick-shell .mat-mdc-form-field{width:100%!important;flex:1 1 auto}:host ::ng-deep .quick-shell .mat-mdc-form-field{margin:0!important}:host ::ng-deep .quick-shell pdx-text-input,:host ::ng-deep .quick-shell pdx-select,:host ::ng-deep .quick-shell pdx-date-input,:host ::ng-deep .quick-shell pdx-auto-complete{flex:1 1 auto;min-width:0;display:block}.inline-actions{flex:0 0 auto;display:flex;gap:4px;align-self:start;white-space:nowrap;height:var(--pfx-filter-h);align-items:center;background:var(--pfx-quick-bg);border:1px solid var(--pfx-quick-border);border-left:none;border-radius:0 var(--pfx-quick-radius) var(--pfx-quick-radius) 0;padding-right:4px;margin-left:-1px}.inline-actions.actions-outlined button.mat-mdc-icon-button{border:1px solid var(--pfx-quick-border);border-radius:50%}.inline-actions .mat-mdc-icon-button{width:36px;height:36px}.inline-actions mat-icon{width:20px;height:20px;font-size:20px}.fallback-quick-field{height:var(--pfx-filter-h);display:flex;align-items:center}:host ::ng-deep .fallback-quick-field .mat-mdc-text-field-wrapper.mdc-text-field--outlined{height:var(--pfx-filter-h);align-items:center;padding-top:var(--pfx-quick-pad-top)}:host ::ng-deep .quick-shell .mat-mdc-text-field-wrapper.mdc-text-field--outlined{min-height:var(--pfx-filter-h);align-items:center;padding-top:var(--pfx-quick-pad-top)}:host ::ng-deep .quick-shell .mat-mdc-form-field-infix{min-height:var(--pfx-filter-h);padding-top:8px}:host ::ng-deep .quick-shell .mat-mdc-select-trigger{height:var(--pfx-filter-h);align-items:center}:host ::ng-deep .quick-shell .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .quick-shell .mdc-line-ripple{display:none!important}.always-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(var(--pfx-always-min, 300px),1fr));gap:8px}:host ::ng-deep .always-fields .mat-mdc-text-field-wrapper.mdc-text-field--outlined{min-height:var(--pfx-filter-h);align-items:center}:host ::ng-deep .always-fields .mat-mdc-form-field-infix{min-height:var(--pfx-filter-h)}:host ::ng-deep .always-fields .mat-mdc-select-trigger{height:var(--pfx-filter-h);align-items:center}:host ::ng-deep .always-fields .mat-mdc-form-field{width:100%}.praxis-filter-tags{display:flex;flex-wrap:wrap;gap:6px}.praxis-filter-tags mat-chip{border-radius:16px;padding:0 6px}.praxis-filter-tags .chip-actions{display:inline-flex;align-items:center;gap:2px;margin-left:4px}.chip-editor{width:140px;margin-right:8px}.praxis-filter-tags.outlined mat-chip{background:transparent!important;border:1px solid var(--pfx-quick-border)}.praxis-filter-advanced{display:flex;flex-direction:column;min-width:400px;max-width:90vw;min-height:260px;max-height:80vh;margin-top:25px;margin-right:15px;margin-left:25px;background:var(--md-sys-color-surface-container, #2a3038)!important;background-color:var(--md-sys-color-surface-container, #2a3038)!important;background:color-mix(in srgb,var(--md-sys-color-surface-container, #2a3038),transparent 6%)!important;color:var(--md-sys-color-on-surface, #e6eaf2);border:1px solid var(--border-color);border-radius:12px;box-shadow:0 8px 24px #00000052,0 2px 8px #0000002e}.praxis-filter-overlay.mobile .praxis-filter-advanced{height:100vh;max-height:100vh}:host ::ng-deep .praxis-overlay-backdrop{background:#0006;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.advanced-body{padding:var(--pfx-gap-y) 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:var(--md-sys-color-surface-container, #2a3038)!important;background-color:var(--md-sys-color-surface-container, #2a3038)!important;background:color-mix(in srgb,var(--md-sys-color-surface-container, #2a3038),transparent 0%)!important;border-top:1px solid var(--border-color);box-shadow:0 -1px #0000002e}.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(--md-sys-color-on-surface-variant);--mdc-outlined-text-field-input-text-color: var(--md-sys-color-on-surface);--mdc-outlined-text-field-container-color: var(--md-sys-color-surface-container, #2a3038);--mdc-outlined-text-field-container-color: color-mix(in srgb, var(--md-sys-color-surface-container, #2a3038), transparent 90%)}: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(--md-sys-color-on-surface)}@media (min-width: 600px){.always-fields{grid-template-columns:repeat(var(--pfx-always-cols-md, 2),minmax(0,1fr))}:host ::ng-deep .praxis-filter-advanced .praxis-filter-form .filter-row{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 960px){.always-fields{grid-template-columns:repeat(var(--pfx-always-cols-lg, 3),minmax(0,1fr))}}.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}.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}.praxis-filter-card{display:flex;flex-direction:column;gap:6px;padding:8px 12px;border-radius:12px;border:1px solid var(--pfx-quick-border);background:var(--pfx-quick-bg);color:var(--md-sys-color-on-surface, #2B2A28)}.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:color-mix(in oklab,var(--md-sys-color-primary, #3FBCA5),transparent 88%);border:1px solid color-mix(in oklab,var(--md-sys-color-primary, #3FBCA5),transparent 70%);color:var(--md-sys-color-on-surface, #2B2A28);font-size:12px}.praxis-filter-card .card-actions{display:flex;gap:8px}\n"] }]
|
|
21458
21458
|
}], ctorParameters: () => [{ type: i1$3.GenericCrudService }, { type: undefined, decorators: [{
|
|
21459
21459
|
type: Inject,
|
|
21460
21460
|
args: [CONFIG_STORAGE]
|