@flusys/ng-layout 5.5.0 → 6.0.0-beta.2
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/_rtl.scss +5 -5
- package/assets/layout/_topbar.scss +4 -3
- 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 +340 -613
- 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
|
-
<span class="text-xs opacity-70"
|
|
1288
|
+
<span class="text-xs opacity-70 ml-1">| {{ 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
|
-
<span class="text-xs opacity-70"
|
|
1383
|
+
<span class="text-xs opacity-70 ml-1">| {{ 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,129 @@ 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 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
1517
|
<div
|
|
1779
|
-
class="flex items-center justify-center w-
|
|
1518
|
+
class="flex items-center justify-center w-9 h-9 rounded-border bg-primary/10 group-hover:bg-primary transition-colors duration-150"
|
|
1780
1519
|
>
|
|
1781
|
-
<
|
|
1782
|
-
[
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
/>
|
|
1520
|
+
<ui-icon
|
|
1521
|
+
[name]="app.icon"
|
|
1522
|
+
class="text-base text-primary group-hover:text-primary-contrast transition-colors duration-150"
|
|
1523
|
+
></ui-icon>
|
|
1786
1524
|
</div>
|
|
1787
1525
|
<span
|
|
1788
|
-
class="text-xs
|
|
1789
|
-
>{{ app.nameKey ? (app.nameKey | translate) : app.name }}</span
|
|
1526
|
+
class="text-xs text-center text-muted-color group-hover:text-color transition-colors duration-150 truncate w-full text-center leading-tight"
|
|
1790
1527
|
>
|
|
1528
|
+
{{ app.nameKey ? (app.nameKey | translate) : app.name }}
|
|
1529
|
+
</span>
|
|
1791
1530
|
</a>
|
|
1792
1531
|
}
|
|
1793
1532
|
</div>
|
|
1794
|
-
|
|
1533
|
+
}
|
|
1795
1534
|
</div>
|
|
1796
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type:
|
|
1535
|
+
`, 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
1536
|
}
|
|
1798
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
1537
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppLauncher, decorators: [{
|
|
1799
1538
|
type: Component,
|
|
1800
1539
|
args: [{
|
|
1801
1540
|
selector: 'app-launcher',
|
|
1802
|
-
imports: [
|
|
1541
|
+
imports: [UiModule, TranslatePipe],
|
|
1803
1542
|
host: { class: 'relative' },
|
|
1804
1543
|
template: `
|
|
1805
1544
|
<button
|
|
1806
1545
|
type="button"
|
|
1807
1546
|
class="layout-topbar-action"
|
|
1808
1547
|
[class.layout-topbar-action-highlight]="isActive()"
|
|
1809
|
-
|
|
1548
|
+
fStyleClass="@next"
|
|
1810
1549
|
enterFromClass="hidden"
|
|
1811
1550
|
enterActiveClass="animate-scalein"
|
|
1812
1551
|
leaveToClass="hidden"
|
|
1813
1552
|
leaveActiveClass="animate-fadeout"
|
|
1814
1553
|
[hideOnOutsideClick]="true"
|
|
1815
|
-
(click)="
|
|
1554
|
+
(click)="toggleActive()"
|
|
1816
1555
|
>
|
|
1817
|
-
<
|
|
1556
|
+
<ui-icon name="th-large"></ui-icon>
|
|
1818
1557
|
<span>{{ 'layout.launcher.apps' | translate }}</span>
|
|
1819
1558
|
</button>
|
|
1820
1559
|
<div
|
|
1821
|
-
class="hidden absolute top-[3.25rem] z-50
|
|
1822
|
-
style="
|
|
1560
|
+
class="hidden absolute top-[3.25rem] z-50 border border-surface rounded-border origin-top surface-overlay"
|
|
1561
|
+
style="inset-inline-end: 0; min-width: 16rem; max-width: 22rem; width: calc(100vw - 2rem); box-shadow: var(--f-shadow-xl);"
|
|
1823
1562
|
>
|
|
1824
|
-
<div class="
|
|
1825
|
-
<span class="text-
|
|
1563
|
+
<div class="px-4 py-3 border-b border-surface">
|
|
1564
|
+
<span class="text-xs font-semibold tracking-wide text-muted-color">{{
|
|
1826
1565
|
'layout.launcher.applications' | translate
|
|
1827
1566
|
}}</span>
|
|
1828
|
-
|
|
1567
|
+
</div>
|
|
1568
|
+
@if (layoutService.apps().length === 0) {
|
|
1569
|
+
<div class="px-4 py-6 text-center text-muted-color text-sm">
|
|
1570
|
+
{{ 'layout.launcher.no.apps' | translate }}
|
|
1571
|
+
</div>
|
|
1572
|
+
} @else {
|
|
1573
|
+
<div class="p-3 grid grid-cols-3 gap-1">
|
|
1829
1574
|
@for (app of layoutService.apps(); track app.id) {
|
|
1830
1575
|
<a
|
|
1831
|
-
class="group flex flex-col items-center
|
|
1576
|
+
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
1577
|
[href]="app.url"
|
|
1833
1578
|
target="_blank"
|
|
1834
1579
|
rel="noopener noreferrer"
|
|
1835
1580
|
>
|
|
1836
1581
|
<div
|
|
1837
|
-
class="flex items-center justify-center w-
|
|
1582
|
+
class="flex items-center justify-center w-9 h-9 rounded-border bg-primary/10 group-hover:bg-primary transition-colors duration-150"
|
|
1838
1583
|
>
|
|
1839
|
-
<
|
|
1840
|
-
[
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
/>
|
|
1584
|
+
<ui-icon
|
|
1585
|
+
[name]="app.icon"
|
|
1586
|
+
class="text-base text-primary group-hover:text-primary-contrast transition-colors duration-150"
|
|
1587
|
+
></ui-icon>
|
|
1844
1588
|
</div>
|
|
1845
1589
|
<span
|
|
1846
|
-
class="text-xs
|
|
1847
|
-
>{{ app.nameKey ? (app.nameKey | translate) : app.name }}</span
|
|
1590
|
+
class="text-xs text-center text-muted-color group-hover:text-color transition-colors duration-150 truncate w-full text-center leading-tight"
|
|
1848
1591
|
>
|
|
1592
|
+
{{ app.nameKey ? (app.nameKey | translate) : app.name }}
|
|
1593
|
+
</span>
|
|
1849
1594
|
</a>
|
|
1850
1595
|
}
|
|
1851
1596
|
</div>
|
|
1852
|
-
|
|
1597
|
+
}
|
|
1853
1598
|
</div>
|
|
1854
1599
|
`,
|
|
1855
1600
|
}]
|
|
@@ -1938,13 +1683,13 @@ class AppProfile {
|
|
|
1938
1683
|
translate(key, vars) {
|
|
1939
1684
|
return this.translateAdapter?.translate(key, vars) ?? key;
|
|
1940
1685
|
}
|
|
1941
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
1942
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
1686
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppProfile, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1687
|
+
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
1688
|
<button
|
|
1944
1689
|
type="button"
|
|
1945
1690
|
class="layout-topbar-action"
|
|
1946
1691
|
[class.layout-topbar-action-highlight]="isActive()"
|
|
1947
|
-
|
|
1692
|
+
fStyleClass="@next"
|
|
1948
1693
|
enterFromClass="hidden"
|
|
1949
1694
|
enterActiveClass="animate-scalein"
|
|
1950
1695
|
leaveToClass="hidden"
|
|
@@ -1952,11 +1697,11 @@ class AppProfile {
|
|
|
1952
1697
|
[hideOnOutsideClick]="true"
|
|
1953
1698
|
(click)="togglePanel()"
|
|
1954
1699
|
>
|
|
1955
|
-
<
|
|
1700
|
+
<ui-icon name="user"></ui-icon>
|
|
1956
1701
|
<span>{{ 'layout.profile.title' | translate }}</span>
|
|
1957
1702
|
</button>
|
|
1958
1703
|
<div
|
|
1959
|
-
class="hidden absolute top-[3.25rem] z-50 p-4 border border-surface rounded-border origin-top shadow-
|
|
1704
|
+
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
1705
|
style="background-color: var(--surface-overlay); inset-inline-end: 0;"
|
|
1961
1706
|
>
|
|
1962
1707
|
<div class="flex flex-col gap-3">
|
|
@@ -1975,7 +1720,7 @@ class AppProfile {
|
|
|
1975
1720
|
<div
|
|
1976
1721
|
class="w-12 h-12 rounded-border bg-primary flex items-center justify-center"
|
|
1977
1722
|
>
|
|
1978
|
-
<
|
|
1723
|
+
<ui-icon name="user" class="text-xl text-primary-contrast"></ui-icon>
|
|
1979
1724
|
</div>
|
|
1980
1725
|
}
|
|
1981
1726
|
<div class="flex flex-col min-w-0 flex-1">
|
|
@@ -1998,7 +1743,7 @@ class AppProfile {
|
|
|
1998
1743
|
class="flex items-center gap-3 p-3 rounded-border cursor-pointer no-underline text-color hover:bg-emphasis transition-all duration-200"
|
|
1999
1744
|
(click)="copySignUpLink()"
|
|
2000
1745
|
>
|
|
2001
|
-
<
|
|
1746
|
+
<ui-icon name="link" class="text-muted-color"></ui-icon>
|
|
2002
1747
|
<span>{{ 'layout.profile.copy.sign.up.link' | translate }}</span>
|
|
2003
1748
|
</a>
|
|
2004
1749
|
}
|
|
@@ -2006,26 +1751,26 @@ class AppProfile {
|
|
|
2006
1751
|
class="flex items-center gap-3 p-3 rounded-border cursor-pointer no-underline text-color hover:bg-emphasis transition-all duration-200"
|
|
2007
1752
|
(click)="logout()"
|
|
2008
1753
|
>
|
|
2009
|
-
<
|
|
1754
|
+
<ui-icon name="sign-out" class="text-muted-color"></ui-icon>
|
|
2010
1755
|
<span>{{ 'layout.profile.logout' | translate }}</span>
|
|
2011
1756
|
</a>
|
|
2012
1757
|
</div>
|
|
2013
1758
|
</div>
|
|
2014
1759
|
</div>
|
|
2015
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type:
|
|
1760
|
+
`, 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
1761
|
}
|
|
2017
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
1762
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppProfile, decorators: [{
|
|
2018
1763
|
type: Component,
|
|
2019
1764
|
args: [{
|
|
2020
1765
|
selector: 'app-profile',
|
|
2021
|
-
imports: [
|
|
1766
|
+
imports: [UiModule, AngularModule, TranslatePipe],
|
|
2022
1767
|
host: { class: 'relative' },
|
|
2023
1768
|
template: `
|
|
2024
1769
|
<button
|
|
2025
1770
|
type="button"
|
|
2026
1771
|
class="layout-topbar-action"
|
|
2027
1772
|
[class.layout-topbar-action-highlight]="isActive()"
|
|
2028
|
-
|
|
1773
|
+
fStyleClass="@next"
|
|
2029
1774
|
enterFromClass="hidden"
|
|
2030
1775
|
enterActiveClass="animate-scalein"
|
|
2031
1776
|
leaveToClass="hidden"
|
|
@@ -2033,11 +1778,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2033
1778
|
[hideOnOutsideClick]="true"
|
|
2034
1779
|
(click)="togglePanel()"
|
|
2035
1780
|
>
|
|
2036
|
-
<
|
|
1781
|
+
<ui-icon name="user"></ui-icon>
|
|
2037
1782
|
<span>{{ 'layout.profile.title' | translate }}</span>
|
|
2038
1783
|
</button>
|
|
2039
1784
|
<div
|
|
2040
|
-
class="hidden absolute top-[3.25rem] z-50 p-4 border border-surface rounded-border origin-top shadow-
|
|
1785
|
+
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
1786
|
style="background-color: var(--surface-overlay); inset-inline-end: 0;"
|
|
2042
1787
|
>
|
|
2043
1788
|
<div class="flex flex-col gap-3">
|
|
@@ -2056,7 +1801,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2056
1801
|
<div
|
|
2057
1802
|
class="w-12 h-12 rounded-border bg-primary flex items-center justify-center"
|
|
2058
1803
|
>
|
|
2059
|
-
<
|
|
1804
|
+
<ui-icon name="user" class="text-xl text-primary-contrast"></ui-icon>
|
|
2060
1805
|
</div>
|
|
2061
1806
|
}
|
|
2062
1807
|
<div class="flex flex-col min-w-0 flex-1">
|
|
@@ -2079,7 +1824,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2079
1824
|
class="flex items-center gap-3 p-3 rounded-border cursor-pointer no-underline text-color hover:bg-emphasis transition-all duration-200"
|
|
2080
1825
|
(click)="copySignUpLink()"
|
|
2081
1826
|
>
|
|
2082
|
-
<
|
|
1827
|
+
<ui-icon name="link" class="text-muted-color"></ui-icon>
|
|
2083
1828
|
<span>{{ 'layout.profile.copy.sign.up.link' | translate }}</span>
|
|
2084
1829
|
</a>
|
|
2085
1830
|
}
|
|
@@ -2087,7 +1832,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2087
1832
|
class="flex items-center gap-3 p-3 rounded-border cursor-pointer no-underline text-color hover:bg-emphasis transition-all duration-200"
|
|
2088
1833
|
(click)="logout()"
|
|
2089
1834
|
>
|
|
2090
|
-
<
|
|
1835
|
+
<ui-icon name="sign-out" class="text-muted-color"></ui-icon>
|
|
2091
1836
|
<span>{{ 'layout.profile.logout' | translate }}</span>
|
|
2092
1837
|
</a>
|
|
2093
1838
|
</div>
|
|
@@ -2236,8 +1981,8 @@ class AppSearchbar {
|
|
|
2236
1981
|
this.searchAdapter.onSearch(query);
|
|
2237
1982
|
}
|
|
2238
1983
|
}
|
|
2239
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2240
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
1984
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppSearchbar, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1985
|
+
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
1986
|
<div
|
|
2242
1987
|
class="search-container h-full"
|
|
2243
1988
|
#searchWrapper
|
|
@@ -2247,23 +1992,20 @@ class AppSearchbar {
|
|
|
2247
1992
|
<!-- Topbar/Mobile Icon Mode -->
|
|
2248
1993
|
<button
|
|
2249
1994
|
type="button"
|
|
2250
|
-
|
|
2251
|
-
pRipple
|
|
2252
|
-
class="search-toggle-btn"
|
|
2253
|
-
icon="pi pi-search"
|
|
1995
|
+
class="search-toggle-btn layout-topbar-action"
|
|
2254
1996
|
(click)="toggleSearch()"
|
|
2255
1997
|
[attr.aria-label]="'layout.topbar.search' | translate"
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
1998
|
+
>
|
|
1999
|
+
<ui-icon name="search"></ui-icon>
|
|
2000
|
+
</button>
|
|
2259
2001
|
|
|
2260
2002
|
@if (isSearchExpanded()) {
|
|
2261
2003
|
<div class="search-dropdown-panel">
|
|
2262
|
-
<
|
|
2263
|
-
<
|
|
2004
|
+
<f-iconfield class="search-iconfield">
|
|
2005
|
+
<f-inputicon class="search-icon"><ui-icon name="search" /></f-inputicon>
|
|
2264
2006
|
<input
|
|
2265
2007
|
type="text"
|
|
2266
|
-
|
|
2008
|
+
fInputText
|
|
2267
2009
|
class="search-input w-full"
|
|
2268
2010
|
[placeholder]="'layout.topbar.search.placeholder' | translate"
|
|
2269
2011
|
[(ngModel)]="searchTerm"
|
|
@@ -2274,7 +2016,7 @@ class AppSearchbar {
|
|
|
2274
2016
|
#searchInput
|
|
2275
2017
|
autocomplete="off"
|
|
2276
2018
|
/>
|
|
2277
|
-
</
|
|
2019
|
+
</f-iconfield>
|
|
2278
2020
|
|
|
2279
2021
|
@if (suggestionsOpen() && suggestions().length > 0) {
|
|
2280
2022
|
<div class="search-suggestions">
|
|
@@ -2293,7 +2035,7 @@ class AppSearchbar {
|
|
|
2293
2035
|
[attr.aria-selected]="idx === focusedIndex()"
|
|
2294
2036
|
>
|
|
2295
2037
|
@if (item.icon) {
|
|
2296
|
-
<
|
|
2038
|
+
<ui-icon [name]="item.icon" class="suggestion-icon"></ui-icon>
|
|
2297
2039
|
}
|
|
2298
2040
|
<span class="suggestion-label">{{ item.label }}</span>
|
|
2299
2041
|
</li>
|
|
@@ -2305,11 +2047,11 @@ class AppSearchbar {
|
|
|
2305
2047
|
}
|
|
2306
2048
|
} @else {
|
|
2307
2049
|
<!-- Desktop Full Input Mode -->
|
|
2308
|
-
<
|
|
2309
|
-
<
|
|
2050
|
+
<f-iconfield class="search-iconfield">
|
|
2051
|
+
<f-inputicon class="search-icon cursor-pointer" (click)="onSearch()"><ui-icon name="search" /></f-inputicon>
|
|
2310
2052
|
<input
|
|
2311
2053
|
type="text"
|
|
2312
|
-
|
|
2054
|
+
fInputText
|
|
2313
2055
|
class="search-input w-full"
|
|
2314
2056
|
[placeholder]="'layout.topbar.search.placeholder' | translate"
|
|
2315
2057
|
[(ngModel)]="searchTerm"
|
|
@@ -2319,7 +2061,7 @@ class AppSearchbar {
|
|
|
2319
2061
|
[attr.aria-label]="'layout.topbar.search' | translate"
|
|
2320
2062
|
#searchInput
|
|
2321
2063
|
/>
|
|
2322
|
-
</
|
|
2064
|
+
</f-iconfield>
|
|
2323
2065
|
|
|
2324
2066
|
@if (suggestionsOpen() && suggestions().length > 0) {
|
|
2325
2067
|
<div class="search-dropdown">
|
|
@@ -2334,7 +2076,7 @@ class AppSearchbar {
|
|
|
2334
2076
|
[attr.aria-selected]="idx === focusedIndex()"
|
|
2335
2077
|
>
|
|
2336
2078
|
@if (item.icon) {
|
|
2337
|
-
<
|
|
2079
|
+
<ui-icon [name]="item.icon" class="suggestion-icon"></ui-icon>
|
|
2338
2080
|
}
|
|
2339
2081
|
<span class="suggestion-label">{{ item.label }}</span>
|
|
2340
2082
|
</li>
|
|
@@ -2344,11 +2086,11 @@ class AppSearchbar {
|
|
|
2344
2086
|
}
|
|
2345
2087
|
}
|
|
2346
2088
|
</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(--
|
|
2089
|
+
`, 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
2090
|
}
|
|
2349
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2091
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppSearchbar, decorators: [{
|
|
2350
2092
|
type: Component,
|
|
2351
|
-
args: [{ selector: 'app-searchbar', imports: [
|
|
2093
|
+
args: [{ selector: 'app-searchbar', imports: [UiModule, AngularModule, TranslatePipe], template: `
|
|
2352
2094
|
<div
|
|
2353
2095
|
class="search-container h-full"
|
|
2354
2096
|
#searchWrapper
|
|
@@ -2358,23 +2100,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2358
2100
|
<!-- Topbar/Mobile Icon Mode -->
|
|
2359
2101
|
<button
|
|
2360
2102
|
type="button"
|
|
2361
|
-
|
|
2362
|
-
pRipple
|
|
2363
|
-
class="search-toggle-btn"
|
|
2364
|
-
icon="pi pi-search"
|
|
2103
|
+
class="search-toggle-btn layout-topbar-action"
|
|
2365
2104
|
(click)="toggleSearch()"
|
|
2366
2105
|
[attr.aria-label]="'layout.topbar.search' | translate"
|
|
2367
|
-
|
|
2368
|
-
|
|
2369
|
-
|
|
2106
|
+
>
|
|
2107
|
+
<ui-icon name="search"></ui-icon>
|
|
2108
|
+
</button>
|
|
2370
2109
|
|
|
2371
2110
|
@if (isSearchExpanded()) {
|
|
2372
2111
|
<div class="search-dropdown-panel">
|
|
2373
|
-
<
|
|
2374
|
-
<
|
|
2112
|
+
<f-iconfield class="search-iconfield">
|
|
2113
|
+
<f-inputicon class="search-icon"><ui-icon name="search" /></f-inputicon>
|
|
2375
2114
|
<input
|
|
2376
2115
|
type="text"
|
|
2377
|
-
|
|
2116
|
+
fInputText
|
|
2378
2117
|
class="search-input w-full"
|
|
2379
2118
|
[placeholder]="'layout.topbar.search.placeholder' | translate"
|
|
2380
2119
|
[(ngModel)]="searchTerm"
|
|
@@ -2385,7 +2124,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2385
2124
|
#searchInput
|
|
2386
2125
|
autocomplete="off"
|
|
2387
2126
|
/>
|
|
2388
|
-
</
|
|
2127
|
+
</f-iconfield>
|
|
2389
2128
|
|
|
2390
2129
|
@if (suggestionsOpen() && suggestions().length > 0) {
|
|
2391
2130
|
<div class="search-suggestions">
|
|
@@ -2404,7 +2143,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2404
2143
|
[attr.aria-selected]="idx === focusedIndex()"
|
|
2405
2144
|
>
|
|
2406
2145
|
@if (item.icon) {
|
|
2407
|
-
<
|
|
2146
|
+
<ui-icon [name]="item.icon" class="suggestion-icon"></ui-icon>
|
|
2408
2147
|
}
|
|
2409
2148
|
<span class="suggestion-label">{{ item.label }}</span>
|
|
2410
2149
|
</li>
|
|
@@ -2416,11 +2155,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2416
2155
|
}
|
|
2417
2156
|
} @else {
|
|
2418
2157
|
<!-- Desktop Full Input Mode -->
|
|
2419
|
-
<
|
|
2420
|
-
<
|
|
2158
|
+
<f-iconfield class="search-iconfield">
|
|
2159
|
+
<f-inputicon class="search-icon cursor-pointer" (click)="onSearch()"><ui-icon name="search" /></f-inputicon>
|
|
2421
2160
|
<input
|
|
2422
2161
|
type="text"
|
|
2423
|
-
|
|
2162
|
+
fInputText
|
|
2424
2163
|
class="search-input w-full"
|
|
2425
2164
|
[placeholder]="'layout.topbar.search.placeholder' | translate"
|
|
2426
2165
|
[(ngModel)]="searchTerm"
|
|
@@ -2430,7 +2169,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2430
2169
|
[attr.aria-label]="'layout.topbar.search' | translate"
|
|
2431
2170
|
#searchInput
|
|
2432
2171
|
/>
|
|
2433
|
-
</
|
|
2172
|
+
</f-iconfield>
|
|
2434
2173
|
|
|
2435
2174
|
@if (suggestionsOpen() && suggestions().length > 0) {
|
|
2436
2175
|
<div class="search-dropdown">
|
|
@@ -2445,7 +2184,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2445
2184
|
[attr.aria-selected]="idx === focusedIndex()"
|
|
2446
2185
|
>
|
|
2447
2186
|
@if (item.icon) {
|
|
2448
|
-
<
|
|
2187
|
+
<ui-icon [name]="item.icon" class="suggestion-icon"></ui-icon>
|
|
2449
2188
|
}
|
|
2450
2189
|
<span class="suggestion-label">{{ item.label }}</span>
|
|
2451
2190
|
</li>
|
|
@@ -2455,7 +2194,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2455
2194
|
}
|
|
2456
2195
|
}
|
|
2457
2196
|
</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(--
|
|
2197
|
+
`, 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
2198
|
}], ctorParameters: () => [], propDecorators: { searchWrapper: [{ type: i0.ViewChild, args: ['searchWrapper', { isSignal: true }] }], searchInput: [{ type: i0.ViewChild, args: ['searchInput', { isSignal: true }] }] } });
|
|
2460
2199
|
|
|
2461
2200
|
class AppTopbar {
|
|
@@ -2525,8 +2264,8 @@ class AppTopbar {
|
|
|
2525
2264
|
li.style.setProperty('--submenu-top', `${top}px`);
|
|
2526
2265
|
});
|
|
2527
2266
|
}
|
|
2528
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2529
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
2267
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppTopbar, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2268
|
+
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
2269
|
<div
|
|
2531
2270
|
class="layout-topbar-logo-container"
|
|
2532
2271
|
[class.layout-topbar-logo-container-desktop]="layoutService.isDesktop()"
|
|
@@ -2537,7 +2276,7 @@ class AppTopbar {
|
|
|
2537
2276
|
[attr.aria-label]="'layout.topbar.toggle.menu' | translate"
|
|
2538
2277
|
(click)="layoutService.onMenuToggle()"
|
|
2539
2278
|
>
|
|
2540
|
-
<
|
|
2279
|
+
<ui-icon name="bars"></ui-icon>
|
|
2541
2280
|
</button>
|
|
2542
2281
|
}
|
|
2543
2282
|
<a class="layout-topbar-logo" routerLink="/">
|
|
@@ -2560,7 +2299,7 @@ class AppTopbar {
|
|
|
2560
2299
|
[attr.aria-label]="'layout.topbar.toggle.menu' | translate"
|
|
2561
2300
|
(click)="layoutService.onMenuToggle()"
|
|
2562
2301
|
>
|
|
2563
|
-
<
|
|
2302
|
+
<ui-icon name="bars"></ui-icon>
|
|
2564
2303
|
</button>
|
|
2565
2304
|
}
|
|
2566
2305
|
</div>
|
|
@@ -2588,18 +2327,14 @@ class AppTopbar {
|
|
|
2588
2327
|
[attr.aria-label]="'layout.topbar.toggle.dark.mode' | translate"
|
|
2589
2328
|
(click)="toggleDarkMode()"
|
|
2590
2329
|
>
|
|
2591
|
-
<
|
|
2592
|
-
class="pi"
|
|
2593
|
-
[class.pi-moon]="layoutService.isDarkTheme()"
|
|
2594
|
-
[class.pi-sun]="!layoutService.isDarkTheme()"
|
|
2595
|
-
></i>
|
|
2330
|
+
<ui-icon [name]="layoutService.isDarkTheme() ? 'moon' : 'sun'"></ui-icon>
|
|
2596
2331
|
</button>
|
|
2597
2332
|
<div class="relative" #configContainer>
|
|
2598
2333
|
<button
|
|
2599
2334
|
class="layout-topbar-action"
|
|
2600
2335
|
[class.layout-topbar-action-highlight]="activePanel() === 'config'"
|
|
2601
2336
|
[attr.aria-label]="'layout.topbar.open.theme.settings' | translate"
|
|
2602
|
-
|
|
2337
|
+
fStyleClass="@next"
|
|
2603
2338
|
enterFromClass="hidden"
|
|
2604
2339
|
enterActiveClass="animate-scalein"
|
|
2605
2340
|
leaveToClass="hidden"
|
|
@@ -2607,7 +2342,7 @@ class AppTopbar {
|
|
|
2607
2342
|
[hideOnOutsideClick]="true"
|
|
2608
2343
|
(click)="togglePanel('config')"
|
|
2609
2344
|
>
|
|
2610
|
-
<
|
|
2345
|
+
<ui-icon name="palette"></ui-icon>
|
|
2611
2346
|
</button>
|
|
2612
2347
|
<app-configurator />
|
|
2613
2348
|
</div>
|
|
@@ -2616,14 +2351,14 @@ class AppTopbar {
|
|
|
2616
2351
|
<button
|
|
2617
2352
|
class="layout-topbar-menu-button layout-topbar-action"
|
|
2618
2353
|
[attr.aria-label]="'layout.topbar.more.options' | translate"
|
|
2619
|
-
|
|
2354
|
+
fStyleClass="@next"
|
|
2620
2355
|
enterFromClass="hidden"
|
|
2621
2356
|
enterActiveClass="animate-scalein"
|
|
2622
2357
|
leaveToClass="hidden"
|
|
2623
2358
|
leaveActiveClass="animate-fadeout"
|
|
2624
2359
|
[hideOnOutsideClick]="true"
|
|
2625
2360
|
>
|
|
2626
|
-
<
|
|
2361
|
+
<ui-icon name="ellipsis-v"></ui-icon>
|
|
2627
2362
|
</button>
|
|
2628
2363
|
|
|
2629
2364
|
<div class="layout-topbar-menu hidden lg:block">
|
|
@@ -2644,15 +2379,13 @@ class AppTopbar {
|
|
|
2644
2379
|
</div>
|
|
2645
2380
|
</div>
|
|
2646
2381
|
</div>
|
|
2647
|
-
</div>`, isInline: true, dependencies: [{ kind: "ngmodule", type:
|
|
2382
|
+
</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
2383
|
}
|
|
2649
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2384
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppTopbar, decorators: [{
|
|
2650
2385
|
type: Component,
|
|
2651
2386
|
args: [{
|
|
2652
2387
|
selector: 'app-topbar',
|
|
2653
|
-
imports: [
|
|
2654
|
-
RouterModule,
|
|
2655
|
-
StyleClassModule,
|
|
2388
|
+
imports: [UiModule, RouterModule,
|
|
2656
2389
|
NgComponentOutlet,
|
|
2657
2390
|
TranslatePipe,
|
|
2658
2391
|
InlineSvgComponent,
|
|
@@ -2661,8 +2394,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2661
2394
|
AppProfile,
|
|
2662
2395
|
AppCompanyBranchSelector,
|
|
2663
2396
|
AppLauncher,
|
|
2664
|
-
AppSearchbar,
|
|
2665
|
-
],
|
|
2397
|
+
AppSearchbar,],
|
|
2666
2398
|
template: `<div class="layout-topbar">
|
|
2667
2399
|
<div
|
|
2668
2400
|
class="layout-topbar-logo-container"
|
|
@@ -2674,7 +2406,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2674
2406
|
[attr.aria-label]="'layout.topbar.toggle.menu' | translate"
|
|
2675
2407
|
(click)="layoutService.onMenuToggle()"
|
|
2676
2408
|
>
|
|
2677
|
-
<
|
|
2409
|
+
<ui-icon name="bars"></ui-icon>
|
|
2678
2410
|
</button>
|
|
2679
2411
|
}
|
|
2680
2412
|
<a class="layout-topbar-logo" routerLink="/">
|
|
@@ -2697,7 +2429,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2697
2429
|
[attr.aria-label]="'layout.topbar.toggle.menu' | translate"
|
|
2698
2430
|
(click)="layoutService.onMenuToggle()"
|
|
2699
2431
|
>
|
|
2700
|
-
<
|
|
2432
|
+
<ui-icon name="bars"></ui-icon>
|
|
2701
2433
|
</button>
|
|
2702
2434
|
}
|
|
2703
2435
|
</div>
|
|
@@ -2725,18 +2457,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2725
2457
|
[attr.aria-label]="'layout.topbar.toggle.dark.mode' | translate"
|
|
2726
2458
|
(click)="toggleDarkMode()"
|
|
2727
2459
|
>
|
|
2728
|
-
<
|
|
2729
|
-
class="pi"
|
|
2730
|
-
[class.pi-moon]="layoutService.isDarkTheme()"
|
|
2731
|
-
[class.pi-sun]="!layoutService.isDarkTheme()"
|
|
2732
|
-
></i>
|
|
2460
|
+
<ui-icon [name]="layoutService.isDarkTheme() ? 'moon' : 'sun'"></ui-icon>
|
|
2733
2461
|
</button>
|
|
2734
2462
|
<div class="relative" #configContainer>
|
|
2735
2463
|
<button
|
|
2736
2464
|
class="layout-topbar-action"
|
|
2737
2465
|
[class.layout-topbar-action-highlight]="activePanel() === 'config'"
|
|
2738
2466
|
[attr.aria-label]="'layout.topbar.open.theme.settings' | translate"
|
|
2739
|
-
|
|
2467
|
+
fStyleClass="@next"
|
|
2740
2468
|
enterFromClass="hidden"
|
|
2741
2469
|
enterActiveClass="animate-scalein"
|
|
2742
2470
|
leaveToClass="hidden"
|
|
@@ -2744,7 +2472,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2744
2472
|
[hideOnOutsideClick]="true"
|
|
2745
2473
|
(click)="togglePanel('config')"
|
|
2746
2474
|
>
|
|
2747
|
-
<
|
|
2475
|
+
<ui-icon name="palette"></ui-icon>
|
|
2748
2476
|
</button>
|
|
2749
2477
|
<app-configurator />
|
|
2750
2478
|
</div>
|
|
@@ -2753,14 +2481,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2753
2481
|
<button
|
|
2754
2482
|
class="layout-topbar-menu-button layout-topbar-action"
|
|
2755
2483
|
[attr.aria-label]="'layout.topbar.more.options' | translate"
|
|
2756
|
-
|
|
2484
|
+
fStyleClass="@next"
|
|
2757
2485
|
enterFromClass="hidden"
|
|
2758
2486
|
enterActiveClass="animate-scalein"
|
|
2759
2487
|
leaveToClass="hidden"
|
|
2760
2488
|
leaveActiveClass="animate-fadeout"
|
|
2761
2489
|
[hideOnOutsideClick]="true"
|
|
2762
2490
|
>
|
|
2763
|
-
<
|
|
2491
|
+
<ui-icon name="ellipsis-v"></ui-icon>
|
|
2764
2492
|
</button>
|
|
2765
2493
|
|
|
2766
2494
|
<div class="layout-topbar-menu hidden lg:block">
|
|
@@ -2786,14 +2514,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2786
2514
|
}], ctorParameters: () => [], propDecorators: { configContainer: [{ type: i0.ViewChild, args: ['configContainer', { isSignal: true }] }], navContainer: [{ type: i0.ViewChild, args: ['navContainer', { isSignal: true }] }] } });
|
|
2787
2515
|
|
|
2788
2516
|
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.
|
|
2517
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppSidebar, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2518
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.6", type: AppSidebar, isStandalone: true, selector: "app-sidebar", ngImport: i0, template: `
|
|
2791
2519
|
<div class="layout-sidebar">
|
|
2792
2520
|
<app-menu />
|
|
2793
2521
|
</div>
|
|
2794
2522
|
`, isInline: true, dependencies: [{ kind: "component", type: AppMenu, selector: "app-menu" }] });
|
|
2795
2523
|
}
|
|
2796
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2524
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppSidebar, decorators: [{
|
|
2797
2525
|
type: Component,
|
|
2798
2526
|
args: [{
|
|
2799
2527
|
selector: 'app-sidebar',
|
|
@@ -2862,23 +2590,32 @@ class AppLayout {
|
|
|
2862
2590
|
unblockBodyScroll() {
|
|
2863
2591
|
this.document.body.classList.remove('blocked-scroll');
|
|
2864
2592
|
}
|
|
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
|
|
2593
|
+
isOverlay = computed(() => this.layoutService.layoutConfig().menuMode === 'overlay', /* @ts-ignore */
|
|
2594
|
+
...(ngDevMode ? [{ debugName: "isOverlay" }] : /* istanbul ignore next */ []));
|
|
2595
|
+
isStatic = computed(() => this.layoutService.layoutConfig().menuMode === 'static', /* @ts-ignore */
|
|
2596
|
+
...(ngDevMode ? [{ debugName: "isStatic" }] : /* istanbul ignore next */ []));
|
|
2597
|
+
isTopbarMode = computed(() => this.layoutService.layoutConfig().menuMode === 'topbar', /* @ts-ignore */
|
|
2598
|
+
...(ngDevMode ? [{ debugName: "isTopbarMode" }] : /* istanbul ignore next */ []));
|
|
2599
|
+
isStaticInactive = computed(() => this.layoutService.layoutState().staticMenuDesktopInactive && this.isStatic(), /* @ts-ignore */
|
|
2600
|
+
...(ngDevMode ? [{ debugName: "isStaticInactive" }] : /* istanbul ignore next */ []));
|
|
2601
|
+
isOverlayActive = computed(() => this.layoutService.layoutState().overlayMenuActive, /* @ts-ignore */
|
|
2602
|
+
...(ngDevMode ? [{ debugName: "isOverlayActive" }] : /* istanbul ignore next */ []));
|
|
2603
|
+
isMobileActive = computed(() => this.layoutService.layoutState().staticMenuMobileActive, /* @ts-ignore */
|
|
2604
|
+
...(ngDevMode ? [{ debugName: "isMobileActive" }] : /* istanbul ignore next */ []));
|
|
2605
|
+
isTopbarNavHidden = computed(() => !this.layoutService.layoutState().topbarMenuVisible && this.isTopbarMode(), /* @ts-ignore */
|
|
2606
|
+
...(ngDevMode ? [{ debugName: "isTopbarNavHidden" }] : /* istanbul ignore next */ []));
|
|
2607
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppLayout, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2608
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.6", type: AppLayout, isStandalone: true, selector: "app-layout", ngImport: i0, template: `
|
|
2609
|
+
<div
|
|
2610
|
+
class="layout-wrapper"
|
|
2611
|
+
[class.layout-overlay]="isOverlay()"
|
|
2612
|
+
[class.layout-static]="isStatic()"
|
|
2613
|
+
[class.layout-topbar-mode]="isTopbarMode()"
|
|
2614
|
+
[class.layout-static-inactive]="isStaticInactive()"
|
|
2615
|
+
[class.layout-overlay-active]="isOverlayActive()"
|
|
2616
|
+
[class.layout-mobile-active]="isMobileActive()"
|
|
2617
|
+
[class.layout-topbar-nav-hidden]="isTopbarNavHidden()"
|
|
2618
|
+
>
|
|
2882
2619
|
<app-topbar></app-topbar>
|
|
2883
2620
|
<app-sidebar></app-sidebar>
|
|
2884
2621
|
<div class="layout-main-container">
|
|
@@ -2889,15 +2626,24 @@ class AppLayout {
|
|
|
2889
2626
|
</div>
|
|
2890
2627
|
<div class="layout-mask animate-fadein"></div>
|
|
2891
2628
|
</div>
|
|
2892
|
-
`, isInline: true, dependencies: [{ kind: "
|
|
2629
|
+
`, 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
2630
|
}
|
|
2894
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2631
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: AppLayout, decorators: [{
|
|
2895
2632
|
type: Component,
|
|
2896
2633
|
args: [{
|
|
2897
2634
|
selector: 'app-layout',
|
|
2898
|
-
imports: [
|
|
2635
|
+
imports: [AppTopbar, AppSidebar, RouterModule, AppFooter],
|
|
2899
2636
|
template: `
|
|
2900
|
-
<div
|
|
2637
|
+
<div
|
|
2638
|
+
class="layout-wrapper"
|
|
2639
|
+
[class.layout-overlay]="isOverlay()"
|
|
2640
|
+
[class.layout-static]="isStatic()"
|
|
2641
|
+
[class.layout-topbar-mode]="isTopbarMode()"
|
|
2642
|
+
[class.layout-static-inactive]="isStaticInactive()"
|
|
2643
|
+
[class.layout-overlay-active]="isOverlayActive()"
|
|
2644
|
+
[class.layout-mobile-active]="isMobileActive()"
|
|
2645
|
+
[class.layout-topbar-nav-hidden]="isTopbarNavHidden()"
|
|
2646
|
+
>
|
|
2901
2647
|
<app-topbar></app-topbar>
|
|
2902
2648
|
<app-sidebar></app-sidebar>
|
|
2903
2649
|
<div class="layout-main-container">
|
|
@@ -2912,47 +2658,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
2912
2658
|
}]
|
|
2913
2659
|
}], ctorParameters: () => [] });
|
|
2914
2660
|
|
|
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
|
-
});
|
|
2661
|
+
function buildPreset(presetName, primary) {
|
|
2662
|
+
return { preset: presetName, primary };
|
|
2663
|
+
}
|
|
2935
2664
|
|
|
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
|
-
});
|
|
2665
|
+
const NavyBlueTheme = {
|
|
2666
|
+
preset: 'Aura',
|
|
2667
|
+
primary: 'indigo',
|
|
2668
|
+
};
|
|
2669
|
+
|
|
2670
|
+
const GreenTheme = {
|
|
2671
|
+
preset: 'Aura',
|
|
2672
|
+
primary: 'green',
|
|
2673
|
+
};
|
|
2956
2674
|
|
|
2957
2675
|
const LAYOUT_MESSAGES = {
|
|
2958
2676
|
// components/top-bar/app.profile.ts
|
|
@@ -3005,6 +2723,15 @@ const LAYOUT_MESSAGES = {
|
|
|
3005
2723
|
'menu.task.manager': 'Task Manager',
|
|
3006
2724
|
'menu.notifications': 'Notifications',
|
|
3007
2725
|
'menu.localization': 'Localization',
|
|
2726
|
+
'menu.components': 'Components',
|
|
2727
|
+
'menu.components.display': 'Display',
|
|
2728
|
+
'menu.components.menu': 'Menu',
|
|
2729
|
+
'menu.components.form': 'Form',
|
|
2730
|
+
'menu.components.overlay': 'Overlay',
|
|
2731
|
+
'menu.components.data': 'Data',
|
|
2732
|
+
'menu.components.panel': 'Panel',
|
|
2733
|
+
'menu.components.media': 'Media',
|
|
2734
|
+
'menu.components.misc': 'Directives',
|
|
3008
2735
|
'menu.projects': 'Projects',
|
|
3009
2736
|
'menu.projects.active': 'Active Projects',
|
|
3010
2737
|
'menu.projects.archived': 'Archived',
|
|
@@ -3029,5 +2756,5 @@ const LAYOUT_MESSAGES = {
|
|
|
3029
2756
|
* Generated bundle index. Do not edit.
|
|
3030
2757
|
*/
|
|
3031
2758
|
|
|
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,
|
|
2759
|
+
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
2760
|
//# sourceMappingURL=flusys-ng-layout.mjs.map
|