structra-ui 0.2.75 → 0.2.77

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,5 +1,8 @@
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, Provider, WritableSignal, Type, EnvironmentProviders, EffectRef, isDevMode } from '@angular/core';
2
+ import { AfterViewInit, OnChanges, ElementRef, SimpleChanges, InjectionToken, OnInit, OnDestroy, EnvironmentProviders, ChangeDetectorRef, Injector, DestroyRef, EventEmitter, DoCheck, TemplateRef, AfterContentInit, QueryList, AfterViewChecked, Renderer2, Signal, ViewContainerRef, Provider, WritableSignal, Type, EffectRef, isDevMode } from '@angular/core';
3
+ import { Router, ActivatedRouteSnapshot, ActivatedRoute } from '@angular/router';
4
+ import { Observable, Subscription } from 'rxjs';
5
+ import { CdkDragMove } from '@angular/cdk/drag-drop';
3
6
  import * as _angular_forms from '@angular/forms';
4
7
  import { ControlValueAccessor, AbstractControl, NgControl, ValidatorFn, NgForm, FormGroup, FormControl, FormBuilder, FormArray } from '@angular/forms';
5
8
  import { MatDatepicker } from '@angular/material/datepicker';
@@ -10,8 +13,6 @@ import { ICellRendererParams, ColDef, GetRowIdParams, GridReadyEvent, ColumnMove
10
13
  import { ICellRendererAngularComp } from 'ag-grid-angular';
11
14
  import * as structra_ui from 'structra-ui';
12
15
  import { DialogRef } from '@angular/cdk/dialog';
13
- import { Observable, Subscription } from 'rxjs';
14
- import { ActivatedRouteSnapshot, Router, ActivatedRoute } from '@angular/router';
15
16
  import { BreakpointObserver } from '@angular/cdk/layout';
16
17
 
17
18
  /** Marcador de pacote publicado como `structra-ui`. */
@@ -55,6 +56,113 @@ declare function resolveStructraShellScrollContainer(host: HTMLElement, pageHost
55
56
  /** Páginas com botão «voltar ao topo» próprio (consulta / cadastro). */
56
57
  declare const STRUCTRA_DEDICATED_BACK_TO_TOP_SELECTOR = ".structra-consulta-page-host, .structra-cadastro-page-host, .cadastro-metadata-shell-page";
57
58
 
59
+ /** Posição de scroll persistida em memória (por tenant + rota + contentor). */
60
+ interface ScrollPositionState {
61
+ key: string;
62
+ route: string;
63
+ scrollTop: number;
64
+ scrollLeft: number;
65
+ timestamp: number;
66
+ }
67
+ interface ScrollPositionValues {
68
+ scrollTop: number;
69
+ scrollLeft: number;
70
+ }
71
+
72
+ /** Resolve o tenant actual para compor a chave de scroll (`tenantId:route:containerKey`). */
73
+ type StructraScrollTenantResolverFn = () => string | null | undefined;
74
+ declare const STRUCTRA_SCROLL_TENANT_RESOLVER: InjectionToken<StructraScrollTenantResolverFn>;
75
+
76
+ declare function normalizeStructraScrollRoute(url: string): string;
77
+ declare class StructraScrollStateService {
78
+ private readonly router;
79
+ private readonly tenantResolver;
80
+ private readonly store;
81
+ buildKey(containerKey: string, route?: string): string;
82
+ save(key: string, values: ScrollPositionValues, route?: string): void;
83
+ saveForContainer(containerKey: string, values: ScrollPositionValues, route?: string): void;
84
+ get(key: string): ScrollPositionState | null;
85
+ getForContainer(containerKey: string, route?: string): ScrollPositionState | null;
86
+ restore(key: string, target: HTMLElement | Window): boolean;
87
+ restoreForContainer(containerKey: string, target: HTMLElement | Window, route?: string): boolean;
88
+ clear(key: string): void;
89
+ clearForContainer(containerKey: string, route?: string): void;
90
+ clearByRoute(route: string): void;
91
+ clearAll(): void;
92
+ readValues(target: HTMLElement | Window): ScrollPositionValues;
93
+ applyValues(target: HTMLElement | Window, values: ScrollPositionValues): void;
94
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraScrollStateService, never>;
95
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<StructraScrollStateService>;
96
+ }
97
+
98
+ declare class StructraPreserveScrollDirective implements OnInit, OnDestroy {
99
+ private readonly el;
100
+ private readonly scrollState;
101
+ private readonly router;
102
+ /** Identificador do contentor (ex.: `page`, `ordens-recentes`, `kanban-board`). */
103
+ structraPreserveScroll: string;
104
+ /** Quando `true`, escuta/restaura scroll da janela em vez do host. */
105
+ structraPreserveScrollWindow: boolean;
106
+ private detach;
107
+ ngOnInit(): void;
108
+ ngOnDestroy(): void;
109
+ private containerKey;
110
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraPreserveScrollDirective, never>;
111
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StructraPreserveScrollDirective, "[structraPreserveScroll], .structra-consulta-page-host:not(.kanban-page-host)", never, { "structraPreserveScroll": { "alias": "structraPreserveScroll"; "required": false; }; "structraPreserveScrollWindow": { "alias": "structraPreserveScrollWindow"; "required": false; }; }, {}, never, never, true, never>;
112
+ }
113
+
114
+ interface StructraScrollPreserveAttachOptions {
115
+ scrollState: StructraScrollStateService;
116
+ router: Router;
117
+ target: HTMLElement | Window;
118
+ containerKey: string;
119
+ route?: string;
120
+ }
121
+ interface StructraScrollPreserveDetach {
122
+ flush(): void;
123
+ destroy(): void;
124
+ }
125
+ declare function attachStructraScrollPreserve(options: StructraScrollPreserveAttachOptions): StructraScrollPreserveDetach;
126
+
127
+ /**
128
+ * Activa {@link StructraScrollStateService} e liga opcionalmente eventos de reset de sessão
129
+ * (logout / troca de tenant) via {@link STRUCTRA_SCROLL_SESSION_RESET}.
130
+ */
131
+ declare function provideStructraScrollState(): EnvironmentProviders;
132
+
133
+ /** Emite quando a sessão deve limpar todo o scroll em memória (logout, troca de tenant). */
134
+ declare const STRUCTRA_SCROLL_SESSION_RESET: InjectionToken<Observable<void>>;
135
+
136
+ /** Breakpoint desktop do Kanban Structra (mobile = max-width 768px). */
137
+ declare const STRUCTRA_KANBAN_DESKTOP_MIN_WIDTH = 769;
138
+ interface StructraKanbanDragAutoScrollOptions {
139
+ edgeSize?: number;
140
+ baseSpeed?: number;
141
+ maxSpeed?: number;
142
+ desktopMinWidth?: number;
143
+ /** Permite reutilizar o breakpoint do host (ex.: signal `isMobile`). */
144
+ isDesktop?: () => boolean;
145
+ }
146
+ /**
147
+ * Auto-scroll horizontal do contentor Kanban durante drag (CDK), apenas desktop.
148
+ * Instanciar no componente do board e chamar nos eventos cdkDragMoved / cdkDragEnded / drop.
149
+ */
150
+ declare class StructraKanbanDragAutoScrollController {
151
+ private readonly options;
152
+ private frame;
153
+ private direction;
154
+ private speed;
155
+ private container;
156
+ constructor(options?: StructraKanbanDragAutoScrollOptions);
157
+ onDragMoved(event: CdkDragMove<unknown>, container: HTMLElement | null | undefined): void;
158
+ /** Chamar em cdkDragEnded, após drop, rollback/cancel e ngOnDestroy. */
159
+ stop(): void;
160
+ destroy(): void;
161
+ private isDesktop;
162
+ private calculateSpeed;
163
+ private start;
164
+ }
165
+
58
166
  type AlertType = 'error' | 'success' | 'warning' | 'info';
59
167
  /** Botão opcional alinhado à direita dentro do banner. */
60
168
  interface AlertAction {
@@ -546,6 +654,11 @@ declare class SkeletonTableComponent {
546
654
  columnCount: number;
547
655
  rowCount: number;
548
656
  showPager: boolean;
657
+ /**
658
+ * Faixa inferior só com o chrome do cabeçalho (sem texto/botões de paginação).
659
+ * Usado no skeleton instantâneo de navegação antes da chamada ao backend.
660
+ */
661
+ readonly pagerChromeOnly: _angular_core.InputSignalWithTransform<boolean, unknown>;
549
662
  /** Só o corpo (linhas); omitir cabeçalho e paginação — ex.: overlay sobre o viewport do AG Grid. */
550
663
  bodyOnly: boolean;
551
664
  animate: boolean;
@@ -564,7 +677,7 @@ declare class SkeletonTableComponent {
564
677
  isActionsHeaderCell(label: string, index: number): boolean;
565
678
  isActionsBodyCell(index: number): boolean;
566
679
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkeletonTableComponent, never>;
567
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkeletonTableComponent, "app-skeleton-table", never, { "columnCount": { "alias": "columnCount"; "required": false; }; "rowCount": { "alias": "rowCount"; "required": false; }; "showPager": { "alias": "showPager"; "required": false; }; "bodyOnly": { "alias": "bodyOnly"; "required": false; }; "animate": { "alias": "animate"; "required": false; }; "headerLabels": { "alias": "headerLabels"; "required": false; "isSignal": true; }; "chrome": { "alias": "chrome"; "required": false; "isSignal": true; }; "showActionsColumn": { "alias": "showActionsColumn"; "required": false; "isSignal": true; }; "pagerRangeLabel": { "alias": "pagerRangeLabel"; "required": false; "isSignal": true; }; "pagerPageLabel": { "alias": "pagerPageLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
680
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkeletonTableComponent, "app-skeleton-table", never, { "columnCount": { "alias": "columnCount"; "required": false; }; "rowCount": { "alias": "rowCount"; "required": false; }; "showPager": { "alias": "showPager"; "required": false; }; "pagerChromeOnly": { "alias": "pagerChromeOnly"; "required": false; "isSignal": true; }; "bodyOnly": { "alias": "bodyOnly"; "required": false; }; "animate": { "alias": "animate"; "required": false; }; "headerLabels": { "alias": "headerLabels"; "required": false; "isSignal": true; }; "chrome": { "alias": "chrome"; "required": false; "isSignal": true; }; "showActionsColumn": { "alias": "showActionsColumn"; "required": false; "isSignal": true; }; "pagerRangeLabel": { "alias": "pagerRangeLabel"; "required": false; "isSignal": true; }; "pagerPageLabel": { "alias": "pagerPageLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
568
681
  static ngAcceptInputType_columnCount: unknown;
569
682
  static ngAcceptInputType_rowCount: unknown;
570
683
  static ngAcceptInputType_showPager: unknown;
@@ -3150,836 +3263,1536 @@ declare function subtreeHasVisibleInvalid(control: AbstractControl, formSubmitte
3150
3263
  */
3151
3264
  declare function sectionHasVisibleInvalid(root: AbstractControl, path: string, formSubmitted?: boolean): boolean;
3152
3265
 
3153
- /** Opção enum para {@link DataGridColumn.enumOptions}. */
3154
- type DataGridEnumOption = {
3155
- value: string;
3156
- label: string;
3157
- };
3158
3266
  /**
3159
- * Configuração de coluna da lib convertida internamente para `ColDef` do AG Grid.
3267
+ * Espelho estável dos valores {@code ComponentType} do backend (protobuf).
3268
+ * Mantido na lib para UI/metadata sem depender do código gerado por `ts_proto`.
3160
3269
  */
3161
- interface DataGridColumn<T = unknown> {
3162
- /** Campo no registro ou identificador lógico (ex.: `__actions` para coluna de ações). */
3163
- key: keyof T | string;
3164
- header: string;
3165
- width?: number;
3166
- flex?: number;
3167
- /**
3168
- * `boolean`: checkbox temático via {@link DataGridComponent}; editável se {@link onBooleanChange} estiver definido.
3169
- * `midiaPreview`: miniatura + botão zoom (valor da célula = URL relativa ou absoluta da imagem).
3170
- */
3171
- type?: 'text' | 'number' | 'boolean' | 'actions' | 'midiaPreview';
3172
- /** Com `type: 'midiaPreview'`: rótulo ARIA do botão que abre o diálogo (omisso: «Ampliar imagem»). */
3173
- midiaPreviewZoomAriaLabel?: string;
3174
- /** Por omissão `true` para texto/número; ignorado para `actions`. */
3175
- sortable?: boolean;
3176
- /**
3177
- * Alinhamento horizontal do cabeçalho e da célula (texto/número).
3178
- * Ignorado para `type: 'actions'` e `boolean` (têm layout próprio).
3179
- * Omisso / `start`: comportamento por defeito (esquerda em LTR).
3180
- */
3181
- align?: 'start' | 'center' | 'end';
3182
- /**
3183
- * Com `type: 'boolean'`: se definido, o checkbox deixa de ser só leitura e chama-se após cada alteração
3184
- * (ex.: marcar «principal» na grelha com exclusividade entre linhas).
3185
- */
3186
- onBooleanChange?: (ctx: {
3187
- row: T;
3188
- value: boolean;
3189
- }) => void;
3190
- /**
3191
- * Texto / número: edição inline no AG Grid; chamado após o utilizador confirmar o novo valor.
3192
- * Omisso: célula só leitura (comportamento anterior).
3193
- */
3194
- onScalarCommit?: (ctx: {
3195
- row: T;
3196
- newValue: unknown;
3197
- }) => void;
3198
- /**
3199
- * Opções enum (`value` numérico em texto + `label`); a grelha exibe o rótulo em vez do valor cru.
3200
- * Ordenação/filtro continuam a usar o campo bruto da linha.
3201
- */
3202
- enumOptions?: readonly DataGridEnumOption[];
3203
- /**
3204
- * Campo da linha com nome de classe CSS a aplicar na célula (ex.: cor por status).
3205
- * Combinado com classes de alinhamento (`align`).
3206
- */
3207
- cellClassField?: keyof T | string;
3270
+ declare enum ComponentType {
3271
+ UNSPECIFIED = 0,
3272
+ TEXT = 1,
3273
+ PASSWORD = 2,
3274
+ NUMBER = 3,
3275
+ CHECKBOX = 4,
3276
+ TEXTAREA = 5,
3277
+ SEARCH_SELECT = 6,
3278
+ MULTI_SELECT = 7,
3279
+ LIST_SELECT = 8,
3280
+ MULTI_SELECT_REQUIRED_DEFAULT = 9,
3281
+ LIST_SELECT_REQUIRED_DEFAULT = 10,
3282
+ DECIMAL = 11,
3283
+ DATE_TIME = 12,
3284
+ COLLECTION = 13,
3285
+ /** Cadastro: upload de imagem com URL persistida (linha de coleção / campo simples). */
3286
+ MIDIA_UPLOAD = 14,
3287
+ /** Cadastro: interruptor estilo «switch» (booleano). */
3288
+ SWITCH_BOX = 15,
3289
+ /** Cadastro: cor em hexadecimal com seletor nativo e campo texto. */
3290
+ COLOR_PICKER = 16,
3291
+ /** Cadastro: telefone com máscara BR. */
3292
+ PHONE = 17,
3293
+ /** Cadastro: e-mail. */
3294
+ EMAIL = 18,
3295
+ /** Cadastro: CPF ou CNPJ com máscara. */
3296
+ CPF_CNPJ = 19,
3297
+ /** Cadastro: coleção 1:N somente leitura (lista/grelha sem editor). */
3298
+ READONLY_COLLECTION = 20,
3299
+ /** Cadastro: editor de script completo (painel monoespaçado com cópia). */
3300
+ SCRIPT_EDITOR = 21,
3301
+ UNRECOGNIZED = -1
3208
3302
  }
3209
3303
 
3210
- /** Contexto injetado pelo {@link DataGridComponent} (não exportado para consumidores). */
3211
- interface DataGridActionsContext<T = unknown> {
3212
- onEditRow: (row: T) => void;
3213
- onRemoveRow: (row: T) => void;
3214
- onDuplicateRow?: (row: T) => void;
3215
- onPrintRow?: (row: T) => void;
3216
- /** Quando `false`, o botão «Alterar» não é mostrado. */
3217
- showEditAction?: boolean;
3218
- /** Quando `false`, o botão «Remover» não é mostrado. */
3219
- showRemoveAction?: boolean;
3220
- /** Quando `true`, mostra «Duplicar» (requer `onDuplicateRow`). */
3221
- showDuplicateAction?: boolean;
3222
- /** Quando `true`, mostra «Imprimir» (requer `onPrintRow`). */
3223
- showPrintAction?: boolean;
3224
- /** Tooltip/aria do botão de abrir registo; omisso ⇒ «Alterar». */
3225
- editActionLabel?: string;
3226
- /**
3227
- * Classe Font Awesome do ícone do botão editar/transmitir (ex.: `fa-paper-plane`).
3228
- * Omisso ⇒ `fa-pen-to-square`.
3229
- */
3230
- editActionIconClass?: string;
3231
- /** Tooltip/aria do botão imprimir; omisso ⇒ «Imprimir». */
3232
- printActionLabel?: string;
3304
+ /** Espelho de {@code ContainerLayoutSize} (metadata cadastro). */
3305
+ declare enum ContainerLayoutSize {
3306
+ CONTAINER_LAYOUT_SIZE_UNSPECIFIED = 0,
3307
+ CONTAINER_LAYOUT_SIZE_MD = 1,
3308
+ CONTAINER_LAYOUT_SIZE_LG = 2,
3309
+ CONTAINER_LAYOUT_SIZE_XL = 3,
3310
+ UNRECOGNIZED = -1
3233
3311
  }
3234
- declare class DataGridActionsCellRendererComponent implements ICellRendererAngularComp {
3235
- params: ICellRendererParams & {
3236
- context?: DataGridActionsContext;
3237
- };
3238
- agInit(params: ICellRendererParams): void;
3239
- refresh(): boolean;
3240
- protected get isPlaceholderRow(): boolean;
3241
- /** Linha pode ocultar ações via `__hideEditAction` / `__hidePrintAction` (ex.: NF já autorizada). */
3242
- protected get rowData(): Record<string, unknown> | undefined;
3243
- protected get showEditButton(): boolean;
3244
- protected get showPrintButton(): boolean;
3245
- /** Botão textual (ex.: «Transmitir NFS-e») em vez do ícone «Alterar». */
3246
- protected get editAsTextButton(): boolean;
3247
- protected get editActionIcon(): string;
3248
- /** `params.context` nem sempre vem preenchido; o grid guarda o mesmo objeto em `gridOptions.context`. */
3249
- protected get actionsContext(): DataGridActionsContext | undefined;
3250
- edit(): void;
3251
- remove(): void;
3252
- duplicate(): void;
3253
- print(): void;
3254
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataGridActionsCellRendererComponent, never>;
3255
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataGridActionsCellRendererComponent, "app-data-grid-actions-cell-renderer", never, {}, {}, never, never, true, never>;
3312
+ /** Espelho de {@code CadastroSectionPanelLayout}. */
3313
+ declare enum CadastroSectionPanelLayout {
3314
+ CADASTRO_SECTION_PANEL_LAYOUT_UNSPECIFIED = 0,
3315
+ CADASTRO_SECTION_PANEL_LAYOUT_CARD = 1,
3316
+ CADASTRO_SECTION_PANEL_LAYOUT_PLAIN = 2,
3317
+ UNRECOGNIZED = -1
3318
+ }
3319
+ /** Espelho de {@code FormCollectionLayout} no metadata cadastro (coleção 1:N). */
3320
+ declare enum FormCollectionLayout {
3321
+ FORM_COLLECTION_LAYOUT_UNSPECIFIED = 0,
3322
+ FORM_COLLECTION_LAYOUT_CARD_LIST = 1,
3323
+ FORM_COLLECTION_LAYOUT_TABLE = 2,
3324
+ FORM_COLLECTION_LAYOUT_INLINE_ROWS = 3,
3325
+ UNRECOGNIZED = -1
3326
+ }
3327
+ /** Espelho de {@code FileUploadType} no metadata cadastro — upload em lote na UI da coleção. */
3328
+ declare enum FileUploadType {
3329
+ FILE_UPLOAD_TYPE_UNSPECIFIED = 0,
3330
+ FILE_UPLOAD_TYPE_SINGLE = 1,
3331
+ FILE_UPLOAD_TYPE_MULTIPLE = 2,
3332
+ UNRECOGNIZED = -1
3333
+ }
3334
+ /** Espelho de {@code CadastroCollectionGridColumnFormat} — alinhado numericamente a {@link ConsultaGridColumnFormat}. */
3335
+ declare enum CadastroCollectionGridColumnFormat {
3336
+ CADASTRO_COLLECTION_GRID_COLUMN_FORMAT_UNSPECIFIED = 0,
3337
+ CADASTRO_COLLECTION_GRID_COLUMN_FORMAT_NONE = 1,
3338
+ CADASTRO_COLLECTION_GRID_COLUMN_FORMAT_TRIM = 2,
3339
+ CADASTRO_COLLECTION_GRID_COLUMN_FORMAT_CURRENCY = 3,
3340
+ CADASTRO_COLLECTION_GRID_COLUMN_FORMAT_DECIMAL = 4,
3341
+ CADASTRO_COLLECTION_GRID_COLUMN_FORMAT_DATE = 5,
3342
+ CADASTRO_COLLECTION_GRID_COLUMN_FORMAT_DATE_TIME = 6,
3343
+ CADASTRO_COLLECTION_GRID_COLUMN_FORMAT_ACTIVE_STATUS = 7,
3344
+ CADASTRO_COLLECTION_GRID_COLUMN_FORMAT_DOCUMENTO = 8,
3345
+ CADASTRO_COLLECTION_GRID_COLUMN_FORMAT_OPERACAO_ENM_STATUS = 9,
3346
+ UNRECOGNIZED = -1
3256
3347
  }
3257
3348
 
3258
3349
  /**
3259
- * Checkbox leitura (omisso) ou editável quando `interactive` e `onCommit` chegam nos params
3260
- * (raiz após merge do AG Grid, ou {@link ICellRendererParams} legado com `cellRendererParams`).
3350
+ * Espelho numérico de {@code ReferenceOptionPreset} em metadata-cadastro.proto.
3351
+ * Novos cadastros: preferir `formatoRetornoTexto` / `campoRetornoTexto` em vez de presets de domínio.
3261
3352
  */
3262
- declare class DataGridBooleanCellRendererComponent implements ICellRendererAngularComp {
3263
- private readonly cdr;
3264
- checked: boolean;
3265
- headerPlaceholder: string;
3266
- protected interactive: boolean;
3267
- private onCommit?;
3268
- private rowData;
3269
- agInit(params: ICellRendererParams): void;
3270
- refresh(params: ICellRendererParams): boolean;
3271
- protected onCheckboxChange(ev: Event): void;
3272
- /**
3273
- * O AG Grid (edição inline / foco de célula) intercepta `mousedown`/`click` no contentor da célula;
3274
- * sem `stopPropagation` o primeiro clique pode não chegar ao checkbox ou o estado volta atrás no `refresh`.
3275
- */
3276
- protected onBlockGridPointerBubble(ev: MouseEvent): void;
3277
- private applyParams;
3278
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataGridBooleanCellRendererComponent, never>;
3279
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataGridBooleanCellRendererComponent, "app-data-grid-boolean-cell-renderer", never, {}, {}, never, never, true, never>;
3353
+ declare enum ReferenceOptionPreset {
3354
+ REFERENCE_OPTION_PRESET_AUTO = 0,
3355
+ REFERENCE_OPTION_PRESET_ID_NOME = 1,
3356
+ /** @deprecated Prefira `formatoRetornoTexto` e campos estruturais explícitos (`activeOnly`, `sortBy`). */
3357
+ REFERENCE_OPTION_PRESET_ID_NOME_ATIVO = 2,
3358
+ /** @deprecated Prefira `formatoRetornoTexto` = `"{nome} ({documento})"`. */
3359
+ REFERENCE_OPTION_PRESET_ID_NOME_DOCUMENTO = 3,
3360
+ /** @deprecated Sinónimo legado de ID_NOME_DOCUMENTO. Prefira formato com placeholders. */
3361
+ REFERENCE_OPTION_PRESET_PESSOA = 4,
3362
+ UNRECOGNIZED = -1
3280
3363
  }
3281
3364
 
3282
- declare class DataGridMidiaPreviewCellRendererComponent implements ICellRendererAngularComp {
3283
- private readonly cdr;
3284
- private readonly dialog;
3285
- private readonly theme;
3286
- private readonly publicBase;
3287
- relativePath: string;
3288
- thumbSrc: string;
3289
- zoomAriaLabel: string;
3290
- placeholderRow: boolean;
3291
- protected dialogSrc: string;
3292
- agInit(params: ICellRendererParams): void;
3293
- refresh(params: ICellRendererParams): boolean;
3294
- protected onThumbError(ev: Event): void;
3295
- protected onZoomClick(ev: MouseEvent): void;
3296
- private applyParams;
3297
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataGridMidiaPreviewCellRendererComponent, never>;
3298
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataGridMidiaPreviewCellRendererComponent, "app-data-grid-midia-preview-cell-renderer", never, {}, {}, never, never, true, never>;
3365
+ /** Espelha `CadastroReferenciaOpenMode` no protobuf / C#. */
3366
+ declare enum CadastroReferenciaOpenMode {
3367
+ TELA = 0,
3368
+ DIALOG = 1
3299
3369
  }
3370
+ declare function cadastroReferenciaOpenModeFromWire(value: number | string | null | undefined): CadastroReferenciaOpenMode;
3371
+ type CadastroReferenciaOpenModeWireRef = {
3372
+ openMode?: CadastroReferenciaOpenMode | number | string | null | undefined;
3373
+ open_mode?: CadastroReferenciaOpenMode | number | string | null | undefined;
3374
+ };
3375
+ declare function referenciaOpenModeRaw(ref: CadastroReferenciaOpenModeWireRef | null | undefined): CadastroReferenciaOpenMode | number | string | null | undefined;
3376
+ declare function referenciaAbreEmDialog(ref: CadastroReferenciaOpenModeWireRef | null | undefined): boolean;
3300
3377
 
3301
- /** Emitido quando o usuário muda de página ou tamanho de página na grade paginada. */
3302
- interface DataGridPaginationChangeEvent {
3303
- /** Índice 0-based da página atual (API ag-Grid). */
3304
- currentPage: number;
3305
- newPage: boolean;
3306
- newPageSize: boolean;
3378
+ /** Espelho de {@code DeleteConfirmPageConfig}. */
3379
+ interface DeleteConfirmPageConfig {
3380
+ title: string;
3381
+ message: string;
3382
+ confirmLabel: string;
3307
3383
  }
3308
- declare class DataGridComponent<T = unknown> implements OnInit, OnChanges, OnDestroy {
3309
- private readonly ngZone;
3310
- private readonly cdr;
3311
- private readonly destroyRef;
3312
- private readonly hostRef;
3313
- private readonly gridLayoutService;
3314
- private gridApi;
3384
+ /** Espelho de {@code DuplicatePageConfig}. */
3385
+ interface DuplicatePageConfig {
3386
+ enabled: boolean;
3387
+ label: string;
3388
+ title: string;
3389
+ message: string;
3390
+ successMessage: string;
3391
+ }
3392
+ /** Espelho de {@code CadastroToolbarButtonDto}. */
3393
+ interface CadastroToolbarButtonDto {
3394
+ actionId: string;
3395
+ label: string;
3396
+ variant: string;
3397
+ iconClass: string;
3398
+ order: number;
3399
+ visibleOnEditOnly: boolean;
3400
+ disableWhileBusy: boolean;
3401
+ }
3402
+ /** Aba metadata-driven no cadastro (`[PageTab]` no servidor). */
3403
+ interface CadastroPageTabDto {
3404
+ key: string;
3405
+ label: string;
3406
+ icon: string;
3407
+ order: number;
3408
+ }
3409
+ /** Componente customizado por tag na página metadata-driven. */
3410
+ interface CadastroPageComponentDto {
3411
+ region: string;
3412
+ tag: string;
3413
+ order: number;
3414
+ inputs?: Readonly<Record<string, string>> | undefined;
3415
+ }
3416
+ /** Ação de rodapé/região na página metadata-driven. */
3417
+ interface CadastroPageActionDto {
3418
+ id: string;
3419
+ label: string;
3420
+ iconClass: string;
3421
+ variant: string;
3422
+ region: string;
3423
+ order: number;
3424
+ }
3425
+ /** Overlay de execução na página metadata-driven. */
3426
+ interface CadastroPageOverlayDto {
3427
+ tag: string;
3428
+ visibleExpression: string;
3429
+ inputs?: Readonly<Record<string, string>> | undefined;
3430
+ }
3431
+ interface CadastroFormPageLayout {
3432
+ containerLayoutSize: ContainerLayoutSize;
3433
+ fieldsPerRow: number;
3434
+ validationSummaryFlags: number;
3435
+ pageTitleNovo: string;
3436
+ pageSubtitle: string;
3437
+ pageTitleEditar: string;
3438
+ pageTitleConsulta: string;
3439
+ pageToastTitle: string;
3440
+ entityName: string;
3441
+ entityLabel: string;
3442
+ routeList: string;
3443
+ routeNew: string;
3444
+ routeEdit: string;
3445
+ serviceKey: string;
3446
+ formDraftEnabled: boolean;
3447
+ deleteConfirmConfig?: DeleteConfirmPageConfig | undefined;
3448
+ duplicateConfig?: DuplicatePageConfig | undefined;
3449
+ toolbarButtons?: readonly CadastroToolbarButtonDto[] | undefined;
3450
+ /** Abas opcionais na raiz do metadata; vazio ⇒ sem TabBar extra na UI. */
3451
+ pageTabs?: readonly CadastroPageTabDto[] | undefined;
3452
+ /** Componentes customizados por tag (`[PageComponent]`). */
3453
+ pageComponents?: readonly CadastroPageComponentDto[] | undefined;
3454
+ /** Ações de rodapé/região (`[PageAction]`). */
3455
+ pageActions?: readonly CadastroPageActionDto[] | undefined;
3456
+ /** Overlay opcional (`[PageOverlay]`). */
3457
+ pageOverlay?: CadastroPageOverlayDto | undefined;
3458
+ /** Espelha `[PageMetadata(NotFoundMessage = …)]`. */
3459
+ notFoundMessage?: string;
3460
+ /** Espelha `[PageMetadata(CreateSuccessMessage = …)]`. */
3461
+ createSuccessMessage?: string;
3462
+ /** Espelha `[PageMetadata(UpdateSuccessMessage = …)]`. */
3463
+ updateSuccessMessage?: string;
3464
+ /** Espelha `[PageMetadata(SaveSuccessMessage = …)]`. */
3465
+ saveSuccessMessage?: string;
3466
+ /** Espelha `[PageMetadata(DeleteSuccessMessage = …)]`. */
3467
+ deleteSuccessMessage?: string;
3468
+ /** Espelha `[PageMetadata(ShowNewButton = …)]`; omisso ⇒ mostra «Novo». */
3469
+ showNewButton?: boolean;
3470
+ /** Espelha `[PageMetadata(ShowSaveButton = …)]`; omisso ⇒ mostra «Salvar». */
3471
+ showSaveButton?: boolean;
3472
+ /** Espelha `[PageMetadata(ShowDeleteButton = …)]`; omisso ⇒ mostra «Excluir». */
3473
+ showDeleteButton?: boolean;
3474
+ /** Espelha `[PageMetadata(UseBackToTopButton = …)]`; omisso ⇒ mostra botão «Voltar ao topo». */
3475
+ useBackToTopButton?: boolean | null;
3476
+ /** Espelha `[PageMetadata(PreserveActiveTab = …)]`; omisso ⇒ não restaura aba ao voltar de RotaReferência. */
3477
+ preserveActiveTab?: boolean | null;
3315
3478
  /**
3316
- * Alinhar com `data-grid.host-theme.scss`: `--ag-grid-size: 7px`, cabeçalho e linha = ×8.
3317
- * Painel de paginação AG Grid: `--ag-pagination-panel-height` = `--ag-header-height`.
3479
+ * Page shell: `true` mantém todas as abas no DOM; omisso/`false` ⇒ lazy (só aba activa monta conteúdo).
3318
3480
  */
3319
- private static readonly FIT_HEADER_ROW_PX;
3320
- private static readonly FIT_PAGING_PX;
3321
- /** Bordas / arredondamentos entre root e viewport. */
3322
- private static readonly FIT_CHROME_FUDGE_PX;
3481
+ pageTabsKeepAlive?: boolean | null;
3482
+ /** Estados dinâmicos de ações por chave (ex.: `sites.create`). */
3483
+ actionStates?: Readonly<Record<string, CadastroActionStateDto$1>> | undefined;
3484
+ }
3485
+ /** Espelho de {@code CadastroActionStateDto}. */
3486
+ interface CadastroActionStateDto$1 {
3487
+ visible: boolean;
3488
+ enabled: boolean;
3489
+ tooltip: string;
3490
+ reason: string;
3491
+ }
3492
+ interface CadastroCampoValidacaoDto {
3493
+ key: string;
3494
+ label: string;
3495
+ fieldId: string;
3496
+ rules: string[];
3497
+ maxLength: number;
3498
+ }
3499
+ interface CadastroCampoReferenciaMetadataDto {
3500
+ entidade: string;
3501
+ serviceKey: string;
3502
+ origemInline: string;
3503
+ rotaNovo: string;
3504
+ rotaAlterar: string;
3505
+ permitirCriar: boolean;
3506
+ permitirAlterar: boolean;
3507
+ tooltipDica: string;
3508
+ labelAlterar: string;
3509
+ iconAlterar: string;
3510
+ hostPath: string;
3511
+ draftCacheKey: string;
3512
+ labelTargetField: string;
3513
+ documentTargetField: string;
3514
+ /** Omisso ou vazio + preset AUTO ⇒ pode usar {@link CadastroReferenceRegistryEntry.mapOptions} legado. */
3515
+ valueField: string;
3516
+ labelField: string;
3517
+ descriptionField: string;
3518
+ activeField: string;
3519
+ activeOnly: boolean;
3520
+ sortBy: string;
3521
+ sortAscending: boolean;
3522
+ optionPreset: ReferenceOptionPreset;
3523
+ /** Omisso ou `0` ⇒ search-select / grelha usam 15. */
3524
+ pageSize?: number | undefined;
3525
+ /** Teto de pageSize em busca remota; omisso ⇒ 50. */
3526
+ maxPageSize?: number | undefined;
3527
+ /** Lista paginada no servidor (SearchSelect grande). */
3528
+ paginated?: boolean | undefined;
3529
+ /** Busca com filtro no servidor. */
3530
+ serverSideSearch?: boolean | undefined;
3531
+ /** Colunas para OR na busca (ex.: `nome,uf,localizacao_texto`). */
3532
+ searchFields?: string | undefined;
3533
+ /** Perfil de busca no servidor (0=padrão, 1=município BR). */
3534
+ buscaPerfil?: number | undefined;
3323
3535
  /**
3324
- * Altura aproximada de uma linha do skeleton (padding + bloco) usada para encher o overlay do viewport;
3325
- * ligeiramente inferior à linha real do AG Grid (56px) para caberem mais barras e tapar o fundo.
3536
+ * Campo do DTO devolvido pelo cadastro filho para repor o valor do controlo (inline).
3537
+ * Omisso `valueField` (por defeito `id`).
3326
3538
  */
3327
- private static readonly SKELETON_ROW_APPROX_PX;
3328
- private paginationChangedListener?;
3329
- /** Evita `setGridOption('rowData')` quando só muda a referência do array (mesmo conteúdo). */
3330
- private lastRowDataFingerprint;
3331
- rows: T[];
3332
- columns: DataGridColumn<T>[];
3333
- pageSize: number;
3334
- loading: boolean;
3539
+ campoRetornoValor?: string | undefined;
3540
+ /** Texto base quando não há `formatoRetornoTexto`; omisso ⇒ `labelField` (`nome`). */
3541
+ campoRetornoTexto?: string | undefined;
3542
+ /** Rótulo com `{campo}` sobre o registo devolvido; omisso ⇒ sem formato. */
3543
+ formatoRetornoTexto?: string | null | undefined;
3544
+ /** Omisso ⇒ {@link CadastroReferenciaOpenMode.TELA}. */
3545
+ openMode?: CadastroReferenciaOpenMode | undefined;
3546
+ /** Chave RBAC para visualizar/navegar; omisso ⇒ política do host por rota. */
3547
+ permissaoVisualizar?: string | undefined;
3548
+ /** Chave RBAC para o atalho «+»; omisso ⇒ política do host por rota. */
3549
+ permissaoCriar?: string | undefined;
3550
+ /** Chave RBAC para o atalho «Alterar»; omisso ⇒ política do host por rota. */
3551
+ permissaoEditar?: string | undefined;
3552
+ /** Chaves RBAC para visualizar/navegar (lista). */
3553
+ permissoesVisualizar?: readonly string[] | undefined;
3554
+ /** Chaves RBAC para o atalho «+» (lista). */
3555
+ permissoesCriar?: readonly string[] | undefined;
3556
+ /** Chaves RBAC para o atalho «Alterar» (lista). */
3557
+ permissoesEditar?: readonly string[] | undefined;
3558
+ /** Como validar listas de permissões (`All` default). */
3559
+ modoPermissao?: 'All' | 'Any' | undefined;
3560
+ /** Chave fixa de ação para o atalho «+» (ex.: `sites.create`). */
3561
+ actionKeyCreate?: string | undefined;
3562
+ /** Chave fixa de ação para «Alterar» (ex.: `sites.edit`). */
3563
+ actionKeyEdit?: string | undefined;
3564
+ /** Chave fixa de ação para visualizar/abrir (ex.: `sites.view`). */
3565
+ actionKeyView?: string | undefined;
3566
+ }
3567
+ interface CadastroCampoSelectOptionDto {
3568
+ value: string;
3569
+ label: string;
3570
+ description: string;
3571
+ }
3572
+ interface CadastroCampoMetadataDto {
3573
+ key: string;
3574
+ label: string;
3575
+ fieldId: string;
3576
+ rules: string[];
3577
+ maxLength: number;
3578
+ componentType: ComponentType;
3579
+ ordem: number;
3580
+ placeholder: string;
3581
+ width: string;
3582
+ hidden: boolean;
3583
+ readOnly: boolean;
3584
+ requiredMark: boolean;
3585
+ dense: boolean;
3586
+ autoFocus: boolean;
3587
+ hint: string;
3588
+ visibleOnCreate: boolean;
3589
+ visibleOnEdit: boolean;
3590
+ defaultValue: string;
3591
+ prefixIcon: string;
3592
+ suffixIcon: string;
3593
+ flex: number;
3594
+ clearable: boolean;
3595
+ referencia?: CadastroCampoReferenciaMetadataDto | undefined;
3596
+ enumOptionsKey: string;
3597
+ errosMsg: string;
3598
+ mostrarErrorMsg?: boolean | undefined;
3335
3599
  /**
3336
- * Após remontar a grade (ex.: skeleton), volta a esta página (0-based).
3337
- * Só aplicado em `gridReady` e quando o valor muda com a API já disponível.
3338
- */
3339
- initialPaginationPage: number;
3340
- height: string | null;
3341
- /**
3342
- * Ignora `height` e define altura para cabeçalho + `pageSize` linhas + barra de paginação.
3343
- * Actualiza quando o utilizador muda o tamanho de página no próprio grid (via API).
3344
- */
3345
- fitPaginationHeight: boolean;
3346
- /**
3347
- * Com {@link fitPaginationHeight} e lista vazia: altura mínima em linhas de corpo (empty state).
3348
- * Por omissão `1`; no diálogo de filtros use ~5 para alinhar ao `pageSize`.
3349
- */
3350
- fitPaginationMinEmptyRows: number;
3351
- emptyMessage: string;
3352
- pagination: boolean;
3353
- /**
3354
- * `top`: inverte o layout interno do AG Grid para o painel `.ag-paging-panel` aparecer **acima** do corpo
3355
- * (vista em cartão / mobile alinhada à consulta).
3356
- */
3357
- paginationPanelPlacement: 'bottom' | 'top';
3358
- /**
3359
- * Mostra só o painel de paginação nativo (corpo/cabeçalho ocultos). Útil com uma segunda grelha em cartão.
3360
- */
3361
- paginationStripOnly: boolean;
3362
- /** Coleções remotas: esconde o selector de tamanho de página (o tamanho vem da metadata/servidor). */
3363
- suppressPaginationPageSizeSelector: boolean;
3364
- /** Se `false`, omite colunas com `type: 'actions'` (editar/remover). Por omissão `true`. */
3365
- showActionsColumn: boolean;
3366
- /** Se `false`, a coluna de ações não mostra «Alterar». Por omissão `true`. */
3367
- showEditAction: boolean;
3368
- /** Tooltip e aria-label do botão de edição na coluna Ações. Omisso ⇒ «Alterar». */
3369
- editActionLabel: string;
3370
- /** Ícone Font Awesome do botão editar (ex.: `fa-paper-plane`). Omisso ⇒ `fa-pen-to-square`. */
3371
- editActionIconClass: string;
3372
- /** Se `false`, a coluna de ações não mostra «Remover». Por omissão `true`. */
3373
- showRemoveAction: boolean;
3374
- /** Se `true`, mostra «Duplicar» na coluna de ações (requer handler no contexto). */
3375
- showDuplicateAction: boolean;
3376
- /** Se `true`, mostra «Imprimir» na coluna de ações (requer handler no contexto). */
3377
- showPrintAction: boolean;
3378
- /** Tooltip e aria-label do botão imprimir na coluna Ações. Omisso ⇒ «Imprimir». */
3379
- printActionLabel: string;
3380
- /**
3381
- * 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).
3600
+ * `MIDIA_UPLOAD` / bulk na coleção: omisso `true` (painel de pré-visualização).
3601
+ * `false` lista ocupa a largura com scroll.
3382
3602
  */
3383
- suppressRowClick: boolean;
3603
+ mostrarPreview?: boolean | undefined;
3604
+ sectionKey: string;
3605
+ sectionTitle: string;
3606
+ sectionSubtitle: string;
3607
+ sectionCollapsible: boolean;
3608
+ sectionInitiallyCollapsed: boolean;
3609
+ /** Omisso no wire ⇒ automático no cliente quando `sectionCollapsible`. */
3610
+ sectionPersistExpandedState?: boolean | undefined;
3611
+ sectionReadOnly: boolean;
3612
+ sectionPanelLayout: CadastroSectionPanelLayout;
3384
3613
  /**
3385
- * Quando `true`, activa edição inline de células (`editable` + clique único) e permite foco nas células.
3386
- * Omisso `false` grelhas de consulta mantêm foco suprimido.
3614
+ * Colunas por linha na UI (grelha metadata).
3615
+ * Em campos normais espelha `[Container(FieldsPerRow = …)]`.
3616
+ * Em `componentType === COLLECTION`, espelha `[FormCollection(FieldsPerRow = …)]` na **capa** (editor acima da lista); **não** afecta colunas da grelha de linhas.
3387
3617
  */
3388
- inlineCellEditing: boolean;
3618
+ sectionFieldsPerRow: number;
3389
3619
  /**
3390
- * Destaca a linha cuja propriedade {@link highlightMatchField} coincide com este valor (ex.: índice no FormArray).
3391
- * Omisso ou `null`: sem destaque.
3620
+ * `[Container]` aninhado: chave do grupo pai (ex.: `aparencia`).
3621
+ * O cliente monta `subsecoes` no pai e aplica `sectionParent*` no chrome exterior.
3392
3622
  */
3393
- highlightedRowMatch: number | null;
3394
- /** Campo em {@link rows} a comparar com {@link highlightedRowMatch}. Omisso: `__rowArrayIndex`. */
3395
- highlightMatchField: string;
3623
+ sectionParentKey?: string | undefined;
3624
+ sectionParentTitle?: string | undefined;
3625
+ sectionParentCollapsible?: boolean | undefined;
3626
+ sectionParentInitiallyCollapsed?: boolean | undefined;
3627
+ sectionParentPanelLayout?: CadastroSectionPanelLayout | undefined;
3628
+ /** Opções enviadas pelo servidor (ex.: enum); omisso ⇒ {@link enumOptionsKey} no registry legado. */
3629
+ selectOptions: readonly CadastroCampoSelectOptionDto[];
3630
+ /** Coleção 1:N (`componentType === COLLECTION`). */
3631
+ description?: string | undefined;
3632
+ addButtonLabel?: string | undefined;
3633
+ /** Texto do botão ao editar linha seleccionada; vazio ⇒ só ícone (`alterar_button_label` no wire). */
3634
+ alterarButtonLabel?: string | undefined;
3635
+ removeButtonLabel?: string | undefined;
3636
+ minItems?: number | undefined;
3637
+ maxItems?: number | undefined;
3638
+ reorderable?: boolean | undefined;
3639
+ collectionLayout?: FormCollectionLayout | undefined;
3640
+ /** `[FormCollection(Layout = …)]` — igual ao painel de `[Container]`; só para `COLLECTION`. Omisso ⇒ cartão; só `PLAIN` é superfície sem contorno. */
3641
+ collectionPanelLayout?: CadastroSectionPanelLayout | undefined;
3642
+ itemFields?: readonly CadastroCampoMetadataDto[] | undefined;
3396
3643
  /**
3397
- * Chave da tela para persistência de layout (tenant + tela + grid).
3398
- * Omisso: não persiste nem restaura colunas.
3644
+ * Linha de coleção: integrar na grelha quando `true`, após o servidor enviar modo explícito (`[GridColumn]`).
3645
+ * Omisso todas as propriedades visíveis da linha entram na grelha (legado).
3399
3646
  */
3400
- layoutTelaKey: string | null;
3401
- /** Chave do grid na mesma tela. Omisso: `consulta-principal`. */
3402
- layoutGridKey: string;
3403
- private isApplyingSavedLayout;
3404
- private savedLayoutApplied;
3405
- private layoutUserChangeSaveEnabled;
3406
- /** Impressão digital do columnState já aplicado nesta instância (evita re-apply idêntico). */
3407
- private appliedLayoutFingerprint;
3408
- /** Estado em cache lido de forma síncrona antes do gridReady. */
3409
- private pendingSavedColumnState;
3410
- private layoutApplyRetryTimer;
3411
- private layoutApplyRetryAttempts;
3412
- private layoutCacheUpdatedUnsub;
3413
- /** Detecta transição bootstrap (só «Ações») → colunas de dados do metadata (F5). */
3414
- private lastKnownDataColumnCount;
3647
+ collectionItemGridColumn?: boolean | undefined;
3648
+ /** Cabeçalho na grelha; omisso usa {@link label}. */
3649
+ collectionGridHeader?: string | undefined;
3650
+ collectionGridColumnFormat?: CadastroCollectionGridColumnFormat | undefined;
3651
+ collectionGridWidthPx?: number | undefined;
3415
3652
  /**
3416
- * Oculta a faixa horizontal do AG Grid durante reflow/remount (cache de rota / revisit de consulta).
3417
- * O skeleton na 1.ª carga tapa o viewport; aqui evita flash quando há linhas visíveis.
3653
+ * `[GridColumn(ReadOnly = …)]` na linha: `true` (por defeito no servidor) célula leitura na grelha.
3654
+ * Omisso o cliente não aplica trava extra (só `readOnly` do `FormField`).
3418
3655
  */
3419
- suppressHorizontalScrollFlicker: boolean;
3420
- private layoutStabilizeTimer;
3421
- private layoutStabilizeRaf;
3422
- constructor();
3423
- readonly edit: EventEmitter<T>;
3424
- readonly duplicate: EventEmitter<T>;
3425
- readonly print: EventEmitter<T>;
3426
- readonly remove: EventEmitter<T>;
3427
- /** Clique na linha de dados (útil para selecção fora da coluna de acções). */
3428
- readonly rowClick: EventEmitter<T>;
3429
- /** Reservado para evolução (seleção de linhas); não ligado na v1 para manter a UI minimal. */
3430
- readonly selectionChange: EventEmitter<T[]>;
3431
- /** Paginação interna do ag-Grid: mudança de página ou de `pageSize`. */
3432
- readonly paginationChanged: EventEmitter<DataGridPaginationChangeEvent>;
3433
- readonly frameworkComponents: {
3434
- dataGridActions: typeof DataGridActionsCellRendererComponent;
3435
- dataGridBoolean: typeof DataGridBooleanCellRendererComponent;
3436
- dataGridMidiaPreview: typeof DataGridMidiaPreviewCellRendererComponent;
3437
- };
3438
- /** Localização pt-BR do chrome do AG Grid (paginação e rótulos associados). */
3439
- readonly localeText: {
3440
- readonly pageSizeSelectorLabel: "Páginas:";
3441
- readonly ariaPageSizeSelectorLabel: "Páginas";
3442
- readonly page: "Página";
3443
- readonly of: "de";
3444
- readonly to: "a";
3445
- readonly firstPage: "Primeira página";
3446
- readonly previousPage: "Página anterior";
3447
- readonly nextPage: "Próxima página";
3448
- readonly lastPage: "Última página";
3449
- readonly pageLastRowUnknown: "?";
3450
- readonly more: "mais";
3451
- };
3452
- readonly paginationPageSizeChoices: number[];
3656
+ collectionGridReadOnly?: boolean | undefined;
3453
3657
  /**
3454
- * O AG Grid avisa se `paginationPageSize` não está em `paginationPageSizeSelector`.
3455
- * Junta `pageSize` às opções base quando o consumidor usa um valor fora da lista (ex.: 8).
3658
+ * `[GridColumn(ComponentType = …)]` tipo de controlo na grelha da coleção.
3659
+ * `UNSPECIFIED` / omisso usa-se `componentType` do `[FormField]`.
3456
3660
  */
3457
- get effectivePaginationPageSizeSelector(): number[];
3458
- /** Repasse ao `ag-grid-angular`: `false` omite o selector (documentação AG Grid). */
3459
- get paginationPageSizeSelectorInput(): number[] | boolean;
3661
+ collectionGridComponentType?: ComponentType | undefined;
3662
+ /** `[ValidationSummary]` na classe do elemento da coleção espelho de `collection_item_validation_summary_flags`. */
3663
+ collectionItemValidationSummaryFlags?: number | undefined;
3664
+ /** Mensagem no resumo quando a lista não atinge `min_items`; omisso ⇒ «A lista não pode ser vazia». */
3665
+ collectionMinItemsMessage?: string | undefined;
3460
3666
  /**
3461
- * Skeleton na carga inicial (lista vazia). Refresh com linhas visíveis mantém a grelha — evita flash com cache.
3667
+ * Omisso ou `true`: decimal com prefixo monetário na UI (ex. `R$`).
3668
+ * `false`: formato decimal sem prefixo — ex. quantidade (`[FormField(Monetary = false)]` no servidor).
3462
3669
  */
3463
- get showViewportSkeleton(): boolean;
3670
+ monetary?: boolean | undefined;
3671
+ /** `SCRIPT_EDITOR`: altura mínima do painel (ex.: `220px`). */
3672
+ scriptEditorMinHeight?: string | undefined;
3673
+ /** `SCRIPT_EDITOR`: linguagem do painel (ex.: `bash`). */
3674
+ scriptEditorLanguage?: string | undefined;
3675
+ /** `[FormCollection(Pageable = …)]` — paginação server-side no cadastro. */
3676
+ pageable?: boolean | undefined;
3677
+ pageSize?: number | undefined;
3678
+ maxPageSize?: number | undefined;
3464
3679
  /**
3465
- * Lista vazia em loading: skeleton tabular completo (cabeçalhos genéricos vazios) sem montar AG Grid.
3466
- * Evita flash de «Ações» quando colunas de metadata chegam antes dos dados da lista.
3680
+ * Chave do campo na linha (`item_fields.key`, ex.: `produtoId`) para foco ao clicar no resumo quando o erro
3681
+ * é lista vazia / `min_items`. Omisso primeiro `item_field` por `ordem`.
3467
3682
  */
3468
- get showFullPlaceholderSkeleton(): boolean;
3469
- /** AG Grid após colunas de dados e fim do loading inicial (lista vazia). */
3470
- get shouldRenderAgGrid(): boolean;
3471
- /** Cabeçalhos genéricos alinhados ao {@link ConsultaPageLoadingSkeletonComponent}. */
3472
- readonly placeholderSkeletonHeaders: readonly string[];
3473
- /** Só esvazia `rowData` durante loading quando ainda não há linhas a mostrar. */
3474
- private get clearRowDataWhileLoading();
3683
+ invalidSummaryInputFocus?: string | undefined;
3684
+ /** `[FileUpload]` na propriedade da coleção `MULTIPLE` activa zona de vários ficheiros + pré-visualização. */
3685
+ collectionFileUploadType?: FileUploadType | undefined;
3686
+ /** Com `MULTIPLE`: máximo por selecção (`[FileUpload(MaxItems)]`); `0` ⇒ cliente assume 5. */
3687
+ collectionFileUploadMaxFiles?: number | undefined;
3475
3688
  /**
3476
- * Empty state **fora** do AG Grid: o overlay nativo falha na 1.ª carga (skeleton + `suppressNoRowsOverlay` / v35).
3689
+ * `[FormCollection(MostrarAcaoEditar = …)]` botão alterar na coluna Ações da grelha.
3690
+ * Omisso / `undefined` ⇒ `true` (mostrar).
3477
3691
  */
3478
- get showManualEmptyState(): boolean;
3692
+ collectionMostrarAcaoEditar?: boolean | undefined;
3479
3693
  /**
3480
- * Colunas do skeleton alinhadas à grelha real (incl. filtro `showActionsColumn`).
3481
- * Evita o mínimo artificial de `2` com `columns` vazio no primeiro paint isso parecia lista em cartão (card list).
3694
+ * `[FormCollection(MostrarAcaoRemover = …)]` botão remover na coluna Ações.
3695
+ * Omisso / `undefined` `true` (mostrar).
3482
3696
  */
3483
- get skeletonColumnCount(): number;
3484
- get skeletonRowCount(): number;
3485
- /** Área entre cabeçalho da grelha e barra de paginação (overlay do skeleton), em px quando {@link hostHeight} é valor `NNpx`. */
3486
- private estimateSkeletonViewportBodyPx;
3487
- /** Desactiva animação de reordenação enquanto o layout persistido não foi aplicado. */
3488
- get suppressColumnMoveAnimation(): boolean;
3489
- readonly defaultColDef: ColDef<T>;
3697
+ collectionMostrarAcaoRemover?: boolean | undefined;
3490
3698
  /**
3491
- * O AG Grid corre muitos callbacks fora da `NgZone`; sem `run()`, o pai com `OnPush`
3492
- * não volta a renderizar e editar/remover parece “morto”.
3699
+ * `[FormCollection(ConfirmDialogOnRemove = …)]` confirmação antes de remover linha na grelha/cartões.
3700
+ * Omisso / `undefined` `true` (pedir confirmação).
3493
3701
  */
3494
- private buildActionsContext;
3495
- /** Expõe o contexto para `[context]` no template do `ag-grid-angular`. */
3496
- get actionsContext(): DataGridActionsContext<T>;
3497
- agColumnDefs: ColDef<T>[];
3498
- ngOnInit(): void;
3702
+ collectionConfirmDialogOnRemove?: boolean | undefined;
3499
3703
  /**
3500
- * IDs estáveis por linha (evita `''` duplicado quando não existe `id` nos dados).
3501
- * Tenta `id`, depois `sku` (comum em grades de produto), senão impressão digital do objeto.
3704
+ * Chave da aba (`CadastroPageTabDto.key`) quando o campo pertence a um bloco `[PageTab]` na raiz;
3705
+ * vazio capa (fora de abas).
3502
3706
  */
3503
- readonly getRowId: (params: GetRowIdParams<T>) => string;
3504
- /** Conteúdo efectivo de `rowData` (evita refresh quando só muda a referência do array). */
3505
- private computeRowDataFingerprint;
3506
- /** Identificador determinístico e curto para linhas sem chave explícita. */
3507
- private stableRowFingerprint;
3508
- ngOnChanges(changes: SimpleChanges): void;
3509
- ngOnDestroy(): void;
3510
- get hostHeight(): string;
3511
- onGridReady(ev: GridReadyEvent<T>): void;
3512
- private onGridReadyApplyLayoutThenData;
3513
- onLayoutColumnMoved(ev: ColumnMovedEvent<T>): void;
3514
- onLayoutColumnResized(ev: ColumnResizedEvent<T>): void;
3515
- onLayoutColumnVisible(_ev: ColumnVisibleEvent<T>): void;
3516
- onLayoutColumnPinned(_ev: ColumnPinnedEvent<T>): void;
3517
- private hydrateLayoutFromCacheSync;
3518
- /** Dispara GET em background na 1.ª visita para aquecer cache antes do gridReady. */
3519
- private prefetchLayoutIfNeeded;
3520
- private onExternalLayoutCacheUpdated;
3521
- private tryApplySavedLayout;
3522
- private countDataColumns;
3523
- private shouldKeepTryingLayoutApply;
3524
- /** Só activa gravação automática quando colunas de dados existem (evita sobrescrever layout no F5). */
3525
- private canEnableLayoutSaveGrace;
3526
- private cancelLayoutApplyRetry;
3527
- private scheduleLayoutApplyRetry;
3528
- private applySavedLayoutBeforeFirstPaint;
3529
- /** Dois frames após `agColumnDefs` mudar — AG Grid precisa materializar colunas antes de `applyColumnState`. */
3530
- private yieldForGridColumnDefsSync;
3531
- /** Colunas de dados existem no input e já estão materializadas na API do AG Grid. */
3532
- private gridReadyForLayoutApply;
3533
- private verifyLayoutStateApplied;
3534
- private applyColumnStateToGrid;
3535
- private enableLayoutSaveAfterGrace;
3536
- private persistColumnLayoutIfAllowed;
3537
- onRowClicked(ev: RowClickedEvent<T>): void;
3538
- private rowClassForHighlight;
3539
- private applyRowHighlightClass;
3540
- private applyInitialPaginationPage;
3541
- /** Evita `removeEventListener` na API depois do grid destruído. */
3542
- private detachPaginationListenerIfLive;
3543
- private setupHorizontalScrollStabilizingObservers;
3544
- private beginHorizontalScrollStabilizing;
3545
- private scheduleEndHorizontalScrollStabilizing;
3546
- private tryFinishHorizontalScrollStabilizing;
3547
- /**
3548
- * `true` se o viewport central transborda; `false` se não; `null` se ainda não mensurável (largura 0).
3549
- */
3550
- private centerViewportNeedsHorizontalScroll;
3551
- private clearLayoutStabilizingTimers;
3552
- private columnsForGrid;
3553
- /** Classes BEM em `data-grid.host-theme.scss` para alinhamento declarativo nas colunas. */
3554
- private static alignmentCellHeaderClasses;
3555
- /**
3556
- * Colunas `boolean` com `onBooleanChange` (checkbox na célula).
3557
- * Reutilizado para {@link suppressCellFocusBinding}.
3558
- */
3559
- private columnsHaveInteractiveBoolean;
3560
- /**
3561
- * Com `suppressCellFocus` activo, o AG Grid pode impedir cliques em checkboxes custom (`type: 'boolean'`).
3562
- * Desactiva o supresso quando há colunas boolean com `onBooleanChange` ou quando a edição inline está ligada.
3563
- */
3564
- get suppressCellFocusBinding(): boolean;
3565
- private mapColumnsToColDef;
3566
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataGridComponent<any>, never>;
3567
- 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>;
3568
- static ngAcceptInputType_initialPaginationPage: unknown;
3569
- static ngAcceptInputType_fitPaginationHeight: unknown;
3570
- static ngAcceptInputType_fitPaginationMinEmptyRows: unknown;
3571
- static ngAcceptInputType_paginationStripOnly: unknown;
3572
- static ngAcceptInputType_suppressPaginationPageSizeSelector: unknown;
3573
- static ngAcceptInputType_showEditAction: unknown;
3574
- static ngAcceptInputType_showRemoveAction: unknown;
3575
- static ngAcceptInputType_showDuplicateAction: unknown;
3576
- static ngAcceptInputType_showPrintAction: unknown;
3577
- static ngAcceptInputType_suppressRowClick: unknown;
3578
- static ngAcceptInputType_inlineCellEditing: unknown;
3707
+ pageTabKey?: string | undefined;
3579
3708
  }
3580
-
3581
- /** Barra de consulta: pesquisa, filtros, ações e contador (slots `toolbar-start` / `toolbar-end`). */
3582
- declare class DataToolbarComponent {
3583
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataToolbarComponent, never>;
3584
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataToolbarComponent, "app-data-toolbar", never, {}, {}, never, ["[toolbar-start]", "[toolbar-end]"], true, never>;
3709
+ /** Espelho de {@code CadastroCollectionStateDto} no init cadastro. */
3710
+ interface CadastroCollectionStateDto {
3711
+ key: string;
3712
+ pagina: number;
3713
+ tamanhoPagina: number;
3714
+ total: number;
3715
+ }
3716
+ /** Contrato genérico para RPC de página de coleção (payload espelha proto). */
3717
+ interface CadastroCollectionPageRequestWire {
3718
+ entityId: string;
3719
+ collectionKey: string;
3720
+ pagina: number;
3721
+ tamanhoPagina: number;
3722
+ ordenarCampo: string;
3723
+ ordenarDesc: boolean;
3724
+ }
3725
+ interface CadastroCollectionPageReplyWire {
3726
+ collectionKey: string;
3727
+ pagina: number;
3728
+ tamanhoPagina: number;
3729
+ total: number;
3730
+ /** Array JSON de linhas (`PedidoItemDto`, …). */
3731
+ itensJson: string;
3732
+ }
3733
+ /** Estado UI para rodapé de paginação da {@link FormCollectionComponent}. */
3734
+ interface CadastroCollectionPagingUi {
3735
+ pagina: number;
3736
+ tamanhoPagina: number;
3737
+ total: number;
3738
+ loading: boolean;
3739
+ erro?: string | null | undefined;
3740
+ }
3741
+ interface CadastroDeclarativeSnapshotDto {
3742
+ camposMetadata: CadastroCampoMetadataDto[];
3743
+ camposValidacao: CadastroCampoValidacaoDto[];
3585
3744
  }
3745
+ /** Entrada para merge (`fromPartial`): `referencia` pode vir incompleta como no metadata JSON. */
3746
+ type CadastroCampoMetadataMergeInput = Omit<Partial<CadastroCampoMetadataDto>, 'referencia'> & {
3747
+ referencia?: Partial<CadastroCampoReferenciaMetadataDto> | null;
3748
+ };
3586
3749
 
3587
- /** Campo extra no cartão (renderização rica). */
3588
- interface CardItemBooleanField {
3589
- type: 'boolean';
3590
- /** Chave do campo na linha da coleção (ex.: `principal`). */
3591
- fieldKey: string;
3592
- label: string;
3593
- checked: boolean;
3594
- /** Quando `true`, exibe checkbox desabilitado (ex.: coleção só-leitura). */
3595
- readOnly?: boolean;
3750
+ /** Espelho de {@code CadastroActionStateDto}. */
3751
+ type CadastroActionStateDto = {
3752
+ readonly visible: boolean;
3753
+ readonly enabled: boolean;
3754
+ readonly tooltip: string;
3755
+ readonly reason: string;
3756
+ };
3757
+
3758
+ /** Autorização de rotas de cadastro referenciado (implementação no app host — ex.: menu + permissões). */
3759
+ interface CadastroReferenciaRouteAccess {
3760
+ /** Pode aceder à entidade referenciada (lista / cadastro em leitura). */
3761
+ podeVisualizarRota(rota: string, chavePermissao?: string): boolean;
3762
+ /** Pode abrir «novo» / cadastro inline de criação. */
3763
+ podeCriarRota(rotaNovo: string, chavePermissao?: string): boolean;
3764
+ /** Pode abrir cadastro de edição (`:id`). */
3765
+ podeEditarRota(rotaAlterar: string, chavePermissao?: string): boolean;
3596
3766
  }
3597
- type CardItemMetaField = CardItemBooleanField;
3598
- /** Vista mapeada por item para {@link CardListComponent}. */
3599
- interface CardItemView {
3600
- title: string;
3601
- subtitle?: string;
3602
- /** Texto curto para o avatar (ex.: iniciais). */
3603
- avatarText?: string;
3604
- /** URL da miniatura (campo de mídia / imagem na coleção só-leitura). */
3605
- imageUrl?: string;
3606
- /** Campos booleanos e outros metadados (ex.: «Principal» com checkbox). */
3607
- metaFields?: readonly CardItemMetaField[];
3767
+ /** Comportamento legado quando o host não registra política (lib demo / testes). */
3768
+ declare const CADASTRO_REFERENCIA_ROUTE_ACCESS_PERMISSIVE: CadastroReferenciaRouteAccess;
3769
+ declare const CADASTRO_REFERENCIA_ROUTE_ACCESS: InjectionToken<CadastroReferenciaRouteAccess>;
3770
+ type ModoPermissaoReferencia = 'All' | 'Any';
3771
+ declare function normalizarRotaReferencia(rota: string): string;
3772
+ declare function rotaListaReferencia(rota: string): string;
3773
+ type CadastroReferenciaAcoesPermitidas = {
3774
+ readonly permitirCriar: boolean;
3775
+ readonly permitirAlterar: boolean;
3776
+ readonly criarDesabilitado?: boolean;
3777
+ readonly alterarDesabilitado?: boolean;
3778
+ readonly criarTooltipBloqueio?: string;
3779
+ readonly alterarTooltipBloqueio?: string;
3780
+ };
3781
+ type CadastroReferenciaPermissoesMetadata = {
3782
+ readonly permissaoVisualizar?: string;
3783
+ readonly permissaoCriar?: string;
3784
+ readonly permissaoEditar?: string;
3785
+ readonly permissoesVisualizar?: readonly string[];
3786
+ readonly permissoesCriar?: readonly string[];
3787
+ readonly permissoesEditar?: readonly string[];
3788
+ readonly modoPermissao?: ModoPermissaoReferencia;
3789
+ };
3790
+ declare function modoPermissaoReferenciaFromWire(raw: unknown): ModoPermissaoReferencia;
3791
+ /** Extrai chaves RBAC declaradas na metadata de referência (snake_case ou camelCase). */
3792
+ declare function permissoesReferenciaMetadata(ref?: Partial<{
3793
+ permissaoVisualizar?: string;
3794
+ permissaoCriar?: string;
3795
+ permissaoEditar?: string;
3796
+ permissao_visualizar?: string;
3797
+ permissao_criar?: string;
3798
+ permissao_editar?: string;
3799
+ permissoesVisualizar?: readonly string[];
3800
+ permissoesCriar?: readonly string[];
3801
+ permissoesEditar?: readonly string[];
3802
+ permissoes_visualizar?: readonly string[];
3803
+ permissoes_criar?: readonly string[];
3804
+ permissoes_editar?: readonly string[];
3805
+ modoPermissao?: ModoPermissaoReferencia | string;
3806
+ modo_permissao?: ModoPermissaoReferencia | string | number;
3807
+ }> | null): CadastroReferenciaPermissoesMetadata;
3808
+ /** Aplica metadata + política de rotas do host aos atalhos (+ / …) da referência. */
3809
+ declare function resolverAcoesReferenciaPorRota(access: CadastroReferenciaRouteAccess, params: {
3810
+ readonly rotaNovo?: string;
3811
+ readonly rotaAlterar?: string;
3812
+ readonly metadataPermitirCriar?: boolean;
3813
+ readonly metadataPermitirAlterar?: boolean;
3814
+ readonly permissaoVisualizar?: string;
3815
+ readonly permissaoCriar?: string;
3816
+ readonly permissaoEditar?: string;
3817
+ readonly permissoesVisualizar?: readonly string[];
3818
+ readonly permissoesCriar?: readonly string[];
3819
+ readonly permissoesEditar?: readonly string[];
3820
+ readonly modoPermissao?: ModoPermissaoReferencia;
3821
+ readonly actionKeyCreate?: string;
3822
+ readonly actionKeyEdit?: string;
3823
+ readonly actionKeyView?: string;
3824
+ readonly actionStates?: ReadonlyMap<string, CadastroActionStateDto>;
3825
+ }): CadastroReferenciaAcoesPermitidas;
3826
+
3827
+ /** Configuração de navegação numa coluna da grade (metadata gRPC / {@link DataGridColumnNavigateConfig}). */
3828
+ interface GridNavigateConfig {
3829
+ route: string;
3830
+ idProperty: string;
3831
+ tooltip?: string;
3832
+ icon?: string;
3833
+ openMode?: CadastroReferenciaOpenMode;
3834
+ permission?: string;
3835
+ hideWhenNull?: boolean;
3836
+ queryParamName?: string;
3837
+ routeParamName?: string;
3838
+ preserveNavigationState?: boolean;
3839
+ }
3840
+ /** Contexto opcional para preservar scroll/sessão da consulta antes de navegar. */
3841
+ interface GridNavigatePreserveContext {
3842
+ chaveConsulta?: string;
3843
+ /** URL da consulta de origem (omisso ⇒ `router.url` em {@link navigateFromGrid}). */
3844
+ returnUrl?: string;
3845
+ navVoltarSemRecarregarKey?: string;
3846
+ flushScroll?: () => void;
3608
3847
  }
3609
- type CardListMapFn<T> = (item: T) => CardItemView;
3848
+ declare function markConsultaPendingGridReturn(chaveConsulta: string, opts?: {
3849
+ navVoltarSemRecarregarKey?: string;
3850
+ returnUrl?: string;
3851
+ }): void;
3852
+ /** Chave `history.state` para repor snapshot ao voltar da grelha (consumida uma vez). */
3853
+ declare function consumeGridReturnVoltarKeyForUrl(returnUrl: string): string | null;
3854
+ declare function consumeConsultaPendingGridReturn(chaveConsulta: string): boolean;
3855
+ /** Substitui `{param}` ou `:param` na rota pelo identificador. */
3856
+ declare function buildGridNavigateUrl(navigate: GridNavigateConfig, entityId: string): {
3857
+ url: string;
3858
+ queryParams?: Record<string, string>;
3859
+ };
3860
+ declare function gridNavigateIconClass(icon?: string): string;
3861
+ declare function podeNavegarGridColuna(navigate: GridNavigateConfig, row: Record<string, unknown>, routeAccess?: CadastroReferenciaRouteAccess): boolean;
3862
+ /**
3863
+ * Navega da célula da grade para o cadastro relacionado.
3864
+ * Usa o padrão UID `{route}/{id}` ou query param conforme metadata.
3865
+ */
3866
+ declare function navigateFromGrid(router: Pick<Router, 'navigate' | 'navigateByUrl' | 'url'>, row: Record<string, unknown>, navigate: GridNavigateConfig, opts?: {
3867
+ routeAccess?: CadastroReferenciaRouteAccess;
3868
+ preserve?: GridNavigatePreserveContext;
3869
+ }): void;
3610
3870
 
3871
+ /** Opção enum para {@link DataGridColumn.enumOptions}. */
3872
+ type DataGridEnumOption = {
3873
+ value: string;
3874
+ label: string;
3875
+ };
3876
+ /** Configuração de navegação numa coluna (metadata `[GridNavigate]`). */
3877
+ type DataGridColumnNavigateConfig = GridNavigateConfig;
3611
3878
  /**
3612
- * - **memory**: `items` tem a lista completa (ex.: 500 em memória); se mostram
3613
- * `scrollBatchSize` de cada vez até o usuário fazer scroll (fatia local).
3614
- * - **remote**: `items` são só as linhas já devolvidas pela API; ao fim do scroll
3615
- * emite `loadMore` para pedir a próxima página (SQL OFFSET/FETCH no backend).
3879
+ * Configuração de coluna da lib convertida internamente para `ColDef` do AG Grid.
3616
3880
  */
3617
- type CardListDataMode = 'memory' | 'remote';
3618
- /** Barra «X de na lista: `footer` (omissão), `header` (no topo) ou `hidden`. */
3619
- type CardListHeaderPosition = 'footer' | 'header' | 'hidden';
3620
- declare class CardListComponent<T = unknown> implements OnChanges {
3621
- private readonly cdr;
3622
- items: T[];
3623
- loading: boolean;
3881
+ interface DataGridColumn<T = unknown> {
3882
+ /** Campo no registro ou identificador lógico (ex.: `__actions` para coluna de ações). */
3883
+ key: keyof T | string;
3884
+ header: string;
3885
+ width?: number;
3886
+ flex?: number;
3624
3887
  /**
3625
- * Com itens visíveis: mostra **um** skeleton no fundo (próxima página remota)
3626
- * para não saltar o scroll nem ocupar altura de vários cartões. O carregamento inicial
3627
- * continua a usar só {@link loading} (lista vazia ou refresh completo com `loading` e sem `loadingMore`).
3888
+ * `boolean`: checkbox temático via {@link DataGridComponent}; editável se {@link onBooleanChange} estiver definido.
3889
+ * `midiaPreview`: miniatura + botão zoom (valor da célula = URL relativa ou absoluta da imagem).
3628
3890
  */
3629
- loadingMore: boolean;
3630
- emptyMessage: string;
3631
- variant: 'default';
3632
- mapItem: CardListMapFn<T>;
3633
- showItemActions: boolean;
3634
- /** Repasse ao `app-data-card`: botão «Alterar» quando {@link showItemActions} é `true`. */
3635
- showEditAction: boolean;
3636
- editActionLabel: string;
3637
- editActionIconClass: string;
3638
- /** Repasse ao `app-data-card`: botão «Remover» quando {@link showItemActions} é `true`. */
3639
- showRemoveAction: boolean;
3640
- /** Repasse ao `app-data-card`: clique no cartão emite `edit` (exceto nos botões). */
3641
- cardOpenOnClick: boolean;
3642
- trackByProp: keyof T | string;
3643
- dataMode: CardListDataMode;
3644
- /** Em modo `memory`: quantos itens revelar por cada passo de scroll. Por omissão `10`. */
3645
- scrollBatchSize: number;
3646
- scrollLoadThresholdPx: number;
3647
- /** Mostra o rodapé com o resumo (“X de Y”) e dica. Por omissão `true`; com `false` oculta o footer. */
3648
- showFooter: boolean;
3891
+ type?: 'text' | 'number' | 'boolean' | 'actions' | 'midiaPreview';
3892
+ /** Com `type: 'midiaPreview'`: rótulo ARIA do botão que abre o diálogo (omisso: «Ampliar imagem»). */
3893
+ midiaPreviewZoomAriaLabel?: string;
3894
+ /** Por omissão `true` para texto/número; ignorado para `actions`. */
3895
+ sortable?: boolean;
3649
3896
  /**
3650
- * Posição da barra de contagem. Com `header` ou `hidden`, a área de scroll expande à altura útil do pai
3651
- * ({@link scrollMaxHeight} é ignorado quando o pai é um flex column com altura definida).
3897
+ * Alinhamento horizontal do cabeçalho e da célula (texto/número).
3898
+ * Ignorado para `type: 'actions'` e `boolean` (têm layout próprio).
3899
+ * Omisso / `start`: comportamento por defeito (esquerda em LTR).
3652
3900
  */
3653
- headerPosition: CardListHeaderPosition;
3654
- scrollMaxHeight: string | null;
3901
+ align?: 'start' | 'center' | 'end';
3655
3902
  /**
3656
- * Quantidade de cartões por linha na grelha (≥ 1). Valores inválidos ou excessivos são normalizados.
3657
- * Por omissão `1` (pilha vertical comportamento anterior).
3903
+ * Com `type: 'boolean'`: se definido, o checkbox deixa de ser leitura e chama-se após cada alteração
3904
+ * (ex.: marcar «principal» na grelha com exclusividade entre linhas).
3658
3905
  */
3659
- cardsPerRow: number;
3906
+ onBooleanChange?: (ctx: {
3907
+ row: T;
3908
+ value: boolean;
3909
+ }) => void;
3660
3910
  /**
3661
- * Modo **remote**: total de registros no servidor (ex.: COUNT SQL), para o texto “X de Y”.
3662
- * Se `null`, usa `items.length`.
3911
+ * Texto / número: edição inline no AG Grid; chamado após o utilizador confirmar o novo valor.
3912
+ * Omisso: célula leitura (comportamento anterior).
3663
3913
  */
3664
- totalCountRemote: number | null;
3665
- /** Modo **remote**: existe página seguinte para pedir ao backend. */
3666
- hasNextPage: boolean;
3667
- /** Modo **remote**: pedido de mais dados (próxima página). */
3668
- readonly loadMore: EventEmitter<void>;
3669
- readonly edit: EventEmitter<T>;
3670
- readonly remove: EventEmitter<T>;
3671
- readonly booleanFieldChange: EventEmitter<{
3672
- item: T;
3673
- fieldKey: string;
3674
- checked: boolean;
3675
- }>;
3676
- get hostFillHeight(): boolean;
3677
- /** Modo memory: quantos cartões renderizar (fatia inicial = scrollBatchSize). */
3678
- visibleCount: number;
3679
- private loadMorePending;
3680
- /** Skeleton que ocupa a lista inteira (carregamento inicial / refresh com `loading`). */
3681
- get showFullSkeleton(): boolean;
3682
- ngOnChanges(changes: SimpleChanges): void;
3683
- get totalItemCount(): number;
3684
- /** Total para o rodapé “X de Y”. */
3685
- get totalForStatus(): number;
3686
- get visibleItems(): T[];
3687
- get scrollStatusLabel(): string;
3688
- /** Colunas efectivas para CSS (`repeat(n, minmax(0,1fr))`), entre 1 e 12. */
3689
- get effectiveCardsPerRow(): number;
3690
- /** Lista expande em altura no container (sem `max-height`) quando a barra vai ao topo ou fica oculta. */
3691
- get scrollFillParent(): boolean;
3692
- get showResultBar(): boolean;
3693
- get scrollAreaStyle(): Record<string, string>;
3694
- /** mais linhas para mostrar (memória) ou para pedir à API (remote). */
3695
- get hasMoreToReveal(): boolean;
3696
- viewFor(item: T): CardItemView;
3697
- onCardBooleanFieldChange(item: T, ev: {
3698
- fieldKey: string;
3699
- checked: boolean;
3700
- }): void;
3701
- /** Poucos placeholders no carregamento inicial evitam barra de scroll temporária antes dos dados reais. */
3702
- skeletonCardIndices(): number[];
3703
- /** Um único cartão skeleton no fundo durante `loadingMore` (mantém o scroll estável). */
3704
- skeletonTailIndices(): number[];
3705
- hideEditActionForItem(item: T): boolean;
3706
- trackFn: (index: number, item: T) => unknown;
3707
- onScroll(ev: Event): void;
3708
- private requestRemotePage;
3709
- private loadMoreMemoryChunk;
3710
- private resetVisibleWindow;
3711
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardListComponent<any>, never>;
3712
- 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>;
3713
- static ngAcceptInputType_loadingMore: unknown;
3714
- static ngAcceptInputType_showEditAction: unknown;
3715
- static ngAcceptInputType_showRemoveAction: unknown;
3716
- static ngAcceptInputType_cardOpenOnClick: unknown;
3717
- static ngAcceptInputType_cardsPerRow: unknown;
3914
+ onScalarCommit?: (ctx: {
3915
+ row: T;
3916
+ newValue: unknown;
3917
+ }) => void;
3918
+ /**
3919
+ * Opções enum (`value` numérico em texto + `label`); a grelha exibe o rótulo em vez do valor cru.
3920
+ * Ordenação/filtro continuam a usar o campo bruto da linha.
3921
+ */
3922
+ enumOptions?: readonly DataGridEnumOption[];
3923
+ /**
3924
+ * Campo da linha com nome de classe CSS a aplicar na célula (ex.: cor por status).
3925
+ * Combinado com classes de alinhamento (`align`).
3926
+ */
3927
+ cellClassField?: keyof T | string;
3928
+ /** Navegação para cadastro relacionado (`[GridNavigate]` no servidor). */
3929
+ navigate?: DataGridColumnNavigateConfig;
3930
+ }
3931
+
3932
+ /** Contexto injetado pelo {@link DataGridComponent} (não exportado para consumidores). */
3933
+ interface DataGridActionsContext<T = unknown> {
3934
+ onEditRow: (row: T) => void;
3935
+ onRemoveRow: (row: T) => void;
3936
+ onDuplicateRow?: (row: T) => void;
3937
+ onPrintRow?: (row: T) => void;
3938
+ /** Quando `false`, o botão «Alterar» não é mostrado. */
3939
+ showEditAction?: boolean;
3940
+ /** Quando `false`, o botão «Remover» não é mostrado. */
3941
+ showRemoveAction?: boolean;
3942
+ /** Quando `true`, mostra «Duplicar» (requer `onDuplicateRow`). */
3943
+ showDuplicateAction?: boolean;
3944
+ /** Quando `true`, mostra «Imprimir» (requer `onPrintRow`). */
3945
+ showPrintAction?: boolean;
3946
+ /** Tooltip/aria do botão de abrir registo; omisso ⇒ «Alterar». */
3947
+ editActionLabel?: string;
3948
+ /**
3949
+ * Classe Font Awesome do ícone do botão editar/transmitir (ex.: `fa-paper-plane`).
3950
+ * Omisso ⇒ `fa-pen-to-square`.
3951
+ */
3952
+ editActionIconClass?: string;
3953
+ /** Tooltip/aria do botão imprimir; omisso «Imprimir». */
3954
+ printActionLabel?: string;
3955
+ }
3956
+ declare class DataGridActionsCellRendererComponent implements ICellRendererAngularComp {
3957
+ params: ICellRendererParams & {
3958
+ context?: DataGridActionsContext;
3959
+ };
3960
+ agInit(params: ICellRendererParams): void;
3961
+ refresh(): boolean;
3962
+ protected get isPlaceholderRow(): boolean;
3963
+ /** Linha pode ocultar ações via `__hideEditAction` / `__hidePrintAction` (ex.: NF já autorizada). */
3964
+ protected get rowData(): Record<string, unknown> | undefined;
3965
+ protected get showEditButton(): boolean;
3966
+ protected get showPrintButton(): boolean;
3967
+ /** Botão textual (ex.: «Transmitir NFS-e») em vez do ícone «Alterar». */
3968
+ protected get editAsTextButton(): boolean;
3969
+ protected get editActionIcon(): string;
3970
+ /** `params.context` nem sempre vem preenchido; o grid guarda o mesmo objeto em `gridOptions.context`. */
3971
+ protected get actionsContext(): DataGridActionsContext | undefined;
3972
+ edit(): void;
3973
+ remove(): void;
3974
+ duplicate(): void;
3975
+ print(): void;
3976
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataGridActionsCellRendererComponent, never>;
3977
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataGridActionsCellRendererComponent, "app-data-grid-actions-cell-renderer", never, {}, {}, never, never, true, never>;
3718
3978
  }
3719
3979
 
3720
- /** Limite de largura para tratar como “mobile” na escolha grid vs card (igual aos campos). */
3721
- declare const ADAPTIVE_DATA_VIEW_MOBILE_QUERY = "(max-width: 767.98px)";
3722
- type AdaptiveDataViewMode = 'grid' | 'card';
3723
3980
  /**
3724
- * Escolhe **um** de `app-data-grid` ou `app-card-list` conforme breakpoint e preferências.
3725
- * Nunca renderiza os dois em simultâneo.
3981
+ * Checkbox leitura (omisso) ou editável quando `interactive` e `onCommit` chegam nos params
3982
+ * (raiz após merge do AG Grid, ou {@link ICellRendererParams} legado com `cellRendererParams`).
3726
3983
  */
3727
- declare class AdaptiveDataViewComponent<T = unknown> implements OnInit, OnChanges, OnDestroy {
3728
- private readonly bp;
3984
+ declare class DataGridBooleanCellRendererComponent implements ICellRendererAngularComp {
3729
3985
  private readonly cdr;
3730
- private readonly destroyRef;
3731
- /** Tempo mínimo em skeleton ao iniciar um carregamento (grid ou cartões), para evitar flick com respostas instantâneas. */
3732
- private clearSkeletonDelayTimer;
3733
- /** Momento em que {@link displayLoading} passou a `true` no ciclo actual. */
3734
- private loadingShownAtMs;
3735
- items: T[];
3736
- gridColumns: DataGridColumn<T>[];
3737
- mapItem: CardListMapFn<T>;
3738
- pageSize: number;
3739
- /** Altura do `app-data-grid` (`[height]`). Independente de {@link cardScrollMaxHeight}. */
3740
- gridHeight: string | null;
3986
+ checked: boolean;
3987
+ headerPlaceholder: string;
3988
+ protected interactive: boolean;
3989
+ private onCommit?;
3990
+ private rowData;
3991
+ agInit(params: ICellRendererParams): void;
3992
+ refresh(params: ICellRendererParams): boolean;
3993
+ protected onCheckboxChange(ev: Event): void;
3741
3994
  /**
3742
- * Altura máx. com scroll do `app-card-list`. Configuração **separada** de {@link gridHeight}.
3743
- * Com {@link gridFitPaginationHeight}, a grelha ignora `gridHeight` e calcula pela paginação.
3995
+ * O AG Grid (edição inline / foco de célula) intercepta `mousedown`/`click` no contentor da célula;
3996
+ * sem `stopPropagation` o primeiro clique pode não chegar ao checkbox ou o estado volta atrás no `refresh`.
3744
3997
  */
3745
- cardScrollMaxHeight: string | null;
3746
- gridFitPaginationHeight: boolean;
3747
- /** Repassado ao `app-data-grid` quando {@link gridFitPaginationHeight} está activo (lista vazia). */
3748
- gridFitPaginationMinEmptyRows: number;
3749
- emptyMessageGrid: string;
3750
- emptyMessageCard: string;
3751
- pagination: boolean;
3752
- showActionsColumn: boolean;
3753
- showCardItemActions: boolean;
3754
- /** Tooltip/aria do botão de abrir registo na coluna Ações ou no cartão. Omisso ⇒ «Alterar». */
3755
- editActionLabel: string;
3756
- /** Ícone Font Awesome do botão editar (ex.: `fa-paper-plane`). Omisso ⇒ `fa-pen-to-square`. */
3757
- editActionIconClass: string;
3758
- /** Lista em cartões: clique no cartão dispara `edit` (como «Alterar»); botões mantêm-se independentes. */
3759
- cardOpenOnClick: boolean;
3760
- scrollBatchSize: number;
3761
- showCardFooter: boolean;
3998
+ protected onBlockGridPointerBubble(ev: MouseEvent): void;
3999
+ private applyParams;
4000
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataGridBooleanCellRendererComponent, never>;
4001
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataGridBooleanCellRendererComponent, "app-data-grid-boolean-cell-renderer", never, {}, {}, never, never, true, never>;
4002
+ }
4003
+
4004
+ declare class DataGridMidiaPreviewCellRendererComponent implements ICellRendererAngularComp {
4005
+ private readonly cdr;
4006
+ private readonly dialog;
4007
+ private readonly theme;
4008
+ private readonly publicBase;
4009
+ relativePath: string;
4010
+ thumbSrc: string;
4011
+ zoomAriaLabel: string;
4012
+ placeholderRow: boolean;
4013
+ protected dialogSrc: string;
4014
+ agInit(params: ICellRendererParams): void;
4015
+ refresh(params: ICellRendererParams): boolean;
4016
+ protected onThumbError(ev: Event): void;
4017
+ protected onZoomClick(ev: MouseEvent): void;
4018
+ private applyParams;
4019
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataGridMidiaPreviewCellRendererComponent, never>;
4020
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataGridMidiaPreviewCellRendererComponent, "app-data-grid-midia-preview-cell-renderer", never, {}, {}, never, never, true, never>;
4021
+ }
4022
+
4023
+ interface DataGridNavigationCellParams {
4024
+ navigate?: GridNavigateConfig;
4025
+ displayValue?: string;
4026
+ showButton?: boolean;
4027
+ tooltip?: string;
4028
+ iconClass?: string;
4029
+ disabled?: boolean;
4030
+ onNavigate?: (row: Record<string, unknown>) => void;
4031
+ }
4032
+ declare class DataGridNavigationCellRendererComponent implements ICellRendererAngularComp {
4033
+ params: ICellRendererParams;
4034
+ agInit(params: ICellRendererParams): void;
4035
+ refresh(params: ICellRendererParams): boolean;
4036
+ protected get cellParams(): DataGridNavigationCellParams;
4037
+ protected get displayText(): string;
4038
+ protected get showButton(): boolean;
4039
+ protected get isDisabled(): boolean;
4040
+ protected get tooltipText(): string;
4041
+ protected get iconFaClass(): string;
4042
+ protected get isPlaceholderRow(): boolean;
4043
+ protected onNavigateClick(event: MouseEvent): void;
4044
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataGridNavigationCellRendererComponent, never>;
4045
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataGridNavigationCellRendererComponent, "app-data-grid-navigation-cell-renderer", never, {}, {}, never, never, true, never>;
4046
+ }
4047
+
4048
+ /** Emitido quando o usuário muda de página ou tamanho de página na grade paginada. */
4049
+ interface DataGridPaginationChangeEvent {
4050
+ /** Índice 0-based da página atual (API ag-Grid). */
4051
+ currentPage: number;
4052
+ newPage: boolean;
4053
+ newPageSize: boolean;
4054
+ }
4055
+ declare class DataGridComponent<T = unknown> implements OnInit, OnChanges, OnDestroy {
4056
+ private readonly ngZone;
4057
+ private readonly cdr;
4058
+ private readonly destroyRef;
4059
+ private readonly hostRef;
4060
+ private readonly gridLayoutService;
4061
+ private readonly router;
4062
+ private readonly routeAccess;
4063
+ private gridApi;
3762
4064
  /**
3763
- * Lista em cartões: posição da barra «X de Y». `footer` (omissão), `header` ou `hidden`.
3764
- * Com `header` ou `hidden`, {@link cardScrollMaxHeight} é ignorado e a lista tenta ocupar a altura do pai em flex.
4065
+ * Alinhar com `data-grid.host-theme.scss`: `--ag-grid-size: 7px`, cabeçalho e linha = ×8.
4066
+ * Painel de paginação AG Grid: `--ag-pagination-panel-height` = `--ag-header-height`.
3765
4067
  */
3766
- headerPosition: CardListHeaderPosition;
4068
+ private static readonly FIT_HEADER_ROW_PX;
4069
+ private static readonly FIT_PAGING_PX;
4070
+ /** Bordas / arredondamentos entre root e viewport. */
4071
+ private static readonly FIT_CHROME_FUDGE_PX;
3767
4072
  /**
3768
- * Lista em cartões: colunas da grelha (cartões por linha); repassado ao `app-card-list`.
3769
- * Por omissão `1`; na vista em grelha AG (`desktopView`/`mobileView` = `grid`) não tem efeito.
4073
+ * Altura aproximada de uma linha do skeleton (padding + bloco) usada para encher o overlay do viewport;
4074
+ * ligeiramente inferior à linha real do AG Grid (56px) para caberem mais barras e tapar o fundo.
3770
4075
  */
3771
- cardsPerRow: number;
3772
- /** Estado de carregamento reposto no grid ou na lista conforme a vista ativa. */
4076
+ private static readonly SKELETON_ROW_APPROX_PX;
4077
+ private paginationChangedListener?;
4078
+ /** Evita `setGridOption('rowData')` quando só muda a referência do array (mesmo conteúdo). */
4079
+ private lastRowDataFingerprint;
4080
+ rows: T[];
4081
+ columns: DataGridColumn<T>[];
4082
+ pageSize: number;
3773
4083
  loading: boolean;
3774
4084
  /**
3775
- * Duração mínima (ms) em que o skeleton permanece visível após cada vez que `loading` fica `true`,
3776
- * mesmo que os dados cheguem antes. `0` desactiva o atraso.
4085
+ * Após remontar a grade (ex.: skeleton), volta a esta página (0-based).
4086
+ * aplicado em `gridReady` e quando o valor muda com a API já disponível.
3777
4087
  */
3778
- loadingSkeletonMinMs: number;
4088
+ initialPaginationPage: number;
4089
+ height: string | null;
3779
4090
  /**
3780
- * Mostra uma linha de contagem **abaixo** da grade ou da lista (incluindo paginação interna).
3781
- * Texto padrão em português; use `{count}` como marcador do número de linhas em `items`.
4091
+ * Ignora `height` e define altura para cabeçalho + `pageSize` linhas + barra de paginação.
4092
+ * Actualiza quando o utilizador muda o tamanho de página no próprio grid (via API).
3782
4093
  */
3783
- showResultCount: boolean;
3784
- resultCountTemplate: string;
3785
- /** Vista quando `ADAPTIVE_DATA_VIEW_MOBILE_QUERY` corresponde. Por padrão `card`. */
3786
- mobileView: AdaptiveDataViewMode;
3787
- /** Vista quando a tela é maior. Por padrão `grid`. */
3788
- desktopView: AdaptiveDataViewMode;
4094
+ fitPaginationHeight: boolean;
4095
+ /**
4096
+ * Com {@link fitPaginationHeight} e lista vazia: altura mínima em linhas de corpo (empty state).
4097
+ * Por omissão `1`; no diálogo de filtros use ~5 para alinhar ao `pageSize`.
4098
+ */
4099
+ fitPaginationMinEmptyRows: number;
4100
+ emptyMessage: string;
4101
+ pagination: boolean;
4102
+ /**
4103
+ * `top`: inverte o layout interno do AG Grid para o painel `.ag-paging-panel` aparecer **acima** do corpo
4104
+ * (vista em cartão / mobile alinhada à consulta).
4105
+ */
4106
+ paginationPanelPlacement: 'bottom' | 'top';
4107
+ /**
4108
+ * Mostra só o painel de paginação nativo (corpo/cabeçalho ocultos). Útil com uma segunda grelha em cartão.
4109
+ */
4110
+ paginationStripOnly: boolean;
4111
+ /**
4112
+ * Skeleton placeholder (lista vazia): faixa de paginação só com chrome, sem texto.
4113
+ * Activar no arranque antes do metadata/lista; manter texto durante loading explícito da API.
4114
+ */
4115
+ placeholderPagerChromeOnly: boolean;
4116
+ /** Coleções remotas: esconde o selector de tamanho de página (o tamanho vem da metadata/servidor). */
4117
+ suppressPaginationPageSizeSelector: boolean;
4118
+ /** Se `false`, omite colunas com `type: 'actions'` (editar/remover). Por omissão `true`. */
4119
+ showActionsColumn: boolean;
4120
+ /** Se `false`, a coluna de ações não mostra «Alterar». Por omissão `true`. */
4121
+ showEditAction: boolean;
4122
+ /** Tooltip e aria-label do botão de edição na coluna Ações. Omisso ⇒ «Alterar». */
4123
+ editActionLabel: string;
4124
+ /** Ícone Font Awesome do botão editar (ex.: `fa-paper-plane`). Omisso ⇒ `fa-pen-to-square`. */
4125
+ editActionIconClass: string;
4126
+ /** Se `false`, a coluna de ações não mostra «Remover». Por omissão `true`. */
4127
+ showRemoveAction: boolean;
4128
+ /** Se `true`, mostra «Duplicar» na coluna de ações (requer handler no contexto). */
3789
4129
  showDuplicateAction: boolean;
4130
+ /** Se `true`, mostra «Imprimir» na coluna de ações (requer handler no contexto). */
3790
4131
  showPrintAction: boolean;
4132
+ /** Tooltip e aria-label do botão imprimir na coluna Ações. Omisso ⇒ «Imprimir». */
3791
4133
  printActionLabel: string;
3792
- showEditAction: boolean;
3793
- showRemoveAction: boolean;
3794
- /** Chave da tela para persistência de layout AG Grid (repasse ao `app-data-grid`). */
4134
+ /**
4135
+ * 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).
4136
+ */
4137
+ suppressRowClick: boolean;
4138
+ /**
4139
+ * Quando `true`, activa edição inline de células (`editable` + clique único) e permite foco nas células.
4140
+ * Omisso `false` — grelhas de consulta mantêm foco suprimido.
4141
+ */
4142
+ inlineCellEditing: boolean;
4143
+ /**
4144
+ * Destaca a linha cuja propriedade {@link highlightMatchField} coincide com este valor (ex.: índice no FormArray).
4145
+ * Omisso ou `null`: sem destaque.
4146
+ */
4147
+ highlightedRowMatch: number | null;
4148
+ /** Campo em {@link rows} a comparar com {@link highlightedRowMatch}. Omisso: `__rowArrayIndex`. */
4149
+ highlightMatchField: string;
4150
+ /**
4151
+ * Chave da tela para persistência de layout (tenant + tela + grid).
4152
+ * Omisso: não persiste nem restaura colunas.
4153
+ */
3795
4154
  layoutTelaKey: string | null;
3796
4155
  /** Chave do grid na mesma tela. Omisso: `consulta-principal`. */
3797
4156
  layoutGridKey: string;
4157
+ /**
4158
+ * Contexto para preservar scroll/sessão da consulta ao navegar via {@link DataGridColumn.navigate}.
4159
+ */
4160
+ gridNavigatePreserve: GridNavigatePreserveContext | null;
4161
+ private isApplyingSavedLayout;
4162
+ private savedLayoutApplied;
4163
+ private layoutUserChangeSaveEnabled;
4164
+ /** Impressão digital do columnState já aplicado nesta instância (evita re-apply idêntico). */
4165
+ private appliedLayoutFingerprint;
4166
+ /** Estado em cache lido de forma síncrona antes do gridReady. */
4167
+ private pendingSavedColumnState;
4168
+ private layoutApplyRetryTimer;
4169
+ private layoutApplyRetryAttempts;
4170
+ private layoutCacheUpdatedUnsub;
4171
+ /** Detecta transição bootstrap (só «Ações») → colunas de dados do metadata (F5). */
4172
+ private lastKnownDataColumnCount;
4173
+ /**
4174
+ * Oculta a faixa horizontal do AG Grid durante reflow/remount (cache de rota / revisit de consulta).
4175
+ * O skeleton na 1.ª carga já tapa o viewport; aqui evita flash quando há linhas visíveis.
4176
+ */
4177
+ suppressHorizontalScrollFlicker: boolean;
4178
+ private layoutStabilizeTimer;
4179
+ private layoutStabilizeRaf;
4180
+ constructor();
3798
4181
  readonly edit: EventEmitter<T>;
3799
4182
  readonly duplicate: EventEmitter<T>;
3800
4183
  readonly print: EventEmitter<T>;
3801
4184
  readonly remove: EventEmitter<T>;
3802
- readonly loadMore: EventEmitter<void>;
3803
- /** Corresponde ao breakpoint mobile. */
3804
- isMobileLayout: boolean;
3805
- /** Valor efectivo reposto ao grid / lista (respeita {@link loadingSkeletonMinMs}). */
3806
- displayLoading: boolean;
3807
- /** Skeleton só quando `loading` e a lista ainda está vazia (cache / refresh mantém dados visíveis). */
3808
- private shouldShowLoadingSkeleton;
4185
+ /** Clique na linha de dados (útil para selecção fora da coluna de acções). */
4186
+ readonly rowClick: EventEmitter<T>;
4187
+ /** Reservado para evolução (seleção de linhas); não ligado na v1 para manter a UI minimal. */
4188
+ readonly selectionChange: EventEmitter<T[]>;
4189
+ /** Paginação interna do ag-Grid: mudança de página ou de `pageSize`. */
4190
+ readonly paginationChanged: EventEmitter<DataGridPaginationChangeEvent>;
4191
+ readonly frameworkComponents: {
4192
+ dataGridActions: typeof DataGridActionsCellRendererComponent;
4193
+ dataGridBoolean: typeof DataGridBooleanCellRendererComponent;
4194
+ dataGridMidiaPreview: typeof DataGridMidiaPreviewCellRendererComponent;
4195
+ dataGridNavigation: typeof DataGridNavigationCellRendererComponent;
4196
+ };
4197
+ /** Localização pt-BR do chrome do AG Grid (paginação e rótulos associados). */
4198
+ readonly localeText: {
4199
+ readonly pageSizeSelectorLabel: "Páginas:";
4200
+ readonly ariaPageSizeSelectorLabel: "Páginas";
4201
+ readonly page: "Página";
4202
+ readonly of: "de";
4203
+ readonly to: "a";
4204
+ readonly firstPage: "Primeira página";
4205
+ readonly previousPage: "Página anterior";
4206
+ readonly nextPage: "Próxima página";
4207
+ readonly lastPage: "Última página";
4208
+ readonly pageLastRowUnknown: "?";
4209
+ readonly more: "mais";
4210
+ };
4211
+ readonly paginationPageSizeChoices: number[];
4212
+ /**
4213
+ * O AG Grid avisa se `paginationPageSize` não está em `paginationPageSizeSelector`.
4214
+ * Junta `pageSize` às opções base quando o consumidor usa um valor fora da lista (ex.: 8).
4215
+ */
4216
+ get effectivePaginationPageSizeSelector(): number[];
4217
+ /** Repasse ao `ag-grid-angular`: `false` omite o selector (documentação AG Grid). */
4218
+ get paginationPageSizeSelectorInput(): number[] | boolean;
4219
+ /**
4220
+ * Skeleton só na carga inicial (lista vazia). Refresh com linhas visíveis mantém a grelha — evita flash com cache.
4221
+ */
4222
+ get showViewportSkeleton(): boolean;
4223
+ /**
4224
+ * Lista vazia em loading: skeleton tabular completo (cabeçalhos genéricos vazios) sem montar AG Grid.
4225
+ * Evita flash de «Ações» quando colunas de metadata chegam antes dos dados da lista.
4226
+ */
4227
+ get showFullPlaceholderSkeleton(): boolean;
4228
+ /** AG Grid só após colunas de dados e fim do loading inicial (lista vazia). */
4229
+ get shouldRenderAgGrid(): boolean;
4230
+ /** Cabeçalhos genéricos alinhados ao {@link ConsultaPageLoadingSkeletonComponent}. */
4231
+ readonly placeholderSkeletonHeaders: readonly string[];
4232
+ /** Só esvazia `rowData` durante loading quando ainda não há linhas a mostrar. */
4233
+ private get clearRowDataWhileLoading();
4234
+ /**
4235
+ * Empty state **fora** do AG Grid: o overlay nativo falha na 1.ª carga (skeleton + `suppressNoRowsOverlay` / v35).
4236
+ */
4237
+ get showManualEmptyState(): boolean;
4238
+ /**
4239
+ * Colunas do skeleton alinhadas à grelha real (incl. filtro `showActionsColumn`).
4240
+ * Evita o mínimo artificial de `2` — com `columns` vazio no primeiro paint isso parecia lista em cartão (card list).
4241
+ */
4242
+ get skeletonColumnCount(): number;
4243
+ get skeletonRowCount(): number;
4244
+ /** Área entre cabeçalho da grelha e barra de paginação (overlay do skeleton), em px quando {@link hostHeight} é valor `NNpx`. */
4245
+ private estimateSkeletonViewportBodyPx;
4246
+ /** Desactiva animação de reordenação enquanto o layout persistido não foi aplicado. */
4247
+ get suppressColumnMoveAnimation(): boolean;
4248
+ readonly defaultColDef: ColDef<T>;
4249
+ /**
4250
+ * O AG Grid corre muitos callbacks fora da `NgZone`; sem `run()`, o pai com `OnPush`
4251
+ * não volta a renderizar e editar/remover parece “morto”.
4252
+ */
4253
+ private buildActionsContext;
4254
+ /** Expõe o contexto para `[context]` no template do `ag-grid-angular`. */
4255
+ get actionsContext(): DataGridActionsContext<T>;
4256
+ agColumnDefs: ColDef<T>[];
3809
4257
  ngOnInit(): void;
4258
+ /**
4259
+ * IDs estáveis por linha (evita `''` duplicado quando não existe `id` nos dados).
4260
+ * Tenta `id`, depois `sku` (comum em grades de produto), senão impressão digital do objeto.
4261
+ */
4262
+ readonly getRowId: (params: GetRowIdParams<T>) => string;
4263
+ /** Conteúdo efectivo de `rowData` (evita refresh quando só muda a referência do array). */
4264
+ private computeRowDataFingerprint;
4265
+ /** Identificador determinístico e curto para linhas sem chave explícita. */
4266
+ private stableRowFingerprint;
3810
4267
  ngOnChanges(changes: SimpleChanges): void;
3811
4268
  ngOnDestroy(): void;
3812
- /** Quando o pai pede `loading === false`, só oculta o skeleton após cumprir o tempo mínimo desde `loading === true`. */
3813
- private applyLoadingFalseWithMinSkeleton;
3814
- get effectiveKind(): AdaptiveDataViewMode;
3815
- get showGrid(): boolean;
3816
- get showCard(): boolean;
3817
- /** Modo cartão com lista a expandir em altura (sem `max-height` na área de scroll). */
3818
- get cardScrollFillsParent(): boolean;
3819
- /** Repasse ao `app-card-list`: mantém `cardScrollMaxHeight` só quando a lista não preenche o pai. */
3820
- get effectiveCardScrollMaxHeight(): string | null;
3821
- get resultCountDisplay(): string;
3822
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AdaptiveDataViewComponent<any>, never>;
3823
- 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>;
3824
- static ngAcceptInputType_gridFitPaginationHeight: unknown;
3825
- static ngAcceptInputType_gridFitPaginationMinEmptyRows: unknown;
3826
- static ngAcceptInputType_cardOpenOnClick: unknown;
3827
- static ngAcceptInputType_cardsPerRow: unknown;
3828
- static ngAcceptInputType_loadingSkeletonMinMs: unknown;
3829
- static ngAcceptInputType_showDuplicateAction: unknown;
3830
- static ngAcceptInputType_showPrintAction: unknown;
4269
+ get hostHeight(): string;
4270
+ onGridReady(ev: GridReadyEvent<T>): void;
4271
+ private onGridReadyApplyLayoutThenData;
4272
+ onLayoutColumnMoved(ev: ColumnMovedEvent<T>): void;
4273
+ onLayoutColumnResized(ev: ColumnResizedEvent<T>): void;
4274
+ onLayoutColumnVisible(_ev: ColumnVisibleEvent<T>): void;
4275
+ onLayoutColumnPinned(_ev: ColumnPinnedEvent<T>): void;
4276
+ private hydrateLayoutFromCacheSync;
4277
+ /** Dispara GET em background na 1.ª visita para aquecer cache antes do gridReady. */
4278
+ private prefetchLayoutIfNeeded;
4279
+ private onExternalLayoutCacheUpdated;
4280
+ private tryApplySavedLayout;
4281
+ private countDataColumns;
4282
+ private shouldKeepTryingLayoutApply;
4283
+ /** activa gravação automática quando colunas de dados existem (evita sobrescrever layout no F5). */
4284
+ private canEnableLayoutSaveGrace;
4285
+ private cancelLayoutApplyRetry;
4286
+ private scheduleLayoutApplyRetry;
4287
+ private applySavedLayoutBeforeFirstPaint;
4288
+ /** Dois frames após `agColumnDefs` mudar — AG Grid precisa materializar colunas antes de `applyColumnState`. */
4289
+ private yieldForGridColumnDefsSync;
4290
+ /** Colunas de dados existem no input e já estão materializadas na API do AG Grid. */
4291
+ private gridReadyForLayoutApply;
4292
+ private verifyLayoutStateApplied;
4293
+ private applyColumnStateToGrid;
4294
+ private enableLayoutSaveAfterGrace;
4295
+ private persistColumnLayoutIfAllowed;
4296
+ onRowClicked(ev: RowClickedEvent<T>): void;
4297
+ private rowClassForHighlight;
4298
+ private applyRowHighlightClass;
4299
+ private applyInitialPaginationPage;
4300
+ /** Evita `removeEventListener` na API depois do grid destruído. */
4301
+ private detachPaginationListenerIfLive;
4302
+ private setupHorizontalScrollStabilizingObservers;
4303
+ private beginHorizontalScrollStabilizing;
4304
+ private scheduleEndHorizontalScrollStabilizing;
4305
+ private tryFinishHorizontalScrollStabilizing;
4306
+ /**
4307
+ * `true` se o viewport central transborda; `false` se não; `null` se ainda não mensurável (largura 0).
4308
+ */
4309
+ private centerViewportNeedsHorizontalScroll;
4310
+ private clearLayoutStabilizingTimers;
4311
+ private columnsForGrid;
4312
+ /** Classes BEM em `data-grid.host-theme.scss` para alinhamento declarativo nas colunas. */
4313
+ private static alignmentCellHeaderClasses;
4314
+ /**
4315
+ * Colunas `boolean` com `onBooleanChange` (checkbox na célula).
4316
+ * Reutilizado para {@link suppressCellFocusBinding}.
4317
+ */
4318
+ private columnsHaveInteractiveBoolean;
4319
+ private handleGridNavigate;
4320
+ private navigationCellRendererParams;
4321
+ /**
4322
+ * Com `suppressCellFocus` activo, o AG Grid pode impedir cliques em checkboxes custom (`type: 'boolean'`).
4323
+ * Desactiva o supresso quando há colunas boolean com `onBooleanChange` ou quando a edição inline está ligada.
4324
+ */
4325
+ get suppressCellFocusBinding(): boolean;
4326
+ private mapColumnsToColDef;
4327
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataGridComponent<any>, never>;
4328
+ 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; }; "placeholderPagerChromeOnly": { "alias": "placeholderPagerChromeOnly"; "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; }; "gridNavigatePreserve": { "alias": "gridNavigatePreserve"; "required": false; }; }, { "edit": "edit"; "duplicate": "duplicate"; "print": "print"; "remove": "remove"; "rowClick": "rowClick"; "selectionChange": "selectionChange"; "paginationChanged": "paginationChanged"; }, never, never, true, never>;
4329
+ static ngAcceptInputType_initialPaginationPage: unknown;
4330
+ static ngAcceptInputType_fitPaginationHeight: unknown;
4331
+ static ngAcceptInputType_fitPaginationMinEmptyRows: unknown;
4332
+ static ngAcceptInputType_paginationStripOnly: unknown;
4333
+ static ngAcceptInputType_placeholderPagerChromeOnly: unknown;
4334
+ static ngAcceptInputType_suppressPaginationPageSizeSelector: unknown;
3831
4335
  static ngAcceptInputType_showEditAction: unknown;
3832
4336
  static ngAcceptInputType_showRemoveAction: unknown;
3833
- }
4337
+ static ngAcceptInputType_showDuplicateAction: unknown;
4338
+ static ngAcceptInputType_showPrintAction: unknown;
4339
+ static ngAcceptInputType_suppressRowClick: unknown;
4340
+ static ngAcceptInputType_inlineCellEditing: unknown;
4341
+ }
3834
4342
 
3835
- declare class DataCardComponent implements OnChanges {
3836
- private readonly publicBase;
3837
- private readonly cdr;
4343
+ /** Barra de consulta: pesquisa, filtros, ações e contador (slots `toolbar-start` / `toolbar-end`). */
4344
+ declare class DataToolbarComponent {
4345
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataToolbarComponent, never>;
4346
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataToolbarComponent, "app-data-toolbar", never, {}, {}, never, ["[toolbar-start]", "[toolbar-end]"], true, never>;
4347
+ }
4348
+
4349
+ /** Navegação declarativa num cartão (metadata `[GridNavigate]` da coluna da grelha). */
4350
+ interface CardItemNavigateAction {
4351
+ /** Chave da coluna/campo associado (ex.: `osCodigo`). */
4352
+ fieldKey: string;
4353
+ navigate: GridNavigateConfig;
4354
+ }
4355
+ /** Campo extra no cartão (renderização rica). */
4356
+ interface CardItemBooleanField {
4357
+ type: 'boolean';
4358
+ /** Chave do campo na linha da coleção (ex.: `principal`). */
4359
+ fieldKey: string;
4360
+ label: string;
4361
+ checked: boolean;
4362
+ /** Quando `true`, exibe checkbox desabilitado (ex.: coleção só-leitura). */
4363
+ readOnly?: boolean;
4364
+ }
4365
+ type CardItemMetaField = CardItemBooleanField;
4366
+ /** Vista mapeada por item para {@link CardListComponent}. */
4367
+ interface CardItemView {
3838
4368
  title: string;
3839
4369
  subtitle?: string;
3840
- /** 1–2 caracteres para o círculo de iniciais. */
4370
+ /** Texto curto para o avatar (ex.: iniciais). */
3841
4371
  avatarText?: string;
3842
- /** Miniatura (ex.: foto do item em coleção só-leitura). */
4372
+ /** URL da miniatura (campo de mídia / imagem na coleção só-leitura). */
3843
4373
  imageUrl?: string;
3844
- /** Campos extras (ex.: checkbox leitura para boolean). */
4374
+ /** Campos booleanos e outros metadados (ex.: «Principal» com checkbox). */
3845
4375
  metaFields?: readonly CardItemMetaField[];
3846
- protected thumbBroken: boolean;
3847
- ngOnChanges(changes: SimpleChanges): void;
3848
- protected get displayImageUrl(): string;
4376
+ /** Botões de navegação derivados de colunas com `[GridNavigate]`. */
4377
+ navigateActions?: readonly CardItemNavigateAction[];
4378
+ }
4379
+ type CardListMapFn<T> = (item: T) => CardItemView;
4380
+
4381
+ /**
4382
+ * - **memory**: `items` tem a lista completa (ex.: 500 em memória); só se mostram
4383
+ * `scrollBatchSize` de cada vez até o usuário fazer scroll (fatia local).
4384
+ * - **remote**: `items` são só as linhas já devolvidas pela API; ao fim do scroll
4385
+ * emite `loadMore` para pedir a próxima página (SQL OFFSET/FETCH no backend).
4386
+ */
4387
+ type CardListDataMode = 'memory' | 'remote';
4388
+ /** Barra «X de Y» na lista: `footer` (omissão), `header` (no topo) ou `hidden`. */
4389
+ type CardListHeaderPosition = 'footer' | 'header' | 'hidden';
4390
+ declare class CardListComponent<T = unknown> implements OnChanges, AfterViewInit {
4391
+ private readonly cdr;
4392
+ private readonly destroyRef;
4393
+ private scrollAreaRef?;
4394
+ private scrollSentinelRef?;
4395
+ private pageScrollObserver;
4396
+ private scrollAreaResizeObserver;
4397
+ items: T[];
4398
+ loading: boolean;
4399
+ /**
4400
+ * Com itens já visíveis: mostra **um** skeleton no fundo (próxima página remota)
4401
+ * para não saltar o scroll nem ocupar altura de vários cartões. O carregamento inicial
4402
+ * continua a usar só {@link loading} (lista vazia ou refresh completo com `loading` e sem `loadingMore`).
4403
+ */
4404
+ loadingMore: boolean;
4405
+ emptyMessage: string;
3849
4406
  variant: 'default';
3850
- showActions: boolean;
3851
- /** Omisso / `true`: mostra o botão «Alterar» quando {@link showActions} é `true`. */
4407
+ mapItem: CardListMapFn<T>;
4408
+ showItemActions: boolean;
4409
+ /** Repasse ao `app-data-card`: botão «Alterar» quando {@link showItemActions} é `true`. */
3852
4410
  showEditAction: boolean;
3853
4411
  editActionLabel: string;
3854
4412
  editActionIconClass: string;
3855
- /** Omisso / `true`: mostra o botão «Remover» quando {@link showActions} é `true`. */
4413
+ /** Repasse ao `app-data-card`: botão «Remover» quando {@link showItemActions} é `true`. */
3856
4414
  showRemoveAction: boolean;
3857
- /** Quando `true`, omite o botão «Alterar» neste cartão (ex.: ação por linha na consulta). */
3858
- hideEditAction: boolean;
4415
+ /** Repasse ao `app-data-card`: clique no cartão emite `edit` (exceto nos botões). */
4416
+ cardOpenOnClick: boolean;
4417
+ trackByProp: keyof T | string;
4418
+ dataMode: CardListDataMode;
4419
+ /** Em modo `memory`: quantos itens revelar por cada passo de scroll. Por omissão `10`. */
4420
+ scrollBatchSize: number;
4421
+ scrollLoadThresholdPx: number;
4422
+ /** Mostra o rodapé com o resumo (“X de Y”) e dica. Por omissão `true`; com `false` oculta o footer. */
4423
+ showFooter: boolean;
3859
4424
  /**
3860
- * Clique na superfície do cartão (fora dos botões de ação) emite {@link edit}, como o botão «Alterar».
4425
+ * Posição da barra de contagem. Com `header` ou `hidden`, a área de scroll expande à altura útil do pai
4426
+ * ({@link scrollMaxHeight} é ignorado quando o pai é um flex column com altura definida).
3861
4427
  */
3862
- openOnClick: boolean;
3863
- readonly edit: EventEmitter<void>;
3864
- readonly remove: EventEmitter<void>;
4428
+ headerPosition: CardListHeaderPosition;
4429
+ scrollMaxHeight: string | null;
4430
+ /**
4431
+ * Quantidade de cartões por linha na grelha (≥ 1). Valores inválidos ou excessivos são normalizados.
4432
+ * Por omissão `1` (pilha vertical — comportamento anterior).
4433
+ */
4434
+ cardsPerRow: number;
4435
+ /** Preservação de scroll/sessão ao navegar via `[GridNavigate]` nos cartões. */
4436
+ gridNavigatePreserve: GridNavigatePreserveContext | null;
4437
+ /**
4438
+ * Modo **remote**: total de registros no servidor (ex.: COUNT SQL), para o texto “X de Y”.
4439
+ * Se `null`, usa `items.length`.
4440
+ */
4441
+ totalCountRemote: number | null;
4442
+ /** Modo **remote**: existe página seguinte para pedir ao backend. */
4443
+ hasNextPage: boolean;
4444
+ /** Modo **remote**: pedido de mais dados (próxima página). */
4445
+ readonly loadMore: EventEmitter<void>;
4446
+ readonly edit: EventEmitter<T>;
4447
+ readonly remove: EventEmitter<T>;
3865
4448
  readonly booleanFieldChange: EventEmitter<{
4449
+ item: T;
3866
4450
  fieldKey: string;
3867
4451
  checked: boolean;
3868
4452
  }>;
3869
- protected get editActionIcon(): string;
3870
- onCardShellClick(ev: MouseEvent): void;
3871
- onEditClick(ev: Event): void;
3872
- onRemoveClick(ev: Event): void;
3873
- onBooleanFieldChange(field: CardItemBooleanField, ev: Event): void;
3874
- onThumbError(ev: Event): void;
3875
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataCardComponent, never>;
3876
- 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>;
4453
+ get hostFillHeight(): boolean;
4454
+ /** Modo memory: quantos cartões renderizar (fatia inicial = scrollBatchSize). */
4455
+ visibleCount: number;
4456
+ private loadMorePending;
4457
+ /** Skeleton que ocupa a lista inteira (carregamento inicial / refresh com `loading`). */
4458
+ get showFullSkeleton(): boolean;
4459
+ ngOnChanges(changes: SimpleChanges): void;
4460
+ ngAfterViewInit(): void;
4461
+ get totalItemCount(): number;
4462
+ /** Total para o rodapé “X de Y”. */
4463
+ get totalForStatus(): number;
4464
+ get visibleItems(): T[];
4465
+ get scrollStatusLabel(): string;
4466
+ /** Colunas efectivas para CSS (`repeat(n, minmax(0,1fr))`), entre 1 e 12. */
4467
+ get effectiveCardsPerRow(): number;
4468
+ /** Lista expande em altura no container (sem `max-height`) quando a barra vai ao topo ou fica oculta. */
4469
+ get scrollFillParent(): boolean;
4470
+ get showResultBar(): boolean;
4471
+ get scrollAreaStyle(): Record<string, string>;
4472
+ /** Há mais linhas para mostrar (memória) ou para pedir à API (remote). */
4473
+ get hasMoreToReveal(): boolean;
4474
+ viewFor(item: T): CardItemView;
4475
+ onCardBooleanFieldChange(item: T, ev: {
4476
+ fieldKey: string;
4477
+ checked: boolean;
4478
+ }): void;
4479
+ /** Poucos placeholders no carregamento inicial evitam barra de scroll temporária antes dos dados reais. */
4480
+ skeletonCardIndices(): number[];
4481
+ /** Um único cartão skeleton no fundo durante `loadingMore` (mantém o scroll estável). */
4482
+ skeletonTailIndices(): number[];
4483
+ hideEditActionForItem(item: T): boolean;
4484
+ rowForItem(item: T): Record<string, unknown>;
4485
+ trackFn: (index: number, item: T) => unknown;
4486
+ onScroll(ev: Event): void;
4487
+ /**
4488
+ * Quando a área interna não rola (ex.: mobile consulta com scroll na página),
4489
+ * `onScroll` não dispara — IntersectionObserver no sentinel observa o viewport.
4490
+ */
4491
+ private revealMoreOnScrollTrigger;
4492
+ private schedulePageScrollObserverRefresh;
4493
+ private setupScrollAreaResizeObserver;
4494
+ private teardownScrollAreaResizeObserver;
4495
+ private refreshPageScrollObserver;
4496
+ private teardownPageScrollObserver;
4497
+ /** Área `.card-list__scroll` com overflow activo e conteúdo maior que o viewport interno. */
4498
+ private isScrollAreaScrollable;
4499
+ private requestRemotePage;
4500
+ private loadMoreMemoryChunk;
4501
+ private resetVisibleWindow;
4502
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardListComponent<any>, never>;
4503
+ 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; }; "gridNavigatePreserve": { "alias": "gridNavigatePreserve"; "required": false; }; "totalCountRemote": { "alias": "totalCountRemote"; "required": false; }; "hasNextPage": { "alias": "hasNextPage"; "required": false; }; }, { "loadMore": "loadMore"; "edit": "edit"; "remove": "remove"; "booleanFieldChange": "booleanFieldChange"; }, never, never, true, never>;
4504
+ static ngAcceptInputType_loadingMore: unknown;
3877
4505
  static ngAcceptInputType_showEditAction: unknown;
3878
4506
  static ngAcceptInputType_showRemoveAction: unknown;
3879
- static ngAcceptInputType_hideEditAction: unknown;
3880
- static ngAcceptInputType_openOnClick: unknown;
3881
- }
3882
-
3883
- declare class EmptyStateComponent {
3884
- message: string;
3885
- description?: string;
3886
- /** Classe Font Awesome do ícone (ex.: `fa-solid fa-inbox`). */
3887
- iconClass: string;
3888
- variant: 'default';
3889
- /** Padding reduzido (ex.: células de tabela, listas densas). */
3890
- embed: boolean;
3891
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<EmptyStateComponent, never>;
3892
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmptyStateComponent, "app-empty-state", never, { "message": { "alias": "message"; "required": true; }; "description": { "alias": "description"; "required": false; }; "iconClass": { "alias": "iconClass"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "embed": { "alias": "embed"; "required": false; }; }, {}, never, never, true, never>;
3893
- static ngAcceptInputType_embed: unknown;
3894
- }
3895
-
3896
- type ConsoleLogLevel = 'debug' | 'info' | 'success' | 'warning' | 'error';
3897
- interface ConsoleLogLine {
3898
- timestamp?: Date | string | null;
3899
- nivel?: ConsoleLogLevel | string | null;
3900
- level?: ConsoleLogLevel | string | null;
3901
- etapa?: string | null;
3902
- step?: string | null;
3903
- mensagem?: string | null;
3904
- message?: string | null;
3905
- }
3906
-
3907
- /**
3908
- * Console estilo terminal: texto simples (`text`) ou linhas estruturadas (`lines`) com cores por nível.
3909
- */
3910
- declare class ConsoleLogComponent implements AfterViewChecked {
3911
- readonly text: _angular_core.InputSignal<string>;
3912
- readonly lines: _angular_core.InputSignal<readonly ConsoleLogLine[]>;
3913
- /** Preenche altura disponível do pai flex (ex.: modal com `[scrollBodyOnly]`). */
3914
- readonly fill: _angular_core.InputSignal<boolean>;
3915
- readonly useStructuredLines: _angular_core.Signal<boolean>;
3916
- readonly lineViews: _angular_core.Signal<structra_ui.ConsoleLogLineView[]>;
3917
- private readonly viewport;
3918
- private lastScrollRevision;
3919
- private readonly scrollRevision;
3920
- constructor();
3921
- ngAfterViewChecked(): void;
3922
- private scheduleScrollToTail;
3923
- private scrollToTail;
3924
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConsoleLogComponent, never>;
3925
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConsoleLogComponent, "app-console-log", never, { "text": { "alias": "text"; "required": false; "isSignal": true; }; "lines": { "alias": "lines"; "required": false; "isSignal": true; }; "fill": { "alias": "fill"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3926
- }
3927
-
3928
- interface ConsoleLogLineView {
3929
- levelClass: string;
3930
- timeLabel: string;
3931
- levelLabel: string;
3932
- stepLabel: string;
3933
- message: string;
3934
- }
3935
- declare function normalizeConsoleLogLevel(value: ConsoleLogLevel | string | null | undefined): ConsoleLogLevel;
3936
- declare function consoleLogLevelClass(value: ConsoleLogLevel | string | null | undefined): string;
3937
- declare function toConsoleLogLineView(line: ConsoleLogLine): ConsoleLogLineView;
3938
- declare function toConsoleLogLineViews(lines: readonly ConsoleLogLine[] | null | undefined): ConsoleLogLineView[];
3939
-
3940
- /**
3941
- * HTML injetado no AG Grid (`overlayNoRowsTemplate`) — manter alinhado ao markup de {@link EmptyStateComponent}.
3942
- */
3943
- declare function escapeHtml(text: string): string;
3944
- declare function buildEmptyStateOverlayHtml(message: string): string;
3945
-
3946
- /** Variantes visuais do `app-status-badge` (cores semânticas da lib). */
3947
- type StatusBadgeVariant = 'success' | 'error' | 'warning' | 'info' | 'neutral';
3948
- /** Tamanho do `app-status-badge`. */
3949
- type StatusBadgeSize = 'sm' | 'md';
3950
- /** Linha chave → valor para `app-details-view` (modo lista). */
3951
- interface DetailsViewItem {
3952
- label: string;
3953
- value?: string | null;
3954
- }
3955
- /** Tom da variação opcional no `app-stat-card` (ex.: +12% vs mês anterior). */
3956
- type StatCardDeltaTone = 'positive' | 'negative' | 'neutral';
3957
-
3958
- /**
3959
- * Etiqueta de estado (Ativo, Pendente, etc.) com fundo suave e cor semântica.
3960
- */
3961
- declare class StatusBadgeComponent {
3962
- label: string;
3963
- variant: StatusBadgeVariant;
3964
- /** Classes Font Awesome (ex.: `fa-solid fa-check`). */
3965
- icon: string;
3966
- size: StatusBadgeSize;
3967
- bordered: boolean;
3968
- readonly variantClassMap: Record<StatusBadgeVariant, string>;
3969
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatusBadgeComponent, never>;
3970
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatusBadgeComponent, "app-status-badge", never, { "label": { "alias": "label"; "required": true; }; "variant": { "alias": "variant"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "size": { "alias": "size"; "required": false; }; "bordered": { "alias": "bordered"; "required": false; }; }, {}, never, never, true, never>;
3971
- static ngAcceptInputType_bordered: unknown;
4507
+ static ngAcceptInputType_cardOpenOnClick: unknown;
4508
+ static ngAcceptInputType_cardsPerRow: unknown;
3972
4509
  }
3973
4510
 
4511
+ /** Limite de largura para tratar como “mobile” na escolha grid vs card (igual aos campos). */
4512
+ declare const ADAPTIVE_DATA_VIEW_MOBILE_QUERY = "(max-width: 767.98px)";
4513
+ type AdaptiveDataViewMode = 'grid' | 'card';
3974
4514
  /**
3975
- * Lista de descrição (chave valor) para detalhes, drawer ou resumo.
3976
- * Modo **lista**: `[items]`; modo **composto**: projectar `app-details-field` no conteúdo.
4515
+ * Escolhe **um** de `app-data-grid` ou `app-card-list` conforme breakpoint e preferências.
4516
+ * Nunca renderiza os dois em simultâneo.
3977
4517
  */
3978
- declare class DetailsViewComponent {
3979
- items: readonly DetailsViewItem[];
3980
- /**
3981
- * Se `true`, ignora `items` e renderiza só `<ng-content />` dentro de um `<dl>`
3982
- * (usar com `app-details-field` para valores ricos).
4518
+ declare class AdaptiveDataViewComponent<T = unknown> implements OnInit, OnChanges, OnDestroy {
4519
+ private readonly bp;
4520
+ private readonly cdr;
4521
+ private readonly destroyRef;
4522
+ /** Tempo mínimo em skeleton ao iniciar um carregamento (grid ou cartões), para evitar flick com respostas instantâneas. */
4523
+ private clearSkeletonDelayTimer;
4524
+ /** Momento em que {@link displayLoading} passou a `true` no ciclo actual. */
4525
+ private loadingShownAtMs;
4526
+ items: T[];
4527
+ gridColumns: DataGridColumn<T>[];
4528
+ mapItem: CardListMapFn<T>;
4529
+ pageSize: number;
4530
+ /** Altura do `app-data-grid` (`[height]`). Independente de {@link cardScrollMaxHeight}. */
4531
+ gridHeight: string | null;
4532
+ /**
4533
+ * Altura máx. com scroll do `app-card-list`. Configuração **separada** de {@link gridHeight}.
4534
+ * Com {@link gridFitPaginationHeight}, a grelha ignora `gridHeight` e calcula pela paginação.
4535
+ */
4536
+ cardScrollMaxHeight: string | null;
4537
+ gridFitPaginationHeight: boolean;
4538
+ /** Repassado ao `app-data-grid` quando {@link gridFitPaginationHeight} está activo (lista vazia). */
4539
+ gridFitPaginationMinEmptyRows: number;
4540
+ emptyMessageGrid: string;
4541
+ emptyMessageCard: string;
4542
+ pagination: boolean;
4543
+ showActionsColumn: boolean;
4544
+ showCardItemActions: boolean;
4545
+ /** Tooltip/aria do botão de abrir registo na coluna Ações ou no cartão. Omisso ⇒ «Alterar». */
4546
+ editActionLabel: string;
4547
+ /** Ícone Font Awesome do botão editar (ex.: `fa-paper-plane`). Omisso ⇒ `fa-pen-to-square`. */
4548
+ editActionIconClass: string;
4549
+ /** Lista em cartões: clique no cartão dispara `edit` (como «Alterar»); botões mantêm-se independentes. */
4550
+ cardOpenOnClick: boolean;
4551
+ scrollBatchSize: number;
4552
+ showCardFooter: boolean;
4553
+ /**
4554
+ * Lista em cartões: posição da barra «X de Y». `footer` (omissão), `header` ou `hidden`.
4555
+ * Com `header` ou `hidden`, {@link cardScrollMaxHeight} é ignorado e a lista tenta ocupar a altura do pai em flex.
4556
+ */
4557
+ headerPosition: CardListHeaderPosition;
4558
+ /**
4559
+ * Lista em cartões: colunas da grelha (cartões por linha); repassado ao `app-card-list`.
4560
+ * Por omissão `1`; na vista em grelha AG (`desktopView`/`mobileView` = `grid`) não tem efeito.
4561
+ */
4562
+ cardsPerRow: number;
4563
+ /** Estado de carregamento reposto no grid ou na lista conforme a vista ativa. */
4564
+ loading: boolean;
4565
+ /**
4566
+ * Duração mínima (ms) em que o skeleton permanece visível após cada vez que `loading` fica `true`,
4567
+ * mesmo que os dados cheguem antes. `0` desactiva o atraso.
4568
+ */
4569
+ loadingSkeletonMinMs: number;
4570
+ /**
4571
+ * Skeleton placeholder da grelha: faixa de paginação só com chrome (sem «0 a 0 de 0»).
4572
+ * Repasse ao `app-data-grid` — activar só no arranque antes do metadata/lista.
4573
+ */
4574
+ gridPlaceholderPagerChromeOnly: boolean;
4575
+ /**
4576
+ * Mostra uma linha de contagem **abaixo** da grade ou da lista (incluindo paginação interna).
4577
+ * Texto padrão em português; use `{count}` como marcador do número de linhas em `items`.
4578
+ */
4579
+ showResultCount: boolean;
4580
+ resultCountTemplate: string;
4581
+ /** Vista quando `ADAPTIVE_DATA_VIEW_MOBILE_QUERY` corresponde. Por padrão `card`. */
4582
+ mobileView: AdaptiveDataViewMode;
4583
+ /** Vista quando a tela é maior. Por padrão `grid`. */
4584
+ desktopView: AdaptiveDataViewMode;
4585
+ showDuplicateAction: boolean;
4586
+ showPrintAction: boolean;
4587
+ printActionLabel: string;
4588
+ showEditAction: boolean;
4589
+ showRemoveAction: boolean;
4590
+ /** Chave da tela para persistência de layout AG Grid (repasse ao `app-data-grid`). */
4591
+ layoutTelaKey: string | null;
4592
+ /** Chave do grid na mesma tela. Omisso: `consulta-principal`. */
4593
+ layoutGridKey: string;
4594
+ /** Preservação de scroll/sessão ao navegar via `[GridNavigate]` na grelha. */
4595
+ gridNavigatePreserve: GridNavigatePreserveContext | null;
4596
+ readonly edit: EventEmitter<T>;
4597
+ readonly duplicate: EventEmitter<T>;
4598
+ readonly print: EventEmitter<T>;
4599
+ readonly remove: EventEmitter<T>;
4600
+ readonly loadMore: EventEmitter<void>;
4601
+ /** Corresponde ao breakpoint mobile. */
4602
+ isMobileLayout: boolean;
4603
+ /** Valor efectivo reposto ao grid / lista (respeita {@link loadingSkeletonMinMs}). */
4604
+ displayLoading: boolean;
4605
+ /** Skeleton só quando `loading` e a lista ainda está vazia (cache / refresh mantém dados visíveis). */
4606
+ private shouldShowLoadingSkeleton;
4607
+ ngOnInit(): void;
4608
+ ngOnChanges(changes: SimpleChanges): void;
4609
+ ngOnDestroy(): void;
4610
+ /** Quando o pai pede `loading === false`, só oculta o skeleton após cumprir o tempo mínimo desde `loading === true`. */
4611
+ private applyLoadingFalseWithMinSkeleton;
4612
+ get effectiveKind(): AdaptiveDataViewMode;
4613
+ get showGrid(): boolean;
4614
+ get showCard(): boolean;
4615
+ /** Modo cartão com lista a expandir em altura (sem `max-height` na área de scroll). */
4616
+ get cardScrollFillsParent(): boolean;
4617
+ /** Repasse ao `app-card-list`: mantém `cardScrollMaxHeight` só quando a lista não preenche o pai. */
4618
+ get effectiveCardScrollMaxHeight(): string | null;
4619
+ get resultCountDisplay(): string;
4620
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AdaptiveDataViewComponent<any>, never>;
4621
+ 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; }; "gridPlaceholderPagerChromeOnly": { "alias": "gridPlaceholderPagerChromeOnly"; "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; }; "gridNavigatePreserve": { "alias": "gridNavigatePreserve"; "required": false; }; }, { "edit": "edit"; "duplicate": "duplicate"; "print": "print"; "remove": "remove"; "loadMore": "loadMore"; }, never, never, true, never>;
4622
+ static ngAcceptInputType_gridFitPaginationHeight: unknown;
4623
+ static ngAcceptInputType_gridFitPaginationMinEmptyRows: unknown;
4624
+ static ngAcceptInputType_cardOpenOnClick: unknown;
4625
+ static ngAcceptInputType_cardsPerRow: unknown;
4626
+ static ngAcceptInputType_loadingSkeletonMinMs: unknown;
4627
+ static ngAcceptInputType_gridPlaceholderPagerChromeOnly: unknown;
4628
+ static ngAcceptInputType_showDuplicateAction: unknown;
4629
+ static ngAcceptInputType_showPrintAction: unknown;
4630
+ static ngAcceptInputType_showEditAction: unknown;
4631
+ static ngAcceptInputType_showRemoveAction: unknown;
4632
+ }
4633
+
4634
+ declare class DataCardComponent implements OnChanges {
4635
+ private readonly publicBase;
4636
+ private readonly cdr;
4637
+ private readonly router;
4638
+ private readonly routeAccess;
4639
+ title: string;
4640
+ subtitle?: string;
4641
+ /** 1–2 caracteres para o círculo de iniciais. */
4642
+ avatarText?: string;
4643
+ /** Miniatura (ex.: foto do item em coleção só-leitura). */
4644
+ imageUrl?: string;
4645
+ /** Campos extras (ex.: checkbox só leitura para boolean). */
4646
+ metaFields?: readonly CardItemMetaField[];
4647
+ /** Linha de origem para navegação declarativa (`[GridNavigate]`). */
4648
+ row?: Record<string, unknown>;
4649
+ /** Ações de navegação derivadas das colunas da grelha. */
4650
+ navigateActions?: readonly CardItemNavigateAction[];
4651
+ /** Preservação de scroll/sessão ao navegar (consulta de origem). */
4652
+ gridNavigatePreserve: GridNavigatePreserveContext | null;
4653
+ protected thumbBroken: boolean;
4654
+ ngOnChanges(changes: SimpleChanges): void;
4655
+ protected get displayImageUrl(): string;
4656
+ variant: 'default';
4657
+ showActions: boolean;
4658
+ /** Omisso / `true`: mostra o botão «Alterar» quando {@link showActions} é `true`. */
4659
+ showEditAction: boolean;
4660
+ editActionLabel: string;
4661
+ editActionIconClass: string;
4662
+ /** Omisso / `true`: mostra o botão «Remover» quando {@link showActions} é `true`. */
4663
+ showRemoveAction: boolean;
4664
+ /** Quando `true`, omite o botão «Alterar» neste cartão (ex.: ação por linha na consulta). */
4665
+ hideEditAction: boolean;
4666
+ /**
4667
+ * Clique na superfície do cartão (fora dos botões de ação) emite {@link edit}, como o botão «Alterar».
4668
+ */
4669
+ openOnClick: boolean;
4670
+ readonly edit: EventEmitter<void>;
4671
+ readonly remove: EventEmitter<void>;
4672
+ readonly booleanFieldChange: EventEmitter<{
4673
+ fieldKey: string;
4674
+ checked: boolean;
4675
+ }>;
4676
+ protected get editActionIcon(): string;
4677
+ protected visibleNavigateActions(): readonly CardItemNavigateAction[];
4678
+ protected navigateTooltip(action: CardItemNavigateAction): string;
4679
+ protected navigateIconClass(action: CardItemNavigateAction): string;
4680
+ onCardShellClick(ev: MouseEvent): void;
4681
+ onEditClick(ev: Event): void;
4682
+ onRemoveClick(ev: Event): void;
4683
+ onNavigateClick(action: CardItemNavigateAction, ev: Event): void;
4684
+ onBooleanFieldChange(field: CardItemBooleanField, ev: Event): void;
4685
+ onThumbError(ev: Event): void;
4686
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataCardComponent, never>;
4687
+ 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; }; "row": { "alias": "row"; "required": false; }; "navigateActions": { "alias": "navigateActions"; "required": false; }; "gridNavigatePreserve": { "alias": "gridNavigatePreserve"; "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>;
4688
+ static ngAcceptInputType_showEditAction: unknown;
4689
+ static ngAcceptInputType_showRemoveAction: unknown;
4690
+ static ngAcceptInputType_hideEditAction: unknown;
4691
+ static ngAcceptInputType_openOnClick: unknown;
4692
+ }
4693
+
4694
+ declare class EmptyStateComponent {
4695
+ message: string;
4696
+ /** Título discreto acima da mensagem (ex.: nome do relatório). */
4697
+ titulo?: string;
4698
+ description?: string;
4699
+ /** Classe Font Awesome do ícone (ex.: `fa-solid fa-inbox`). */
4700
+ iconClass: string;
4701
+ variant: 'default';
4702
+ /** Padding reduzido (ex.: células de tabela, listas densas). */
4703
+ embed: boolean;
4704
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EmptyStateComponent, never>;
4705
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmptyStateComponent, "app-empty-state", never, { "message": { "alias": "message"; "required": true; }; "titulo": { "alias": "titulo"; "required": false; }; "description": { "alias": "description"; "required": false; }; "iconClass": { "alias": "iconClass"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "embed": { "alias": "embed"; "required": false; }; }, {}, never, ["[emptyAction]"], true, never>;
4706
+ static ngAcceptInputType_embed: unknown;
4707
+ }
4708
+
4709
+ type ConsoleLogLevel = 'debug' | 'info' | 'success' | 'warning' | 'error';
4710
+ interface ConsoleLogLine {
4711
+ timestamp?: Date | string | null;
4712
+ nivel?: ConsoleLogLevel | string | null;
4713
+ level?: ConsoleLogLevel | string | null;
4714
+ etapa?: string | null;
4715
+ step?: string | null;
4716
+ mensagem?: string | null;
4717
+ message?: string | null;
4718
+ }
4719
+
4720
+ /**
4721
+ * Console estilo terminal: texto simples (`text`) ou linhas estruturadas (`lines`) com cores por nível.
4722
+ */
4723
+ declare class ConsoleLogComponent implements AfterViewChecked {
4724
+ readonly text: _angular_core.InputSignal<string>;
4725
+ readonly lines: _angular_core.InputSignal<readonly ConsoleLogLine[]>;
4726
+ /** Preenche altura disponível do pai flex (ex.: modal com `[scrollBodyOnly]`). */
4727
+ readonly fill: _angular_core.InputSignal<boolean>;
4728
+ readonly useStructuredLines: _angular_core.Signal<boolean>;
4729
+ readonly lineViews: _angular_core.Signal<structra_ui.ConsoleLogLineView[]>;
4730
+ private readonly viewport;
4731
+ private lastScrollRevision;
4732
+ private readonly scrollRevision;
4733
+ constructor();
4734
+ ngAfterViewChecked(): void;
4735
+ private scheduleScrollToTail;
4736
+ private scrollToTail;
4737
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConsoleLogComponent, never>;
4738
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConsoleLogComponent, "app-console-log", never, { "text": { "alias": "text"; "required": false; "isSignal": true; }; "lines": { "alias": "lines"; "required": false; "isSignal": true; }; "fill": { "alias": "fill"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4739
+ }
4740
+
4741
+ interface ConsoleLogLineView {
4742
+ levelClass: string;
4743
+ timeLabel: string;
4744
+ levelLabel: string;
4745
+ stepLabel: string;
4746
+ message: string;
4747
+ }
4748
+ declare function normalizeConsoleLogLevel(value: ConsoleLogLevel | string | null | undefined): ConsoleLogLevel;
4749
+ declare function consoleLogLevelClass(value: ConsoleLogLevel | string | null | undefined): string;
4750
+ declare function toConsoleLogLineView(line: ConsoleLogLine): ConsoleLogLineView;
4751
+ declare function toConsoleLogLineViews(lines: readonly ConsoleLogLine[] | null | undefined): ConsoleLogLineView[];
4752
+
4753
+ /**
4754
+ * HTML injetado no AG Grid (`overlayNoRowsTemplate`) — manter alinhado ao markup de {@link EmptyStateComponent}.
4755
+ */
4756
+ declare function escapeHtml(text: string): string;
4757
+ declare function buildEmptyStateOverlayHtml(message: string): string;
4758
+
4759
+ /** Variantes visuais do `app-status-badge` (cores semânticas da lib). */
4760
+ type StatusBadgeVariant = 'success' | 'error' | 'warning' | 'info' | 'neutral';
4761
+ /** Tamanho do `app-status-badge`. */
4762
+ type StatusBadgeSize = 'sm' | 'md';
4763
+ /** Linha chave → valor para `app-details-view` (modo lista). */
4764
+ interface DetailsViewItem {
4765
+ label: string;
4766
+ value?: string | null;
4767
+ }
4768
+ /** Tom da variação opcional no `app-stat-card` (ex.: +12% vs mês anterior). */
4769
+ type StatCardDeltaTone = 'positive' | 'negative' | 'neutral';
4770
+
4771
+ /**
4772
+ * Etiqueta de estado (Ativo, Pendente, etc.) com fundo suave e cor semântica.
4773
+ */
4774
+ declare class StatusBadgeComponent {
4775
+ label: string;
4776
+ variant: StatusBadgeVariant;
4777
+ /** Classes Font Awesome (ex.: `fa-solid fa-check`). */
4778
+ icon: string;
4779
+ size: StatusBadgeSize;
4780
+ bordered: boolean;
4781
+ readonly variantClassMap: Record<StatusBadgeVariant, string>;
4782
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatusBadgeComponent, never>;
4783
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatusBadgeComponent, "app-status-badge", never, { "label": { "alias": "label"; "required": true; }; "variant": { "alias": "variant"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "size": { "alias": "size"; "required": false; }; "bordered": { "alias": "bordered"; "required": false; }; }, {}, never, never, true, never>;
4784
+ static ngAcceptInputType_bordered: unknown;
4785
+ }
4786
+
4787
+ /**
4788
+ * Lista de descrição (chave → valor) para detalhes, drawer ou resumo.
4789
+ * Modo **lista**: `[items]`; modo **composto**: projectar `app-details-field` no conteúdo.
4790
+ */
4791
+ declare class DetailsViewComponent {
4792
+ items: readonly DetailsViewItem[];
4793
+ /**
4794
+ * Se `true`, ignora `items` e renderiza só `<ng-content />` dentro de um `<dl>`
4795
+ * (usar com `app-details-field` para valores ricos).
3983
4796
  */
3984
4797
  projectionOnly: boolean;
3985
4798
  /** `2` ativa grade em dois tempos em telas largas. */
@@ -4156,6 +4969,7 @@ declare class TreeViewComponent implements OnChanges, OnInit, OnDestroy {
4156
4969
  private static nextHeadingId;
4157
4970
  private static nextFilterId;
4158
4971
  private readonly cdr;
4972
+ private readonly expandState;
4159
4973
  /** `id` estável para `aria-labelledby` no `role="tree"` — evita `aria-label` igual ao título (tooltip nativo em alguns browsers). */
4160
4974
  readonly treeHeadingDomId: string;
4161
4975
  /** `id` estável do campo de filtro (acessibilidade). */
@@ -4202,6 +5016,13 @@ declare class TreeViewComponent implements OnChanges, OnInit, OnDestroy {
4202
5016
  * Omisso / `true`: ícone por omissão (ou `node.iconClass`); `false`: spacer alinhado às linhas com ícone.
4203
5017
  */
4204
5018
  showLeafIcons: boolean;
5019
+ /**
5020
+ * Identificador da árvore para cache em memória de expansão (tenant + rota + treeId).
5021
+ * Quando definido, restaura estado da sessão ou usa `node.expanded` só na primeira visita.
5022
+ */
5023
+ expandStateTreeId: string | null;
5024
+ /** Rota explícita para a chave de cache; omissão = `Router.url` actual. */
5025
+ expandStateRoute: string | null;
4205
5026
  /**
4206
5027
  * Chave externa para repor `expandedIds` a partir de `node.expanded`, mesmo quando `nodes` não muda.
4207
5028
  * Útil ao reentrar numa rota com reuse ou ao remontar a árvore sem substituir os nós.
@@ -4234,16 +5055,61 @@ declare class TreeViewComponent implements OnChanges, OnInit, OnDestroy {
4234
5055
  toggleBranch(node: TreeViewNode): void;
4235
5056
  onRowActivate(node: TreeViewNode): void;
4236
5057
  private rebuildExpandedFromDefaults;
5058
+ private readCachedExpandedIds;
5059
+ private persistExpandedState;
5060
+ private persistSelectedState;
5061
+ private tryRestoreSelectedFromCache;
5062
+ private findNodeById;
5063
+ private expandPathToNode;
5064
+ private findPathToNode;
4237
5065
  /** Com pesquisa activa, expande todos os ramos da árvore filtrada para mostrar correspondências. */
4238
5066
  private refreshExpandedForSearch;
4239
5067
  private expandAllBranchesRecursive;
4240
5068
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TreeViewComponent, never>;
4241
- 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>;
5069
+ 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; }; "expandStateTreeId": { "alias": "expandStateTreeId"; "required": false; }; "expandStateRoute": { "alias": "expandStateRoute"; "required": false; }; "expansionStateKey": { "alias": "expansionStateKey"; "required": false; }; }, { "selectedIdChange": "selectedIdChange"; "nodeSelect": "nodeSelect"; }, never, never, true, never>;
4242
5070
  static ngAcceptInputType_filterSearchable: unknown;
4243
5071
  static ngAcceptInputType_showBranchIcons: unknown;
4244
5072
  static ngAcceptInputType_showLeafIcons: unknown;
4245
5073
  }
4246
5074
 
5075
+ interface TreeExpandState {
5076
+ key: string;
5077
+ route: string;
5078
+ expandedIds: Set<string>;
5079
+ /** Folha seleccionada na sessão (`null` = nenhuma). */
5080
+ selectedId: string | null;
5081
+ timestamp: number;
5082
+ }
5083
+
5084
+ declare class StructraTreeExpandStateService {
5085
+ private readonly router;
5086
+ private readonly tenantResolver;
5087
+ private readonly store;
5088
+ buildKey(treeId: string, route?: string): string;
5089
+ saveExpanded(key: string, expandedIds: Iterable<string>, route?: string): void;
5090
+ saveExpandedForTree(treeId: string, expandedIds: Iterable<string>, route?: string): void;
5091
+ getExpanded(key: string): Set<string> | null;
5092
+ getExpandedForTree(treeId: string, route?: string): Set<string> | null;
5093
+ saveSelected(key: string, selectedId: string | null, route?: string): void;
5094
+ saveSelectedForTree(treeId: string, selectedId: string | null, route?: string): void;
5095
+ getSelected(key: string): string | null;
5096
+ getSelectedForTree(treeId: string, route?: string): string | null;
5097
+ toggle(key: string, nodeId: string): boolean;
5098
+ toggleForTree(treeId: string, nodeId: string, route?: string): boolean;
5099
+ clear(key: string): void;
5100
+ clearForTree(treeId: string, route?: string): void;
5101
+ clearByRoute(route: string): void;
5102
+ clearAll(): void;
5103
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraTreeExpandStateService, never>;
5104
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<StructraTreeExpandStateService>;
5105
+ }
5106
+
5107
+ /**
5108
+ * Activa {@link StructraTreeExpandStateService} e liga reset de sessão (logout / troca de tenant)
5109
+ * via {@link STRUCTRA_SCROLL_SESSION_RESET}.
5110
+ */
5111
+ declare function provideStructraTreeExpandState(): EnvironmentProviders;
5112
+
4247
5113
  /** Largura máxima do painel `app-dialog` (conteúdo responsivo). */
4248
5114
  declare enum LibDialogSize {
4249
5115
  Sm = "sm",
@@ -5110,6 +5976,49 @@ declare class StructraProgressOverlayComponent {
5110
5976
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraProgressOverlayComponent, "app-structra-progress-overlay", never, { "ativo": { "alias": "ativo"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "mensagem": { "alias": "mensagem"; "required": false; "isSignal": true; }; "progress": { "alias": "progress"; "required": false; "isSignal": true; }; "percentual": { "alias": "percentual"; "required": false; "isSignal": true; }; "showProgress": { "alias": "exibirProgresso"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "rotuloAria"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5111
5977
  }
5112
5978
 
5979
+ declare class StructraCookieNoticeComponent {
5980
+ private readonly cookieNotice;
5981
+ readonly visible: _angular_core.Signal<boolean>;
5982
+ readonly copy: _angular_core.Signal<Required<structra_ui.StructraCookieNoticeConfig>>;
5983
+ readonly hiding: _angular_core.WritableSignal<boolean>;
5984
+ accept(): void;
5985
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraCookieNoticeComponent, never>;
5986
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraCookieNoticeComponent, "app-structra-cookie-notice", never, {}, {}, never, never, true, never>;
5987
+ }
5988
+
5989
+ declare class StructraCookieNoticeService {
5990
+ private readonly config;
5991
+ private readonly visibleSignal;
5992
+ readonly copy: _angular_core.Signal<Required<structra_ui.StructraCookieNoticeConfig>>;
5993
+ readonly isVisible: _angular_core.Signal<boolean>;
5994
+ accept(): void;
5995
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraCookieNoticeService, never>;
5996
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<StructraCookieNoticeService>;
5997
+ }
5998
+
5999
+ declare const DEFAULT_STRUCTRA_COOKIE_NOTICE_STORAGE_KEY = "structra_cookie_notice_accepted";
6000
+ declare const DEFAULT_STRUCTRA_COOKIE_NOTICE_TITLE = "Usamos cookies essenciais";
6001
+ declare const DEFAULT_STRUCTRA_COOKIE_NOTICE_DESCRIPTION: string;
6002
+ declare const DEFAULT_STRUCTRA_COOKIE_NOTICE_ACCEPT_LABEL = "Entendido";
6003
+ declare function structraCookieNoticeWasAccepted(storageKey: string): boolean;
6004
+ declare function persistStructraCookieNoticeAccepted(storageKey: string): void;
6005
+
6006
+ /** Textos e chave de persistência do aviso de cookies essenciais. */
6007
+ interface StructraCookieNoticeConfig {
6008
+ /** Chave em `localStorage`. Padrão: `structra_cookie_notice_accepted`. */
6009
+ storageKey?: string;
6010
+ title?: string;
6011
+ description?: string;
6012
+ acceptLabel?: string;
6013
+ regionAriaLabel?: string;
6014
+ acceptAriaLabel?: string;
6015
+ closeAriaLabel?: string;
6016
+ }
6017
+ declare const STRUCTRA_COOKIE_NOTICE_CONFIG: InjectionToken<StructraCookieNoticeConfig>;
6018
+ declare function resolveStructraCookieNoticeConfig(config: StructraCookieNoticeConfig | null | undefined): Required<StructraCookieNoticeConfig>;
6019
+ /** Provider no `app.config` — personalize chave e textos por produto. */
6020
+ declare function provideStructraCookieNotice(config?: StructraCookieNoticeConfig): Provider;
6021
+
5113
6022
  /**
5114
6023
  * Constrói posições CDK para overlay ancorado (tooltip, popover, autocomplete, etc.).
5115
6024
  * Inclui alternativas para inverter quando não há espaço (`push` no componente).
@@ -5127,6 +6036,15 @@ declare const APP_SIDEBAR_LAYOUT_DURATION_MS = 0;
5127
6036
  declare const APP_SIDEBAR_LABEL_REVEAL_LAG_MS = 48;
5128
6037
  declare const APP_SIDEBAR_NAV_REVEAL_TOTAL_MS: number;
5129
6038
 
6039
+ declare const DEFAULT_STRUCTRA_SHELL_SIDEBAR_COLLAPSED_STORAGE_KEY = "structra_shell_sidebar_collapsed";
6040
+ /**
6041
+ * Lê preferência de recolhimento da sidebar em desktop.
6042
+ * `null` = sem valor em cache (usar expandido por omissão).
6043
+ */
6044
+ declare function readStructraShellSidebarCollapsed(storageKey: string): boolean | null;
6045
+ /** Persiste preferência após interação do utilizador no toggle desktop. */
6046
+ declare function persistStructraShellSidebarCollapsed(storageKey: string, collapsed: boolean): void;
6047
+
5130
6048
  /**
5131
6049
  * Estrutura principal: barra lateral, topo e conteúdo. Em mobile a lateral projecta-se no `app-drawer`.
5132
6050
  *
@@ -5148,6 +6066,13 @@ declare class AppShellComponent implements OnInit {
5148
6066
  /** Barra lateral estreita (ícones + compressão de texto na lista). */
5149
6067
  sidebarCollapsed: boolean;
5150
6068
  readonly sidebarCollapsedChange: EventEmitter<boolean>;
6069
+ /**
6070
+ * Em desktop, restaura e persiste `sidebarCollapsed` em `localStorage` após toggle.
6071
+ * Mobile/drawer não grava nem restaura — só o rail desktop.
6072
+ */
6073
+ persistSidebarCollapsed: boolean;
6074
+ /** Chave em `localStorage` para a preferência desktop. */
6075
+ sidebarCollapsedStorageKey: string;
5151
6076
  /** Estado do drawer mobile (usar `[(mobileNavOpen)]` para controlar o menu hamburger). */
5152
6077
  mobileNavOpen: boolean;
5153
6078
  readonly mobileNavOpenChange: EventEmitter<boolean>;
@@ -5160,6 +6085,7 @@ declare class AppShellComponent implements OnInit {
5160
6085
  readonly DrawerSide: typeof DrawerSide;
5161
6086
  readonly DrawerSize: typeof DrawerSize;
5162
6087
  ngOnInit(): void;
6088
+ private restoreSidebarCollapsedFromStorage;
5163
6089
  onMobileDrawerOpenChange(next: boolean): void;
5164
6090
  /** Emite alteração; com `[(mobileNavOpen)]` no pai o `@Input` actualiza o estado do drawer. */
5165
6091
  private emitMobileNavOpen;
@@ -5168,8 +6094,9 @@ declare class AppShellComponent implements OnInit {
5168
6094
  closeMobileNav(): void;
5169
6095
  private syncDedicatedBackToTopPresence;
5170
6096
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppShellComponent, never>;
5171
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppShellComponent, "app-shell", ["appShell"], { "appTheme": { "alias": "appTheme"; "required": false; "isSignal": true; }; "sidebarCollapsed": { "alias": "sidebarCollapsed"; "required": false; }; "mobileNavOpen": { "alias": "mobileNavOpen"; "required": false; }; "mobileLayoutQuery": { "alias": "mobileLayoutQuery"; "required": false; }; }, { "sidebarCollapsedChange": "sidebarCollapsedChange"; "mobileNavOpenChange": "mobileNavOpenChange"; }, ["sidebarSlot"], ["[appShellTopbar]", "*"], true, never>;
6097
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppShellComponent, "app-shell", ["appShell"], { "appTheme": { "alias": "appTheme"; "required": false; "isSignal": true; }; "sidebarCollapsed": { "alias": "sidebarCollapsed"; "required": false; }; "persistSidebarCollapsed": { "alias": "persistSidebarCollapsed"; "required": false; }; "sidebarCollapsedStorageKey": { "alias": "sidebarCollapsedStorageKey"; "required": false; }; "mobileNavOpen": { "alias": "mobileNavOpen"; "required": false; }; "mobileLayoutQuery": { "alias": "mobileLayoutQuery"; "required": false; }; }, { "sidebarCollapsedChange": "sidebarCollapsedChange"; "mobileNavOpenChange": "mobileNavOpenChange"; }, ["sidebarSlot"], ["[appShellTopbar]", "*"], true, never>;
5172
6098
  static ngAcceptInputType_sidebarCollapsed: unknown;
6099
+ static ngAcceptInputType_persistSidebarCollapsed: unknown;
5173
6100
  static ngAcceptInputType_mobileNavOpen: unknown;
5174
6101
  }
5175
6102
 
@@ -5467,7 +6394,9 @@ declare class StructraSidebarUserPanelComponent {
5467
6394
  /** Rodapé institucional (login e área autenticada): textos via DI ou input `parts`. */
5468
6395
  declare class StructraPageFooterComponent {
5469
6396
  private readonly configuredParts;
5470
- /** Sobrescreve partes do rodapé (omisso: {@link STRUCTRA_PAGE_FOOTER_PARTS} ou fallback genérico). */
6397
+ private readonly footerConfig;
6398
+ private readonly versionService;
6399
+ /** Sobrescreve partes do rodapé (omisso: tokens DI ou fallback genérico). */
5471
6400
  readonly partsInput: _angular_core.InputSignal<readonly string[] | null>;
5472
6401
  readonly parts: _angular_core.Signal<readonly string[]>;
5473
6402
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraPageFooterComponent, never>;
@@ -5478,13 +6407,21 @@ declare class StructraPageFooterComponent {
5478
6407
  interface StructraPageFooterConfig {
5479
6408
  /** Nome do produto exibido no copyright (ex.: ErpTemplate). */
5480
6409
  productName: string;
5481
- /** Versão exibida (ex.: 1.0.0). Omisso: omite a linha «Versão …». */
6410
+ /** Versão estática (omisso quando {@link dynamicVersion} é true). */
5482
6411
  version?: string;
6412
+ /** Busca versão em GET /api/app/version (cache em memória, fallback seguro). */
6413
+ dynamicVersion?: boolean;
6414
+ /** Versão exibida enquanto carrega ou se a API falhar. Padrão: `1.0.0`. */
6415
+ fallbackVersion?: string;
6416
+ /** Caminho/URL da API de versão quando {@link dynamicVersion} é true. */
6417
+ apiPath?: string;
5483
6418
  /** Ano do copyright. Omisso: ano corrente no cliente. */
5484
6419
  copyrightYear?: number;
5485
6420
  /** Partes extras após copyright e versão. */
5486
6421
  extraParts?: readonly string[];
5487
6422
  }
6423
+ /** Configuração ativa do rodapé com versão dinâmica. */
6424
+ declare const STRUCTRA_PAGE_FOOTER_CONFIG: InjectionToken<StructraPageFooterConfig>;
5488
6425
  /** Partes literais do rodapé — alternativa à {@link StructraPageFooterConfig}. */
5489
6426
  declare const STRUCTRA_PAGE_FOOTER_PARTS: InjectionToken<readonly string[]>;
5490
6427
  /**
@@ -5492,10 +6429,64 @@ declare const STRUCTRA_PAGE_FOOTER_PARTS: InjectionToken<readonly string[]>;
5492
6429
  */
5493
6430
  declare function buildStructraPageFooterParts(config: StructraPageFooterConfig): readonly string[];
5494
6431
  /** Provider único no `app.config` — substitui `footer-meta.ts` por consumidor. */
5495
- declare function provideStructraPageFooter(config: StructraPageFooterConfig): Provider;
6432
+ declare function provideStructraPageFooter(config: StructraPageFooterConfig): Provider | Provider[];
5496
6433
  /** @deprecated Alias legado — preferir {@link provideStructraPageFooter}. */
5497
6434
  declare const provideAppPageFooter: typeof provideStructraPageFooter;
5498
6435
 
6436
+ /** Metadados de versão expostos pelo backend (GET /api/app/version). */
6437
+ interface AppVersionInfo {
6438
+ version: string;
6439
+ environment?: string | null;
6440
+ buildDate?: string | null;
6441
+ commitSha?: string | null;
6442
+ branch?: string | null;
6443
+ applicationName?: string | null;
6444
+ }
6445
+ /** Alias legado PT — mesmo contrato de {@link AppVersionInfo}. */
6446
+ type StructraVersionInfo = AppVersionInfo;
6447
+
6448
+ /** Configuração do fetch de versão da aplicação. */
6449
+ interface StructraAppVersionConfig {
6450
+ /** Caminho relativo ou URL absoluta. Padrão: `/api/app/version`. */
6451
+ apiPath?: string;
6452
+ /** Versão exibida quando a API falhar ou ainda não respondeu. Padrão: `1.0.0`. */
6453
+ fallbackVersion?: string;
6454
+ }
6455
+ declare const STRUCTRA_APP_VERSION_CONFIG: InjectionToken<StructraAppVersionConfig>;
6456
+ declare const DEFAULT_STRUCTRA_APP_VERSION_API_PATH = "/api/app/version";
6457
+ declare const DEFAULT_STRUCTRA_APP_VERSION_FALLBACK = "1.0.0";
6458
+ declare function resolveStructraAppVersionConfig(config: StructraAppVersionConfig | null | undefined): Required<Pick<StructraAppVersionConfig, 'apiPath' | 'fallbackVersion'>>;
6459
+ /** Provider no `app.config` — busca versão uma vez e mantém cache em memória. */
6460
+ declare function provideStructraAppVersion(config?: StructraAppVersionConfig): Provider;
6461
+ /** @deprecated Alias legado — preferir {@link provideStructraAppVersion}. */
6462
+ declare const provideAppVersion: typeof provideStructraAppVersion;
6463
+
6464
+ /**
6465
+ * Busca a versão da aplicação uma vez, cacheia em memória e falha de forma segura
6466
+ * (não bloqueia login nem renderização).
6467
+ */
6468
+ declare class StructraAppVersionService {
6469
+ private readonly http;
6470
+ private readonly config;
6471
+ private loadStarted;
6472
+ private readonly info;
6473
+ /** Versão resolvida (`null` enquanto carrega e sem fallback aplicado ainda). */
6474
+ readonly version: _angular_core.WritableSignal<string | null>;
6475
+ /** `true` durante o primeiro fetch. */
6476
+ readonly loading: _angular_core.WritableSignal<boolean>;
6477
+ constructor();
6478
+ /** Dispara o fetch sem bloquear a UI. */
6479
+ prefetch(): void;
6480
+ getInfo(): AppVersionInfo | null;
6481
+ /** Rótulo pronto para o rodapé — `null` se ainda não houver versão. */
6482
+ versionLabel(): string | null;
6483
+ private ensureLoaded;
6484
+ private applyFallback;
6485
+ private resolveUrl;
6486
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraAppVersionService, never>;
6487
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<StructraAppVersionService>;
6488
+ }
6489
+
5499
6490
  /**
5500
6491
  * Barra superior com zonas de projeção: início, título, **subtítulo (opcional)** e fim.
5501
6492
  * Sem `[appTopbarSubtitle]` o bloco do subtítulo não ocupa espaço.
@@ -5651,630 +6642,156 @@ declare class AdminLoginPageComponent implements OnChanges {
5651
6642
  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>;
5652
6643
  }
5653
6644
 
6645
+ /** Normaliza path de rota para comparação (sem query/hash, sem barra final). */
6646
+ declare function normalizarCaminhoLoginAdmin(rawUrl: string): string;
6647
+ /**
6648
+ * Navega para a rota pós-login e mantém o loading ativo até a transição concluir.
6649
+ *
6650
+ * Em sucesso, **não** altera loading — o componente de login é desmontado ao sair da rota.
6651
+ * Em falha (`navigateByUrl` retorna false ou exceção), invoca `onFalhaNavegacao` (ex.: `loading.set(false)`).
6652
+ */
6653
+ declare function navegarAposLoginAdmin(router: Router, destino: string, onFalhaNavegacao: () => void): void;
6654
+
5654
6655
  /** Alinhado ao backend (`DynamicConsultaWhereBuilder`): operadores em minúsculas. */
5655
6656
  type ConsultaValorTipo = 'string' | 'bool' | 'datetime' | 'number';
5656
6657
  interface ConsultaCampoDef {
5657
6658
  campo: string;
5658
6659
  label: string;
5659
- tipo: ConsultaValorTipo;
5660
- }
5661
- interface ConsultaOperadorOption {
5662
- id: string;
5663
- label: string;
5664
- }
5665
- /** Paginação e ordenação enviadas ao backend na consulta paginada (chave de cache + RPC). */
5666
- interface ConsultaListaServidorQuerySlice {
5667
- pagina: number;
5668
- tamanhoPagina: number;
5669
- ordenarCampo: string;
5670
- ordenarDesc: boolean;
5671
- }
5672
-
5673
- /**
5674
- * Item de condição persistido num preset (ordem + junção E/OU).
5675
- * `valorDefault` guarda string (texto ou código de estado bool no cliente, ex. `all`/`yes`/`no`).
5676
- */
5677
- interface ConsultaFiltroItem<TColuna extends string = string> {
5678
- id: string;
5679
- coluna: TColuna;
5680
- operador: string;
5681
- juncaoOu: boolean;
5682
- ordem: number;
5683
- fixo?: boolean;
5684
- valorDefault: string;
5685
- }
5686
- interface ConsultaFiltroPreset<TColuna extends string = string> {
5687
- id: string;
5688
- nome: string;
5689
- visivelTodos?: boolean;
5690
- itens: ConsultaFiltroItem<TColuna>[];
5691
- /** Capa do servidor (`FiltroSalvo.qtd_itens`): critérios quando `itens` ainda não está preenchido. */
5692
- qtdItensCriterios?: number;
5693
- criadoEm?: string;
5694
- }
5695
-
5696
- declare const OPS_TEXTO: readonly ConsultaOperadorOption[];
5697
- declare const OPS_BOOL: readonly ConsultaOperadorOption[];
5698
- declare const OPS_DATA: readonly ConsultaOperadorOption[];
5699
- /** Campos com multi-seleção no metadata (operador fixo `inlist` no servidor). */
5700
- declare const OPS_TEXTO_MULTISELECT: readonly ConsultaOperadorOption[];
5701
- /**
5702
- * Colunas `datetime`: usar `app-date-field` para qualquer operador excepto `between`
5703
- * (dois limites continuam num único texto na UI).
5704
- */
5705
- declare function operadorConsultaDatetimeUsaDatePicker(operador: string | null | undefined): boolean;
5706
- /** Operadores com um único valor de comparação (data/número); exclui between e testes de nulo. */
5707
- declare function operadorConsultaComValorUnicoComparacao(operador: string | null | undefined): boolean;
5708
- /** Rótulo em PT-BR para o id do operador (ex.: presets antigos com `contains` em coluna datetime). */
5709
- declare function rotuloOperadorConsulta(operador: string | null | undefined): string;
5710
- declare function operadoresPorTipo(tipo: ConsultaValorTipo): readonly ConsultaOperadorOption[];
5711
- /** Operadores permitidos na UI conforme coluna (inclui ramo multi-seleção do metadata). */
5712
- declare function operadoresConsultaCampo(coluna: string | null | undefined, ctx: {
5713
- valorTipoPorColuna: (coluna: string) => ConsultaValorTipo;
5714
- multiselectColumnIds?: readonly string[] | null;
5715
- filterSelectColumnIds?: readonly string[] | null;
5716
- searchSelectColumnIds?: readonly string[] | null;
5717
- }): readonly ConsultaOperadorOption[];
5718
- declare function precisaValor(operador: string): boolean;
5719
- declare function precisaValorFinal(operador: string): boolean;
5720
- declare function tipoValorApi(tipo: ConsultaValorTipo): string;
5721
- /**
5722
- * Presets antigos podem ter `contains` / `startswith` / `endswith` em colunas `datetime`;
5723
- * o builder SQL só aceita operadores de data. Para valor já normalizado (ex. dia `YYYY-MM-DD`),
5724
- * `equals` é o equivalente útil.
5725
- */
5726
- declare function normalizarOperadorConsultaParaEnvioServidor(coluna: string, operador: string, valorTipoPorColuna: (col: string) => ConsultaValorTipo): string;
5727
-
5728
- declare function ordenarFiltroItens<T extends {
5729
- id: string;
5730
- ordem: number;
5731
- }>(itens: T[]): T[];
5732
- /** Preferência: critérios reais; senão capa `qtdItensCriterios` do preset (proto `qtd_itens`). */
5733
- declare function qtdCriteriosPresetParaSkeleton<TColuna extends string>(p: ConsultaFiltroPreset<TColuna>): number;
5734
- interface ConsultaFiltroMatchAdapters<TItem> {
5735
- textoCampo: (item: TItem, coluna: string) => string;
5736
- /** Avalia filtro em colunas booleanas (ex. estado activo/inactivo). */
5737
- evalBoolFilter: (item: TItem, valorRaw: string) => boolean;
5738
- boolColumnIds: readonly string[];
5739
- }
5740
- /** Uma linha satisfaz a condição (valor em `valorRaw`, tipicamente `valoresPorItemId[it.id]`). */
5741
- declare function consultaPassaItem<TItem>(item: TItem, it: ConsultaFiltroItem<string>, valorRaw: string, adapters: ConsultaFiltroMatchAdapters<TItem>): boolean;
5742
- declare function consultaPassaTodosItens<TItem>(item: TItem, itens: ConsultaFiltroItem<string>[], valoresPorItemId: Record<string, string>, adapters: ConsultaFiltroMatchAdapters<TItem>): boolean;
5743
-
5744
- /** Contrato mínimo para itens enviados ao backend (filtros avulsos). */
5745
- interface FiltroItemEntradaGenerico {
5746
- campo: string;
5747
- operador: string;
5748
- valor: string;
5749
- valorAte: string;
5750
- juncao: string;
5751
- }
5752
- interface MontarFiltrosServidorPresetOptions<TItem extends FiltroItemEntradaGenerico = FiltroItemEntradaGenerico> {
5753
- boolColumnIds?: readonly string[];
5754
- mapLinha?: (linha: FiltroItemEntradaGenerico) => TItem;
5755
- valorTipoPorColuna?: (coluna: string) => ConsultaValorTipo;
5756
- }
5757
- /** @deprecated Use {@link MontarFiltrosServidorPresetOptions}. */
5758
- type MontarFiltrosGrpcPresetOptions<TItem extends FiltroItemEntradaGenerico = FiltroItemEntradaGenerico> = MontarFiltrosServidorPresetOptions<TItem>;
5759
- type ValoresConsultaPresetUi = Record<string, string | null | undefined>;
5760
- /**
5761
- * Converte preset + valores da UI em lista para filtros avulsos no servidor.
5762
- */
5763
- declare function montarFiltrosServidorPreset<TColuna extends string, TItem extends FiltroItemEntradaGenerico = FiltroItemEntradaGenerico>(preset: ConsultaFiltroPreset<TColuna> | null | undefined, valores: ValoresConsultaPresetUi, options?: MontarFiltrosServidorPresetOptions<TItem>): TItem[];
5764
- /** @deprecated Use {@link montarFiltrosServidorPreset}. */
5765
- declare const montarFiltrosGrpcPreset: typeof montarFiltrosServidorPreset;
5766
- declare const CONSULTA_SERVIDOR_LISTA_QUERY_DEFAULTS: ConsultaListaServidorQuerySlice;
5767
- interface ConsultaServidorExecutorOpts<TItem> {
5768
- ensureAuth: () => Promise<void>;
5769
- montarFiltros: (preset: ConsultaFiltroPreset<string> | undefined, valores: ValoresConsultaPresetUi) => FiltroItemEntradaGenerico[];
5770
- consultar: (args: {
5771
- filtrosAvulsos: FiltroItemEntradaGenerico[];
5772
- pagina: number;
5773
- tamanhoPagina: number;
5774
- ordenarCampo: string;
5775
- ordenarDesc: boolean;
5776
- }) => Promise<{
5777
- itens: TItem[];
5778
- total: number;
5779
- }>;
5780
- gravarListaCache: (itens: TItem[]) => void;
5781
- pagina?: number;
5782
- tamanhoPagina?: number;
5783
- ordenarCampo?: string;
5784
- ordenarDesc?: boolean;
5785
- }
5786
- declare function executarConsultaServidorComPreset<TItem>(opts: ConsultaServidorExecutorOpts<TItem> & {
5787
- presetId: string | null;
5788
- valores: ValoresConsultaPresetUi;
5789
- presets: ConsultaFiltroPreset<string>[];
5790
- }): Promise<{
5791
- itens: TItem[];
5792
- total: number;
5793
- }>;
5794
-
5795
- /**
5796
- * Espelho estável dos valores {@code ComponentType} do backend (protobuf).
5797
- * Mantido na lib para UI/metadata sem depender do código gerado por `ts_proto`.
5798
- */
5799
- declare enum ComponentType {
5800
- UNSPECIFIED = 0,
5801
- TEXT = 1,
5802
- PASSWORD = 2,
5803
- NUMBER = 3,
5804
- CHECKBOX = 4,
5805
- TEXTAREA = 5,
5806
- SEARCH_SELECT = 6,
5807
- MULTI_SELECT = 7,
5808
- LIST_SELECT = 8,
5809
- MULTI_SELECT_REQUIRED_DEFAULT = 9,
5810
- LIST_SELECT_REQUIRED_DEFAULT = 10,
5811
- DECIMAL = 11,
5812
- DATE_TIME = 12,
5813
- COLLECTION = 13,
5814
- /** Cadastro: upload de imagem com URL persistida (linha de coleção / campo simples). */
5815
- MIDIA_UPLOAD = 14,
5816
- /** Cadastro: interruptor estilo «switch» (booleano). */
5817
- SWITCH_BOX = 15,
5818
- /** Cadastro: cor em hexadecimal com seletor nativo e campo texto. */
5819
- COLOR_PICKER = 16,
5820
- /** Cadastro: telefone com máscara BR. */
5821
- PHONE = 17,
5822
- /** Cadastro: e-mail. */
5823
- EMAIL = 18,
5824
- /** Cadastro: CPF ou CNPJ com máscara. */
5825
- CPF_CNPJ = 19,
5826
- /** Cadastro: coleção 1:N somente leitura (lista/grelha sem editor). */
5827
- READONLY_COLLECTION = 20,
5828
- /** Cadastro: editor de script completo (painel monoespaçado com cópia). */
5829
- SCRIPT_EDITOR = 21,
5830
- UNRECOGNIZED = -1
5831
- }
5832
-
5833
- /** Espelho de {@code ContainerLayoutSize} (metadata cadastro). */
5834
- declare enum ContainerLayoutSize {
5835
- CONTAINER_LAYOUT_SIZE_UNSPECIFIED = 0,
5836
- CONTAINER_LAYOUT_SIZE_MD = 1,
5837
- CONTAINER_LAYOUT_SIZE_LG = 2,
5838
- CONTAINER_LAYOUT_SIZE_XL = 3,
5839
- UNRECOGNIZED = -1
5840
- }
5841
- /** Espelho de {@code CadastroSectionPanelLayout}. */
5842
- declare enum CadastroSectionPanelLayout {
5843
- CADASTRO_SECTION_PANEL_LAYOUT_UNSPECIFIED = 0,
5844
- CADASTRO_SECTION_PANEL_LAYOUT_CARD = 1,
5845
- CADASTRO_SECTION_PANEL_LAYOUT_PLAIN = 2,
5846
- UNRECOGNIZED = -1
5847
- }
5848
- /** Espelho de {@code FormCollectionLayout} no metadata cadastro (coleção 1:N). */
5849
- declare enum FormCollectionLayout {
5850
- FORM_COLLECTION_LAYOUT_UNSPECIFIED = 0,
5851
- FORM_COLLECTION_LAYOUT_CARD_LIST = 1,
5852
- FORM_COLLECTION_LAYOUT_TABLE = 2,
5853
- FORM_COLLECTION_LAYOUT_INLINE_ROWS = 3,
5854
- UNRECOGNIZED = -1
5855
- }
5856
- /** Espelho de {@code FileUploadType} no metadata cadastro — upload em lote na UI da coleção. */
5857
- declare enum FileUploadType {
5858
- FILE_UPLOAD_TYPE_UNSPECIFIED = 0,
5859
- FILE_UPLOAD_TYPE_SINGLE = 1,
5860
- FILE_UPLOAD_TYPE_MULTIPLE = 2,
5861
- UNRECOGNIZED = -1
5862
- }
5863
- /** Espelho de {@code CadastroCollectionGridColumnFormat} — alinhado numericamente a {@link ConsultaGridColumnFormat}. */
5864
- declare enum CadastroCollectionGridColumnFormat {
5865
- CADASTRO_COLLECTION_GRID_COLUMN_FORMAT_UNSPECIFIED = 0,
5866
- CADASTRO_COLLECTION_GRID_COLUMN_FORMAT_NONE = 1,
5867
- CADASTRO_COLLECTION_GRID_COLUMN_FORMAT_TRIM = 2,
5868
- CADASTRO_COLLECTION_GRID_COLUMN_FORMAT_CURRENCY = 3,
5869
- CADASTRO_COLLECTION_GRID_COLUMN_FORMAT_DECIMAL = 4,
5870
- CADASTRO_COLLECTION_GRID_COLUMN_FORMAT_DATE = 5,
5871
- CADASTRO_COLLECTION_GRID_COLUMN_FORMAT_DATE_TIME = 6,
5872
- CADASTRO_COLLECTION_GRID_COLUMN_FORMAT_ACTIVE_STATUS = 7,
5873
- CADASTRO_COLLECTION_GRID_COLUMN_FORMAT_DOCUMENTO = 8,
5874
- CADASTRO_COLLECTION_GRID_COLUMN_FORMAT_OPERACAO_ENM_STATUS = 9,
5875
- UNRECOGNIZED = -1
5876
- }
5877
-
5878
- /**
5879
- * Espelho numérico de {@code ReferenceOptionPreset} em metadata-cadastro.proto.
5880
- * Novos cadastros: preferir `formatoRetornoTexto` / `campoRetornoTexto` em vez de presets de domínio.
5881
- */
5882
- declare enum ReferenceOptionPreset {
5883
- REFERENCE_OPTION_PRESET_AUTO = 0,
5884
- REFERENCE_OPTION_PRESET_ID_NOME = 1,
5885
- /** @deprecated Prefira `formatoRetornoTexto` e campos estruturais explícitos (`activeOnly`, `sortBy`). */
5886
- REFERENCE_OPTION_PRESET_ID_NOME_ATIVO = 2,
5887
- /** @deprecated Prefira `formatoRetornoTexto` = `"{nome} ({documento})"`. */
5888
- REFERENCE_OPTION_PRESET_ID_NOME_DOCUMENTO = 3,
5889
- /** @deprecated Sinónimo legado de ID_NOME_DOCUMENTO. Prefira formato com placeholders. */
5890
- REFERENCE_OPTION_PRESET_PESSOA = 4,
5891
- UNRECOGNIZED = -1
5892
- }
5893
-
5894
- /** Espelha `CadastroReferenciaOpenMode` no protobuf / C#. */
5895
- declare enum CadastroReferenciaOpenMode {
5896
- TELA = 0,
5897
- DIALOG = 1
5898
- }
5899
- declare function cadastroReferenciaOpenModeFromWire(value: number | string | null | undefined): CadastroReferenciaOpenMode;
5900
- type CadastroReferenciaOpenModeWireRef = {
5901
- openMode?: CadastroReferenciaOpenMode | number | string | null | undefined;
5902
- open_mode?: CadastroReferenciaOpenMode | number | string | null | undefined;
5903
- };
5904
- declare function referenciaOpenModeRaw(ref: CadastroReferenciaOpenModeWireRef | null | undefined): CadastroReferenciaOpenMode | number | string | null | undefined;
5905
- declare function referenciaAbreEmDialog(ref: CadastroReferenciaOpenModeWireRef | null | undefined): boolean;
5906
-
5907
- /** Espelho de {@code DeleteConfirmPageConfig}. */
5908
- interface DeleteConfirmPageConfig {
5909
- title: string;
5910
- message: string;
5911
- confirmLabel: string;
5912
- }
5913
- /** Espelho de {@code DuplicatePageConfig}. */
5914
- interface DuplicatePageConfig {
5915
- enabled: boolean;
5916
- label: string;
5917
- title: string;
5918
- message: string;
5919
- successMessage: string;
5920
- }
5921
- /** Espelho de {@code CadastroToolbarButtonDto}. */
5922
- interface CadastroToolbarButtonDto {
5923
- actionId: string;
5924
- label: string;
5925
- variant: string;
5926
- iconClass: string;
5927
- order: number;
5928
- visibleOnEditOnly: boolean;
5929
- disableWhileBusy: boolean;
5930
- }
5931
- /** Aba metadata-driven no cadastro (`[PageTab]` no servidor). */
5932
- interface CadastroPageTabDto {
5933
- key: string;
5934
- label: string;
5935
- icon: string;
5936
- order: number;
5937
- }
5938
- /** Componente customizado por tag na página metadata-driven. */
5939
- interface CadastroPageComponentDto {
5940
- region: string;
5941
- tag: string;
5942
- order: number;
5943
- inputs?: Readonly<Record<string, string>> | undefined;
5944
- }
5945
- /** Ação de rodapé/região na página metadata-driven. */
5946
- interface CadastroPageActionDto {
5947
- id: string;
5948
- label: string;
5949
- iconClass: string;
5950
- variant: string;
5951
- region: string;
5952
- order: number;
5953
- }
5954
- /** Overlay de execução na página metadata-driven. */
5955
- interface CadastroPageOverlayDto {
5956
- tag: string;
5957
- visibleExpression: string;
5958
- inputs?: Readonly<Record<string, string>> | undefined;
5959
- }
5960
- interface CadastroFormPageLayout {
5961
- containerLayoutSize: ContainerLayoutSize;
5962
- fieldsPerRow: number;
5963
- validationSummaryFlags: number;
5964
- pageTitleNovo: string;
5965
- pageSubtitle: string;
5966
- pageTitleEditar: string;
5967
- pageTitleConsulta: string;
5968
- pageToastTitle: string;
5969
- entityName: string;
5970
- entityLabel: string;
5971
- routeList: string;
5972
- routeNew: string;
5973
- routeEdit: string;
5974
- serviceKey: string;
5975
- formDraftEnabled: boolean;
5976
- deleteConfirmConfig?: DeleteConfirmPageConfig | undefined;
5977
- duplicateConfig?: DuplicatePageConfig | undefined;
5978
- toolbarButtons?: readonly CadastroToolbarButtonDto[] | undefined;
5979
- /** Abas opcionais na raiz do metadata; vazio ⇒ sem TabBar extra na UI. */
5980
- pageTabs?: readonly CadastroPageTabDto[] | undefined;
5981
- /** Componentes customizados por tag (`[PageComponent]`). */
5982
- pageComponents?: readonly CadastroPageComponentDto[] | undefined;
5983
- /** Ações de rodapé/região (`[PageAction]`). */
5984
- pageActions?: readonly CadastroPageActionDto[] | undefined;
5985
- /** Overlay opcional (`[PageOverlay]`). */
5986
- pageOverlay?: CadastroPageOverlayDto | undefined;
5987
- /** Espelha `[PageMetadata(NotFoundMessage = …)]`. */
5988
- notFoundMessage?: string;
5989
- /** Espelha `[PageMetadata(CreateSuccessMessage = …)]`. */
5990
- createSuccessMessage?: string;
5991
- /** Espelha `[PageMetadata(UpdateSuccessMessage = …)]`. */
5992
- updateSuccessMessage?: string;
5993
- /** Espelha `[PageMetadata(SaveSuccessMessage = …)]`. */
5994
- saveSuccessMessage?: string;
5995
- /** Espelha `[PageMetadata(DeleteSuccessMessage = …)]`. */
5996
- deleteSuccessMessage?: string;
5997
- /** Espelha `[PageMetadata(ShowNewButton = …)]`; omisso ⇒ mostra «Novo». */
5998
- showNewButton?: boolean;
5999
- /** Espelha `[PageMetadata(ShowSaveButton = …)]`; omisso ⇒ mostra «Salvar». */
6000
- showSaveButton?: boolean;
6001
- /** Espelha `[PageMetadata(ShowDeleteButton = …)]`; omisso ⇒ mostra «Excluir». */
6002
- showDeleteButton?: boolean;
6003
- /** Espelha `[PageMetadata(UseBackToTopButton = …)]`; omisso ⇒ mostra botão «Voltar ao topo». */
6004
- useBackToTopButton?: boolean | null;
6005
- /** Espelha `[PageMetadata(PreserveActiveTab = …)]`; omisso ⇒ não restaura aba ao voltar de RotaReferência. */
6006
- preserveActiveTab?: boolean | null;
6007
- /**
6008
- * Page shell: `true` mantém todas as abas no DOM; omisso/`false` ⇒ lazy (só aba activa monta conteúdo).
6009
- */
6010
- pageTabsKeepAlive?: boolean | null;
6011
- /** Estados dinâmicos de ações por chave (ex.: `sites.create`). */
6012
- actionStates?: Readonly<Record<string, CadastroActionStateDto$1>> | undefined;
6013
- }
6014
- /** Espelho de {@code CadastroActionStateDto}. */
6015
- interface CadastroActionStateDto$1 {
6016
- visible: boolean;
6017
- enabled: boolean;
6018
- tooltip: string;
6019
- reason: string;
6020
- }
6021
- interface CadastroCampoValidacaoDto {
6022
- key: string;
6023
- label: string;
6024
- fieldId: string;
6025
- rules: string[];
6026
- maxLength: number;
6027
- }
6028
- interface CadastroCampoReferenciaMetadataDto {
6029
- entidade: string;
6030
- serviceKey: string;
6031
- origemInline: string;
6032
- rotaNovo: string;
6033
- rotaAlterar: string;
6034
- permitirCriar: boolean;
6035
- permitirAlterar: boolean;
6036
- tooltipDica: string;
6037
- labelAlterar: string;
6038
- iconAlterar: string;
6039
- hostPath: string;
6040
- draftCacheKey: string;
6041
- labelTargetField: string;
6042
- documentTargetField: string;
6043
- /** Omisso ou vazio + preset AUTO ⇒ pode usar {@link CadastroReferenceRegistryEntry.mapOptions} legado. */
6044
- valueField: string;
6045
- labelField: string;
6046
- descriptionField: string;
6047
- activeField: string;
6048
- activeOnly: boolean;
6049
- sortBy: string;
6050
- sortAscending: boolean;
6051
- optionPreset: ReferenceOptionPreset;
6052
- /** Omisso ou `0` ⇒ search-select / grelha usam 15. */
6053
- pageSize?: number | undefined;
6054
- /** Teto de pageSize em busca remota; omisso ⇒ 50. */
6055
- maxPageSize?: number | undefined;
6056
- /** Lista paginada no servidor (SearchSelect grande). */
6057
- paginated?: boolean | undefined;
6058
- /** Busca com filtro no servidor. */
6059
- serverSideSearch?: boolean | undefined;
6060
- /** Colunas para OR na busca (ex.: `nome,uf,localizacao_texto`). */
6061
- searchFields?: string | undefined;
6062
- /** Perfil de busca no servidor (0=padrão, 1=município BR). */
6063
- buscaPerfil?: number | undefined;
6064
- /**
6065
- * Campo do DTO devolvido pelo cadastro filho para repor o valor do controlo (inline).
6066
- * Omisso ⇒ `valueField` (por defeito `id`).
6067
- */
6068
- campoRetornoValor?: string | undefined;
6069
- /** Texto base quando não há `formatoRetornoTexto`; omisso ⇒ `labelField` (`nome`). */
6070
- campoRetornoTexto?: string | undefined;
6071
- /** Rótulo com `{campo}` sobre o registo devolvido; omisso ⇒ sem formato. */
6072
- formatoRetornoTexto?: string | null | undefined;
6073
- /** Omisso ⇒ {@link CadastroReferenciaOpenMode.TELA}. */
6074
- openMode?: CadastroReferenciaOpenMode | undefined;
6075
- /** Chave RBAC para visualizar/navegar; omisso ⇒ política do host por rota. */
6076
- permissaoVisualizar?: string | undefined;
6077
- /** Chave RBAC para o atalho «+»; omisso ⇒ política do host por rota. */
6078
- permissaoCriar?: string | undefined;
6079
- /** Chave RBAC para o atalho «Alterar»; omisso ⇒ política do host por rota. */
6080
- permissaoEditar?: string | undefined;
6081
- /** Chaves RBAC para visualizar/navegar (lista). */
6082
- permissoesVisualizar?: readonly string[] | undefined;
6083
- /** Chaves RBAC para o atalho «+» (lista). */
6084
- permissoesCriar?: readonly string[] | undefined;
6085
- /** Chaves RBAC para o atalho «Alterar» (lista). */
6086
- permissoesEditar?: readonly string[] | undefined;
6087
- /** Como validar listas de permissões (`All` default). */
6088
- modoPermissao?: 'All' | 'Any' | undefined;
6089
- /** Chave fixa de ação para o atalho «+» (ex.: `sites.create`). */
6090
- actionKeyCreate?: string | undefined;
6091
- /** Chave fixa de ação para «Alterar» (ex.: `sites.edit`). */
6092
- actionKeyEdit?: string | undefined;
6093
- /** Chave fixa de ação para visualizar/abrir (ex.: `sites.view`). */
6094
- actionKeyView?: string | undefined;
6095
- }
6096
- interface CadastroCampoSelectOptionDto {
6097
- value: string;
6098
- label: string;
6099
- description: string;
6100
- }
6101
- interface CadastroCampoMetadataDto {
6102
- key: string;
6103
- label: string;
6104
- fieldId: string;
6105
- rules: string[];
6106
- maxLength: number;
6107
- componentType: ComponentType;
6108
- ordem: number;
6109
- placeholder: string;
6110
- width: string;
6111
- hidden: boolean;
6112
- readOnly: boolean;
6113
- requiredMark: boolean;
6114
- dense: boolean;
6115
- autoFocus: boolean;
6116
- hint: string;
6117
- visibleOnCreate: boolean;
6118
- visibleOnEdit: boolean;
6119
- defaultValue: string;
6120
- prefixIcon: string;
6121
- suffixIcon: string;
6122
- flex: number;
6123
- clearable: boolean;
6124
- referencia?: CadastroCampoReferenciaMetadataDto | undefined;
6125
- enumOptionsKey: string;
6126
- errosMsg: string;
6127
- mostrarErrorMsg?: boolean | undefined;
6128
- /**
6129
- * `MIDIA_UPLOAD` / bulk na coleção: omisso ⇒ `true` (painel de pré-visualização).
6130
- * `false` ⇒ lista ocupa a largura com scroll.
6131
- */
6132
- mostrarPreview?: boolean | undefined;
6133
- sectionKey: string;
6134
- sectionTitle: string;
6135
- sectionSubtitle: string;
6136
- sectionCollapsible: boolean;
6137
- sectionInitiallyCollapsed: boolean;
6138
- /** Omisso no wire ⇒ automático no cliente quando `sectionCollapsible`. */
6139
- sectionPersistExpandedState?: boolean | undefined;
6140
- sectionReadOnly: boolean;
6141
- sectionPanelLayout: CadastroSectionPanelLayout;
6142
- /**
6143
- * Colunas por linha na UI (grelha metadata).
6144
- * Em campos normais espelha `[Container(FieldsPerRow = …)]`.
6145
- * Em `componentType === COLLECTION`, espelha `[FormCollection(FieldsPerRow = …)]` na **capa** (editor acima da lista); **não** afecta colunas da grelha de linhas.
6146
- */
6147
- sectionFieldsPerRow: number;
6148
- /**
6149
- * `[Container]` aninhado: chave do grupo pai (ex.: `aparencia`).
6150
- * O cliente monta `subsecoes` no pai e aplica `sectionParent*` no chrome exterior.
6151
- */
6152
- sectionParentKey?: string | undefined;
6153
- sectionParentTitle?: string | undefined;
6154
- sectionParentCollapsible?: boolean | undefined;
6155
- sectionParentInitiallyCollapsed?: boolean | undefined;
6156
- sectionParentPanelLayout?: CadastroSectionPanelLayout | undefined;
6157
- /** Opções enviadas pelo servidor (ex.: enum); omisso ⇒ {@link enumOptionsKey} no registry legado. */
6158
- selectOptions: readonly CadastroCampoSelectOptionDto[];
6159
- /** Coleção 1:N (`componentType === COLLECTION`). */
6160
- description?: string | undefined;
6161
- addButtonLabel?: string | undefined;
6162
- /** Texto do botão ao editar linha seleccionada; vazio ⇒ só ícone (`alterar_button_label` no wire). */
6163
- alterarButtonLabel?: string | undefined;
6164
- removeButtonLabel?: string | undefined;
6165
- minItems?: number | undefined;
6166
- maxItems?: number | undefined;
6167
- reorderable?: boolean | undefined;
6168
- collectionLayout?: FormCollectionLayout | undefined;
6169
- /** `[FormCollection(Layout = …)]` — igual ao painel de `[Container]`; só para `COLLECTION`. Omisso ⇒ cartão; só `PLAIN` é superfície sem contorno. */
6170
- collectionPanelLayout?: CadastroSectionPanelLayout | undefined;
6171
- itemFields?: readonly CadastroCampoMetadataDto[] | undefined;
6172
- /**
6173
- * Linha de coleção: integrar na grelha só quando `true`, após o servidor enviar modo explícito (`[GridColumn]`).
6174
- * Omisso ⇒ todas as propriedades visíveis da linha entram na grelha (legado).
6175
- */
6176
- collectionItemGridColumn?: boolean | undefined;
6177
- /** Cabeçalho na grelha; omisso usa {@link label}. */
6178
- collectionGridHeader?: string | undefined;
6179
- collectionGridColumnFormat?: CadastroCollectionGridColumnFormat | undefined;
6180
- collectionGridWidthPx?: number | undefined;
6181
- /**
6182
- * `[GridColumn(ReadOnly = …)]` na linha: `true` (por defeito no servidor) ⇒ célula só leitura na grelha.
6183
- * Omisso ⇒ o cliente não aplica trava extra (só `readOnly` do `FormField`).
6184
- */
6185
- collectionGridReadOnly?: boolean | undefined;
6186
- /**
6187
- * `[GridColumn(ComponentType = …)]` — tipo de controlo na grelha da coleção.
6188
- * `UNSPECIFIED` / omisso ⇒ usa-se `componentType` do `[FormField]`.
6189
- */
6190
- collectionGridComponentType?: ComponentType | undefined;
6191
- /** `[ValidationSummary]` na classe do elemento da coleção — espelho de `collection_item_validation_summary_flags`. */
6192
- collectionItemValidationSummaryFlags?: number | undefined;
6193
- /** Mensagem no resumo quando a lista não atinge `min_items`; omisso ⇒ «A lista não pode ser vazia». */
6194
- collectionMinItemsMessage?: string | undefined;
6195
- /**
6196
- * Omisso ou `true`: decimal com prefixo monetário na UI (ex. `R$`).
6197
- * `false`: formato decimal sem prefixo — ex. quantidade (`[FormField(Monetary = false)]` no servidor).
6198
- */
6199
- monetary?: boolean | undefined;
6200
- /** `SCRIPT_EDITOR`: altura mínima do painel (ex.: `220px`). */
6201
- scriptEditorMinHeight?: string | undefined;
6202
- /** `SCRIPT_EDITOR`: linguagem do painel (ex.: `bash`). */
6203
- scriptEditorLanguage?: string | undefined;
6204
- /** `[FormCollection(Pageable = …)]` — paginação server-side no cadastro. */
6205
- pageable?: boolean | undefined;
6206
- pageSize?: number | undefined;
6207
- maxPageSize?: number | undefined;
6208
- /**
6209
- * Chave do campo na linha (`item_fields.key`, ex.: `produtoId`) para foco ao clicar no resumo quando o erro
6210
- * é lista vazia / `min_items`. Omisso ⇒ primeiro `item_field` por `ordem`.
6211
- */
6212
- invalidSummaryInputFocus?: string | undefined;
6213
- /** `[FileUpload]` na propriedade da coleção — `MULTIPLE` activa zona de vários ficheiros + pré-visualização. */
6214
- collectionFileUploadType?: FileUploadType | undefined;
6215
- /** Com `MULTIPLE`: máximo por selecção (`[FileUpload(MaxItems)]`); `0` ⇒ cliente assume 5. */
6216
- collectionFileUploadMaxFiles?: number | undefined;
6217
- /**
6218
- * `[FormCollection(MostrarAcaoEditar = …)]` — botão alterar na coluna Ações da grelha.
6219
- * Omisso / `undefined` ⇒ `true` (mostrar).
6220
- */
6221
- collectionMostrarAcaoEditar?: boolean | undefined;
6222
- /**
6223
- * `[FormCollection(MostrarAcaoRemover = …)]` — botão remover na coluna Ações.
6224
- * Omisso / `undefined` ⇒ `true` (mostrar).
6225
- */
6226
- collectionMostrarAcaoRemover?: boolean | undefined;
6227
- /**
6228
- * `[FormCollection(ConfirmDialogOnRemove = …)]` — confirmação antes de remover linha na grelha/cartões.
6229
- * Omisso / `undefined` ⇒ `true` (pedir confirmação).
6230
- */
6231
- collectionConfirmDialogOnRemove?: boolean | undefined;
6232
- /**
6233
- * Chave da aba (`CadastroPageTabDto.key`) quando o campo pertence a um bloco `[PageTab]` na raiz;
6234
- * vazio ⇒ capa (fora de abas).
6235
- */
6236
- pageTabKey?: string | undefined;
6237
- }
6238
- /** Espelho de {@code CadastroCollectionStateDto} no init cadastro. */
6239
- interface CadastroCollectionStateDto {
6240
- key: string;
6241
- pagina: number;
6242
- tamanhoPagina: number;
6243
- total: number;
6660
+ tipo: ConsultaValorTipo;
6244
6661
  }
6245
- /** Contrato genérico para RPC de página de coleção (payload espelha proto). */
6246
- interface CadastroCollectionPageRequestWire {
6247
- entityId: string;
6248
- collectionKey: string;
6662
+ interface ConsultaOperadorOption {
6663
+ id: string;
6664
+ label: string;
6665
+ }
6666
+ /** Paginação e ordenação enviadas ao backend na consulta paginada (chave de cache + RPC). */
6667
+ interface ConsultaListaServidorQuerySlice {
6249
6668
  pagina: number;
6250
6669
  tamanhoPagina: number;
6251
6670
  ordenarCampo: string;
6252
6671
  ordenarDesc: boolean;
6253
6672
  }
6254
- interface CadastroCollectionPageReplyWire {
6255
- collectionKey: string;
6256
- pagina: number;
6257
- tamanhoPagina: number;
6258
- total: number;
6259
- /** Array JSON de linhas (`PedidoItemDto`, …). */
6260
- itensJson: string;
6673
+
6674
+ /**
6675
+ * Item de condição persistido num preset (ordem + junção E/OU).
6676
+ * `valorDefault` guarda string (texto ou código de estado bool no cliente, ex. `all`/`yes`/`no`).
6677
+ */
6678
+ interface ConsultaFiltroItem<TColuna extends string = string> {
6679
+ id: string;
6680
+ coluna: TColuna;
6681
+ operador: string;
6682
+ juncaoOu: boolean;
6683
+ ordem: number;
6684
+ fixo?: boolean;
6685
+ valorDefault: string;
6261
6686
  }
6262
- /** Estado UI para rodapé de paginação da {@link FormCollectionComponent}. */
6263
- interface CadastroCollectionPagingUi {
6264
- pagina: number;
6265
- tamanhoPagina: number;
6266
- total: number;
6267
- loading: boolean;
6268
- erro?: string | null | undefined;
6687
+ interface ConsultaFiltroPreset<TColuna extends string = string> {
6688
+ id: string;
6689
+ nome: string;
6690
+ visivelTodos?: boolean;
6691
+ itens: ConsultaFiltroItem<TColuna>[];
6692
+ /** Capa do servidor (`FiltroSalvo.qtd_itens`): critérios quando `itens` ainda não está preenchido. */
6693
+ qtdItensCriterios?: number;
6694
+ criadoEm?: string;
6269
6695
  }
6270
- interface CadastroDeclarativeSnapshotDto {
6271
- camposMetadata: CadastroCampoMetadataDto[];
6272
- camposValidacao: CadastroCampoValidacaoDto[];
6696
+
6697
+ declare const OPS_TEXTO: readonly ConsultaOperadorOption[];
6698
+ declare const OPS_BOOL: readonly ConsultaOperadorOption[];
6699
+ declare const OPS_DATA: readonly ConsultaOperadorOption[];
6700
+ /** Campos com multi-seleção no metadata (operador fixo `inlist` no servidor). */
6701
+ declare const OPS_TEXTO_MULTISELECT: readonly ConsultaOperadorOption[];
6702
+ /**
6703
+ * Colunas `datetime`: usar `app-date-field` para qualquer operador excepto `between`
6704
+ * (dois limites continuam num único texto na UI).
6705
+ */
6706
+ declare function operadorConsultaDatetimeUsaDatePicker(operador: string | null | undefined): boolean;
6707
+ /** Operadores com um único valor de comparação (data/número); exclui between e testes de nulo. */
6708
+ declare function operadorConsultaComValorUnicoComparacao(operador: string | null | undefined): boolean;
6709
+ /** Rótulo em PT-BR para o id do operador (ex.: presets antigos com `contains` em coluna datetime). */
6710
+ declare function rotuloOperadorConsulta(operador: string | null | undefined): string;
6711
+ declare function operadoresPorTipo(tipo: ConsultaValorTipo): readonly ConsultaOperadorOption[];
6712
+ /** Operadores permitidos na UI conforme coluna (inclui ramo multi-seleção do metadata). */
6713
+ declare function operadoresConsultaCampo(coluna: string | null | undefined, ctx: {
6714
+ valorTipoPorColuna: (coluna: string) => ConsultaValorTipo;
6715
+ multiselectColumnIds?: readonly string[] | null;
6716
+ filterSelectColumnIds?: readonly string[] | null;
6717
+ searchSelectColumnIds?: readonly string[] | null;
6718
+ }): readonly ConsultaOperadorOption[];
6719
+ declare function precisaValor(operador: string): boolean;
6720
+ declare function precisaValorFinal(operador: string): boolean;
6721
+ declare function tipoValorApi(tipo: ConsultaValorTipo): string;
6722
+ /**
6723
+ * Presets antigos podem ter `contains` / `startswith` / `endswith` em colunas `datetime`;
6724
+ * o builder SQL só aceita operadores de data. Para valor já normalizado (ex. dia `YYYY-MM-DD`),
6725
+ * `equals` é o equivalente útil.
6726
+ */
6727
+ declare function normalizarOperadorConsultaParaEnvioServidor(coluna: string, operador: string, valorTipoPorColuna: (col: string) => ConsultaValorTipo): string;
6728
+
6729
+ declare function ordenarFiltroItens<T extends {
6730
+ id: string;
6731
+ ordem: number;
6732
+ }>(itens: T[]): T[];
6733
+ /** Preferência: critérios reais; senão capa `qtdItensCriterios` do preset (proto `qtd_itens`). */
6734
+ declare function qtdCriteriosPresetParaSkeleton<TColuna extends string>(p: ConsultaFiltroPreset<TColuna>): number;
6735
+ interface ConsultaFiltroMatchAdapters<TItem> {
6736
+ textoCampo: (item: TItem, coluna: string) => string;
6737
+ /** Avalia filtro em colunas booleanas (ex. estado activo/inactivo). */
6738
+ evalBoolFilter: (item: TItem, valorRaw: string) => boolean;
6739
+ boolColumnIds: readonly string[];
6273
6740
  }
6274
- /** Entrada para merge (`fromPartial`): `referencia` pode vir incompleta como no metadata JSON. */
6275
- type CadastroCampoMetadataMergeInput = Omit<Partial<CadastroCampoMetadataDto>, 'referencia'> & {
6276
- referencia?: Partial<CadastroCampoReferenciaMetadataDto> | null;
6277
- };
6741
+ /** Uma linha satisfaz a condição (valor em `valorRaw`, tipicamente `valoresPorItemId[it.id]`). */
6742
+ declare function consultaPassaItem<TItem>(item: TItem, it: ConsultaFiltroItem<string>, valorRaw: string, adapters: ConsultaFiltroMatchAdapters<TItem>): boolean;
6743
+ declare function consultaPassaTodosItens<TItem>(item: TItem, itens: ConsultaFiltroItem<string>[], valoresPorItemId: Record<string, string>, adapters: ConsultaFiltroMatchAdapters<TItem>): boolean;
6744
+
6745
+ /** Contrato mínimo para itens enviados ao backend (filtros avulsos). */
6746
+ interface FiltroItemEntradaGenerico {
6747
+ campo: string;
6748
+ operador: string;
6749
+ valor: string;
6750
+ valorAte: string;
6751
+ juncao: string;
6752
+ }
6753
+ interface MontarFiltrosServidorPresetOptions<TItem extends FiltroItemEntradaGenerico = FiltroItemEntradaGenerico> {
6754
+ boolColumnIds?: readonly string[];
6755
+ mapLinha?: (linha: FiltroItemEntradaGenerico) => TItem;
6756
+ valorTipoPorColuna?: (coluna: string) => ConsultaValorTipo;
6757
+ }
6758
+ /** @deprecated Use {@link MontarFiltrosServidorPresetOptions}. */
6759
+ type MontarFiltrosGrpcPresetOptions<TItem extends FiltroItemEntradaGenerico = FiltroItemEntradaGenerico> = MontarFiltrosServidorPresetOptions<TItem>;
6760
+ type ValoresConsultaPresetUi = Record<string, string | null | undefined>;
6761
+ /**
6762
+ * Converte preset + valores da UI em lista para filtros avulsos no servidor.
6763
+ */
6764
+ declare function montarFiltrosServidorPreset<TColuna extends string, TItem extends FiltroItemEntradaGenerico = FiltroItemEntradaGenerico>(preset: ConsultaFiltroPreset<TColuna> | null | undefined, valores: ValoresConsultaPresetUi, options?: MontarFiltrosServidorPresetOptions<TItem>): TItem[];
6765
+ /** @deprecated Use {@link montarFiltrosServidorPreset}. */
6766
+ declare const montarFiltrosGrpcPreset: typeof montarFiltrosServidorPreset;
6767
+ declare const CONSULTA_SERVIDOR_LISTA_QUERY_DEFAULTS: ConsultaListaServidorQuerySlice;
6768
+ interface ConsultaServidorExecutorOpts<TItem> {
6769
+ ensureAuth: () => Promise<void>;
6770
+ montarFiltros: (preset: ConsultaFiltroPreset<string> | undefined, valores: ValoresConsultaPresetUi) => FiltroItemEntradaGenerico[];
6771
+ consultar: (args: {
6772
+ filtrosAvulsos: FiltroItemEntradaGenerico[];
6773
+ pagina: number;
6774
+ tamanhoPagina: number;
6775
+ ordenarCampo: string;
6776
+ ordenarDesc: boolean;
6777
+ }) => Promise<{
6778
+ itens: TItem[];
6779
+ total: number;
6780
+ }>;
6781
+ gravarListaCache: (itens: TItem[]) => void;
6782
+ pagina?: number;
6783
+ tamanhoPagina?: number;
6784
+ ordenarCampo?: string;
6785
+ ordenarDesc?: boolean;
6786
+ }
6787
+ declare function executarConsultaServidorComPreset<TItem>(opts: ConsultaServidorExecutorOpts<TItem> & {
6788
+ presetId: string | null;
6789
+ valores: ValoresConsultaPresetUi;
6790
+ presets: ConsultaFiltroPreset<string>[];
6791
+ }): Promise<{
6792
+ itens: TItem[];
6793
+ total: number;
6794
+ }>;
6278
6795
 
6279
6796
  declare enum ConsultaGridColumnFormat {
6280
6797
  CONSULTA_GRID_COLUMN_FORMAT_UNSPECIFIED = 0,
@@ -6332,6 +6849,18 @@ interface ConsultaEnumSelectOptionDto {
6332
6849
  label: string;
6333
6850
  description?: string | undefined;
6334
6851
  }
6852
+ interface ConsultaGridNavigateDto {
6853
+ route: string;
6854
+ idProperty: string;
6855
+ tooltip?: string | undefined;
6856
+ icon?: string | undefined;
6857
+ openMode?: number | undefined;
6858
+ permission?: string | undefined;
6859
+ hideWhenNull?: boolean | undefined;
6860
+ queryParamName?: string | undefined;
6861
+ routeParamName?: string | undefined;
6862
+ preserveNavigationState?: boolean | undefined;
6863
+ }
6335
6864
  interface ConsultaGridColunaDto {
6336
6865
  key: string;
6337
6866
  header: string;
@@ -6341,6 +6870,8 @@ interface ConsultaGridColunaDto {
6341
6870
  columnFormat: ConsultaGridColumnFormat;
6342
6871
  /** Opções enum quando `column_format` = ENUM. */
6343
6872
  selectOptions?: readonly ConsultaEnumSelectOptionDto[] | undefined;
6873
+ /** Navegação para cadastro relacionado (`[GridNavigate]`). */
6874
+ navigate?: ConsultaGridNavigateDto | undefined;
6344
6875
  }
6345
6876
  interface ConsultaCardCampoDto {
6346
6877
  key: string;
@@ -7543,6 +8074,25 @@ type ConsultaGridColunaDtoLike = {
7543
8074
  columnFormat?: number;
7544
8075
  selectOptions?: readonly DataGridEnumOption[];
7545
8076
  select_options?: readonly DataGridEnumOption[];
8077
+ navigate?: GridNavigateConfigWire | undefined;
8078
+ };
8079
+ type GridNavigateConfigWire = {
8080
+ route?: string;
8081
+ idProperty?: string;
8082
+ id_property?: string;
8083
+ tooltip?: string;
8084
+ icon?: string;
8085
+ openMode?: number;
8086
+ open_mode?: number;
8087
+ permission?: string;
8088
+ hideWhenNull?: boolean;
8089
+ hide_when_null?: boolean;
8090
+ queryParamName?: string;
8091
+ query_param_name?: string;
8092
+ routeParamName?: string;
8093
+ route_param_name?: string;
8094
+ preserveNavigationState?: boolean;
8095
+ preserve_navigation_state?: boolean;
7546
8096
  };
7547
8097
  type ConsultaMetadataReplyLike = {
7548
8098
  campos?: ConsultaMetadataCampo[];
@@ -7598,6 +8148,8 @@ declare const CONSULTA_PEDIDOS_GRID_OPTS: MapConsultaGridColunasOpts;
7598
8148
  /** Deriva remaps `*Fmt` a partir de `column_format` nas colunas gRPC; `base` sobrepõe inferidos em chaves repetidas. */
7599
8149
  declare function mergeMapConsultaGridColunasOptsComColumnFormat(colunas: readonly ConsultaGridColunaDtoLike[] | undefined, base?: MapConsultaGridColunasOpts): MapConsultaGridColunasOpts | undefined;
7600
8150
  declare function tipoCampoMetadataParaUi(tipo: string): ConsultaValorTipo;
8151
+ /** Converte `navigate` da coluna gRPC/metadata para config da grelha/cartão. */
8152
+ declare function mapGridNavigateFromColuna(col: ConsultaGridColunaDtoLike): GridNavigateConfig | undefined;
7601
8153
  /** Monta colunas `structra-ui` a partir do metadata gRPC; acrescenta sempre a coluna de acções. */
7602
8154
  declare function mapConsultaGridColunasParaDataGrid(colunas: readonly ConsultaGridColunaDtoLike[], opts?: MapConsultaGridColunasOpts): DataGridColumn<Record<string, unknown>>[];
7603
8155
  /**
@@ -7959,9 +8511,12 @@ declare class ConsultaBasePageComponent implements OnInit, AfterViewInit, OnDest
7959
8511
  private readonly bp;
7960
8512
  private readonly destroyRef;
7961
8513
  private readonly host;
8514
+ private readonly scrollState;
8515
+ private scrollPreserveHostDetach;
7962
8516
  readonly scrollContainer: _angular_core.WritableSignal<HTMLElement | null>;
7963
8517
  readonly isMobileLayout: _angular_core.WritableSignal<boolean>;
7964
8518
  readonly mostrarBotaoVoltarTopoMobile: _angular_core.Signal<boolean>;
8519
+ readonly gridNavigatePreserve: _angular_core.Signal<GridNavigatePreserveContext | null>;
7965
8520
  constructor();
7966
8521
  private readonly cadastroFiltroDialog;
7967
8522
  /** Template: `contextMenuId` do select «Filtro». */
@@ -8029,6 +8584,13 @@ declare class ConsultaBasePageComponent implements OnInit, AfterViewInit, OnDest
8029
8584
  * Evita mostrar só a coluna «Ações» ({@link GRID_BOOTSTRAP_VAZIO}) antes das colunas de dados.
8030
8585
  */
8031
8586
  readonly listaGrelhaExibirLoading: _angular_core.Signal<boolean>;
8587
+ /**
8588
+ * Skeleton instantâneo (antes do metadata): footer da grelha só com chrome, sem texto de paginação.
8589
+ * Mantém chrome-only enquanto não houver colunas de dados — inclusive com {@link carregandoListaExplicito}
8590
+ * no arranque (`ativarSkeletonGrelhaArranqueFetchSeNecessario`). Com colunas reais, o loading explícito
8591
+ * pode mostrar o placeholder de paginação («0 a 0 de 0»).
8592
+ */
8593
+ readonly gridPlaceholderPagerChromeOnly: _angular_core.Signal<boolean>;
8032
8594
  readonly items: _angular_core.WritableSignal<unknown[]>;
8033
8595
  readonly painelFiltroRecolhido: _angular_core.WritableSignal<boolean>;
8034
8596
  readonly presets: _angular_core.WritableSignal<ConsultaFiltroPreset<string>[]>;
@@ -8078,6 +8640,7 @@ declare class ConsultaBasePageComponent implements OnInit, AfterViewInit, OnDest
8078
8640
  private finalizarArranqueConsulta;
8079
8641
  ngAfterViewInit(): void;
8080
8642
  private syncScrollContainer;
8643
+ private attachConsultaPageHostScrollPreserve;
8081
8644
  ngOnDestroy(): void;
8082
8645
  private fmtData;
8083
8646
  colunaTituloCurto(coluna: string): string;
@@ -8217,11 +8780,7 @@ declare function resolveConsultaNavKeysFromPageLayout(layout: CadastroFormPageLa
8217
8780
  voltarSemRecarregar: string;
8218
8781
  navIdRemovidoKey?: string;
8219
8782
  };
8220
- type ConsultaMapCardLinha = {
8221
- title: string;
8222
- subtitle: string;
8223
- avatarText: string;
8224
- };
8783
+ type ConsultaMapCardLinha = CardItemView;
8225
8784
  /**
8226
8785
  * Deriva `consultaListaQuerySlice` da metadata `[GridConfig]` (`InitConsultaReply.metadata.grid_config`).
8227
8786
  * Omissão ou campo vazio ⇒ `undefined` (o runtime usa só defaults globais).
@@ -8868,14 +9427,6 @@ interface BuildCadastroPageRuntimeOptions {
8868
9427
  */
8869
9428
  declare function buildCadastroPageRuntime<TFormValue, TResponse>(config: CadastroPageConfig<TFormValue, TResponse>, deps: CadastroRuntimeDeps, options?: BuildCadastroPageRuntimeOptions): CadastroPageRuntime<TResponse>;
8870
9429
 
8871
- /** Espelho de {@code CadastroActionStateDto}. */
8872
- type CadastroActionStateDto = {
8873
- readonly visible: boolean;
8874
- readonly enabled: boolean;
8875
- readonly tooltip: string;
8876
- readonly reason: string;
8877
- };
8878
-
8879
9430
  /** Parâmetros de uma página remota para SearchSelect de referência. */
8880
9431
  interface CadastroReferenceListPageParams {
8881
9432
  readonly query: string;
@@ -10980,75 +11531,6 @@ declare function computeReferenciaHasMore(page: number, pageSize: number, itemsC
10980
11531
  /** Normaliza resposta gRPC/API de referência paginada. */
10981
11532
  declare function toCadastroReferenceListPageResult<TItem>(items: readonly TItem[], total: number, params: Pick<CadastroReferenceListPageParams, 'page' | 'pageSize'>, hasMore?: boolean): CadastroReferenceListPageResult<TItem>;
10982
11533
 
10983
- /** Autorização de rotas de cadastro referenciado (implementação no app host — ex.: menu + permissões). */
10984
- interface CadastroReferenciaRouteAccess {
10985
- /** Pode aceder à entidade referenciada (lista / cadastro em leitura). */
10986
- podeVisualizarRota(rota: string, chavePermissao?: string): boolean;
10987
- /** Pode abrir «novo» / cadastro inline de criação. */
10988
- podeCriarRota(rotaNovo: string, chavePermissao?: string): boolean;
10989
- /** Pode abrir cadastro de edição (`:id`). */
10990
- podeEditarRota(rotaAlterar: string, chavePermissao?: string): boolean;
10991
- }
10992
- /** Comportamento legado quando o host não registra política (lib demo / testes). */
10993
- declare const CADASTRO_REFERENCIA_ROUTE_ACCESS_PERMISSIVE: CadastroReferenciaRouteAccess;
10994
- declare const CADASTRO_REFERENCIA_ROUTE_ACCESS: InjectionToken<CadastroReferenciaRouteAccess>;
10995
- type ModoPermissaoReferencia = 'All' | 'Any';
10996
- declare function normalizarRotaReferencia(rota: string): string;
10997
- declare function rotaListaReferencia(rota: string): string;
10998
- type CadastroReferenciaAcoesPermitidas = {
10999
- readonly permitirCriar: boolean;
11000
- readonly permitirAlterar: boolean;
11001
- readonly criarDesabilitado?: boolean;
11002
- readonly alterarDesabilitado?: boolean;
11003
- readonly criarTooltipBloqueio?: string;
11004
- readonly alterarTooltipBloqueio?: string;
11005
- };
11006
- type CadastroReferenciaPermissoesMetadata = {
11007
- readonly permissaoVisualizar?: string;
11008
- readonly permissaoCriar?: string;
11009
- readonly permissaoEditar?: string;
11010
- readonly permissoesVisualizar?: readonly string[];
11011
- readonly permissoesCriar?: readonly string[];
11012
- readonly permissoesEditar?: readonly string[];
11013
- readonly modoPermissao?: ModoPermissaoReferencia;
11014
- };
11015
- declare function modoPermissaoReferenciaFromWire(raw: unknown): ModoPermissaoReferencia;
11016
- /** Extrai chaves RBAC declaradas na metadata de referência (snake_case ou camelCase). */
11017
- declare function permissoesReferenciaMetadata(ref?: Partial<{
11018
- permissaoVisualizar?: string;
11019
- permissaoCriar?: string;
11020
- permissaoEditar?: string;
11021
- permissao_visualizar?: string;
11022
- permissao_criar?: string;
11023
- permissao_editar?: string;
11024
- permissoesVisualizar?: readonly string[];
11025
- permissoesCriar?: readonly string[];
11026
- permissoesEditar?: readonly string[];
11027
- permissoes_visualizar?: readonly string[];
11028
- permissoes_criar?: readonly string[];
11029
- permissoes_editar?: readonly string[];
11030
- modoPermissao?: ModoPermissaoReferencia | string;
11031
- modo_permissao?: ModoPermissaoReferencia | string | number;
11032
- }> | null): CadastroReferenciaPermissoesMetadata;
11033
- /** Aplica metadata + política de rotas do host aos atalhos (+ / …) da referência. */
11034
- declare function resolverAcoesReferenciaPorRota(access: CadastroReferenciaRouteAccess, params: {
11035
- readonly rotaNovo?: string;
11036
- readonly rotaAlterar?: string;
11037
- readonly metadataPermitirCriar?: boolean;
11038
- readonly metadataPermitirAlterar?: boolean;
11039
- readonly permissaoVisualizar?: string;
11040
- readonly permissaoCriar?: string;
11041
- readonly permissaoEditar?: string;
11042
- readonly permissoesVisualizar?: readonly string[];
11043
- readonly permissoesCriar?: readonly string[];
11044
- readonly permissoesEditar?: readonly string[];
11045
- readonly modoPermissao?: ModoPermissaoReferencia;
11046
- readonly actionKeyCreate?: string;
11047
- readonly actionKeyEdit?: string;
11048
- readonly actionKeyView?: string;
11049
- readonly actionStates?: ReadonlyMap<string, CadastroActionStateDto>;
11050
- }): CadastroReferenciaAcoesPermitidas;
11051
-
11052
11534
  /** Path único para `[cadastroNav]` (ex.: `/home/categorias/novo`). */
11053
11535
  declare function novoPathCommandsFromRota(rotaNovo: string): readonly string[];
11054
11536
  /** Converte `cadastroNav` (um segmento com path completo ou vários segmentos) em comandos do `Router`. */
@@ -11628,7 +12110,7 @@ declare class FormCollectionComponent {
11628
12110
  readonly agGridPageSize: _angular_core.Signal<number>;
11629
12111
  readonly initialAgGridPageZeroBased: _angular_core.Signal<number>;
11630
12112
  /** Vista mobile + coleção remota: modo «remote» para pedidos de página ao servidor. */
11631
- readonly mobileCardListDataMode: _angular_core.Signal<"remote" | "memory">;
12113
+ readonly mobileCardListDataMode: _angular_core.Signal<"memory" | "remote">;
11632
12114
  readonly mobileCardListTotalCountRemote: _angular_core.Signal<number | null>;
11633
12115
  readonly mobileCardListHasNextPage: _angular_core.Signal<boolean>;
11634
12116
  /** Skeleton no fundo ao mudar de página remota (mantém linhas visíveis). */
@@ -11672,7 +12154,7 @@ declare class FormCollectionComponent {
11672
12154
  /** Rótulo omitido na UI — o cartão da secção já identifica «Imagens do produto». */
11673
12155
  readonly bulkMidiaUploadLabelUi: _angular_core.Signal<string>;
11674
12156
  readonly podeRemoverSelecionado: _angular_core.Signal<boolean>;
11675
- readonly collectionLayoutChrome: _angular_core.Signal<"plain" | "card" | "responsive">;
12157
+ readonly collectionLayoutChrome: _angular_core.Signal<"card" | "plain" | "responsive">;
11676
12158
  readonly mapCardItemView: CardListMapFn<FormCollectionGridRow>;
11677
12159
  constructor();
11678
12160
  /**
@@ -12145,9 +12627,17 @@ declare function coerceReportBoolean(value: unknown): boolean;
12145
12627
  interface ReportMetadata {
12146
12628
  key: string;
12147
12629
  titulo: string;
12630
+ /** Descrição curta exibida abaixo do título na pré-visualização. */
12631
+ descricao?: string | null;
12148
12632
  filtros: ReportFilterMeta[];
12149
12633
  colunas: ReportColumnMeta[];
12150
12634
  }
12635
+ /** Formata o título da pré-visualização sem repetir o rótulo da árvore lateral. */
12636
+ declare function formatReportPreviewTitulo(titulo: string | null | undefined, options?: {
12637
+ rotuloArvore?: string | null;
12638
+ }): string | null;
12639
+ /** Retorna o primeiro subtítulo/descrição não vazio. */
12640
+ declare function resolveReportPreviewSubtitulo(...fontes: Array<string | null | undefined>): string | null;
12151
12641
  /** Critério avulso no mesmo formato da consulta base (gRPC `FiltroItemEntrada`). */
12152
12642
  interface ReportFiltroItemEntrada {
12153
12643
  campo: string;
@@ -12223,10 +12713,10 @@ declare function mapReportTreeToTreeViewNodes(nodes: ReportTreeNode[]): TreeView
12223
12713
  /** Grupos de relatório criados pelo backend (`grp-cadastros`, etc.). */
12224
12714
  declare function isReportGroupNode(node: ReportTreeNode, groupIdPrefix?: string): boolean;
12225
12715
  /**
12226
- * Árvore de relatórios com expansão automática dos ramos ancestrais do item seleccionado.
12227
- * Grupos `grp-*` recolhidos por omissão, excepto o caminho até ao relatório activo.
12716
+ * Árvore de relatórios com hints de expansão inicial (só raiz aberta; categorias recolhidas).
12717
+ * O estado de expandir/recolher na sessão fica no {@link StructraTreeExpandStateService} via `app-tree-view`.
12228
12718
  */
12229
- declare function mapReportTreeToTreeViewNodesForSelection(nodes: ReportTreeNode[], selectedReportId: string | null, options?: {
12719
+ declare function mapReportTreeToTreeViewNodesForSelection(nodes: ReportTreeNode[], _selectedReportId: string | null, options?: {
12230
12720
  groupIdPrefix?: string;
12231
12721
  }): ReturnType<typeof mapReportTreeToTreeViewNodes>;
12232
12722
  declare function reportExistsInTree(reportId: string, nodes: ReportTreeNode[]): boolean;
@@ -12235,6 +12725,24 @@ declare function resolveInitialReportId(nodes: ReportTreeNode[], options?: {
12235
12725
  findFirstLeaf?: (nodes: ReportTreeNode[]) => string | null;
12236
12726
  }): string | null;
12237
12727
 
12728
+ /** Mapeia linha de relatório para cartão mobile (mesmo padrão da consulta / coleção só-leitura). */
12729
+ declare function buildReportRowCardMap(colunas: readonly ReportColumnMeta[]): CardListMapFn<Record<string, unknown>>;
12730
+
12731
+ declare class StructraReportPreviewHeaderComponent {
12732
+ /** Título do relatório (metadata ou resultado). */
12733
+ titulo: string | null;
12734
+ /** Descrição curta (metadata) ou subtítulo do resultado. */
12735
+ subtitulo: string | null;
12736
+ /** Rótulo da árvore lateral — evita repetir o mesmo texto no cabeçalho. */
12737
+ rotuloArvore: string | null;
12738
+ showIcon: boolean;
12739
+ iconClass: string;
12740
+ displayTitulo(): string | null;
12741
+ displaySubtitulo(): string | null;
12742
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportPreviewHeaderComponent, never>;
12743
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportPreviewHeaderComponent, "structra-report-preview-header", never, { "titulo": { "alias": "titulo"; "required": false; }; "subtitulo": { "alias": "subtitulo"; "required": false; }; "rotuloArvore": { "alias": "rotuloArvore"; "required": false; }; "showIcon": { "alias": "showIcon"; "required": false; }; "iconClass": { "alias": "iconClass"; "required": false; }; }, {}, never, never, true, never>;
12744
+ }
12745
+
12238
12746
  /**
12239
12747
  * Cache em memória da árvore de relatórios (escopo da aba), indexado por {@link cacheKey}.
12240
12748
  * Persiste entre navegações SPA; limpa no F5 ou {@link invalidate}.
@@ -12257,11 +12765,12 @@ declare class StructraReportTreeComponent {
12257
12765
  selectedId: string | null;
12258
12766
  title: string;
12259
12767
  titleIconClass: string;
12260
- expansionStateKey: unknown;
12768
+ /** Chave de cache em memória de expansão e seleção (`StructraTreeExpandStateService`). */
12769
+ expandStateTreeId: string;
12261
12770
  loading: boolean;
12262
12771
  selectedIdChange: EventEmitter<string | null>;
12263
12772
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportTreeComponent, never>;
12264
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportTreeComponent, "structra-report-tree", never, { "nodes": { "alias": "nodes"; "required": true; }; "selectedId": { "alias": "selectedId"; "required": false; }; "title": { "alias": "title"; "required": false; }; "titleIconClass": { "alias": "titleIconClass"; "required": false; }; "expansionStateKey": { "alias": "expansionStateKey"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; }, { "selectedIdChange": "selectedIdChange"; }, never, never, true, never>;
12773
+ 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; }; "expandStateTreeId": { "alias": "expandStateTreeId"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; }, { "selectedIdChange": "selectedIdChange"; }, never, never, true, never>;
12265
12774
  static ngAcceptInputType_loading: unknown;
12266
12775
  }
12267
12776
 
@@ -12305,18 +12814,42 @@ declare class StructraReportFilterPanelComponent {
12305
12814
  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>;
12306
12815
  }
12307
12816
 
12308
- declare class StructraReportTableComponent {
12817
+ declare class StructraReportTableComponent implements OnChanges {
12309
12818
  colunas: ReportColumnMeta[];
12310
12819
  linhas: Array<Record<string, unknown>>;
12820
+ reportTitulo: string | null;
12821
+ reportSubtitulo: string | null;
12822
+ reportRotuloArvore: string | null;
12823
+ showReportHeader: boolean;
12824
+ /** Lista em cartões em viewports estreitas (consulta Structra). Impressão/PDF mantém tabela. */
12825
+ mobileCards: boolean;
12826
+ /** Paginação remota: scroll infinito na área `.structra-report-table__scroll`. */
12827
+ paginated: boolean;
12311
12828
  totalRegistros: number;
12829
+ hasNextPage: boolean;
12830
+ loadingMore: boolean;
12831
+ readonly loadMore: EventEmitter<void>;
12832
+ private loadMorePending;
12833
+ private static readonly SCROLL_LOAD_THRESHOLD_PX;
12312
12834
  readonly isBooleanColumn: typeof isReportBooleanColumn;
12313
12835
  readonly isNowrapColumn: typeof isReportNowrapColumn;
12314
12836
  readonly columnWidthStyle: typeof reportColumnWidthStyle;
12837
+ readonly cardEmptyMessage = "Nenhum registro encontrado para os filtros informados.";
12838
+ mapCard: CardListMapFn<Record<string, unknown>>;
12839
+ get cardListDataMode(): CardListDataMode;
12840
+ ngOnChanges(changes: SimpleChanges): void;
12841
+ onScrollAreaScroll(ev: Event): void;
12842
+ onCardListLoadMore(): void;
12843
+ private canRequestLoadMore;
12844
+ private emitLoadMore;
12315
12845
  hasFixedColumnWidths(): boolean;
12316
12846
  cellValue(linha: Record<string, unknown>, coluna: ReportColumnMeta): string;
12317
12847
  booleanChecked(linha: Record<string, unknown>, coluna: ReportColumnMeta): boolean;
12318
12848
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportTableComponent, never>;
12319
- 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>;
12849
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportTableComponent, "structra-report-table", never, { "colunas": { "alias": "colunas"; "required": true; }; "linhas": { "alias": "linhas"; "required": true; }; "reportTitulo": { "alias": "reportTitulo"; "required": false; }; "reportSubtitulo": { "alias": "reportSubtitulo"; "required": false; }; "reportRotuloArvore": { "alias": "reportRotuloArvore"; "required": false; }; "showReportHeader": { "alias": "showReportHeader"; "required": false; }; "mobileCards": { "alias": "mobileCards"; "required": false; }; "paginated": { "alias": "paginated"; "required": false; }; "totalRegistros": { "alias": "totalRegistros"; "required": false; }; "hasNextPage": { "alias": "hasNextPage"; "required": false; }; "loadingMore": { "alias": "loadingMore"; "required": false; }; }, { "loadMore": "loadMore"; }, never, never, true, never>;
12850
+ static ngAcceptInputType_paginated: unknown;
12851
+ static ngAcceptInputType_hasNextPage: unknown;
12852
+ static ngAcceptInputType_loadingMore: unknown;
12320
12853
  }
12321
12854
 
12322
12855
  declare class StructraReportPaginatorComponent {
@@ -12334,12 +12867,40 @@ declare class StructraReportPaginatorComponent {
12334
12867
  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>;
12335
12868
  }
12336
12869
 
12870
+ type StructraReportEmptyStatePreset = 'tree' | 'search';
12337
12871
  declare class StructraReportEmptyStateComponent {
12872
+ private readonly bp;
12873
+ private readonly cdr;
12874
+ private readonly destroyRef;
12875
+ /** Layout empilhado (árvore acima): viewport abaixo de 1024px. */
12876
+ private isStackedLayout;
12877
+ /** Preset pronto: `tree` (sem seleção) ou `search` (aguardando pesquisa). */
12878
+ preset: StructraReportEmptyStatePreset | null;
12338
12879
  message: string;
12339
12880
  description: string;
12340
12881
  iconClass: string;
12882
+ /** Nome do relatório exibido discretamente no empty state. */
12883
+ reportTitulo: string;
12884
+ /** Alias de {@link reportTitulo}. */
12885
+ titulo: string;
12886
+ /** Exibe botão «Pesquisar» (preset `search` em relatórios) quando não há `[emptyAction]` projetado. */
12887
+ showPesquisarAction: boolean;
12888
+ pesquisarActionLabel: string;
12889
+ pesquisarDisabled: boolean;
12890
+ readonly pesquisar: EventEmitter<void>;
12891
+ private projectedEmptyAction?;
12892
+ constructor();
12893
+ get shouldShowPesquisarAction(): boolean;
12894
+ get effectiveMessage(): string;
12895
+ /** Preset `tree` ou mensagem padrão de seleção na árvore (uso sem `[preset]`). */
12896
+ private usesTreeSelectionMessage;
12897
+ get effectiveDescription(): string;
12898
+ get effectiveIconClass(): string;
12899
+ get effectiveReportTitulo(): string;
12341
12900
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportEmptyStateComponent, never>;
12342
- 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>;
12901
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportEmptyStateComponent, "structra-report-empty-state", never, { "preset": { "alias": "preset"; "required": false; }; "message": { "alias": "message"; "required": false; }; "description": { "alias": "description"; "required": false; }; "iconClass": { "alias": "iconClass"; "required": false; }; "reportTitulo": { "alias": "reportTitulo"; "required": false; }; "titulo": { "alias": "titulo"; "required": false; }; "showPesquisarAction": { "alias": "showPesquisarAction"; "required": false; }; "pesquisarActionLabel": { "alias": "pesquisarActionLabel"; "required": false; }; "pesquisarDisabled": { "alias": "pesquisarDisabled"; "required": false; }; }, { "pesquisar": "pesquisar"; }, ["projectedEmptyAction"], ["[emptyAction]"], true, never>;
12902
+ static ngAcceptInputType_showPesquisarAction: unknown;
12903
+ static ngAcceptInputType_pesquisarDisabled: unknown;
12343
12904
  }
12344
12905
 
12345
12906
  declare class StructraReportLoadingSkeletonComponent {
@@ -12370,13 +12931,13 @@ declare class StructraReportViewerComponent {
12370
12931
  * Shell reutilizável de relatórios: árvore com cache em memória + área principal projectável.
12371
12932
  * Usar em qualquer sistema com módulo de relatórios (Oficina, templates Structra, etc.).
12372
12933
  */
12373
- declare class StructraReportPageBaseComponent implements OnInit {
12934
+ declare class StructraReportPageBaseComponent implements OnInit, OnChanges {
12374
12935
  private readonly transport;
12375
12936
  private readonly treeCache;
12376
12937
  /** Isola cache por tenant/módulo (ex.: `oficina:${tenantId}`). */
12377
12938
  cacheKey: string;
12378
- /** Repõe expansão da árvore Structra (incrementar ao reentrar na rota). */
12379
- expansionStateKey: unknown;
12939
+ /** Identificador da árvore no cache de expansão em memória. */
12940
+ expandStateTreeId: string;
12380
12941
  initialReportId: string | null;
12381
12942
  autoSelectFirst: boolean;
12382
12943
  treeTitle: string;
@@ -12390,9 +12951,11 @@ declare class StructraReportPageBaseComponent implements OnInit {
12390
12951
  readonly treeNodes: _angular_core.WritableSignal<ReportTreeNode[]>;
12391
12952
  readonly loadingTree: _angular_core.WritableSignal<boolean>;
12392
12953
  private readonly selectedIdInternal;
12954
+ /** Estado único de seleção (sincronizado com `@Input selectedReportId` em `ngOnChanges`). */
12393
12955
  readonly effectiveSelectedId: _angular_core.Signal<string | null>;
12394
12956
  readonly treeViewNodes: _angular_core.Signal<structra_ui.TreeViewNode[]>;
12395
12957
  constructor();
12958
+ ngOnChanges(changes: SimpleChanges): void;
12396
12959
  ngOnInit(): void;
12397
12960
  selectReport(id: string | null): void;
12398
12961
  refreshTree(force?: boolean): Promise<void>;
@@ -12401,7 +12964,7 @@ declare class StructraReportPageBaseComponent implements OnInit {
12401
12964
  carregarArvore(force?: boolean): Promise<void>;
12402
12965
  onTreeSelected(id: string | null): void;
12403
12966
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructraReportPageBaseComponent, never>;
12404
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportPageBaseComponent, "structra-report-page-base", never, { "cacheKey": { "alias": "cacheKey"; "required": false; }; "expansionStateKey": { "alias": "expansionStateKey"; "required": false; }; "initialReportId": { "alias": "initialReportId"; "required": false; }; "autoSelectFirst": { "alias": "autoSelectFirst"; "required": false; }; "treeTitle": { "alias": "treeTitle"; "required": false; }; "treeTitleIconClass": { "alias": "treeTitleIconClass"; "required": false; }; "groupIdPrefix": { "alias": "groupIdPrefix"; "required": false; }; "useCache": { "alias": "useCache"; "required": false; }; "selectedReportId": { "alias": "selectedReportId"; "required": false; }; }, { "selectedReportIdChange": "selectedReportIdChange"; "treeLoaded": "treeLoaded"; "treeLoadError": "treeLoadError"; }, never, ["*"], true, never>;
12967
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportPageBaseComponent, "structra-report-page-base", never, { "cacheKey": { "alias": "cacheKey"; "required": false; }; "expandStateTreeId": { "alias": "expandStateTreeId"; "required": false; }; "initialReportId": { "alias": "initialReportId"; "required": false; }; "autoSelectFirst": { "alias": "autoSelectFirst"; "required": false; }; "treeTitle": { "alias": "treeTitle"; "required": false; }; "treeTitleIconClass": { "alias": "treeTitleIconClass"; "required": false; }; "groupIdPrefix": { "alias": "groupIdPrefix"; "required": false; }; "useCache": { "alias": "useCache"; "required": false; }; "selectedReportId": { "alias": "selectedReportId"; "required": false; }; }, { "selectedReportIdChange": "selectedReportIdChange"; "treeLoaded": "treeLoaded"; "treeLoadError": "treeLoadError"; }, never, ["*"], true, never>;
12405
12968
  static ngAcceptInputType_useCache: unknown;
12406
12969
  }
12407
12970
 
@@ -12428,5 +12991,5 @@ declare class StructraReportPageComponent {
12428
12991
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructraReportPageComponent, "structra-report-page", never, { "autoSelectFirst": { "alias": "autoSelectFirst"; "required": false; }; "autoPesquisarOnSelect": { "alias": "autoPesquisarOnSelect"; "required": false; }; "cacheKey": { "alias": "cacheKey"; "required": false; }; }, { "reportSelected": "reportSelected"; "reportLoaded": "reportLoaded"; }, never, never, true, never>;
12429
12992
  }
12430
12993
 
12431
- 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, ConsultaPageLoadingSkeletonComponent, 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_NAV_CONTENT_READY, 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, StructraReportPageBaseComponent, StructraReportPageComponent, StructraReportPaginatorComponent, StructraReportTableComponent, StructraReportTreeCacheService, StructraReportTreeComponent, StructraReportTreeSkeletonComponent, StructraReportViewerComponent, ScriptEditorFieldComponent as StructraScriptEditorComponent, StructraShellScrollRestorationService, StructraShellTopbarSlotService, AppSidebarBottomActionsTemplateDirective as StructraSidebarBottomActionsDirective, AppSidebarFooterTemplateDirective as StructraSidebarFooterDirective, AppSidebarHeaderTemplateDirective as StructraSidebarHeaderDirective, AppSidebarUserInfoTemplateDirective as StructraSidebarUserInfoDirective, StructraSidebarUserPanelComponent, SwitchFieldComponent, THEME_PRIMARY_COLOR_LABEL_PT_BR, TOAST_REGISTRO_EXCLUIDO_SUCESSO, TableEmptyStateComponent, TableToolbarComponent, TextFieldComponent, TextareaFieldComponent, ThemeDirective, ToastHostComponent, ToastService, TooltipComponent, TooltipPanelTemplateDirective, TreeViewComponent, USUARIOS_CONSULTA_GRID_OPTS, USUARIOS_NAV_ID_EXCLUIDO, USUARIOS_NAV_LINHA_GRAVADA, USUARIOS_NAV_VOLTAR_SEM_RECARREGAR, VENDEDORES_NAV_ID_EXCLUIDO, VENDEDORES_NAV_LINHA_GRAVADA, VENDEDORES_NAV_VOLTAR_SEM_RECARREGAR, ValidationSummaryComponent, agruparCamposMetadataPorSecao, agruparPermissionTabs, anchoredOverlayPositions, aplicarNormalizacaoMultiselectIdsNoPartial, aplicarProdutoDtoNoFormulario, appendCadastroPageActiveTabQuery, appendPdfIframeViewerParams, applyCadastroCollectionArrayValidators, applyCadastroModoSenhaNovos, applyCollectionValidationSummaryNavigation, applyCollectionValueToFormArray, applyEntityToCadastroFormByMetadata, applyOptionalThemeHostClasses, applyPickedCalendarDate, buildCadastroFiltroDialogItensGridRows, buildCadastroMetadataShellRuntime, buildCadastroPageActiveTabPageKey, buildCadastroPageActiveTabPageKeyFromLayout, buildCadastroPageRuntime, buildCadastroRedirectReturnUrl, buildCadastroReferenciaDialogContext, buildCatalogoStubConsultaRuntime, buildConsultaConfirmDuplicarLinhaFromLayout, buildConsultaConfirmRemoverLinhaFromLayout, buildConsultaDefaultIsItemGuard, buildConsultaListaCacheKey, buildConsultaPageMetadataUnified, buildConsultaPageRuntime, buildDecimalBrDisplay, buildDecimalBrParseString, buildDefaultConsultaMapCardFromColunasGrid, buildEmptyStateOverlayHtml, buildFormContainerStateStorageKey, buildFormGroupFromCadastroCampos, buildHistoryStateAfterReturningFromNestedInlineChild, buildInlineReturnStateForChildCadastro, buildNovoFormDefaultsFromCampos, buildRouteReuseKeyFromAppPathname, buildRouteReuseKeyFromNovoRouterLink, buildStructraAdminRouteRedirectCacheKey, buildStructraAdminRouteRedirectChildUrl, buildStructraPageCacheCadastroInitKey, buildStructraPageCacheRouteScope, buildStructraPageFooterParts, buildStructraSidebarTemplateContext, buildValidationMetaFromCadastroCampos, cadastroBuildImageUploadMetadata, cadastroCampoBlocoEditorOcupaLinhaInteira, cadastroCampoBooleanOcupaLinhaInteira, cadastroCampoMetadataDtoFromPartial, cadastroCampoMetadataEhBoolean, cadastroCampoMetadataLarguraCompacta, cadastroCampoMetadataLarguraFixaCss, cadastroCampoReferenciaMetadataDtoFromPartial, cadastroCampoRuleMaxLength, cadastroCampoScriptEditorLanguage, cadastroCampoScriptEditorMinHeight, cadastroCampoValidacaoDtoFromPartial, cadastroCampoWrapperWidthCss, cadastroCollectionEditorGridColumns, cadastroCollectionMaxItemsValidator, cadastroCollectionMinItemsValidator, cadastroConfirmExcluirPartialFromLayout, cadastroContainerLayoutSizeDoRecord, cadastroContainerPathJoin, cadastroCrudMessagesDoFormLayout, cadastroDeclarativeSnapshotDtoFromPartial, cadastroEnsureSingleBooleanInCollection, cadastroFieldsPerRowDoRecord, cadastroFlattenContainerRaw, cadastroFormDraftEnabledDoLayout, cadastroFormGridColumns, cadastroFormLayoutComoRecord, cadastroFormLayoutDoBundle, cadastroFormLayoutDoRuntime, cadastroFormLayoutPreserveActiveTab, cadastroFormPageLayoutFromPartial, cadastroGcd, cadastroGetCollectionItemControl, cadastroGridColumnSpanForFieldIndex, cadastroGridDenominadorTracks, cadastroGridTemplateColumnsLinhaUnicaSeAplicavel, cadastroInferExtensaoArquivo, cadastroInferImageContentType, cadastroLcm, cadastroMetadataDtoParaValidacaoLike, cadastroNavKeysStructra, cadastroNomeArquivoDaUploadUrl, cadastroNormalizarUploadUrlPorPrefixo, cadastroPageActionDtoFromPartial, cadastroPageActionsPorRegiao, cadastroPageActiveTabToRestore, cadastroPageComponentDtoFromPartial, cadastroPageComponentsPorRegiao, cadastroPageIdentityDoFormLayout, cadastroPageOverlayDtoFromPartial, cadastroPageShellAtivo, cadastroPageShellTabsKeepAliveFromLayout, cadastroPageTabDtoFromPartial, cadastroPageTabsOrdenados, cadastroPainelMaxWidthCss, cadastroRawBooleanDeep, cadastroRawNumber, cadastroRawString, cadastroReferenceEntryFromListarService, cadastroReferenciaOpenModeFromWire, cadastroReindexarCollectionOrdem, cadastroResolveId, cadastroSecaoFormGroupDense, cadastroSecaoPersisteExpandedState, cadastroSecaoRenderizaInlineDentroDoPai, cadastroSecaoSegmentosIntercalados, cadastroSecaoSegmentosParaRender, cadastroSecaoUsaFormGroup, cadastroSecaoUsaFormGroupComoBlocoVisual, cadastroSecaoUsaSuperficieDeclarativa, cadastroSingleBooleanCollectionBinding, cadastroTitulosEfectivosDoFormLayout, cadastroToastTitleEfectivoDoFormLayout, cadastroToolbarButtonDtoFromPartial, cadastroToolbarVisibilityDoFormLayout, cadastroUseBackToTopButtonFromLayout, cadastroValidationSummaryFlagsDoRecord, cadastroValidationSummaryPinnedFromFlags, cadastroWireCollectionOrdemReindexOnAdd, cadastroWireCollectionOrdemReindexOnAddRemove, cadastroWireCollectionOrdemReindexOnRemove, campoMetadataVisivelNoModo, caretIndexFromIntegerDigitCount, caretIndexFromSemantic, carregarOpcoesMultiselectViaSpec, cepMaskCompleteValidator, clearRequiredValidatorsOnReadOnlyCadastroFields, clearStructraCadastroInlineReturnSessionCacheForTests, clearStructraCadastroSessionStorageOnLogout, coerceDecimalPtBr, coerceReportBoolean, collectValidationSummaryItems, colunasGridTemFormatacaoDeclarativa, computeReferenciaHasMore, consoleLogLevelClass, consultaCampoMetadataDtoFromPartial, consultaCardCampoDtoFromPartial, consultaFiltroValorDataSomenteDia, consultaGridColunaDtoFromPartial, consultaGridColunaKeyParaCampoLinha, consultaGridConfigDtoFromPartial, consultaPassaItem, consultaPassaTodosItens, consultaUsuariosMetadataReplyFromPartial, consumeCadastroInlineFormDraftPendingRestore, consumirResultadoCadastroInlineCampoPessoaId, consumirResultadoCadastroInlineCampoReferencia, cpfCnpjMaskCompleteValidator, createCadastroDialogActivatedRoute, createCadastroMetadataPageConfig, createCadastroPadraoConfig, createCadastroRuntime, createCollectionFormArray, createCollectionItemFormGroup, createConsultaListaItemGuardFromFiltroUi, createConsultaOptionsListarResolver, createConsultaPadraoRuntime, createConsultaPresetSelectEmptyOptionsMessageSignal, createConsultaPresetStorageApi, createGrpcSaveRequestMapper, createInlineHostNavigation, createMapCardFromConsultaColunasGrid, createMapGridRowFromConsultaColunasGrid, createSaveRequestFromPartialMapper, criarDraftInlinePessoa, decimalPtBrNaoNegativoValidator, decimalPtBrToNullableNumber, defaultIsConsultaListItemMinimo, defaultParseLinhaGravadaJson, deleteConfirmPageConfigFromPartial, deriveCadastroTituloEditar, deriveConsultaListaItemGuardPropsFromFiltroUi, duplicateConfigFromLayout, duplicatePageConfigFromPartial, enrichCadastroReferenciaDialogPageConfig, ensureCadastroCollectionMinItems, ensureCadastroFormControlsFromMetadata, escapeHtml, evaluateStructraPageVisibleExpression, executarConsultaServidorComPreset, extractConsultaListaCacheNamespace, extractDecimalBrParts, fileIsLikelyImage, fileMatchesAccept, filtrarSecoesMetadataPorModo, filtrarUiSelectOptionsPainelComValorPersistente, filtrarUiSelectOptionsPorQuery, findCadastroCampoByKey, findFirstReportLeafId, findReportTreeLabel, fixedDigitsMaskCompleteValidator, flattenCadastroMetadataSecoes, fmtDataPt, fmtDocumentoCelulaConsultaGrid, formatAcceptForDisplay, formatDateTimePtBr, formatDecimalBr, formatDocumentoPessoaParaExibicao, formatFileSizeBytes, formatIntegerThousandsBr, formatMaskDigits, formatPhoneBr, formatUiFieldDateValue, getFilePreviewKind, getStructraActionsByGroup, getThemeClass, getThemeClassList, getThemePrimaryColorLabelPtBr, getThemeTokenClass, hexParaColorInput, inferCadastroItemFieldsFromPlainRows, inferCadastroListaUrlFallback, initialCadastroControlValue, injectEffectiveThemeId, isCadastroDuplicateNavigation, isCollectionField, isCollectionLikeField, isConsultaCardAutoSubtitleExcluded, isLegacyDarkThemeId, isLegacyFormContainerStateStorageKey, isLegacyNomeDocumentoReferencePreset, isReadonlyCollectionField, isReportBooleanColumn, isReportGroupNode, isReportNowrapColumn, isValidPhoneBr, libDialogPanelClasses, listaUrlFromRotaCadastro, listarItensCadastroReferencia, listarTodosPaginado, loadPresetsJson, loadStructraAdminRouteRedirectTarget, mapCadastroFormRawToPayload, mapConsultaGridColunasParaDataGrid, mapConsultaMetadataParaFiltroUi, mapErroTransporteParaMensagem as mapErroListaDefault, mapErroTransporteParaMensagem, mapEstadosToOptions, mapFiltroSalvoParaConsultaPreset, mapListarItensParaMultiselectOpcoes, mapReportTreeToTreeViewNodes, mapReportTreeToTreeViewNodesForSelection, 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, reportExistsInTree, reportTableHasFixedWidths, resetStructraCadastroReferenciaDialogRootForTests, resolveCadastroCollectionMinItems, resolveCadastroListaUrlParaNavegacao, resolveCadastroPageActiveTabKey, resolveCadastroReferenciaMapOptions, resolveConsultaEditActionLabelFromGridConfig, resolveConsultaListaQuerySliceFromGridConfig, resolveConsultaNavKeysFromPageLayout, resolveConsultaNovoRouterLinkFromLayout, resolveConsultaRouteEditBaseFromLayout, resolveConsultaToastTitleLista, resolveControlAtPath, resolveFormContainerCollapsed, resolveInitialReportId, 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 };
12432
- 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, ConsultaPageLoadingSkeletonVariant, 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, SkeletonTableChrome, 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 };
12994
+ 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, StructraAppVersionService as AppVersionService, 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, ConsultaPageLoadingSkeletonComponent, ContainerLayoutSize, ContextMenuComponent, CpfCnpjFieldComponent, DEFAULT_STRUCTRA_APP_VERSION_API_PATH, DEFAULT_STRUCTRA_APP_VERSION_FALLBACK, DEFAULT_STRUCTRA_COOKIE_NOTICE_ACCEPT_LABEL, DEFAULT_STRUCTRA_COOKIE_NOTICE_DESCRIPTION, DEFAULT_STRUCTRA_COOKIE_NOTICE_STORAGE_KEY, DEFAULT_STRUCTRA_COOKIE_NOTICE_TITLE, DEFAULT_STRUCTRA_SHELL_SCROLL_RESTORATION_OPTIONS, DEFAULT_STRUCTRA_SHELL_SIDEBAR_COLLAPSED_STORAGE_KEY, 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_APP_VERSION_CONFIG, STRUCTRA_CADASTRO_INLINE_RESULT_KEY, STRUCTRA_CADASTRO_INLINE_RETURN_KEY, STRUCTRA_CONSULTA_FORCE_REFRESH_KEY, STRUCTRA_COOKIE_NOTICE_CONFIG, 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_KANBAN_DESKTOP_MIN_WIDTH, STRUCTRA_MIDIA_PUBLIC_BASE_RESOLVER, STRUCTRA_MIDIA_UPLOAD_TRANSPORT, STRUCTRA_PAGE_CACHE_SCOPE_SEP, STRUCTRA_PAGE_FOOTER_CONFIG, STRUCTRA_PAGE_FOOTER_PARTS, STRUCTRA_PAGE_STATE_ACTIVE_TAB_PREFIX, STRUCTRA_REPORT_DEFAULT_PAGE_SIZE, STRUCTRA_REPORT_TRANSPORT, STRUCTRA_SCROLL_SESSION_RESET, STRUCTRA_SCROLL_TENANT_RESOLVER, STRUCTRA_SHELL_NAV_CONTENT_READY, 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, StructraAppVersionService, StructraBackToTopButtonComponent, StructraCookieNoticeComponent, StructraCookieNoticeService, StructraKanbanDragAutoScrollController, StructraPageCacheService, StructraPageComponentOutletComponent, StructraPageComponentRegistry, StructraPageFooterComponent, StructraPageStateCacheService, StructraPreserveScrollDirective, StructraProgressOverlayComponent, StructraReportEmptyStateComponent, StructraReportFilterPanelComponent, StructraReportLoadingSkeletonComponent, StructraReportPageBaseComponent, StructraReportPageComponent, StructraReportPaginatorComponent, StructraReportPreviewHeaderComponent, StructraReportTableComponent, StructraReportTreeCacheService, StructraReportTreeComponent, StructraReportTreeSkeletonComponent, StructraReportViewerComponent, ScriptEditorFieldComponent as StructraScriptEditorComponent, StructraScrollStateService, StructraShellScrollRestorationService, StructraShellTopbarSlotService, AppSidebarBottomActionsTemplateDirective as StructraSidebarBottomActionsDirective, AppSidebarFooterTemplateDirective as StructraSidebarFooterDirective, AppSidebarHeaderTemplateDirective as StructraSidebarHeaderDirective, AppSidebarUserInfoTemplateDirective as StructraSidebarUserInfoDirective, StructraSidebarUserPanelComponent, StructraTreeExpandStateService, 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, attachStructraScrollPreserve, buildCadastroFiltroDialogItensGridRows, buildCadastroMetadataShellRuntime, buildCadastroPageActiveTabPageKey, buildCadastroPageActiveTabPageKeyFromLayout, buildCadastroPageRuntime, buildCadastroRedirectReturnUrl, buildCadastroReferenciaDialogContext, buildCatalogoStubConsultaRuntime, buildConsultaConfirmDuplicarLinhaFromLayout, buildConsultaConfirmRemoverLinhaFromLayout, buildConsultaDefaultIsItemGuard, buildConsultaListaCacheKey, buildConsultaPageMetadataUnified, buildConsultaPageRuntime, buildDecimalBrDisplay, buildDecimalBrParseString, buildDefaultConsultaMapCardFromColunasGrid, buildEmptyStateOverlayHtml, buildFormContainerStateStorageKey, buildFormGroupFromCadastroCampos, buildGridNavigateUrl, buildHistoryStateAfterReturningFromNestedInlineChild, buildInlineReturnStateForChildCadastro, buildNovoFormDefaultsFromCampos, buildReportRowCardMap, 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, consumeConsultaPendingGridReturn, consumeGridReturnVoltarKeyForUrl, 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, formatReportPreviewTitulo, formatUiFieldDateValue, getFilePreviewKind, getStructraActionsByGroup, getThemeClass, getThemeClassList, getThemePrimaryColorLabelPtBr, getThemeTokenClass, gridNavigateIconClass, hexParaColorInput, inferCadastroItemFieldsFromPlainRows, inferCadastroListaUrlFallback, initialCadastroControlValue, injectEffectiveThemeId, isCadastroDuplicateNavigation, isCollectionField, isCollectionLikeField, isConsultaCardAutoSubtitleExcluded, isLegacyDarkThemeId, isLegacyFormContainerStateStorageKey, isLegacyNomeDocumentoReferencePreset, isReadonlyCollectionField, isReportBooleanColumn, isReportGroupNode, isReportNowrapColumn, isValidPhoneBr, libDialogPanelClasses, listaUrlFromRotaCadastro, listarItensCadastroReferencia, listarTodosPaginado, loadPresetsJson, loadStructraAdminRouteRedirectTarget, mapCadastroFormRawToPayload, mapConsultaGridColunasParaDataGrid, mapConsultaMetadataParaFiltroUi, mapErroTransporteParaMensagem as mapErroListaDefault, mapErroTransporteParaMensagem, mapEstadosToOptions, mapFiltroSalvoParaConsultaPreset, mapGridNavigateFromColuna, mapListarItensParaMultiselectOpcoes, mapReportTreeToTreeViewNodes, mapReportTreeToTreeViewNodesForSelection, markCadastroInlineFormDraftPendingRestore, markConsultaPendingGridReturn, maskDigitCount, mergeCadastroConfirmExcluir, mergeConsultaGridRowFormattingFromColunasGrid, mergeConsultaMultiselectOpcoesComSeleccionados, mergeDocumentoFmtNaLinhaConsulta, mergeMapConsultaGridColunasOptsComColumnFormat, mergeNovoIdEmListaSelecionada, mergeStructraShellScrollRestorationOptions, metadataCampoParaChaveLinhaCliente, modoPermissaoReferenciaFromWire, montarFiltrosGrpcPreset, montarFiltrosServidorPreset, montarHierarquiaSecoesMetadata, multiselectIdListRequiredValidator, multiselectMaxItemsValidator, navegarAposLoginAdmin, navegarVoltarLista, navegarVoltarListaComIdRemovido, navegarVoltarListaComLinha, navigateCadastroDuplicate, navigateCommandsFromRotaAlterar, navigateCommandsFromRotaNovo, navigateFromGrid, nomeSalvarParaPayloadComPessoa, normalizarArvoreSecoesMetadata, normalizarCaminhoLoginAdmin, normalizarHexCor, normalizarItensParaGravarServidorCadastro, normalizarListaIdsMultiselect, normalizarOperadorConsultaParaEnvioServidor, normalizarRotaReferencia, normalizarStructraAction, normalizarStructraActionGroup, normalizarStructraActionGroups, normalizeCadastroAppPath, normalizeCadastroCampoMetadataWire, normalizeCadastroInitRouteIdParam, normalizeCadastroItemEditorDecimalControls, normalizeCadastroReferenciaDialogRotaKey, normalizeCadastroRouteForContainerState, normalizeConsoleLogLevel, normalizeFormDateValue, normalizePhoneBr, normalizeStructraAdminPath, normalizeStructraScrollRoute, normalizeStructraTheme, novoPathCommandsFromRota, onlyDigits, operadorConsultaComValorUnicoComparacao, operadorConsultaDatetimeUsaDatePicker, operadoresConsultaCampo, operadoresPorTipo, ordenarFiltroItens, ordenarStructraActions, parseDecimalBr, parseIntegerString, parseUiFieldDateValue, patchFormFromEntidadeRecord, permissionTabsUsamGruposVerticais, permissoesReferenciaMetadata, persistStructraCookieNoticeAccepted, persistStructraShellSidebarCollapsed, phoneBrDynamicMaskCompleteValidator, phoneBrMaskCompleteValidator, phoneBrMaskFromDigits, pickCadastroPageActiveTabExplicit, pickTabKeyLinkedToSummaryItems, podeNavegarGridColuna, precisaValor, precisaValorFinal, provideAppPageFooter, provideAppVersion, provideStructraAppVersion, provideStructraCadastroReferenciaDialogRoot, provideStructraCookieNotice, provideStructraPageFooter, provideStructraScrollState, provideStructraShellScrollRestoration, provideStructraTreeExpandState, qtdCriteriosPresetParaSkeleton, readCadastroDuplicateSourceId, readCadastroPageActiveTabFromNavigationState, readCadastroPageActiveTabFromUrl, readFormContainerCollapsedFromStorage, readStructraAdminRouteRedirectTarget, readStructraCadastroInlineReturn, readStructraShellSidebarCollapsed, referenciaAbreEmDialog, referenciaOpenModeRaw, referenciaUsesLegacyRegistryMapper, registerCadastroReferenceEntries, registerCadastroReferenceListSources, registerCadastroReferenciaDialogBridges, registerStructraBuiltinPageComponents, replaceProdutoCadastroFormControls, reportColumnWidthStyle, reportExistsInTree, reportTableHasFixedWidths, resetStructraCadastroReferenciaDialogRootForTests, resolveCadastroCollectionMinItems, resolveCadastroListaUrlParaNavegacao, resolveCadastroPageActiveTabKey, resolveCadastroReferenciaMapOptions, resolveConsultaEditActionLabelFromGridConfig, resolveConsultaListaQuerySliceFromGridConfig, resolveConsultaNavKeysFromPageLayout, resolveConsultaNovoRouterLinkFromLayout, resolveConsultaRouteEditBaseFromLayout, resolveConsultaToastTitleLista, resolveControlAtPath, resolveFormContainerCollapsed, resolveInitialReportId, resolveReferenciaOpcaoLabel, resolveReportPreviewSubtitulo, resolveStructraAdminMenuUrl, resolveStructraAppVersionConfig, resolveStructraCookieNoticeConfig, 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, structraCookieNoticeWasAccepted, structraElementScrolls, structraHasValue, structraIsFilledString, structraIsFormGroup, structraIsValidPort, structraParseNumberOrNull, structraReadFormValue, structraReadNestedValue, structraTrimString, subscribeMarkForCheckOnInvalidUiRefresh, subtreeHasVisibleInvalid, syncStructraCadastroInlineReturnSessionCache, tabWarningFromLinkedSummaryItems, tipoCampoMetadataParaUi, tipoValorApi, toCadastroReferenceListPageResult, toConsoleLogLineView, toConsoleLogLineViews, toUiSelectOptionsFromMetadata, uiSelectOpcaoIdNomeDocumento, uiSelectOpcoesDePessoas, validationLikeFromCampoMetadata, validatorsFromCampo, writeFormContainerCollapsedToStorage };
12995
+ export type { AdaptiveDataViewMode, AdminLoginShellConfig, AdminLoginSubmitPayload, StructraSidebarEmpresaContext as AdminSidebarEmpresaContext, StructraSidebarUserView as AdminSidebarUserView, AlertAction, AlertType, AppThemeId, AppThemeOption, AppVersionInfo, 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, CardItemNavigateAction, 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, ConsultaGridNavigateDto, ConsultaInitCarregada, ConsultaListaCacheKeyParts, ConsultaListaCachePayload, ConsultaListaMemoriaCacheStoreOpts, ConsultaListaQueryParamsLike, ConsultaListaResultadoLike, ConsultaListaServidorQuerySlice, ConsultaMapCardLinha, ConsultaMetadataCampo, ConsultaMetadataReplyLike, ConsultaMetadataServicePort, ConsultaMultiselectOpcoesRemotasSpec, ConsultaOperadorOption, ConsultaOptionsListarContrato, ConsultaOptionsListarResolver, ConsultaPadraoGrpcServiceLike, ConsultaPadraoNavigateLike, ConsultaPadraoToastLike, ConsultaPageCacheEntry, ConsultaPageLoadingSkeletonVariant, ConsultaPageMetadataUnified, ConsultaPageRuntime, ConsultaPageRuntimeDeps, ConsultaRouteReusePort, ConsultaServidorExecutorOpts, ConsultaServidorListaReply, ConsultaServidorPort, ConsultaServidorQueryParams, ConsultaTopbarSlotPort, ConsultaUsuariosMetadataReply, ConsultaValorTipo, CreateCadastroMetadataPageConfigOptions, CreateCadastroPadraoConfigOptions, CreateConsultaPadraoRuntimeOptions, CreateGrpcSaveRequestMapperOptions, CreateSaveRequestFromPartialMapperOptions, CrudConsultaServicePort, DataGridColumn, DataGridColumnNavigateConfig, DataGridPaginationChangeEvent, DeleteConfirmPageConfig, DetailsViewItem, DropdownListBindings, DropdownSearchPageRequested, DuplicatePageConfig, FieldCommonInputs, FieldSize, FilePreviewKind, FiltroItemEntrada, FiltroItemEntradaGenerico, FiltroItemGridRow, FiltroItemSalvoDto, FiltroSalvo, FormContainerStateKeyParts, FormTabValidationLinkConfig, FormTabsVariant, GridLayoutConsultaApiDto, GridLayoutConsultaPersistedPayload, GridNavigateConfig, GridNavigateConfigWire, GridNavigatePreserveContext, 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, ScrollPositionState, ScrollPositionValues, SelectPageRequested, SkeletonFieldShellVariant, SkeletonTableChrome, StatCardDeltaTone, StatusBadgeSize, StatusBadgeVariant, StructraAction, StructraActionButtonVariant, StructraActionGroup, StructraActionGroupWire, StructraActionId, StructraActionVariant, StructraActionWire, StructraAdminRouteRedirectCacheOptions, StructraAdminRouteRedirectLoadOptions, StructraAppVersionConfig, StructraCadastroInlineResultState, StructraCadastroInlineReturnState, StructraCookieNoticeConfig, StructraFormValueSource, StructraGridLayoutApiBaseResolverFn, StructraGridLayoutAuthHeadersResolverFn, StructraGridLayoutTenantResolverFn, StructraKanbanDragAutoScrollOptions, StructraMidiaUploadResult, StructraMidiaUploadTransportContext, StructraMidiaUploadTransportFn, StructraPageCacheGetOrLoadOptions, StructraPageCacheSetOptions, StructraPageFooterConfig, StructraPageInputContext, StructraReportEmptyStatePreset, StructraReportTransport, StructraScrollPreserveAttachOptions, StructraScrollPreserveDetach, StructraScrollTenantResolverFn, StructraShellScrollRestorationMergedOptions, StructraShellScrollRestorationOptions, StructraSidebarContext, StructraSidebarEmpresaContext, StructraSidebarTemplateContext, StructraSidebarUserView, StructraTheme, StructraVersionInfo, TitulosFromMetadataConfig, ToastInstance, ToastShowOptions, ToastType, ToastVerticalPosition, TreeExpandState, TreeViewNode, TreeViewSelectEvent, UiFieldInputTextAlign, UiSelectOption, ValidationFieldMeta, ValidationSummaryItem, ValidationSummarySize, ValidationSummaryVariant, ValoresConsultaPresetUi };