structra-ui 0.2.53 → 0.2.55
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.
- package/fesm2022/structra-ui.mjs +365 -69
- package/fesm2022/structra-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/structra-ui.css +1 -1
- package/types/structra-ui.d.ts +49 -7
package/types/structra-ui.d.ts
CHANGED
|
@@ -9,7 +9,6 @@ import { ICellRendererParams, ColDef, GetRowIdParams, GridReadyEvent } from 'ag-
|
|
|
9
9
|
import { ICellRendererAngularComp } from 'ag-grid-angular';
|
|
10
10
|
import { DialogRef } from '@angular/cdk/dialog';
|
|
11
11
|
import { Observable } from 'rxjs';
|
|
12
|
-
import * as i1 from '@angular/cdk/scrolling';
|
|
13
12
|
|
|
14
13
|
/** Marcador de pacote publicado como `structra-ui`. */
|
|
15
14
|
declare const STRUCTRA_UI: "structra-ui";
|
|
@@ -3091,9 +3090,12 @@ declare class DrawerComponent implements OnChanges, OnDestroy {
|
|
|
3091
3090
|
static ngAcceptInputType_showCloseButton: unknown;
|
|
3092
3091
|
}
|
|
3093
3092
|
|
|
3094
|
-
declare class MenuListComponent<T = string> implements OnChanges {
|
|
3093
|
+
declare class MenuListComponent<T = string> implements OnChanges, AfterViewInit {
|
|
3095
3094
|
private readonly cdr;
|
|
3095
|
+
private readonly injector;
|
|
3096
|
+
private readonly destroyRef;
|
|
3096
3097
|
readonly appTheme: i0.InputSignal<"blue" | "green" | "purple" | "orange" | "white" | "gray" | "sepia" | "black" | AppTheme | undefined>;
|
|
3098
|
+
private bodyRouteSyncGen;
|
|
3097
3099
|
items: readonly MenuNodeItem<T>[];
|
|
3098
3100
|
menuId: string;
|
|
3099
3101
|
dense: boolean;
|
|
@@ -3115,19 +3117,33 @@ declare class MenuListComponent<T = string> implements OnChanges {
|
|
|
3115
3117
|
readonly closeRequest: EventEmitter<void>;
|
|
3116
3118
|
readonly submenuBack: EventEmitter<void>;
|
|
3117
3119
|
readonly groupToggled: i0.OutputEmitterRef<number>;
|
|
3120
|
+
/** Ver {@link MenuListBodyComponent.selectionScrollHint}. */
|
|
3121
|
+
readonly selectionScrollHint: i0.OutputEmitterRef<void>;
|
|
3118
3122
|
private body?;
|
|
3119
3123
|
searchQuery: string;
|
|
3124
|
+
constructor();
|
|
3125
|
+
ngAfterViewInit(): void;
|
|
3120
3126
|
displayItems: MenuNodeItem<T>[];
|
|
3121
3127
|
get showSearchField(): boolean;
|
|
3122
3128
|
get expandAllGroupsWhenSearching(): boolean;
|
|
3123
3129
|
get showSearchNoResults(): boolean;
|
|
3124
3130
|
ngOnChanges(changes: SimpleChanges): void;
|
|
3131
|
+
/**
|
|
3132
|
+
* O corpo do menu só existe após o primeiro render; no drawer mobile isso atrasa `ensureExpanded`
|
|
3133
|
+
* relativamente ao `ngOnChanges` do corpo — repetimos após `afterNextRender`.
|
|
3134
|
+
*/
|
|
3135
|
+
private scheduleBodyRouteSelectionSync;
|
|
3125
3136
|
onSearchQueryInput(value: string | null): void;
|
|
3126
3137
|
resetHighlight(): void;
|
|
3127
3138
|
focusFirstOption(): void;
|
|
3139
|
+
/**
|
|
3140
|
+
* Usado pela `app-sidebar` ao abrir o drawer móvel: garante {@link MenuListBodyComponent.syncRouteSelectionExpansion}
|
|
3141
|
+
* antes do scroll (grupos fechados em `sessionStorage` passam a abrir no caminho do item activo).
|
|
3142
|
+
*/
|
|
3143
|
+
syncSelectionForMobileDrawerOpen(): void;
|
|
3128
3144
|
private syncDisplayItems;
|
|
3129
3145
|
static ɵfac: i0.ɵɵFactoryDeclaration<MenuListComponent<any>, never>;
|
|
3130
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MenuListComponent<any>, "app-menu-list", never, { "appTheme": { "alias": "appTheme"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": true; }; "menuId": { "alias": "menuId"; "required": false; }; "dense": { "alias": "dense"; "required": false; }; "nested": { "alias": "nested"; "required": false; }; "selectedItemId": { "alias": "selectedItemId"; "required": false; }; "compressText": { "alias": "compressText"; "required": false; }; "clickToOpen": { "alias": "clickToOpen"; "required": false; }; "groupCollapsible": { "alias": "groupCollapsible"; "required": false; }; "groupDefaultExpansion": { "alias": "groupDefaultExpansion"; "required": false; }; "persistGroupExpansion": { "alias": "persistGroupExpansion"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; }, { "itemSelect": "itemSelect"; "closeRequest": "closeRequest"; "submenuBack": "submenuBack"; "groupToggled": "groupToggled"; }, never, never, true,
|
|
3146
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MenuListComponent<any>, "app-menu-list", never, { "appTheme": { "alias": "appTheme"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": true; }; "menuId": { "alias": "menuId"; "required": false; }; "dense": { "alias": "dense"; "required": false; }; "nested": { "alias": "nested"; "required": false; }; "selectedItemId": { "alias": "selectedItemId"; "required": false; }; "compressText": { "alias": "compressText"; "required": false; }; "clickToOpen": { "alias": "clickToOpen"; "required": false; }; "groupCollapsible": { "alias": "groupCollapsible"; "required": false; }; "groupDefaultExpansion": { "alias": "groupDefaultExpansion"; "required": false; }; "persistGroupExpansion": { "alias": "persistGroupExpansion"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; }, { "itemSelect": "itemSelect"; "closeRequest": "closeRequest"; "submenuBack": "submenuBack"; "groupToggled": "groupToggled"; "selectionScrollHint": "selectionScrollHint"; }, never, never, true, never>;
|
|
3131
3147
|
static ngAcceptInputType_dense: unknown;
|
|
3132
3148
|
static ngAcceptInputType_nested: unknown;
|
|
3133
3149
|
static ngAcceptInputType_compressText: unknown;
|
|
@@ -3430,6 +3446,7 @@ declare class AppSidebarComponent<T extends string = string> implements OnChange
|
|
|
3430
3446
|
private readonly cdr;
|
|
3431
3447
|
private readonly destroyRef;
|
|
3432
3448
|
private readonly hostEl;
|
|
3449
|
+
private readonly injector;
|
|
3433
3450
|
private readonly renderer;
|
|
3434
3451
|
/** Igual a `[appTheme]` / {@link ThemeDirective}: paleta explícita no host; omitir = herdar / serviço. */
|
|
3435
3452
|
readonly appTheme: i0.InputSignal<"blue" | "green" | "purple" | "orange" | "white" | "gray" | "sepia" | "black" | AppTheme | undefined>;
|
|
@@ -3439,6 +3456,12 @@ declare class AppSidebarComponent<T extends string = string> implements OnChange
|
|
|
3439
3456
|
selectedItemId: T | null;
|
|
3440
3457
|
/** Modo estreito: só ícones + `compressText` na lista (rótulos via `title` / `aria-label`). */
|
|
3441
3458
|
collapsed: boolean;
|
|
3459
|
+
/**
|
|
3460
|
+
* Ligado ao estado do drawer no telemóvel (ex.: `mobileNavOpen` do `app-shell`).
|
|
3461
|
+
* Em cada transição para `true`, volta a agendar o scroll até ao item activo — útil porque `selectedItemId`
|
|
3462
|
+
* pode não mudar entre aberturas e o menu pode ser recriado dentro do `@if (open)` do drawer.
|
|
3463
|
+
*/
|
|
3464
|
+
mobileNavOpenPulse: boolean;
|
|
3442
3465
|
/** Repassado a {@link MenuListComponent.searchable}: campo de pesquisa na lista da lateral. */
|
|
3443
3466
|
searchable: boolean;
|
|
3444
3467
|
/**
|
|
@@ -3456,6 +3479,7 @@ declare class AppSidebarComponent<T extends string = string> implements OnChange
|
|
|
3456
3479
|
*/
|
|
3457
3480
|
groupDefaultExpansion: 'all' | 'first';
|
|
3458
3481
|
readonly itemSelect: EventEmitter<T>;
|
|
3482
|
+
private menuList?;
|
|
3459
3483
|
/**
|
|
3460
3484
|
* Valor efectivo de `compressText` em `app-menu-list`: ao expandir a partir do modo rail,
|
|
3461
3485
|
* mantém-se comprimido até a animação de largura terminar (evita flicker de texto).
|
|
@@ -3465,16 +3489,33 @@ declare class AppSidebarComponent<T extends string = string> implements OnChange
|
|
|
3465
3489
|
readonly listCompressText: i0.WritableSignal<boolean>;
|
|
3466
3490
|
private listRevealTimeoutId;
|
|
3467
3491
|
private scrollRestoreTimeoutId;
|
|
3492
|
+
/** Invalida tentativas de scroll pendentes (ex.: novo agendamento ou destroy). */
|
|
3493
|
+
private scrollToSelectedGeneration;
|
|
3494
|
+
/** `setTimeout` extra ao abrir o drawer — animação (~240ms) e flex podem atrasar métricas do scroll. */
|
|
3495
|
+
private drawerScrollAssistTimeouts;
|
|
3468
3496
|
constructor();
|
|
3469
3497
|
ngAfterViewInit(): void;
|
|
3470
3498
|
ngOnChanges(changes: SimpleChanges): void;
|
|
3471
3499
|
/**
|
|
3472
|
-
*
|
|
3473
|
-
*
|
|
3500
|
+
* Agenda scroll até ao `--selected` depois do próximo render (filhos OnPush) e reintenta em `rAF`
|
|
3501
|
+
* até o elemento existir — necessário no drawer mobile, onde o menu acaba de montar.
|
|
3502
|
+
*/
|
|
3503
|
+
/**
|
|
3504
|
+
* Repete o scroll quando o utilizador clica num item já activo mas «cortado» (`selectedItemId` não muda).
|
|
3474
3505
|
*/
|
|
3475
|
-
|
|
3506
|
+
onSidebarItemSelect(id: T): void;
|
|
3507
|
+
/** Também ligado a `(selectionScrollHint)` em `app-menu-list` para o drawer mobile. */
|
|
3508
|
+
scheduleScrollToSelected(): void;
|
|
3509
|
+
private static readonly SCROLL_TO_SELECTED_MAX_ATTEMPTS;
|
|
3510
|
+
private static readonly SCROLL_TO_SELECTED_MAX_ATTEMPTS_DRAWER;
|
|
3511
|
+
/** Sidebar projectada em `.app-drawer__body` — animação do painel e `overflow` do shell afectam o layout. */
|
|
3512
|
+
private isInsideMobileDrawer;
|
|
3513
|
+
private clearDrawerScrollAssistTimeouts;
|
|
3514
|
+
private runScrollToSelectedRetry;
|
|
3476
3515
|
/** Após clicar num grupo colapsável: leva o cabeçalho do grupo para a zona visível (como o item seleccionado). */
|
|
3477
3516
|
onMenuGroupToggled(groupId: number): void;
|
|
3517
|
+
/** Área com scroll dos itens (`cdkScrollable`), não o cabeçalho nem a pesquisa. */
|
|
3518
|
+
private getSidebarMenuListViewport;
|
|
3478
3519
|
private scrollSidebarScrollAreaToElement;
|
|
3479
3520
|
/**
|
|
3480
3521
|
* Metade da altura da linha vizinha (opção ou cabeçalho de grupo) na mesma lista (fallback em px).
|
|
@@ -3484,8 +3525,9 @@ declare class AppSidebarComponent<T extends string = string> implements OnChange
|
|
|
3484
3525
|
private scheduleSidebarHeadLayoutGuards;
|
|
3485
3526
|
private applySidebarHeadLayoutGuards;
|
|
3486
3527
|
static ɵfac: i0.ɵɵFactoryDeclaration<AppSidebarComponent<any>, never>;
|
|
3487
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AppSidebarComponent<any>, "app-sidebar", never, { "appTheme": { "alias": "appTheme"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": true; }; "menuId": { "alias": "menuId"; "required": false; }; "selectedItemId": { "alias": "selectedItemId"; "required": false; }; "collapsed": { "alias": "collapsed"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; "clickToOpen": { "alias": "clickToOpen"; "required": false; }; "groupCollapsible": { "alias": "groupCollapsible"; "required": false; }; "groupDefaultExpansion": { "alias": "groupDefaultExpansion"; "required": false; }; }, { "itemSelect": "itemSelect"; }, never, ["[appSidebarBrand]", "[appSidebarToolbar]"], true, never>;
|
|
3528
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AppSidebarComponent<any>, "app-sidebar", never, { "appTheme": { "alias": "appTheme"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": true; }; "menuId": { "alias": "menuId"; "required": false; }; "selectedItemId": { "alias": "selectedItemId"; "required": false; }; "collapsed": { "alias": "collapsed"; "required": false; }; "mobileNavOpenPulse": { "alias": "mobileNavOpenPulse"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; "clickToOpen": { "alias": "clickToOpen"; "required": false; }; "groupCollapsible": { "alias": "groupCollapsible"; "required": false; }; "groupDefaultExpansion": { "alias": "groupDefaultExpansion"; "required": false; }; }, { "itemSelect": "itemSelect"; }, never, ["[appSidebarBrand]", "[appSidebarToolbar]"], true, never>;
|
|
3488
3529
|
static ngAcceptInputType_collapsed: unknown;
|
|
3530
|
+
static ngAcceptInputType_mobileNavOpenPulse: unknown;
|
|
3489
3531
|
static ngAcceptInputType_searchable: unknown;
|
|
3490
3532
|
static ngAcceptInputType_groupCollapsible: unknown;
|
|
3491
3533
|
}
|