valtech-components 2.0.407 → 2.0.410

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.
Files changed (110) hide show
  1. package/esm2022/lib/components/atoms/horizontal-scroll/horizontal-scroll.component.mjs +82 -0
  2. package/esm2022/lib/components/atoms/horizontal-scroll/types.mjs +2 -0
  3. package/esm2022/lib/components/atoms/rights-footer/rights-footer.component.mjs +82 -0
  4. package/esm2022/lib/components/atoms/rights-footer/types.mjs +2 -0
  5. package/esm2022/lib/components/molecules/check-input/check-input.component.mjs +55 -11
  6. package/esm2022/lib/components/molecules/email-input/email-input.component.mjs +13 -4
  7. package/esm2022/lib/components/molecules/expandable-text/expandable-text.component.mjs +27 -23
  8. package/esm2022/lib/components/molecules/footer-links/footer-links.component.mjs +277 -0
  9. package/esm2022/lib/components/molecules/footer-links/types.mjs +2 -0
  10. package/esm2022/lib/components/molecules/links-accordion/links-accordion.component.mjs +157 -0
  11. package/esm2022/lib/components/molecules/links-accordion/types.mjs +2 -0
  12. package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +12 -2
  13. package/esm2022/lib/components/molecules/prompter/prompter.component.mjs +21 -9
  14. package/esm2022/lib/components/molecules/prompter/types.mjs +1 -1
  15. package/esm2022/lib/components/molecules/radio-input/radio-input.component.mjs +13 -4
  16. package/esm2022/lib/components/molecules/recap-card/recap-card.component.mjs +78 -0
  17. package/esm2022/lib/components/molecules/recap-card/types.mjs +2 -0
  18. package/esm2022/lib/components/molecules/select-input/select-input.component.mjs +31 -14
  19. package/esm2022/lib/components/molecules/swipe-carousel/swipe-carousel.component.mjs +206 -0
  20. package/esm2022/lib/components/molecules/swipe-carousel/types.mjs +2 -0
  21. package/esm2022/lib/components/molecules/testimonial-card/testimonial-card.component.mjs +138 -0
  22. package/esm2022/lib/components/molecules/testimonial-card/types.mjs +2 -0
  23. package/esm2022/lib/components/molecules/text-input/text-input.component.mjs +14 -4
  24. package/esm2022/lib/components/organisms/cards-carousel/cards-carousel.component.mjs +61 -0
  25. package/esm2022/lib/components/organisms/cards-carousel/types.mjs +2 -0
  26. package/esm2022/lib/components/organisms/company-footer/company-footer.component.mjs +72 -0
  27. package/esm2022/lib/components/organisms/company-footer/types.mjs +2 -0
  28. package/esm2022/lib/components/organisms/data-table/data-table.component.mjs +175 -3
  29. package/esm2022/lib/components/organisms/data-table/types.mjs +1 -1
  30. package/esm2022/lib/components/organisms/form/form.component.mjs +2 -2
  31. package/esm2022/lib/components/organisms/fun-header/fun-header.component.mjs +225 -0
  32. package/esm2022/lib/components/organisms/fun-header/types.mjs +2 -0
  33. package/esm2022/lib/components/organisms/menu/menu.component.mjs +197 -0
  34. package/esm2022/lib/components/organisms/menu/types.mjs +2 -0
  35. package/esm2022/lib/components/organisms/testimonial-carousel/testimonial-carousel.component.mjs +72 -0
  36. package/esm2022/lib/components/organisms/testimonial-carousel/types.mjs +2 -0
  37. package/esm2022/lib/components/templates/page-content/page-content.component.mjs +156 -0
  38. package/esm2022/lib/components/templates/page-content/types.mjs +2 -0
  39. package/esm2022/lib/components/templates/page-template/page-template.component.mjs +181 -0
  40. package/esm2022/lib/components/templates/page-template/types.mjs +2 -0
  41. package/esm2022/lib/components/templates/page-wrapper/page-wrapper.component.mjs +195 -0
  42. package/esm2022/lib/components/templates/page-wrapper/types.mjs +2 -0
  43. package/esm2022/lib/components/types.mjs +1 -1
  44. package/esm2022/lib/services/firebase/config.mjs +103 -0
  45. package/esm2022/lib/services/firebase/firebase.service.mjs +285 -0
  46. package/esm2022/lib/services/firebase/firestore-collection.mjs +266 -0
  47. package/esm2022/lib/services/firebase/firestore.service.mjs +508 -0
  48. package/esm2022/lib/services/firebase/index.mjs +46 -0
  49. package/esm2022/lib/services/firebase/messaging.service.mjs +503 -0
  50. package/esm2022/lib/services/firebase/storage.service.mjs +421 -0
  51. package/esm2022/lib/services/firebase/types.mjs +8 -0
  52. package/esm2022/lib/services/firebase/utils/path-builder.mjs +195 -0
  53. package/esm2022/lib/services/firebase/utils/query-builder.mjs +302 -0
  54. package/esm2022/lib/services/icons.service.mjs +3 -2
  55. package/esm2022/public-api.mjs +33 -1
  56. package/fesm2022/valtech-components.mjs +5823 -869
  57. package/fesm2022/valtech-components.mjs.map +1 -1
  58. package/lib/components/atoms/horizontal-scroll/horizontal-scroll.component.d.ts +41 -0
  59. package/lib/components/atoms/horizontal-scroll/types.d.ts +13 -0
  60. package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +39 -0
  61. package/lib/components/atoms/rights-footer/types.d.ts +13 -0
  62. package/lib/components/molecules/check-input/check-input.component.d.ts +17 -2
  63. package/lib/components/molecules/email-input/email-input.component.d.ts +1 -2
  64. package/lib/components/molecules/footer-links/footer-links.component.d.ts +47 -0
  65. package/lib/components/molecules/footer-links/types.d.ts +37 -0
  66. package/lib/components/molecules/links-accordion/links-accordion.component.d.ts +48 -0
  67. package/lib/components/molecules/links-accordion/types.d.ts +33 -0
  68. package/lib/components/molecules/password-input/password-input.component.d.ts +1 -1
  69. package/lib/components/molecules/prompter/prompter.component.d.ts +8 -1
  70. package/lib/components/molecules/prompter/types.d.ts +7 -1
  71. package/lib/components/molecules/radio-input/radio-input.component.d.ts +1 -2
  72. package/lib/components/molecules/recap-card/recap-card.component.d.ts +36 -0
  73. package/lib/components/molecules/recap-card/types.d.ts +30 -0
  74. package/lib/components/molecules/select-input/select-input.component.d.ts +6 -1
  75. package/lib/components/molecules/swipe-carousel/swipe-carousel.component.d.ts +66 -0
  76. package/lib/components/molecules/swipe-carousel/types.d.ts +35 -0
  77. package/lib/components/molecules/testimonial-card/testimonial-card.component.d.ts +41 -0
  78. package/lib/components/molecules/testimonial-card/types.d.ts +25 -0
  79. package/lib/components/molecules/text-input/text-input.component.d.ts +13 -4
  80. package/lib/components/organisms/cards-carousel/cards-carousel.component.d.ts +30 -0
  81. package/lib/components/organisms/cards-carousel/types.d.ts +11 -0
  82. package/lib/components/organisms/company-footer/company-footer.component.d.ts +32 -0
  83. package/lib/components/organisms/company-footer/types.d.ts +15 -0
  84. package/lib/components/organisms/data-table/data-table.component.d.ts +1 -1
  85. package/lib/components/organisms/data-table/types.d.ts +6 -0
  86. package/lib/components/organisms/fun-header/fun-header.component.d.ts +72 -0
  87. package/lib/components/organisms/fun-header/types.d.ts +28 -0
  88. package/lib/components/organisms/menu/menu.component.d.ts +39 -0
  89. package/lib/components/organisms/menu/types.d.ts +23 -0
  90. package/lib/components/organisms/testimonial-carousel/testimonial-carousel.component.d.ts +33 -0
  91. package/lib/components/organisms/testimonial-carousel/types.d.ts +8 -0
  92. package/lib/components/templates/page-content/page-content.component.d.ts +55 -0
  93. package/lib/components/templates/page-content/types.d.ts +14 -0
  94. package/lib/components/templates/page-template/page-template.component.d.ts +49 -0
  95. package/lib/components/templates/page-template/types.d.ts +17 -0
  96. package/lib/components/templates/page-wrapper/page-wrapper.component.d.ts +61 -0
  97. package/lib/components/templates/page-wrapper/types.d.ts +19 -0
  98. package/lib/components/types.d.ts +14 -0
  99. package/lib/services/firebase/config.d.ts +49 -0
  100. package/lib/services/firebase/firebase.service.d.ts +140 -0
  101. package/lib/services/firebase/firestore-collection.d.ts +195 -0
  102. package/lib/services/firebase/firestore.service.d.ts +303 -0
  103. package/lib/services/firebase/index.d.ts +38 -0
  104. package/lib/services/firebase/messaging.service.d.ts +254 -0
  105. package/lib/services/firebase/storage.service.d.ts +204 -0
  106. package/lib/services/firebase/types.d.ts +279 -0
  107. package/lib/services/firebase/utils/path-builder.d.ts +132 -0
  108. package/lib/services/firebase/utils/query-builder.d.ts +210 -0
  109. package/package.json +3 -1
  110. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9wYXNzd29yZC1pbnB1dC9wYXNzd29yZC1pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7QUF1QnpFOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sT0FBTyxzQkFBc0I7SUFXakMsWUFBWSxJQUFpQjtRQUY3QixpQkFBWSxHQUFHLElBQUksQ0FBQztJQUVZLENBQUM7SUFFakMsUUFBUSxLQUFJLENBQUM7K0dBYkYsc0JBQXNCO21HQUF0QixzQkFBc0IsMEdBekJ2Qjs7Ozs7Ozs7Ozs7O0dBWVQsb3ZGQWJTLG1CQUFtQiwwVEFBRSxRQUFRLDhlQUFFLFNBQVMsb1BBQUUsT0FBTzs7NEZBMEJoRCxzQkFBc0I7a0JBN0JsQyxTQUFTOytCQUNFLG9CQUFvQixjQUNsQixJQUFJLFdBQ1AsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxZQUNsRDs7Ozs7Ozs7Ozs7O0dBWVQ7Z0ZBb0JRLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElvbkJ1dHRvbiwgSW9uSWNvbiwgSW9uSW5wdXQgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IEljb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaWNvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBJbnB1dE1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtcGFzc3dvcmQtaW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbUmVhY3RpdmVGb3Jtc01vZHVsZSwgSW9uSW5wdXQsIElvbkJ1dHRvbiwgSW9uSWNvbl0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWNvbnRhaW5lclwiPlxuICAgICAgPGlvbi1pbnB1dFxuICAgICAgICBjbGFzcz1cInNpZ24taW5fX2lucHV0LXBhc3N3b3JkXCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cInByb3BzLmNvbnRyb2xcIlxuICAgICAgICBbdHlwZV09XCJoaWRlUGFzc3dvcmQgPyAncGFzc3dvcmQnIDogJ3RleHQnXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInByb3BzLnBsYWNlaG9sZGVyXCJcbiAgICAgID48L2lvbi1pbnB1dD5cbiAgICAgIDxpb24tYnV0dG9uIGNvbG9yPVwiZGFya1wiIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJoaWRlUGFzc3dvcmQgPSAhaGlkZVBhc3N3b3JkXCIgc2l6ZT1cInNtYWxsXCI+XG4gICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgW25hbWVdPVwiaGlkZVBhc3N3b3JkID8gJ2V5ZS1vZmYtb3V0bGluZScgOiAnZXllLW91dGxpbmUnXCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vcGFzc3dvcmQtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG4vKipcbiAqIHZhbC1wYXNzd29yZC1pbnB1dFxuICpcbiAqIEEgcGFzc3dvcmQgaW5wdXQgZmllbGQgd2l0aCBzaG93L2hpZGUgdG9nZ2xlLCBpbnRlZ3JhdGVkIHdpdGggQW5ndWxhciBmb3Jtcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogPHZhbC1wYXNzd29yZC1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiBteUNvbnRyb2wsIHBsYWNlaG9sZGVyOiAnRW50ZXIgcGFzc3dvcmQnIH1cIj48L3ZhbC1wYXNzd29yZC1pbnB1dD5cbiAqXG4gKiBAaW5wdXQgcHJvcHM6IElucHV0TWV0YWRhdGEgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgaW5wdXQgKGZvcm0gY29udHJvbCwgcGxhY2Vob2xkZXIsIGV0Yy4pXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXNzd29yZElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIElucHV0IGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgKiBAdHlwZSB7SW5wdXRNZXRhZGF0YX1cbiAgICogQHByb3BlcnR5IGNvbnRyb2wgLSBUaGUgQW5ndWxhciBGb3JtQ29udHJvbCBmb3IgdGhlIGlucHV0LlxuICAgKiBAcHJvcGVydHkgcGxhY2Vob2xkZXIgLSBUaGUgcGxhY2Vob2xkZXIgdGV4dC5cbiAgICovXG4gIEBJbnB1dCgpIHByb3BzOiBJbnB1dE1ldGFkYXRhO1xuXG4gIGhpZGVQYXNzd29yZCA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoaWNvbjogSWNvblNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKSB7fVxufVxuIl19
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9wYXNzd29yZC1pbnB1dC9wYXNzd29yZC1pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7QUF1QnpFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQVdqQyxZQUFZLElBQWlCO1FBRjdCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO0lBRVksQ0FBQztJQUVqQyxRQUFRLEtBQUksQ0FBQzsrR0FiRixzQkFBc0I7bUdBQXRCLHNCQUFzQiwwR0FuQ3ZCOzs7Ozs7Ozs7Ozs7R0FZVCxvdkZBYlMsbUJBQW1CLDBUQUFFLFFBQVEsOGVBQUUsU0FBUyxvUEFBRSxPQUFPOzs0RkFvQ2hELHNCQUFzQjtrQkF2Q2xDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUCxDQUFDLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFlBQ2xEOzs7Ozs7Ozs7Ozs7R0FZVDtnRkE4QlEsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25JY29uLCBJb25JbnB1dCB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgSWNvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pY29ucy5zZXJ2aWNlJztcbmltcG9ydCB7IElucHV0TWV0YWRhdGEgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1wYXNzd29yZC1pbnB1dCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtSZWFjdGl2ZUZvcm1zTW9kdWxlLCBJb25JbnB1dCwgSW9uQnV0dG9uLCBJb25JY29uXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCI+XG4gICAgICA8aW9uLWlucHV0XG4gICAgICAgIGNsYXNzPVwic2lnbi1pbl9faW5wdXQtcGFzc3dvcmRcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwicHJvcHMuY29udHJvbFwiXG4gICAgICAgIFt0eXBlXT1cImhpZGVQYXNzd29yZCA/ICdwYXNzd29yZCcgOiAndGV4dCdcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicHJvcHMucGxhY2Vob2xkZXJcIlxuICAgICAgPjwvaW9uLWlucHV0PlxuICAgICAgPGlvbi1idXR0b24gY29sb3I9XCJkYXJrXCIgZmlsbD1cImNsZWFyXCIgKGNsaWNrKT1cImhpZGVQYXNzd29yZCA9ICFoaWRlUGFzc3dvcmRcIiBzaXplPVwic21hbGxcIj5cbiAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBbbmFtZV09XCJoaWRlUGFzc3dvcmQgPyAnZXllLW9mZi1vdXRsaW5lJyA6ICdleWUtb3V0bGluZSdcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9wYXNzd29yZC1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxufSlcbi8qKlxuICogdmFsLXBhc3N3b3JkLWlucHV0XG4gKlxuICogQSBwYXNzd29yZCBpbnB1dCBmaWVsZCB3aXRoIHNob3cvaGlkZSB0b2dnbGUsIGludGVncmF0ZWQgd2l0aCBBbmd1bGFyIGZvcm1zLlxuICogRm9yIGkxOG4gc3VwcG9ydCwgcGFzcyB0aGUgdHJhbnNsYXRlZCBwbGFjZWhvbGRlciB0ZXh0IHZpYSBwcm9wcy5cbiAqXG4gKiBAZXhhbXBsZSBTdGF0aWMgcGxhY2Vob2xkZXI6XG4gKiA8dmFsLXBhc3N3b3JkLWlucHV0IFtwcm9wc109XCJ7IGNvbnRyb2w6IG15Q29udHJvbCwgcGxhY2Vob2xkZXI6ICdFbnRlciBwYXNzd29yZCcgfVwiPjwvdmFsLXBhc3N3b3JkLWlucHV0PlxuICpcbiAqIEBleGFtcGxlIFdpdGggaTE4bjpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEluIGNvbXBvbmVudFxuICogcGFzc3dvcmRQcm9wcyA9IHtcbiAqICAgY29udHJvbDogdGhpcy5wYXNzd29yZENvbnRyb2wsXG4gKiAgIHBsYWNlaG9sZGVyOiB0aGlzLmxhbmdTZXJ2aWNlLmdldFRleHQoJ0xvZ2luJywgJ3Bhc3N3b3JkUGxhY2Vob2xkZXInKVxuICogfTtcbiAqIGBgYFxuICpcbiAqIEBpbnB1dCBwcm9wczogSW5wdXRNZXRhZGF0YSAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBpbnB1dCAoZm9ybSBjb250cm9sLCBwbGFjZWhvbGRlciwgZXRjLilcbiAqL1xuZXhwb3J0IGNsYXNzIFBhc3N3b3JkSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKipcbiAgICogSW5wdXQgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAqIEB0eXBlIHtJbnB1dE1ldGFkYXRhfVxuICAgKiBAcHJvcGVydHkgY29udHJvbCAtIFRoZSBBbmd1bGFyIEZvcm1Db250cm9sIGZvciB0aGUgaW5wdXQuXG4gICAqIEBwcm9wZXJ0eSBwbGFjZWhvbGRlciAtIFRoZSBwbGFjZWhvbGRlciB0ZXh0LiBGb3IgaTE4biwgdXNlIGxhbmdTZXJ2aWNlLmdldFRleHQoKSB0byBnZXQgdHJhbnNsYXRlZCB2YWx1ZS5cbiAgICovXG4gIEBJbnB1dCgpIHByb3BzOiBJbnB1dE1ldGFkYXRhO1xuXG4gIGhpZGVQYXNzd29yZCA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoaWNvbjogSWNvblNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKSB7fVxufVxuIl19