@flusys/ng-layout 9.1.0 → 9.1.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,606 +1,602 @@
1
- import * as rxjs from 'rxjs';
2
- import { Observable } from 'rxjs';
3
- import * as _angular_core from '@angular/core';
4
- import { Signal, InjectionToken, Type } from '@angular/core';
5
- import { LayoutConfig, LayoutTheme } from '@flusys/ng-core';
6
- import { ILogicNode, IconTypeEnum } from '@flusys/ng-shared';
7
- import { PresetName, ApplyThemeOptions } from '@flusys/ng-ui';
8
- export { ApplyThemeOptions, applyTheme, buildBootstrapPreset } from '@flusys/ng-ui';
9
- import * as _flusys_ng_layout from '@flusys/ng-layout';
10
-
11
- interface ILauncherApp {
12
- id: string;
13
- /** Display name (use nameKey for localization instead) */
14
- name?: string;
15
- /** Translation key for the name - preferred over name for localization */
16
- nameKey?: string;
17
- iconType?: IconTypeEnum;
18
- icon: string;
1
+ import { LayoutConfig, LayoutTheme } from "@flusys/ng-core";
2
+ import * as i0 from "@angular/core";
3
+ import { InjectionToken, Signal, Type } from "@angular/core";
4
+ import { ILogicNode, IconTypeEnum } from "@flusys/ng-shared";
5
+ import { Observable } from "rxjs";
6
+ import { ApplyThemeOptions, ApplyThemeOptions as ApplyThemeOptions$1, PresetName, applyTheme, buildBootstrapPreset } from "@flusys/ng-ui";
7
+ export interface ILauncherApp {
8
+ id: string;
9
+ /** Display name (use nameKey for localization instead) */
10
+ name?: string;
11
+ /** Translation key for the name - preferred over name for localization */
12
+ nameKey?: string;
13
+ iconType?: IconTypeEnum;
14
+ icon: string;
15
+ url: string;
16
+ /** Optional permission logic - if set, app only visible when logic passes */
17
+ permissionLogic?: ILogicNode | null;
18
+ }
19
+ export interface ICompanyInfo {
20
+ id: string;
21
+ name: string;
22
+ slug: string;
23
+ imageId: string;
24
+ }
25
+ export interface IBranchInfo {
26
+ id: string;
27
+ name: string;
28
+ slug: string;
29
+ imageId?: string;
30
+ parentId?: string | null;
31
+ serial?: number | null;
32
+ displayParentId?: string | null;
33
+ }
34
+ export interface IUserInfo {
35
+ id: string;
36
+ name: string;
37
+ email: string;
38
+ profilePicture?: {
19
39
  url: string;
20
- /** Optional permission logic - if set, app only visible when logic passes */
21
- permissionLogic?: ILogicNode | null;
22
- }
23
- interface ICompanyInfo {
24
- id: string;
25
- name: string;
26
- slug: string;
27
- imageId: string;
28
- }
29
- interface IBranchInfo {
30
- id: string;
31
- name: string;
32
- slug: string;
33
- imageId?: string;
34
- }
35
- interface IUserInfo {
40
+ } | null;
41
+ }
42
+ export interface IMenuItem {
43
+ id?: string;
44
+ /** Display label (use labelKey for localization instead) */
45
+ label?: string;
46
+ /** Translation key for the label - preferred over label for localization */
47
+ labelKey?: string;
48
+ icon?: string;
49
+ iconType?: number;
50
+ routerLink?: string[];
51
+ children?: IMenuItem[];
52
+ parent?: {
36
53
  id: string;
37
- name: string;
38
- email: string;
39
- profilePicture?: {
40
- url: string;
41
- } | null;
42
- }
43
- interface IMenuItem {
44
- id?: string;
45
- /** Display label (use labelKey for localization instead) */
46
- label?: string;
47
- /** Translation key for the label - preferred over label for localization */
48
- labelKey?: string;
49
- icon?: string;
50
- iconType?: number;
51
- routerLink?: string[];
52
- children?: IMenuItem[];
53
- parent?: {
54
- id: string;
55
- } | null;
56
- separator?: boolean;
57
- /** Optional permission logic - if set, item only visible when logic passes */
58
- permissionLogic?: ILogicNode | null;
59
- }
60
- interface ILayoutAuthState {
61
- currentCompanyInfo: Signal<ICompanyInfo | null>;
62
- currentBranchInfo: Signal<IBranchInfo | null>;
63
- loginUserData: Signal<IUserInfo | null>;
64
- }
65
- interface ILayoutAuthApi {
66
- logOut(): Observable<unknown>;
67
- navigateLogin(withUrl?: boolean): void;
68
- switchCompany(companyId: string, branchId: string): Observable<unknown>;
69
- getUserCompanies(): Observable<ICompanyInfo[]>;
70
- getCompanyBranches(companyId: string): Observable<IBranchInfo[]>;
71
- getMyCompanies(): Observable<ICompanyInfo[]>;
72
- getMyCompanyBranches(companyId: string): Observable<IBranchInfo[]>;
73
- }
74
- declare const LAYOUT_AUTH_STATE: InjectionToken<ILayoutAuthState>;
75
- declare const LAYOUT_AUTH_API: InjectionToken<ILayoutAuthApi>;
76
- declare const LAYOUT_NOTIFICATION_BELL: InjectionToken<Type<unknown>>;
77
- declare const LAYOUT_LANGUAGE_SELECTOR: InjectionToken<Type<unknown>>;
78
- declare const LAYOUT_LANGUAGE_SELECTOR_PANEL: InjectionToken<Type<unknown>>;
79
- declare const LAYOUT_SEARCHBAR: InjectionToken<Type<unknown>>;
80
- declare const LAYOUT_IS_RTL: InjectionToken<Signal<boolean>>;
81
- interface ISearchSuggestion {
82
- label: string;
83
- icon?: string;
84
- routerLink?: string[];
85
- data?: unknown;
86
- }
87
- interface ISearchAdapter {
88
- getSuggestions(query: string): Observable<ISearchSuggestion[]>;
89
- onSearch?(query: string): void;
90
- }
91
- declare const LAYOUT_SEARCH_ADAPTER: InjectionToken<ISearchAdapter>;
92
-
93
- interface LayoutState {
94
- staticMenuDesktopInactive?: boolean;
95
- overlayMenuActive?: boolean;
96
- configSidebarVisible?: boolean;
97
- staticMenuMobileActive?: boolean;
98
- menuHoverActive?: boolean;
99
- }
100
- interface MenuChangeEvent {
101
- key: string;
102
- routeEvent?: boolean;
103
- }
104
- interface UserProfile {
105
- id: string;
106
- name: string;
107
- email: string;
108
- profilePictureUrl?: string | null;
54
+ } | null;
55
+ separator?: boolean;
56
+ /** Optional permission logic - if set, item only visible when logic passes */
57
+ permissionLogic?: ILogicNode | null;
58
+ }
59
+ export interface ILayoutAuthState {
60
+ currentCompanyInfo: Signal<ICompanyInfo | null>;
61
+ currentBranchInfo: Signal<IBranchInfo | null>;
62
+ loginUserData: Signal<IUserInfo | null>;
63
+ }
64
+ export interface ILayoutAuthApi {
65
+ logOut(): Observable<unknown>;
66
+ navigateLogin(withUrl?: boolean): void;
67
+ switchCompany(companyId: string, branchId: string): Observable<unknown>;
68
+ getMyCompanies(): Observable<ICompanyInfo[]>;
69
+ getMyCompanyBranches(companyId: string): Observable<IBranchInfo[]>;
70
+ }
71
+ export declare const LAYOUT_AUTH_STATE: InjectionToken<ILayoutAuthState>;
72
+ export declare const LAYOUT_AUTH_API: InjectionToken<ILayoutAuthApi>;
73
+ export declare const LAYOUT_NOTIFICATION_BELL: InjectionToken<Type<unknown>>;
74
+ export declare const LAYOUT_LANGUAGE_SELECTOR: InjectionToken<Type<unknown>>;
75
+ export declare const LAYOUT_LANGUAGE_SELECTOR_PANEL: InjectionToken<Type<unknown>>;
76
+ export declare const LAYOUT_SEARCHBAR: InjectionToken<Type<unknown>>;
77
+ export declare const LAYOUT_IS_RTL: InjectionToken<Signal<boolean>>;
78
+ export interface ISearchSuggestion {
79
+ label: string;
80
+ icon?: string;
81
+ routerLink?: string[];
82
+ data?: unknown;
83
+ }
84
+ export interface ISearchAdapter {
85
+ getSuggestions(query: string): Observable<ISearchSuggestion[]>;
86
+ onSearch?(query: string): void;
87
+ }
88
+ export declare const LAYOUT_SEARCH_ADAPTER: InjectionToken<ISearchAdapter>;
89
+ export interface LayoutState {
90
+ staticMenuDesktopInactive?: boolean;
91
+ overlayMenuActive?: boolean;
92
+ configSidebarVisible?: boolean;
93
+ staticMenuMobileActive?: boolean;
94
+ menuHoverActive?: boolean;
95
+ }
96
+ export interface MenuChangeEvent {
97
+ key: string;
98
+ routeEvent?: boolean;
99
+ }
100
+ export interface UserProfile {
101
+ id: string;
102
+ name: string;
103
+ email: string;
104
+ profilePictureUrl?: string | null;
105
+ }
106
+ export interface CompanyProfile {
107
+ id: string;
108
+ name: string;
109
+ slug: string;
110
+ logoUrl?: string | null;
111
+ }
112
+ export declare class LayoutService {
113
+ private readonly document;
114
+ private readonly platformId;
115
+ private readonly isBrowser;
116
+ private readonly persistence;
117
+ private readonly appConfig;
118
+ private readonly DEFAULT_CONFIG;
119
+ private readonly DEFAULT_STATE;
120
+ private readonly memorable;
121
+ private readonly _layoutConfig;
122
+ private readonly _layoutState;
123
+ private readonly _transitionComplete;
124
+ readonly layoutConfig: import("@angular/core").Signal<LayoutConfig>;
125
+ readonly layoutState: import("@angular/core").Signal<LayoutState>;
126
+ readonly transitionComplete: import("@angular/core").Signal<boolean>;
127
+ private readonly _userProfile;
128
+ private readonly _companyProfile;
129
+ private readonly _rawMenu;
130
+ private readonly _rawApps;
131
+ private readonly permissionValidator;
132
+ private readonly destroyRef;
133
+ private readonly _windowWidth;
134
+ readonly userProfile: import("@angular/core").Signal<UserProfile | null>;
135
+ readonly companyProfile: import("@angular/core").Signal<CompanyProfile | null>;
136
+ readonly appName: string;
137
+ readonly appLogo: string;
138
+ readonly isAppLogoSvg: boolean;
139
+ readonly authorName: string;
140
+ readonly authorUrl: string;
141
+ readonly menu: import("@angular/core").Signal<IMenuItem[]>;
142
+ readonly apps: import("@angular/core").Signal<ILauncherApp[]>;
143
+ readonly hasApps: import("@angular/core").Signal<boolean>;
144
+ readonly isSidebarActive: import("@angular/core").Signal<boolean | undefined>;
145
+ readonly isDesktop: import("@angular/core").Signal<boolean>;
146
+ readonly isMobile: import("@angular/core").Signal<boolean>;
147
+ readonly isDarkTheme: import("@angular/core").Signal<boolean | undefined>;
148
+ readonly isOverlay: import("@angular/core").Signal<boolean>;
149
+ readonly layoutTheme: import("@angular/core").Signal<LayoutTheme>;
150
+ readonly isModernLayout: import("@angular/core").Signal<boolean>;
151
+ readonly isClassicLayout: import("@angular/core").Signal<boolean>;
152
+ /** The modern skin has no horizontal nav, so topbar mode only applies to the classic skin. */
153
+ readonly isTopbar: import("@angular/core").Signal<boolean>;
154
+ readonly userName: import("@angular/core").Signal<string>;
155
+ readonly userEmail: import("@angular/core").Signal<string>;
156
+ readonly userProfilePictureUrl: import("@angular/core").Signal<string | null>;
157
+ readonly companyLogoUrl: import("@angular/core").Signal<string | null>;
158
+ readonly isAuthenticated: import("@angular/core").Signal<boolean>;
159
+ readonly companyName: import("@angular/core").Signal<string>;
160
+ readonly displayLogo: import("@angular/core").Signal<string>;
161
+ readonly isDisplayLogoSvg: import("@angular/core").Signal<boolean>;
162
+ private readonly overlayOpen;
163
+ private readonly menuSource;
164
+ private readonly resetSource;
165
+ readonly menuSource$: import("rxjs").Observable<MenuChangeEvent>;
166
+ readonly resetSource$: import("rxjs").Observable<boolean>;
167
+ readonly overlayOpen$: import("rxjs").Observable<void>;
168
+ private initialized;
169
+ private appliedDarkTheme;
170
+ constructor();
171
+ toggleDarkMode(config?: LayoutConfig): void;
172
+ private handleDarkModeTransition;
173
+ private onTransitionEnd;
174
+ onMenuToggle(): void;
175
+ onMenuStateChange(event: MenuChangeEvent): void;
176
+ reset(): void;
177
+ updateLayoutConfig(config: Partial<LayoutConfig>): void;
178
+ updateLayoutState(state: Partial<LayoutState>): void;
179
+ setUserProfile(profile: UserProfile | null): void;
180
+ setCompanyProfile(profile: CompanyProfile | null): void;
181
+ setMenu(items: IMenuItem[]): void;
182
+ clearMenu(): void;
183
+ setApps(apps: ILauncherApp[]): void;
184
+ clearApps(): void;
185
+ static ɵfac: i0.ɵɵFactoryDeclaration<LayoutService, never>;
186
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
187
+ }
188
+ export declare class LayoutPersistenceService {
189
+ private readonly platformId;
190
+ private readonly isBrowser;
191
+ load(): LayoutConfig | null;
192
+ save(config: LayoutConfig): void;
193
+ clear(): void;
194
+ /**
195
+ * Coerces a stored value only when it is present and unrecognised. A field the
196
+ * user never changed stays absent so the app's own default still wins when this
197
+ * result is merged over it.
198
+ */
199
+ private validateConfig;
200
+ static ɵfac: i0.ɵɵFactoryDeclaration<LayoutPersistenceService, never>;
201
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
109
202
  }
110
- interface CompanyProfile {
111
- id: string;
112
- name: string;
113
- slug: string;
114
- logoUrl?: string | null;
115
- }
116
- declare class LayoutService {
117
- private readonly document;
118
- private readonly platformId;
119
- private readonly isBrowser;
120
- private readonly persistence;
121
- private readonly appConfig;
122
- private readonly DEFAULT_CONFIG;
123
- private readonly DEFAULT_STATE;
124
- private readonly memorable;
125
- private readonly _layoutConfig;
126
- private readonly _layoutState;
127
- private readonly _transitionComplete;
128
- readonly layoutConfig: _angular_core.Signal<LayoutConfig>;
129
- readonly layoutState: _angular_core.Signal<LayoutState>;
130
- readonly transitionComplete: _angular_core.Signal<boolean>;
131
- private readonly _userProfile;
132
- private readonly _companyProfile;
133
- private readonly _rawMenu;
134
- private readonly _rawApps;
135
- private readonly permissionValidator;
136
- private readonly destroyRef;
137
- private readonly _windowWidth;
138
- readonly userProfile: _angular_core.Signal<UserProfile | null>;
139
- readonly companyProfile: _angular_core.Signal<CompanyProfile | null>;
140
- readonly appName: string;
141
- readonly appLogo: string;
142
- readonly isAppLogoSvg: boolean;
143
- readonly authorName: string;
144
- readonly authorUrl: string;
145
- readonly menu: _angular_core.Signal<IMenuItem[]>;
146
- readonly apps: _angular_core.Signal<ILauncherApp[]>;
147
- readonly hasApps: _angular_core.Signal<boolean>;
148
- readonly isSidebarActive: _angular_core.Signal<boolean | undefined>;
149
- readonly isDesktop: _angular_core.Signal<boolean>;
150
- readonly isMobile: _angular_core.Signal<boolean>;
151
- readonly isDarkTheme: _angular_core.Signal<boolean | undefined>;
152
- readonly isOverlay: _angular_core.Signal<boolean>;
153
- readonly layoutTheme: _angular_core.Signal<LayoutTheme>;
154
- readonly isModernLayout: _angular_core.Signal<boolean>;
155
- readonly isClassicLayout: _angular_core.Signal<boolean>;
156
- /** The modern skin has no horizontal nav, so topbar mode only applies to the classic skin. */
157
- readonly isTopbar: _angular_core.Signal<boolean>;
158
- readonly userName: _angular_core.Signal<string>;
159
- readonly userEmail: _angular_core.Signal<string>;
160
- readonly userProfilePictureUrl: _angular_core.Signal<string | null>;
161
- readonly companyLogoUrl: _angular_core.Signal<string | null>;
162
- readonly isAuthenticated: _angular_core.Signal<boolean>;
163
- readonly companyName: _angular_core.Signal<string>;
164
- readonly displayLogo: _angular_core.Signal<string>;
165
- readonly isDisplayLogoSvg: _angular_core.Signal<boolean>;
166
- private readonly overlayOpen;
167
- private readonly menuSource;
168
- private readonly resetSource;
169
- readonly menuSource$: rxjs.Observable<MenuChangeEvent>;
170
- readonly resetSource$: rxjs.Observable<boolean>;
171
- readonly overlayOpen$: rxjs.Observable<void>;
172
- private initialized;
173
- private appliedDarkTheme;
174
- constructor();
175
- toggleDarkMode(config?: LayoutConfig): void;
176
- private handleDarkModeTransition;
177
- private onTransitionEnd;
178
- onMenuToggle(): void;
179
- onMenuStateChange(event: MenuChangeEvent): void;
180
- reset(): void;
181
- updateLayoutConfig(config: Partial<LayoutConfig>): void;
182
- updateLayoutState(state: Partial<LayoutState>): void;
183
- setUserProfile(profile: UserProfile | null): void;
184
- setCompanyProfile(profile: CompanyProfile | null): void;
185
- setMenu(items: IMenuItem[]): void;
186
- clearMenu(): void;
187
- setApps(apps: ILauncherApp[]): void;
188
- clearApps(): void;
189
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutService, never>;
190
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<LayoutService>;
191
- }
192
-
193
- declare class LayoutPersistenceService {
194
- private readonly platformId;
195
- private readonly isBrowser;
196
- load(): LayoutConfig | null;
197
- save(config: LayoutConfig): void;
198
- clear(): void;
199
- /**
200
- * Coerces a stored value only when it is present and unrecognised. A field the
201
- * user never changed stays absent so the app's own default still wins when this
202
- * result is merged over it.
203
- */
204
- private validateConfig;
205
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutPersistenceService, never>;
206
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<LayoutPersistenceService>;
207
- }
208
-
209
203
  /**
210
204
  * Layout shell entry point.
211
205
  * Renders the skin selected by `LayoutConfig.layoutTheme` — every skin shares
212
206
  * the same services, menu and topbar components, only the markup and styling differ.
213
207
  */
214
- declare class AppLayout {
215
- readonly layoutService: LayoutService;
216
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppLayout, never>;
217
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppLayout, "app-layout", never, {}, {}, never, never, true, never>;
208
+ export declare class AppLayout {
209
+ readonly layoutService: LayoutService;
210
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppLayout, never>;
211
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppLayout, "app-layout", never, {}, {}, never, never, true, never>;
218
212
  }
219
-
220
213
  /**
221
214
  * Home link showing the active company logo and name.
222
215
  * Every skin renders this same markup; sizing and colour come from the bar it sits in.
223
216
  */
224
- declare class AppBrandLogo {
225
- readonly layoutService: LayoutService;
226
- readonly companyName: _angular_core.Signal<string>;
227
- readonly displayLogo: _angular_core.Signal<string>;
228
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppBrandLogo, never>;
229
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppBrandLogo, "app-brand-logo", never, {}, {}, never, never, true, never>;
230
- }
231
-
217
+ export declare class AppBrandLogo {
218
+ readonly layoutService: LayoutService;
219
+ readonly companyName: import("@angular/core").Signal<string>;
220
+ readonly displayLogo: import("@angular/core").Signal<string>;
221
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppBrandLogo, never>;
222
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppBrandLogo, "app-brand-logo", never, {}, {}, never, never, true, never>;
223
+ }
232
224
  declare type SurfacesType = {
233
- name?: string;
234
- palette?: {
235
- 0?: string;
236
- 50?: string;
237
- 100?: string;
238
- 200?: string;
239
- 300?: string;
240
- 400?: string;
241
- 500?: string;
242
- 600?: string;
243
- 700?: string;
244
- 800?: string;
245
- 900?: string;
246
- 950?: string;
247
- };
225
+ name?: string;
226
+ palette?: {
227
+ 0?: string;
228
+ 50?: string;
229
+ 100?: string;
230
+ 200?: string;
231
+ 300?: string;
232
+ 400?: string;
233
+ 500?: string;
234
+ 600?: string;
235
+ 700?: string;
236
+ 800?: string;
237
+ 900?: string;
238
+ 950?: string;
239
+ };
248
240
  };
249
- declare class AppConfigurator {
250
- private readonly translateAdapter;
251
- private readonly platformId;
252
- readonly layoutService: LayoutService;
253
- readonly showMenuModeButton: _angular_core.InputSignal<boolean>;
254
- readonly presets: PresetName[];
255
- readonly menuModeOptions: _angular_core.Signal<{
256
- label: string;
257
- value: "static" | "overlay" | "topbar";
258
- }[]>;
259
- readonly layoutThemeOptions: _angular_core.Signal<{
260
- label: string;
261
- value: LayoutTheme;
262
- }[]>;
263
- constructor();
264
- readonly surfaces: SurfacesType[];
265
- readonly selectedPrimaryColor: _angular_core.Signal<string | undefined>;
266
- readonly selectedSurfaceColor: _angular_core.Signal<string | null | undefined>;
267
- isSurfaceSelected(surfaceName: string | undefined): boolean;
268
- readonly selectedPreset: _angular_core.Signal<string | undefined>;
269
- readonly menuMode: _angular_core.Signal<"static" | "overlay" | "topbar" | undefined>;
270
- readonly layoutTheme: _angular_core.Signal<LayoutTheme>;
271
- readonly primaryColors: _angular_core.Signal<SurfacesType[]>;
272
- updateColors(event: MouseEvent, type: string, color: SurfacesType): void;
273
- private _applyColorChange;
274
- onPresetChange(event: string): void;
275
- onMenuModeChange(event: 'static' | 'overlay' | 'topbar'): void;
276
- onLayoutThemeChange(event: LayoutTheme): void;
277
- private translate;
278
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppConfigurator, never>;
279
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppConfigurator, "app-configurator", never, { "showMenuModeButton": { "alias": "showMenuModeButton"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
280
- }
281
-
282
- declare class AppFloatingConfigurator {
283
- private readonly layoutService;
284
- readonly languageSelectorPanel: _angular_core.Type<unknown> | null;
285
- readonly isDarkTheme: _angular_core.Signal<boolean | undefined>;
286
- toggleDarkMode(): void;
287
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppFloatingConfigurator, never>;
288
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppFloatingConfigurator, "app-floating-configurator", never, {}, {}, never, never, true, never>;
289
- }
290
-
291
- declare class AppFooter {
292
- private readonly layoutService;
293
- readonly appName: string;
294
- readonly displayLogo: string;
295
- readonly isLogoSvg: boolean;
296
- readonly authorName: string;
297
- readonly authorUrl: string;
298
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppFooter, never>;
299
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppFooter, "app-footer", never, {}, {}, never, never, true, never>;
300
- }
301
-
241
+ export declare class AppConfigurator {
242
+ private readonly translateAdapter;
243
+ private readonly platformId;
244
+ readonly layoutService: LayoutService;
245
+ readonly showMenuModeButton: import("@angular/core").InputSignal<boolean>;
246
+ readonly presets: PresetName[];
247
+ readonly menuModeOptions: import("@angular/core").Signal<{
248
+ label: string;
249
+ value: "static" | "overlay" | "topbar";
250
+ }[]>;
251
+ readonly layoutThemeOptions: import("@angular/core").Signal<{
252
+ label: string;
253
+ value: LayoutTheme;
254
+ }[]>;
255
+ constructor();
256
+ readonly surfaces: SurfacesType[];
257
+ readonly selectedPrimaryColor: import("@angular/core").Signal<string | undefined>;
258
+ readonly selectedSurfaceColor: import("@angular/core").Signal<string | null | undefined>;
259
+ isSurfaceSelected(surfaceName: string | undefined): boolean;
260
+ readonly selectedPreset: import("@angular/core").Signal<string | undefined>;
261
+ readonly menuMode: import("@angular/core").Signal<"static" | "overlay" | "topbar" | undefined>;
262
+ readonly layoutTheme: import("@angular/core").Signal<LayoutTheme>;
263
+ readonly primaryColors: import("@angular/core").Signal<SurfacesType[]>;
264
+ updateColors(event: MouseEvent, type: string, color: SurfacesType): void;
265
+ private _applyColorChange;
266
+ onPresetChange(event: string): void;
267
+ onMenuModeChange(event: 'static' | 'overlay' | 'topbar'): void;
268
+ onLayoutThemeChange(event: LayoutTheme): void;
269
+ private translate;
270
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppConfigurator, never>;
271
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppConfigurator, "app-configurator", never, {
272
+ "showMenuModeButton": {
273
+ "alias": "showMenuModeButton";
274
+ "required": false;
275
+ "isSignal": true;
276
+ };
277
+ }, {}, never, never, true, never>;
278
+ }
279
+ export declare class AppFloatingConfigurator {
280
+ private readonly layoutService;
281
+ readonly languageSelectorPanel: import("@angular/core").Type<unknown> | null;
282
+ readonly isDarkTheme: import("@angular/core").Signal<boolean | undefined>;
283
+ toggleDarkMode(): void;
284
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppFloatingConfigurator, never>;
285
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppFloatingConfigurator, "app-floating-configurator", never, {}, {}, never, never, true, never>;
286
+ }
287
+ export declare class AppFooter {
288
+ private readonly layoutService;
289
+ readonly appName: string;
290
+ readonly displayLogo: string;
291
+ readonly isLogoSvg: boolean;
292
+ readonly authorName: string;
293
+ readonly authorUrl: string;
294
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppFooter, never>;
295
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppFooter, "app-footer", never, {}, {}, never, never, true, never>;
296
+ }
302
297
  /**
303
298
  * Main menu component that displays filtered menu items.
304
299
  * Menu is automatically filtered based on user permissions using the permission checker (logicNode pattern).
305
300
  * The filtering happens internally in LayoutService via computed signal.
306
301
  */
307
- declare class AppMenu {
308
- private readonly layoutService;
309
- /**
310
- * Filtered menu items from layout service.
311
- * This signal is computed in LayoutService and automatically updates when:
312
- * - Raw menu changes (setMenu called)
313
- * - Permission state changes (user permissions updated)
314
- */
315
- readonly menuItems: _angular_core.Signal<_flusys_ng_layout.IMenuItem[]>;
316
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppMenu, never>;
317
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppMenu, "app-menu", never, {}, {}, never, never, true, never>;
318
- }
319
-
302
+ export declare class AppMenu {
303
+ private readonly layoutService;
304
+ /**
305
+ * Filtered menu items from layout service.
306
+ * This signal is computed in LayoutService and automatically updates when:
307
+ * - Raw menu changes (setMenu called)
308
+ * - Permission state changes (user permissions updated)
309
+ */
310
+ readonly menuItems: import("@angular/core").Signal<import("@flusys/ng-layout").IMenuItem[]>;
311
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppMenu, never>;
312
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppMenu, "app-menu", never, {}, {}, never, never, true, never>;
313
+ }
320
314
  /**
321
315
  * View Transitions API type definitions
322
316
  * @see https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API
323
317
  */
324
- interface ViewTransition {
325
- /** Promise fulfilled when the transition animation is complete */
326
- finished: Promise<void>;
327
- /** Promise fulfilled when the pseudo-element tree is ready */
328
- ready: Promise<void>;
329
- /** Promise fulfilled when the callback finishes */
330
- updateCallbackDone: Promise<void>;
331
- /** Skip the transition animation */
332
- skipTransition(): void;
318
+ export interface ViewTransition {
319
+ /** Promise fulfilled when the transition animation is complete */
320
+ finished: Promise<void>;
321
+ /** Promise fulfilled when the pseudo-element tree is ready */
322
+ ready: Promise<void>;
323
+ /** Promise fulfilled when the callback finishes */
324
+ updateCallbackDone: Promise<void>;
325
+ /** Skip the transition animation */
326
+ skipTransition(): void;
333
327
  }
334
328
  /**
335
329
  * Extended Document interface with View Transitions API support.
336
330
  * Uses the native Document type with startViewTransition which is now
337
331
  * part of the standard TypeScript DOM library.
338
332
  */
339
- type DocumentWithViewTransition = Document;
340
-
341
- declare class AppMenuitem {
342
- readonly item: _angular_core.InputSignal<IMenuItem>;
343
- readonly index: _angular_core.InputSignal<number>;
344
- readonly parentKey: _angular_core.InputSignal<string>;
345
- private readonly router;
346
- readonly layoutService: LayoutService;
347
- private readonly destroyRef;
348
- private readonly parentLink;
349
- private readonly _active;
350
- readonly active: _angular_core.Signal<boolean>;
351
- readonly key: _angular_core.Signal<string>;
352
- readonly routerLink: _angular_core.Signal<string[]>;
353
- readonly routerLinkActiveOptions: _angular_core.Signal<{
354
- readonly paths: "exact" | "subset";
355
- readonly queryParams: "ignored";
356
- readonly matrixParams: "ignored";
357
- readonly fragment: "ignored";
358
- }>;
359
- constructor();
360
- onMouseEnter(): void;
361
- private updateSubmenuPosition;
362
- private updateActiveStateFromRoute;
363
- itemClick(): void;
364
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppMenuitem, never>;
365
- 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>;
366
- }
367
-
333
+ export type DocumentWithViewTransition = Document;
334
+ export declare class AppMenuitem {
335
+ readonly item: import("@angular/core").InputSignal<IMenuItem>;
336
+ readonly index: import("@angular/core").InputSignal<number>;
337
+ readonly parentKey: import("@angular/core").InputSignal<string>;
338
+ private readonly router;
339
+ readonly layoutService: LayoutService;
340
+ private readonly destroyRef;
341
+ private readonly parentLink;
342
+ private readonly _active;
343
+ readonly active: import("@angular/core").Signal<boolean>;
344
+ readonly key: import("@angular/core").Signal<string>;
345
+ readonly routerLink: import("@angular/core").Signal<string[]>;
346
+ readonly routerLinkActiveOptions: import("@angular/core").Signal<{
347
+ readonly paths: "exact" | "subset";
348
+ readonly queryParams: "ignored";
349
+ readonly matrixParams: "ignored";
350
+ readonly fragment: "ignored";
351
+ }>;
352
+ constructor();
353
+ onMouseEnter(): void;
354
+ private updateSubmenuPosition;
355
+ private updateActiveStateFromRoute;
356
+ itemClick(): void;
357
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppMenuitem, never>;
358
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppMenuitem, "[app-menuitem]", never, {
359
+ "item": {
360
+ "alias": "item";
361
+ "required": true;
362
+ "isSignal": true;
363
+ };
364
+ "index": {
365
+ "alias": "index";
366
+ "required": true;
367
+ "isSignal": true;
368
+ };
369
+ "parentKey": {
370
+ "alias": "parentKey";
371
+ "required": false;
372
+ "isSignal": true;
373
+ };
374
+ }, {}, never, never, true, never>;
375
+ }
368
376
  /**
369
377
  * Shared shell behaviour for every layout skin.
370
378
  * Holds the menu open/close lifecycle so a skin only owns markup and styling.
371
379
  */
372
- declare abstract class LayoutShellBase {
373
- private readonly destroyRef;
374
- private readonly document;
375
- private readonly renderer;
376
- private readonly router;
377
- readonly layoutService: LayoutService;
378
- private menuOutsideClickListener;
379
- /** Elements that must not close the menu when clicked. */
380
- protected abstract outsideClickSelectors(): string[];
381
- /** Extra work a skin needs on every completed navigation. */
382
- protected onNavigated(): void;
383
- constructor();
384
- isOutsideClicked(event: MouseEvent): boolean;
385
- hideMenu(): void;
386
- blockBodyScroll(): void;
387
- unblockBodyScroll(): void;
388
- readonly isOverlay: _angular_core.Signal<boolean>;
389
- /** Delegated so a skin that has no horizontal nav is never treated as being in it. */
390
- readonly isTopbarMode: _angular_core.Signal<boolean>;
391
- readonly isOverlayActive: _angular_core.Signal<boolean | undefined>;
392
- readonly isMobileActive: _angular_core.Signal<boolean | undefined>;
393
- /**
394
- * The desktop sidebar is collapsed in place. Only meaningful for the modes that
395
- * keep the sidebar in the layout flow — an overlay drawer and the horizontal nav
396
- * have nothing to collapse.
397
- */
398
- readonly isDesktopCollapsed: _angular_core.Signal<boolean>;
399
- }
400
-
380
+ export declare abstract class LayoutShellBase {
381
+ private readonly destroyRef;
382
+ private readonly document;
383
+ private readonly renderer;
384
+ private readonly router;
385
+ readonly layoutService: LayoutService;
386
+ private menuOutsideClickListener;
387
+ /** Elements that must not close the menu when clicked. */
388
+ protected abstract outsideClickSelectors(): string[];
389
+ /** Extra work a skin needs on every completed navigation. */
390
+ protected onNavigated(): void;
391
+ constructor();
392
+ isOutsideClicked(event: MouseEvent): boolean;
393
+ hideMenu(): void;
394
+ blockBodyScroll(): void;
395
+ unblockBodyScroll(): void;
396
+ readonly isOverlay: import("@angular/core").Signal<boolean>;
397
+ /** Delegated so a skin that has no horizontal nav is never treated as being in it. */
398
+ readonly isTopbarMode: import("@angular/core").Signal<boolean>;
399
+ readonly isOverlayActive: import("@angular/core").Signal<boolean | undefined>;
400
+ readonly isMobileActive: import("@angular/core").Signal<boolean | undefined>;
401
+ /**
402
+ * The desktop sidebar is collapsed in place. Only meaningful for the modes that
403
+ * keep the sidebar in the layout flow — an overlay drawer and the horizontal nav
404
+ * have nothing to collapse.
405
+ */
406
+ readonly isDesktopCollapsed: import("@angular/core").Signal<boolean>;
407
+ }
401
408
  /** Company/branch switcher displayed in top bar */
402
- declare class AppCompanyBranchSelector {
403
- private readonly destroyRef;
404
- private readonly authState;
405
- private readonly authApi;
406
- private readonly messageService;
407
- private readonly translateAdapter;
408
- private readonly document;
409
- private readonly elementRef;
410
- private readonly _isActive;
411
- readonly isActive: _angular_core.Signal<boolean>;
412
- constructor();
413
- readonly currentCompanyName: _angular_core.Signal<string>;
414
- readonly currentBranchName: _angular_core.Signal<string | null>;
415
- private readonly _companies;
416
- readonly companies: _angular_core.Signal<ICompanyInfo[]>;
417
- private readonly _branches;
418
- readonly branches: _angular_core.Signal<IBranchInfo[]>;
419
- private readonly _selectedCompanyId;
420
- readonly selectedCompanyId: _angular_core.Signal<string | null>;
421
- private readonly _selectedBranchId;
422
- readonly selectedBranchId: _angular_core.Signal<string | null>;
423
- private readonly _isLoadingCompanies;
424
- readonly isLoadingCompanies: _angular_core.Signal<boolean>;
425
- private readonly _isLoadingBranches;
426
- readonly isLoadingBranches: _angular_core.Signal<boolean>;
427
- private readonly _isSwitching;
428
- readonly isSwitching: _angular_core.Signal<boolean>;
429
- readonly canSwitch: _angular_core.Signal<boolean>;
430
- onPanelToggle(): void;
431
- private loadCompanies;
432
- onCompanyChange(companyId: string | null): void;
433
- onBranchChange(branchId: string | null): void;
434
- private loadBranches;
435
- onSwitch(): void;
436
- private translate;
437
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppCompanyBranchSelector, never>;
438
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppCompanyBranchSelector, "app-company-branch-selector", never, {}, {}, never, never, true, never>;
439
- }
440
-
441
- declare class AppLauncher {
442
- readonly layoutService: LayoutService;
443
- private readonly destroyRef;
444
- private readonly document;
445
- private readonly elementRef;
446
- private readonly _isActive;
447
- readonly isActive: _angular_core.Signal<boolean>;
448
- constructor();
449
- toggleActive(): void;
450
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppLauncher, never>;
451
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppLauncher, "app-launcher", never, {}, {}, never, never, true, never>;
452
- }
453
-
454
- declare class AppProfile {
455
- private readonly destroyRef;
456
- private readonly authState;
457
- private readonly authApi;
458
- private readonly layoutService;
459
- private readonly messageService;
460
- private readonly translateAdapter;
461
- private readonly appConfig;
462
- private readonly document;
463
- private readonly elementRef;
464
- private readonly _isActive;
465
- readonly isActive: _angular_core.Signal<boolean>;
466
- constructor();
467
- togglePanel(): void;
468
- readonly userName: _angular_core.Signal<string>;
469
- readonly userEmail: _angular_core.Signal<string>;
470
- readonly profilePicture: _angular_core.Signal<string>;
471
- readonly signUpEnabled: _angular_core.Signal<boolean>;
472
- logout(): void;
473
- copySignUpLink(): void;
474
- private translate;
475
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppProfile, never>;
476
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppProfile, "app-profile", never, {}, {}, never, never, true, never>;
477
- }
478
-
479
- declare class AppSearchbar {
480
- readonly layoutService: LayoutService;
481
- private readonly router;
482
- private readonly searchAdapter;
483
- private readonly destroyRef;
484
- private readonly document;
485
- readonly searchTerm: _angular_core.WritableSignal<string>;
486
- readonly suggestionsOpen: _angular_core.WritableSignal<boolean>;
487
- readonly suggestions: _angular_core.WritableSignal<ISearchSuggestion[]>;
488
- readonly focusedIndex: _angular_core.WritableSignal<number>;
489
- readonly isSearchExpanded: _angular_core.WritableSignal<boolean>;
490
- readonly isResponsive: _angular_core.WritableSignal<boolean>;
491
- private readonly searchWrapper;
492
- private readonly searchInput;
493
- private searchTimeout?;
494
- constructor();
495
- onFocus(): void;
496
- handleKeydown(event: KeyboardEvent): void;
497
- handleEnter(): void;
498
- selectSuggestion(item: ISearchSuggestion): void;
499
- private closeSuggestions;
500
- toggleSearch(): void;
501
- private closeSearch;
502
- onSearch(): void;
503
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppSearchbar, never>;
504
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppSearchbar, "app-searchbar", never, {}, {}, never, never, true, never>;
505
- }
506
-
409
+ export declare class AppCompanyBranchSelector {
410
+ private readonly destroyRef;
411
+ private readonly authState;
412
+ private readonly authApi;
413
+ private readonly messageService;
414
+ private readonly translateAdapter;
415
+ private readonly document;
416
+ private readonly elementRef;
417
+ private readonly _isActive;
418
+ readonly isActive: import("@angular/core").Signal<boolean>;
419
+ constructor();
420
+ readonly currentCompanyName: import("@angular/core").Signal<string>;
421
+ readonly currentBranchName: import("@angular/core").Signal<string | null>;
422
+ private readonly _companies;
423
+ readonly companies: import("@angular/core").Signal<ICompanyInfo[]>;
424
+ private readonly _branches;
425
+ readonly branches: import("@angular/core").Signal<IBranchInfo[]>;
426
+ readonly branchTreeNodes: import("@angular/core").Signal<import("@flusys/ng-ui").TreeNode<IBranchInfo>[]>;
427
+ private readonly _selectedCompanyId;
428
+ readonly selectedCompanyId: import("@angular/core").Signal<string | null>;
429
+ private readonly _selectedBranchId;
430
+ readonly selectedBranchId: import("@angular/core").Signal<string | null>;
431
+ private readonly _isLoadingCompanies;
432
+ readonly isLoadingCompanies: import("@angular/core").Signal<boolean>;
433
+ private readonly _isLoadingBranches;
434
+ readonly isLoadingBranches: import("@angular/core").Signal<boolean>;
435
+ private readonly _isSwitching;
436
+ readonly isSwitching: import("@angular/core").Signal<boolean>;
437
+ readonly canSwitch: import("@angular/core").Signal<boolean>;
438
+ onPanelToggle(): void;
439
+ private loadCompanies;
440
+ onCompanyChange(companyId: string | null): void;
441
+ onBranchChange(branchId: string | null): void;
442
+ private loadBranches;
443
+ onSwitch(): void;
444
+ private translate;
445
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppCompanyBranchSelector, never>;
446
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppCompanyBranchSelector, "app-company-branch-selector", never, {}, {}, never, never, true, never>;
447
+ }
448
+ export declare class AppLauncher {
449
+ readonly layoutService: LayoutService;
450
+ private readonly destroyRef;
451
+ private readonly document;
452
+ private readonly elementRef;
453
+ private readonly _isActive;
454
+ readonly isActive: import("@angular/core").Signal<boolean>;
455
+ constructor();
456
+ toggleActive(): void;
457
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppLauncher, never>;
458
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppLauncher, "app-launcher", never, {}, {}, never, never, true, never>;
459
+ }
460
+ export declare class AppProfile {
461
+ private readonly destroyRef;
462
+ private readonly authState;
463
+ private readonly authApi;
464
+ private readonly layoutService;
465
+ private readonly messageService;
466
+ private readonly translateAdapter;
467
+ private readonly appConfig;
468
+ private readonly document;
469
+ private readonly elementRef;
470
+ private readonly _isActive;
471
+ readonly isActive: import("@angular/core").Signal<boolean>;
472
+ constructor();
473
+ togglePanel(): void;
474
+ readonly userName: import("@angular/core").Signal<string>;
475
+ readonly userEmail: import("@angular/core").Signal<string>;
476
+ readonly profilePicture: import("@angular/core").Signal<string>;
477
+ readonly signUpEnabled: import("@angular/core").Signal<boolean>;
478
+ logout(): void;
479
+ copySignUpLink(): void;
480
+ private translate;
481
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppProfile, never>;
482
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppProfile, "app-profile", never, {}, {}, never, never, true, never>;
483
+ }
484
+ export declare class AppSearchbar {
485
+ readonly layoutService: LayoutService;
486
+ private readonly router;
487
+ private readonly searchAdapter;
488
+ private readonly destroyRef;
489
+ private readonly document;
490
+ readonly searchTerm: import("@angular/core").WritableSignal<string>;
491
+ readonly suggestionsOpen: import("@angular/core").WritableSignal<boolean>;
492
+ readonly suggestions: import("@angular/core").WritableSignal<ISearchSuggestion[]>;
493
+ readonly focusedIndex: import("@angular/core").WritableSignal<number>;
494
+ readonly isSearchExpanded: import("@angular/core").WritableSignal<boolean>;
495
+ readonly isResponsive: import("@angular/core").WritableSignal<boolean>;
496
+ private readonly searchWrapper;
497
+ private readonly searchInput;
498
+ private searchTimeout?;
499
+ constructor();
500
+ onFocus(): void;
501
+ handleKeydown(event: KeyboardEvent): void;
502
+ handleEnter(): void;
503
+ selectSuggestion(item: ISearchSuggestion): void;
504
+ private closeSuggestions;
505
+ toggleSearch(): void;
506
+ private closeSearch;
507
+ onSearch(): void;
508
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppSearchbar, never>;
509
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppSearchbar, "app-searchbar", never, {}, {}, never, never, true, never>;
510
+ }
507
511
  /**
508
512
  * Trailing action rail of the topbar — search, theme controls and the widget menu.
509
513
  * Skins own the bar around it; the rail itself is identical in every skin, and
510
514
  * `display: contents` on the host keeps it a direct flex child of the bar.
511
515
  */
512
- declare class AppTopbarActions {
513
- private readonly appConfig;
514
- private readonly document;
515
- private readonly destroyRef;
516
- readonly layoutService: LayoutService;
517
- readonly notificationBellComponent: _angular_core.Type<unknown> | null;
518
- readonly languageSelectorComponent: _angular_core.Type<unknown> | null;
519
- private readonly searchAdapter;
520
- private readonly configContainer;
521
- private readonly _configPanelOpen;
522
- readonly configPanelOpen: _angular_core.Signal<boolean>;
523
- readonly hasSearchAdapter: _angular_core.Signal<boolean>;
524
- readonly enableCompanyFeature: boolean;
525
- constructor();
526
- toggleDarkMode(): void;
527
- toggleConfigPanel(): void;
528
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppTopbarActions, never>;
529
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppTopbarActions, "app-topbar-actions", never, {}, {}, never, never, true, never>;
530
- }
531
-
532
- declare class AppClassicLayout extends LayoutShellBase {
533
- readonly isStatic: _angular_core.Signal<boolean>;
534
- protected outsideClickSelectors(): string[];
535
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppClassicLayout, never>;
536
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppClassicLayout, "app-classic-layout", never, {}, {}, never, never, true, never>;
537
- }
538
-
539
- declare class AppSidebar {
540
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppSidebar, never>;
541
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppSidebar, "app-sidebar", never, {}, {}, never, never, true, never>;
542
- }
543
-
544
- declare class AppTopbar {
545
- readonly layoutService: LayoutService;
546
- private readonly navContainer;
547
- private readonly _scrollThumb;
548
- readonly scrollThumb: _angular_core.Signal<{
549
- width: number;
550
- offset: number;
551
- }>;
552
- constructor();
553
- syncScrollThumb(): void;
554
- /**
555
- * Horizontal-nav submenus are `position: fixed`, so scrolling the nav strip leaves
556
- * an open submenu behind — re-anchor it to the item it belongs to.
557
- */
558
- private recalculateHoveredSubmenu;
559
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppTopbar, never>;
560
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppTopbar, "app-topbar", never, {}, {}, never, never, true, never>;
561
- }
562
-
563
- declare class AppModernLayout extends LayoutShellBase {
564
- private readonly content;
565
- protected outsideClickSelectors(): string[];
566
- /**
567
- * The page scrolls inside the content card rather than the window, so the router's
568
- * scroll restoration never reaches it — reset it here instead.
569
- */
570
- protected onNavigated(): void;
571
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppModernLayout, never>;
572
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppModernLayout, "app-modern-layout", never, {}, {}, never, never, true, never>;
573
- }
574
-
575
- declare class AppModernSidebar {
576
- readonly layoutService: LayoutService;
577
- /**
578
- * Only the in-flow column can be collapsed from here. As an overlay or mobile
579
- * drawer the sidebar is opened by the topbar button and dismissed by the mask,
580
- * so a second toggle inside it would be dead weight next to the brand.
581
- */
582
- readonly showMenuButton: _angular_core.Signal<boolean>;
583
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppModernSidebar, never>;
584
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppModernSidebar, "app-modern-sidebar", never, {}, {}, never, never, true, never>;
585
- }
586
-
587
- declare class AppModernTopbar {
588
- private readonly destroyRef;
589
- private readonly router;
590
- readonly layoutService: LayoutService;
591
- private readonly _pageTitle;
592
- readonly pageTitle: _angular_core.Signal<string>;
593
- /** The sidebar is a drawer (not a column) in these modes, so the topbar owns the brand. */
594
- readonly showBrand: _angular_core.Signal<boolean>;
595
- constructor();
596
- private resolvePageTitle;
597
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppModernTopbar, never>;
598
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppModernTopbar, "app-modern-topbar", never, {}, {}, never, never, true, never>;
599
- }
600
-
516
+ export declare class AppTopbarActions {
517
+ private readonly appConfig;
518
+ private readonly document;
519
+ private readonly destroyRef;
520
+ readonly layoutService: LayoutService;
521
+ readonly notificationBellComponent: import("@angular/core").Type<unknown> | null;
522
+ readonly languageSelectorComponent: import("@angular/core").Type<unknown> | null;
523
+ private readonly searchAdapter;
524
+ private readonly configContainer;
525
+ private readonly _configPanelOpen;
526
+ readonly configPanelOpen: import("@angular/core").Signal<boolean>;
527
+ readonly hasSearchAdapter: import("@angular/core").Signal<boolean>;
528
+ readonly enableCompanyFeature: boolean;
529
+ constructor();
530
+ toggleDarkMode(): void;
531
+ toggleConfigPanel(): void;
532
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppTopbarActions, never>;
533
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppTopbarActions, "app-topbar-actions", never, {}, {}, never, never, true, never>;
534
+ }
535
+ export declare class AppClassicLayout extends LayoutShellBase {
536
+ readonly isStatic: import("@angular/core").Signal<boolean>;
537
+ protected outsideClickSelectors(): string[];
538
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppClassicLayout, never>;
539
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppClassicLayout, "app-classic-layout", never, {}, {}, never, never, true, never>;
540
+ }
541
+ export declare class AppSidebar {
542
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppSidebar, never>;
543
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppSidebar, "app-sidebar", never, {}, {}, never, never, true, never>;
544
+ }
545
+ export declare class AppTopbar {
546
+ readonly layoutService: LayoutService;
547
+ private readonly navContainer;
548
+ private readonly _scrollThumb;
549
+ readonly scrollThumb: import("@angular/core").Signal<{
550
+ width: number;
551
+ offset: number;
552
+ }>;
553
+ constructor();
554
+ syncScrollThumb(): void;
555
+ /**
556
+ * Horizontal-nav submenus are `position: fixed`, so scrolling the nav strip leaves
557
+ * an open submenu behind — re-anchor it to the item it belongs to.
558
+ */
559
+ private recalculateHoveredSubmenu;
560
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppTopbar, never>;
561
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppTopbar, "app-topbar", never, {}, {}, never, never, true, never>;
562
+ }
563
+ export declare class AppModernLayout extends LayoutShellBase {
564
+ private readonly content;
565
+ protected outsideClickSelectors(): string[];
566
+ /**
567
+ * The page scrolls inside the content card rather than the window, so the router's
568
+ * scroll restoration never reaches it — reset it here instead.
569
+ */
570
+ protected onNavigated(): void;
571
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppModernLayout, never>;
572
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppModernLayout, "app-modern-layout", never, {}, {}, never, never, true, never>;
573
+ }
574
+ export declare class AppModernSidebar {
575
+ readonly layoutService: LayoutService;
576
+ /**
577
+ * Only the in-flow column can be collapsed from here. As an overlay or mobile
578
+ * drawer the sidebar is opened by the topbar button and dismissed by the mask,
579
+ * so a second toggle inside it would be dead weight next to the brand.
580
+ */
581
+ readonly showMenuButton: import("@angular/core").Signal<boolean>;
582
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppModernSidebar, never>;
583
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppModernSidebar, "app-modern-sidebar", never, {}, {}, never, never, true, never>;
584
+ }
585
+ export declare class AppModernTopbar {
586
+ private readonly destroyRef;
587
+ private readonly router;
588
+ readonly layoutService: LayoutService;
589
+ private readonly _pageTitle;
590
+ readonly pageTitle: import("@angular/core").Signal<string>;
591
+ /** The sidebar is a drawer (not a column) in these modes, so the topbar owns the brand. */
592
+ readonly showBrand: import("@angular/core").Signal<boolean>;
593
+ constructor();
594
+ private resolvePageTitle;
595
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppModernTopbar, never>;
596
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppModernTopbar, "app-modern-topbar", never, {}, {}, never, never, true, never>;
597
+ }
601
598
  /** Filter launcher apps based on user permission codes */
602
- declare function filterAppsByPermissions(apps: ILauncherApp[], permissionCodes: string[]): ILauncherApp[];
603
-
599
+ export declare function filterAppsByPermissions(apps: ILauncherApp[], permissionCodes: string[]): ILauncherApp[];
604
600
  /**
605
601
  * Filter menu items based on permission and role checker
606
602
  *
@@ -617,15 +613,9 @@ declare function filterAppsByPermissions(apps: ILauncherApp[], permissionCodes:
617
613
  * );
618
614
  * ```
619
615
  */
620
- declare function filterMenuByPermissions(items: IMenuItem[], permissionCode: string[]): IMenuItem[];
621
-
622
- declare function buildPreset(presetName: string, primary: string): ApplyThemeOptions;
623
-
624
- declare const NavyBlueTheme: ApplyThemeOptions;
625
-
626
- declare const GreenTheme: ApplyThemeOptions;
627
-
628
- declare const LAYOUT_MESSAGES: Record<string, string>;
629
-
630
- export { AppBrandLogo, AppClassicLayout, AppCompanyBranchSelector, AppConfigurator, AppFloatingConfigurator, AppFooter, AppLauncher, AppLayout, AppMenu, AppMenuitem, AppModernLayout, AppModernSidebar, AppModernTopbar, AppProfile, AppSearchbar, AppSidebar, AppTopbar, AppTopbarActions, 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, LayoutShellBase, NavyBlueTheme, buildPreset, filterAppsByPermissions, filterMenuByPermissions };
631
- export type { CompanyProfile, DocumentWithViewTransition, IBranchInfo, ICompanyInfo, ILauncherApp, ILayoutAuthApi, ILayoutAuthState, IMenuItem, ISearchAdapter, ISearchSuggestion, IUserInfo, LayoutState, MenuChangeEvent, UserProfile, ViewTransition };
616
+ export declare function filterMenuByPermissions(items: IMenuItem[], permissionCode: string[]): IMenuItem[];
617
+ export declare function buildPreset(presetName: string, primary: string): ApplyThemeOptions;
618
+ export declare const NavyBlueTheme: ApplyThemeOptions$1;
619
+ export declare const GreenTheme: ApplyThemeOptions$1;
620
+ export declare const LAYOUT_MESSAGES: Record<string, string>;
621
+ export { type ApplyThemeOptions, applyTheme, buildBootstrapPreset };