@flusys/ng-layout 1.1.1-beta → 1.2.0-rc.1

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,15 +1,31 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Signal, InjectionToken } from '@angular/core';
2
+ import { Signal, InjectionToken, Type } from '@angular/core';
3
+ import { PresetName, ApplyThemeOptions } from '@flusys/ng-ui';
4
+ export { ApplyThemeOptions, applyTheme, buildBootstrapPreset } from '@flusys/ng-ui';
3
5
  import * as rxjs from 'rxjs';
4
6
  import { Observable } from 'rxjs';
5
- import { IconTypeEnum, ILogicNode } from '@flusys/ng-shared';
7
+ import { LayoutConfig } from '@flusys/ng-core';
8
+ import { ILogicNode, IconTypeEnum } from '@flusys/ng-shared';
6
9
  import * as _flusys_ng_layout from '@flusys/ng-layout';
7
- import * as _primeuix_themes_types from '@primeuix/themes/types';
10
+
11
+ declare class AppFooter {
12
+ private readonly layoutService;
13
+ readonly appName: string;
14
+ readonly displayLogo: string;
15
+ readonly isLogoSvg: boolean;
16
+ readonly authorName: string;
17
+ readonly authorUrl: string;
18
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppFooter, never>;
19
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppFooter, "app-footer", never, {}, {}, never, never, true, never>;
20
+ }
8
21
 
