valtech-components 2.0.408 → 2.0.412
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/esm2022/lib/components/atoms/horizontal-scroll/horizontal-scroll.component.mjs +82 -0
- package/esm2022/lib/components/atoms/horizontal-scroll/types.mjs +2 -0
- package/esm2022/lib/components/atoms/rights-footer/rights-footer.component.mjs +82 -0
- package/esm2022/lib/components/atoms/rights-footer/types.mjs +2 -0
- package/esm2022/lib/components/molecules/check-input/check-input.component.mjs +55 -11
- package/esm2022/lib/components/molecules/email-input/email-input.component.mjs +13 -4
- package/esm2022/lib/components/molecules/expandable-text/expandable-text.component.mjs +27 -23
- package/esm2022/lib/components/molecules/footer-links/footer-links.component.mjs +277 -0
- package/esm2022/lib/components/molecules/footer-links/types.mjs +2 -0
- package/esm2022/lib/components/molecules/links-accordion/links-accordion.component.mjs +157 -0
- package/esm2022/lib/components/molecules/links-accordion/types.mjs +2 -0
- package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +12 -2
- package/esm2022/lib/components/molecules/prompter/prompter.component.mjs +39 -9
- package/esm2022/lib/components/molecules/prompter/types.mjs +1 -1
- package/esm2022/lib/components/molecules/radio-input/radio-input.component.mjs +13 -4
- package/esm2022/lib/components/molecules/recap-card/recap-card.component.mjs +78 -0
- package/esm2022/lib/components/molecules/recap-card/types.mjs +2 -0
- package/esm2022/lib/components/molecules/select-input/select-input.component.mjs +31 -14
- package/esm2022/lib/components/molecules/swipe-carousel/swipe-carousel.component.mjs +206 -0
- package/esm2022/lib/components/molecules/swipe-carousel/types.mjs +2 -0
- package/esm2022/lib/components/molecules/testimonial-card/testimonial-card.component.mjs +138 -0
- package/esm2022/lib/components/molecules/testimonial-card/types.mjs +2 -0
- package/esm2022/lib/components/molecules/text-input/text-input.component.mjs +14 -4
- package/esm2022/lib/components/organisms/cards-carousel/cards-carousel.component.mjs +61 -0
- package/esm2022/lib/components/organisms/cards-carousel/types.mjs +2 -0
- package/esm2022/lib/components/organisms/company-footer/company-footer.component.mjs +72 -0
- package/esm2022/lib/components/organisms/company-footer/types.mjs +2 -0
- package/esm2022/lib/components/organisms/data-table/data-table.component.mjs +184 -6
- package/esm2022/lib/components/organisms/data-table/types.mjs +1 -1
- package/esm2022/lib/components/organisms/form/form.component.mjs +2 -2
- package/esm2022/lib/components/organisms/fun-header/fun-header.component.mjs +225 -0
- package/esm2022/lib/components/organisms/fun-header/types.mjs +2 -0
- package/esm2022/lib/components/organisms/menu/menu.component.mjs +197 -0
- package/esm2022/lib/components/organisms/menu/types.mjs +2 -0
- package/esm2022/lib/components/organisms/testimonial-carousel/testimonial-carousel.component.mjs +72 -0
- package/esm2022/lib/components/organisms/testimonial-carousel/types.mjs +2 -0
- package/esm2022/lib/components/templates/page-content/page-content.component.mjs +156 -0
- package/esm2022/lib/components/templates/page-content/types.mjs +2 -0
- package/esm2022/lib/components/templates/page-template/page-template.component.mjs +181 -0
- package/esm2022/lib/components/templates/page-template/types.mjs +2 -0
- package/esm2022/lib/components/templates/page-wrapper/page-wrapper.component.mjs +195 -0
- package/esm2022/lib/components/templates/page-wrapper/types.mjs +2 -0
- package/esm2022/lib/components/types.mjs +1 -1
- package/esm2022/lib/services/firebase/config.mjs +103 -0
- package/esm2022/lib/services/firebase/firebase.service.mjs +285 -0
- package/esm2022/lib/services/firebase/firestore-collection.mjs +266 -0
- package/esm2022/lib/services/firebase/firestore.service.mjs +508 -0
- package/esm2022/lib/services/firebase/index.mjs +46 -0
- package/esm2022/lib/services/firebase/messaging.service.mjs +503 -0
- package/esm2022/lib/services/firebase/storage.service.mjs +421 -0
- package/esm2022/lib/services/firebase/types.mjs +8 -0
- package/esm2022/lib/services/firebase/utils/path-builder.mjs +195 -0
- package/esm2022/lib/services/firebase/utils/query-builder.mjs +302 -0
- package/esm2022/public-api.mjs +33 -1
- package/fesm2022/valtech-components.mjs +5839 -862
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/horizontal-scroll/horizontal-scroll.component.d.ts +41 -0
- package/lib/components/atoms/horizontal-scroll/types.d.ts +13 -0
- package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +39 -0
- package/lib/components/atoms/rights-footer/types.d.ts +13 -0
- package/lib/components/molecules/check-input/check-input.component.d.ts +17 -2
- package/lib/components/molecules/email-input/email-input.component.d.ts +1 -2
- package/lib/components/molecules/footer-links/footer-links.component.d.ts +47 -0
- package/lib/components/molecules/footer-links/types.d.ts +37 -0
- package/lib/components/molecules/links-accordion/links-accordion.component.d.ts +48 -0
- package/lib/components/molecules/links-accordion/types.d.ts +33 -0
- package/lib/components/molecules/password-input/password-input.component.d.ts +1 -1
- package/lib/components/molecules/prompter/prompter.component.d.ts +9 -10
- package/lib/components/molecules/prompter/types.d.ts +7 -1
- package/lib/components/molecules/radio-input/radio-input.component.d.ts +1 -2
- package/lib/components/molecules/recap-card/recap-card.component.d.ts +36 -0
- package/lib/components/molecules/recap-card/types.d.ts +30 -0
- package/lib/components/molecules/select-input/select-input.component.d.ts +6 -1
- package/lib/components/molecules/swipe-carousel/swipe-carousel.component.d.ts +66 -0
- package/lib/components/molecules/swipe-carousel/types.d.ts +35 -0
- package/lib/components/molecules/testimonial-card/testimonial-card.component.d.ts +41 -0
- package/lib/components/molecules/testimonial-card/types.d.ts +25 -0
- package/lib/components/molecules/text-input/text-input.component.d.ts +13 -4
- package/lib/components/organisms/cards-carousel/cards-carousel.component.d.ts +30 -0
- package/lib/components/organisms/cards-carousel/types.d.ts +11 -0
- package/lib/components/organisms/company-footer/company-footer.component.d.ts +32 -0
- package/lib/components/organisms/company-footer/types.d.ts +15 -0
- package/lib/components/organisms/data-table/data-table.component.d.ts +4 -1
- package/lib/components/organisms/data-table/types.d.ts +6 -0
- package/lib/components/organisms/fun-header/fun-header.component.d.ts +72 -0
- package/lib/components/organisms/fun-header/types.d.ts +28 -0
- package/lib/components/organisms/menu/menu.component.d.ts +39 -0
- package/lib/components/organisms/menu/types.d.ts +23 -0
- package/lib/components/organisms/testimonial-carousel/testimonial-carousel.component.d.ts +33 -0
- package/lib/components/organisms/testimonial-carousel/types.d.ts +8 -0
- package/lib/components/templates/page-content/page-content.component.d.ts +55 -0
- package/lib/components/templates/page-content/types.d.ts +14 -0
- package/lib/components/templates/page-template/page-template.component.d.ts +49 -0
- package/lib/components/templates/page-template/types.d.ts +17 -0
- package/lib/components/templates/page-wrapper/page-wrapper.component.d.ts +61 -0
- package/lib/components/templates/page-wrapper/types.d.ts +19 -0
- package/lib/components/types.d.ts +14 -0
- package/lib/services/firebase/config.d.ts +49 -0
- package/lib/services/firebase/firebase.service.d.ts +140 -0
- package/lib/services/firebase/firestore-collection.d.ts +195 -0
- package/lib/services/firebase/firestore.service.d.ts +303 -0
- package/lib/services/firebase/index.d.ts +38 -0
- package/lib/services/firebase/messaging.service.d.ts +254 -0
- package/lib/services/firebase/storage.service.d.ts +204 -0
- package/lib/services/firebase/types.d.ts +279 -0
- package/lib/services/firebase/utils/path-builder.d.ts +132 -0
- package/lib/services/firebase/utils/query-builder.d.ts +210 -0
- package/package.json +3 -1
- package/public-api.d.ts +31 -0
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { Component, EventEmitter, inject, Input, Output } from '@angular/core';
|
|
3
|
+
import { IonButton, IonCol, IonIcon, IonRow } from '@ionic/angular/standalone';
|
|
4
|
+
import { NavigationService } from '../../../services/navigation.service';
|
|
5
|
+
import { DividerComponent } from '../../atoms/divider/divider.component';
|
|
6
|
+
import { ImageComponent } from '../../atoms/image/image.component';
|
|
7
|
+
import { LanguageSelectorComponent } from '../language-selector/language-selector.component';
|
|
8
|
+
import { LinksCakeComponent } from '../links-cake/links-cake.component';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@angular/common";
|
|
11
|
+
/**
|
|
12
|
+
* val-footer-links
|
|
13
|
+
*
|
|
14
|
+
* A responsive footer component with two columns of links, social media icons,
|
|
15
|
+
* logo, and optional language selector.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* <val-footer-links
|
|
19
|
+
* [props]="{
|
|
20
|
+
* leftLinks: { title: 'Company', links: [...] },
|
|
21
|
+
* rightLinks: { title: 'Resources', links: [...] },
|
|
22
|
+
* logo: 'logo.svg',
|
|
23
|
+
* logoRoute: '/',
|
|
24
|
+
* socialLinks: [
|
|
25
|
+
* { icon: 'logo-facebook', url: 'https://facebook.com', name: 'Facebook' }
|
|
26
|
+
* ]
|
|
27
|
+
* }"
|
|
28
|
+
* ></val-footer-links>
|
|
29
|
+
*
|
|
30
|
+
* @input props - Footer configuration
|
|
31
|
+
* @output logoClick - Emits when logo is clicked
|
|
32
|
+
*/
|
|
33
|
+
export class FooterLinksComponent {
|
|
34
|
+
constructor() {
|
|
35
|
+
this.nav = inject(NavigationService);
|
|
36
|
+
/**
|
|
37
|
+
* Emits when the logo is clicked.
|
|
38
|
+
*/
|
|
39
|
+
this.logoClick = new EventEmitter();
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Default language selector configuration.
|
|
43
|
+
*/
|
|
44
|
+
get languageSelectorConfig() {
|
|
45
|
+
if (this.props.languageSelector && typeof this.props.languageSelector === 'object') {
|
|
46
|
+
return this.props.languageSelector;
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
showLabel: false,
|
|
50
|
+
labelConfig: {
|
|
51
|
+
className: '_global',
|
|
52
|
+
key: 'language',
|
|
53
|
+
fallback: 'Idioma',
|
|
54
|
+
},
|
|
55
|
+
showFlags: true,
|
|
56
|
+
color: 'primary',
|
|
57
|
+
size: 'default',
|
|
58
|
+
fill: 'outline',
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Handles logo click - navigates if route provided, otherwise emits event.
|
|
63
|
+
*/
|
|
64
|
+
onLogoClick() {
|
|
65
|
+
if (this.props.logoRoute) {
|
|
66
|
+
this.nav.navigateByUrl(this.props.logoRoute);
|
|
67
|
+
}
|
|
68
|
+
this.logoClick.emit();
|
|
69
|
+
}
|
|
70
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FooterLinksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
71
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FooterLinksComponent, isStandalone: true, selector: "val-footer-links", inputs: { props: "props" }, outputs: { logoClick: "logoClick" }, ngImport: i0, template: `
|
|
72
|
+
<div class="footer-links">
|
|
73
|
+
<ion-row>
|
|
74
|
+
<ion-col size="12">
|
|
75
|
+
<val-divider [props]="props.divider || { size: 'small', color: 'medium', fill: 'solid' }" />
|
|
76
|
+
</ion-col>
|
|
77
|
+
<ion-col size-xs="12" size-md="6">
|
|
78
|
+
<val-links-cake [props]="props.leftLinks" />
|
|
79
|
+
</ion-col>
|
|
80
|
+
<ion-col size-xs="12" size-md="6">
|
|
81
|
+
<val-links-cake [props]="props.rightLinks" />
|
|
82
|
+
</ion-col>
|
|
83
|
+
</ion-row>
|
|
84
|
+
|
|
85
|
+
<ion-row *ngIf="props.languageSelector !== false" style="margin-top: 1rem;">
|
|
86
|
+
<ion-col size="12">
|
|
87
|
+
<val-language-selector [props]="languageSelectorConfig" />
|
|
88
|
+
</ion-col>
|
|
89
|
+
</ion-row>
|
|
90
|
+
|
|
91
|
+
<ion-row style="margin-top: 1rem;">
|
|
92
|
+
<ion-col size="12" *ngIf="props.logo || props.socialLinks?.length">
|
|
93
|
+
<!-- Mobile layout: centered -->
|
|
94
|
+
<div class="mobile-layout">
|
|
95
|
+
<val-image
|
|
96
|
+
*ngIf="props.logo"
|
|
97
|
+
class="logo-clickable"
|
|
98
|
+
style="display: block; margin-top: 1rem;"
|
|
99
|
+
[props]="{
|
|
100
|
+
width: 14,
|
|
101
|
+
mode: 'box',
|
|
102
|
+
shaded: false,
|
|
103
|
+
bordered: false,
|
|
104
|
+
size: 'small',
|
|
105
|
+
src: props.logo,
|
|
106
|
+
alt: props.logoAlt || 'Logo',
|
|
107
|
+
limited: false,
|
|
108
|
+
dark: true
|
|
109
|
+
}"
|
|
110
|
+
(click)="onLogoClick()"
|
|
111
|
+
/>
|
|
112
|
+
<div class="social-links-container" *ngIf="props.socialLinks?.length" style="margin-top: 1rem">
|
|
113
|
+
<ion-button
|
|
114
|
+
*ngFor="let social of props.socialLinks"
|
|
115
|
+
fill="clear"
|
|
116
|
+
size="small"
|
|
117
|
+
[href]="social.url"
|
|
118
|
+
target="_blank"
|
|
119
|
+
rel="noopener"
|
|
120
|
+
class="social-button"
|
|
121
|
+
[attr.aria-label]="social.name"
|
|
122
|
+
>
|
|
123
|
+
<ion-icon [name]="social.icon" slot="icon-only" [color]="props.socialIconColor || 'dark'"></ion-icon>
|
|
124
|
+
</ion-button>
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
|
|
128
|
+
<!-- Desktop layout: space-between -->
|
|
129
|
+
<div class="desktop-layout">
|
|
130
|
+
<val-image
|
|
131
|
+
*ngIf="props.logo"
|
|
132
|
+
class="logo-clickable"
|
|
133
|
+
[props]="{
|
|
134
|
+
width: 16,
|
|
135
|
+
mode: 'box',
|
|
136
|
+
shaded: false,
|
|
137
|
+
bordered: false,
|
|
138
|
+
size: 'small',
|
|
139
|
+
src: props.logo,
|
|
140
|
+
alt: props.logoAlt || 'Logo',
|
|
141
|
+
limited: false,
|
|
142
|
+
dark: true
|
|
143
|
+
}"
|
|
144
|
+
(click)="onLogoClick()"
|
|
145
|
+
/>
|
|
146
|
+
<div class="social-links-container" *ngIf="props.socialLinks?.length">
|
|
147
|
+
<ion-button
|
|
148
|
+
*ngFor="let social of props.socialLinks"
|
|
149
|
+
fill="clear"
|
|
150
|
+
size="small"
|
|
151
|
+
[href]="social.url"
|
|
152
|
+
target="_blank"
|
|
153
|
+
rel="noopener"
|
|
154
|
+
class="social-button"
|
|
155
|
+
[attr.aria-label]="social.name"
|
|
156
|
+
>
|
|
157
|
+
<ion-icon [name]="social.icon" slot="icon-only" [color]="props.socialIconColor || 'dark'"></ion-icon>
|
|
158
|
+
</ion-button>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
</ion-col>
|
|
162
|
+
</ion-row>
|
|
163
|
+
</div>
|
|
164
|
+
`, isInline: true, styles: [".footer-links .mobile-layout{display:block;text-align:center;padding:8px 0}.footer-links .desktop-layout{display:none;align-items:center;justify-content:space-between;margin-top:16px;padding:8px 0}.footer-links .social-links-container{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:8px;flex-wrap:wrap}.footer-links .social-button{--color: #666;--color-hover: #333;transition:all .2s ease;min-height:40px;min-width:40px;margin:0}.footer-links .social-button:hover{--color: #333;transform:translateY(-1px)}.footer-links .social-button ion-icon{font-size:20px}.footer-links .logo-clickable{cursor:pointer}@media (min-width: 768px){.footer-links .mobile-layout{display:none!important}.footer-links .desktop-layout{display:flex!important}.footer-links .social-links-container{margin-top:0;justify-content:flex-end}}@media (max-width: 767px){.footer-links .mobile-layout{display:block!important}.footer-links .desktop-layout{display:none!important}.footer-links .social-links-container{justify-content:center;margin-bottom:8px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: IonRow, selector: "ion-row" }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: DividerComponent, selector: "val-divider", inputs: ["props"] }, { kind: "component", type: ImageComponent, selector: "val-image", inputs: ["props"] }, { kind: "component", type: LinksCakeComponent, selector: "val-links-cake", inputs: ["props"] }, { kind: "component", type: LanguageSelectorComponent, selector: "val-language-selector", inputs: ["props"], outputs: ["languageChange"] }] }); }
|
|
165
|
+
}
|
|
166
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FooterLinksComponent, decorators: [{
|
|
167
|
+
type: Component,
|
|
168
|
+
args: [{ selector: 'val-footer-links', standalone: true, imports: [
|
|
169
|
+
CommonModule,
|
|
170
|
+
IonCol,
|
|
171
|
+
IonRow,
|
|
172
|
+
IonButton,
|
|
173
|
+
IonIcon,
|
|
174
|
+
DividerComponent,
|
|
175
|
+
ImageComponent,
|
|
176
|
+
LinksCakeComponent,
|
|
177
|
+
LanguageSelectorComponent,
|
|
178
|
+
], template: `
|
|
179
|
+
<div class="footer-links">
|
|
180
|
+
<ion-row>
|
|
181
|
+
<ion-col size="12">
|
|
182
|
+
<val-divider [props]="props.divider || { size: 'small', color: 'medium', fill: 'solid' }" />
|
|
183
|
+
</ion-col>
|
|
184
|
+
<ion-col size-xs="12" size-md="6">
|
|
185
|
+
<val-links-cake [props]="props.leftLinks" />
|
|
186
|
+
</ion-col>
|
|
187
|
+
<ion-col size-xs="12" size-md="6">
|
|
188
|
+
<val-links-cake [props]="props.rightLinks" />
|
|
189
|
+
</ion-col>
|
|
190
|
+
</ion-row>
|
|
191
|
+
|
|
192
|
+
<ion-row *ngIf="props.languageSelector !== false" style="margin-top: 1rem;">
|
|
193
|
+
<ion-col size="12">
|
|
194
|
+
<val-language-selector [props]="languageSelectorConfig" />
|
|
195
|
+
</ion-col>
|
|
196
|
+
</ion-row>
|
|
197
|
+
|
|
198
|
+
<ion-row style="margin-top: 1rem;">
|
|
199
|
+
<ion-col size="12" *ngIf="props.logo || props.socialLinks?.length">
|
|
200
|
+
<!-- Mobile layout: centered -->
|
|
201
|
+
<div class="mobile-layout">
|
|
202
|
+
<val-image
|
|
203
|
+
*ngIf="props.logo"
|
|
204
|
+
class="logo-clickable"
|
|
205
|
+
style="display: block; margin-top: 1rem;"
|
|
206
|
+
[props]="{
|
|
207
|
+
width: 14,
|
|
208
|
+
mode: 'box',
|
|
209
|
+
shaded: false,
|
|
210
|
+
bordered: false,
|
|
211
|
+
size: 'small',
|
|
212
|
+
src: props.logo,
|
|
213
|
+
alt: props.logoAlt || 'Logo',
|
|
214
|
+
limited: false,
|
|
215
|
+
dark: true
|
|
216
|
+
}"
|
|
217
|
+
(click)="onLogoClick()"
|
|
218
|
+
/>
|
|
219
|
+
<div class="social-links-container" *ngIf="props.socialLinks?.length" style="margin-top: 1rem">
|
|
220
|
+
<ion-button
|
|
221
|
+
*ngFor="let social of props.socialLinks"
|
|
222
|
+
fill="clear"
|
|
223
|
+
size="small"
|
|
224
|
+
[href]="social.url"
|
|
225
|
+
target="_blank"
|
|
226
|
+
rel="noopener"
|
|
227
|
+
class="social-button"
|
|
228
|
+
[attr.aria-label]="social.name"
|
|
229
|
+
>
|
|
230
|
+
<ion-icon [name]="social.icon" slot="icon-only" [color]="props.socialIconColor || 'dark'"></ion-icon>
|
|
231
|
+
</ion-button>
|
|
232
|
+
</div>
|
|
233
|
+
</div>
|
|
234
|
+
|
|
235
|
+
<!-- Desktop layout: space-between -->
|
|
236
|
+
<div class="desktop-layout">
|
|
237
|
+
<val-image
|
|
238
|
+
*ngIf="props.logo"
|
|
239
|
+
class="logo-clickable"
|
|
240
|
+
[props]="{
|
|
241
|
+
width: 16,
|
|
242
|
+
mode: 'box',
|
|
243
|
+
shaded: false,
|
|
244
|
+
bordered: false,
|
|
245
|
+
size: 'small',
|
|
246
|
+
src: props.logo,
|
|
247
|
+
alt: props.logoAlt || 'Logo',
|
|
248
|
+
limited: false,
|
|
249
|
+
dark: true
|
|
250
|
+
}"
|
|
251
|
+
(click)="onLogoClick()"
|
|
252
|
+
/>
|
|
253
|
+
<div class="social-links-container" *ngIf="props.socialLinks?.length">
|
|
254
|
+
<ion-button
|
|
255
|
+
*ngFor="let social of props.socialLinks"
|
|
256
|
+
fill="clear"
|
|
257
|
+
size="small"
|
|
258
|
+
[href]="social.url"
|
|
259
|
+
target="_blank"
|
|
260
|
+
rel="noopener"
|
|
261
|
+
class="social-button"
|
|
262
|
+
[attr.aria-label]="social.name"
|
|
263
|
+
>
|
|
264
|
+
<ion-icon [name]="social.icon" slot="icon-only" [color]="props.socialIconColor || 'dark'"></ion-icon>
|
|
265
|
+
</ion-button>
|
|
266
|
+
</div>
|
|
267
|
+
</div>
|
|
268
|
+
</ion-col>
|
|
269
|
+
</ion-row>
|
|
270
|
+
</div>
|
|
271
|
+
`, styles: [".footer-links .mobile-layout{display:block;text-align:center;padding:8px 0}.footer-links .desktop-layout{display:none;align-items:center;justify-content:space-between;margin-top:16px;padding:8px 0}.footer-links .social-links-container{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:8px;flex-wrap:wrap}.footer-links .social-button{--color: #666;--color-hover: #333;transition:all .2s ease;min-height:40px;min-width:40px;margin:0}.footer-links .social-button:hover{--color: #333;transform:translateY(-1px)}.footer-links .social-button ion-icon{font-size:20px}.footer-links .logo-clickable{cursor:pointer}@media (min-width: 768px){.footer-links .mobile-layout{display:none!important}.footer-links .desktop-layout{display:flex!important}.footer-links .social-links-container{margin-top:0;justify-content:flex-end}}@media (max-width: 767px){.footer-links .mobile-layout{display:block!important}.footer-links .desktop-layout{display:none!important}.footer-links .social-links-container{justify-content:center;margin-bottom:8px}}\n"] }]
|
|
272
|
+
}], propDecorators: { props: [{
|
|
273
|
+
type: Input
|
|
274
|
+
}], logoClick: [{
|
|
275
|
+
type: Output
|
|
276
|
+
}] } });
|
|
277
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9vdGVyLWxpbmtzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tb2xlY3VsZXMvZm9vdGVyLWxpbmtzL2Zvb3Rlci1saW5rcy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFN0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7OztBQUd4RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBK0dILE1BQU0sT0FBTyxvQkFBb0I7SUE5R2pDO1FBK0dVLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQU94Qzs7V0FFRztRQUNPLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0tBZ0NoRDtJQTlCQzs7T0FFRztJQUNILElBQUksc0JBQXNCO1FBQ3hCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbkYsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1FBQ3JDLENBQUM7UUFDRCxPQUFPO1lBQ0wsU0FBUyxFQUFFLEtBQUs7WUFDaEIsV0FBVyxFQUFFO2dCQUNYLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixHQUFHLEVBQUUsVUFBVTtnQkFDZixRQUFRLEVBQUUsUUFBUTthQUNuQjtZQUNELFNBQVMsRUFBRSxJQUFJO1lBQ2YsS0FBSyxFQUFFLFNBQVM7WUFDaEIsSUFBSSxFQUFFLFNBQVM7WUFDZixJQUFJLEVBQUUsU0FBUztTQUNoQixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7K0dBMUNVLG9CQUFvQjttR0FBcEIsb0JBQW9CLDZJQWhHckI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZGVCxxbUNBdkdDLFlBQVksZ1FBQ1osTUFBTSxrVEFDTixNQUFNLG9EQUNOLFNBQVMsb1BBQ1QsT0FBTywySkFDUCxnQkFBZ0IsMkVBQ2hCLGNBQWMseUVBQ2Qsa0JBQWtCLDhFQUNsQix5QkFBeUI7OzRGQWtHaEIsb0JBQW9CO2tCQTlHaEMsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osTUFBTTt3QkFDTixNQUFNO3dCQUNOLFNBQVM7d0JBQ1QsT0FBTzt3QkFDUCxnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUNsQix5QkFBeUI7cUJBQzFCLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZGVDs4QkFTUSxLQUFLO3NCQUFiLEtBQUs7Z0JBS0ksU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJb25CdXR0b24sIElvbkNvbCwgSW9uSWNvbiwgSW9uUm93IH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBEaXZpZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGl2aWRlci9kaXZpZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2ltYWdlL2ltYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMYW5ndWFnZVNlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vbGFuZ3VhZ2Utc2VsZWN0b3IvbGFuZ3VhZ2Utc2VsZWN0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IExhbmd1YWdlU2VsZWN0b3JNZXRhZGF0YSB9IGZyb20gJy4uL2xhbmd1YWdlLXNlbGVjdG9yL3R5cGVzJztcbmltcG9ydCB7IExpbmtzQ2FrZUNvbXBvbmVudCB9IGZyb20gJy4uL2xpbmtzLWNha2UvbGlua3MtY2FrZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9vdGVyTGlua3NNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIHZhbC1mb290ZXItbGlua3NcbiAqXG4gKiBBIHJlc3BvbnNpdmUgZm9vdGVyIGNvbXBvbmVudCB3aXRoIHR3byBjb2x1bW5zIG9mIGxpbmtzLCBzb2NpYWwgbWVkaWEgaWNvbnMsXG4gKiBsb2dvLCBhbmQgb3B0aW9uYWwgbGFuZ3VhZ2Ugc2VsZWN0b3IuXG4gKlxuICogQGV4YW1wbGVcbiAqIDx2YWwtZm9vdGVyLWxpbmtzXG4gKiAgIFtwcm9wc109XCJ7XG4gKiAgICAgbGVmdExpbmtzOiB7IHRpdGxlOiAnQ29tcGFueScsIGxpbmtzOiBbLi4uXSB9LFxuICogICAgIHJpZ2h0TGlua3M6IHsgdGl0bGU6ICdSZXNvdXJjZXMnLCBsaW5rczogWy4uLl0gfSxcbiAqICAgICBsb2dvOiAnbG9nby5zdmcnLFxuICogICAgIGxvZ29Sb3V0ZTogJy8nLFxuICogICAgIHNvY2lhbExpbmtzOiBbXG4gKiAgICAgICB7IGljb246ICdsb2dvLWZhY2Vib29rJywgdXJsOiAnaHR0cHM6Ly9mYWNlYm9vay5jb20nLCBuYW1lOiAnRmFjZWJvb2snIH1cbiAqICAgICBdXG4gKiAgIH1cIlxuICogPjwvdmFsLWZvb3Rlci1saW5rcz5cbiAqXG4gKiBAaW5wdXQgcHJvcHMgLSBGb290ZXIgY29uZmlndXJhdGlvblxuICogQG91dHB1dCBsb2dvQ2xpY2sgLSBFbWl0cyB3aGVuIGxvZ28gaXMgY2xpY2tlZFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtZm9vdGVyLWxpbmtzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBJb25Db2wsXG4gICAgSW9uUm93LFxuICAgIElvbkJ1dHRvbixcbiAgICBJb25JY29uLFxuICAgIERpdmlkZXJDb21wb25lbnQsXG4gICAgSW1hZ2VDb21wb25lbnQsXG4gICAgTGlua3NDYWtlQ29tcG9uZW50LFxuICAgIExhbmd1YWdlU2VsZWN0b3JDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImZvb3Rlci1saW5rc1wiPlxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sIHNpemU9XCIxMlwiPlxuICAgICAgICAgIDx2YWwtZGl2aWRlciBbcHJvcHNdPVwicHJvcHMuZGl2aWRlciB8fCB7IHNpemU6ICdzbWFsbCcsIGNvbG9yOiAnbWVkaXVtJywgZmlsbDogJ3NvbGlkJyB9XCIgLz5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8aW9uLWNvbCBzaXplLXhzPVwiMTJcIiBzaXplLW1kPVwiNlwiPlxuICAgICAgICAgIDx2YWwtbGlua3MtY2FrZSBbcHJvcHNdPVwicHJvcHMubGVmdExpbmtzXCIgLz5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8aW9uLWNvbCBzaXplLXhzPVwiMTJcIiBzaXplLW1kPVwiNlwiPlxuICAgICAgICAgIDx2YWwtbGlua3MtY2FrZSBbcHJvcHNdPVwicHJvcHMucmlnaHRMaW5rc1wiIC8+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cblxuICAgICAgPGlvbi1yb3cgKm5nSWY9XCJwcm9wcy5sYW5ndWFnZVNlbGVjdG9yICE9PSBmYWxzZVwiIHN0eWxlPVwibWFyZ2luLXRvcDogMXJlbTtcIj5cbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjEyXCI+XG4gICAgICAgICAgPHZhbC1sYW5ndWFnZS1zZWxlY3RvciBbcHJvcHNdPVwibGFuZ3VhZ2VTZWxlY3RvckNvbmZpZ1wiIC8+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cblxuICAgICAgPGlvbi1yb3cgc3R5bGU9XCJtYXJnaW4tdG9wOiAxcmVtO1wiPlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiMTJcIiAqbmdJZj1cInByb3BzLmxvZ28gfHwgcHJvcHMuc29jaWFsTGlua3M/Lmxlbmd0aFwiPlxuICAgICAgICAgIDwhLS0gTW9iaWxlIGxheW91dDogY2VudGVyZWQgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1sYXlvdXRcIj5cbiAgICAgICAgICAgIDx2YWwtaW1hZ2VcbiAgICAgICAgICAgICAgKm5nSWY9XCJwcm9wcy5sb2dvXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJsb2dvLWNsaWNrYWJsZVwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogYmxvY2s7IG1hcmdpbi10b3A6IDFyZW07XCJcbiAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICB3aWR0aDogMTQsXG4gICAgICAgICAgICAgICAgbW9kZTogJ2JveCcsXG4gICAgICAgICAgICAgICAgc2hhZGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBib3JkZXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgICAgICAgICAgICBzcmM6IHByb3BzLmxvZ28sXG4gICAgICAgICAgICAgICAgYWx0OiBwcm9wcy5sb2dvQWx0IHx8ICdMb2dvJyxcbiAgICAgICAgICAgICAgICBsaW1pdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBkYXJrOiB0cnVlXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25Mb2dvQ2xpY2soKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNvY2lhbC1saW5rcy1jb250YWluZXJcIiAqbmdJZj1cInByb3BzLnNvY2lhbExpbmtzPy5sZW5ndGhcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDFyZW1cIj5cbiAgICAgICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc29jaWFsIG9mIHByb3BzLnNvY2lhbExpbmtzXCJcbiAgICAgICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgW2hyZWZdPVwic29jaWFsLnVybFwiXG4gICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzb2NpYWwtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInNvY2lhbC5uYW1lXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBbbmFtZV09XCJzb2NpYWwuaWNvblwiIHNsb3Q9XCJpY29uLW9ubHlcIiBbY29sb3JdPVwicHJvcHMuc29jaWFsSWNvbkNvbG9yIHx8ICdkYXJrJ1wiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBEZXNrdG9wIGxheW91dDogc3BhY2UtYmV0d2VlbiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVza3RvcC1sYXlvdXRcIj5cbiAgICAgICAgICAgIDx2YWwtaW1hZ2VcbiAgICAgICAgICAgICAgKm5nSWY9XCJwcm9wcy5sb2dvXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJsb2dvLWNsaWNrYWJsZVwiXG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDE2LFxuICAgICAgICAgICAgICAgIG1vZGU6ICdib3gnLFxuICAgICAgICAgICAgICAgIHNoYWRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgYm9yZGVyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICAgICAgICAgICAgc3JjOiBwcm9wcy5sb2dvLFxuICAgICAgICAgICAgICAgIGFsdDogcHJvcHMubG9nb0FsdCB8fCAnTG9nbycsXG4gICAgICAgICAgICAgICAgbGltaXRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGFyazogdHJ1ZVxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTG9nb0NsaWNrKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzb2NpYWwtbGlua3MtY29udGFpbmVyXCIgKm5nSWY9XCJwcm9wcy5zb2NpYWxMaW5rcz8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNvY2lhbCBvZiBwcm9wcy5zb2NpYWxMaW5rc1wiXG4gICAgICAgICAgICAgICAgZmlsbD1cImNsZWFyXCJcbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIFtocmVmXT1cInNvY2lhbC51cmxcIlxuICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXJcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic29jaWFsLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzb2NpYWwubmFtZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwic29jaWFsLmljb25cIiBzbG90PVwiaWNvbi1vbmx5XCIgW2NvbG9yXT1cInByb3BzLnNvY2lhbEljb25Db2xvciB8fCAnZGFyaydcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9mb290ZXItbGlua3MuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9vdGVyTGlua3NDb21wb25lbnQge1xuICBwcml2YXRlIG5hdiA9IGluamVjdChOYXZpZ2F0aW9uU2VydmljZSk7XG5cbiAgLyoqXG4gICAqIEZvb3RlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgQElucHV0KCkgcHJvcHMhOiBGb290ZXJMaW5rc01ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBFbWl0cyB3aGVuIHRoZSBsb2dvIGlzIGNsaWNrZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgbG9nb0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IGxhbmd1YWdlIHNlbGVjdG9yIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBnZXQgbGFuZ3VhZ2VTZWxlY3RvckNvbmZpZygpOiBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEge1xuICAgIGlmICh0aGlzLnByb3BzLmxhbmd1YWdlU2VsZWN0b3IgJiYgdHlwZW9mIHRoaXMucHJvcHMubGFuZ3VhZ2VTZWxlY3RvciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmxhbmd1YWdlU2VsZWN0b3I7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBzaG93TGFiZWw6IGZhbHNlLFxuICAgICAgbGFiZWxDb25maWc6IHtcbiAgICAgICAgY2xhc3NOYW1lOiAnX2dsb2JhbCcsXG4gICAgICAgIGtleTogJ2xhbmd1YWdlJyxcbiAgICAgICAgZmFsbGJhY2s6ICdJZGlvbWEnLFxuICAgICAgfSxcbiAgICAgIHNob3dGbGFnczogdHJ1ZSxcbiAgICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGxvZ28gY2xpY2sgLSBuYXZpZ2F0ZXMgaWYgcm91dGUgcHJvdmlkZWQsIG90aGVyd2lzZSBlbWl0cyBldmVudC5cbiAgICovXG4gIG9uTG9nb0NsaWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzLmxvZ29Sb3V0ZSkge1xuICAgICAgdGhpcy5uYXYubmF2aWdhdGVCeVVybCh0aGlzLnByb3BzLmxvZ29Sb3V0ZSk7XG4gICAgfVxuICAgIHRoaXMubG9nb0NsaWNrLmVtaXQoKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2Zvb3Rlci1saW5rcy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGl2aWRlck1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vYXRvbXMvZGl2aWRlci90eXBlcyc7XG5pbXBvcnQgeyBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgfSBmcm9tICcuLi9sYW5ndWFnZS1zZWxlY3Rvci90eXBlcyc7XG5pbXBvcnQgeyBMaW5rQ2FrZU1ldGFkYXRhIH0gZnJvbSAnLi4vbGlua3MtY2FrZS90eXBlcyc7XG5cbi8qKlxuICogU29jaWFsIGxpbmsgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb2NpYWxMaW5rTWV0YWRhdGEge1xuICAvKiogSW9uaWNvbiBuYW1lIChlLmcuLCAnbG9nby1mYWNlYm9vaycsICdsb2dvLXR3aXR0ZXInKSAqL1xuICBpY29uOiBzdHJpbmc7XG4gIC8qKiBVUkwgdG8gdGhlIHNvY2lhbCBwcm9maWxlICovXG4gIHVybDogc3RyaW5nO1xuICAvKiogQWNjZXNzaWJsZSBuYW1lIGZvciB0aGUgbGluayAqL1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIGZvb3RlciBsaW5rcyBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9vdGVyTGlua3NNZXRhZGF0YSB7XG4gIC8qKiBMZWZ0IGNvbHVtbiBsaW5rcyBjb25maWd1cmF0aW9uICovXG4gIGxlZnRMaW5rczogTGlua0Nha2VNZXRhZGF0YTtcbiAgLyoqIFJpZ2h0IGNvbHVtbiBsaW5rcyBjb25maWd1cmF0aW9uICovXG4gIHJpZ2h0TGlua3M6IExpbmtDYWtlTWV0YWRhdGE7XG4gIC8qKiBPcHRpb25hbCBsb2dvIFVSTCAqL1xuICBsb2dvPzogc3RyaW5nO1xuICAvKiogTG9nbyBhbHQgdGV4dC4gRGVmYXVsdDogJ0xvZ28nICovXG4gIGxvZ29BbHQ/OiBzdHJpbmc7XG4gIC8qKiBSb3V0ZSB0byBuYXZpZ2F0ZSB3aGVuIGxvZ28gaXMgY2xpY2tlZCAqL1xuICBsb2dvUm91dGU/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBkaXZpZGVyIGNvbmZpZ3VyYXRpb24gKi9cbiAgZGl2aWRlcj86IERpdmlkZXJNZXRhZGF0YTtcbiAgLyoqIFNvY2lhbCBtZWRpYSBsaW5rcyAqL1xuICBzb2NpYWxMaW5rcz86IFNvY2lhbExpbmtNZXRhZGF0YVtdO1xuICAvKiogTGFuZ3VhZ2Ugc2VsZWN0b3IgY29uZmlndXJhdGlvbi4gU2V0IHRvIGZhbHNlIHRvIGhpZGUuICovXG4gIGxhbmd1YWdlU2VsZWN0b3I/OiBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgfCBmYWxzZTtcbiAgLyoqIEljb24gY29sb3IgZm9yIHNvY2lhbCBsaW5rcy4gRGVmYXVsdDogJ2RhcmsnICovXG4gIHNvY2lhbEljb25Db2xvcj86IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
3
|
+
import { IonAccordion, IonAccordionGroup, IonItem, IonLabel, IonList } from '@ionic/angular/standalone';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/router";
|
|
6
|
+
import * as i2 from "@ionic/angular/standalone";
|
|
7
|
+
import * as i3 from "@angular/common";
|
|
8
|
+
/**
|
|
9
|
+
* val-links-accordion
|
|
10
|
+
*
|
|
11
|
+
* A hierarchical navigation component using Ionic accordions.
|
|
12
|
+
* Supports sections with optional sub-links and automatic menu closing.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* <val-links-accordion
|
|
16
|
+
* [props]="{
|
|
17
|
+
* sections: [
|
|
18
|
+
* { title: 'Home', route: ['/'] },
|
|
19
|
+
* { title: 'Products', links: [
|
|
20
|
+
* { text: 'Catalog', route: ['/products'] },
|
|
21
|
+
* { text: 'New Arrivals', route: ['/products', 'new'] }
|
|
22
|
+
* ]}
|
|
23
|
+
* ]
|
|
24
|
+
* }"
|
|
25
|
+
* (navigate)="onNavigate($event)"
|
|
26
|
+
* ></val-links-accordion>
|
|
27
|
+
*
|
|
28
|
+
* @input props - Accordion configuration
|
|
29
|
+
* @output navigate - Emits route when a link is clicked
|
|
30
|
+
*/
|
|
31
|
+
export class LinksAccordionComponent {
|
|
32
|
+
constructor(router, menuCtrl) {
|
|
33
|
+
this.router = router;
|
|
34
|
+
this.menuCtrl = menuCtrl;
|
|
35
|
+
/**
|
|
36
|
+
* Accordion configuration.
|
|
37
|
+
*/
|
|
38
|
+
this.props = {
|
|
39
|
+
sections: [],
|
|
40
|
+
backgroundColor: 'var(--ion-background-color)',
|
|
41
|
+
closeMenuOnClick: true,
|
|
42
|
+
closeAccordionOnClick: true,
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Emits the route when a link is clicked.
|
|
46
|
+
*/
|
|
47
|
+
this.navigate = new EventEmitter();
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Handles link click - closes accordion/menu and navigates.
|
|
51
|
+
*/
|
|
52
|
+
async onLinkClick(route, event) {
|
|
53
|
+
if (event) {
|
|
54
|
+
event.stopPropagation();
|
|
55
|
+
}
|
|
56
|
+
// Close accordion before navigating
|
|
57
|
+
if (this.props.closeAccordionOnClick !== false && this.accordionGroup) {
|
|
58
|
+
this.accordionGroup.value = undefined;
|
|
59
|
+
}
|
|
60
|
+
// Close menu if enabled
|
|
61
|
+
if (this.props.closeMenuOnClick !== false) {
|
|
62
|
+
await this.menuCtrl.close();
|
|
63
|
+
}
|
|
64
|
+
// Emit event
|
|
65
|
+
this.navigate.emit(route);
|
|
66
|
+
// Navigate
|
|
67
|
+
this.router.navigate(route);
|
|
68
|
+
}
|
|
69
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LinksAccordionComponent, deps: [{ token: i1.Router }, { token: i2.MenuController }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
70
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: LinksAccordionComponent, isStandalone: true, selector: "val-links-accordion", inputs: { props: "props" }, outputs: { navigate: "navigate" }, viewQueries: [{ propertyName: "accordionGroup", first: true, predicate: ["accordionGroup"], descendants: true }], ngImport: i0, template: `
|
|
71
|
+
<div class="links-accordion">
|
|
72
|
+
<ion-accordion-group #accordionGroup>
|
|
73
|
+
<ion-accordion
|
|
74
|
+
*ngFor="let section of props.sections"
|
|
75
|
+
[value]="section.title"
|
|
76
|
+
[toggleIcon]="section.links?.length ? 'chevron-down-outline' : 'chevron-forward-outline'"
|
|
77
|
+
>
|
|
78
|
+
<ion-item
|
|
79
|
+
slot="header"
|
|
80
|
+
color="light"
|
|
81
|
+
[ngStyle]="{ background: props.backgroundColor || 'var(--ion-background-color)' }"
|
|
82
|
+
(click)="section.route ? onLinkClick(section.route, $event) : null"
|
|
83
|
+
[button]="!!section.route"
|
|
84
|
+
lines="none"
|
|
85
|
+
>
|
|
86
|
+
<ion-label class="accordion-label">{{ section.title }}</ion-label>
|
|
87
|
+
</ion-item>
|
|
88
|
+
<div
|
|
89
|
+
slot="content"
|
|
90
|
+
[ngStyle]="{ background: props.backgroundColor || 'var(--ion-background-color)' }"
|
|
91
|
+
*ngIf="section.links?.length"
|
|
92
|
+
>
|
|
93
|
+
<ion-list lines="none">
|
|
94
|
+
<ion-item
|
|
95
|
+
*ngFor="let link of section.links"
|
|
96
|
+
[ngStyle]="{ background: props.backgroundColor || 'var(--ion-background-color)' }"
|
|
97
|
+
(click)="onLinkClick(link.route, $event)"
|
|
98
|
+
button
|
|
99
|
+
>
|
|
100
|
+
<ion-label class="accordion-item-label">{{ link.text }}</ion-label>
|
|
101
|
+
</ion-item>
|
|
102
|
+
</ion-list>
|
|
103
|
+
</div>
|
|
104
|
+
</ion-accordion>
|
|
105
|
+
</ion-accordion-group>
|
|
106
|
+
</div>
|
|
107
|
+
`, isInline: true, styles: [".links-accordion .accordion-label{font-size:1.3rem}.links-accordion .accordion-item-label{font-size:1.1rem}.links-accordion ion-item{--background: var(--ion-color-light-tint)}.links-accordion ion-accordion{background:transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: IonAccordionGroup, selector: "ion-accordion-group", inputs: ["animated", "disabled", "expand", "mode", "multiple", "readonly", "value"] }, { kind: "component", type: IonAccordion, selector: "ion-accordion", inputs: ["disabled", "mode", "readonly", "toggleIcon", "toggleIconSlot", "value"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }] }); }
|
|
108
|
+
}
|
|
109
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LinksAccordionComponent, decorators: [{
|
|
110
|
+
type: Component,
|
|
111
|
+
args: [{ selector: 'val-links-accordion', standalone: true, imports: [CommonModule, IonAccordionGroup, IonAccordion, IonItem, IonLabel, IonList], template: `
|
|
112
|
+
<div class="links-accordion">
|
|
113
|
+
<ion-accordion-group #accordionGroup>
|
|
114
|
+
<ion-accordion
|
|
115
|
+
*ngFor="let section of props.sections"
|
|
116
|
+
[value]="section.title"
|
|
117
|
+
[toggleIcon]="section.links?.length ? 'chevron-down-outline' : 'chevron-forward-outline'"
|
|
118
|
+
>
|
|
119
|
+
<ion-item
|
|
120
|
+
slot="header"
|
|
121
|
+
color="light"
|
|
122
|
+
[ngStyle]="{ background: props.backgroundColor || 'var(--ion-background-color)' }"
|
|
123
|
+
(click)="section.route ? onLinkClick(section.route, $event) : null"
|
|
124
|
+
[button]="!!section.route"
|
|
125
|
+
lines="none"
|
|
126
|
+
>
|
|
127
|
+
<ion-label class="accordion-label">{{ section.title }}</ion-label>
|
|
128
|
+
</ion-item>
|
|
129
|
+
<div
|
|
130
|
+
slot="content"
|
|
131
|
+
[ngStyle]="{ background: props.backgroundColor || 'var(--ion-background-color)' }"
|
|
132
|
+
*ngIf="section.links?.length"
|
|
133
|
+
>
|
|
134
|
+
<ion-list lines="none">
|
|
135
|
+
<ion-item
|
|
136
|
+
*ngFor="let link of section.links"
|
|
137
|
+
[ngStyle]="{ background: props.backgroundColor || 'var(--ion-background-color)' }"
|
|
138
|
+
(click)="onLinkClick(link.route, $event)"
|
|
139
|
+
button
|
|
140
|
+
>
|
|
141
|
+
<ion-label class="accordion-item-label">{{ link.text }}</ion-label>
|
|
142
|
+
</ion-item>
|
|
143
|
+
</ion-list>
|
|
144
|
+
</div>
|
|
145
|
+
</ion-accordion>
|
|
146
|
+
</ion-accordion-group>
|
|
147
|
+
</div>
|
|
148
|
+
`, styles: [".links-accordion .accordion-label{font-size:1.3rem}.links-accordion .accordion-item-label{font-size:1.1rem}.links-accordion ion-item{--background: var(--ion-color-light-tint)}.links-accordion ion-accordion{background:transparent}\n"] }]
|
|
149
|
+
}], ctorParameters: () => [{ type: i1.Router }, { type: i2.MenuController }], propDecorators: { props: [{
|
|
150
|
+
type: Input
|
|
151
|
+
}], navigate: [{
|
|
152
|
+
type: Output
|
|
153
|
+
}], accordionGroup: [{
|
|
154
|
+
type: ViewChild,
|
|
155
|
+
args: ['accordionGroup']
|
|
156
|
+
}] } });
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlua3MtYWNjb3JkaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tb2xlY3VsZXMvbGlua3MtYWNjb3JkaW9uL2xpbmtzLWFjY29yZGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxGLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQWtCLE1BQU0sMkJBQTJCLENBQUM7Ozs7O0FBR3hIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBNkNILE1BQU0sT0FBTyx1QkFBdUI7SUFrQmxDLFlBQ1UsTUFBYyxFQUNkLFFBQXdCO1FBRHhCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQW5CbEM7O1dBRUc7UUFDTSxVQUFLLEdBQTJCO1lBQ3ZDLFFBQVEsRUFBRSxFQUFFO1lBQ1osZUFBZSxFQUFFLDZCQUE2QjtZQUM5QyxnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLHFCQUFxQixFQUFFLElBQUk7U0FDNUIsQ0FBQztRQUVGOztXQUVHO1FBQ08sYUFBUSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7SUFPL0MsQ0FBQztJQUVKOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFlLEVBQUUsS0FBYTtRQUM5QyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFCLENBQUM7UUFFRCxvQ0FBb0M7UUFDcEMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1FBQ3hDLENBQUM7UUFFRCx3QkFBd0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBRUQsYUFBYTtRQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFCLFdBQVc7UUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDOytHQTlDVSx1QkFBdUI7bUdBQXZCLHVCQUF1QixnUUF4Q3hCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNULGdUQXRDUyxZQUFZLHFWQUFFLGlCQUFpQixxSkFBRSxZQUFZLDZJQUFFLE9BQU8sME5BQUUsUUFBUSw2RkFBRSxPQUFPOzs0RkF5Q3hFLHVCQUF1QjtrQkE1Q25DLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsWUFDMUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQ1Q7d0dBT1EsS0FBSztzQkFBYixLQUFLO2dCQVVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBRXNCLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJb25BY2NvcmRpb24sIElvbkFjY29yZGlvbkdyb3VwLCBJb25JdGVtLCBJb25MYWJlbCwgSW9uTGlzdCwgTWVudUNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IExpbmtzQWNjb3JkaW9uTWV0YWRhdGEsIExpbmtzQWNjb3JkaW9uU2VjdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIHZhbC1saW5rcy1hY2NvcmRpb25cbiAqXG4gKiBBIGhpZXJhcmNoaWNhbCBuYXZpZ2F0aW9uIGNvbXBvbmVudCB1c2luZyBJb25pYyBhY2NvcmRpb25zLlxuICogU3VwcG9ydHMgc2VjdGlvbnMgd2l0aCBvcHRpb25hbCBzdWItbGlua3MgYW5kIGF1dG9tYXRpYyBtZW51IGNsb3NpbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqIDx2YWwtbGlua3MtYWNjb3JkaW9uXG4gKiAgIFtwcm9wc109XCJ7XG4gKiAgICAgc2VjdGlvbnM6IFtcbiAqICAgICAgIHsgdGl0bGU6ICdIb21lJywgcm91dGU6IFsnLyddIH0sXG4gKiAgICAgICB7IHRpdGxlOiAnUHJvZHVjdHMnLCBsaW5rczogW1xuICogICAgICAgICB7IHRleHQ6ICdDYXRhbG9nJywgcm91dGU6IFsnL3Byb2R1Y3RzJ10gfSxcbiAqICAgICAgICAgeyB0ZXh0OiAnTmV3IEFycml2YWxzJywgcm91dGU6IFsnL3Byb2R1Y3RzJywgJ25ldyddIH1cbiAqICAgICAgIF19XG4gKiAgICAgXVxuICogICB9XCJcbiAqICAgKG5hdmlnYXRlKT1cIm9uTmF2aWdhdGUoJGV2ZW50KVwiXG4gKiA+PC92YWwtbGlua3MtYWNjb3JkaW9uPlxuICpcbiAqIEBpbnB1dCBwcm9wcyAtIEFjY29yZGlvbiBjb25maWd1cmF0aW9uXG4gKiBAb3V0cHV0IG5hdmlnYXRlIC0gRW1pdHMgcm91dGUgd2hlbiBhIGxpbmsgaXMgY2xpY2tlZFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtbGlua3MtYWNjb3JkaW9uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW9uQWNjb3JkaW9uR3JvdXAsIElvbkFjY29yZGlvbiwgSW9uSXRlbSwgSW9uTGFiZWwsIElvbkxpc3RdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJsaW5rcy1hY2NvcmRpb25cIj5cbiAgICAgIDxpb24tYWNjb3JkaW9uLWdyb3VwICNhY2NvcmRpb25Hcm91cD5cbiAgICAgICAgPGlvbi1hY2NvcmRpb25cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBwcm9wcy5zZWN0aW9uc1wiXG4gICAgICAgICAgW3ZhbHVlXT1cInNlY3Rpb24udGl0bGVcIlxuICAgICAgICAgIFt0b2dnbGVJY29uXT1cInNlY3Rpb24ubGlua3M/Lmxlbmd0aCA/ICdjaGV2cm9uLWRvd24tb3V0bGluZScgOiAnY2hldnJvbi1mb3J3YXJkLW91dGxpbmUnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpb24taXRlbVxuICAgICAgICAgICAgc2xvdD1cImhlYWRlclwiXG4gICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgYmFja2dyb3VuZDogcHJvcHMuYmFja2dyb3VuZENvbG9yIHx8ICd2YXIoLS1pb24tYmFja2dyb3VuZC1jb2xvciknIH1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlY3Rpb24ucm91dGUgPyBvbkxpbmtDbGljayhzZWN0aW9uLnJvdXRlLCAkZXZlbnQpIDogbnVsbFwiXG4gICAgICAgICAgICBbYnV0dG9uXT1cIiEhc2VjdGlvbi5yb3V0ZVwiXG4gICAgICAgICAgICBsaW5lcz1cIm5vbmVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJhY2NvcmRpb24tbGFiZWxcIj57eyBzZWN0aW9uLnRpdGxlIH19PC9pb24tbGFiZWw+XG4gICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzbG90PVwiY29udGVudFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGJhY2tncm91bmQ6IHByb3BzLmJhY2tncm91bmRDb2xvciB8fCAndmFyKC0taW9uLWJhY2tncm91bmQtY29sb3IpJyB9XCJcbiAgICAgICAgICAgICpuZ0lmPVwic2VjdGlvbi5saW5rcz8ubGVuZ3RoXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW9uLWxpc3QgbGluZXM9XCJub25lXCI+XG4gICAgICAgICAgICAgIDxpb24taXRlbVxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBsaW5rIG9mIHNlY3Rpb24ubGlua3NcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgYmFja2dyb3VuZDogcHJvcHMuYmFja2dyb3VuZENvbG9yIHx8ICd2YXIoLS1pb24tYmFja2dyb3VuZC1jb2xvciknIH1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkxpbmtDbGljayhsaW5rLnJvdXRlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBidXR0b25cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJhY2NvcmRpb24taXRlbS1sYWJlbFwiPnt7IGxpbmsudGV4dCB9fTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgICAgPC9pb24tbGlzdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9pb24tYWNjb3JkaW9uPlxuICAgICAgPC9pb24tYWNjb3JkaW9uLWdyb3VwPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9saW5rcy1hY2NvcmRpb24uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTGlua3NBY2NvcmRpb25Db21wb25lbnQge1xuICAvKipcbiAgICogQWNjb3JkaW9uIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBASW5wdXQoKSBwcm9wczogTGlua3NBY2NvcmRpb25NZXRhZGF0YSA9IHtcbiAgICBzZWN0aW9uczogW10sXG4gICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0taW9uLWJhY2tncm91bmQtY29sb3IpJyxcbiAgICBjbG9zZU1lbnVPbkNsaWNrOiB0cnVlLFxuICAgIGNsb3NlQWNjb3JkaW9uT25DbGljazogdHJ1ZSxcbiAgfTtcblxuICAvKipcbiAgICogRW1pdHMgdGhlIHJvdXRlIHdoZW4gYSBsaW5rIGlzIGNsaWNrZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgbmF2aWdhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2FjY29yZGlvbkdyb3VwJykgYWNjb3JkaW9uR3JvdXAhOiBJb25BY2NvcmRpb25Hcm91cDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgbWVudUN0cmw6IE1lbnVDb250cm9sbGVyXG4gICkge31cblxuICAvKipcbiAgICogSGFuZGxlcyBsaW5rIGNsaWNrIC0gY2xvc2VzIGFjY29yZGlvbi9tZW51IGFuZCBuYXZpZ2F0ZXMuXG4gICAqL1xuICBhc3luYyBvbkxpbmtDbGljayhyb3V0ZTogc3RyaW5nW10sIGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8vIENsb3NlIGFjY29yZGlvbiBiZWZvcmUgbmF2aWdhdGluZ1xuICAgIGlmICh0aGlzLnByb3BzLmNsb3NlQWNjb3JkaW9uT25DbGljayAhPT0gZmFsc2UgJiYgdGhpcy5hY2NvcmRpb25Hcm91cCkge1xuICAgICAgdGhpcy5hY2NvcmRpb25Hcm91cC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBDbG9zZSBtZW51IGlmIGVuYWJsZWRcbiAgICBpZiAodGhpcy5wcm9wcy5jbG9zZU1lbnVPbkNsaWNrICE9PSBmYWxzZSkge1xuICAgICAgYXdhaXQgdGhpcy5tZW51Q3RybC5jbG9zZSgpO1xuICAgIH1cblxuICAgIC8vIEVtaXQgZXZlbnRcbiAgICB0aGlzLm5hdmlnYXRlLmVtaXQocm91dGUpO1xuXG4gICAgLy8gTmF2aWdhdGVcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShyb3V0ZSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2xpbmtzLWFjY29yZGlvbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBIGxpbmsgaXRlbSB3aXRoaW4gYW4gYWNjb3JkaW9uIHNlY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlua3NBY2NvcmRpb25MaW5rIHtcbiAgLyoqIERpc3BsYXkgdGV4dCBmb3IgdGhlIGxpbmsgKi9cbiAgdGV4dDogc3RyaW5nO1xuICAvKiogUm91dGUgc2VnbWVudHMgZm9yIG5hdmlnYXRpb24gKi9cbiAgcm91dGU6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEFuIGFjY29yZGlvbiBzZWN0aW9uIHdpdGggb3B0aW9uYWwgc3ViLWxpbmtzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbmtzQWNjb3JkaW9uU2VjdGlvbiB7XG4gIC8qKiBTZWN0aW9uIHRpdGxlICovXG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCByb3V0ZSBpZiB0aGUgc2VjdGlvbiBpdHNlbGYgaXMgY2xpY2thYmxlICovXG4gIHJvdXRlPzogc3RyaW5nW107XG4gIC8qKiBPcHRpb25hbCBzdWItbGlua3Mgd2l0aGluIHRoaXMgc2VjdGlvbiAqL1xuICBsaW5rcz86IExpbmtzQWNjb3JkaW9uTGlua1tdO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBsaW5rcyBhY2NvcmRpb24gY29tcG9uZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbmtzQWNjb3JkaW9uTWV0YWRhdGEge1xuICAvKiogQXJyYXkgb2YgYWNjb3JkaW9uIHNlY3Rpb25zICovXG4gIHNlY3Rpb25zOiBMaW5rc0FjY29yZGlvblNlY3Rpb25bXTtcbiAgLyoqIEJhY2tncm91bmQgY29sb3IgZm9yIHRoZSBhY2NvcmRpb24uIERlZmF1bHQ6ICd2YXIoLS1pb24tYmFja2dyb3VuZC1jb2xvciknICovXG4gIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgLyoqIFdoZXRoZXIgdG8gY2xvc2UgdGhlIG1lbnUgd2hlbiBhIGxpbmsgaXMgY2xpY2tlZC4gRGVmYXVsdDogdHJ1ZSAqL1xuICBjbG9zZU1lbnVPbkNsaWNrPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdG8gY2xvc2UgdGhlIGFjY29yZGlvbiB3aGVuIG5hdmlnYXRpbmcuIERlZmF1bHQ6IHRydWUgKi9cbiAgY2xvc2VBY2NvcmRpb25PbkNsaWNrPzogYm9vbGVhbjtcbn1cbiJdfQ==
|
|
@@ -8,10 +8,20 @@ import * as i2 from "@angular/forms";
|
|
|
8
8
|
* val-password-input
|
|
9
9
|
*
|
|
10
10
|
* A password input field with show/hide toggle, integrated with Angular forms.
|
|
11
|
+
* For i18n support, pass the translated placeholder text via props.
|
|
11
12
|
*
|
|
12
|
-
* @example
|
|
13
|
+
* @example Static placeholder:
|
|
13
14
|
* <val-password-input [props]="{ control: myControl, placeholder: 'Enter password' }"></val-password-input>
|
|
14
15
|
*
|
|
16
|
+
* @example With i18n:
|
|
17
|
+
* ```typescript
|
|
18
|
+
* // In component
|
|
19
|
+
* passwordProps = {
|
|
20
|
+
* control: this.passwordControl,
|
|
21
|
+
* placeholder: this.langService.getText('Login', 'passwordPlaceholder')
|
|
22
|
+
* };
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
15
25
|
* @input props: InputMetadata - Configuration for the input (form control, placeholder, etc.)
|
|
16
26
|
*/
|
|
17
27
|
export class PasswordInputComponent {
|
|
@@ -52,4 +62,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
52
62
|
}], ctorParameters: () => [{ type: i1.IconService }], propDecorators: { props: [{
|
|
53
63
|
type: Input
|
|
54
64
|
}] } });
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9wYXNzd29yZC1pbnB1dC9wYXNzd29yZC1pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7QUF1QnpFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQVdqQyxZQUFZLElBQWlCO1FBRjdCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO0lBRVksQ0FBQztJQUVqQyxRQUFRLEtBQUksQ0FBQzsrR0FiRixzQkFBc0I7bUdBQXRCLHNCQUFzQiwwR0FuQ3ZCOzs7Ozs7Ozs7Ozs7R0FZVCxvdkZBYlMsbUJBQW1CLDBUQUFFLFFBQVEsOGVBQUUsU0FBUyxvUEFBRSxPQUFPOzs0RkFvQ2hELHNCQUFzQjtrQkF2Q2xDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUCxDQUFDLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFlBQ2xEOzs7Ozs7Ozs7Ozs7R0FZVDtnRkE4QlEsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25JY29uLCBJb25JbnB1dCB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgSWNvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pY29ucy5zZXJ2aWNlJztcbmltcG9ydCB7IElucHV0TWV0YWRhdGEgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1wYXNzd29yZC1pbnB1dCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtSZWFjdGl2ZUZvcm1zTW9kdWxlLCBJb25JbnB1dCwgSW9uQnV0dG9uLCBJb25JY29uXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCI+XG4gICAgICA8aW9uLWlucHV0XG4gICAgICAgIGNsYXNzPVwic2lnbi1pbl9faW5wdXQtcGFzc3dvcmRcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwicHJvcHMuY29udHJvbFwiXG4gICAgICAgIFt0eXBlXT1cImhpZGVQYXNzd29yZCA/ICdwYXNzd29yZCcgOiAndGV4dCdcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicHJvcHMucGxhY2Vob2xkZXJcIlxuICAgICAgPjwvaW9uLWlucHV0PlxuICAgICAgPGlvbi1idXR0b24gY29sb3I9XCJkYXJrXCIgZmlsbD1cImNsZWFyXCIgKGNsaWNrKT1cImhpZGVQYXNzd29yZCA9ICFoaWRlUGFzc3dvcmRcIiBzaXplPVwic21hbGxcIj5cbiAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBbbmFtZV09XCJoaWRlUGFzc3dvcmQgPyAnZXllLW9mZi1vdXRsaW5lJyA6ICdleWUtb3V0bGluZSdcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9wYXNzd29yZC1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxufSlcbi8qKlxuICogdmFsLXBhc3N3b3JkLWlucHV0XG4gKlxuICogQSBwYXNzd29yZCBpbnB1dCBmaWVsZCB3aXRoIHNob3cvaGlkZSB0b2dnbGUsIGludGVncmF0ZWQgd2l0aCBBbmd1bGFyIGZvcm1zLlxuICogRm9yIGkxOG4gc3VwcG9ydCwgcGFzcyB0aGUgdHJhbnNsYXRlZCBwbGFjZWhvbGRlciB0ZXh0IHZpYSBwcm9wcy5cbiAqXG4gKiBAZXhhbXBsZSBTdGF0aWMgcGxhY2Vob2xkZXI6XG4gKiA8dmFsLXBhc3N3b3JkLWlucHV0IFtwcm9wc109XCJ7IGNvbnRyb2w6IG15Q29udHJvbCwgcGxhY2Vob2xkZXI6ICdFbnRlciBwYXNzd29yZCcgfVwiPjwvdmFsLXBhc3N3b3JkLWlucHV0PlxuICpcbiAqIEBleGFtcGxlIFdpdGggaTE4bjpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEluIGNvbXBvbmVudFxuICogcGFzc3dvcmRQcm9wcyA9IHtcbiAqICAgY29udHJvbDogdGhpcy5wYXNzd29yZENvbnRyb2wsXG4gKiAgIHBsYWNlaG9sZGVyOiB0aGlzLmxhbmdTZXJ2aWNlLmdldFRleHQoJ0xvZ2luJywgJ3Bhc3N3b3JkUGxhY2Vob2xkZXInKVxuICogfTtcbiAqIGBgYFxuICpcbiAqIEBpbnB1dCBwcm9wczogSW5wdXRNZXRhZGF0YSAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBpbnB1dCAoZm9ybSBjb250cm9sLCBwbGFjZWhvbGRlciwgZXRjLilcbiAqL1xuZXhwb3J0IGNsYXNzIFBhc3N3b3JkSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKipcbiAgICogSW5wdXQgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAqIEB0eXBlIHtJbnB1dE1ldGFkYXRhfVxuICAgKiBAcHJvcGVydHkgY29udHJvbCAtIFRoZSBBbmd1bGFyIEZvcm1Db250cm9sIGZvciB0aGUgaW5wdXQuXG4gICAqIEBwcm9wZXJ0eSBwbGFjZWhvbGRlciAtIFRoZSBwbGFjZWhvbGRlciB0ZXh0LiBGb3IgaTE4biwgdXNlIGxhbmdTZXJ2aWNlLmdldFRleHQoKSB0byBnZXQgdHJhbnNsYXRlZCB2YWx1ZS5cbiAgICovXG4gIEBJbnB1dCgpIHByb3BzOiBJbnB1dE1ldGFkYXRhO1xuXG4gIGhpZGVQYXNzd29yZCA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoaWNvbjogSWNvblNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKSB7fVxufVxuIl19
|