@lluc_llull/ui-lib 0.34.1 → 0.34.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/fesm2022/lluc_llull-ui-lib-headers-header-clear.mjs +24 -4
- package/fesm2022/lluc_llull-ui-lib-headers-header-clear.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-headers-header-mobile.mjs +24 -4
- package/fesm2022/lluc_llull-ui-lib-headers-header-mobile.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-headers.mjs +48 -8
- package/fesm2022/lluc_llull-ui-lib-headers.mjs.map +1 -1
- package/fesm2022/lluc_llull-ui-lib-modals.mjs +38 -40
- package/fesm2022/lluc_llull-ui-lib-modals.mjs.map +1 -1
- package/package.json +1 -1
- package/src/lib/styles/main.css +16 -1
- package/styles/main.css +16 -1
- package/types/lluc_llull-ui-lib-headers-header-clear.d.ts +3 -0
- package/types/lluc_llull-ui-lib-headers-header-mobile.d.ts +3 -0
- package/types/lluc_llull-ui-lib-headers.d.ts +6 -0
- package/types/lluc_llull-ui-lib-modals.d.ts +23 -16
|
@@ -9,6 +9,7 @@ import * as i1 from "@lluc_llull/ui-lib/theme";
|
|
|
9
9
|
var HeaderClearComponent = class HeaderClearComponent {
|
|
10
10
|
themeService;
|
|
11
11
|
isMenuOpen = false;
|
|
12
|
+
isMenuClosing = false;
|
|
12
13
|
currentTheme = "light";
|
|
13
14
|
themeSubscription;
|
|
14
15
|
logo;
|
|
@@ -42,7 +43,22 @@ var HeaderClearComponent = class HeaderClearComponent {
|
|
|
42
43
|
this.theme.emit();
|
|
43
44
|
}
|
|
44
45
|
toggleMenu() {
|
|
45
|
-
this.isMenuOpen
|
|
46
|
+
if (this.isMenuOpen) {
|
|
47
|
+
this.closeMenu();
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
this.isMenuClosing = false;
|
|
51
|
+
this.isMenuOpen = true;
|
|
52
|
+
}
|
|
53
|
+
closeMenu() {
|
|
54
|
+
if (!this.isMenuOpen && !this.isMenuClosing) return;
|
|
55
|
+
this.isMenuClosing = true;
|
|
56
|
+
this.isMenuOpen = false;
|
|
57
|
+
}
|
|
58
|
+
finishMenuClose(event) {
|
|
59
|
+
if (!this.isMenuClosing || event.propertyName !== "visibility") return;
|
|
60
|
+
if (!(event.target instanceof HTMLElement) || !event.target.classList.contains("modal-content")) return;
|
|
61
|
+
this.isMenuClosing = false;
|
|
46
62
|
}
|
|
47
63
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
48
64
|
minVersion: "12.0.0",
|
|
@@ -73,7 +89,7 @@ var HeaderClearComponent = class HeaderClearComponent {
|
|
|
73
89
|
},
|
|
74
90
|
usesOnChanges: true,
|
|
75
91
|
ngImport: i0,
|
|
76
|
-
template: "<header class=\"header-clear main-grid col-span-full sm:col-span-12 sm:col-start-1\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo col-span-full sm:col-span-4 sm:col-start-1\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n <span>LLUC LLULL</span>\n </div>\n </a>\n\n <div class=\"header-actions col-span-full sm:col-span-6 sm:col-start-7\">\n <!-- Idioma -->\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n\n <!-- Icono de tema -->\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'sun' : 'moon'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n\n <!-- Icono de menú -->\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</header>\n\n@if (isMenuOpen && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n (close)=\"
|
|
92
|
+
template: "<header class=\"header-clear main-grid col-span-full sm:col-span-12 sm:col-start-1\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo col-span-full sm:col-span-4 sm:col-start-1\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n <span>LLUC LLULL</span>\n </div>\n </a>\n\n <div class=\"header-actions col-span-full sm:col-span-6 sm:col-start-7\">\n <!-- Idioma -->\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n\n <!-- Icono de tema -->\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'sun' : 'moon'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n\n <!-- Icono de menú -->\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</header>\n\n@if ((isMenuOpen || isMenuClosing) && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n [closing]=\"isMenuClosing\"\n (close)=\"closeMenu()\"\n (transitionend)=\"finishMenuClose($event)\"\n ></lib-nav-modal>\n}\n",
|
|
77
93
|
styles: [".header-clear{border-radius:0;position:sticky;top:0;z-index:100;padding-block:0;margin-top:1rem;transition:background .3s ease,box-shadow .3s ease;background:var(--header-bg)}.header-clear.is-scrolled{background:var(--header-bg-fixed-dark);box-shadow:0 2px 12px #00000014}.header-clear.is-scrolled .header-logo a{padding-inline:1.5rem}.header-clear.is-scrolled .header-logo span{color:var(--header-logo-text-dark)}.header-clear.is-scrolled .header-actions{padding-inline:1.5rem}.header-clear.is-scrolled .header-actions .btn-header{background:var(--header-bg-fixed-light)}.header-logo{display:flex;align-items:center;gap:.5rem;color:var(--header-logo-text)}.header-logo img{width:80px;height:80px;object-fit:contain;object-position:left}.header-logo span{display:flex;min-width:10rem}.header-actions{display:flex;align-items:center;justify-content:flex-end;gap:1rem}.lang{text-transform:uppercase}\n"],
|
|
78
94
|
dependencies: [
|
|
79
95
|
{
|
|
@@ -84,7 +100,11 @@ var HeaderClearComponent = class HeaderClearComponent {
|
|
|
84
100
|
kind: "component",
|
|
85
101
|
type: NavModalComponent,
|
|
86
102
|
selector: "lib-nav-modal",
|
|
87
|
-
inputs: [
|
|
103
|
+
inputs: [
|
|
104
|
+
"navItems",
|
|
105
|
+
"socialItems",
|
|
106
|
+
"closing"
|
|
107
|
+
],
|
|
88
108
|
outputs: ["close"]
|
|
89
109
|
},
|
|
90
110
|
{
|
|
@@ -132,7 +152,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
132
152
|
HeaderScrollDirective
|
|
133
153
|
],
|
|
134
154
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
135
|
-
template: "<header class=\"header-clear main-grid col-span-full sm:col-span-12 sm:col-start-1\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo col-span-full sm:col-span-4 sm:col-start-1\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n <span>LLUC LLULL</span>\n </div>\n </a>\n\n <div class=\"header-actions col-span-full sm:col-span-6 sm:col-start-7\">\n <!-- Idioma -->\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n\n <!-- Icono de tema -->\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'sun' : 'moon'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n\n <!-- Icono de menú -->\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</header>\n\n@if (isMenuOpen && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n (close)=\"
|
|
155
|
+
template: "<header class=\"header-clear main-grid col-span-full sm:col-span-12 sm:col-start-1\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo col-span-full sm:col-span-4 sm:col-start-1\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n <span>LLUC LLULL</span>\n </div>\n </a>\n\n <div class=\"header-actions col-span-full sm:col-span-6 sm:col-start-7\">\n <!-- Idioma -->\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n\n <!-- Icono de tema -->\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'sun' : 'moon'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n\n <!-- Icono de menú -->\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</header>\n\n@if ((isMenuOpen || isMenuClosing) && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n [closing]=\"isMenuClosing\"\n (close)=\"closeMenu()\"\n (transitionend)=\"finishMenuClose($event)\"\n ></lib-nav-modal>\n}\n",
|
|
136
156
|
styles: [".header-clear{border-radius:0;position:sticky;top:0;z-index:100;padding-block:0;margin-top:1rem;transition:background .3s ease,box-shadow .3s ease;background:var(--header-bg)}.header-clear.is-scrolled{background:var(--header-bg-fixed-dark);box-shadow:0 2px 12px #00000014}.header-clear.is-scrolled .header-logo a{padding-inline:1.5rem}.header-clear.is-scrolled .header-logo span{color:var(--header-logo-text-dark)}.header-clear.is-scrolled .header-actions{padding-inline:1.5rem}.header-clear.is-scrolled .header-actions .btn-header{background:var(--header-bg-fixed-light)}.header-logo{display:flex;align-items:center;gap:.5rem;color:var(--header-logo-text)}.header-logo img{width:80px;height:80px;object-fit:contain;object-position:left}.header-logo span{display:flex;min-width:10rem}.header-actions{display:flex;align-items:center;justify-content:flex-end;gap:1rem}.lang{text-transform:uppercase}\n"]
|
|
137
157
|
}]
|
|
138
158
|
}],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lluc_llull-ui-lib-headers-header-clear.mjs","names":[],"sources":["../../../projects/ui-lib/headers/header-clear/header-clear.component.ts","../../../projects/ui-lib/headers/header-clear/header-clear.component.html"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { HeaderScrollDirective, LinkTypeDirective } from '@lluc_llull/ui-lib/directives';\nimport {\n UiLibButtonI,\n UiLibImageI,\n UiLibNavItemsI,\n UiLibSocialItemsI,\n} from '@lluc_llull/ui-lib/interfaces';\nimport { Theme, ThemeService } from '@lluc_llull/ui-lib/theme';\nimport { Subscription } from 'rxjs';\nimport { mapNavModal } from '@lluc_llull/ui-lib/mapper';\nimport { NavModalComponent } from '@lluc_llull/ui-lib/modals';\nimport { UiIconComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-header-clear',\n standalone: true,\n imports: [CommonModule, NavModalComponent, LinkTypeDirective, UiIconComponent, HeaderScrollDirective],\n templateUrl: './header-clear.component.html',\n styleUrl: './header-clear.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeaderClearComponent implements OnInit, OnDestroy, OnChanges {\n isMenuOpen = false;\n currentTheme: Theme = 'light';\n private themeSubscription?: Subscription;\n\n @Input() logo?: UiLibImageI;\n @Input() logoDark?: UiLibImageI;\n @Input() navItems?: UiLibNavItemsI[];\n @Input() socialItems?: UiLibSocialItemsI[];\n @Input() homeLink?: UiLibButtonI;\n @Input() navigation: any;\n @Input() lang: string = 'es';\n\n @Output() langModal = new EventEmitter<void>();\n @Output() theme = new EventEmitter<void>();\n\n constructor(private themeService: ThemeService) {}\n\n ngOnInit(): void {\n this.themeSubscription = this.themeService.currentTheme$.subscribe((theme) => {\n this.currentTheme = theme;\n });\n }\n\n ngOnChanges() {\n this.navItems = mapNavModal(this.navigation, this.lang);\n }\n\n ngOnDestroy(): void {\n this.themeSubscription?.unsubscribe();\n }\n\n openLanguagesModal(): void {\n this.langModal.emit();\n }\n\n toggleTheme(): void {\n this.themeService.toggleTheme();\n this.theme.emit();\n }\n\n toggleMenu(): void {\n this.isMenuOpen = !this.isMenuOpen;\n }\n}\n","<header class=\"header-clear main-grid col-span-full sm:col-span-12 sm:col-start-1\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo col-span-full sm:col-span-4 sm:col-start-1\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n <span>LLUC LLULL</span>\n </div>\n </a>\n\n <div class=\"header-actions col-span-full sm:col-span-6 sm:col-start-7\">\n <!-- Idioma -->\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n\n <!-- Icono de tema -->\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'sun' : 'moon'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n\n <!-- Icono de menú -->\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</header>\n\n@if (isMenuOpen && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n (close)=\"
|
|
1
|
+
{"version":3,"file":"lluc_llull-ui-lib-headers-header-clear.mjs","names":[],"sources":["../../../projects/ui-lib/headers/header-clear/header-clear.component.ts","../../../projects/ui-lib/headers/header-clear/header-clear.component.html"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { HeaderScrollDirective, LinkTypeDirective } from '@lluc_llull/ui-lib/directives';\nimport {\n UiLibButtonI,\n UiLibImageI,\n UiLibNavItemsI,\n UiLibSocialItemsI,\n} from '@lluc_llull/ui-lib/interfaces';\nimport { Theme, ThemeService } from '@lluc_llull/ui-lib/theme';\nimport { Subscription } from 'rxjs';\nimport { mapNavModal } from '@lluc_llull/ui-lib/mapper';\nimport { NavModalComponent } from '@lluc_llull/ui-lib/modals';\nimport { UiIconComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-header-clear',\n standalone: true,\n imports: [CommonModule, NavModalComponent, LinkTypeDirective, UiIconComponent, HeaderScrollDirective],\n templateUrl: './header-clear.component.html',\n styleUrl: './header-clear.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeaderClearComponent implements OnInit, OnDestroy, OnChanges {\n isMenuOpen = false;\n isMenuClosing = false;\n currentTheme: Theme = 'light';\n private themeSubscription?: Subscription;\n\n @Input() logo?: UiLibImageI;\n @Input() logoDark?: UiLibImageI;\n @Input() navItems?: UiLibNavItemsI[];\n @Input() socialItems?: UiLibSocialItemsI[];\n @Input() homeLink?: UiLibButtonI;\n @Input() navigation: any;\n @Input() lang: string = 'es';\n\n @Output() langModal = new EventEmitter<void>();\n @Output() theme = new EventEmitter<void>();\n\n constructor(private themeService: ThemeService) {}\n\n ngOnInit(): void {\n this.themeSubscription = this.themeService.currentTheme$.subscribe((theme) => {\n this.currentTheme = theme;\n });\n }\n\n ngOnChanges() {\n this.navItems = mapNavModal(this.navigation, this.lang);\n }\n\n ngOnDestroy(): void {\n this.themeSubscription?.unsubscribe();\n }\n\n openLanguagesModal(): void {\n this.langModal.emit();\n }\n\n toggleTheme(): void {\n this.themeService.toggleTheme();\n this.theme.emit();\n }\n\n toggleMenu(): void {\n if (this.isMenuOpen) {\n this.closeMenu();\n return;\n }\n\n this.isMenuClosing = false;\n this.isMenuOpen = true;\n }\n\n closeMenu(): void {\n if (!this.isMenuOpen && !this.isMenuClosing) return;\n\n this.isMenuClosing = true;\n this.isMenuOpen = false;\n }\n\n finishMenuClose(event: TransitionEvent): void {\n if (!this.isMenuClosing || event.propertyName !== 'visibility') return;\n if (!(event.target instanceof HTMLElement) || !event.target.classList.contains('modal-content')) return;\n\n this.isMenuClosing = false;\n }\n}\n","<header class=\"header-clear main-grid col-span-full sm:col-span-12 sm:col-start-1\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo col-span-full sm:col-span-4 sm:col-start-1\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n <span>LLUC LLULL</span>\n </div>\n </a>\n\n <div class=\"header-actions col-span-full sm:col-span-6 sm:col-start-7\">\n <!-- Idioma -->\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n\n <!-- Icono de tema -->\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'sun' : 'moon'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n\n <!-- Icono de menú -->\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</header>\n\n@if ((isMenuOpen || isMenuClosing) && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n [closing]=\"isMenuClosing\"\n (close)=\"closeMenu()\"\n (transitionend)=\"finishMenuClose($event)\"\n ></lib-nav-modal>\n}\n"],"mappings":";;;;;;;;AAgCA,IAAa,uBAAb,MAAa,qBAAoB;CAiBT;CAhBpB,aAAa;CACb,gBAAgB;CAChB,eAAsB;CACd;CAEC;CACA;CACA;CACA;CACA;CACA;CACA,OAAe;CAEd,YAAY,IAAI,aAAY;CAC5B,QAAQ,IAAI,aAAY;CAElC,YAAoB,cAA0B;EAA1B,KAAA,eAAA;CAA6B;CAEjD,WAAQ;EACJ,KAAK,oBAAoB,KAAK,aAAa,cAAc,WAAW,UAAS;GACzE,KAAK,eAAe;EACxB,CAAC;CACL;CAEA,cAAW;EACP,KAAK,WAAW,YAAY,KAAK,YAAY,KAAK,IAAI;CAC1D;CAEA,cAAW;EACP,KAAK,mBAAmB,YAAW;CACvC;CAEA,qBAAkB;EACd,KAAK,UAAU,KAAI;CACvB;CAEA,cAAW;EACP,KAAK,aAAa,YAAW;EAC7B,KAAK,MAAM,KAAI;CACnB;CAEA,aAAU;EACN,IAAI,KAAK,YAAY;GACjB,KAAK,UAAS;GACd;EACJ;EAEA,KAAK,gBAAgB;EACrB,KAAK,aAAa;CACtB;CAEA,YAAS;EACL,IAAI,CAAC,KAAK,cAAc,CAAC,KAAK,eAAe;EAE7C,KAAK,gBAAgB;EACrB,KAAK,aAAa;CACtB;CAEA,gBAAgB,OAAsB;EAClC,IAAI,CAAC,KAAK,iBAAiB,MAAM,iBAAiB,cAAc;EAChE,IAAI,EAAE,MAAM,kBAAkB,gBAAgB,CAAC,MAAM,OAAO,UAAU,SAAS,eAAe,GAAG;EAEjG,KAAK,gBAAgB;CACzB;CAhES,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAoB,MAAA,CAAA,EAAA,OAAA,GAAA,aAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAApB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAoB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,MAAA;GAAA,UAAA;GAAA,UAAA;GAAA,aAAA;GAAA,UAAA;GAAA,YAAA;GAAA,MAAA;EAAA;EAAA,SAAA;GAAA,WAAA;GAAA,OAAA;EAAA;EAAA,eAAA;EAAA,UAAA;EAAA,UChCjC;EA2CA,QAAA,CAAA,q4BAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MDhBc;GAAY;GAAA;IAAA,MAAA;IAAA,MAAE;IAAiB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA,CAAA,OAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAiB,UAAA;IAAA,QAAA,CAAA,YAAA,MAAA;IAAA,SAAA,CAAA,eAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAe,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAqB,UAAA;IAAA,QAAA,CAAA,iBAAA;GAAA;EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAK3F,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAoB,YAAA,CAAA;EARhC,MAAA;EACa,MAAA,CAAA;GAAA,UAAA;GAAkB,YAChB;GAAI,SACP;IAAC;IAAc;IAAmB;IAAmB;IAAiB;GAAqB;GAAC,iBAGpF,wBAAwB;GAAM,UAAA;GAAA,QAAA,CAAA,q4BAAA;EAAA,CAAA;;;;E,SAQ9C,MAAA,M;E,aACA,MAAA,M;E,aACA,MAAA,M;E,gBACA,MAAA,M;E,aACA,MAAA,M;E,eACA,MAAA,M;E,SACA,MAAA,M;E,cAEA,MAAA,O;E,UACA,MAAA,O"}
|
|
@@ -9,6 +9,7 @@ import * as i1 from "@lluc_llull/ui-lib/theme";
|
|
|
9
9
|
var HeaderMobileComponent = class HeaderMobileComponent {
|
|
10
10
|
themeService;
|
|
11
11
|
isMenuOpen = false;
|
|
12
|
+
isMenuClosing = false;
|
|
12
13
|
currentTheme = "light";
|
|
13
14
|
themeSubscription;
|
|
14
15
|
logo;
|
|
@@ -42,7 +43,22 @@ var HeaderMobileComponent = class HeaderMobileComponent {
|
|
|
42
43
|
this.theme.emit();
|
|
43
44
|
}
|
|
44
45
|
toggleMenu() {
|
|
45
|
-
this.isMenuOpen
|
|
46
|
+
if (this.isMenuOpen) {
|
|
47
|
+
this.closeMenu();
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
this.isMenuClosing = false;
|
|
51
|
+
this.isMenuOpen = true;
|
|
52
|
+
}
|
|
53
|
+
closeMenu() {
|
|
54
|
+
if (!this.isMenuOpen && !this.isMenuClosing) return;
|
|
55
|
+
this.isMenuClosing = true;
|
|
56
|
+
this.isMenuOpen = false;
|
|
57
|
+
}
|
|
58
|
+
finishMenuClose(event) {
|
|
59
|
+
if (!this.isMenuClosing || event.propertyName !== "visibility") return;
|
|
60
|
+
if (!(event.target instanceof HTMLElement) || !event.target.classList.contains("modal-content")) return;
|
|
61
|
+
this.isMenuClosing = false;
|
|
46
62
|
}
|
|
47
63
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
48
64
|
minVersion: "12.0.0",
|
|
@@ -73,7 +89,7 @@ var HeaderMobileComponent = class HeaderMobileComponent {
|
|
|
73
89
|
},
|
|
74
90
|
usesOnChanges: true,
|
|
75
91
|
ngImport: i0,
|
|
76
|
-
template: "<header class=\"header-mobile\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n </div>\n </a>\n</header>\n\n<div class=\"header-actions\">\n <!-- Idioma -->\n <div class=\"left\">\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n </div>\n\n <!-- Icono de tema -->\n <div class=\"center\">\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'moon' : 'sun'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n </div>\n\n <!-- Icono de menú -->\n <div class=\"right\">\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</div>\n\n@if (isMenuOpen && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n (close)=\"
|
|
92
|
+
template: "<header class=\"header-mobile\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n </div>\n </a>\n</header>\n\n<div class=\"header-actions\">\n <!-- Idioma -->\n <div class=\"left\">\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n </div>\n\n <!-- Icono de tema -->\n <div class=\"center\">\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'moon' : 'sun'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n </div>\n\n <!-- Icono de menú -->\n <div class=\"right\">\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</div>\n\n@if ((isMenuOpen || isMenuClosing) && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n [closing]=\"isMenuClosing\"\n (close)=\"closeMenu()\"\n (transitionend)=\"finishMenuClose($event)\"\n ></lib-nav-modal>\n}\n",
|
|
77
93
|
styles: [".header-mobile{display:flex;justify-content:center;align-items:center;padding:1rem 0;border-radius:0;position:fixed;top:0;z-index:100;width:100vw;background:var(--header-bg);transition:background .3s ease,box-shadow .3s ease}.header-mobile.is-scrolled{background:var(--header-bg-fixed-dark);box-shadow:0 2px 12px #00000014}.header-logo{display:flex;align-items:center;gap:.5rem;color:var(--header-logo-text)}.header-logo img{width:80px;height:80px;object-fit:contain;object-position:center}.header-actions{position:fixed;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;padding:.5rem 1rem;background-color:var(--header-mobile-bg);z-index:100;box-sizing:border-box}.header-actions .center{margin:0 auto}.lang{text-transform:uppercase}\n"],
|
|
78
94
|
dependencies: [
|
|
79
95
|
{
|
|
@@ -84,7 +100,11 @@ var HeaderMobileComponent = class HeaderMobileComponent {
|
|
|
84
100
|
kind: "component",
|
|
85
101
|
type: NavModalComponent,
|
|
86
102
|
selector: "lib-nav-modal",
|
|
87
|
-
inputs: [
|
|
103
|
+
inputs: [
|
|
104
|
+
"navItems",
|
|
105
|
+
"socialItems",
|
|
106
|
+
"closing"
|
|
107
|
+
],
|
|
88
108
|
outputs: ["close"]
|
|
89
109
|
},
|
|
90
110
|
{
|
|
@@ -132,7 +152,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
132
152
|
UiIconComponent
|
|
133
153
|
],
|
|
134
154
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
135
|
-
template: "<header class=\"header-mobile\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n </div>\n </a>\n</header>\n\n<div class=\"header-actions\">\n <!-- Idioma -->\n <div class=\"left\">\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n </div>\n\n <!-- Icono de tema -->\n <div class=\"center\">\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'moon' : 'sun'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n </div>\n\n <!-- Icono de menú -->\n <div class=\"right\">\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</div>\n\n@if (isMenuOpen && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n (close)=\"
|
|
155
|
+
template: "<header class=\"header-mobile\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n </div>\n </a>\n</header>\n\n<div class=\"header-actions\">\n <!-- Idioma -->\n <div class=\"left\">\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n </div>\n\n <!-- Icono de tema -->\n <div class=\"center\">\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'moon' : 'sun'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n </div>\n\n <!-- Icono de menú -->\n <div class=\"right\">\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</div>\n\n@if ((isMenuOpen || isMenuClosing) && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n [closing]=\"isMenuClosing\"\n (close)=\"closeMenu()\"\n (transitionend)=\"finishMenuClose($event)\"\n ></lib-nav-modal>\n}\n",
|
|
136
156
|
styles: [".header-mobile{display:flex;justify-content:center;align-items:center;padding:1rem 0;border-radius:0;position:fixed;top:0;z-index:100;width:100vw;background:var(--header-bg);transition:background .3s ease,box-shadow .3s ease}.header-mobile.is-scrolled{background:var(--header-bg-fixed-dark);box-shadow:0 2px 12px #00000014}.header-logo{display:flex;align-items:center;gap:.5rem;color:var(--header-logo-text)}.header-logo img{width:80px;height:80px;object-fit:contain;object-position:center}.header-actions{position:fixed;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;padding:.5rem 1rem;background-color:var(--header-mobile-bg);z-index:100;box-sizing:border-box}.header-actions .center{margin:0 auto}.lang{text-transform:uppercase}\n"]
|
|
137
157
|
}]
|
|
138
158
|
}],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lluc_llull-ui-lib-headers-header-mobile.mjs","names":[],"sources":["../../../projects/ui-lib/headers/header-mobile/header-mobile.component.ts","../../../projects/ui-lib/headers/header-mobile/header-mobile.component.html"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { HeaderScrollDirective, LinkTypeDirective } from '@lluc_llull/ui-lib/directives';\nimport {\n UiLibButtonI,\n UiLibImageI,\n UiLibNavItemsI,\n UiLibSocialItemsI,\n} from '@lluc_llull/ui-lib/interfaces';\nimport { Theme, ThemeService } from '@lluc_llull/ui-lib/theme';\nimport { Subscription } from 'rxjs';\nimport { mapNavModal } from '@lluc_llull/ui-lib/mapper';\nimport { NavModalComponent } from '@lluc_llull/ui-lib/modals';\nimport { UiIconComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-header-mobile',\n standalone: true,\n imports: [CommonModule, NavModalComponent, HeaderScrollDirective, LinkTypeDirective, UiIconComponent],\n templateUrl: './header-mobile.component.html',\n styleUrl: './header-mobile.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeaderMobileComponent implements OnInit, OnChanges, OnDestroy {\n isMenuOpen = false;\n currentTheme: Theme = 'light';\n private themeSubscription?: Subscription;\n\n @Input() logo?: UiLibImageI;\n @Input() logoDark?: UiLibImageI;\n @Input() navItems?: UiLibNavItemsI[];\n @Input() socialItems?: UiLibSocialItemsI[];\n @Input() homeLink?: UiLibButtonI;\n @Input() navigation: any;\n @Input() lang: string = 'es';\n\n @Output() langModal = new EventEmitter<void>();\n @Output() theme = new EventEmitter<void>();\n\n constructor(private themeService: ThemeService) {}\n\n ngOnInit(): void {\n this.themeSubscription = this.themeService.currentTheme$.subscribe((theme) => {\n this.currentTheme = theme;\n });\n }\n\n ngOnChanges() {\n this.navItems = mapNavModal(this.navigation, this.lang);\n }\n\n ngOnDestroy(): void {\n this.themeSubscription?.unsubscribe();\n }\n\n openLanguagesModal(): void {\n this.langModal.emit();\n }\n\n toggleTheme(): void {\n this.themeService.toggleTheme();\n this.theme.emit();\n }\n\n toggleMenu(): void {\n this.isMenuOpen = !this.isMenuOpen;\n }\n}\n","<header class=\"header-mobile\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n </div>\n </a>\n</header>\n\n<div class=\"header-actions\">\n <!-- Idioma -->\n <div class=\"left\">\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n </div>\n\n <!-- Icono de tema -->\n <div class=\"center\">\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'moon' : 'sun'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n </div>\n\n <!-- Icono de menú -->\n <div class=\"right\">\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</div>\n\n@if (isMenuOpen && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n (close)=\"
|
|
1
|
+
{"version":3,"file":"lluc_llull-ui-lib-headers-header-mobile.mjs","names":[],"sources":["../../../projects/ui-lib/headers/header-mobile/header-mobile.component.ts","../../../projects/ui-lib/headers/header-mobile/header-mobile.component.html"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { HeaderScrollDirective, LinkTypeDirective } from '@lluc_llull/ui-lib/directives';\nimport {\n UiLibButtonI,\n UiLibImageI,\n UiLibNavItemsI,\n UiLibSocialItemsI,\n} from '@lluc_llull/ui-lib/interfaces';\nimport { Theme, ThemeService } from '@lluc_llull/ui-lib/theme';\nimport { Subscription } from 'rxjs';\nimport { mapNavModal } from '@lluc_llull/ui-lib/mapper';\nimport { NavModalComponent } from '@lluc_llull/ui-lib/modals';\nimport { UiIconComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-header-mobile',\n standalone: true,\n imports: [CommonModule, NavModalComponent, HeaderScrollDirective, LinkTypeDirective, UiIconComponent],\n templateUrl: './header-mobile.component.html',\n styleUrl: './header-mobile.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeaderMobileComponent implements OnInit, OnChanges, OnDestroy {\n isMenuOpen = false;\n isMenuClosing = false;\n currentTheme: Theme = 'light';\n private themeSubscription?: Subscription;\n\n @Input() logo?: UiLibImageI;\n @Input() logoDark?: UiLibImageI;\n @Input() navItems?: UiLibNavItemsI[];\n @Input() socialItems?: UiLibSocialItemsI[];\n @Input() homeLink?: UiLibButtonI;\n @Input() navigation: any;\n @Input() lang: string = 'es';\n\n @Output() langModal = new EventEmitter<void>();\n @Output() theme = new EventEmitter<void>();\n\n constructor(private themeService: ThemeService) {}\n\n ngOnInit(): void {\n this.themeSubscription = this.themeService.currentTheme$.subscribe((theme) => {\n this.currentTheme = theme;\n });\n }\n\n ngOnChanges() {\n this.navItems = mapNavModal(this.navigation, this.lang);\n }\n\n ngOnDestroy(): void {\n this.themeSubscription?.unsubscribe();\n }\n\n openLanguagesModal(): void {\n this.langModal.emit();\n }\n\n toggleTheme(): void {\n this.themeService.toggleTheme();\n this.theme.emit();\n }\n\n toggleMenu(): void {\n if (this.isMenuOpen) {\n this.closeMenu();\n return;\n }\n\n this.isMenuClosing = false;\n this.isMenuOpen = true;\n }\n\n closeMenu(): void {\n if (!this.isMenuOpen && !this.isMenuClosing) return;\n\n this.isMenuClosing = true;\n this.isMenuOpen = false;\n }\n\n finishMenuClose(event: TransitionEvent): void {\n if (!this.isMenuClosing || event.propertyName !== 'visibility') return;\n if (!(event.target instanceof HTMLElement) || !event.target.classList.contains('modal-content')) return;\n\n this.isMenuClosing = false;\n }\n}\n","<header class=\"header-mobile\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n </div>\n </a>\n</header>\n\n<div class=\"header-actions\">\n <!-- Idioma -->\n <div class=\"left\">\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n </div>\n\n <!-- Icono de tema -->\n <div class=\"center\">\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'moon' : 'sun'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n </div>\n\n <!-- Icono de menú -->\n <div class=\"right\">\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</div>\n\n@if ((isMenuOpen || isMenuClosing) && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n [closing]=\"isMenuClosing\"\n (close)=\"closeMenu()\"\n (transitionend)=\"finishMenuClose($event)\"\n ></lib-nav-modal>\n}\n"],"mappings":";;;;;;;;AAgCA,IAAa,wBAAb,MAAa,sBAAqB;CAiBV;CAhBpB,aAAa;CACb,gBAAgB;CAChB,eAAsB;CACd;CAEC;CACA;CACA;CACA;CACA;CACA;CACA,OAAe;CAEd,YAAY,IAAI,aAAY;CAC5B,QAAQ,IAAI,aAAY;CAElC,YAAoB,cAA0B;EAA1B,KAAA,eAAA;CAA6B;CAEjD,WAAQ;EACJ,KAAK,oBAAoB,KAAK,aAAa,cAAc,WAAW,UAAS;GACzE,KAAK,eAAe;EACxB,CAAC;CACL;CAEA,cAAW;EACP,KAAK,WAAW,YAAY,KAAK,YAAY,KAAK,IAAI;CAC1D;CAEA,cAAW;EACP,KAAK,mBAAmB,YAAW;CACvC;CAEA,qBAAkB;EACd,KAAK,UAAU,KAAI;CACvB;CAEA,cAAW;EACP,KAAK,aAAa,YAAW;EAC7B,KAAK,MAAM,KAAI;CACnB;CAEA,aAAU;EACN,IAAI,KAAK,YAAY;GACjB,KAAK,UAAS;GACd;EACJ;EAEA,KAAK,gBAAgB;EACrB,KAAK,aAAa;CACtB;CAEA,YAAS;EACL,IAAI,CAAC,KAAK,cAAc,CAAC,KAAK,eAAe;EAE7C,KAAK,gBAAgB;EACrB,KAAK,aAAa;CACtB;CAEA,gBAAgB,OAAsB;EAClC,IAAI,CAAC,KAAK,iBAAiB,MAAM,iBAAiB,cAAc;EAChE,IAAI,EAAE,MAAM,kBAAkB,gBAAgB,CAAC,MAAM,OAAO,UAAU,SAAS,eAAe,GAAG;EAEjG,KAAK,gBAAgB;CACzB;CAhES,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAqB,MAAA,CAAA,EAAA,OAAA,GAAA,aAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAArB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAqB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,MAAA;GAAA,UAAA;GAAA,UAAA;GAAA,aAAA;GAAA,UAAA;GAAA,YAAA;GAAA,MAAA;EAAA;EAAA,SAAA;GAAA,WAAA;GAAA,OAAA;EAAA;EAAA,eAAA;EAAA,UAAA;EAAA,UChClC;EAgDA,QAAA,CAAA,swBAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MDrBc;GAAY;GAAA;IAAA,MAAA;IAAA,MAAE;IAAiB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA,CAAA,OAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAqB,UAAA;IAAA,QAAA,CAAA,iBAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAiB,UAAA;IAAA,QAAA,CAAA,YAAA,MAAA;IAAA,SAAA,CAAA,eAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAe,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;IAAA;GAAA;EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAK3F,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAqB,YAAA,CAAA;EARjC,MAAA;EACa,MAAA,CAAA;GAAA,UAAA;GAAmB,YACjB;GAAI,SACP;IAAC;IAAc;IAAmB;IAAuB;IAAmB;GAAe;GAAC,iBAGpF,wBAAwB;GAAM,UAAA;GAAA,QAAA,CAAA,swBAAA;EAAA,CAAA;;;;E,SAQ9C,MAAA,M;E,aACA,MAAA,M;E,aACA,MAAA,M;E,gBACA,MAAA,M;E,aACA,MAAA,M;E,eACA,MAAA,M;E,SACA,MAAA,M;E,cAEA,MAAA,O;E,UACA,MAAA,O"}
|
|
@@ -9,6 +9,7 @@ import * as i1 from "@lluc_llull/ui-lib/theme";
|
|
|
9
9
|
var HeaderClearComponent = class HeaderClearComponent {
|
|
10
10
|
themeService;
|
|
11
11
|
isMenuOpen = false;
|
|
12
|
+
isMenuClosing = false;
|
|
12
13
|
currentTheme = "light";
|
|
13
14
|
themeSubscription;
|
|
14
15
|
logo;
|
|
@@ -42,7 +43,22 @@ var HeaderClearComponent = class HeaderClearComponent {
|
|
|
42
43
|
this.theme.emit();
|
|
43
44
|
}
|
|
44
45
|
toggleMenu() {
|
|
45
|
-
this.isMenuOpen
|
|
46
|
+
if (this.isMenuOpen) {
|
|
47
|
+
this.closeMenu();
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
this.isMenuClosing = false;
|
|
51
|
+
this.isMenuOpen = true;
|
|
52
|
+
}
|
|
53
|
+
closeMenu() {
|
|
54
|
+
if (!this.isMenuOpen && !this.isMenuClosing) return;
|
|
55
|
+
this.isMenuClosing = true;
|
|
56
|
+
this.isMenuOpen = false;
|
|
57
|
+
}
|
|
58
|
+
finishMenuClose(event) {
|
|
59
|
+
if (!this.isMenuClosing || event.propertyName !== "visibility") return;
|
|
60
|
+
if (!(event.target instanceof HTMLElement) || !event.target.classList.contains("modal-content")) return;
|
|
61
|
+
this.isMenuClosing = false;
|
|
46
62
|
}
|
|
47
63
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
48
64
|
minVersion: "12.0.0",
|
|
@@ -73,7 +89,7 @@ var HeaderClearComponent = class HeaderClearComponent {
|
|
|
73
89
|
},
|
|
74
90
|
usesOnChanges: true,
|
|
75
91
|
ngImport: i0,
|
|
76
|
-
template: "<header class=\"header-clear main-grid col-span-full sm:col-span-12 sm:col-start-1\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo col-span-full sm:col-span-4 sm:col-start-1\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n <span>LLUC LLULL</span>\n </div>\n </a>\n\n <div class=\"header-actions col-span-full sm:col-span-6 sm:col-start-7\">\n <!-- Idioma -->\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n\n <!-- Icono de tema -->\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'sun' : 'moon'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n\n <!-- Icono de menú -->\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</header>\n\n@if (isMenuOpen && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n (close)=\"
|
|
92
|
+
template: "<header class=\"header-clear main-grid col-span-full sm:col-span-12 sm:col-start-1\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo col-span-full sm:col-span-4 sm:col-start-1\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n <span>LLUC LLULL</span>\n </div>\n </a>\n\n <div class=\"header-actions col-span-full sm:col-span-6 sm:col-start-7\">\n <!-- Idioma -->\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n\n <!-- Icono de tema -->\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'sun' : 'moon'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n\n <!-- Icono de menú -->\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</header>\n\n@if ((isMenuOpen || isMenuClosing) && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n [closing]=\"isMenuClosing\"\n (close)=\"closeMenu()\"\n (transitionend)=\"finishMenuClose($event)\"\n ></lib-nav-modal>\n}\n",
|
|
77
93
|
styles: [".header-clear{border-radius:0;position:sticky;top:0;z-index:100;padding-block:0;margin-top:1rem;transition:background .3s ease,box-shadow .3s ease;background:var(--header-bg)}.header-clear.is-scrolled{background:var(--header-bg-fixed-dark);box-shadow:0 2px 12px #00000014}.header-clear.is-scrolled .header-logo a{padding-inline:1.5rem}.header-clear.is-scrolled .header-logo span{color:var(--header-logo-text-dark)}.header-clear.is-scrolled .header-actions{padding-inline:1.5rem}.header-clear.is-scrolled .header-actions .btn-header{background:var(--header-bg-fixed-light)}.header-logo{display:flex;align-items:center;gap:.5rem;color:var(--header-logo-text)}.header-logo img{width:80px;height:80px;object-fit:contain;object-position:left}.header-logo span{display:flex;min-width:10rem}.header-actions{display:flex;align-items:center;justify-content:flex-end;gap:1rem}.lang{text-transform:uppercase}\n"],
|
|
78
94
|
dependencies: [
|
|
79
95
|
{
|
|
@@ -84,7 +100,11 @@ var HeaderClearComponent = class HeaderClearComponent {
|
|
|
84
100
|
kind: "component",
|
|
85
101
|
type: NavModalComponent,
|
|
86
102
|
selector: "lib-nav-modal",
|
|
87
|
-
inputs: [
|
|
103
|
+
inputs: [
|
|
104
|
+
"navItems",
|
|
105
|
+
"socialItems",
|
|
106
|
+
"closing"
|
|
107
|
+
],
|
|
88
108
|
outputs: ["close"]
|
|
89
109
|
},
|
|
90
110
|
{
|
|
@@ -132,7 +152,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
132
152
|
HeaderScrollDirective
|
|
133
153
|
],
|
|
134
154
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
135
|
-
template: "<header class=\"header-clear main-grid col-span-full sm:col-span-12 sm:col-start-1\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo col-span-full sm:col-span-4 sm:col-start-1\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n <span>LLUC LLULL</span>\n </div>\n </a>\n\n <div class=\"header-actions col-span-full sm:col-span-6 sm:col-start-7\">\n <!-- Idioma -->\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n\n <!-- Icono de tema -->\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'sun' : 'moon'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n\n <!-- Icono de menú -->\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</header>\n\n@if (isMenuOpen && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n (close)=\"
|
|
155
|
+
template: "<header class=\"header-clear main-grid col-span-full sm:col-span-12 sm:col-start-1\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo col-span-full sm:col-span-4 sm:col-start-1\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n <span>LLUC LLULL</span>\n </div>\n </a>\n\n <div class=\"header-actions col-span-full sm:col-span-6 sm:col-start-7\">\n <!-- Idioma -->\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n\n <!-- Icono de tema -->\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'sun' : 'moon'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n\n <!-- Icono de menú -->\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</header>\n\n@if ((isMenuOpen || isMenuClosing) && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n [closing]=\"isMenuClosing\"\n (close)=\"closeMenu()\"\n (transitionend)=\"finishMenuClose($event)\"\n ></lib-nav-modal>\n}\n",
|
|
136
156
|
styles: [".header-clear{border-radius:0;position:sticky;top:0;z-index:100;padding-block:0;margin-top:1rem;transition:background .3s ease,box-shadow .3s ease;background:var(--header-bg)}.header-clear.is-scrolled{background:var(--header-bg-fixed-dark);box-shadow:0 2px 12px #00000014}.header-clear.is-scrolled .header-logo a{padding-inline:1.5rem}.header-clear.is-scrolled .header-logo span{color:var(--header-logo-text-dark)}.header-clear.is-scrolled .header-actions{padding-inline:1.5rem}.header-clear.is-scrolled .header-actions .btn-header{background:var(--header-bg-fixed-light)}.header-logo{display:flex;align-items:center;gap:.5rem;color:var(--header-logo-text)}.header-logo img{width:80px;height:80px;object-fit:contain;object-position:left}.header-logo span{display:flex;min-width:10rem}.header-actions{display:flex;align-items:center;justify-content:flex-end;gap:1rem}.lang{text-transform:uppercase}\n"]
|
|
137
157
|
}]
|
|
138
158
|
}],
|
|
@@ -152,6 +172,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
152
172
|
var HeaderMobileComponent = class HeaderMobileComponent {
|
|
153
173
|
themeService;
|
|
154
174
|
isMenuOpen = false;
|
|
175
|
+
isMenuClosing = false;
|
|
155
176
|
currentTheme = "light";
|
|
156
177
|
themeSubscription;
|
|
157
178
|
logo;
|
|
@@ -185,7 +206,22 @@ var HeaderMobileComponent = class HeaderMobileComponent {
|
|
|
185
206
|
this.theme.emit();
|
|
186
207
|
}
|
|
187
208
|
toggleMenu() {
|
|
188
|
-
this.isMenuOpen
|
|
209
|
+
if (this.isMenuOpen) {
|
|
210
|
+
this.closeMenu();
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
this.isMenuClosing = false;
|
|
214
|
+
this.isMenuOpen = true;
|
|
215
|
+
}
|
|
216
|
+
closeMenu() {
|
|
217
|
+
if (!this.isMenuOpen && !this.isMenuClosing) return;
|
|
218
|
+
this.isMenuClosing = true;
|
|
219
|
+
this.isMenuOpen = false;
|
|
220
|
+
}
|
|
221
|
+
finishMenuClose(event) {
|
|
222
|
+
if (!this.isMenuClosing || event.propertyName !== "visibility") return;
|
|
223
|
+
if (!(event.target instanceof HTMLElement) || !event.target.classList.contains("modal-content")) return;
|
|
224
|
+
this.isMenuClosing = false;
|
|
189
225
|
}
|
|
190
226
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
191
227
|
minVersion: "12.0.0",
|
|
@@ -216,7 +252,7 @@ var HeaderMobileComponent = class HeaderMobileComponent {
|
|
|
216
252
|
},
|
|
217
253
|
usesOnChanges: true,
|
|
218
254
|
ngImport: i0,
|
|
219
|
-
template: "<header class=\"header-mobile\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n </div>\n </a>\n</header>\n\n<div class=\"header-actions\">\n <!-- Idioma -->\n <div class=\"left\">\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n </div>\n\n <!-- Icono de tema -->\n <div class=\"center\">\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'moon' : 'sun'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n </div>\n\n <!-- Icono de menú -->\n <div class=\"right\">\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</div>\n\n@if (isMenuOpen && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n (close)=\"
|
|
255
|
+
template: "<header class=\"header-mobile\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n </div>\n </a>\n</header>\n\n<div class=\"header-actions\">\n <!-- Idioma -->\n <div class=\"left\">\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n </div>\n\n <!-- Icono de tema -->\n <div class=\"center\">\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'moon' : 'sun'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n </div>\n\n <!-- Icono de menú -->\n <div class=\"right\">\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</div>\n\n@if ((isMenuOpen || isMenuClosing) && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n [closing]=\"isMenuClosing\"\n (close)=\"closeMenu()\"\n (transitionend)=\"finishMenuClose($event)\"\n ></lib-nav-modal>\n}\n",
|
|
220
256
|
styles: [".header-mobile{display:flex;justify-content:center;align-items:center;padding:1rem 0;border-radius:0;position:fixed;top:0;z-index:100;width:100vw;background:var(--header-bg);transition:background .3s ease,box-shadow .3s ease}.header-mobile.is-scrolled{background:var(--header-bg-fixed-dark);box-shadow:0 2px 12px #00000014}.header-logo{display:flex;align-items:center;gap:.5rem;color:var(--header-logo-text)}.header-logo img{width:80px;height:80px;object-fit:contain;object-position:center}.header-actions{position:fixed;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;padding:.5rem 1rem;background-color:var(--header-mobile-bg);z-index:100;box-sizing:border-box}.header-actions .center{margin:0 auto}.lang{text-transform:uppercase}\n"],
|
|
221
257
|
dependencies: [
|
|
222
258
|
{
|
|
@@ -227,7 +263,11 @@ var HeaderMobileComponent = class HeaderMobileComponent {
|
|
|
227
263
|
kind: "component",
|
|
228
264
|
type: NavModalComponent,
|
|
229
265
|
selector: "lib-nav-modal",
|
|
230
|
-
inputs: [
|
|
266
|
+
inputs: [
|
|
267
|
+
"navItems",
|
|
268
|
+
"socialItems",
|
|
269
|
+
"closing"
|
|
270
|
+
],
|
|
231
271
|
outputs: ["close"]
|
|
232
272
|
},
|
|
233
273
|
{
|
|
@@ -275,7 +315,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
275
315
|
UiIconComponent
|
|
276
316
|
],
|
|
277
317
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
278
|
-
template: "<header class=\"header-mobile\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n </div>\n </a>\n</header>\n\n<div class=\"header-actions\">\n <!-- Idioma -->\n <div class=\"left\">\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n </div>\n\n <!-- Icono de tema -->\n <div class=\"center\">\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'moon' : 'sun'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n </div>\n\n <!-- Icono de menú -->\n <div class=\"right\">\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</div>\n\n@if (isMenuOpen && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n (close)=\"
|
|
318
|
+
template: "<header class=\"header-mobile\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n </div>\n </a>\n</header>\n\n<div class=\"header-actions\">\n <!-- Idioma -->\n <div class=\"left\">\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n </div>\n\n <!-- Icono de tema -->\n <div class=\"center\">\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'moon' : 'sun'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n </div>\n\n <!-- Icono de menú -->\n <div class=\"right\">\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</div>\n\n@if ((isMenuOpen || isMenuClosing) && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n [closing]=\"isMenuClosing\"\n (close)=\"closeMenu()\"\n (transitionend)=\"finishMenuClose($event)\"\n ></lib-nav-modal>\n}\n",
|
|
279
319
|
styles: [".header-mobile{display:flex;justify-content:center;align-items:center;padding:1rem 0;border-radius:0;position:fixed;top:0;z-index:100;width:100vw;background:var(--header-bg);transition:background .3s ease,box-shadow .3s ease}.header-mobile.is-scrolled{background:var(--header-bg-fixed-dark);box-shadow:0 2px 12px #00000014}.header-logo{display:flex;align-items:center;gap:.5rem;color:var(--header-logo-text)}.header-logo img{width:80px;height:80px;object-fit:contain;object-position:center}.header-actions{position:fixed;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;padding:.5rem 1rem;background-color:var(--header-mobile-bg);z-index:100;box-sizing:border-box}.header-actions .center{margin:0 auto}.lang{text-transform:uppercase}\n"]
|
|
280
320
|
}]
|
|
281
321
|
}],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lluc_llull-ui-lib-headers.mjs","names":[],"sources":["../../../projects/ui-lib/headers/header-clear/header-clear.component.ts","../../../projects/ui-lib/headers/header-clear/header-clear.component.html","../../../projects/ui-lib/headers/header-mobile/header-mobile.component.ts","../../../projects/ui-lib/headers/header-mobile/header-mobile.component.html"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { HeaderScrollDirective, LinkTypeDirective } from '@lluc_llull/ui-lib/directives';\nimport {\n UiLibButtonI,\n UiLibImageI,\n UiLibNavItemsI,\n UiLibSocialItemsI,\n} from '@lluc_llull/ui-lib/interfaces';\nimport { Theme, ThemeService } from '@lluc_llull/ui-lib/theme';\nimport { Subscription } from 'rxjs';\nimport { mapNavModal } from '@lluc_llull/ui-lib/mapper';\nimport { NavModalComponent } from '@lluc_llull/ui-lib/modals';\nimport { UiIconComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-header-clear',\n standalone: true,\n imports: [CommonModule, NavModalComponent, LinkTypeDirective, UiIconComponent, HeaderScrollDirective],\n templateUrl: './header-clear.component.html',\n styleUrl: './header-clear.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeaderClearComponent implements OnInit, OnDestroy, OnChanges {\n isMenuOpen = false;\n currentTheme: Theme = 'light';\n private themeSubscription?: Subscription;\n\n @Input() logo?: UiLibImageI;\n @Input() logoDark?: UiLibImageI;\n @Input() navItems?: UiLibNavItemsI[];\n @Input() socialItems?: UiLibSocialItemsI[];\n @Input() homeLink?: UiLibButtonI;\n @Input() navigation: any;\n @Input() lang: string = 'es';\n\n @Output() langModal = new EventEmitter<void>();\n @Output() theme = new EventEmitter<void>();\n\n constructor(private themeService: ThemeService) {}\n\n ngOnInit(): void {\n this.themeSubscription = this.themeService.currentTheme$.subscribe((theme) => {\n this.currentTheme = theme;\n });\n }\n\n ngOnChanges() {\n this.navItems = mapNavModal(this.navigation, this.lang);\n }\n\n ngOnDestroy(): void {\n this.themeSubscription?.unsubscribe();\n }\n\n openLanguagesModal(): void {\n this.langModal.emit();\n }\n\n toggleTheme(): void {\n this.themeService.toggleTheme();\n this.theme.emit();\n }\n\n toggleMenu(): void {\n this.isMenuOpen = !this.isMenuOpen;\n }\n}\n","<header class=\"header-clear main-grid col-span-full sm:col-span-12 sm:col-start-1\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo col-span-full sm:col-span-4 sm:col-start-1\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n <span>LLUC LLULL</span>\n </div>\n </a>\n\n <div class=\"header-actions col-span-full sm:col-span-6 sm:col-start-7\">\n <!-- Idioma -->\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n\n <!-- Icono de tema -->\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'sun' : 'moon'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n\n <!-- Icono de menú -->\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</header>\n\n@if (isMenuOpen && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n (close)=\"isMenuOpen = false\"\n ></lib-nav-modal>\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { HeaderScrollDirective, LinkTypeDirective } from '@lluc_llull/ui-lib/directives';\nimport {\n UiLibButtonI,\n UiLibImageI,\n UiLibNavItemsI,\n UiLibSocialItemsI,\n} from '@lluc_llull/ui-lib/interfaces';\nimport { Theme, ThemeService } from '@lluc_llull/ui-lib/theme';\nimport { Subscription } from 'rxjs';\nimport { mapNavModal } from '@lluc_llull/ui-lib/mapper';\nimport { NavModalComponent } from '@lluc_llull/ui-lib/modals';\nimport { UiIconComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-header-mobile',\n standalone: true,\n imports: [CommonModule, NavModalComponent, HeaderScrollDirective, LinkTypeDirective, UiIconComponent],\n templateUrl: './header-mobile.component.html',\n styleUrl: './header-mobile.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeaderMobileComponent implements OnInit, OnChanges, OnDestroy {\n isMenuOpen = false;\n currentTheme: Theme = 'light';\n private themeSubscription?: Subscription;\n\n @Input() logo?: UiLibImageI;\n @Input() logoDark?: UiLibImageI;\n @Input() navItems?: UiLibNavItemsI[];\n @Input() socialItems?: UiLibSocialItemsI[];\n @Input() homeLink?: UiLibButtonI;\n @Input() navigation: any;\n @Input() lang: string = 'es';\n\n @Output() langModal = new EventEmitter<void>();\n @Output() theme = new EventEmitter<void>();\n\n constructor(private themeService: ThemeService) {}\n\n ngOnInit(): void {\n this.themeSubscription = this.themeService.currentTheme$.subscribe((theme) => {\n this.currentTheme = theme;\n });\n }\n\n ngOnChanges() {\n this.navItems = mapNavModal(this.navigation, this.lang);\n }\n\n ngOnDestroy(): void {\n this.themeSubscription?.unsubscribe();\n }\n\n openLanguagesModal(): void {\n this.langModal.emit();\n }\n\n toggleTheme(): void {\n this.themeService.toggleTheme();\n this.theme.emit();\n }\n\n toggleMenu(): void {\n this.isMenuOpen = !this.isMenuOpen;\n }\n}\n","<header class=\"header-mobile\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n </div>\n </a>\n</header>\n\n<div class=\"header-actions\">\n <!-- Idioma -->\n <div class=\"left\">\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n </div>\n\n <!-- Icono de tema -->\n <div class=\"center\">\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'moon' : 'sun'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n </div>\n\n <!-- Icono de menú -->\n <div class=\"right\">\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</div>\n\n@if (isMenuOpen && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n (close)=\"isMenuOpen = false\"\n ></lib-nav-modal>\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lluc_llull-ui-lib-headers.mjs","names":[],"sources":["../../../projects/ui-lib/headers/header-clear/header-clear.component.ts","../../../projects/ui-lib/headers/header-clear/header-clear.component.html","../../../projects/ui-lib/headers/header-mobile/header-mobile.component.ts","../../../projects/ui-lib/headers/header-mobile/header-mobile.component.html"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { HeaderScrollDirective, LinkTypeDirective } from '@lluc_llull/ui-lib/directives';\nimport {\n UiLibButtonI,\n UiLibImageI,\n UiLibNavItemsI,\n UiLibSocialItemsI,\n} from '@lluc_llull/ui-lib/interfaces';\nimport { Theme, ThemeService } from '@lluc_llull/ui-lib/theme';\nimport { Subscription } from 'rxjs';\nimport { mapNavModal } from '@lluc_llull/ui-lib/mapper';\nimport { NavModalComponent } from '@lluc_llull/ui-lib/modals';\nimport { UiIconComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-header-clear',\n standalone: true,\n imports: [CommonModule, NavModalComponent, LinkTypeDirective, UiIconComponent, HeaderScrollDirective],\n templateUrl: './header-clear.component.html',\n styleUrl: './header-clear.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeaderClearComponent implements OnInit, OnDestroy, OnChanges {\n isMenuOpen = false;\n isMenuClosing = false;\n currentTheme: Theme = 'light';\n private themeSubscription?: Subscription;\n\n @Input() logo?: UiLibImageI;\n @Input() logoDark?: UiLibImageI;\n @Input() navItems?: UiLibNavItemsI[];\n @Input() socialItems?: UiLibSocialItemsI[];\n @Input() homeLink?: UiLibButtonI;\n @Input() navigation: any;\n @Input() lang: string = 'es';\n\n @Output() langModal = new EventEmitter<void>();\n @Output() theme = new EventEmitter<void>();\n\n constructor(private themeService: ThemeService) {}\n\n ngOnInit(): void {\n this.themeSubscription = this.themeService.currentTheme$.subscribe((theme) => {\n this.currentTheme = theme;\n });\n }\n\n ngOnChanges() {\n this.navItems = mapNavModal(this.navigation, this.lang);\n }\n\n ngOnDestroy(): void {\n this.themeSubscription?.unsubscribe();\n }\n\n openLanguagesModal(): void {\n this.langModal.emit();\n }\n\n toggleTheme(): void {\n this.themeService.toggleTheme();\n this.theme.emit();\n }\n\n toggleMenu(): void {\n if (this.isMenuOpen) {\n this.closeMenu();\n return;\n }\n\n this.isMenuClosing = false;\n this.isMenuOpen = true;\n }\n\n closeMenu(): void {\n if (!this.isMenuOpen && !this.isMenuClosing) return;\n\n this.isMenuClosing = true;\n this.isMenuOpen = false;\n }\n\n finishMenuClose(event: TransitionEvent): void {\n if (!this.isMenuClosing || event.propertyName !== 'visibility') return;\n if (!(event.target instanceof HTMLElement) || !event.target.classList.contains('modal-content')) return;\n\n this.isMenuClosing = false;\n }\n}\n","<header class=\"header-clear main-grid col-span-full sm:col-span-12 sm:col-start-1\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo col-span-full sm:col-span-4 sm:col-start-1\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n <span>LLUC LLULL</span>\n </div>\n </a>\n\n <div class=\"header-actions col-span-full sm:col-span-6 sm:col-start-7\">\n <!-- Idioma -->\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n\n <!-- Icono de tema -->\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'sun' : 'moon'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n\n <!-- Icono de menú -->\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</header>\n\n@if ((isMenuOpen || isMenuClosing) && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n [closing]=\"isMenuClosing\"\n (close)=\"closeMenu()\"\n (transitionend)=\"finishMenuClose($event)\"\n ></lib-nav-modal>\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { HeaderScrollDirective, LinkTypeDirective } from '@lluc_llull/ui-lib/directives';\nimport {\n UiLibButtonI,\n UiLibImageI,\n UiLibNavItemsI,\n UiLibSocialItemsI,\n} from '@lluc_llull/ui-lib/interfaces';\nimport { Theme, ThemeService } from '@lluc_llull/ui-lib/theme';\nimport { Subscription } from 'rxjs';\nimport { mapNavModal } from '@lluc_llull/ui-lib/mapper';\nimport { NavModalComponent } from '@lluc_llull/ui-lib/modals';\nimport { UiIconComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-header-mobile',\n standalone: true,\n imports: [CommonModule, NavModalComponent, HeaderScrollDirective, LinkTypeDirective, UiIconComponent],\n templateUrl: './header-mobile.component.html',\n styleUrl: './header-mobile.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeaderMobileComponent implements OnInit, OnChanges, OnDestroy {\n isMenuOpen = false;\n isMenuClosing = false;\n currentTheme: Theme = 'light';\n private themeSubscription?: Subscription;\n\n @Input() logo?: UiLibImageI;\n @Input() logoDark?: UiLibImageI;\n @Input() navItems?: UiLibNavItemsI[];\n @Input() socialItems?: UiLibSocialItemsI[];\n @Input() homeLink?: UiLibButtonI;\n @Input() navigation: any;\n @Input() lang: string = 'es';\n\n @Output() langModal = new EventEmitter<void>();\n @Output() theme = new EventEmitter<void>();\n\n constructor(private themeService: ThemeService) {}\n\n ngOnInit(): void {\n this.themeSubscription = this.themeService.currentTheme$.subscribe((theme) => {\n this.currentTheme = theme;\n });\n }\n\n ngOnChanges() {\n this.navItems = mapNavModal(this.navigation, this.lang);\n }\n\n ngOnDestroy(): void {\n this.themeSubscription?.unsubscribe();\n }\n\n openLanguagesModal(): void {\n this.langModal.emit();\n }\n\n toggleTheme(): void {\n this.themeService.toggleTheme();\n this.theme.emit();\n }\n\n toggleMenu(): void {\n if (this.isMenuOpen) {\n this.closeMenu();\n return;\n }\n\n this.isMenuClosing = false;\n this.isMenuOpen = true;\n }\n\n closeMenu(): void {\n if (!this.isMenuOpen && !this.isMenuClosing) return;\n\n this.isMenuClosing = true;\n this.isMenuOpen = false;\n }\n\n finishMenuClose(event: TransitionEvent): void {\n if (!this.isMenuClosing || event.propertyName !== 'visibility') return;\n if (!(event.target instanceof HTMLElement) || !event.target.classList.contains('modal-content')) return;\n\n this.isMenuClosing = false;\n }\n}\n","<header class=\"header-mobile\" headerScroll [scrollThreshold]=\"60\">\n <a [href]=\"homeLink?.url\" [linkType]=\"homeLink?.linkType\">\n <div class=\"header-logo\">\n <!-- Logo -->\n <img\n [src]=\"currentTheme === 'dark' ? logoDark?.url : logo?.url\"\n [alt]=\"currentTheme === 'dark' ? logoDark?.alt : logo?.alt\"\n />\n </div>\n </a>\n</header>\n\n<div class=\"header-actions\">\n <!-- Idioma -->\n <div class=\"left\">\n <button class=\"btn btn-header\" (click)=\"openLanguagesModal()\">\n <span class=\"lang\">{{ lang }}</span>\n </button>\n </div>\n\n <!-- Icono de tema -->\n <div class=\"center\">\n <button class=\"btn btn-header\" aria-label=\"Toggle theme\" (click)=\"toggleTheme()\">\n <ui-icon\n [name]=\"currentTheme === 'dark' ? 'moon' : 'sun'\"\n [size]=\"17\"\n [color]=\"'var(--color-primary)'\"\n ></ui-icon>\n </button>\n </div>\n\n <!-- Icono de menú -->\n <div class=\"right\">\n <button class=\"btn btn-header\" aria-label=\"Open nav\" (click)=\"toggleMenu()\">\n <span>☰</span>\n </button>\n </div>\n</div>\n\n@if ((isMenuOpen || isMenuClosing) && navItems && navItems.length > 0) {\n <lib-nav-modal\n [navItems]=\"navItems\"\n [socialItems]=\"socialItems\"\n [closing]=\"isMenuClosing\"\n (close)=\"closeMenu()\"\n (transitionend)=\"finishMenuClose($event)\"\n ></lib-nav-modal>\n}\n"],"mappings":"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"}
|
|
@@ -1,38 +1,25 @@
|
|
|
1
1
|
import { CommonModule } from "@angular/common";
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
-
import { ChangeDetectionStrategy, Component, EventEmitter,
|
|
4
|
-
import * as i1 from "@angular/material/dialog";
|
|
5
|
-
import { MAT_DIALOG_DATA } from "@angular/material/dialog";
|
|
6
|
-
import { mapLangModal } from "@lluc_llull/ui-lib/mapper";
|
|
3
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from "@angular/core";
|
|
7
4
|
import { LinkTypeDirective } from "@lluc_llull/ui-lib/directives";
|
|
8
5
|
import { UiIconComponent } from "@lluc_llull/ui-lib/shared";
|
|
9
6
|
var LangModalComponent = class LangModalComponent {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
this.data = data;
|
|
15
|
-
this.dialogRef = dialogRef;
|
|
16
|
-
this.langs = mapLangModal(data.langs, data.currentLang);
|
|
17
|
-
}
|
|
7
|
+
langs = [];
|
|
8
|
+
closing = false;
|
|
9
|
+
close = new EventEmitter();
|
|
10
|
+
select = new EventEmitter();
|
|
18
11
|
selectLang(lang) {
|
|
19
|
-
this.
|
|
12
|
+
this.select.emit(lang);
|
|
20
13
|
}
|
|
21
14
|
closeModal() {
|
|
22
|
-
this.
|
|
15
|
+
this.close.emit();
|
|
23
16
|
}
|
|
24
17
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
25
18
|
minVersion: "12.0.0",
|
|
26
19
|
version: "22.2.4",
|
|
27
20
|
ngImport: i0,
|
|
28
21
|
type: LangModalComponent,
|
|
29
|
-
deps: [
|
|
30
|
-
token: MAT_DIALOG_DATA,
|
|
31
|
-
optional: true
|
|
32
|
-
}, {
|
|
33
|
-
token: i1.MatDialogRef,
|
|
34
|
-
optional: true
|
|
35
|
-
}],
|
|
22
|
+
deps: [],
|
|
36
23
|
target: i0.ɵɵFactoryTarget.Component
|
|
37
24
|
});
|
|
38
25
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
@@ -41,9 +28,18 @@ var LangModalComponent = class LangModalComponent {
|
|
|
41
28
|
type: LangModalComponent,
|
|
42
29
|
isStandalone: true,
|
|
43
30
|
selector: "lib-lang-modal",
|
|
31
|
+
inputs: {
|
|
32
|
+
langs: "langs",
|
|
33
|
+
closing: "closing"
|
|
34
|
+
},
|
|
35
|
+
outputs: {
|
|
36
|
+
close: "close",
|
|
37
|
+
select: "select"
|
|
38
|
+
},
|
|
39
|
+
host: { properties: { "class.is-closing": "closing" } },
|
|
44
40
|
ngImport: i0,
|
|
45
|
-
template: "<
|
|
46
|
-
styles: [":host{position:fixed;inset:0;width:100vw;height:100vh;background:
|
|
41
|
+
template: "<button\n (click)=\"closeModal()\"\n class=\"close-btn\"\n [class.is-closing]=\"closing\"\n type=\"button\"\n aria-label=\"Close modal\"\n>\n ✕\n</button>\n<div class=\"modal-content\" [class.is-closing]=\"closing\">\n @if (langs && langs.length > 0) {\n <ol>\n @for (lang of langs; track lang.id) {\n <li (click)=\"selectLang(lang)\">\n <span class=\"modal-item\">{{ lang.label }}</span>\n </li>\n }\n </ol>\n }\n</div>\n",
|
|
42
|
+
styles: [":host{position:fixed;inset:0;width:100vw;height:100vh;background:transparent;isolation:isolate;z-index:1000;display:flex;align-items:center;justify-content:center}:host:before{content:\"\";position:absolute;inset:0;z-index:0;background:var(--modal-bg);opacity:1;transform:scaleY(1);transform-origin:top center;transition:transform .36s cubic-bezier(.22,1,.36,1),opacity .36s cubic-bezier(.22,1,.36,1)}@starting-style{:host:before{opacity:0;transform:scaleY(0)}}:host.is-closing:before{transform-origin:top center;opacity:0;transform:scaleY(0);transition-delay:.42s}.modal-content{position:relative;z-index:1;opacity:1;transform:translateY(0) scale(1);transform-origin:center;transition:opacity .26s cubic-bezier(.22,1,.36,1) .18s}@starting-style{.modal-content{opacity:0}}.modal-content.is-closing{opacity:0;visibility:hidden;transition:opacity .26s cubic-bezier(.22,1,.36,1) .34s,visibility 1ms linear 779ms}.close-btn.is-closing{opacity:0;pointer-events:none}@media(prefers-reduced-motion:reduce){.modal-content,.modal-content.is-closing{transform:none;transition-duration:1ms}:host:before,:host.is-closing:before{opacity:0;transform:scaleY(0);transition-delay:0ms;transition-duration:1ms}}.close-btn{position:absolute;top:1rem;right:2rem;background:none;border:none;color:var(--close-btn);font-size:1.5rem;font-weight:700;cursor:pointer;z-index:1001;transition:opacity .18s cubic-bezier(.22,1,.36,1)}ol{padding:0;margin:0;text-align:center;width:100%;max-width:450px;list-style:none;counter-reset:item}ol>li{opacity:1;transform:translateY(0);transition:opacity .42s cubic-bezier(.22,1,.36,1) .36s,transform .42s cubic-bezier(.22,1,.36,1) .36s}@starting-style{ol>li{opacity:0;transform:translateY(16px)}}@media(prefers-reduced-motion:reduce){ol>li{transform:none;transition-duration:1ms;transition-delay:0ms}}li{cursor:pointer;text-align:start;text-transform:uppercase;counter-increment:item}li:before{content:counter(item,decimal-leading-zero) \". \"}.modal-item{font-size:3.5rem}@media(max-width:768px){.modal-item{font-size:3rem}}\n"],
|
|
47
43
|
dependencies: [{
|
|
48
44
|
kind: "ngmodule",
|
|
49
45
|
type: CommonModule
|
|
@@ -62,25 +58,23 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
62
58
|
selector: "lib-lang-modal",
|
|
63
59
|
standalone: true,
|
|
64
60
|
imports: [CommonModule],
|
|
61
|
+
host: { "[class.is-closing]": "closing" },
|
|
65
62
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
66
|
-
template: "<
|
|
67
|
-
styles: [":host{position:fixed;inset:0;width:100vw;height:100vh;background:
|
|
63
|
+
template: "<button\n (click)=\"closeModal()\"\n class=\"close-btn\"\n [class.is-closing]=\"closing\"\n type=\"button\"\n aria-label=\"Close modal\"\n>\n ✕\n</button>\n<div class=\"modal-content\" [class.is-closing]=\"closing\">\n @if (langs && langs.length > 0) {\n <ol>\n @for (lang of langs; track lang.id) {\n <li (click)=\"selectLang(lang)\">\n <span class=\"modal-item\">{{ lang.label }}</span>\n </li>\n }\n </ol>\n }\n</div>\n",
|
|
64
|
+
styles: [":host{position:fixed;inset:0;width:100vw;height:100vh;background:transparent;isolation:isolate;z-index:1000;display:flex;align-items:center;justify-content:center}:host:before{content:\"\";position:absolute;inset:0;z-index:0;background:var(--modal-bg);opacity:1;transform:scaleY(1);transform-origin:top center;transition:transform .36s cubic-bezier(.22,1,.36,1),opacity .36s cubic-bezier(.22,1,.36,1)}@starting-style{:host:before{opacity:0;transform:scaleY(0)}}:host.is-closing:before{transform-origin:top center;opacity:0;transform:scaleY(0);transition-delay:.42s}.modal-content{position:relative;z-index:1;opacity:1;transform:translateY(0) scale(1);transform-origin:center;transition:opacity .26s cubic-bezier(.22,1,.36,1) .18s}@starting-style{.modal-content{opacity:0}}.modal-content.is-closing{opacity:0;visibility:hidden;transition:opacity .26s cubic-bezier(.22,1,.36,1) .34s,visibility 1ms linear 779ms}.close-btn.is-closing{opacity:0;pointer-events:none}@media(prefers-reduced-motion:reduce){.modal-content,.modal-content.is-closing{transform:none;transition-duration:1ms}:host:before,:host.is-closing:before{opacity:0;transform:scaleY(0);transition-delay:0ms;transition-duration:1ms}}.close-btn{position:absolute;top:1rem;right:2rem;background:none;border:none;color:var(--close-btn);font-size:1.5rem;font-weight:700;cursor:pointer;z-index:1001;transition:opacity .18s cubic-bezier(.22,1,.36,1)}ol{padding:0;margin:0;text-align:center;width:100%;max-width:450px;list-style:none;counter-reset:item}ol>li{opacity:1;transform:translateY(0);transition:opacity .42s cubic-bezier(.22,1,.36,1) .36s,transform .42s cubic-bezier(.22,1,.36,1) .36s}@starting-style{ol>li{opacity:0;transform:translateY(16px)}}@media(prefers-reduced-motion:reduce){ol>li{transform:none;transition-duration:1ms;transition-delay:0ms}}li{cursor:pointer;text-align:start;text-transform:uppercase;counter-increment:item}li:before{content:counter(item,decimal-leading-zero) \". \"}.modal-item{font-size:3.5rem}@media(max-width:768px){.modal-item{font-size:3rem}}\n"]
|
|
68
65
|
}]
|
|
69
66
|
}],
|
|
70
|
-
|
|
71
|
-
type:
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}, {
|
|
77
|
-
type: i1.MatDialogRef,
|
|
78
|
-
decorators: [{ type: Optional }]
|
|
79
|
-
}]
|
|
67
|
+
propDecorators: {
|
|
68
|
+
langs: [{ type: Input }],
|
|
69
|
+
closing: [{ type: Input }],
|
|
70
|
+
close: [{ type: Output }],
|
|
71
|
+
select: [{ type: Output }]
|
|
72
|
+
}
|
|
80
73
|
});
|
|
81
74
|
var NavModalComponent = class NavModalComponent {
|
|
82
75
|
navItems;
|
|
83
76
|
socialItems;
|
|
77
|
+
closing = false;
|
|
84
78
|
close = new EventEmitter();
|
|
85
79
|
closeModal() {
|
|
86
80
|
this.close.emit();
|
|
@@ -101,12 +95,14 @@ var NavModalComponent = class NavModalComponent {
|
|
|
101
95
|
selector: "lib-nav-modal",
|
|
102
96
|
inputs: {
|
|
103
97
|
navItems: "navItems",
|
|
104
|
-
socialItems: "socialItems"
|
|
98
|
+
socialItems: "socialItems",
|
|
99
|
+
closing: "closing"
|
|
105
100
|
},
|
|
106
101
|
outputs: { close: "close" },
|
|
102
|
+
host: { properties: { "class.is-closing": "closing" } },
|
|
107
103
|
ngImport: i0,
|
|
108
|
-
template: "<
|
|
109
|
-
styles: [":host{position:fixed;inset:0;width:100vw;height:100vh;background:
|
|
104
|
+
template: "<button (click)=\"closeModal()\" class=\"close-btn\" [class.is-closing]=\"closing\" type=\"button\" aria-label=\"Close menu\">✕</button>\n<div class=\"modal-content\" [class.is-closing]=\"closing\">\n\n @if (navItems?.length) {\n <ol>\n @for (item of navItems; track item.name) {\n <a [href]=\"item.url\" [linkType]=\"item.linkType\" (click)=\"closeModal()\">\n <li>\n <span class=\"modal-item\">{{ item.label }}</span>\n </li>\n </a>\n }\n </ol>\n }\n\n @if (socialItems?.length) {\n <div class=\"btn-group\">\n @for (social of socialItems; track social.label) {\n <a class=\"btn btn-link\" [href]=\"social.url\" [linkType]=\"social.linkType\">\n <ui-icon [name]=\"social.icon!\" [size]=\"17\" [color]=\"'var(--color-primary)'\"></ui-icon>\n {{ social.label }}\n </a>\n }\n </div>\n }\n</div>\n",
|
|
105
|
+
styles: [":host{position:fixed;inset:0;width:100vw;height:100vh;background:transparent;isolation:isolate;z-index:1000;display:flex;align-items:center;justify-content:center}:host:before{content:\"\";position:absolute;inset:0;z-index:0;background:var(--modal-bg);opacity:1;transform:scaleY(1);transform-origin:top center;transition:transform .36s cubic-bezier(.22,1,.36,1),opacity .36s cubic-bezier(.22,1,.36,1)}@starting-style{:host:before{opacity:0;transform:scaleY(0)}}:host.is-closing:before{transform-origin:top center;opacity:0;transform:scaleY(0);transition-delay:.66s}.modal-content{position:relative;z-index:1;opacity:1;transform:translateY(0) scale(1);transform-origin:center;transition:opacity .26s cubic-bezier(.22,1,.36,1) .18s}@starting-style{.modal-content{opacity:0}}.modal-content.is-closing{opacity:0;visibility:hidden;transition:opacity .26s cubic-bezier(.22,1,.36,1) .58s,visibility 1ms linear 1019ms}.modal-content.is-closing ol>a{opacity:0;transform:translateY(16px);transition-delay:.24s;transition-duration:.42s}.modal-content.is-closing .btn-group{opacity:0;transform:translateY(12px);transition-delay:0ms;transition-duration:.22s}@media(prefers-reduced-motion:reduce){.modal-content,.modal-content.is-closing,ol>a,.btn-group{transform:none;transition-duration:1ms;transition-delay:0ms}:host:before,:host.is-closing:before{opacity:0;transform:scaleY(0);transition-delay:0ms;transition-duration:1ms}}.close-btn{position:absolute;top:1rem;right:2rem;background:none;border:none;color:var(--close-btn);font-size:1.5rem;font-weight:700;cursor:pointer;z-index:1001;transition:opacity .18s cubic-bezier(.22,1,.36,1)}.close-btn.is-closing{opacity:0;pointer-events:none;transition-duration:.22s}ol{padding:0;margin:0;text-align:center;width:100%;max-width:450px;list-style:none;counter-reset:item}ol>a{display:block;opacity:1;transform:translateY(0);transition:opacity .42s cubic-bezier(.22,1,.36,1) .36s,transform .42s cubic-bezier(.22,1,.36,1) .36s}@starting-style{ol>a{opacity:0;transform:translateY(16px)}}.btn-group{margin-top:0;opacity:1;transform:translateY(0);transition:opacity .22s cubic-bezier(.22,1,.36,1) .8s,transform .22s cubic-bezier(.22,1,.36,1) .8s}@starting-style{.btn-group{opacity:0;transform:translateY(12px)}}li{cursor:pointer;text-align:start;counter-increment:item}a{text-decoration:none;text-transform:uppercase;color:var(--item-color)}li:before{content:counter(item,decimal-leading-zero) \". \"}.btn-link{text-transform:none}@media(max-width:768px){.modal-item{font-size:2.5rem}}\n"],
|
|
110
106
|
dependencies: [
|
|
111
107
|
{
|
|
112
108
|
kind: "ngmodule",
|
|
@@ -148,14 +144,16 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
148
144
|
LinkTypeDirective,
|
|
149
145
|
UiIconComponent
|
|
150
146
|
],
|
|
147
|
+
host: { "[class.is-closing]": "closing" },
|
|
151
148
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
152
|
-
template: "<
|
|
153
|
-
styles: [":host{position:fixed;inset:0;width:100vw;height:100vh;background:
|
|
149
|
+
template: "<button (click)=\"closeModal()\" class=\"close-btn\" [class.is-closing]=\"closing\" type=\"button\" aria-label=\"Close menu\">✕</button>\n<div class=\"modal-content\" [class.is-closing]=\"closing\">\n\n @if (navItems?.length) {\n <ol>\n @for (item of navItems; track item.name) {\n <a [href]=\"item.url\" [linkType]=\"item.linkType\" (click)=\"closeModal()\">\n <li>\n <span class=\"modal-item\">{{ item.label }}</span>\n </li>\n </a>\n }\n </ol>\n }\n\n @if (socialItems?.length) {\n <div class=\"btn-group\">\n @for (social of socialItems; track social.label) {\n <a class=\"btn btn-link\" [href]=\"social.url\" [linkType]=\"social.linkType\">\n <ui-icon [name]=\"social.icon!\" [size]=\"17\" [color]=\"'var(--color-primary)'\"></ui-icon>\n {{ social.label }}\n </a>\n }\n </div>\n }\n</div>\n",
|
|
150
|
+
styles: [":host{position:fixed;inset:0;width:100vw;height:100vh;background:transparent;isolation:isolate;z-index:1000;display:flex;align-items:center;justify-content:center}:host:before{content:\"\";position:absolute;inset:0;z-index:0;background:var(--modal-bg);opacity:1;transform:scaleY(1);transform-origin:top center;transition:transform .36s cubic-bezier(.22,1,.36,1),opacity .36s cubic-bezier(.22,1,.36,1)}@starting-style{:host:before{opacity:0;transform:scaleY(0)}}:host.is-closing:before{transform-origin:top center;opacity:0;transform:scaleY(0);transition-delay:.66s}.modal-content{position:relative;z-index:1;opacity:1;transform:translateY(0) scale(1);transform-origin:center;transition:opacity .26s cubic-bezier(.22,1,.36,1) .18s}@starting-style{.modal-content{opacity:0}}.modal-content.is-closing{opacity:0;visibility:hidden;transition:opacity .26s cubic-bezier(.22,1,.36,1) .58s,visibility 1ms linear 1019ms}.modal-content.is-closing ol>a{opacity:0;transform:translateY(16px);transition-delay:.24s;transition-duration:.42s}.modal-content.is-closing .btn-group{opacity:0;transform:translateY(12px);transition-delay:0ms;transition-duration:.22s}@media(prefers-reduced-motion:reduce){.modal-content,.modal-content.is-closing,ol>a,.btn-group{transform:none;transition-duration:1ms;transition-delay:0ms}:host:before,:host.is-closing:before{opacity:0;transform:scaleY(0);transition-delay:0ms;transition-duration:1ms}}.close-btn{position:absolute;top:1rem;right:2rem;background:none;border:none;color:var(--close-btn);font-size:1.5rem;font-weight:700;cursor:pointer;z-index:1001;transition:opacity .18s cubic-bezier(.22,1,.36,1)}.close-btn.is-closing{opacity:0;pointer-events:none;transition-duration:.22s}ol{padding:0;margin:0;text-align:center;width:100%;max-width:450px;list-style:none;counter-reset:item}ol>a{display:block;opacity:1;transform:translateY(0);transition:opacity .42s cubic-bezier(.22,1,.36,1) .36s,transform .42s cubic-bezier(.22,1,.36,1) .36s}@starting-style{ol>a{opacity:0;transform:translateY(16px)}}.btn-group{margin-top:0;opacity:1;transform:translateY(0);transition:opacity .22s cubic-bezier(.22,1,.36,1) .8s,transform .22s cubic-bezier(.22,1,.36,1) .8s}@starting-style{.btn-group{opacity:0;transform:translateY(12px)}}li{cursor:pointer;text-align:start;counter-increment:item}a{text-decoration:none;text-transform:uppercase;color:var(--item-color)}li:before{content:counter(item,decimal-leading-zero) \". \"}.btn-link{text-transform:none}@media(max-width:768px){.modal-item{font-size:2.5rem}}\n"]
|
|
154
151
|
}]
|
|
155
152
|
}],
|
|
156
153
|
propDecorators: {
|
|
157
154
|
navItems: [{ type: Input }],
|
|
158
155
|
socialItems: [{ type: Input }],
|
|
156
|
+
closing: [{ type: Input }],
|
|
159
157
|
close: [{ type: Output }]
|
|
160
158
|
}
|
|
161
159
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lluc_llull-ui-lib-modals.mjs","names":[],"sources":["../../../projects/ui-lib/modals/lang-modal/lang-modal.component.ts","../../../projects/ui-lib/modals/lang-modal/lang-modal.component.html","../../../projects/ui-lib/modals/nav-modal/nav-modal.component.ts","../../../projects/ui-lib/modals/nav-modal/nav-modal.component.html"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component,
|
|
1
|
+
{"version":3,"file":"lluc_llull-ui-lib-modals.mjs","names":[],"sources":["../../../projects/ui-lib/modals/lang-modal/lang-modal.component.ts","../../../projects/ui-lib/modals/lang-modal/lang-modal.component.html","../../../projects/ui-lib/modals/nav-modal/nav-modal.component.ts","../../../projects/ui-lib/modals/nav-modal/nav-modal.component.html"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { UiLibLangItemI } from '@lluc_llull/ui-lib/interfaces';\n\n@Component({\n selector: 'lib-lang-modal',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './lang-modal.component.html',\n styleUrl: './lang-modal.component.scss',\n host: {\n '[class.is-closing]': 'closing',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LangModalComponent {\n @Input() langs: UiLibLangItemI[] = [];\n @Input() closing = false;\n\n @Output() close = new EventEmitter<void>();\n @Output() select = new EventEmitter<UiLibLangItemI>();\n\n selectLang(lang: UiLibLangItemI) {\n this.select.emit(lang);\n }\n\n closeModal() {\n this.close.emit();\n }\n}\n","<button\n (click)=\"closeModal()\"\n class=\"close-btn\"\n [class.is-closing]=\"closing\"\n type=\"button\"\n aria-label=\"Close modal\"\n>\n ✕\n</button>\n<div class=\"modal-content\" [class.is-closing]=\"closing\">\n @if (langs && langs.length > 0) {\n <ol>\n @for (lang of langs; track lang.id) {\n <li (click)=\"selectLang(lang)\">\n <span class=\"modal-item\">{{ lang.label }}</span>\n </li>\n }\n </ol>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { LinkTypeDirective } from '@lluc_llull/ui-lib/directives';\nimport { UiLibNavItemsI, UiLibSocialItemsI } from '@lluc_llull/ui-lib/interfaces';\nimport { UiIconComponent } from '@lluc_llull/ui-lib/shared';\n\n@Component({\n selector: 'lib-nav-modal',\n standalone: true,\n imports: [CommonModule, LinkTypeDirective, UiIconComponent],\n templateUrl: './nav-modal.component.html',\n styleUrl: './nav-modal.component.scss',\n host: {\n '[class.is-closing]': 'closing',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NavModalComponent {\n @Input() navItems?: UiLibNavItemsI[];\n @Input() socialItems?: UiLibSocialItemsI[];\n @Input() closing = false;\n\n @Output() close = new EventEmitter<void>();\n\n closeModal() {\n this.close.emit();\n }\n}\n","<button (click)=\"closeModal()\" class=\"close-btn\" [class.is-closing]=\"closing\" type=\"button\" aria-label=\"Close menu\">✕</button>\n<div class=\"modal-content\" [class.is-closing]=\"closing\">\n\n @if (navItems?.length) {\n <ol>\n @for (item of navItems; track item.name) {\n <a [href]=\"item.url\" [linkType]=\"item.linkType\" (click)=\"closeModal()\">\n <li>\n <span class=\"modal-item\">{{ item.label }}</span>\n </li>\n </a>\n }\n </ol>\n }\n\n @if (socialItems?.length) {\n <div class=\"btn-group\">\n @for (social of socialItems; track social.label) {\n <a class=\"btn btn-link\" [href]=\"social.url\" [linkType]=\"social.linkType\">\n <ui-icon [name]=\"social.icon!\" [size]=\"17\" [color]=\"'var(--color-primary)'\"></ui-icon>\n {{ social.label }}\n </a>\n }\n </div>\n }\n</div>\n"],"mappings":";;;;;AAeA,IAAa,qBAAb,MAAa,mBAAkB;CAClB,QAA0B,CAAA;CAC1B,UAAU;CAET,QAAQ,IAAI,aAAY;CACxB,SAAS,IAAI,aAAY;CAEnC,WAAW,MAAoB;EAC3B,KAAK,OAAO,KAAK,IAAI;CACzB;CAEA,aAAU;EACN,KAAK,MAAM,KAAI;CACnB;CAbS,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAkB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAlB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAkB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;GAAA,SAAA;EAAA;EAAA,SAAA;GAAA,OAAA;GAAA,QAAA;EAAA;EAAA,MAAA,EAAA,YAAA,EAAA,oBAAA,UAAA,EAAA;EAAA,UAAA;EAAA,UCf/B;EAoBA,QAAA,CAAA,u/DAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MDbc;EAAY,CAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAQb,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAkB,YAAA,CAAA;EAX9B,MAAA;EACa,MAAA,CAAA;GAAA,UAAA;GAAgB,YACd;GAAI,SACP,CAAC,YAAY;GAAC,MAGjB,EACF,sBAAsB,UACzB;GAAA,iBACgB,wBAAwB;GAAM,UAAA;GAAA,QAAA,CAAA,u/DAAA;EAAA,CAAA;;;E,UAG9C,MAAA,M;E,YACA,MAAA,M;E,UAEA,MAAA,O;E,WACA,MAAA,O;;;AEHL,IAAa,oBAAb,MAAa,kBAAiB;CACjB;CACA;CACA,UAAU;CAET,QAAQ,IAAI,aAAY;CAElC,aAAU;EACN,KAAK,MAAM,KAAI;CACnB;CATS,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAiB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAjB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAiB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,UAAA;GAAA,aAAA;GAAA,SAAA;EAAA;EAAA,SAAA,EAAA,OAAA,QAAA;EAAA,MAAA,EAAA,YAAA,EAAA,oBAAA,UAAA,EAAA;EAAA,UAAA;EAAA,UCjB9B;EA0BA,QAAA,CAAA,o9EAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MDjBc;GAAY;GAAA;IAAA,MAAA;IAAA,MAAE;IAAiB,UAAA;IAAA,QAAA,CAAA,YAAA,MAAA;IAAA,SAAA,CAAA,eAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAe,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;IAAA;GAAA;EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAQjD,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAiB,YAAA,CAAA;EAX7B,MAAA;EACa,MAAA,CAAA;GAAA,UAAA;GAAe,YACb;GAAI,SACP;IAAC;IAAc;IAAmB;GAAe;GAAC,MAGrD,EACF,sBAAsB,UACzB;GAAA,iBACgB,wBAAwB;GAAM,UAAA;GAAA,QAAA,CAAA,o9EAAA;EAAA,CAAA;;;E,aAG9C,MAAA,M;E,gBACA,MAAA,M;E,YACA,MAAA,M;E,UAEA,MAAA,O"}
|
package/package.json
CHANGED
package/src/lib/styles/main.css
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
border-radius: 6px;
|
|
4
4
|
font-weight: 600;
|
|
5
5
|
cursor: pointer;
|
|
6
|
-
transition:
|
|
6
|
+
transition: background-color 0.2s ease, color 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease;
|
|
7
7
|
border: none;
|
|
8
8
|
display: inline-flex;
|
|
9
9
|
align-items: center;
|
|
@@ -131,6 +131,21 @@ body {
|
|
|
131
131
|
background-color: var(--content-bg);
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
+
/* Shared motion primitives for Angular Material dialogs. */
|
|
135
|
+
.cdk-overlay-backdrop {
|
|
136
|
+
opacity: 0;
|
|
137
|
+
transition: opacity 220ms cubic-bezier(0.22, 1, 0.36, 1);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.cdk-overlay-backdrop.cdk-overlay-backdrop-showing {
|
|
141
|
+
opacity: 1;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
@media (prefers-reduced-motion: reduce) {
|
|
145
|
+
.cdk-overlay-backdrop {
|
|
146
|
+
transition-duration: 1ms;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
134
149
|
a {
|
|
135
150
|
text-decoration: none;
|
|
136
151
|
}
|
package/styles/main.css
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
border-radius: 6px;
|
|
4
4
|
font-weight: 600;
|
|
5
5
|
cursor: pointer;
|
|
6
|
-
transition:
|
|
6
|
+
transition: background-color 0.2s ease, color 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease;
|
|
7
7
|
border: none;
|
|
8
8
|
display: inline-flex;
|
|
9
9
|
align-items: center;
|
|
@@ -131,6 +131,21 @@ body {
|
|
|
131
131
|
background-color: var(--content-bg);
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
+
/* Shared motion primitives for Angular Material dialogs. */
|
|
135
|
+
.cdk-overlay-backdrop {
|
|
136
|
+
opacity: 0;
|
|
137
|
+
transition: opacity 220ms cubic-bezier(0.22, 1, 0.36, 1);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.cdk-overlay-backdrop.cdk-overlay-backdrop-showing {
|
|
141
|
+
opacity: 1;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
@media (prefers-reduced-motion: reduce) {
|
|
145
|
+
.cdk-overlay-backdrop {
|
|
146
|
+
transition-duration: 1ms;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
134
149
|
a {
|
|
135
150
|
text-decoration: none;
|
|
136
151
|
}
|
|
@@ -5,6 +5,7 @@ import { Theme, ThemeService } from "@lluc_llull/ui-lib/theme";
|
|
|
5
5
|
export declare class HeaderClearComponent implements OnInit, OnDestroy, OnChanges {
|
|
6
6
|
private themeService;
|
|
7
7
|
isMenuOpen: boolean;
|
|
8
|
+
isMenuClosing: boolean;
|
|
8
9
|
currentTheme: Theme;
|
|
9
10
|
private themeSubscription?;
|
|
10
11
|
logo?: UiLibImageI;
|
|
@@ -23,6 +24,8 @@ export declare class HeaderClearComponent implements OnInit, OnDestroy, OnChange
|
|
|
23
24
|
openLanguagesModal(): void;
|
|
24
25
|
toggleTheme(): void;
|
|
25
26
|
toggleMenu(): void;
|
|
27
|
+
closeMenu(): void;
|
|
28
|
+
finishMenuClose(event: TransitionEvent): void;
|
|
26
29
|
static ɵfac: i0.ɵɵFactoryDeclaration<HeaderClearComponent, never>;
|
|
27
30
|
static ɵcmp: i0.ɵɵComponentDeclaration<HeaderClearComponent, "lib-header-clear", never, {
|
|
28
31
|
"logo": {
|
|
@@ -5,6 +5,7 @@ import { Theme, ThemeService } from "@lluc_llull/ui-lib/theme";
|
|
|
5
5
|
export declare class HeaderMobileComponent implements OnInit, OnChanges, OnDestroy {
|
|
6
6
|
private themeService;
|
|
7
7
|
isMenuOpen: boolean;
|
|
8
|
+
isMenuClosing: boolean;
|
|
8
9
|
currentTheme: Theme;
|
|
9
10
|
private themeSubscription?;
|
|
10
11
|
logo?: UiLibImageI;
|
|
@@ -23,6 +24,8 @@ export declare class HeaderMobileComponent implements OnInit, OnChanges, OnDestr
|
|
|
23
24
|
openLanguagesModal(): void;
|
|
24
25
|
toggleTheme(): void;
|
|
25
26
|
toggleMenu(): void;
|
|
27
|
+
closeMenu(): void;
|
|
28
|
+
finishMenuClose(event: TransitionEvent): void;
|
|
26
29
|
static ɵfac: i0.ɵɵFactoryDeclaration<HeaderMobileComponent, never>;
|
|
27
30
|
static ɵcmp: i0.ɵɵComponentDeclaration<HeaderMobileComponent, "lib-header-mobile", never, {
|
|
28
31
|
"logo": {
|
|
@@ -5,6 +5,7 @@ import { Theme, ThemeService } from "@lluc_llull/ui-lib/theme";
|
|
|
5
5
|
export declare class HeaderClearComponent implements OnInit, OnDestroy, OnChanges {
|
|
6
6
|
private themeService;
|
|
7
7
|
isMenuOpen: boolean;
|
|
8
|
+
isMenuClosing: boolean;
|
|
8
9
|
currentTheme: Theme;
|
|
9
10
|
private themeSubscription?;
|
|
10
11
|
logo?: UiLibImageI;
|
|
@@ -23,6 +24,8 @@ export declare class HeaderClearComponent implements OnInit, OnDestroy, OnChange
|
|
|
23
24
|
openLanguagesModal(): void;
|
|
24
25
|
toggleTheme(): void;
|
|
25
26
|
toggleMenu(): void;
|
|
27
|
+
closeMenu(): void;
|
|
28
|
+
finishMenuClose(event: TransitionEvent): void;
|
|
26
29
|
static ɵfac: i0.ɵɵFactoryDeclaration<HeaderClearComponent, never>;
|
|
27
30
|
static ɵcmp: i0.ɵɵComponentDeclaration<HeaderClearComponent, "lib-header-clear", never, {
|
|
28
31
|
"logo": {
|
|
@@ -69,6 +72,7 @@ export interface HeaderClearI {
|
|
|
69
72
|
export declare class HeaderMobileComponent implements OnInit, OnChanges, OnDestroy {
|
|
70
73
|
private themeService;
|
|
71
74
|
isMenuOpen: boolean;
|
|
75
|
+
isMenuClosing: boolean;
|
|
72
76
|
currentTheme: Theme;
|
|
73
77
|
private themeSubscription?;
|
|
74
78
|
logo?: UiLibImageI;
|
|
@@ -87,6 +91,8 @@ export declare class HeaderMobileComponent implements OnInit, OnChanges, OnDestr
|
|
|
87
91
|
openLanguagesModal(): void;
|
|
88
92
|
toggleTheme(): void;
|
|
89
93
|
toggleMenu(): void;
|
|
94
|
+
closeMenu(): void;
|
|
95
|
+
finishMenuClose(event: TransitionEvent): void;
|
|
90
96
|
static ɵfac: i0.ɵɵFactoryDeclaration<HeaderMobileComponent, never>;
|
|
91
97
|
static ɵcmp: i0.ɵɵComponentDeclaration<HeaderMobileComponent, "lib-header-mobile", never, {
|
|
92
98
|
"logo": {
|
|
@@ -1,29 +1,33 @@
|
|
|
1
|
-
import { MatDialogRef } from "@angular/material/dialog";
|
|
2
|
-
import { UiLibLangItemI, UiLibNavItemsI, UiLibSocialItemsI } from "@lluc_llull/ui-lib/interfaces";
|
|
3
1
|
import * as i0 from "@angular/core";
|
|
4
2
|
import { EventEmitter } from "@angular/core";
|
|
5
|
-
|
|
6
|
-
langs: any[];
|
|
7
|
-
currentLang: string;
|
|
8
|
-
}
|
|
3
|
+
import { UiLibLangItemI, UiLibNavItemsI, UiLibSocialItemsI } from "@lluc_llull/ui-lib/interfaces";
|
|
9
4
|
export declare class LangModalComponent {
|
|
10
|
-
data: LangModalData;
|
|
11
|
-
dialogRef?: MatDialogRef<LangModalComponent> | undefined;
|
|
12
5
|
langs: UiLibLangItemI[];
|
|
13
|
-
|
|
6
|
+
closing: boolean;
|
|
7
|
+
close: EventEmitter<void>;
|
|
8
|
+
select: EventEmitter<UiLibLangItemI>;
|
|
14
9
|
selectLang(lang: UiLibLangItemI): void;
|
|
15
10
|
closeModal(): void;
|
|
16
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<LangModalComponent,
|
|
17
|
-
|
|
11
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LangModalComponent, never>;
|
|
12
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LangModalComponent, "lib-lang-modal", never, {
|
|
13
|
+
"langs": {
|
|
14
|
+
"alias": "langs";
|
|
15
|
+
"required": false;
|
|
16
|
+
};
|
|
17
|
+
"closing": {
|
|
18
|
+
"alias": "closing";
|
|
19
|
+
"required": false;
|
|
20
|
+
};
|
|
18
21
|
}, {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
"close": "close";
|
|
23
|
+
"select": "select";
|
|
24
|
+
}, never, never, true, never>;
|
|
22
25
|
}
|
|
23
26
|
export interface LangModalI {}
|
|
24
27
|
export declare class NavModalComponent {
|
|
25
28
|
navItems?: UiLibNavItemsI[];
|
|
26
29
|
socialItems?: UiLibSocialItemsI[];
|
|
30
|
+
closing: boolean;
|
|
27
31
|
close: EventEmitter<void>;
|
|
28
32
|
closeModal(): void;
|
|
29
33
|
static ɵfac: i0.ɵɵFactoryDeclaration<NavModalComponent, never>;
|
|
@@ -36,6 +40,10 @@ export declare class NavModalComponent {
|
|
|
36
40
|
"alias": "socialItems";
|
|
37
41
|
"required": false;
|
|
38
42
|
};
|
|
43
|
+
"closing": {
|
|
44
|
+
"alias": "closing";
|
|
45
|
+
"required": false;
|
|
46
|
+
};
|
|
39
47
|
}, {
|
|
40
48
|
"close": "close";
|
|
41
49
|
}, never, never, true, never>;
|
|
@@ -43,5 +51,4 @@ export declare class NavModalComponent {
|
|
|
43
51
|
export interface NavModalI {
|
|
44
52
|
navItems?: UiLibNavItemsI[];
|
|
45
53
|
socialItems?: UiLibNavItemsI[];
|
|
46
|
-
}
|
|
47
|
-
export {};
|
|
54
|
+
}
|