structra-ui 0.2.63 → 0.2.66

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}. */
@@ -6369,6 +6906,110 @@ interface ConsultaPageRuntime {
6369
6906
  title: string;
6370
6907
  message: (nome: string) => string;
6371
6908
  };
6909
+ /**
6910
+ * Quando `true`, a página base não altera título/subtítulo/end da topbar da shell
6911
+ * (ex.: consulta embutida na página de relatórios).
6912
+ */
6913
+ omitirTopbarShellOverride?: boolean;
6914
+ }
6915
+
6916
+ /** Separador interno entre scope e chave lógica. */
6917
+ declare const STRUCTRA_PAGE_CACHE_SCOPE_SEP = "\u001F";
6918
+ interface StructraPageCacheGetOrLoadOptions {
6919
+ ttlMs?: number;
6920
+ force?: boolean;
6921
+ scope?: string;
6922
+ }
6923
+ interface StructraPageCacheSetOptions {
6924
+ ttlMs?: number;
6925
+ scope?: string;
6926
+ }
6927
+ /**
6928
+ * Cache genérico em memória para páginas/rotas administrativas.
6929
+ * Suporta TTL opcional, isolamento por scope (rota/tenant) e deduplicação de loaders simultâneos.
6930
+ * Perdido ao recarregar a aplicação (F5).
6931
+ */
6932
+ declare class StructraPageCacheService {
6933
+ private readonly entries;
6934
+ private readonly inFlight;
6935
+ getOrLoad<T>(key: string, loader: () => Observable<T>, options?: StructraPageCacheGetOrLoadOptions): Observable<T>;
6936
+ get<T>(key: string, scope?: string): T | null;
6937
+ set<T>(key: string, value: T, options?: StructraPageCacheSetOptions): void;
6938
+ invalidate(key: string, scope?: string): void;
6939
+ invalidateScope(scope: string): void;
6940
+ clear(): void;
6941
+ /** Presença bruta (ignora TTL) — útil para testes. */
6942
+ hasEntry(key: string, scope?: string): boolean;
6943
+ private buildScopedKey;
6944
+ private readEntry;
6945
+ private writeEntry;
6946
+ private deleteEntry;
6947
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraPageCacheService, never>;
6948
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<StructraPageCacheService>;
6949
+ }
6950
+ /**
6951
+ * Monta scope estável para cache por rota administrativa (ex.: `/home/personalizacao`).
6952
+ * Quando informado, inclui tenant/empresa para isolar sessões multi-tenant.
6953
+ */
6954
+ declare function buildStructraPageCacheRouteScope(routePath: string, tenantId?: string | null): string;
6955
+ /** Chave lógica para cache de `initCadastro` por entidade e id de rota. */
6956
+ declare function buildStructraPageCacheCadastroInitKey(entityKey: string, routeId: string): string;
6957
+ /** Scope efectivo combinando scope extra (tenant) com a rota do cadastro. */
6958
+ declare function resolveStructraPageCacheCadastroScope(routePath: string, pageCacheScope?: string, tenantId?: string | null): string;
6959
+
6960
+ /** Prefixo lógico para chaves de redirect administrativo em {@link StructraPageCacheService}. */
6961
+ declare const STRUCTRA_ADMIN_ROUTE_REDIRECT_CACHE_PREFIX = "admin-route-redirect";
6962
+ /** Chave típica para redirect de personalização/login (`login-id`). */
6963
+ declare const STRUCTRA_ADMIN_ROUTE_REDIRECT_LOGIN_ID_CACHE_KEY: string;
6964
+ declare function buildStructraAdminRouteRedirectCacheKey(logicalKey: string): string;
6965
+ declare function normalizeStructraAdminPath(url: string): string;
6966
+ /**
6967
+ * Evita navegação redundante quando o utilizador clica de novo no mesmo item de menu
6968
+ * (ex.: já está em `/home/personalizacao/:id` e o menu aponta para `/home/personalizacao`).
6969
+ */
6970
+ declare function shouldSkipStructraAdminMenuNavigation(menuUrl: string, currentPath: string): boolean;
6971
+ interface ResolveStructraAdminMenuUrlOptions {
6972
+ /** Quando o menu aponta para rota “vazia” que redireciona (ex.: personalização), usa destino já resolvido. */
6973
+ resolveCachedChildPath?: () => string | null | undefined;
6974
+ }
6975
+ /** Resolve URL final do menu, preferindo destino filho em cache quando disponível. */
6976
+ declare function resolveStructraAdminMenuUrl(menuUrl: string, options?: ResolveStructraAdminMenuUrlOptions): string;
6977
+ interface StructraAdminRouteRedirectCacheOptions {
6978
+ cacheKey: string;
6979
+ routePath: string;
6980
+ tenantId?: string | null;
6981
+ }
6982
+ /** Lê destino de redirect já resolvido (sem ir à rede). */
6983
+ declare function readStructraAdminRouteRedirectTarget(pageCache: StructraPageCacheService, options: StructraAdminRouteRedirectCacheOptions): string | null;
6984
+ /** Monta URL filha padrão (`/base/:id`) a partir do id em cache. */
6985
+ declare function buildStructraAdminRouteRedirectChildUrl(routePath: string, targetId: string | null | undefined): string | null;
6986
+ interface StructraAdminRouteRedirectLoadOptions extends StructraAdminRouteRedirectCacheOptions {
6987
+ loader: () => Observable<string | null>;
6988
+ force?: boolean;
6989
+ }
6990
+ /** Carrega destino de redirect com cache em memória (dedupe + TTL opcional). */
6991
+ declare function loadStructraAdminRouteRedirectTarget(pageCache: StructraPageCacheService, options: StructraAdminRouteRedirectLoadOptions): Observable<string | null>;
6992
+
6993
+ /**
6994
+ * Base para páginas vazias que resolvem um id via backend e redirecionam para rota filha.
6995
+ * O resultado fica em {@link StructraPageCacheService} — reabrir o menu não refaz a RPC.
6996
+ */
6997
+ declare abstract class StructraAdminRouteRedirectPageBase implements OnInit {
6998
+ protected readonly router: Router;
6999
+ protected readonly pageCache: StructraPageCacheService;
7000
+ /** Rota base do redirect (ex.: `/home/personalizacao`). */
7001
+ protected abstract readonly redirectRoutePath: string;
7002
+ /** Chave lógica em cache (ex.: {@link STRUCTRA_ADMIN_ROUTE_REDIRECT_LOGIN_ID_CACHE_KEY}). */
7003
+ protected abstract readonly redirectCacheKey: string;
7004
+ protected abstract readonly fallbackNavigateUrl: string;
7005
+ /** Loader que devolve o id de destino (ou null quando inválido). */
7006
+ protected abstract loadRedirectTarget(): Observable<string | null>;
7007
+ /** Scope multi-tenant opcional para isolar cache por empresa. */
7008
+ protected resolveRedirectTenantId(): string | null | undefined;
7009
+ ngOnInit(): void;
7010
+ protected runRedirect(): Promise<void>;
7011
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraAdminRouteRedirectPageBase, never>;
7012
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StructraAdminRouteRedirectPageBase, never, never, {}, {}, never, never, true, never>;
6372
7013
  }
