structra-ui 0.2.63 → 0.2.78

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,12 +1,12 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { AfterViewInit, OnChanges, ElementRef, SimpleChanges, ChangeDetectorRef, Injector, DestroyRef, EventEmitter, OnInit, DoCheck, TemplateRef, OnDestroy, InjectionToken, AfterContentInit, QueryList, AfterViewChecked, Renderer2, Signal, ViewContainerRef, WritableSignal, Type, EnvironmentProviders, EffectRef, isDevMode } from '@angular/core';
2
+ import { AfterViewInit, OnChanges, ElementRef, SimpleChanges, ChangeDetectorRef, Injector, DestroyRef, EventEmitter, OnInit, DoCheck, TemplateRef, OnDestroy, InjectionToken, AfterContentInit, QueryList, AfterViewChecked, Renderer2, Signal, ViewContainerRef, Provider, WritableSignal, Type, EnvironmentProviders, EffectRef, isDevMode } from '@angular/core';
3
3
  import * as _angular_forms from '@angular/forms';
4
- import { ControlValueAccessor, AbstractControl, NgControl, ValidatorFn, NgForm, FormGroup, FormBuilder, FormArray, FormControl } from '@angular/forms';
4
+ import { ControlValueAccessor, AbstractControl, NgControl, ValidatorFn, NgForm, FormGroup, FormControl, FormBuilder, FormArray } from '@angular/forms';
5
5
  import { MatDatepicker } from '@angular/material/datepicker';
6
6
  import * as _angular_cdk_overlay from '@angular/cdk/overlay';
7
7
  import { ConnectedPosition, ScrollStrategy, OverlayRef, Overlay } from '@angular/cdk/overlay';
8
8
  import { SafeResourceUrl } from '@angular/platform-browser';
9
- import { ICellRendererParams, ColDef, GetRowIdParams, GridReadyEvent, RowClickedEvent } from 'ag-grid-community';
9
+ import { ICellRendererParams, ColDef, GetRowIdParams, GridReadyEvent, ColumnMovedEvent, ColumnResizedEvent, ColumnVisibleEvent, ColumnPinnedEvent, RowClickedEvent } from 'ag-grid-community';
10
10
  import { ICellRendererAngularComp } from 'ag-grid-angular';
11
11
  import * as structra_ui from 'structra-ui';
12
12
  import { DialogRef } from '@angular/cdk/dialog';
