@ojiepermana/angular-navigation 22.0.32 → 22.0.34

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": "@ojiepermana/angular-navigation",
3
- "version": "22.0.32",
3
+ "version": "22.0.34",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/edsis/angular.git"
@@ -13,7 +13,7 @@
13
13
  "@angular/common": ">=22.0.0",
14
14
  "@angular/core": ">=22.0.0",
15
15
  "@angular/router": ">=22.0.0",
16
- "@ojiepermana/angular-component": "^22.0.32",
16
+ "@ojiepermana/angular-component": "^22.0.34",
17
17
  "rxjs": ">=7.8.0"
18
18
  },
19
19
  "dependencies": {
@@ -131,7 +131,6 @@ declare class NavigationService {
131
131
  private resolveDockbarMode;
132
132
  private persistState;
133
133
  private defaultType;
134
- private cleanupLegacyStorage;
135
134
  private storage;
136
135
  private readStorage;
137
136
  private readInstanceStorage;
@@ -139,13 +138,10 @@ declare class NavigationService {
139
138
  private writeStorage;
140
139
  private removeStorage;
141
140
  private clearInstanceStorage;
142
- private migrateLegacyPersistedStorage;
143
141
  private instanceStorageKey;
144
142
  private persistedStorageKey;
145
143
  private persistedTypeMode;
146
- private resolveLegacyTypeMode;
147
144
  private shouldPersistInstanceState;
148
- private isLegacyInstanceStorageKey;
149
145
  private isPersistedTypeMode;
150
146
  private normalizeId;
151
147
  private withoutKey;
@@ -8,11 +8,13 @@ type NavigationVerticalType = 'sidebar' | 'dockbar';
8
8
  type NavigationHorizontalType = 'navbar' | 'flyout';
9
9
  type NavigationType = NavigationVerticalType | NavigationHorizontalType;
10
10
  type NavigationCollapseTree = 'stairs' | 'straight';
11
- type NavigationTypeStyle = 'default' | 'border-rail';
11
+ type NavigationAppearance = 'flat' | 'border-rail';
12
12
  type NavigationVerticalPosition = 'left' | 'right';
13
13
  type NavigationHorizontalPosition = 'top' | 'bottom';
14
14
  type NavigationPosition = NavigationVerticalPosition | NavigationHorizontalPosition;
15
15
  type NavigationFlyoutIconPosition = 'start' | 'end';
16
+ /** Bentuk visual tombol trigger flyout: `button` (pil), `link` (gaya tautan), `plain` (ghost). */
17
+ type NavigationFlyoutTriggerVariant = 'button' | 'link' | 'plain';
16
18
  type NavigationDockbarMode = 'drawer' | 'sticky';
17
19
  interface NavigationRegisterInput {
18
20
  readonly id: string;
@@ -122,7 +124,7 @@ interface NavigationTypeConfig {
122
124
  readonly dockbarMode?: Signal<NavigationDockbarMode | null>;
123
125
  readonly sidebarCollapse?: Signal<boolean>;
124
126
  readonly previewExpanded?: Signal<boolean>;
125
- readonly typeStyle?: Signal<NavigationTypeStyle>;
127
+ readonly typeStyle?: Signal<NavigationAppearance>;
126
128
  readonly flyoutLabel?: Signal<string>;
127
129
  /** Nama Material Symbols untuk trigger flyout; `null` = tanpa ikon (label saja). */
128
130
  readonly flyoutIcon?: Signal<string | null>;
@@ -130,6 +132,12 @@ interface NavigationTypeConfig {
130
132
  readonly flyoutIconOnly?: Signal<boolean>;
131
133
  /** Penempatan ikon relatif terhadap label trigger flyout. */
132
134
  readonly flyoutIconPosition?: Signal<NavigationFlyoutIconPosition>;
135
+ /** Bentuk visual tombol trigger flyout: `button` (pil) | `link` | `plain` (ghost). */
136
+ readonly flyoutTriggerVariant?: Signal<NavigationFlyoutTriggerVariant>;
137
+ /** Trigger flyout mengambang (`fixed`) alih-alih mengalir di dalam bar/div. */
138
+ readonly flyoutTriggerFloating?: Signal<boolean>;
139
+ /** Kelas Tailwind tambahan untuk host trigger flyout (posisi pojok floating / override wrapper). */
140
+ readonly flyoutTriggerClass?: Signal<string>;
133
141
  }
134
142
 
135
143
  interface NavigationShellContext {
@@ -158,7 +166,6 @@ interface NavigationShellContext {
158
166
  declare class NavigationContainerComponent implements NavigationShellContext {
159
167
  readonly navId: _angular_core.InputSignal<string>;
160
168
  readonly data: _angular_core.InputSignal<readonly NavigationItem[]>;
161
- readonly items: _angular_core.InputSignal<readonly NavigationItem[]>;
162
169
  readonly ariaLabel: _angular_core.InputSignal<string>;
163
170
  readonly compact: _angular_core.InputSignal<boolean>;
164
171
  readonly collapseTree: _angular_core.InputSignal<NavigationCollapseTree>;
@@ -181,11 +188,14 @@ declare class NavigationContainerComponent implements NavigationShellContext {
181
188
  private readonly dockbarModePreference;
182
189
  private readonly sidebarCollapse;
183
190
  private readonly previewExpanded;
184
- readonly typeStyle: _angular_core.Signal<_ojiepermana_angular_navigation.NavigationTypeStyle>;
191
+ readonly typeStyle: _angular_core.Signal<_ojiepermana_angular_navigation.NavigationAppearance>;
185
192
  readonly flyoutLabel: _angular_core.Signal<string>;
186
193
  readonly flyoutIcon: _angular_core.Signal<string | null>;
187
194
  readonly flyoutIconOnly: _angular_core.Signal<boolean>;
188
195
  readonly flyoutIconPosition: _angular_core.Signal<_ojiepermana_angular_navigation.NavigationFlyoutIconPosition>;
196
+ readonly flyoutTriggerVariant: _angular_core.Signal<_ojiepermana_angular_navigation.NavigationFlyoutTriggerVariant>;
197
+ readonly flyoutTriggerFloating: _angular_core.Signal<boolean>;
198
+ readonly flyoutTriggerClass: _angular_core.Signal<string>;
189
199
  private readonly controller;
190
200
  readonly iconTemplate: _angular_core.Signal<NavigationIconDirective | undefined>;
191
201
  readonly normalizedItems: _angular_core.Signal<readonly _ojiepermana_angular_navigation.NavigationNormalizedItem[]>;
@@ -209,7 +219,7 @@ declare class NavigationContainerComponent implements NavigationShellContext {
209
219
  toggleCollapsed(): void;
210
220
  protected setHoverPreview(value: boolean): void;
211
221
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NavigationContainerComponent, never>;
212
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NavigationContainerComponent, "Navigation", never, { "navId": { "alias": "id"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "collapseTree": { "alias": "collapse-tree"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "itemClass": { "alias": "itemClass"; "required": false; "isSignal": true; }; "groupClass": { "alias": "nav-group-class"; "required": false; "isSignal": true; }; "activeIds": { "alias": "activeIds"; "required": false; "isSignal": true; }; "activeUrl": { "alias": "activeUrl"; "required": false; "isSignal": true; }; "openedIds": { "alias": "openedIds"; "required": false; "isSignal": true; }; }, { "openedIds": "openedIdsChange"; "itemSelected": "itemSelected"; }, ["iconTemplate"], ["*"], true, never>;
222
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NavigationContainerComponent, "Navigation", never, { "navId": { "alias": "id"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "collapseTree": { "alias": "collapse-tree"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "itemClass": { "alias": "itemClass"; "required": false; "isSignal": true; }; "groupClass": { "alias": "nav-group-class"; "required": false; "isSignal": true; }; "activeIds": { "alias": "activeIds"; "required": false; "isSignal": true; }; "activeUrl": { "alias": "activeUrl"; "required": false; "isSignal": true; }; "openedIds": { "alias": "openedIds"; "required": false; "isSignal": true; }; }, { "openedIds": "openedIdsChange"; "itemSelected": "itemSelected"; }, ["iconTemplate"], ["*"], true, never>;
213
223
  }
214
224
 
215
225
  /**
@@ -222,7 +232,7 @@ declare class NavigationContentComponent {
222
232
  readonly class: _angular_core.InputSignal<string>;
223
233
  protected readonly hostClasses: _angular_core.Signal<string>;
224
234
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NavigationContentComponent, never>;
225
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NavigationContentComponent, "NavigationContent", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
235
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NavigationContentComponent, "NavigationContent", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["NavigationHeader", "NavigationFooter"], true, never>;
226
236
  }
227
237
 
228
238
  declare class NavigationFooterComponent {
@@ -244,7 +254,13 @@ declare class NavigationHeaderComponent {
244
254
  protected readonly showToggle: _angular_core.Signal<boolean>;
245
255
  protected readonly toggleAriaLabel: _angular_core.Signal<"Expand navigation" | "Collapse navigation">;
246
256
  protected readonly toggleIconName: _angular_core.Signal<"left_panel_open" | "left_panel_close">;
247
- protected readonly contentClasses: _angular_core.Signal<"min-w-0" | "min-w-0 flex-1">;
257
+ /**
258
+ * Baris isi header. Saat collapsed/dockbar (vertical) isi (inisial/ikon) dipusatkan di tengah
259
+ * rail agar simetris dengan ikon nav-item di bawahnya (yang juga center di rail); selain itu kiri
260
+ * dengan padding `px-3`.
261
+ */
262
+ protected readonly rowClasses: _angular_core.Signal<string>;
263
+ protected readonly contentClasses: _angular_core.Signal<"flex min-w-0 items-center gap-3" | "flex min-w-0 items-center justify-center" | "flex min-w-0 flex-1 items-center gap-3">;
248
264
  protected readonly hostClasses: _angular_core.Signal<string>;
249
265
  protected toggleCollapsed(): void;
250
266
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NavigationHeaderComponent, never>;
@@ -303,7 +319,7 @@ declare class NavigationNavbarComponent {
303
319
  private readonly destroyRef;
304
320
  /** Posisi bar terhadap konten layout: `top` (default) atau `bottom` — panel grid membuka ke arah sebaliknya. */
305
321
  readonly position: _angular_core.InputSignal<NavigationHorizontalPosition | null>;
306
- readonly typeStyle: _angular_core.InputSignal<NavigationTypeStyle>;
322
+ readonly typeStyle: _angular_core.InputSignal<NavigationAppearance>;
307
323
  readonly class: _angular_core.InputSignal<string>;
308
324
  protected readonly headerSlot: _angular_core.Signal<NavigationHeaderComponent | undefined>;
309
325
  protected readonly contentSlot: _angular_core.Signal<NavigationContentComponent | undefined>;
@@ -311,7 +327,7 @@ declare class NavigationNavbarComponent {
311
327
  protected readonly hostClasses: _angular_core.Signal<string>;
312
328
  constructor();
313
329
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NavigationNavbarComponent, never>;
314
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NavigationNavbarComponent, "NavigationNavbar", never, { "position": { "alias": "nav-position"; "required": false; "isSignal": true; }; "typeStyle": { "alias": "nav-type-style"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, ["headerSlot", "contentSlot", "footerSlot"], ["NavigationHeader", "NavigationContent", "NavigationFooter"], true, never>;
330
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NavigationNavbarComponent, "NavigationNavbar", never, { "position": { "alias": "nav-position"; "required": false; "isSignal": true; }; "typeStyle": { "alias": "nav-appearance"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, ["headerSlot", "contentSlot", "footerSlot"], ["NavigationHeader", "NavigationContent", "NavigationFooter"], true, never>;
315
331
  }
316
332
 
317
333
  /**
@@ -329,17 +345,28 @@ declare class NavigationFlyoutComponent {
329
345
  readonly iconOnly: _angular_core.InputSignalWithTransform<boolean, unknown>;
330
346
  /** Penempatan ikon relatif terhadap label: `start` (default) atau `end`. */
331
347
  readonly iconPosition: _angular_core.InputSignal<NavigationFlyoutIconPosition>;
348
+ /** Bentuk visual tombol trigger: `button` (pil, default) | `link` | `plain` (ghost). */
349
+ readonly triggerVariant: _angular_core.InputSignal<NavigationFlyoutTriggerVariant>;
350
+ /**
351
+ * Trigger mengambang (`fixed`) alih-alih mengalir di dalam bar/div. Default pojok kanan-atas;
352
+ * pakai `trigger-class` untuk pindah pojok (mis. `bottom-6 right-6 top-auto`).
353
+ *
354
+ * Catatan: `position: fixed` ber-anchor ke viewport HANYA bila tak ada ancestor pembentuk
355
+ * containing block. Di dalam `<Layout>` (frame-nya memakai `backdrop-blur`), trigger ber-anchor
356
+ * ke kotak konten frame (bukan viewport sebenarnya) dan bisa ter-clip oleh frame `overflow-hidden`.
357
+ * Untuk floating sebenar-viewport, tempatkan `<Navigation>` flyout di luar frame `<Layout>`.
358
+ */
359
+ readonly triggerFloating: _angular_core.InputSignalWithTransform<boolean, unknown>;
360
+ /** Kelas Tailwind untuk host trigger (posisi pojok floating / styling wrapper saat in-flow). */
361
+ readonly triggerClass: _angular_core.InputSignal<string>;
332
362
  /** Posisi bar terhadap konten layout: `top` (default) atau `bottom` — panel membuka ke arah sebaliknya. */
333
363
  readonly position: _angular_core.InputSignal<NavigationHorizontalPosition | null>;
334
- readonly typeStyle: _angular_core.InputSignal<NavigationTypeStyle>;
364
+ readonly typeStyle: _angular_core.InputSignal<NavigationAppearance>;
335
365
  readonly class: _angular_core.InputSignal<string>;
336
- protected readonly headerSlot: _angular_core.Signal<NavigationHeaderComponent | undefined>;
337
- protected readonly contentSlot: _angular_core.Signal<NavigationContentComponent | undefined>;
338
- protected readonly footerSlot: _angular_core.Signal<NavigationFooterComponent | undefined>;
339
366
  protected readonly hostClasses: _angular_core.Signal<string>;
340
367
  constructor();
341
368
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NavigationFlyoutComponent, never>;
342
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NavigationFlyoutComponent, "NavigationFlyout", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconOnly": { "alias": "icon-only"; "required": false; "isSignal": true; }; "iconPosition": { "alias": "icon-position"; "required": false; "isSignal": true; }; "position": { "alias": "nav-position"; "required": false; "isSignal": true; }; "typeStyle": { "alias": "nav-type-style"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, ["headerSlot", "contentSlot", "footerSlot"], ["NavigationHeader", "NavigationContent", "NavigationFooter"], true, never>;
369
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NavigationFlyoutComponent, "NavigationFlyout", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconOnly": { "alias": "icon-only"; "required": false; "isSignal": true; }; "iconPosition": { "alias": "icon-position"; "required": false; "isSignal": true; }; "triggerVariant": { "alias": "trigger-variant"; "required": false; "isSignal": true; }; "triggerFloating": { "alias": "trigger-floating"; "required": false; "isSignal": true; }; "triggerClass": { "alias": "trigger-class"; "required": false; "isSignal": true; }; "position": { "alias": "nav-position"; "required": false; "isSignal": true; }; "typeStyle": { "alias": "nav-appearance"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["NavigationHeader", "NavigationFooter"], true, never>;
343
370
  }
344
371
 
345
372
  declare class NavigationCollapseRootDirective {
@@ -360,5 +387,110 @@ declare class NavigationCollapseExpandedDirective {
360
387
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NavigationCollapseExpandedDirective, "[NavigationCollapseExpanded]", never, {}, {}, never, never, true, never>;
361
388
  }
362
389
 
363
- export { NavigationCollapseExpandedDirective, NavigationCollapseRootDirective, NavigationContainerComponent, NavigationContentComponent, NavigationDockbarComponent, NavigationFlyoutComponent, NavigationFooterComponent, NavigationHeaderComponent, NavigationIconDirective, NavigationNavbarComponent, NavigationSidebarComponent, normalizeUiNavItems };
364
- export type { NavigationActionHandler, NavigationCollapseTree, NavigationDockbarMode, NavigationFlyoutIconPosition, NavigationHorizontalPosition, NavigationHorizontalType, NavigationIconContext, NavigationItem, NavigationItemBadge, NavigationItemClasses, NavigationItemType, NavigationLink, NavigationNormalizedItem, NavigationNormalizedItemType, NavigationOrientation, NavigationPosition, NavigationRegisterInput, NavigationSelection, NavigationState, NavigationType, NavigationTypeConfig, NavigationTypeStyle, NavigationVerticalPosition, NavigationVerticalType, NavigationVisibilityHandler };
390
+ /**
391
+ * Slot aksi di sisi kanan `NavigationFooter`. Selalu didorong ke kanan (`ml-auto`),
392
+ * rata tengah vertikal, dengan jarak antar-child otomatis (`gap`). Isi bebas dengan
393
+ * ikon, button, atau teks — mis. tombol logout.
394
+ *
395
+ * Otomatis disembunyikan saat sidebar vertical sedang collapsed (rail icon-only)
396
+ * agar tidak overflow; konsisten dengan `NavigationFooterTitle`.
397
+ */
398
+ declare class NavigationFooterActionComponent {
399
+ private readonly shell;
400
+ readonly class: _angular_core.InputSignal<string>;
401
+ protected readonly collapsed: _angular_core.Signal<boolean>;
402
+ protected readonly hostClasses: _angular_core.Signal<string>;
403
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NavigationFooterActionComponent, never>;
404
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NavigationFooterActionComponent, "NavigationFooterAction", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
405
+ }
406
+
407
+ /**
408
+ * Blok avatar/inisial untuk slot `NavigationFooter` (profil user). Sama seperti
409
+ * `NavigationHeaderInitial` tetapi default-nya bulat (rounded-full) sesuai
410
+ * konvensi avatar user. Consumer cukup memberi `name`; inisial diturunkan
411
+ * otomatis. Beri `src` untuk foto, `icon` untuk material symbol, atau `initials`
412
+ * untuk override.
413
+ *
414
+ * Tetap tampil saat sidebar collapsed; pasangannya `NavigationFooterTitle` yang
415
+ * menyembunyikan diri.
416
+ */
417
+ declare class NavigationFooterInitialComponent {
418
+ readonly name: _angular_core.InputSignal<string>;
419
+ readonly src: _angular_core.InputSignal<string | null>;
420
+ readonly initials: _angular_core.InputSignal<string | null>;
421
+ readonly icon: _angular_core.InputSignal<string | null>;
422
+ readonly class: _angular_core.InputSignal<string>;
423
+ protected readonly resolvedInitials: _angular_core.Signal<string>;
424
+ protected readonly hostClasses: _angular_core.Signal<string>;
425
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NavigationFooterInitialComponent, never>;
426
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NavigationFooterInitialComponent, "NavigationFooterInitial", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "src": { "alias": "src"; "required": false; "isSignal": true; }; "initials": { "alias": "initials"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
427
+ }
428
+
429
+ /**
430
+ * Judul + subjudul untuk slot `NavigationFooter` (mis. nama + email user).
431
+ * Otomatis disembunyikan saat sidebar vertical sedang collapsed (rail icon-only)
432
+ * dengan membaca `NAVIGATION_SHELL`.
433
+ */
434
+ declare class NavigationFooterTitleComponent {
435
+ private readonly shell;
436
+ readonly title: _angular_core.InputSignal<string>;
437
+ readonly subtitle: _angular_core.InputSignal<string | null>;
438
+ readonly class: _angular_core.InputSignal<string>;
439
+ protected readonly collapsed: _angular_core.Signal<boolean>;
440
+ protected readonly hostClasses: _angular_core.Signal<string>;
441
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NavigationFooterTitleComponent, never>;
442
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NavigationFooterTitleComponent, "NavigationFooterTitle", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
443
+ }
444
+
445
+ /**
446
+ * Blok avatar/inisial untuk slot `NavigationHeader` (brand/logo). Consumer cukup
447
+ * memberi `name`; inisial diturunkan otomatis ("Ojie Permana" → "OP"). Beri `src`
448
+ * untuk gambar, `icon` (material symbol) sebagai ganti inisial, atau `initials`
449
+ * untuk override manual.
450
+ *
451
+ * Selalu tampil baik saat sidebar expanded maupun collapsed karena ukurannya muat
452
+ * di rail icon-only — pasangannya, `NavigationHeaderTitle`, yang menyembunyikan
453
+ * diri saat collapsed.
454
+ */
455
+ declare class NavigationHeaderInitialComponent {
456
+ readonly name: _angular_core.InputSignal<string>;
457
+ readonly src: _angular_core.InputSignal<string | null>;
458
+ readonly initials: _angular_core.InputSignal<string | null>;
459
+ readonly icon: _angular_core.InputSignal<string | null>;
460
+ readonly class: _angular_core.InputSignal<string>;
461
+ protected readonly resolvedInitials: _angular_core.Signal<string>;
462
+ protected readonly hostClasses: _angular_core.Signal<string>;
463
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NavigationHeaderInitialComponent, never>;
464
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NavigationHeaderInitialComponent, "NavigationHeaderInitial", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "src": { "alias": "src"; "required": false; "isSignal": true; }; "initials": { "alias": "initials"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
465
+ }
466
+
467
+ /**
468
+ * Judul + subjudul untuk slot `NavigationHeader`. Otomatis disembunyikan saat
469
+ * sidebar vertical sedang collapsed (rail icon-only) dengan membaca
470
+ * `NAVIGATION_SHELL` — consumer tidak perlu mengelola state collapse sendiri.
471
+ */
472
+ declare class NavigationHeaderTitleComponent {
473
+ private readonly shell;
474
+ readonly title: _angular_core.InputSignal<string>;
475
+ readonly subtitle: _angular_core.InputSignal<string | null>;
476
+ readonly class: _angular_core.InputSignal<string>;
477
+ protected readonly collapsed: _angular_core.Signal<boolean>;
478
+ protected readonly hostClasses: _angular_core.Signal<string>;
479
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NavigationHeaderTitleComponent, never>;
480
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NavigationHeaderTitleComponent, "NavigationHeaderTitle", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
481
+ }
482
+
483
+ /**
484
+ * Turunkan inisial ringkas dari sebuah nama untuk avatar fallback.
485
+ *
486
+ * "Ojie Permana" → "OP"
487
+ * "Ojiepermana" → "OJ"
488
+ * "" → ""
489
+ *
490
+ * Mengambil huruf depan kata pertama dan kata terakhir; bila hanya satu kata,
491
+ * memakai dua huruf pertamanya.
492
+ */
493
+ declare function deriveNavigationInitials(name: string): string;
494
+
495
+ export { NavigationCollapseExpandedDirective, NavigationCollapseRootDirective, NavigationContainerComponent, NavigationContentComponent, NavigationDockbarComponent, NavigationFlyoutComponent, NavigationFooterActionComponent, NavigationFooterComponent, NavigationFooterInitialComponent, NavigationFooterTitleComponent, NavigationHeaderComponent, NavigationHeaderInitialComponent, NavigationHeaderTitleComponent, NavigationIconDirective, NavigationNavbarComponent, NavigationSidebarComponent, deriveNavigationInitials, normalizeUiNavItems };
496
+ export type { NavigationActionHandler, NavigationAppearance, NavigationCollapseTree, NavigationDockbarMode, NavigationFlyoutIconPosition, NavigationFlyoutTriggerVariant, NavigationHorizontalPosition, NavigationHorizontalType, NavigationIconContext, NavigationItem, NavigationItemBadge, NavigationItemClasses, NavigationItemType, NavigationLink, NavigationNormalizedItem, NavigationNormalizedItemType, NavigationOrientation, NavigationPosition, NavigationRegisterInput, NavigationSelection, NavigationState, NavigationType, NavigationTypeConfig, NavigationVerticalPosition, NavigationVerticalType, NavigationVisibilityHandler };