6373
7014
 
6374
7015
  /** Separador entre namespace da consulta e corpo JSON estável da chave composta. */
@@ -6473,6 +7114,115 @@ declare class ConsultaListaMemoriaCacheService {
6473
7114
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<ConsultaListaMemoriaCacheService>;
6474
7115
  }
6475
7116
 
7117
+ /** Payload persistido em `str_layout_json` (versão + estado de colunas AG Grid). */
7118
+ interface GridLayoutConsultaPersistedPayload {
7119
+ version: number;
7120
+ columnState: unknown[];
7121
+ savedAt: string;
7122
+ }
7123
+ interface GridLayoutConsultaApiDto {
7124
+ tela: string;
7125
+ grid: string;
7126
+ layoutJson: string;
7127
+ }
7128
+ type StructraGridLayoutTenantResolverFn = () => string | null | undefined;
7129
+ type StructraGridLayoutApiBaseResolverFn = () => string;
7130
+ type StructraGridLayoutAuthHeadersResolverFn = () => Record<string, string>;
7131
+ /**
7132
+ * Tenant atual para chave de cache em memória (`tenant:tela:grid`).
7133
+ * A app deve fornecer (ex.: `SessionContextService.tenantAtualId`).
7134
+ */
7135
+ declare const STRUCTRA_GRID_LAYOUT_TENANT_RESOLVER: InjectionToken<StructraGridLayoutTenantResolverFn>;
7136
+ /** Base URL da API REST (sem barra final). Omisso: `window.location.origin`. */
7137
+ declare const STRUCTRA_GRID_LAYOUT_API_BASE_RESOLVER: InjectionToken<StructraGridLayoutApiBaseResolverFn>;
7138
+ /** Headers de autenticação para GET/PUT do layout (ex.: JWT). */
7139
+ declare const STRUCTRA_GRID_LAYOUT_AUTH_HEADERS_RESOLVER: InjectionToken<StructraGridLayoutAuthHeadersResolverFn>;
7140
+
7141
+ declare class GridLayoutConsultaService {
7142
+ private readonly http;
7143
+ private readonly tenantResolver;
7144
+ private readonly apiBaseResolver;
7145
+ private readonly authHeadersResolver;
7146
+ private readonly memoryCache;
7147
+ /** Incrementado a cada gravação local — impede GET async de apagar layout mais recente. */
7148
+ private readonly layoutRevisionByKey;
7149
+ /** Chaves já consultadas no backend nesta sessão (evita GET repetido ao navegar). */
7150
+ private readonly backendFetchedKeys;
7151
+ private readonly inFlightByKey;
7152
+ private saveTimer;
7153
+ private tenantRetryTimer;
7154
+ /** Re-tenta GET quando o tenant ainda não hidratou (F5) e sessionStorage não tinha layout. */
7155
+ private tenantRetryGetLayoutTimer;
7156
+ private pendingGetLayout;
7157
+ private pendingSave;
7158
+ /** Detecta transição `_` → tenant real para migrar cache e retomar PUT pendente. */
7159
+ private resolvedTenantForCache;
7160
+ /** Ouve quando layout entra em cache (GET backend / migração tenant) — grelha reaplica no F5. */
7161
+ private readonly layoutCacheUpdatedListeners;
7162
+ /** Subscrição para reaplicar layout quando o GET async concluir (ex.: F5 com tenant a hidratar). */
7163
+ onLayoutCacheUpdated(listener: (cacheKey: string) => void): () => void;
7164
+ /**
7165
+ * Leitura síncrona: memória → sessionStorage. Não dispara HTTP.
7166
+ * Usar antes do primeiro paint da grelha para aplicar colunas sem flicker.
7167
+ */
7168
+ getCachedLayout(tela: string, grid?: string): GridLayoutConsultaPersistedPayload | null;
7169
+ /** Indica se o backend já foi consultado nesta sessão para `tenant:tela:grid`. */
7170
+ hasFetchedFromBackend(tela: string, grid?: string): boolean;
7171
+ /** Compara chave interna `tenant:tela:grid` com tela/grid visíveis ao consumidor (ex.: listener do data-grid). */
7172
+ cacheKeyMatchesTelaGrid(cacheKey: string, tela: string, grid?: string): boolean;
7173
+ getLayout(tela: string, grid?: string): Promise<GridLayoutConsultaPersistedPayload | null>;
7174
+ saveLayout(tela: string, grid: string, layoutJson: string): void;
7175
+ saveLayoutFromColumnState(tela: string, grid: string, columnState: unknown[]): void;
7176
+ private fetchLayoutFromBackend;
7177
+ /**
7178
+ * Após GET async: preserva layout local/gravação pendente se o utilizador alterou colunas entretanto.
7179
+ * `undefined` = aplicar resposta remota normalmente.
7180
+ */
7181
+ private resolveLocalLayoutAfterFetch;
7182
+ private isRemoteLayoutNewer;
7183
+ private bumpLayoutRevision;
7184
+ private getLayoutRevision;
7185
+ private markBackendFetched;
7186
+ private storeLayout;
7187
+ private notifyLayoutCacheUpdated;
7188
+ private scheduleDebouncedSave;
7189
+ private flushSave;
7190
+ /** Re-tenta GET quando sessionStorage estava vazio e o tenant ainda não hidratou (F5). */
7191
+ private scheduleTenantRetryGetLayout;
7192
+ /** Re-tenta PUT quando o tenant ainda não hidratou (F5) ou após falha transitória. */
7193
+ private scheduleTenantRetryFlush;
7194
+ private normalizeKeys;
7195
+ private buildCacheKey;
7196
+ private resolveTenantIdForCache;
7197
+ private tenantReadyForBackend;
7198
+ private noteTenantResolution;
7199
+ /**
7200
+ * Migra entradas gravadas com tenant `_` para o tenant real quando a sessão hidrata (F5).
7201
+ * Preserva layout em memória/sessionStorage e retoma PUT pendente.
7202
+ */
7203
+ private migratePlaceholderCacheToRealTenant;
7204
+ private persistLastTenantId;
7205
+ private readLastTenantId;
7206
+ private sessionStorageKey;
7207
+ /**
7208
+ * Lê layout em sessionStorage pela chave exacta ou, em F5, por sufixo `:tela:grid`
7209
+ * quando o tenant ainda não estava disponível na 1.ª leitura.
7210
+ */
7211
+ private readSessionStorageForLayout;
7212
+ private scanSessionStorageByTelaGrid;
7213
+ /**
7214
+ * `undefined` = ausente em sessionStorage; `null` = layout vazio persistido.
7215
+ */
7216
+ private readSessionStorage;
7217
+ private writeSessionStorage;
7218
+ private removeSessionStorage;
7219
+ private apiUrl;
7220
+ private authHeaders;
7221
+ private parseLayoutJson;
7222
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridLayoutConsultaService, never>;
7223
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<GridLayoutConsultaService>;
7224
+ }
7225
+
6476
7226
  /**
6477
7227
  * Vista unificada da metadata da página (consulta + títulos/layout + snapshot opcional do cadastro declarativo).
6478
7228
  * Piloto: Pessoa — outras entidades podem omitir {@link ConsultaPageMetadataUnified.cadastro}.
@@ -6640,8 +7390,11 @@ interface ConsultaCrudAdapterConfig<TItem, TRow extends Record<string, unknown>,
6640
7390
  itemPassaConsulta?: ConsultaPageRuntime['itemPassaConsulta'];
6641
7391
  editar?: (row: Record<string, unknown>) => void;
6642
7392
  duplicar?: (row: Record<string, unknown>) => void;
7393
+ imprimir?: (row: Record<string, unknown>) => void;
6643
7394
  remover?: (row: Record<string, unknown>) => Promise<void> | void;
6644
7395
  showDuplicateAction?: boolean;
7396
+ showPrintAction?: boolean;
7397
+ printActionLabel?: string;
6645
7398
  confirmDuplicarLinha?: ConsultaPageRuntime['confirmDuplicarLinha'];
6646
7399
  duplicateSuccessMessage?: string;
6647
7400
  /**
@@ -6655,6 +7408,8 @@ interface ConsultaCrudAdapterConfig<TItem, TRow extends Record<string, unknown>,
6655
7408
  showNovoButton?: boolean;
6656
7409
  /** Omissão: `'Alterar'` (ou `grid_config.edit_action_label` na factory padrão). */