@@ -56,23 +56,42 @@ declare function resolveStructraShellScrollContainer(host: HTMLElement, pageHost
56
56
  declare const STRUCTRA_DEDICATED_BACK_TO_TOP_SELECTOR = ".structra-consulta-page-host, .structra-cadastro-page-host, .cadastro-metadata-shell-page";
57
57
 
58
58
  type AlertType = 'error' | 'success' | 'warning' | 'info';
59
+ /** Botão opcional alinhado à direita dentro do banner. */
60
+ interface AlertAction {
61
+ label: string;
62
+ icon?: string;
63
+ }
59
64
  /**
60
65
  * Feedback visual inline (erro, sucesso, aviso, informação). Reutiliza tokens semânticos da lib.
61
66
  */
62
67
  declare class AlertComponent {
68
+ protected readonly ButtonVariant: {
69
+ readonly Primary: "primary";
70
+ readonly Secondary: "secondary";
71
+ readonly Ghost: "ghost";
72
+ readonly Link: "link";
73
+ readonly Danger: "danger";
74
+ readonly Warning: "warning";
75
+ readonly Success: "success";
76
+ };
63
77
  /** Remove o host do fluxo ao fechar (evita faixa em branco com `display: block` vazio). */
64
78
  protected get hostHidden(): boolean;
65
79
  type: AlertType;
66
80
  message: string;
67
81
  closable: boolean;
82
+ /** Ação opcional (rótulo + ícone) renderizada à direita do texto. */
83
+ action: AlertAction | null;
84
+ readonly actionClick: _angular_core.OutputEmitterRef<void>;
68
85
  /** Quando `closable`, o alerta deixa de renderizar após fechar. */
69
86
  protected readonly visible: _angular_core.WritableSignal<boolean>;
70
87
  protected get hasMessage(): boolean;
88
+ protected get hasAction(): boolean;
71
89
  private readonly modifierByType;
72
90
  protected get alertHostClass(): string;
73
91
  protected onClose(): void;
92
+ protected onActionClick(): void;
74
93
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AlertComponent, never>;
75
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AlertComponent, "app-alert", never, { "type": { "alias": "type"; "required": false; }; "message": { "alias": "message"; "required": false; }; "closable": { "alias": "closable"; "required": false; }; }, {}, never, ["*"], true, never>;
94
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AlertComponent, "app-alert", never, { "type": { "alias": "type"; "required": false; }; "message": { "alias": "message"; "required": false; }; "closable": { "alias": "closable"; "required": false; }; "action": { "alias": "action"; "required": false; }; }, { "actionClick": "actionClick"; }, never, ["*"], true, never>;
76
95
  static ngAcceptInputType_closable: unknown;
77
96
  }
78
97
 
@@ -259,6 +278,13 @@ type MenuLeafItem<T = string> = MenuItemAction<T> | MenuItemDivider;
259
278
  /** Nó de primeiro nível ou dentro de grupos (inclui submenus). */
260
279
  type MenuNodeItem<T = string> = MenuLeafItem<T> | MenuItemGroup<T> | MenuItemSubmenu<T>;
261
280
 
281
+ interface NativeInputAutofillSyncOptions {
282
+ getBoundText: () => string;
283
+ refreshFilledUi: () => void;
284
+ /** Autofill / `change` sem `input`: DOM tem valor diferente do estado Angular. */
285
+ onDomValueChanged?: (domValue: string) => void;
286
+ }
287
+
262
288
  /**
263
289
  * Escala do campo (design system).
264
290
  * - **`sm`** — compacto (barras laterais, filtros).
@@ -373,7 +399,7 @@ declare abstract class BaseFieldDirective<T> implements ControlValueAccessor, On
373
399
  get hostDataControlId(): string;
374
400
  protected get autoIdPrefix(): string;
375
401
  /** Valor do atributo HTML `autocomplete` derivado de {@link autocomplete}. */
376
- get autocompleteAttr(): 'on' | 'off';
402
+ get autocompleteAttr(): string;
377
403
  /**
378
404
  * Mensagem exibida quando inválido: `errorMessage` se preenchido;
379
405
  * senão, se obrigatório, o padrão "Campo obrigatório".
@@ -426,6 +452,13 @@ declare abstract class BaseFieldDirective<T> implements ControlValueAccessor, On
426
452
  * após pintura / timeout curto para o teclado virtual aparecer com mais fiabilidade após o layout do painel.
427
453
  */
428
454
  protected applyAutofocusIfNeeded(resolve: () => HTMLElement | null | undefined): void;
455
+ /** Sincroniza autofill do browser com `filledUi` e modelo (autofill não dispara `input`). */
456
+ protected attachNativeInputAutofillSync(input: HTMLInputElement | HTMLTextAreaElement | null | undefined, options: NativeInputAutofillSyncOptions): void;
457
+ /**
458
+ * Search-select / combobox: regista tipografia inline sem o fluxo completo de autofill.
459
+ * Inputs de texto já entram via {@link attachNativeInputAutofillSync}.
460
+ */
461
+ protected bindNativeInputTypographyViewport(input: HTMLInputElement | HTMLTextAreaElement | null | undefined): void;
429
462
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BaseFieldDirective<any>, never>;
430
463
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BaseFieldDirective<any>, never, never, { "id": { "alias": "id"; "required": false; }; "name": { "alias": "name"; "required": false; }; "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "size": { "alias": "size"; "required": false; }; "tamanhoCampoMobile": { "alias": "tamanhoCampoMobile"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "showErrorMessage": { "alias": "showErrorMessage"; "required": false; }; "invalidThemed": { "alias": "invalidThemed"; "required": false; }; "required": { "alias": "required"; "required": false; }; "showRequiredMark": { "alias": "showRequiredMark"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "showPrefixIcon": { "alias": "showPrefixIcon"; "required": false; }; "prefixIcon": { "alias": "prefixIcon"; "required": false; }; "iconLeft": { "alias": "iconLeft"; "required": false; }; "clearable": { "alias": "clearable"; "required": false; }; "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "autofocus": { "alias": "autofocus"; "required": false; }; "mostrarMenuContexto": { "alias": "mostrarMenuContexto"; "required": false; }; "contextMenuItems": { "alias": "contextMenuItems"; "required": false; }; "contextMenuId": { "alias": "contextMenuId"; "required": false; }; }, { "contextMenuSelect": "contextMenuSelect"; }, never, never, true, never>;
431
464
  static ngAcceptInputType_tamanhoCampoMobile: unknown;
@@ -496,6 +529,17 @@ declare class SkeletonCardComponent {
496
529
  static ngAcceptInputType_animate: unknown;
497
530
  }
498
531
 
532
+ /** Placeholder de cartão totalizador (`app-stat-card`) — painéis de consulta e dashboard. */
533
+ declare class SkeletonStatCardComponent {
534
+ animate: boolean;
535
+ /** Espelha `app-stat-card` com linha de descrição (ex.: dashboard Oficina). */
536
+ withDescription: boolean;
537
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkeletonStatCardComponent, never>;
538
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkeletonStatCardComponent, "app-skeleton-stat-card", never, { "animate": { "alias": "animate"; "required": false; }; "withDescription": { "alias": "withDescription"; "required": false; }; }, {}, never, never, true, never>;
539
+ static ngAcceptInputType_animate: unknown;
540
+ static ngAcceptInputType_withDescription: unknown;
541
+ }
542
+
499
543
  /** Placeholder tabular (cabeçalho + linhas + faixa de paginação). */
500
544
  declare class SkeletonTableComponent {
501
545
  columnCount: number;
@@ -671,10 +715,13 @@ declare class TextFieldComponent extends NgControlFieldDirective<string | null>
671
715
  nativeInputType: 'text' | 'email';
672
716
  inputText: string;
673
717
  filledUi: boolean;
718
+ /** Login/cadastro: `username` ou `email` em vez de `on` genérico. */
719
+ get autocompleteAttr(): string;
674
720
  /** FormControl por vezes escreve número/object (metadata dinâmica); normalizar antes de slice/trim. */
675
721
  private static valueAsTrimmedString;
676
722
  private refreshFilledUi;
677
723
  ngAfterViewInit(): void;
724
+ private syncAutofillFromDom;
678
725
  protected afterWriteValue(value: string | null): void;
679
726
  onNativeInput(event: Event): void;
680
727
  onBlur(): void;
@@ -734,6 +781,7 @@ declare class PasswordFieldComponent extends NgControlFieldDirective<string | nu
734
781
  toggleIconClassUi: string;
735
782
  ngOnInit(): void;
736
783
  ngAfterViewInit(): void;
784
+ private syncAutofillFromDom;
737
785
  private refreshFilledUi;
738
786
  private refreshPasswordToggleUi;
739
787
  protected afterWriteValue(value: string | null): void;
@@ -765,6 +813,7 @@ declare class TextareaFieldComponent extends NgControlFieldDirective<string | nu
765
813
  textareaMaxHeightCss: string;
766
814
  ngOnInit(): void;
767
815
  ngAfterViewInit(): void;
816
+ private syncAutofillFromDom;
768
817
  ngOnChanges(changes: SimpleChanges): void;
769
818
  private updateTextareaHeight;
770
819
  private refreshFilledUi;
@@ -820,6 +869,7 @@ declare class IntegerFieldComponent extends NgControlFieldDirective<number | nul
820
869
  inputText: string;
821
870
  filledUi: boolean;
822
871
  ngAfterViewInit(): void;
872
+ private syncAutofillFromDom;
823
873
  private refreshFilledUi;
824
874
  protected afterWriteValue(value: number | null): void;
825
875
  onBeforeInput(event: Event): void;
@@ -850,6 +900,7 @@ declare class DecimalFieldComponent extends NgControlFieldDirective<number | nul
850
900
  /** Valor mostrado no `<input>`: `prefixo + número` ou só o número. */
851
901
  get displayValue(): string;
852
902
  ngAfterViewInit(): void;
903
+ private syncAutofillFromDom;
853
904
  private composeFullDisplay;
854
905
  /** Comprimento do segmento `«prefixo» ` em caracteres (0 se não há prefixo). */
855
906
  private prefixSegmentLen;
@@ -923,6 +974,7 @@ declare abstract class MaskedTextFieldBase extends NgControlFieldDirective<strin
923
974
  /** Padrão efetivo (permite CEP/telefone fixarem máscaras em subclasses). */
924
975
  protected get pattern(): string;
925
976
  ngAfterViewInit(): void;
977
+ private syncAutofillFromDom;
926
978
  /**
927
979
  * Padrão de formatação para o valor digitado (só dígitos).
928
980
  * Sobrescrever para máscara dinâmica (ex.: CPF até 11 dígitos, CNPJ depois).
@@ -1347,7 +1399,7 @@ declare class DropdownBaseComponent {
1347
1399
  * As classes de tema no painel interno seguem o tema activo sempre.
1348
1400
  */
1349
1401
  readonly panelThemeNgClass: _angular_core.Signal<{
1350
- [x: string]: boolean;
1402
+ [k: string]: boolean;
1351
1403
  }>;
1352
1404
  open: boolean;
1353
1405
  readonly openChange: EventEmitter<boolean>;
@@ -1591,6 +1643,8 @@ declare class SelectFieldComponent extends DropdownOptionFieldBase implements Af
1591
1643
  declare class MultiselectFieldComponent extends DropdownMultiOptionFieldBase implements AfterViewInit, OnDestroy, OnChanges {
1592
1644
  private readonly hostRef;
1593
1645
  get hostInvalidClass(): boolean;
1646
+ /** Campo de pesquisa no painel para filtrar opções (consulta / filtros com listas longas). */
1647
+ searchable: boolean;
1594
1648
  /** Por omissão `true`: mesmo padrão do select com lista longa (`pageRequested` + scroll). */
1595
1649
  pagination: boolean;
1596
1650
  /**
@@ -1652,6 +1706,7 @@ declare class MultiselectFieldComponent extends DropdownMultiOptionFieldBase imp
1652
1706
  private readonly dropdownBase?;
1653
1707
  panelOpen: boolean;
1654
1708
  panelOverlayWidth: number;
1709
+ panelSearchQuery: string;
1655
1710
  private scrollLoadTimer;
1656
1711
  private keyboardLoadMoreTimer;
1657
1712
  private loadMoreInFlight;
@@ -1666,6 +1721,11 @@ declare class MultiselectFieldComponent extends DropdownMultiOptionFieldBase imp
1666
1721
  /** Texto numa linha: rótulos separados por vírgula + ellipsis no CSS. */
1667
1722
  get displaySummary(): string;
1668
1723
  get optionsListId(): string;
1724
+ get panelSearchInputId(): string;
1725
+ /** Filtra {@link DropdownMultiOptionFieldBase.listOptions} quando {@link searchable} está activo. */
1726
+ get listOptions(): ReadonlyArray<UiSelectOption<unknown>>;
1727
+ onPanelSearchInput(ev: Event): void;
1728
+ onPanelSearchKeydown(ev: KeyboardEvent): void;
1669
1729
  private getOptionsListElement;
1670
1730
  private scrollActiveOptionIntoView;
1671
1731
  private scheduleMaybeLoadMoreFromKeyboard;
@@ -1696,7 +1756,8 @@ declare class MultiselectFieldComponent extends DropdownMultiOptionFieldBase imp
1696
1756
  /** Escape com foco no limpar/prefixo do `base-field` (não passa pelo div da origem do overlay). */
1697
1757
  onDropdownHostEscape(ev: KeyboardEvent): void;
1698
1758
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MultiselectFieldComponent, never>;
1699
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MultiselectFieldComponent, "app-multiselect-field", never, { "pagination": { "alias": "pagination"; "required": false; }; "useCache": { "alias": "useCache"; "required": false; }; "pageableInput": { "alias": "pageable"; "required": false; }; "showSuffixSlot": { "alias": "showSuffixSlot"; "required": false; }; "pageSize": { "alias": "pageSize"; "required": false; }; "hasMore": { "alias": "hasMore"; "required": false; }; "loadingMore": { "alias": "loadingMore"; "required": false; }; "defaultValue": { "alias": "defaultValue"; "required": false; }; "defaultValueLabel": { "alias": "defaultValueLabel"; "required": false; }; "maxSelected": { "alias": "maxSelected"; "required": false; }; }, { "pageRequested": "pageRequested"; }, never, ["[appFieldPrefix]", "[appMultiselectTriggerSuffix]", "[appFieldSuffix]"], true, never>;
1759
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MultiselectFieldComponent, "app-multiselect-field", never, { "searchable": { "alias": "searchable"; "required": false; }; "pagination": { "alias": "pagination"; "required": false; }; "useCache": { "alias": "useCache"; "required": false; }; "pageableInput": { "alias": "pageable"; "required": false; }; "showSuffixSlot": { "alias": "showSuffixSlot"; "required": false; }; "pageSize": { "alias": "pageSize"; "required": false; }; "hasMore": { "alias": "hasMore"; "required": false; }; "loadingMore": { "alias": "loadingMore"; "required": false; }; "defaultValue": { "alias": "defaultValue"; "required": false; }; "defaultValueLabel": { "alias": "defaultValueLabel"; "required": false; }; "maxSelected": { "alias": "maxSelected"; "required": false; }; }, { "pageRequested": "pageRequested"; }, never, ["[appFieldPrefix]", "[appMultiselectTriggerSuffix]", "[appFieldSuffix]"], true, never>;
1760
+ static ngAcceptInputType_searchable: unknown;
1700
1761
  static ngAcceptInputType_pagination: unknown;
1701
1762
  static ngAcceptInputType_useCache: unknown;
1702
1763
  static ngAcceptInputType_pageableInput: unknown;
@@ -2934,6 +2995,105 @@ declare class FormTabsComponent implements AfterContentInit, OnChanges {
2934
2995
  static ngAcceptInputType_validationLinkActive: unknown;
2935
2996
  }
2936
2997
 
2998
+ declare class PermissionGroupTabComponent implements OnChanges {
2999
+ private readonly tabs;
3000
+ private readonly cdr;
3001
+ readonly panelTpl: TemplateRef<unknown>;
3002
+ key: string;
3003
+ tabTitle: string;
3004
+ /** Chave estável do grupo vertical (ex.: `cadastros`, `sistema`). */
3005
+ groupKey: string;
3006
+ /** Rótulo exibido no cabeçalho do grupo. */
3007
+ groupLabel: string;
3008
+ /** Ordem do grupo na coluna vertical. */
3009
+ groupOrder: number | null;
3010
+ disabled: boolean;
3011
+ ngOnChanges(changes: SimpleChanges): void;
3012
+ get isActive(): boolean;
3013
+ get detachInactivePanel(): boolean;
3014
+ refreshActiveState(): void;
3015
+ get hostClass(): string;
3016
+ panelId(): string;
3017
+ labelledById(): string;
3018
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PermissionGroupTabComponent, never>;
3019
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PermissionGroupTabComponent, "app-permission-group-tab", never, { "key": { "alias": "key"; "required": true; }; "tabTitle": { "alias": "tabTitle"; "required": true; }; "groupKey": { "alias": "groupKey"; "required": false; }; "groupLabel": { "alias": "groupLabel"; "required": false; }; "groupOrder": { "alias": "groupOrder"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, ["*"], true, never>;
3020
+ static ngAcceptInputType_disabled: unknown;
3021
+ }
3022
+
3023
+ /** Grupo vertical de telas de permissão (alinhado ao menu lateral). */
3024
+ interface PermissionGroupTabGroup {
3025
+ readonly key: string;
3026
+ readonly label: string;
3027
+ readonly order: number;
3028
+ }
3029
+ /** Metadados mínimos de uma tela dentro de um grupo (útil fora do ContentChildren). */
3030
+ interface PermissionGroupTabDescriptor {
3031
+ readonly key: string;
3032
+ readonly tabTitle: string;
3033
+ readonly groupKey?: string | null;
3034
+ readonly groupLabel?: string | null;
3035
+ readonly groupOrder?: number | null;
3036
+ }
3037
+ declare const PERMISSION_GROUP_OUTROS_KEY = "outros";
3038
+ declare const PERMISSION_GROUP_OUTROS_LABEL = "Outros";
3039
+ declare const PERMISSION_GROUP_OUTROS_ORDER = 999;
3040
+
3041
+ interface PermissionGroupTabBucket<T extends PermissionGroupTabDescriptor = PermissionGroupTabDescriptor> {
3042
+ readonly group: PermissionGroupTabGroup;
3043
+ readonly tabs: readonly T[];
3044
+ }
3045
+ /** Agrupa telas por `groupKey`; telas sem grupo caem em OUTROS quando existir metadata em alguma tela. */
3046
+ declare function agruparPermissionTabs<T extends PermissionGroupTabDescriptor>(tabs: readonly T[]): PermissionGroupTabBucket<T>[];
3047
+ /** `true` quando nenhuma tela declara grupo — layout plano (retrocompatível com tabs horizontais). */
3048
+ declare function permissionTabsUsamGruposVerticais(tabs: readonly PermissionGroupTabDescriptor[]): boolean;
3049
+
3050
+ declare class PermissionGroupTabsComponent implements AfterContentInit, OnChanges {
3051
+ private static nextUid;
3052
+ private readonly cdr;
3053
+ readonly uid: string;
3054
+ tabQuery: QueryList<PermissionGroupTabComponent>;
3055
+ private _activeKey;
3056
+ set activeKey(v: string | undefined | null);
3057
+ get activeKey(): string;
3058
+ readonly activeKeyChange: EventEmitter<string>;
3059
+ keepAlive: boolean;
3060
+ /** Rótulo acessível da lista de chips de telas. */
3061
+ tablistAriaLabel: string;
3062
+ /** Grupos recolhidos (`true` = fechado). Omissão = expandido. */
3063
+ readonly gruposRecolhidos: _angular_core.WritableSignal<Readonly<Record<string, boolean>>>;
3064
+ /** Tela selecionada por grupo vertical (permite múltiplos conteúdos abertos). */
3065
+ readonly selectedTabByGroup: _angular_core.WritableSignal<Readonly<Record<string, string>>>;
3066
+ private gruposCollapsePadraoAplicado;
3067
+ ngOnChanges(changes: SimpleChanges): void;
3068
+ ngAfterContentInit(): void;
3069
+ get tabs(): PermissionGroupTabComponent[];
3070
+ get usaGruposVerticais(): boolean;
3071
+ get grupos(): PermissionGroupTabBucket<PermissionGroupTabComponent>[];
3072
+ baseId(): string;
3073
+ chipIdFor(key: string): string;
3074
+ panelIdFor(key: string): string;
3075
+ sectionHeaderIdFor(groupKey: string): string;
3076
+ isSelected(key: string): boolean;
3077
+ isGroupCollapsed(groupKey: string): boolean;
3078
+ toggleGroup(groupKey: string): void;
3079
+ selectTab(key: string): void;
3080
+ isTabPanelVisible(tab: PermissionGroupTabComponent): boolean;
3081
+ shouldMountTabPanel(tab: PermissionGroupTabComponent): boolean;
3082
+ getSelectedTabKeyForGroup(groupKey: string, tabsInGroup: readonly PermissionGroupTabComponent[]): string;
3083
+ onTabHeaderStateChanged(): void;
3084
+ private refreshTabPanels;
3085
+ private syncSelectedTabForGroup;
3086
+ private resolveGroupKey;
3087
+ private syncInitialActiveKey;
3088
+ private syncActiveKeyFromInput;
3089
+ private expandGroupForActiveKey;
3090
+ /** Recolhe todos os grupos verticais exceto o padrão (`visao-geral`). */
3091
+ private applyDefaultGroupCollapseState;
3092
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PermissionGroupTabsComponent, never>;
3093
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PermissionGroupTabsComponent, "app-permission-group-tabs", never, { "activeKey": { "alias": "activeKey"; "required": false; }; "keepAlive": { "alias": "keepAlive"; "required": false; }; "tablistAriaLabel": { "alias": "tablistAriaLabel"; "required": false; }; }, { "activeKeyChange": "activeKeyChange"; }, ["tabQuery"], never, true, never>;
3094
+ static ngAcceptInputType_keepAlive: unknown;
3095
+ }
3096
+
2937
3097
  /**
2938
3098
  * Configuração por aba: ordem no array define prioridade em
2939
3099
  * {@link pickTabKeyLinkedToSummaryItems} (primeira aba com intersecção vence).
@@ -3027,6 +3187,11 @@ interface DataGridColumn<T = unknown> {
3027
3187
  * Ordenação/filtro continuam a usar o campo bruto da linha.
3028
3188
  */
3029
3189
  enumOptions?: readonly DataGridEnumOption[];
3190
+ /**
3191
+ * Campo da linha com nome de classe CSS a aplicar na célula (ex.: cor por status).
3192
+ * Combinado com classes de alinhamento (`align`).
3193
+ */
3194
+ cellClassField?: keyof T | string;
3030
3195
  }
3031
3196
 
3032
3197
  /** Contexto injetado pelo {@link DataGridComponent} (não exportado para consumidores). */
@@ -3034,14 +3199,24 @@ interface DataGridActionsContext<T = unknown> {
3034
3199
  onEditRow: (row: T) => void;
3035
3200
  onRemoveRow: (row: T) => void;
3036
3201
  onDuplicateRow?: (row: T) => void;
3202
+ onPrintRow?: (row: T) => void;
3037
3203
  /** Quando `false`, o botão «Alterar» não é mostrado. */
3038
3204
  showEditAction?: boolean;
3039
3205
  /** Quando `false`, o botão «Remover» não é mostrado. */
3040
3206
  showRemoveAction?: boolean;
3041
3207
  /** Quando `true`, mostra «Duplicar» (requer `onDuplicateRow`). */
3042
3208
  showDuplicateAction?: boolean;
3209
+ /** Quando `true`, mostra «Imprimir» (requer `onPrintRow`). */
3210
+ showPrintAction?: boolean;
3043
3211
  /** Tooltip/aria do botão de abrir registo; omisso ⇒ «Alterar». */
3044
3212
  editActionLabel?: string;
3213
+ /**
3214
+ * Classe Font Awesome do ícone do botão editar/transmitir (ex.: `fa-paper-plane`).
3215
+ * Omisso ⇒ `fa-pen-to-square`.
3216
+ */
3217
+ editActionIconClass?: string;
3218
+ /** Tooltip/aria do botão imprimir; omisso ⇒ «Imprimir». */
3219
+ printActionLabel?: string;
3045
3220
  }
3046
3221
  declare class DataGridActionsCellRendererComponent implements ICellRendererAngularComp {
3047
3222
  params: ICellRendererParams & {
@@ -3050,11 +3225,19 @@ declare class DataGridActionsCellRendererComponent implements ICellRendererAngul
3050
3225
  agInit(params: ICellRendererParams): void;
3051
3226
  refresh(): boolean;
3052
3227
  protected get isPlaceholderRow(): boolean;
3228
+ /** Linha pode ocultar ações via `__hideEditAction` / `__hidePrintAction` (ex.: NF já autorizada). */
3229
+ protected get rowData(): Record<string, unknown> | undefined;
3230
+ protected get showEditButton(): boolean;
3231
+ protected get showPrintButton(): boolean;
3232
+ /** Botão textual (ex.: «Transmitir NFS-e») em vez do ícone «Alterar». */
3233
+ protected get editAsTextButton(): boolean;
3234
+ protected get editActionIcon(): string;
3053
3235
  /** `params.context` nem sempre vem preenchido; o grid guarda o mesmo objeto em `gridOptions.context`. */
3054
3236
  protected get actionsContext(): DataGridActionsContext | undefined;
3055
3237
  edit(): void;
3056
3238
  remove(): void;
3057
3239
  duplicate(): void;
3240
+ print(): void;
3058
3241
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataGridActionsCellRendererComponent, never>;
3059
3242
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataGridActionsCellRendererComponent, "app-data-grid-actions-cell-renderer", never, {}, {}, never, never, true, never>;
3060
3243
  }
@@ -3112,6 +3295,9 @@ interface DataGridPaginationChangeEvent {
3112
3295
  declare class DataGridComponent<T = unknown> implements OnInit, OnChanges, OnDestroy {
3113
3296
  private readonly ngZone;
3114
3297
  private readonly cdr;
3298
+ private readonly destroyRef;
3299
+ private readonly hostRef;
3300
+ private readonly gridLayoutService;
3115
3301
  private gridApi;
3116
3302
  /**
3117
3303
  * Alinhar com `data-grid.host-theme.scss`: `--ag-grid-size: 7px`, cabeçalho e linha = ×8.
@@ -3168,10 +3354,16 @@ declare class DataGridComponent<T = unknown> implements OnInit, OnChanges, OnDes
3168
3354
  showEditAction: boolean;
3169
3355
  /** Tooltip e aria-label do botão de edição na coluna Ações. Omisso ⇒ «Alterar». */
3170
3356
  editActionLabel: string;
3357
+ /** Ícone Font Awesome do botão editar (ex.: `fa-paper-plane`). Omisso ⇒ `fa-pen-to-square`. */
3358
+ editActionIconClass: string;
3171
3359
  /** Se `false`, a coluna de ações não mostra «Remover». Por omissão `true`. */
3172
3360
  showRemoveAction: boolean;
3173
3361
  /** Se `true`, mostra «Duplicar» na coluna de ações (requer handler no contexto). */
3174
3362
  showDuplicateAction: boolean;
3363
+ /** Se `true`, mostra «Imprimir» na coluna de ações (requer handler no contexto). */
3364
+ showPrintAction: boolean;
3365
+ /** Tooltip e aria-label do botão imprimir na coluna Ações. Omisso ⇒ «Imprimir». */
3366
+ printActionLabel: string;
3175
3367
  /**
3176
3368
  * Se `true`, não emite {@link rowClick} (ex.: coleção com edição só pelos botões da coluna de acções, como na consulta).
3177
3369
  */
@@ -3188,8 +3380,36 @@ declare class DataGridComponent<T = unknown> implements OnInit, OnChanges, OnDes
3188
3380
  highlightedRowMatch: number | null;
3189
3381
  /** Campo em {@link rows} a comparar com {@link highlightedRowMatch}. Omisso: `__rowArrayIndex`. */
3190
3382
  highlightMatchField: string;
3383
+ /**
3384
+ * Chave da tela para persistência de layout (tenant + tela + grid).
3385
+ * Omisso: não persiste nem restaura colunas.
3386
+ */
3387
+ layoutTelaKey: string | null;
3388
+ /** Chave do grid na mesma tela. Omisso: `consulta-principal`. */
3389
+ layoutGridKey: string;
3390
+ private isApplyingSavedLayout;
3391
+ private savedLayoutApplied;
3392
+ private layoutUserChangeSaveEnabled;
3393
+ /** Impressão digital do columnState já aplicado nesta instância (evita re-apply idêntico). */
3394
+ private appliedLayoutFingerprint;
3395
+ /** Estado em cache lido de forma síncrona antes do gridReady. */
3396
+ private pendingSavedColumnState;
3397
+ private layoutApplyRetryTimer;
3398
+ private layoutApplyRetryAttempts;
3399
+ private layoutCacheUpdatedUnsub;
3400
+ /** Detecta transição bootstrap (só «Ações») → colunas de dados do metadata (F5). */
3401
+ private lastKnownDataColumnCount;
3402
+ /**
3403
+ * Oculta a faixa horizontal do AG Grid durante reflow/remount (cache de rota / revisit de consulta).
3404
+ * O skeleton na 1.ª carga já tapa o viewport; aqui evita flash quando há linhas visíveis.
3405
+ */
3406
+ suppressHorizontalScrollFlicker: boolean;
3407
+ private layoutStabilizeTimer;
3408
+ private layoutStabilizeRaf;
3409
+ constructor();
3191
3410
  readonly edit: EventEmitter<T>;
3192
3411
  readonly duplicate: EventEmitter<T>;
3412
+ readonly print: EventEmitter<T>;
3193
3413
  readonly remove: EventEmitter<T>;
3194
3414
  /** Clique na linha de dados (útil para selecção fora da coluna de acções). */
3195
3415
  readonly rowClick: EventEmitter<T>;
@@ -3224,6 +3444,12 @@ declare class DataGridComponent<T = unknown> implements OnInit, OnChanges, OnDes
3224
3444
  get effectivePaginationPageSizeSelector(): number[];
3225
3445
  /** Repasse ao `ag-grid-angular`: `false` omite o selector (documentação AG Grid). */
3226
3446
  get paginationPageSizeSelectorInput(): number[] | boolean;
3447
+ /**
3448
+ * Skeleton só na carga inicial (lista vazia). Refresh com linhas visíveis mantém a grelha — evita flash com cache.
3449
+ */
3450
+ get showViewportSkeleton(): boolean;
3451
+ /** Só esvazia `rowData` durante loading quando ainda não há linhas a mostrar. */
3452
+ private get clearRowDataWhileLoading();
3227
3453
  /**
3228
3454
  * Empty state **fora** do AG Grid: o overlay nativo falha na 1.ª carga (skeleton + `suppressNoRowsOverlay` / v35).
3229
3455
  */
@@ -3236,6 +3462,8 @@ declare class DataGridComponent<T = unknown> implements OnInit, OnChanges, OnDes
3236
3462
  get skeletonRowCount(): number;
3237
3463
  /** Área entre cabeçalho da grelha e barra de paginação (overlay do skeleton), em px quando {@link hostHeight} é valor `NNpx`. */
3238
3464
  private estimateSkeletonViewportBodyPx;
3465
+ /** Desactiva animação de reordenação enquanto o layout persistido não foi aplicado. */
3466
+ get suppressColumnMoveAnimation(): boolean;
3239
3467
  readonly defaultColDef: ColDef<T>;
3240
3468
  /**
3241
3469
  * O AG Grid corre muitos callbacks fora da `NgZone`; sem `run()`, o pai com `OnPush`
@@ -3259,12 +3487,46 @@ declare class DataGridComponent<T = unknown> implements OnInit, OnChanges, OnDes
3259
3487
  ngOnDestroy(): void;
3260
3488
  get hostHeight(): string;
3261
3489
  onGridReady(ev: GridReadyEvent<T>): void;
3490
+ private onGridReadyApplyLayoutThenData;
3491
+ onLayoutColumnMoved(ev: ColumnMovedEvent<T>): void;
3492
+ onLayoutColumnResized(ev: ColumnResizedEvent<T>): void;
3493
+ onLayoutColumnVisible(_ev: ColumnVisibleEvent<T>): void;
3494
+ onLayoutColumnPinned(_ev: ColumnPinnedEvent<T>): void;
3495
+ private hydrateLayoutFromCacheSync;
3496
+ /** Dispara GET em background na 1.ª visita para aquecer cache antes do gridReady. */
3497
+ private prefetchLayoutIfNeeded;
3498
+ private onExternalLayoutCacheUpdated;
3499
+ private tryApplySavedLayout;
3500
+ private countDataColumns;
3501
+ private shouldKeepTryingLayoutApply;
3502
+ /** Só activa gravação automática quando colunas de dados existem (evita sobrescrever layout no F5). */
3503
+ private canEnableLayoutSaveGrace;
3504
+ private cancelLayoutApplyRetry;
3505
+ private scheduleLayoutApplyRetry;
3506
+ private applySavedLayoutBeforeFirstPaint;
3507
+ /** Dois frames após `agColumnDefs` mudar — AG Grid precisa materializar colunas antes de `applyColumnState`. */
3508
+ private yieldForGridColumnDefsSync;
3509
+ /** Colunas de dados existem no input e já estão materializadas na API do AG Grid. */
3510
+ private gridReadyForLayoutApply;
3511
+ private verifyLayoutStateApplied;
3512
+ private applyColumnStateToGrid;
3513
+ private enableLayoutSaveAfterGrace;
3514
+ private persistColumnLayoutIfAllowed;
3262
3515
  onRowClicked(ev: RowClickedEvent<T>): void;
3263
3516
  private rowClassForHighlight;
3264
3517
  private applyRowHighlightClass;
3265
3518
  private applyInitialPaginationPage;
3266
3519
  /** Evita `removeEventListener` na API depois do grid destruído. */
3267
3520
  private detachPaginationListenerIfLive;
3521
+ private setupHorizontalScrollStabilizingObservers;
3522
+ private beginHorizontalScrollStabilizing;
3523
+ private scheduleEndHorizontalScrollStabilizing;
3524
+ private tryFinishHorizontalScrollStabilizing;
3525
+ /**
3526
+ * `true` se o viewport central transborda; `false` se não; `null` se ainda não mensurável (largura 0).
3527
+ */
3528
+ private centerViewportNeedsHorizontalScroll;
3529
+ private clearLayoutStabilizingTimers;
3268
3530
  private columnsForGrid;
3269
3531
  /** Classes BEM em `data-grid.host-theme.scss` para alinhamento declarativo nas colunas. */
3270
3532
  private static alignmentCellHeaderClasses;
@@ -3280,7 +3542,7 @@ declare class DataGridComponent<T = unknown> implements OnInit, OnChanges, OnDes
3280
3542
  get suppressCellFocusBinding(): boolean;
3281
3543
  private mapColumnsToColDef;
3282
3544
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataGridComponent<any>, never>;
3283
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataGridComponent<any>, "app-data-grid", never, { "rows": { "alias": "rows"; "required": true; }; "columns": { "alias": "columns"; "required": true; }; "pageSize": { "alias": "pageSize"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "initialPaginationPage": { "alias": "initialPaginationPage"; "required": false; }; "height": { "alias": "height"; "required": false; }; "fitPaginationHeight": { "alias": "fitPaginationHeight"; "required": false; }; "fitPaginationMinEmptyRows": { "alias": "fitPaginationMinEmptyRows"; "required": false; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; }; "pagination": { "alias": "pagination"; "required": false; }; "paginationPanelPlacement": { "alias": "paginationPanelPlacement"; "required": false; }; "paginationStripOnly": { "alias": "paginationStripOnly"; "required": false; }; "suppressPaginationPageSizeSelector": { "alias": "suppressPaginationPageSizeSelector"; "required": false; }; "showActionsColumn": { "alias": "showActionsColumn"; "required": false; }; "showEditAction": { "alias": "showEditAction"; "required": false; }; "editActionLabel": { "alias": "editActionLabel"; "required": false; }; "showRemoveAction": { "alias": "showRemoveAction"; "required": false; }; "showDuplicateAction": { "alias": "showDuplicateAction"; "required": false; }; "suppressRowClick": { "alias": "suppressRowClick"; "required": false; }; "inlineCellEditing": { "alias": "inlineCellEditing"; "required": false; }; "highlightedRowMatch": { "alias": "highlightedRowMatch"; "required": false; }; "highlightMatchField": { "alias": "highlightMatchField"; "required": false; }; }, { "edit": "edit"; "duplicate": "duplicate"; "remove": "remove"; "rowClick": "rowClick"; "selectionChange": "selectionChange"; "paginationChanged": "paginationChanged"; }, never, never, true, never>;
3545
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataGridComponent<any>, "app-data-grid", never, { "rows": { "alias": "rows"; "required": true; }; "columns": { "alias": "columns"; "required": true; }; "pageSize": { "alias": "pageSize"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "initialPaginationPage": { "alias": "initialPaginationPage"; "required": false; }; "height": { "alias": "height"; "required": false; }; "fitPaginationHeight": { "alias": "fitPaginationHeight"; "required": false; }; "fitPaginationMinEmptyRows": { "alias": "fitPaginationMinEmptyRows"; "required": false; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; }; "pagination": { "alias": "pagination"; "required": false; }; "paginationPanelPlacement": { "alias": "paginationPanelPlacement"; "required": false; }; "paginationStripOnly": { "alias": "paginationStripOnly"; "required": false; }; "suppressPaginationPageSizeSelector": { "alias": "suppressPaginationPageSizeSelector"; "required": false; }; "showActionsColumn": { "alias": "showActionsColumn"; "required": false; }; "showEditAction": { "alias": "showEditAction"; "required": false; }; "editActionLabel": { "alias": "editActionLabel"; "required": false; }; "editActionIconClass": { "alias": "editActionIconClass"; "required": false; }; "showRemoveAction": { "alias": "showRemoveAction"; "required": false; }; "showDuplicateAction": { "alias": "showDuplicateAction"; "required": false; }; "showPrintAction": { "alias": "showPrintAction"; "required": false; }; "printActionLabel": { "alias": "printActionLabel"; "required": false; }; "suppressRowClick": { "alias": "suppressRowClick"; "required": false; }; "inlineCellEditing": { "alias": "inlineCellEditing"; "required": false; }; "highlightedRowMatch": { "alias": "highlightedRowMatch"; "required": false; }; "highlightMatchField": { "alias": "highlightMatchField"; "required": false; }; "layoutTelaKey": { "alias": "layoutTelaKey"; "required": false; }; "layoutGridKey": { "alias": "layoutGridKey"; "required": false; }; }, { "edit": "edit"; "duplicate": "duplicate"; "print": "print"; "remove": "remove"; "rowClick": "rowClick"; "selectionChange": "selectionChange"; "paginationChanged": "paginationChanged"; }, never, never, true, never>;
3284
3546
  static ngAcceptInputType_initialPaginationPage: unknown;
3285
3547
  static ngAcceptInputType_fitPaginationHeight: unknown;
3286
3548
  static ngAcceptInputType_fitPaginationMinEmptyRows: unknown;
@@ -3289,6 +3551,7 @@ declare class DataGridComponent<T = unknown> implements OnInit, OnChanges, OnDes
3289
3551
  static ngAcceptInputType_showEditAction: unknown;
3290
3552
  static ngAcceptInputType_showRemoveAction: unknown;
3291
3553
  static ngAcceptInputType_showDuplicateAction: unknown;
3554
+ static ngAcceptInputType_showPrintAction: unknown;
3292
3555
  static ngAcceptInputType_suppressRowClick: unknown;
3293
3556
  static ngAcceptInputType_inlineCellEditing: unknown;
3294
3557
  }
@@ -3349,6 +3612,7 @@ declare class CardListComponent<T = unknown> implements OnChanges {
3349
3612
  /** Repasse ao `app-data-card`: botão «Alterar» quando {@link showItemActions} é `true`. */
3350
3613
  showEditAction: boolean;
3351
3614
  editActionLabel: string;
3615
+ editActionIconClass: string;
3352
3616
  /** Repasse ao `app-data-card`: botão «Remover» quando {@link showItemActions} é `true`. */
3353
3617
  showRemoveAction: boolean;
3354
3618
  /** Repasse ao `app-data-card`: clique no cartão emite `edit` (exceto nos botões). */
@@ -3416,13 +3680,14 @@ declare class CardListComponent<T = unknown> implements OnChanges {
3416
3680
  skeletonCardIndices(): number[];
3417
3681
  /** Um único cartão skeleton no fundo durante `loadingMore` (mantém o scroll estável). */
3418
3682
  skeletonTailIndices(): number[];
3683
+ hideEditActionForItem(item: T): boolean;
3419
3684
  trackFn: (index: number, item: T) => unknown;
3420
3685
  onScroll(ev: Event): void;
3421
3686
  private requestRemotePage;
3422
3687
  private loadMoreMemoryChunk;
3423
3688
  private resetVisibleWindow;
3424
3689
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardListComponent<any>, never>;
3425
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardListComponent<any>, "app-card-list", never, { "items": { "alias": "items"; "required": true; }; "loading": { "alias": "loading"; "required": false; }; "loadingMore": { "alias": "loadingMore"; "required": false; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "mapItem": { "alias": "mapItem"; "required": true; }; "showItemActions": { "alias": "showItemActions"; "required": false; }; "showEditAction": { "alias": "showEditAction"; "required": false; }; "editActionLabel": { "alias": "editActionLabel"; "required": false; }; "showRemoveAction": { "alias": "showRemoveAction"; "required": false; }; "cardOpenOnClick": { "alias": "cardOpenOnClick"; "required": false; }; "trackByProp": { "alias": "trackByProp"; "required": false; }; "dataMode": { "alias": "dataMode"; "required": false; }; "scrollBatchSize": { "alias": "scrollBatchSize"; "required": false; }; "scrollLoadThresholdPx": { "alias": "scrollLoadThresholdPx"; "required": false; }; "showFooter": { "alias": "showFooter"; "required": false; }; "headerPosition": { "alias": "headerPosition"; "required": false; }; "scrollMaxHeight": { "alias": "scrollMaxHeight"; "required": false; }; "cardsPerRow": { "alias": "cardsPerRow"; "required": false; }; "totalCountRemote": { "alias": "totalCountRemote"; "required": false; }; "hasNextPage": { "alias": "hasNextPage"; "required": false; }; }, { "loadMore": "loadMore"; "edit": "edit"; "remove": "remove"; "booleanFieldChange": "booleanFieldChange"; }, never, never, true, never>;
3690
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardListComponent<any>, "app-card-list", never, { "items": { "alias": "items"; "required": true; }; "loading": { "alias": "loading"; "required": false; }; "loadingMore": { "alias": "loadingMore"; "required": false; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "mapItem": { "alias": "mapItem"; "required": true; }; "showItemActions": { "alias": "showItemActions"; "required": false; }; "showEditAction": { "alias": "showEditAction"; "required": false; }; "editActionLabel": { "alias": "editActionLabel"; "required": false; }; "editActionIconClass": { "alias": "editActionIconClass"; "required": false; }; "showRemoveAction": { "alias": "showRemoveAction"; "required": false; }; "cardOpenOnClick": { "alias": "cardOpenOnClick"; "required": false; }; "trackByProp": { "alias": "trackByProp"; "required": false; }; "dataMode": { "alias": "dataMode"; "required": false; }; "scrollBatchSize": { "alias": "scrollBatchSize"; "required": false; }; "scrollLoadThresholdPx": { "alias": "scrollLoadThresholdPx"; "required": false; }; "showFooter": { "alias": "showFooter"; "required": false; }; "headerPosition": { "alias": "headerPosition"; "required": false; }; "scrollMaxHeight": { "alias": "scrollMaxHeight"; "required": false; }; "cardsPerRow": { "alias": "cardsPerRow"; "required": false; }; "totalCountRemote": { "alias": "totalCountRemote"; "required": false; }; "hasNextPage": { "alias": "hasNextPage"; "required": false; }; }, { "loadMore": "loadMore"; "edit": "edit"; "remove": "remove"; "booleanFieldChange": "booleanFieldChange"; }, never, never, true, never>;
3426
3691
  static ngAcceptInputType_loadingMore: unknown;
3427
3692
  static ngAcceptInputType_showEditAction: unknown;
3428
3693
  static ngAcceptInputType_showRemoveAction: unknown;
@@ -3466,6 +3731,8 @@ declare class AdaptiveDataViewComponent<T = unknown> implements OnInit, OnChange
3466
3731
  showCardItemActions: boolean;
3467
3732
  /** Tooltip/aria do botão de abrir registo na coluna Ações ou no cartão. Omisso ⇒ «Alterar». */
3468
3733
  editActionLabel: string;
3734
+ /** Ícone Font Awesome do botão editar (ex.: `fa-paper-plane`). Omisso ⇒ `fa-pen-to-square`. */
3735
+ editActionIconClass: string;
3469
3736
  /** Lista em cartões: clique no cartão dispara `edit` (como «Alterar»); botões mantêm-se independentes. */
3470
3737
  cardOpenOnClick: boolean;
3471
3738
  scrollBatchSize: number;
@@ -3498,16 +3765,25 @@ declare class AdaptiveDataViewComponent<T = unknown> implements OnInit, OnChange
3498
3765
  /** Vista quando a tela é maior. Por padrão `grid`. */
3499
3766
  desktopView: AdaptiveDataViewMode;
3500
3767
  showDuplicateAction: boolean;
3768
+ showPrintAction: boolean;
3769
+ printActionLabel: string;
3501
3770
  showEditAction: boolean;
3502
3771
  showRemoveAction: boolean;
3772
+ /** Chave da tela para persistência de layout AG Grid (repasse ao `app-data-grid`). */
3773
+ layoutTelaKey: string | null;
3774
+ /** Chave do grid na mesma tela. Omisso: `consulta-principal`. */
3775
+ layoutGridKey: string;
3503
3776
  readonly edit: EventEmitter<T>;
3504
3777
  readonly duplicate: EventEmitter<T>;
3778
+ readonly print: EventEmitter<T>;
3505
3779
  readonly remove: EventEmitter<T>;
3506
3780
  readonly loadMore: EventEmitter<void>;
3507
3781
  /** Corresponde ao breakpoint mobile. */
3508
3782
  isMobileLayout: boolean;
3509
3783
  /** Valor efectivo reposto ao grid / lista (respeita {@link loadingSkeletonMinMs}). */
3510
3784
  displayLoading: boolean;
3785
+ /** Skeleton só quando `loading` e a lista ainda está vazia (cache / refresh mantém dados visíveis). */
3786
+ private shouldShowLoadingSkeleton;
3511
3787
  ngOnInit(): void;
3512
3788
  ngOnChanges(changes: SimpleChanges): void;
3513
3789
  ngOnDestroy(): void;
@@ -3522,13 +3798,14 @@ declare class AdaptiveDataViewComponent<T = unknown> implements OnInit, OnChange
3522
3798
  get effectiveCardScrollMaxHeight(): string | null;
3523
3799
  get resultCountDisplay(): string;
3524
3800
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AdaptiveDataViewComponent<any>, never>;
3525
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AdaptiveDataViewComponent<any>, "app-adaptive-data-view", never, { "items": { "alias": "items"; "required": true; }; "gridColumns": { "alias": "gridColumns"; "required": true; }; "mapItem": { "alias": "mapItem"; "required": true; }; "pageSize": { "alias": "pageSize"; "required": false; }; "gridHeight": { "alias": "gridHeight"; "required": false; }; "cardScrollMaxHeight": { "alias": "cardScrollMaxHeight"; "required": false; }; "gridFitPaginationHeight": { "alias": "gridFitPaginationHeight"; "required": false; }; "gridFitPaginationMinEmptyRows": { "alias": "gridFitPaginationMinEmptyRows"; "required": false; }; "emptyMessageGrid": { "alias": "emptyMessageGrid"; "required": false; }; "emptyMessageCard": { "alias": "emptyMessageCard"; "required": false; }; "pagination": { "alias": "pagination"; "required": false; }; "showActionsColumn": { "alias": "showActionsColumn"; "required": false; }; "showCardItemActions": { "alias": "showCardItemActions"; "required": false; }; "editActionLabel": { "alias": "editActionLabel"; "required": false; }; "cardOpenOnClick": { "alias": "cardOpenOnClick"; "required": false; }; "scrollBatchSize": { "alias": "scrollBatchSize"; "required": false; }; "showCardFooter": { "alias": "showCardFooter"; "required": false; }; "headerPosition": { "alias": "headerPosition"; "required": false; }; "cardsPerRow": { "alias": "cardsPerRow"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "loadingSkeletonMinMs": { "alias": "loadingSkeletonMinMs"; "required": false; }; "showResultCount": { "alias": "showResultCount"; "required": false; }; "resultCountTemplate": { "alias": "resultCountTemplate"; "required": false; }; "mobileView": { "alias": "mobileView"; "required": false; }; "desktopView": { "alias": "desktopView"; "required": false; }; "showDuplicateAction": { "alias": "showDuplicateAction"; "required": false; }; "showEditAction": { "alias": "showEditAction"; "required": false; }; "showRemoveAction": { "alias": "showRemoveAction"; "required": false; }; }, { "edit": "edit"; "duplicate": "duplicate"; "remove": "remove"; "loadMore": "loadMore"; }, never, never, true, never>;
3801
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AdaptiveDataViewComponent<any>, "app-adaptive-data-view", never, { "items": { "alias": "items"; "required": true; }; "gridColumns": { "alias": "gridColumns"; "required": true; }; "mapItem": { "alias": "mapItem"; "required": true; }; "pageSize": { "alias": "pageSize"; "required": false; }; "gridHeight": { "alias": "gridHeight"; "required": false; }; "cardScrollMaxHeight": { "alias": "cardScrollMaxHeight"; "required": false; }; "gridFitPaginationHeight": { "alias": "gridFitPaginationHeight"; "required": false; }; "gridFitPaginationMinEmptyRows": { "alias": "gridFitPaginationMinEmptyRows"; "required": false; }; "emptyMessageGrid": { "alias": "emptyMessageGrid"; "required": false; }; "emptyMessageCard": { "alias": "emptyMessageCard"; "required": false; }; "pagination": { "alias": "pagination"; "required": false; }; "showActionsColumn": { "alias": "showActionsColumn"; "required": false; }; "showCardItemActions": { "alias": "showCardItemActions"; "required": false; }; "editActionLabel": { "alias": "editActionLabel"; "required": false; }; "editActionIconClass": { "alias": "editActionIconClass"; "required": false; }; "cardOpenOnClick": { "alias": "cardOpenOnClick"; "required": false; }; "scrollBatchSize": { "alias": "scrollBatchSize"; "required": false; }; "showCardFooter": { "alias": "showCardFooter"; "required": false; }; "headerPosition": { "alias": "headerPosition"; "required": false; }; "cardsPerRow": { "alias": "cardsPerRow"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "loadingSkeletonMinMs": { "alias": "loadingSkeletonMinMs"; "required": false; }; "showResultCount": { "alias": "showResultCount"; "required": false; }; "resultCountTemplate": { "alias": "resultCountTemplate"; "required": false; }; "mobileView": { "alias": "mobileView"; "required": false; }; "desktopView": { "alias": "desktopView"; "required": false; }; "showDuplicateAction": { "alias": "showDuplicateAction"; "required": false; }; "showPrintAction": { "alias": "showPrintAction"; "required": false; }; "printActionLabel": { "alias": "printActionLabel"; "required": false; }; "showEditAction": { "alias": "showEditAction"; "required": false; }; "showRemoveAction": { "alias": "showRemoveAction"; "required": false; }; "layoutTelaKey": { "alias": "layoutTelaKey"; "required": false; }; "layoutGridKey": { "alias": "layoutGridKey"; "required": false; }; }, { "edit": "edit"; "duplicate": "duplicate"; "print": "print"; "remove": "remove"; "loadMore": "loadMore"; }, never, never, true, never>;
3526
3802
  static ngAcceptInputType_gridFitPaginationHeight: unknown;
3527
3803
  static ngAcceptInputType_gridFitPaginationMinEmptyRows: unknown;
3528
3804
  static ngAcceptInputType_cardOpenOnClick: unknown;
3529
3805
  static ngAcceptInputType_cardsPerRow: unknown;
3530
3806
  static ngAcceptInputType_loadingSkeletonMinMs: unknown;
3531
3807
  static ngAcceptInputType_showDuplicateAction: unknown;
3808
+ static ngAcceptInputType_showPrintAction: unknown;
3532
3809
  static ngAcceptInputType_showEditAction: unknown;
3533
3810
  static ngAcceptInputType_showRemoveAction: unknown;
3534
3811
  }
@@ -3552,8 +3829,11 @@ declare class DataCardComponent implements OnChanges {
3552
3829
  /** Omisso / `true`: mostra o botão «Alterar» quando {@link showActions} é `true`. */
3553
3830
  showEditAction: boolean;
3554
3831
  editActionLabel: string;
3832
+ editActionIconClass: string;
3555
3833
  /** Omisso / `true`: mostra o botão «Remover» quando {@link showActions} é `true`. */
3556
3834
  showRemoveAction: boolean;
3835
+ /** Quando `true`, omite o botão «Alterar» neste cartão (ex.: ação por linha na consulta). */
3836
+ hideEditAction: boolean;
3557
3837
  /**
3558
3838
  * Clique na superfície do cartão (fora dos botões de ação) emite {@link edit}, como o botão «Alterar».
3559
3839
  */
@@ -3564,15 +3844,17 @@ declare class DataCardComponent implements OnChanges {
3564
3844
  fieldKey: string;
3565
3845
  checked: boolean;
3566
3846
  }>;
3847
+ protected get editActionIcon(): string;
3567
3848
  onCardShellClick(ev: MouseEvent): void;
3568
3849
  onEditClick(ev: Event): void;
3569
3850
  onRemoveClick(ev: Event): void;
3570
3851
  onBooleanFieldChange(field: CardItemBooleanField, ev: Event): void;
3571
3852
  onThumbError(ev: Event): void;
3572
3853
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataCardComponent, never>;
3573
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataCardComponent, "app-data-card", never, { "title": { "alias": "title"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; "avatarText": { "alias": "avatarText"; "required": false; }; "imageUrl": { "alias": "imageUrl"; "required": false; }; "metaFields": { "alias": "metaFields"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "showActions": { "alias": "showActions"; "required": false; }; "showEditAction": { "alias": "showEditAction"; "required": false; }; "editActionLabel": { "alias": "editActionLabel"; "required": false; }; "showRemoveAction": { "alias": "showRemoveAction"; "required": false; }; "openOnClick": { "alias": "openOnClick"; "required": false; }; }, { "edit": "edit"; "remove": "remove"; "booleanFieldChange": "booleanFieldChange"; }, never, never, true, never>;
3854
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataCardComponent, "app-data-card", never, { "title": { "alias": "title"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; "avatarText": { "alias": "avatarText"; "required": false; }; "imageUrl": { "alias": "imageUrl"; "required": false; }; "metaFields": { "alias": "metaFields"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "showActions": { "alias": "showActions"; "required": false; }; "showEditAction": { "alias": "showEditAction"; "required": false; }; "editActionLabel": { "alias": "editActionLabel"; "required": false; }; "editActionIconClass": { "alias": "editActionIconClass"; "required": false; }; "showRemoveAction": { "alias": "showRemoveAction"; "required": false; }; "hideEditAction": { "alias": "hideEditAction"; "required": false; }; "openOnClick": { "alias": "openOnClick"; "required": false; }; }, { "edit": "edit"; "remove": "remove"; "booleanFieldChange": "booleanFieldChange"; }, never, never, true, never>;
3574
3855
  static ngAcceptInputType_showEditAction: unknown;
3575
3856
  static ngAcceptInputType_showRemoveAction: unknown;
3857
+ static ngAcceptInputType_hideEditAction: unknown;
3576
3858
  static ngAcceptInputType_openOnClick: unknown;
3577
3859
  }
3578
3860
 
@@ -3715,12 +3997,15 @@ declare class StatCardComponent {
3715
3997
  delta: string;
3716
3998
  deltaTone: StatCardDeltaTone;
3717
3999
  clickable: boolean;
4000
+ /** Destaque visual quando o cartão representa o filtro activo (ex.: totalizadores de consulta). */
4001
+ selected: boolean;
3718
4002
  readonly cardActivate: EventEmitter<void>;
3719
4003
  onActivate(ev: Event): void;
3720
4004
  onKeydown(ev: KeyboardEvent): void;
3721
4005
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatCardComponent, never>;
3722
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatCardComponent, "app-stat-card", never, { "title": { "alias": "title"; "required": true; }; "value": { "alias": "value"; "required": true; }; "description": { "alias": "description"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "delta": { "alias": "delta"; "required": false; }; "deltaTone": { "alias": "deltaTone"; "required": false; }; "clickable": { "alias": "clickable"; "required": false; }; }, { "cardActivate": "cardActivate"; }, never, never, true, never>;
4006
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatCardComponent, "app-stat-card", never, { "title": { "alias": "title"; "required": true; }; "value": { "alias": "value"; "required": true; }; "description": { "alias": "description"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "delta": { "alias": "delta"; "required": false; }; "deltaTone": { "alias": "deltaTone"; "required": false; }; "clickable": { "alias": "clickable"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; }, { "cardActivate": "cardActivate"; }, never, never, true, never>;
3723
4007
  static ngAcceptInputType_clickable: unknown;
4008
+ static ngAcceptInputType_selected: unknown;
3724
4009
  }
3725
4010
 
3726
4011
  /**
@@ -3766,12 +4051,29 @@ declare class DataListComponent {
3766
4051
  * Bloco de dashboard: título, ações opcionais e conteúdo (stat-cards, listas, grades).
3767
4052
  * Superfície alinhada aos cartões da lib.
3768
4053
  */
3769
- declare class DashboardSectionComponent {
4054
+ declare class DashboardSectionComponent implements OnChanges {
3770
4055
  title: string;
3771
4056
  subtitle: string;
4057
+ /** Quando `true`, o cabeçalho exibe chevron e alterna aberto/fechado. */
4058
+ collapsible: boolean;
4059
+ /** Com `collapsible`: `true` = seção fechada (só cabeçalho), `false` = aberta. */
4060
+ collapsed: boolean;
4061
+ readonly collapsedChange: EventEmitter<boolean>;
3772
4062
  readonly titleId: string;
4063
+ private collapsedInternal;
4064
+ get hostCollapsible(): boolean;
4065
+ get hostCollapsed(): boolean;
4066
+ get hostExpanded(): boolean;
4067
+ ngOnChanges(changes: SimpleChanges): void;
4068
+ get isCollapsed(): boolean;
4069
+ get headerInteractive(): boolean;
4070
+ onHeaderClick(event: MouseEvent): void;
4071
+ onHeaderKeydown(event: KeyboardEvent): void;
4072
+ private toggleCollapsed;
3773
4073
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardSectionComponent, never>;
3774
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DashboardSectionComponent, "app-dashboard-section", never, { "title": { "alias": "title"; "required": true; }; "subtitle": { "alias": "subtitle"; "required": false; }; }, {}, never, ["[dashboard-section-actions]", "*"], true, never>;
4074
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DashboardSectionComponent, "app-dashboard-section", never, { "title": { "alias": "title"; "required": true; }; "subtitle": { "alias": "subtitle"; "required": false; }; "collapsible": { "alias": "collapsible"; "required": false; }; "collapsed": { "alias": "collapsed"; "required": false; }; }, { "collapsedChange": "collapsedChange"; }, never, ["[dashboard-section-actions]", "*"], true, never>;
4075
+ static ngAcceptInputType_collapsible: unknown;
4076
+ static ngAcceptInputType_collapsed: unknown;
3775
4077
  }
3776
4078
 
3777
4079
  /**
@@ -3862,6 +4164,12 @@ declare class TreeViewComponent implements OnChanges, OnInit, OnDestroy {
3862
4164
  filterSearchable: boolean;
3863
4165
  /** Placeholder do campo de filtro. */
3864
4166
  filterPlaceholder: string;
4167
+ /** Título do empty state quando a pesquisa não encontra itens. */
4168
+ filterEmptyMessage: string;
4169
+ /** Subtítulo do empty state de pesquisa vazia. */
4170
+ filterEmptyDescription: string;
4171
+ /** Ícone Font Awesome do empty state de pesquisa vazia. */
4172
+ filterEmptyIconClass: string;
3865
4173
  /**
3866
4174
  * Mostra ícone à esquerda do rótulo em ramos (pastas).
3867
4175
  * Omisso / `true`: ícone de pasta (ou `node.iconClass`); `false`: só caret + rótulo (mantém espaço com spacer).
@@ -3872,6 +4180,11 @@ declare class TreeViewComponent implements OnChanges, OnInit, OnDestroy {
3872
4180
  * Omisso / `true`: ícone por omissão (ou `node.iconClass`); `false`: spacer alinhado às linhas com ícone.
3873
4181
  */
3874
4182
  showLeafIcons: boolean;
4183
+ /**
4184
+ * Chave externa para repor `expandedIds` a partir de `node.expanded`, mesmo quando `nodes` não muda.
4185
+ * Útil ao reentrar numa rota com reuse ou ao remontar a árvore sem substituir os nós.
4186
+ */
4187
+ expansionStateKey: unknown;
3875
4188
  readonly selectedIdChange: EventEmitter<string | null>;
3876
4189
  readonly nodeSelect: EventEmitter<TreeViewSelectEvent>;
3877
4190
  /** IDs de ramos expandidos. */
@@ -3903,7 +4216,7 @@ declare class TreeViewComponent implements OnChanges, OnInit, OnDestroy {
3903
4216
  private refreshExpandedForSearch;
3904
4217
  private expandAllBranchesRecursive;
3905
4218
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TreeViewComponent, never>;
3906
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TreeViewComponent, "app-tree-view", never, { "nodes": { "alias": "nodes"; "required": true; }; "title": { "alias": "title"; "required": false; }; "titleIconClass": { "alias": "titleIconClass"; "required": false; }; "folderIconClass": { "alias": "folderIconClass"; "required": false; }; "leafIconClass": { "alias": "leafIconClass"; "required": false; }; "selectedId": { "alias": "selectedId"; "required": false; }; "maxHeight": { "alias": "maxHeight"; "required": false; }; "mobileScrollCollapse": { "alias": "mobileScrollCollapse"; "required": false; }; "filterSearchable": { "alias": "filterSearchable"; "required": false; }; "filterPlaceholder": { "alias": "filterPlaceholder"; "required": false; }; "showBranchIcons": { "alias": "showBranchIcons"; "required": false; }; "showLeafIcons": { "alias": "showLeafIcons"; "required": false; }; }, { "selectedIdChange": "selectedIdChange"; "nodeSelect": "nodeSelect"; }, never, never, true, never>;
4219
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TreeViewComponent, "app-tree-view", never, { "nodes": { "alias": "nodes"; "required": true; }; "title": { "alias": "title"; "required": false; }; "titleIconClass": { "alias": "titleIconClass"; "required": false; }; "folderIconClass": { "alias": "folderIconClass"; "required": false; }; "leafIconClass": { "alias": "leafIconClass"; "required": false; }; "selectedId": { "alias": "selectedId"; "required": false; }; "maxHeight": { "alias": "maxHeight"; "required": false; }; "mobileScrollCollapse": { "alias": "mobileScrollCollapse"; "required": false; }; "filterSearchable": { "alias": "filterSearchable"; "required": false; }; "filterPlaceholder": { "alias": "filterPlaceholder"; "required": false; }; "filterEmptyMessage": { "alias": "filterEmptyMessage"; "required": false; }; "filterEmptyDescription": { "alias": "filterEmptyDescription"; "required": false; }; "filterEmptyIconClass": { "alias": "filterEmptyIconClass"; "required": false; }; "showBranchIcons": { "alias": "showBranchIcons"; "required": false; }; "showLeafIcons": { "alias": "showLeafIcons"; "required": false; }; "expansionStateKey": { "alias": "expansionStateKey"; "required": false; }; }, { "selectedIdChange": "selectedIdChange"; "nodeSelect": "nodeSelect"; }, never, never, true, never>;
3907
4220
  static ngAcceptInputType_filterSearchable: unknown;
3908
4221
  static ngAcceptInputType_showBranchIcons: unknown;
3909
4222
  static ngAcceptInputType_showLeafIcons: unknown;
@@ -4082,6 +4395,8 @@ declare class ConfirmDialogService {
4082
4395
  }
4083
4396
 
4084
4397
  declare const STRUCTRA_THEME_IDS: readonly ["blue", "green", "purple", "orange", "white", "gray", "sepia", "black"];
4398
+ /** Classe CSS do modo escuro (combinada com paleta `theme-*`). */
4399
+ declare const STRUCTRA_THEME_DARK_CLASS = "theme-dark";
4085
4400
  type StructraTheme = (typeof STRUCTRA_THEME_IDS)[number];
4086
4401
 
4087
4402
  /** Identificadores de paleta suportados pela library (uso em `AppThemeService.setTheme`). */
@@ -4108,12 +4423,15 @@ interface AppThemeOption {
4108
4423
  */
4109
4424
  declare class AppThemeService {
4110
4425
  private readonly activeId;
4426
+ private readonly darkMode;
4111
4427
  /** Identificador do tema activo (`blue`, `green`, …). */
4112
4428
  readonly activeThemeId: _angular_core.Signal<"blue" | "green" | "purple" | "orange" | "white" | "gray" | "sepia" | "black">;
4429
+ /** Modo escuro (superfícies/texto); a primária vem da paleta activa. */
4430
+ readonly isDarkMode: _angular_core.Signal<boolean>;
4113
4431
  /**
4114
4432
  * Classes separadas (ex.: CDK `panelClass` — uma string com espaço quebra `classList.add`).
4115
4433
  */
4116
- readonly themeClassList: _angular_core.Signal<readonly [string, string]>;
4434
+ readonly themeClassList: _angular_core.Signal<readonly string[]>;
4117
4435
  /**
4118
4436
  * As duas classes numa string — útil para `[class]`, `[ngClass]` com string, ou hosts HTML.
4119
4437
  * Ex.: `<div [ngClass]="libTheme.getTheme()">` aplica paleta completa no consumidor.
@@ -4121,7 +4439,7 @@ declare class AppThemeService {
4121
4439
  readonly getTheme: _angular_core.Signal<string>;
4122
4440
  /** Mapa para `[ngClass]` com chaves dinâmicas (painéis overlay). */
4123
4441
  readonly themeClassMap: _angular_core.Signal<{
4124
- [x: string]: boolean;
4442
+ [k: string]: boolean;
4125
4443
  }>;
4126
4444
  /** Lista fixa de temas suportados pela library. */
4127
4445
  readonly themeOptions: readonly AppThemeOption[];
@@ -4131,6 +4449,7 @@ declare class AppThemeService {
4131
4449
  */
4132
4450
  readonly themePrimaryColorLabelPtBr: _angular_core.Signal<string>;
4133
4451
  setTheme(id: AppThemeId): void;
4452
+ setDarkMode(enabled: boolean): void;
4134
4453
  isActive(id: AppThemeId): boolean;
4135
4454
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppThemeService, never>;
4136
4455
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AppThemeService>;
@@ -4148,21 +4467,25 @@ declare class ThemeDirective implements OnChanges {
4148
4467
  private readonly renderer;
4149
4468
  private readonly themeService;
4150
4469
  private _theme;
4470
+ private _darkMode;
4151
4471
  set appTheme(value: StructraTheme | AppTheme | string | null | undefined);
4152
4472
  get appTheme(): StructraTheme | AppTheme;
4473
+ /** Modo escuro combinado com a paleta de `appTheme`. */
4474
+ set appThemeDark(value: boolean | string | null | undefined);
4153
4475
  private readonly themeTokenClasses;
4154
4476
  constructor(elementRef: ElementRef<HTMLElement>, renderer: Renderer2, themeService: AppThemeService);
4155
4477
  ngOnChanges(changes: SimpleChanges): void;
4156
4478
  private applyTheme;
4157
4479
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThemeDirective, never>;
4158
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ThemeDirective, "[appTheme]", never, { "appTheme": { "alias": "appTheme"; "required": false; }; }, {}, never, never, true, never>;
4480
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ThemeDirective, "[appTheme]", never, { "appTheme": { "alias": "appTheme"; "required": false; }; "appThemeDark": { "alias": "appThemeDark"; "required": false; }; }, {}, never, never, true, never>;
4159
4481
  }
4160
4482
 
4161
4483
  declare const APP_THEME_BASE_CLASS = "app-library-theme";
4484
+ declare function isLegacyDarkThemeId(theme: string | null | undefined): boolean;
4162
4485
  declare function normalizeStructraTheme(theme: StructraTheme | string): StructraTheme;
4163
4486
  declare function getThemeTokenClass(theme: StructraTheme | string): string;
4164
- declare function getThemeClassList(theme: StructraTheme | string): readonly [string, string];
4165
- declare function getThemeClass(theme: StructraTheme | string): string;
4487
+ declare function getThemeClassList(theme: StructraTheme | string, darkMode?: boolean): readonly string[];
4488
+ declare function getThemeClass(theme: StructraTheme | string, darkMode?: boolean): string;
4166
4489
 
4167
4490
  /**
4168
4491
  * Tema efectivo para hosts/overlays: valor de `[appTheme]` quando definido; caso contrário
@@ -4172,9 +4495,9 @@ declare function injectEffectiveThemeId(appTheme: Signal<StructraTheme | AppThem
4172
4495
 
4173
4496
  /**
4174
4497
  * Remove classes de tema do host e, se `explicitTheme` estiver definido, aplica `.app-library-theme`
4175
- * + `theme-*`. Caso contrário deixa o host sem paleta própria (herda do ancestral / wrapper).
4498
+ * + `theme-*` (+ `theme-dark` opcional). Caso contrário deixa o host sem paleta própria.
4176
4499
  */
4177
- declare function applyOptionalThemeHostClasses(renderer: Renderer2, element: HTMLElement, explicitTheme: StructraTheme | AppTheme | string | undefined | null): void;
4500
+ declare function applyOptionalThemeHostClasses(renderer: Renderer2, element: HTMLElement, explicitTheme: StructraTheme | AppTheme | string | undefined | null, darkMode?: boolean): void;
4178
4501
 
4179
4502
  /** Classes aplicadas ao painel CDK Dialog + tema da app. */
4180
4503
  declare function libDialogPanelClasses(theme: AppThemeService, extra?: string | string[]): string[];
@@ -4283,6 +4606,61 @@ declare class LoadingDialogService {
4283
4606
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<LoadingDialogService>;
4284
4607
  }
4285
4608
 
4609
+ interface OnboardingChecklistStep {
4610
+ id: string;
4611
+ title: string;
4612
+ description: string;
4613
+ route?: string;
4614
+ completed: boolean;
4615
+ actionLabel?: string;
4616
+ }
4617
+ interface OnboardingChecklistProgress {
4618
+ completedCount: number;
4619
+ totalSteps: number;
4620
+ progressPercent: number;
4621
+ currentStepId: string | null;
4622
+ }
4623
+
4624
+ declare class OnboardingChecklistComponent {
4625
+ readonly title: _angular_core.InputSignal<string>;
4626
+ readonly subtitle: _angular_core.InputSignal<string>;
4627
+ readonly badgeLabel: _angular_core.InputSignal<string>;
4628
+ readonly badgeIcon: _angular_core.InputSignal<string>;
4629
+ readonly steps: _angular_core.InputSignal<OnboardingChecklistStep[]>;
4630
+ readonly loading: _angular_core.InputSignal<boolean>;
4631
+ /** Sobrescreve a etapa corrente; se omitido, usa a primeira incompleta. */
4632
+ readonly currentStepId: _angular_core.InputSignal<string | null | undefined>;
4633
+ /** Quando omitido, exibe o rodapé enquanto houver etapas incompletas. */
4634
+ readonly showFooter: _angular_core.InputSignal<boolean | undefined>;
4635
+ readonly skipLabel: _angular_core.InputSignal<string>;
4636
+ readonly continueLabel: _angular_core.InputSignal<string | undefined>;
4637
+ readonly startLabel: _angular_core.InputSignal<string>;
4638
+ /**
4639
+ * Quando `false`, Escape e clique no backdrop não disparam `close`.
4640
+ * Omisso: `true`.
4641
+ */
4642
+ readonly allowOverlayDismiss: _angular_core.InputSignalWithTransform<boolean, unknown>;
4643
+ /** Exibe o botão ✕ no canto superior direito. Omisso: `false`. */
4644
+ readonly showCloseButton: _angular_core.InputSignalWithTransform<boolean, unknown>;
4645
+ readonly stepClick: _angular_core.OutputEmitterRef<OnboardingChecklistStep>;
4646
+ readonly close: _angular_core.OutputEmitterRef<void>;
4647
+ readonly skip: _angular_core.OutputEmitterRef<void>;
4648
+ readonly continue: _angular_core.OutputEmitterRef<void>;
4649
+ readonly progress: _angular_core.Signal<OnboardingChecklistProgress>;
4650
+ readonly footerVisible: _angular_core.Signal<boolean>;
4651
+ readonly resolvedContinueLabel: _angular_core.Signal<string>;
4652
+ readonly loadingSkeletonRows: number[];
4653
+ actionLabel(step: OnboardingChecklistStep): string;
4654
+ onStepAction(step: OnboardingChecklistStep): void;
4655
+ onClose(): void;
4656
+ onDocumentKeydown(ev: KeyboardEvent): void;
4657
+ onBackdropClick(): void;
4658
+ onSkip(): void;
4659
+ onContinue(): void;
4660
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OnboardingChecklistComponent, never>;
4661
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnboardingChecklistComponent, "app-onboarding-checklist", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "badgeLabel": { "alias": "badgeLabel"; "required": false; "isSignal": true; }; "badgeIcon": { "alias": "badgeIcon"; "required": false; "isSignal": true; }; "steps": { "alias": "steps"; "required": true; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "currentStepId": { "alias": "currentStepId"; "required": false; "isSignal": true; }; "showFooter": { "alias": "showFooter"; "required": false; "isSignal": true; }; "skipLabel": { "alias": "skipLabel"; "required": false; "isSignal": true; }; "continueLabel": { "alias": "continueLabel"; "required": false; "isSignal": true; }; "startLabel": { "alias": "startLabel"; "required": false; "isSignal": true; }; "allowOverlayDismiss": { "alias": "allowOverlayDismiss"; "required": false; "isSignal": true; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; "isSignal": true; }; }, { "stepClick": "stepClick"; "close": "close"; "skip": "skip"; "continue": "continue"; }, never, never, true, never>;
4662
+ }
4663
+
4286
4664
  /**
4287
4665
  * Posicionamento vertical preferido do dropdown em relação ao trigger.
4288
4666
  * O CDK faz flip automático se não couber no viewport quando configurado com posições múltiplas.
@@ -4304,6 +4682,8 @@ declare class DropdownMenuComponent<T = string> {
4304
4682
  minWidthPx: number;
4305
4683
  /** Se `true`, a largura do painel segue a do trigger. */
4306
4684
  matchTriggerWidth: boolean;
4685
+ /** Se `false`, o menu permanece aberto após selecionar um item (ex.: exportação assíncrona). */
4686
+ closeOnSelect: boolean;
4307
4687
  menuId: string;
4308
4688
  readonly itemSelect: EventEmitter<T>;
4309
4689
  readonly openChange: EventEmitter<boolean>;
@@ -4323,8 +4703,9 @@ declare class DropdownMenuComponent<T = string> {
4323
4703
  onItemSelect(id: T): void;
4324
4704
  onCloseRequest(): void;
4325
4705
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownMenuComponent<any>, never>;
4326
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownMenuComponent<any>, "app-dropdown-menu", never, { "items": { "alias": "items"; "required": true; }; "placement": { "alias": "placement"; "required": false; }; "minWidthPx": { "alias": "minWidthPx"; "required": false; }; "matchTriggerWidth": { "alias": "matchTriggerWidth"; "required": false; }; "menuId": { "alias": "menuId"; "required": false; }; }, { "itemSelect": "itemSelect"; "openChange": "openChange"; }, never, ["*"], true, never>;
4706
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownMenuComponent<any>, "app-dropdown-menu", never, { "items": { "alias": "items"; "required": true; }; "placement": { "alias": "placement"; "required": false; }; "minWidthPx": { "alias": "minWidthPx"; "required": false; }; "matchTriggerWidth": { "alias": "matchTriggerWidth"; "required": false; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; }; "menuId": { "alias": "menuId"; "required": false; }; }, { "itemSelect": "itemSelect"; "openChange": "openChange"; }, never, ["*"], true, never>;
4327
4707
  static ngAcceptInputType_matchTriggerWidth: unknown;
4708
+ static ngAcceptInputType_closeOnSelect: unknown;
4328
4709
  }
4329
4710
 
4330
4711
  declare class ContextMenuComponent<T = string> implements OnDestroy {
@@ -4560,7 +4941,7 @@ declare class AnchoredOverlayComponent {
4560
4941
  scrollStrategy: ScrollStrategy | null;
4561
4942
  readonly overlayPanelClasses: _angular_core.Signal<string[]>;
4562
4943
  readonly panelThemeNgClass: _angular_core.Signal<{
4563
- [x: string]: boolean;
4944
+ [k: string]: boolean;
4564
4945
  }>;
4565
4946
  readonly defaultScrollStrategy: _angular_cdk_overlay.RepositionScrollStrategy;
4566
4947
  get effectiveScrollStrategy(): ScrollStrategy;
@@ -5034,6 +5415,65 @@ declare class AppShellSidebarToggleComponent {
5034
5415
  static ngAcceptInputType_collapsed: unknown;
5035
5416
  }
5036
5417
 
5418
+ /** Utilizador exibido no painel da sidebar administrativa. */
5419
+ interface StructraSidebarUserView {
5420
+ id?: string;
5421
+ nome?: string;
5422
+ email?: string;
5423
+ login?: string;
5424
+ profileName?: string;
5425
+ }
5426
+ /** Contexto mínimo de empresa/plano para badge na sidebar (consumidor pode enviar mais campos). */
5427
+ interface StructraSidebarEmpresaContext {
5428
+ planoNome?: string | null;
5429
+ }
5430
+
5431
+ declare class StructraSidebarUserPanelComponent {
5432
+ readonly panelTooltip: _angular_core.InputSignal<string>;
5433
+ readonly user: _angular_core.InputSignal<StructraSidebarUserView | null>;
5434
+ readonly empresa: _angular_core.InputSignal<StructraSidebarEmpresaContext | null>;
5435
+ readonly collapsed: _angular_core.InputSignal<boolean>;
5436
+ readonly panelClick: _angular_core.OutputEmitterRef<void>;
5437
+ readonly displayName: _angular_core.Signal<string>;
5438
+ readonly initials: _angular_core.Signal<string>;
5439
+ readonly planName: _angular_core.Signal<string | null>;
5440
+ onPanelClick(): void;
5441
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraSidebarUserPanelComponent, never>;
5442
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraSidebarUserPanelComponent, "structra-sidebar-user-panel, app-admin-sidebar-user-panel", never, { "panelTooltip": { "alias": "panelTooltip"; "required": false; "isSignal": true; }; "user": { "alias": "user"; "required": false; "isSignal": true; }; "empresa": { "alias": "empresa"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; }, { "panelClick": "panelClick"; }, never, never, true, never>;
5443
+ }
5444
+
5445
+ /** Rodapé institucional (login e área autenticada): textos via DI ou input `parts`. */
5446
+ declare class StructraPageFooterComponent {
5447
+ private readonly configuredParts;
5448
+ /** Sobrescreve partes do rodapé (omisso: {@link STRUCTRA_PAGE_FOOTER_PARTS} ou fallback genérico). */
5449
+ readonly partsInput: _angular_core.InputSignal<readonly string[] | null>;
5450
+ readonly parts: _angular_core.Signal<readonly string[]>;
5451
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraPageFooterComponent, never>;
5452
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraPageFooterComponent, "structra-page-footer, app-page-footer", never, { "partsInput": { "alias": "parts"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5453
+ }
5454
+
5455
+ /** Configuração declarativa do rodapé institucional (login e área autenticada). */
5456
+ interface StructraPageFooterConfig {
5457
+ /** Nome do produto exibido no copyright (ex.: ErpTemplate). */
5458
+ productName: string;
5459
+ /** Versão exibida (ex.: 1.0.0). Omisso: omite a linha «Versão …». */
5460
+ version?: string;
5461
+ /** Ano do copyright. Omisso: ano corrente no cliente. */
5462
+ copyrightYear?: number;
5463
+ /** Partes extras após copyright e versão. */
5464
+ extraParts?: readonly string[];
5465
+ }
5466
+ /** Partes literais do rodapé — alternativa à {@link StructraPageFooterConfig}. */
5467
+ declare const STRUCTRA_PAGE_FOOTER_PARTS: InjectionToken<readonly string[]>;
5468
+ /**
5469
+ * Monta partes padrão: `© {ano} {produto}` e, se informado, `Versão {versão}`.
5470
+ */
5471
+ declare function buildStructraPageFooterParts(config: StructraPageFooterConfig): readonly string[];
5472
+ /** Provider único no `app.config` — substitui `footer-meta.ts` por consumidor. */
5473
+ declare function provideStructraPageFooter(config: StructraPageFooterConfig): Provider;
5474
+ /** @deprecated Alias legado — preferir {@link provideStructraPageFooter}. */
5475
+ declare const provideAppPageFooter: typeof provideStructraPageFooter;
5476
+
5037
5477
  /**
5038
5478
  * Barra superior com zonas de projeção: início, título, **subtítulo (opcional)** e fim.
5039
5479
  * Sem `[appTopbarSubtitle]` o bloco do subtítulo não ocupa espaço.
@@ -5117,6 +5557,78 @@ declare class AppBreadcrumbComponent {
5117
5557
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppBreadcrumbComponent, "app-breadcrumb", never, { "items": { "alias": "items"; "required": true; }; }, {}, never, never, true, never>;
5118
5558
  }
5119
5559
 
5560
+ /** Textos e mídia exibidos no shell de login administrativo (white-label). */
5561
+ interface AdminLoginShellConfig {
5562
+ loginTitulo: string;
5563
+ loginTextoDestaque: string;
5564
+ loginSubtitulo: string;
5565
+ loginTituloFormulario: string;
5566
+ loginTextoBotaoEntrar: string;
5567
+ loginMostrarEsqueciSenha: boolean;
5568
+ loginMostrarCriarConta: boolean;
5569
+ textoEsqueciSenha: string;
5570
+ textoCriarConta: string;
5571
+ heroImageSrc: string | null;
5572
+ brandLogoSrc: string | null;
5573
+ }
5574
+
5575
+ declare class AdminLoginShellComponent {
5576
+ formGroup: FormGroup;
5577
+ config: AdminLoginShellConfig;
5578
+ loading: boolean;
5579
+ error: string | null;
5580
+ tenantInexistente: boolean;
5581
+ tenantInexistenteMessage: string;
5582
+ showFooter: boolean;
5583
+ readonly submitted: EventEmitter<void>;
5584
+ readonly brandLogoError: EventEmitter<void>;
5585
+ readonly forgotPasswordClicked: EventEmitter<void>;
5586
+ readonly createAccountClicked: EventEmitter<void>;
5587
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AdminLoginShellComponent, never>;
5588
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AdminLoginShellComponent, "structra-admin-login-shell", never, { "formGroup": { "alias": "formGroup"; "required": true; }; "config": { "alias": "config"; "required": true; }; "loading": { "alias": "loading"; "required": false; }; "error": { "alias": "error"; "required": false; }; "tenantInexistente": { "alias": "tenantInexistente"; "required": false; }; "tenantInexistenteMessage": { "alias": "tenantInexistenteMessage"; "required": false; }; "showFooter": { "alias": "showFooter"; "required": false; }; }, { "submitted": "submitted"; "brandLogoError": "brandLogoError"; "forgotPasswordClicked": "forgotPasswordClicked"; "createAccountClicked": "createAccountClicked"; }, never, ["[loginFields]", "[loginFooter]"], true, never>;
5589
+ }
5590
+
5591
+ /** Payload emitido ao submeter o formulário de login administrativo. */
5592
+ interface AdminLoginSubmitPayload {
5593
+ loginOuEmail: string;
5594
+ senha: string;
5595
+ }
5596
+
5597
+ declare class AdminLoginPageComponent implements OnChanges {
5598
+ private readonly formBuilder;
5599
+ private readonly cdr;
5600
+ config: AdminLoginShellConfig;
5601
+ loading: boolean;
5602
+ error: string | null;
5603
+ tenantInexistente: boolean;
5604
+ tenantInexistenteMessage: string;
5605
+ emailLabel: string;
5606
+ emailErrorMessage: string;
5607
+ passwordLabel: string;
5608
+ passwordErrorMessage: string;
5609
+ submitDisabled: boolean;
5610
+ autocomplete: boolean;
5611
+ /** Incremente para resetar campos do formulário (ex.: ao voltar para a rota de login). */
5612
+ surfaceResetTrigger: number;
5613
+ readonly loginSubmit: EventEmitter<AdminLoginSubmitPayload>;
5614
+ readonly brandLogoError: EventEmitter<void>;
5615
+ readonly forgotPasswordClicked: EventEmitter<void>;
5616
+ readonly createAccountClicked: EventEmitter<void>;
5617
+ private readonly brandLogoFailed;
5618
+ readonly loginForm: _angular_forms.FormGroup<{
5619
+ email: FormControl<string | null>;
5620
+ password: FormControl<string | null>;
5621
+ }>;
5622
+ get effectiveShellConfig(): AdminLoginShellConfig;
5623
+ ngOnChanges(changes: SimpleChanges): void;
5624
+ onBrandLogoError(): void;
5625
+ onSubmit(): void;
5626
+ /** Reseta campos do formulário (loading/erro permanecem sob controle do consumidor). */
5627
+ resetSurface(): void;
5628
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AdminLoginPageComponent, never>;
5629
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AdminLoginPageComponent, "structra-admin-login-page", never, { "config": { "alias": "config"; "required": true; }; "loading": { "alias": "loading"; "required": false; }; "error": { "alias": "error"; "required": false; }; "tenantInexistente": { "alias": "tenantInexistente"; "required": false; }; "tenantInexistenteMessage": { "alias": "tenantInexistenteMessage"; "required": false; }; "emailLabel": { "alias": "emailLabel"; "required": false; }; "emailErrorMessage": { "alias": "emailErrorMessage"; "required": false; }; "passwordLabel": { "alias": "passwordLabel"; "required": false; }; "passwordErrorMessage": { "alias": "passwordErrorMessage"; "required": false; }; "submitDisabled": { "alias": "submitDisabled"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; "surfaceResetTrigger": { "alias": "surfaceResetTrigger"; "required": false; }; }, { "loginSubmit": "loginSubmit"; "brandLogoError": "brandLogoError"; "forgotPasswordClicked": "forgotPasswordClicked"; "createAccountClicked": "createAccountClicked"; }, never, ["[loginExtraContent]", "[loginFooter]"], true, never>;
5630
+ }
5631
+
5120
5632
  /** Alinhado ao backend (`DynamicConsultaWhereBuilder`): operadores em minúsculas. */
5121
5633
  type ConsultaValorTipo = 'string' | 'bool' | 'datetime' | 'number';
5122
5634
  interface ConsultaCampoDef {
@@ -5162,7 +5674,7 @@ interface ConsultaFiltroPreset<TColuna extends string = string> {
5162
5674
  declare const OPS_TEXTO: readonly ConsultaOperadorOption[];
5163
5675
  declare const OPS_BOOL: readonly ConsultaOperadorOption[];
5164
5676
  declare const OPS_DATA: readonly ConsultaOperadorOption[];
5165
- /** Campos com multi-seleção no metadata (ex.: categorias — operador fixo `inlist` no servidor; rótulo «Contém» na UI). */
5677
+ /** Campos com multi-seleção no metadata (operador fixo `inlist` no servidor). */
5166
5678
  declare const OPS_TEXTO_MULTISELECT: readonly ConsultaOperadorOption[];
5167
5679
  /**
5168
5680
  * Colunas `datetime`: usar `app-date-field` para qualquer operador excepto `between`
@@ -6272,6 +6784,17 @@ interface ConsultaPageRuntime {
6272
6784
  * Omissão: não normaliza operadores (retrocompat).
6273
6785
  */
6274
6786
  valorTipoPorColuna?: (coluna: string) => ConsultaValorTipo;
6787
+ /**
6788
+ * Montagem de filtros avulsos em tempo de execução (ex.: override de {@link montarFiltrosListaConsulta} na página).
6789
+ * Omissão: usa o montador interno do runtime builder.
6790
+ */
6791
+ montarFiltrosListaConsulta?: (preset: ConsultaFiltroPreset<string> | undefined, valores: Record<string, string>, boolColumnIds: readonly string[], valorTipoPorColuna?: (coluna: string) => ConsultaValorTipo) => Array<{
6792
+ campo: string;
6793
+ operador: string;
6794
+ valor: string;
6795
+ valorAte: string;
6796
+ juncao: string;
6797
+ }>;
6275
6798
  }) => Promise<{
6276
6799
  itens: unknown[];
6277
6800
  total: number;
@@ -6291,6 +6814,13 @@ interface ConsultaPageRuntime {
6291
6814
  * Omissão na página base: 15.
6292
6815
  */
6293
6816
  consultaListaCacheMaxPaginas?: number;
6817
+ /**
6818
+ * Chave da tela para persistência de layout AG Grid (tenant + tela + grid).
6819
+ * Omisso: usa {@link consultaListaCacheNamespace} quando definido.
6820
+ */
6821
+ layoutTelaKey?: string;
6822
+ /** Chave do grid na consulta. Omisso: `consulta-principal`. */
6823
+ layoutGridKey?: string;
6294
6824
  /**
6295
6825
  * Monta os mesmos `filtrosAvulsos` que o fluxo servidor usa em {@link carregarListaComConsulta}.
6296
6826
  * Obrigatório para activar cache quando {@link consultaListaCacheNamespace} está definido.
@@ -6312,9 +6842,14 @@ interface ConsultaPageRuntime {
6312
6842
  itemPassaConsulta: (item: unknown, itens: ConsultaFiltroItem<string>[], valoresPorItemId: Record<string, string>) => boolean;
6313
6843
  editar?: (row: Record<string, unknown>) => void;
6314
6844
  duplicar?: (row: Record<string, unknown>) => void;
6845
+ imprimir?: (row: Record<string, unknown>) => void;
6315
6846
  remover?: (row: Record<string, unknown>) => Promise<void> | void;
6316
6847
  /** `true` quando `[DuplicateConfig(Enabled = true)]` no layout da página. */
6317
6848
  showDuplicateAction?: boolean;
6849
+ /** `true` quando a página define ação «Imprimir» por linha. */
6850
+ showPrintAction?: boolean;
6851
+ /** Tooltip/aria do botão imprimir na coluna Ações. Omisso ⇒ «Imprimir». */
6852
+ printActionLabel?: string;
6318
6853
  /**
6319
6854
  * Após {@link remover} com sucesso, em vez de retirar a linha da lista, actualiza-a com `ativo: false`
6320
6855
  * (inativação local alinhada ao soft-delete no servidor). Omissão: remove a linha pelo `id`.
@@ -6339,6 +6874,8 @@ interface ConsultaPageRuntime {
6339
6874
  novoRouterLink?: string | unknown[];
6340
6875
  /** Coluna Ações: tooltip/aria do botão de abrir registo. */
6341
6876
  editActionLabel: string;
6877
+ /** Coluna Ações: ícone Font Awesome do botão editar (ex.: `fa-paper-plane`). */
6878
+ editActionIconClass?: string;
6342
6879
  novoAriaLabel?: string;
6343
6880
  toastTitleLista: string;
6344
6881
  /** Avisos na consulta (ex. validação de filtros) — omissão: {@link toastTitleLista}. */
@@ -6371,6 +6908,105 @@ interface ConsultaPageRuntime {
6371
6908
  };
6372
6909
  }
6373
6910
 
6911
+ /** Separador interno entre scope e chave lógica. */
6912
+ declare const STRUCTRA_PAGE_CACHE_SCOPE_SEP = "\u001F";
6913
+ interface StructraPageCacheGetOrLoadOptions {
6914
+ ttlMs?: number;
6915
+ force?: boolean;
6916
+ scope?: string;
6917
+ }
6918
+ interface StructraPageCacheSetOptions {
6919
+ ttlMs?: number;
6920
+ scope?: string;
6921
+ }
6922
+ /**
6923
+ * Cache genérico em memória para páginas/rotas administrativas.
6924
+ * Suporta TTL opcional, isolamento por scope (rota/tenant) e deduplicação de loaders simultâneos.
6925
+ * Perdido ao recarregar a aplicação (F5).
6926
+ */
6927
+ declare class StructraPageCacheService {
6928
+ private readonly entries;
6929
+ private readonly inFlight;
6930
+ getOrLoad<T>(key: string, loader: () => Observable<T>, options?: StructraPageCacheGetOrLoadOptions): Observable<T>;
6931
+ get<T>(key: string, scope?: string): T | null;
6932
+ set<T>(key: string, value: T, options?: StructraPageCacheSetOptions): void;
6933
+ invalidate(key: string, scope?: string): void;
6934
+ invalidateScope(scope: string): void;
6935
+ clear(): void;
6936
+ /** Presença bruta (ignora TTL) — útil para testes. */
6937
+ hasEntry(key: string, scope?: string): boolean;
6938
+ private buildScopedKey;
6939
+ private readEntry;
6940
+ private writeEntry;
6941
+ private deleteEntry;
6942
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraPageCacheService, never>;
6943
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<StructraPageCacheService>;
6944
+ }
6945
+ /**
6946
+ * Monta scope estável para cache por rota administrativa (ex.: `/home/personalizacao`).
6947
+ * Quando informado, inclui tenant/empresa para isolar sessões multi-tenant.
6948
+ */
6949
+ declare function buildStructraPageCacheRouteScope(routePath: string, tenantId?: string | null): string;
6950
+ /** Chave lógica para cache de `initCadastro` por entidade e id de rota. */
6951
+ declare function buildStructraPageCacheCadastroInitKey(entityKey: string, routeId: string): string;
6952
+ /** Scope efectivo combinando scope extra (tenant) com a rota do cadastro. */
6953
+ declare function resolveStructraPageCacheCadastroScope(routePath: string, pageCacheScope?: string, tenantId?: string | null): string;
6954
+
6955
+ /** Prefixo lógico para chaves de redirect administrativo em {@link StructraPageCacheService}. */
6956
+ declare const STRUCTRA_ADMIN_ROUTE_REDIRECT_CACHE_PREFIX = "admin-route-redirect";
6957
+ /** Chave típica para redirect de personalização/login (`login-id`). */
6958
+ declare const STRUCTRA_ADMIN_ROUTE_REDIRECT_LOGIN_ID_CACHE_KEY: string;
6959
+ declare function buildStructraAdminRouteRedirectCacheKey(logicalKey: string): string;
6960
+ declare function normalizeStructraAdminPath(url: string): string;
6961
+ /**
6962
+ * Evita navegação redundante quando o utilizador clica de novo no mesmo item de menu
6963
+ * (ex.: já está em `/home/personalizacao/:id` e o menu aponta para `/home/personalizacao`).
6964
+ */
6965
+ declare function shouldSkipStructraAdminMenuNavigation(menuUrl: string, currentPath: string): boolean;
6966
+ interface ResolveStructraAdminMenuUrlOptions {
6967
+ /** Quando o menu aponta para rota “vazia” que redireciona (ex.: personalização), usa destino já resolvido. */
6968
+ resolveCachedChildPath?: () => string | null | undefined;
6969
+ }
6970
+ /** Resolve URL final do menu, preferindo destino filho em cache quando disponível. */
6971
+ declare function resolveStructraAdminMenuUrl(menuUrl: string, options?: ResolveStructraAdminMenuUrlOptions): string;
6972
+ interface StructraAdminRouteRedirectCacheOptions {
6973
+ cacheKey: string;
6974
+ routePath: string;
6975
+ tenantId?: string | null;
6976
+ }
6977
+ /** Lê destino de redirect já resolvido (sem ir à rede). */
6978
+ declare function readStructraAdminRouteRedirectTarget(pageCache: StructraPageCacheService, options: StructraAdminRouteRedirectCacheOptions): string | null;
6979
+ /** Monta URL filha padrão (`/base/:id`) a partir do id em cache. */
6980
+ declare function buildStructraAdminRouteRedirectChildUrl(routePath: string, targetId: string | null | undefined): string | null;
6981
+ interface StructraAdminRouteRedirectLoadOptions extends StructraAdminRouteRedirectCacheOptions {
6982
+ loader: () => Observable<string | null>;
6983
+ force?: boolean;
6984
+ }
6985
+ /** Carrega destino de redirect com cache em memória (dedupe + TTL opcional). */
6986
+ declare function loadStructraAdminRouteRedirectTarget(pageCache: StructraPageCacheService, options: StructraAdminRouteRedirectLoadOptions): Observable<string | null>;
6987
+
6988
+ /**
6989
+ * Base para páginas vazias que resolvem um id via backend e redirecionam para rota filha.
6990
+ * O resultado fica em {@link StructraPageCacheService} — reabrir o menu não refaz a RPC.
6991
+ */
6992
+ declare abstract class StructraAdminRouteRedirectPageBase implements OnInit {
6993
+ protected readonly router: Router;
6994
+ protected readonly pageCache: StructraPageCacheService;
6995
+ /** Rota base do redirect (ex.: `/home/personalizacao`). */
6996
+ protected abstract readonly redirectRoutePath: string;
6997
+ /** Chave lógica em cache (ex.: {@link STRUCTRA_ADMIN_ROUTE_REDIRECT_LOGIN_ID_CACHE_KEY}). */
6998
+ protected abstract readonly redirectCacheKey: string;
6999
+ protected abstract readonly fallbackNavigateUrl: string;
7000
+ /** Loader que devolve o id de destino (ou null quando inválido). */
7001
+ protected abstract loadRedirectTarget(): Observable<string | null>;
7002
+ /** Scope multi-tenant opcional para isolar cache por empresa. */
7003
+ protected resolveRedirectTenantId(): string | null | undefined;
7004
+ ngOnInit(): void;
7005
+ protected runRedirect(): Promise<void>;
7006
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraAdminRouteRedirectPageBase, never>;
7007
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StructraAdminRouteRedirectPageBase, never, never, {}, {}, never, never, true, never>;
7008
+ }
7009
+
6374
7010
  /** Separador entre namespace da consulta e corpo JSON estável da chave composta. */
6375
7011
  declare const CONSULTA_LISTA_CACHE_NS_SEP = "\u001F";
6376
7012
  interface ConsultaPageCacheEntry<TValue> {
@@ -6473,6 +7109,115 @@ declare class ConsultaListaMemoriaCacheService {
6473
7109
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<ConsultaListaMemoriaCacheService>;
6474
7110
  }
6475
7111
 
7112
+ /** Payload persistido em `str_layout_json` (versão + estado de colunas AG Grid). */
7113
+ interface GridLayoutConsultaPersistedPayload {
7114
+ version: number;
7115
+ columnState: unknown[];
7116
+ savedAt: string;
7117
+ }
7118
+ interface GridLayoutConsultaApiDto {
7119
+ tela: string;
7120
+ grid: string;
7121
+ layoutJson: string;
7122
+ }
7123
+ type StructraGridLayoutTenantResolverFn = () => string | null | undefined;
7124
+ type StructraGridLayoutApiBaseResolverFn = () => string;
7125
+ type StructraGridLayoutAuthHeadersResolverFn = () => Record<string, string>;
7126
+ /**
7127
+ * Tenant atual para chave de cache em memória (`tenant:tela:grid`).
7128
+ * A app deve fornecer (ex.: `SessionContextService.tenantAtualId`).
7129
+ */
7130
+ declare const STRUCTRA_GRID_LAYOUT_TENANT_RESOLVER: InjectionToken<StructraGridLayoutTenantResolverFn>;
7131
+ /** Base URL da API REST (sem barra final). Omisso: `window.location.origin`. */
7132
+ declare const STRUCTRA_GRID_LAYOUT_API_BASE_RESOLVER: InjectionToken<StructraGridLayoutApiBaseResolverFn>;
7133
+ /** Headers de autenticação para GET/PUT do layout (ex.: JWT). */
7134
+ declare const STRUCTRA_GRID_LAYOUT_AUTH_HEADERS_RESOLVER: InjectionToken<StructraGridLayoutAuthHeadersResolverFn>;
7135
+
7136
+ declare class GridLayoutConsultaService {
7137
+ private readonly http;
7138
+ private readonly tenantResolver;
7139
+ private readonly apiBaseResolver;
7140
+ private readonly authHeadersResolver;
7141
+ private readonly memoryCache;
7142
+ /** Incrementado a cada gravação local — impede GET async de apagar layout mais recente. */
7143
+ private readonly layoutRevisionByKey;
7144
+ /** Chaves já consultadas no backend nesta sessão (evita GET repetido ao navegar). */
7145
+ private readonly backendFetchedKeys;
7146
+ private readonly inFlightByKey;
7147
+ private saveTimer;
7148
+ private tenantRetryTimer;
7149
+ /** Re-tenta GET quando o tenant ainda não hidratou (F5) e sessionStorage não tinha layout. */
7150
+ private tenantRetryGetLayoutTimer;
7151
+ private pendingGetLayout;
7152
+ private pendingSave;
7153
+ /** Detecta transição `_` → tenant real para migrar cache e retomar PUT pendente. */
7154
+ private resolvedTenantForCache;
7155
+ /** Ouve quando layout entra em cache (GET backend / migração tenant) — grelha reaplica no F5. */
7156
+ private readonly layoutCacheUpdatedListeners;
7157
+ /** Subscrição para reaplicar layout quando o GET async concluir (ex.: F5 com tenant a hidratar). */
7158
+ onLayoutCacheUpdated(listener: (cacheKey: string) => void): () => void;
7159
+ /**
7160
+ * Leitura síncrona: memória → sessionStorage. Não dispara HTTP.
7161
+ * Usar antes do primeiro paint da grelha para aplicar colunas sem flicker.
7162
+ */
7163
+ getCachedLayout(tela: string, grid?: string): GridLayoutConsultaPersistedPayload | null;
7164
+ /** Indica se o backend já foi consultado nesta sessão para `tenant:tela:grid`. */
7165
+ hasFetchedFromBackend(tela: string, grid?: string): boolean;
7166
+ /** Compara chave interna `tenant:tela:grid` com tela/grid visíveis ao consumidor (ex.: listener do data-grid). */
7167
+ cacheKeyMatchesTelaGrid(cacheKey: string, tela: string, grid?: string): boolean;
7168
+ getLayout(tela: string, grid?: string): Promise<GridLayoutConsultaPersistedPayload | null>;
7169
+ saveLayout(tela: string, grid: string, layoutJson: string): void;
7170
+ saveLayoutFromColumnState(tela: string, grid: string, columnState: unknown[]): void;
7171
+ private fetchLayoutFromBackend;
7172
+ /**
7173
+ * Após GET async: preserva layout local/gravação pendente se o utilizador alterou colunas entretanto.
7174
+ * `undefined` = aplicar resposta remota normalmente.
7175
+ */
7176
+ private resolveLocalLayoutAfterFetch;
7177
+ private isRemoteLayoutNewer;
7178
+ private bumpLayoutRevision;
7179
+ private getLayoutRevision;
7180
+ private markBackendFetched;
7181
+ private storeLayout;
7182
+ private notifyLayoutCacheUpdated;
7183
+ private scheduleDebouncedSave;
7184
+ private flushSave;
7185
+ /** Re-tenta GET quando sessionStorage estava vazio e o tenant ainda não hidratou (F5). */
7186
+ private scheduleTenantRetryGetLayout;
7187
+ /** Re-tenta PUT quando o tenant ainda não hidratou (F5) ou após falha transitória. */
7188
+ private scheduleTenantRetryFlush;
7189
+ private normalizeKeys;
7190
+ private buildCacheKey;
7191
+ private resolveTenantIdForCache;
7192
+ private tenantReadyForBackend;
7193
+ private noteTenantResolution;
7194
+ /**
7195
+ * Migra entradas gravadas com tenant `_` para o tenant real quando a sessão hidrata (F5).
7196
+ * Preserva layout em memória/sessionStorage e retoma PUT pendente.
7197
+ */
7198
+ private migratePlaceholderCacheToRealTenant;
7199
+ private persistLastTenantId;
7200
+ private readLastTenantId;
7201
+ private sessionStorageKey;
7202
+ /**
7203
+ * Lê layout em sessionStorage pela chave exacta ou, em F5, por sufixo `:tela:grid`
7204
+ * quando o tenant ainda não estava disponível na 1.ª leitura.
7205
+ */
7206
+ private readSessionStorageForLayout;
7207
+ private scanSessionStorageByTelaGrid;
7208
+ /**
7209
+ * `undefined` = ausente em sessionStorage; `null` = layout vazio persistido.
7210
+ */
7211
+ private readSessionStorage;
7212
+ private writeSessionStorage;
7213
+ private removeSessionStorage;
7214
+ private apiUrl;
7215
+ private authHeaders;
7216
+ private parseLayoutJson;
7217
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridLayoutConsultaService, never>;
7218
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<GridLayoutConsultaService>;
7219
+ }
7220
+
6476
7221
  /**
6477
7222
  * Vista unificada da metadata da página (consulta + títulos/layout + snapshot opcional do cadastro declarativo).
6478
7223
  * Piloto: Pessoa — outras entidades podem omitir {@link ConsultaPageMetadataUnified.cadastro}.
@@ -6640,8 +7385,11 @@ interface ConsultaCrudAdapterConfig<TItem, TRow extends Record<string, unknown>,
6640
7385
  itemPassaConsulta?: ConsultaPageRuntime['itemPassaConsulta'];
6641
7386
  editar?: (row: Record<string, unknown>) => void;
6642
7387
  duplicar?: (row: Record<string, unknown>) => void;
7388
+ imprimir?: (row: Record<string, unknown>) => void;
6643
7389
  remover?: (row: Record<string, unknown>) => Promise<void> | void;
6644
7390
  showDuplicateAction?: boolean;
7391
+ showPrintAction?: boolean;
7392
+ printActionLabel?: string;
6645
7393
  confirmDuplicarLinha?: ConsultaPageRuntime['confirmDuplicarLinha'];
6646
7394
  duplicateSuccessMessage?: string;
6647
7395
  /**
@@ -6655,6 +7403,8 @@ interface ConsultaCrudAdapterConfig<TItem, TRow extends Record<string, unknown>,
6655
7403
  showNovoButton?: boolean;
6656
7404
  /** Omissão: `'Alterar'` (ou `grid_config.edit_action_label` na factory padrão). */
6657
7405
  editActionLabel?: string;
7406
+ /** Omissão: `fa-pen-to-square`. */
7407
+ editActionIconClass?: string;
6658
7408
  /** Omissão: `'Novo registro'`. */
6659
7409
  novoAriaLabel?: string;
6660
7410
  /** Omissão: `'Consulta'`. */
@@ -6902,7 +7652,7 @@ interface ConsultaCatalogBundleConfig<TMetadataReply, TFiltroPreset> {
6902
7652
  chaveConsulta: string;
6903
7653
  ensureAuth: () => Promise<void>;
6904
7654
  getMetadata: () => Promise<TMetadataReply>;
6905
- /** `SELECT COUNT(*)` em cabeçalhos `filtro` (sem `filtro_item`). */
7655
+ /** `SELECT COUNT(*)` em cabeçalhos `tbl_filtro` (sem `tbl_filtro_item`). */
6906
7656
  contarFiltrosCabecalhos: () => Promise<number>;
6907
7657
  listarFiltros: () => Promise<{
6908
7658
  filtros?: FiltroSalvo[];
@@ -7070,6 +7820,8 @@ declare class ConsultaCadastroFiltroDialogComponent {
7070
7820
  readonly itemDraftSearchSelectOpcoesMescladas: _angular_core.Signal<UiSelectOption<string>[]>;
7071
7821
  /** `null`: usar {@link itemDraftSearchSelectOpcoesMescladas}; senão lista já filtrada pela pesquisa. */
7072
7822
  readonly itemDraftSearchSelectOpcoesPainel: _angular_core.WritableSignal<UiSelectOption<string>[] | null>;
7823
+ /** Descarta respostas obsoletas quando abertura e pesquisa correm em paralelo no draft. */
7824
+ private draftSearchSelectPageReqGen;
7073
7825
  readonly itemDraftSearchSelectOpcoesParaTemplate: _angular_core.Signal<UiSelectOption<string>[]>;
7074
7826
  private itemDraftColunaLimpezaProgramatica;
7075
7827
  readonly dialogCadastroValidationItems: _angular_core.WritableSignal<ValidationSummaryItem[]>;
@@ -7117,6 +7869,7 @@ declare class ConsultaCadastroFiltroDialogComponent {
7117
7869
  isFilterSelectColuna(col: string | null | undefined): boolean;
7118
7870
  isSearchSelectColuna(col: string | null | undefined): boolean;
7119
7871
  onDraftSearchSelectPageRequested(ev: DropdownSearchPageRequested): Promise<void>;
7872
+ private opcoesRemotasCampoJaCarregadas;
7120
7873
  onDraftMultiselectPageRequested(ev: SelectPageRequested): Promise<void>;
7121
7874
  isNumeroColuna(col: string | null | undefined): boolean;
7122
7875
  isDatetimeColuna(col: string | null | undefined): boolean;
@@ -7161,7 +7914,7 @@ declare class ConsultaBasePageComponent implements OnInit, AfterViewInit, OnDest
7161
7914
  private readonly confirm;
7162
7915
  private readonly toast;
7163
7916
  private readonly topbarSlot;
7164
- private readonly topbarTitleSkeleton;
7917
+ protected readonly topbarTitleSkeleton: _angular_core.WritableSignal<boolean>;
7165
7918
  private readonly listaMemoriaCache;
7166
7919
  private readonly router;
7167
7920
  private readonly routeReuse;
@@ -7189,6 +7942,10 @@ declare class ConsultaBasePageComponent implements OnInit, AfterViewInit, OnDest
7189
7942
  * Opções mostradas no painel do `search_select` por id do critério do preset (filtradas localmente pela query).
7190
7943
  */
7191
7944
  private readonly consultaSearchSelectOpcoesPainelPorItemId;
7945
+ /** Descarta respostas obsoletas quando abertura (query vazia) e pesquisa (query com texto) correm em paralelo. */
7946
+ private readonly searchSelectPageReqGenByItemId;
7947
+ private readonly multiselectRemotoLoadGenByCampo;
7948
+ private readonly multiselectRemotoLoadPromiseByCampo;
7192
7949
  readonly consultaSearchSelectPageSize = 96;
7193
7950
  /** Runtime com filtros/grelha alinhados ao metadata quando disponível. */
7194
7951
  readonly runtimeConsulta: _angular_core.Signal<ConsultaPageRuntime>;
@@ -7289,12 +8046,17 @@ declare class ConsultaBasePageComponent implements OnInit, AfterViewInit, OnDest
7289
8046
  isFilterSelectColuna(col: string | null | undefined): boolean;
7290
8047
  isSearchSelectColuna(col: string | null | undefined): boolean;
7291
8048
  private limparOpcoesPainelSearchSelectConsulta;
7292
- /** Opções do dropdown com pesquisa (painel filtrado ou lista mesclada por defeito). */
8049
+ /**
8050
+ * Opções do painel do `search_select`.
8051
+ * Sem overlay explícito, não devolve a lista remota completa (pré-carga) — evita flash de todas as marcas
8052
+ * antes da primeira `pageRequested`; com valor seleccionado mantém merge para o rótulo no input.
8053
+ */
7293
8054
  consultaSearchSelectOpcoesPainel(it: ConsultaFiltroItem<string>): UiSelectOption<string>[];
7294
8055
  onConsultaSearchSelectPageRequested(it: ConsultaFiltroItem<string>, ev: DropdownSearchPageRequested): Promise<void>;
7295
8056
  onConsultaMultiselectPageRequested(coluna: string, ev: SelectPageRequested): Promise<void>;
7296
8057
  /** Repasse ao diálogo de filtro: mesmo carregamento remoto que no painel principal. */
7297
8058
  readonly recarregarOpcoesMultiselectCampo: (campo: string) => Promise<void>;
8059
+ private opcoesRemotasCampoJaCarregadas;
7298
8060
  private aplicarOpcoesMultiselectRemotasCampo;
7299
8061
  private precarregarOpcoesMultiselectRemotasInicial;
7300
8062
  /** Critérios numéricos no metadata (`decimal`, `integer`, …) — input decimal + operadores de comparação. */
@@ -7372,6 +8134,11 @@ declare class ConsultaBasePageComponent implements OnInit, AfterViewInit, OnDest
7372
8134
  * para respostas muito rápidas não «saltarem» o estado de carregamento.
7373
8135
  */
7374
8136
  private yieldForSkeletonPaint;
8137
+ /**
8138
+ * Activa loading explícito e esvazia a grelha para o skeleton (Structra: overlay só com lista vazia).
8139
+ * Painel de filtros e chrome permanecem visíveis.
8140
+ */
8141
+ private iniciarLoadingGrelhaComSkeleton;
7375
8142
  /** Respeita {@link CONSULTA_LISTA_SKELETON_MIN_MS} após mostrar skeleton dos critérios de filtro. */
7376
8143
  private yieldUntilMinFiltroSkeletonMs;
7377
8144
  /** Pesquisa válida: skeleton na grelha + nova leitura do servidor e só então aplica o preset consultado. */
@@ -7379,6 +8146,7 @@ declare class ConsultaBasePageComponent implements OnInit, AfterViewInit, OnDest
7379
8146
  carregarTodos(): Promise<void>;
7380
8147
  editar(row: Record<string, unknown>): void;
7381
8148
  duplicar(row: Record<string, unknown>): Promise<void>;
8149
+ imprimir(row: Record<string, unknown>): void;
7382
8150
  excluirUsuario(row: Record<string, unknown>): Promise<void>;
7383
8151
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConsultaBasePageComponent, never>;
7384
8152
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConsultaBasePageComponent, "app-consulta-base-page", never, { "runtime": { "alias": "runtime"; "required": true; "isSignal": true; }; "topbarEndExtraTemplate": { "alias": "topbarEndExtraTemplate"; "required": false; "isSignal": true; }; "tooltipBotaoPesquisar": { "alias": "tooltipBotaoPesquisar"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -7448,8 +8216,11 @@ interface CreateConsultaPadraoRuntimeOptions<TItem, TRow extends Record<string,
7448
8216
  mapGridRow?: (item: TItem) => TRow;
7449
8217
  mapCard?: CardListMapFn<TRow>;
7450
8218
  editar?: ConsultaCrudAdapterConfig<TItem, TRow, TPreset>['editar'];
8219
+ imprimir?: ConsultaCrudAdapterConfig<TItem, TRow, TPreset>['imprimir'];
7451
8220
  remover?: ConsultaCrudAdapterConfig<TItem, TRow, TPreset>['remover'];
7452
8221
  removerActualizaAtivoEmVezDeRetirar?: boolean;
8222
+ showPrintAction?: boolean;
8223
+ printActionLabel?: string;
7453
8224
  novoRouterLink?: string | unknown[];
7454
8225
  toastTitleLista?: string;
7455
8226
  confirmRemoverLinha?: ConsultaPageRuntime['confirmRemoverLinha'];
@@ -7650,6 +8421,12 @@ interface CadastroValidationUi {
7650
8421
  */
7651
8422
  readonly beforeSummaryItemActivate?: ((item: ValidationSummaryItem) => void) | null;
7652
8423
  }
8424
+ /** Acção opcional à esquerda de Salvar/Novo na topbar ou toolbar interna do cadastro. */
8425
+ interface CadastroHeaderSecondaryAction {
8426
+ label: string;
8427
+ icon?: string;
8428
+ disabled?: boolean;
8429
+ }
7653
8430
  type CadastroModo = 'novo' | 'editar';
7654
8431
  interface CadastroPageRuntime<TResponse = unknown> {
7655
8432
  modo: Signal<CadastroModo>;
@@ -8023,6 +8800,8 @@ interface BuildCadastroPageRuntimeOptions {
8023
8800
  * Omisso: `id` vem de `ActivatedRoute`. Em dialog de referência, passar o id explícito (`novo` ou guid).
8024
8801
  */
8025
8802
  entityIdFromContext?: Signal<string | null | undefined>;
8803
+ /** Invalida cache de `initCadastro` após gravar/excluir (Structra page cache). */
8804
+ invalidateCadastroInitPageCache?: (routeId: string) => void;
8026
8805
  }
8027
8806
  /**
8028
8807
  * Constrói o runtime de uma página de cadastro (novo/editar): carregamento, salvar, cancelar, excluir opcional,
@@ -8920,6 +9699,17 @@ interface CadastroMetadataPageStateConfig<TInit, TDto, TSalvar> {
8920
9699
  * em vez do próprio `init`.
8921
9700
  */
8922
9701
  sourceKey?: string;
9702
+ /**
9703
+ * Scope opcional para {@link StructraPageCacheService} (ex.: tenant/empresa).
9704
+ * Omisso: scope derivado da rota do cadastro.
9705
+ */
9706
+ pageCacheScope?: string;
9707
+ /** Desliga cache de `initCadastro` entre navegações pelo menu (por defeito activo). */
9708
+ cadastroInitPageCacheDisabled?: boolean;
9709
+ /** TTL do cache de init (ms). Omisso: sem expiração até invalidação ou F5. */
9710
+ cadastroInitCacheTtlMs?: number;
9711
+ /** Identificador lógico da entidade na chave de cache de init. Omisso: rota ou `sourceKey`. */
9712
+ cadastroInitCacheEntityKey?: string;
8923
9713
  /** Referências inline (dropdown + rascunho + resultado); a base orquestra ciclo de vida. */
8924
9714
  referenciasInline?: readonly CadastroInlineReferencePart[];
8925
9715
  /**
@@ -9230,6 +10020,10 @@ declare abstract class CadastroMetadataPageStateBase<TInit, TDto, TSalvar> {
9230
10020
  protected resolveLeafActivatedRoute(): ActivatedRoute;
9231
10021
  /** Path do cadastro anfitrião para rascunhos inline; modal sobrescreve com {@link CADASTRO_REFERENCIA_DIALOG_CONTEXT}. */
9232
10022
  protected resolveHostPathCadastroForInlineDraft(): string;
10023
+ protected resolveCadastroInitPageCacheEntityKey(): string;
10024
+ protected resolveCadastroInitPageCacheScope(): string;
10025
+ protected invalidateCadastroInitPageCache(routeId: string): void;
10026
+ protected loadCadastroInitForRouteId(id: string): Observable<TInit>;
9233
10027
  protected static isCadastroLeafSegment(leafPath: string | undefined): boolean;
9234
10028
  /**
9235
10029
  * Regresso de RotaReferência com instância ainda em memória (`RouteReuseStrategy` + `data.reuse`):
@@ -9342,6 +10136,9 @@ declare class CadastroMetadataPageComponent {
9342
10136
  readonly embeddedInPageShell: _angular_core.InputSignal<boolean>;
9343
10137
  readonly salvarSubmit: _angular_core.OutputEmitterRef<void>;
9344
10138
  readonly toolbarButtonClick: _angular_core.OutputEmitterRef<CadastroToolbarButtonDto>;
10139
+ readonly headerSecondaryAction: _angular_core.InputSignal<CadastroHeaderSecondaryAction | null>;
10140
+ readonly headerSecondaryActionClick: _angular_core.OutputEmitterRef<void>;
10141
+ protected readonly headerSecondaryActionVisible: _angular_core.Signal<boolean>;
9345
10142
  readonly tituloSection: _angular_core.InputSignal<string | null>;
9346
10143
  readonly subtituloSection: _angular_core.InputSignal<string | null>;
9347
10144
  /** Metadata efectiva: input da shell ou bundle vindo do {@link CadastroMetadataView}. */
@@ -9369,7 +10166,7 @@ declare class CadastroMetadataPageComponent {
9369
10166
  sectionTitulo(c: CadastroMetadataPageCadastro): string;
9370
10167
  sectionSubtitulo(c: CadastroMetadataPageCadastro): string;
9371
10168
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CadastroMetadataPageComponent, never>;
9372
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadastroMetadataPageComponent, "app-cadastro-metadata-page", never, { "entityName": { "alias": "entityName"; "required": true; "isSignal": true; }; "entityLabel": { "alias": "entityLabel"; "required": true; "isSignal": true; }; "cadastro": { "alias": "cadastro"; "required": false; "isSignal": true; }; "initError": { "alias": "initError"; "required": false; "isSignal": true; }; "initLoading": { "alias": "initLoading"; "required": false; "isSignal": true; }; "validationUi": { "alias": "validationUi"; "required": false; "isSignal": true; }; "searchSelectBindings": { "alias": "searchSelectBindings"; "required": false; "isSignal": true; }; "listSelectBindings": { "alias": "listSelectBindings"; "required": false; "isSignal": true; }; "multiselectBindings": { "alias": "multiselectBindings"; "required": false; "isSignal": true; }; "metadataCamposReply": { "alias": "metadataCamposReply"; "required": false; "isSignal": true; }; "redirectReturnUrl": { "alias": "redirectReturnUrl"; "required": false; "isSignal": true; }; "painelMaxWidthHint": { "alias": "painelMaxWidthHint"; "required": false; "isSignal": true; }; "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "corpoCentralizado": { "alias": "corpoCentralizado"; "required": false; "isSignal": true; }; "cabecalhoPaginaVisivel": { "alias": "cabecalhoPaginaVisivel"; "required": false; "isSignal": true; }; "toolbarInterno": { "alias": "toolbarInterno"; "required": false; "isSignal": true; }; "embeddedInReferenciaDialog": { "alias": "embeddedInReferenciaDialog"; "required": false; "isSignal": true; }; "suppressInternalPageTabs": { "alias": "suppressInternalPageTabs"; "required": false; "isSignal": true; }; "externalShellTabKey": { "alias": "externalShellTabKey"; "required": false; "isSignal": true; }; "embeddedInPageShell": { "alias": "embeddedInPageShell"; "required": false; "isSignal": true; }; "tituloSection": { "alias": "tituloSection"; "required": false; "isSignal": true; }; "subtituloSection": { "alias": "subtituloSection"; "required": false; "isSignal": true; }; }, { "salvarSubmit": "salvarSubmit"; "toolbarButtonClick": "toolbarButtonClick"; }, never, never, true, never>;
10169
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadastroMetadataPageComponent, "app-cadastro-metadata-page", never, { "entityName": { "alias": "entityName"; "required": true; "isSignal": true; }; "entityLabel": { "alias": "entityLabel"; "required": true; "isSignal": true; }; "cadastro": { "alias": "cadastro"; "required": false; "isSignal": true; }; "initError": { "alias": "initError"; "required": false; "isSignal": true; }; "initLoading": { "alias": "initLoading"; "required": false; "isSignal": true; }; "validationUi": { "alias": "validationUi"; "required": false; "isSignal": true; }; "searchSelectBindings": { "alias": "searchSelectBindings"; "required": false; "isSignal": true; }; "listSelectBindings": { "alias": "listSelectBindings"; "required": false; "isSignal": true; }; "multiselectBindings": { "alias": "multiselectBindings"; "required": false; "isSignal": true; }; "metadataCamposReply": { "alias": "metadataCamposReply"; "required": false; "isSignal": true; }; "redirectReturnUrl": { "alias": "redirectReturnUrl"; "required": false; "isSignal": true; }; "painelMaxWidthHint": { "alias": "painelMaxWidthHint"; "required": false; "isSignal": true; }; "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "corpoCentralizado": { "alias": "corpoCentralizado"; "required": false; "isSignal": true; }; "cabecalhoPaginaVisivel": { "alias": "cabecalhoPaginaVisivel"; "required": false; "isSignal": true; }; "toolbarInterno": { "alias": "toolbarInterno"; "required": false; "isSignal": true; }; "embeddedInReferenciaDialog": { "alias": "embeddedInReferenciaDialog"; "required": false; "isSignal": true; }; "suppressInternalPageTabs": { "alias": "suppressInternalPageTabs"; "required": false; "isSignal": true; }; "externalShellTabKey": { "alias": "externalShellTabKey"; "required": false; "isSignal": true; }; "embeddedInPageShell": { "alias": "embeddedInPageShell"; "required": false; "isSignal": true; }; "headerSecondaryAction": { "alias": "headerSecondaryAction"; "required": false; "isSignal": true; }; "tituloSection": { "alias": "tituloSection"; "required": false; "isSignal": true; }; "subtituloSection": { "alias": "subtituloSection"; "required": false; "isSignal": true; }; }, { "salvarSubmit": "salvarSubmit"; "toolbarButtonClick": "toolbarButtonClick"; "headerSecondaryActionClick": "headerSecondaryActionClick"; }, never, never, true, never>;
9373
10170
  }
9374
10171
 
9375
10172
  interface CadastroMetadataPageShellCallbacks {
@@ -9396,6 +10193,8 @@ interface CadastroMetadataShellRuntime {
9396
10193
  readonly painelMaxWidthHint: string | null;
9397
10194
  readonly onSalvarSubmit: () => void;
9398
10195
  readonly onToolbarButtonClick?: (btn: CadastroToolbarButtonDto) => void;
10196
+ readonly headerSecondaryAction?: CadastroHeaderSecondaryAction | null;
10197
+ readonly onHeaderSecondaryActionClick?: () => void;
9399
10198
  readonly metadataCamposReply?: CadastroMetadataCamposReplyLike | null;
9400
10199
  /**
9401
10200
  * Quando `vm.entityName` vem vazio, replica o padrão `[entityName]="metadataPageVm().entityName || '…'"`.
@@ -9421,6 +10220,8 @@ interface BuildCadastroMetadataShellRuntimeOptions {
9421
10220
  readonly painelMaxWidthHint: string | null;
9422
10221
  readonly onSalvarSubmit: () => void;
9423
10222
  readonly onToolbarButtonClick?: (btn: CadastroToolbarButtonDto) => void;
10223
+ readonly headerSecondaryAction?: CadastroHeaderSecondaryAction | null;
10224
+ readonly onHeaderSecondaryActionClick?: () => void;
9424
10225
  readonly metadataCamposReply?: CadastroMetadataCamposReplyLike | null;
9425
10226
  readonly entityNameFallback?: string;
9426
10227
  readonly entityLabelFallback?: string;
@@ -9447,6 +10248,12 @@ declare abstract class CadastroMetadataPageBase<TInit, TDto, TSalvar> extends Ca
9447
10248
  protected readonly autoPageShellCallbacks: CadastroMetadataPageShellCallbacks;
9448
10249
  constructor();
9449
10250
  protected cadastroMetadataShellExtras(): Partial<BuildCadastroMetadataShellRuntimeOptions>;
10251
+ /**
10252
+ * Botão opcional à esquerda de Salvar/Novo na topbar. Omisso / `null` ⇒ nada é renderizado.
10253
+ */
10254
+ protected cadastroHeaderSecondaryAction(): CadastroHeaderSecondaryAction | null;
10255
+ /** Clique no botão de {@link cadastroHeaderSecondaryAction}. */
10256
+ protected onCadastroHeaderSecondaryActionClick(): void;
9450
10257
  /** `public` explícito: templates com `strictTemplates` / consumidores da lib veem o membro herdado. */
9451
10258
  readonly cadastroRuntime: _angular_core.Signal<structra_ui.CadastroMetadataShellRuntime>;
9452
10259
  protected resolveFormLayoutForShell(): CadastroFormPageLayout | null;
@@ -9957,7 +10764,11 @@ declare function cadastroCampoScriptEditorLanguage(campo: CadastroCampoMetadataD
9957
10764
  * Em mobile a grelha colapsa para uma coluna — o campo já fica em largura total.
9958
10765
  */
9959
10766
  declare function cadastroCampoBooleanOcupaLinhaInteira(campo: CadastroCampoMetadataDto, layoutMobile?: boolean): boolean;
9960
- /** Largura «ao conteúdo» vinda da metadata (ex.: <c>FullWidth = false</c> no servidor ⇒ <c>max-content</c>). */
10767
+ /** Largura fixa declarada na metadata (px, rem, etc.) — não <c>100%</c> nem <c>max-content</c>. */
10768
+ declare function cadastroCampoMetadataLarguraFixaCss(campo: CadastroCampoMetadataDto): string | null;
10769
+ /**
10770
+ * Campo estreito na grelha multi-coluna: <c>max-content</c> ou largura fixa com <c>FullWidth = false</c>.
10771
+ */
9961
10772
  declare function cadastroCampoMetadataLarguraCompacta(campo: CadastroCampoMetadataDto): boolean;
9962
10773
  /** Largura efectiva do wrapper do campo na grelha metadata (respeita `FullWidth` / `width` do servidor). */
9963
10774
  declare function cadastroCampoWrapperWidthCss(campo: CadastroCampoMetadataDto, opts: {
@@ -10404,6 +11215,13 @@ declare class CadastroBasePageComponent implements AfterContentInit {
10404
11215
  readonly validationUi: _angular_core.InputSignal<CadastroValidationUi | null>;
10405
11216
  /** Resumo de validação fixo ao topo do ecrã ao revelar erros (Structra `pinned`). */
10406
11217
  readonly validationSummaryPinned: _angular_core.InputSignal<boolean>;
11218
+ /**
11219
+ * Botão opcional à esquerda de Salvar/Novo (topbar da shell ou toolbar interna).
11220
+ * Omisso ou sem `label` ⇒ nada é renderizado.
11221
+ */
11222
+ readonly headerSecondaryAction: _angular_core.InputSignal<CadastroHeaderSecondaryAction | null>;
11223
+ readonly headerSecondaryActionClick: _angular_core.OutputEmitterRef<void>;
11224
+ protected readonly headerSecondaryActionVisible: _angular_core.Signal<boolean>;
10407
11225
  /**
10408
11226
  * Prioridade: {@link CadastroValidationUi.validationSummaryPinned} quando definido (metadata com flags);
10409
11227
  * senão {@link validationSummaryPinned}.
@@ -10426,6 +11244,9 @@ declare class CadastroBasePageComponent implements AfterContentInit {
10426
11244
  protected readonly validationSummaryLive: _angular_core.WritableSignal<boolean>;
10427
11245
  constructor();
10428
11246
  ngAfterContentInit(): void;
11247
+ /** Instâncias em cache (`data.reuse`) continuam vivas — só sincronizar quando esta rota está activa na shell. */
11248
+ private isActiveShellTopbarRoute;
11249
+ private releaseShellTopbarSlot;
10429
11250
  /** Alterna slot da shell entre botões invisíveis (init) e template da página (carregado). */
10430
11251
  private syncShellTopbarEndSlot;
10431
11252
  /**
@@ -10444,7 +11265,7 @@ declare class CadastroBasePageComponent implements AfterContentInit {
10444
11265
  /** Remove painéis `pinned` do Structra órfãos no `body` (ids internos `structra-vsum-p-*`). */
10445
11266
  private removeStructraPinnedValidationPanelsFromBody;
10446
11267
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CadastroBasePageComponent, never>;
10447
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadastroBasePageComponent, "app-cadastro-base-page", never, { "runtime": { "alias": "runtime"; "required": false; "isSignal": true; }; "cadastroInitError": { "alias": "cadastroInitError"; "required": false; "isSignal": true; }; "cadastroInitLoading": { "alias": "cadastroInitLoading"; "required": false; "isSignal": true; }; "skeletonPanelMaxWidth": { "alias": "skeletonPanelMaxWidth"; "required": false; "isSignal": true; }; "toolbarInterno": { "alias": "toolbarInterno"; "required": false; "isSignal": true; }; "embeddedInReferenciaDialog": { "alias": "embeddedInReferenciaDialog"; "required": false; "isSignal": true; }; "corpoCentralizado": { "alias": "corpoCentralizado"; "required": false; "isSignal": true; }; "cabecalhoPaginaVisivel": { "alias": "cabecalhoPaginaVisivel"; "required": false; "isSignal": true; }; "validationUi": { "alias": "validationUi"; "required": false; "isSignal": true; }; "validationSummaryPinned": { "alias": "validationSummaryPinned"; "required": false; "isSignal": true; }; "validationSummaryTitle": { "alias": "validationSummaryTitle"; "required": false; "isSignal": true; }; "shellTopbarReserveDuplicar": { "alias": "shellTopbarReserveDuplicar"; "required": false; "isSignal": true; }; }, {}, ["projectedFormDir", "shellTopbarEndProjectedTpl"], ["*"], true, never>;
11268
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadastroBasePageComponent, "app-cadastro-base-page", never, { "runtime": { "alias": "runtime"; "required": false; "isSignal": true; }; "cadastroInitError": { "alias": "cadastroInitError"; "required": false; "isSignal": true; }; "cadastroInitLoading": { "alias": "cadastroInitLoading"; "required": false; "isSignal": true; }; "skeletonPanelMaxWidth": { "alias": "skeletonPanelMaxWidth"; "required": false; "isSignal": true; }; "toolbarInterno": { "alias": "toolbarInterno"; "required": false; "isSignal": true; }; "embeddedInReferenciaDialog": { "alias": "embeddedInReferenciaDialog"; "required": false; "isSignal": true; }; "corpoCentralizado": { "alias": "corpoCentralizado"; "required": false; "isSignal": true; }; "cabecalhoPaginaVisivel": { "alias": "cabecalhoPaginaVisivel"; "required": false; "isSignal": true; }; "validationUi": { "alias": "validationUi"; "required": false; "isSignal": true; }; "validationSummaryPinned": { "alias": "validationSummaryPinned"; "required": false; "isSignal": true; }; "headerSecondaryAction": { "alias": "headerSecondaryAction"; "required": false; "isSignal": true; }; "validationSummaryTitle": { "alias": "validationSummaryTitle"; "required": false; "isSignal": true; }; "shellTopbarReserveDuplicar": { "alias": "shellTopbarReserveDuplicar"; "required": false; "isSignal": true; }; }, { "headerSecondaryActionClick": "headerSecondaryActionClick"; }, ["projectedFormDir", "shellTopbarEndProjectedTpl"], ["*"], true, never>;
10448
11269
  }
10449
11270
 
10450
11271
  /**
@@ -10535,6 +11356,8 @@ declare class CadastroFieldRendererComponent {
10535
11356
  larguraWrapperUi(c: CadastroCampoMetadataDto): string;
10536
11357
  protected scriptEditorMinHeightUi(c: CadastroCampoMetadataDto): string;
10537
11358
  protected scriptEditorLanguageUi(c: CadastroCampoMetadataDto): ScriptEditorLanguage;
11359
+ /** Botão «+» (cadastro inline) só em campos editáveis — metadata `readOnly` ou controlo desactivado. */
11360
+ mostrarRedirectSuffixUi(c: CadastroCampoMetadataDto): boolean;
10538
11361
  requiredMarkUi(c: CadastroCampoMetadataDto): boolean;
10539
11362
  campoShowErrorMessageUi(c: CadastroCampoMetadataDto): boolean;
10540
11363
  /** Só `monetary === true` usa prefixo `R$`; omisso/false ⇒ decimal simples (ex. m²). */
@@ -10813,6 +11636,11 @@ declare class FormCollectionComponent {
10813
11636
  gridTemplateColumnsParaItemEditorViewport(sec: CadastroMetadataSecao): string | null;
10814
11637
  itemEditorGridColumnSpanParaCampo(sec: CadastroMetadataSecao, campo: CadastroCampoMetadataDto, index: number): string | null;
10815
11638
  private computeCollectionEmbuteNoFormGroupPai;
11639
+ /**
11640
+ * Repõe o rascunho do editor a partir da linha seleccionada (botão «Alterar»).
11641
+ * `patchValue` marca `dirty`; limpa estado de validação até o utilizador editar ou «Adicionar»/«Alterar».
11642
+ */
11643
+ private hydrateItemEditorFromSelectedRow;
10816
11644
  /** Remove `dirty`/`touched` em todos os níveis (ex.: após `patchValue` no rascunho «Adicionar»). */
10817
11645
  private repristineItemEditorDraft;
10818
11646
  private resetItemEditorDefaults;
@@ -11002,6 +11830,17 @@ declare class CadastroMetadataShellPageComponent {
11002
11830
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadastroMetadataShellPageComponent, "app-cadastro-metadata-shell-page", never, { "runtime": { "alias": "runtime"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
11003
11831
  }
11004
11832
 
11833
+ /** Skeleton de arranque do cadastro — mesma aparência de {@link CadastroBasePageComponent}. */
11834
+ declare class CadastroFormLoadingSkeletonComponent {
11835
+ readonly corpoCentralizado: _angular_core.InputSignal<boolean>;
11836
+ readonly panelMaxWidth: _angular_core.InputSignal<string | null>;
11837
+ readonly fieldCount: _angular_core.InputSignal<number>;
11838
+ protected readonly skeletonPanelMaxWidthCss: _angular_core.Signal<string | undefined>;
11839
+ protected readonly fieldIndexes: _angular_core.Signal<number[]>;
11840
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CadastroFormLoadingSkeletonComponent, never>;
11841
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadastroFormLoadingSkeletonComponent, "app-cadastro-form-loading-skeleton", never, { "corpoCentralizado": { "alias": "corpoCentralizado"; "required": false; "isSignal": true; }; "panelMaxWidth": { "alias": "panelMaxWidth"; "required": false; "isSignal": true; }; "fieldCount": { "alias": "fieldCount"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
11842
+ }
11843
+
11005
11844
  declare class StructraPageComponentRegistry {
11006
11845
  private readonly components;
11007
11846
  register(tag: string, component: Type<unknown>): void;
@@ -11217,5 +12056,239 @@ declare function mergeDocumentoFmtNaLinhaConsulta(item: Record<string, unknown>)
11217
12056
  declare function mapListarItensParaMultiselectOpcoes(itens: readonly unknown[], optionsValueField: string, optionsLabelField: string, optionsOnlyActive: boolean): UiSelectOption<string>[];
11218
12057
  declare function carregarOpcoesMultiselectViaSpec(injector: Injector, spec: ConsultaMultiselectOpcoesRemotasSpec): Promise<readonly UiSelectOption<string>[]>;
11219
12058
 
11220
- export { ADAPTIVE_DATA_VIEW_MOBILE_QUERY, APP_SIDEBAR_LABEL_REVEAL_LAG_MS, APP_SIDEBAR_LAYOUT_DURATION_MS, APP_SIDEBAR_NAV_REVEAL_TOTAL_MS, APP_THEME_BASE_CLASS, APP_THEME_IDS, ActionMenuComponent, AdaptiveDataViewComponent, AlertComponent, AnchoredOverlayComponent, AppBreadcrumbComponent, AppDialogComponent, AppLibLightBlockScrollStrategy, AppShellComponent, AppShellSidebarTemplateDirective, AppShellSidebarToggleComponent, AppSidebarBottomActionsSlotDirective, AppSidebarBottomActionsTemplateDirective, AppSidebarBrandDirective, AppSidebarComponent, AppSidebarFooterSlotDirective, AppSidebarFooterTemplateDirective, AppSidebarHeaderSlotDirective, AppSidebarHeaderTemplateDirective, AppSidebarToolbarDirective, AppSidebarUserInfoSlotDirective, AppSidebarUserInfoTemplateDirective, AppTheme, AppThemeService, AppTopbarComponent, AppUserMenuComponent, BR_ESTADOS_NOME_SIGLA, ButtonType as BaseButtonType, ButtonVariant as BaseButtonVariant, BaseFieldComponent, BaseFieldDirective, BooleanFieldDirective, ButtonComponent, ButtonRadius, ButtonSize, ButtonType, ButtonVariant, CADASTRO_COLLAPSIBLE_REMOTE_LOAD_DELAY_MS, CADASTRO_DUPLICATE_FLAG_STATE, CADASTRO_DUPLICATE_SOURCE_ID_STATE, CADASTRO_FOCO_COLUNA_APOS_RESUMO_MS, CADASTRO_FORM_COLLECTION_REMOVE_ITEM_CONFIRM, CADASTRO_INVALIDATE_ROUTE_SNAPSHOT, CADASTRO_PAGE_SUBTITULO_PADRAO, CADASTRO_PAGE_TITULO_NOVO_PADRAO, CADASTRO_PESSOA_INLINE_DESTINO_URL_FRAGMENTS, CADASTRO_REFERENCIA_DIALOG_CONTEXT, CADASTRO_REFERENCIA_DIALOG_PAGE_CONFIG, CADASTRO_REFERENCIA_ROUTE_ACCESS, CADASTRO_REFERENCIA_ROUTE_ACCESS_PERMISSIVE, CADASTRO_RESUMO_FIELD_NAVIGATE_DEFER_MS, CADASTRO_TOAST_TITLE_PADRAO, CADASTRO_VALIDATION_SUMMARY_PINNED, CADASTRO_VALIDATION_SUMMARY_STATIC, CATEGORIAS_NAV_ID_EXCLUIDO, CATEGORIAS_NAV_LINHA_GRAVADA, CATEGORIAS_NAV_VOLTAR_SEM_RECARREGAR, CLIENTES_NAV_ID_EXCLUIDO, CLIENTES_NAV_LINHA_GRAVADA, CLIENTES_NAV_VOLTAR_SEM_RECARREGAR, CONSULTA_DATETIME_KEYS_ISO_PARA_FMT, CONSULTA_DOCUMENTO_GRID_KEYS_ISO_PARA_FMT, CONSULTA_FILTROS_SESSAO_USER, CONSULTA_GRID_OPTS_DATAS_PADRAO, CONSULTA_LISTA_CACHE_MAX_PAGINAS_DEFAULT, CONSULTA_LISTA_CACHE_NS_SEP, CONSULTA_LISTA_CACHE_TTL_MS_DEFAULT, CONSULTA_MOBILE_LAYOUT_MEDIA_QUERY, CONSULTA_MULTISELECT_LABEL_STUB, CONSULTA_OPTIONS_LISTAR_RESOLVER, CONSULTA_PEDIDOS_GRID_OPTS, CONSULTA_PHONE_GRID_KEYS_ISO_PARA_FMT, CONSULTA_PRESET_SELECT_EMPTY_OPTIONS_MESSAGE_DESKTOP, CONSULTA_PRESET_SELECT_EMPTY_OPTIONS_MESSAGE_MOBILE, CONSULTA_PRODUTOS_GRID_OPTS, CONSULTA_ROUTE_REUSE, CONSULTA_SERVIDOR_LISTA_QUERY_DEFAULTS, CONSULTA_TOPBAR_SLOT, CadastroBasePageComponent, CadastroCollectionGridColumnFormat, CadastroCollectionReferenciaHostService, CadastroCollectionRuntime, CadastroEnumOptionsRegistry, CadastroFieldRendererComponent, CadastroFieldRuntime, CadastroFieldsBaseComponent, CadastroFormDraftCacheService, CadastroMetadataPageBase, CadastroMetadataPageComponent, CadastroMetadataPageServiceBase, CadastroMetadataPageShellLayoutComponent, CadastroMetadataPageStateBase, CadastroMetadataShellPageComponent, CadastroPadraoPageBase, CadastroReferenceRegistry, CadastroReferenciaDialogBridgeRegistry, CadastroReferenciaDialogHostComponent, CadastroReferenciaDialogService, CadastroReferenciaOpenMode, CadastroRuntime, CadastroRuntimeRegistry, CadastroSectionPanelLayout, CardListComponent, CepFieldComponent, CheckboxFieldComponent, ColorPickerFieldComponent, ComponentType, ConfirmDialogComponent, ConfirmDialogService, ConsoleLogComponent, ConsultaBasePageComponent, ConsultaCadastroFiltroDialogComponent, ConsultaCardCampoPapel, ConsultaCardFieldFormat, ConsultaCatalogBundleHelper, ConsultaFiltroPresetToolbarComponent, ConsultaFiltrosSessaoService, ConsultaGridColumnFormat, ConsultaGridOrderDirection, ConsultaListaMemoriaCacheService, ConsultaPadraoPageBase, ConsultaPageCache, ContainerLayoutSize, ContextMenuComponent, CpfCnpjFieldComponent, DEFAULT_STRUCTRA_SHELL_SCROLL_RESTORATION_OPTIONS, DROPDOWN_SEARCH_LOCAL_PAGE_SIZE, DashboardSectionComponent, DataCardComponent, DataGridComponent, DataListComponent, DataToolbarComponent, DateFieldComponent, DecimalFieldComponent, DetailsFieldComponent, DetailsViewComponent, DialogFooterDirective, DividerComponent, DrawerComponent, DrawerSide, DrawerSize, DropdownBaseComponent, DropdownMenuComponent, DropdownMultiOptionFieldBase, DropdownOptionFieldBase, DropdownSearchFieldComponent, ENM_STATUS_OPCOES_SELECT, EmptyStateComponent, EnmStatus, FIELD_MOBILE_LAYOUT_QUERY, FILE_PREVIEW_UNAVAILABLE_MESSAGE, FORM_CONTAINER_STATE_STORAGE_PREFIX, FORNECEDORES_NAV_ID_EXCLUIDO, FORNECEDORES_NAV_LINHA_GRAVADA, FORNECEDORES_NAV_VOLTAR_SEM_RECARREGAR, FieldCadastroRedirectButtonComponent, FileUploadFieldComponent, FileUploadType, FormActionsAlign, FormActionsComponent, FormColComponent, FormCollectionComponent, FormCollectionLayout, FormGroupComponent, FormGroupVariant, FormLayoutGap, FormRowAlign, FormRowComponent, FormRowJustify, FormSectionAlign, FormSectionComponent, FormSectionRadius, FormSectionVariant, FormTabComponent, FormTabsComponent, ImagePreviewPanelComponent, InputMaskFieldComponent, IntegerFieldComponent, LAYOUT_STACK_SIDE_BY_SIDE, LAYOUT_STACK_STACKED, LayoutStackAlign, LayoutStackComponent, LayoutStackDirection, LayoutStackItemAlign, LibDialogSize, ListItemComponent, LoadingDialogComponent, LoadingDialogService, MaskedTextFieldBase, MenuDividerComponent, MenuDropdownPlacement, MenuGroupComponent, MenuListComponent, MultiselectFieldComponent, NO_OP_CONSULTA_ROUTE_REUSE, NO_OP_CONSULTA_TOPBAR_SLOT, NgControlFieldDirective, OPS_BOOL, OPS_DATA, OPS_TEXTO, OPS_TEXTO_MULTISELECT, ORIGEM_CADASTRO_INLINE_PESSOA, OverlayPlacement, PDF_IFRAME_VIEWER_HASH, PEDIDOS_NAV_ID_EXCLUIDO, PEDIDOS_NAV_LINHA_GRAVADA, PEDIDOS_NAV_VOLTAR_SEM_RECARREGAR, PESSOAS_NAV_LINHA_GRAVADA, PESSOAS_NAV_VOLTAR_SEM_RECARREGAR, PHONE_BR_LANDLINE_MASK, PHONE_BR_MOBILE_MASK, PRODUTOS_NAV_ID_EXCLUIDO, PRODUTOS_NAV_LINHA_GRAVADA, PRODUTOS_NAV_VOLTAR_SEM_RECARREGAR, PasswordFieldComponent, PhoneFieldComponent, PopoverBodyTemplateDirective, PopoverComponent, PopoverFooterTemplateDirective, PopoverTriggerDirective, ReferenceOptionPreset, STRUCTRA_CADASTRO_INLINE_RESULT_KEY, STRUCTRA_CADASTRO_INLINE_RETURN_KEY, STRUCTRA_CONSULTA_FORCE_REFRESH_KEY, STRUCTRA_DEDICATED_BACK_TO_TOP_SELECTOR, STRUCTRA_INLINE_FORM_DRAFT_PENDING_PREFIX, STRUCTRA_MIDIA_PUBLIC_BASE_RESOLVER, STRUCTRA_MIDIA_UPLOAD_TRANSPORT, STRUCTRA_PAGE_STATE_ACTIVE_TAB_PREFIX, STRUCTRA_SHELL_SCROLL_RESTORATION_OPTIONS, STRUCTRA_SHELL_TOPBAR_TITLE_SKELETON, STRUCTRA_SIMULATED_LOADING_DELAY_MS, STRUCTRA_THEME_IDS, STRUCTRA_UI, ScriptEditorFieldComponent, SelectFieldComponent, SkeletonBlockComponent, SkeletonCardComponent, SkeletonFieldShellComponent, SkeletonListComponent, SkeletonTableComponent, SkeletonTextComponent, StatCardComponent, StatusBadgeComponent, StructraBackToTopButtonComponent, StructraPageComponentOutletComponent, StructraPageComponentRegistry, StructraPageStateCacheService, StructraProgressOverlayComponent, ScriptEditorFieldComponent as StructraScriptEditorComponent, StructraShellScrollRestorationService, StructraShellTopbarSlotService, AppSidebarBottomActionsTemplateDirective as StructraSidebarBottomActionsDirective, AppSidebarFooterTemplateDirective as StructraSidebarFooterDirective, AppSidebarHeaderTemplateDirective as StructraSidebarHeaderDirective, AppSidebarUserInfoTemplateDirective as StructraSidebarUserInfoDirective, SwitchFieldComponent, THEME_PRIMARY_COLOR_LABEL_PT_BR, TOAST_REGISTRO_EXCLUIDO_SUCESSO, TableEmptyStateComponent, TableToolbarComponent, TextFieldComponent, TextareaFieldComponent, ThemeDirective, ToastHostComponent, ToastService, TooltipComponent, TooltipPanelTemplateDirective, TreeViewComponent, USUARIOS_CONSULTA_GRID_OPTS, USUARIOS_NAV_ID_EXCLUIDO, USUARIOS_NAV_LINHA_GRAVADA, USUARIOS_NAV_VOLTAR_SEM_RECARREGAR, VENDEDORES_NAV_ID_EXCLUIDO, VENDEDORES_NAV_LINHA_GRAVADA, VENDEDORES_NAV_VOLTAR_SEM_RECARREGAR, ValidationSummaryComponent, agruparCamposMetadataPorSecao, anchoredOverlayPositions, aplicarNormalizacaoMultiselectIdsNoPartial, aplicarProdutoDtoNoFormulario, appendCadastroPageActiveTabQuery, appendPdfIframeViewerParams, applyCadastroCollectionArrayValidators, applyCadastroModoSenhaNovos, applyCollectionValidationSummaryNavigation, applyCollectionValueToFormArray, applyEntityToCadastroFormByMetadata, applyOptionalThemeHostClasses, applyPickedCalendarDate, buildCadastroFiltroDialogItensGridRows, buildCadastroMetadataShellRuntime, buildCadastroPageActiveTabPageKey, buildCadastroPageActiveTabPageKeyFromLayout, buildCadastroPageRuntime, buildCadastroRedirectReturnUrl, buildCadastroReferenciaDialogContext, buildCatalogoStubConsultaRuntime, buildConsultaConfirmDuplicarLinhaFromLayout, buildConsultaConfirmRemoverLinhaFromLayout, buildConsultaDefaultIsItemGuard, buildConsultaListaCacheKey, buildConsultaPageMetadataUnified, buildConsultaPageRuntime, buildDecimalBrDisplay, buildDecimalBrParseString, buildDefaultConsultaMapCardFromColunasGrid, buildEmptyStateOverlayHtml, buildFormContainerStateStorageKey, buildFormGroupFromCadastroCampos, buildHistoryStateAfterReturningFromNestedInlineChild, buildInlineReturnStateForChildCadastro, buildNovoFormDefaultsFromCampos, buildRouteReuseKeyFromAppPathname, buildRouteReuseKeyFromNovoRouterLink, buildStructraSidebarTemplateContext, buildValidationMetaFromCadastroCampos, cadastroBuildImageUploadMetadata, cadastroCampoBlocoEditorOcupaLinhaInteira, cadastroCampoBooleanOcupaLinhaInteira, cadastroCampoMetadataDtoFromPartial, cadastroCampoMetadataEhBoolean, cadastroCampoMetadataLarguraCompacta, cadastroCampoReferenciaMetadataDtoFromPartial, cadastroCampoRuleMaxLength, cadastroCampoScriptEditorLanguage, cadastroCampoScriptEditorMinHeight, cadastroCampoValidacaoDtoFromPartial, cadastroCampoWrapperWidthCss, cadastroCollectionEditorGridColumns, cadastroCollectionMaxItemsValidator, cadastroCollectionMinItemsValidator, cadastroConfirmExcluirPartialFromLayout, cadastroContainerLayoutSizeDoRecord, cadastroContainerPathJoin, cadastroCrudMessagesDoFormLayout, cadastroDeclarativeSnapshotDtoFromPartial, cadastroEnsureSingleBooleanInCollection, cadastroFieldsPerRowDoRecord, cadastroFlattenContainerRaw, cadastroFormDraftEnabledDoLayout, cadastroFormGridColumns, cadastroFormLayoutComoRecord, cadastroFormLayoutDoBundle, cadastroFormLayoutDoRuntime, cadastroFormLayoutPreserveActiveTab, cadastroFormPageLayoutFromPartial, cadastroGcd, cadastroGetCollectionItemControl, cadastroGridColumnSpanForFieldIndex, cadastroGridDenominadorTracks, cadastroGridTemplateColumnsLinhaUnicaSeAplicavel, cadastroInferExtensaoArquivo, cadastroInferImageContentType, cadastroLcm, cadastroMetadataDtoParaValidacaoLike, cadastroNavKeysStructra, cadastroNomeArquivoDaUploadUrl, cadastroNormalizarUploadUrlPorPrefixo, cadastroPageActionDtoFromPartial, cadastroPageActionsPorRegiao, cadastroPageActiveTabToRestore, cadastroPageComponentDtoFromPartial, cadastroPageComponentsPorRegiao, cadastroPageIdentityDoFormLayout, cadastroPageOverlayDtoFromPartial, cadastroPageShellAtivo, cadastroPageShellTabsKeepAliveFromLayout, cadastroPageTabDtoFromPartial, cadastroPageTabsOrdenados, cadastroPainelMaxWidthCss, cadastroRawBooleanDeep, cadastroRawNumber, cadastroRawString, cadastroReferenceEntryFromListarService, cadastroReferenciaOpenModeFromWire, cadastroReindexarCollectionOrdem, cadastroResolveId, cadastroSecaoFormGroupDense, cadastroSecaoPersisteExpandedState, cadastroSecaoRenderizaInlineDentroDoPai, cadastroSecaoSegmentosIntercalados, cadastroSecaoSegmentosParaRender, cadastroSecaoUsaFormGroup, cadastroSecaoUsaFormGroupComoBlocoVisual, cadastroSecaoUsaSuperficieDeclarativa, cadastroSingleBooleanCollectionBinding, cadastroTitulosEfectivosDoFormLayout, cadastroToastTitleEfectivoDoFormLayout, cadastroToolbarButtonDtoFromPartial, cadastroToolbarVisibilityDoFormLayout, cadastroUseBackToTopButtonFromLayout, cadastroValidationSummaryFlagsDoRecord, cadastroValidationSummaryPinnedFromFlags, cadastroWireCollectionOrdemReindexOnAdd, cadastroWireCollectionOrdemReindexOnAddRemove, cadastroWireCollectionOrdemReindexOnRemove, campoMetadataVisivelNoModo, caretIndexFromIntegerDigitCount, caretIndexFromSemantic, carregarOpcoesMultiselectViaSpec, cepMaskCompleteValidator, clearRequiredValidatorsOnReadOnlyCadastroFields, clearStructraCadastroInlineReturnSessionCacheForTests, clearStructraCadastroSessionStorageOnLogout, coerceDecimalPtBr, collectValidationSummaryItems, colunasGridTemFormatacaoDeclarativa, computeReferenciaHasMore, consoleLogLevelClass, consultaCampoMetadataDtoFromPartial, consultaCardCampoDtoFromPartial, consultaFiltroValorDataSomenteDia, consultaGridColunaDtoFromPartial, consultaGridColunaKeyParaCampoLinha, consultaGridConfigDtoFromPartial, consultaPassaItem, consultaPassaTodosItens, consultaUsuariosMetadataReplyFromPartial, consumeCadastroInlineFormDraftPendingRestore, consumirResultadoCadastroInlineCampoPessoaId, consumirResultadoCadastroInlineCampoReferencia, cpfCnpjMaskCompleteValidator, createCadastroDialogActivatedRoute, createCadastroMetadataPageConfig, createCadastroPadraoConfig, createCadastroRuntime, createCollectionFormArray, createCollectionItemFormGroup, createConsultaListaItemGuardFromFiltroUi, createConsultaOptionsListarResolver, createConsultaPadraoRuntime, createConsultaPresetSelectEmptyOptionsMessageSignal, createConsultaPresetStorageApi, createGrpcSaveRequestMapper, createInlineHostNavigation, createMapCardFromConsultaColunasGrid, createMapGridRowFromConsultaColunasGrid, createSaveRequestFromPartialMapper, criarDraftInlinePessoa, decimalPtBrNaoNegativoValidator, decimalPtBrToNullableNumber, defaultIsConsultaListItemMinimo, defaultParseLinhaGravadaJson, deleteConfirmPageConfigFromPartial, deriveCadastroTituloEditar, deriveConsultaListaItemGuardPropsFromFiltroUi, duplicateConfigFromLayout, duplicatePageConfigFromPartial, enrichCadastroReferenciaDialogPageConfig, ensureCadastroCollectionMinItems, ensureCadastroFormControlsFromMetadata, escapeHtml, evaluateStructraPageVisibleExpression, executarConsultaServidorComPreset, extractConsultaListaCacheNamespace, extractDecimalBrParts, fileIsLikelyImage, fileMatchesAccept, filtrarSecoesMetadataPorModo, filtrarUiSelectOptionsPainelComValorPersistente, filtrarUiSelectOptionsPorQuery, findCadastroCampoByKey, fixedDigitsMaskCompleteValidator, flattenCadastroMetadataSecoes, fmtDataPt, fmtDocumentoCelulaConsultaGrid, formatAcceptForDisplay, formatDateTimePtBr, formatDecimalBr, formatDocumentoPessoaParaExibicao, formatFileSizeBytes, formatIntegerThousandsBr, formatMaskDigits, formatPhoneBr, formatUiFieldDateValue, getFilePreviewKind, getStructraActionsByGroup, getThemeClass, getThemeClassList, getThemePrimaryColorLabelPtBr, getThemeTokenClass, hexParaColorInput, inferCadastroItemFieldsFromPlainRows, inferCadastroListaUrlFallback, initialCadastroControlValue, injectEffectiveThemeId, isCadastroDuplicateNavigation, isCollectionField, isCollectionLikeField, isConsultaCardAutoSubtitleExcluded, isLegacyFormContainerStateStorageKey, isLegacyNomeDocumentoReferencePreset, isReadonlyCollectionField, isValidPhoneBr, libDialogPanelClasses, listaUrlFromRotaCadastro, listarItensCadastroReferencia, listarTodosPaginado, loadPresetsJson, mapCadastroFormRawToPayload, mapConsultaGridColunasParaDataGrid, mapConsultaMetadataParaFiltroUi, mapErroTransporteParaMensagem as mapErroListaDefault, mapErroTransporteParaMensagem, mapEstadosToOptions, mapFiltroSalvoParaConsultaPreset, mapListarItensParaMultiselectOpcoes, markCadastroInlineFormDraftPendingRestore, maskDigitCount, mergeCadastroConfirmExcluir, mergeConsultaGridRowFormattingFromColunasGrid, mergeConsultaMultiselectOpcoesComSeleccionados, mergeDocumentoFmtNaLinhaConsulta, mergeMapConsultaGridColunasOptsComColumnFormat, mergeNovoIdEmListaSelecionada, mergeStructraShellScrollRestorationOptions, metadataCampoParaChaveLinhaCliente, modoPermissaoReferenciaFromWire, montarFiltrosGrpcPreset, montarFiltrosServidorPreset, montarHierarquiaSecoesMetadata, multiselectIdListRequiredValidator, multiselectMaxItemsValidator, navegarVoltarLista, navegarVoltarListaComIdRemovido, navegarVoltarListaComLinha, navigateCadastroDuplicate, navigateCommandsFromRotaAlterar, navigateCommandsFromRotaNovo, nomeSalvarParaPayloadComPessoa, normalizarArvoreSecoesMetadata, normalizarHexCor, normalizarItensParaGravarServidorCadastro, normalizarListaIdsMultiselect, normalizarOperadorConsultaParaEnvioServidor, normalizarRotaReferencia, normalizarStructraAction, normalizarStructraActionGroup, normalizarStructraActionGroups, normalizeCadastroAppPath, normalizeCadastroCampoMetadataWire, normalizeCadastroInitRouteIdParam, normalizeCadastroItemEditorDecimalControls, normalizeCadastroReferenciaDialogRotaKey, normalizeCadastroRouteForContainerState, normalizeConsoleLogLevel, normalizeFormDateValue, normalizePhoneBr, normalizeStructraTheme, novoPathCommandsFromRota, onlyDigits, operadorConsultaComValorUnicoComparacao, operadorConsultaDatetimeUsaDatePicker, operadoresConsultaCampo, operadoresPorTipo, ordenarFiltroItens, ordenarStructraActions, parseDecimalBr, parseIntegerString, parseUiFieldDateValue, patchFormFromEntidadeRecord, permissoesReferenciaMetadata, phoneBrDynamicMaskCompleteValidator, phoneBrMaskCompleteValidator, phoneBrMaskFromDigits, pickCadastroPageActiveTabExplicit, pickTabKeyLinkedToSummaryItems, precisaValor, precisaValorFinal, provideStructraCadastroReferenciaDialogRoot, provideStructraShellScrollRestoration, qtdCriteriosPresetParaSkeleton, readCadastroDuplicateSourceId, readCadastroPageActiveTabFromNavigationState, readCadastroPageActiveTabFromUrl, readFormContainerCollapsedFromStorage, readStructraCadastroInlineReturn, referenciaAbreEmDialog, referenciaOpenModeRaw, referenciaUsesLegacyRegistryMapper, registerCadastroReferenceEntries, registerCadastroReferenceListSources, registerCadastroReferenciaDialogBridges, registerStructraBuiltinPageComponents, replaceProdutoCadastroFormControls, resetStructraCadastroReferenciaDialogRootForTests, resolveCadastroCollectionMinItems, resolveCadastroListaUrlParaNavegacao, resolveCadastroPageActiveTabKey, resolveCadastroReferenciaMapOptions, resolveConsultaEditActionLabelFromGridConfig, resolveConsultaListaQuerySliceFromGridConfig, resolveConsultaNavKeysFromPageLayout, resolveConsultaNovoRouterLinkFromLayout, resolveConsultaRouteEditBaseFromLayout, resolveConsultaToastTitleLista, resolveControlAtPath, resolveFormContainerCollapsed, resolveReferenciaOpcaoLabel, resolveStructraPageInputExpression, resolveStructraPageInputs, resolveStructraShellScrollContainer, resolverAcoesReferenciaPorRota, resolverValorOpcaoPorRotuloNormalizado, resumoValorMultiselectFiltro, rotaListaReferencia, rotuloEnmStatus, rotuloNomeDocumentoLista, rotuloOperadorConsulta, rotuloPessoaLista, runStructraSimulatedLoadingDelay, sanitizeDecimalBrInput, sanitizeIntegerDigits, sanitizeRecordForCadastroDuplicate, savePresetsJson, scheduleRemoteCollectionHydrationAfterSectionExpand, secaoMetadataEhContainerPlain, secaoTemConteudoVisivel, secaoTemCorpoParaRender, sectionHasVisibleInvalid, semanticCaretAt, semanticIntegerDigitCountLeft, serializeCollectionFormArray, shouldDeferInitialRemoteCollectionLoad, shouldSkipCadastroPageActiveTabCacheWrite, stripStructraCadastroInlineResultFromHistory, stripToDigits, structraActionButtonVariant, structraCadastroInlineResultTemIdSalvo, structraCadastroInlineResultTemReferenciaExcluida, structraElementScrolls, structraHasValue, structraIsFilledString, structraIsFormGroup, structraIsValidPort, structraParseNumberOrNull, structraReadFormValue, structraReadNestedValue, structraTrimString, subscribeMarkForCheckOnInvalidUiRefresh, subtreeHasVisibleInvalid, syncStructraCadastroInlineReturnSessionCache, tabWarningFromLinkedSummaryItems, tipoCampoMetadataParaUi, tipoValorApi, toCadastroReferenceListPageResult, toConsoleLogLineView, toConsoleLogLineViews, toUiSelectOptionsFromMetadata, uiSelectOpcaoIdNomeDocumento, uiSelectOpcoesDePessoas, validationLikeFromCampoMetadata, validatorsFromCampo, writeFormContainerCollapsedToStorage };
11221
- export type { AdaptiveDataViewMode, AlertType, AppThemeId, AppThemeOption, ApplyCadastroModoSenhaOptions, BreadcrumbItem, BuildCadastroMetadataShellRuntimeOptions, BuildCadastroPageRuntimeOptions, CadastroActionStateDto$1 as CadastroActionStateDto, CadastroAutoMapFormValueConfig, CadastroCampoContaNaGrelhaFn, CadastroCampoMetadataDto, CadastroCampoMetadataMergeInput, CadastroCampoReferenciaMetadataDto, CadastroCampoSelectOptionDto, CadastroCampoValidacaoDto, CadastroCampoValidacaoLike, CadastroCollectionBinding, CadastroCollectionBridge, CadastroCollectionEditingItemControlsChangeEvent, CadastroCollectionEditingItemControlsChangeOptions, CadastroCollectionItemEvent, CadastroCollectionItemFieldsChangeEvent, CadastroCollectionItemFieldsChangeOptions, CadastroCollectionItemsChangeEvent, CadastroCollectionPageReplyWire, CadastroCollectionPageRequestWire, CadastroCollectionPagingPort, CadastroCollectionPagingUi, CadastroCollectionSaveHandler, CadastroCollectionStateDto, CadastroConfirmExcluirPartial, CadastroCrudMessagesResolved, CadastroDeclarativeSnapshotDto, CadastroDuplicateActionConfig, CadastroEnsureSingleBooleanInCollectionOptions, CadastroFieldChangeEvent, CadastroFieldEventBase, CadastroFieldKey, CadastroFieldRegistration, CadastroFieldSelectEvent, CadastroFieldSimpleEvent, CadastroFiltroDialogRuntimeSlice, CadastroFormPageLayout, CadastroImageUploadMetadata, CadastroImageUploadMetadataOptions, CadastroInferExtensaoArquivoOptions, CadastroInferImageContentTypeOptions, CadastroInlineHostNavigationConfig, CadastroListSelectBinding, CadastroMetadataCamposReplyLike, CadastroMetadataPageCadastro, CadastroMetadataPageServiceConfig, CadastroMetadataPageShellCallbacks, CadastroMetadataPageStateConfig, CadastroMetadataPageVm, CadastroMetadataSecao, CadastroMetadataServiceConfig, CadastroMetadataServicePort, CadastroMetadataShellRuntime, CadastroMetadataView, CadastroModo, CadastroMultiselectBinding, CadastroPadraoGrpcService, CadastroPageActionDto, CadastroPageActiveTabResolveInput, CadastroPageComponentDto, CadastroPageConfig, CadastroPageIdentityFallback, CadastroPageNavKeysConfig, CadastroPageOverlayDto, CadastroPageRuntime, CadastroPageSenhaConfig, CadastroPageTabDto, CadastroPessoaOpcaoMin, CadastroRawBooleanDeepOptions, CadastroReferenceListPageParams, CadastroReferenceListPageResult, CadastroReferenceListarService, CadastroReferenceRegistryEntry, CadastroReferenciaAcoesPermitidas, CadastroReferenciaDialogBridgeEntry, CadastroReferenciaDialogBridgeFactory, CadastroReferenciaDialogCloseReason, CadastroReferenciaDialogCompletePayload, CadastroReferenciaDialogContext, CadastroReferenciaDialogOpenOptions, CadastroReferenciaDialogOpenRequest, CadastroReferenciaOpenModeWireRef, CadastroReferenciaPermissoesMetadata, CadastroReferenciaRouteAccess, CadastroReindexarCollectionOrdemOptions, CadastroRuntimeDeps, CadastroRuntimeOptions, CadastroSearchSelectBinding, CadastroSearchSelectRedirectSuffix, CadastroSearchSelectReferenciaDialog, CadastroSecaoSegmento, CadastroSingleBooleanCollectionBindingOptions, CadastroTitulosFallback, CadastroToolbarButtonDto, CadastroToolbarVisibilityResolved, CadastroValidationUi, CardItemBooleanField, CardItemMetaField, CardItemView, CardListDataMode, CardListHeaderPosition, CardListMapFn, CatalogoStubConsultaConfig, CatalogoStubListaItem, ConfirmDialogData, ConfirmDialogVariant, ConsoleLogLevel, ConsoleLogLine, ConsoleLogLineView, ConsultaBaseConfig, ConsultaCampoDef, ConsultaCampoMetadataDto, ConsultaCardCampoDto, ConsultaCatalogBundleConfig, ConsultaCatalogBundleSessaoPort, ConsultaCatalogEntityBindings, ConsultaCatalogInitCarregada, ConsultaCrudAdapterConfig, ConsultaEnumSelectOptionDto, ConsultaFiltroCampo, ConsultaFiltroItem, ConsultaFiltroMatchAdapters, ConsultaFiltroPreset, ConsultaFiltroSalvoDto, ConsultaFiltroSalvoItemDto, ConsultaFiltroUiFragment, ConsultaFiltroValorTipo, ConsultaFiltrosBundleSessao, ConsultaFiltrosChromeVolatil, ConsultaFiltrosSessaoConsultaPadraoApi, ConsultaFiltrosSessaoUserLike, ConsultaFiltrosSessaoVolatilApi, ConsultaFiltrosVolatilHandlers, ConsultaGridColunaDto, ConsultaGridColunaDtoLike, ConsultaGridConfigDto, ConsultaInitCarregada, ConsultaListaCacheKeyParts, ConsultaListaCachePayload, ConsultaListaMemoriaCacheStoreOpts, ConsultaListaQueryParamsLike, ConsultaListaResultadoLike, ConsultaListaServidorQuerySlice, ConsultaMapCardLinha, ConsultaMetadataCampo, ConsultaMetadataReplyLike, ConsultaMetadataServicePort, ConsultaMultiselectOpcoesRemotasSpec, ConsultaOperadorOption, ConsultaOptionsListarContrato, ConsultaOptionsListarResolver, ConsultaPadraoGrpcServiceLike, ConsultaPadraoNavigateLike, ConsultaPadraoToastLike, ConsultaPageCacheEntry, ConsultaPageMetadataUnified, ConsultaPageRuntime, ConsultaPageRuntimeDeps, ConsultaRouteReusePort, ConsultaServidorExecutorOpts, ConsultaServidorListaReply, ConsultaServidorPort, ConsultaServidorQueryParams, ConsultaTopbarSlotPort, ConsultaUsuariosMetadataReply, ConsultaValorTipo, CreateCadastroMetadataPageConfigOptions, CreateCadastroPadraoConfigOptions, CreateConsultaPadraoRuntimeOptions, CreateGrpcSaveRequestMapperOptions, CreateSaveRequestFromPartialMapperOptions, CrudConsultaServicePort, DataGridColumn, DataGridPaginationChangeEvent, DeleteConfirmPageConfig, DetailsViewItem, DropdownListBindings, DropdownSearchPageRequested, DuplicatePageConfig, FieldCommonInputs, FieldSize, FilePreviewKind, FiltroItemEntrada, FiltroItemEntradaGenerico, FiltroItemGridRow, FiltroItemSalvoDto, FiltroSalvo, FormContainerStateKeyParts, FormTabValidationLinkConfig, FormTabsVariant, GrpcSaveRequestFactory, InitConsultaReply, ListarTodosPaginadoParams, LoadingDialogData, MapConsultaGridColunasOpts, MenuItemAction, MenuItemDivider, MenuItemGroup, MenuItemKind, MenuItemSubmenu, MenuLeafItem, MenuNodeItem, ModoPermissaoReferencia, MontarFiltrosGrpcPresetOptions, MontarFiltrosServidorPresetOptions, OptionsSourceServicePort, PatchFormFromEntidadeOptions, SalvarFiltroConsultaRequest, SalvarFiltroPresetAsyncArgs, SaveRequestFromPartialFactory, ScriptEditorLanguage, SelectPageRequested, SkeletonFieldShellVariant, StatCardDeltaTone, StatusBadgeSize, StatusBadgeVariant, StructraAction, StructraActionButtonVariant, StructraActionGroup, StructraActionGroupWire, StructraActionId, StructraActionVariant, StructraActionWire, StructraCadastroInlineResultState, StructraCadastroInlineReturnState, StructraFormValueSource, StructraMidiaUploadResult, StructraMidiaUploadTransportContext, StructraMidiaUploadTransportFn, StructraPageInputContext, StructraShellScrollRestorationMergedOptions, StructraShellScrollRestorationOptions, StructraSidebarContext, StructraSidebarTemplateContext, StructraTheme, TitulosFromMetadataConfig, ToastInstance, ToastShowOptions, ToastType, ToastVerticalPosition, TreeViewNode, TreeViewSelectEvent, UiFieldInputTextAlign, UiSelectOption, ValidationFieldMeta, ValidationSummaryItem, ValidationSummarySize, ValidationSummaryVariant, ValoresConsultaPresetUi };
12059
+ /** Itens por página na pré-visualização de relatórios (pesquisa paginada na tela). */
12060
+ declare const STRUCTRA_REPORT_DEFAULT_PAGE_SIZE = 15;
12061
+ interface ReportTreeNode {
12062
+ id: string;
12063
+ label: string;
12064
+ icon?: string | null;
12065
+ leaf?: boolean;
12066
+ expanded?: boolean;
12067
+ children?: ReportTreeNode[];
12068
+ }
12069
+ interface ReportFilterMeta {
12070
+ id: string;
12071
+ label: string;
12072
+ tipo: 'text' | 'bool' | 'date' | 'number' | string;
12073
+ operador?: string;
12074
+ global?: boolean;
12075
+ obrigatorio?: boolean;
12076
+ }
12077
+ interface ReportColumnMeta {
12078
+ id: string;
12079
+ label: string;
12080
+ formato?: string;
12081
+ width?: string | null;
12082
+ minWidth?: string | null;
12083
+ maxWidth?: string | null;
12084
+ }
12085
+ type ReportColumnWidthFields = Pick<ReportColumnMeta, 'width' | 'minWidth' | 'maxWidth'>;
12086
+ declare function reportColumnWidthStyle(col: ReportColumnWidthFields | null | undefined): Record<string, string | null>;
12087
+ declare function reportTableHasFixedWidths(colunas: readonly ReportColumnWidthFields[]): boolean;
12088
+ declare function isReportNowrapColumn(col: Pick<ReportColumnMeta, 'formato' | 'id'> | null | undefined): boolean;
12089
+ /** Coluna booleana declarada pelo metadata do relatório (`formato: boolean`). */
12090
+ declare function isReportBooleanColumn(col: Pick<ReportColumnMeta, 'formato'> | null | undefined): boolean;
12091
+ /** Converte valor de célula booleana (tipado ou legado Sim/Não) quando a coluna é boolean. */
12092
+ declare function coerceReportBoolean(value: unknown): boolean;
12093
+ interface ReportMetadata {
12094
+ key: string;
12095
+ titulo: string;
12096
+ filtros: ReportFilterMeta[];
12097
+ colunas: ReportColumnMeta[];
12098
+ }
12099
+ /** Critério avulso no mesmo formato da consulta base (gRPC `FiltroItemEntrada`). */
12100
+ interface ReportFiltroItemEntrada {
12101
+ campo: string;
12102
+ operador: string;
12103
+ valor: string;
12104
+ valorAte?: string;
12105
+ juncao?: string;
12106
+ }
12107
+ interface ReportPesquisarRequest {
12108
+ /** Formato legado (metadata fixa por campo do relatório). */
12109
+ filtros?: Record<string, string | null | undefined>;
12110
+ /** Preset + valores montados pela consulta base (`montarFiltrosServidorPreset`). */
12111
+ filtrosAvulsos?: ReportFiltroItemEntrada[];
12112
+ /** Página (1-based). Omisso ⇒ 1. */
12113
+ page?: number;
12114
+ /** Tamanho da página na tela. Omisso ⇒ default do servidor. */
12115
+ pageSize?: number;
12116
+ /** Exportação PDF: busca todos os registros filtrados. */
12117
+ exportAll?: boolean;
12118
+ }
12119
+ interface ReportHeader {
12120
+ titulo: string;
12121
+ subtitulo?: string | null;
12122
+ geradoEm?: string;
12123
+ }
12124
+ interface ReportTotal {
12125
+ label: string;
12126
+ valor: string;
12127
+ }
12128
+ interface ReportSectionColumn {
12129
+ id: string;
12130
+ label: string;
12131
+ formato?: string;
12132
+ width?: string | null;
12133
+ minWidth?: string | null;
12134
+ maxWidth?: string | null;
12135
+ }
12136
+ interface ReportSectionTable {
12137
+ title: string;
12138
+ colunas: ReportSectionColumn[];
12139
+ linhas: Array<Record<string, string | null | undefined>>;
12140
+ emptyMessage?: string | null;
12141
+ }
12142
+ interface ReportSection {
12143
+ title: string;
12144
+ subtitle?: string | null;
12145
+ tabelas: ReportSectionTable[];
12146
+ totais?: ReportTotal[];
12147
+ }
12148
+ interface ReportResult {
12149
+ header: ReportHeader;
12150
+ filtrosAplicados: Record<string, string | null | undefined>;
12151
+ colunas: ReportColumnMeta[];
12152
+ linhas: Array<Record<string, unknown>>;
12153
+ sections?: ReportSection[];
12154
+ totais?: ReportTotal[];
12155
+ footer?: string | null;
12156
+ totalRegistros: number;
12157
+ page?: number;
12158
+ pageSize?: number;
12159
+ totalPages?: number;
12160
+ }
12161
+ interface StructraReportTransport {
12162
+ obterArvore(): Promise<ReportTreeNode[]>;
12163
+ obterMetadata(key: string): Promise<ReportMetadata>;
12164
+ pesquisar(key: string, request: ReportPesquisarRequest): Promise<ReportResult>;
12165
+ }
12166
+ declare const STRUCTRA_REPORT_TRANSPORT: InjectionToken<StructraReportTransport>;
12167
+ declare function findFirstReportLeafId(nodes: ReportTreeNode[]): string | null;
12168
+ declare function findReportTreeLabel(id: string, nodes: ReportTreeNode[]): string | null;
12169
+ declare function mapReportTreeToTreeViewNodes(nodes: ReportTreeNode[]): TreeViewNode[];
12170
+
12171
+ declare class StructraReportTreeComponent {
12172
+ nodes: TreeViewNode[];
12173
+ selectedId: string | null;
12174
+ title: string;
12175
+ titleIconClass: string;
12176
+ expansionStateKey: unknown;
12177
+ selectedIdChange: EventEmitter<string | null>;
12178
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportTreeComponent, never>;
12179
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportTreeComponent, "structra-report-tree", never, { "nodes": { "alias": "nodes"; "required": true; }; "selectedId": { "alias": "selectedId"; "required": false; }; "title": { "alias": "title"; "required": false; }; "titleIconClass": { "alias": "titleIconClass"; "required": false; }; "expansionStateKey": { "alias": "expansionStateKey"; "required": false; }; }, { "selectedIdChange": "selectedIdChange"; }, never, never, true, never>;
12180
+ }
12181
+
12182
+ declare class StructraReportFilterPanelComponent {
12183
+ readonly ngModelStandalone: {
12184
+ standalone: boolean;
12185
+ };
12186
+ titulo: string;
12187
+ subtitulo: string;
12188
+ filtros: ReportFilterMeta[];
12189
+ valores: Record<string, string>;
12190
+ collapsed: boolean;
12191
+ pesquisando: boolean;
12192
+ collapsedChange: EventEmitter<boolean>;
12193
+ valorChange: EventEmitter<{
12194
+ id: string;
12195
+ value: string;
12196
+ }>;
12197
+ pesquisar: EventEmitter<void>;
12198
+ readonly boolOptions: UiSelectOption<string>[];
12199
+ compareStr: (a: unknown, b: unknown) => boolean;
12200
+ patchValor(id: string, value: string | null | undefined): void;
12201
+ valorAtual(id: string): string;
12202
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportFilterPanelComponent, never>;
12203
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportFilterPanelComponent, "structra-report-filter-panel", never, { "titulo": { "alias": "titulo"; "required": true; }; "subtitulo": { "alias": "subtitulo"; "required": false; }; "filtros": { "alias": "filtros"; "required": true; }; "valores": { "alias": "valores"; "required": true; }; "collapsed": { "alias": "collapsed"; "required": false; }; "pesquisando": { "alias": "pesquisando"; "required": false; }; }, { "collapsedChange": "collapsedChange"; "valorChange": "valorChange"; "pesquisar": "pesquisar"; }, never, never, true, never>;
12204
+ }
12205
+
12206
+ declare class StructraReportTableComponent {
12207
+ colunas: ReportColumnMeta[];
12208
+ linhas: Array<Record<string, unknown>>;
12209
+ totalRegistros: number;
12210
+ readonly isBooleanColumn: typeof isReportBooleanColumn;
12211
+ readonly isNowrapColumn: typeof isReportNowrapColumn;
12212
+ readonly columnWidthStyle: typeof reportColumnWidthStyle;
12213
+ hasFixedColumnWidths(): boolean;
12214
+ cellValue(linha: Record<string, unknown>, coluna: ReportColumnMeta): string;
12215
+ booleanChecked(linha: Record<string, unknown>, coluna: ReportColumnMeta): boolean;
12216
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportTableComponent, never>;
12217
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportTableComponent, "structra-report-table", never, { "colunas": { "alias": "colunas"; "required": true; }; "linhas": { "alias": "linhas"; "required": true; }; "totalRegistros": { "alias": "totalRegistros"; "required": false; }; }, {}, never, never, true, never>;
12218
+ }
12219
+
12220
+ declare class StructraReportPaginatorComponent {
12221
+ page: number;
12222
+ totalPages: number;
12223
+ totalRegistros: number;
12224
+ pageSize: number;
12225
+ disabled: boolean;
12226
+ pageChange: EventEmitter<number>;
12227
+ get podeAnterior(): boolean;
12228
+ get podeProxima(): boolean;
12229
+ irAnterior(): void;
12230
+ irProxima(): void;
12231
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportPaginatorComponent, never>;
12232
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportPaginatorComponent, "structra-report-paginator", never, { "page": { "alias": "page"; "required": true; }; "totalPages": { "alias": "totalPages"; "required": true; }; "totalRegistros": { "alias": "totalRegistros"; "required": false; }; "pageSize": { "alias": "pageSize"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "pageChange": "pageChange"; }, never, never, true, never>;
12233
+ }
12234
+
12235
+ declare class StructraReportEmptyStateComponent {
12236
+ message: string;
12237
+ description: string;
12238
+ iconClass: string;
12239
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportEmptyStateComponent, never>;
12240
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportEmptyStateComponent, "structra-report-empty-state", never, { "message": { "alias": "message"; "required": false; }; "description": { "alias": "description"; "required": false; }; "iconClass": { "alias": "iconClass"; "required": false; }; }, {}, never, never, true, never>;
12241
+ }
12242
+
12243
+ declare class StructraReportLoadingSkeletonComponent {
12244
+ rows: number;
12245
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportLoadingSkeletonComponent, never>;
12246
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportLoadingSkeletonComponent, "structra-report-loading-skeleton", never, { "rows": { "alias": "rows"; "required": false; }; }, {}, never, never, true, never>;
12247
+ }
12248
+
12249
+ declare class StructraReportViewerComponent {
12250
+ metadata: ReportMetadata | null;
12251
+ result: ReportResult | null;
12252
+ filtrosValores: Record<string, string>;
12253
+ loadingMetadata: boolean;
12254
+ loadingResult: boolean;
12255
+ collapsed: boolean;
12256
+ filtrosValoresChange: EventEmitter<Record<string, string>>;
12257
+ collapsedChange: EventEmitter<boolean>;
12258
+ pesquisar: EventEmitter<void>;
12259
+ onValorChange(event: {
12260
+ id: string;
12261
+ value: string;
12262
+ }): void;
12263
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportViewerComponent, never>;
12264
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportViewerComponent, "structra-report-viewer", never, { "metadata": { "alias": "metadata"; "required": false; }; "result": { "alias": "result"; "required": false; }; "filtrosValores": { "alias": "filtrosValores"; "required": true; }; "loadingMetadata": { "alias": "loadingMetadata"; "required": false; }; "loadingResult": { "alias": "loadingResult"; "required": false; }; "collapsed": { "alias": "collapsed"; "required": false; }; }, { "filtrosValoresChange": "filtrosValoresChange"; "collapsedChange": "collapsedChange"; "pesquisar": "pesquisar"; }, never, never, true, never>;
12265
+ }
12266
+
12267
+ declare class StructraReportPageComponent {
12268
+ private readonly transport;
12269
+ autoSelectFirst: boolean;
12270
+ autoPesquisarOnSelect: boolean;
12271
+ reportSelected: EventEmitter<string | null>;
12272
+ reportLoaded: EventEmitter<ReportResult | null>;
12273
+ readonly treeNodes: _angular_core.WritableSignal<ReportTreeNode[]>;
12274
+ readonly selectedReportId: _angular_core.WritableSignal<string | null>;
12275
+ readonly metadata: _angular_core.WritableSignal<ReportMetadata | null>;
12276
+ readonly result: _angular_core.WritableSignal<ReportResult | null>;
12277
+ readonly filtrosValores: _angular_core.WritableSignal<Record<string, string>>;
12278
+ readonly loadingTree: _angular_core.WritableSignal<boolean>;
12279
+ readonly loadingMetadata: _angular_core.WritableSignal<boolean>;
12280
+ readonly loadingResult: _angular_core.WritableSignal<boolean>;
12281
+ readonly painelFiltroRecolhido: _angular_core.WritableSignal<boolean>;
12282
+ readonly treeViewNodes: _angular_core.Signal<structra_ui.TreeViewNode[]>;
12283
+ constructor();
12284
+ carregarArvore(): Promise<void>;
12285
+ onReportSelected(id: string | null): void;
12286
+ private carregarMetadata;
12287
+ pesquisar(): Promise<void>;
12288
+ patchFiltrosValores(next: Record<string, string>): void;
12289
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportPageComponent, never>;
12290
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportPageComponent, "structra-report-page", never, { "autoSelectFirst": { "alias": "autoSelectFirst"; "required": false; }; "autoPesquisarOnSelect": { "alias": "autoPesquisarOnSelect"; "required": false; }; }, { "reportSelected": "reportSelected"; "reportLoaded": "reportLoaded"; }, never, never, true, never>;
12291
+ }
12292
+
12293
+ export { ADAPTIVE_DATA_VIEW_MOBILE_QUERY, APP_SIDEBAR_LABEL_REVEAL_LAG_MS, APP_SIDEBAR_LAYOUT_DURATION_MS, APP_SIDEBAR_NAV_REVEAL_TOTAL_MS, APP_THEME_BASE_CLASS, APP_THEME_IDS, ActionMenuComponent, AdaptiveDataViewComponent, AdminLoginPageComponent, AdminLoginShellComponent, StructraSidebarUserPanelComponent as AdminSidebarUserPanelComponent, AlertComponent, AnchoredOverlayComponent, AppBreadcrumbComponent, AppDialogComponent, AppLibLightBlockScrollStrategy, AppShellComponent, AppShellSidebarTemplateDirective, AppShellSidebarToggleComponent, AppSidebarBottomActionsSlotDirective, AppSidebarBottomActionsTemplateDirective, AppSidebarBrandDirective, AppSidebarComponent, AppSidebarFooterSlotDirective, AppSidebarFooterTemplateDirective, AppSidebarHeaderSlotDirective, AppSidebarHeaderTemplateDirective, AppSidebarToolbarDirective, AppSidebarUserInfoSlotDirective, AppSidebarUserInfoTemplateDirective, AppTheme, AppThemeService, AppTopbarComponent, AppUserMenuComponent, BR_ESTADOS_NOME_SIGLA, ButtonType as BaseButtonType, ButtonVariant as BaseButtonVariant, BaseFieldComponent, BaseFieldDirective, BooleanFieldDirective, ButtonComponent, ButtonRadius, ButtonSize, ButtonType, ButtonVariant, CADASTRO_COLLAPSIBLE_REMOTE_LOAD_DELAY_MS, CADASTRO_DUPLICATE_FLAG_STATE, CADASTRO_DUPLICATE_SOURCE_ID_STATE, CADASTRO_FOCO_COLUNA_APOS_RESUMO_MS, CADASTRO_FORM_COLLECTION_REMOVE_ITEM_CONFIRM, CADASTRO_INVALIDATE_ROUTE_SNAPSHOT, CADASTRO_PAGE_SUBTITULO_PADRAO, CADASTRO_PAGE_TITULO_NOVO_PADRAO, CADASTRO_PESSOA_INLINE_DESTINO_URL_FRAGMENTS, CADASTRO_REFERENCIA_DIALOG_CONTEXT, CADASTRO_REFERENCIA_DIALOG_PAGE_CONFIG, CADASTRO_REFERENCIA_ROUTE_ACCESS, CADASTRO_REFERENCIA_ROUTE_ACCESS_PERMISSIVE, CADASTRO_RESUMO_FIELD_NAVIGATE_DEFER_MS, CADASTRO_TOAST_TITLE_PADRAO, CADASTRO_VALIDATION_SUMMARY_PINNED, CADASTRO_VALIDATION_SUMMARY_STATIC, CATEGORIAS_NAV_ID_EXCLUIDO, CATEGORIAS_NAV_LINHA_GRAVADA, CATEGORIAS_NAV_VOLTAR_SEM_RECARREGAR, CLIENTES_NAV_ID_EXCLUIDO, CLIENTES_NAV_LINHA_GRAVADA, CLIENTES_NAV_VOLTAR_SEM_RECARREGAR, CONSULTA_DATETIME_KEYS_ISO_PARA_FMT, CONSULTA_DOCUMENTO_GRID_KEYS_ISO_PARA_FMT, CONSULTA_FILTROS_SESSAO_USER, CONSULTA_GRID_OPTS_DATAS_PADRAO, CONSULTA_LISTA_CACHE_MAX_PAGINAS_DEFAULT, CONSULTA_LISTA_CACHE_NS_SEP, CONSULTA_LISTA_CACHE_TTL_MS_DEFAULT, CONSULTA_MOBILE_LAYOUT_MEDIA_QUERY, CONSULTA_MULTISELECT_LABEL_STUB, CONSULTA_OPTIONS_LISTAR_RESOLVER, CONSULTA_PEDIDOS_GRID_OPTS, CONSULTA_PHONE_GRID_KEYS_ISO_PARA_FMT, CONSULTA_PRESET_SELECT_EMPTY_OPTIONS_MESSAGE_DESKTOP, CONSULTA_PRESET_SELECT_EMPTY_OPTIONS_MESSAGE_MOBILE, CONSULTA_PRODUTOS_GRID_OPTS, CONSULTA_ROUTE_REUSE, CONSULTA_SERVIDOR_LISTA_QUERY_DEFAULTS, CONSULTA_TOPBAR_SLOT, CadastroBasePageComponent, CadastroCollectionGridColumnFormat, CadastroCollectionReferenciaHostService, CadastroCollectionRuntime, CadastroEnumOptionsRegistry, CadastroFieldRendererComponent, CadastroFieldRuntime, CadastroFieldsBaseComponent, CadastroFormDraftCacheService, CadastroFormLoadingSkeletonComponent, CadastroMetadataPageBase, CadastroMetadataPageComponent, CadastroMetadataPageServiceBase, CadastroMetadataPageShellLayoutComponent, CadastroMetadataPageStateBase, CadastroMetadataShellPageComponent, CadastroPadraoPageBase, CadastroReferenceRegistry, CadastroReferenciaDialogBridgeRegistry, CadastroReferenciaDialogHostComponent, CadastroReferenciaDialogService, CadastroReferenciaOpenMode, CadastroRuntime, CadastroRuntimeRegistry, CadastroSectionPanelLayout, CardListComponent, CepFieldComponent, CheckboxFieldComponent, ColorPickerFieldComponent, ComponentType, ConfirmDialogComponent, ConfirmDialogService, ConsoleLogComponent, ConsultaBasePageComponent, ConsultaCadastroFiltroDialogComponent, ConsultaCardCampoPapel, ConsultaCardFieldFormat, ConsultaCatalogBundleHelper, ConsultaFiltroPresetToolbarComponent, ConsultaFiltrosSessaoService, ConsultaGridColumnFormat, ConsultaGridOrderDirection, ConsultaListaMemoriaCacheService, ConsultaPadraoPageBase, ConsultaPageCache, ContainerLayoutSize, ContextMenuComponent, CpfCnpjFieldComponent, DEFAULT_STRUCTRA_SHELL_SCROLL_RESTORATION_OPTIONS, DROPDOWN_SEARCH_LOCAL_PAGE_SIZE, DashboardSectionComponent, DataCardComponent, DataGridComponent, DataListComponent, DataToolbarComponent, DateFieldComponent, DecimalFieldComponent, DetailsFieldComponent, DetailsViewComponent, DialogFooterDirective, DividerComponent, DrawerComponent, DrawerSide, DrawerSize, DropdownBaseComponent, DropdownMenuComponent, DropdownMultiOptionFieldBase, DropdownOptionFieldBase, DropdownSearchFieldComponent, ENM_STATUS_OPCOES_SELECT, EmptyStateComponent, EnmStatus, FIELD_MOBILE_LAYOUT_QUERY, FILE_PREVIEW_UNAVAILABLE_MESSAGE, FORM_CONTAINER_STATE_STORAGE_PREFIX, FORNECEDORES_NAV_ID_EXCLUIDO, FORNECEDORES_NAV_LINHA_GRAVADA, FORNECEDORES_NAV_VOLTAR_SEM_RECARREGAR, FieldCadastroRedirectButtonComponent, FileUploadFieldComponent, FileUploadType, FormActionsAlign, FormActionsComponent, FormColComponent, FormCollectionComponent, FormCollectionLayout, FormGroupComponent, FormGroupVariant, FormLayoutGap, FormRowAlign, FormRowComponent, FormRowJustify, FormSectionAlign, FormSectionComponent, FormSectionRadius, FormSectionVariant, FormTabComponent, FormTabsComponent, GridLayoutConsultaService, ImagePreviewPanelComponent, InputMaskFieldComponent, IntegerFieldComponent, LAYOUT_STACK_SIDE_BY_SIDE, LAYOUT_STACK_STACKED, LayoutStackAlign, LayoutStackComponent, LayoutStackDirection, LayoutStackItemAlign, LibDialogSize, ListItemComponent, LoadingDialogComponent, LoadingDialogService, MaskedTextFieldBase, MenuDividerComponent, MenuDropdownPlacement, MenuGroupComponent, MenuListComponent, MultiselectFieldComponent, NO_OP_CONSULTA_ROUTE_REUSE, NO_OP_CONSULTA_TOPBAR_SLOT, NgControlFieldDirective, OPS_BOOL, OPS_DATA, OPS_TEXTO, OPS_TEXTO_MULTISELECT, ORIGEM_CADASTRO_INLINE_PESSOA, OnboardingChecklistComponent, OverlayPlacement, PDF_IFRAME_VIEWER_HASH, PEDIDOS_NAV_ID_EXCLUIDO, PEDIDOS_NAV_LINHA_GRAVADA, PEDIDOS_NAV_VOLTAR_SEM_RECARREGAR, PERMISSION_GROUP_OUTROS_KEY, PERMISSION_GROUP_OUTROS_LABEL, PERMISSION_GROUP_OUTROS_ORDER, PESSOAS_NAV_LINHA_GRAVADA, PESSOAS_NAV_VOLTAR_SEM_RECARREGAR, PHONE_BR_LANDLINE_MASK, PHONE_BR_MOBILE_MASK, PRODUTOS_NAV_ID_EXCLUIDO, PRODUTOS_NAV_LINHA_GRAVADA, PRODUTOS_NAV_VOLTAR_SEM_RECARREGAR, StructraPageFooterComponent as PageFooterComponent, PasswordFieldComponent, PermissionGroupTabComponent, PermissionGroupTabsComponent, PhoneFieldComponent, PopoverBodyTemplateDirective, PopoverComponent, PopoverFooterTemplateDirective, PopoverTriggerDirective, ReferenceOptionPreset, STRUCTRA_ADMIN_ROUTE_REDIRECT_CACHE_PREFIX, STRUCTRA_ADMIN_ROUTE_REDIRECT_LOGIN_ID_CACHE_KEY, STRUCTRA_CADASTRO_INLINE_RESULT_KEY, STRUCTRA_CADASTRO_INLINE_RETURN_KEY, STRUCTRA_CONSULTA_FORCE_REFRESH_KEY, STRUCTRA_DEDICATED_BACK_TO_TOP_SELECTOR, STRUCTRA_GRID_LAYOUT_API_BASE_RESOLVER, STRUCTRA_GRID_LAYOUT_AUTH_HEADERS_RESOLVER, STRUCTRA_GRID_LAYOUT_TENANT_RESOLVER, STRUCTRA_INLINE_FORM_DRAFT_PENDING_PREFIX, STRUCTRA_MIDIA_PUBLIC_BASE_RESOLVER, STRUCTRA_MIDIA_UPLOAD_TRANSPORT, STRUCTRA_PAGE_CACHE_SCOPE_SEP, STRUCTRA_PAGE_FOOTER_PARTS, STRUCTRA_PAGE_STATE_ACTIVE_TAB_PREFIX, STRUCTRA_REPORT_DEFAULT_PAGE_SIZE, STRUCTRA_REPORT_TRANSPORT, STRUCTRA_SHELL_SCROLL_RESTORATION_OPTIONS, STRUCTRA_SHELL_TOPBAR_TITLE_SKELETON, STRUCTRA_SIMULATED_LOADING_DELAY_MS, STRUCTRA_THEME_DARK_CLASS, STRUCTRA_THEME_IDS, STRUCTRA_UI, ScriptEditorFieldComponent, SelectFieldComponent, SkeletonBlockComponent, SkeletonCardComponent, SkeletonFieldShellComponent, SkeletonListComponent, SkeletonStatCardComponent, SkeletonTableComponent, SkeletonTextComponent, StatCardComponent, StatusBadgeComponent, StructraAdminRouteRedirectPageBase, StructraBackToTopButtonComponent, StructraPageCacheService, StructraPageComponentOutletComponent, StructraPageComponentRegistry, StructraPageFooterComponent, StructraPageStateCacheService, StructraProgressOverlayComponent, StructraReportEmptyStateComponent, StructraReportFilterPanelComponent, StructraReportLoadingSkeletonComponent, StructraReportPageComponent, StructraReportPaginatorComponent, StructraReportTableComponent, StructraReportTreeComponent, StructraReportViewerComponent, ScriptEditorFieldComponent as StructraScriptEditorComponent, StructraShellScrollRestorationService, StructraShellTopbarSlotService, AppSidebarBottomActionsTemplateDirective as StructraSidebarBottomActionsDirective, AppSidebarFooterTemplateDirective as StructraSidebarFooterDirective, AppSidebarHeaderTemplateDirective as StructraSidebarHeaderDirective, AppSidebarUserInfoTemplateDirective as StructraSidebarUserInfoDirective, StructraSidebarUserPanelComponent, SwitchFieldComponent, THEME_PRIMARY_COLOR_LABEL_PT_BR, TOAST_REGISTRO_EXCLUIDO_SUCESSO, TableEmptyStateComponent, TableToolbarComponent, TextFieldComponent, TextareaFieldComponent, ThemeDirective, ToastHostComponent, ToastService, TooltipComponent, TooltipPanelTemplateDirective, TreeViewComponent, USUARIOS_CONSULTA_GRID_OPTS, USUARIOS_NAV_ID_EXCLUIDO, USUARIOS_NAV_LINHA_GRAVADA, USUARIOS_NAV_VOLTAR_SEM_RECARREGAR, VENDEDORES_NAV_ID_EXCLUIDO, VENDEDORES_NAV_LINHA_GRAVADA, VENDEDORES_NAV_VOLTAR_SEM_RECARREGAR, ValidationSummaryComponent, agruparCamposMetadataPorSecao, agruparPermissionTabs, anchoredOverlayPositions, aplicarNormalizacaoMultiselectIdsNoPartial, aplicarProdutoDtoNoFormulario, appendCadastroPageActiveTabQuery, appendPdfIframeViewerParams, applyCadastroCollectionArrayValidators, applyCadastroModoSenhaNovos, applyCollectionValidationSummaryNavigation, applyCollectionValueToFormArray, applyEntityToCadastroFormByMetadata, applyOptionalThemeHostClasses, applyPickedCalendarDate, buildCadastroFiltroDialogItensGridRows, buildCadastroMetadataShellRuntime, buildCadastroPageActiveTabPageKey, buildCadastroPageActiveTabPageKeyFromLayout, buildCadastroPageRuntime, buildCadastroRedirectReturnUrl, buildCadastroReferenciaDialogContext, buildCatalogoStubConsultaRuntime, buildConsultaConfirmDuplicarLinhaFromLayout, buildConsultaConfirmRemoverLinhaFromLayout, buildConsultaDefaultIsItemGuard, buildConsultaListaCacheKey, buildConsultaPageMetadataUnified, buildConsultaPageRuntime, buildDecimalBrDisplay, buildDecimalBrParseString, buildDefaultConsultaMapCardFromColunasGrid, buildEmptyStateOverlayHtml, buildFormContainerStateStorageKey, buildFormGroupFromCadastroCampos, buildHistoryStateAfterReturningFromNestedInlineChild, buildInlineReturnStateForChildCadastro, buildNovoFormDefaultsFromCampos, buildRouteReuseKeyFromAppPathname, buildRouteReuseKeyFromNovoRouterLink, buildStructraAdminRouteRedirectCacheKey, buildStructraAdminRouteRedirectChildUrl, buildStructraPageCacheCadastroInitKey, buildStructraPageCacheRouteScope, buildStructraPageFooterParts, buildStructraSidebarTemplateContext, buildValidationMetaFromCadastroCampos, cadastroBuildImageUploadMetadata, cadastroCampoBlocoEditorOcupaLinhaInteira, cadastroCampoBooleanOcupaLinhaInteira, cadastroCampoMetadataDtoFromPartial, cadastroCampoMetadataEhBoolean, cadastroCampoMetadataLarguraCompacta, cadastroCampoMetadataLarguraFixaCss, cadastroCampoReferenciaMetadataDtoFromPartial, cadastroCampoRuleMaxLength, cadastroCampoScriptEditorLanguage, cadastroCampoScriptEditorMinHeight, cadastroCampoValidacaoDtoFromPartial, cadastroCampoWrapperWidthCss, cadastroCollectionEditorGridColumns, cadastroCollectionMaxItemsValidator, cadastroCollectionMinItemsValidator, cadastroConfirmExcluirPartialFromLayout, cadastroContainerLayoutSizeDoRecord, cadastroContainerPathJoin, cadastroCrudMessagesDoFormLayout, cadastroDeclarativeSnapshotDtoFromPartial, cadastroEnsureSingleBooleanInCollection, cadastroFieldsPerRowDoRecord, cadastroFlattenContainerRaw, cadastroFormDraftEnabledDoLayout, cadastroFormGridColumns, cadastroFormLayoutComoRecord, cadastroFormLayoutDoBundle, cadastroFormLayoutDoRuntime, cadastroFormLayoutPreserveActiveTab, cadastroFormPageLayoutFromPartial, cadastroGcd, cadastroGetCollectionItemControl, cadastroGridColumnSpanForFieldIndex, cadastroGridDenominadorTracks, cadastroGridTemplateColumnsLinhaUnicaSeAplicavel, cadastroInferExtensaoArquivo, cadastroInferImageContentType, cadastroLcm, cadastroMetadataDtoParaValidacaoLike, cadastroNavKeysStructra, cadastroNomeArquivoDaUploadUrl, cadastroNormalizarUploadUrlPorPrefixo, cadastroPageActionDtoFromPartial, cadastroPageActionsPorRegiao, cadastroPageActiveTabToRestore, cadastroPageComponentDtoFromPartial, cadastroPageComponentsPorRegiao, cadastroPageIdentityDoFormLayout, cadastroPageOverlayDtoFromPartial, cadastroPageShellAtivo, cadastroPageShellTabsKeepAliveFromLayout, cadastroPageTabDtoFromPartial, cadastroPageTabsOrdenados, cadastroPainelMaxWidthCss, cadastroRawBooleanDeep, cadastroRawNumber, cadastroRawString, cadastroReferenceEntryFromListarService, cadastroReferenciaOpenModeFromWire, cadastroReindexarCollectionOrdem, cadastroResolveId, cadastroSecaoFormGroupDense, cadastroSecaoPersisteExpandedState, cadastroSecaoRenderizaInlineDentroDoPai, cadastroSecaoSegmentosIntercalados, cadastroSecaoSegmentosParaRender, cadastroSecaoUsaFormGroup, cadastroSecaoUsaFormGroupComoBlocoVisual, cadastroSecaoUsaSuperficieDeclarativa, cadastroSingleBooleanCollectionBinding, cadastroTitulosEfectivosDoFormLayout, cadastroToastTitleEfectivoDoFormLayout, cadastroToolbarButtonDtoFromPartial, cadastroToolbarVisibilityDoFormLayout, cadastroUseBackToTopButtonFromLayout, cadastroValidationSummaryFlagsDoRecord, cadastroValidationSummaryPinnedFromFlags, cadastroWireCollectionOrdemReindexOnAdd, cadastroWireCollectionOrdemReindexOnAddRemove, cadastroWireCollectionOrdemReindexOnRemove, campoMetadataVisivelNoModo, caretIndexFromIntegerDigitCount, caretIndexFromSemantic, carregarOpcoesMultiselectViaSpec, cepMaskCompleteValidator, clearRequiredValidatorsOnReadOnlyCadastroFields, clearStructraCadastroInlineReturnSessionCacheForTests, clearStructraCadastroSessionStorageOnLogout, coerceDecimalPtBr, coerceReportBoolean, collectValidationSummaryItems, colunasGridTemFormatacaoDeclarativa, computeReferenciaHasMore, consoleLogLevelClass, consultaCampoMetadataDtoFromPartial, consultaCardCampoDtoFromPartial, consultaFiltroValorDataSomenteDia, consultaGridColunaDtoFromPartial, consultaGridColunaKeyParaCampoLinha, consultaGridConfigDtoFromPartial, consultaPassaItem, consultaPassaTodosItens, consultaUsuariosMetadataReplyFromPartial, consumeCadastroInlineFormDraftPendingRestore, consumirResultadoCadastroInlineCampoPessoaId, consumirResultadoCadastroInlineCampoReferencia, cpfCnpjMaskCompleteValidator, createCadastroDialogActivatedRoute, createCadastroMetadataPageConfig, createCadastroPadraoConfig, createCadastroRuntime, createCollectionFormArray, createCollectionItemFormGroup, createConsultaListaItemGuardFromFiltroUi, createConsultaOptionsListarResolver, createConsultaPadraoRuntime, createConsultaPresetSelectEmptyOptionsMessageSignal, createConsultaPresetStorageApi, createGrpcSaveRequestMapper, createInlineHostNavigation, createMapCardFromConsultaColunasGrid, createMapGridRowFromConsultaColunasGrid, createSaveRequestFromPartialMapper, criarDraftInlinePessoa, decimalPtBrNaoNegativoValidator, decimalPtBrToNullableNumber, defaultIsConsultaListItemMinimo, defaultParseLinhaGravadaJson, deleteConfirmPageConfigFromPartial, deriveCadastroTituloEditar, deriveConsultaListaItemGuardPropsFromFiltroUi, duplicateConfigFromLayout, duplicatePageConfigFromPartial, enrichCadastroReferenciaDialogPageConfig, ensureCadastroCollectionMinItems, ensureCadastroFormControlsFromMetadata, escapeHtml, evaluateStructraPageVisibleExpression, executarConsultaServidorComPreset, extractConsultaListaCacheNamespace, extractDecimalBrParts, fileIsLikelyImage, fileMatchesAccept, filtrarSecoesMetadataPorModo, filtrarUiSelectOptionsPainelComValorPersistente, filtrarUiSelectOptionsPorQuery, findCadastroCampoByKey, findFirstReportLeafId, findReportTreeLabel, fixedDigitsMaskCompleteValidator, flattenCadastroMetadataSecoes, fmtDataPt, fmtDocumentoCelulaConsultaGrid, formatAcceptForDisplay, formatDateTimePtBr, formatDecimalBr, formatDocumentoPessoaParaExibicao, formatFileSizeBytes, formatIntegerThousandsBr, formatMaskDigits, formatPhoneBr, formatUiFieldDateValue, getFilePreviewKind, getStructraActionsByGroup, getThemeClass, getThemeClassList, getThemePrimaryColorLabelPtBr, getThemeTokenClass, hexParaColorInput, inferCadastroItemFieldsFromPlainRows, inferCadastroListaUrlFallback, initialCadastroControlValue, injectEffectiveThemeId, isCadastroDuplicateNavigation, isCollectionField, isCollectionLikeField, isConsultaCardAutoSubtitleExcluded, isLegacyDarkThemeId, isLegacyFormContainerStateStorageKey, isLegacyNomeDocumentoReferencePreset, isReadonlyCollectionField, isReportBooleanColumn, isReportNowrapColumn, isValidPhoneBr, libDialogPanelClasses, listaUrlFromRotaCadastro, listarItensCadastroReferencia, listarTodosPaginado, loadPresetsJson, loadStructraAdminRouteRedirectTarget, mapCadastroFormRawToPayload, mapConsultaGridColunasParaDataGrid, mapConsultaMetadataParaFiltroUi, mapErroTransporteParaMensagem as mapErroListaDefault, mapErroTransporteParaMensagem, mapEstadosToOptions, mapFiltroSalvoParaConsultaPreset, mapListarItensParaMultiselectOpcoes, mapReportTreeToTreeViewNodes, markCadastroInlineFormDraftPendingRestore, maskDigitCount, mergeCadastroConfirmExcluir, mergeConsultaGridRowFormattingFromColunasGrid, mergeConsultaMultiselectOpcoesComSeleccionados, mergeDocumentoFmtNaLinhaConsulta, mergeMapConsultaGridColunasOptsComColumnFormat, mergeNovoIdEmListaSelecionada, mergeStructraShellScrollRestorationOptions, metadataCampoParaChaveLinhaCliente, modoPermissaoReferenciaFromWire, montarFiltrosGrpcPreset, montarFiltrosServidorPreset, montarHierarquiaSecoesMetadata, multiselectIdListRequiredValidator, multiselectMaxItemsValidator, navegarVoltarLista, navegarVoltarListaComIdRemovido, navegarVoltarListaComLinha, navigateCadastroDuplicate, navigateCommandsFromRotaAlterar, navigateCommandsFromRotaNovo, nomeSalvarParaPayloadComPessoa, normalizarArvoreSecoesMetadata, normalizarHexCor, normalizarItensParaGravarServidorCadastro, normalizarListaIdsMultiselect, normalizarOperadorConsultaParaEnvioServidor, normalizarRotaReferencia, normalizarStructraAction, normalizarStructraActionGroup, normalizarStructraActionGroups, normalizeCadastroAppPath, normalizeCadastroCampoMetadataWire, normalizeCadastroInitRouteIdParam, normalizeCadastroItemEditorDecimalControls, normalizeCadastroReferenciaDialogRotaKey, normalizeCadastroRouteForContainerState, normalizeConsoleLogLevel, normalizeFormDateValue, normalizePhoneBr, normalizeStructraAdminPath, normalizeStructraTheme, novoPathCommandsFromRota, onlyDigits, operadorConsultaComValorUnicoComparacao, operadorConsultaDatetimeUsaDatePicker, operadoresConsultaCampo, operadoresPorTipo, ordenarFiltroItens, ordenarStructraActions, parseDecimalBr, parseIntegerString, parseUiFieldDateValue, patchFormFromEntidadeRecord, permissionTabsUsamGruposVerticais, permissoesReferenciaMetadata, phoneBrDynamicMaskCompleteValidator, phoneBrMaskCompleteValidator, phoneBrMaskFromDigits, pickCadastroPageActiveTabExplicit, pickTabKeyLinkedToSummaryItems, precisaValor, precisaValorFinal, provideAppPageFooter, provideStructraCadastroReferenciaDialogRoot, provideStructraPageFooter, provideStructraShellScrollRestoration, qtdCriteriosPresetParaSkeleton, readCadastroDuplicateSourceId, readCadastroPageActiveTabFromNavigationState, readCadastroPageActiveTabFromUrl, readFormContainerCollapsedFromStorage, readStructraAdminRouteRedirectTarget, readStructraCadastroInlineReturn, referenciaAbreEmDialog, referenciaOpenModeRaw, referenciaUsesLegacyRegistryMapper, registerCadastroReferenceEntries, registerCadastroReferenceListSources, registerCadastroReferenciaDialogBridges, registerStructraBuiltinPageComponents, replaceProdutoCadastroFormControls, reportColumnWidthStyle, reportTableHasFixedWidths, resetStructraCadastroReferenciaDialogRootForTests, resolveCadastroCollectionMinItems, resolveCadastroListaUrlParaNavegacao, resolveCadastroPageActiveTabKey, resolveCadastroReferenciaMapOptions, resolveConsultaEditActionLabelFromGridConfig, resolveConsultaListaQuerySliceFromGridConfig, resolveConsultaNavKeysFromPageLayout, resolveConsultaNovoRouterLinkFromLayout, resolveConsultaRouteEditBaseFromLayout, resolveConsultaToastTitleLista, resolveControlAtPath, resolveFormContainerCollapsed, resolveReferenciaOpcaoLabel, resolveStructraAdminMenuUrl, resolveStructraPageCacheCadastroScope, resolveStructraPageInputExpression, resolveStructraPageInputs, resolveStructraShellScrollContainer, resolverAcoesReferenciaPorRota, resolverValorOpcaoPorRotuloNormalizado, resumoValorMultiselectFiltro, rotaListaReferencia, rotuloEnmStatus, rotuloNomeDocumentoLista, rotuloOperadorConsulta, rotuloPessoaLista, runStructraSimulatedLoadingDelay, sanitizeDecimalBrInput, sanitizeIntegerDigits, sanitizeRecordForCadastroDuplicate, savePresetsJson, scheduleRemoteCollectionHydrationAfterSectionExpand, secaoMetadataEhContainerPlain, secaoTemConteudoVisivel, secaoTemCorpoParaRender, sectionHasVisibleInvalid, semanticCaretAt, semanticIntegerDigitCountLeft, serializeCollectionFormArray, shouldDeferInitialRemoteCollectionLoad, shouldSkipCadastroPageActiveTabCacheWrite, shouldSkipStructraAdminMenuNavigation, stripStructraCadastroInlineResultFromHistory, stripToDigits, structraActionButtonVariant, structraCadastroInlineResultTemIdSalvo, structraCadastroInlineResultTemReferenciaExcluida, structraElementScrolls, structraHasValue, structraIsFilledString, structraIsFormGroup, structraIsValidPort, structraParseNumberOrNull, structraReadFormValue, structraReadNestedValue, structraTrimString, subscribeMarkForCheckOnInvalidUiRefresh, subtreeHasVisibleInvalid, syncStructraCadastroInlineReturnSessionCache, tabWarningFromLinkedSummaryItems, tipoCampoMetadataParaUi, tipoValorApi, toCadastroReferenceListPageResult, toConsoleLogLineView, toConsoleLogLineViews, toUiSelectOptionsFromMetadata, uiSelectOpcaoIdNomeDocumento, uiSelectOpcoesDePessoas, validationLikeFromCampoMetadata, validatorsFromCampo, writeFormContainerCollapsedToStorage };
12294
+ export type { AdaptiveDataViewMode, AdminLoginShellConfig, AdminLoginSubmitPayload, StructraSidebarEmpresaContext as AdminSidebarEmpresaContext, StructraSidebarUserView as AdminSidebarUserView, AlertAction, AlertType, AppThemeId, AppThemeOption, ApplyCadastroModoSenhaOptions, BreadcrumbItem, BuildCadastroMetadataShellRuntimeOptions, BuildCadastroPageRuntimeOptions, CadastroActionStateDto$1 as CadastroActionStateDto, CadastroAutoMapFormValueConfig, CadastroCampoContaNaGrelhaFn, CadastroCampoMetadataDto, CadastroCampoMetadataMergeInput, CadastroCampoReferenciaMetadataDto, CadastroCampoSelectOptionDto, CadastroCampoValidacaoDto, CadastroCampoValidacaoLike, CadastroCollectionBinding, CadastroCollectionBridge, CadastroCollectionEditingItemControlsChangeEvent, CadastroCollectionEditingItemControlsChangeOptions, CadastroCollectionItemEvent, CadastroCollectionItemFieldsChangeEvent, CadastroCollectionItemFieldsChangeOptions, CadastroCollectionItemsChangeEvent, CadastroCollectionPageReplyWire, CadastroCollectionPageRequestWire, CadastroCollectionPagingPort, CadastroCollectionPagingUi, CadastroCollectionSaveHandler, CadastroCollectionStateDto, CadastroConfirmExcluirPartial, CadastroCrudMessagesResolved, CadastroDeclarativeSnapshotDto, CadastroDuplicateActionConfig, CadastroEnsureSingleBooleanInCollectionOptions, CadastroFieldChangeEvent, CadastroFieldEventBase, CadastroFieldKey, CadastroFieldRegistration, CadastroFieldSelectEvent, CadastroFieldSimpleEvent, CadastroFiltroDialogRuntimeSlice, CadastroFormPageLayout, CadastroHeaderSecondaryAction, CadastroImageUploadMetadata, CadastroImageUploadMetadataOptions, CadastroInferExtensaoArquivoOptions, CadastroInferImageContentTypeOptions, CadastroInlineHostNavigationConfig, CadastroListSelectBinding, CadastroMetadataCamposReplyLike, CadastroMetadataPageCadastro, CadastroMetadataPageServiceConfig, CadastroMetadataPageShellCallbacks, CadastroMetadataPageStateConfig, CadastroMetadataPageVm, CadastroMetadataSecao, CadastroMetadataServiceConfig, CadastroMetadataServicePort, CadastroMetadataShellRuntime, CadastroMetadataView, CadastroModo, CadastroMultiselectBinding, CadastroPadraoGrpcService, CadastroPageActionDto, CadastroPageActiveTabResolveInput, CadastroPageComponentDto, CadastroPageConfig, CadastroPageIdentityFallback, CadastroPageNavKeysConfig, CadastroPageOverlayDto, CadastroPageRuntime, CadastroPageSenhaConfig, CadastroPageTabDto, CadastroPessoaOpcaoMin, CadastroRawBooleanDeepOptions, CadastroReferenceListPageParams, CadastroReferenceListPageResult, CadastroReferenceListarService, CadastroReferenceRegistryEntry, CadastroReferenciaAcoesPermitidas, CadastroReferenciaDialogBridgeEntry, CadastroReferenciaDialogBridgeFactory, CadastroReferenciaDialogCloseReason, CadastroReferenciaDialogCompletePayload, CadastroReferenciaDialogContext, CadastroReferenciaDialogOpenOptions, CadastroReferenciaDialogOpenRequest, CadastroReferenciaOpenModeWireRef, CadastroReferenciaPermissoesMetadata, CadastroReferenciaRouteAccess, CadastroReindexarCollectionOrdemOptions, CadastroRuntimeDeps, CadastroRuntimeOptions, CadastroSearchSelectBinding, CadastroSearchSelectRedirectSuffix, CadastroSearchSelectReferenciaDialog, CadastroSecaoSegmento, CadastroSingleBooleanCollectionBindingOptions, CadastroTitulosFallback, CadastroToolbarButtonDto, CadastroToolbarVisibilityResolved, CadastroValidationUi, CardItemBooleanField, CardItemMetaField, CardItemView, CardListDataMode, CardListHeaderPosition, CardListMapFn, CatalogoStubConsultaConfig, CatalogoStubListaItem, ConfirmDialogData, ConfirmDialogVariant, ConsoleLogLevel, ConsoleLogLine, ConsoleLogLineView, ConsultaBaseConfig, ConsultaCampoDef, ConsultaCampoMetadataDto, ConsultaCardCampoDto, ConsultaCatalogBundleConfig, ConsultaCatalogBundleSessaoPort, ConsultaCatalogEntityBindings, ConsultaCatalogInitCarregada, ConsultaCrudAdapterConfig, ConsultaEnumSelectOptionDto, ConsultaFiltroCampo, ConsultaFiltroItem, ConsultaFiltroMatchAdapters, ConsultaFiltroPreset, ConsultaFiltroSalvoDto, ConsultaFiltroSalvoItemDto, ConsultaFiltroUiFragment, ConsultaFiltroValorTipo, ConsultaFiltrosBundleSessao, ConsultaFiltrosChromeVolatil, ConsultaFiltrosSessaoConsultaPadraoApi, ConsultaFiltrosSessaoUserLike, ConsultaFiltrosSessaoVolatilApi, ConsultaFiltrosVolatilHandlers, ConsultaGridColunaDto, ConsultaGridColunaDtoLike, ConsultaGridConfigDto, ConsultaInitCarregada, ConsultaListaCacheKeyParts, ConsultaListaCachePayload, ConsultaListaMemoriaCacheStoreOpts, ConsultaListaQueryParamsLike, ConsultaListaResultadoLike, ConsultaListaServidorQuerySlice, ConsultaMapCardLinha, ConsultaMetadataCampo, ConsultaMetadataReplyLike, ConsultaMetadataServicePort, ConsultaMultiselectOpcoesRemotasSpec, ConsultaOperadorOption, ConsultaOptionsListarContrato, ConsultaOptionsListarResolver, ConsultaPadraoGrpcServiceLike, ConsultaPadraoNavigateLike, ConsultaPadraoToastLike, ConsultaPageCacheEntry, ConsultaPageMetadataUnified, ConsultaPageRuntime, ConsultaPageRuntimeDeps, ConsultaRouteReusePort, ConsultaServidorExecutorOpts, ConsultaServidorListaReply, ConsultaServidorPort, ConsultaServidorQueryParams, ConsultaTopbarSlotPort, ConsultaUsuariosMetadataReply, ConsultaValorTipo, CreateCadastroMetadataPageConfigOptions, CreateCadastroPadraoConfigOptions, CreateConsultaPadraoRuntimeOptions, CreateGrpcSaveRequestMapperOptions, CreateSaveRequestFromPartialMapperOptions, CrudConsultaServicePort, DataGridColumn, DataGridPaginationChangeEvent, DeleteConfirmPageConfig, DetailsViewItem, DropdownListBindings, DropdownSearchPageRequested, DuplicatePageConfig, FieldCommonInputs, FieldSize, FilePreviewKind, FiltroItemEntrada, FiltroItemEntradaGenerico, FiltroItemGridRow, FiltroItemSalvoDto, FiltroSalvo, FormContainerStateKeyParts, FormTabValidationLinkConfig, FormTabsVariant, GridLayoutConsultaApiDto, GridLayoutConsultaPersistedPayload, GrpcSaveRequestFactory, InitConsultaReply, ListarTodosPaginadoParams, LoadingDialogData, MapConsultaGridColunasOpts, MenuItemAction, MenuItemDivider, MenuItemGroup, MenuItemKind, MenuItemSubmenu, MenuLeafItem, MenuNodeItem, ModoPermissaoReferencia, MontarFiltrosGrpcPresetOptions, MontarFiltrosServidorPresetOptions, OnboardingChecklistProgress, OnboardingChecklistStep, OptionsSourceServicePort, PatchFormFromEntidadeOptions, PermissionGroupTabBucket, PermissionGroupTabDescriptor, PermissionGroupTabGroup, ReportColumnMeta, ReportColumnWidthFields, ReportFilterMeta, ReportFiltroItemEntrada, ReportHeader, ReportMetadata, ReportPesquisarRequest, ReportResult, ReportSection, ReportSectionColumn, ReportSectionTable, ReportTotal, ReportTreeNode, ResolveStructraAdminMenuUrlOptions, SalvarFiltroConsultaRequest, SalvarFiltroPresetAsyncArgs, SaveRequestFromPartialFactory, ScriptEditorLanguage, SelectPageRequested, SkeletonFieldShellVariant, StatCardDeltaTone, StatusBadgeSize, StatusBadgeVariant, StructraAction, StructraActionButtonVariant, StructraActionGroup, StructraActionGroupWire, StructraActionId, StructraActionVariant, StructraActionWire, StructraAdminRouteRedirectCacheOptions, StructraAdminRouteRedirectLoadOptions, StructraCadastroInlineResultState, StructraCadastroInlineReturnState, StructraFormValueSource, StructraGridLayoutApiBaseResolverFn, StructraGridLayoutAuthHeadersResolverFn, StructraGridLayoutTenantResolverFn, StructraMidiaUploadResult, StructraMidiaUploadTransportContext, StructraMidiaUploadTransportFn, StructraPageCacheGetOrLoadOptions, StructraPageCacheSetOptions, StructraPageFooterConfig, StructraPageInputContext, StructraReportTransport, StructraShellScrollRestorationMergedOptions, StructraShellScrollRestorationOptions, StructraSidebarContext, StructraSidebarEmpresaContext, StructraSidebarTemplateContext, StructraSidebarUserView, StructraTheme, TitulosFromMetadataConfig, ToastInstance, ToastShowOptions, ToastType, ToastVerticalPosition, TreeViewNode, TreeViewSelectEvent, UiFieldInputTextAlign, UiSelectOption, ValidationFieldMeta, ValidationSummaryItem, ValidationSummarySize, ValidationSummaryVariant, ValoresConsultaPresetUi };