@ojiepermana/angular 21.1.9 → 21.1.12

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.
@@ -23,10 +23,11 @@ declare class VerticalLayoutComponent {
23
23
  readonly sidebarPosition: _angular_core.InputSignal<SidebarPosition>;
24
24
  readonly sidebarMode: _angular_core.InputSignal<SidebarMode>;
25
25
  readonly ariaLabel: _angular_core.InputSignal<string>;
26
- protected readonly layoutWidth: _angular_core.Signal<"full" | "fixed">;
26
+ protected readonly layoutWidth: _angular_core.Signal<"full" | "container" | "wide">;
27
27
  protected readonly themeStyle: _angular_core.Signal<"default" | "sharp" | "brutal" | "soft">;
28
+ protected readonly isConstrainedWidth: _angular_core.Signal<boolean>;
29
+ protected readonly isWideWidth: _angular_core.Signal<boolean>;
28
30
  protected readonly shellBorderWidth: _angular_core.Signal<"var(--border-width)" | null>;
29
- protected readonly dividerBorderWidth: _angular_core.Signal<string>;
30
31
  protected readonly hostClasses: _angular_core.Signal<string>;
31
32
  protected readonly frameClasses: _angular_core.Signal<string>;
32
33
  protected readonly mainClasses: _angular_core.Signal<string>;
@@ -53,15 +54,17 @@ declare class HorizontalLayoutComponent {
53
54
  private readonly theme;
54
55
  readonly topbarAppearance: _angular_core.InputSignal<TopbarAppearance>;
55
56
  readonly ariaLabel: _angular_core.InputSignal<string>;
56
- protected readonly layoutWidth: _angular_core.Signal<"full" | "fixed">;
57
+ protected readonly layoutWidth: _angular_core.Signal<"full" | "container" | "wide">;
57
58
  protected readonly themeStyle: _angular_core.Signal<"default" | "sharp" | "brutal" | "soft">;
59
+ protected readonly isConstrainedWidth: _angular_core.Signal<boolean>;
60
+ protected readonly isWideWidth: _angular_core.Signal<boolean>;
58
61
  protected readonly shellBorderWidth: _angular_core.Signal<"var(--border-width)" | null>;
59
62
  protected readonly dividerBorderWidth: _angular_core.Signal<string>;
60
63
  protected readonly hostClasses: _angular_core.Signal<string>;
61
64
  protected readonly frameClasses: _angular_core.Signal<string>;
62
65
  protected readonly mainClasses: _angular_core.Signal<string>;
63
66
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<HorizontalLayoutComponent, never>;
64
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<HorizontalLayoutComponent, "horizontal", never, { "topbarAppearance": { "alias": "topbarAppearance"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["[ui-layout-brand],[ui-topbar-start]", "[ui-layout-profile],[ui-topbar-end]"], true, never>;
67
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<HorizontalLayoutComponent, "horizontal", never, { "topbarAppearance": { "alias": "topbarAppearance"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["[ui-layout-brand],[topbar-start]", "[ui-layout-profile],[topbar-end]"], true, never>;
65
68
  }
66
69
 
67
70
  /**
@@ -83,15 +86,18 @@ declare class EmptyLayoutComponent {
83
86
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmptyLayoutComponent, "empty", never, {}, {}, never, never, true, never>;
84
87
  }
85
88
 
86
- declare const LAYOUT_MODES: readonly ["vertical", "horizontal"];
89
+ declare const LAYOUT_MODES: readonly ["vertical", "horizontal", "empty"];
87
90
  type LayoutMode = (typeof LAYOUT_MODES)[number];
88
- declare const LAYOUT_WIDTHS: readonly ["full", "fixed"];
91
+ declare const LAYOUT_WIDTHS: readonly ["full", "container", "wide"];
89
92
  type LayoutWidth = (typeof LAYOUT_WIDTHS)[number];
93
+ /** @deprecated Use `container` instead. */
94
+ type LegacyLayoutWidth = 'fixed';
95
+ type ConfiguredLayoutWidth = LayoutWidth | LegacyLayoutWidth;
90
96
  interface MaterialLayoutConfig {
91
97
  /** Initial layout mode. */
92
98
  readonly mode?: LayoutMode;
93
99
  /** Initial layout width. */
94
- readonly width?: LayoutWidth;
100
+ readonly width?: ConfiguredLayoutWidth;
95
101
  /** @deprecated Use `mode` instead. */
96
102
  /** Initial layout mode. Defaults to `vertical`. */
97
103
  readonly defaultMode?: LayoutMode;
@@ -110,14 +116,15 @@ declare const MATERIAL_LAYOUT_CONFIG: InjectionToken<MaterialLayoutConfig>;
110
116
  declare const DEFAULT_MATERIAL_LAYOUT_CONFIG: ResolvedMaterialLayoutConfig;
111
117
  declare function isLayoutMode(value: string | null | undefined): value is LayoutMode;
112
118
  declare function isLayoutWidth(value: string | null | undefined): value is LayoutWidth;
119
+ declare function normalizeLayoutWidth(value: string | null | undefined): LayoutWidth | null;
113
120
 
114
121
  declare class LayoutService {
115
122
  private readonly document;
116
123
  private readonly config;
117
124
  private readonly _mode;
118
125
  private readonly _width;
119
- readonly mode: _angular_core.Signal<"vertical" | "horizontal">;
120
- readonly width: _angular_core.Signal<"full" | "fixed">;
126
+ readonly mode: _angular_core.Signal<"vertical" | "horizontal" | "empty">;
127
+ readonly width: _angular_core.Signal<"full" | "container" | "wide">;
121
128
  constructor();
122
129
  setMode(mode: LayoutMode): void;
123
130
  toggleMode(): void;
@@ -136,5 +143,5 @@ declare function provideMaterialLayout(config?: MaterialLayoutConfig): Environme
136
143
 
137
144
  declare const LAYOUT_VERSION = "0.0.1";
138
145
 
139
- export { DEFAULT_MATERIAL_LAYOUT_CONFIG, EmptyLayoutComponent, HorizontalLayoutComponent, LAYOUT_MODES, LAYOUT_VERSION, LAYOUT_WIDTHS, LayoutService, MATERIAL_LAYOUT_CONFIG, VerticalLayoutComponent, isLayoutMode, isLayoutWidth, provideMaterialLayout };
140
- export type { LayoutMode, LayoutWidth, MaterialLayoutConfig, ResolvedMaterialLayoutConfig };
146
+ export { DEFAULT_MATERIAL_LAYOUT_CONFIG, EmptyLayoutComponent, HorizontalLayoutComponent, LAYOUT_MODES, LAYOUT_VERSION, LAYOUT_WIDTHS, LayoutService, MATERIAL_LAYOUT_CONFIG, VerticalLayoutComponent, isLayoutMode, isLayoutWidth, normalizeLayoutWidth, provideMaterialLayout };
147
+ export type { ConfiguredLayoutWidth, LayoutMode, LayoutWidth, LegacyLayoutWidth, MaterialLayoutConfig, ResolvedMaterialLayoutConfig };
@@ -131,22 +131,29 @@ declare const DEFAULT_NAVIGATION_ID = "main";
131
131
  * Signal-based global state untuk navigation (sidebar/topbar).
132
132
  *
133
133
  * Items disimpan dalam registry ber-key. Key default adalah `'main'`.
134
- * Komponen `ui-sidebar` / `ui-topbar` memilih registry via input `navigationId`.
134
+ * Komponen `sidebar` / `topbar` memilih registry via input `navigationId`.
135
135
  */
136
136
  declare class NavigationService {
137
+ private readonly doc;
137
138
  private readonly router;
138
139
  private readonly destroyRef;
140
+ private readonly persistedSidebarCollapsed;
139
141
  /** Internal version counter — incremented on every registry mutation. */
140
142
  private readonly _version;
141
143
  /** Internal map of registered navigation trees. */
142
144
  private readonly _registry;
145
+ private readonly _collapsed;
146
+ private readonly _hasStoredSidebarCollapse;
143
147
  /**
144
148
  * Backward-compatible accessor — returns items for the default (`'main'`) key.
145
149
  * Prefer `getItems(id)` when working with named registries.
146
150
  */
147
151
  readonly items: _angular_core.Signal<readonly NavigationItem[]>;
152
+ /** Sidebar appearance preference (`default` or `thin`). */
153
+ readonly sidebarAppearance: _angular_core.Signal<SidebarAppearance>;
154
+ readonly hasStoredSidebarCollapse: _angular_core.Signal<boolean>;
148
155
  /** Sidebar collapsed (default ↔ thin) toggle untuk desktop. */
149
- readonly collapsed: _angular_core.WritableSignal<boolean>;
156
+ readonly collapsed: _angular_core.Signal<boolean>;
150
157
  /** Sheet drawer terbuka di mobile. */
151
158
  readonly mobileOpen: _angular_core.WritableSignal<boolean>;
152
159
  /** Set id grup / collapsable yang sedang terbuka. */
@@ -172,6 +179,8 @@ declare class NavigationService {
172
179
  * Reactive terhadap perubahan registry.
173
180
  */
174
181
  getItems(id: string): () => readonly NavigationItem[];
182
+ setSidebarAppearance(value: SidebarAppearance): void;
183
+ toggleSidebarAppearance(currentAppearance?: SidebarAppearance): void;
175
184
  /** Toggle sidebar collapsed (default ↔ thin). */
176
185
  toggleCollapsed(): void;
177
186
  setCollapsed(value: boolean): void;
@@ -183,6 +192,8 @@ declare class NavigationService {
183
192
  setGroupOpen(id: string, open: boolean): void;
184
193
  /** Apakah id termasuk dalam active trail saat ini. */
185
194
  isActive(id: string | undefined): boolean;
195
+ private readPersistedSidebarCollapsed;
196
+ private persistSidebarCollapsed;
186
197
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NavigationService, never>;
187
198
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<NavigationService>;
188
199
  }
@@ -284,6 +295,7 @@ declare class SidebarComponent {
284
295
  /** Resolved items: input jika disediakan, fallback ke registry NavigationService. */
285
296
  protected readonly resolvedItems: _angular_core.Signal<readonly NavigationItem[]>;
286
297
  private readonly hovered;
298
+ private readonly suppressHoverUntilLeave;
287
299
  private readonly drawerTpl;
288
300
  private drawerRef;
289
301
  private focusTrap;
@@ -291,27 +303,33 @@ declare class SidebarComponent {
291
303
  /** True saat viewport `< md` (767.98px). */
292
304
  protected readonly isMobileMedia: _angular_core.Signal<boolean>;
293
305
  protected readonly isMobile: _angular_core.Signal<boolean>;
306
+ protected readonly resolvedCollapsed: _angular_core.Signal<boolean>;
307
+ protected readonly resolvedAppearance: _angular_core.Signal<SidebarAppearance>;
308
+ protected readonly hoverActive: _angular_core.Signal<boolean>;
294
309
  protected readonly isExpanded: _angular_core.Signal<boolean>;
295
310
  protected readonly isCompact: _angular_core.Signal<boolean>;
311
+ protected readonly toggleButtonLabel: _angular_core.Signal<"Expand sidebar" | "Collapse sidebar">;
296
312
  constructor();
297
313
  protected readonly hostClasses: _angular_core.Signal<string>;
314
+ protected readonly headerClasses: _angular_core.Signal<string>;
315
+ protected readonly headerSlotClasses: _angular_core.Signal<string>;
316
+ protected readonly navClasses: _angular_core.Signal<string>;
317
+ protected readonly footerClasses: _angular_core.Signal<string>;
318
+ protected readonly footerSlotClasses: _angular_core.Signal<string>;
298
319
  protected readonly innerClasses: _angular_core.Signal<string>;
299
320
  protected onHoverEnter(): void;
300
321
  protected onHoverLeave(): void;
322
+ protected toggleAppearance(event: MouseEvent): void;
301
323
  /** Touch fallback: tap pada strip thin (ketika belum expanded) untuk expand. */
302
324
  protected onHostClick(event: MouseEvent): void;
303
325
  private openDrawer;
304
326
  private closeDrawer;
305
327
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarComponent, never>;
306
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarComponent, "ui-sidebar", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "navigationId": { "alias": "navigationId"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "autoMobile": { "alias": "autoMobile"; "required": false; "isSignal": true; }; "autoRegister": { "alias": "autoRegister"; "required": false; "isSignal": true; }; }, {}, never, ["[ui-sidebar-header]", "[ui-sidebar-footer]"], true, never>;
328
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarComponent, "sidebar", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "navigationId": { "alias": "navigationId"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "autoMobile": { "alias": "autoMobile"; "required": false; "isSignal": true; }; "autoRegister": { "alias": "autoRegister"; "required": false; "isSignal": true; }; }, {}, never, ["[sidebar-header]", "[sidebar-footer]"], true, never>;
307
329
  }
308
330
 
309
331
  /**
310
332
  * Horizontal navigation (topbar) — shadcn-styled.
311
- *
312
- * Variants:
313
- * - `default`: horizontal list; item `collapsable` buka dropdown
314
- * - `megamenu`: item `mega` buka panel full-width multi-kolom
315
333
  */
316
334
  declare class TopbarComponent {
317
335
  protected readonly nav: NavigationService;
@@ -330,35 +348,30 @@ declare class TopbarComponent {
330
348
  /** Tampilkan hamburger di `< md` yang men-toggle mobile drawer sidebar. */
331
349
  readonly showHamburger: _angular_core.InputSignal<boolean>;
332
350
  readonly hamburgerLabel: _angular_core.InputSignal<string>;
333
- protected readonly topbarHeight = "var(--layout-topbar-height)";
334
351
  /** Resolved items: input jika disediakan, fallback ke registry NavigationService. */
335
352
  protected readonly resolvedItems: _angular_core.Signal<readonly NavigationItem[]>;
336
353
  protected readonly openId: _angular_core.WritableSignal<string | null>;
337
354
  private active;
338
355
  private readonly dropdownTpl;
339
- private readonly megaTpl;
340
356
  constructor();
341
357
  protected readonly hostClasses: _angular_core.Signal<string>;
358
+ protected readonly endSlotClasses: _angular_core.Signal<string>;
342
359
  protected asBasic(i: NavigationItem): NavigationBasicItem;
343
360
  protected asCollapsable(i: NavigationItem): NavigationCollapsableItem;
344
361
  protected asGroup(i: NavigationItem): NavigationGroupItem;
345
- protected asMega(i: NavigationItem): NavigationMegaItem;
346
362
  protected isItemActive(id: string | undefined): boolean;
347
- protected megaGridClasses(columns?: number): string;
348
363
  protected toggleDropdown(trigger: HTMLElement, item: NavigationItem): void;
349
364
  protected openDropdown(trigger: HTMLElement, item: NavigationItem): void;
350
- protected toggleMega(trigger: HTMLElement, item: NavigationItem): void;
351
- protected openMega(trigger: HTMLElement, item: NavigationItem): void;
352
365
  private attach;
353
366
  protected closeAll(): void;
354
367
  /** Menubar keyboard navigation: ArrowLeft/Right antar trigger, Home/End, ArrowDown fokus panel. */
355
368
  protected onMenubarKeydown(event: KeyboardEvent): void;
356
- /** Arrow-key navigation dalam dropdown/mega panel. */
369
+ /** Arrow-key navigation dalam dropdown panel. */
357
370
  protected onPanelKeydown(event: KeyboardEvent): void;
358
371
  private collectPanelFocusables;
359
372
  private focusFirstInPanel;
360
373
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TopbarComponent, never>;
361
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TopbarComponent, "ui-topbar", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "navigationId": { "alias": "navigationId"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "autoRegister": { "alias": "autoRegister"; "required": false; "isSignal": true; }; "showHamburger": { "alias": "showHamburger"; "required": false; "isSignal": true; }; "hamburgerLabel": { "alias": "hamburgerLabel"; "required": false; "isSignal": true; }; }, {}, never, ["[ui-topbar-start]", "[ui-topbar-end]"], true, never>;
374
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TopbarComponent, "topbar", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "navigationId": { "alias": "navigationId"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "autoRegister": { "alias": "autoRegister"; "required": false; "isSignal": true; }; "showHamburger": { "alias": "showHamburger"; "required": false; "isSignal": true; }; "hamburgerLabel": { "alias": "hamburgerLabel"; "required": false; "isSignal": true; }; }, {}, never, ["[topbar-start]", "[topbar-end]"], true, never>;
362
375
  }
363
376
 
364
377
  declare const DemoNavigationData: NavigationItem[];