structra-ui 0.2.49 → 0.2.51

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "structra-ui",
3
- "version": "0.2.49",
3
+ "version": "0.2.51",
4
4
  "description": "Biblioteca de componentes Angular da StructraLab (UI reutilizável).",
5
5
  "homepage": "https://structralab.com/",
6
6
  "license": "MIT",
@@ -3104,11 +3104,17 @@ declare class MenuListComponent<T = string> implements OnChanges {
3104
3104
  groupCollapsible: boolean;
3105
3105
  /** Repasse para {@link MenuListBodyComponent.groupDefaultExpansion}. */
3106
3106
  groupDefaultExpansion: 'all' | 'first';
3107
+ /**
3108
+ * Quando `true` (omissão), abrir/fechar grupos colapsáveis persiste em `sessionStorage`
3109
+ * até ao refresh da página — útil na navegação SPA da sidebar.
3110
+ */
3111
+ persistGroupExpansion: boolean;
3107
3112
  searchable: boolean;
3108
3113
  searchPlaceholder: string;
3109
3114
  readonly itemSelect: EventEmitter<T>;
3110
3115
  readonly closeRequest: EventEmitter<void>;
3111
3116
  readonly submenuBack: EventEmitter<void>;
3117
+ readonly groupToggled: i0.OutputEmitterRef<number>;
3112
3118
  private body?;
3113
3119
  searchQuery: string;
3114
3120
  displayItems: MenuNodeItem<T>[];
@@ -3121,11 +3127,12 @@ declare class MenuListComponent<T = string> implements OnChanges {
3121
3127
  focusFirstOption(): void;
3122
3128
  private syncDisplayItems;
3123
3129
  static ɵfac: i0.ɵɵFactoryDeclaration<MenuListComponent<any>, never>;
3124
- 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; }; "searchable": { "alias": "searchable"; "required": false; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; }, { "itemSelect": "itemSelect"; "closeRequest": "closeRequest"; "submenuBack": "submenuBack"; }, never, never, true, [{ directive: typeof i1.CdkScrollable; inputs: {}; outputs: {}; }]>;
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, [{ directive: typeof i1.CdkScrollable; inputs: {}; outputs: {}; }]>;
3125
3131
  static ngAcceptInputType_dense: unknown;
3126
3132
  static ngAcceptInputType_nested: unknown;
3127
3133
  static ngAcceptInputType_compressText: unknown;
3128
3134
  static ngAcceptInputType_groupCollapsible: unknown;
3135
+ static ngAcceptInputType_persistGroupExpansion: unknown;
3129
3136
  static ngAcceptInputType_searchable: unknown;
3130
3137
  }
3131
3138
 
@@ -3457,9 +3464,22 @@ declare class AppSidebarComponent<T extends string = string> implements OnChange
3457
3464
  */
3458
3465
  readonly listCompressText: i0.WritableSignal<boolean>;
3459
3466
  private listRevealTimeoutId;
3467
+ private scrollRestoreTimeoutId;
3460
3468
  constructor();
3461
3469
  ngAfterViewInit(): void;
3462
3470
  ngOnChanges(changes: SimpleChanges): void;
3471
+ /**
3472
+ * Garante que o item `--selected` fica inteiro na área útil (margem + cabeçalho sticky),
3473
+ * com ~½ da opção vizinha visível quando há scroll, e movimento suave.
3474
+ */
3475
+ private scrollSidebarToSelectedItem;
3476
+ /** Após clicar num grupo colapsável: leva o cabeçalho do grupo para a zona visível (como o item seleccionado). */
3477
+ onMenuGroupToggled(groupId: number): void;
3478
+ private scrollSidebarScrollAreaToElement;
3479
+ /**
3480
+ * Metade da altura da linha vizinha (opção ou cabeçalho de grupo) na mesma lista (fallback em px).
3481
+ */
3482
+ private getMenuNeighborPeekHalfHeights;
3463
3483
  private clearListRevealTimeout;
3464
3484
  private scheduleSidebarHeadLayoutGuards;
3465
3485
  private applySidebarHeadLayoutGuards;