@flusys/ng-layout 5.5.0 → 6.0.0-beta.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/assets/layout/_core.scss +19 -0
- package/assets/layout/_forms.scss +12 -32
- package/assets/layout/_menu.scss +5 -5
- package/assets/layout/_topbar_nav.scss +6 -6
- package/assets/layout/_typography.scss +0 -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 +338 -619
- package/fesm2022/flusys-ng-layout.mjs.map +1 -1
- package/package.json +4 -7
- package/types/flusys-ng-layout.d.ts +24 -98
|
@@ -1,35 +1,19 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, PLATFORM_ID, Injectable, DOCUMENT, signal, computed, effect, Component, InjectionToken, input,
|
|
3
|
-
import * as
|
|
4
|
-
import { evaluateLogicNode, PermissionValidatorService, InlineSvgComponent, TranslatePipe, TranslateService, IconComponent, AngularModule
|
|
5
|
-
import { isPlatformBrowser, NgComponentOutlet, DOCUMENT as DOCUMENT$1
|
|
2
|
+
import { inject, PLATFORM_ID, Injectable, DOCUMENT, signal, DestroyRef, computed, effect, Component, InjectionToken, input, viewChild, ElementRef, Renderer2 } from '@angular/core';
|
|
3
|
+
import * as i3 from '@flusys/ng-shared';
|
|
4
|
+
import { evaluateLogicNode, PermissionValidatorService, InlineSvgComponent, TranslatePipe, TranslateService, IconComponent, AngularModule } from '@flusys/ng-shared';
|
|
5
|
+
import { isPlatformBrowser, NgComponentOutlet, DOCUMENT as DOCUMENT$1 } from '@angular/common';
|
|
6
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
6
7
|
import { APP_CONFIG, DEFAULT_APP_NAME, DEFAULT_AUTHOR, isCompanyFeatureEnabled, isSignUpEnabled } from '@flusys/ng-core';
|
|
7
8
|
import { Subject, fromEvent, filter as filter$1 } from 'rxjs';
|
|
8
|
-
import * as
|
|
9
|
+
import * as i2 from '@angular/forms';
|
|
9
10
|
import { FormsModule } from '@angular/forms';
|
|
10
|
-
import * as
|
|
11
|
+
import * as i2$1 from '@angular/router';
|
|
11
12
|
import { Router, NavigationEnd, isActive, RouterModule } from '@angular/router';
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
|
|
15
|
-
import Nora from '@primeuix/themes/nora';
|
|
16
|
-
import * as i2 from 'primeng/selectbutton';
|
|
17
|
-
import { SelectButtonModule } from 'primeng/selectbutton';
|
|
18
|
-
import * as i3 from 'primeng/button';
|
|
19
|
-
import { ButtonModule } from 'primeng/button';
|
|
20
|
-
import * as i2$1 from 'primeng/styleclass';
|
|
21
|
-
import { StyleClassModule } from 'primeng/styleclass';
|
|
22
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
13
|
+
import * as i1 from '@flusys/ng-ui';
|
|
14
|
+
import { PRESET_NAMES, applyTheme, SURFACE_PALETTES, PRIMARY_PALETTES, applyPrimaryPalette, applySurfacePalette, UiModule, MessageService } from '@flusys/ng-ui';
|
|
15
|
+
export { applyTheme, buildBootstrapPreset } from '@flusys/ng-ui';
|
|
23
16
|
import { filter } from 'rxjs/operators';
|
|
24
|
-
import * as i2$2 from 'primeng/ripple';
|
|
25
|
-
import { RippleModule } from 'primeng/ripple';
|
|
26
|
-
import { MessageService } from 'primeng/api';
|
|
27
|
-
import * as i4 from 'primeng/select';
|
|
28
|
-
import { SelectModule } from 'primeng/select';
|
|
29
|
-
import * as i3$1 from 'primeng/iconfield';
|
|
30
|
-
import * as i4$1 from 'primeng/inputicon';
|
|
31
|
-
import * as i5 from 'primeng/inputtext';
|
|
32
|
-
import Material from '@primeuix/themes/material';
|
|
33
17
|
|
|
34
18
|
/** Filter launcher apps based on user permission codes */
|
|
35
19
|
function filterAppsByPermissions(apps, permissionCodes) {
|
|
@@ -148,14 +132,15 @@ class LayoutPersistenceService {
|
|
|
148
132
|
const { _version, ...cleanConfig } = config;
|
|
149
133
|
return cleanConfig;
|
|
150
134
|
}
|
|
151
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
152
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.
|
|
135
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: LayoutPersistenceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
136
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: LayoutPersistenceService, providedIn: 'root' });
|
|
153
137
|
}
|
|
154
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
138
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: LayoutPersistenceService, decorators: [{
|
|
155
139
|
type: Injectable,
|
|
156
140
|
args: [{ providedIn: 'root' }]
|
|
157
141
|
}] });
|
|
158
142
|
|
|
143
|
+
const DESKTOP_BREAKPOINT = 991;
|
|
159
144
|
class LayoutService {
|
|
160
145
|
document = inject(DOCUMENT);
|
|
161
146
|
platformId = inject(PLATFORM_ID);
|
|
@@ -199,6 +184,9 @@ class LayoutService {
|
|
|
199
184
|
_rawApps = signal([], /* @ts-ignore */
|
|
200
185
|
...(ngDevMode ? [{ debugName: "_rawApps" }] : /* istanbul ignore next */ []));
|
|
201
186
|
permissionValidator = inject(PermissionValidatorService);
|
|
187
|
+
destroyRef = inject(DestroyRef);
|
|
188
|
+
_windowWidth = signal(this.isBrowser ? window.innerWidth : DESKTOP_BREAKPOINT + 1, /* @ts-ignore */
|
|
189
|
+
...(ngDevMode ? [{ debugName: "_windowWidth" }] : /* istanbul ignore next */ []));
|
|
202
190
|
userProfile = this._userProfile.asReadonly();
|
|
203
191
|
companyProfile = this._companyProfile.asReadonly();
|
|
204
192
|
appName = this.appConfig?.appName ?? DEFAULT_APP_NAME;
|
|
@@ -215,6 +203,10 @@ class LayoutService {
|
|
|
215
203
|
isSidebarActive = computed(() => this._layoutState().overlayMenuActive ||
|
|
216
204
|
this._layoutState().staticMenuMobileActive, /* @ts-ignore */
|
|
217
205
|
...(ngDevMode ? [{ debugName: "isSidebarActive" }] : /* istanbul ignore next */ []));
|
|
206
|
+
isDesktop = computed(() => this._windowWidth() > DESKTOP_BREAKPOINT, /* @ts-ignore */
|
|
207
|
+
...(ngDevMode ? [{ debugName: "isDesktop" }] : /* istanbul ignore next */ []));
|
|
208
|
+
isMobile = computed(() => !this.isDesktop(), /* @ts-ignore */
|
|
209
|
+
...(ngDevMode ? [{ debugName: "isMobile" }] : /* istanbul ignore next */ []));
|
|
218
210
|
isDarkTheme = computed(() => this._layoutConfig().darkTheme, /* @ts-ignore */
|
|
219
211
|
...(ngDevMode ? [{ debugName: "isDarkTheme" }] : /* istanbul ignore next */ []));
|
|
220
212
|
isOverlay = computed(() => this._layoutConfig().menuMode === 'overlay', /* @ts-ignore */
|
|
@@ -249,6 +241,14 @@ class LayoutService {
|
|
|
249
241
|
overlayOpen$ = this.overlayOpen.asObservable();
|
|
250
242
|
initialized = false;
|
|
251
243
|
constructor() {
|
|
244
|
+
if (this.isBrowser) {
|
|
245
|
+
this.toggleDarkMode();
|
|
246
|
+
fromEvent(window, 'resize')
|
|
247
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
248
|
+
.subscribe(() => {
|
|
249
|
+
this._windowWidth.set(window.innerWidth);
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
252
|
effect(() => {
|
|
253
253
|
const config = this._layoutConfig();
|
|
254
254
|
if (this.initialized) {
|
|
@@ -319,12 +319,6 @@ class LayoutService {
|
|
|
319
319
|
}));
|
|
320
320
|
}
|
|
321
321
|
}
|
|
322
|
-
isDesktop() {
|
|
323
|
-
return this.isBrowser ? window.innerWidth > 991 : true;
|
|
324
|
-
}
|
|
325
|
-
isMobile() {
|
|
326
|
-
return !this.isDesktop();
|
|
327
|
-
}
|
|
328
322
|
onMenuStateChange(event) {
|
|
329
323
|
this.menuSource.next(event);
|
|
330
324
|
}
|
|
@@ -355,10 +349,10 @@ class LayoutService {
|
|
|
355
349
|
clearApps() {
|
|
356
350
|
this._rawApps.set([]);
|
|
357
351
|
}
|
|
358
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
359
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.
|
|
352
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: LayoutService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
353
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: LayoutService, providedIn: 'root' });
|
|
360
354
|
}
|
|
361
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
355
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: LayoutService, decorators: [{
|
|
362
356
|
type: Injectable,
|
|
363
357
|
args: [{ providedIn: 'root' }]
|
|
364
358
|
}], ctorParameters: () => [] });
|
|
@@ -370,8 +364,8 @@ class AppFooter {
|
|
|
370
364
|
isLogoSvg = this.layoutService.isAppLogoSvg;
|
|
371
365
|
authorName = this.layoutService.authorName;
|
|
372
366
|
authorUrl = this.layoutService.authorUrl;
|
|
373
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
374
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
367
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppFooter, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
368
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: AppFooter, isStandalone: true, selector: "app-footer", ngImport: i0, template: `<div class="layout-footer">
|
|
375
369
|
@if (displayLogo) {
|
|
376
370
|
@if (isLogoSvg) {
|
|
377
371
|
<inline-svg [src]="displayLogo" class="logo-image" />
|
|
@@ -391,7 +385,7 @@ class AppFooter {
|
|
|
391
385
|
</span>
|
|
392
386
|
</div>`, isInline: true, dependencies: [{ kind: "component", type: InlineSvgComponent, selector: "inline-svg", inputs: ["src"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
393
387
|
}
|
|
394
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
388
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppFooter, decorators: [{
|
|
395
389
|
type: Component,
|
|
396
390
|
args: [{
|
|
397
391
|
selector: 'app-footer',
|
|
@@ -418,313 +412,65 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
418
412
|
}]
|
|
419
413
|
}] });
|
|
420
414
|
|
|
421
|
-
const _presets = { Aura, Lara, Nora };
|
|
422
|
-
const _noirPrimary = {
|
|
423
|
-
50: '{surface.50}', 100: '{surface.100}', 200: '{surface.200}',
|
|
424
|
-
300: '{surface.300}', 400: '{surface.400}', 500: '{surface.500}',
|
|
425
|
-
600: '{surface.600}', 700: '{surface.700}', 800: '{surface.800}',
|
|
426
|
-
900: '{surface.900}', 950: '{surface.950}',
|
|
427
|
-
};
|
|
428
|
-
const _noraScheme = {
|
|
429
|
-
light: {
|
|
430
|
-
primary: { color: '{primary.600}', contrastColor: '#ffffff', hoverColor: '{primary.700}', activeColor: '{primary.800}' },
|
|
431
|
-
highlight: { background: '{primary.600}', focusBackground: '{primary.700}', color: '#ffffff', focusColor: '#ffffff' },
|
|
432
|
-
},
|
|
433
|
-
dark: {
|
|
434
|
-
primary: { color: '{primary.500}', contrastColor: '{surface.900}', hoverColor: '{primary.400}', activeColor: '{primary.300}' },
|
|
435
|
-
highlight: { background: '{primary.500}', focusBackground: '{primary.400}', color: '{surface.900}', focusColor: '{surface.900}' },
|
|
436
|
-
},
|
|
437
|
-
};
|
|
438
|
-
const _defaultScheme = {
|
|
439
|
-
light: {
|
|
440
|
-
primary: { color: '{primary.500}', contrastColor: '#ffffff', hoverColor: '{primary.600}', activeColor: '{primary.700}' },
|
|
441
|
-
highlight: { background: '{primary.50}', focusBackground: '{primary.100}', color: '{primary.700}', focusColor: '{primary.800}' },
|
|
442
|
-
},
|
|
443
|
-
dark: {
|
|
444
|
-
primary: { color: '{primary.400}', contrastColor: '{surface.900}', hoverColor: '{primary.300}', activeColor: '{primary.200}' },
|
|
445
|
-
highlight: {
|
|
446
|
-
background: 'color-mix(in srgb, {primary.400}, transparent 84%)',
|
|
447
|
-
focusBackground: 'color-mix(in srgb, {primary.400}, transparent 76%)',
|
|
448
|
-
color: 'rgba(255,255,255,.87)',
|
|
449
|
-
focusColor: 'rgba(255,255,255,.87)',
|
|
450
|
-
},
|
|
451
|
-
},
|
|
452
|
-
};
|
|
453
|
-
function buildSemanticExt(palette, presetName) {
|
|
454
|
-
if (palette === null) {
|
|
455
|
-
return {
|
|
456
|
-
semantic: {
|
|
457
|
-
primary: _noirPrimary,
|
|
458
|
-
colorScheme: {
|
|
459
|
-
light: {
|
|
460
|
-
primary: { color: '{primary.950}', contrastColor: '#ffffff', hoverColor: '{primary.800}', activeColor: '{primary.700}' },
|
|
461
|
-
highlight: { background: '{primary.950}', focusBackground: '{primary.700}', color: '#ffffff', focusColor: '#ffffff' },
|
|
462
|
-
},
|
|
463
|
-
dark: {
|
|
464
|
-
primary: { color: '{primary.50}', contrastColor: '{primary.950}', hoverColor: '{primary.200}', activeColor: '{primary.300}' },
|
|
465
|
-
highlight: { background: '{primary.50}', focusBackground: '{primary.300}', color: '{primary.950}', focusColor: '{primary.950}' },
|
|
466
|
-
},
|
|
467
|
-
},
|
|
468
|
-
},
|
|
469
|
-
};
|
|
470
|
-
}
|
|
471
|
-
return { semantic: { primary: palette, colorScheme: presetName === 'Nora' ? _noraScheme : _defaultScheme } };
|
|
472
|
-
}
|
|
473
|
-
function buildPreset(presetName, primary) {
|
|
474
|
-
const base = _presets[presetName in _presets ? presetName : 'Aura'];
|
|
475
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
476
|
-
const palette = primary === 'noir' ? null : base.primitive?.[primary];
|
|
477
|
-
if (primary !== 'noir' && !palette)
|
|
478
|
-
return base;
|
|
479
|
-
return definePreset(base, buildSemanticExt(palette, presetName));
|
|
480
|
-
}
|
|
481
|
-
function buildBootstrapPreset(envConfig) {
|
|
482
|
-
const preset = envConfig?.preset ?? 'Aura';
|
|
483
|
-
const primary = envConfig?.primary ?? 'violet';
|
|
484
|
-
if (envConfig?.isMemorable !== false) {
|
|
485
|
-
try {
|
|
486
|
-
const stored = localStorage.getItem('flusys.layout.config');
|
|
487
|
-
if (stored) {
|
|
488
|
-
const parsed = JSON.parse(stored);
|
|
489
|
-
return buildPreset(parsed.preset ?? preset, parsed.primary ?? primary);
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
catch { /* SSR or storage disabled */ }
|
|
493
|
-
}
|
|
494
|
-
return buildPreset(preset, primary);
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
const presets = {
|
|
498
|
-
Aura,
|
|
499
|
-
Lara,
|
|
500
|
-
Nora,
|
|
501
|
-
};
|
|
502
415
|
class AppConfigurator {
|
|
503
416
|
router = inject(Router);
|
|
504
417
|
translateAdapter = inject(TranslateService, { optional: true });
|
|
505
418
|
platformId = inject(PLATFORM_ID);
|
|
506
419
|
layoutService = inject(LayoutService);
|
|
507
|
-
presets =
|
|
420
|
+
presets = PRESET_NAMES;
|
|
508
421
|
showMenuModeButton = signal(!this.router.url.includes('auth'), /* @ts-ignore */
|
|
509
422
|
...(ngDevMode ? [{ debugName: "showMenuModeButton" }] : /* istanbul ignore next */ []));
|
|
510
423
|
menuModeOptions = computed(() => {
|
|
511
424
|
const options = [
|
|
512
|
-
{
|
|
513
|
-
|
|
514
|
-
value: 'static',
|
|
515
|
-
},
|
|
516
|
-
{
|
|
517
|
-
label: this.translate('layout.configurator.menu.mode.overlay'),
|
|
518
|
-
value: 'overlay',
|
|
519
|
-
},
|
|
425
|
+
{ label: this.translate('layout.configurator.menu.mode.static'), value: 'static' },
|
|
426
|
+
{ label: this.translate('layout.configurator.menu.mode.overlay'), value: 'overlay' },
|
|
520
427
|
];
|
|
521
428
|
if (this.layoutService.isDesktop()) {
|
|
522
|
-
options.push({
|
|
523
|
-
label: this.translate('layout.configurator.menu.mode.topbar'),
|
|
524
|
-
value: 'topbar',
|
|
525
|
-
});
|
|
429
|
+
options.push({ label: this.translate('layout.configurator.menu.mode.topbar'), value: 'topbar' });
|
|
526
430
|
}
|
|
527
431
|
return options;
|
|
528
432
|
}, /* @ts-ignore */
|
|
529
433
|
...(ngDevMode ? [{ debugName: "menuModeOptions" }] : /* istanbul ignore next */ []));
|
|
530
434
|
constructor() {
|
|
531
435
|
if (isPlatformBrowser(this.platformId)) {
|
|
532
|
-
|
|
533
|
-
|
|
436
|
+
effect(() => {
|
|
437
|
+
const config = this.layoutService.layoutConfig();
|
|
438
|
+
applyTheme({
|
|
439
|
+
preset: (config.preset ?? 'Aura'),
|
|
440
|
+
primary: config.primary ?? 'violet',
|
|
441
|
+
surface: config.surface ?? null,
|
|
442
|
+
darkTheme: config.darkTheme ?? false,
|
|
443
|
+
});
|
|
444
|
+
});
|
|
534
445
|
}
|
|
535
446
|
}
|
|
536
|
-
surfaces = [
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
0: '#ffffff',
|
|
541
|
-
50: '#f8fafc',
|
|
542
|
-
100: '#f1f5f9',
|
|
543
|
-
200: '#e2e8f0',
|
|
544
|
-
300: '#cbd5e1',
|
|
545
|
-
400: '#94a3b8',
|
|
546
|
-
500: '#64748b',
|
|
547
|
-
600: '#475569',
|
|
548
|
-
700: '#334155',
|
|
549
|
-
800: '#1e293b',
|
|
550
|
-
900: '#0f172a',
|
|
551
|
-
950: '#020617',
|
|
552
|
-
},
|
|
553
|
-
},
|
|
554
|
-
{
|
|
555
|
-
name: 'gray',
|
|
556
|
-
palette: {
|
|
557
|
-
0: '#ffffff',
|
|
558
|
-
50: '#f9fafb',
|
|
559
|
-
100: '#f3f4f6',
|
|
560
|
-
200: '#e5e7eb',
|
|
561
|
-
300: '#d1d5db',
|
|
562
|
-
400: '#9ca3af',
|
|
563
|
-
500: '#6b7280',
|
|
564
|
-
600: '#4b5563',
|
|
565
|
-
700: '#374151',
|
|
566
|
-
800: '#1f2937',
|
|
567
|
-
900: '#111827',
|
|
568
|
-
950: '#030712',
|
|
569
|
-
},
|
|
570
|
-
},
|
|
571
|
-
{
|
|
572
|
-
name: 'zinc',
|
|
573
|
-
palette: {
|
|
574
|
-
0: '#ffffff',
|
|
575
|
-
50: '#fafafa',
|
|
576
|
-
100: '#f4f4f5',
|
|
577
|
-
200: '#e4e4e7',
|
|
578
|
-
300: '#d4d4d8',
|
|
579
|
-
400: '#a1a1aa',
|
|
580
|
-
500: '#71717a',
|
|
581
|
-
600: '#52525b',
|
|
582
|
-
700: '#3f3f46',
|
|
583
|
-
800: '#27272a',
|
|
584
|
-
900: '#18181b',
|
|
585
|
-
950: '#09090b',
|
|
586
|
-
},
|
|
587
|
-
},
|
|
588
|
-
{
|
|
589
|
-
name: 'neutral',
|
|
590
|
-
palette: {
|
|
591
|
-
0: '#ffffff',
|
|
592
|
-
50: '#fafafa',
|
|
593
|
-
100: '#f5f5f5',
|
|
594
|
-
200: '#e5e5e5',
|
|
595
|
-
300: '#d4d4d4',
|
|
596
|
-
400: '#a3a3a3',
|
|
597
|
-
500: '#737373',
|
|
598
|
-
600: '#525252',
|
|
599
|
-
700: '#404040',
|
|
600
|
-
800: '#262626',
|
|
601
|
-
900: '#171717',
|
|
602
|
-
950: '#0a0a0a',
|
|
603
|
-
},
|
|
604
|
-
},
|
|
605
|
-
{
|
|
606
|
-
name: 'stone',
|
|
607
|
-
palette: {
|
|
608
|
-
0: '#ffffff',
|
|
609
|
-
50: '#fafaf9',
|
|
610
|
-
100: '#f5f5f4',
|
|
611
|
-
200: '#e7e5e4',
|
|
612
|
-
300: '#d6d3d1',
|
|
613
|
-
400: '#a8a29e',
|
|
614
|
-
500: '#78716c',
|
|
615
|
-
600: '#57534e',
|
|
616
|
-
700: '#44403c',
|
|
617
|
-
800: '#292524',
|
|
618
|
-
900: '#1c1917',
|
|
619
|
-
950: '#0c0a09',
|
|
620
|
-
},
|
|
621
|
-
},
|
|
622
|
-
{
|
|
623
|
-
name: 'soho',
|
|
624
|
-
palette: {
|
|
625
|
-
0: '#ffffff',
|
|
626
|
-
50: '#ececec',
|
|
627
|
-
100: '#dedfdf',
|
|
628
|
-
200: '#c4c4c6',
|
|
629
|
-
300: '#adaeb0',
|
|
630
|
-
400: '#97979b',
|
|
631
|
-
500: '#7f8084',
|
|
632
|
-
600: '#6a6b70',
|
|
633
|
-
700: '#55565b',
|
|
634
|
-
800: '#3f4046',
|
|
635
|
-
900: '#2c2c34',
|
|
636
|
-
950: '#16161d',
|
|
637
|
-
},
|
|
638
|
-
},
|
|
639
|
-
{
|
|
640
|
-
name: 'viva',
|
|
641
|
-
palette: {
|
|
642
|
-
0: '#ffffff',
|
|
643
|
-
50: '#f3f3f3',
|
|
644
|
-
100: '#e7e7e8',
|
|
645
|
-
200: '#cfd0d0',
|
|
646
|
-
300: '#b7b8b9',
|
|
647
|
-
400: '#9fa1a1',
|
|
648
|
-
500: '#87898a',
|
|
649
|
-
600: '#6e7173',
|
|
650
|
-
700: '#565a5b',
|
|
651
|
-
800: '#3e4244',
|
|
652
|
-
900: '#262b2c',
|
|
653
|
-
950: '#0e1315',
|
|
654
|
-
},
|
|
655
|
-
},
|
|
656
|
-
{
|
|
657
|
-
name: 'ocean',
|
|
658
|
-
palette: {
|
|
659
|
-
0: '#ffffff',
|
|
660
|
-
50: '#fbfcfc',
|
|
661
|
-
100: '#F7F9F8',
|
|
662
|
-
200: '#EFF3F2',
|
|
663
|
-
300: '#DADEDD',
|
|
664
|
-
400: '#B1B7B6',
|
|
665
|
-
500: '#828787',
|
|
666
|
-
600: '#5F7274',
|
|
667
|
-
700: '#415B61',
|
|
668
|
-
800: '#29444E',
|
|
669
|
-
900: '#183240',
|
|
670
|
-
950: '#0c1920',
|
|
671
|
-
},
|
|
672
|
-
},
|
|
673
|
-
];
|
|
447
|
+
surfaces = Object.entries(SURFACE_PALETTES).map(([name, pal]) => ({
|
|
448
|
+
name,
|
|
449
|
+
palette: pal,
|
|
450
|
+
}));
|
|
674
451
|
selectedPrimaryColor = computed(() => this.layoutService.layoutConfig().primary, /* @ts-ignore */
|
|
675
452
|
...(ngDevMode ? [{ debugName: "selectedPrimaryColor" }] : /* istanbul ignore next */ []));
|
|
676
453
|
selectedSurfaceColor = computed(() => this.layoutService.layoutConfig().surface, /* @ts-ignore */
|
|
677
454
|
...(ngDevMode ? [{ debugName: "selectedSurfaceColor" }] : /* istanbul ignore next */ []));
|
|
678
455
|
isSurfaceSelected(surfaceName) {
|
|
679
|
-
const
|
|
680
|
-
if (
|
|
681
|
-
return
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
return this.layoutService.layoutConfig().darkTheme
|
|
685
|
-
? surfaceName === 'zinc'
|
|
686
|
-
: surfaceName === 'slate';
|
|
456
|
+
const sel = this.selectedSurfaceColor();
|
|
457
|
+
if (sel)
|
|
458
|
+
return sel === surfaceName;
|
|
459
|
+
const isDark = this.layoutService.layoutConfig().darkTheme;
|
|
460
|
+
return isDark ? surfaceName === 'zinc' : surfaceName === 'slate';
|
|
687
461
|
}
|
|
688
462
|
selectedPreset = computed(() => this.layoutService.layoutConfig().preset, /* @ts-ignore */
|
|
689
463
|
...(ngDevMode ? [{ debugName: "selectedPreset" }] : /* istanbul ignore next */ []));
|
|
690
464
|
menuMode = computed(() => this.layoutService.layoutConfig().menuMode, /* @ts-ignore */
|
|
691
465
|
...(ngDevMode ? [{ debugName: "menuMode" }] : /* istanbul ignore next */ []));
|
|
692
466
|
primaryColors = computed(() => {
|
|
693
|
-
const presetPalette = presets[this.layoutService.layoutConfig().preset].primitive;
|
|
694
|
-
const colors = [
|
|
695
|
-
'emerald',
|
|
696
|
-
'green',
|
|
697
|
-
'lime',
|
|
698
|
-
'orange',
|
|
699
|
-
'amber',
|
|
700
|
-
'yellow',
|
|
701
|
-
'teal',
|
|
702
|
-
'cyan',
|
|
703
|
-
'sky',
|
|
704
|
-
'blue',
|
|
705
|
-
'indigo',
|
|
706
|
-
'violet',
|
|
707
|
-
'purple',
|
|
708
|
-
'fuchsia',
|
|
709
|
-
'pink',
|
|
710
|
-
'rose',
|
|
711
|
-
];
|
|
712
467
|
const palettes = [{ name: 'noir', palette: {} }];
|
|
713
|
-
|
|
714
|
-
palettes.push({
|
|
715
|
-
|
|
716
|
-
palette: presetPalette?.[color],
|
|
717
|
-
});
|
|
718
|
-
});
|
|
468
|
+
for (const [name, pal] of Object.entries(PRIMARY_PALETTES)) {
|
|
469
|
+
palettes.push({ name, palette: pal });
|
|
470
|
+
}
|
|
719
471
|
return palettes;
|
|
720
472
|
}, /* @ts-ignore */
|
|
721
473
|
...(ngDevMode ? [{ debugName: "primaryColors" }] : /* istanbul ignore next */ []));
|
|
722
|
-
getPresetExt() {
|
|
723
|
-
const color = this.primaryColors().find(c => c.name === this.selectedPrimaryColor()) ?? {};
|
|
724
|
-
const preset = this.layoutService.layoutConfig().preset ?? 'Aura';
|
|
725
|
-
const palette = color.name === 'noir' ? null : (color.palette ?? {});
|
|
726
|
-
return buildSemanticExt(palette, preset);
|
|
727
|
-
}
|
|
728
474
|
updateColors(event, type, color) {
|
|
729
475
|
if (type === 'primary') {
|
|
730
476
|
this.layoutService.updateLayoutConfig({ primary: color.name });
|
|
@@ -732,31 +478,31 @@ class AppConfigurator {
|
|
|
732
478
|
else if (type === 'surface') {
|
|
733
479
|
this.layoutService.updateLayoutConfig({ surface: color.name });
|
|
734
480
|
}
|
|
735
|
-
this.
|
|
481
|
+
this._applyColorChange(type, color);
|
|
736
482
|
event.stopPropagation();
|
|
737
483
|
}
|
|
738
|
-
|
|
484
|
+
_applyColorChange(type, color) {
|
|
485
|
+
const isDark = this.layoutService.layoutConfig().darkTheme ?? false;
|
|
739
486
|
if (type === 'primary') {
|
|
740
|
-
|
|
487
|
+
const primary = color.name ?? 'violet';
|
|
488
|
+
const pal = primary === 'noir'
|
|
489
|
+
? Object.fromEntries(Object.entries(SURFACE_PALETTES['slate']).map(([k, v]) => [k, v]))
|
|
490
|
+
: PRIMARY_PALETTES[primary];
|
|
491
|
+
if (pal)
|
|
492
|
+
applyPrimaryPalette(pal, isDark);
|
|
741
493
|
}
|
|
742
494
|
else if (type === 'surface') {
|
|
743
|
-
|
|
495
|
+
const surfacePal = SURFACE_PALETTES[color.name ?? 'slate'];
|
|
496
|
+
if (surfacePal)
|
|
497
|
+
applySurfacePalette(surfacePal);
|
|
744
498
|
}
|
|
745
499
|
}
|
|
746
500
|
onPresetChange(event) {
|
|
747
501
|
this.layoutService.updateLayoutConfig({ preset: event });
|
|
748
|
-
const
|
|
749
|
-
|
|
750
|
-
const
|
|
751
|
-
|
|
752
|
-
? 'zinc'
|
|
753
|
-
: 'slate';
|
|
754
|
-
const surfacePalette = this.surfaces.find((s) => s.name === (selectedSurface || defaultSurface))?.palette;
|
|
755
|
-
$t()
|
|
756
|
-
.preset(preset)
|
|
757
|
-
.preset(this.getPresetExt())
|
|
758
|
-
.surfacePalette(surfacePalette)
|
|
759
|
-
.use({ useDefaultOptions: true });
|
|
502
|
+
const isDark = this.layoutService.layoutConfig().darkTheme ?? false;
|
|
503
|
+
const primary = this.layoutService.layoutConfig().primary ?? 'violet';
|
|
504
|
+
const surface = this.layoutService.layoutConfig().surface ?? null;
|
|
505
|
+
applyTheme({ preset: event, primary, surface, darkTheme: isDark });
|
|
760
506
|
}
|
|
761
507
|
onMenuModeChange(event) {
|
|
762
508
|
this.layoutService.updateLayoutConfig({ menuMode: event });
|
|
@@ -764,8 +510,8 @@ class AppConfigurator {
|
|
|
764
510
|
translate(key) {
|
|
765
511
|
return this.translateAdapter?.translate(key) ?? key;
|
|
766
512
|
}
|
|
767
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
768
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
513
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppConfigurator, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
514
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: AppConfigurator, isStandalone: true, selector: "app-configurator", host: { styleAttribute: "background-color: var(--surface-overlay); inset-inline-end: 0;", classAttribute: "hidden absolute top-[3.25rem] w-[calc(100vw-2rem)] sm:w-72 max-w-72 p-4 border border-surface rounded-border origin-top shadow-xl" }, ngImport: i0, template: `
|
|
769
515
|
<div class="flex flex-col gap-4">
|
|
770
516
|
<div>
|
|
771
517
|
<span class="text-sm text-muted-color font-semibold">{{
|
|
@@ -777,13 +523,11 @@ class AppConfigurator {
|
|
|
777
523
|
type="button"
|
|
778
524
|
[title]="primaryColor.name"
|
|
779
525
|
(click)="updateColors($event, 'primary', primaryColor)"
|
|
780
|
-
[class.outline-primary]="
|
|
781
|
-
primaryColor.name === selectedPrimaryColor()
|
|
782
|
-
"
|
|
526
|
+
[class.outline-primary]="primaryColor.name === selectedPrimaryColor()"
|
|
783
527
|
class="border-none w-5 h-5 rounded-full p-0 cursor-pointer outline-none outline-offset-1"
|
|
784
528
|
[style.background-color]="
|
|
785
529
|
primaryColor?.name === 'noir'
|
|
786
|
-
? 'var(--text-color)'
|
|
530
|
+
? 'var(--f-text-color)'
|
|
787
531
|
: primaryColor?.palette?.['500']
|
|
788
532
|
"
|
|
789
533
|
></button>
|
|
@@ -804,7 +548,7 @@ class AppConfigurator {
|
|
|
804
548
|
class="border-none w-5 h-5 rounded-full p-0 cursor-pointer outline-none outline-offset-1"
|
|
805
549
|
[style.background-color]="
|
|
806
550
|
surface?.name === 'noir'
|
|
807
|
-
? 'var(--text-color)'
|
|
551
|
+
? 'var(--f-text-color)'
|
|
808
552
|
: surface?.palette?.['500']
|
|
809
553
|
"
|
|
810
554
|
></button>
|
|
@@ -815,7 +559,7 @@ class AppConfigurator {
|
|
|
815
559
|
<span class="text-sm text-muted-color font-semibold">{{
|
|
816
560
|
'layout.configurator.presets' | translate
|
|
817
561
|
}}</span>
|
|
818
|
-
<
|
|
562
|
+
<f-selectbutton
|
|
819
563
|
[options]="presets"
|
|
820
564
|
[ngModel]="selectedPreset()"
|
|
821
565
|
(ngModelChange)="onPresetChange($event)"
|
|
@@ -828,7 +572,7 @@ class AppConfigurator {
|
|
|
828
572
|
<span class="text-sm text-muted-color font-semibold">{{
|
|
829
573
|
'layout.configurator.menu.mode' | translate
|
|
830
574
|
}}</span>
|
|
831
|
-
<
|
|
575
|
+
<f-selectbutton
|
|
832
576
|
[ngModel]="menuMode()"
|
|
833
577
|
(ngModelChange)="onMenuModeChange($event)"
|
|
834
578
|
[options]="menuModeOptions()"
|
|
@@ -838,13 +582,13 @@ class AppConfigurator {
|
|
|
838
582
|
</div>
|
|
839
583
|
}
|
|
840
584
|
</div>
|
|
841
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type:
|
|
585
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "component", type: i1.SelectButtonComponent, selector: "f-selectbutton", inputs: ["options", "optionLabel", "optionValue", "multiple", "disabled", "allowEmpty", "size"], outputs: ["onChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
842
586
|
}
|
|
843
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
587
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppConfigurator, decorators: [{
|
|
844
588
|
type: Component,
|
|
845
589
|
args: [{
|
|
846
590
|
selector: 'app-configurator',
|
|
847
|
-
imports: [
|
|
591
|
+
imports: [UiModule, FormsModule, TranslatePipe],
|
|
848
592
|
template: `
|
|
849
593
|
<div class="flex flex-col gap-4">
|
|
850
594
|
<div>
|
|
@@ -857,13 +601,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
857
601
|
type="button"
|
|
858
602
|
[title]="primaryColor.name"
|
|
859
603
|
(click)="updateColors($event, 'primary', primaryColor)"
|
|
860
|
-
[class.outline-primary]="
|
|
861
|
-
primaryColor.name === selectedPrimaryColor()
|
|
862
|
-
"
|
|
604
|
+
[class.outline-primary]="primaryColor.name === selectedPrimaryColor()"
|
|
863
605
|
class="border-none w-5 h-5 rounded-full p-0 cursor-pointer outline-none outline-offset-1"
|
|
864
606
|
[style.background-color]="
|
|
865
607
|
primaryColor?.name === 'noir'
|
|
866
|
-
? 'var(--text-color)'
|
|
608
|
+
? 'var(--f-text-color)'
|
|
867
609
|
: primaryColor?.palette?.['500']
|
|
868
610
|
"
|
|
869
611
|
></button>
|
|
@@ -884,7 +626,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
884
626
|
class="border-none w-5 h-5 rounded-full p-0 cursor-pointer outline-none outline-offset-1"
|
|
885
627
|
[style.background-color]="
|
|
886
628
|
surface?.name === 'noir'
|
|
887
|
-
? 'var(--text-color)'
|
|
629
|
+
? 'var(--f-text-color)'
|
|
888
630
|
: surface?.palette?.['500']
|
|
889
631
|
"
|
|
890
632
|
></button>
|
|
@@ -895,7 +637,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
895
637
|
<span class="text-sm text-muted-color font-semibold">{{
|
|
896
638
|
'layout.configurator.presets' | translate
|
|
897
639
|
}}</span>
|
|
898
|
-
<
|
|
640
|
+
<f-selectbutton
|
|
899
641
|
[options]="presets"
|
|
900
642
|
[ngModel]="selectedPreset()"
|
|
901
643
|
(ngModelChange)="onPresetChange($event)"
|
|
@@ -908,7 +650,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
908
650
|
<span class="text-sm text-muted-color font-semibold">{{
|
|
909
651
|
'layout.configurator.menu.mode' | translate
|
|
910
652
|
}}</span>
|
|
911
|
-
<
|
|
653
|
+
<f-selectbutton
|
|
912
654
|
[ngModel]="menuMode()"
|
|
913
655
|
(ngModelChange)="onMenuModeChange($event)"
|
|
914
656
|
[options]="menuModeOptions()"
|
|
@@ -920,7 +662,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
920
662
|
</div>
|
|
921
663
|
`,
|
|
922
664
|
host: {
|
|
923
|
-
class: 'hidden absolute top-[3.25rem] w-[calc(100vw-2rem)] sm:w-72 max-w-72 p-4 border border-surface rounded-border origin-top shadow-
|
|
665
|
+
class: 'hidden absolute top-[3.25rem] w-[calc(100vw-2rem)] sm:w-72 max-w-72 p-4 border border-surface rounded-border origin-top shadow-xl',
|
|
924
666
|
style: 'background-color: var(--surface-overlay); inset-inline-end: 0;',
|
|
925
667
|
},
|
|
926
668
|
}]
|
|
@@ -946,25 +688,25 @@ class AppFloatingConfigurator {
|
|
|
946
688
|
const currentDarkTheme = this.layoutService.layoutConfig().darkTheme;
|
|
947
689
|
this.layoutService.updateLayoutConfig({ darkTheme: !currentDarkTheme });
|
|
948
690
|
}
|
|
949
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
950
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
691
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppFloatingConfigurator, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
692
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: AppFloatingConfigurator, isStandalone: true, selector: "app-floating-configurator", ngImport: i0, template: `
|
|
951
693
|
<div
|
|
952
694
|
class="floating-configurator fixed flex flex-col md:flex-row gap-2 md:gap-4 top-4 md:top-8 z-50"
|
|
953
695
|
>
|
|
954
696
|
<button
|
|
955
|
-
|
|
697
|
+
fButton
|
|
956
698
|
type="button"
|
|
957
699
|
(click)="toggleDarkMode()"
|
|
958
700
|
[rounded]="true"
|
|
959
701
|
severity="secondary"
|
|
960
702
|
>
|
|
961
|
-
<
|
|
703
|
+
<ui-icon pButtonIcon [name]="isDarkTheme() ? 'moon' : 'sun'"></ui-icon>
|
|
962
704
|
</button>
|
|
963
705
|
@if (languageSelectorPanel) {
|
|
964
706
|
<div class="relative">
|
|
965
707
|
<button
|
|
966
|
-
|
|
967
|
-
|
|
708
|
+
fButton
|
|
709
|
+
fStyleClass="@next"
|
|
968
710
|
enterFromClass="hidden"
|
|
969
711
|
enterActiveClass="animate-scalein"
|
|
970
712
|
leaveToClass="hidden"
|
|
@@ -973,15 +715,15 @@ class AppFloatingConfigurator {
|
|
|
973
715
|
type="button"
|
|
974
716
|
rounded
|
|
975
717
|
>
|
|
976
|
-
<
|
|
718
|
+
<ui-icon pButtonIcon name="globe"></ui-icon>
|
|
977
719
|
</button>
|
|
978
720
|
<ng-container *ngComponentOutlet="languageSelectorPanel" />
|
|
979
721
|
</div>
|
|
980
722
|
}
|
|
981
723
|
<div class="relative">
|
|
982
724
|
<button
|
|
983
|
-
|
|
984
|
-
|
|
725
|
+
fButton
|
|
726
|
+
fStyleClass="@next"
|
|
985
727
|
enterFromClass="hidden"
|
|
986
728
|
enterActiveClass="animate-scalein"
|
|
987
729
|
leaveToClass="hidden"
|
|
@@ -990,33 +732,33 @@ class AppFloatingConfigurator {
|
|
|
990
732
|
type="button"
|
|
991
733
|
rounded
|
|
992
734
|
>
|
|
993
|
-
<
|
|
735
|
+
<ui-icon pButtonIcon name="palette"></ui-icon>
|
|
994
736
|
</button>
|
|
995
737
|
<app-configurator />
|
|
996
738
|
</div>
|
|
997
739
|
</div>
|
|
998
|
-
`, isInline: true, styles: [".floating-configurator{inset-inline-end:.5rem}@media(min-width:768px){.floating-configurator{inset-inline-end:2rem}}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "ngmodule", type:
|
|
740
|
+
`, isInline: true, styles: [".floating-configurator{inset-inline-end:.5rem}@media(min-width:768px){.floating-configurator{inset-inline-end:2rem}}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "ngmodule", type: UiModule }, { kind: "directive", type: i1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "rounded", "raised", "fluid", "disabled", "loading", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "directive", type: i1.StyleClassDirective, selector: "[fStyleClass]", inputs: ["fStyleClass", "enterFromClass", "enterActiveClass", "enterToClass", "leaveFromClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass"] }, { kind: "component", type: i1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill"] }, { kind: "component", type: AppConfigurator, selector: "app-configurator" }] });
|
|
999
741
|
}
|
|
1000
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
742
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppFloatingConfigurator, decorators: [{
|
|
1001
743
|
type: Component,
|
|
1002
|
-
args: [{ selector: 'app-floating-configurator', imports: [NgComponentOutlet,
|
|
744
|
+
args: [{ selector: 'app-floating-configurator', imports: [NgComponentOutlet, UiModule, AppConfigurator], template: `
|
|
1003
745
|
<div
|
|
1004
746
|
class="floating-configurator fixed flex flex-col md:flex-row gap-2 md:gap-4 top-4 md:top-8 z-50"
|
|
1005
747
|
>
|
|
1006
748
|
<button
|
|
1007
|
-
|
|
749
|
+
fButton
|
|
1008
750
|
type="button"
|
|
1009
751
|
(click)="toggleDarkMode()"
|
|
1010
752
|
[rounded]="true"
|
|
1011
753
|
severity="secondary"
|
|
1012
754
|
>
|
|
1013
|
-
<
|
|
755
|
+
<ui-icon pButtonIcon [name]="isDarkTheme() ? 'moon' : 'sun'"></ui-icon>
|
|
1014
756
|
</button>
|
|
1015
757
|
@if (languageSelectorPanel) {
|
|
1016
758
|
<div class="relative">
|
|
1017
759
|
<button
|
|
1018
|
-
|
|
1019
|
-
|
|
760
|
+
fButton
|
|
761
|
+
fStyleClass="@next"
|
|
1020
762
|
enterFromClass="hidden"
|
|
1021
763
|
enterActiveClass="animate-scalein"
|
|
1022
764
|
leaveToClass="hidden"
|
|
@@ -1025,15 +767,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1025
767
|
type="button"
|
|
1026
768
|
rounded
|
|
1027
769
|
>
|
|
1028
|
-
<
|
|
770
|
+
<ui-icon pButtonIcon name="globe"></ui-icon>
|
|
1029
771
|
</button>
|
|
1030
772
|
<ng-container *ngComponentOutlet="languageSelectorPanel" />
|
|
1031
773
|
</div>
|
|
1032
774
|
}
|
|
1033
775
|
<div class="relative">
|
|
1034
776
|
<button
|
|
1035
|
-
|
|
1036
|
-
|
|
777
|
+
fButton
|
|
778
|
+
fStyleClass="@next"
|
|
1037
779
|
enterFromClass="hidden"
|
|
1038
780
|
enterActiveClass="animate-scalein"
|
|
1039
781
|
leaveToClass="hidden"
|
|
@@ -1042,7 +784,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1042
784
|
type="button"
|
|
1043
785
|
rounded
|
|
1044
786
|
>
|
|
1045
|
-
<
|
|
787
|
+
<ui-icon pButtonIcon name="palette"></ui-icon>
|
|
1046
788
|
</button>
|
|
1047
789
|
<app-configurator />
|
|
1048
790
|
</div>
|
|
@@ -1180,8 +922,8 @@ class AppMenuitem {
|
|
|
1180
922
|
}
|
|
1181
923
|
this.layoutService.onMenuStateChange({ key: this.key() });
|
|
1182
924
|
}
|
|
1183
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
1184
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
925
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppMenuitem, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
926
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", 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()" } }, viewQueries: [{ propertyName: "parentLink", first: true, predicate: ["parentLink"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
1185
927
|
<ng-container>
|
|
1186
928
|
@if (item().children?.length) {
|
|
1187
929
|
<a
|
|
@@ -1189,7 +931,6 @@ class AppMenuitem {
|
|
|
1189
931
|
(mouseenter)="onMouseEnter()"
|
|
1190
932
|
#parentLink
|
|
1191
933
|
tabindex="0"
|
|
1192
|
-
pRipple
|
|
1193
934
|
>
|
|
1194
935
|
@if (item().icon) {
|
|
1195
936
|
<lib-icon
|
|
@@ -1203,9 +944,9 @@ class AppMenuitem {
|
|
|
1203
944
|
}}</span>
|
|
1204
945
|
@if (item().children) {
|
|
1205
946
|
@if (layoutService.isTopbar()) {
|
|
1206
|
-
<
|
|
947
|
+
<ui-icon name="chevron-right" class="layout-submenu-toggler"></ui-icon>
|
|
1207
948
|
} @else {
|
|
1208
|
-
<
|
|
949
|
+
<ui-icon name="angle-down" class="layout-submenu-toggler"></ui-icon>
|
|
1209
950
|
}
|
|
1210
951
|
}
|
|
1211
952
|
</a>
|
|
@@ -1217,7 +958,6 @@ class AppMenuitem {
|
|
|
1217
958
|
routerLinkActive="active-route"
|
|
1218
959
|
[routerLinkActiveOptions]="routerLinkActiveOptions()"
|
|
1219
960
|
tabindex="0"
|
|
1220
|
-
pRipple
|
|
1221
961
|
>
|
|
1222
962
|
@if (item().icon) {
|
|
1223
963
|
<lib-icon
|
|
@@ -1252,11 +992,11 @@ class AppMenuitem {
|
|
|
1252
992
|
</ul>
|
|
1253
993
|
}
|
|
1254
994
|
</ng-container>
|
|
1255
|
-
`, 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:
|
|
995
|
+
`, 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: "ngmodule", type: UiModule }, { kind: "component", type: i1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill"] }, { kind: "component", type: IconComponent, selector: "lib-icon", inputs: ["icon", "iconType"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "directive", type: i2$1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
1256
996
|
}
|
|
1257
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
997
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppMenuitem, decorators: [{
|
|
1258
998
|
type: Component,
|
|
1259
|
-
args: [{ selector: '[app-menuitem]', imports: [IconComponent, RouterModule,
|
|
999
|
+
args: [{ selector: '[app-menuitem]', imports: [UiModule, IconComponent, RouterModule, TranslatePipe], template: `
|
|
1260
1000
|
<ng-container>
|
|
1261
1001
|
@if (item().children?.length) {
|
|
1262
1002
|
<a
|
|
@@ -1264,7 +1004,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1264
1004
|
(mouseenter)="onMouseEnter()"
|
|
1265
1005
|
#parentLink
|
|
1266
1006
|
tabindex="0"
|
|
1267
|
-
pRipple
|
|
1268
1007
|
>
|
|
1269
1008
|
@if (item().icon) {
|
|
1270
1009
|
<lib-icon
|
|
@@ -1278,9 +1017,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1278
1017
|
}}</span>
|
|
1279
1018
|
@if (item().children) {
|
|
1280
1019
|
@if (layoutService.isTopbar()) {
|
|
1281
|
-
<
|
|
1020
|
+
<ui-icon name="chevron-right" class="layout-submenu-toggler"></ui-icon>
|
|
1282
1021
|
} @else {
|
|
1283
|
-
<
|
|
1022
|
+
<ui-icon name="angle-down" class="layout-submenu-toggler"></ui-icon>
|
|
1284
1023
|
}
|
|
1285
1024
|
}
|
|
1286
1025
|
</a>
|
|
@@ -1292,7 +1031,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1292
1031
|
routerLinkActive="active-route"
|
|
1293
1032
|
[routerLinkActiveOptions]="routerLinkActiveOptions()"
|
|
1294
1033
|
tabindex="0"
|
|
1295
|
-
pRipple
|
|
1296
1034
|
>
|
|
1297
1035
|
@if (item().icon) {
|
|
1298
1036
|
<lib-icon
|
|
@@ -1346,8 +1084,8 @@ class AppMenu {
|
|
|
1346
1084
|
* - Permission state changes (user permissions updated)
|
|
1347
1085
|
*/
|
|
1348
1086
|
menuItems = this.layoutService.menu;
|
|
1349
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
1350
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
1087
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppMenu, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1088
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: AppMenu, isStandalone: true, selector: "app-menu", ngImport: i0, template: `<div class="layout-menu">
|
|
1351
1089
|
<ul>
|
|
1352
1090
|
@for (
|
|
1353
1091
|
item of menuItems();
|
|
@@ -1359,7 +1097,7 @@ class AppMenu {
|
|
|
1359
1097
|
</ul>
|
|
1360
1098
|
</div>`, isInline: true, dependencies: [{ kind: "component", type: AppMenuitem, selector: "[app-menuitem]", inputs: ["item", "index", "parentKey"] }, { kind: "ngmodule", type: RouterModule }] });
|
|
1361
1099
|
}
|
|
1362
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
1100
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppMenu, decorators: [{
|
|
1363
1101
|
type: Component,
|
|
1364
1102
|
args: [{
|
|
1365
1103
|
selector: 'app-menu',
|
|
@@ -1530,13 +1268,13 @@ class AppCompanyBranchSelector {
|
|
|
1530
1268
|
translate(key) {
|
|
1531
1269
|
return this.translateAdapter?.translate(key) ?? key;
|
|
1532
1270
|
}
|
|
1533
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
1534
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
1271
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppCompanyBranchSelector, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1272
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: AppCompanyBranchSelector, isStandalone: true, selector: "app-company-branch-selector", host: { classAttribute: "relative" }, ngImport: i0, template: `
|
|
1535
1273
|
<button
|
|
1536
1274
|
type="button"
|
|
1537
1275
|
class="layout-topbar-action"
|
|
1538
1276
|
[class.layout-topbar-action-highlight]="isActive()"
|
|
1539
|
-
|
|
1277
|
+
fStyleClass="@next"
|
|
1540
1278
|
enterFromClass="hidden"
|
|
1541
1279
|
enterActiveClass="animate-scalein"
|
|
1542
1280
|
leaveToClass="hidden"
|
|
@@ -1544,14 +1282,14 @@ class AppCompanyBranchSelector {
|
|
|
1544
1282
|
[hideOnOutsideClick]="true"
|
|
1545
1283
|
(click)="onPanelToggle()"
|
|
1546
1284
|
>
|
|
1547
|
-
<
|
|
1285
|
+
<ui-icon name="building"></ui-icon>
|
|
1548
1286
|
<span>{{ currentCompanyName() }}</span>
|
|
1549
1287
|
@if (currentBranchName()) {
|
|
1550
1288
|
<span class="text-xs opacity-70"> | {{ currentBranchName() }}</span>
|
|
1551
1289
|
}
|
|
1552
1290
|
</button>
|
|
1553
1291
|
<div
|
|
1554
|
-
class="hidden absolute top-[3.25rem] z-50 p-4 border border-surface rounded-border origin-top shadow-
|
|
1292
|
+
class="hidden absolute top-[3.25rem] z-50 p-4 border border-surface rounded-border origin-top shadow-xl w-[calc(100vw-2rem)] sm:w-auto sm:min-w-[300px] max-w-[360px]"
|
|
1555
1293
|
style="background-color: var(--surface-overlay); inset-inline-end: 0;"
|
|
1556
1294
|
>
|
|
1557
1295
|
<div class="flex flex-col gap-4">
|
|
@@ -1564,7 +1302,7 @@ class AppCompanyBranchSelector {
|
|
|
1564
1302
|
<label class="text-sm text-muted-color font-semibold">{{
|
|
1565
1303
|
'shared.company' | translate
|
|
1566
1304
|
}}</label>
|
|
1567
|
-
<
|
|
1305
|
+
<f-select
|
|
1568
1306
|
[options]="companies()"
|
|
1569
1307
|
[ngModel]="selectedCompanyId()"
|
|
1570
1308
|
(ngModelChange)="onCompanyChange($event)"
|
|
@@ -1584,7 +1322,7 @@ class AppCompanyBranchSelector {
|
|
|
1584
1322
|
<label class="text-sm text-muted-color font-semibold">{{
|
|
1585
1323
|
'layout.company.branch.selector.branch' | translate
|
|
1586
1324
|
}}</label>
|
|
1587
|
-
<
|
|
1325
|
+
<f-select
|
|
1588
1326
|
[options]="branches()"
|
|
1589
1327
|
[ngModel]="selectedBranchId()"
|
|
1590
1328
|
(ngModelChange)="onBranchChange($event)"
|
|
@@ -1602,41 +1340,36 @@ class AppCompanyBranchSelector {
|
|
|
1602
1340
|
<!-- Actions -->
|
|
1603
1341
|
<div class="flex gap-2 pt-2">
|
|
1604
1342
|
<button
|
|
1605
|
-
|
|
1343
|
+
fButton
|
|
1606
1344
|
class="flex-1"
|
|
1607
1345
|
[disabled]="!canSwitch() || isSwitching()"
|
|
1608
1346
|
(click)="onSwitch()"
|
|
1609
1347
|
>
|
|
1610
1348
|
@if (isSwitching()) {
|
|
1611
|
-
<
|
|
1349
|
+
<ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
|
|
1612
1350
|
} @else {
|
|
1613
|
-
<
|
|
1351
|
+
<ui-icon pButtonIcon name="sync"></ui-icon>
|
|
1614
1352
|
}
|
|
1615
1353
|
<span pButtonLabel>{{ 'layout.company.branch.selector.switch.button' | translate }}</span>
|
|
1616
1354
|
</button>
|
|
1617
1355
|
</div>
|
|
1618
1356
|
</div>
|
|
1619
1357
|
</div>
|
|
1620
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type:
|
|
1358
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "directive", type: i1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "rounded", "raised", "fluid", "disabled", "loading", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i1.SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "showClear", "loading", "inputId", "invalid", "touched", "styleClass", "editable"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur"] }, { kind: "directive", type: i1.StyleClassDirective, selector: "[fStyleClass]", inputs: ["fStyleClass", "enterFromClass", "enterActiveClass", "enterToClass", "leaveFromClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass"] }, { kind: "component", type: i1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill"] }, { kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
1621
1359
|
}
|
|
1622
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
1360
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppCompanyBranchSelector, decorators: [{
|
|
1623
1361
|
type: Component,
|
|
1624
1362
|
args: [{
|
|
1625
1363
|
selector: 'app-company-branch-selector',
|
|
1626
|
-
imports: [
|
|
1627
|
-
|
|
1628
|
-
StyleClassModule,
|
|
1629
|
-
ButtonModule,
|
|
1630
|
-
SelectModule,
|
|
1631
|
-
TranslatePipe,
|
|
1632
|
-
],
|
|
1364
|
+
imports: [UiModule, AngularModule,
|
|
1365
|
+
TranslatePipe,],
|
|
1633
1366
|
host: { class: 'relative' },
|
|
1634
1367
|
template: `
|
|
1635
1368
|
<button
|
|
1636
1369
|
type="button"
|
|
1637
1370
|
class="layout-topbar-action"
|
|
1638
1371
|
[class.layout-topbar-action-highlight]="isActive()"
|
|
1639
|
-
|
|
1372
|
+
fStyleClass="@next"
|
|
1640
1373
|
enterFromClass="hidden"
|
|
1641
1374
|
enterActiveClass="animate-scalein"
|
|
1642
1375
|
leaveToClass="hidden"
|
|
@@ -1644,14 +1377,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1644
1377
|
[hideOnOutsideClick]="true"
|
|
1645
1378
|
(click)="onPanelToggle()"
|
|
1646
1379
|
>
|
|
1647
|
-
<
|
|
1380
|
+
<ui-icon name="building"></ui-icon>
|
|
1648
1381
|
<span>{{ currentCompanyName() }}</span>
|
|
1649
1382
|
@if (currentBranchName()) {
|
|
1650
1383
|
<span class="text-xs opacity-70"> | {{ currentBranchName() }}</span>
|
|
1651
1384
|
}
|
|
1652
1385
|
</button>
|
|
1653
1386
|
<div
|
|
1654
|
-
class="hidden absolute top-[3.25rem] z-50 p-4 border border-surface rounded-border origin-top shadow-
|
|
1387
|
+
class="hidden absolute top-[3.25rem] z-50 p-4 border border-surface rounded-border origin-top shadow-xl w-[calc(100vw-2rem)] sm:w-auto sm:min-w-[300px] max-w-[360px]"
|
|
1655
1388
|
style="background-color: var(--surface-overlay); inset-inline-end: 0;"
|
|
1656
1389
|
>
|
|
1657
1390
|
<div class="flex flex-col gap-4">
|
|
@@ -1664,7 +1397,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1664
1397
|
<label class="text-sm text-muted-color font-semibold">{{
|
|
1665
1398
|
'shared.company' | translate
|
|
1666
1399
|
}}</label>
|
|
1667
|
-
<
|
|
1400
|
+
<f-select
|
|
1668
1401
|
[options]="companies()"
|
|
1669
1402
|
[ngModel]="selectedCompanyId()"
|
|
1670
1403
|
(ngModelChange)="onCompanyChange($event)"
|
|
@@ -1684,7 +1417,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1684
1417
|
<label class="text-sm text-muted-color font-semibold">{{
|
|
1685
1418
|
'layout.company.branch.selector.branch' | translate
|
|
1686
1419
|
}}</label>
|
|
1687
|
-
<
|
|
1420
|
+
<f-select
|
|
1688
1421
|
[options]="branches()"
|
|
1689
1422
|
[ngModel]="selectedBranchId()"
|
|
1690
1423
|
(ngModelChange)="onBranchChange($event)"
|
|
@@ -1702,15 +1435,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1702
1435
|
<!-- Actions -->
|
|
1703
1436
|
<div class="flex gap-2 pt-2">
|
|
1704
1437
|
<button
|
|
1705
|
-
|
|
1438
|
+
fButton
|
|
1706
1439
|
class="flex-1"
|
|
1707
1440
|
[disabled]="!canSwitch() || isSwitching()"
|
|
1708
1441
|
(click)="onSwitch()"
|
|
1709
1442
|
>
|
|
1710
1443
|
@if (isSwitching()) {
|
|
1711
|
-
<
|
|
1444
|
+
<ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
|
|
1712
1445
|
} @else {
|
|
1713
|
-
<
|
|
1446
|
+
<ui-icon pButtonIcon name="sync"></ui-icon>
|
|
1714
1447
|
}
|
|
1715
1448
|
<span pButtonLabel>{{ 'layout.company.branch.selector.switch.button' | translate }}</span>
|
|
1716
1449
|
</button>
|
|
@@ -1722,16 +1455,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1722
1455
|
}], ctorParameters: () => [] });
|
|
1723
1456
|
|
|
1724
1457
|
class AppLauncher {
|
|
1458
|
+
layoutService = inject(LayoutService);
|
|
1725
1459
|
destroyRef = inject(DestroyRef);
|
|
1726
1460
|
document = inject(DOCUMENT$1);
|
|
1727
1461
|
elementRef = inject(ElementRef);
|
|
1728
|
-
layoutService = inject(LayoutService);
|
|
1729
1462
|
_isActive = signal(false, /* @ts-ignore */
|
|
1730
1463
|
...(ngDevMode ? [{ debugName: "_isActive" }] : /* istanbul ignore next */ []));
|
|
1731
1464
|
isActive = this._isActive.asReadonly();
|
|
1732
1465
|
constructor() {
|
|
1733
1466
|
fromEvent(this.document, 'click')
|
|
1734
|
-
.pipe(takeUntilDestroyed(this.destroyRef), filter(() => this.
|
|
1467
|
+
.pipe(takeUntilDestroyed(this.destroyRef), filter(() => this.isActive()))
|
|
1735
1468
|
.subscribe((event) => {
|
|
1736
1469
|
const target = event.target;
|
|
1737
1470
|
if (!this.elementRef.nativeElement.contains(target)) {
|
|
@@ -1739,117 +1472,121 @@ class AppLauncher {
|
|
|
1739
1472
|
}
|
|
1740
1473
|
});
|
|
1741
1474
|
}
|
|
1742
|
-
|
|
1475
|
+
toggleActive() {
|
|
1743
1476
|
this._isActive.update((v) => !v);
|
|
1744
1477
|
}
|
|
1745
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
1746
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
1478
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppLauncher, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1479
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: AppLauncher, isStandalone: true, selector: "app-launcher", host: { classAttribute: "relative" }, ngImport: i0, template: `
|
|
1747
1480
|
<button
|
|
1748
1481
|
type="button"
|
|
1749
1482
|
class="layout-topbar-action"
|
|
1750
1483
|
[class.layout-topbar-action-highlight]="isActive()"
|
|
1751
|
-
|
|
1484
|
+
fStyleClass="@next"
|
|
1752
1485
|
enterFromClass="hidden"
|
|
1753
1486
|
enterActiveClass="animate-scalein"
|
|
1754
1487
|
leaveToClass="hidden"
|
|
1755
1488
|
leaveActiveClass="animate-fadeout"
|
|
1756
1489
|
[hideOnOutsideClick]="true"
|
|
1757
|
-
(click)="
|
|
1490
|
+
(click)="toggleActive()"
|
|
1758
1491
|
>
|
|
1759
|
-
<
|
|
1492
|
+
<ui-icon name="th-large"></ui-icon>
|
|
1760
1493
|
<span>{{ 'layout.launcher.apps' | translate }}</span>
|
|
1761
1494
|
</button>
|
|
1762
1495
|
<div
|
|
1763
|
-
class="hidden absolute top-[3.25rem] z-50
|
|
1764
|
-
style="
|
|
1496
|
+
class="hidden absolute top-[3.25rem] z-50 border border-surface rounded-border origin-top surface-overlay"
|
|
1497
|
+
style="inset-inline-end: 0; min-width: 16rem; max-width: 22rem; width: calc(100vw - 2rem); box-shadow: var(--f-shadow-xl);"
|
|
1765
1498
|
>
|
|
1766
|
-
<div class="
|
|
1767
|
-
<span class="text-
|
|
1499
|
+
<div class="px-4 py-3 border-b border-surface">
|
|
1500
|
+
<span class="text-xs font-semibold uppercase tracking-wide text-muted-color">{{
|
|
1768
1501
|
'layout.launcher.applications' | translate
|
|
1769
1502
|
}}</span>
|
|
1770
|
-
|
|
1503
|
+
</div>
|
|
1504
|
+
@if (layoutService.apps().length === 0) {
|
|
1505
|
+
<div class="px-4 py-6 text-center text-muted-color text-sm">
|
|
1506
|
+
{{ 'layout.launcher.no.apps' | translate }}
|
|
1507
|
+
</div>
|
|
1508
|
+
} @else {
|
|
1509
|
+
<div class="p-3 grid grid-cols-3 gap-1">
|
|
1771
1510
|
@for (app of layoutService.apps(); track app.id) {
|
|
1772
1511
|
<a
|
|
1773
|
-
class="group flex flex-col items-center
|
|
1512
|
+
class="group flex flex-col items-center gap-2 p-3 rounded-border cursor-pointer no-underline transition-colors duration-150 hover:bg-emphasis"
|
|
1774
1513
|
[href]="app.url"
|
|
1775
1514
|
target="_blank"
|
|
1776
1515
|
rel="noopener noreferrer"
|
|
1777
1516
|
>
|
|
1778
|
-
<div
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
[iconType]="app.iconType"
|
|
1784
|
-
class="text-xl text-primary group-hover:text-primary-contrast transition-colors duration-200"
|
|
1785
|
-
/>
|
|
1517
|
+
<div class="flex items-center justify-center w-9 h-9 rounded-border bg-primary/10 group-hover:bg-primary transition-colors duration-150">
|
|
1518
|
+
<ui-icon
|
|
1519
|
+
[name]="app.icon"
|
|
1520
|
+
class="text-base text-primary group-hover:text-primary-contrast transition-colors duration-150"
|
|
1521
|
+
></ui-icon>
|
|
1786
1522
|
</div>
|
|
1787
|
-
<span
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
>
|
|
1523
|
+
<span class="text-xs text-center text-muted-color group-hover:text-color transition-colors duration-150 truncate w-full text-center leading-tight">
|
|
1524
|
+
{{ app.nameKey ? (app.nameKey | translate) : app.name }}
|
|
1525
|
+
</span>
|
|
1791
1526
|
</a>
|
|
1792
1527
|
}
|
|
1793
1528
|
</div>
|
|
1794
|
-
|
|
1529
|
+
}
|
|
1795
1530
|
</div>
|
|
1796
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type:
|
|
1531
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "directive", type: i1.StyleClassDirective, selector: "[fStyleClass]", inputs: ["fStyleClass", "enterFromClass", "enterActiveClass", "enterToClass", "leaveFromClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass"] }, { kind: "component", type: i1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
1797
1532
|
}
|
|
1798
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
1533
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppLauncher, decorators: [{
|
|
1799
1534
|
type: Component,
|
|
1800
1535
|
args: [{
|
|
1801
1536
|
selector: 'app-launcher',
|
|
1802
|
-
imports: [
|
|
1537
|
+
imports: [UiModule, TranslatePipe],
|
|
1803
1538
|
host: { class: 'relative' },
|
|
1804
1539
|
template: `
|
|
1805
1540
|
<button
|
|
1806
1541
|
type="button"
|
|
1807
1542
|
class="layout-topbar-action"
|
|
1808
1543
|
[class.layout-topbar-action-highlight]="isActive()"
|
|
1809
|
-
|
|
1544
|
+
fStyleClass="@next"
|
|
1810
1545
|
enterFromClass="hidden"
|
|
1811
1546
|
enterActiveClass="animate-scalein"
|
|
1812
1547
|
leaveToClass="hidden"
|
|
1813
1548
|
leaveActiveClass="animate-fadeout"
|
|
1814
1549
|
[hideOnOutsideClick]="true"
|
|
1815
|
-
(click)="
|
|
1550
|
+
(click)="toggleActive()"
|
|
1816
1551
|
>
|
|
1817
|
-
<
|
|
1552
|
+
<ui-icon name="th-large"></ui-icon>
|
|
1818
1553
|
<span>{{ 'layout.launcher.apps' | translate }}</span>
|
|
1819
1554
|
</button>
|
|
1820
1555
|
<div
|
|
1821
|
-
class="hidden absolute top-[3.25rem] z-50
|
|
1822
|
-
style="
|
|
1556
|
+
class="hidden absolute top-[3.25rem] z-50 border border-surface rounded-border origin-top surface-overlay"
|
|
1557
|
+
style="inset-inline-end: 0; min-width: 16rem; max-width: 22rem; width: calc(100vw - 2rem); box-shadow: var(--f-shadow-xl);"
|
|
1823
1558
|
>
|
|
1824
|
-
<div class="
|
|
1825
|
-
<span class="text-
|
|
1559
|
+
<div class="px-4 py-3 border-b border-surface">
|
|
1560
|
+
<span class="text-xs font-semibold uppercase tracking-wide text-muted-color">{{
|
|
1826
1561
|
'layout.launcher.applications' | translate
|
|
1827
1562
|
}}</span>
|
|
1828
|
-
|
|
1563
|
+
</div>
|
|
1564
|
+
@if (layoutService.apps().length === 0) {
|
|
1565
|
+
<div class="px-4 py-6 text-center text-muted-color text-sm">
|
|
1566
|
+
{{ 'layout.launcher.no.apps' | translate }}
|
|
1567
|
+
</div>
|
|
1568
|
+
} @else {
|
|
1569
|
+
<div class="p-3 grid grid-cols-3 gap-1">
|
|
1829
1570
|
@for (app of layoutService.apps(); track app.id) {
|
|
1830
1571
|
<a
|
|
1831
|
-
class="group flex flex-col items-center
|
|
1572
|
+
class="group flex flex-col items-center gap-2 p-3 rounded-border cursor-pointer no-underline transition-colors duration-150 hover:bg-emphasis"
|
|
1832
1573
|
[href]="app.url"
|
|
1833
1574
|
target="_blank"
|
|
1834
1575
|
rel="noopener noreferrer"
|
|
1835
1576
|
>
|
|
1836
|
-
<div
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
[iconType]="app.iconType"
|
|
1842
|
-
class="text-xl text-primary group-hover:text-primary-contrast transition-colors duration-200"
|
|
1843
|
-
/>
|
|
1577
|
+
<div class="flex items-center justify-center w-9 h-9 rounded-border bg-primary/10 group-hover:bg-primary transition-colors duration-150">
|
|
1578
|
+
<ui-icon
|
|
1579
|
+
[name]="app.icon"
|
|
1580
|
+
class="text-base text-primary group-hover:text-primary-contrast transition-colors duration-150"
|
|
1581
|
+
></ui-icon>
|
|
1844
1582
|
</div>
|
|
1845
|
-
<span
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
>
|
|
1583
|
+
<span class="text-xs text-center text-muted-color group-hover:text-color transition-colors duration-150 truncate w-full text-center leading-tight">
|
|
1584
|
+
{{ app.nameKey ? (app.nameKey | translate) : app.name }}
|
|
1585
|
+
</span>
|
|
1849
1586
|
</a>
|
|
1850
1587
|
}
|
|
1851
1588
|
</div>
|
|
1852
|
-
|
|
1589
|
+
}
|
|
1853
1590
|
</div>
|
|
1854
1591
|
`,
|
|
1855
1592
|
}]
|
|
@@ -1938,13 +1675,13 @@ class AppProfile {
|
|
|
1938
1675
|
translate(key, vars) {
|
|
1939
1676
|
return this.translateAdapter?.translate(key, vars) ?? key;
|
|
1940
1677
|
}
|
|
1941
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
1942
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
1678
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppProfile, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1679
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: AppProfile, isStandalone: true, selector: "app-profile", host: { classAttribute: "relative" }, ngImport: i0, template: `
|
|
1943
1680
|
<button
|
|
1944
1681
|
type="button"
|
|
1945
1682
|
class="layout-topbar-action"
|
|
1946
1683
|
[class.layout-topbar-action-highlight]="isActive()"
|
|
1947
|
-
|
|
1684
|
+
fStyleClass="@next"
|
|
1948
1685
|
enterFromClass="hidden"
|
|
1949
1686
|
enterActiveClass="animate-scalein"
|
|
1950
1687
|
leaveToClass="hidden"
|
|
@@ -1952,11 +1689,11 @@ class AppProfile {
|
|
|
1952
1689
|
[hideOnOutsideClick]="true"
|
|
1953
1690
|
(click)="togglePanel()"
|
|
1954
1691
|
>
|
|
1955
|
-
<
|
|
1692
|
+
<ui-icon name="user"></ui-icon>
|
|
1956
1693
|
<span>{{ 'layout.profile.title' | translate }}</span>
|
|
1957
1694
|
</button>
|
|
1958
1695
|
<div
|
|
1959
|
-
class="hidden absolute top-[3.25rem] z-50 p-4 border border-surface rounded-border origin-top shadow-
|
|
1696
|
+
class="hidden absolute top-[3.25rem] z-50 p-4 border border-surface rounded-border origin-top shadow-xl w-[calc(100vw-2rem)] sm:w-auto sm:min-w-[280px] max-w-[320px]"
|
|
1960
1697
|
style="background-color: var(--surface-overlay); inset-inline-end: 0;"
|
|
1961
1698
|
>
|
|
1962
1699
|
<div class="flex flex-col gap-3">
|
|
@@ -1975,7 +1712,7 @@ class AppProfile {
|
|
|
1975
1712
|
<div
|
|
1976
1713
|
class="w-12 h-12 rounded-border bg-primary flex items-center justify-center"
|
|
1977
1714
|
>
|
|
1978
|
-
<
|
|
1715
|
+
<ui-icon name="user" class="text-xl text-primary-contrast"></ui-icon>
|
|
1979
1716
|
</div>
|
|
1980
1717
|
}
|
|
1981
1718
|
<div class="flex flex-col min-w-0 flex-1">
|
|
@@ -1998,7 +1735,7 @@ class AppProfile {
|
|
|
1998
1735
|
class="flex items-center gap-3 p-3 rounded-border cursor-pointer no-underline text-color hover:bg-emphasis transition-all duration-200"
|
|
1999
1736
|
(click)="copySignUpLink()"
|
|
2000
1737
|
>
|
|
2001
|
-
<
|
|
1738
|
+
<ui-icon name="link" class="text-muted-color"></ui-icon>
|
|
2002
1739
|
<span>{{ 'layout.profile.copy.sign.up.link' | translate }}</span>
|
|
2003
1740
|
</a>
|
|
2004
1741
|
}
|
|
@@ -2006,26 +1743,26 @@ class AppProfile {
|
|
|
2006
1743
|
class="flex items-center gap-3 p-3 rounded-border cursor-pointer no-underline text-color hover:bg-emphasis transition-all duration-200"
|
|
2007
1744
|
(click)="logout()"
|
|
2008
1745
|
>
|
|
2009
|
-
<
|
|
1746
|
+
<ui-icon name="sign-out" class="text-muted-color"></ui-icon>
|
|
2010
1747
|
<span>{{ 'layout.profile.logout' | translate }}</span>
|
|
2011
1748
|
</a>
|
|
2012
1749
|
</div>
|
|
2013
1750
|
</div>
|
|
2014
1751
|
</div>
|
|
2015
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type:
|
|
1752
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "directive", type: i1.StyleClassDirective, selector: "[fStyleClass]", inputs: ["fStyleClass", "enterFromClass", "enterActiveClass", "enterToClass", "leaveFromClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass"] }, { kind: "component", type: i1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill"] }, { kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i2$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "directive", type: i3.IsEmptyImageDirective, selector: "img", inputs: ["src"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
2016
1753
|
}
|
|
2017
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
1754
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppProfile, decorators: [{
|
|
2018
1755
|
type: Component,
|
|
2019
1756
|
args: [{
|
|
2020
1757
|
selector: 'app-profile',
|
|
2021
|
-
imports: [
|
|
1758
|
+
imports: [UiModule, AngularModule, TranslatePipe],
|
|
2022
1759
|
host: { class: 'relative' },
|
|
2023
1760
|
template: `
|
|
2024
1761
|
<button
|
|
2025
1762
|
type="button"
|
|
2026
1763
|
class="layout-topbar-action"
|
|
2027
1764
|
[class.layout-topbar-action-highlight]="isActive()"
|
|
2028
|
-
|
|
1765
|
+
fStyleClass="@next"
|
|
2029
1766
|
enterFromClass="hidden"
|
|
2030
1767
|
enterActiveClass="animate-scalein"
|
|
2031
1768
|
leaveToClass="hidden"
|
|
@@ -2033,11 +1770,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2033
1770
|
[hideOnOutsideClick]="true"
|
|
2034
1771
|
(click)="togglePanel()"
|
|
2035
1772
|
>
|
|
2036
|
-
<
|
|
1773
|
+
<ui-icon name="user"></ui-icon>
|
|
2037
1774
|
<span>{{ 'layout.profile.title' | translate }}</span>
|
|
2038
1775
|
</button>
|
|
2039
1776
|
<div
|
|
2040
|
-
class="hidden absolute top-[3.25rem] z-50 p-4 border border-surface rounded-border origin-top shadow-
|
|
1777
|
+
class="hidden absolute top-[3.25rem] z-50 p-4 border border-surface rounded-border origin-top shadow-xl w-[calc(100vw-2rem)] sm:w-auto sm:min-w-[280px] max-w-[320px]"
|
|
2041
1778
|
style="background-color: var(--surface-overlay); inset-inline-end: 0;"
|
|
2042
1779
|
>
|
|
2043
1780
|
<div class="flex flex-col gap-3">
|
|
@@ -2056,7 +1793,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2056
1793
|
<div
|
|
2057
1794
|
class="w-12 h-12 rounded-border bg-primary flex items-center justify-center"
|
|
2058
1795
|
>
|
|
2059
|
-
<
|
|
1796
|
+
<ui-icon name="user" class="text-xl text-primary-contrast"></ui-icon>
|
|
2060
1797
|
</div>
|
|
2061
1798
|
}
|
|
2062
1799
|
<div class="flex flex-col min-w-0 flex-1">
|
|
@@ -2079,7 +1816,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2079
1816
|
class="flex items-center gap-3 p-3 rounded-border cursor-pointer no-underline text-color hover:bg-emphasis transition-all duration-200"
|
|
2080
1817
|
(click)="copySignUpLink()"
|
|
2081
1818
|
>
|
|
2082
|
-
<
|
|
1819
|
+
<ui-icon name="link" class="text-muted-color"></ui-icon>
|
|
2083
1820
|
<span>{{ 'layout.profile.copy.sign.up.link' | translate }}</span>
|
|
2084
1821
|
</a>
|
|
2085
1822
|
}
|
|
@@ -2087,7 +1824,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2087
1824
|
class="flex items-center gap-3 p-3 rounded-border cursor-pointer no-underline text-color hover:bg-emphasis transition-all duration-200"
|
|
2088
1825
|
(click)="logout()"
|
|
2089
1826
|
>
|
|
2090
|
-
<
|
|
1827
|
+
<ui-icon name="sign-out" class="text-muted-color"></ui-icon>
|
|
2091
1828
|
<span>{{ 'layout.profile.logout' | translate }}</span>
|
|
2092
1829
|
</a>
|
|
2093
1830
|
</div>
|
|
@@ -2236,8 +1973,8 @@ class AppSearchbar {
|
|
|
2236
1973
|
this.searchAdapter.onSearch(query);
|
|
2237
1974
|
}
|
|
2238
1975
|
}
|
|
2239
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2240
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
1976
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppSearchbar, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1977
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: AppSearchbar, isStandalone: true, selector: "app-searchbar", viewQueries: [{ propertyName: "searchWrapper", first: true, predicate: ["searchWrapper"], descendants: true, isSignal: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
2241
1978
|
<div
|
|
2242
1979
|
class="search-container h-full"
|
|
2243
1980
|
#searchWrapper
|
|
@@ -2247,23 +1984,20 @@ class AppSearchbar {
|
|
|
2247
1984
|
<!-- Topbar/Mobile Icon Mode -->
|
|
2248
1985
|
<button
|
|
2249
1986
|
type="button"
|
|
2250
|
-
|
|
2251
|
-
pRipple
|
|
2252
|
-
class="search-toggle-btn"
|
|
2253
|
-
icon="pi pi-search"
|
|
1987
|
+
class="search-toggle-btn layout-topbar-action"
|
|
2254
1988
|
(click)="toggleSearch()"
|
|
2255
1989
|
[attr.aria-label]="'layout.topbar.search' | translate"
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
1990
|
+
>
|
|
1991
|
+
<ui-icon name="search"></ui-icon>
|
|
1992
|
+
</button>
|
|
2259
1993
|
|
|
2260
1994
|
@if (isSearchExpanded()) {
|
|
2261
1995
|
<div class="search-dropdown-panel">
|
|
2262
|
-
<
|
|
2263
|
-
<
|
|
1996
|
+
<f-iconfield class="search-iconfield">
|
|
1997
|
+
<f-inputicon class="search-icon"><ui-icon name="search" /></f-inputicon>
|
|
2264
1998
|
<input
|
|
2265
1999
|
type="text"
|
|
2266
|
-
|
|
2000
|
+
fInputText
|
|
2267
2001
|
class="search-input w-full"
|
|
2268
2002
|
[placeholder]="'layout.topbar.search.placeholder' | translate"
|
|
2269
2003
|
[(ngModel)]="searchTerm"
|
|
@@ -2274,7 +2008,7 @@ class AppSearchbar {
|
|
|
2274
2008
|
#searchInput
|
|
2275
2009
|
autocomplete="off"
|
|
2276
2010
|
/>
|
|
2277
|
-
</
|
|
2011
|
+
</f-iconfield>
|
|
2278
2012
|
|
|
2279
2013
|
@if (suggestionsOpen() && suggestions().length > 0) {
|
|
2280
2014
|
<div class="search-suggestions">
|
|
@@ -2293,7 +2027,7 @@ class AppSearchbar {
|
|
|
2293
2027
|
[attr.aria-selected]="idx === focusedIndex()"
|
|
2294
2028
|
>
|
|
2295
2029
|
@if (item.icon) {
|
|
2296
|
-
<
|
|
2030
|
+
<ui-icon [name]="item.icon" class="suggestion-icon"></ui-icon>
|
|
2297
2031
|
}
|
|
2298
2032
|
<span class="suggestion-label">{{ item.label }}</span>
|
|
2299
2033
|
</li>
|
|
@@ -2305,11 +2039,11 @@ class AppSearchbar {
|
|
|
2305
2039
|
}
|
|
2306
2040
|
} @else {
|
|
2307
2041
|
<!-- Desktop Full Input Mode -->
|
|
2308
|
-
<
|
|
2309
|
-
<
|
|
2042
|
+
<f-iconfield class="search-iconfield">
|
|
2043
|
+
<f-inputicon class="search-icon cursor-pointer" (click)="onSearch()"><ui-icon name="search" /></f-inputicon>
|
|
2310
2044
|
<input
|
|
2311
2045
|
type="text"
|
|
2312
|
-
|
|
2046
|
+
fInputText
|
|
2313
2047
|
class="search-input w-full"
|
|
2314
2048
|
[placeholder]="'layout.topbar.search.placeholder' | translate"
|
|
2315
2049
|
[(ngModel)]="searchTerm"
|
|
@@ -2319,7 +2053,7 @@ class AppSearchbar {
|
|
|
2319
2053
|
[attr.aria-label]="'layout.topbar.search' | translate"
|
|
2320
2054
|
#searchInput
|
|
2321
2055
|
/>
|
|
2322
|
-
</
|
|
2056
|
+
</f-iconfield>
|
|
2323
2057
|
|
|
2324
2058
|
@if (suggestionsOpen() && suggestions().length > 0) {
|
|
2325
2059
|
<div class="search-dropdown">
|
|
@@ -2334,7 +2068,7 @@ class AppSearchbar {
|
|
|
2334
2068
|
[attr.aria-selected]="idx === focusedIndex()"
|
|
2335
2069
|
>
|
|
2336
2070
|
@if (item.icon) {
|
|
2337
|
-
<
|
|
2071
|
+
<ui-icon [name]="item.icon" class="suggestion-icon"></ui-icon>
|
|
2338
2072
|
}
|
|
2339
2073
|
<span class="suggestion-label">{{ item.label }}</span>
|
|
2340
2074
|
</li>
|
|
@@ -2344,11 +2078,11 @@ class AppSearchbar {
|
|
|
2344
2078
|
}
|
|
2345
2079
|
}
|
|
2346
2080
|
</div>
|
|
2347
|
-
`, isInline: true, styles: [".search-container{display:flex;align-items:center;position:relative;width:100%;flex:0 1 auto}.search-container.topbar-mode{width:auto}.search-dropdown-panel{position:absolute;top:100%;right:0;margin-top:.5rem;background-color:var(--surface-card);border:1px solid var(--surface-border);border-radius:var(--
|
|
2081
|
+
`, isInline: true, styles: [".search-container{display:flex;align-items:center;position:relative;width:100%;flex:0 1 auto}.search-container.topbar-mode{width:auto}.search-dropdown-panel{position:absolute;top:100%;right:0;margin-top:.5rem;background-color:var(--surface-card);border:1px solid var(--surface-border);border-radius:var(--f-content-border-radius);box-shadow:var(--f-shadow-xl);z-index:1100;padding:1rem .75rem .75rem;min-width:300px;max-width:450px;animation:slideDown .2s ease-out}.search-suggestions{margin-top:.5rem;border-top:1px solid var(--surface-border);padding-top:.5rem;background-color:inherit}.suggestions-list{list-style:none;margin:0;padding:0;max-height:360px;overflow-y:auto;background-color:inherit}.suggestion-item{padding:.75rem 1rem;cursor:pointer;display:flex;align-items:center;gap:.75rem;color:var(--text-color);border-bottom:1px solid var(--surface-border);transition:background-color .15s ease,color .15s ease}.suggestion-item:last-child{border-bottom:none}.suggestion-item:hover,.suggestion-item.focused{background-color:var(--surface-50);color:var(--primary-color)}.suggestion-icon{color:var(--text-color-secondary);font-size:1rem;flex-shrink:0;transition:color .15s ease}.suggestion-item:hover .suggestion-icon,.suggestion-item.focused .suggestion-icon{color:var(--primary-color)}.suggestion-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-dropdown{position:absolute;top:calc(100% + .5rem);left:0;right:0;background-color:var(--surface-card);border:1px solid var(--surface-border);border-radius:var(--f-content-border-radius);box-shadow:var(--f-shadow-xl);z-index:1000;overflow:hidden}.search-dropdown .suggestions-list{background-color:inherit}@keyframes slideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@media(max-width:768px){.search-dropdown-panel{min-width:280px;max-width:400px}}@media(max-width:576px){.search-dropdown-panel{position:fixed;top:4rem;left:0;right:0;bottom:auto;width:100vw;min-width:100vw;max-width:100vw;margin-top:0;padding:1rem;border-radius:0;border-bottom:1px solid var(--surface-border);z-index:1200}.search-dropdown-panel .search-iconfield{margin-bottom:1rem}.search-dropdown{max-width:100%;left:0!important;right:0!important;transform:none;position:static;border-radius:var(--f-content-border-radius);margin-top:0}.suggestion-item{padding:.75rem}}\n"], dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "component", type: i1.IconFieldComponent, selector: "f-iconfield" }, { kind: "component", type: i1.InputIconComponent, selector: "f-inputicon", inputs: ["styleClass"] }, { kind: "directive", type: i1.InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched"] }, { kind: "component", type: i1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill"] }, { kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
2348
2082
|
}
|
|
2349
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2083
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppSearchbar, decorators: [{
|
|
2350
2084
|
type: Component,
|
|
2351
|
-
args: [{ selector: 'app-searchbar', imports: [
|
|
2085
|
+
args: [{ selector: 'app-searchbar', imports: [UiModule, AngularModule, TranslatePipe], template: `
|
|
2352
2086
|
<div
|
|
2353
2087
|
class="search-container h-full"
|
|
2354
2088
|
#searchWrapper
|
|
@@ -2358,23 +2092,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2358
2092
|
<!-- Topbar/Mobile Icon Mode -->
|
|
2359
2093
|
<button
|
|
2360
2094
|
type="button"
|
|
2361
|
-
|
|
2362
|
-
pRipple
|
|
2363
|
-
class="search-toggle-btn"
|
|
2364
|
-
icon="pi pi-search"
|
|
2095
|
+
class="search-toggle-btn layout-topbar-action"
|
|
2365
2096
|
(click)="toggleSearch()"
|
|
2366
2097
|
[attr.aria-label]="'layout.topbar.search' | translate"
|
|
2367
|
-
|
|
2368
|
-
|
|
2369
|
-
|
|
2098
|
+
>
|
|
2099
|
+
<ui-icon name="search"></ui-icon>
|
|
2100
|
+
</button>
|
|
2370
2101
|
|
|
2371
2102
|
@if (isSearchExpanded()) {
|
|
2372
2103
|
<div class="search-dropdown-panel">
|
|
2373
|
-
<
|
|
2374
|
-
<
|
|
2104
|
+
<f-iconfield class="search-iconfield">
|
|
2105
|
+
<f-inputicon class="search-icon"><ui-icon name="search" /></f-inputicon>
|
|
2375
2106
|
<input
|
|
2376
2107
|
type="text"
|
|
2377
|
-
|
|
2108
|
+
fInputText
|
|
2378
2109
|
class="search-input w-full"
|
|
2379
2110
|
[placeholder]="'layout.topbar.search.placeholder' | translate"
|
|
2380
2111
|
[(ngModel)]="searchTerm"
|
|
@@ -2385,7 +2116,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2385
2116
|
#searchInput
|
|
2386
2117
|
autocomplete="off"
|
|
2387
2118
|
/>
|
|
2388
|
-
</
|
|
2119
|
+
</f-iconfield>
|
|
2389
2120
|
|
|
2390
2121
|
@if (suggestionsOpen() && suggestions().length > 0) {
|
|
2391
2122
|
<div class="search-suggestions">
|
|
@@ -2404,7 +2135,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2404
2135
|
[attr.aria-selected]="idx === focusedIndex()"
|
|
2405
2136
|
>
|
|
2406
2137
|
@if (item.icon) {
|
|
2407
|
-
<
|
|
2138
|
+
<ui-icon [name]="item.icon" class="suggestion-icon"></ui-icon>
|
|
2408
2139
|
}
|
|
2409
2140
|
<span class="suggestion-label">{{ item.label }}</span>
|
|
2410
2141
|
</li>
|
|
@@ -2416,11 +2147,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2416
2147
|
}
|
|
2417
2148
|
} @else {
|
|
2418
2149
|
<!-- Desktop Full Input Mode -->
|
|
2419
|
-
<
|
|
2420
|
-
<
|
|
2150
|
+
<f-iconfield class="search-iconfield">
|
|
2151
|
+
<f-inputicon class="search-icon cursor-pointer" (click)="onSearch()"><ui-icon name="search" /></f-inputicon>
|
|
2421
2152
|
<input
|
|
2422
2153
|
type="text"
|
|
2423
|
-
|
|
2154
|
+
fInputText
|
|
2424
2155
|
class="search-input w-full"
|
|
2425
2156
|
[placeholder]="'layout.topbar.search.placeholder' | translate"
|
|
2426
2157
|
[(ngModel)]="searchTerm"
|
|
@@ -2430,7 +2161,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2430
2161
|
[attr.aria-label]="'layout.topbar.search' | translate"
|
|
2431
2162
|
#searchInput
|
|
2432
2163
|
/>
|
|
2433
|
-
</
|
|
2164
|
+
</f-iconfield>
|
|
2434
2165
|
|
|
2435
2166
|
@if (suggestionsOpen() && suggestions().length > 0) {
|
|
2436
2167
|
<div class="search-dropdown">
|
|
@@ -2445,7 +2176,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2445
2176
|
[attr.aria-selected]="idx === focusedIndex()"
|
|
2446
2177
|
>
|
|
2447
2178
|
@if (item.icon) {
|
|
2448
|
-
<
|
|
2179
|
+
<ui-icon [name]="item.icon" class="suggestion-icon"></ui-icon>
|
|
2449
2180
|
}
|
|
2450
2181
|
<span class="suggestion-label">{{ item.label }}</span>
|
|
2451
2182
|
</li>
|
|
@@ -2455,7 +2186,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2455
2186
|
}
|
|
2456
2187
|
}
|
|
2457
2188
|
</div>
|
|
2458
|
-
`, styles: [".search-container{display:flex;align-items:center;position:relative;width:100%;flex:0 1 auto}.search-container.topbar-mode{width:auto}.search-dropdown-panel{position:absolute;top:100%;right:0;margin-top:.5rem;background-color:var(--surface-card);border:1px solid var(--surface-border);border-radius:var(--
|
|
2189
|
+
`, styles: [".search-container{display:flex;align-items:center;position:relative;width:100%;flex:0 1 auto}.search-container.topbar-mode{width:auto}.search-dropdown-panel{position:absolute;top:100%;right:0;margin-top:.5rem;background-color:var(--surface-card);border:1px solid var(--surface-border);border-radius:var(--f-content-border-radius);box-shadow:var(--f-shadow-xl);z-index:1100;padding:1rem .75rem .75rem;min-width:300px;max-width:450px;animation:slideDown .2s ease-out}.search-suggestions{margin-top:.5rem;border-top:1px solid var(--surface-border);padding-top:.5rem;background-color:inherit}.suggestions-list{list-style:none;margin:0;padding:0;max-height:360px;overflow-y:auto;background-color:inherit}.suggestion-item{padding:.75rem 1rem;cursor:pointer;display:flex;align-items:center;gap:.75rem;color:var(--text-color);border-bottom:1px solid var(--surface-border);transition:background-color .15s ease,color .15s ease}.suggestion-item:last-child{border-bottom:none}.suggestion-item:hover,.suggestion-item.focused{background-color:var(--surface-50);color:var(--primary-color)}.suggestion-icon{color:var(--text-color-secondary);font-size:1rem;flex-shrink:0;transition:color .15s ease}.suggestion-item:hover .suggestion-icon,.suggestion-item.focused .suggestion-icon{color:var(--primary-color)}.suggestion-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-dropdown{position:absolute;top:calc(100% + .5rem);left:0;right:0;background-color:var(--surface-card);border:1px solid var(--surface-border);border-radius:var(--f-content-border-radius);box-shadow:var(--f-shadow-xl);z-index:1000;overflow:hidden}.search-dropdown .suggestions-list{background-color:inherit}@keyframes slideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@media(max-width:768px){.search-dropdown-panel{min-width:280px;max-width:400px}}@media(max-width:576px){.search-dropdown-panel{position:fixed;top:4rem;left:0;right:0;bottom:auto;width:100vw;min-width:100vw;max-width:100vw;margin-top:0;padding:1rem;border-radius:0;border-bottom:1px solid var(--surface-border);z-index:1200}.search-dropdown-panel .search-iconfield{margin-bottom:1rem}.search-dropdown{max-width:100%;left:0!important;right:0!important;transform:none;position:static;border-radius:var(--f-content-border-radius);margin-top:0}.suggestion-item{padding:.75rem}}\n"] }]
|
|
2459
2190
|
}], ctorParameters: () => [], propDecorators: { searchWrapper: [{ type: i0.ViewChild, args: ['searchWrapper', { isSignal: true }] }], searchInput: [{ type: i0.ViewChild, args: ['searchInput', { isSignal: true }] }] } });
|
|
2460
2191
|
|
|
2461
2192
|
class AppTopbar {
|
|
@@ -2525,8 +2256,8 @@ class AppTopbar {
|
|
|
2525
2256
|
li.style.setProperty('--submenu-top', `${top}px`);
|
|
2526
2257
|
});
|
|
2527
2258
|
}
|
|
2528
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2529
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
2259
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppTopbar, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2260
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: AppTopbar, isStandalone: true, selector: "app-topbar", viewQueries: [{ propertyName: "configContainer", first: true, predicate: ["configContainer"], descendants: true, isSignal: true }, { propertyName: "navContainer", first: true, predicate: ["navContainer"], descendants: true, isSignal: true }], ngImport: i0, template: `<div class="layout-topbar">
|
|
2530
2261
|
<div
|
|
2531
2262
|
class="layout-topbar-logo-container"
|
|
2532
2263
|
[class.layout-topbar-logo-container-desktop]="layoutService.isDesktop()"
|
|
@@ -2537,7 +2268,7 @@ class AppTopbar {
|
|
|
2537
2268
|
[attr.aria-label]="'layout.topbar.toggle.menu' | translate"
|
|
2538
2269
|
(click)="layoutService.onMenuToggle()"
|
|
2539
2270
|
>
|
|
2540
|
-
<
|
|
2271
|
+
<ui-icon name="bars"></ui-icon>
|
|
2541
2272
|
</button>
|
|
2542
2273
|
}
|
|
2543
2274
|
<a class="layout-topbar-logo" routerLink="/">
|
|
@@ -2560,7 +2291,7 @@ class AppTopbar {
|
|
|
2560
2291
|
[attr.aria-label]="'layout.topbar.toggle.menu' | translate"
|
|
2561
2292
|
(click)="layoutService.onMenuToggle()"
|
|
2562
2293
|
>
|
|
2563
|
-
<
|
|
2294
|
+
<ui-icon name="bars"></ui-icon>
|
|
2564
2295
|
</button>
|
|
2565
2296
|
}
|
|
2566
2297
|
</div>
|
|
@@ -2588,18 +2319,14 @@ class AppTopbar {
|
|
|
2588
2319
|
[attr.aria-label]="'layout.topbar.toggle.dark.mode' | translate"
|
|
2589
2320
|
(click)="toggleDarkMode()"
|
|
2590
2321
|
>
|
|
2591
|
-
<
|
|
2592
|
-
class="pi"
|
|
2593
|
-
[class.pi-moon]="layoutService.isDarkTheme()"
|
|
2594
|
-
[class.pi-sun]="!layoutService.isDarkTheme()"
|
|
2595
|
-
></i>
|
|
2322
|
+
<ui-icon [name]="layoutService.isDarkTheme() ? 'moon' : 'sun'"></ui-icon>
|
|
2596
2323
|
</button>
|
|
2597
2324
|
<div class="relative" #configContainer>
|
|
2598
2325
|
<button
|
|
2599
2326
|
class="layout-topbar-action"
|
|
2600
2327
|
[class.layout-topbar-action-highlight]="activePanel() === 'config'"
|
|
2601
2328
|
[attr.aria-label]="'layout.topbar.open.theme.settings' | translate"
|
|
2602
|
-
|
|
2329
|
+
fStyleClass="@next"
|
|
2603
2330
|
enterFromClass="hidden"
|
|
2604
2331
|
enterActiveClass="animate-scalein"
|
|
2605
2332
|
leaveToClass="hidden"
|
|
@@ -2607,7 +2334,7 @@ class AppTopbar {
|
|
|
2607
2334
|
[hideOnOutsideClick]="true"
|
|
2608
2335
|
(click)="togglePanel('config')"
|
|
2609
2336
|
>
|
|
2610
|
-
<
|
|
2337
|
+
<ui-icon name="palette"></ui-icon>
|
|
2611
2338
|
</button>
|
|
2612
2339
|
<app-configurator />
|
|
2613
2340
|
</div>
|
|
@@ -2616,14 +2343,14 @@ class AppTopbar {
|
|
|
2616
2343
|
<button
|
|
2617
2344
|
class="layout-topbar-menu-button layout-topbar-action"
|
|
2618
2345
|
[attr.aria-label]="'layout.topbar.more.options' | translate"
|
|
2619
|
-
|
|
2346
|
+
fStyleClass="@next"
|
|
2620
2347
|
enterFromClass="hidden"
|
|
2621
2348
|
enterActiveClass="animate-scalein"
|
|
2622
2349
|
leaveToClass="hidden"
|
|
2623
2350
|
leaveActiveClass="animate-fadeout"
|
|
2624
2351
|
[hideOnOutsideClick]="true"
|
|
2625
2352
|
>
|
|
2626
|
-
<
|
|
2353
|
+
<ui-icon name="ellipsis-v"></ui-icon>
|
|
2627
2354
|
</button>
|
|
2628
2355
|
|
|
2629
2356
|
<div class="layout-topbar-menu hidden lg:block">
|
|
@@ -2644,15 +2371,13 @@ class AppTopbar {
|
|
|
2644
2371
|
</div>
|
|
2645
2372
|
</div>
|
|
2646
2373
|
</div>
|
|
2647
|
-
</div>`, isInline: true, dependencies: [{ kind: "ngmodule", type:
|
|
2374
|
+
</div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "directive", type: i1.StyleClassDirective, selector: "[fStyleClass]", inputs: ["fStyleClass", "enterFromClass", "enterActiveClass", "enterToClass", "leaveFromClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass"] }, { kind: "component", type: i1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: InlineSvgComponent, selector: "inline-svg", inputs: ["src"] }, { kind: "component", type: AppConfigurator, selector: "app-configurator" }, { kind: "component", type: AppMenu, selector: "app-menu" }, { kind: "component", type: AppProfile, selector: "app-profile" }, { kind: "component", type: AppCompanyBranchSelector, selector: "app-company-branch-selector" }, { kind: "component", type: AppLauncher, selector: "app-launcher" }, { kind: "component", type: AppSearchbar, selector: "app-searchbar" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
2648
2375
|
}
|
|
2649
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2376
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppTopbar, decorators: [{
|
|
2650
2377
|
type: Component,
|
|
2651
2378
|
args: [{
|
|
2652
2379
|
selector: 'app-topbar',
|
|
2653
|
-
imports: [
|
|
2654
|
-
RouterModule,
|
|
2655
|
-
StyleClassModule,
|
|
2380
|
+
imports: [UiModule, RouterModule,
|
|
2656
2381
|
NgComponentOutlet,
|
|
2657
2382
|
TranslatePipe,
|
|
2658
2383
|
InlineSvgComponent,
|
|
@@ -2661,8 +2386,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2661
2386
|
AppProfile,
|
|
2662
2387
|
AppCompanyBranchSelector,
|
|
2663
2388
|
AppLauncher,
|
|
2664
|
-
AppSearchbar,
|
|
2665
|
-
],
|
|
2389
|
+
AppSearchbar,],
|
|
2666
2390
|
template: `<div class="layout-topbar">
|
|
2667
2391
|
<div
|
|
2668
2392
|
class="layout-topbar-logo-container"
|
|
@@ -2674,7 +2398,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2674
2398
|
[attr.aria-label]="'layout.topbar.toggle.menu' | translate"
|
|
2675
2399
|
(click)="layoutService.onMenuToggle()"
|
|
2676
2400
|
>
|
|
2677
|
-
<
|
|
2401
|
+
<ui-icon name="bars"></ui-icon>
|
|
2678
2402
|
</button>
|
|
2679
2403
|
}
|
|
2680
2404
|
<a class="layout-topbar-logo" routerLink="/">
|
|
@@ -2697,7 +2421,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2697
2421
|
[attr.aria-label]="'layout.topbar.toggle.menu' | translate"
|
|
2698
2422
|
(click)="layoutService.onMenuToggle()"
|
|
2699
2423
|
>
|
|
2700
|
-
<
|
|
2424
|
+
<ui-icon name="bars"></ui-icon>
|
|
2701
2425
|
</button>
|
|
2702
2426
|
}
|
|
2703
2427
|
</div>
|
|
@@ -2725,18 +2449,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2725
2449
|
[attr.aria-label]="'layout.topbar.toggle.dark.mode' | translate"
|
|
2726
2450
|
(click)="toggleDarkMode()"
|
|
2727
2451
|
>
|
|
2728
|
-
<
|
|
2729
|
-
class="pi"
|
|
2730
|
-
[class.pi-moon]="layoutService.isDarkTheme()"
|
|
2731
|
-
[class.pi-sun]="!layoutService.isDarkTheme()"
|
|
2732
|
-
></i>
|
|
2452
|
+
<ui-icon [name]="layoutService.isDarkTheme() ? 'moon' : 'sun'"></ui-icon>
|
|
2733
2453
|
</button>
|
|
2734
2454
|
<div class="relative" #configContainer>
|
|
2735
2455
|
<button
|
|
2736
2456
|
class="layout-topbar-action"
|
|
2737
2457
|
[class.layout-topbar-action-highlight]="activePanel() === 'config'"
|
|
2738
2458
|
[attr.aria-label]="'layout.topbar.open.theme.settings' | translate"
|
|
2739
|
-
|
|
2459
|
+
fStyleClass="@next"
|
|
2740
2460
|
enterFromClass="hidden"
|
|
2741
2461
|
enterActiveClass="animate-scalein"
|
|
2742
2462
|
leaveToClass="hidden"
|
|
@@ -2744,7 +2464,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2744
2464
|
[hideOnOutsideClick]="true"
|
|
2745
2465
|
(click)="togglePanel('config')"
|
|
2746
2466
|
>
|
|
2747
|
-
<
|
|
2467
|
+
<ui-icon name="palette"></ui-icon>
|
|
2748
2468
|
</button>
|
|
2749
2469
|
<app-configurator />
|
|
2750
2470
|
</div>
|
|
@@ -2753,14 +2473,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2753
2473
|
<button
|
|
2754
2474
|
class="layout-topbar-menu-button layout-topbar-action"
|
|
2755
2475
|
[attr.aria-label]="'layout.topbar.more.options' | translate"
|
|
2756
|
-
|
|
2476
|
+
fStyleClass="@next"
|
|
2757
2477
|
enterFromClass="hidden"
|
|
2758
2478
|
enterActiveClass="animate-scalein"
|
|
2759
2479
|
leaveToClass="hidden"
|
|
2760
2480
|
leaveActiveClass="animate-fadeout"
|
|
2761
2481
|
[hideOnOutsideClick]="true"
|
|
2762
2482
|
>
|
|
2763
|
-
<
|
|
2483
|
+
<ui-icon name="ellipsis-v"></ui-icon>
|
|
2764
2484
|
</button>
|
|
2765
2485
|
|
|
2766
2486
|
<div class="layout-topbar-menu hidden lg:block">
|
|
@@ -2786,14 +2506,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2786
2506
|
}], ctorParameters: () => [], propDecorators: { configContainer: [{ type: i0.ViewChild, args: ['configContainer', { isSignal: true }] }], navContainer: [{ type: i0.ViewChild, args: ['navContainer', { isSignal: true }] }] } });
|
|
2787
2507
|
|
|
2788
2508
|
class AppSidebar {
|
|
2789
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2790
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.
|
|
2509
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppSidebar, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2510
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.6", type: AppSidebar, isStandalone: true, selector: "app-sidebar", ngImport: i0, template: `
|
|
2791
2511
|
<div class="layout-sidebar">
|
|
2792
2512
|
<app-menu />
|
|
2793
2513
|
</div>
|
|
2794
2514
|
`, isInline: true, dependencies: [{ kind: "component", type: AppMenu, selector: "app-menu" }] });
|
|
2795
2515
|
}
|
|
2796
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2516
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppSidebar, decorators: [{
|
|
2797
2517
|
type: Component,
|
|
2798
2518
|
args: [{
|
|
2799
2519
|
selector: 'app-sidebar',
|
|
@@ -2862,23 +2582,32 @@ class AppLayout {
|
|
|
2862
2582
|
unblockBodyScroll() {
|
|
2863
2583
|
this.document.body.classList.remove('blocked-scroll');
|
|
2864
2584
|
}
|
|
2865
|
-
|
|
2866
|
-
|
|
2867
|
-
|
|
2868
|
-
|
|
2869
|
-
|
|
2870
|
-
|
|
2871
|
-
|
|
2872
|
-
|
|
2873
|
-
|
|
2874
|
-
|
|
2875
|
-
|
|
2876
|
-
|
|
2877
|
-
|
|
2878
|
-
...(ngDevMode ? [{ debugName: "
|
|
2879
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2880
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.
|
|
2881
|
-
<div
|
|
2585
|
+
isOverlay = computed(() => this.layoutService.layoutConfig().menuMode === 'overlay', /* @ts-ignore */
|
|
2586
|
+
...(ngDevMode ? [{ debugName: "isOverlay" }] : /* istanbul ignore next */ []));
|
|
2587
|
+
isStatic = computed(() => this.layoutService.layoutConfig().menuMode === 'static', /* @ts-ignore */
|
|
2588
|
+
...(ngDevMode ? [{ debugName: "isStatic" }] : /* istanbul ignore next */ []));
|
|
2589
|
+
isTopbarMode = computed(() => this.layoutService.layoutConfig().menuMode === 'topbar', /* @ts-ignore */
|
|
2590
|
+
...(ngDevMode ? [{ debugName: "isTopbarMode" }] : /* istanbul ignore next */ []));
|
|
2591
|
+
isStaticInactive = computed(() => this.layoutService.layoutState().staticMenuDesktopInactive && this.isStatic(), /* @ts-ignore */
|
|
2592
|
+
...(ngDevMode ? [{ debugName: "isStaticInactive" }] : /* istanbul ignore next */ []));
|
|
2593
|
+
isOverlayActive = computed(() => this.layoutService.layoutState().overlayMenuActive, /* @ts-ignore */
|
|
2594
|
+
...(ngDevMode ? [{ debugName: "isOverlayActive" }] : /* istanbul ignore next */ []));
|
|
2595
|
+
isMobileActive = computed(() => this.layoutService.layoutState().staticMenuMobileActive, /* @ts-ignore */
|
|
2596
|
+
...(ngDevMode ? [{ debugName: "isMobileActive" }] : /* istanbul ignore next */ []));
|
|
2597
|
+
isTopbarNavHidden = computed(() => !this.layoutService.layoutState().topbarMenuVisible && this.isTopbarMode(), /* @ts-ignore */
|
|
2598
|
+
...(ngDevMode ? [{ debugName: "isTopbarNavHidden" }] : /* istanbul ignore next */ []));
|
|
2599
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppLayout, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2600
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.6", type: AppLayout, isStandalone: true, selector: "app-layout", ngImport: i0, template: `
|
|
2601
|
+
<div
|
|
2602
|
+
class="layout-wrapper"
|
|
2603
|
+
[class.layout-overlay]="isOverlay()"
|
|
2604
|
+
[class.layout-static]="isStatic()"
|
|
2605
|
+
[class.layout-topbar-mode]="isTopbarMode()"
|
|
2606
|
+
[class.layout-static-inactive]="isStaticInactive()"
|
|
2607
|
+
[class.layout-overlay-active]="isOverlayActive()"
|
|
2608
|
+
[class.layout-mobile-active]="isMobileActive()"
|
|
2609
|
+
[class.layout-topbar-nav-hidden]="isTopbarNavHidden()"
|
|
2610
|
+
>
|
|
2882
2611
|
<app-topbar></app-topbar>
|
|
2883
2612
|
<app-sidebar></app-sidebar>
|
|
2884
2613
|
<div class="layout-main-container">
|
|
@@ -2889,15 +2618,24 @@ class AppLayout {
|
|
|
2889
2618
|
</div>
|
|
2890
2619
|
<div class="layout-mask animate-fadein"></div>
|
|
2891
2620
|
</div>
|
|
2892
|
-
`, isInline: true, dependencies: [{ kind: "
|
|
2621
|
+
`, isInline: true, dependencies: [{ kind: "component", type: AppTopbar, selector: "app-topbar" }, { kind: "component", type: AppSidebar, selector: "app-sidebar" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2$1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: AppFooter, selector: "app-footer" }] });
|
|
2893
2622
|
}
|
|
2894
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2623
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppLayout, decorators: [{
|
|
2895
2624
|
type: Component,
|
|
2896
2625
|
args: [{
|
|
2897
2626
|
selector: 'app-layout',
|
|
2898
|
-
imports: [
|
|
2627
|
+
imports: [AppTopbar, AppSidebar, RouterModule, AppFooter],
|
|
2899
2628
|
template: `
|
|
2900
|
-
<div
|
|
2629
|
+
<div
|
|
2630
|
+
class="layout-wrapper"
|
|
2631
|
+
[class.layout-overlay]="isOverlay()"
|
|
2632
|
+
[class.layout-static]="isStatic()"
|
|
2633
|
+
[class.layout-topbar-mode]="isTopbarMode()"
|
|
2634
|
+
[class.layout-static-inactive]="isStaticInactive()"
|
|
2635
|
+
[class.layout-overlay-active]="isOverlayActive()"
|
|
2636
|
+
[class.layout-mobile-active]="isMobileActive()"
|
|
2637
|
+
[class.layout-topbar-nav-hidden]="isTopbarNavHidden()"
|
|
2638
|
+
>
|
|
2901
2639
|
<app-topbar></app-topbar>
|
|
2902
2640
|
<app-sidebar></app-sidebar>
|
|
2903
2641
|
<div class="layout-main-container">
|
|
@@ -2912,47 +2650,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2912
2650
|
}]
|
|
2913
2651
|
}], ctorParameters: () => [] });
|
|
2914
2652
|
|
|
2915
|
-
|
|
2916
|
-
|
|
2917
|
-
|
|
2918
|
-
light: {
|
|
2919
|
-
primary: {
|
|
2920
|
-
color: '#3535cd',
|
|
2921
|
-
inverseColor: '#0707a9',
|
|
2922
|
-
hoverColor: '#0707a9',
|
|
2923
|
-
activeColor: '#0707a9',
|
|
2924
|
-
},
|
|
2925
|
-
highlight: {
|
|
2926
|
-
background: '#e2e8f0',
|
|
2927
|
-
focusBackground: '#e2e8f0',
|
|
2928
|
-
color: '#3535cd',
|
|
2929
|
-
focusColor: '#3535cd',
|
|
2930
|
-
},
|
|
2931
|
-
},
|
|
2932
|
-
},
|
|
2933
|
-
},
|
|
2934
|
-
});
|
|
2653
|
+
function buildPreset(presetName, primary) {
|
|
2654
|
+
return { preset: presetName, primary };
|
|
2655
|
+
}
|
|
2935
2656
|
|
|
2936
|
-
const
|
|
2937
|
-
|
|
2938
|
-
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
|
|
2942
|
-
|
|
2943
|
-
|
|
2944
|
-
|
|
2945
|
-
},
|
|
2946
|
-
highlight: {
|
|
2947
|
-
background: '#e2e8f0',
|
|
2948
|
-
focusBackground: '#e2e8f0',
|
|
2949
|
-
color: '#01712c',
|
|
2950
|
-
focusColor: '#01712c',
|
|
2951
|
-
},
|
|
2952
|
-
},
|
|
2953
|
-
},
|
|
2954
|
-
},
|
|
2955
|
-
});
|
|
2657
|
+
const NavyBlueTheme = {
|
|
2658
|
+
preset: 'Aura',
|
|
2659
|
+
primary: 'indigo',
|
|
2660
|
+
};
|
|
2661
|
+
|
|
2662
|
+
const GreenTheme = {
|
|
2663
|
+
preset: 'Aura',
|
|
2664
|
+
primary: 'green',
|
|
2665
|
+
};
|
|
2956
2666
|
|
|
2957
2667
|
const LAYOUT_MESSAGES = {
|
|
2958
2668
|
// components/top-bar/app.profile.ts
|
|
@@ -3005,6 +2715,15 @@ const LAYOUT_MESSAGES = {
|
|
|
3005
2715
|
'menu.task.manager': 'Task Manager',
|
|
3006
2716
|
'menu.notifications': 'Notifications',
|
|
3007
2717
|
'menu.localization': 'Localization',
|
|
2718
|
+
'menu.components': 'Components',
|
|
2719
|
+
'menu.components.display': 'Display',
|
|
2720
|
+
'menu.components.menu': 'Menu',
|
|
2721
|
+
'menu.components.form': 'Form',
|
|
2722
|
+
'menu.components.overlay': 'Overlay',
|
|
2723
|
+
'menu.components.data': 'Data',
|
|
2724
|
+
'menu.components.panel': 'Panel',
|
|
2725
|
+
'menu.components.media': 'Media',
|
|
2726
|
+
'menu.components.misc': 'Directives',
|
|
3008
2727
|
'menu.projects': 'Projects',
|
|
3009
2728
|
'menu.projects.active': 'Active Projects',
|
|
3010
2729
|
'menu.projects.archived': 'Archived',
|
|
@@ -3029,5 +2748,5 @@ const LAYOUT_MESSAGES = {
|
|
|
3029
2748
|
* Generated bundle index. Do not edit.
|
|
3030
2749
|
*/
|
|
3031
2750
|
|
|
3032
|
-
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,
|
|
2751
|
+
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 };
|
|
3033
2752
|
//# sourceMappingURL=flusys-ng-layout.mjs.map
|