6657
7410
  editActionLabel?: string;
7411
+ /** Omissão: `fa-pen-to-square`. */
7412
+ editActionIconClass?: string;
6658
7413
  /** Omissão: `'Novo registro'`. */
6659
7414
  novoAriaLabel?: string;
6660
7415
  /** Omissão: `'Consulta'`. */
@@ -6902,7 +7657,7 @@ interface ConsultaCatalogBundleConfig<TMetadataReply, TFiltroPreset> {
6902
7657
  chaveConsulta: string;
6903
7658
  ensureAuth: () => Promise<void>;
6904
7659
  getMetadata: () => Promise<TMetadataReply>;
6905
- /** `SELECT COUNT(*)` em cabeçalhos `filtro` (sem `filtro_item`). */
7660
+ /** `SELECT COUNT(*)` em cabeçalhos `tbl_filtro` (sem `tbl_filtro_item`). */
6906
7661
  contarFiltrosCabecalhos: () => Promise<number>;
6907
7662
  listarFiltros: () => Promise<{
6908
7663
  filtros?: FiltroSalvo[];
@@ -7070,6 +7825,8 @@ declare class ConsultaCadastroFiltroDialogComponent {
7070
7825
  readonly itemDraftSearchSelectOpcoesMescladas: _angular_core.Signal<UiSelectOption<string>[]>;
7071
7826
  /** `null`: usar {@link itemDraftSearchSelectOpcoesMescladas}; senão lista já filtrada pela pesquisa. */
7072
7827
  readonly itemDraftSearchSelectOpcoesPainel: _angular_core.WritableSignal<UiSelectOption<string>[] | null>;
7828
+ /** Descarta respostas obsoletas quando abertura e pesquisa correm em paralelo no draft. */
7829
+ private draftSearchSelectPageReqGen;
7073
7830
  readonly itemDraftSearchSelectOpcoesParaTemplate: _angular_core.Signal<UiSelectOption<string>[]>;
7074
7831
  private itemDraftColunaLimpezaProgramatica;
7075
7832
  readonly dialogCadastroValidationItems: _angular_core.WritableSignal<ValidationSummaryItem[]>;
@@ -7117,6 +7874,7 @@ declare class ConsultaCadastroFiltroDialogComponent {
7117
7874
  isFilterSelectColuna(col: string | null | undefined): boolean;
7118
7875
  isSearchSelectColuna(col: string | null | undefined): boolean;
7119
7876
  onDraftSearchSelectPageRequested(ev: DropdownSearchPageRequested): Promise<void>;
7877
+ private opcoesRemotasCampoJaCarregadas;
7120
7878
  onDraftMultiselectPageRequested(ev: SelectPageRequested): Promise<void>;
7121
7879
  isNumeroColuna(col: string | null | undefined): boolean;
7122
7880
  isDatetimeColuna(col: string | null | undefined): boolean;
@@ -7161,7 +7919,7 @@ declare class ConsultaBasePageComponent implements OnInit, AfterViewInit, OnDest
7161
7919
  private readonly confirm;
7162
7920
  private readonly toast;
7163
7921
  private readonly topbarSlot;
7164
- private readonly topbarTitleSkeleton;
7922
+ protected readonly topbarTitleSkeleton: _angular_core.WritableSignal<boolean>;
7165
7923
  private readonly listaMemoriaCache;
7166
7924
  private readonly router;
7167
7925
  private readonly routeReuse;
@@ -7189,6 +7947,10 @@ declare class ConsultaBasePageComponent implements OnInit, AfterViewInit, OnDest
7189
7947
  * Opções mostradas no painel do `search_select` por id do critério do preset (filtradas localmente pela query).
7190
7948
  */
7191
7949
  private readonly consultaSearchSelectOpcoesPainelPorItemId;
7950
+ /** Descarta respostas obsoletas quando abertura (query vazia) e pesquisa (query com texto) correm em paralelo. */
7951
+ private readonly searchSelectPageReqGenByItemId;
7952
+ private readonly multiselectRemotoLoadGenByCampo;
7953
+ private readonly multiselectRemotoLoadPromiseByCampo;
7192
7954
  readonly consultaSearchSelectPageSize = 96;
7193
7955
  /** Runtime com filtros/grelha alinhados ao metadata quando disponível. */
7194
7956
  readonly runtimeConsulta: _angular_core.Signal<ConsultaPageRuntime>;
@@ -7289,12 +8051,17 @@ declare class ConsultaBasePageComponent implements OnInit, AfterViewInit, OnDest
7289
8051
  isFilterSelectColuna(col: string | null | undefined): boolean;
7290
8052
  isSearchSelectColuna(col: string | null | undefined): boolean;
7291
8053
  private limparOpcoesPainelSearchSelectConsulta;
7292
- /** Opções do dropdown com pesquisa (painel filtrado ou lista mesclada por defeito). */
8054
+ /**
8055
+ * Opções do painel do `search_select`.
8056
+ * Sem overlay explícito, não devolve a lista remota completa (pré-carga) — evita flash de todas as marcas
8057
+ * antes da primeira `pageRequested`; com valor seleccionado mantém merge para o rótulo no input.
8058
+ */
7293
8059
  consultaSearchSelectOpcoesPainel(it: ConsultaFiltroItem<string>): UiSelectOption<string>[];
7294
8060
  onConsultaSearchSelectPageRequested(it: ConsultaFiltroItem<string>, ev: DropdownSearchPageRequested): Promise<void>;
7295
8061
  onConsultaMultiselectPageRequested(coluna: string, ev: SelectPageRequested): Promise<void>;
7296
8062
  /** Repasse ao diálogo de filtro: mesmo carregamento remoto que no painel principal. */
7297
8063
  readonly recarregarOpcoesMultiselectCampo: (campo: string) => Promise<void>;
8064
+ private opcoesRemotasCampoJaCarregadas;
7298
8065
  private aplicarOpcoesMultiselectRemotasCampo;
7299
8066
  private precarregarOpcoesMultiselectRemotasInicial;
7300
8067
  /** Critérios numéricos no metadata (`decimal`, `integer`, …) — input decimal + operadores de comparação. */
@@ -7372,6 +8139,11 @@ declare class ConsultaBasePageComponent implements OnInit, AfterViewInit, OnDest
7372
8139
  * para respostas muito rápidas não «saltarem» o estado de carregamento.
7373
8140
  */
7374
8141
  private yieldForSkeletonPaint;
8142
+ /**
8143
+ * Activa loading explícito e esvazia a grelha para o skeleton (Structra: overlay só com lista vazia).
8144
+ * Painel de filtros e chrome permanecem visíveis.
8145
+ */
8146
+ private iniciarLoadingGrelhaComSkeleton;
7375
8147
  /** Respeita {@link CONSULTA_LISTA_SKELETON_MIN_MS} após mostrar skeleton dos critérios de filtro. */
7376
8148
  private yieldUntilMinFiltroSkeletonMs;
7377
8149
  /** Pesquisa válida: skeleton na grelha + nova leitura do servidor e só então aplica o preset consultado. */
@@ -7379,6 +8151,7 @@ declare class ConsultaBasePageComponent implements OnInit, AfterViewInit, OnDest
7379
8151
  carregarTodos(): Promise<void>;
7380
8152
  editar(row: Record<string, unknown>): void;
7381
8153
  duplicar(row: Record<string, unknown>): Promise<void>;
8154
+ imprimir(row: Record<string, unknown>): void;
7382
8155
  excluirUsuario(row: Record<string, unknown>): Promise<void>;
7383
8156
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConsultaBasePageComponent, never>;
7384
8157
  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 +8221,11 @@ interface CreateConsultaPadraoRuntimeOptions<TItem, TRow extends Record<string,
7448
8221
  mapGridRow?: (item: TItem) => TRow;
7449
8222
  mapCard?: CardListMapFn<TRow>;
7450
8223
  editar?: ConsultaCrudAdapterConfig<TItem, TRow, TPreset>['editar'];
8224
+ imprimir?: ConsultaCrudAdapterConfig<TItem, TRow, TPreset>['imprimir'];
7451
8225
  remover?: ConsultaCrudAdapterConfig<TItem, TRow, TPreset>['remover'];
7452
8226
  removerActualizaAtivoEmVezDeRetirar?: boolean;
8227
+ showPrintAction?: boolean;
8228
+ printActionLabel?: string;
7453
8229
  novoRouterLink?: string | unknown[];
7454
8230
  toastTitleLista?: string;
7455
8231
  confirmRemoverLinha?: ConsultaPageRuntime['confirmRemoverLinha'];
@@ -7650,6 +8426,12 @@ interface CadastroValidationUi {
7650
8426
  */
7651
8427
  readonly beforeSummaryItemActivate?: ((item: ValidationSummaryItem) => void) | null;
7652
8428
  }
8429
+ /** Acção opcional à esquerda de Salvar/Novo na topbar ou toolbar interna do cadastro. */
8430
+ interface CadastroHeaderSecondaryAction {
8431
+ label: string;
8432
+ icon?: string;
8433
+ disabled?: boolean;
8434
+ }
7653
8435
  type CadastroModo = 'novo' | 'editar';
7654
8436
  interface CadastroPageRuntime<TResponse = unknown> {
7655
8437
  modo: Signal<CadastroModo>;
@@ -8023,6 +8805,8 @@ interface BuildCadastroPageRuntimeOptions {
8023
8805
  * Omisso: `id` vem de `ActivatedRoute`. Em dialog de referência, passar o id explícito (`novo` ou guid).
8024
8806
  */
8025
8807
  entityIdFromContext?: Signal<string | null | undefined>;
8808
+ /** Invalida cache de `initCadastro` após gravar/excluir (Structra page cache). */
8809
+ invalidateCadastroInitPageCache?: (routeId: string) => void;
8026
8810
  }
8027
8811
  /**
8028
8812
  * Constrói o runtime de uma página de cadastro (novo/editar): carregamento, salvar, cancelar, excluir opcional,
@@ -8920,6 +9704,17 @@ interface CadastroMetadataPageStateConfig<TInit, TDto, TSalvar> {
8920
9704
  * em vez do próprio `init`.
8921
9705
  */
8922
9706
  sourceKey?: string;
9707
+ /**
9708
+ * Scope opcional para {@link StructraPageCacheService} (ex.: tenant/empresa).
9709
+ * Omisso: scope derivado da rota do cadastro.
9710
+ */
9711
+ pageCacheScope?: string;
9712
+ /** Desliga cache de `initCadastro` entre navegações pelo menu (por defeito activo). */
9713
+ cadastroInitPageCacheDisabled?: boolean;
9714
+ /** TTL do cache de init (ms). Omisso: sem expiração até invalidação ou F5. */
9715
+ cadastroInitCacheTtlMs?: number;
9716
+ /** Identificador lógico da entidade na chave de cache de init. Omisso: rota ou `sourceKey`. */
9717
+ cadastroInitCacheEntityKey?: string;
8923
9718
  /** Referências inline (dropdown + rascunho + resultado); a base orquestra ciclo de vida. */
8924
9719
  referenciasInline?: readonly CadastroInlineReferencePart[];
8925
9720
  /**
@@ -9230,6 +10025,10 @@ declare abstract class CadastroMetadataPageStateBase<TInit, TDto, TSalvar> {
9230
10025
  protected resolveLeafActivatedRoute(): ActivatedRoute;
9231
10026
  /** Path do cadastro anfitrião para rascunhos inline; modal sobrescreve com {@link CADASTRO_REFERENCIA_DIALOG_CONTEXT}. */
9232
10027
  protected resolveHostPathCadastroForInlineDraft(): string;
10028
+ protected resolveCadastroInitPageCacheEntityKey(): string;
10029
+ protected resolveCadastroInitPageCacheScope(): string;
10030
+ protected invalidateCadastroInitPageCache(routeId: string): void;
10031
+ protected loadCadastroInitForRouteId(id: string): Observable<TInit>;
9233
10032
  protected static isCadastroLeafSegment(leafPath: string | undefined): boolean;
9234
10033
  /**
9235
10034
  * Regresso de RotaReferência com instância ainda em memória (`RouteReuseStrategy` + `data.reuse`):
@@ -9342,6 +10141,9 @@ declare class CadastroMetadataPageComponent {
9342
10141
  readonly embeddedInPageShell: _angular_core.InputSignal<boolean>;
9343
10142
  readonly salvarSubmit: _angular_core.OutputEmitterRef<void>;
9344
10143
  readonly toolbarButtonClick: _angular_core.OutputEmitterRef<CadastroToolbarButtonDto>;
10144
+ readonly headerSecondaryAction: _angular_core.InputSignal<CadastroHeaderSecondaryAction | null>;
10145
+ readonly headerSecondaryActionClick: _angular_core.OutputEmitterRef<void>;
10146
+ protected readonly headerSecondaryActionVisible: _angular_core.Signal<boolean>;
9345
10147
  readonly tituloSection: _angular_core.InputSignal<string | null>;
9346
10148
  readonly subtituloSection: _angular_core.InputSignal<string | null>;
9347
10149
  /** Metadata efectiva: input da shell ou bundle vindo do {@link CadastroMetadataView}. */
@@ -9369,7 +10171,7 @@ declare class CadastroMetadataPageComponent {
9369
10171
  sectionTitulo(c: CadastroMetadataPageCadastro): string;
9370
10172
  sectionSubtitulo(c: CadastroMetadataPageCadastro): string;
9371
10173
  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>;
10174
+ 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
10175
  }
9374
10176
 
9375
10177
  interface CadastroMetadataPageShellCallbacks {
@@ -9396,6 +10198,8 @@ interface CadastroMetadataShellRuntime {
9396
10198
  readonly painelMaxWidthHint: string | null;
9397
10199
  readonly onSalvarSubmit: () => void;
9398
10200
  readonly onToolbarButtonClick?: (btn: CadastroToolbarButtonDto) => void;
10201
+ readonly headerSecondaryAction?: CadastroHeaderSecondaryAction | null;
10202
+ readonly onHeaderSecondaryActionClick?: () => void;
9399
10203
  readonly metadataCamposReply?: CadastroMetadataCamposReplyLike | null;
9400
10204
  /**
9401
10205
  * Quando `vm.entityName` vem vazio, replica o padrão `[entityName]="metadataPageVm().entityName || '…'"`.
@@ -9421,6 +10225,8 @@ interface BuildCadastroMetadataShellRuntimeOptions {
9421
10225
  readonly painelMaxWidthHint: string | null;
9422
10226
  readonly onSalvarSubmit: () => void;
9423
10227
  readonly onToolbarButtonClick?: (btn: CadastroToolbarButtonDto) => void;
10228
+ readonly headerSecondaryAction?: CadastroHeaderSecondaryAction | null;
10229
+ readonly onHeaderSecondaryActionClick?: () => void;
9424
10230
  readonly metadataCamposReply?: CadastroMetadataCamposReplyLike | null;
9425
10231
  readonly entityNameFallback?: string;
9426
10232
  readonly entityLabelFallback?: string;
@@ -9447,6 +10253,12 @@ declare abstract class CadastroMetadataPageBase<TInit, TDto, TSalvar> extends Ca
9447
10253
  protected readonly autoPageShellCallbacks: CadastroMetadataPageShellCallbacks;
9448
10254
  constructor();
9449
10255
  protected cadastroMetadataShellExtras(): Partial<BuildCadastroMetadataShellRuntimeOptions>;
10256
+ /**
10257
+ * Botão opcional à esquerda de Salvar/Novo na topbar. Omisso / `null` ⇒ nada é renderizado.
10258
+ */
10259
+ protected cadastroHeaderSecondaryAction(): CadastroHeaderSecondaryAction | null;
10260
+ /** Clique no botão de {@link cadastroHeaderSecondaryAction}. */
10261
+ protected onCadastroHeaderSecondaryActionClick(): void;
9450
10262
  /** `public` explícito: templates com `strictTemplates` / consumidores da lib veem o membro herdado. */
9451
10263
  readonly cadastroRuntime: _angular_core.Signal<structra_ui.CadastroMetadataShellRuntime>;
9452
10264
  protected resolveFormLayoutForShell(): CadastroFormPageLayout | null;
@@ -9957,7 +10769,11 @@ declare function cadastroCampoScriptEditorLanguage(campo: CadastroCampoMetadataD
9957
10769
  * Em mobile a grelha colapsa para uma coluna — o campo já fica em largura total.
9958
10770
  */
9959
10771
  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>). */
10772
+ /** Largura fixa declarada na metadata (px, rem, etc.) — não <c>100%</c> nem <c>max-content</c>. */
10773
+ declare function cadastroCampoMetadataLarguraFixaCss(campo: CadastroCampoMetadataDto): string | null;
10774
+ /**
10775
+ * Campo estreito na grelha multi-coluna: <c>max-content</c> ou largura fixa com <c>FullWidth = false</c>.
10776
+ */
9961
10777
  declare function cadastroCampoMetadataLarguraCompacta(campo: CadastroCampoMetadataDto): boolean;
9962
10778
  /** Largura efectiva do wrapper do campo na grelha metadata (respeita `FullWidth` / `width` do servidor). */
9963
10779
  declare function cadastroCampoWrapperWidthCss(campo: CadastroCampoMetadataDto, opts: {
@@ -10404,6 +11220,13 @@ declare class CadastroBasePageComponent implements AfterContentInit {
10404
11220
  readonly validationUi: _angular_core.InputSignal<CadastroValidationUi | null>;
10405
11221
  /** Resumo de validação fixo ao topo do ecrã ao revelar erros (Structra `pinned`). */
10406
11222
  readonly validationSummaryPinned: _angular_core.InputSignal<boolean>;
11223
+ /**
11224
+ * Botão opcional à esquerda de Salvar/Novo (topbar da shell ou toolbar interna).
11225
+ * Omisso ou sem `label` ⇒ nada é renderizado.
11226
+ */
11227
+ readonly headerSecondaryAction: _angular_core.InputSignal<CadastroHeaderSecondaryAction | null>;
11228
+ readonly headerSecondaryActionClick: _angular_core.OutputEmitterRef<void>;
11229
+ protected readonly headerSecondaryActionVisible: _angular_core.Signal<boolean>;
10407
11230
  /**
10408
11231
  * Prioridade: {@link CadastroValidationUi.validationSummaryPinned} quando definido (metadata com flags);
10409
11232
  * senão {@link validationSummaryPinned}.
@@ -10426,6 +11249,9 @@ declare class CadastroBasePageComponent implements AfterContentInit {
10426
11249
  protected readonly validationSummaryLive: _angular_core.WritableSignal<boolean>;
10427
11250
  constructor();
10428
11251
  ngAfterContentInit(): void;
11252
+ /** Instâncias em cache (`data.reuse`) continuam vivas — só sincronizar quando esta rota está activa na shell. */
11253
+ private isActiveShellTopbarRoute;
11254
+ private releaseShellTopbarSlot;
10429
11255
  /** Alterna slot da shell entre botões invisíveis (init) e template da página (carregado). */
10430
11256
  private syncShellTopbarEndSlot;
10431
11257
  /**
@@ -10444,7 +11270,7 @@ declare class CadastroBasePageComponent implements AfterContentInit {
10444
11270
  /** Remove painéis `pinned` do Structra órfãos no `body` (ids internos `structra-vsum-p-*`). */
10445
11271
  private removeStructraPinnedValidationPanelsFromBody;
10446
11272
  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>;
11273
+ 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
11274
  }
10449
11275
 
10450
11276
  /**
@@ -10535,6 +11361,8 @@ declare class CadastroFieldRendererComponent {
10535
11361
  larguraWrapperUi(c: CadastroCampoMetadataDto): string;
10536
11362
  protected scriptEditorMinHeightUi(c: CadastroCampoMetadataDto): string;
10537
11363
  protected scriptEditorLanguageUi(c: CadastroCampoMetadataDto): ScriptEditorLanguage;
11364
+ /** Botão «+» (cadastro inline) só em campos editáveis — metadata `readOnly` ou controlo desactivado. */
11365
+ mostrarRedirectSuffixUi(c: CadastroCampoMetadataDto): boolean;
10538
11366
  requiredMarkUi(c: CadastroCampoMetadataDto): boolean;
10539
11367
  campoShowErrorMessageUi(c: CadastroCampoMetadataDto): boolean;
10540
11368
  /** Só `monetary === true` usa prefixo `R$`; omisso/false ⇒ decimal simples (ex. m²). */
@@ -10813,6 +11641,11 @@ declare class FormCollectionComponent {
10813
11641
  gridTemplateColumnsParaItemEditorViewport(sec: CadastroMetadataSecao): string | null;
10814
11642
  itemEditorGridColumnSpanParaCampo(sec: CadastroMetadataSecao, campo: CadastroCampoMetadataDto, index: number): string | null;
10815
11643
  private computeCollectionEmbuteNoFormGroupPai;
11644
+ /**
11645
+ * Repõe o rascunho do editor a partir da linha seleccionada (botão «Alterar»).
11646
+ * `patchValue` marca `dirty`; limpa estado de validação até o utilizador editar ou «Adicionar»/«Alterar».
11647
+ */
11648
+ private hydrateItemEditorFromSelectedRow;
10816
11649
  /** Remove `dirty`/`touched` em todos os níveis (ex.: após `patchValue` no rascunho «Adicionar»). */
10817
11650
  private repristineItemEditorDraft;
10818
11651
  private resetItemEditorDefaults;
@@ -11002,6 +11835,17 @@ declare class CadastroMetadataShellPageComponent {
11002
11835
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadastroMetadataShellPageComponent, "app-cadastro-metadata-shell-page", never, { "runtime": { "alias": "runtime"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
11003
11836
  }
11004
11837
 
11838
+ /** Skeleton de arranque do cadastro — mesma aparência de {@link CadastroBasePageComponent}. */
11839
+ declare class CadastroFormLoadingSkeletonComponent {
11840
+ readonly corpoCentralizado: _angular_core.InputSignal<boolean>;
11841
+ readonly panelMaxWidth: _angular_core.InputSignal<string | null>;
11842
+ readonly fieldCount: _angular_core.InputSignal<number>;
11843
+ protected readonly skeletonPanelMaxWidthCss: _angular_core.Signal<string | undefined>;
11844
+ protected readonly fieldIndexes: _angular_core.Signal<number[]>;
11845
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CadastroFormLoadingSkeletonComponent, never>;
11846
+ 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>;
11847
+ }
11848
+
11005
11849
  declare class StructraPageComponentRegistry {
11006
11850
  private readonly components;
11007
11851
  register(tag: string, component: Type<unknown>): void;
@@ -11217,5 +12061,251 @@ declare function mergeDocumentoFmtNaLinhaConsulta(item: Record<string, unknown>)
11217
12061
  declare function mapListarItensParaMultiselectOpcoes(itens: readonly unknown[], optionsValueField: string, optionsLabelField: string, optionsOnlyActive: boolean): UiSelectOption<string>[];
11218
12062
  declare function carregarOpcoesMultiselectViaSpec(injector: Injector, spec: ConsultaMultiselectOpcoesRemotasSpec): Promise<readonly UiSelectOption<string>[]>;
11219
12063
 
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 };
12064
+ /** Itens por página na pré-visualização de relatórios (pesquisa paginada na tela). */
12065
+ declare const STRUCTRA_REPORT_DEFAULT_PAGE_SIZE = 15;
12066
+ interface ReportTreeNode {
12067
+ id: string;
12068
+ label: string;
12069
+ icon?: string | null;
12070
+ leaf?: boolean;
12071
+ expanded?: boolean;
12072
+ children?: ReportTreeNode[];
12073
+ }
12074
+ interface ReportFilterMeta {
12075
+ id: string;
12076
+ label: string;
12077
+ tipo: 'text' | 'bool' | 'date' | 'number' | string;
12078
+ operador?: string;
12079
+ global?: boolean;
12080
+ obrigatorio?: boolean;
12081
+ }
12082
+ interface ReportColumnMeta {
12083
+ id: string;
12084
+ label: string;
12085
+ formato?: string;
12086
+ width?: string | null;
12087
+ minWidth?: string | null;
12088
+ maxWidth?: string | null;
12089
+ }
12090
+ type ReportColumnWidthFields = Pick<ReportColumnMeta, 'width' | 'minWidth' | 'maxWidth'>;
12091
+ declare function reportColumnWidthStyle(col: ReportColumnWidthFields | null | undefined): Record<string, string | null>;
12092
+ declare function reportTableHasFixedWidths(colunas: readonly ReportColumnWidthFields[]): boolean;
12093
+ declare function isReportNowrapColumn(col: Pick<ReportColumnMeta, 'formato' | 'id'> | null | undefined): boolean;
12094
+ /** Coluna booleana declarada pelo metadata do relatório (`formato: boolean`). */
12095
+ declare function isReportBooleanColumn(col: Pick<ReportColumnMeta, 'formato'> | null | undefined): boolean;
12096
+ /** Converte valor de célula booleana (tipado ou legado Sim/Não) quando a coluna é boolean. */
12097
+ declare function coerceReportBoolean(value: unknown): boolean;
12098
+ interface ReportMetadata {
12099
+ key: string;
12100
+ titulo: string;
12101
+ filtros: ReportFilterMeta[];
12102
+ colunas: ReportColumnMeta[];
12103
+ }
12104
+ /** Critério avulso no mesmo formato da consulta base (gRPC `FiltroItemEntrada`). */
12105
+ interface ReportFiltroItemEntrada {
12106
+ campo: string;
12107
+ operador: string;
12108
+ valor: string;
12109
+ valorAte?: string;
12110
+ juncao?: string;
12111
+ }
12112
+ interface ReportPesquisarRequest {
12113
+ /** Formato legado (metadata fixa por campo do relatório). */
12114
+ filtros?: Record<string, string | null | undefined>;
12115
+ /** Preset + valores montados pela consulta base (`montarFiltrosServidorPreset`). */
12116
+ filtrosAvulsos?: ReportFiltroItemEntrada[];
12117
+ /** Página (1-based). Omisso ⇒ 1. */
12118
+ page?: number;
12119
+ /** Tamanho da página na tela. Omisso ⇒ default do servidor. */
12120
+ pageSize?: number;
12121
+ /** Exportação PDF: busca todos os registros filtrados. */
12122
+ exportAll?: boolean;
12123
+ }
12124
+ interface ReportHeader {
12125
+ titulo: string;
12126
+ subtitulo?: string | null;
12127
+ geradoEm?: string;
12128
+ }
12129
+ interface ReportTotal {
12130
+ label: string;
12131
+ valor: string;
12132
+ }
12133
+ interface ReportSectionColumn {
12134
+ id: string;
12135
+ label: string;
12136
+ formato?: string;
12137
+ width?: string | null;
12138
+ minWidth?: string | null;
12139
+ maxWidth?: string | null;
12140
+ }
12141
+ interface ReportSectionTable {
12142
+ title: string;
12143
+ colunas: ReportSectionColumn[];
12144
+ linhas: Array<Record<string, string | null | undefined>>;
12145
+ emptyMessage?: string | null;
12146
+ }
12147
+ interface ReportSection {
12148
+ title: string;
12149
+ subtitle?: string | null;
12150
+ tabelas: ReportSectionTable[];
12151
+ totais?: ReportTotal[];
12152
+ }
12153
+ interface ReportResult {
12154
+ header: ReportHeader;
12155
+ filtrosAplicados: Record<string, string | null | undefined>;
12156
+ colunas: ReportColumnMeta[];
12157
+ linhas: Array<Record<string, unknown>>;
12158
+ sections?: ReportSection[];
12159
+ totais?: ReportTotal[];
12160
+ footer?: string | null;
12161
+ totalRegistros: number;
12162
+ page?: number;
12163
+ pageSize?: number;
12164
+ totalPages?: number;
12165
+ }
12166
+ interface StructraReportTransport {
12167
+ obterArvore(): Promise<ReportTreeNode[]>;
12168
+ obterMetadata(key: string): Promise<ReportMetadata>;
12169
+ pesquisar(key: string, request: ReportPesquisarRequest): Promise<ReportResult>;
12170
+ }
12171
+ declare const STRUCTRA_REPORT_TRANSPORT: InjectionToken<StructraReportTransport>;
12172
+ declare function findFirstReportLeafId(nodes: ReportTreeNode[]): string | null;
12173
+ declare function findReportTreeLabel(id: string, nodes: ReportTreeNode[]): string | null;
12174
+ declare function mapReportTreeToTreeViewNodes(nodes: ReportTreeNode[]): TreeViewNode[];
12175
+
12176
+ declare class StructraReportTreeComponent {
12177
+ nodes: TreeViewNode[];
12178
+ selectedId: string | null;
12179
+ title: string;
12180
+ titleIconClass: string;
12181
+ expansionStateKey: unknown;
12182
+ loading: boolean;
12183
+ selectedIdChange: EventEmitter<string | null>;
12184
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportTreeComponent, never>;
12185
+ 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; }; "loading": { "alias": "loading"; "required": false; }; }, { "selectedIdChange": "selectedIdChange"; }, never, never, true, never>;
12186
+ static ngAcceptInputType_loading: unknown;
12187
+ }
12188
+
12189
+ /** Placeholders da árvore de relatórios enquanto a lista carrega (layout alinhado ao tree-view). */
12190
+ declare class StructraReportTreeSkeletonComponent {
12191
+ rows: number;
12192
+ /** Larguras relativas das linhas (simula pastas/folhas com indentação). */
12193
+ readonly rowWidths: string[];
12194
+ get skeletonRows(): number[];
12195
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportTreeSkeletonComponent, never>;
12196
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportTreeSkeletonComponent, "structra-report-tree-skeleton", never, { "rows": { "alias": "rows"; "required": false; }; }, {}, never, never, true, never>;
12197
+ }
12198
+
12199
+ declare class StructraReportFilterPanelComponent {
12200
+ readonly ngModelStandalone: {
12201
+ standalone: boolean;
12202
+ };
12203
+ titulo: string;
12204
+ subtitulo: string;
12205
+ filtros: ReportFilterMeta[];
12206
+ valores: Record<string, string>;
12207
+ collapsed: boolean;
12208
+ pesquisando: boolean;
12209
+ collapsedChange: EventEmitter<boolean>;
12210
+ valorChange: EventEmitter<{
12211
+ id: string;
12212
+ value: string;
12213
+ }>;
12214
+ pesquisar: EventEmitter<void>;
12215
+ readonly boolOptions: UiSelectOption<string>[];
12216
+ compareStr: (a: unknown, b: unknown) => boolean;
12217
+ patchValor(id: string, value: string | null | undefined): void;
12218
+ valorAtual(id: string): string;
12219
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportFilterPanelComponent, never>;
12220
+ 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>;
12221
+ }
12222
+
12223
+ declare class StructraReportTableComponent {
12224
+ colunas: ReportColumnMeta[];
12225
+ linhas: Array<Record<string, unknown>>;
12226
+ totalRegistros: number;
12227
+ readonly isBooleanColumn: typeof isReportBooleanColumn;
12228
+ readonly isNowrapColumn: typeof isReportNowrapColumn;
12229
+ readonly columnWidthStyle: typeof reportColumnWidthStyle;
12230
+ hasFixedColumnWidths(): boolean;
12231
+ cellValue(linha: Record<string, unknown>, coluna: ReportColumnMeta): string;
12232
+ booleanChecked(linha: Record<string, unknown>, coluna: ReportColumnMeta): boolean;
12233
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportTableComponent, never>;
12234
+ 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>;
12235
+ }
12236
+
12237
+ declare class StructraReportPaginatorComponent {
12238
+ page: number;
12239
+ totalPages: number;
12240
+ totalRegistros: number;
12241
+ pageSize: number;
12242
+ disabled: boolean;
12243
+ pageChange: EventEmitter<number>;
12244
+ get podeAnterior(): boolean;
12245
+ get podeProxima(): boolean;
12246
+ irAnterior(): void;
12247
+ irProxima(): void;
12248
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportPaginatorComponent, never>;
12249
+ 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>;
12250
+ }
12251
+
12252
+ declare class StructraReportEmptyStateComponent {
12253
+ message: string;
12254
+ description: string;
12255
+ iconClass: string;
12256
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportEmptyStateComponent, never>;
12257
+ 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>;
12258
+ }
12259
+
12260
+ declare class StructraReportLoadingSkeletonComponent {
12261
+ rows: number;
12262
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportLoadingSkeletonComponent, never>;
12263
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportLoadingSkeletonComponent, "structra-report-loading-skeleton", never, { "rows": { "alias": "rows"; "required": false; }; }, {}, never, never, true, never>;
12264
+ }
12265
+
12266
+ declare class StructraReportViewerComponent {
12267
+ metadata: ReportMetadata | null;
12268
+ result: ReportResult | null;
12269
+ filtrosValores: Record<string, string>;
12270
+ loadingMetadata: boolean;
12271
+ loadingResult: boolean;
12272
+ collapsed: boolean;
12273
+ filtrosValoresChange: EventEmitter<Record<string, string>>;
12274
+ collapsedChange: EventEmitter<boolean>;
12275
+ pesquisar: EventEmitter<void>;
12276
+ onValorChange(event: {
12277
+ id: string;
12278
+ value: string;
12279
+ }): void;
12280
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportViewerComponent, never>;
12281
+ 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>;
12282
+ }
12283
+
12284
+ declare class StructraReportPageComponent {
12285
+ private readonly transport;
12286
+ autoSelectFirst: boolean;
12287
+ autoPesquisarOnSelect: boolean;
12288
+ reportSelected: EventEmitter<string | null>;
12289
+ reportLoaded: EventEmitter<ReportResult | null>;
12290
+ readonly treeNodes: _angular_core.WritableSignal<ReportTreeNode[]>;
12291
+ readonly selectedReportId: _angular_core.WritableSignal<string | null>;
12292
+ readonly metadata: _angular_core.WritableSignal<ReportMetadata | null>;
12293
+ readonly result: _angular_core.WritableSignal<ReportResult | null>;
12294
+ readonly filtrosValores: _angular_core.WritableSignal<Record<string, string>>;
12295
+ readonly loadingTree: _angular_core.WritableSignal<boolean>;
12296
+ readonly loadingMetadata: _angular_core.WritableSignal<boolean>;
12297
+ readonly loadingResult: _angular_core.WritableSignal<boolean>;
12298
+ readonly painelFiltroRecolhido: _angular_core.WritableSignal<boolean>;
12299
+ readonly treeViewNodes: _angular_core.Signal<structra_ui.TreeViewNode[]>;
12300
+ constructor();
12301
+ carregarArvore(): Promise<void>;
12302
+ onReportSelected(id: string | null): void;
12303
+ private carregarMetadata;
12304
+ pesquisar(): Promise<void>;
12305
+ patchFiltrosValores(next: Record<string, string>): void;
12306
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportPageComponent, never>;
12307
+ 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>;
12308
+ }
12309
+
12310
+ 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, StructraReportTreeSkeletonComponent, 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 };
12311
+ 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 };