structra-ui 0.2.62 → 0.2.64

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;
@@ -470,6 +503,7 @@ declare class SkeletonTextComponent {
470
503
 
471
504
  /** Lista vertical de linhas (ex.: opções de dropdown). */
472
505
  declare class SkeletonListComponent {
506
+ /** Padrão 1: evita flick em dropdowns que montam só `<app-skeleton-list />`. */
473
507
  rows: number;
474
508
  /** Mostra um “leading” à esquerda (círculo pequeno). */
475
509
  leading: boolean;
@@ -495,6 +529,17 @@ declare class SkeletonCardComponent {
495
529
  static ngAcceptInputType_animate: unknown;
496
530
  }
497
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
+
498
543
  /** Placeholder tabular (cabeçalho + linhas + faixa de paginação). */
499
544
  declare class SkeletonTableComponent {
500
545
  columnCount: number;
@@ -670,10 +715,13 @@ declare class TextFieldComponent extends NgControlFieldDirective<string | null>
670
715
  nativeInputType: 'text' | 'email';
671
716
  inputText: string;
672
717
  filledUi: boolean;
718
+ /** Login/cadastro: `username` ou `email` em vez de `on` genérico. */
719
+ get autocompleteAttr(): string;
673
720
  /** FormControl por vezes escreve número/object (metadata dinâmica); normalizar antes de slice/trim. */
674
721
  private static valueAsTrimmedString;
675
722
  private refreshFilledUi;
676
723
  ngAfterViewInit(): void;
724
+ private syncAutofillFromDom;
677
725
  protected afterWriteValue(value: string | null): void;
678
726
  onNativeInput(event: Event): void;
679
727
  onBlur(): void;
@@ -733,6 +781,7 @@ declare class PasswordFieldComponent extends NgControlFieldDirective<string | nu
733
781
  toggleIconClassUi: string;
734
782
  ngOnInit(): void;
735
783
  ngAfterViewInit(): void;
784
+ private syncAutofillFromDom;
736
785
  private refreshFilledUi;
737
786
  private refreshPasswordToggleUi;
738
787
  protected afterWriteValue(value: string | null): void;
@@ -764,6 +813,7 @@ declare class TextareaFieldComponent extends NgControlFieldDirective<string | nu
764
813
  textareaMaxHeightCss: string;
765
814
  ngOnInit(): void;
766
815
  ngAfterViewInit(): void;
816
+ private syncAutofillFromDom;
767
817
  ngOnChanges(changes: SimpleChanges): void;
768
818
  private updateTextareaHeight;
769
819
  private refreshFilledUi;
@@ -819,6 +869,7 @@ declare class IntegerFieldComponent extends NgControlFieldDirective<number | nul
819
869
  inputText: string;
820
870
  filledUi: boolean;
821
871
  ngAfterViewInit(): void;
872
+ private syncAutofillFromDom;
822
873
  private refreshFilledUi;
823
874
  protected afterWriteValue(value: number | null): void;
824
875
  onBeforeInput(event: Event): void;
@@ -849,6 +900,7 @@ declare class DecimalFieldComponent extends NgControlFieldDirective<number | nul
849
900
  /** Valor mostrado no `<input>`: `prefixo + número` ou só o número. */
850
901
  get displayValue(): string;
851
902
  ngAfterViewInit(): void;
903
+ private syncAutofillFromDom;
852
904
  private composeFullDisplay;
853
905
  /** Comprimento do segmento `«prefixo» ` em caracteres (0 se não há prefixo). */
854
906
  private prefixSegmentLen;
@@ -922,6 +974,7 @@ declare abstract class MaskedTextFieldBase extends NgControlFieldDirective<strin
922
974
  /** Padrão efetivo (permite CEP/telefone fixarem máscaras em subclasses). */
923
975
  protected get pattern(): string;
924
976
  ngAfterViewInit(): void;
977
+ private syncAutofillFromDom;
925
978
  /**
926
979
  * Padrão de formatação para o valor digitado (só dígitos).
927
980
  * Sobrescrever para máscara dinâmica (ex.: CPF até 11 dígitos, CNPJ depois).
@@ -1346,7 +1399,7 @@ declare class DropdownBaseComponent {
1346
1399
  * As classes de tema no painel interno seguem o tema activo sempre.
1347
1400
  */
1348
1401
  readonly panelThemeNgClass: _angular_core.Signal<{
1349
- [x: string]: boolean;
1402
+ [k: string]: boolean;
1350
1403
  }>;
1351
1404
  open: boolean;
1352
1405
  readonly openChange: EventEmitter<boolean>;
@@ -1590,6 +1643,8 @@ declare class SelectFieldComponent extends DropdownOptionFieldBase implements Af
1590
1643
  declare class MultiselectFieldComponent extends DropdownMultiOptionFieldBase implements AfterViewInit, OnDestroy, OnChanges {
1591
1644
  private readonly hostRef;
1592
1645
  get hostInvalidClass(): boolean;
1646
+ /** Campo de pesquisa no painel para filtrar opções (consulta / filtros com listas longas). */
1647
+ searchable: boolean;
1593
1648
  /** Por omissão `true`: mesmo padrão do select com lista longa (`pageRequested` + scroll). */
1594
1649
  pagination: boolean;
1595
1650
  /**
@@ -1651,6 +1706,7 @@ declare class MultiselectFieldComponent extends DropdownMultiOptionFieldBase imp
1651
1706
  private readonly dropdownBase?;
1652
1707
  panelOpen: boolean;
1653
1708
  panelOverlayWidth: number;
1709
+ panelSearchQuery: string;
1654
1710
  private scrollLoadTimer;
1655
1711
  private keyboardLoadMoreTimer;
1656
1712
  private loadMoreInFlight;
@@ -1665,6 +1721,11 @@ declare class MultiselectFieldComponent extends DropdownMultiOptionFieldBase imp
1665
1721
  /** Texto numa linha: rótulos separados por vírgula + ellipsis no CSS. */
1666
1722
  get displaySummary(): string;
1667
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;
1668
1729
  private getOptionsListElement;
1669
1730
  private scrollActiveOptionIntoView;
1670
1731
  private scheduleMaybeLoadMoreFromKeyboard;
@@ -1695,7 +1756,8 @@ declare class MultiselectFieldComponent extends DropdownMultiOptionFieldBase imp
1695
1756
  /** Escape com foco no limpar/prefixo do `base-field` (não passa pelo div da origem do overlay). */
1696
1757
  onDropdownHostEscape(ev: KeyboardEvent): void;
1697
1758
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MultiselectFieldComponent, never>;
1698
- 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;
1699
1761
  static ngAcceptInputType_pagination: unknown;
1700
1762
  static ngAcceptInputType_useCache: unknown;
1701
1763
  static ngAcceptInputType_pageableInput: unknown;
@@ -2933,6 +2995,105 @@ declare class FormTabsComponent implements AfterContentInit, OnChanges {
2933
2995
  static ngAcceptInputType_validationLinkActive: unknown;
2934
2996
  }
2935
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
+
2936
3097
  /**
2937
3098
  * Configuração por aba: ordem no array define prioridade em
2938
3099
  * {@link pickTabKeyLinkedToSummaryItems} (primeira aba com intersecção vence).
@@ -3026,6 +3187,11 @@ interface DataGridColumn<T = unknown> {
3026
3187
  * Ordenação/filtro continuam a usar o campo bruto da linha.
3027
3188
  */
3028
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;
3029
3195
  }
3030
3196
 
3031
3197
  /** Contexto injetado pelo {@link DataGridComponent} (não exportado para consumidores). */
@@ -3033,14 +3199,24 @@ interface DataGridActionsContext<T = unknown> {
3033
3199
  onEditRow: (row: T) => void;
3034
3200
  onRemoveRow: (row: T) => void;
3035
3201
  onDuplicateRow?: (row: T) => void;
3202
+ onPrintRow?: (row: T) => void;
3036
3203
  /** Quando `false`, o botão «Alterar» não é mostrado. */
3037
3204
  showEditAction?: boolean;
3038
3205
  /** Quando `false`, o botão «Remover» não é mostrado. */
3039
3206
  showRemoveAction?: boolean;
3040
3207
  /** Quando `true`, mostra «Duplicar» (requer `onDuplicateRow`). */
3041
3208
  showDuplicateAction?: boolean;
3209
+ /** Quando `true`, mostra «Imprimir» (requer `onPrintRow`). */
3210
+ showPrintAction?: boolean;
3042
3211
  /** Tooltip/aria do botão de abrir registo; omisso ⇒ «Alterar». */
3043
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;
3044
3220
  }
3045
3221
  declare class DataGridActionsCellRendererComponent implements ICellRendererAngularComp {
3046
3222
  params: ICellRendererParams & {
@@ -3049,11 +3225,19 @@ declare class DataGridActionsCellRendererComponent implements ICellRendererAngul
3049
3225
  agInit(params: ICellRendererParams): void;
3050
3226
  refresh(): boolean;
3051
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;
3052
3235
  /** `params.context` nem sempre vem preenchido; o grid guarda o mesmo objeto em `gridOptions.context`. */
3053
3236
  protected get actionsContext(): DataGridActionsContext | undefined;
3054
3237
  edit(): void;
3055
3238
  remove(): void;
3056
3239
  duplicate(): void;
3240
+ print(): void;
3057
3241
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataGridActionsCellRendererComponent, never>;
3058
3242
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataGridActionsCellRendererComponent, "app-data-grid-actions-cell-renderer", never, {}, {}, never, never, true, never>;
3059
3243
  }
@@ -3111,6 +3295,9 @@ interface DataGridPaginationChangeEvent {
3111
3295
  declare class DataGridComponent<T = unknown> implements OnInit, OnChanges, OnDestroy {
3112
3296
  private readonly ngZone;
3113
3297
  private readonly cdr;
3298
+ private readonly destroyRef;
3299
+ private readonly hostRef;
3300
+ private readonly gridLayoutService;
3114
3301
  private gridApi;
3115
3302
  /**
3116
3303
  * Alinhar com `data-grid.host-theme.scss`: `--ag-grid-size: 7px`, cabeçalho e linha = ×8.
@@ -3167,10 +3354,16 @@ declare class DataGridComponent<T = unknown> implements OnInit, OnChanges, OnDes
3167
3354
  showEditAction: boolean;
3168
3355
  /** Tooltip e aria-label do botão de edição na coluna Ações. Omisso ⇒ «Alterar». */
3169
3356
  editActionLabel: string;
3357
+ /** Ícone Font Awesome do botão editar (ex.: `fa-paper-plane`). Omisso ⇒ `fa-pen-to-square`. */
3358
+ editActionIconClass: string;
3170
3359
  /** Se `false`, a coluna de ações não mostra «Remover». Por omissão `true`. */
3171
3360
  showRemoveAction: boolean;
3172
3361
  /** Se `true`, mostra «Duplicar» na coluna de ações (requer handler no contexto). */
3173
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;
3174
3367
  /**
3175
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).
3176
3369
  */
@@ -3187,8 +3380,36 @@ declare class DataGridComponent<T = unknown> implements OnInit, OnChanges, OnDes
3187
3380
  highlightedRowMatch: number | null;
3188
3381
  /** Campo em {@link rows} a comparar com {@link highlightedRowMatch}. Omisso: `__rowArrayIndex`. */
3189
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();
3190
3410
  readonly edit: EventEmitter<T>;
3191
3411
  readonly duplicate: EventEmitter<T>;
3412
+ readonly print: EventEmitter<T>;
3192
3413
  readonly remove: EventEmitter<T>;
3193
3414
  /** Clique na linha de dados (útil para selecção fora da coluna de acções). */
3194
3415
  readonly rowClick: EventEmitter<T>;
@@ -3223,6 +3444,12 @@ declare class DataGridComponent<T = unknown> implements OnInit, OnChanges, OnDes
3223
3444
  get effectivePaginationPageSizeSelector(): number[];
3224
3445
  /** Repasse ao `ag-grid-angular`: `false` omite o selector (documentação AG Grid). */
3225
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();
3226
3453
  /**
3227
3454
  * Empty state **fora** do AG Grid: o overlay nativo falha na 1.ª carga (skeleton + `suppressNoRowsOverlay` / v35).
3228
3455
  */
@@ -3235,6 +3462,8 @@ declare class DataGridComponent<T = unknown> implements OnInit, OnChanges, OnDes
3235
3462
  get skeletonRowCount(): number;
3236
3463
  /** Área entre cabeçalho da grelha e barra de paginação (overlay do skeleton), em px quando {@link hostHeight} é valor `NNpx`. */
3237
3464
  private estimateSkeletonViewportBodyPx;
3465
+ /** Desactiva animação de reordenação enquanto o layout persistido não foi aplicado. */
3466
+ get suppressColumnMoveAnimation(): boolean;
3238
3467
  readonly defaultColDef: ColDef<T>;
3239
3468
  /**
3240
3469
  * O AG Grid corre muitos callbacks fora da `NgZone`; sem `run()`, o pai com `OnPush`
@@ -3258,12 +3487,46 @@ declare class DataGridComponent<T = unknown> implements OnInit, OnChanges, OnDes
3258
3487
  ngOnDestroy(): void;
3259
3488
  get hostHeight(): string;
3260
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;
3261
3515
  onRowClicked(ev: RowClickedEvent<T>): void;
3262
3516
  private rowClassForHighlight;
3263
3517
  private applyRowHighlightClass;
3264
3518
  private applyInitialPaginationPage;
3265
3519
  /** Evita `removeEventListener` na API depois do grid destruído. */
3266
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;
3267
3530
  private columnsForGrid;
3268
3531
  /** Classes BEM em `data-grid.host-theme.scss` para alinhamento declarativo nas colunas. */
3269
3532
  private static alignmentCellHeaderClasses;
@@ -3279,7 +3542,7 @@ declare class DataGridComponent<T = unknown> implements OnInit, OnChanges, OnDes
3279
3542
  get suppressCellFocusBinding(): boolean;
3280
3543
  private mapColumnsToColDef;
3281
3544
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataGridComponent<any>, never>;
3282
- 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>;
3283
3546
  static ngAcceptInputType_initialPaginationPage: unknown;
3284
3547
  static ngAcceptInputType_fitPaginationHeight: unknown;
3285
3548
  static ngAcceptInputType_fitPaginationMinEmptyRows: unknown;
@@ -3288,6 +3551,7 @@ declare class DataGridComponent<T = unknown> implements OnInit, OnChanges, OnDes
3288
3551
  static ngAcceptInputType_showEditAction: unknown;
3289
3552
  static ngAcceptInputType_showRemoveAction: unknown;
3290
3553
  static ngAcceptInputType_showDuplicateAction: unknown;
3554
+ static ngAcceptInputType_showPrintAction: unknown;
3291
3555
  static ngAcceptInputType_suppressRowClick: unknown;
3292
3556
  static ngAcceptInputType_inlineCellEditing: unknown;
3293
3557
  }
@@ -3348,6 +3612,7 @@ declare class CardListComponent<T = unknown> implements OnChanges {
3348
3612
  /** Repasse ao `app-data-card`: botão «Alterar» quando {@link showItemActions} é `true`. */
3349
3613
  showEditAction: boolean;
3350
3614
  editActionLabel: string;
3615
+ editActionIconClass: string;
3351
3616
  /** Repasse ao `app-data-card`: botão «Remover» quando {@link showItemActions} é `true`. */
3352
3617
  showRemoveAction: boolean;
3353
3618
  /** Repasse ao `app-data-card`: clique no cartão emite `edit` (exceto nos botões). */
@@ -3415,13 +3680,14 @@ declare class CardListComponent<T = unknown> implements OnChanges {
3415
3680
  skeletonCardIndices(): number[];
3416
3681
  /** Um único cartão skeleton no fundo durante `loadingMore` (mantém o scroll estável). */
3417
3682
  skeletonTailIndices(): number[];
3683
+ hideEditActionForItem(item: T): boolean;
3418
3684
  trackFn: (index: number, item: T) => unknown;
3419
3685
  onScroll(ev: Event): void;
3420
3686
  private requestRemotePage;
3421
3687
  private loadMoreMemoryChunk;
3422
3688
  private resetVisibleWindow;
3423
3689
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardListComponent<any>, never>;
3424
- 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>;
3425
3691
  static ngAcceptInputType_loadingMore: unknown;
3426
3692
  static ngAcceptInputType_showEditAction: unknown;
3427
3693
  static ngAcceptInputType_showRemoveAction: unknown;
@@ -3465,6 +3731,8 @@ declare class AdaptiveDataViewComponent<T = unknown> implements OnInit, OnChange
3465
3731
  showCardItemActions: boolean;
3466
3732
  /** Tooltip/aria do botão de abrir registo na coluna Ações ou no cartão. Omisso ⇒ «Alterar». */
3467
3733
  editActionLabel: string;
3734
+ /** Ícone Font Awesome do botão editar (ex.: `fa-paper-plane`). Omisso ⇒ `fa-pen-to-square`. */
3735
+ editActionIconClass: string;
3468
3736
  /** Lista em cartões: clique no cartão dispara `edit` (como «Alterar»); botões mantêm-se independentes. */
3469
3737
  cardOpenOnClick: boolean;
3470
3738
  scrollBatchSize: number;
@@ -3497,16 +3765,25 @@ declare class AdaptiveDataViewComponent<T = unknown> implements OnInit, OnChange
3497
3765
  /** Vista quando a tela é maior. Por padrão `grid`. */
3498
3766
  desktopView: AdaptiveDataViewMode;
3499
3767
  showDuplicateAction: boolean;
3768
+ showPrintAction: boolean;
3769
+ printActionLabel: string;
3500
3770
  showEditAction: boolean;
3501
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;
3502
3776
  readonly edit: EventEmitter<T>;
3503
3777
  readonly duplicate: EventEmitter<T>;
3778
+ readonly print: EventEmitter<T>;
3504
3779
  readonly remove: EventEmitter<T>;
3505
3780
  readonly loadMore: EventEmitter<void>;
3506
3781
  /** Corresponde ao breakpoint mobile. */
3507
3782
  isMobileLayout: boolean;
3508
3783
  /** Valor efectivo reposto ao grid / lista (respeita {@link loadingSkeletonMinMs}). */
3509
3784
  displayLoading: boolean;
3785
+ /** Skeleton só quando `loading` e a lista ainda está vazia (cache / refresh mantém dados visíveis). */
3786
+ private shouldShowLoadingSkeleton;
3510
3787
  ngOnInit(): void;
3511
3788
  ngOnChanges(changes: SimpleChanges): void;
3512
3789
  ngOnDestroy(): void;
@@ -3521,13 +3798,14 @@ declare class AdaptiveDataViewComponent<T = unknown> implements OnInit, OnChange
3521
3798
  get effectiveCardScrollMaxHeight(): string | null;
3522
3799
  get resultCountDisplay(): string;
3523
3800
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AdaptiveDataViewComponent<any>, never>;
3524
- 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>;
3525
3802
  static ngAcceptInputType_gridFitPaginationHeight: unknown;
3526
3803
  static ngAcceptInputType_gridFitPaginationMinEmptyRows: unknown;
3527
3804
  static ngAcceptInputType_cardOpenOnClick: unknown;
3528
3805
  static ngAcceptInputType_cardsPerRow: unknown;
3529
3806
  static ngAcceptInputType_loadingSkeletonMinMs: unknown;
3530
3807
  static ngAcceptInputType_showDuplicateAction: unknown;
3808
+ static ngAcceptInputType_showPrintAction: unknown;
3531
3809
  static ngAcceptInputType_showEditAction: unknown;
3532
3810
  static ngAcceptInputType_showRemoveAction: unknown;
3533
3811
  }
@@ -3551,8 +3829,11 @@ declare class DataCardComponent implements OnChanges {
3551
3829
  /** Omisso / `true`: mostra o botão «Alterar» quando {@link showActions} é `true`. */
3552
3830
  showEditAction: boolean;
3553
3831
  editActionLabel: string;
3832
+ editActionIconClass: string;
3554
3833
  /** Omisso / `true`: mostra o botão «Remover» quando {@link showActions} é `true`. */
3555
3834
  showRemoveAction: boolean;
3835
+ /** Quando `true`, omite o botão «Alterar» neste cartão (ex.: ação por linha na consulta). */
3836
+ hideEditAction: boolean;
3556
3837
  /**
3557
3838
  * Clique na superfície do cartão (fora dos botões de ação) emite {@link edit}, como o botão «Alterar».
3558
3839
  */
@@ -3563,15 +3844,17 @@ declare class DataCardComponent implements OnChanges {
3563
3844
  fieldKey: string;
3564
3845
  checked: boolean;
3565
3846
  }>;
3847
+ protected get editActionIcon(): string;
3566
3848
  onCardShellClick(ev: MouseEvent): void;
3567
3849
  onEditClick(ev: Event): void;
3568
3850
  onRemoveClick(ev: Event): void;
3569
3851
  onBooleanFieldChange(field: CardItemBooleanField, ev: Event): void;
3570
3852
  onThumbError(ev: Event): void;
3571
3853
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataCardComponent, never>;
3572
- 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>;
3573
3855
  static ngAcceptInputType_showEditAction: unknown;
3574
3856
  static ngAcceptInputType_showRemoveAction: unknown;
3857
+ static ngAcceptInputType_hideEditAction: unknown;
3575
3858
  static ngAcceptInputType_openOnClick: unknown;
3576
3859
  }
3577
3860
 
@@ -3714,12 +3997,15 @@ declare class StatCardComponent {
3714
3997
  delta: string;
3715
3998
  deltaTone: StatCardDeltaTone;
3716
3999
  clickable: boolean;
4000
+ /** Destaque visual quando o cartão representa o filtro activo (ex.: totalizadores de consulta). */
4001
+ selected: boolean;
3717
4002
  readonly cardActivate: EventEmitter<void>;
3718
4003
  onActivate(ev: Event): void;
3719
4004
  onKeydown(ev: KeyboardEvent): void;
3720
4005
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatCardComponent, never>;
3721
- 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>;
3722
4007
  static ngAcceptInputType_clickable: unknown;
4008
+ static ngAcceptInputType_selected: unknown;
3723
4009
  }
3724
4010
 
3725
4011
  /**
@@ -3765,12 +4051,29 @@ declare class DataListComponent {
3765
4051
  * Bloco de dashboard: título, ações opcionais e conteúdo (stat-cards, listas, grades).
3766
4052
  * Superfície alinhada aos cartões da lib.
3767
4053
  */
3768
- declare class DashboardSectionComponent {
4054
+ declare class DashboardSectionComponent implements OnChanges {
3769
4055
  title: string;
3770
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>;
3771
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;
3772
4073
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardSectionComponent, never>;
3773
- 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;
3774
4077
  }
3775
4078
 
3776
4079
  /**
@@ -3861,6 +4164,12 @@ declare class TreeViewComponent implements OnChanges, OnInit, OnDestroy {
3861
4164
  filterSearchable: boolean;
3862
4165
  /** Placeholder do campo de filtro. */
3863
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;
3864
4173
  /**
3865
4174
  * Mostra ícone à esquerda do rótulo em ramos (pastas).
3866
4175
  * Omisso / `true`: ícone de pasta (ou `node.iconClass`); `false`: só caret + rótulo (mantém espaço com spacer).
@@ -3871,6 +4180,11 @@ declare class TreeViewComponent implements OnChanges, OnInit, OnDestroy {
3871
4180
  * Omisso / `true`: ícone por omissão (ou `node.iconClass`); `false`: spacer alinhado às linhas com ícone.
3872
4181
  */
3873
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;
3874
4188
  readonly selectedIdChange: EventEmitter<string | null>;
3875
4189
  readonly nodeSelect: EventEmitter<TreeViewSelectEvent>;
3876
4190
  /** IDs de ramos expandidos. */
@@ -3902,7 +4216,7 @@ declare class TreeViewComponent implements OnChanges, OnInit, OnDestroy {
3902
4216
  private refreshExpandedForSearch;
3903
4217
  private expandAllBranchesRecursive;
3904
4218
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TreeViewComponent, never>;
3905
- 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>;
3906
4220
  static ngAcceptInputType_filterSearchable: unknown;
3907
4221
  static ngAcceptInputType_showBranchIcons: unknown;
3908
4222
  static ngAcceptInputType_showLeafIcons: unknown;
@@ -4081,6 +4395,8 @@ declare class ConfirmDialogService {
4081
4395
  }
4082
4396
 
4083
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";
4084
4400
  type StructraTheme = (typeof STRUCTRA_THEME_IDS)[number];
4085
4401
 
4086
4402
  /** Identificadores de paleta suportados pela library (uso em `AppThemeService.setTheme`). */
@@ -4107,12 +4423,15 @@ interface AppThemeOption {
4107
4423
  */
4108
4424
  declare class AppThemeService {
4109
4425
  private readonly activeId;
4426
+ private readonly darkMode;
4110
4427
  /** Identificador do tema activo (`blue`, `green`, …). */
4111
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>;
4112
4431
  /**
4113
4432
  * Classes separadas (ex.: CDK `panelClass` — uma string com espaço quebra `classList.add`).
4114
4433
  */
4115
- readonly themeClassList: _angular_core.Signal<readonly [string, string]>;
4434
+ readonly themeClassList: _angular_core.Signal<readonly string[]>;
4116
4435
  /**
4117
4436
  * As duas classes numa string — útil para `[class]`, `[ngClass]` com string, ou hosts HTML.
4118
4437
  * Ex.: `<div [ngClass]="libTheme.getTheme()">` aplica paleta completa no consumidor.
@@ -4120,7 +4439,7 @@ declare class AppThemeService {
4120
4439
  readonly getTheme: _angular_core.Signal<string>;
4121
4440
  /** Mapa para `[ngClass]` com chaves dinâmicas (painéis overlay). */
4122
4441
  readonly themeClassMap: _angular_core.Signal<{
4123
- [x: string]: boolean;
4442
+ [k: string]: boolean;
4124
4443
  }>;
4125
4444
  /** Lista fixa de temas suportados pela library. */
4126
4445
  readonly themeOptions: readonly AppThemeOption[];
@@ -4130,6 +4449,7 @@ declare class AppThemeService {
4130
4449
  */
4131
4450
  readonly themePrimaryColorLabelPtBr: _angular_core.Signal<string>;
4132
4451
  setTheme(id: AppThemeId): void;
4452
+ setDarkMode(enabled: boolean): void;
4133
4453
  isActive(id: AppThemeId): boolean;
4134
4454
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppThemeService, never>;
4135
4455
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AppThemeService>;
@@ -4147,21 +4467,25 @@ declare class ThemeDirective implements OnChanges {
4147
4467
  private readonly renderer;
4148
4468
  private readonly themeService;
4149
4469
  private _theme;
4470
+ private _darkMode;
4150
4471
  set appTheme(value: StructraTheme | AppTheme | string | null | undefined);
4151
4472
  get appTheme(): StructraTheme | AppTheme;
4473
+ /** Modo escuro combinado com a paleta de `appTheme`. */
4474
+ set appThemeDark(value: boolean | string | null | undefined);
4152
4475
  private readonly themeTokenClasses;
4153
4476
  constructor(elementRef: ElementRef<HTMLElement>, renderer: Renderer2, themeService: AppThemeService);
4154
4477
  ngOnChanges(changes: SimpleChanges): void;
4155
4478
  private applyTheme;
4156
4479
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThemeDirective, never>;
4157
- 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>;
4158
4481
  }
4159
4482
 
4160
4483
  declare const APP_THEME_BASE_CLASS = "app-library-theme";
4484
+ declare function isLegacyDarkThemeId(theme: string | null | undefined): boolean;
4161
4485
  declare function normalizeStructraTheme(theme: StructraTheme | string): StructraTheme;
4162
4486
  declare function getThemeTokenClass(theme: StructraTheme | string): string;
4163
- declare function getThemeClassList(theme: StructraTheme | string): readonly [string, string];
4164
- 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;
4165
4489
 
4166
4490
  /**
4167
4491
  * Tema efectivo para hosts/overlays: valor de `[appTheme]` quando definido; caso contrário
@@ -4171,9 +4495,9 @@ declare function injectEffectiveThemeId(appTheme: Signal<StructraTheme | AppThem
4171
4495
 
4172
4496
  /**
4173
4497
  * Remove classes de tema do host e, se `explicitTheme` estiver definido, aplica `.app-library-theme`
4174
- * + `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.
4175
4499
  */
4176
- 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;
4177
4501
 
4178
4502
  /** Classes aplicadas ao painel CDK Dialog + tema da app. */
4179
4503
  declare function libDialogPanelClasses(theme: AppThemeService, extra?: string | string[]): string[];
@@ -4282,6 +4606,61 @@ declare class LoadingDialogService {
4282
4606
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<LoadingDialogService>;
4283
4607
  }
4284
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
+
4285
4664
  /**
4286
4665
  * Posicionamento vertical preferido do dropdown em relação ao trigger.
4287
4666
  * O CDK faz flip automático se não couber no viewport quando configurado com posições múltiplas.
@@ -4303,6 +4682,8 @@ declare class DropdownMenuComponent<T = string> {
4303
4682
  minWidthPx: number;
4304
4683
  /** Se `true`, a largura do painel segue a do trigger. */
4305
4684
  matchTriggerWidth: boolean;
4685
+ /** Se `false`, o menu permanece aberto após selecionar um item (ex.: exportação assíncrona). */
4686
+ closeOnSelect: boolean;
4306
4687
  menuId: string;
4307
4688
  readonly itemSelect: EventEmitter<T>;
4308
4689
  readonly openChange: EventEmitter<boolean>;
@@ -4322,8 +4703,9 @@ declare class DropdownMenuComponent<T = string> {
4322
4703
  onItemSelect(id: T): void;
4323
4704
  onCloseRequest(): void;
4324
4705
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownMenuComponent<any>, never>;
4325
- 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>;
4326
4707
  static ngAcceptInputType_matchTriggerWidth: unknown;
4708
+ static ngAcceptInputType_closeOnSelect: unknown;
4327
4709
  }
4328
4710
 
4329
4711
  declare class ContextMenuComponent<T = string> implements OnDestroy {
@@ -4559,7 +4941,7 @@ declare class AnchoredOverlayComponent {
4559
4941
  scrollStrategy: ScrollStrategy | null;
4560
4942
  readonly overlayPanelClasses: _angular_core.Signal<string[]>;
4561
4943
  readonly panelThemeNgClass: _angular_core.Signal<{
4562
- [x: string]: boolean;
4944
+ [k: string]: boolean;
4563
4945
  }>;
4564
4946
  readonly defaultScrollStrategy: _angular_cdk_overlay.RepositionScrollStrategy;
4565
4947
  get effectiveScrollStrategy(): ScrollStrategy;
@@ -5033,6 +5415,65 @@ declare class AppShellSidebarToggleComponent {
5033
5415
  static ngAcceptInputType_collapsed: unknown;
5034
5416
  }
5035
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
+
5036
5477
  /**
5037
5478
  * Barra superior com zonas de projeção: início, título, **subtítulo (opcional)** e fim.
5038
5479
  * Sem `[appTopbarSubtitle]` o bloco do subtítulo não ocupa espaço.
@@ -5116,6 +5557,78 @@ declare class AppBreadcrumbComponent {
5116
5557
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppBreadcrumbComponent, "app-breadcrumb", never, { "items": { "alias": "items"; "required": true; }; }, {}, never, never, true, never>;
5117
5558
  }
5118
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
+
5119
5632
  /** Alinhado ao backend (`DynamicConsultaWhereBuilder`): operadores em minúsculas. */
5120
5633
  type ConsultaValorTipo = 'string' | 'bool' | 'datetime' | 'number';
5121
5634
  interface ConsultaCampoDef {
@@ -5161,7 +5674,7 @@ interface ConsultaFiltroPreset<TColuna extends string = string> {
5161
5674
  declare const OPS_TEXTO: readonly ConsultaOperadorOption[];
5162
5675
  declare const OPS_BOOL: readonly ConsultaOperadorOption[];
5163
5676
  declare const OPS_DATA: readonly ConsultaOperadorOption[];
5164
- /** 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). */
5165
5678
  declare const OPS_TEXTO_MULTISELECT: readonly ConsultaOperadorOption[];
5166
5679
  /**
5167
5680
  * Colunas `datetime`: usar `app-date-field` para qualquer operador excepto `between`
@@ -6271,6 +6784,17 @@ interface ConsultaPageRuntime {
6271
6784
  * Omissão: não normaliza operadores (retrocompat).
6272
6785
  */
6273
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
+ }>;
6274
6798
  }) => Promise<{
6275
6799
  itens: unknown[];
6276
6800
  total: number;
@@ -6290,6 +6814,13 @@ interface ConsultaPageRuntime {
6290
6814
  * Omissão na página base: 15.
6291
6815
  */
6292
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;
6293
6824
  /**
6294
6825
  * Monta os mesmos `filtrosAvulsos` que o fluxo servidor usa em {@link carregarListaComConsulta}.
6295
6826
  * Obrigatório para activar cache quando {@link consultaListaCacheNamespace} está definido.
@@ -6311,9 +6842,14 @@ interface ConsultaPageRuntime {
6311
6842
  itemPassaConsulta: (item: unknown, itens: ConsultaFiltroItem<string>[], valoresPorItemId: Record<string, string>) => boolean;
6312
6843
  editar?: (row: Record<string, unknown>) => void;
6313
6844
  duplicar?: (row: Record<string, unknown>) => void;
6845
+ imprimir?: (row: Record<string, unknown>) => void;
6314
6846
  remover?: (row: Record<string, unknown>) => Promise<void> | void;
6315
6847
  /** `true` quando `[DuplicateConfig(Enabled = true)]` no layout da página. */
6316
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;
6317
6853
  /**
6318
6854
  * Após {@link remover} com sucesso, em vez de retirar a linha da lista, actualiza-a com `ativo: false`
6319
6855
  * (inativação local alinhada ao soft-delete no servidor). Omissão: remove a linha pelo `id`.
@@ -6338,6 +6874,8 @@ interface ConsultaPageRuntime {
6338
6874
  novoRouterLink?: string | unknown[];
6339
6875
  /** Coluna Ações: tooltip/aria do botão de abrir registo. */
6340
6876
  editActionLabel: string;
6877
+ /** Coluna Ações: ícone Font Awesome do botão editar (ex.: `fa-paper-plane`). */
6878
+ editActionIconClass?: string;
6341
6879
  novoAriaLabel?: string;
6342
6880
  toastTitleLista: string;
6343
6881
  /** Avisos na consulta (ex. validação de filtros) — omissão: {@link toastTitleLista}. */
@@ -6370,6 +6908,105 @@ interface ConsultaPageRuntime {
6370
6908
  };
6371
6909
  }
6372
6910
 
6911
+ /** Separador interno entre scope e chave lógica. */
6912
+ declare const STRUCTRA_PAGE_CACHE_SCOPE_SEP = "\u001F";
6913
+ interface StructraPageCacheGetOrLoadOptions {
6914
+ ttlMs?: number;
6915
+ force?: boolean;
6916
+ scope?: string;
6917
+ }
6918
+ interface StructraPageCacheSetOptions {
6919
+ ttlMs?: number;
6920
+ scope?: string;
6921
+ }
6922
+ /**
6923
+ * Cache genérico em memória para páginas/rotas administrativas.
6924
+ * Suporta TTL opcional, isolamento por scope (rota/tenant) e deduplicação de loaders simultâneos.
6925
+ * Perdido ao recarregar a aplicação (F5).
6926
+ */
6927
+ declare class StructraPageCacheService {
6928
+ private readonly entries;
6929
+ private readonly inFlight;
6930
+ getOrLoad<T>(key: string, loader: () => Observable<T>, options?: StructraPageCacheGetOrLoadOptions): Observable<T>;
6931
+ get<T>(key: string, scope?: string): T | null;
6932
+ set<T>(key: string, value: T, options?: StructraPageCacheSetOptions): void;
6933
+ invalidate(key: string, scope?: string): void;
6934
+ invalidateScope(scope: string): void;
6935
+ clear(): void;
6936
+ /** Presença bruta (ignora TTL) — útil para testes. */
6937
+ hasEntry(key: string, scope?: string): boolean;
6938
+ private buildScopedKey;
6939
+ private readEntry;
6940
+ private writeEntry;
6941
+ private deleteEntry;
6942
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraPageCacheService, never>;
6943
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<StructraPageCacheService>;
6944
+ }
6945
+ /**
6946
+ * Monta scope estável para cache por rota administrativa (ex.: `/home/personalizacao`).
6947
+ * Quando informado, inclui tenant/empresa para isolar sessões multi-tenant.
6948
+ */
6949
+ declare function buildStructraPageCacheRouteScope(routePath: string, tenantId?: string | null): string;
6950
+ /** Chave lógica para cache de `initCadastro` por entidade e id de rota. */
6951
+ declare function buildStructraPageCacheCadastroInitKey(entityKey: string, routeId: string): string;
6952
+ /** Scope efectivo combinando scope extra (tenant) com a rota do cadastro. */
6953
+ declare function resolveStructraPageCacheCadastroScope(routePath: string, pageCacheScope?: string, tenantId?: string | null): string;
6954
+
6955
+ /** Prefixo lógico para chaves de redirect administrativo em {@link StructraPageCacheService}. */
6956
+ declare const STRUCTRA_ADMIN_ROUTE_REDIRECT_CACHE_PREFIX = "admin-route-redirect";
6957
+ /** Chave típica para redirect de personalização/login (`login-id`). */
6958
+ declare const STRUCTRA_ADMIN_ROUTE_REDIRECT_LOGIN_ID_CACHE_KEY: string;
6959
+ declare function buildStructraAdminRouteRedirectCacheKey(logicalKey: string): string;
6960
+ declare function normalizeStructraAdminPath(url: string): string;
6961
+ /**
6962
+ * Evita navegação redundante quando o utilizador clica de novo no mesmo item de menu
6963
+ * (ex.: já está em `/home/personalizacao/:id` e o menu aponta para `/home/personalizacao`).
6964
+ */
6965
+ declare function shouldSkipStructraAdminMenuNavigation(menuUrl: string, currentPath: string): boolean;
6966
+ interface ResolveStructraAdminMenuUrlOptions {
6967
+ /** Quando o menu aponta para rota “vazia” que redireciona (ex.: personalização), usa destino já resolvido. */
6968
+ resolveCachedChildPath?: () => string | null | undefined;
6969
+ }
6970
+ /** Resolve URL final do menu, preferindo destino filho em cache quando disponível. */
6971
+ declare function resolveStructraAdminMenuUrl(menuUrl: string, options?: ResolveStructraAdminMenuUrlOptions): string;
6972
+ interface StructraAdminRouteRedirectCacheOptions {
6973
+ cacheKey: string;
6974
+ routePath: string;
6975
+ tenantId?: string | null;
6976
+ }
6977
+ /** Lê destino de redirect já resolvido (sem ir à rede). */
6978
+ declare function readStructraAdminRouteRedirectTarget(pageCache: StructraPageCacheService, options: StructraAdminRouteRedirectCacheOptions): string | null;
6979
+ /** Monta URL filha padrão (`/base/:id`) a partir do id em cache. */
6980
+ declare function buildStructraAdminRouteRedirectChildUrl(routePath: string, targetId: string | null | undefined): string | null;
6981
+ interface StructraAdminRouteRedirectLoadOptions extends StructraAdminRouteRedirectCacheOptions {
6982
+ loader: () => Observable<string | null>;
6983
+ force?: boolean;
6984
+ }
6985
+ /** Carrega destino de redirect com cache em memória (dedupe + TTL opcional). */
6986
+ declare function loadStructraAdminRouteRedirectTarget(pageCache: StructraPageCacheService, options: StructraAdminRouteRedirectLoadOptions): Observable<string | null>;
6987
+
6988
+ /**
6989
+ * Base para páginas vazias que resolvem um id via backend e redirecionam para rota filha.
6990
+ * O resultado fica em {@link StructraPageCacheService} — reabrir o menu não refaz a RPC.
6991
+ */
6992
+ declare abstract class StructraAdminRouteRedirectPageBase implements OnInit {
6993
+ protected readonly router: Router;
6994
+ protected readonly pageCache: StructraPageCacheService;
6995
+ /** Rota base do redirect (ex.: `/home/personalizacao`). */
6996
+ protected abstract readonly redirectRoutePath: string;
6997
+ /** Chave lógica em cache (ex.: {@link STRUCTRA_ADMIN_ROUTE_REDIRECT_LOGIN_ID_CACHE_KEY}). */
6998
+ protected abstract readonly redirectCacheKey: string;
6999
+ protected abstract readonly fallbackNavigateUrl: string;
7000
+ /** Loader que devolve o id de destino (ou null quando inválido). */
7001
+ protected abstract loadRedirectTarget(): Observable<string | null>;
7002
+ /** Scope multi-tenant opcional para isolar cache por empresa. */
7003
+ protected resolveRedirectTenantId(): string | null | undefined;
7004
+ ngOnInit(): void;
7005
+ protected runRedirect(): Promise<void>;
7006
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraAdminRouteRedirectPageBase, never>;
7007
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StructraAdminRouteRedirectPageBase, never, never, {}, {}, never, never, true, never>;
7008
+ }
7009
+
6373
7010
  /** Separador entre namespace da consulta e corpo JSON estável da chave composta. */
6374
7011
  declare const CONSULTA_LISTA_CACHE_NS_SEP = "\u001F";
6375
7012
  interface ConsultaPageCacheEntry<TValue> {
@@ -6472,6 +7109,115 @@ declare class ConsultaListaMemoriaCacheService {
6472
7109
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<ConsultaListaMemoriaCacheService>;
6473
7110
  }
6474
7111
 
7112
+ /** Payload persistido em `str_layout_json` (versão + estado de colunas AG Grid). */
7113
+ interface GridLayoutConsultaPersistedPayload {
7114
+ version: number;
7115
+ columnState: unknown[];
7116
+ savedAt: string;
7117
+ }
7118
+ interface GridLayoutConsultaApiDto {
7119
+ tela: string;
7120
+ grid: string;
7121
+ layoutJson: string;
7122
+ }
7123
+ type StructraGridLayoutTenantResolverFn = () => string | null | undefined;
7124
+ type StructraGridLayoutApiBaseResolverFn = () => string;
7125
+ type StructraGridLayoutAuthHeadersResolverFn = () => Record<string, string>;
7126
+ /**
7127
+ * Tenant atual para chave de cache em memória (`tenant:tela:grid`).
7128
+ * A app deve fornecer (ex.: `SessionContextService.tenantAtualId`).
7129
+ */
7130
+ declare const STRUCTRA_GRID_LAYOUT_TENANT_RESOLVER: InjectionToken<StructraGridLayoutTenantResolverFn>;
7131
+ /** Base URL da API REST (sem barra final). Omisso: `window.location.origin`. */
7132
+ declare const STRUCTRA_GRID_LAYOUT_API_BASE_RESOLVER: InjectionToken<StructraGridLayoutApiBaseResolverFn>;
7133
+ /** Headers de autenticação para GET/PUT do layout (ex.: JWT). */
7134
+ declare const STRUCTRA_GRID_LAYOUT_AUTH_HEADERS_RESOLVER: InjectionToken<StructraGridLayoutAuthHeadersResolverFn>;
7135
+
7136
+ declare class GridLayoutConsultaService {
7137
+ private readonly http;
7138
+ private readonly tenantResolver;
7139
+ private readonly apiBaseResolver;
7140
+ private readonly authHeadersResolver;
7141
+ private readonly memoryCache;
7142
+ /** Incrementado a cada gravação local — impede GET async de apagar layout mais recente. */
7143
+ private readonly layoutRevisionByKey;
7144
+ /** Chaves já consultadas no backend nesta sessão (evita GET repetido ao navegar). */
7145
+ private readonly backendFetchedKeys;
7146
+ private readonly inFlightByKey;
7147
+ private saveTimer;
7148
+ private tenantRetryTimer;
7149
+ /** Re-tenta GET quando o tenant ainda não hidratou (F5) e sessionStorage não tinha layout. */
7150
+ private tenantRetryGetLayoutTimer;
7151
+ private pendingGetLayout;
7152
+ private pendingSave;
7153
+ /** Detecta transição `_` → tenant real para migrar cache e retomar PUT pendente. */
7154
+ private resolvedTenantForCache;
7155
+ /** Ouve quando layout entra em cache (GET backend / migração tenant) — grelha reaplica no F5. */
7156
+ private readonly layoutCacheUpdatedListeners;
7157
+ /** Subscrição para reaplicar layout quando o GET async concluir (ex.: F5 com tenant a hidratar). */
7158
+ onLayoutCacheUpdated(listener: (cacheKey: string) => void): () => void;
7159
+ /**
7160
+ * Leitura síncrona: memória → sessionStorage. Não dispara HTTP.
7161
+ * Usar antes do primeiro paint da grelha para aplicar colunas sem flicker.
7162
+ */
7163
+ getCachedLayout(tela: string, grid?: string): GridLayoutConsultaPersistedPayload | null;
7164
+ /** Indica se o backend já foi consultado nesta sessão para `tenant:tela:grid`. */
7165
+ hasFetchedFromBackend(tela: string, grid?: string): boolean;
7166
+ /** Compara chave interna `tenant:tela:grid` com tela/grid visíveis ao consumidor (ex.: listener do data-grid). */
7167
+ cacheKeyMatchesTelaGrid(cacheKey: string, tela: string, grid?: string): boolean;
7168
+ getLayout(tela: string, grid?: string): Promise<GridLayoutConsultaPersistedPayload | null>;
7169
+ saveLayout(tela: string, grid: string, layoutJson: string): void;
7170
+ saveLayoutFromColumnState(tela: string, grid: string, columnState: unknown[]): void;
7171
+ private fetchLayoutFromBackend;
7172
+ /**
7173
+ * Após GET async: preserva layout local/gravação pendente se o utilizador alterou colunas entretanto.
7174
+ * `undefined` = aplicar resposta remota normalmente.
7175
+ */
7176
+ private resolveLocalLayoutAfterFetch;
7177
+ private isRemoteLayoutNewer;
7178
+ private bumpLayoutRevision;
7179
+ private getLayoutRevision;
7180
+ private markBackendFetched;
7181
+ private storeLayout;
7182
+ private notifyLayoutCacheUpdated;
7183
+ private scheduleDebouncedSave;
7184
+ private flushSave;
7185
+ /** Re-tenta GET quando sessionStorage estava vazio e o tenant ainda não hidratou (F5). */
7186
+ private scheduleTenantRetryGetLayout;
7187
+ /** Re-tenta PUT quando o tenant ainda não hidratou (F5) ou após falha transitória. */
7188
+ private scheduleTenantRetryFlush;
7189
+ private normalizeKeys;
7190
+ private buildCacheKey;
7191
+ private resolveTenantIdForCache;
7192
+ private tenantReadyForBackend;
7193
+ private noteTenantResolution;
7194
+ /**
7195
+ * Migra entradas gravadas com tenant `_` para o tenant real quando a sessão hidrata (F5).
7196
+ * Preserva layout em memória/sessionStorage e retoma PUT pendente.
7197
+ */
7198
+ private migratePlaceholderCacheToRealTenant;
7199
+ private persistLastTenantId;
7200
+ private readLastTenantId;
7201
+ private sessionStorageKey;
7202
+ /**
7203
+ * Lê layout em sessionStorage pela chave exacta ou, em F5, por sufixo `:tela:grid`
7204
+ * quando o tenant ainda não estava disponível na 1.ª leitura.
7205
+ */
7206
+ private readSessionStorageForLayout;
7207
+ private scanSessionStorageByTelaGrid;
7208
+ /**
7209
+ * `undefined` = ausente em sessionStorage; `null` = layout vazio persistido.
7210
+ */
7211
+ private readSessionStorage;
7212
+ private writeSessionStorage;
7213
+ private removeSessionStorage;
7214
+ private apiUrl;
7215
+ private authHeaders;
7216
+ private parseLayoutJson;
7217
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridLayoutConsultaService, never>;
7218
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<GridLayoutConsultaService>;
7219
+ }
7220
+
6475
7221
  /**
6476
7222
  * Vista unificada da metadata da página (consulta + títulos/layout + snapshot opcional do cadastro declarativo).
6477
7223
  * Piloto: Pessoa — outras entidades podem omitir {@link ConsultaPageMetadataUnified.cadastro}.
@@ -6639,8 +7385,11 @@ interface ConsultaCrudAdapterConfig<TItem, TRow extends Record<string, unknown>,
6639
7385
  itemPassaConsulta?: ConsultaPageRuntime['itemPassaConsulta'];
6640
7386
  editar?: (row: Record<string, unknown>) => void;
6641
7387
  duplicar?: (row: Record<string, unknown>) => void;
7388
+ imprimir?: (row: Record<string, unknown>) => void;
6642
7389
  remover?: (row: Record<string, unknown>) => Promise<void> | void;
6643
7390
  showDuplicateAction?: boolean;
7391
+ showPrintAction?: boolean;
7392
+ printActionLabel?: string;
6644
7393
  confirmDuplicarLinha?: ConsultaPageRuntime['confirmDuplicarLinha'];
6645
7394
  duplicateSuccessMessage?: string;
6646
7395
  /**
@@ -6654,6 +7403,8 @@ interface ConsultaCrudAdapterConfig<TItem, TRow extends Record<string, unknown>,
6654
7403
  showNovoButton?: boolean;
6655
7404
  /** Omissão: `'Alterar'` (ou `grid_config.edit_action_label` na factory padrão). */
6656
7405
  editActionLabel?: string;
7406
+ /** Omissão: `fa-pen-to-square`. */
7407
+ editActionIconClass?: string;
6657
7408
  /** Omissão: `'Novo registro'`. */
6658
7409
  novoAriaLabel?: string;
6659
7410
  /** Omissão: `'Consulta'`. */
@@ -6901,7 +7652,7 @@ interface ConsultaCatalogBundleConfig<TMetadataReply, TFiltroPreset> {
6901
7652
  chaveConsulta: string;
6902
7653
  ensureAuth: () => Promise<void>;
6903
7654
  getMetadata: () => Promise<TMetadataReply>;
6904
- /** `SELECT COUNT(*)` em cabeçalhos `filtro` (sem `filtro_item`). */
7655
+ /** `SELECT COUNT(*)` em cabeçalhos `tbl_filtro` (sem `tbl_filtro_item`). */
6905
7656
  contarFiltrosCabecalhos: () => Promise<number>;
6906
7657
  listarFiltros: () => Promise<{
6907
7658
  filtros?: FiltroSalvo[];
@@ -7069,6 +7820,8 @@ declare class ConsultaCadastroFiltroDialogComponent {
7069
7820
  readonly itemDraftSearchSelectOpcoesMescladas: _angular_core.Signal<UiSelectOption<string>[]>;
7070
7821
  /** `null`: usar {@link itemDraftSearchSelectOpcoesMescladas}; senão lista já filtrada pela pesquisa. */
7071
7822
  readonly itemDraftSearchSelectOpcoesPainel: _angular_core.WritableSignal<UiSelectOption<string>[] | null>;
7823
+ /** Descarta respostas obsoletas quando abertura e pesquisa correm em paralelo no draft. */
7824
+ private draftSearchSelectPageReqGen;
7072
7825
  readonly itemDraftSearchSelectOpcoesParaTemplate: _angular_core.Signal<UiSelectOption<string>[]>;
7073
7826
  private itemDraftColunaLimpezaProgramatica;
7074
7827
  readonly dialogCadastroValidationItems: _angular_core.WritableSignal<ValidationSummaryItem[]>;
@@ -7116,6 +7869,7 @@ declare class ConsultaCadastroFiltroDialogComponent {
7116
7869
  isFilterSelectColuna(col: string | null | undefined): boolean;
7117
7870
  isSearchSelectColuna(col: string | null | undefined): boolean;
7118
7871
  onDraftSearchSelectPageRequested(ev: DropdownSearchPageRequested): Promise<void>;
7872
+ private opcoesRemotasCampoJaCarregadas;
7119
7873
  onDraftMultiselectPageRequested(ev: SelectPageRequested): Promise<void>;
7120
7874
  isNumeroColuna(col: string | null | undefined): boolean;
7121
7875
  isDatetimeColuna(col: string | null | undefined): boolean;
@@ -7160,7 +7914,7 @@ declare class ConsultaBasePageComponent implements OnInit, AfterViewInit, OnDest
7160
7914
  private readonly confirm;
7161
7915
  private readonly toast;
7162
7916
  private readonly topbarSlot;
7163
- private readonly topbarTitleSkeleton;
7917
+ protected readonly topbarTitleSkeleton: _angular_core.WritableSignal<boolean>;
7164
7918
  private readonly listaMemoriaCache;
7165
7919
  private readonly router;
7166
7920
  private readonly routeReuse;
@@ -7188,6 +7942,10 @@ declare class ConsultaBasePageComponent implements OnInit, AfterViewInit, OnDest
7188
7942
  * Opções mostradas no painel do `search_select` por id do critério do preset (filtradas localmente pela query).
7189
7943
  */
7190
7944
  private readonly consultaSearchSelectOpcoesPainelPorItemId;
7945
+ /** Descarta respostas obsoletas quando abertura (query vazia) e pesquisa (query com texto) correm em paralelo. */
7946
+ private readonly searchSelectPageReqGenByItemId;
7947
+ private readonly multiselectRemotoLoadGenByCampo;
7948
+ private readonly multiselectRemotoLoadPromiseByCampo;
7191
7949
  readonly consultaSearchSelectPageSize = 96;
7192
7950
  /** Runtime com filtros/grelha alinhados ao metadata quando disponível. */
7193
7951
  readonly runtimeConsulta: _angular_core.Signal<ConsultaPageRuntime>;
@@ -7288,12 +8046,17 @@ declare class ConsultaBasePageComponent implements OnInit, AfterViewInit, OnDest
7288
8046
  isFilterSelectColuna(col: string | null | undefined): boolean;
7289
8047
  isSearchSelectColuna(col: string | null | undefined): boolean;
7290
8048
  private limparOpcoesPainelSearchSelectConsulta;
7291
- /** Opções do dropdown com pesquisa (painel filtrado ou lista mesclada por defeito). */
8049
+ /**
8050
+ * Opções do painel do `search_select`.
8051
+ * Sem overlay explícito, não devolve a lista remota completa (pré-carga) — evita flash de todas as marcas
8052
+ * antes da primeira `pageRequested`; com valor seleccionado mantém merge para o rótulo no input.
8053
+ */
7292
8054
  consultaSearchSelectOpcoesPainel(it: ConsultaFiltroItem<string>): UiSelectOption<string>[];
7293
8055
  onConsultaSearchSelectPageRequested(it: ConsultaFiltroItem<string>, ev: DropdownSearchPageRequested): Promise<void>;
7294
8056
  onConsultaMultiselectPageRequested(coluna: string, ev: SelectPageRequested): Promise<void>;
7295
8057
  /** Repasse ao diálogo de filtro: mesmo carregamento remoto que no painel principal. */
7296
8058
  readonly recarregarOpcoesMultiselectCampo: (campo: string) => Promise<void>;
8059
+ private opcoesRemotasCampoJaCarregadas;
7297
8060
  private aplicarOpcoesMultiselectRemotasCampo;
7298
8061
  private precarregarOpcoesMultiselectRemotasInicial;
7299
8062
  /** Critérios numéricos no metadata (`decimal`, `integer`, …) — input decimal + operadores de comparação. */
@@ -7371,6 +8134,11 @@ declare class ConsultaBasePageComponent implements OnInit, AfterViewInit, OnDest
7371
8134
  * para respostas muito rápidas não «saltarem» o estado de carregamento.
7372
8135
  */
7373
8136
  private yieldForSkeletonPaint;
8137
+ /**
8138
+ * Activa loading explícito e esvazia a grelha para o skeleton (Structra: overlay só com lista vazia).
8139
+ * Painel de filtros e chrome permanecem visíveis.
8140
+ */
8141
+ private iniciarLoadingGrelhaComSkeleton;
7374
8142
  /** Respeita {@link CONSULTA_LISTA_SKELETON_MIN_MS} após mostrar skeleton dos critérios de filtro. */
7375
8143
  private yieldUntilMinFiltroSkeletonMs;
7376
8144
  /** Pesquisa válida: skeleton na grelha + nova leitura do servidor e só então aplica o preset consultado. */
@@ -7378,6 +8146,7 @@ declare class ConsultaBasePageComponent implements OnInit, AfterViewInit, OnDest
7378
8146
  carregarTodos(): Promise<void>;
7379
8147
  editar(row: Record<string, unknown>): void;
7380
8148
  duplicar(row: Record<string, unknown>): Promise<void>;
8149
+ imprimir(row: Record<string, unknown>): void;
7381
8150
  excluirUsuario(row: Record<string, unknown>): Promise<void>;
7382
8151
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConsultaBasePageComponent, never>;
7383
8152
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConsultaBasePageComponent, "app-consulta-base-page", never, { "runtime": { "alias": "runtime"; "required": true; "isSignal": true; }; "topbarEndExtraTemplate": { "alias": "topbarEndExtraTemplate"; "required": false; "isSignal": true; }; "tooltipBotaoPesquisar": { "alias": "tooltipBotaoPesquisar"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -7447,8 +8216,11 @@ interface CreateConsultaPadraoRuntimeOptions<TItem, TRow extends Record<string,
7447
8216
  mapGridRow?: (item: TItem) => TRow;
7448
8217
  mapCard?: CardListMapFn<TRow>;
7449
8218
  editar?: ConsultaCrudAdapterConfig<TItem, TRow, TPreset>['editar'];
8219
+ imprimir?: ConsultaCrudAdapterConfig<TItem, TRow, TPreset>['imprimir'];
7450
8220
  remover?: ConsultaCrudAdapterConfig<TItem, TRow, TPreset>['remover'];
7451
8221
  removerActualizaAtivoEmVezDeRetirar?: boolean;
8222
+ showPrintAction?: boolean;
8223
+ printActionLabel?: string;
7452
8224
  novoRouterLink?: string | unknown[];
7453
8225
  toastTitleLista?: string;
7454
8226
  confirmRemoverLinha?: ConsultaPageRuntime['confirmRemoverLinha'];
@@ -7649,6 +8421,12 @@ interface CadastroValidationUi {
7649
8421
  */
7650
8422
  readonly beforeSummaryItemActivate?: ((item: ValidationSummaryItem) => void) | null;
7651
8423
  }
8424
+ /** Acção opcional à esquerda de Salvar/Novo na topbar ou toolbar interna do cadastro. */
8425
+ interface CadastroHeaderSecondaryAction {
8426
+ label: string;
8427
+ icon?: string;
8428
+ disabled?: boolean;
8429
+ }
7652
8430
  type CadastroModo = 'novo' | 'editar';
7653
8431
  interface CadastroPageRuntime<TResponse = unknown> {
7654
8432
  modo: Signal<CadastroModo>;
@@ -8022,6 +8800,8 @@ interface BuildCadastroPageRuntimeOptions {
8022
8800
  * Omisso: `id` vem de `ActivatedRoute`. Em dialog de referência, passar o id explícito (`novo` ou guid).
8023
8801
  */
8024
8802
  entityIdFromContext?: Signal<string | null | undefined>;
8803
+ /** Invalida cache de `initCadastro` após gravar/excluir (Structra page cache). */
8804
+ invalidateCadastroInitPageCache?: (routeId: string) => void;
8025
8805
  }
8026
8806
  /**
8027
8807
  * Constrói o runtime de uma página de cadastro (novo/editar): carregamento, salvar, cancelar, excluir opcional,
@@ -8919,6 +9699,17 @@ interface CadastroMetadataPageStateConfig<TInit, TDto, TSalvar> {
8919
9699
  * em vez do próprio `init`.
8920
9700
  */
8921
9701
  sourceKey?: string;
9702
+ /**
9703
+ * Scope opcional para {@link StructraPageCacheService} (ex.: tenant/empresa).
9704
+ * Omisso: scope derivado da rota do cadastro.
9705
+ */
9706
+ pageCacheScope?: string;
9707
+ /** Desliga cache de `initCadastro` entre navegações pelo menu (por defeito activo). */
9708
+ cadastroInitPageCacheDisabled?: boolean;
9709
+ /** TTL do cache de init (ms). Omisso: sem expiração até invalidação ou F5. */
9710
+ cadastroInitCacheTtlMs?: number;
9711
+ /** Identificador lógico da entidade na chave de cache de init. Omisso: rota ou `sourceKey`. */
9712
+ cadastroInitCacheEntityKey?: string;
8922
9713
  /** Referências inline (dropdown + rascunho + resultado); a base orquestra ciclo de vida. */
8923
9714
  referenciasInline?: readonly CadastroInlineReferencePart[];
8924
9715
  /**
@@ -9229,6 +10020,10 @@ declare abstract class CadastroMetadataPageStateBase<TInit, TDto, TSalvar> {
9229
10020
  protected resolveLeafActivatedRoute(): ActivatedRoute;
9230
10021
  /** Path do cadastro anfitrião para rascunhos inline; modal sobrescreve com {@link CADASTRO_REFERENCIA_DIALOG_CONTEXT}. */
9231
10022
  protected resolveHostPathCadastroForInlineDraft(): string;
10023
+ protected resolveCadastroInitPageCacheEntityKey(): string;
10024
+ protected resolveCadastroInitPageCacheScope(): string;
10025
+ protected invalidateCadastroInitPageCache(routeId: string): void;
10026
+ protected loadCadastroInitForRouteId(id: string): Observable<TInit>;
9232
10027
  protected static isCadastroLeafSegment(leafPath: string | undefined): boolean;
9233
10028
  /**
9234
10029
  * Regresso de RotaReferência com instância ainda em memória (`RouteReuseStrategy` + `data.reuse`):
@@ -9341,6 +10136,9 @@ declare class CadastroMetadataPageComponent {
9341
10136
  readonly embeddedInPageShell: _angular_core.InputSignal<boolean>;
9342
10137
  readonly salvarSubmit: _angular_core.OutputEmitterRef<void>;
9343
10138
  readonly toolbarButtonClick: _angular_core.OutputEmitterRef<CadastroToolbarButtonDto>;
10139
+ readonly headerSecondaryAction: _angular_core.InputSignal<CadastroHeaderSecondaryAction | null>;
10140
+ readonly headerSecondaryActionClick: _angular_core.OutputEmitterRef<void>;
10141
+ protected readonly headerSecondaryActionVisible: _angular_core.Signal<boolean>;
9344
10142
  readonly tituloSection: _angular_core.InputSignal<string | null>;
9345
10143
  readonly subtituloSection: _angular_core.InputSignal<string | null>;
9346
10144
  /** Metadata efectiva: input da shell ou bundle vindo do {@link CadastroMetadataView}. */
@@ -9368,7 +10166,7 @@ declare class CadastroMetadataPageComponent {
9368
10166
  sectionTitulo(c: CadastroMetadataPageCadastro): string;
9369
10167
  sectionSubtitulo(c: CadastroMetadataPageCadastro): string;
9370
10168
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CadastroMetadataPageComponent, never>;
9371
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadastroMetadataPageComponent, "app-cadastro-metadata-page", never, { "entityName": { "alias": "entityName"; "required": true; "isSignal": true; }; "entityLabel": { "alias": "entityLabel"; "required": true; "isSignal": true; }; "cadastro": { "alias": "cadastro"; "required": false; "isSignal": true; }; "initError": { "alias": "initError"; "required": false; "isSignal": true; }; "initLoading": { "alias": "initLoading"; "required": false; "isSignal": true; }; "validationUi": { "alias": "validationUi"; "required": false; "isSignal": true; }; "searchSelectBindings": { "alias": "searchSelectBindings"; "required": false; "isSignal": true; }; "listSelectBindings": { "alias": "listSelectBindings"; "required": false; "isSignal": true; }; "multiselectBindings": { "alias": "multiselectBindings"; "required": false; "isSignal": true; }; "metadataCamposReply": { "alias": "metadataCamposReply"; "required": false; "isSignal": true; }; "redirectReturnUrl": { "alias": "redirectReturnUrl"; "required": false; "isSignal": true; }; "painelMaxWidthHint": { "alias": "painelMaxWidthHint"; "required": false; "isSignal": true; }; "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "corpoCentralizado": { "alias": "corpoCentralizado"; "required": false; "isSignal": true; }; "cabecalhoPaginaVisivel": { "alias": "cabecalhoPaginaVisivel"; "required": false; "isSignal": true; }; "toolbarInterno": { "alias": "toolbarInterno"; "required": false; "isSignal": true; }; "embeddedInReferenciaDialog": { "alias": "embeddedInReferenciaDialog"; "required": false; "isSignal": true; }; "suppressInternalPageTabs": { "alias": "suppressInternalPageTabs"; "required": false; "isSignal": true; }; "externalShellTabKey": { "alias": "externalShellTabKey"; "required": false; "isSignal": true; }; "embeddedInPageShell": { "alias": "embeddedInPageShell"; "required": false; "isSignal": true; }; "tituloSection": { "alias": "tituloSection"; "required": false; "isSignal": true; }; "subtituloSection": { "alias": "subtituloSection"; "required": false; "isSignal": true; }; }, { "salvarSubmit": "salvarSubmit"; "toolbarButtonClick": "toolbarButtonClick"; }, never, never, true, never>;
10169
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadastroMetadataPageComponent, "app-cadastro-metadata-page", never, { "entityName": { "alias": "entityName"; "required": true; "isSignal": true; }; "entityLabel": { "alias": "entityLabel"; "required": true; "isSignal": true; }; "cadastro": { "alias": "cadastro"; "required": false; "isSignal": true; }; "initError": { "alias": "initError"; "required": false; "isSignal": true; }; "initLoading": { "alias": "initLoading"; "required": false; "isSignal": true; }; "validationUi": { "alias": "validationUi"; "required": false; "isSignal": true; }; "searchSelectBindings": { "alias": "searchSelectBindings"; "required": false; "isSignal": true; }; "listSelectBindings": { "alias": "listSelectBindings"; "required": false; "isSignal": true; }; "multiselectBindings": { "alias": "multiselectBindings"; "required": false; "isSignal": true; }; "metadataCamposReply": { "alias": "metadataCamposReply"; "required": false; "isSignal": true; }; "redirectReturnUrl": { "alias": "redirectReturnUrl"; "required": false; "isSignal": true; }; "painelMaxWidthHint": { "alias": "painelMaxWidthHint"; "required": false; "isSignal": true; }; "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "corpoCentralizado": { "alias": "corpoCentralizado"; "required": false; "isSignal": true; }; "cabecalhoPaginaVisivel": { "alias": "cabecalhoPaginaVisivel"; "required": false; "isSignal": true; }; "toolbarInterno": { "alias": "toolbarInterno"; "required": false; "isSignal": true; }; "embeddedInReferenciaDialog": { "alias": "embeddedInReferenciaDialog"; "required": false; "isSignal": true; }; "suppressInternalPageTabs": { "alias": "suppressInternalPageTabs"; "required": false; "isSignal": true; }; "externalShellTabKey": { "alias": "externalShellTabKey"; "required": false; "isSignal": true; }; "embeddedInPageShell": { "alias": "embeddedInPageShell"; "required": false; "isSignal": true; }; "headerSecondaryAction": { "alias": "headerSecondaryAction"; "required": false; "isSignal": true; }; "tituloSection": { "alias": "tituloSection"; "required": false; "isSignal": true; }; "subtituloSection": { "alias": "subtituloSection"; "required": false; "isSignal": true; }; }, { "salvarSubmit": "salvarSubmit"; "toolbarButtonClick": "toolbarButtonClick"; "headerSecondaryActionClick": "headerSecondaryActionClick"; }, never, never, true, never>;
9372
10170
  }
9373
10171
 
9374
10172
  interface CadastroMetadataPageShellCallbacks {
@@ -9395,6 +10193,8 @@ interface CadastroMetadataShellRuntime {
9395
10193
  readonly painelMaxWidthHint: string | null;
9396
10194
  readonly onSalvarSubmit: () => void;
9397
10195
  readonly onToolbarButtonClick?: (btn: CadastroToolbarButtonDto) => void;
10196
+ readonly headerSecondaryAction?: CadastroHeaderSecondaryAction | null;
10197
+ readonly onHeaderSecondaryActionClick?: () => void;
9398
10198
  readonly metadataCamposReply?: CadastroMetadataCamposReplyLike | null;
9399
10199
  /**
9400
10200
  * Quando `vm.entityName` vem vazio, replica o padrão `[entityName]="metadataPageVm().entityName || '…'"`.
@@ -9420,6 +10220,8 @@ interface BuildCadastroMetadataShellRuntimeOptions {
9420
10220
  readonly painelMaxWidthHint: string | null;
9421
10221
  readonly onSalvarSubmit: () => void;
9422
10222
  readonly onToolbarButtonClick?: (btn: CadastroToolbarButtonDto) => void;
10223
+ readonly headerSecondaryAction?: CadastroHeaderSecondaryAction | null;
10224
+ readonly onHeaderSecondaryActionClick?: () => void;
9423
10225
  readonly metadataCamposReply?: CadastroMetadataCamposReplyLike | null;
9424
10226
  readonly entityNameFallback?: string;
9425
10227
  readonly entityLabelFallback?: string;
@@ -9446,6 +10248,12 @@ declare abstract class CadastroMetadataPageBase<TInit, TDto, TSalvar> extends Ca
9446
10248
  protected readonly autoPageShellCallbacks: CadastroMetadataPageShellCallbacks;
9447
10249
  constructor();
9448
10250
  protected cadastroMetadataShellExtras(): Partial<BuildCadastroMetadataShellRuntimeOptions>;
10251
+ /**
10252
+ * Botão opcional à esquerda de Salvar/Novo na topbar. Omisso / `null` ⇒ nada é renderizado.
10253
+ */
10254
+ protected cadastroHeaderSecondaryAction(): CadastroHeaderSecondaryAction | null;
10255
+ /** Clique no botão de {@link cadastroHeaderSecondaryAction}. */
10256
+ protected onCadastroHeaderSecondaryActionClick(): void;
9449
10257
  /** `public` explícito: templates com `strictTemplates` / consumidores da lib veem o membro herdado. */
9450
10258
  readonly cadastroRuntime: _angular_core.Signal<structra_ui.CadastroMetadataShellRuntime>;
9451
10259
  protected resolveFormLayoutForShell(): CadastroFormPageLayout | null;
@@ -9956,7 +10764,11 @@ declare function cadastroCampoScriptEditorLanguage(campo: CadastroCampoMetadataD
9956
10764
  * Em mobile a grelha colapsa para uma coluna — o campo já fica em largura total.
9957
10765
  */
9958
10766
  declare function cadastroCampoBooleanOcupaLinhaInteira(campo: CadastroCampoMetadataDto, layoutMobile?: boolean): boolean;
9959
- /** Largura «ao conteúdo» vinda da metadata (ex.: <c>FullWidth = false</c> no servidor ⇒ <c>max-content</c>). */
10767
+ /** Largura fixa declarada na metadata (px, rem, etc.) — não <c>100%</c> nem <c>max-content</c>. */
10768
+ declare function cadastroCampoMetadataLarguraFixaCss(campo: CadastroCampoMetadataDto): string | null;
10769
+ /**
10770
+ * Campo estreito na grelha multi-coluna: <c>max-content</c> ou largura fixa com <c>FullWidth = false</c>.
10771
+ */
9960
10772
  declare function cadastroCampoMetadataLarguraCompacta(campo: CadastroCampoMetadataDto): boolean;
9961
10773
  /** Largura efectiva do wrapper do campo na grelha metadata (respeita `FullWidth` / `width` do servidor). */
9962
10774
  declare function cadastroCampoWrapperWidthCss(campo: CadastroCampoMetadataDto, opts: {
@@ -10403,6 +11215,13 @@ declare class CadastroBasePageComponent implements AfterContentInit {
10403
11215
  readonly validationUi: _angular_core.InputSignal<CadastroValidationUi | null>;
10404
11216
  /** Resumo de validação fixo ao topo do ecrã ao revelar erros (Structra `pinned`). */
10405
11217
  readonly validationSummaryPinned: _angular_core.InputSignal<boolean>;
11218
+ /**
11219
+ * Botão opcional à esquerda de Salvar/Novo (topbar da shell ou toolbar interna).
11220
+ * Omisso ou sem `label` ⇒ nada é renderizado.
11221
+ */
11222
+ readonly headerSecondaryAction: _angular_core.InputSignal<CadastroHeaderSecondaryAction | null>;
11223
+ readonly headerSecondaryActionClick: _angular_core.OutputEmitterRef<void>;
11224
+ protected readonly headerSecondaryActionVisible: _angular_core.Signal<boolean>;
10406
11225
  /**
10407
11226
  * Prioridade: {@link CadastroValidationUi.validationSummaryPinned} quando definido (metadata com flags);
10408
11227
  * senão {@link validationSummaryPinned}.
@@ -10425,6 +11244,9 @@ declare class CadastroBasePageComponent implements AfterContentInit {
10425
11244
  protected readonly validationSummaryLive: _angular_core.WritableSignal<boolean>;
10426
11245
  constructor();
10427
11246
  ngAfterContentInit(): void;
11247
+ /** Instâncias em cache (`data.reuse`) continuam vivas — só sincronizar quando esta rota está activa na shell. */
11248
+ private isActiveShellTopbarRoute;
11249
+ private releaseShellTopbarSlot;
10428
11250
  /** Alterna slot da shell entre botões invisíveis (init) e template da página (carregado). */
10429
11251
  private syncShellTopbarEndSlot;
10430
11252
  /**
@@ -10443,7 +11265,7 @@ declare class CadastroBasePageComponent implements AfterContentInit {
10443
11265
  /** Remove painéis `pinned` do Structra órfãos no `body` (ids internos `structra-vsum-p-*`). */
10444
11266
  private removeStructraPinnedValidationPanelsFromBody;
10445
11267
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CadastroBasePageComponent, never>;
10446
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadastroBasePageComponent, "app-cadastro-base-page", never, { "runtime": { "alias": "runtime"; "required": false; "isSignal": true; }; "cadastroInitError": { "alias": "cadastroInitError"; "required": false; "isSignal": true; }; "cadastroInitLoading": { "alias": "cadastroInitLoading"; "required": false; "isSignal": true; }; "skeletonPanelMaxWidth": { "alias": "skeletonPanelMaxWidth"; "required": false; "isSignal": true; }; "toolbarInterno": { "alias": "toolbarInterno"; "required": false; "isSignal": true; }; "embeddedInReferenciaDialog": { "alias": "embeddedInReferenciaDialog"; "required": false; "isSignal": true; }; "corpoCentralizado": { "alias": "corpoCentralizado"; "required": false; "isSignal": true; }; "cabecalhoPaginaVisivel": { "alias": "cabecalhoPaginaVisivel"; "required": false; "isSignal": true; }; "validationUi": { "alias": "validationUi"; "required": false; "isSignal": true; }; "validationSummaryPinned": { "alias": "validationSummaryPinned"; "required": false; "isSignal": true; }; "validationSummaryTitle": { "alias": "validationSummaryTitle"; "required": false; "isSignal": true; }; "shellTopbarReserveDuplicar": { "alias": "shellTopbarReserveDuplicar"; "required": false; "isSignal": true; }; }, {}, ["projectedFormDir", "shellTopbarEndProjectedTpl"], ["*"], true, never>;
11268
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadastroBasePageComponent, "app-cadastro-base-page", never, { "runtime": { "alias": "runtime"; "required": false; "isSignal": true; }; "cadastroInitError": { "alias": "cadastroInitError"; "required": false; "isSignal": true; }; "cadastroInitLoading": { "alias": "cadastroInitLoading"; "required": false; "isSignal": true; }; "skeletonPanelMaxWidth": { "alias": "skeletonPanelMaxWidth"; "required": false; "isSignal": true; }; "toolbarInterno": { "alias": "toolbarInterno"; "required": false; "isSignal": true; }; "embeddedInReferenciaDialog": { "alias": "embeddedInReferenciaDialog"; "required": false; "isSignal": true; }; "corpoCentralizado": { "alias": "corpoCentralizado"; "required": false; "isSignal": true; }; "cabecalhoPaginaVisivel": { "alias": "cabecalhoPaginaVisivel"; "required": false; "isSignal": true; }; "validationUi": { "alias": "validationUi"; "required": false; "isSignal": true; }; "validationSummaryPinned": { "alias": "validationSummaryPinned"; "required": false; "isSignal": true; }; "headerSecondaryAction": { "alias": "headerSecondaryAction"; "required": false; "isSignal": true; }; "validationSummaryTitle": { "alias": "validationSummaryTitle"; "required": false; "isSignal": true; }; "shellTopbarReserveDuplicar": { "alias": "shellTopbarReserveDuplicar"; "required": false; "isSignal": true; }; }, { "headerSecondaryActionClick": "headerSecondaryActionClick"; }, ["projectedFormDir", "shellTopbarEndProjectedTpl"], ["*"], true, never>;
10447
11269
  }
10448
11270
 
10449
11271
  /**
@@ -10534,6 +11356,8 @@ declare class CadastroFieldRendererComponent {
10534
11356
  larguraWrapperUi(c: CadastroCampoMetadataDto): string;
10535
11357
  protected scriptEditorMinHeightUi(c: CadastroCampoMetadataDto): string;
10536
11358
  protected scriptEditorLanguageUi(c: CadastroCampoMetadataDto): ScriptEditorLanguage;
11359
+ /** Botão «+» (cadastro inline) só em campos editáveis — metadata `readOnly` ou controlo desactivado. */
11360
+ mostrarRedirectSuffixUi(c: CadastroCampoMetadataDto): boolean;
10537
11361
  requiredMarkUi(c: CadastroCampoMetadataDto): boolean;
10538
11362
  campoShowErrorMessageUi(c: CadastroCampoMetadataDto): boolean;
10539
11363
  /** Só `monetary === true` usa prefixo `R$`; omisso/false ⇒ decimal simples (ex. m²). */
@@ -10812,6 +11636,11 @@ declare class FormCollectionComponent {
10812
11636
  gridTemplateColumnsParaItemEditorViewport(sec: CadastroMetadataSecao): string | null;
10813
11637
  itemEditorGridColumnSpanParaCampo(sec: CadastroMetadataSecao, campo: CadastroCampoMetadataDto, index: number): string | null;
10814
11638
  private computeCollectionEmbuteNoFormGroupPai;
11639
+ /**
11640
+ * Repõe o rascunho do editor a partir da linha seleccionada (botão «Alterar»).
11641
+ * `patchValue` marca `dirty`; limpa estado de validação até o utilizador editar ou «Adicionar»/«Alterar».
11642
+ */
11643
+ private hydrateItemEditorFromSelectedRow;
10815
11644
  /** Remove `dirty`/`touched` em todos os níveis (ex.: após `patchValue` no rascunho «Adicionar»). */
10816
11645
  private repristineItemEditorDraft;
10817
11646
  private resetItemEditorDefaults;
@@ -11001,6 +11830,17 @@ declare class CadastroMetadataShellPageComponent {
11001
11830
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadastroMetadataShellPageComponent, "app-cadastro-metadata-shell-page", never, { "runtime": { "alias": "runtime"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
11002
11831
  }
11003
11832
 
11833
+ /** Skeleton de arranque do cadastro — mesma aparência de {@link CadastroBasePageComponent}. */
11834
+ declare class CadastroFormLoadingSkeletonComponent {
11835
+ readonly corpoCentralizado: _angular_core.InputSignal<boolean>;
11836
+ readonly panelMaxWidth: _angular_core.InputSignal<string | null>;
11837
+ readonly fieldCount: _angular_core.InputSignal<number>;
11838
+ protected readonly skeletonPanelMaxWidthCss: _angular_core.Signal<string | undefined>;
11839
+ protected readonly fieldIndexes: _angular_core.Signal<number[]>;
11840
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CadastroFormLoadingSkeletonComponent, never>;
11841
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadastroFormLoadingSkeletonComponent, "app-cadastro-form-loading-skeleton", never, { "corpoCentralizado": { "alias": "corpoCentralizado"; "required": false; "isSignal": true; }; "panelMaxWidth": { "alias": "panelMaxWidth"; "required": false; "isSignal": true; }; "fieldCount": { "alias": "fieldCount"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
11842
+ }
11843
+
11004
11844
  declare class StructraPageComponentRegistry {
11005
11845
  private readonly components;
11006
11846
  register(tag: string, component: Type<unknown>): void;
@@ -11216,5 +12056,239 @@ declare function mergeDocumentoFmtNaLinhaConsulta(item: Record<string, unknown>)
11216
12056
  declare function mapListarItensParaMultiselectOpcoes(itens: readonly unknown[], optionsValueField: string, optionsLabelField: string, optionsOnlyActive: boolean): UiSelectOption<string>[];
11217
12057
  declare function carregarOpcoesMultiselectViaSpec(injector: Injector, spec: ConsultaMultiselectOpcoesRemotasSpec): Promise<readonly UiSelectOption<string>[]>;
11218
12058
 
11219
- 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 };
11220
- export type { AdaptiveDataViewMode, AlertType, AppThemeId, AppThemeOption, ApplyCadastroModoSenhaOptions, BreadcrumbItem, BuildCadastroMetadataShellRuntimeOptions, BuildCadastroPageRuntimeOptions, CadastroActionStateDto$1 as CadastroActionStateDto, CadastroAutoMapFormValueConfig, CadastroCampoContaNaGrelhaFn, CadastroCampoMetadataDto, CadastroCampoMetadataMergeInput, CadastroCampoReferenciaMetadataDto, CadastroCampoSelectOptionDto, CadastroCampoValidacaoDto, CadastroCampoValidacaoLike, CadastroCollectionBinding, CadastroCollectionBridge, CadastroCollectionEditingItemControlsChangeEvent, CadastroCollectionEditingItemControlsChangeOptions, CadastroCollectionItemEvent, CadastroCollectionItemFieldsChangeEvent, CadastroCollectionItemFieldsChangeOptions, CadastroCollectionItemsChangeEvent, CadastroCollectionPageReplyWire, CadastroCollectionPageRequestWire, CadastroCollectionPagingPort, CadastroCollectionPagingUi, CadastroCollectionSaveHandler, CadastroCollectionStateDto, CadastroConfirmExcluirPartial, CadastroCrudMessagesResolved, CadastroDeclarativeSnapshotDto, CadastroDuplicateActionConfig, CadastroEnsureSingleBooleanInCollectionOptions, CadastroFieldChangeEvent, CadastroFieldEventBase, CadastroFieldKey, CadastroFieldRegistration, CadastroFieldSelectEvent, CadastroFieldSimpleEvent, CadastroFiltroDialogRuntimeSlice, CadastroFormPageLayout, CadastroImageUploadMetadata, CadastroImageUploadMetadataOptions, CadastroInferExtensaoArquivoOptions, CadastroInferImageContentTypeOptions, CadastroInlineHostNavigationConfig, CadastroListSelectBinding, CadastroMetadataCamposReplyLike, CadastroMetadataPageCadastro, CadastroMetadataPageServiceConfig, CadastroMetadataPageShellCallbacks, CadastroMetadataPageStateConfig, CadastroMetadataPageVm, CadastroMetadataSecao, CadastroMetadataServiceConfig, CadastroMetadataServicePort, CadastroMetadataShellRuntime, CadastroMetadataView, CadastroModo, CadastroMultiselectBinding, CadastroPadraoGrpcService, CadastroPageActionDto, CadastroPageActiveTabResolveInput, CadastroPageComponentDto, CadastroPageConfig, CadastroPageIdentityFallback, CadastroPageNavKeysConfig, CadastroPageOverlayDto, CadastroPageRuntime, CadastroPageSenhaConfig, CadastroPageTabDto, CadastroPessoaOpcaoMin, CadastroRawBooleanDeepOptions, CadastroReferenceListPageParams, CadastroReferenceListPageResult, CadastroReferenceListarService, CadastroReferenceRegistryEntry, CadastroReferenciaAcoesPermitidas, CadastroReferenciaDialogBridgeEntry, CadastroReferenciaDialogBridgeFactory, CadastroReferenciaDialogCloseReason, CadastroReferenciaDialogCompletePayload, CadastroReferenciaDialogContext, CadastroReferenciaDialogOpenOptions, CadastroReferenciaDialogOpenRequest, CadastroReferenciaOpenModeWireRef, CadastroReferenciaPermissoesMetadata, CadastroReferenciaRouteAccess, CadastroReindexarCollectionOrdemOptions, CadastroRuntimeDeps, CadastroRuntimeOptions, CadastroSearchSelectBinding, CadastroSearchSelectRedirectSuffix, CadastroSearchSelectReferenciaDialog, CadastroSecaoSegmento, CadastroSingleBooleanCollectionBindingOptions, CadastroTitulosFallback, CadastroToolbarButtonDto, CadastroToolbarVisibilityResolved, CadastroValidationUi, CardItemBooleanField, CardItemMetaField, CardItemView, CardListDataMode, CardListHeaderPosition, CardListMapFn, CatalogoStubConsultaConfig, CatalogoStubListaItem, ConfirmDialogData, ConfirmDialogVariant, ConsoleLogLevel, ConsoleLogLine, ConsoleLogLineView, ConsultaBaseConfig, ConsultaCampoDef, ConsultaCampoMetadataDto, ConsultaCardCampoDto, ConsultaCatalogBundleConfig, ConsultaCatalogBundleSessaoPort, ConsultaCatalogEntityBindings, ConsultaCatalogInitCarregada, ConsultaCrudAdapterConfig, ConsultaEnumSelectOptionDto, ConsultaFiltroCampo, ConsultaFiltroItem, ConsultaFiltroMatchAdapters, ConsultaFiltroPreset, ConsultaFiltroSalvoDto, ConsultaFiltroSalvoItemDto, ConsultaFiltroUiFragment, ConsultaFiltroValorTipo, ConsultaFiltrosBundleSessao, ConsultaFiltrosChromeVolatil, ConsultaFiltrosSessaoConsultaPadraoApi, ConsultaFiltrosSessaoUserLike, ConsultaFiltrosSessaoVolatilApi, ConsultaFiltrosVolatilHandlers, ConsultaGridColunaDto, ConsultaGridColunaDtoLike, ConsultaGridConfigDto, ConsultaInitCarregada, ConsultaListaCacheKeyParts, ConsultaListaCachePayload, ConsultaListaMemoriaCacheStoreOpts, ConsultaListaQueryParamsLike, ConsultaListaResultadoLike, ConsultaListaServidorQuerySlice, ConsultaMapCardLinha, ConsultaMetadataCampo, ConsultaMetadataReplyLike, ConsultaMetadataServicePort, ConsultaMultiselectOpcoesRemotasSpec, ConsultaOperadorOption, ConsultaOptionsListarContrato, ConsultaOptionsListarResolver, ConsultaPadraoGrpcServiceLike, ConsultaPadraoNavigateLike, ConsultaPadraoToastLike, ConsultaPageCacheEntry, ConsultaPageMetadataUnified, ConsultaPageRuntime, ConsultaPageRuntimeDeps, ConsultaRouteReusePort, ConsultaServidorExecutorOpts, ConsultaServidorListaReply, ConsultaServidorPort, ConsultaServidorQueryParams, ConsultaTopbarSlotPort, ConsultaUsuariosMetadataReply, ConsultaValorTipo, CreateCadastroMetadataPageConfigOptions, CreateCadastroPadraoConfigOptions, CreateConsultaPadraoRuntimeOptions, CreateGrpcSaveRequestMapperOptions, CreateSaveRequestFromPartialMapperOptions, CrudConsultaServicePort, DataGridColumn, DataGridPaginationChangeEvent, DeleteConfirmPageConfig, DetailsViewItem, DropdownListBindings, DropdownSearchPageRequested, DuplicatePageConfig, FieldCommonInputs, FieldSize, FilePreviewKind, FiltroItemEntrada, FiltroItemEntradaGenerico, FiltroItemGridRow, FiltroItemSalvoDto, FiltroSalvo, FormContainerStateKeyParts, FormTabValidationLinkConfig, FormTabsVariant, GrpcSaveRequestFactory, InitConsultaReply, ListarTodosPaginadoParams, LoadingDialogData, MapConsultaGridColunasOpts, MenuItemAction, MenuItemDivider, MenuItemGroup, MenuItemKind, MenuItemSubmenu, MenuLeafItem, MenuNodeItem, ModoPermissaoReferencia, MontarFiltrosGrpcPresetOptions, MontarFiltrosServidorPresetOptions, OptionsSourceServicePort, PatchFormFromEntidadeOptions, SalvarFiltroConsultaRequest, SalvarFiltroPresetAsyncArgs, SaveRequestFromPartialFactory, ScriptEditorLanguage, SelectPageRequested, SkeletonFieldShellVariant, StatCardDeltaTone, StatusBadgeSize, StatusBadgeVariant, StructraAction, StructraActionButtonVariant, StructraActionGroup, StructraActionGroupWire, StructraActionId, StructraActionVariant, StructraActionWire, StructraCadastroInlineResultState, StructraCadastroInlineReturnState, StructraFormValueSource, StructraMidiaUploadResult, StructraMidiaUploadTransportContext, StructraMidiaUploadTransportFn, StructraPageInputContext, StructraShellScrollRestorationMergedOptions, StructraShellScrollRestorationOptions, StructraSidebarContext, StructraSidebarTemplateContext, StructraTheme, TitulosFromMetadataConfig, ToastInstance, ToastShowOptions, ToastType, ToastVerticalPosition, TreeViewNode, TreeViewSelectEvent, UiFieldInputTextAlign, UiSelectOption, ValidationFieldMeta, ValidationSummaryItem, ValidationSummarySize, ValidationSummaryVariant, ValoresConsultaPresetUi };
12059
+ /** Itens por página na pré-visualização de relatórios (pesquisa paginada na tela). */
12060
+ declare const STRUCTRA_REPORT_DEFAULT_PAGE_SIZE = 15;
12061
+ interface ReportTreeNode {
12062
+ id: string;
12063
+ label: string;
12064
+ icon?: string | null;
12065
+ leaf?: boolean;
12066
+ expanded?: boolean;
12067
+ children?: ReportTreeNode[];
12068
+ }
12069
+ interface ReportFilterMeta {
12070
+ id: string;
12071
+ label: string;
12072
+ tipo: 'text' | 'bool' | 'date' | 'number' | string;
12073
+ operador?: string;
12074
+ global?: boolean;
12075
+ obrigatorio?: boolean;
12076
+ }
12077
+ interface ReportColumnMeta {
12078
+ id: string;
12079
+ label: string;
12080
+ formato?: string;
12081
+ width?: string | null;
12082
+ minWidth?: string | null;
12083
+ maxWidth?: string | null;
12084
+ }
12085
+ type ReportColumnWidthFields = Pick<ReportColumnMeta, 'width' | 'minWidth' | 'maxWidth'>;
12086
+ declare function reportColumnWidthStyle(col: ReportColumnWidthFields | null | undefined): Record<string, string | null>;
12087
+ declare function reportTableHasFixedWidths(colunas: readonly ReportColumnWidthFields[]): boolean;
12088
+ declare function isReportNowrapColumn(col: Pick<ReportColumnMeta, 'formato' | 'id'> | null | undefined): boolean;
12089
+ /** Coluna booleana declarada pelo metadata do relatório (`formato: boolean`). */
12090
+ declare function isReportBooleanColumn(col: Pick<ReportColumnMeta, 'formato'> | null | undefined): boolean;
12091
+ /** Converte valor de célula booleana (tipado ou legado Sim/Não) quando a coluna é boolean. */
12092
+ declare function coerceReportBoolean(value: unknown): boolean;
12093
+ interface ReportMetadata {
12094
+ key: string;
12095
+ titulo: string;
12096
+ filtros: ReportFilterMeta[];
12097
+ colunas: ReportColumnMeta[];
12098
+ }
12099
+ /** Critério avulso no mesmo formato da consulta base (gRPC `FiltroItemEntrada`). */
12100
+ interface ReportFiltroItemEntrada {
12101
+ campo: string;
12102
+ operador: string;
12103
+ valor: string;
12104
+ valorAte?: string;
12105
+ juncao?: string;
12106
+ }
12107
+ interface ReportPesquisarRequest {
12108
+ /** Formato legado (metadata fixa por campo do relatório). */
12109
+ filtros?: Record<string, string | null | undefined>;
12110
+ /** Preset + valores montados pela consulta base (`montarFiltrosServidorPreset`). */
12111
+ filtrosAvulsos?: ReportFiltroItemEntrada[];
12112
+ /** Página (1-based). Omisso ⇒ 1. */
12113
+ page?: number;
12114
+ /** Tamanho da página na tela. Omisso ⇒ default do servidor. */
12115
+ pageSize?: number;
12116
+ /** Exportação PDF: busca todos os registros filtrados. */
12117
+ exportAll?: boolean;
12118
+ }
12119
+ interface ReportHeader {
12120
+ titulo: string;
12121
+ subtitulo?: string | null;
12122
+ geradoEm?: string;
12123
+ }
12124
+ interface ReportTotal {
12125
+ label: string;
12126
+ valor: string;
12127
+ }
12128
+ interface ReportSectionColumn {
12129
+ id: string;
12130
+ label: string;
12131
+ formato?: string;
12132
+ width?: string | null;
12133
+ minWidth?: string | null;
12134
+ maxWidth?: string | null;
12135
+ }
12136
+ interface ReportSectionTable {
12137
+ title: string;
12138
+ colunas: ReportSectionColumn[];
12139
+ linhas: Array<Record<string, string | null | undefined>>;
12140
+ emptyMessage?: string | null;
12141
+ }
12142
+ interface ReportSection {
12143
+ title: string;
12144
+ subtitle?: string | null;
12145
+ tabelas: ReportSectionTable[];
12146
+ totais?: ReportTotal[];
12147
+ }
12148
+ interface ReportResult {
12149
+ header: ReportHeader;
12150
+ filtrosAplicados: Record<string, string | null | undefined>;
12151
+ colunas: ReportColumnMeta[];
12152
+ linhas: Array<Record<string, unknown>>;
12153
+ sections?: ReportSection[];
12154
+ totais?: ReportTotal[];
12155
+ footer?: string | null;
12156
+ totalRegistros: number;
12157
+ page?: number;
12158
+ pageSize?: number;
12159
+ totalPages?: number;
12160
+ }
12161
+ interface StructraReportTransport {
12162
+ obterArvore(): Promise<ReportTreeNode[]>;
12163
+ obterMetadata(key: string): Promise<ReportMetadata>;
12164
+ pesquisar(key: string, request: ReportPesquisarRequest): Promise<ReportResult>;
12165
+ }
12166
+ declare const STRUCTRA_REPORT_TRANSPORT: InjectionToken<StructraReportTransport>;
12167
+ declare function findFirstReportLeafId(nodes: ReportTreeNode[]): string | null;
12168
+ declare function findReportTreeLabel(id: string, nodes: ReportTreeNode[]): string | null;
12169
+ declare function mapReportTreeToTreeViewNodes(nodes: ReportTreeNode[]): TreeViewNode[];
12170
+
12171
+ declare class StructraReportTreeComponent {
12172
+ nodes: TreeViewNode[];
12173
+ selectedId: string | null;
12174
+ title: string;
12175
+ titleIconClass: string;
12176
+ expansionStateKey: unknown;
12177
+ selectedIdChange: EventEmitter<string | null>;
12178
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportTreeComponent, never>;
12179
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportTreeComponent, "structra-report-tree", never, { "nodes": { "alias": "nodes"; "required": true; }; "selectedId": { "alias": "selectedId"; "required": false; }; "title": { "alias": "title"; "required": false; }; "titleIconClass": { "alias": "titleIconClass"; "required": false; }; "expansionStateKey": { "alias": "expansionStateKey"; "required": false; }; }, { "selectedIdChange": "selectedIdChange"; }, never, never, true, never>;
12180
+ }
12181
+
12182
+ declare class StructraReportFilterPanelComponent {
12183
+ readonly ngModelStandalone: {
12184
+ standalone: boolean;
12185
+ };
12186
+ titulo: string;
12187
+ subtitulo: string;
12188
+ filtros: ReportFilterMeta[];
12189
+ valores: Record<string, string>;
12190
+ collapsed: boolean;
12191
+ pesquisando: boolean;
12192
+ collapsedChange: EventEmitter<boolean>;
12193
+ valorChange: EventEmitter<{
12194
+ id: string;
12195
+ value: string;
12196
+ }>;
12197
+ pesquisar: EventEmitter<void>;
12198
+ readonly boolOptions: UiSelectOption<string>[];
12199
+ compareStr: (a: unknown, b: unknown) => boolean;
12200
+ patchValor(id: string, value: string | null | undefined): void;
12201
+ valorAtual(id: string): string;
12202
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportFilterPanelComponent, never>;
12203
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportFilterPanelComponent, "structra-report-filter-panel", never, { "titulo": { "alias": "titulo"; "required": true; }; "subtitulo": { "alias": "subtitulo"; "required": false; }; "filtros": { "alias": "filtros"; "required": true; }; "valores": { "alias": "valores"; "required": true; }; "collapsed": { "alias": "collapsed"; "required": false; }; "pesquisando": { "alias": "pesquisando"; "required": false; }; }, { "collapsedChange": "collapsedChange"; "valorChange": "valorChange"; "pesquisar": "pesquisar"; }, never, never, true, never>;
12204
+ }
12205
+
12206
+ declare class StructraReportTableComponent {
12207
+ colunas: ReportColumnMeta[];
12208
+ linhas: Array<Record<string, unknown>>;
12209
+ totalRegistros: number;
12210
+ readonly isBooleanColumn: typeof isReportBooleanColumn;
12211
+ readonly isNowrapColumn: typeof isReportNowrapColumn;
12212
+ readonly columnWidthStyle: typeof reportColumnWidthStyle;
12213
+ hasFixedColumnWidths(): boolean;
12214
+ cellValue(linha: Record<string, unknown>, coluna: ReportColumnMeta): string;
12215
+ booleanChecked(linha: Record<string, unknown>, coluna: ReportColumnMeta): boolean;
12216
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportTableComponent, never>;
12217
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportTableComponent, "structra-report-table", never, { "colunas": { "alias": "colunas"; "required": true; }; "linhas": { "alias": "linhas"; "required": true; }; "totalRegistros": { "alias": "totalRegistros"; "required": false; }; }, {}, never, never, true, never>;
12218
+ }
12219
+
12220
+ declare class StructraReportPaginatorComponent {
12221
+ page: number;
12222
+ totalPages: number;
12223
+ totalRegistros: number;
12224
+ pageSize: number;
12225
+ disabled: boolean;
12226
+ pageChange: EventEmitter<number>;
12227
+ get podeAnterior(): boolean;
12228
+ get podeProxima(): boolean;
12229
+ irAnterior(): void;
12230
+ irProxima(): void;
12231
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportPaginatorComponent, never>;
12232
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportPaginatorComponent, "structra-report-paginator", never, { "page": { "alias": "page"; "required": true; }; "totalPages": { "alias": "totalPages"; "required": true; }; "totalRegistros": { "alias": "totalRegistros"; "required": false; }; "pageSize": { "alias": "pageSize"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "pageChange": "pageChange"; }, never, never, true, never>;
12233
+ }
12234
+
12235
+ declare class StructraReportEmptyStateComponent {
12236
+ message: string;
12237
+ description: string;
12238
+ iconClass: string;
12239
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportEmptyStateComponent, never>;
12240
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportEmptyStateComponent, "structra-report-empty-state", never, { "message": { "alias": "message"; "required": false; }; "description": { "alias": "description"; "required": false; }; "iconClass": { "alias": "iconClass"; "required": false; }; }, {}, never, never, true, never>;
12241
+ }
12242
+
12243
+ declare class StructraReportLoadingSkeletonComponent {
12244
+ rows: number;
12245
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportLoadingSkeletonComponent, never>;
12246
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportLoadingSkeletonComponent, "structra-report-loading-skeleton", never, { "rows": { "alias": "rows"; "required": false; }; }, {}, never, never, true, never>;
12247
+ }
12248
+
12249
+ declare class StructraReportViewerComponent {
12250
+ metadata: ReportMetadata | null;
12251
+ result: ReportResult | null;
12252
+ filtrosValores: Record<string, string>;
12253
+ loadingMetadata: boolean;
12254
+ loadingResult: boolean;
12255
+ collapsed: boolean;
12256
+ filtrosValoresChange: EventEmitter<Record<string, string>>;
12257
+ collapsedChange: EventEmitter<boolean>;
12258
+ pesquisar: EventEmitter<void>;
12259
+ onValorChange(event: {
12260
+ id: string;
12261
+ value: string;
12262
+ }): void;
12263
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportViewerComponent, never>;
12264
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportViewerComponent, "structra-report-viewer", never, { "metadata": { "alias": "metadata"; "required": false; }; "result": { "alias": "result"; "required": false; }; "filtrosValores": { "alias": "filtrosValores"; "required": true; }; "loadingMetadata": { "alias": "loadingMetadata"; "required": false; }; "loadingResult": { "alias": "loadingResult"; "required": false; }; "collapsed": { "alias": "collapsed"; "required": false; }; }, { "filtrosValoresChange": "filtrosValoresChange"; "collapsedChange": "collapsedChange"; "pesquisar": "pesquisar"; }, never, never, true, never>;
12265
+ }
12266
+
12267
+ declare class StructraReportPageComponent {
12268
+ private readonly transport;
12269
+ autoSelectFirst: boolean;
12270
+ autoPesquisarOnSelect: boolean;
12271
+ reportSelected: EventEmitter<string | null>;
12272
+ reportLoaded: EventEmitter<ReportResult | null>;
12273
+ readonly treeNodes: _angular_core.WritableSignal<ReportTreeNode[]>;
12274
+ readonly selectedReportId: _angular_core.WritableSignal<string | null>;
12275
+ readonly metadata: _angular_core.WritableSignal<ReportMetadata | null>;
12276
+ readonly result: _angular_core.WritableSignal<ReportResult | null>;
12277
+ readonly filtrosValores: _angular_core.WritableSignal<Record<string, string>>;
12278
+ readonly loadingTree: _angular_core.WritableSignal<boolean>;
12279
+ readonly loadingMetadata: _angular_core.WritableSignal<boolean>;
12280
+ readonly loadingResult: _angular_core.WritableSignal<boolean>;
12281
+ readonly painelFiltroRecolhido: _angular_core.WritableSignal<boolean>;
12282
+ readonly treeViewNodes: _angular_core.Signal<structra_ui.TreeViewNode[]>;
12283
+ constructor();
12284
+ carregarArvore(): Promise<void>;
12285
+ onReportSelected(id: string | null): void;
12286
+ private carregarMetadata;
12287
+ pesquisar(): Promise<void>;
12288
+ patchFiltrosValores(next: Record<string, string>): void;
12289
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportPageComponent, never>;
12290
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportPageComponent, "structra-report-page", never, { "autoSelectFirst": { "alias": "autoSelectFirst"; "required": false; }; "autoPesquisarOnSelect": { "alias": "autoPesquisarOnSelect"; "required": false; }; }, { "reportSelected": "reportSelected"; "reportLoaded": "reportLoaded"; }, never, never, true, never>;
12291
+ }
12292
+
12293
+ export { ADAPTIVE_DATA_VIEW_MOBILE_QUERY, APP_SIDEBAR_LABEL_REVEAL_LAG_MS, APP_SIDEBAR_LAYOUT_DURATION_MS, APP_SIDEBAR_NAV_REVEAL_TOTAL_MS, APP_THEME_BASE_CLASS, APP_THEME_IDS, ActionMenuComponent, AdaptiveDataViewComponent, AdminLoginPageComponent, AdminLoginShellComponent, StructraSidebarUserPanelComponent as AdminSidebarUserPanelComponent, AlertComponent, AnchoredOverlayComponent, AppBreadcrumbComponent, AppDialogComponent, AppLibLightBlockScrollStrategy, AppShellComponent, AppShellSidebarTemplateDirective, AppShellSidebarToggleComponent, AppSidebarBottomActionsSlotDirective, AppSidebarBottomActionsTemplateDirective, AppSidebarBrandDirective, AppSidebarComponent, AppSidebarFooterSlotDirective, AppSidebarFooterTemplateDirective, AppSidebarHeaderSlotDirective, AppSidebarHeaderTemplateDirective, AppSidebarToolbarDirective, AppSidebarUserInfoSlotDirective, AppSidebarUserInfoTemplateDirective, AppTheme, AppThemeService, AppTopbarComponent, AppUserMenuComponent, BR_ESTADOS_NOME_SIGLA, ButtonType as BaseButtonType, ButtonVariant as BaseButtonVariant, BaseFieldComponent, BaseFieldDirective, BooleanFieldDirective, ButtonComponent, ButtonRadius, ButtonSize, ButtonType, ButtonVariant, CADASTRO_COLLAPSIBLE_REMOTE_LOAD_DELAY_MS, CADASTRO_DUPLICATE_FLAG_STATE, CADASTRO_DUPLICATE_SOURCE_ID_STATE, CADASTRO_FOCO_COLUNA_APOS_RESUMO_MS, CADASTRO_FORM_COLLECTION_REMOVE_ITEM_CONFIRM, CADASTRO_INVALIDATE_ROUTE_SNAPSHOT, CADASTRO_PAGE_SUBTITULO_PADRAO, CADASTRO_PAGE_TITULO_NOVO_PADRAO, CADASTRO_PESSOA_INLINE_DESTINO_URL_FRAGMENTS, CADASTRO_REFERENCIA_DIALOG_CONTEXT, CADASTRO_REFERENCIA_DIALOG_PAGE_CONFIG, CADASTRO_REFERENCIA_ROUTE_ACCESS, CADASTRO_REFERENCIA_ROUTE_ACCESS_PERMISSIVE, CADASTRO_RESUMO_FIELD_NAVIGATE_DEFER_MS, CADASTRO_TOAST_TITLE_PADRAO, CADASTRO_VALIDATION_SUMMARY_PINNED, CADASTRO_VALIDATION_SUMMARY_STATIC, CATEGORIAS_NAV_ID_EXCLUIDO, CATEGORIAS_NAV_LINHA_GRAVADA, CATEGORIAS_NAV_VOLTAR_SEM_RECARREGAR, CLIENTES_NAV_ID_EXCLUIDO, CLIENTES_NAV_LINHA_GRAVADA, CLIENTES_NAV_VOLTAR_SEM_RECARREGAR, CONSULTA_DATETIME_KEYS_ISO_PARA_FMT, CONSULTA_DOCUMENTO_GRID_KEYS_ISO_PARA_FMT, CONSULTA_FILTROS_SESSAO_USER, CONSULTA_GRID_OPTS_DATAS_PADRAO, CONSULTA_LISTA_CACHE_MAX_PAGINAS_DEFAULT, CONSULTA_LISTA_CACHE_NS_SEP, CONSULTA_LISTA_CACHE_TTL_MS_DEFAULT, CONSULTA_MOBILE_LAYOUT_MEDIA_QUERY, CONSULTA_MULTISELECT_LABEL_STUB, CONSULTA_OPTIONS_LISTAR_RESOLVER, CONSULTA_PEDIDOS_GRID_OPTS, CONSULTA_PHONE_GRID_KEYS_ISO_PARA_FMT, CONSULTA_PRESET_SELECT_EMPTY_OPTIONS_MESSAGE_DESKTOP, CONSULTA_PRESET_SELECT_EMPTY_OPTIONS_MESSAGE_MOBILE, CONSULTA_PRODUTOS_GRID_OPTS, CONSULTA_ROUTE_REUSE, CONSULTA_SERVIDOR_LISTA_QUERY_DEFAULTS, CONSULTA_TOPBAR_SLOT, CadastroBasePageComponent, CadastroCollectionGridColumnFormat, CadastroCollectionReferenciaHostService, CadastroCollectionRuntime, CadastroEnumOptionsRegistry, CadastroFieldRendererComponent, CadastroFieldRuntime, CadastroFieldsBaseComponent, CadastroFormDraftCacheService, CadastroFormLoadingSkeletonComponent, CadastroMetadataPageBase, CadastroMetadataPageComponent, CadastroMetadataPageServiceBase, CadastroMetadataPageShellLayoutComponent, CadastroMetadataPageStateBase, CadastroMetadataShellPageComponent, CadastroPadraoPageBase, CadastroReferenceRegistry, CadastroReferenciaDialogBridgeRegistry, CadastroReferenciaDialogHostComponent, CadastroReferenciaDialogService, CadastroReferenciaOpenMode, CadastroRuntime, CadastroRuntimeRegistry, CadastroSectionPanelLayout, CardListComponent, CepFieldComponent, CheckboxFieldComponent, ColorPickerFieldComponent, ComponentType, ConfirmDialogComponent, ConfirmDialogService, ConsoleLogComponent, ConsultaBasePageComponent, ConsultaCadastroFiltroDialogComponent, ConsultaCardCampoPapel, ConsultaCardFieldFormat, ConsultaCatalogBundleHelper, ConsultaFiltroPresetToolbarComponent, ConsultaFiltrosSessaoService, ConsultaGridColumnFormat, ConsultaGridOrderDirection, ConsultaListaMemoriaCacheService, ConsultaPadraoPageBase, ConsultaPageCache, ContainerLayoutSize, ContextMenuComponent, CpfCnpjFieldComponent, DEFAULT_STRUCTRA_SHELL_SCROLL_RESTORATION_OPTIONS, DROPDOWN_SEARCH_LOCAL_PAGE_SIZE, DashboardSectionComponent, DataCardComponent, DataGridComponent, DataListComponent, DataToolbarComponent, DateFieldComponent, DecimalFieldComponent, DetailsFieldComponent, DetailsViewComponent, DialogFooterDirective, DividerComponent, DrawerComponent, DrawerSide, DrawerSize, DropdownBaseComponent, DropdownMenuComponent, DropdownMultiOptionFieldBase, DropdownOptionFieldBase, DropdownSearchFieldComponent, ENM_STATUS_OPCOES_SELECT, EmptyStateComponent, EnmStatus, FIELD_MOBILE_LAYOUT_QUERY, FILE_PREVIEW_UNAVAILABLE_MESSAGE, FORM_CONTAINER_STATE_STORAGE_PREFIX, FORNECEDORES_NAV_ID_EXCLUIDO, FORNECEDORES_NAV_LINHA_GRAVADA, FORNECEDORES_NAV_VOLTAR_SEM_RECARREGAR, FieldCadastroRedirectButtonComponent, FileUploadFieldComponent, FileUploadType, FormActionsAlign, FormActionsComponent, FormColComponent, FormCollectionComponent, FormCollectionLayout, FormGroupComponent, FormGroupVariant, FormLayoutGap, FormRowAlign, FormRowComponent, FormRowJustify, FormSectionAlign, FormSectionComponent, FormSectionRadius, FormSectionVariant, FormTabComponent, FormTabsComponent, GridLayoutConsultaService, ImagePreviewPanelComponent, InputMaskFieldComponent, IntegerFieldComponent, LAYOUT_STACK_SIDE_BY_SIDE, LAYOUT_STACK_STACKED, LayoutStackAlign, LayoutStackComponent, LayoutStackDirection, LayoutStackItemAlign, LibDialogSize, ListItemComponent, LoadingDialogComponent, LoadingDialogService, MaskedTextFieldBase, MenuDividerComponent, MenuDropdownPlacement, MenuGroupComponent, MenuListComponent, MultiselectFieldComponent, NO_OP_CONSULTA_ROUTE_REUSE, NO_OP_CONSULTA_TOPBAR_SLOT, NgControlFieldDirective, OPS_BOOL, OPS_DATA, OPS_TEXTO, OPS_TEXTO_MULTISELECT, ORIGEM_CADASTRO_INLINE_PESSOA, OnboardingChecklistComponent, OverlayPlacement, PDF_IFRAME_VIEWER_HASH, PEDIDOS_NAV_ID_EXCLUIDO, PEDIDOS_NAV_LINHA_GRAVADA, PEDIDOS_NAV_VOLTAR_SEM_RECARREGAR, PERMISSION_GROUP_OUTROS_KEY, PERMISSION_GROUP_OUTROS_LABEL, PERMISSION_GROUP_OUTROS_ORDER, PESSOAS_NAV_LINHA_GRAVADA, PESSOAS_NAV_VOLTAR_SEM_RECARREGAR, PHONE_BR_LANDLINE_MASK, PHONE_BR_MOBILE_MASK, PRODUTOS_NAV_ID_EXCLUIDO, PRODUTOS_NAV_LINHA_GRAVADA, PRODUTOS_NAV_VOLTAR_SEM_RECARREGAR, StructraPageFooterComponent as PageFooterComponent, PasswordFieldComponent, PermissionGroupTabComponent, PermissionGroupTabsComponent, PhoneFieldComponent, PopoverBodyTemplateDirective, PopoverComponent, PopoverFooterTemplateDirective, PopoverTriggerDirective, ReferenceOptionPreset, STRUCTRA_ADMIN_ROUTE_REDIRECT_CACHE_PREFIX, STRUCTRA_ADMIN_ROUTE_REDIRECT_LOGIN_ID_CACHE_KEY, STRUCTRA_CADASTRO_INLINE_RESULT_KEY, STRUCTRA_CADASTRO_INLINE_RETURN_KEY, STRUCTRA_CONSULTA_FORCE_REFRESH_KEY, STRUCTRA_DEDICATED_BACK_TO_TOP_SELECTOR, STRUCTRA_GRID_LAYOUT_API_BASE_RESOLVER, STRUCTRA_GRID_LAYOUT_AUTH_HEADERS_RESOLVER, STRUCTRA_GRID_LAYOUT_TENANT_RESOLVER, STRUCTRA_INLINE_FORM_DRAFT_PENDING_PREFIX, STRUCTRA_MIDIA_PUBLIC_BASE_RESOLVER, STRUCTRA_MIDIA_UPLOAD_TRANSPORT, STRUCTRA_PAGE_CACHE_SCOPE_SEP, STRUCTRA_PAGE_FOOTER_PARTS, STRUCTRA_PAGE_STATE_ACTIVE_TAB_PREFIX, STRUCTRA_REPORT_DEFAULT_PAGE_SIZE, STRUCTRA_REPORT_TRANSPORT, STRUCTRA_SHELL_SCROLL_RESTORATION_OPTIONS, STRUCTRA_SHELL_TOPBAR_TITLE_SKELETON, STRUCTRA_SIMULATED_LOADING_DELAY_MS, STRUCTRA_THEME_DARK_CLASS, STRUCTRA_THEME_IDS, STRUCTRA_UI, ScriptEditorFieldComponent, SelectFieldComponent, SkeletonBlockComponent, SkeletonCardComponent, SkeletonFieldShellComponent, SkeletonListComponent, SkeletonStatCardComponent, SkeletonTableComponent, SkeletonTextComponent, StatCardComponent, StatusBadgeComponent, StructraAdminRouteRedirectPageBase, StructraBackToTopButtonComponent, StructraPageCacheService, StructraPageComponentOutletComponent, StructraPageComponentRegistry, StructraPageFooterComponent, StructraPageStateCacheService, StructraProgressOverlayComponent, StructraReportEmptyStateComponent, StructraReportFilterPanelComponent, StructraReportLoadingSkeletonComponent, StructraReportPageComponent, StructraReportPaginatorComponent, StructraReportTableComponent, StructraReportTreeComponent, StructraReportViewerComponent, ScriptEditorFieldComponent as StructraScriptEditorComponent, StructraShellScrollRestorationService, StructraShellTopbarSlotService, AppSidebarBottomActionsTemplateDirective as StructraSidebarBottomActionsDirective, AppSidebarFooterTemplateDirective as StructraSidebarFooterDirective, AppSidebarHeaderTemplateDirective as StructraSidebarHeaderDirective, AppSidebarUserInfoTemplateDirective as StructraSidebarUserInfoDirective, StructraSidebarUserPanelComponent, SwitchFieldComponent, THEME_PRIMARY_COLOR_LABEL_PT_BR, TOAST_REGISTRO_EXCLUIDO_SUCESSO, TableEmptyStateComponent, TableToolbarComponent, TextFieldComponent, TextareaFieldComponent, ThemeDirective, ToastHostComponent, ToastService, TooltipComponent, TooltipPanelTemplateDirective, TreeViewComponent, USUARIOS_CONSULTA_GRID_OPTS, USUARIOS_NAV_ID_EXCLUIDO, USUARIOS_NAV_LINHA_GRAVADA, USUARIOS_NAV_VOLTAR_SEM_RECARREGAR, VENDEDORES_NAV_ID_EXCLUIDO, VENDEDORES_NAV_LINHA_GRAVADA, VENDEDORES_NAV_VOLTAR_SEM_RECARREGAR, ValidationSummaryComponent, agruparCamposMetadataPorSecao, agruparPermissionTabs, anchoredOverlayPositions, aplicarNormalizacaoMultiselectIdsNoPartial, aplicarProdutoDtoNoFormulario, appendCadastroPageActiveTabQuery, appendPdfIframeViewerParams, applyCadastroCollectionArrayValidators, applyCadastroModoSenhaNovos, applyCollectionValidationSummaryNavigation, applyCollectionValueToFormArray, applyEntityToCadastroFormByMetadata, applyOptionalThemeHostClasses, applyPickedCalendarDate, buildCadastroFiltroDialogItensGridRows, buildCadastroMetadataShellRuntime, buildCadastroPageActiveTabPageKey, buildCadastroPageActiveTabPageKeyFromLayout, buildCadastroPageRuntime, buildCadastroRedirectReturnUrl, buildCadastroReferenciaDialogContext, buildCatalogoStubConsultaRuntime, buildConsultaConfirmDuplicarLinhaFromLayout, buildConsultaConfirmRemoverLinhaFromLayout, buildConsultaDefaultIsItemGuard, buildConsultaListaCacheKey, buildConsultaPageMetadataUnified, buildConsultaPageRuntime, buildDecimalBrDisplay, buildDecimalBrParseString, buildDefaultConsultaMapCardFromColunasGrid, buildEmptyStateOverlayHtml, buildFormContainerStateStorageKey, buildFormGroupFromCadastroCampos, buildHistoryStateAfterReturningFromNestedInlineChild, buildInlineReturnStateForChildCadastro, buildNovoFormDefaultsFromCampos, buildRouteReuseKeyFromAppPathname, buildRouteReuseKeyFromNovoRouterLink, buildStructraAdminRouteRedirectCacheKey, buildStructraAdminRouteRedirectChildUrl, buildStructraPageCacheCadastroInitKey, buildStructraPageCacheRouteScope, buildStructraPageFooterParts, buildStructraSidebarTemplateContext, buildValidationMetaFromCadastroCampos, cadastroBuildImageUploadMetadata, cadastroCampoBlocoEditorOcupaLinhaInteira, cadastroCampoBooleanOcupaLinhaInteira, cadastroCampoMetadataDtoFromPartial, cadastroCampoMetadataEhBoolean, cadastroCampoMetadataLarguraCompacta, cadastroCampoMetadataLarguraFixaCss, cadastroCampoReferenciaMetadataDtoFromPartial, cadastroCampoRuleMaxLength, cadastroCampoScriptEditorLanguage, cadastroCampoScriptEditorMinHeight, cadastroCampoValidacaoDtoFromPartial, cadastroCampoWrapperWidthCss, cadastroCollectionEditorGridColumns, cadastroCollectionMaxItemsValidator, cadastroCollectionMinItemsValidator, cadastroConfirmExcluirPartialFromLayout, cadastroContainerLayoutSizeDoRecord, cadastroContainerPathJoin, cadastroCrudMessagesDoFormLayout, cadastroDeclarativeSnapshotDtoFromPartial, cadastroEnsureSingleBooleanInCollection, cadastroFieldsPerRowDoRecord, cadastroFlattenContainerRaw, cadastroFormDraftEnabledDoLayout, cadastroFormGridColumns, cadastroFormLayoutComoRecord, cadastroFormLayoutDoBundle, cadastroFormLayoutDoRuntime, cadastroFormLayoutPreserveActiveTab, cadastroFormPageLayoutFromPartial, cadastroGcd, cadastroGetCollectionItemControl, cadastroGridColumnSpanForFieldIndex, cadastroGridDenominadorTracks, cadastroGridTemplateColumnsLinhaUnicaSeAplicavel, cadastroInferExtensaoArquivo, cadastroInferImageContentType, cadastroLcm, cadastroMetadataDtoParaValidacaoLike, cadastroNavKeysStructra, cadastroNomeArquivoDaUploadUrl, cadastroNormalizarUploadUrlPorPrefixo, cadastroPageActionDtoFromPartial, cadastroPageActionsPorRegiao, cadastroPageActiveTabToRestore, cadastroPageComponentDtoFromPartial, cadastroPageComponentsPorRegiao, cadastroPageIdentityDoFormLayout, cadastroPageOverlayDtoFromPartial, cadastroPageShellAtivo, cadastroPageShellTabsKeepAliveFromLayout, cadastroPageTabDtoFromPartial, cadastroPageTabsOrdenados, cadastroPainelMaxWidthCss, cadastroRawBooleanDeep, cadastroRawNumber, cadastroRawString, cadastroReferenceEntryFromListarService, cadastroReferenciaOpenModeFromWire, cadastroReindexarCollectionOrdem, cadastroResolveId, cadastroSecaoFormGroupDense, cadastroSecaoPersisteExpandedState, cadastroSecaoRenderizaInlineDentroDoPai, cadastroSecaoSegmentosIntercalados, cadastroSecaoSegmentosParaRender, cadastroSecaoUsaFormGroup, cadastroSecaoUsaFormGroupComoBlocoVisual, cadastroSecaoUsaSuperficieDeclarativa, cadastroSingleBooleanCollectionBinding, cadastroTitulosEfectivosDoFormLayout, cadastroToastTitleEfectivoDoFormLayout, cadastroToolbarButtonDtoFromPartial, cadastroToolbarVisibilityDoFormLayout, cadastroUseBackToTopButtonFromLayout, cadastroValidationSummaryFlagsDoRecord, cadastroValidationSummaryPinnedFromFlags, cadastroWireCollectionOrdemReindexOnAdd, cadastroWireCollectionOrdemReindexOnAddRemove, cadastroWireCollectionOrdemReindexOnRemove, campoMetadataVisivelNoModo, caretIndexFromIntegerDigitCount, caretIndexFromSemantic, carregarOpcoesMultiselectViaSpec, cepMaskCompleteValidator, clearRequiredValidatorsOnReadOnlyCadastroFields, clearStructraCadastroInlineReturnSessionCacheForTests, clearStructraCadastroSessionStorageOnLogout, coerceDecimalPtBr, coerceReportBoolean, collectValidationSummaryItems, colunasGridTemFormatacaoDeclarativa, computeReferenciaHasMore, consoleLogLevelClass, consultaCampoMetadataDtoFromPartial, consultaCardCampoDtoFromPartial, consultaFiltroValorDataSomenteDia, consultaGridColunaDtoFromPartial, consultaGridColunaKeyParaCampoLinha, consultaGridConfigDtoFromPartial, consultaPassaItem, consultaPassaTodosItens, consultaUsuariosMetadataReplyFromPartial, consumeCadastroInlineFormDraftPendingRestore, consumirResultadoCadastroInlineCampoPessoaId, consumirResultadoCadastroInlineCampoReferencia, cpfCnpjMaskCompleteValidator, createCadastroDialogActivatedRoute, createCadastroMetadataPageConfig, createCadastroPadraoConfig, createCadastroRuntime, createCollectionFormArray, createCollectionItemFormGroup, createConsultaListaItemGuardFromFiltroUi, createConsultaOptionsListarResolver, createConsultaPadraoRuntime, createConsultaPresetSelectEmptyOptionsMessageSignal, createConsultaPresetStorageApi, createGrpcSaveRequestMapper, createInlineHostNavigation, createMapCardFromConsultaColunasGrid, createMapGridRowFromConsultaColunasGrid, createSaveRequestFromPartialMapper, criarDraftInlinePessoa, decimalPtBrNaoNegativoValidator, decimalPtBrToNullableNumber, defaultIsConsultaListItemMinimo, defaultParseLinhaGravadaJson, deleteConfirmPageConfigFromPartial, deriveCadastroTituloEditar, deriveConsultaListaItemGuardPropsFromFiltroUi, duplicateConfigFromLayout, duplicatePageConfigFromPartial, enrichCadastroReferenciaDialogPageConfig, ensureCadastroCollectionMinItems, ensureCadastroFormControlsFromMetadata, escapeHtml, evaluateStructraPageVisibleExpression, executarConsultaServidorComPreset, extractConsultaListaCacheNamespace, extractDecimalBrParts, fileIsLikelyImage, fileMatchesAccept, filtrarSecoesMetadataPorModo, filtrarUiSelectOptionsPainelComValorPersistente, filtrarUiSelectOptionsPorQuery, findCadastroCampoByKey, findFirstReportLeafId, findReportTreeLabel, fixedDigitsMaskCompleteValidator, flattenCadastroMetadataSecoes, fmtDataPt, fmtDocumentoCelulaConsultaGrid, formatAcceptForDisplay, formatDateTimePtBr, formatDecimalBr, formatDocumentoPessoaParaExibicao, formatFileSizeBytes, formatIntegerThousandsBr, formatMaskDigits, formatPhoneBr, formatUiFieldDateValue, getFilePreviewKind, getStructraActionsByGroup, getThemeClass, getThemeClassList, getThemePrimaryColorLabelPtBr, getThemeTokenClass, hexParaColorInput, inferCadastroItemFieldsFromPlainRows, inferCadastroListaUrlFallback, initialCadastroControlValue, injectEffectiveThemeId, isCadastroDuplicateNavigation, isCollectionField, isCollectionLikeField, isConsultaCardAutoSubtitleExcluded, isLegacyDarkThemeId, isLegacyFormContainerStateStorageKey, isLegacyNomeDocumentoReferencePreset, isReadonlyCollectionField, isReportBooleanColumn, isReportNowrapColumn, isValidPhoneBr, libDialogPanelClasses, listaUrlFromRotaCadastro, listarItensCadastroReferencia, listarTodosPaginado, loadPresetsJson, loadStructraAdminRouteRedirectTarget, mapCadastroFormRawToPayload, mapConsultaGridColunasParaDataGrid, mapConsultaMetadataParaFiltroUi, mapErroTransporteParaMensagem as mapErroListaDefault, mapErroTransporteParaMensagem, mapEstadosToOptions, mapFiltroSalvoParaConsultaPreset, mapListarItensParaMultiselectOpcoes, mapReportTreeToTreeViewNodes, markCadastroInlineFormDraftPendingRestore, maskDigitCount, mergeCadastroConfirmExcluir, mergeConsultaGridRowFormattingFromColunasGrid, mergeConsultaMultiselectOpcoesComSeleccionados, mergeDocumentoFmtNaLinhaConsulta, mergeMapConsultaGridColunasOptsComColumnFormat, mergeNovoIdEmListaSelecionada, mergeStructraShellScrollRestorationOptions, metadataCampoParaChaveLinhaCliente, modoPermissaoReferenciaFromWire, montarFiltrosGrpcPreset, montarFiltrosServidorPreset, montarHierarquiaSecoesMetadata, multiselectIdListRequiredValidator, multiselectMaxItemsValidator, navegarVoltarLista, navegarVoltarListaComIdRemovido, navegarVoltarListaComLinha, navigateCadastroDuplicate, navigateCommandsFromRotaAlterar, navigateCommandsFromRotaNovo, nomeSalvarParaPayloadComPessoa, normalizarArvoreSecoesMetadata, normalizarHexCor, normalizarItensParaGravarServidorCadastro, normalizarListaIdsMultiselect, normalizarOperadorConsultaParaEnvioServidor, normalizarRotaReferencia, normalizarStructraAction, normalizarStructraActionGroup, normalizarStructraActionGroups, normalizeCadastroAppPath, normalizeCadastroCampoMetadataWire, normalizeCadastroInitRouteIdParam, normalizeCadastroItemEditorDecimalControls, normalizeCadastroReferenciaDialogRotaKey, normalizeCadastroRouteForContainerState, normalizeConsoleLogLevel, normalizeFormDateValue, normalizePhoneBr, normalizeStructraAdminPath, normalizeStructraTheme, novoPathCommandsFromRota, onlyDigits, operadorConsultaComValorUnicoComparacao, operadorConsultaDatetimeUsaDatePicker, operadoresConsultaCampo, operadoresPorTipo, ordenarFiltroItens, ordenarStructraActions, parseDecimalBr, parseIntegerString, parseUiFieldDateValue, patchFormFromEntidadeRecord, permissionTabsUsamGruposVerticais, permissoesReferenciaMetadata, phoneBrDynamicMaskCompleteValidator, phoneBrMaskCompleteValidator, phoneBrMaskFromDigits, pickCadastroPageActiveTabExplicit, pickTabKeyLinkedToSummaryItems, precisaValor, precisaValorFinal, provideAppPageFooter, provideStructraCadastroReferenciaDialogRoot, provideStructraPageFooter, provideStructraShellScrollRestoration, qtdCriteriosPresetParaSkeleton, readCadastroDuplicateSourceId, readCadastroPageActiveTabFromNavigationState, readCadastroPageActiveTabFromUrl, readFormContainerCollapsedFromStorage, readStructraAdminRouteRedirectTarget, readStructraCadastroInlineReturn, referenciaAbreEmDialog, referenciaOpenModeRaw, referenciaUsesLegacyRegistryMapper, registerCadastroReferenceEntries, registerCadastroReferenceListSources, registerCadastroReferenciaDialogBridges, registerStructraBuiltinPageComponents, replaceProdutoCadastroFormControls, reportColumnWidthStyle, reportTableHasFixedWidths, resetStructraCadastroReferenciaDialogRootForTests, resolveCadastroCollectionMinItems, resolveCadastroListaUrlParaNavegacao, resolveCadastroPageActiveTabKey, resolveCadastroReferenciaMapOptions, resolveConsultaEditActionLabelFromGridConfig, resolveConsultaListaQuerySliceFromGridConfig, resolveConsultaNavKeysFromPageLayout, resolveConsultaNovoRouterLinkFromLayout, resolveConsultaRouteEditBaseFromLayout, resolveConsultaToastTitleLista, resolveControlAtPath, resolveFormContainerCollapsed, resolveReferenciaOpcaoLabel, resolveStructraAdminMenuUrl, resolveStructraPageCacheCadastroScope, resolveStructraPageInputExpression, resolveStructraPageInputs, resolveStructraShellScrollContainer, resolverAcoesReferenciaPorRota, resolverValorOpcaoPorRotuloNormalizado, resumoValorMultiselectFiltro, rotaListaReferencia, rotuloEnmStatus, rotuloNomeDocumentoLista, rotuloOperadorConsulta, rotuloPessoaLista, runStructraSimulatedLoadingDelay, sanitizeDecimalBrInput, sanitizeIntegerDigits, sanitizeRecordForCadastroDuplicate, savePresetsJson, scheduleRemoteCollectionHydrationAfterSectionExpand, secaoMetadataEhContainerPlain, secaoTemConteudoVisivel, secaoTemCorpoParaRender, sectionHasVisibleInvalid, semanticCaretAt, semanticIntegerDigitCountLeft, serializeCollectionFormArray, shouldDeferInitialRemoteCollectionLoad, shouldSkipCadastroPageActiveTabCacheWrite, shouldSkipStructraAdminMenuNavigation, stripStructraCadastroInlineResultFromHistory, stripToDigits, structraActionButtonVariant, structraCadastroInlineResultTemIdSalvo, structraCadastroInlineResultTemReferenciaExcluida, structraElementScrolls, structraHasValue, structraIsFilledString, structraIsFormGroup, structraIsValidPort, structraParseNumberOrNull, structraReadFormValue, structraReadNestedValue, structraTrimString, subscribeMarkForCheckOnInvalidUiRefresh, subtreeHasVisibleInvalid, syncStructraCadastroInlineReturnSessionCache, tabWarningFromLinkedSummaryItems, tipoCampoMetadataParaUi, tipoValorApi, toCadastroReferenceListPageResult, toConsoleLogLineView, toConsoleLogLineViews, toUiSelectOptionsFromMetadata, uiSelectOpcaoIdNomeDocumento, uiSelectOpcoesDePessoas, validationLikeFromCampoMetadata, validatorsFromCampo, writeFormContainerCollapsedToStorage };
12294
+ export type { AdaptiveDataViewMode, AdminLoginShellConfig, AdminLoginSubmitPayload, StructraSidebarEmpresaContext as AdminSidebarEmpresaContext, StructraSidebarUserView as AdminSidebarUserView, AlertAction, AlertType, AppThemeId, AppThemeOption, ApplyCadastroModoSenhaOptions, BreadcrumbItem, BuildCadastroMetadataShellRuntimeOptions, BuildCadastroPageRuntimeOptions, CadastroActionStateDto$1 as CadastroActionStateDto, CadastroAutoMapFormValueConfig, CadastroCampoContaNaGrelhaFn, CadastroCampoMetadataDto, CadastroCampoMetadataMergeInput, CadastroCampoReferenciaMetadataDto, CadastroCampoSelectOptionDto, CadastroCampoValidacaoDto, CadastroCampoValidacaoLike, CadastroCollectionBinding, CadastroCollectionBridge, CadastroCollectionEditingItemControlsChangeEvent, CadastroCollectionEditingItemControlsChangeOptions, CadastroCollectionItemEvent, CadastroCollectionItemFieldsChangeEvent, CadastroCollectionItemFieldsChangeOptions, CadastroCollectionItemsChangeEvent, CadastroCollectionPageReplyWire, CadastroCollectionPageRequestWire, CadastroCollectionPagingPort, CadastroCollectionPagingUi, CadastroCollectionSaveHandler, CadastroCollectionStateDto, CadastroConfirmExcluirPartial, CadastroCrudMessagesResolved, CadastroDeclarativeSnapshotDto, CadastroDuplicateActionConfig, CadastroEnsureSingleBooleanInCollectionOptions, CadastroFieldChangeEvent, CadastroFieldEventBase, CadastroFieldKey, CadastroFieldRegistration, CadastroFieldSelectEvent, CadastroFieldSimpleEvent, CadastroFiltroDialogRuntimeSlice, CadastroFormPageLayout, CadastroHeaderSecondaryAction, CadastroImageUploadMetadata, CadastroImageUploadMetadataOptions, CadastroInferExtensaoArquivoOptions, CadastroInferImageContentTypeOptions, CadastroInlineHostNavigationConfig, CadastroListSelectBinding, CadastroMetadataCamposReplyLike, CadastroMetadataPageCadastro, CadastroMetadataPageServiceConfig, CadastroMetadataPageShellCallbacks, CadastroMetadataPageStateConfig, CadastroMetadataPageVm, CadastroMetadataSecao, CadastroMetadataServiceConfig, CadastroMetadataServicePort, CadastroMetadataShellRuntime, CadastroMetadataView, CadastroModo, CadastroMultiselectBinding, CadastroPadraoGrpcService, CadastroPageActionDto, CadastroPageActiveTabResolveInput, CadastroPageComponentDto, CadastroPageConfig, CadastroPageIdentityFallback, CadastroPageNavKeysConfig, CadastroPageOverlayDto, CadastroPageRuntime, CadastroPageSenhaConfig, CadastroPageTabDto, CadastroPessoaOpcaoMin, CadastroRawBooleanDeepOptions, CadastroReferenceListPageParams, CadastroReferenceListPageResult, CadastroReferenceListarService, CadastroReferenceRegistryEntry, CadastroReferenciaAcoesPermitidas, CadastroReferenciaDialogBridgeEntry, CadastroReferenciaDialogBridgeFactory, CadastroReferenciaDialogCloseReason, CadastroReferenciaDialogCompletePayload, CadastroReferenciaDialogContext, CadastroReferenciaDialogOpenOptions, CadastroReferenciaDialogOpenRequest, CadastroReferenciaOpenModeWireRef, CadastroReferenciaPermissoesMetadata, CadastroReferenciaRouteAccess, CadastroReindexarCollectionOrdemOptions, CadastroRuntimeDeps, CadastroRuntimeOptions, CadastroSearchSelectBinding, CadastroSearchSelectRedirectSuffix, CadastroSearchSelectReferenciaDialog, CadastroSecaoSegmento, CadastroSingleBooleanCollectionBindingOptions, CadastroTitulosFallback, CadastroToolbarButtonDto, CadastroToolbarVisibilityResolved, CadastroValidationUi, CardItemBooleanField, CardItemMetaField, CardItemView, CardListDataMode, CardListHeaderPosition, CardListMapFn, CatalogoStubConsultaConfig, CatalogoStubListaItem, ConfirmDialogData, ConfirmDialogVariant, ConsoleLogLevel, ConsoleLogLine, ConsoleLogLineView, ConsultaBaseConfig, ConsultaCampoDef, ConsultaCampoMetadataDto, ConsultaCardCampoDto, ConsultaCatalogBundleConfig, ConsultaCatalogBundleSessaoPort, ConsultaCatalogEntityBindings, ConsultaCatalogInitCarregada, ConsultaCrudAdapterConfig, ConsultaEnumSelectOptionDto, ConsultaFiltroCampo, ConsultaFiltroItem, ConsultaFiltroMatchAdapters, ConsultaFiltroPreset, ConsultaFiltroSalvoDto, ConsultaFiltroSalvoItemDto, ConsultaFiltroUiFragment, ConsultaFiltroValorTipo, ConsultaFiltrosBundleSessao, ConsultaFiltrosChromeVolatil, ConsultaFiltrosSessaoConsultaPadraoApi, ConsultaFiltrosSessaoUserLike, ConsultaFiltrosSessaoVolatilApi, ConsultaFiltrosVolatilHandlers, ConsultaGridColunaDto, ConsultaGridColunaDtoLike, ConsultaGridConfigDto, ConsultaInitCarregada, ConsultaListaCacheKeyParts, ConsultaListaCachePayload, ConsultaListaMemoriaCacheStoreOpts, ConsultaListaQueryParamsLike, ConsultaListaResultadoLike, ConsultaListaServidorQuerySlice, ConsultaMapCardLinha, ConsultaMetadataCampo, ConsultaMetadataReplyLike, ConsultaMetadataServicePort, ConsultaMultiselectOpcoesRemotasSpec, ConsultaOperadorOption, ConsultaOptionsListarContrato, ConsultaOptionsListarResolver, ConsultaPadraoGrpcServiceLike, ConsultaPadraoNavigateLike, ConsultaPadraoToastLike, ConsultaPageCacheEntry, ConsultaPageMetadataUnified, ConsultaPageRuntime, ConsultaPageRuntimeDeps, ConsultaRouteReusePort, ConsultaServidorExecutorOpts, ConsultaServidorListaReply, ConsultaServidorPort, ConsultaServidorQueryParams, ConsultaTopbarSlotPort, ConsultaUsuariosMetadataReply, ConsultaValorTipo, CreateCadastroMetadataPageConfigOptions, CreateCadastroPadraoConfigOptions, CreateConsultaPadraoRuntimeOptions, CreateGrpcSaveRequestMapperOptions, CreateSaveRequestFromPartialMapperOptions, CrudConsultaServicePort, DataGridColumn, DataGridPaginationChangeEvent, DeleteConfirmPageConfig, DetailsViewItem, DropdownListBindings, DropdownSearchPageRequested, DuplicatePageConfig, FieldCommonInputs, FieldSize, FilePreviewKind, FiltroItemEntrada, FiltroItemEntradaGenerico, FiltroItemGridRow, FiltroItemSalvoDto, FiltroSalvo, FormContainerStateKeyParts, FormTabValidationLinkConfig, FormTabsVariant, GridLayoutConsultaApiDto, GridLayoutConsultaPersistedPayload, GrpcSaveRequestFactory, InitConsultaReply, ListarTodosPaginadoParams, LoadingDialogData, MapConsultaGridColunasOpts, MenuItemAction, MenuItemDivider, MenuItemGroup, MenuItemKind, MenuItemSubmenu, MenuLeafItem, MenuNodeItem, ModoPermissaoReferencia, MontarFiltrosGrpcPresetOptions, MontarFiltrosServidorPresetOptions, OnboardingChecklistProgress, OnboardingChecklistStep, OptionsSourceServicePort, PatchFormFromEntidadeOptions, PermissionGroupTabBucket, PermissionGroupTabDescriptor, PermissionGroupTabGroup, ReportColumnMeta, ReportColumnWidthFields, ReportFilterMeta, ReportFiltroItemEntrada, ReportHeader, ReportMetadata, ReportPesquisarRequest, ReportResult, ReportSection, ReportSectionColumn, ReportSectionTable, ReportTotal, ReportTreeNode, ResolveStructraAdminMenuUrlOptions, SalvarFiltroConsultaRequest, SalvarFiltroPresetAsyncArgs, SaveRequestFromPartialFactory, ScriptEditorLanguage, SelectPageRequested, SkeletonFieldShellVariant, StatCardDeltaTone, StatusBadgeSize, StatusBadgeVariant, StructraAction, StructraActionButtonVariant, StructraActionGroup, StructraActionGroupWire, StructraActionId, StructraActionVariant, StructraActionWire, StructraAdminRouteRedirectCacheOptions, StructraAdminRouteRedirectLoadOptions, StructraCadastroInlineResultState, StructraCadastroInlineReturnState, StructraFormValueSource, StructraGridLayoutApiBaseResolverFn, StructraGridLayoutAuthHeadersResolverFn, StructraGridLayoutTenantResolverFn, StructraMidiaUploadResult, StructraMidiaUploadTransportContext, StructraMidiaUploadTransportFn, StructraPageCacheGetOrLoadOptions, StructraPageCacheSetOptions, StructraPageFooterConfig, StructraPageInputContext, StructraReportTransport, StructraShellScrollRestorationMergedOptions, StructraShellScrollRestorationOptions, StructraSidebarContext, StructraSidebarEmpresaContext, StructraSidebarTemplateContext, StructraSidebarUserView, StructraTheme, TitulosFromMetadataConfig, ToastInstance, ToastShowOptions, ToastType, ToastVerticalPosition, TreeViewNode, TreeViewSelectEvent, UiFieldInputTextAlign, UiSelectOption, ValidationFieldMeta, ValidationSummaryItem, ValidationSummarySize, ValidationSummaryVariant, ValoresConsultaPresetUi };