@flusys/ng-layout 1.0.0-rc → 1.0.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 +1 -1
- package/fesm2022/flusys-ng-layout.mjs +130 -246
- package/fesm2022/flusys-ng-layout.mjs.map +1 -1
- package/package.json +12 -12
- package/types/flusys-ng-layout.d.ts +47 -84
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import { isPlatformBrowser, NgClass, DOCUMENT as DOCUMENT$1 } from '@angular/common';
|
|
2
1
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { inject, PLATFORM_ID, Injectable, DOCUMENT, signal, computed, effect,
|
|
2
|
+
import { inject, PLATFORM_ID, Injectable, DOCUMENT, signal, computed, effect, ChangeDetectionStrategy, Component, afterNextRender, InjectionToken, DestroyRef, ElementRef, viewChild, input, Renderer2 } from '@angular/core';
|
|
3
|
+
import { isPlatformBrowser, NgClass, DOCUMENT as DOCUMENT$1 } from '@angular/common';
|
|
4
|
+
import { APP_CONFIG, DEFAULT_APP_NAME, DEFAULT_AUTHOR, isCompanyFeatureEnabled } from '@flusys/ng-core';
|
|
5
|
+
import * as i2$2 from '@flusys/ng-shared';
|
|
6
|
+
import { evaluateLogicNode, PermissionValidatorService, AngularModule, IconComponent } from '@flusys/ng-shared';
|
|
7
|
+
import { Subject, fromEvent, filter as filter$1 } from 'rxjs';
|
|
4
8
|
import * as i1 from '@angular/forms';
|
|
5
9
|
import { FormsModule } from '@angular/forms';
|
|
6
10
|
import * as i1$2 from '@angular/router';
|
|
@@ -11,10 +15,6 @@ import Lara from '@primeuix/themes/lara';
|
|
|
11
15
|
import Nora from '@primeuix/themes/nora';
|
|
12
16
|
import * as i2 from 'primeng/selectbutton';
|
|
13
17
|
import { SelectButtonModule } from 'primeng/selectbutton';
|
|
14
|
-
import { APP_CONFIG, DEFAULT_APP_NAME, DEFAULT_AUTHOR, isCompanyFeatureEnabled } from '@flusys/ng-core';
|
|
15
|
-
import * as i2$2 from '@flusys/ng-shared';
|
|
16
|
-
import { evaluateLogicNode, PermissionValidatorService, AngularModule, IconComponent } from '@flusys/ng-shared';
|
|
17
|
-
import { Subject, fromEvent, filter as filter$1 } from 'rxjs';
|
|
18
18
|
import * as i1$1 from 'primeng/button';
|
|
19
19
|
import { ButtonModule } from 'primeng/button';
|
|
20
20
|
import * as i2$1 from 'primeng/styleclass';
|
|
@@ -192,90 +192,61 @@ class LayoutPersistenceService {
|
|
|
192
192
|
const { _version, ...cleanConfig } = config;
|
|
193
193
|
return cleanConfig;
|
|
194
194
|
}
|
|
195
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
196
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.
|
|
195
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: LayoutPersistenceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
196
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: LayoutPersistenceService, providedIn: 'root' });
|
|
197
197
|
}
|
|
198
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
198
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: LayoutPersistenceService, decorators: [{
|
|
199
199
|
type: Injectable,
|
|
200
200
|
args: [{
|
|
201
201
|
providedIn: 'root',
|
|
202
202
|
}]
|
|
203
203
|
}] });
|
|
204
204
|
|
|
205
|
-
/**
|
|
206
|
-
* Service managing layout configuration and state.
|
|
207
|
-
* Provides signals for reactive layout updates.
|
|
208
|
-
*/
|
|
205
|
+
/** Layout configuration and state management service */
|
|
209
206
|
class LayoutService {
|
|
210
207
|
document = inject(DOCUMENT);
|
|
211
208
|
platformId = inject(PLATFORM_ID);
|
|
212
209
|
isBrowser = isPlatformBrowser(this.platformId);
|
|
213
210
|
persistence = inject(LayoutPersistenceService);
|
|
214
211
|
appConfig = inject(APP_CONFIG, { optional: true });
|
|
215
|
-
|
|
212
|
+
DEFAULT_CONFIG = {
|
|
216
213
|
preset: 'Aura',
|
|
217
214
|
primary: 'emerald',
|
|
218
215
|
surface: null,
|
|
219
216
|
darkTheme: false,
|
|
220
217
|
menuMode: 'static',
|
|
221
218
|
};
|
|
222
|
-
|
|
223
|
-
initialConfig = (() => {
|
|
224
|
-
const persisted = this.persistence.load();
|
|
225
|
-
return persisted
|
|
226
|
-
? { ...this.defaultConfig, ...persisted }
|
|
227
|
-
: this.defaultConfig;
|
|
228
|
-
})();
|
|
229
|
-
defaultState = {
|
|
219
|
+
DEFAULT_STATE = {
|
|
230
220
|
staticMenuDesktopInactive: false,
|
|
231
221
|
overlayMenuActive: false,
|
|
232
222
|
configSidebarVisible: false,
|
|
233
223
|
staticMenuMobileActive: false,
|
|
234
224
|
menuHoverActive: false,
|
|
235
225
|
};
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
226
|
+
_layoutConfig = signal({
|
|
227
|
+
...this.DEFAULT_CONFIG,
|
|
228
|
+
...this.persistence.load(),
|
|
229
|
+
}, ...(ngDevMode ? [{ debugName: "_layoutConfig" }] : []));
|
|
230
|
+
_layoutState = signal(this.DEFAULT_STATE, ...(ngDevMode ? [{ debugName: "_layoutState" }] : []));
|
|
239
231
|
_transitionComplete = signal(false, ...(ngDevMode ? [{ debugName: "_transitionComplete" }] : []));
|
|
240
232
|
layoutConfig = this._layoutConfig.asReadonly();
|
|
241
233
|
layoutState = this._layoutState.asReadonly();
|
|
242
234
|
transitionComplete = this._transitionComplete.asReadonly();
|
|
243
|
-
// User Profile Signals (private writable, public readonly)
|
|
244
235
|
_userProfile = signal(null, ...(ngDevMode ? [{ debugName: "_userProfile" }] : []));
|
|
245
236
|
_companyProfile = signal(null, ...(ngDevMode ? [{ debugName: "_companyProfile" }] : []));
|
|
246
|
-
_appName = signal(this.appConfig?.appName ?? DEFAULT_APP_NAME, ...(ngDevMode ? [{ debugName: "_appName" }] : []));
|
|
247
|
-
userProfile = this._userProfile.asReadonly();
|
|
248
|
-
companyProfile = this._companyProfile.asReadonly();
|
|
249
|
-
appName = this._appName.asReadonly();
|
|
250
|
-
// Author/Brand Signals (private writable, public readonly)
|
|
251
|
-
_authorName = signal(this.appConfig?.author?.name ?? DEFAULT_AUTHOR.name, ...(ngDevMode ? [{ debugName: "_authorName" }] : []));
|
|
252
|
-
_authorUrl = signal(this.appConfig?.author?.url ?? DEFAULT_AUTHOR.url, ...(ngDevMode ? [{ debugName: "_authorUrl" }] : []));
|
|
253
|
-
authorName = this._authorName.asReadonly();
|
|
254
|
-
authorUrl = this._authorUrl.asReadonly();
|
|
255
|
-
// App Launcher Signals
|
|
256
|
-
_rawApps = signal([], ...(ngDevMode ? [{ debugName: "_rawApps" }] : []));
|
|
257
|
-
/**
|
|
258
|
-
* Filtered launcher apps based on user permissions.
|
|
259
|
-
* Automatically recomputes when raw apps or permissions change.
|
|
260
|
-
*/
|
|
261
|
-
apps = computed(() => {
|
|
262
|
-
const raw = this._rawApps();
|
|
263
|
-
const permission = this.permissionValidator.permissions();
|
|
264
|
-
return filterAppsByPermissions(raw, permission);
|
|
265
|
-
}, ...(ngDevMode ? [{ debugName: "apps" }] : []));
|
|
266
|
-
// Menu Signals
|
|
267
237
|
_rawMenu = signal([], ...(ngDevMode ? [{ debugName: "_rawMenu" }] : []));
|
|
238
|
+
_rawApps = signal([], ...(ngDevMode ? [{ debugName: "_rawApps" }] : []));
|
|
268
239
|
permissionValidator = inject(PermissionValidatorService);
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
240
|
+
userProfile = this._userProfile.asReadonly();
|
|
241
|
+
companyProfile = this._companyProfile.asReadonly();
|
|
242
|
+
// Static app info from config
|
|
243
|
+
appName = this.appConfig?.appName ?? DEFAULT_APP_NAME;
|
|
244
|
+
authorName = this.appConfig?.author?.name ?? DEFAULT_AUTHOR.name;
|
|
245
|
+
authorUrl = this.appConfig?.author?.url ?? DEFAULT_AUTHOR.url;
|
|
246
|
+
// Permission-filtered menu and apps
|
|
247
|
+
menu = computed(() => filterMenuByPermissions(this._rawMenu(), this.permissionValidator.permissions()), ...(ngDevMode ? [{ debugName: "menu" }] : []));
|
|
248
|
+
apps = computed(() => filterAppsByPermissions(this._rawApps(), this.permissionValidator.permissions()), ...(ngDevMode ? [{ debugName: "apps" }] : []));
|
|
249
|
+
hasApps = computed(() => this.apps().length > 0, ...(ngDevMode ? [{ debugName: "hasApps" }] : []));
|
|
279
250
|
// Computed signals - Layout
|
|
280
251
|
isSidebarActive = computed(() => this._layoutState().overlayMenuActive ||
|
|
281
252
|
this._layoutState().staticMenuMobileActive, ...(ngDevMode ? [{ debugName: "isSidebarActive" }] : []));
|
|
@@ -283,21 +254,17 @@ class LayoutService {
|
|
|
283
254
|
getPrimary = computed(() => this._layoutConfig().primary, ...(ngDevMode ? [{ debugName: "getPrimary" }] : []));
|
|
284
255
|
getSurface = computed(() => this._layoutConfig().surface, ...(ngDevMode ? [{ debugName: "getSurface" }] : []));
|
|
285
256
|
isOverlay = computed(() => this._layoutConfig().menuMode === 'overlay', ...(ngDevMode ? [{ debugName: "isOverlay" }] : []));
|
|
286
|
-
//
|
|
257
|
+
// User profile computed signals
|
|
287
258
|
userName = computed(() => this._userProfile()?.name ?? 'User', ...(ngDevMode ? [{ debugName: "userName" }] : []));
|
|
288
259
|
userEmail = computed(() => this._userProfile()?.email ?? '', ...(ngDevMode ? [{ debugName: "userEmail" }] : []));
|
|
289
260
|
userProfilePictureUrl = computed(() => this._userProfile()?.profilePictureUrl ?? null, ...(ngDevMode ? [{ debugName: "userProfilePictureUrl" }] : []));
|
|
290
|
-
companyName = computed(() => {
|
|
291
|
-
// If company feature is disabled, always show app name
|
|
292
|
-
if (!this.appConfig || !isCompanyFeatureEnabled(this.appConfig)) {
|
|
293
|
-
return this._appName();
|
|
294
|
-
}
|
|
295
|
-
return this._companyProfile()?.name ?? this._appName();
|
|
296
|
-
}, ...(ngDevMode ? [{ debugName: "companyName" }] : []));
|
|
297
261
|
companyLogoUrl = computed(() => this._companyProfile()?.logoUrl ?? null, ...(ngDevMode ? [{ debugName: "companyLogoUrl" }] : []));
|
|
298
262
|
isAuthenticated = computed(() => !!this._userProfile(), ...(ngDevMode ? [{ debugName: "isAuthenticated" }] : []));
|
|
299
|
-
|
|
300
|
-
|
|
263
|
+
companyName = computed(() => {
|
|
264
|
+
if (!this.appConfig || !isCompanyFeatureEnabled(this.appConfig))
|
|
265
|
+
return this.appName;
|
|
266
|
+
return this._companyProfile()?.name ?? this.appName;
|
|
267
|
+
}, ...(ngDevMode ? [{ debugName: "companyName" }] : []));
|
|
301
268
|
// RxJS Subjects for event communication
|
|
302
269
|
configUpdate = new Subject();
|
|
303
270
|
overlayOpen = new Subject();
|
|
@@ -311,80 +278,55 @@ class LayoutService {
|
|
|
311
278
|
constructor() {
|
|
312
279
|
effect(() => {
|
|
313
280
|
const config = this._layoutConfig();
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
});
|
|
318
|
-
effect(() => {
|
|
319
|
-
const config = this._layoutConfig();
|
|
320
|
-
if (!this.initialized || !config) {
|
|
321
|
-
this.initialized = true;
|
|
322
|
-
return;
|
|
323
|
-
}
|
|
324
|
-
this.handleDarkModeTransition(config);
|
|
325
|
-
});
|
|
326
|
-
// Auto-save configuration changes to localStorage
|
|
327
|
-
effect(() => {
|
|
328
|
-
const config = this._layoutConfig();
|
|
329
|
-
if (config && this.initialized) {
|
|
281
|
+
this.configUpdate.next(config);
|
|
282
|
+
if (this.initialized) {
|
|
283
|
+
this.handleDarkModeTransition(config);
|
|
330
284
|
this.persistence.save(config);
|
|
331
285
|
}
|
|
286
|
+
this.initialized = true;
|
|
332
287
|
});
|
|
333
288
|
}
|
|
289
|
+
toggleDarkMode(config) {
|
|
290
|
+
const isDark = (config ?? this._layoutConfig()).darkTheme;
|
|
291
|
+
this.document.documentElement.classList.toggle('app-dark', isDark);
|
|
292
|
+
}
|
|
334
293
|
handleDarkModeTransition(config) {
|
|
335
294
|
const doc = this.document;
|
|
336
|
-
// Check for View Transitions API support (not all browsers support it)
|
|
337
295
|
if ('startViewTransition' in doc && typeof doc.startViewTransition === 'function') {
|
|
338
|
-
|
|
296
|
+
doc
|
|
297
|
+
.startViewTransition(() => this.toggleDarkMode(config))
|
|
298
|
+
.ready.then(() => this.onTransitionEnd())
|
|
299
|
+
.catch(() => { });
|
|
339
300
|
}
|
|
340
301
|
else {
|
|
341
302
|
this.toggleDarkMode(config);
|
|
342
303
|
this.onTransitionEnd();
|
|
343
304
|
}
|
|
344
305
|
}
|
|
345
|
-
startViewTransition(config, doc) {
|
|
346
|
-
const transition = doc.startViewTransition(() => {
|
|
347
|
-
this.toggleDarkMode(config);
|
|
348
|
-
});
|
|
349
|
-
transition.ready.then(() => this.onTransitionEnd()).catch(() => { });
|
|
350
|
-
}
|
|
351
|
-
toggleDarkMode(config) {
|
|
352
|
-
const _config = config || this._layoutConfig();
|
|
353
|
-
if (_config.darkTheme) {
|
|
354
|
-
this.document.documentElement.classList.add('app-dark');
|
|
355
|
-
}
|
|
356
|
-
else {
|
|
357
|
-
this.document.documentElement.classList.remove('app-dark');
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
306
|
onTransitionEnd() {
|
|
361
307
|
this._transitionComplete.set(true);
|
|
362
308
|
setTimeout(() => this._transitionComplete.set(false));
|
|
363
309
|
}
|
|
364
310
|
onMenuToggle() {
|
|
311
|
+
const state = this._layoutState();
|
|
365
312
|
if (this.isOverlay()) {
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
}));
|
|
370
|
-
if (this._layoutState().overlayMenuActive) {
|
|
313
|
+
const newOverlayActive = !state.overlayMenuActive;
|
|
314
|
+
this._layoutState.update((prev) => ({ ...prev, overlayMenuActive: newOverlayActive }));
|
|
315
|
+
if (newOverlayActive)
|
|
371
316
|
this.overlayOpen.next();
|
|
372
|
-
|
|
317
|
+
return;
|
|
373
318
|
}
|
|
374
319
|
if (this.isDesktop()) {
|
|
375
320
|
this._layoutState.update((prev) => ({
|
|
376
321
|
...prev,
|
|
377
|
-
staticMenuDesktopInactive: !
|
|
322
|
+
staticMenuDesktopInactive: !state.staticMenuDesktopInactive,
|
|
378
323
|
}));
|
|
379
324
|
}
|
|
380
325
|
else {
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
}));
|
|
385
|
-
if (this._layoutState().staticMenuMobileActive) {
|
|
326
|
+
const newMobileActive = !state.staticMenuMobileActive;
|
|
327
|
+
this._layoutState.update((prev) => ({ ...prev, staticMenuMobileActive: newMobileActive }));
|
|
328
|
+
if (newMobileActive)
|
|
386
329
|
this.overlayOpen.next();
|
|
387
|
-
}
|
|
388
330
|
}
|
|
389
331
|
}
|
|
390
332
|
isDesktop() {
|
|
@@ -393,94 +335,70 @@ class LayoutService {
|
|
|
393
335
|
isMobile() {
|
|
394
336
|
return !this.isDesktop();
|
|
395
337
|
}
|
|
396
|
-
onConfigUpdate() {
|
|
397
|
-
this.configUpdate.next(this._layoutConfig());
|
|
398
|
-
}
|
|
399
338
|
onMenuStateChange(event) {
|
|
400
339
|
this.menuSource.next(event);
|
|
401
340
|
}
|
|
402
341
|
reset() {
|
|
403
342
|
this.resetSource.next(true);
|
|
404
343
|
}
|
|
405
|
-
//
|
|
406
|
-
// Layout Config Methods
|
|
407
|
-
// ==========================================================================
|
|
408
|
-
/**
|
|
409
|
-
* Update layout configuration.
|
|
410
|
-
* Called by configurator component.
|
|
411
|
-
*/
|
|
344
|
+
// Config & state updates
|
|
412
345
|
updateLayoutConfig(config) {
|
|
413
346
|
this._layoutConfig.update((prev) => ({ ...prev, ...config }));
|
|
414
347
|
}
|
|
415
|
-
/**
|
|
416
|
-
* Update layout state.
|
|
417
|
-
* Called internally and by layout components.
|
|
418
|
-
*/
|
|
419
348
|
updateLayoutState(state) {
|
|
420
349
|
this._layoutState.update((prev) => ({ ...prev, ...state }));
|
|
421
350
|
}
|
|
422
|
-
//
|
|
423
|
-
// User Profile Methods
|
|
424
|
-
// ==========================================================================
|
|
425
|
-
/**
|
|
426
|
-
* Set the current user profile for display in layout.
|
|
427
|
-
* Called by auth integration to sync user data.
|
|
428
|
-
*/
|
|
351
|
+
// Profile setters
|
|
429
352
|
setUserProfile(profile) {
|
|
430
353
|
this._userProfile.set(profile);
|
|
431
354
|
}
|
|
432
|
-
/**
|
|
433
|
-
* Set the current company profile for display in layout.
|
|
434
|
-
* Called by auth integration to sync company data.
|
|
435
|
-
*/
|
|
436
355
|
setCompanyProfile(profile) {
|
|
437
356
|
this._companyProfile.set(profile);
|
|
438
357
|
}
|
|
439
|
-
//
|
|
440
|
-
// Menu Methods
|
|
441
|
-
// ==========================================================================
|
|
442
|
-
/**
|
|
443
|
-
* Set the raw menu items (unfiltered).
|
|
444
|
-
* Menu will be automatically filtered based on permission checker.
|
|
445
|
-
* Called by app initialization to set menu from IAM or other source.
|
|
446
|
-
*/
|
|
358
|
+
// Menu & apps
|
|
447
359
|
setMenu(items) {
|
|
448
360
|
this._rawMenu.set(items);
|
|
449
361
|
}
|
|
450
|
-
/**
|
|
451
|
-
* Clear menu and permission/role checkers.
|
|
452
|
-
* Called on logout.
|
|
453
|
-
*/
|
|
454
362
|
clearMenu() {
|
|
455
363
|
this._rawMenu.set([]);
|
|
456
364
|
}
|
|
457
|
-
// ==========================================================================
|
|
458
|
-
// App Launcher Methods
|
|
459
|
-
// ==========================================================================
|
|
460
|
-
/**
|
|
461
|
-
* Set launcher apps for display in header.
|
|
462
|
-
* Apps will be automatically filtered based on user permissions.
|
|
463
|
-
* If empty after filtering, the app launcher button is hidden.
|
|
464
|
-
*/
|
|
465
365
|
setApps(apps) {
|
|
466
366
|
this._rawApps.set(apps);
|
|
467
367
|
}
|
|
468
|
-
/**
|
|
469
|
-
* Clear launcher apps.
|
|
470
|
-
* Called on logout.
|
|
471
|
-
*/
|
|
472
368
|
clearApps() {
|
|
473
369
|
this._rawApps.set([]);
|
|
474
370
|
}
|
|
475
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
476
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.
|
|
371
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: LayoutService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
372
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: LayoutService, providedIn: 'root' });
|
|
477
373
|
}
|
|
478
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
374
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: LayoutService, decorators: [{
|
|
479
375
|
type: Injectable,
|
|
376
|
+
args: [{ providedIn: 'root' }]
|
|
377
|
+
}], ctorParameters: () => [] });
|
|
378
|
+
|
|
379
|
+
class AppFooter {
|
|
380
|
+
layoutService = inject(LayoutService);
|
|
381
|
+
// Footer shows product branding (appName), not user's company
|
|
382
|
+
appName = this.layoutService.appName;
|
|
383
|
+
authorName = this.layoutService.authorName;
|
|
384
|
+
authorUrl = this.layoutService.authorUrl;
|
|
385
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppFooter, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
386
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.5", type: AppFooter, isStandalone: true, selector: "app-footer", ngImport: i0, template: `<div class="layout-footer">
|
|
387
|
+
{{ appName }} by
|
|
388
|
+
<a [href]="authorUrl" target="_blank" rel="noopener noreferrer" class="text-primary font-bold hover:underline">{{ authorName }}</a>
|
|
389
|
+
</div>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
390
|
+
}
|
|
391
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppFooter, decorators: [{
|
|
392
|
+
type: Component,
|
|
480
393
|
args: [{
|
|
481
|
-
|
|
394
|
+
selector: 'app-footer',
|
|
395
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
396
|
+
template: `<div class="layout-footer">
|
|
397
|
+
{{ appName }} by
|
|
398
|
+
<a [href]="authorUrl" target="_blank" rel="noopener noreferrer" class="text-primary font-bold hover:underline">{{ authorName }}</a>
|
|
399
|
+
</div>`,
|
|
482
400
|
}]
|
|
483
|
-
}]
|
|
401
|
+
}] });
|
|
484
402
|
|
|
485
403
|
const presets = {
|
|
486
404
|
Aura,
|
|
@@ -839,8 +757,8 @@ class AppConfigurator {
|
|
|
839
757
|
onMenuModeChange(event) {
|
|
840
758
|
this.layoutService.updateLayoutConfig({ menuMode: event });
|
|
841
759
|
}
|
|
842
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
843
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.
|
|
760
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppConfigurator, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
761
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: AppConfigurator, isStandalone: true, selector: "app-configurator", host: { styleAttribute: "background-color: var(--surface-overlay)", classAttribute: "hidden absolute top-[3.25rem] right-0 w-[calc(100vw-2rem)] sm:w-72 max-w-72 p-4 border border-surface rounded-border origin-top shadow-[0px_3px_5px_rgba(0,0,0,0.02),0px_0px_2px_rgba(0,0,0,0.05),0px_1px_4px_rgba(0,0,0,0.08)]" }, ngImport: i0, template: `
|
|
844
762
|
<div class="flex flex-col gap-4">
|
|
845
763
|
<div>
|
|
846
764
|
<span class="text-sm text-muted-color font-semibold">Primary</span>
|
|
@@ -909,11 +827,10 @@ class AppConfigurator {
|
|
|
909
827
|
</div>
|
|
910
828
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: SelectButtonModule }, { kind: "component", type: i2.SelectButton, selector: "p-selectButton, p-selectbutton, p-select-button", inputs: ["options", "optionLabel", "optionValue", "optionDisabled", "unselectable", "tabindex", "multiple", "allowEmpty", "styleClass", "ariaLabelledBy", "dataKey", "autofocus", "size", "fluid"], outputs: ["onOptionClick", "onChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
911
829
|
}
|
|
912
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
830
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppConfigurator, decorators: [{
|
|
913
831
|
type: Component,
|
|
914
832
|
args: [{
|
|
915
833
|
selector: 'app-configurator',
|
|
916
|
-
standalone: true,
|
|
917
834
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
918
835
|
imports: [NgClass, FormsModule, SelectButtonModule],
|
|
919
836
|
template: `
|
|
@@ -998,8 +915,8 @@ class AppFloatingConfigurator {
|
|
|
998
915
|
const currentDarkTheme = this.layoutService.layoutConfig().darkTheme;
|
|
999
916
|
this.layoutService.updateLayoutConfig({ darkTheme: !currentDarkTheme });
|
|
1000
917
|
}
|
|
1001
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
1002
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.
|
|
918
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppFloatingConfigurator, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
919
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.5", type: AppFloatingConfigurator, isStandalone: true, selector: "app-floating-configurator", ngImport: i0, template: `
|
|
1003
920
|
<div class="fixed flex flex-col md:flex-row gap-2 md:gap-4 top-4 md:top-8 right-2 md:right-8 z-50">
|
|
1004
921
|
<p-button type="button" (onClick)="toggleDarkMode()" [rounded]="true" [icon]="isDarkTheme() ? 'pi pi-moon' : 'pi pi-sun'" severity="secondary" />
|
|
1005
922
|
<div class="relative">
|
|
@@ -1009,11 +926,10 @@ class AppFloatingConfigurator {
|
|
|
1009
926
|
</div>
|
|
1010
927
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: StyleClassModule }, { kind: "directive", type: i2$1.StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterFromClass", "enterActiveClass", "enterToClass", "leaveFromClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape", "hideOnResize", "resizeSelector"] }, { kind: "component", type: AppConfigurator, selector: "app-configurator" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1011
928
|
}
|
|
1012
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
929
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppFloatingConfigurator, decorators: [{
|
|
1013
930
|
type: Component,
|
|
1014
931
|
args: [{
|
|
1015
932
|
selector: 'app-floating-configurator',
|
|
1016
|
-
standalone: true,
|
|
1017
933
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1018
934
|
imports: [ButtonModule, StyleClassModule, AppConfigurator],
|
|
1019
935
|
template: `
|
|
@@ -1028,31 +944,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
|
|
|
1028
944
|
}]
|
|
1029
945
|
}] });
|
|
1030
946
|
|
|
1031
|
-
class AppFooter {
|
|
1032
|
-
layoutService = inject(LayoutService);
|
|
1033
|
-
// Footer shows product branding (appName), not user's company
|
|
1034
|
-
appName = this.layoutService.appName;
|
|
1035
|
-
authorName = this.layoutService.authorName;
|
|
1036
|
-
authorUrl = this.layoutService.authorUrl;
|
|
1037
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AppFooter, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1038
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: AppFooter, isStandalone: true, selector: "app-footer", ngImport: i0, template: `<div class="layout-footer">
|
|
1039
|
-
{{ appName() }} by
|
|
1040
|
-
<a [href]="authorUrl()" target="_blank" rel="noopener noreferrer" class="text-primary font-bold hover:underline">{{ authorName() }}</a>
|
|
1041
|
-
</div>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1042
|
-
}
|
|
1043
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AppFooter, decorators: [{
|
|
1044
|
-
type: Component,
|
|
1045
|
-
args: [{
|
|
1046
|
-
standalone: true,
|
|
1047
|
-
selector: 'app-footer',
|
|
1048
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1049
|
-
template: `<div class="layout-footer">
|
|
1050
|
-
{{ appName() }} by
|
|
1051
|
-
<a [href]="authorUrl()" target="_blank" rel="noopener noreferrer" class="text-primary font-bold hover:underline">{{ authorName() }}</a>
|
|
1052
|
-
</div>`,
|
|
1053
|
-
}]
|
|
1054
|
-
}] });
|
|
1055
|
-
|
|
1056
947
|
const LAYOUT_AUTH_STATE = new InjectionToken('LAYOUT_AUTH_STATE');
|
|
1057
948
|
const LAYOUT_AUTH_API = new InjectionToken('LAYOUT_AUTH_API');
|
|
1058
949
|
|
|
@@ -1190,8 +1081,8 @@ class AppCompanyBranchSelector {
|
|
|
1190
1081
|
},
|
|
1191
1082
|
});
|
|
1192
1083
|
}
|
|
1193
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
1194
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.
|
|
1084
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppCompanyBranchSelector, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1085
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: AppCompanyBranchSelector, isStandalone: true, selector: "app-company-branch-selector", host: { classAttribute: "relative" }, ngImport: i0, template: `
|
|
1195
1086
|
<button
|
|
1196
1087
|
type="button"
|
|
1197
1088
|
class="layout-topbar-action"
|
|
@@ -1266,11 +1157,10 @@ class AppCompanyBranchSelector {
|
|
|
1266
1157
|
</div>
|
|
1267
1158
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: StyleClassModule }, { kind: "directive", type: i2$1.StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterFromClass", "enterActiveClass", "enterToClass", "leaveFromClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape", "hideOnResize", "resizeSelector"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i4.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo", "motionOptions"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1268
1159
|
}
|
|
1269
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
1160
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppCompanyBranchSelector, decorators: [{
|
|
1270
1161
|
type: Component,
|
|
1271
1162
|
args: [{
|
|
1272
1163
|
selector: 'app-company-branch-selector',
|
|
1273
|
-
standalone: true,
|
|
1274
1164
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1275
1165
|
imports: [AngularModule, StyleClassModule, ButtonModule, SelectModule],
|
|
1276
1166
|
host: { class: 'relative' },
|
|
@@ -1371,8 +1261,8 @@ class AppLauncher {
|
|
|
1371
1261
|
togglePanel() {
|
|
1372
1262
|
this._isActive.update((v) => !v);
|
|
1373
1263
|
}
|
|
1374
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
1375
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.
|
|
1264
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppLauncher, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1265
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: AppLauncher, isStandalone: true, selector: "app-launcher", host: { classAttribute: "relative" }, ngImport: i0, template: `
|
|
1376
1266
|
<button
|
|
1377
1267
|
type="button"
|
|
1378
1268
|
class="layout-topbar-action"
|
|
@@ -1422,11 +1312,10 @@ class AppLauncher {
|
|
|
1422
1312
|
</div>
|
|
1423
1313
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: StyleClassModule }, { kind: "directive", type: i2$1.StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterFromClass", "enterActiveClass", "enterToClass", "leaveFromClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape", "hideOnResize", "resizeSelector"] }, { kind: "component", type: IconComponent, selector: "lib-icon", inputs: ["icon", "iconType"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1424
1314
|
}
|
|
1425
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
1315
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppLauncher, decorators: [{
|
|
1426
1316
|
type: Component,
|
|
1427
1317
|
args: [{
|
|
1428
1318
|
selector: 'app-launcher',
|
|
1429
|
-
standalone: true,
|
|
1430
1319
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1431
1320
|
imports: [StyleClassModule, IconComponent],
|
|
1432
1321
|
host: { class: 'relative' },
|
|
@@ -1548,8 +1437,8 @@ class AppProfile {
|
|
|
1548
1437
|
});
|
|
1549
1438
|
});
|
|
1550
1439
|
}
|
|
1551
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
1552
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.
|
|
1440
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppProfile, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1441
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: AppProfile, isStandalone: true, selector: "app-profile", host: { classAttribute: "relative" }, ngImport: i0, template: `
|
|
1553
1442
|
<button
|
|
1554
1443
|
type="button"
|
|
1555
1444
|
class="layout-topbar-action"
|
|
@@ -1618,11 +1507,10 @@ class AppProfile {
|
|
|
1618
1507
|
</div>
|
|
1619
1508
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i1$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2$2.IsEmptyImageDirective, selector: "img", inputs: ["src"] }, { kind: "ngmodule", type: StyleClassModule }, { kind: "directive", type: i2$1.StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterFromClass", "enterActiveClass", "enterToClass", "leaveFromClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape", "hideOnResize", "resizeSelector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1620
1509
|
}
|
|
1621
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
1510
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppProfile, decorators: [{
|
|
1622
1511
|
type: Component,
|
|
1623
1512
|
args: [{
|
|
1624
1513
|
selector: 'app-profile',
|
|
1625
|
-
standalone: true,
|
|
1626
1514
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1627
1515
|
imports: [AngularModule, StyleClassModule],
|
|
1628
1516
|
host: { class: 'relative' },
|
|
@@ -1729,8 +1617,8 @@ class AppTopbar {
|
|
|
1729
1617
|
this.activePanel.set(null);
|
|
1730
1618
|
}
|
|
1731
1619
|
}
|
|
1732
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
1733
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.
|
|
1620
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppTopbar, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1621
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: AppTopbar, isStandalone: true, selector: "app-topbar", viewQueries: [{ propertyName: "configContainer", first: true, predicate: ["configContainer"], descendants: true, isSignal: true }], ngImport: i0, template: ` <div class="layout-topbar">
|
|
1734
1622
|
<div class="layout-topbar-logo-container">
|
|
1735
1623
|
<button
|
|
1736
1624
|
class="layout-menu-button layout-topbar-action"
|
|
@@ -1800,11 +1688,10 @@ class AppTopbar {
|
|
|
1800
1688
|
</div>
|
|
1801
1689
|
</div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: StyleClassModule }, { kind: "directive", type: i2$1.StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterFromClass", "enterActiveClass", "enterToClass", "leaveFromClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape", "hideOnResize", "resizeSelector"] }, { kind: "component", type: AppConfigurator, selector: "app-configurator" }, { kind: "component", type: AppProfile, selector: "app-profile" }, { kind: "component", type: AppCompanyBranchSelector, selector: "app-company-branch-selector" }, { kind: "component", type: AppLauncher, selector: "app-launcher" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1802
1690
|
}
|
|
1803
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
1691
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppTopbar, decorators: [{
|
|
1804
1692
|
type: Component,
|
|
1805
1693
|
args: [{
|
|
1806
1694
|
selector: 'app-topbar',
|
|
1807
|
-
standalone: true,
|
|
1808
1695
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1809
1696
|
imports: [
|
|
1810
1697
|
RouterModule,
|
|
@@ -1981,8 +1868,8 @@ class AppMenuitem {
|
|
|
1981
1868
|
}
|
|
1982
1869
|
this.layoutService.onMenuStateChange({ key: this.key() });
|
|
1983
1870
|
}
|
|
1984
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
1985
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.
|
|
1871
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppMenuitem, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1872
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: AppMenuitem, isStandalone: true, selector: "[app-menuitem]", inputs: { item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null }, index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: true, transformFunction: null }, parentKey: { classPropertyName: "parentKey", publicName: "parentKey", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.active-menuitem": "active()" } }, ngImport: i0, template: `
|
|
1986
1873
|
<ng-container>
|
|
1987
1874
|
@if (item().children?.length) {
|
|
1988
1875
|
<a (click)="itemClick()" tabindex="0" pRipple>
|
|
@@ -2040,9 +1927,9 @@ class AppMenuitem {
|
|
|
2040
1927
|
</ng-container>
|
|
2041
1928
|
`, isInline: true, styles: [":host ul{overflow:hidden;transition:max-height .4s cubic-bezier(.86,0,.07,1)}:host ul.submenu-collapsed{max-height:0}:host ul.submenu-expanded{max-height:1000px}\n"], dependencies: [{ kind: "component", type: AppMenuitem, selector: "[app-menuitem]", inputs: ["item", "index", "parentKey"] }, { kind: "component", type: IconComponent, selector: "lib-icon", inputs: ["icon", "iconType"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i2$3.Ripple, selector: "[pRipple]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2042
1929
|
}
|
|
2043
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
1930
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppMenuitem, decorators: [{
|
|
2044
1931
|
type: Component,
|
|
2045
|
-
args: [{ selector: '[app-menuitem]',
|
|
1932
|
+
args: [{ selector: '[app-menuitem]', changeDetection: ChangeDetectionStrategy.OnPush, imports: [IconComponent, RouterModule, RippleModule], template: `
|
|
2046
1933
|
<ng-container>
|
|
2047
1934
|
@if (item().children?.length) {
|
|
2048
1935
|
<a (click)="itemClick()" tabindex="0" pRipple>
|
|
@@ -2117,8 +2004,8 @@ class AppMenu {
|
|
|
2117
2004
|
* - Permission state changes (user permissions updated)
|
|
2118
2005
|
*/
|
|
2119
2006
|
menuItems = this.layoutService.menu;
|
|
2120
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
2121
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.
|
|
2007
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppMenu, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2008
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: AppMenu, isStandalone: true, selector: "app-menu", ngImport: i0, template: `<div class="layout-menu">
|
|
2122
2009
|
<ul>
|
|
2123
2010
|
@for (
|
|
2124
2011
|
item of menuItems();
|
|
@@ -2130,11 +2017,10 @@ class AppMenu {
|
|
|
2130
2017
|
</ul>
|
|
2131
2018
|
</div>`, isInline: true, dependencies: [{ kind: "component", type: AppMenuitem, selector: "[app-menuitem]", inputs: ["item", "index", "parentKey"] }, { kind: "ngmodule", type: RouterModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2132
2019
|
}
|
|
2133
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
2020
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppMenu, decorators: [{
|
|
2134
2021
|
type: Component,
|
|
2135
2022
|
args: [{
|
|
2136
2023
|
selector: 'app-menu',
|
|
2137
|
-
standalone: true,
|
|
2138
2024
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
2139
2025
|
imports: [AppMenuitem, RouterModule],
|
|
2140
2026
|
template: `<div class="layout-menu">
|
|
@@ -2152,18 +2038,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
|
|
|
2152
2038
|
}] });
|
|
2153
2039
|
|
|
2154
2040
|
class AppSidebar {
|
|
2155
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
2156
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.
|
|
2041
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppSidebar, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2042
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.5", type: AppSidebar, isStandalone: true, selector: "app-sidebar", ngImport: i0, template: `
|
|
2157
2043
|
<div class="layout-sidebar">
|
|
2158
2044
|
<app-menu />
|
|
2159
2045
|
</div>
|
|
2160
2046
|
`, isInline: true, dependencies: [{ kind: "component", type: AppMenu, selector: "app-menu" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2161
2047
|
}
|
|
2162
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
2048
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppSidebar, decorators: [{
|
|
2163
2049
|
type: Component,
|
|
2164
2050
|
args: [{
|
|
2165
2051
|
selector: 'app-sidebar',
|
|
2166
|
-
standalone: true,
|
|
2167
2052
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
2168
2053
|
imports: [AppMenu],
|
|
2169
2054
|
template: `
|
|
@@ -2238,8 +2123,8 @@ class AppLayout {
|
|
|
2238
2123
|
'layout-mobile-active': state.staticMenuMobileActive,
|
|
2239
2124
|
};
|
|
2240
2125
|
}, ...(ngDevMode ? [{ debugName: "containerClass" }] : []));
|
|
2241
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
2242
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.
|
|
2126
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppLayout, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2127
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.5", type: AppLayout, isStandalone: true, selector: "app-layout", ngImport: i0, template: `
|
|
2243
2128
|
<div class="layout-wrapper" [ngClass]="containerClass()">
|
|
2244
2129
|
<app-topbar></app-topbar>
|
|
2245
2130
|
<app-sidebar></app-sidebar>
|
|
@@ -2253,11 +2138,10 @@ class AppLayout {
|
|
|
2253
2138
|
</div>
|
|
2254
2139
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppTopbar, selector: "app-topbar" }, { kind: "component", type: AppSidebar, selector: "app-sidebar" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$2.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: AppFooter, selector: "app-footer" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2255
2140
|
}
|
|
2256
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
2141
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AppLayout, decorators: [{
|
|
2257
2142
|
type: Component,
|
|
2258
2143
|
args: [{
|
|
2259
2144
|
selector: 'app-layout',
|
|
2260
|
-
standalone: true,
|
|
2261
2145
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
2262
2146
|
imports: [NgClass, AppTopbar, AppSidebar, RouterModule, AppFooter],
|
|
2263
2147
|
template: `
|
|
@@ -2276,42 +2160,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
|
|
|
2276
2160
|
}]
|
|
2277
2161
|
}], ctorParameters: () => [] });
|
|
2278
2162
|
|
|
2279
|
-
const
|
|
2163
|
+
const NavyBlueTheme = definePreset(Material, {
|
|
2280
2164
|
semantic: {
|
|
2281
2165
|
colorScheme: {
|
|
2282
2166
|
light: {
|
|
2283
2167
|
primary: {
|
|
2284
|
-
color: '#
|
|
2285
|
-
inverseColor: '#
|
|
2286
|
-
hoverColor: '#
|
|
2287
|
-
activeColor: '#
|
|
2168
|
+
color: '#3535cd',
|
|
2169
|
+
inverseColor: '#0707a9',
|
|
2170
|
+
hoverColor: '#0707a9',
|
|
2171
|
+
activeColor: '#0707a9',
|
|
2288
2172
|
},
|
|
2289
2173
|
highlight: {
|
|
2290
2174
|
background: '#e2e8f0',
|
|
2291
2175
|
focusBackground: '#e2e8f0',
|
|
2292
|
-
color: '#
|
|
2293
|
-
focusColor: '#
|
|
2176
|
+
color: '#3535cd',
|
|
2177
|
+
focusColor: '#3535cd',
|
|
2294
2178
|
},
|
|
2295
2179
|
},
|
|
2296
2180
|
},
|
|
2297
2181
|
},
|
|
2298
2182
|
});
|
|
2299
2183
|
|
|
2300
|
-
const
|
|
2184
|
+
const GreenTheme = definePreset(Material, {
|
|
2301
2185
|
semantic: {
|
|
2302
2186
|
colorScheme: {
|
|
2303
2187
|
light: {
|
|
2304
2188
|
primary: {
|
|
2305
|
-
color: '#
|
|
2306
|
-
inverseColor: '#
|
|
2307
|
-
hoverColor: '#
|
|
2308
|
-
activeColor: '#
|
|
2189
|
+
color: '#01712c',
|
|
2190
|
+
inverseColor: '#119744',
|
|
2191
|
+
hoverColor: '#119744',
|
|
2192
|
+
activeColor: '#119744',
|
|
2309
2193
|
},
|
|
2310
2194
|
highlight: {
|
|
2311
2195
|
background: '#e2e8f0',
|
|
2312
2196
|
focusBackground: '#e2e8f0',
|
|
2313
|
-
color: '#
|
|
2314
|
-
focusColor: '#
|
|
2197
|
+
color: '#01712c',
|
|
2198
|
+
focusColor: '#01712c',
|
|
2315
2199
|
},
|
|
2316
2200
|
},
|
|
2317
2201
|
},
|