@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.
- package/README.md +51 -607
- package/assets/layout/_core.scss +19 -0
- package/assets/layout/_footer.scss +18 -1
- package/assets/layout/_forms.scss +12 -32
- package/assets/layout/_menu.scss +5 -5
- package/assets/layout/_responsive.scss +18 -0
- package/assets/layout/_rtl.scss +482 -0
- package/assets/layout/_topbar.scss +177 -124
- package/assets/layout/_topbar_nav.scss +345 -0
- package/assets/layout/_typography.scss +25 -30
- package/assets/layout/_utils.scss +12 -16
- package/assets/layout/layout.scss +3 -1
- package/assets/layout/variables/_common.scss +17 -17
- package/assets/layout/variables/_dark.scss +3 -3
- package/assets/layout/variables/_light.scss +3 -3
- package/assets/style.scss +3 -3
- package/fesm2022/flusys-ng-layout.mjs +1784 -1344
- package/fesm2022/flusys-ng-layout.mjs.map +1 -1
- package/package.json +10 -11
- package/types/flusys-ng-layout.d.ts +229 -256
|
@@ -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 {
|
|
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
|
-
|
|
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
|
|
12
|
-
|
|
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<
|
|
77
|
+
logOut(): Observable<unknown>;
|
|
59
78
|
navigateLogin(withUrl?: boolean): void;
|
|
60
|
-
switchCompany(companyId: string, branchId: string): Observable<
|
|
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
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
|
114
|
-
private readonly
|
|
115
|
-
private readonly
|
|
116
|
-
readonly
|
|
117
|
-
readonly
|
|
118
|
-
readonly
|
|
119
|
-
readonly
|
|
120
|
-
readonly
|
|
121
|
-
readonly
|
|
122
|
-
readonly
|
|
123
|
-
readonly
|
|
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
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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
|
|
150
|
-
|
|
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
|
-
|
|
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
|
|
230
|
+
private readonly translateAdapter;
|
|
231
|
+
private readonly platformId;
|
|
281
232
|
readonly layoutService: LayoutService;
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
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:
|
|
288
|
-
}[]
|
|
289
|
-
|
|
290
|
-
surfaces: SurfacesType[];
|
|
291
|
-
selectedPrimaryColor: _angular_core.Signal<string | undefined>;
|
|
292
|
-
selectedSurfaceColor: _angular_core.Signal<string | null | undefined>;
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
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
|
-
|
|
354
|
-
|
|
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
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
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
|
-
|
|
441
|
-
private readonly authState;
|
|
332
|
+
readonly layoutService: LayoutService;
|
|
442
333
|
private readonly destroyRef;
|
|
443
|
-
readonly
|
|
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
|
|
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
|
|
472
|
-
readonly
|
|
473
|
-
readonly
|
|
474
|
-
readonly
|
|
475
|
-
readonly
|
|
476
|
-
readonly
|
|
477
|
-
readonly
|
|
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
|
|
494
|
-
readonly isActive: _angular_core.
|
|
429
|
+
private readonly _isActive;
|
|
430
|
+
readonly isActive: _angular_core.Signal<boolean>;
|
|
495
431
|
constructor();
|
|
496
|
-
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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 };
|