9
22
  interface ILauncherApp {
10
23
  id: string;
11
- name: string;
12
- iconType: IconTypeEnum;
24
+ /** Display name (use nameKey for localization instead) */
25
+ name?: string;
26
+ /** Translation key for the name - preferred over name for localization */
27
+ nameKey?: string;
28
+ iconType?: IconTypeEnum;
13
29
  icon: string;
14
30
  url: string;
15
31
  /** Optional permission logic - if set, app only visible when logic passes */
@@ -37,7 +53,10 @@ interface IUserInfo {
37
53
  }
38
54
  interface IMenuItem {
39
55
  id?: string;
56
+ /** Display label (use labelKey for localization instead) */
40
57
  label?: string;
58
+ /** Translation key for the label - preferred over label for localization */
59
+ labelKey?: string;
41
60
  icon?: string;
42
61
  iconType?: number;
43
62
  routerLink?: string[];
@@ -55,204 +74,135 @@ interface ILayoutAuthState {
55
74
  loginUserData: Signal<IUserInfo | null>;
56
75
  }
57
76
  interface ILayoutAuthApi {
58
- logOut(): Observable<any>;
77
+ logOut(): Observable<unknown>;
59
78
  navigateLogin(withUrl?: boolean): void;
60
- switchCompany(companyId: string, branchId: string): Observable<any>;
79
+ switchCompany(companyId: string, branchId: string): Observable<unknown>;
61
80
  getUserCompanies(): Observable<ICompanyInfo[]>;
62
81
  getCompanyBranches(companyId: string): Observable<IBranchInfo[]>;
63
82
  }
64
83
  declare const LAYOUT_AUTH_STATE: InjectionToken<ILayoutAuthState>;
65
84
  declare const LAYOUT_AUTH_API: InjectionToken<ILayoutAuthApi>;
66
-
67
- interface LayoutConfig {
68
- preset?: string;
69
- primary?: string;
70
- surface?: string | null;
71
- darkTheme?: boolean;
72
- menuMode?: 'static' | 'overlay';
85
+ declare const LAYOUT_NOTIFICATION_BELL: InjectionToken<Type<unknown>>;
86
+ declare const LAYOUT_LANGUAGE_SELECTOR: InjectionToken<Type<unknown>>;
87
+ declare const LAYOUT_LANGUAGE_SELECTOR_PANEL: InjectionToken<Type<unknown>>;
88
+ declare const LAYOUT_SEARCHBAR: InjectionToken<Type<unknown>>;
89
+ declare const LAYOUT_IS_RTL: InjectionToken<Signal<boolean>>;
90
+ interface ISearchSuggestion {
91
+ label: string;
92
+ icon?: string;
93
+ routerLink?: string[];
94
+ data?: unknown;
95
+ }
96
+ interface ISearchAdapter {
97
+ getSuggestions(query: string): Observable<ISearchSuggestion[]>;
98
+ onSearch?(query: string): void;
73
99
  }
100
+ declare const LAYOUT_SEARCH_ADAPTER: InjectionToken<ISearchAdapter>;
101
+
74
102
  interface LayoutState {
75
103
  staticMenuDesktopInactive?: boolean;
76
104
  overlayMenuActive?: boolean;
77
105
  configSidebarVisible?: boolean;
78
106
  staticMenuMobileActive?: boolean;
79
107
  menuHoverActive?: boolean;
108
+ topbarMenuVisible?: boolean;
80
109
  }
81
110
  interface MenuChangeEvent {
82
111
  key: string;
83
112
  routeEvent?: boolean;
84
113
  }
85
- /**
86
- * User profile information for display in layout
87
- */
88
114
  interface UserProfile {
89
115
  id: string;
90
116
  name: string;
91
117
  email: string;
92
118
  profilePictureUrl?: string | null;
93
119
  }
94
- /**
95
- * Company information for display in layout
96
- */
97
120
  interface CompanyProfile {
98
121
  id: string;
99
122
  name: string;
100
123
  slug: string;
101
124
  logoUrl?: string | null;
102
125
  }
103
- /**
104
- * Service managing layout configuration and state.
105
- * Provides signals for reactive layout updates.
106
- */
107
126
  declare class LayoutService {
108
127
  private readonly document;
109
128
  private readonly platformId;
110
129
  private readonly isBrowser;
111
130
  private readonly persistence;
112
131
  private readonly appConfig;
113
- private readonly defaultConfig;
114
- private readonly initialConfig;
115
- private readonly defaultState;
116
- readonly layoutConfig: _angular_core.WritableSignal<LayoutConfig>;
117
- readonly layoutState: _angular_core.WritableSignal<LayoutState>;
118
- readonly transitionComplete: _angular_core.WritableSignal<boolean>;
119
- readonly userProfile: _angular_core.WritableSignal<UserProfile | null>;
120
- readonly companyProfile: _angular_core.WritableSignal<CompanyProfile | null>;
121
- readonly appName: _angular_core.WritableSignal<string>;
122
- readonly authorName: _angular_core.WritableSignal<string>;
123
- readonly authorUrl: _angular_core.WritableSignal<string>;
124
- private readonly _rawApps;
125
- /**
126
- * Filtered launcher apps based on user permissions.
127
- * Automatically recomputes when raw apps or permissions change.
128
- */
129
- readonly apps: _angular_core.Signal<ILauncherApp[]>;
132
+ private readonly DEFAULT_CONFIG;
133
+ private readonly DEFAULT_STATE;
134
+ private readonly memorable;
135
+ private readonly _layoutConfig;
136
+ private readonly _layoutState;
137
+ private readonly _transitionComplete;
138
+ readonly layoutConfig: _angular_core.Signal<LayoutConfig>;
139
+ readonly layoutState: _angular_core.Signal<LayoutState>;
140
+ readonly transitionComplete: _angular_core.Signal<boolean>;
141
+ private readonly _userProfile;
142
+ private readonly _companyProfile;
130
143
  private readonly _rawMenu;
144
+ private readonly _rawApps;
131
145
  private readonly permissionValidator;
132
- /**
133
- * Filtered menu items based on user permissions.
134
- * Automatically recomputes when raw menu or permission checker changes.
135
- * Role checker is optional - if not set, role-based permissions will be denied.
136
- */
146
+ private readonly destroyRef;
147
+ private readonly _windowWidth;
148
+ readonly userProfile: _angular_core.Signal<UserProfile | null>;
149
+ readonly companyProfile: _angular_core.Signal<CompanyProfile | null>;
150
+ readonly appName: string;
151
+ readonly appLogo: string;
152
+ readonly isAppLogoSvg: boolean;
153
+ readonly authorName: string;
154
+ readonly authorUrl: string;
137
155
  readonly menu: _angular_core.Signal<IMenuItem[]>;
156
+ readonly apps: _angular_core.Signal<ILauncherApp[]>;
157
+ readonly hasApps: _angular_core.Signal<boolean>;
138
158
  readonly isSidebarActive: _angular_core.Signal<boolean | undefined>;
159
+ readonly isDesktop: _angular_core.Signal<boolean>;
160
+ readonly isMobile: _angular_core.Signal<boolean>;
139
161
  readonly isDarkTheme: _angular_core.Signal<boolean | undefined>;
140
- readonly getPrimary: _angular_core.Signal<string | undefined>;
141
- readonly getSurface: _angular_core.Signal<string | null | undefined>;
142
162
  readonly isOverlay: _angular_core.Signal<boolean>;
163
+ readonly isTopbar: _angular_core.Signal<boolean>;
143
164
  readonly userName: _angular_core.Signal<string>;
144
165
  readonly userEmail: _angular_core.Signal<string>;
145
166
  readonly userProfilePictureUrl: _angular_core.Signal<string | null>;
146
- readonly companyName: _angular_core.Signal<string>;
147
167
  readonly companyLogoUrl: _angular_core.Signal<string | null>;
148
168
  readonly isAuthenticated: _angular_core.Signal<boolean>;
149
- readonly hasApps: _angular_core.Signal<boolean>;
150
- private readonly configUpdate;
169
+ readonly companyName: _angular_core.Signal<string>;
170
+ readonly displayLogo: _angular_core.Signal<string>;
171
+ readonly isDisplayLogoSvg: _angular_core.Signal<boolean>;
151
172
  private readonly overlayOpen;
152
173
  private readonly menuSource;
153
174
  private readonly resetSource;
154
175
  readonly menuSource$: rxjs.Observable<MenuChangeEvent>;
155
176
  readonly resetSource$: rxjs.Observable<boolean>;
156
- readonly configUpdate$: rxjs.Observable<LayoutConfig>;
157
177
  readonly overlayOpen$: rxjs.Observable<void>;
158
178
  private initialized;
159
179
  constructor();
160
- private handleDarkModeTransition;
161
- private startViewTransition;
162
180
  toggleDarkMode(config?: LayoutConfig): void;
181
+ private handleDarkModeTransition;
163
182
  private onTransitionEnd;
164
183
  onMenuToggle(): void;
165
- isDesktop(): boolean;
166
- isMobile(): boolean;
167
- onConfigUpdate(): void;
168
184
  onMenuStateChange(event: MenuChangeEvent): void;
169
185
  reset(): void;
170
- /**
171
- * Set the current user profile for display in layout.
172
- * Called by auth integration to sync user data.
173
- */
186
+ updateLayoutConfig(config: Partial<LayoutConfig>): void;
187
+ updateLayoutState(state: Partial<LayoutState>): void;
174
188
  setUserProfile(profile: UserProfile | null): void;
175
- /**
176
- * Set the current company profile for display in layout.
177
- * Called by auth integration to sync company data.
178
- */
179
189
  setCompanyProfile(profile: CompanyProfile | null): void;
180
- /**
181
- * Set the raw menu items (unfiltered).
182
- * Menu will be automatically filtered based on permission checker.
183
- * Called by app initialization to set menu from IAM or other source.
184
- */
185
190
  setMenu(items: IMenuItem[]): void;
186
- /**
187
- * Clear menu and permission/role checkers.
188
- * Called on logout.
189
- */
190
191
  clearMenu(): void;
191
- /**
192
- * Set launcher apps for display in header.
193
- * Apps will be automatically filtered based on user permissions.
194
- * If empty after filtering, the app launcher button is hidden.
195
- */
196
192
  setApps(apps: ILauncherApp[]): void;
197
- /**
198
- * Clear launcher apps.
199
- * Called on logout.
200
- */
201
193
  clearApps(): void;
202
194
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutService, never>;
203
195
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<LayoutService>;
204
196
  }
205
197
 
206
- /**
207
- * Service for persisting layout configuration to localStorage.
208
- * Handles loading, saving, and validation of layout preferences with SSR-safe checks.
209
- *
210
- * @example
211
- * ```typescript
212
- * const persistence = inject(LayoutPersistenceService);
213
- *
214
- * // Load saved config
215
- * const config = persistence.load();
216
- *
217
- * // Save config
218
- * persistence.save({ darkTheme: true, preset: 'Aura' });
219
- *
220
- * // Clear saved config
221
- * persistence.clear();
222
- * ```
223
- */
224
198
  declare class LayoutPersistenceService {
225
199
  private readonly platformId;
226
200
  private readonly isBrowser;
227
201
  private readonly validPresets;
228
202
  private readonly validMenuModes;
229
- /**
230
- * Load configuration from localStorage.
231
- * Returns null if no saved config or invalid data.
232
- * SSR-safe (returns null on server).
233
- *
234
- * @returns Validated layout configuration or null
235
- */
236
203
  load(): LayoutConfig | null;
237
- /**
238
- * Save configuration to localStorage.
239
- * SSR-safe (no-op on server).
240
- *
241
- * @param config Layout configuration to save
242
- */
243
204
  save(config: LayoutConfig): void;
244
- /**
245
- * Clear stored configuration.
246
- * SSR-safe (no-op on server).
247
- */
248
205
  clear(): void;
249
- /**
250
- * Validate and sanitize configuration.
251
- * Returns null if version mismatch.
252
- *
253
- * @param config Configuration to validate
254
- * @returns Validated configuration or null
255
- */
256
206
  private validateConfig;
257
207
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutPersistenceService, never>;
258
208
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<LayoutPersistenceService>;
@@ -277,118 +227,41 @@ declare type SurfacesType = {
277
227
  };
278
228
  declare class AppConfigurator {
279
229
  private readonly router;
280
- private readonly primeng;
230
+ private readonly translateAdapter;
231
+ private readonly platformId;
281
232
  readonly layoutService: LayoutService;
282
- private readonly platformService;
283
- presets: string[];
284
- showMenuModeButton: _angular_core.WritableSignal<boolean>;
285
- menuModeOptions: {
233
+ readonly presets: PresetName[];
234
+ readonly showMenuModeButton: _angular_core.WritableSignal<boolean>;
235
+ readonly menuModeOptions: _angular_core.Signal<{
286
236
  label: string;
287
- value: string;
288
- }[];
289
- ngOnInit(): void;
290
- surfaces: SurfacesType[];
291
- selectedPrimaryColor: _angular_core.Signal<string | undefined>;
292
- selectedSurfaceColor: _angular_core.Signal<string | null | undefined>;
293
- selectedPreset: _angular_core.Signal<string | undefined>;
294
- menuMode: _angular_core.Signal<"static" | "overlay" | undefined>;
295
- primaryColors: _angular_core.Signal<SurfacesType[]>;
296
- getPresetExt(): {
297
- semantic: {
298
- primary: {
299
- 0?: string;
300
- 50?: string;
301
- 100?: string;
302
- 200?: string;
303
- 300?: string;
304
- 400?: string;
305
- 500?: string;
306
- 600?: string;
307
- 700?: string;
308
- 800?: string;
309
- 900?: string;
310
- 950?: string;
311
- } | undefined;
312
- colorScheme: {
313
- light: {
314
- primary: {
315
- color: string;
316
- contrastColor: string;
317
- hoverColor: string;
318
- activeColor: string;
319
- };
320
- highlight: {
321
- background: string;
322
- focusBackground: string;
323
- color: string;
324
- focusColor: string;
325
- };
326
- };
327
- dark: {
328
- primary: {
329
- color: string;
330
- contrastColor: string;
331
- hoverColor: string;
332
- activeColor: string;
333
- };
334
- highlight: {
335
- background: string;
336
- focusBackground: string;
337
- color: string;
338
- focusColor: string;
339
- };
340
- };
341
- };
342
- };
343
- };
344
- updateColors(event: any, type: string, color: any): void;
345
- applyTheme(type: string, color: any): void;
346
- onPresetChange(event: any): void;
347
- onMenuModeChange(event: 'static' | 'overlay'): void;
237
+ value: "static" | "overlay" | "topbar";
238
+ }[]>;
239
+ constructor();
240
+ readonly surfaces: SurfacesType[];
241
+ readonly selectedPrimaryColor: _angular_core.Signal<string | undefined>;
242
+ readonly selectedSurfaceColor: _angular_core.Signal<string | null | undefined>;
243
+ isSurfaceSelected(surfaceName: string | undefined): boolean;
244
+ readonly selectedPreset: _angular_core.Signal<string | undefined>;
245
+ readonly menuMode: _angular_core.Signal<"static" | "overlay" | "topbar" | undefined>;
246
+ readonly primaryColors: _angular_core.Signal<SurfacesType[]>;
247
+ updateColors(event: MouseEvent, type: string, color: SurfacesType): void;
248
+ private _applyColorChange;
249
+ onPresetChange(event: string): void;
250
+ onMenuModeChange(event: 'static' | 'overlay' | 'topbar'): void;
251
+ private translate;
348
252
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppConfigurator, never>;
349
253
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppConfigurator, "app-configurator", never, {}, {}, never, never, true, never>;
350
254
  }
351
255
 
352
256
  declare class AppFloatingConfigurator {
353
- LayoutService: LayoutService;
354
- isDarkTheme: _angular_core.Signal<boolean | undefined>;
257
+ private readonly layoutService;
258
+ readonly languageSelectorPanel: _angular_core.Type<unknown> | null;
259
+ readonly isDarkTheme: _angular_core.Signal<boolean | undefined>;
355
260
  toggleDarkMode(): void;
356
261
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppFloatingConfigurator, never>;
357
262
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppFloatingConfigurator, "app-floating-configurator", never, {}, {}, never, never, true, never>;
358
263
  }
359
264
 
360
- declare class AppFooter {
361
- private readonly layoutService;
362
- readonly appName: _angular_core.WritableSignal<string>;
363
- readonly authorName: _angular_core.WritableSignal<string>;
364
- readonly authorUrl: _angular_core.WritableSignal<string>;
365
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppFooter, never>;
366
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppFooter, "app-footer", never, {}, {}, never, never, true, never>;
367
- }
368
-
369
- type ActivePanel = 'config' | null;
370
- declare class AppTopbar {
371
- private readonly appConfig;
372
- private readonly document;
373
- private readonly destroyRef;
374
- readonly layoutService: LayoutService;
375
- private readonly configContainer;
376
- readonly activePanel: _angular_core.WritableSignal<ActivePanel>;
377
- constructor();
378
- readonly companyName: _angular_core.Signal<string>;
379
- enableCompanyFeature: _angular_core.Signal<boolean>;
380
- toggleDarkMode(): void;
381
- togglePanel(panel: ActivePanel): void;
382
- private handleOutsideClick;
383
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppTopbar, never>;
384
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppTopbar, "app-topbar", never, {}, {}, never, never, true, never>;
385
- }
386
-
387
- declare class AppSidebar {
388
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppSidebar, never>;
389
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppSidebar, "app-sidebar", never, {}, {}, never, never, true, never>;
390
- }
391
-
392
265
  declare class AppLayout {
393
266
  private readonly destroyRef;
394
267
  private readonly document;
@@ -396,20 +269,18 @@ declare class AppLayout {
396
269
  private readonly renderer;
397
270
  private readonly router;
398
271
  private menuOutsideClickListener;
399
- appSidebar: AppSidebar;
400
- appTopBar: AppTopbar;
401
272
  constructor();
402
273
  isOutsideClicked(event: MouseEvent): boolean;
403
274
  hideMenu(): void;
404
275
  blockBodyScroll(): void;
405
276
  unblockBodyScroll(): void;
406
- get containerClass(): {
407
- 'layout-overlay': boolean;
408
- 'layout-static': boolean;
409
- 'layout-static-inactive': boolean | undefined;
410
- 'layout-overlay-active': boolean | undefined;
411
- 'layout-mobile-active': boolean | undefined;
412
- };
277
+ readonly isOverlay: _angular_core.Signal<boolean>;
278
+ readonly isStatic: _angular_core.Signal<boolean>;
279
+ readonly isTopbarMode: _angular_core.Signal<boolean>;
280
+ readonly isStaticInactive: _angular_core.Signal<boolean | undefined>;
281
+ readonly isOverlayActive: _angular_core.Signal<boolean | undefined>;
282
+ readonly isMobileActive: _angular_core.Signal<boolean | undefined>;
283
+ readonly isTopbarNavHidden: _angular_core.Signal<boolean>;
413
284
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppLayout, never>;
414
285
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppLayout, "app-layout", never, {}, {}, never, never, true, never>;
415
286
  }
@@ -432,15 +303,37 @@ declare class AppMenu {
432
303
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppMenu, "app-menu", never, {}, {}, never, never, true, never>;
433
304
  }
434
305
 
306
+ /**
307
+ * View Transitions API type definitions
308
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API
309
+ */
310
+ interface ViewTransition {
311
+ /** Promise fulfilled when the transition animation is complete */
312
+ finished: Promise<void>;
313
+ /** Promise fulfilled when the pseudo-element tree is ready */
314
+ ready: Promise<void>;
315
+ /** Promise fulfilled when the callback finishes */
316
+ updateCallbackDone: Promise<void>;
317
+ /** Skip the transition animation */
318
+ skipTransition(): void;
319
+ }
320
+ /**
321
+ * Extended Document interface with View Transitions API support.
322
+ * Uses the native Document type with startViewTransition which is now
323
+ * part of the standard TypeScript DOM library.
324
+ */
325
+ type DocumentWithViewTransition = Document;
326
+
435
327
  declare class AppMenuitem {
436
328
  readonly item: _angular_core.InputSignal<IMenuItem>;
437
329
  readonly index: _angular_core.InputSignal<number>;
438
330
  readonly parentKey: _angular_core.InputSignal<string>;
439
331
  private readonly router;
440
- private readonly layoutService;
441
- private readonly authState;
332
+ readonly layoutService: LayoutService;
442
333
  private readonly destroyRef;
443
- readonly active: _angular_core.WritableSignal<boolean>;
334
+ private readonly parentLink;
335
+ private readonly _active;
336
+ readonly active: _angular_core.Signal<boolean>;
444
337
  readonly key: _angular_core.Signal<string>;
445
338
  readonly routerLink: _angular_core.Signal<string[]>;
446
339
  readonly routerLinkActiveOptions: _angular_core.Signal<{
@@ -450,31 +343,72 @@ declare class AppMenuitem {
450
343
  readonly fragment: "ignored";
451
344
  }>;
452
345
  constructor();
346
+ onMouseEnter(): void;
347
+ private updateSubmenuPosition;
453
348
  private updateActiveStateFromRoute;
454
349
  itemClick(): void;
455
350
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppMenuitem, never>;
456
351
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppMenuitem, "[app-menuitem]", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "index": { "alias": "index"; "required": true; "isSignal": true; }; "parentKey": { "alias": "parentKey"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
457
352
  }
458
353
 
354
+ declare class AppSidebar {
355
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppSidebar, never>;
356
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppSidebar, "app-sidebar", never, {}, {}, never, never, true, never>;
357
+ }
358
+
359
+ type ActivePanel = 'config' | null;
360
+ declare class AppTopbar {
361
+ private readonly appConfig;
362
+ private readonly document;
363
+ private readonly destroyRef;
364
+ readonly layoutService: LayoutService;
365
+ readonly notificationBellComponent: _angular_core.Type<unknown> | null;
366
+ readonly languageSelectorComponent: _angular_core.Type<unknown> | null;
367
+ private readonly searchAdapter;
368
+ readonly hasSearchAdapter: _angular_core.Signal<boolean>;
369
+ private readonly configContainer;
370
+ private readonly navContainer;
371
+ readonly activePanel: _angular_core.WritableSignal<ActivePanel>;
372
+ constructor();
373
+ readonly companyName: _angular_core.Signal<string>;
374
+ readonly displayLogo: _angular_core.Signal<string>;
375
+ readonly enableCompanyFeature: boolean;
376
+ toggleDarkMode(): void;
377
+ togglePanel(panel: ActivePanel): void;
378
+ private handleOutsideClick;
379
+ private recalculateHoveredSubmenu;
380
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppTopbar, never>;
381
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppTopbar, "app-topbar", never, {}, {}, never, never, true, never>;
382
+ }
383
+
459
384
  /** Company/branch switcher displayed in top bar */
460
385
  declare class AppCompanyBranchSelector {
461
386
  private readonly destroyRef;
462
387
  private readonly authState;
463
388
  private readonly authApi;
464
389
  private readonly messageService;
390
+ private readonly translateAdapter;
465
391
  private readonly document;
466
392
  private readonly elementRef;
467
- readonly isActive: _angular_core.WritableSignal<boolean>;
393
+ private readonly _isActive;
394
+ readonly isActive: _angular_core.Signal<boolean>;
468
395
  constructor();
469
396
  readonly currentCompanyName: _angular_core.Signal<string>;
470
397
  readonly currentBranchName: _angular_core.Signal<string | null>;
471
- readonly companies: _angular_core.WritableSignal<ICompanyInfo[]>;
472
- readonly branches: _angular_core.WritableSignal<IBranchInfo[]>;
473
- readonly selectedCompanyId: _angular_core.WritableSignal<string | null>;
474
- readonly selectedBranchId: _angular_core.WritableSignal<string | null>;
475
- readonly isLoadingCompanies: _angular_core.WritableSignal<boolean>;
476
- readonly isLoadingBranches: _angular_core.WritableSignal<boolean>;
477
- readonly isSwitching: _angular_core.WritableSignal<boolean>;
398
+ private readonly _companies;
399
+ readonly companies: _angular_core.Signal<ICompanyInfo[]>;
400
+ private readonly _branches;
401
+ readonly branches: _angular_core.Signal<IBranchInfo[]>;
402
+ private readonly _selectedCompanyId;
403
+ readonly selectedCompanyId: _angular_core.Signal<string | null>;
404
+ private readonly _selectedBranchId;
405
+ readonly selectedBranchId: _angular_core.Signal<string | null>;
406
+ private readonly _isLoadingCompanies;
407
+ readonly isLoadingCompanies: _angular_core.Signal<boolean>;
408
+ private readonly _isLoadingBranches;
409
+ readonly isLoadingBranches: _angular_core.Signal<boolean>;
410
+ private readonly _isSwitching;
411
+ readonly isSwitching: _angular_core.Signal<boolean>;
478
412
  readonly canSwitch: _angular_core.Signal<boolean>;
479
413
  onPanelToggle(): void;
480
414
  private loadCompanies;
@@ -482,18 +416,20 @@ declare class AppCompanyBranchSelector {
482
416
  onBranchChange(branchId: string | null): void;
483
417
  private loadBranches;
484
418
  onSwitch(): void;
419
+ private translate;
485
420
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppCompanyBranchSelector, never>;
486
421
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppCompanyBranchSelector, "app-company-branch-selector", never, {}, {}, never, never, true, never>;
487
422
  }
488
423
 
489
424
  declare class AppLauncher {
425
+ readonly layoutService: LayoutService;
490
426
  private readonly destroyRef;
491
427
  private readonly document;
492
428
  private readonly elementRef;
493
- readonly layoutService: LayoutService;
494
- readonly isActive: _angular_core.WritableSignal<boolean>;
429
+ private readonly _isActive;
430
+ readonly isActive: _angular_core.Signal<boolean>;
495
431
  constructor();
496
- togglePanel(): void;
432
+ toggleActive(): void;
497
433
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppLauncher, never>;
498
434
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppLauncher, "app-launcher", never, {}, {}, never, never, true, never>;
499
435
  }
@@ -504,20 +440,53 @@ declare class AppProfile {
504
440
  private readonly authApi;
505
441
  private readonly layoutService;
506
442
  private readonly messageService;
443
+ private readonly translateAdapter;
444
+ private readonly appConfig;
507
445
  private readonly document;
508
446
  private readonly elementRef;
509
- readonly isActive: _angular_core.WritableSignal<boolean>;
447
+ private readonly _isActive;
448
+ readonly isActive: _angular_core.Signal<boolean>;
510
449
  constructor();
511
450
  togglePanel(): void;
512
- userName: _angular_core.Signal<string>;
513
- userEmail: _angular_core.Signal<string>;
514
- profilePicture: _angular_core.Signal<string>;
451
+ readonly userName: _angular_core.Signal<string>;
452
+ readonly userEmail: _angular_core.Signal<string>;
453
+ readonly profilePicture: _angular_core.Signal<string>;
454
+ readonly signUpEnabled: _angular_core.Signal<boolean>;
515
455
  logout(): void;
516
456
  copySignUpLink(): void;
457
+ private translate;
517
458
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppProfile, never>;
518
459
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppProfile, "app-profile", never, {}, {}, never, never, true, never>;
519
460
  }
520
461
 
462
+ declare class AppSearchbar {
463
+ readonly layoutService: LayoutService;
464
+ private readonly router;
465
+ private readonly searchAdapter;
466
+ private readonly destroyRef;
467
+ private readonly document;
468
+ readonly searchTerm: _angular_core.WritableSignal<string>;
469
+ readonly suggestionsOpen: _angular_core.WritableSignal<boolean>;
470
+ readonly suggestions: _angular_core.WritableSignal<ISearchSuggestion[]>;
471
+ readonly focusedIndex: _angular_core.WritableSignal<number>;
472
+ readonly isSearchExpanded: _angular_core.WritableSignal<boolean>;
473
+ readonly isResponsive: _angular_core.WritableSignal<boolean>;
474
+ private readonly searchWrapper;
475
+ private readonly searchInput;
476
+ private searchTimeout?;
477
+ constructor();
478
+ onFocus(): void;
479
+ handleKeydown(event: KeyboardEvent): void;
480
+ handleEnter(): void;
481
+ selectSuggestion(item: ISearchSuggestion): void;
482
+ private closeSuggestions;
483
+ toggleSearch(): void;
484
+ private closeSearch;
485
+ onSearch(): void;
486
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppSearchbar, never>;
487
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppSearchbar, "app-searchbar", never, {}, {}, never, never, true, never>;
488
+ }
489
+
521
490
  /** Filter launcher apps based on user permission codes */
522
491
  declare function filterAppsByPermissions(apps: ILauncherApp[], permissionCodes: string[]): ILauncherApp[];
523
492
 
@@ -539,9 +508,13 @@ declare function filterAppsByPermissions(apps: ILauncherApp[], permissionCodes:
539
508
  */
540
509
  declare function filterMenuByPermissions(items: IMenuItem[], permissionCode: string[]): IMenuItem[];
541
510
 
542
- declare const GreenTheme: _primeuix_themes_types.Preset;
511
+ declare function buildPreset(presetName: string, primary: string): ApplyThemeOptions;
512
+
513
+ declare const NavyBlueTheme: ApplyThemeOptions;
514
+
515
+ declare const GreenTheme: ApplyThemeOptions;
543
516
 
544
- declare const NavyBlueTheme: _primeuix_themes_types.Preset;
517
+ declare const LAYOUT_MESSAGES: Record<string, string>;
545
518
 
546
- export { AppCompanyBranchSelector, AppConfigurator, AppFloatingConfigurator, AppFooter, AppLauncher, AppLayout, AppMenu, AppMenuitem, AppProfile, AppSidebar, AppTopbar, GreenTheme, LAYOUT_AUTH_API, LAYOUT_AUTH_STATE, LayoutPersistenceService, LayoutService, NavyBlueTheme, filterAppsByPermissions, filterMenuByPermissions };
547
- export type { CompanyProfile, IBranchInfo, ICompanyInfo, ILauncherApp, ILayoutAuthApi, ILayoutAuthState, IMenuItem, IUserInfo, LayoutConfig, LayoutState, MenuChangeEvent, UserProfile };
519
+ export { AppCompanyBranchSelector, AppConfigurator, AppFloatingConfigurator, AppFooter, AppLauncher, AppLayout, AppMenu, AppMenuitem, AppProfile, AppSearchbar, AppSidebar, AppTopbar, GreenTheme, LAYOUT_AUTH_API, LAYOUT_AUTH_STATE, LAYOUT_IS_RTL, LAYOUT_LANGUAGE_SELECTOR, LAYOUT_LANGUAGE_SELECTOR_PANEL, LAYOUT_MESSAGES, LAYOUT_NOTIFICATION_BELL, LAYOUT_SEARCHBAR, LAYOUT_SEARCH_ADAPTER, LayoutPersistenceService, LayoutService, NavyBlueTheme, buildPreset, filterAppsByPermissions, filterMenuByPermissions };
520
+ export type { CompanyProfile, DocumentWithViewTransition, IBranchInfo, ICompanyInfo, ILauncherApp, ILayoutAuthApi, ILayoutAuthState, IMenuItem, ISearchAdapter, ISearchSuggestion, IUserInfo, LayoutState, MenuChangeEvent, UserProfile, ViewTransition };