valtech-components 2.0.949 → 2.0.951

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.
@@ -1,92 +1,127 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { Component, computed, inject, input } from '@angular/core';
2
+ import { Component, computed, inject, input, output, signal } from '@angular/core';
3
+ import { RouterLink } from '@angular/router';
3
4
  import { IonIcon } from '@ionic/angular/standalone';
4
5
  import { I18nService } from '../../../services/i18n';
6
+ import { NavigationService } from '../../../services/navigation';
5
7
  import { FEATURES_LIST_DEFAULTS } from './types';
6
8
  import * as i0 from "@angular/core";
9
+ /**
10
+ * Defaults i18n (es/en) — auto-registrados si el consumer no proveyó el
11
+ * namespace `FeaturesList`. Cubre los labels de "ver más"/"ver menos".
12
+ */
13
+ const FEATURES_LIST_I18N = {
14
+ es: { showMore: 'Ver más', showLess: 'Ver menos' },
15
+ en: { showMore: 'Show more', showLess: 'Show less' },
16
+ };
7
17
  /**
8
18
  * val-features-list
9
19
  *
10
- * A component to display a list of features with icons, titles, and descriptions.
11
- * Supports i18n for all text content.
20
+ * Lista de features con icono **o imagen**, título y descripción. Soporta i18n,
21
+ * colapso opcional ("ver más" cuando supera `maxVisible`) y un link al pie
22
+ * (ej. "Find out more"). Útil para listas de settings, apps, beneficios.
12
23
  *
13
24
  * @example
14
25
  * ```html
15
26
  * <val-features-list
16
27
  * [props]="{
17
28
  * features: [
18
- * { icon: 'flash-outline', titleKey: 'feature1Title', descriptionKey: 'feature1Desc' },
19
- * { icon: 'color-palette-outline', titleKey: 'feature2Title', descriptionKey: 'feature2Desc' }
29
+ * { icon: 'flash-outline', titleKey: 'Rápido', descriptionKey: 'Carga al instante' },
30
+ * { image: '/logos/app.png', titleKey: 'Mi App', descriptionKey: 'Gestión de equipos', token: 'app' }
20
31
  * ],
21
- * i18nNamespace: 'Features',
22
- * iconColor: 'primary',
23
- * mode: 'vertical'
24
- * }"
25
- * />
26
- * ```
27
- *
28
- * @example With custom SVG icons
29
- * ```html
30
- * <val-features-list
31
- * [props]="{
32
- * features: [
33
- * {
34
- * icon: 'custom',
35
- * svgPath: 'M13 2L3 14h9l-1 8 10-12h-9l1-8z',
36
- * titleKey: 'Fast & Secure',
37
- * descriptionKey: 'Modern authentication with OAuth and MFA'
38
- * }
39
- * ]
32
+ * maxVisible: 3,
33
+ * footerLink: { label: 'Ver todo', routerLink: '/apps' }
40
34
  * }"
35
+ * (itemClick)="open($event)"
41
36
  * />
42
37
  * ```
43
38
  */
44
39
  export class FeaturesListComponent {
45
40
  constructor() {
46
41
  this.i18n = inject(I18nService);
42
+ this.navigation = inject(NavigationService);
47
43
  /** Component configuration */
48
44
  this.props = input.required();
45
+ /** Emitido al tocar un item (con su `token`). */
46
+ this.itemClick = output();
47
+ /** Emitido al tocar el footer link (con su `token`). */
48
+ this.footerClick = output();
49
+ this._expanded = signal(false);
50
+ this.expanded = this._expanded.asReadonly();
49
51
  /** Merged configuration with defaults */
50
52
  this.config = computed(() => ({
51
53
  ...FEATURES_LIST_DEFAULTS,
52
54
  ...this.props(),
53
55
  }));
56
+ /** Items visibles según el estado de colapso. */
57
+ this.visibleFeatures = computed(() => {
58
+ const cfg = this.config();
59
+ const all = cfg.features ?? [];
60
+ if (cfg.maxVisible > 0 && !this._expanded() && all.length > cfg.maxVisible) {
61
+ return all.slice(0, cfg.maxVisible);
62
+ }
63
+ return all;
64
+ });
65
+ /** Si hay items de sobra para colapsar/expandir. */
66
+ this.canCollapse = computed(() => {
67
+ const cfg = this.config();
68
+ return cfg.maxVisible > 0 && (cfg.features?.length ?? 0) > cfg.maxVisible;
69
+ });
70
+ this.showMoreText = computed(() => {
71
+ this.i18n.lang();
72
+ return this.config().showMoreLabel || this.i18n.t('showMore', 'FeaturesList');
73
+ });
74
+ this.showLessText = computed(() => {
75
+ this.i18n.lang();
76
+ return this.config().showLessLabel || this.i18n.t('showLess', 'FeaturesList');
77
+ });
54
78
  /** Resolved icon color (handles Ionic colors and CSS colors) */
55
79
  this.iconColorStyle = computed(() => {
56
80
  const color = this.config().iconColor;
57
- // Check if it's an Ionic color variable
58
81
  if (color && !color.startsWith('#') && !color.startsWith('rgb')) {
59
82
  return `var(--ion-color-${color})`;
60
83
  }
61
84
  return color;
62
85
  });
86
+ if (!this.i18n.hasNamespace('FeaturesList')) {
87
+ this.i18n.registerContent('FeaturesList', FEATURES_LIST_I18N);
88
+ }
89
+ }
90
+ toggle() {
91
+ this._expanded.set(!this._expanded());
92
+ }
93
+ onItem(feature) {
94
+ if (feature.token != null) {
95
+ this.itemClick.emit(feature.token);
96
+ }
63
97
  }
64
- /**
65
- * Get translated title or return direct text
66
- */
98
+ onFooter(event, link) {
99
+ this.footerClick.emit(link.token);
100
+ if (link.href) {
101
+ event.preventDefault();
102
+ this.navigation.openInNewTab(link.href);
103
+ }
104
+ }
105
+ /** Get translated title or return direct text */
67
106
  getTitle(feature) {
68
107
  const namespace = this.props().i18nNamespace;
69
108
  if (namespace) {
70
- // Track language changes
71
109
  this.i18n.lang();
72
110
  return this.i18n.t(feature.titleKey, namespace);
73
111
  }
74
112
  return feature.titleKey;
75
113
  }
76
- /**
77
- * Get translated description or return direct text
78
- */
114
+ /** Get translated description or return direct text */
79
115
  getDescription(feature) {
80
116
  const namespace = this.props().i18nNamespace;
81
117
  if (namespace) {
82
- // Track language changes
83
118
  this.i18n.lang();
84
119
  return this.i18n.t(feature.descriptionKey, namespace);
85
120
  }
86
121
  return feature.descriptionKey;
87
122
  }
88
123
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeaturesListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
89
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FeaturesListComponent, isStandalone: true, selector: "val-features-list", inputs: { props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
124
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FeaturesListComponent, isStandalone: true, selector: "val-features-list", inputs: { props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { itemClick: "itemClick", footerClick: "footerClick" }, ngImport: i0, template: `
90
125
  <div
91
126
  class="features-list"
92
127
  [class.features-list--vertical]="config().mode === 'vertical'"
@@ -96,15 +131,22 @@ export class FeaturesListComponent {
96
131
  [class.features-list--gap-large]="config().gap === 'large'"
97
132
  [class.features-list--center]="config().alignment === 'center'"
98
133
  >
99
- @for (feature of props().features; track feature.titleKey) {
100
- <div class="feature">
134
+ @for (feature of visibleFeatures(); track feature.titleKey) {
135
+ <div class="feature" [class.feature--clickable]="feature.token != null" (click)="onItem(feature)">
101
136
  <div
102
137
  class="feature__icon"
103
138
  [style.color]="iconColorStyle()"
104
139
  [style.width.px]="config().iconSize"
105
140
  [style.height.px]="config().iconSize"
106
141
  >
107
- @if (feature.icon === 'custom' && feature.svgPath) {
142
+ @if (feature.image) {
143
+ <img
144
+ class="feature__image"
145
+ [class.feature__image--circle]="config().imageShape === 'circle'"
146
+ [src]="feature.image"
147
+ [alt]="getTitle(feature)"
148
+ />
149
+ } @else if (feature.icon === 'custom' && feature.svgPath) {
108
150
  <svg
109
151
  [attr.width]="config().iconSize"
110
152
  [attr.height]="config().iconSize"
@@ -117,7 +159,7 @@ export class FeaturesListComponent {
117
159
  >
118
160
  <path [attr.d]="feature.svgPath" />
119
161
  </svg>
120
- } @else {
162
+ } @else if (feature.icon) {
121
163
  <ion-icon [name]="feature.icon" [style.font-size.px]="config().iconSize"></ion-icon>
122
164
  }
123
165
  </div>
@@ -127,12 +169,24 @@ export class FeaturesListComponent {
127
169
  </div>
128
170
  </div>
129
171
  }
172
+
173
+ @if (canCollapse()) {
174
+ <button type="button" class="features-list__more" (click)="toggle()">
175
+ {{ expanded() ? showLessText() : showMoreText() }}
176
+ </button>
177
+ }
178
+
179
+ @if (config().footerLink; as link) {
180
+ <a class="features-list__footer" [routerLink]="link.routerLink ?? null" (click)="onFooter($event, link)">
181
+ {{ link.label }}
182
+ </a>
183
+ }
130
184
  </div>
131
- `, isInline: true, styles: [":host{display:block}.features-list{display:flex}.features-list--vertical{flex-direction:column}.features-list--horizontal{flex-direction:row;flex-wrap:wrap}.features-list--horizontal .feature{flex:1;min-width:200px}.features-list--gap-small{gap:1rem}.features-list--gap-medium{gap:1.5rem}.features-list--gap-large{gap:2rem}.features-list--center{align-items:center;text-align:center}.features-list--center .feature{flex-direction:column;align-items:center}.features-list--center .feature__content{text-align:center}.feature{display:flex;align-items:flex-start;gap:1rem}.feature__icon{flex-shrink:0;display:flex;align-items:center;justify-content:center}.feature__content{flex:1}.feature__title{display:block;font-size:1.1rem;font-weight:600;color:var(--ion-text-color);margin-bottom:.25rem}.feature__description{margin:0;font-size:.95rem;color:var(--ion-color-medium);line-height:1.5}:host-context(.dark) .feature__title,:host-context(.ion-palette-dark) .feature__title,:host-context(html.ion-palette-dark) .feature__title,:host-context(body.dark) .feature__title,:host-context([data-theme=\"dark\"]) .feature__title{color:var(--ion-text-color, #fff)}:host-context(.dark) .feature__description,:host-context(.ion-palette-dark) .feature__description,:host-context(html.ion-palette-dark) .feature__description,:host-context(body.dark) .feature__description,:host-context([data-theme=\"dark\"]) .feature__description{color:var(--ion-color-medium, #a0a0a0)}:host-context(.dark) .feature__icon,:host-context(.ion-palette-dark) .feature__icon,:host-context(html.ion-palette-dark) .feature__icon,:host-context(body.dark) .feature__icon,:host-context([data-theme=\"dark\"]) .feature__icon{opacity:.9}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
185
+ `, isInline: true, styles: [":host{display:block}.features-list{display:flex}.features-list--vertical{flex-direction:column}.features-list--horizontal{flex-direction:row;flex-wrap:wrap}.features-list--horizontal .feature{flex:1;min-width:200px}.features-list--gap-small{gap:1rem}.features-list--gap-medium{gap:1.5rem}.features-list--gap-large{gap:2rem}.features-list--center{align-items:center;text-align:center}.features-list--center .feature{flex-direction:column;align-items:center}.features-list--center .feature__content{text-align:center}.feature{display:flex;align-items:flex-start;gap:1rem}.feature--clickable{cursor:pointer;border-radius:10px;transition:background-color .15s ease}.feature--clickable:hover{background:var(--ion-color-light, rgba(0, 0, 0, .03))}.feature__icon{flex-shrink:0;display:flex;align-items:center;justify-content:center}.feature__image{width:100%;height:100%;object-fit:contain;border-radius:8px}.feature__image--circle{object-fit:cover;border-radius:50%}.feature__content{flex:1}.feature__title{display:block;font-size:1.1rem;font-weight:600;color:var(--ion-text-color);margin-bottom:.25rem}.feature__description{margin:0;font-size:.95rem;color:var(--ion-color-medium);line-height:1.5}.features-list__more{align-self:flex-start;margin-top:.25rem;padding:0;background:none;border:none;font:inherit;font-weight:600;color:var(--ion-color-primary);cursor:pointer}.features-list--center .features-list__more,.features-list--center .features-list__footer{align-self:center}.features-list__footer{align-self:flex-start;margin-top:.25rem;font-weight:600;color:var(--ion-color-primary);text-decoration:none;cursor:pointer}.features-list__footer:hover{text-decoration:underline}:host-context(.dark) .feature__title,:host-context(.ion-palette-dark) .feature__title,:host-context(html.ion-palette-dark) .feature__title,:host-context(body.dark) .feature__title,:host-context([data-theme=\"dark\"]) .feature__title{color:var(--ion-text-color, #fff)}:host-context(.dark) .feature__description,:host-context(.ion-palette-dark) .feature__description,:host-context(html.ion-palette-dark) .feature__description,:host-context(body.dark) .feature__description,:host-context([data-theme=\"dark\"]) .feature__description{color:var(--ion-color-medium, #a0a0a0)}:host-context(.dark) .feature--clickable:hover,:host-context(.ion-palette-dark) .feature--clickable:hover,:host-context(html.ion-palette-dark) .feature--clickable:hover,:host-context(body.dark) .feature--clickable:hover,:host-context([data-theme=\"dark\"]) .feature--clickable:hover{background:#ffffff0a}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
132
186
  }
133
187
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeaturesListComponent, decorators: [{
134
188
  type: Component,
135
- args: [{ selector: 'val-features-list', standalone: true, imports: [CommonModule, IonIcon], template: `
189
+ args: [{ selector: 'val-features-list', standalone: true, imports: [CommonModule, RouterLink, IonIcon], template: `
136
190
  <div
137
191
  class="features-list"
138
192
  [class.features-list--vertical]="config().mode === 'vertical'"
@@ -142,15 +196,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
142
196
  [class.features-list--gap-large]="config().gap === 'large'"
143
197
  [class.features-list--center]="config().alignment === 'center'"
144
198
  >
145
- @for (feature of props().features; track feature.titleKey) {
146
- <div class="feature">
199
+ @for (feature of visibleFeatures(); track feature.titleKey) {
200
+ <div class="feature" [class.feature--clickable]="feature.token != null" (click)="onItem(feature)">
147
201
  <div
148
202
  class="feature__icon"
149
203
  [style.color]="iconColorStyle()"
150
204
  [style.width.px]="config().iconSize"
151
205
  [style.height.px]="config().iconSize"
152
206
  >
153
- @if (feature.icon === 'custom' && feature.svgPath) {
207
+ @if (feature.image) {
208
+ <img
209
+ class="feature__image"
210
+ [class.feature__image--circle]="config().imageShape === 'circle'"
211
+ [src]="feature.image"
212
+ [alt]="getTitle(feature)"
213
+ />
214
+ } @else if (feature.icon === 'custom' && feature.svgPath) {
154
215
  <svg
155
216
  [attr.width]="config().iconSize"
156
217
  [attr.height]="config().iconSize"
@@ -163,7 +224,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
163
224
  >
164
225
  <path [attr.d]="feature.svgPath" />
165
226
  </svg>
166
- } @else {
227
+ } @else if (feature.icon) {
167
228
  <ion-icon [name]="feature.icon" [style.font-size.px]="config().iconSize"></ion-icon>
168
229
  }
169
230
  </div>
@@ -173,7 +234,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
173
234
  </div>
174
235
  </div>
175
236
  }
237
+
238
+ @if (canCollapse()) {
239
+ <button type="button" class="features-list__more" (click)="toggle()">
240
+ {{ expanded() ? showLessText() : showMoreText() }}
241
+ </button>
242
+ }
243
+
244
+ @if (config().footerLink; as link) {
245
+ <a class="features-list__footer" [routerLink]="link.routerLink ?? null" (click)="onFooter($event, link)">
246
+ {{ link.label }}
247
+ </a>
248
+ }
176
249
  </div>
177
- `, styles: [":host{display:block}.features-list{display:flex}.features-list--vertical{flex-direction:column}.features-list--horizontal{flex-direction:row;flex-wrap:wrap}.features-list--horizontal .feature{flex:1;min-width:200px}.features-list--gap-small{gap:1rem}.features-list--gap-medium{gap:1.5rem}.features-list--gap-large{gap:2rem}.features-list--center{align-items:center;text-align:center}.features-list--center .feature{flex-direction:column;align-items:center}.features-list--center .feature__content{text-align:center}.feature{display:flex;align-items:flex-start;gap:1rem}.feature__icon{flex-shrink:0;display:flex;align-items:center;justify-content:center}.feature__content{flex:1}.feature__title{display:block;font-size:1.1rem;font-weight:600;color:var(--ion-text-color);margin-bottom:.25rem}.feature__description{margin:0;font-size:.95rem;color:var(--ion-color-medium);line-height:1.5}:host-context(.dark) .feature__title,:host-context(.ion-palette-dark) .feature__title,:host-context(html.ion-palette-dark) .feature__title,:host-context(body.dark) .feature__title,:host-context([data-theme=\"dark\"]) .feature__title{color:var(--ion-text-color, #fff)}:host-context(.dark) .feature__description,:host-context(.ion-palette-dark) .feature__description,:host-context(html.ion-palette-dark) .feature__description,:host-context(body.dark) .feature__description,:host-context([data-theme=\"dark\"]) .feature__description{color:var(--ion-color-medium, #a0a0a0)}:host-context(.dark) .feature__icon,:host-context(.ion-palette-dark) .feature__icon,:host-context(html.ion-palette-dark) .feature__icon,:host-context(body.dark) .feature__icon,:host-context([data-theme=\"dark\"]) .feature__icon{opacity:.9}\n"] }]
178
- }] });
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZXMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlYXR1cmVzLWxpc3QvZmVhdHVyZXMtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQXFDLHNCQUFzQixFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUVwRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0NHO0FBNkpILE1BQU0sT0FBTyxxQkFBcUI7SUE1SmxDO1FBNkpVLFNBQUksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFbkMsOEJBQThCO1FBQ3JCLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUF3QixDQUFDO1FBRXhELHlDQUF5QztRQUN6QyxXQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDdkIsR0FBRyxzQkFBc0I7WUFDekIsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFO1NBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBRUosZ0VBQWdFO1FBQ2hFLG1CQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUM3QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQ3RDLHdDQUF3QztZQUN4QyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2hFLE9BQU8sbUJBQW1CLEtBQUssR0FBRyxDQUFDO1lBQ3JDLENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO0tBMkJKO0lBekJDOztPQUVHO0lBQ0gsUUFBUSxDQUFDLE9BQW9CO1FBQzNCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxhQUFhLENBQUM7UUFDN0MsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLHlCQUF5QjtZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWMsQ0FBQyxPQUFvQjtRQUNqQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsYUFBYSxDQUFDO1FBQzdDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCx5QkFBeUI7WUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQztJQUNoQyxDQUFDOytHQTlDVSxxQkFBcUI7bUdBQXJCLHFCQUFxQixnTkF4SnRCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ1QsdXVEQTNDUyxZQUFZLCtCQUFFLE9BQU87OzRGQXlKcEIscUJBQXFCO2tCQTVKakMsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUN0Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMENUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvbkljb24gfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBGZWF0dXJlSXRlbSwgRmVhdHVyZXNMaXN0TWV0YWRhdGEsIEZFQVRVUkVTX0xJU1RfREVGQVVMVFMgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiB2YWwtZmVhdHVyZXMtbGlzdFxuICpcbiAqIEEgY29tcG9uZW50IHRvIGRpc3BsYXkgYSBsaXN0IG9mIGZlYXR1cmVzIHdpdGggaWNvbnMsIHRpdGxlcywgYW5kIGRlc2NyaXB0aW9ucy5cbiAqIFN1cHBvcnRzIGkxOG4gZm9yIGFsbCB0ZXh0IGNvbnRlbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDx2YWwtZmVhdHVyZXMtbGlzdFxuICogICBbcHJvcHNdPVwie1xuICogICAgIGZlYXR1cmVzOiBbXG4gKiAgICAgICB7IGljb246ICdmbGFzaC1vdXRsaW5lJywgdGl0bGVLZXk6ICdmZWF0dXJlMVRpdGxlJywgZGVzY3JpcHRpb25LZXk6ICdmZWF0dXJlMURlc2MnIH0sXG4gKiAgICAgICB7IGljb246ICdjb2xvci1wYWxldHRlLW91dGxpbmUnLCB0aXRsZUtleTogJ2ZlYXR1cmUyVGl0bGUnLCBkZXNjcmlwdGlvbktleTogJ2ZlYXR1cmUyRGVzYycgfVxuICogICAgIF0sXG4gKiAgICAgaTE4bk5hbWVzcGFjZTogJ0ZlYXR1cmVzJyxcbiAqICAgICBpY29uQ29sb3I6ICdwcmltYXJ5JyxcbiAqICAgICBtb2RlOiAndmVydGljYWwnXG4gKiAgIH1cIlxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFdpdGggY3VzdG9tIFNWRyBpY29uc1xuICogYGBgaHRtbFxuICogPHZhbC1mZWF0dXJlcy1saXN0XG4gKiAgIFtwcm9wc109XCJ7XG4gKiAgICAgZmVhdHVyZXM6IFtcbiAqICAgICAgIHtcbiAqICAgICAgICAgaWNvbjogJ2N1c3RvbScsXG4gKiAgICAgICAgIHN2Z1BhdGg6ICdNMTMgMkwzIDE0aDlsLTEgOCAxMC0xMmgtOWwxLTh6JyxcbiAqICAgICAgICAgdGl0bGVLZXk6ICdGYXN0ICYgU2VjdXJlJyxcbiAqICAgICAgICAgZGVzY3JpcHRpb25LZXk6ICdNb2Rlcm4gYXV0aGVudGljYXRpb24gd2l0aCBPQXV0aCBhbmQgTUZBJ1xuICogICAgICAgfVxuICogICAgIF1cbiAqICAgfVwiXG4gKiAvPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1mZWF0dXJlcy1saXN0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW9uSWNvbl0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmZWF0dXJlcy1saXN0XCJcbiAgICAgIFtjbGFzcy5mZWF0dXJlcy1saXN0LS12ZXJ0aWNhbF09XCJjb25maWcoKS5tb2RlID09PSAndmVydGljYWwnXCJcbiAgICAgIFtjbGFzcy5mZWF0dXJlcy1saXN0LS1ob3Jpem9udGFsXT1cImNvbmZpZygpLm1vZGUgPT09ICdob3Jpem9udGFsJ1wiXG4gICAgICBbY2xhc3MuZmVhdHVyZXMtbGlzdC0tZ2FwLXNtYWxsXT1cImNvbmZpZygpLmdhcCA9PT0gJ3NtYWxsJ1wiXG4gICAgICBbY2xhc3MuZmVhdHVyZXMtbGlzdC0tZ2FwLW1lZGl1bV09XCJjb25maWcoKS5nYXAgPT09ICdtZWRpdW0nXCJcbiAgICAgIFtjbGFzcy5mZWF0dXJlcy1saXN0LS1nYXAtbGFyZ2VdPVwiY29uZmlnKCkuZ2FwID09PSAnbGFyZ2UnXCJcbiAgICAgIFtjbGFzcy5mZWF0dXJlcy1saXN0LS1jZW50ZXJdPVwiY29uZmlnKCkuYWxpZ25tZW50ID09PSAnY2VudGVyJ1wiXG4gICAgPlxuICAgICAgQGZvciAoZmVhdHVyZSBvZiBwcm9wcygpLmZlYXR1cmVzOyB0cmFjayBmZWF0dXJlLnRpdGxlS2V5KSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmZWF0dXJlXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmZWF0dXJlX19pY29uXCJcbiAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJpY29uQ29sb3JTdHlsZSgpXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb25maWcoKS5pY29uU2l6ZVwiXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImNvbmZpZygpLmljb25TaXplXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGZlYXR1cmUuaWNvbiA9PT0gJ2N1c3RvbScgJiYgZmVhdHVyZS5zdmdQYXRoKSB7XG4gICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICBbYXR0ci53aWR0aF09XCJjb25maWcoKS5pY29uU2l6ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuaGVpZ2h0XT1cImNvbmZpZygpLmljb25TaXplXCJcbiAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwYXRoIFthdHRyLmRdPVwiZmVhdHVyZS5zdmdQYXRoXCIgLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cImZlYXR1cmUuaWNvblwiIFtzdHlsZS5mb250LXNpemUucHhdPVwiY29uZmlnKCkuaWNvblNpemVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZWF0dXJlX19jb250ZW50XCI+XG4gICAgICAgICAgICA8c3Ryb25nIGNsYXNzPVwiZmVhdHVyZV9fdGl0bGVcIj57eyBnZXRUaXRsZShmZWF0dXJlKSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJmZWF0dXJlX19kZXNjcmlwdGlvblwiPnt7IGdldERlc2NyaXB0aW9uKGZlYXR1cmUpIH19PC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cblxuICAgICAgLmZlYXR1cmVzLWxpc3Qge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgfVxuXG4gICAgICAuZmVhdHVyZXMtbGlzdC0tdmVydGljYWwge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgfVxuXG4gICAgICAuZmVhdHVyZXMtbGlzdC0taG9yaXpvbnRhbCB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIH1cblxuICAgICAgLmZlYXR1cmVzLWxpc3QtLWhvcml6b250YWwgLmZlYXR1cmUge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBtaW4td2lkdGg6IDIwMHB4O1xuICAgICAgfVxuXG4gICAgICAuZmVhdHVyZXMtbGlzdC0tZ2FwLXNtYWxsIHtcbiAgICAgICAgZ2FwOiAxcmVtO1xuICAgICAgfVxuXG4gICAgICAuZmVhdHVyZXMtbGlzdC0tZ2FwLW1lZGl1bSB7XG4gICAgICAgIGdhcDogMS41cmVtO1xuICAgICAgfVxuXG4gICAgICAuZmVhdHVyZXMtbGlzdC0tZ2FwLWxhcmdlIHtcbiAgICAgICAgZ2FwOiAycmVtO1xuICAgICAgfVxuXG4gICAgICAuZmVhdHVyZXMtbGlzdC0tY2VudGVyIHtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAuZmVhdHVyZXMtbGlzdC0tY2VudGVyIC5mZWF0dXJlIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLmZlYXR1cmVzLWxpc3QtLWNlbnRlciAuZmVhdHVyZV9fY29udGVudCB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLmZlYXR1cmUge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgZ2FwOiAxcmVtO1xuICAgICAgfVxuXG4gICAgICAuZmVhdHVyZV9faWNvbiB7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLmZlYXR1cmVfX2NvbnRlbnQge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgfVxuXG4gICAgICAuZmVhdHVyZV9fdGl0bGUge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgZm9udC1zaXplOiAxLjFyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tdGV4dC1jb2xvcik7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuMjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5mZWF0dXJlX19kZXNjcmlwdGlvbiB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgZm9udC1zaXplOiAwLjk1cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgICB9XG5cbiAgICAgIC8qIERhcmsgbW9kZSBzdXBwb3J0IOKAlCBjbGFzcy1iYXNlZCBPTkxZIChJb25pYyBib2R5LmRhcmsgLyBodG1sLmlvbi1wYWxldHRlLWRhcmspICovXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuZmVhdHVyZV9fdGl0bGUsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuZmVhdHVyZV9fdGl0bGUsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmZlYXR1cmVfX3RpdGxlLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5mZWF0dXJlX190aXRsZSxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmZlYXR1cmVfX3RpdGxlIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi10ZXh0LWNvbG9yLCAjZmZmKTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmZlYXR1cmVfX2Rlc2NyaXB0aW9uLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmZlYXR1cmVfX2Rlc2NyaXB0aW9uLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5mZWF0dXJlX19kZXNjcmlwdGlvbixcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuZmVhdHVyZV9fZGVzY3JpcHRpb24sXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5mZWF0dXJlX19kZXNjcmlwdGlvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLCAjYTBhMGEwKTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmZlYXR1cmVfX2ljb24sXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuZmVhdHVyZV9faWNvbixcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuZmVhdHVyZV9faWNvbixcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuZmVhdHVyZV9faWNvbixcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmZlYXR1cmVfX2ljb24ge1xuICAgICAgICBvcGFjaXR5OiAwLjk7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRmVhdHVyZXNMaXN0Q29tcG9uZW50IHtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcblxuICAvKiogQ29tcG9uZW50IGNvbmZpZ3VyYXRpb24gKi9cbiAgcmVhZG9ubHkgcHJvcHMgPSBpbnB1dC5yZXF1aXJlZDxGZWF0dXJlc0xpc3RNZXRhZGF0YT4oKTtcblxuICAvKiogTWVyZ2VkIGNvbmZpZ3VyYXRpb24gd2l0aCBkZWZhdWx0cyAqL1xuICBjb25maWcgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgIC4uLkZFQVRVUkVTX0xJU1RfREVGQVVMVFMsXG4gICAgLi4udGhpcy5wcm9wcygpLFxuICB9KSk7XG5cbiAgLyoqIFJlc29sdmVkIGljb24gY29sb3IgKGhhbmRsZXMgSW9uaWMgY29sb3JzIGFuZCBDU1MgY29sb3JzKSAqL1xuICBpY29uQ29sb3JTdHlsZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb2xvciA9IHRoaXMuY29uZmlnKCkuaWNvbkNvbG9yO1xuICAgIC8vIENoZWNrIGlmIGl0J3MgYW4gSW9uaWMgY29sb3IgdmFyaWFibGVcbiAgICBpZiAoY29sb3IgJiYgIWNvbG9yLnN0YXJ0c1dpdGgoJyMnKSAmJiAhY29sb3Iuc3RhcnRzV2l0aCgncmdiJykpIHtcbiAgICAgIHJldHVybiBgdmFyKC0taW9uLWNvbG9yLSR7Y29sb3J9KWA7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEdldCB0cmFuc2xhdGVkIHRpdGxlIG9yIHJldHVybiBkaXJlY3QgdGV4dFxuICAgKi9cbiAgZ2V0VGl0bGUoZmVhdHVyZTogRmVhdHVyZUl0ZW0pOiBzdHJpbmcge1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMucHJvcHMoKS5pMThuTmFtZXNwYWNlO1xuICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgIC8vIFRyYWNrIGxhbmd1YWdlIGNoYW5nZXNcbiAgICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgICByZXR1cm4gdGhpcy5pMThuLnQoZmVhdHVyZS50aXRsZUtleSwgbmFtZXNwYWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZlYXR1cmUudGl0bGVLZXk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRyYW5zbGF0ZWQgZGVzY3JpcHRpb24gb3IgcmV0dXJuIGRpcmVjdCB0ZXh0XG4gICAqL1xuICBnZXREZXNjcmlwdGlvbihmZWF0dXJlOiBGZWF0dXJlSXRlbSk6IHN0cmluZyB7XG4gICAgY29uc3QgbmFtZXNwYWNlID0gdGhpcy5wcm9wcygpLmkxOG5OYW1lc3BhY2U7XG4gICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgLy8gVHJhY2sgbGFuZ3VhZ2UgY2hhbmdlc1xuICAgICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICAgIHJldHVybiB0aGlzLmkxOG4udChmZWF0dXJlLmRlc2NyaXB0aW9uS2V5LCBuYW1lc3BhY2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmVhdHVyZS5kZXNjcmlwdGlvbktleTtcbiAgfVxufVxuIl19
250
+ `, styles: [":host{display:block}.features-list{display:flex}.features-list--vertical{flex-direction:column}.features-list--horizontal{flex-direction:row;flex-wrap:wrap}.features-list--horizontal .feature{flex:1;min-width:200px}.features-list--gap-small{gap:1rem}.features-list--gap-medium{gap:1.5rem}.features-list--gap-large{gap:2rem}.features-list--center{align-items:center;text-align:center}.features-list--center .feature{flex-direction:column;align-items:center}.features-list--center .feature__content{text-align:center}.feature{display:flex;align-items:flex-start;gap:1rem}.feature--clickable{cursor:pointer;border-radius:10px;transition:background-color .15s ease}.feature--clickable:hover{background:var(--ion-color-light, rgba(0, 0, 0, .03))}.feature__icon{flex-shrink:0;display:flex;align-items:center;justify-content:center}.feature__image{width:100%;height:100%;object-fit:contain;border-radius:8px}.feature__image--circle{object-fit:cover;border-radius:50%}.feature__content{flex:1}.feature__title{display:block;font-size:1.1rem;font-weight:600;color:var(--ion-text-color);margin-bottom:.25rem}.feature__description{margin:0;font-size:.95rem;color:var(--ion-color-medium);line-height:1.5}.features-list__more{align-self:flex-start;margin-top:.25rem;padding:0;background:none;border:none;font:inherit;font-weight:600;color:var(--ion-color-primary);cursor:pointer}.features-list--center .features-list__more,.features-list--center .features-list__footer{align-self:center}.features-list__footer{align-self:flex-start;margin-top:.25rem;font-weight:600;color:var(--ion-color-primary);text-decoration:none;cursor:pointer}.features-list__footer:hover{text-decoration:underline}:host-context(.dark) .feature__title,:host-context(.ion-palette-dark) .feature__title,:host-context(html.ion-palette-dark) .feature__title,:host-context(body.dark) .feature__title,:host-context([data-theme=\"dark\"]) .feature__title{color:var(--ion-text-color, #fff)}:host-context(.dark) .feature__description,:host-context(.ion-palette-dark) .feature__description,:host-context(html.ion-palette-dark) .feature__description,:host-context(body.dark) .feature__description,:host-context([data-theme=\"dark\"]) .feature__description{color:var(--ion-color-medium, #a0a0a0)}:host-context(.dark) .feature--clickable:hover,:host-context(.ion-palette-dark) .feature--clickable:hover,:host-context(html.ion-palette-dark) .feature--clickable:hover,:host-context(body.dark) .feature--clickable:hover,:host-context([data-theme=\"dark\"]) .feature--clickable:hover{background:#ffffff0a}\n"] }]
251
+ }], ctorParameters: () => [] });
252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZXMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlYXR1cmVzLWxpc3QvZmVhdHVyZXMtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQTZELHNCQUFzQixFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUU1Rzs7O0dBR0c7QUFDSCxNQUFNLGtCQUFrQixHQUFHO0lBQ3pCLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRTtJQUNsRCxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUU7Q0FDckQsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFvT0gsTUFBTSxPQUFPLHFCQUFxQjtJQWVoQztRQWRRLFNBQUksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0IsZUFBVSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRS9DLDhCQUE4QjtRQUNyQixVQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEs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akIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUM7SUFDaEMsQ0FBQzsrR0FsR1UscUJBQXFCO21HQUFyQixxQkFBcUIsaVJBL050Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZEVCw4akZBOURTLFlBQVksK0JBQUUsVUFBVSxvT0FBRSxPQUFPOzs0RkFnT2hDLHFCQUFxQjtrQkFuT2pDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLFlBQ2xDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkRUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElvbkljb24gfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24nO1xuaW1wb3J0IHsgRmVhdHVyZUl0ZW0sIEZlYXR1cmVzTGlzdEZvb3RlckxpbmssIEZlYXR1cmVzTGlzdE1ldGFkYXRhLCBGRUFUVVJFU19MSVNUX0RFRkFVTFRTIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogRGVmYXVsdHMgaTE4biAoZXMvZW4pIOKAlCBhdXRvLXJlZ2lzdHJhZG9zIHNpIGVsIGNvbnN1bWVyIG5vIHByb3ZlecOzIGVsXG4gKiBuYW1lc3BhY2UgYEZlYXR1cmVzTGlzdGAuIEN1YnJlIGxvcyBsYWJlbHMgZGUgXCJ2ZXIgbcOhc1wiL1widmVyIG1lbm9zXCIuXG4gKi9cbmNvbnN0IEZFQVRVUkVTX0xJU1RfSTE4TiA9IHtcbiAgZXM6IHsgc2hvd01vcmU6ICdWZXIgbcOhcycsIHNob3dMZXNzOiAnVmVyIG1lbm9zJyB9LFxuICBlbjogeyBzaG93TW9yZTogJ1Nob3cgbW9yZScsIHNob3dMZXNzOiAnU2hvdyBsZXNzJyB9LFxufTtcblxuLyoqXG4gKiB2YWwtZmVhdHVyZXMtbGlzdFxuICpcbiAqIExpc3RhIGRlIGZlYXR1cmVzIGNvbiBpY29ubyAqKm8gaW1hZ2VuKiosIHTDrXR1bG8geSBkZXNjcmlwY2nDs24uIFNvcG9ydGEgaTE4bixcbiAqIGNvbGFwc28gb3BjaW9uYWwgKFwidmVyIG3DoXNcIiBjdWFuZG8gc3VwZXJhIGBtYXhWaXNpYmxlYCkgeSB1biBsaW5rIGFsIHBpZVxuICogKGVqLiBcIkZpbmQgb3V0IG1vcmVcIikuIMOadGlsIHBhcmEgbGlzdGFzIGRlIHNldHRpbmdzLCBhcHBzLCBiZW5lZmljaW9zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8dmFsLWZlYXR1cmVzLWxpc3RcbiAqICAgW3Byb3BzXT1cIntcbiAqICAgICBmZWF0dXJlczogW1xuICogICAgICAgeyBpY29uOiAnZmxhc2gtb3V0bGluZScsIHRpdGxlS2V5OiAnUsOhcGlkbycsIGRlc2NyaXB0aW9uS2V5OiAnQ2FyZ2EgYWwgaW5zdGFudGUnIH0sXG4gKiAgICAgICB7IGltYWdlOiAnL2xvZ29zL2FwcC5wbmcnLCB0aXRsZUtleTogJ01pIEFwcCcsIGRlc2NyaXB0aW9uS2V5OiAnR2VzdGnDs24gZGUgZXF1aXBvcycsIHRva2VuOiAnYXBwJyB9XG4gKiAgICAgXSxcbiAqICAgICBtYXhWaXNpYmxlOiAzLFxuICogICAgIGZvb3Rlckxpbms6IHsgbGFiZWw6ICdWZXIgdG9kbycsIHJvdXRlckxpbms6ICcvYXBwcycgfVxuICogICB9XCJcbiAqICAgKGl0ZW1DbGljayk9XCJvcGVuKCRldmVudClcIlxuICogLz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtZmVhdHVyZXMtbGlzdCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJvdXRlckxpbmssIElvbkljb25dLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZmVhdHVyZXMtbGlzdFwiXG4gICAgICBbY2xhc3MuZmVhdHVyZXMtbGlzdC0tdmVydGljYWxdPVwiY29uZmlnKCkubW9kZSA9PT0gJ3ZlcnRpY2FsJ1wiXG4gICAgICBbY2xhc3MuZmVhdHVyZXMtbGlzdC0taG9yaXpvbnRhbF09XCJjb25maWcoKS5tb2RlID09PSAnaG9yaXpvbnRhbCdcIlxuICAgICAgW2NsYXNzLmZlYXR1cmVzLWxpc3QtLWdhcC1zbWFsbF09XCJjb25maWcoKS5nYXAgPT09ICdzbWFsbCdcIlxuICAgICAgW2NsYXNzLmZlYXR1cmVzLWxpc3QtLWdhcC1tZWRpdW1dPVwiY29uZmlnKCkuZ2FwID09PSAnbWVkaXVtJ1wiXG4gICAgICBbY2xhc3MuZmVhdHVyZXMtbGlzdC0tZ2FwLWxhcmdlXT1cImNvbmZpZygpLmdhcCA9PT0gJ2xhcmdlJ1wiXG4gICAgICBbY2xhc3MuZmVhdHVyZXMtbGlzdC0tY2VudGVyXT1cImNvbmZpZygpLmFsaWdubWVudCA9PT0gJ2NlbnRlcidcIlxuICAgID5cbiAgICAgIEBmb3IgKGZlYXR1cmUgb2YgdmlzaWJsZUZlYXR1cmVzKCk7IHRyYWNrIGZlYXR1cmUudGl0bGVLZXkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZlYXR1cmVcIiBbY2xhc3MuZmVhdHVyZS0tY2xpY2thYmxlXT1cImZlYXR1cmUudG9rZW4gIT0gbnVsbFwiIChjbGljayk9XCJvbkl0ZW0oZmVhdHVyZSlcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZlYXR1cmVfX2ljb25cIlxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImljb25Db2xvclN0eWxlKClcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbmZpZygpLmljb25TaXplXCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiY29uZmlnKCkuaWNvblNpemVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoZmVhdHVyZS5pbWFnZSkge1xuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZWF0dXJlX19pbWFnZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmZlYXR1cmVfX2ltYWdlLS1jaXJjbGVdPVwiY29uZmlnKCkuaW1hZ2VTaGFwZSA9PT0gJ2NpcmNsZSdcIlxuICAgICAgICAgICAgICAgIFtzcmNdPVwiZmVhdHVyZS5pbWFnZVwiXG4gICAgICAgICAgICAgICAgW2FsdF09XCJnZXRUaXRsZShmZWF0dXJlKVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9IEBlbHNlIGlmIChmZWF0dXJlLmljb24gPT09ICdjdXN0b20nICYmIGZlYXR1cmUuc3ZnUGF0aCkge1xuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgW2F0dHIud2lkdGhdPVwiY29uZmlnKCkuaWNvblNpemVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmhlaWdodF09XCJjb25maWcoKS5pY29uU2l6ZVwiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8cGF0aCBbYXR0ci5kXT1cImZlYXR1cmUuc3ZnUGF0aFwiIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoZmVhdHVyZS5pY29uKSB7XG4gICAgICAgICAgICAgIDxpb24taWNvbiBbbmFtZV09XCJmZWF0dXJlLmljb25cIiBbc3R5bGUuZm9udC1zaXplLnB4XT1cImNvbmZpZygpLmljb25TaXplXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmVhdHVyZV9fY29udGVudFwiPlxuICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cImZlYXR1cmVfX3RpdGxlXCI+e3sgZ2V0VGl0bGUoZmVhdHVyZSkgfX08L3N0cm9uZz5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwiZmVhdHVyZV9fZGVzY3JpcHRpb25cIj57eyBnZXREZXNjcmlwdGlvbihmZWF0dXJlKSB9fTwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoY2FuQ29sbGFwc2UoKSkge1xuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImZlYXR1cmVzLWxpc3RfX21vcmVcIiAoY2xpY2spPVwidG9nZ2xlKClcIj5cbiAgICAgICAgICB7eyBleHBhbmRlZCgpID8gc2hvd0xlc3NUZXh0KCkgOiBzaG93TW9yZVRleHQoKSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIH1cblxuICAgICAgQGlmIChjb25maWcoKS5mb290ZXJMaW5rOyBhcyBsaW5rKSB7XG4gICAgICAgIDxhIGNsYXNzPVwiZmVhdHVyZXMtbGlzdF9fZm9vdGVyXCIgW3JvdXRlckxpbmtdPVwibGluay5yb3V0ZXJMaW5rID8/IG51bGxcIiAoY2xpY2spPVwib25Gb290ZXIoJGV2ZW50LCBsaW5rKVwiPlxuICAgICAgICAgIHt7IGxpbmsubGFiZWwgfX1cbiAgICAgICAgPC9hPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuXG4gICAgICAuZmVhdHVyZXMtbGlzdCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICB9XG5cbiAgICAgIC5mZWF0dXJlcy1saXN0LS12ZXJ0aWNhbCB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICB9XG5cbiAgICAgIC5mZWF0dXJlcy1saXN0LS1ob3Jpem9udGFsIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgfVxuXG4gICAgICAuZmVhdHVyZXMtbGlzdC0taG9yaXpvbnRhbCAuZmVhdHVyZSB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1pbi13aWR0aDogMjAwcHg7XG4gICAgICB9XG5cbiAgICAgIC5mZWF0dXJlcy1saXN0LS1nYXAtc21hbGwge1xuICAgICAgICBnYXA6IDFyZW07XG4gICAgICB9XG5cbiAgICAgIC5mZWF0dXJlcy1saXN0LS1nYXAtbWVkaXVtIHtcbiAgICAgICAgZ2FwOiAxLjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5mZWF0dXJlcy1saXN0LS1nYXAtbGFyZ2Uge1xuICAgICAgICBnYXA6IDJyZW07XG4gICAgICB9XG5cbiAgICAgIC5mZWF0dXJlcy1saXN0LS1jZW50ZXIge1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5mZWF0dXJlcy1saXN0LS1jZW50ZXIgLmZlYXR1cmUge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAuZmVhdHVyZXMtbGlzdC0tY2VudGVyIC5mZWF0dXJlX19jb250ZW50IHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAuZmVhdHVyZSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBnYXA6IDFyZW07XG4gICAgICB9XG5cbiAgICAgIC5mZWF0dXJlLS1jbGlja2FibGUge1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLmZlYXR1cmUtLWNsaWNrYWJsZTpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCwgcmdiYSgwLCAwLCAwLCAwLjAzKSk7XG4gICAgICB9XG5cbiAgICAgIC5mZWF0dXJlX19pY29uIHtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAuZmVhdHVyZV9faW1hZ2Uge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvYmplY3QtZml0OiBjb250YWluO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICB9XG5cbiAgICAgIC5mZWF0dXJlX19pbWFnZS0tY2lyY2xlIHtcbiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIH1cblxuICAgICAgLmZlYXR1cmVfX2NvbnRlbnQge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgfVxuXG4gICAgICAuZmVhdHVyZV9fdGl0bGUge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgZm9udC1zaXplOiAxLjFyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tdGV4dC1jb2xvcik7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuMjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5mZWF0dXJlX19kZXNjcmlwdGlvbiB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgZm9udC1zaXplOiAwLjk1cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgICB9XG5cbiAgICAgIC5mZWF0dXJlcy1saXN0X19tb3JlIHtcbiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcbiAgICAgICAgbWFyZ2luLXRvcDogMC4yNXJlbTtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBmb250OiBpbmhlcml0O1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5mZWF0dXJlcy1saXN0LS1jZW50ZXIgLmZlYXR1cmVzLWxpc3RfX21vcmUsXG4gICAgICAuZmVhdHVyZXMtbGlzdC0tY2VudGVyIC5mZWF0dXJlcy1saXN0X19mb290ZXIge1xuICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5mZWF0dXJlcy1saXN0X19mb290ZXIge1xuICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xuICAgICAgICBtYXJnaW4tdG9wOiAwLjI1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cblxuICAgICAgLmZlYXR1cmVzLWxpc3RfX2Zvb3Rlcjpob3ZlciB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgfVxuXG4gICAgICAvKiBEYXJrIG1vZGUgc3VwcG9ydCDigJQgY2xhc3MtYmFzZWQgT05MWSAoSW9uaWMgYm9keS5kYXJrIC8gaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAqL1xuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmZlYXR1cmVfX3RpdGxlLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmZlYXR1cmVfX3RpdGxlLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5mZWF0dXJlX190aXRsZSxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuZmVhdHVyZV9fdGl0bGUsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5mZWF0dXJlX190aXRsZSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tdGV4dC1jb2xvciwgI2ZmZik7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5mZWF0dXJlX19kZXNjcmlwdGlvbixcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5mZWF0dXJlX19kZXNjcmlwdGlvbixcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuZmVhdHVyZV9fZGVzY3JpcHRpb24sXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmZlYXR1cmVfX2Rlc2NyaXB0aW9uLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuZmVhdHVyZV9fZGVzY3JpcHRpb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgI2EwYTBhMCk7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5mZWF0dXJlLS1jbGlja2FibGU6aG92ZXIsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuZmVhdHVyZS0tY2xpY2thYmxlOmhvdmVyLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5mZWF0dXJlLS1jbGlja2FibGU6aG92ZXIsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmZlYXR1cmUtLWNsaWNrYWJsZTpob3ZlcixcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmZlYXR1cmUtLWNsaWNrYWJsZTpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRmVhdHVyZXNMaXN0Q29tcG9uZW50IHtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBuYXZpZ2F0aW9uID0gaW5qZWN0KE5hdmlnYXRpb25TZXJ2aWNlKTtcblxuICAvKiogQ29tcG9uZW50IGNvbmZpZ3VyYXRpb24gKi9cbiAgcmVhZG9ubHkgcHJvcHMgPSBpbnB1dC5yZXF1aXJlZDxGZWF0dXJlc0xpc3RNZXRhZGF0YT4oKTtcblxuICAvKiogRW1pdGlkbyBhbCB0b2NhciB1biBpdGVtIChjb24gc3UgYHRva2VuYCkuICovXG4gIHJlYWRvbmx5IGl0ZW1DbGljayA9IG91dHB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIC8qKiBFbWl0aWRvIGFsIHRvY2FyIGVsIGZvb3RlciBsaW5rIChjb24gc3UgYHRva2VuYCkuICovXG4gIHJlYWRvbmx5IGZvb3RlckNsaWNrID0gb3V0cHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9leHBhbmRlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGV4cGFuZGVkID0gdGhpcy5fZXhwYW5kZWQuYXNSZWFkb25seSgpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy5pMThuLmhhc05hbWVzcGFjZSgnRmVhdHVyZXNMaXN0JykpIHtcbiAgICAgIHRoaXMuaTE4bi5yZWdpc3RlckNvbnRlbnQoJ0ZlYXR1cmVzTGlzdCcsIEZFQVRVUkVTX0xJU1RfSTE4Tik7XG4gICAgfVxuICB9XG5cbiAgLyoqIE1lcmdlZCBjb25maWd1cmF0aW9uIHdpdGggZGVmYXVsdHMgKi9cbiAgY29uZmlnID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICAuLi5GRUFUVVJFU19MSVNUX0RFRkFVTFRTLFxuICAgIC4uLnRoaXMucHJvcHMoKSxcbiAgfSkpO1xuXG4gIC8qKiBJdGVtcyB2aXNpYmxlcyBzZWfDum4gZWwgZXN0YWRvIGRlIGNvbGFwc28uICovXG4gIHZpc2libGVGZWF0dXJlcyA9IGNvbXB1dGVkPEZlYXR1cmVJdGVtW10+KCgpID0+IHtcbiAgICBjb25zdCBjZmcgPSB0aGlzLmNvbmZpZygpO1xuICAgIGNvbnN0IGFsbCA9IGNmZy5mZWF0dXJlcyA/PyBbXTtcbiAgICBpZiAoY2ZnLm1heFZpc2libGUgPiAwICYmICF0aGlzLl9leHBhbmRlZCgpICYmIGFsbC5sZW5ndGggPiBjZmcubWF4VmlzaWJsZSkge1xuICAgICAgcmV0dXJuIGFsbC5zbGljZSgwLCBjZmcubWF4VmlzaWJsZSk7XG4gICAgfVxuICAgIHJldHVybiBhbGw7XG4gIH0pO1xuXG4gIC8qKiBTaSBoYXkgaXRlbXMgZGUgc29icmEgcGFyYSBjb2xhcHNhci9leHBhbmRpci4gKi9cbiAgY2FuQ29sbGFwc2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY2ZnID0gdGhpcy5jb25maWcoKTtcbiAgICByZXR1cm4gY2ZnLm1heFZpc2libGUgPiAwICYmIChjZmcuZmVhdHVyZXM/Lmxlbmd0aCA/PyAwKSA+IGNmZy5tYXhWaXNpYmxlO1xuICB9KTtcblxuICBzaG93TW9yZVRleHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICByZXR1cm4gdGhpcy5jb25maWcoKS5zaG93TW9yZUxhYmVsIHx8IHRoaXMuaTE4bi50KCdzaG93TW9yZScsICdGZWF0dXJlc0xpc3QnKTtcbiAgfSk7XG5cbiAgc2hvd0xlc3NUZXh0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnKCkuc2hvd0xlc3NMYWJlbCB8fCB0aGlzLmkxOG4udCgnc2hvd0xlc3MnLCAnRmVhdHVyZXNMaXN0Jyk7XG4gIH0pO1xuXG4gIC8qKiBSZXNvbHZlZCBpY29uIGNvbG9yIChoYW5kbGVzIElvbmljIGNvbG9ycyBhbmQgQ1NTIGNvbG9ycykgKi9cbiAgaWNvbkNvbG9yU3R5bGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29sb3IgPSB0aGlzLmNvbmZpZygpLmljb25Db2xvcjtcbiAgICBpZiAoY29sb3IgJiYgIWNvbG9yLnN0YXJ0c1dpdGgoJyMnKSAmJiAhY29sb3Iuc3RhcnRzV2l0aCgncmdiJykpIHtcbiAgICAgIHJldHVybiBgdmFyKC0taW9uLWNvbG9yLSR7Y29sb3J9KWA7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfSk7XG5cbiAgdG9nZ2xlKCk6IHZvaWQge1xuICAgIHRoaXMuX2V4cGFuZGVkLnNldCghdGhpcy5fZXhwYW5kZWQoKSk7XG4gIH1cblxuICBvbkl0ZW0oZmVhdHVyZTogRmVhdHVyZUl0ZW0pOiB2b2lkIHtcbiAgICBpZiAoZmVhdHVyZS50b2tlbiAhPSBudWxsKSB7XG4gICAgICB0aGlzLml0ZW1DbGljay5lbWl0KGZlYXR1cmUudG9rZW4pO1xuICAgIH1cbiAgfVxuXG4gIG9uRm9vdGVyKGV2ZW50OiBNb3VzZUV2ZW50LCBsaW5rOiBGZWF0dXJlc0xpc3RGb290ZXJMaW5rKTogdm9pZCB7XG4gICAgdGhpcy5mb290ZXJDbGljay5lbWl0KGxpbmsudG9rZW4pO1xuICAgIGlmIChsaW5rLmhyZWYpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLm5hdmlnYXRpb24ub3BlbkluTmV3VGFiKGxpbmsuaHJlZik7XG4gICAgfVxuICB9XG5cbiAgLyoqIEdldCB0cmFuc2xhdGVkIHRpdGxlIG9yIHJldHVybiBkaXJlY3QgdGV4dCAqL1xuICBnZXRUaXRsZShmZWF0dXJlOiBGZWF0dXJlSXRlbSk6IHN0cmluZyB7XG4gICAgY29uc3QgbmFtZXNwYWNlID0gdGhpcy5wcm9wcygpLmkxOG5OYW1lc3BhY2U7XG4gICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICAgIHJldHVybiB0aGlzLmkxOG4udChmZWF0dXJlLnRpdGxlS2V5LCBuYW1lc3BhY2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmVhdHVyZS50aXRsZUtleTtcbiAgfVxuXG4gIC8qKiBHZXQgdHJhbnNsYXRlZCBkZXNjcmlwdGlvbiBvciByZXR1cm4gZGlyZWN0IHRleHQgKi9cbiAgZ2V0RGVzY3JpcHRpb24oZmVhdHVyZTogRmVhdHVyZUl0ZW0pOiBzdHJpbmcge1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMucHJvcHMoKS5pMThuTmFtZXNwYWNlO1xuICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgICByZXR1cm4gdGhpcy5pMThuLnQoZmVhdHVyZS5kZXNjcmlwdGlvbktleSwgbmFtZXNwYWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZlYXR1cmUuZGVzY3JpcHRpb25LZXk7XG4gIH1cbn1cbiJdfQ==
@@ -7,5 +7,7 @@ export const FEATURES_LIST_DEFAULTS = {
7
7
  mode: 'vertical',
8
8
  gap: 'medium',
9
9
  alignment: 'start',
10
+ imageShape: 'square',
11
+ maxVisible: 0,
10
12
  };
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlYXR1cmVzLWxpc3QvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0NBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQXVFO0lBQ3hHLFNBQVMsRUFBRSxTQUFTO0lBQ3BCLFFBQVEsRUFBRSxFQUFFO0lBQ1osSUFBSSxFQUFFLFVBQVU7SUFDaEIsR0FBRyxFQUFFLFFBQVE7SUFDYixTQUFTLEVBQUUsT0FBTztDQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGZWF0dXJlIGl0ZW0gY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZlYXR1cmVJdGVtIHtcbiAgLyoqIElvbmljb24gbmFtZSBvciAnY3VzdG9tJyBmb3IgU1ZHIHBhdGggKi9cbiAgaWNvbjogc3RyaW5nO1xuICAvKiogU1ZHIHBhdGggZGF0YSAob25seSB1c2VkIHdoZW4gaWNvbiBpcyAnY3VzdG9tJykgKi9cbiAgc3ZnUGF0aD86IHN0cmluZztcbiAgLyoqIFRpdGxlIGkxOG4ga2V5IG9yIGRpcmVjdCB0ZXh0ICovXG4gIHRpdGxlS2V5OiBzdHJpbmc7XG4gIC8qKiBEZXNjcmlwdGlvbiBpMThuIGtleSBvciBkaXJlY3QgdGV4dCAqL1xuICBkZXNjcmlwdGlvbktleTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZlYXR1cmVzIGxpc3QgY29tcG9uZW50IGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlc0xpc3RNZXRhZGF0YSB7XG4gIC8qKiBBcnJheSBvZiBmZWF0dXJlcyB0byBkaXNwbGF5ICovXG4gIGZlYXR1cmVzOiBGZWF0dXJlSXRlbVtdO1xuICAvKiogaTE4biBuYW1lc3BhY2UgZm9yIHRyYW5zbGF0aW9ucyAoaWYgdXNpbmcga2V5cykgKi9cbiAgaTE4bk5hbWVzcGFjZT86IHN0cmluZztcbiAgLyoqIEljb24gY29sb3IgKElvbmljIGNvbG9yIG9yIENTUyBjb2xvcikgKi9cbiAgaWNvbkNvbG9yPzogc3RyaW5nO1xuICAvKiogSWNvbiBzaXplIGluIHBpeGVscyAqL1xuICBpY29uU2l6ZT86IG51bWJlcjtcbiAgLyoqIExheW91dCBtb2RlOiAndmVydGljYWwnIHN0YWNrcyBmZWF0dXJlcywgJ2hvcml6b250YWwnIGRpc3BsYXlzIHRoZW0gaW4gYSByb3cgKi9cbiAgbW9kZT86ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCc7XG4gIC8qKiBHYXAgYmV0d2VlbiBmZWF0dXJlcyAqL1xuICBnYXA/OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xuICAvKiogQWxpZ25tZW50IG9mIGZlYXR1cmVzICovXG4gIGFsaWdubWVudD86ICdzdGFydCcgfCAnY2VudGVyJztcbn1cblxuLyoqXG4gKiBEZWZhdWx0IHZhbHVlcyBmb3IgRmVhdHVyZXNMaXN0TWV0YWRhdGFcbiAqL1xuZXhwb3J0IGNvbnN0IEZFQVRVUkVTX0xJU1RfREVGQVVMVFM6IFJlcXVpcmVkPE9taXQ8RmVhdHVyZXNMaXN0TWV0YWRhdGEsICdmZWF0dXJlcycgfCAnaTE4bk5hbWVzcGFjZSc+PiA9IHtcbiAgaWNvbkNvbG9yOiAncHJpbWFyeScsXG4gIGljb25TaXplOiAzMixcbiAgbW9kZTogJ3ZlcnRpY2FsJyxcbiAgZ2FwOiAnbWVkaXVtJyxcbiAgYWxpZ25tZW50OiAnc3RhcnQnLFxufTtcbiJdfQ==
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlYXR1cmVzLWxpc3QvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcUVBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBSy9CO0lBQ0YsU0FBUyxFQUFFLFNBQVM7SUFDcEIsUUFBUSxFQUFFLEVBQUU7SUFDWixJQUFJLEVBQUUsVUFBVTtJQUNoQixHQUFHLEVBQUUsUUFBUTtJQUNiLFNBQVMsRUFBRSxPQUFPO0lBQ2xCLFVBQVUsRUFBRSxRQUFRO0lBQ3BCLFVBQVUsRUFBRSxDQUFDO0NBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmVhdHVyZSBpdGVtIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlSXRlbSB7XG4gIC8qKiBJb25pY29uIG5hbWUgb3IgJ2N1c3RvbScgZm9yIFNWRyBwYXRoLiBPcGNpb25hbCBzaSBzZSB1c2EgYGltYWdlYC4gKi9cbiAgaWNvbj86IHN0cmluZztcbiAgLyoqIFNWRyBwYXRoIGRhdGEgKG9ubHkgdXNlZCB3aGVuIGljb24gaXMgJ2N1c3RvbScpICovXG4gIHN2Z1BhdGg/OiBzdHJpbmc7XG4gIC8qKiBJbWFnZSBVUkwg4oCUIHNpIHNlIHByb3ZlZSwgcmVlbXBsYXphIGFsIGljb25vIChlai4gbG9nb3MgZGUgYXBwcykuICovXG4gIGltYWdlPzogc3RyaW5nO1xuICAvKiogVGl0bGUgaTE4biBrZXkgb3IgZGlyZWN0IHRleHQgKi9cbiAgdGl0bGVLZXk6IHN0cmluZztcbiAgLyoqIERlc2NyaXB0aW9uIGkxOG4ga2V5IG9yIGRpcmVjdCB0ZXh0ICovXG4gIGRlc2NyaXB0aW9uS2V5OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCB0b2tlbiDigJQgZW1pdGlkbyBwb3IgKGl0ZW1DbGljaykgYWwgdG9jYXIgZWwgaXRlbS4gKi9cbiAgdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRm9vdGVyIGxpbmsgLyBDVEEgbW9zdHJhZG8gYWwgcGllIGRlIGxhIGxpc3RhIChlai4gXCJGaW5kIG91dCBtb3JlXCIpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZlYXR1cmVzTGlzdEZvb3Rlckxpbmsge1xuICAvKiogVGV4dG8gZGVsIGxpbmsgKHlhIHJlc3VlbHRvIHBvciBlbCBjb25zdW1lcikuICovXG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8qKiBSdXRhIEFuZ3VsYXIgaW50ZXJuYS4gKi9cbiAgcm91dGVyTGluaz86IHN0cmluZyB8IGFueVtdO1xuICAvKiogVVJMIGV4dGVybmEgKGFicmUgZW4gbnVldmEgcGVzdGHDsWEpLiAqL1xuICBocmVmPzogc3RyaW5nO1xuICAvKiogVG9rZW4gZW1pdGlkbyBwb3IgKGZvb3RlckNsaWNrKS4gKi9cbiAgdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmVhdHVyZXMgbGlzdCBjb21wb25lbnQgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZlYXR1cmVzTGlzdE1ldGFkYXRhIHtcbiAgLyoqIEFycmF5IG9mIGZlYXR1cmVzIHRvIGRpc3BsYXkgKi9cbiAgZmVhdHVyZXM6IEZlYXR1cmVJdGVtW107XG4gIC8qKiBpMThuIG5hbWVzcGFjZSBmb3IgdHJhbnNsYXRpb25zIChpZiB1c2luZyBrZXlzKSAqL1xuICBpMThuTmFtZXNwYWNlPzogc3RyaW5nO1xuICAvKiogSWNvbiBjb2xvciAoSW9uaWMgY29sb3Igb3IgQ1NTIGNvbG9yKSAqL1xuICBpY29uQ29sb3I/OiBzdHJpbmc7XG4gIC8qKiBJY29uIHNpemUgaW4gcGl4ZWxzICovXG4gIGljb25TaXplPzogbnVtYmVyO1xuICAvKiogTGF5b3V0IG1vZGU6ICd2ZXJ0aWNhbCcgc3RhY2tzIGZlYXR1cmVzLCAnaG9yaXpvbnRhbCcgZGlzcGxheXMgdGhlbSBpbiBhIHJvdyAqL1xuICBtb2RlPzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJztcbiAgLyoqIEdhcCBiZXR3ZWVuIGZlYXR1cmVzICovXG4gIGdhcD86ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZSc7XG4gIC8qKiBBbGlnbm1lbnQgb2YgZmVhdHVyZXMgKi9cbiAgYWxpZ25tZW50PzogJ3N0YXJ0JyB8ICdjZW50ZXInO1xuICAvKiogRm9ybWEgZGUgbGEgaW1hZ2VuIGRlbCBpdGVtIChjdWFuZG8gYGZlYXR1cmUuaW1hZ2VgKS4gRGVmYXVsdCAnc3F1YXJlJy4gKi9cbiAgaW1hZ2VTaGFwZT86ICdzcXVhcmUnIHwgJ2NpcmNsZSc7XG5cbiAgLy8gPT09IFwiVmVyIG3DoXNcIiAoY29sYXBzbykgPT09XG4gIC8qKlxuICAgKiBNw6F4aW1vIGRlIGl0ZW1zIHZpc2libGVzIGFudGVzIGRlIGNvbGFwc2FyLiBTaSBgZmVhdHVyZXMubGVuZ3RoYCBzdXBlcmFcbiAgICogZXN0ZSBuw7ptZXJvLCBzZSBtdWVzdHJhbiBsb3MgcHJpbWVyb3MgYG1heFZpc2libGVgICsgdW4gYm90w7NuIFwidmVyIG3DoXNcIi5cbiAgICogYDBgIChkZWZhdWx0KSA9IHNpbiBjb2xhcHNvLCBtdWVzdHJhIHRvZG9zLlxuICAgKi9cbiAgbWF4VmlzaWJsZT86IG51bWJlcjtcbiAgLyoqIExhYmVsIGRlbCBib3TDs24gZXhwYW5kaXIuIERlZmF1bHQ6IGkxOG4gYEZlYXR1cmVzTGlzdC5zaG93TW9yZWAuICovXG4gIHNob3dNb3JlTGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBMYWJlbCBkZWwgYm90w7NuIGNvbnRyYWVyLiBEZWZhdWx0OiBpMThuIGBGZWF0dXJlc0xpc3Quc2hvd0xlc3NgLiAqL1xuICBzaG93TGVzc0xhYmVsPzogc3RyaW5nO1xuXG4gIC8qKiBMaW5rL0NUQSBhbCBwaWUgZGUgbGEgbGlzdGEgKGVqLiBcIkZpbmQgb3V0IG1vcmVcIikuICovXG4gIGZvb3Rlckxpbms/OiBGZWF0dXJlc0xpc3RGb290ZXJMaW5rO1xufVxuXG4vKipcbiAqIERlZmF1bHQgdmFsdWVzIGZvciBGZWF0dXJlc0xpc3RNZXRhZGF0YVxuICovXG5leHBvcnQgY29uc3QgRkVBVFVSRVNfTElTVF9ERUZBVUxUUzogUmVxdWlyZWQ8XG4gIFBpY2s8XG4gICAgRmVhdHVyZXNMaXN0TWV0YWRhdGEsXG4gICAgJ2ljb25Db2xvcicgfCAnaWNvblNpemUnIHwgJ21vZGUnIHwgJ2dhcCcgfCAnYWxpZ25tZW50JyB8ICdpbWFnZVNoYXBlJyB8ICdtYXhWaXNpYmxlJ1xuICA+XG4+ID0ge1xuICBpY29uQ29sb3I6ICdwcmltYXJ5JyxcbiAgaWNvblNpemU6IDMyLFxuICBtb2RlOiAndmVydGljYWwnLFxuICBnYXA6ICdtZWRpdW0nLFxuICBhbGlnbm1lbnQ6ICdzdGFydCcsXG4gIGltYWdlU2hhcGU6ICdzcXVhcmUnLFxuICBtYXhWaXNpYmxlOiAwLFxufTtcbiJdfQ==
@@ -2,7 +2,7 @@ import Compressor from 'compressorjs';
2
2
  import { Component, computed, inject, input, output, signal } from '@angular/core';
3
3
  import { IonButton, IonIcon, IonNote, IonSpinner } from '@ionic/angular/standalone';
4
4
  import { addIcons } from 'ionicons';
5
- import { attachOutline, cameraOutline, checkmarkCircleOutline, closeCircleOutline, documentOutline, imageOutline, trashOutline, } from 'ionicons/icons';
5
+ import { attachOutline, cameraOutline, checkmarkCircleOutline, closeCircleOutline, closeOutline, documentOutline, imageOutline, } from 'ionicons/icons';
6
6
  import { FeedbackService } from '../../../services/feedback';
7
7
  import { I18nService } from '../../../services/i18n';
8
8
  import * as i0 from "@angular/core";
@@ -28,9 +28,9 @@ export class AttachmentUploaderComponent {
28
28
  cameraOutline,
29
29
  checkmarkCircleOutline,
30
30
  closeCircleOutline,
31
+ closeOutline,
31
32
  documentOutline,
32
33
  imageOutline,
33
- trashOutline,
34
34
  });
35
35
  }
36
36
  async onFilesSelected(event) {
@@ -88,10 +88,10 @@ export class AttachmentUploaderComponent {
88
88
  return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
89
89
  }
90
90
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AttachmentUploaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
91
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AttachmentUploaderComponent, isStandalone: true, selector: "val-attachment-uploader", inputs: { props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { attachmentsChange: "attachmentsChange" }, ngImport: i0, template: "<div class=\"attachment-uploader\">\n <input #filePicker type=\"file\" [accept]=\"accept()\" multiple class=\"hidden-input\" (change)=\"onFilesSelected($event)\" />\n\n <div class=\"attachment-actions\">\n <ion-button fill=\"outline\" size=\"small\" [disabled]=\"isDisabled()\" (click)=\"filePicker.click()\">\n <ion-icon slot=\"start\" name=\"attach-outline\"></ion-icon>\n {{ i18n.t('attachAdd') }}\n </ion-button>\n <!-- label trick: native browser gesture forwarding \u2192 iOS/PWA no bloquea el picker -->\n <label class=\"camera-label\" [class.camera-label--disabled]=\"isDisabled()\">\n <input\n type=\"file\"\n accept=\"image/*\"\n capture=\"environment\"\n class=\"hidden-input\"\n [disabled]=\"isDisabled()\"\n (change)=\"onFilesSelected($event)\"\n />\n <ion-icon name=\"camera-outline\"></ion-icon>\n {{ i18n.t('attachCamera') }}\n </label>\n </div>\n\n @if (maxReached()) {\n <ion-note color=\"warning\" class=\"max-note\">\n {{ i18n.t('attachMaxCount', '_global', { count: maxFiles().toString() }) }}\n </ion-note>\n } @if (attachments().length > 0) {\n <div class=\"attachment-list\">\n @for (item of attachments(); track item.id) {\n <div class=\"attachment-item\" [class]=\"'status-' + item.status\">\n <ion-icon\n class=\"file-icon\"\n [name]=\"item.file.type.startsWith('image/') ? 'image-outline' : 'document-outline'\"\n ></ion-icon>\n <div class=\"file-info\">\n <span class=\"file-name\">{{ item.file.name }}</span>\n <span class=\"file-size\">{{ formatSize(item.file.size) }}</span>\n </div>\n\n @if (item.status === 'uploading') {\n <ion-spinner class=\"status-icon\" name=\"circular\"></ion-spinner>\n } @else if (item.status === 'ready') {\n <ion-icon class=\"status-icon\" name=\"checkmark-circle-outline\" color=\"success\"></ion-icon>\n } @else if (item.status === 'error') {\n <ion-icon class=\"status-icon\" name=\"close-circle-outline\" color=\"danger\"></ion-icon>\n } @if (item.status !== 'uploading') {\n <ion-button fill=\"clear\" size=\"small\" color=\"medium\" (click)=\"remove(item.id)\">\n <ion-icon slot=\"icon-only\" name=\"trash-outline\"></ion-icon>\n </ion-button>\n } @if (item.status === 'error' && item.error) {\n <ion-note color=\"danger\" class=\"error-note\">{{ item.error }}</ion-note>\n }\n </div>\n }\n </div>\n }\n</div>\n", styles: [".hidden-input{display:none}.camera-label{display:inline-flex;align-items:center;gap:6px;padding:0 12px;height:32px;font-size:14px;font-weight:500;border-radius:4px;border:1px solid currentColor;color:var(--ion-color-dark);background:transparent;cursor:pointer;-webkit-user-select:none;user-select:none;transition:opacity .15s}.camera-label ion-icon{font-size:16px;flex-shrink:0}.camera-label--disabled{opacity:.4;pointer-events:none}.attachment-uploader{display:flex;flex-direction:column;gap:8px}.attachment-actions{display:flex;gap:8px;flex-wrap:wrap}.attachment-list{display:flex;flex-direction:column;gap:4px}.attachment-item{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:8px;background:var(--ion-color-light);flex-wrap:wrap}.attachment-item.status-error{background:var(--ion-color-danger-tint)}.attachment-item.status-ready{background:var(--ion-color-success-tint)}.file-icon{font-size:20px;flex-shrink:0}.file-info{flex:1;min-width:0;display:flex;flex-direction:column}.file-name{font-size:14px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-size{font-size:12px;color:var(--ion-color-medium)}.status-icon{font-size:20px;flex-shrink:0}.error-note{font-size:11px;width:100%}.max-note{font-size:12px}\n"], dependencies: [{ 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: IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }] }); }
91
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AttachmentUploaderComponent, isStandalone: true, selector: "val-attachment-uploader", inputs: { props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { attachmentsChange: "attachmentsChange" }, ngImport: i0, template: "<div class=\"attachment-uploader\">\n <input #filePicker type=\"file\" [accept]=\"accept()\" multiple class=\"hidden-input\" (change)=\"onFilesSelected($event)\" />\n\n <div class=\"attachment-actions\">\n <ion-button fill=\"outline\" color=\"dark\" size=\"small\" [disabled]=\"isDisabled()\" (click)=\"filePicker.click()\">\n <ion-icon slot=\"start\" name=\"attach-outline\"></ion-icon>\n {{ i18n.t('attachAdd') }}\n </ion-button>\n <!-- label trick: native browser gesture forwarding \u2192 iOS/PWA no bloquea el picker -->\n <label class=\"camera-label\" [class.camera-label--disabled]=\"isDisabled()\">\n <input\n type=\"file\"\n accept=\"image/*\"\n capture=\"environment\"\n class=\"hidden-input\"\n [disabled]=\"isDisabled()\"\n (change)=\"onFilesSelected($event)\"\n />\n <ion-icon name=\"camera-outline\"></ion-icon>\n {{ i18n.t('attachCamera') }}\n </label>\n </div>\n\n @if (maxReached()) {\n <ion-note color=\"warning\" class=\"max-note\">\n {{ i18n.t('attachMaxCount', '_global', { count: maxFiles().toString() }) }}\n </ion-note>\n } @if (attachments().length > 0) {\n <div class=\"attachment-list\">\n @for (item of attachments(); track item.id) {\n <div class=\"attachment-item\" [class]=\"'status-' + item.status\">\n <ion-icon\n class=\"file-icon\"\n [name]=\"item.file.type.startsWith('image/') ? 'image-outline' : 'document-outline'\"\n ></ion-icon>\n <div class=\"file-info\">\n <span class=\"file-name\">{{ item.file.name }}</span>\n <span class=\"file-size\">{{ formatSize(item.file.size) }}</span>\n </div>\n\n @if (item.status === 'uploading') {\n <ion-spinner class=\"status-icon\" name=\"circular\"></ion-spinner>\n } @else if (item.status === 'ready') {\n <ion-icon class=\"status-icon\" name=\"checkmark-circle-outline\" color=\"success\"></ion-icon>\n } @else if (item.status === 'error') {\n <ion-icon class=\"status-icon\" name=\"close-circle-outline\" color=\"danger\"></ion-icon>\n } @if (item.status !== 'uploading') {\n <ion-button fill=\"clear\" size=\"small\" color=\"dark\" (click)=\"remove(item.id)\">\n <ion-icon slot=\"icon-only\" name=\"close-outline\"></ion-icon>\n </ion-button>\n } @if (item.status === 'error' && item.error) {\n <ion-note color=\"danger\" class=\"error-note\">{{ item.error }}</ion-note>\n }\n </div>\n }\n </div>\n }\n</div>\n", styles: [".hidden-input{display:none}.camera-label{display:inline-flex;align-items:center;gap:6px;padding:0 12px;height:32px;font-size:14px;font-weight:500;border-radius:4px;border:1px solid currentColor;color:var(--ion-color-dark);background:transparent;cursor:pointer;-webkit-user-select:none;user-select:none;transition:opacity .15s}.camera-label ion-icon{font-size:16px;flex-shrink:0}.camera-label--disabled{opacity:.4;pointer-events:none}.attachment-uploader{display:flex;flex-direction:column;gap:8px}.attachment-actions{display:flex;gap:8px;flex-wrap:wrap}.attachment-list{display:flex;flex-direction:column;gap:4px}.attachment-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;background:var(--ion-background-color, #fff);border:1px solid var(--ion-color-light-shade, rgba(0, 0, 0, .08));flex-wrap:wrap}.attachment-item.status-error{border-color:var(--ion-color-danger)}.file-icon{font-size:22px;color:var(--ion-text-color);flex-shrink:0}.file-info{flex:1;min-width:0;display:flex;flex-direction:column}.file-name{font-size:13px;color:var(--ion-text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-size{font-size:11px;color:var(--ion-color-medium)}:host-context(.dark) .attachment-item,:host-context(.ion-palette-dark) .attachment-item,:host-context(html.ion-palette-dark) .attachment-item,:host-context(body.dark) .attachment-item,:host-context([data-theme=dark]) .attachment-item{background:#ffffff0a;border-color:#ffffff1f}:host-context(.dark) .attachment-item.status-error,:host-context(.ion-palette-dark) .attachment-item.status-error,:host-context(html.ion-palette-dark) .attachment-item.status-error,:host-context(body.dark) .attachment-item.status-error,:host-context([data-theme=dark]) .attachment-item.status-error{border-color:var(--ion-color-danger)}.status-icon{font-size:20px;flex-shrink:0}.error-note{font-size:11px;width:100%}.max-note{font-size:12px}\n"], dependencies: [{ 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: IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }] }); }
92
92
  }
93
93
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AttachmentUploaderComponent, decorators: [{
94
94
  type: Component,
95
- args: [{ selector: 'val-attachment-uploader', standalone: true, imports: [IonButton, IonIcon, IonNote, IonSpinner], template: "<div class=\"attachment-uploader\">\n <input #filePicker type=\"file\" [accept]=\"accept()\" multiple class=\"hidden-input\" (change)=\"onFilesSelected($event)\" />\n\n <div class=\"attachment-actions\">\n <ion-button fill=\"outline\" size=\"small\" [disabled]=\"isDisabled()\" (click)=\"filePicker.click()\">\n <ion-icon slot=\"start\" name=\"attach-outline\"></ion-icon>\n {{ i18n.t('attachAdd') }}\n </ion-button>\n <!-- label trick: native browser gesture forwarding \u2192 iOS/PWA no bloquea el picker -->\n <label class=\"camera-label\" [class.camera-label--disabled]=\"isDisabled()\">\n <input\n type=\"file\"\n accept=\"image/*\"\n capture=\"environment\"\n class=\"hidden-input\"\n [disabled]=\"isDisabled()\"\n (change)=\"onFilesSelected($event)\"\n />\n <ion-icon name=\"camera-outline\"></ion-icon>\n {{ i18n.t('attachCamera') }}\n </label>\n </div>\n\n @if (maxReached()) {\n <ion-note color=\"warning\" class=\"max-note\">\n {{ i18n.t('attachMaxCount', '_global', { count: maxFiles().toString() }) }}\n </ion-note>\n } @if (attachments().length > 0) {\n <div class=\"attachment-list\">\n @for (item of attachments(); track item.id) {\n <div class=\"attachment-item\" [class]=\"'status-' + item.status\">\n <ion-icon\n class=\"file-icon\"\n [name]=\"item.file.type.startsWith('image/') ? 'image-outline' : 'document-outline'\"\n ></ion-icon>\n <div class=\"file-info\">\n <span class=\"file-name\">{{ item.file.name }}</span>\n <span class=\"file-size\">{{ formatSize(item.file.size) }}</span>\n </div>\n\n @if (item.status === 'uploading') {\n <ion-spinner class=\"status-icon\" name=\"circular\"></ion-spinner>\n } @else if (item.status === 'ready') {\n <ion-icon class=\"status-icon\" name=\"checkmark-circle-outline\" color=\"success\"></ion-icon>\n } @else if (item.status === 'error') {\n <ion-icon class=\"status-icon\" name=\"close-circle-outline\" color=\"danger\"></ion-icon>\n } @if (item.status !== 'uploading') {\n <ion-button fill=\"clear\" size=\"small\" color=\"medium\" (click)=\"remove(item.id)\">\n <ion-icon slot=\"icon-only\" name=\"trash-outline\"></ion-icon>\n </ion-button>\n } @if (item.status === 'error' && item.error) {\n <ion-note color=\"danger\" class=\"error-note\">{{ item.error }}</ion-note>\n }\n </div>\n }\n </div>\n }\n</div>\n", styles: [".hidden-input{display:none}.camera-label{display:inline-flex;align-items:center;gap:6px;padding:0 12px;height:32px;font-size:14px;font-weight:500;border-radius:4px;border:1px solid currentColor;color:var(--ion-color-dark);background:transparent;cursor:pointer;-webkit-user-select:none;user-select:none;transition:opacity .15s}.camera-label ion-icon{font-size:16px;flex-shrink:0}.camera-label--disabled{opacity:.4;pointer-events:none}.attachment-uploader{display:flex;flex-direction:column;gap:8px}.attachment-actions{display:flex;gap:8px;flex-wrap:wrap}.attachment-list{display:flex;flex-direction:column;gap:4px}.attachment-item{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:8px;background:var(--ion-color-light);flex-wrap:wrap}.attachment-item.status-error{background:var(--ion-color-danger-tint)}.attachment-item.status-ready{background:var(--ion-color-success-tint)}.file-icon{font-size:20px;flex-shrink:0}.file-info{flex:1;min-width:0;display:flex;flex-direction:column}.file-name{font-size:14px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-size{font-size:12px;color:var(--ion-color-medium)}.status-icon{font-size:20px;flex-shrink:0}.error-note{font-size:11px;width:100%}.max-note{font-size:12px}\n"] }]
95
+ args: [{ selector: 'val-attachment-uploader', standalone: true, imports: [IonButton, IonIcon, IonNote, IonSpinner], template: "<div class=\"attachment-uploader\">\n <input #filePicker type=\"file\" [accept]=\"accept()\" multiple class=\"hidden-input\" (change)=\"onFilesSelected($event)\" />\n\n <div class=\"attachment-actions\">\n <ion-button fill=\"outline\" color=\"dark\" size=\"small\" [disabled]=\"isDisabled()\" (click)=\"filePicker.click()\">\n <ion-icon slot=\"start\" name=\"attach-outline\"></ion-icon>\n {{ i18n.t('attachAdd') }}\n </ion-button>\n <!-- label trick: native browser gesture forwarding \u2192 iOS/PWA no bloquea el picker -->\n <label class=\"camera-label\" [class.camera-label--disabled]=\"isDisabled()\">\n <input\n type=\"file\"\n accept=\"image/*\"\n capture=\"environment\"\n class=\"hidden-input\"\n [disabled]=\"isDisabled()\"\n (change)=\"onFilesSelected($event)\"\n />\n <ion-icon name=\"camera-outline\"></ion-icon>\n {{ i18n.t('attachCamera') }}\n </label>\n </div>\n\n @if (maxReached()) {\n <ion-note color=\"warning\" class=\"max-note\">\n {{ i18n.t('attachMaxCount', '_global', { count: maxFiles().toString() }) }}\n </ion-note>\n } @if (attachments().length > 0) {\n <div class=\"attachment-list\">\n @for (item of attachments(); track item.id) {\n <div class=\"attachment-item\" [class]=\"'status-' + item.status\">\n <ion-icon\n class=\"file-icon\"\n [name]=\"item.file.type.startsWith('image/') ? 'image-outline' : 'document-outline'\"\n ></ion-icon>\n <div class=\"file-info\">\n <span class=\"file-name\">{{ item.file.name }}</span>\n <span class=\"file-size\">{{ formatSize(item.file.size) }}</span>\n </div>\n\n @if (item.status === 'uploading') {\n <ion-spinner class=\"status-icon\" name=\"circular\"></ion-spinner>\n } @else if (item.status === 'ready') {\n <ion-icon class=\"status-icon\" name=\"checkmark-circle-outline\" color=\"success\"></ion-icon>\n } @else if (item.status === 'error') {\n <ion-icon class=\"status-icon\" name=\"close-circle-outline\" color=\"danger\"></ion-icon>\n } @if (item.status !== 'uploading') {\n <ion-button fill=\"clear\" size=\"small\" color=\"dark\" (click)=\"remove(item.id)\">\n <ion-icon slot=\"icon-only\" name=\"close-outline\"></ion-icon>\n </ion-button>\n } @if (item.status === 'error' && item.error) {\n <ion-note color=\"danger\" class=\"error-note\">{{ item.error }}</ion-note>\n }\n </div>\n }\n </div>\n }\n</div>\n", styles: [".hidden-input{display:none}.camera-label{display:inline-flex;align-items:center;gap:6px;padding:0 12px;height:32px;font-size:14px;font-weight:500;border-radius:4px;border:1px solid currentColor;color:var(--ion-color-dark);background:transparent;cursor:pointer;-webkit-user-select:none;user-select:none;transition:opacity .15s}.camera-label ion-icon{font-size:16px;flex-shrink:0}.camera-label--disabled{opacity:.4;pointer-events:none}.attachment-uploader{display:flex;flex-direction:column;gap:8px}.attachment-actions{display:flex;gap:8px;flex-wrap:wrap}.attachment-list{display:flex;flex-direction:column;gap:4px}.attachment-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;background:var(--ion-background-color, #fff);border:1px solid var(--ion-color-light-shade, rgba(0, 0, 0, .08));flex-wrap:wrap}.attachment-item.status-error{border-color:var(--ion-color-danger)}.file-icon{font-size:22px;color:var(--ion-text-color);flex-shrink:0}.file-info{flex:1;min-width:0;display:flex;flex-direction:column}.file-name{font-size:13px;color:var(--ion-text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-size{font-size:11px;color:var(--ion-color-medium)}:host-context(.dark) .attachment-item,:host-context(.ion-palette-dark) .attachment-item,:host-context(html.ion-palette-dark) .attachment-item,:host-context(body.dark) .attachment-item,:host-context([data-theme=dark]) .attachment-item{background:#ffffff0a;border-color:#ffffff1f}:host-context(.dark) .attachment-item.status-error,:host-context(.ion-palette-dark) .attachment-item.status-error,:host-context(html.ion-palette-dark) .attachment-item.status-error,:host-context(body.dark) .attachment-item.status-error,:host-context([data-theme=dark]) .attachment-item.status-error{border-color:var(--ion-color-danger)}.status-icon{font-size:20px;flex-shrink:0}.error-note{font-size:11px;width:100%}.max-note{font-size:12px}\n"] }]
96
96
  }], ctorParameters: () => [] });
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC11cGxvYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2F0dGFjaG1lbnQtdXBsb2FkZXIvYXR0YWNobWVudC11cGxvYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2F0dGFjaG1lbnQtdXBsb2FkZXIvYXR0YWNobWVudC11cGxvYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFVBQVUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxhQUFhLEVBQ2IsYUFBYSxFQUNiLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLFlBQVksRUFDWixZQUFZLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQVVyRCxNQUFNLE9BQU8sMkJBQTJCO0lBZ0J0QyxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUU7YUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUM7YUFDakMsR0FBRyxDQUFD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QUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNqRSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNwRCxDQUFDOytHQXZGVSwyQkFBMkI7bUdBQTNCLDJCQUEyQiw0UUN4QnhDLDI4RUEwREEseXlDRHRDWSxTQUFTLG9QQUFFLE9BQU8sMkpBQUUsT0FBTyxnRkFBRSxVQUFVOzs0RkFJdEMsMkJBQTJCO2tCQVB2QyxTQUFTOytCQUNFLHlCQUF5QixjQUN2QixJQUFJLFdBQ1AsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29tcHJlc3NvciBmcm9tICdjb21wcmVzc29yanMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvbkJ1dHRvbiwgSW9uSWNvbiwgSW9uTm90ZSwgSW9uU3Bpbm5lciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQge1xuICBhdHRhY2hPdXRsaW5lLFxuICBjYW1lcmFPdXRsaW5lLFxuICBjaGVja21hcmtDaXJjbGVPdXRsaW5lLFxuICBjbG9zZUNpcmNsZU91dGxpbmUsXG4gIGRvY3VtZW50T3V0bGluZSxcbiAgaW1hZ2VPdXRsaW5lLFxuICB0cmFzaE91dGxpbmUsXG59IGZyb20gJ2lvbmljb25zL2ljb25zJztcbmltcG9ydCB7IEZlZWRiYWNrU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZlZWRiYWNrJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBBdHRhY2htZW50SXRlbSwgQXR0YWNobWVudFVwbG9hZGVyTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWF0dGFjaG1lbnQtdXBsb2FkZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbSW9uQnV0dG9uLCBJb25JY29uLCBJb25Ob3RlLCBJb25TcGlubmVyXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2F0dGFjaG1lbnQtdXBsb2FkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vYXR0YWNobWVudC11cGxvYWRlci5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIEF0dGFjaG1lbnRVcGxvYWRlckNvbXBvbmVudCB7XG4gIHByb3BzID0gaW5wdXQ8QXR0YWNobWVudFVwbG9hZGVyTWV0YWRhdGE+KHt9KTtcblxuICBhdHRhY2htZW50c0NoYW5nZSA9IG91dHB1dDxBdHRhY2htZW50SXRlbVtdPigpO1xuXG4gIHByb3RlY3RlZCBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBmZWVkYmFja1NlcnZpY2UgPSBpbmplY3QoRmVlZGJhY2tTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIGF0dGFjaG1lbnRzID0gc2lnbmFsPEF0dGFjaG1lbnRJdGVtW10+KFtdKTtcblxuICBtYXhGaWxlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMucHJvcHMoKS5tYXhGaWxlcyA/PyA1KTtcbiAgYWNjZXB0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wcm9wcygpLmFjY2VwdCA/PyAnaW1hZ2UvanBlZyxpbWFnZS9wbmcsaW1hZ2Uvd2VicCxhcHBsaWNhdGlvbi9wZGYnKTtcbiAgbWF4UmVhY2hlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYXR0YWNobWVudHMoKS5sZW5ndGggPj0gdGhpcy5tYXhGaWxlcygpKTtcbiAgaXNEaXNhYmxlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucHJvcHMoKS5kaXNhYmxlZCA9PT0gdHJ1ZSB8fCB0aGlzLm1heFJlYWNoZWQoKSk7XG4gIGlzVXBsb2FkaW5nID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hdHRhY2htZW50cygpLnNvbWUoYSA9PiBhLnN0YXR1cyA9PT0gJ3VwbG9hZGluZycpKTtcblxuICBnZXQgcmVhZHlVcmxzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5hdHRhY2htZW50cygpXG4gICAgICAuZmlsdGVyKGEgPT4gYS5zdGF0dXMgPT09ICdyZWFkeScpXG4gICAgICAubWFwKGEgPT4gYS51cmwhKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGFkZEljb25zKHtcbiAgICAgIGF0dGFjaE91dGxpbmUsXG4gICAgICBjYW1lcmFPdXRsaW5lLFxuICAgICAgY2hlY2ttYXJrQ2lyY2xlT3V0bGluZSxcbiAgICAgIGNsb3NlQ2lyY2xlT3V0bGluZSxcbiAgICAgIGRvY3VtZW50T3V0bGluZSxcbiAgICAgIGltYWdlT3V0bGluZSxcbiAgICAgIHRyYXNoT3V0bGluZSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uRmlsZXNTZWxlY3RlZChldmVudDogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IGZpbGVzID0gQXJyYXkuZnJvbShpbnB1dC5maWxlcyA/PyBbXSk7XG4gICAgaW5wdXQudmFsdWUgPSAnJztcbiAgICBjb25zdCBhdmFpbGFibGUgPSB0aGlzLm1heEZpbGVzKCkgLSB0aGlzLmF0dGFjaG1lbnRzKCkubGVuZ3RoO1xuICAgIGNvbnN0IHRvUHJvY2VzcyA9IGZpbGVzLnNsaWNlKDAsIGF2YWlsYWJsZSk7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIHRvUHJvY2Vzcykge1xuICAgICAgY29uc3QgaWQgPSBjcnlwdG8ucmFuZG9tVVVJRCgpO1xuICAgICAgdGhpcy5hdHRhY2htZW50cy51cGRhdGUobGlzdCA9PiBbLi4ubGlzdCwgeyBpZCwgZmlsZSwgc3RhdHVzOiAndXBsb2FkaW5nJyB9XSk7XG4gICAgICB0aGlzLmF0dGFjaG1lbnRzQ2hhbmdlLmVtaXQodGhpcy5hdHRhY2htZW50cygpKTtcbiAgICAgIHRoaXMudXBsb2FkRmlsZShpZCwgZmlsZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb21wcmVzc0ltYWdlKGZpbGU6IEZpbGUpOiBQcm9taXNlPEZpbGU+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbmV3IENvbXByZXNzb3IoZmlsZSwge1xuICAgICAgICBxdWFsaXR5OiAwLjgsXG4gICAgICAgIG1heFdpZHRoOiAxOTIwLFxuICAgICAgICBtYXhIZWlnaHQ6IDE5MjAsXG4gICAgICAgIGNvbnZlcnRTaXplOiAyICogMTAyNCAqIDEwMjQsIC8vIFBORyA+IDIgTUIg4oaSIEpQRUdcbiAgICAgICAgc3VjY2VzcyhyZXN1bHQpIHtcbiAgICAgICAgICByZXNvbHZlKG5ldyBGaWxlKFtyZXN1bHRdLCBmaWxlLm5hbWUsIHsgdHlwZTogcmVzdWx0LnR5cGUgfSkpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwbG9hZEZpbGUoaWQ6IHN0cmluZywgZmlsZTogRmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzaG91bGRDb21wcmVzcyA9IHRoaXMucHJvcHMoKS5jb21wcmVzc0ltYWdlcyAhPT0gZmFsc2UgJiYgZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpO1xuICAgICAgY29uc3QgZmlsZVRvVXBsb2FkID0gc2hvdWxkQ29tcHJlc3MgPyBhd2FpdCB0aGlzLmNvbXByZXNzSW1hZ2UoZmlsZSkgOiBmaWxlO1xuICAgICAgY29uc3QgdXBsb2FkRm4gPSB0aGlzLnByb3BzKCkudXBsb2FkRm4gPz8gdGhpcy5mZWVkYmFja1NlcnZpY2U/LnVwbG9hZEF0dGFjaG1lbnQuYmluZCh0aGlzLmZlZWRiYWNrU2VydmljZSk7XG4gICAgICBpZiAoIXVwbG9hZEZuKSB0aHJvdyBuZXcgRXJyb3IoJ05vIHVwbG9hZCBmdW5jdGlvbiBjb25maWd1cmVkJyk7XG4gICAgICBjb25zdCB1cmwgPSBhd2FpdCB1cGxvYWRGbihmaWxlVG9VcGxvYWQpO1xuICAgICAgdGhpcy5hdHRhY2htZW50cy51cGRhdGUobGlzdCA9PiBsaXN0Lm1hcChhID0+IChhLmlkID09PSBpZCA/IHsgLi4uYSwgc3RhdHVzOiAncmVhZHknLCB1cmwgfSA6IGEpKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuaTE4bi50KCdhdHRhY2hVcGxvYWRGYWlsZWQnKTtcbiAgICAgIHRoaXMuYXR0YWNobWVudHMudXBkYXRlKGxpc3QgPT4gbGlzdC5tYXAoYSA9PiAoYS5pZCA9PT0gaWQgPyB7IC4uLmEsIHN0YXR1czogJ2Vycm9yJywgZXJyb3IgfSA6IGEpKSk7XG4gICAgfVxuICAgIHRoaXMuYXR0YWNobWVudHNDaGFuZ2UuZW1pdCh0aGlzLmF0dGFjaG1lbnRzKCkpO1xuICB9XG5cbiAgcmVtb3ZlKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmF0dGFjaG1lbnRzLnVwZGF0ZShsaXN0ID0+IGxpc3QuZmlsdGVyKGEgPT4gYS5pZCAhPT0gaWQpKTtcbiAgICB0aGlzLmF0dGFjaG1lbnRzQ2hhbmdlLmVtaXQodGhpcy5hdHRhY2htZW50cygpKTtcbiAgfVxuXG4gIGZvcm1hdFNpemUoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGJ5dGVzIDwgMTAyNCkgcmV0dXJuIGAke2J5dGVzfSBCYDtcbiAgICBpZiAoYnl0ZXMgPCAxMDI0ICogMTAyNCkgcmV0dXJuIGAke01hdGgucm91bmQoYnl0ZXMgLyAxMDI0KX0gS0JgO1xuICAgIHJldHVybiBgJHsoYnl0ZXMgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDEpfSBNQmA7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhdHRhY2htZW50LXVwbG9hZGVyXCI+XG4gIDxpbnB1dCAjZmlsZVBpY2tlciB0eXBlPVwiZmlsZVwiIFthY2NlcHRdPVwiYWNjZXB0KClcIiBtdWx0aXBsZSBjbGFzcz1cImhpZGRlbi1pbnB1dFwiIChjaGFuZ2UpPVwib25GaWxlc1NlbGVjdGVkKCRldmVudClcIiAvPlxuXG4gIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50LWFjdGlvbnNcIj5cbiAgICA8aW9uLWJ1dHRvbiBmaWxsPVwib3V0bGluZVwiIHNpemU9XCJzbWFsbFwiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKClcIiAoY2xpY2spPVwiZmlsZVBpY2tlci5jbGljaygpXCI+XG4gICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgbmFtZT1cImF0dGFjaC1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgIHt7IGkxOG4udCgnYXR0YWNoQWRkJykgfX1cbiAgICA8L2lvbi1idXR0b24+XG4gICAgPCEtLSBsYWJlbCB0cmljazogbmF0aXZlIGJyb3dzZXIgZ2VzdHVyZSBmb3J3YXJkaW5nIOKGkiBpT1MvUFdBIG5vIGJsb3F1ZWEgZWwgcGlja2VyIC0tPlxuICAgIDxsYWJlbCBjbGFzcz1cImNhbWVyYS1sYWJlbFwiIFtjbGFzcy5jYW1lcmEtbGFiZWwtLWRpc2FibGVkXT1cImlzRGlzYWJsZWQoKVwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgIGNhcHR1cmU9XCJlbnZpcm9ubWVudFwiXG4gICAgICAgIGNsYXNzPVwiaGlkZGVuLWlucHV0XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQoKVwiXG4gICAgICAgIChjaGFuZ2UpPVwib25GaWxlc1NlbGVjdGVkKCRldmVudClcIlxuICAgICAgLz5cbiAgICAgIDxpb24taWNvbiBuYW1lPVwiY2FtZXJhLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAge3sgaTE4bi50KCdhdHRhY2hDYW1lcmEnKSB9fVxuICAgIDwvbGFiZWw+XG4gIDwvZGl2PlxuXG4gIEBpZiAobWF4UmVhY2hlZCgpKSB7XG4gIDxpb24tbm90ZSBjb2xvcj1cIndhcm5pbmdcIiBjbGFzcz1cIm1heC1ub3RlXCI+XG4gICAge3sgaTE4bi50KCdhdHRhY2hNYXhDb3VudCcsICdfZ2xvYmFsJywgeyBjb3VudDogbWF4RmlsZXMoKS50b1N0cmluZygpIH0pIH19XG4gIDwvaW9uLW5vdGU+XG4gIH0gQGlmIChhdHRhY2htZW50cygpLmxlbmd0aCA+IDApIHtcbiAgPGRpdiBjbGFzcz1cImF0dGFjaG1lbnQtbGlzdFwiPlxuICAgIEBmb3IgKGl0ZW0gb2YgYXR0YWNobWVudHMoKTsgdHJhY2sgaXRlbS5pZCkge1xuICAgIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50LWl0ZW1cIiBbY2xhc3NdPVwiJ3N0YXR1cy0nICsgaXRlbS5zdGF0dXNcIj5cbiAgICAgIDxpb24taWNvblxuICAgICAgICBjbGFzcz1cImZpbGUtaWNvblwiXG4gICAgICAgIFtuYW1lXT1cIml0ZW0uZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpID8gJ2ltYWdlLW91dGxpbmUnIDogJ2RvY3VtZW50LW91dGxpbmUnXCJcbiAgICAgID48L2lvbi1pY29uPlxuICAgICAgPGRpdiBjbGFzcz1cImZpbGUtaW5mb1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGUtbmFtZVwiPnt7IGl0ZW0uZmlsZS5uYW1lIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGUtc2l6ZVwiPnt7IGZvcm1hdFNpemUoaXRlbS5maWxlLnNpemUpIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIEBpZiAoaXRlbS5zdGF0dXMgPT09ICd1cGxvYWRpbmcnKSB7XG4gICAgICA8aW9uLXNwaW5uZXIgY2xhc3M9XCJzdGF0dXMtaWNvblwiIG5hbWU9XCJjaXJjdWxhclwiPjwvaW9uLXNwaW5uZXI+XG4gICAgICB9IEBlbHNlIGlmIChpdGVtLnN0YXR1cyA9PT0gJ3JlYWR5Jykge1xuICAgICAgPGlvbi1pY29uIGNsYXNzPVwic3RhdHVzLWljb25cIiBuYW1lPVwiY2hlY2ttYXJrLWNpcmNsZS1vdXRsaW5lXCIgY29sb3I9XCJzdWNjZXNzXCI+PC9pb24taWNvbj5cbiAgICAgIH0gQGVsc2UgaWYgKGl0ZW0uc3RhdHVzID09PSAnZXJyb3InKSB7XG4gICAgICA8aW9uLWljb24gY2xhc3M9XCJzdGF0dXMtaWNvblwiIG5hbWU9XCJjbG9zZS1jaXJjbGUtb3V0bGluZVwiIGNvbG9yPVwiZGFuZ2VyXCI+PC9pb24taWNvbj5cbiAgICAgIH0gQGlmIChpdGVtLnN0YXR1cyAhPT0gJ3VwbG9hZGluZycpIHtcbiAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwibWVkaXVtXCIgKGNsaWNrKT1cInJlbW92ZShpdGVtLmlkKVwiPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJ0cmFzaC1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIH0gQGlmIChpdGVtLnN0YXR1cyA9PT0gJ2Vycm9yJyAmJiBpdGVtLmVycm9yKSB7XG4gICAgICA8aW9uLW5vdGUgY29sb3I9XCJkYW5nZXJcIiBjbGFzcz1cImVycm9yLW5vdGVcIj57eyBpdGVtLmVycm9yIH19PC9pb24tbm90ZT5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC11cGxvYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2F0dGFjaG1lbnQtdXBsb2FkZXIvYXR0YWNobWVudC11cGxvYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2F0dGFjaG1lbnQtdXBsb2FkZXIvYXR0YWNobWVudC11cGxvYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFVBQVUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxhQUFhLEVBQ2IsYUFBYSxFQUNiLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGVBQWUsRUFDZixZQUFZLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQVVyRCxNQUFNLE9BQU8sMkJBQTJCO0lBZ0J0QyxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUU7YUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUM7YUFDakMsR0FBRyxDQUFD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QUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNqRSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNwRCxDQUFDOytHQXZGVSwyQkFBMkI7bUdBQTNCLDJCQUEyQiw0UUN4QnhDLHc5RUEwREEsMDdERHRDWSxTQUFTLG9QQUFFLE9BQU8sMkpBQUUsT0FBTyxnRkFBRSxVQUFVOzs0RkFJdEMsMkJBQTJCO2tCQVB2QyxTQUFTOytCQUNFLHlCQUF5QixjQUN2QixJQUFJLFdBQ1AsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29tcHJlc3NvciBmcm9tICdjb21wcmVzc29yanMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvbkJ1dHRvbiwgSW9uSWNvbiwgSW9uTm90ZSwgSW9uU3Bpbm5lciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQge1xuICBhdHRhY2hPdXRsaW5lLFxuICBjYW1lcmFPdXRsaW5lLFxuICBjaGVja21hcmtDaXJjbGVPdXRsaW5lLFxuICBjbG9zZUNpcmNsZU91dGxpbmUsXG4gIGNsb3NlT3V0bGluZSxcbiAgZG9jdW1lbnRPdXRsaW5lLFxuICBpbWFnZU91dGxpbmUsXG59IGZyb20gJ2lvbmljb25zL2ljb25zJztcbmltcG9ydCB7IEZlZWRiYWNrU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZlZWRiYWNrJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBBdHRhY2htZW50SXRlbSwgQXR0YWNobWVudFVwbG9hZGVyTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWF0dGFjaG1lbnQtdXBsb2FkZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbSW9uQnV0dG9uLCBJb25JY29uLCBJb25Ob3RlLCBJb25TcGlubmVyXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2F0dGFjaG1lbnQtdXBsb2FkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vYXR0YWNobWVudC11cGxvYWRlci5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIEF0dGFjaG1lbnRVcGxvYWRlckNvbXBvbmVudCB7XG4gIHByb3BzID0gaW5wdXQ8QXR0YWNobWVudFVwbG9hZGVyTWV0YWRhdGE+KHt9KTtcblxuICBhdHRhY2htZW50c0NoYW5nZSA9IG91dHB1dDxBdHRhY2htZW50SXRlbVtdPigpO1xuXG4gIHByb3RlY3RlZCBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBmZWVkYmFja1NlcnZpY2UgPSBpbmplY3QoRmVlZGJhY2tTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIGF0dGFjaG1lbnRzID0gc2lnbmFsPEF0dGFjaG1lbnRJdGVtW10+KFtdKTtcblxuICBtYXhGaWxlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMucHJvcHMoKS5tYXhGaWxlcyA/PyA1KTtcbiAgYWNjZXB0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wcm9wcygpLmFjY2VwdCA/PyAnaW1hZ2UvanBlZyxpbWFnZS9wbmcsaW1hZ2Uvd2VicCxhcHBsaWNhdGlvbi9wZGYnKTtcbiAgbWF4UmVhY2hlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYXR0YWNobWVudHMoKS5sZW5ndGggPj0gdGhpcy5tYXhGaWxlcygpKTtcbiAgaXNEaXNhYmxlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucHJvcHMoKS5kaXNhYmxlZCA9PT0gdHJ1ZSB8fCB0aGlzLm1heFJlYWNoZWQoKSk7XG4gIGlzVXBsb2FkaW5nID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hdHRhY2htZW50cygpLnNvbWUoYSA9PiBhLnN0YXR1cyA9PT0gJ3VwbG9hZGluZycpKTtcblxuICBnZXQgcmVhZHlVcmxzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5hdHRhY2htZW50cygpXG4gICAgICAuZmlsdGVyKGEgPT4gYS5zdGF0dXMgPT09ICdyZWFkeScpXG4gICAgICAubWFwKGEgPT4gYS51cmwhKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGFkZEljb25zKHtcbiAgICAgIGF0dGFjaE91dGxpbmUsXG4gICAgICBjYW1lcmFPdXRsaW5lLFxuICAgICAgY2hlY2ttYXJrQ2lyY2xlT3V0bGluZSxcbiAgICAgIGNsb3NlQ2lyY2xlT3V0bGluZSxcbiAgICAgIGNsb3NlT3V0bGluZSxcbiAgICAgIGRvY3VtZW50T3V0bGluZSxcbiAgICAgIGltYWdlT3V0bGluZSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uRmlsZXNTZWxlY3RlZChldmVudDogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IGZpbGVzID0gQXJyYXkuZnJvbShpbnB1dC5maWxlcyA/PyBbXSk7XG4gICAgaW5wdXQudmFsdWUgPSAnJztcbiAgICBjb25zdCBhdmFpbGFibGUgPSB0aGlzLm1heEZpbGVzKCkgLSB0aGlzLmF0dGFjaG1lbnRzKCkubGVuZ3RoO1xuICAgIGNvbnN0IHRvUHJvY2VzcyA9IGZpbGVzLnNsaWNlKDAsIGF2YWlsYWJsZSk7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIHRvUHJvY2Vzcykge1xuICAgICAgY29uc3QgaWQgPSBjcnlwdG8ucmFuZG9tVVVJRCgpO1xuICAgICAgdGhpcy5hdHRhY2htZW50cy51cGRhdGUobGlzdCA9PiBbLi4ubGlzdCwgeyBpZCwgZmlsZSwgc3RhdHVzOiAndXBsb2FkaW5nJyB9XSk7XG4gICAgICB0aGlzLmF0dGFjaG1lbnRzQ2hhbmdlLmVtaXQodGhpcy5hdHRhY2htZW50cygpKTtcbiAgICAgIHRoaXMudXBsb2FkRmlsZShpZCwgZmlsZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb21wcmVzc0ltYWdlKGZpbGU6IEZpbGUpOiBQcm9taXNlPEZpbGU+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbmV3IENvbXByZXNzb3IoZmlsZSwge1xuICAgICAgICBxdWFsaXR5OiAwLjgsXG4gICAgICAgIG1heFdpZHRoOiAxOTIwLFxuICAgICAgICBtYXhIZWlnaHQ6IDE5MjAsXG4gICAgICAgIGNvbnZlcnRTaXplOiAyICogMTAyNCAqIDEwMjQsIC8vIFBORyA+IDIgTUIg4oaSIEpQRUdcbiAgICAgICAgc3VjY2VzcyhyZXN1bHQpIHtcbiAgICAgICAgICByZXNvbHZlKG5ldyBGaWxlKFtyZXN1bHRdLCBmaWxlLm5hbWUsIHsgdHlwZTogcmVzdWx0LnR5cGUgfSkpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwbG9hZEZpbGUoaWQ6IHN0cmluZywgZmlsZTogRmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzaG91bGRDb21wcmVzcyA9IHRoaXMucHJvcHMoKS5jb21wcmVzc0ltYWdlcyAhPT0gZmFsc2UgJiYgZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpO1xuICAgICAgY29uc3QgZmlsZVRvVXBsb2FkID0gc2hvdWxkQ29tcHJlc3MgPyBhd2FpdCB0aGlzLmNvbXByZXNzSW1hZ2UoZmlsZSkgOiBmaWxlO1xuICAgICAgY29uc3QgdXBsb2FkRm4gPSB0aGlzLnByb3BzKCkudXBsb2FkRm4gPz8gdGhpcy5mZWVkYmFja1NlcnZpY2U/LnVwbG9hZEF0dGFjaG1lbnQuYmluZCh0aGlzLmZlZWRiYWNrU2VydmljZSk7XG4gICAgICBpZiAoIXVwbG9hZEZuKSB0aHJvdyBuZXcgRXJyb3IoJ05vIHVwbG9hZCBmdW5jdGlvbiBjb25maWd1cmVkJyk7XG4gICAgICBjb25zdCB1cmwgPSBhd2FpdCB1cGxvYWRGbihmaWxlVG9VcGxvYWQpO1xuICAgICAgdGhpcy5hdHRhY2htZW50cy51cGRhdGUobGlzdCA9PiBsaXN0Lm1hcChhID0+IChhLmlkID09PSBpZCA/IHsgLi4uYSwgc3RhdHVzOiAncmVhZHknLCB1cmwgfSA6IGEpKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuaTE4bi50KCdhdHRhY2hVcGxvYWRGYWlsZWQnKTtcbiAgICAgIHRoaXMuYXR0YWNobWVudHMudXBkYXRlKGxpc3QgPT4gbGlzdC5tYXAoYSA9PiAoYS5pZCA9PT0gaWQgPyB7IC4uLmEsIHN0YXR1czogJ2Vycm9yJywgZXJyb3IgfSA6IGEpKSk7XG4gICAgfVxuICAgIHRoaXMuYXR0YWNobWVudHNDaGFuZ2UuZW1pdCh0aGlzLmF0dGFjaG1lbnRzKCkpO1xuICB9XG5cbiAgcmVtb3ZlKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmF0dGFjaG1lbnRzLnVwZGF0ZShsaXN0ID0+IGxpc3QuZmlsdGVyKGEgPT4gYS5pZCAhPT0gaWQpKTtcbiAgICB0aGlzLmF0dGFjaG1lbnRzQ2hhbmdlLmVtaXQodGhpcy5hdHRhY2htZW50cygpKTtcbiAgfVxuXG4gIGZvcm1hdFNpemUoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGJ5dGVzIDwgMTAyNCkgcmV0dXJuIGAke2J5dGVzfSBCYDtcbiAgICBpZiAoYnl0ZXMgPCAxMDI0ICogMTAyNCkgcmV0dXJuIGAke01hdGgucm91bmQoYnl0ZXMgLyAxMDI0KX0gS0JgO1xuICAgIHJldHVybiBgJHsoYnl0ZXMgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDEpfSBNQmA7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhdHRhY2htZW50LXVwbG9hZGVyXCI+XG4gIDxpbnB1dCAjZmlsZVBpY2tlciB0eXBlPVwiZmlsZVwiIFthY2NlcHRdPVwiYWNjZXB0KClcIiBtdWx0aXBsZSBjbGFzcz1cImhpZGRlbi1pbnB1dFwiIChjaGFuZ2UpPVwib25GaWxlc1NlbGVjdGVkKCRldmVudClcIiAvPlxuXG4gIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50LWFjdGlvbnNcIj5cbiAgICA8aW9uLWJ1dHRvbiBmaWxsPVwib3V0bGluZVwiIGNvbG9yPVwiZGFya1wiIHNpemU9XCJzbWFsbFwiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKClcIiAoY2xpY2spPVwiZmlsZVBpY2tlci5jbGljaygpXCI+XG4gICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgbmFtZT1cImF0dGFjaC1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgIHt7IGkxOG4udCgnYXR0YWNoQWRkJykgfX1cbiAgICA8L2lvbi1idXR0b24+XG4gICAgPCEtLSBsYWJlbCB0cmljazogbmF0aXZlIGJyb3dzZXIgZ2VzdHVyZSBmb3J3YXJkaW5nIOKGkiBpT1MvUFdBIG5vIGJsb3F1ZWEgZWwgcGlja2VyIC0tPlxuICAgIDxsYWJlbCBjbGFzcz1cImNhbWVyYS1sYWJlbFwiIFtjbGFzcy5jYW1lcmEtbGFiZWwtLWRpc2FibGVkXT1cImlzRGlzYWJsZWQoKVwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgIGNhcHR1cmU9XCJlbnZpcm9ubWVudFwiXG4gICAgICAgIGNsYXNzPVwiaGlkZGVuLWlucHV0XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQoKVwiXG4gICAgICAgIChjaGFuZ2UpPVwib25GaWxlc1NlbGVjdGVkKCRldmVudClcIlxuICAgICAgLz5cbiAgICAgIDxpb24taWNvbiBuYW1lPVwiY2FtZXJhLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAge3sgaTE4bi50KCdhdHRhY2hDYW1lcmEnKSB9fVxuICAgIDwvbGFiZWw+XG4gIDwvZGl2PlxuXG4gIEBpZiAobWF4UmVhY2hlZCgpKSB7XG4gIDxpb24tbm90ZSBjb2xvcj1cIndhcm5pbmdcIiBjbGFzcz1cIm1heC1ub3RlXCI+XG4gICAge3sgaTE4bi50KCdhdHRhY2hNYXhDb3VudCcsICdfZ2xvYmFsJywgeyBjb3VudDogbWF4RmlsZXMoKS50b1N0cmluZygpIH0pIH19XG4gIDwvaW9uLW5vdGU+XG4gIH0gQGlmIChhdHRhY2htZW50cygpLmxlbmd0aCA+IDApIHtcbiAgPGRpdiBjbGFzcz1cImF0dGFjaG1lbnQtbGlzdFwiPlxuICAgIEBmb3IgKGl0ZW0gb2YgYXR0YWNobWVudHMoKTsgdHJhY2sgaXRlbS5pZCkge1xuICAgIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50LWl0ZW1cIiBbY2xhc3NdPVwiJ3N0YXR1cy0nICsgaXRlbS5zdGF0dXNcIj5cbiAgICAgIDxpb24taWNvblxuICAgICAgICBjbGFzcz1cImZpbGUtaWNvblwiXG4gICAgICAgIFtuYW1lXT1cIml0ZW0uZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpID8gJ2ltYWdlLW91dGxpbmUnIDogJ2RvY3VtZW50LW91dGxpbmUnXCJcbiAgICAgID48L2lvbi1pY29uPlxuICAgICAgPGRpdiBjbGFzcz1cImZpbGUtaW5mb1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGUtbmFtZVwiPnt7IGl0ZW0uZmlsZS5uYW1lIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGUtc2l6ZVwiPnt7IGZvcm1hdFNpemUoaXRlbS5maWxlLnNpemUpIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIEBpZiAoaXRlbS5zdGF0dXMgPT09ICd1cGxvYWRpbmcnKSB7XG4gICAgICA8aW9uLXNwaW5uZXIgY2xhc3M9XCJzdGF0dXMtaWNvblwiIG5hbWU9XCJjaXJjdWxhclwiPjwvaW9uLXNwaW5uZXI+XG4gICAgICB9IEBlbHNlIGlmIChpdGVtLnN0YXR1cyA9PT0gJ3JlYWR5Jykge1xuICAgICAgPGlvbi1pY29uIGNsYXNzPVwic3RhdHVzLWljb25cIiBuYW1lPVwiY2hlY2ttYXJrLWNpcmNsZS1vdXRsaW5lXCIgY29sb3I9XCJzdWNjZXNzXCI+PC9pb24taWNvbj5cbiAgICAgIH0gQGVsc2UgaWYgKGl0ZW0uc3RhdHVzID09PSAnZXJyb3InKSB7XG4gICAgICA8aW9uLWljb24gY2xhc3M9XCJzdGF0dXMtaWNvblwiIG5hbWU9XCJjbG9zZS1jaXJjbGUtb3V0bGluZVwiIGNvbG9yPVwiZGFuZ2VyXCI+PC9pb24taWNvbj5cbiAgICAgIH0gQGlmIChpdGVtLnN0YXR1cyAhPT0gJ3VwbG9hZGluZycpIHtcbiAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwiZGFya1wiIChjbGljayk9XCJyZW1vdmUoaXRlbS5pZClcIj5cbiAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwiY2xvc2Utb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgICB9IEBpZiAoaXRlbS5zdGF0dXMgPT09ICdlcnJvcicgJiYgaXRlbS5lcnJvcikge1xuICAgICAgPGlvbi1ub3RlIGNvbG9yPVwiZGFuZ2VyXCIgY2xhc3M9XCJlcnJvci1ub3RlXCI+e3sgaXRlbS5lcnJvciB9fTwvaW9uLW5vdGU+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG4iXX0=