valtech-components 2.0.628 → 2.0.630

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/esm2022/lib/components/molecules/action-card/action-card.component.mjs +298 -0
  2. package/esm2022/lib/components/molecules/action-card/types.mjs +11 -0
  3. package/esm2022/lib/components/molecules/linked-providers/linked-providers.component.mjs +236 -0
  4. package/esm2022/lib/components/molecules/linked-providers/types.mjs +27 -0
  5. package/esm2022/lib/components/molecules/stats-card/stats-card.component.mjs +33 -3
  6. package/esm2022/lib/components/molecules/stats-card/types.mjs +1 -1
  7. package/esm2022/lib/components/molecules/username-input/types.mjs +2 -0
  8. package/esm2022/lib/components/molecules/username-input/username-input.component.mjs +260 -0
  9. package/esm2022/lib/components/templates/docs-page/docs-page.component.mjs +3 -3
  10. package/esm2022/lib/services/auth/auth.service.mjs +24 -1
  11. package/esm2022/lib/services/auth/types.mjs +1 -1
  12. package/esm2022/public-api.mjs +7 -1
  13. package/fesm2022/valtech-components.mjs +904 -46
  14. package/fesm2022/valtech-components.mjs.map +1 -1
  15. package/lib/components/molecules/action-card/action-card.component.d.ts +90 -0
  16. package/lib/components/molecules/action-card/types.d.ts +83 -0
  17. package/lib/components/molecules/linked-providers/linked-providers.component.d.ts +30 -0
  18. package/lib/components/molecules/linked-providers/types.d.ts +38 -0
  19. package/lib/components/molecules/stats-card/types.d.ts +17 -0
  20. package/lib/components/molecules/username-input/types.d.ts +34 -0
  21. package/lib/components/molecules/username-input/username-input.component.d.ts +45 -0
  22. package/lib/services/auth/auth.service.d.ts +11 -1
  23. package/lib/services/auth/types.d.ts +56 -0
  24. package/package.json +1 -1
  25. package/public-api.d.ts +6 -0
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Información de proveedores OAuth disponibles.
3
+ */
4
+ export const OAUTH_PROVIDERS_INFO = {
5
+ google: {
6
+ id: 'google',
7
+ name: 'Google',
8
+ icon: 'logo-google',
9
+ color: '#DB4437',
10
+ bgColor: '#DB443715',
11
+ },
12
+ apple: {
13
+ id: 'apple',
14
+ name: 'Apple',
15
+ icon: 'logo-apple',
16
+ color: '#000000',
17
+ bgColor: '#00000010',
18
+ },
19
+ microsoft: {
20
+ id: 'microsoft',
21
+ name: 'Microsoft',
22
+ icon: 'logo-microsoft',
23
+ color: '#00A4EF',
24
+ bgColor: '#00A4EF15',
25
+ },
26
+ };
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2xpbmtlZC1wcm92aWRlcnMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcUNBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQStDO0lBQzlFLE1BQU0sRUFBRTtRQUNOLEVBQUUsRUFBRSxRQUFRO1FBQ1osSUFBSSxFQUFFLFFBQVE7UUFDZCxJQUFJLEVBQUUsYUFBYTtRQUNuQixLQUFLLEVBQUUsU0FBUztRQUNoQixPQUFPLEVBQUUsV0FBVztLQUNyQjtJQUNELEtBQUssRUFBRTtRQUNMLEVBQUUsRUFBRSxPQUFPO1FBQ1gsSUFBSSxFQUFFLE9BQU87UUFDYixJQUFJLEVBQUUsWUFBWTtRQUNsQixLQUFLLEVBQUUsU0FBUztRQUNoQixPQUFPLEVBQUUsV0FBVztLQUNyQjtJQUNELFNBQVMsRUFBRTtRQUNULEVBQUUsRUFBRSxXQUFXO1FBQ2YsSUFBSSxFQUFFLFdBQVc7UUFDakIsSUFBSSxFQUFFLGdCQUFnQjtRQUN0QixLQUFLLEVBQUUsU0FBUztRQUNoQixPQUFPLEVBQUUsV0FBVztLQUNyQjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaW5rZWRQcm92aWRlciwgT0F1dGhQcm92aWRlciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgvdHlwZXMnO1xuXG4vKipcbiAqIE1ldGFkYXRhIHBhcmEgTGlua2VkUHJvdmlkZXJzQ29tcG9uZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbmtlZFByb3ZpZGVyc01ldGFkYXRhIHtcbiAgLyoqIExpc3RhIGRlIHByb3ZlZWRvcmVzIHZpbmN1bGFkb3MgKi9cbiAgcHJvdmlkZXJzOiBMaW5rZWRQcm92aWRlcltdO1xuICAvKiogUHJvdmVlZG9yZXMgZGlzcG9uaWJsZXMgcGFyYSB2aW5jdWxhciAoZGVmYXVsdDogWydnb29nbGUnXSkgKi9cbiAgYXZhaWxhYmxlUHJvdmlkZXJzPzogT0F1dGhQcm92aWRlcltdO1xuICAvKiogQ2FsbGJhY2sgY3VhbmRvIHNlIHF1aWVyZSB2aW5jdWxhciB1biBwcm92aWRlciAqL1xuICBvbkxpbms/OiAocHJvdmlkZXI6IE9BdXRoUHJvdmlkZXIpID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayBjdWFuZG8gc2UgcXVpZXJlIGRlc3ZpbmN1bGFyIHVuIHByb3ZpZGVyICovXG4gIG9uVW5saW5rPzogKHByb3ZpZGVyOiBPQXV0aFByb3ZpZGVyKSA9PiB2b2lkO1xuICAvKiogTW9zdHJhciBib3TDs24gcGFyYSB2aW5jdWxhciBudWV2b3MgKGRlZmF1bHQ6IHRydWUpICovXG4gIHNob3dMaW5rQnV0dG9uPzogYm9vbGVhbjtcbiAgLyoqIFBlcm1pdGlyIGRlc3ZpbmN1bGFyIChkZWZhdWx0OiB0cnVlIHNpIGhheSBtw6FzIGRlIHVuIG3DqXRvZG8gZGUgYXV0aCkgKi9cbiAgYWxsb3dVbmxpbms/OiBib29sZWFuO1xuICAvKiogVMOtdHVsbyBkZSBsYSBzZWNjacOzbiAqL1xuICB0aXRsZT86IHN0cmluZztcbiAgLyoqIERlc2NyaXBjacOzbiBkZSBsYSBzZWNjacOzbiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIE1vZG8gY29tcGFjdG8gc2luIGNhcmQgKi9cbiAgY29tcGFjdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogSW5mb3JtYWNpw7NuIHZpc3VhbCBkZSB1biBwcm92ZWVkb3IgT0F1dGguXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZXJEaXNwbGF5SW5mbyB7XG4gIGlkOiBPQXV0aFByb3ZpZGVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGljb246IHN0cmluZztcbiAgY29sb3I6IHN0cmluZztcbiAgYmdDb2xvcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEluZm9ybWFjacOzbiBkZSBwcm92ZWVkb3JlcyBPQXV0aCBkaXNwb25pYmxlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IE9BVVRIX1BST1ZJREVSU19JTkZPOiBSZWNvcmQ8T0F1dGhQcm92aWRlciwgUHJvdmlkZXJEaXNwbGF5SW5mbz4gPSB7XG4gIGdvb2dsZToge1xuICAgIGlkOiAnZ29vZ2xlJyxcbiAgICBuYW1lOiAnR29vZ2xlJyxcbiAgICBpY29uOiAnbG9nby1nb29nbGUnLFxuICAgIGNvbG9yOiAnI0RCNDQzNycsXG4gICAgYmdDb2xvcjogJyNEQjQ0MzcxNScsXG4gIH0sXG4gIGFwcGxlOiB7XG4gICAgaWQ6ICdhcHBsZScsXG4gICAgbmFtZTogJ0FwcGxlJyxcbiAgICBpY29uOiAnbG9nby1hcHBsZScsXG4gICAgY29sb3I6ICcjMDAwMDAwJyxcbiAgICBiZ0NvbG9yOiAnIzAwMDAwMDEwJyxcbiAgfSxcbiAgbWljcm9zb2Z0OiB7XG4gICAgaWQ6ICdtaWNyb3NvZnQnLFxuICAgIG5hbWU6ICdNaWNyb3NvZnQnLFxuICAgIGljb246ICdsb2dvLW1pY3Jvc29mdCcsXG4gICAgY29sb3I6ICcjMDBBNEVGJyxcbiAgICBiZ0NvbG9yOiAnIzAwQTRFRjE1JyxcbiAgfSxcbn07XG4iXX0=
@@ -120,9 +120,24 @@ export class StatsCardComponent {
120
120
  @if (resolvedProps.footer && !resolvedProps.loading) {
121
121
  <div class="stats-footer">{{ resolvedProps.footer }}</div>
122
122
  }
123
+
124
+ @if (resolvedProps.description && !resolvedProps.loading) {
125
+ <div class="stats-description">{{ resolvedProps.description }}</div>
126
+ }
127
+
128
+ @if (resolvedProps.logo && !resolvedProps.loading) {
129
+ <div class="stats-logo">
130
+ <img
131
+ [src]="resolvedProps.logo.src"
132
+ [alt]="resolvedProps.logo.alt"
133
+ [style.max-height.px]="resolvedProps.logo.maxHeight || 32"
134
+ [style.max-width.px]="resolvedProps.logo.maxWidth || 120"
135
+ />
136
+ </div>
137
+ }
123
138
  </ion-card-content>
124
139
  </ion-card>
125
- `, isInline: true, styles: [":host{display:block}.stats-card{margin:0;border-radius:12px;cursor:pointer;transition:transform .2s,box-shadow .2s}.stats-card:hover{transform:translateY(-2px);box-shadow:0 8px 24px #0000001f}.stats-card.background-light{--background: var(--ion-color-light)}.stats-card.background-light .stats-title,.stats-card.background-light .stats-footer{color:var(--ion-color-medium)}.stats-card.background-light .stats-value{color:var(--ion-text-color)}.stats-card.background-light .stats-icon{color:var(--card-color);opacity:.8}.stats-card.background-solid{--background: var(--card-color)}.stats-card.background-solid .stats-title,.stats-card.background-solid .stats-footer,.stats-card.background-solid .stats-value,.stats-card.background-solid .stats-icon{color:#fff}.stats-card.background-solid .stats-title,.stats-card.background-solid .stats-footer{opacity:.9}.stats-card.background-gradient{--background: linear-gradient(135deg, var(--card-color), var(--card-color-shade, var(--card-color)))}.stats-card.background-gradient .stats-title,.stats-card.background-gradient .stats-footer,.stats-card.background-gradient .stats-value,.stats-card.background-gradient .stats-icon{color:#fff}.stats-card.background-gradient .stats-title,.stats-card.background-gradient .stats-footer{opacity:.9}ion-card-content{padding:16px}.stats-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:8px}.stats-title{font-size:13px;font-weight:500;text-transform:uppercase;letter-spacing:.5px}.stats-icon{font-size:24px}.stats-value{font-size:28px;font-weight:700;line-height:1.2;margin-bottom:8px}.stats-value .prefix,.stats-value .suffix{font-size:18px;font-weight:500;opacity:.8}.stats-value .prefix{margin-right:2px}.stats-value .suffix{margin-left:4px}.stats-trend{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:500;padding:4px 8px;border-radius:12px;margin-bottom:8px}.stats-trend ion-icon{font-size:16px}.stats-trend.trend-up{background-color:rgba(var(--ion-color-success-rgb),.15);color:var(--ion-color-success)}.stats-trend.trend-down{background-color:rgba(var(--ion-color-danger-rgb),.15);color:var(--ion-color-danger)}.stats-trend.trend-neutral{background-color:rgba(var(--ion-color-medium-rgb),.15);color:var(--ion-color-medium)}.stats-trend .trend-label{font-weight:400;opacity:.8;margin-left:4px}.stats-footer{font-size:12px;margin-top:4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }] }); }
140
+ `, isInline: true, styles: [":host{display:block}.stats-card{margin:0;border-radius:12px;cursor:pointer;transition:transform .2s,box-shadow .2s}.stats-card:hover{transform:translateY(-2px);box-shadow:0 8px 24px #0000001f}.stats-card.background-light{--background: var(--ion-color-light)}.stats-card.background-light .stats-title,.stats-card.background-light .stats-footer{color:var(--ion-color-medium)}.stats-card.background-light .stats-value{color:var(--ion-text-color)}.stats-card.background-light .stats-icon{color:var(--card-color);opacity:.8}.stats-card.background-solid{--background: var(--card-color)}.stats-card.background-solid .stats-title,.stats-card.background-solid .stats-footer,.stats-card.background-solid .stats-value,.stats-card.background-solid .stats-icon{color:#fff}.stats-card.background-solid .stats-title,.stats-card.background-solid .stats-footer{opacity:.9}.stats-card.background-gradient{--background: linear-gradient(135deg, var(--card-color), var(--card-color-shade, var(--card-color)))}.stats-card.background-gradient .stats-title,.stats-card.background-gradient .stats-footer,.stats-card.background-gradient .stats-value,.stats-card.background-gradient .stats-icon{color:#fff}.stats-card.background-gradient .stats-title,.stats-card.background-gradient .stats-footer{opacity:.9}ion-card-content{padding:16px}.stats-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:8px}.stats-title{font-size:13px;font-weight:500;text-transform:uppercase;letter-spacing:.5px}.stats-icon{font-size:24px}.stats-value{font-size:28px;font-weight:700;line-height:1.2;margin-bottom:8px}.stats-value .prefix,.stats-value .suffix{font-size:18px;font-weight:500;opacity:.8}.stats-value .prefix{margin-right:2px}.stats-value .suffix{margin-left:4px}.stats-trend{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:500;padding:4px 8px;border-radius:12px;margin-bottom:8px}.stats-trend ion-icon{font-size:16px}.stats-trend.trend-up{background-color:rgba(var(--ion-color-success-rgb),.15);color:var(--ion-color-success)}.stats-trend.trend-down{background-color:rgba(var(--ion-color-danger-rgb),.15);color:var(--ion-color-danger)}.stats-trend.trend-neutral{background-color:rgba(var(--ion-color-medium-rgb),.15);color:var(--ion-color-medium)}.stats-trend .trend-label{font-weight:400;opacity:.8;margin-left:4px}.stats-footer{font-size:12px;margin-top:4px}.stats-description{margin-top:8px;font-size:14px;line-height:1.4;color:var(--ion-text-color);opacity:.8}.stats-logo{margin-top:16px;padding-top:12px;border-top:1px solid rgba(var(--ion-text-color-rgb),.1)}.stats-logo img{display:block;object-fit:contain;filter:grayscale(100%);opacity:.7;transition:filter .2s,opacity .2s}.stats-logo:hover img{filter:grayscale(0%);opacity:1}.background-solid .stats-description,.background-gradient .stats-description{color:#fff;opacity:.9}.background-solid .stats-logo,.background-gradient .stats-logo{border-top-color:#fff3}.background-solid .stats-logo img,.background-gradient .stats-logo img{filter:grayscale(100%) brightness(10)}.background-solid .stats-logo:hover img,.background-gradient .stats-logo:hover img{filter:brightness(10)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }] }); }
126
141
  }
127
142
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StatsCardComponent, decorators: [{
128
143
  type: Component,
@@ -168,9 +183,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
168
183
  @if (resolvedProps.footer && !resolvedProps.loading) {
169
184
  <div class="stats-footer">{{ resolvedProps.footer }}</div>
170
185
  }
186
+
187
+ @if (resolvedProps.description && !resolvedProps.loading) {
188
+ <div class="stats-description">{{ resolvedProps.description }}</div>
189
+ }
190
+
191
+ @if (resolvedProps.logo && !resolvedProps.loading) {
192
+ <div class="stats-logo">
193
+ <img
194
+ [src]="resolvedProps.logo.src"
195
+ [alt]="resolvedProps.logo.alt"
196
+ [style.max-height.px]="resolvedProps.logo.maxHeight || 32"
197
+ [style.max-width.px]="resolvedProps.logo.maxWidth || 120"
198
+ />
199
+ </div>
200
+ }
171
201
  </ion-card-content>
172
202
  </ion-card>
173
- `, styles: [":host{display:block}.stats-card{margin:0;border-radius:12px;cursor:pointer;transition:transform .2s,box-shadow .2s}.stats-card:hover{transform:translateY(-2px);box-shadow:0 8px 24px #0000001f}.stats-card.background-light{--background: var(--ion-color-light)}.stats-card.background-light .stats-title,.stats-card.background-light .stats-footer{color:var(--ion-color-medium)}.stats-card.background-light .stats-value{color:var(--ion-text-color)}.stats-card.background-light .stats-icon{color:var(--card-color);opacity:.8}.stats-card.background-solid{--background: var(--card-color)}.stats-card.background-solid .stats-title,.stats-card.background-solid .stats-footer,.stats-card.background-solid .stats-value,.stats-card.background-solid .stats-icon{color:#fff}.stats-card.background-solid .stats-title,.stats-card.background-solid .stats-footer{opacity:.9}.stats-card.background-gradient{--background: linear-gradient(135deg, var(--card-color), var(--card-color-shade, var(--card-color)))}.stats-card.background-gradient .stats-title,.stats-card.background-gradient .stats-footer,.stats-card.background-gradient .stats-value,.stats-card.background-gradient .stats-icon{color:#fff}.stats-card.background-gradient .stats-title,.stats-card.background-gradient .stats-footer{opacity:.9}ion-card-content{padding:16px}.stats-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:8px}.stats-title{font-size:13px;font-weight:500;text-transform:uppercase;letter-spacing:.5px}.stats-icon{font-size:24px}.stats-value{font-size:28px;font-weight:700;line-height:1.2;margin-bottom:8px}.stats-value .prefix,.stats-value .suffix{font-size:18px;font-weight:500;opacity:.8}.stats-value .prefix{margin-right:2px}.stats-value .suffix{margin-left:4px}.stats-trend{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:500;padding:4px 8px;border-radius:12px;margin-bottom:8px}.stats-trend ion-icon{font-size:16px}.stats-trend.trend-up{background-color:rgba(var(--ion-color-success-rgb),.15);color:var(--ion-color-success)}.stats-trend.trend-down{background-color:rgba(var(--ion-color-danger-rgb),.15);color:var(--ion-color-danger)}.stats-trend.trend-neutral{background-color:rgba(var(--ion-color-medium-rgb),.15);color:var(--ion-color-medium)}.stats-trend .trend-label{font-weight:400;opacity:.8;margin-left:4px}.stats-footer{font-size:12px;margin-top:4px}\n"] }]
203
+ `, styles: [":host{display:block}.stats-card{margin:0;border-radius:12px;cursor:pointer;transition:transform .2s,box-shadow .2s}.stats-card:hover{transform:translateY(-2px);box-shadow:0 8px 24px #0000001f}.stats-card.background-light{--background: var(--ion-color-light)}.stats-card.background-light .stats-title,.stats-card.background-light .stats-footer{color:var(--ion-color-medium)}.stats-card.background-light .stats-value{color:var(--ion-text-color)}.stats-card.background-light .stats-icon{color:var(--card-color);opacity:.8}.stats-card.background-solid{--background: var(--card-color)}.stats-card.background-solid .stats-title,.stats-card.background-solid .stats-footer,.stats-card.background-solid .stats-value,.stats-card.background-solid .stats-icon{color:#fff}.stats-card.background-solid .stats-title,.stats-card.background-solid .stats-footer{opacity:.9}.stats-card.background-gradient{--background: linear-gradient(135deg, var(--card-color), var(--card-color-shade, var(--card-color)))}.stats-card.background-gradient .stats-title,.stats-card.background-gradient .stats-footer,.stats-card.background-gradient .stats-value,.stats-card.background-gradient .stats-icon{color:#fff}.stats-card.background-gradient .stats-title,.stats-card.background-gradient .stats-footer{opacity:.9}ion-card-content{padding:16px}.stats-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:8px}.stats-title{font-size:13px;font-weight:500;text-transform:uppercase;letter-spacing:.5px}.stats-icon{font-size:24px}.stats-value{font-size:28px;font-weight:700;line-height:1.2;margin-bottom:8px}.stats-value .prefix,.stats-value .suffix{font-size:18px;font-weight:500;opacity:.8}.stats-value .prefix{margin-right:2px}.stats-value .suffix{margin-left:4px}.stats-trend{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:500;padding:4px 8px;border-radius:12px;margin-bottom:8px}.stats-trend ion-icon{font-size:16px}.stats-trend.trend-up{background-color:rgba(var(--ion-color-success-rgb),.15);color:var(--ion-color-success)}.stats-trend.trend-down{background-color:rgba(var(--ion-color-danger-rgb),.15);color:var(--ion-color-danger)}.stats-trend.trend-neutral{background-color:rgba(var(--ion-color-medium-rgb),.15);color:var(--ion-color-medium)}.stats-trend .trend-label{font-weight:400;opacity:.8;margin-left:4px}.stats-footer{font-size:12px;margin-top:4px}.stats-description{margin-top:8px;font-size:14px;line-height:1.4;color:var(--ion-text-color);opacity:.8}.stats-logo{margin-top:16px;padding-top:12px;border-top:1px solid rgba(var(--ion-text-color-rgb),.1)}.stats-logo img{display:block;object-fit:contain;filter:grayscale(100%);opacity:.7;transition:filter .2s,opacity .2s}.stats-logo:hover img{filter:grayscale(0%);opacity:1}.background-solid .stats-description,.background-gradient .stats-description{color:#fff;opacity:.9}.background-solid .stats-logo,.background-gradient .stats-logo{border-top-color:#fff3}.background-solid .stats-logo img,.background-gradient .stats-logo img{filter:grayscale(100%) brightness(10)}.background-solid .stats-logo:hover img,.background-gradient .stats-logo:hover img{filter:brightness(10)}\n"] }]
174
204
  }], propDecorators: { preset: [{
175
205
  type: Input
176
206
  }], props: [{
@@ -178,4 +208,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
178
208
  }], cardClick: [{
179
209
  type: Output
180
210
  }] } });
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHMtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL3N0YXRzLWNhcmQvc3RhdHMtY2FyZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsWUFBWSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFbkgsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQXFEaEc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQXhFL0I7UUF5RVUsWUFBTyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUcvQixVQUFLLEdBQStCLEVBQUUsQ0FBQztRQUVoRCxrQkFBYSxHQUFzQixFQUF1QixDQUFDO1FBRWpELGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRS9DLFNBQUksR0FBRyxJQUFJLENBQUM7S0FnRGI7SUE5Q0MsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVk7UUFDbEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU07WUFDN0IsQ0FBQyxDQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFnQztZQUM1RSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVAsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNuQixHQUFHLFdBQVc7WUFDZCxHQUFHLElBQUksQ0FBQyxLQUFLO1NBQ08sQ0FBQztJQUN6QixDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQztRQUNwRCxPQUFPLG1CQUFtQixLQUFLLEdBQUcsQ0FBQztJQUNyQyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQztRQUNwRCxPQUFPLGNBQWMsRUFBRSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGFBQWE7UUFDWCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxTQUFTLElBQUksU0FBUyxDQUFDO1FBQ25FLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQztRQUV0RCxJQUFJLFNBQVMsS0FBSyxTQUFTO1lBQUUsT0FBTyxlQUFlLENBQUM7UUFDcEQsSUFBSSxTQUFTLEtBQUssSUFBSTtZQUFFLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUNsRSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDNUMsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxTQUFTLElBQUksU0FBUyxDQUFDO1FBQ25FLElBQUksU0FBUyxLQUFLLElBQUk7WUFBRSxPQUFPLGFBQWEsQ0FBQztRQUM3QyxJQUFJLFNBQVMsS0FBSyxNQUFNO1lBQUUsT0FBTyxlQUFlLENBQUM7UUFDakQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzsrR0F6RFUsa0JBQWtCO21HQUFsQixrQkFBa0Isa0xBcEVuQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Q1QsNjVFQTdDUyxZQUFZLCtCQUFFLE9BQU8seUxBQUUsY0FBYywrRUFBRSxPQUFPLDJKQUFFLGVBQWU7OzRGQXFFOUQsa0JBQWtCO2tCQXhFOUIsU0FBUzsrQkFDRSxnQkFBZ0IsY0FDZCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLFlBQ2hFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRDVDs4QkEyQlEsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFJSSxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvbkNhcmQsIElvbkNhcmRDb250ZW50LCBJb25JY29uLCBJb25Ta2VsZXRvblRleHQgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBQcmVzZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJlc2V0cyc7XG5pbXBvcnQgeyBTdGF0c0NhcmRNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQgeyB0cmVuZGluZ1VwLCB0cmVuZGluZ0Rvd24sIHJlbW92ZSwgYW5hbHl0aWNzLCBwZW9wbGUsIGNhc2gsIGNhcnQsIGV5ZSwgaGVhcnQsIHN0YXIgfSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5cbmFkZEljb25zKHsgdHJlbmRpbmdVcCwgdHJlbmRpbmdEb3duLCByZW1vdmUsIGFuYWx5dGljcywgcGVvcGxlLCBjYXNoLCBjYXJ0LCBleWUsIGhlYXJ0LCBzdGFyIH0pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtc3RhdHMtY2FyZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIElvbkNhcmQsIElvbkNhcmRDb250ZW50LCBJb25JY29uLCBJb25Ta2VsZXRvblRleHRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxpb24tY2FyZFxuICAgICAgY2xhc3M9XCJzdGF0cy1jYXJkXCJcbiAgICAgIFtjbGFzc109XCJnZXRCYWNrZ3JvdW5kQ2xhc3MoKVwiXG4gICAgICBbc3R5bGUuLS1jYXJkLWNvbG9yXT1cImdldENhcmRDb2xvcigpXCJcbiAgICAgIChjbGljayk9XCJjYXJkQ2xpY2suZW1pdCgpXCJcbiAgICA+XG4gICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0YXRzLWhlYWRlclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RhdHMtdGl0bGVcIj57eyByZXNvbHZlZFByb3BzLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgIEBpZiAocmVzb2x2ZWRQcm9wcy5pY29uKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwicmVzb2x2ZWRQcm9wcy5pY29uXCIgY2xhc3M9XCJzdGF0cy1pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0cy12YWx1ZVwiPlxuICAgICAgICAgIEBpZiAocmVzb2x2ZWRQcm9wcy5sb2FkaW5nKSB7XG4gICAgICAgICAgICA8aW9uLXNrZWxldG9uLXRleHQgW2FuaW1hdGVkXT1cInRydWVcIiBzdHlsZT1cIndpZHRoOiA2MCU7IGhlaWdodDogMzJweDtcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgQGlmIChyZXNvbHZlZFByb3BzLnByZWZpeCkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInByZWZpeFwiPnt7IHJlc29sdmVkUHJvcHMucHJlZml4IH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPnt7IHJlc29sdmVkUHJvcHMudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICBAaWYgKHJlc29sdmVkUHJvcHMuc3VmZml4KSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VmZml4XCI+e3sgcmVzb2x2ZWRQcm9wcy5zdWZmaXggfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICBAaWYgKHJlc29sdmVkUHJvcHMudHJlbmQgJiYgIXJlc29sdmVkUHJvcHMubG9hZGluZykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0cy10cmVuZFwiIFtjbGFzc109XCJnZXRUcmVuZENsYXNzKClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBbbmFtZV09XCJnZXRUcmVuZEljb24oKVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRyZW5kLXZhbHVlXCI+e3sgTWF0aC5hYnMocmVzb2x2ZWRQcm9wcy50cmVuZC52YWx1ZSkgfX0lPC9zcGFuPlxuICAgICAgICAgICAgQGlmIChyZXNvbHZlZFByb3BzLnRyZW5kLmxhYmVsKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHJlbmQtbGFiZWxcIj57eyByZXNvbHZlZFByb3BzLnRyZW5kLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChyZXNvbHZlZFByb3BzLmZvb3RlciAmJiAhcmVzb2x2ZWRQcm9wcy5sb2FkaW5nKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0YXRzLWZvb3RlclwiPnt7IHJlc29sdmVkUHJvcHMuZm9vdGVyIH19PC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICA8L2lvbi1jYXJkPlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9zdGF0cy1jYXJkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuLyoqXG4gKiB2YWwtc3RhdHMtY2FyZFxuICpcbiAqIEEgY2FyZCBjb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgc3RhdGlzdGljcyBhbmQgS1BJcy5cbiAqIFN1cHBvcnRzIHByZXNldHMgZm9yIHJldXNhYmxlIGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIEBleGFtcGxlIFdpdGggcHJlc2V0OlxuICogPHZhbC1zdGF0cy1jYXJkIHByZXNldD1cImtwaVwiIFtwcm9wc109XCJ7IHRpdGxlOiAnVXNlcnMnLCB2YWx1ZTogMTAwMCB9XCI+PC92YWwtc3RhdHMtY2FyZD5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZVxuICogPHZhbC1zdGF0cy1jYXJkIFtwcm9wc109XCJ7XG4gKiAgIHRpdGxlOiAnVG90YWwgVXNlcnMnLFxuICogICB2YWx1ZTogMTI1MDAsXG4gKiAgIGljb246ICdwZW9wbGUnLFxuICogICBjb2xvcjogJ3ByaW1hcnknXG4gKiB9XCI+PC92YWwtc3RhdHMtY2FyZD5cbiAqXG4gKiBAaW5wdXQgcHJlc2V0OiBzdHJpbmcgLSBOYW1lIG9mIHByZXNldCB0byBhcHBseVxuICogQGlucHV0IHByb3BzOiBTdGF0c0NhcmRNZXRhZGF0YSAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBzdGF0cyBjYXJkXG4gKiBAb3V0cHV0IGNhcmRDbGljazogdm9pZCAtIEVtaXRzIHdoZW4gY2FyZCBpcyBjbGlja2VkXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGF0c0NhcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgcHJlc2V0cyA9IGluamVjdChQcmVzZXRTZXJ2aWNlKTtcblxuICBASW5wdXQoKSBwcmVzZXQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHByb3BzOiBQYXJ0aWFsPFN0YXRzQ2FyZE1ldGFkYXRhPiA9IHt9O1xuXG4gIHJlc29sdmVkUHJvcHM6IFN0YXRzQ2FyZE1ldGFkYXRhID0ge30gYXMgU3RhdHNDYXJkTWV0YWRhdGE7XG5cbiAgQE91dHB1dCgpIGNhcmRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBNYXRoID0gTWF0aDtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnJlc29sdmVQcm9wcygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydwcmVzZXQnXSB8fCBjaGFuZ2VzWydwcm9wcyddKSB7XG4gICAgICB0aGlzLnJlc29sdmVQcm9wcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVByb3BzKCk6IHZvaWQge1xuICAgIGNvbnN0IHByZXNldFByb3BzID0gdGhpcy5wcmVzZXRcbiAgICAgID8gKHRoaXMucHJlc2V0cy5nZXQoJ3N0YXRzQ2FyZCcsIHRoaXMucHJlc2V0KSBhcyBQYXJ0aWFsPFN0YXRzQ2FyZE1ldGFkYXRhPilcbiAgICAgIDoge307XG5cbiAgICB0aGlzLnJlc29sdmVkUHJvcHMgPSB7XG4gICAgICAuLi5wcmVzZXRQcm9wcyxcbiAgICAgIC4uLnRoaXMucHJvcHMsXG4gICAgfSBhcyBTdGF0c0NhcmRNZXRhZGF0YTtcbiAgfVxuXG4gIGdldENhcmRDb2xvcigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbG9yID0gdGhpcy5yZXNvbHZlZFByb3BzLmNvbG9yIHx8ICdwcmltYXJ5JztcbiAgICByZXR1cm4gYHZhcigtLWlvbi1jb2xvci0ke2NvbG9yfSlgO1xuICB9XG5cbiAgZ2V0QmFja2dyb3VuZENsYXNzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYmcgPSB0aGlzLnJlc29sdmVkUHJvcHMuYmFja2dyb3VuZCB8fCAnbGlnaHQnO1xuICAgIHJldHVybiBgYmFja2dyb3VuZC0ke2JnfWA7XG4gIH1cblxuICBnZXRUcmVuZENsYXNzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5yZXNvbHZlZFByb3BzLnRyZW5kPy5kaXJlY3Rpb24gfHwgJ25ldXRyYWwnO1xuICAgIGNvbnN0IGludmVydCA9IHRoaXMucmVzb2x2ZWRQcm9wcy50cmVuZD8uaW52ZXJ0Q29sb3JzO1xuXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gJ25ldXRyYWwnKSByZXR1cm4gJ3RyZW5kLW5ldXRyYWwnO1xuICAgIGlmIChkaXJlY3Rpb24gPT09ICd1cCcpIHJldHVybiBpbnZlcnQgPyAndHJlbmQtZG93bicgOiAndHJlbmQtdXAnO1xuICAgIHJldHVybiBpbnZlcnQgPyAndHJlbmQtdXAnIDogJ3RyZW5kLWRvd24nO1xuICB9XG5cbiAgZ2V0VHJlbmRJY29uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5yZXNvbHZlZFByb3BzLnRyZW5kPy5kaXJlY3Rpb24gfHwgJ25ldXRyYWwnO1xuICAgIGlmIChkaXJlY3Rpb24gPT09ICd1cCcpIHJldHVybiAndHJlbmRpbmctdXAnO1xuICAgIGlmIChkaXJlY3Rpb24gPT09ICdkb3duJykgcmV0dXJuICd0cmVuZGluZy1kb3duJztcbiAgICByZXR1cm4gJ3JlbW92ZSc7XG4gIH1cbn1cbiJdfQ==
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHMtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL3N0YXRzLWNhcmQvc3RhdHMtY2FyZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsWUFBWSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFbkgsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQW9FaEc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQXZGL0I7UUF3RlUsWUFBTyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUcvQixVQUFLLEdBQStCLEVBQUUsQ0FBQztRQUVoRCxrQkFBYSxHQUFzQixFQUF1QixDQUFDO1FBRWpELGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRS9DLFNBQUksR0FBRyxJQUFJLENBQUM7S0FnRGI7SUE5Q0MsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVk7UUFDbEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU07WUFDN0IsQ0FBQyxDQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFnQztZQUM1RSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVAsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNuQixHQUFHLFdBQVc7WUFDZCxHQUFHLElBQUksQ0FBQyxLQUFLO1NBQ08sQ0FBQztJQUN6QixDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQztRQUNwRCxPQUFPLG1CQUFtQixLQUFLLEdBQUcsQ0FBQztJQUNyQyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQztRQUNwRCxPQUFPLGNBQWMsRUFBRSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGFBQWE7UUFDWCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxTQUFTLElBQUksU0FBUyxDQUFDO1FBQ25FLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQztRQUV0RCxJQUFJLFNBQVMsS0FBSyxTQUFTO1lBQUUsT0FBTyxlQUFlLENBQUM7UUFDcEQsSUFBSSxTQUFTLEtBQUssSUFBSTtZQUFFLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUNsRSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDNUMsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxTQUFTLElBQUksU0FBUyxDQUFDO1FBQ25FLElBQUksU0FBUyxLQUFLLElBQUk7WUFBRSxPQUFPLGFBQWEsQ0FBQztRQUM3QyxJQUFJLFNBQVMsS0FBSyxNQUFNO1lBQUUsT0FBTyxlQUFlLENBQUM7UUFDakQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzsrR0F6RFUsa0JBQWtCO21HQUFsQixrQkFBa0Isa0xBbkZuQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyRFQsbXFHQTVEUyxZQUFZLCtCQUFFLE9BQU8seUxBQUUsY0FBYywrRUFBRSxPQUFPLDJKQUFFLGVBQWU7OzRGQW9GOUQsa0JBQWtCO2tCQXZGOUIsU0FBUzsrQkFDRSxnQkFBZ0IsY0FDZCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLFlBQ2hFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJEVDs4QkEyQlEsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFJSSxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvbkNhcmQsIElvbkNhcmRDb250ZW50LCBJb25JY29uLCBJb25Ta2VsZXRvblRleHQgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBQcmVzZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJlc2V0cyc7XG5pbXBvcnQgeyBTdGF0c0NhcmRNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQgeyB0cmVuZGluZ1VwLCB0cmVuZGluZ0Rvd24sIHJlbW92ZSwgYW5hbHl0aWNzLCBwZW9wbGUsIGNhc2gsIGNhcnQsIGV5ZSwgaGVhcnQsIHN0YXIgfSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5cbmFkZEljb25zKHsgdHJlbmRpbmdVcCwgdHJlbmRpbmdEb3duLCByZW1vdmUsIGFuYWx5dGljcywgcGVvcGxlLCBjYXNoLCBjYXJ0LCBleWUsIGhlYXJ0LCBzdGFyIH0pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtc3RhdHMtY2FyZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIElvbkNhcmQsIElvbkNhcmRDb250ZW50LCBJb25JY29uLCBJb25Ta2VsZXRvblRleHRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxpb24tY2FyZFxuICAgICAgY2xhc3M9XCJzdGF0cy1jYXJkXCJcbiAgICAgIFtjbGFzc109XCJnZXRCYWNrZ3JvdW5kQ2xhc3MoKVwiXG4gICAgICBbc3R5bGUuLS1jYXJkLWNvbG9yXT1cImdldENhcmRDb2xvcigpXCJcbiAgICAgIChjbGljayk9XCJjYXJkQ2xpY2suZW1pdCgpXCJcbiAgICA+XG4gICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0YXRzLWhlYWRlclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RhdHMtdGl0bGVcIj57eyByZXNvbHZlZFByb3BzLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgIEBpZiAocmVzb2x2ZWRQcm9wcy5pY29uKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwicmVzb2x2ZWRQcm9wcy5pY29uXCIgY2xhc3M9XCJzdGF0cy1pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0cy12YWx1ZVwiPlxuICAgICAgICAgIEBpZiAocmVzb2x2ZWRQcm9wcy5sb2FkaW5nKSB7XG4gICAgICAgICAgICA8aW9uLXNrZWxldG9uLXRleHQgW2FuaW1hdGVkXT1cInRydWVcIiBzdHlsZT1cIndpZHRoOiA2MCU7IGhlaWdodDogMzJweDtcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgQGlmIChyZXNvbHZlZFByb3BzLnByZWZpeCkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInByZWZpeFwiPnt7IHJlc29sdmVkUHJvcHMucHJlZml4IH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPnt7IHJlc29sdmVkUHJvcHMudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICBAaWYgKHJlc29sdmVkUHJvcHMuc3VmZml4KSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VmZml4XCI+e3sgcmVzb2x2ZWRQcm9wcy5zdWZmaXggfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICBAaWYgKHJlc29sdmVkUHJvcHMudHJlbmQgJiYgIXJlc29sdmVkUHJvcHMubG9hZGluZykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0cy10cmVuZFwiIFtjbGFzc109XCJnZXRUcmVuZENsYXNzKClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBbbmFtZV09XCJnZXRUcmVuZEljb24oKVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRyZW5kLXZhbHVlXCI+e3sgTWF0aC5hYnMocmVzb2x2ZWRQcm9wcy50cmVuZC52YWx1ZSkgfX0lPC9zcGFuPlxuICAgICAgICAgICAgQGlmIChyZXNvbHZlZFByb3BzLnRyZW5kLmxhYmVsKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHJlbmQtbGFiZWxcIj57eyByZXNvbHZlZFByb3BzLnRyZW5kLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChyZXNvbHZlZFByb3BzLmZvb3RlciAmJiAhcmVzb2x2ZWRQcm9wcy5sb2FkaW5nKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0YXRzLWZvb3RlclwiPnt7IHJlc29sdmVkUHJvcHMuZm9vdGVyIH19PC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKHJlc29sdmVkUHJvcHMuZGVzY3JpcHRpb24gJiYgIXJlc29sdmVkUHJvcHMubG9hZGluZykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0cy1kZXNjcmlwdGlvblwiPnt7IHJlc29sdmVkUHJvcHMuZGVzY3JpcHRpb24gfX08L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAocmVzb2x2ZWRQcm9wcy5sb2dvICYmICFyZXNvbHZlZFByb3BzLmxvYWRpbmcpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHMtbG9nb1wiPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICBbc3JjXT1cInJlc29sdmVkUHJvcHMubG9nby5zcmNcIlxuICAgICAgICAgICAgICBbYWx0XT1cInJlc29sdmVkUHJvcHMubG9nby5hbHRcIlxuICAgICAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJyZXNvbHZlZFByb3BzLmxvZ28ubWF4SGVpZ2h0IHx8IDMyXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJyZXNvbHZlZFByb3BzLmxvZ28ubWF4V2lkdGggfHwgMTIwXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICA8L2lvbi1jYXJkPlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9zdGF0cy1jYXJkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuLyoqXG4gKiB2YWwtc3RhdHMtY2FyZFxuICpcbiAqIEEgY2FyZCBjb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgc3RhdGlzdGljcyBhbmQgS1BJcy5cbiAqIFN1cHBvcnRzIHByZXNldHMgZm9yIHJldXNhYmxlIGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIEBleGFtcGxlIFdpdGggcHJlc2V0OlxuICogPHZhbC1zdGF0cy1jYXJkIHByZXNldD1cImtwaVwiIFtwcm9wc109XCJ7IHRpdGxlOiAnVXNlcnMnLCB2YWx1ZTogMTAwMCB9XCI+PC92YWwtc3RhdHMtY2FyZD5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZVxuICogPHZhbC1zdGF0cy1jYXJkIFtwcm9wc109XCJ7XG4gKiAgIHRpdGxlOiAnVG90YWwgVXNlcnMnLFxuICogICB2YWx1ZTogMTI1MDAsXG4gKiAgIGljb246ICdwZW9wbGUnLFxuICogICBjb2xvcjogJ3ByaW1hcnknXG4gKiB9XCI+PC92YWwtc3RhdHMtY2FyZD5cbiAqXG4gKiBAaW5wdXQgcHJlc2V0OiBzdHJpbmcgLSBOYW1lIG9mIHByZXNldCB0byBhcHBseVxuICogQGlucHV0IHByb3BzOiBTdGF0c0NhcmRNZXRhZGF0YSAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBzdGF0cyBjYXJkXG4gKiBAb3V0cHV0IGNhcmRDbGljazogdm9pZCAtIEVtaXRzIHdoZW4gY2FyZCBpcyBjbGlja2VkXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGF0c0NhcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgcHJlc2V0cyA9IGluamVjdChQcmVzZXRTZXJ2aWNlKTtcblxuICBASW5wdXQoKSBwcmVzZXQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHByb3BzOiBQYXJ0aWFsPFN0YXRzQ2FyZE1ldGFkYXRhPiA9IHt9O1xuXG4gIHJlc29sdmVkUHJvcHM6IFN0YXRzQ2FyZE1ldGFkYXRhID0ge30gYXMgU3RhdHNDYXJkTWV0YWRhdGE7XG5cbiAgQE91dHB1dCgpIGNhcmRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBNYXRoID0gTWF0aDtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnJlc29sdmVQcm9wcygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydwcmVzZXQnXSB8fCBjaGFuZ2VzWydwcm9wcyddKSB7XG4gICAgICB0aGlzLnJlc29sdmVQcm9wcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVByb3BzKCk6IHZvaWQge1xuICAgIGNvbnN0IHByZXNldFByb3BzID0gdGhpcy5wcmVzZXRcbiAgICAgID8gKHRoaXMucHJlc2V0cy5nZXQoJ3N0YXRzQ2FyZCcsIHRoaXMucHJlc2V0KSBhcyBQYXJ0aWFsPFN0YXRzQ2FyZE1ldGFkYXRhPilcbiAgICAgIDoge307XG5cbiAgICB0aGlzLnJlc29sdmVkUHJvcHMgPSB7XG4gICAgICAuLi5wcmVzZXRQcm9wcyxcbiAgICAgIC4uLnRoaXMucHJvcHMsXG4gICAgfSBhcyBTdGF0c0NhcmRNZXRhZGF0YTtcbiAgfVxuXG4gIGdldENhcmRDb2xvcigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbG9yID0gdGhpcy5yZXNvbHZlZFByb3BzLmNvbG9yIHx8ICdwcmltYXJ5JztcbiAgICByZXR1cm4gYHZhcigtLWlvbi1jb2xvci0ke2NvbG9yfSlgO1xuICB9XG5cbiAgZ2V0QmFja2dyb3VuZENsYXNzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYmcgPSB0aGlzLnJlc29sdmVkUHJvcHMuYmFja2dyb3VuZCB8fCAnbGlnaHQnO1xuICAgIHJldHVybiBgYmFja2dyb3VuZC0ke2JnfWA7XG4gIH1cblxuICBnZXRUcmVuZENsYXNzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5yZXNvbHZlZFByb3BzLnRyZW5kPy5kaXJlY3Rpb24gfHwgJ25ldXRyYWwnO1xuICAgIGNvbnN0IGludmVydCA9IHRoaXMucmVzb2x2ZWRQcm9wcy50cmVuZD8uaW52ZXJ0Q29sb3JzO1xuXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gJ25ldXRyYWwnKSByZXR1cm4gJ3RyZW5kLW5ldXRyYWwnO1xuICAgIGlmIChkaXJlY3Rpb24gPT09ICd1cCcpIHJldHVybiBpbnZlcnQgPyAndHJlbmQtZG93bicgOiAndHJlbmQtdXAnO1xuICAgIHJldHVybiBpbnZlcnQgPyAndHJlbmQtdXAnIDogJ3RyZW5kLWRvd24nO1xuICB9XG5cbiAgZ2V0VHJlbmRJY29uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5yZXNvbHZlZFByb3BzLnRyZW5kPy5kaXJlY3Rpb24gfHwgJ25ldXRyYWwnO1xuICAgIGlmIChkaXJlY3Rpb24gPT09ICd1cCcpIHJldHVybiAndHJlbmRpbmctdXAnO1xuICAgIGlmIChkaXJlY3Rpb24gPT09ICdkb3duJykgcmV0dXJuICd0cmVuZGluZy1kb3duJztcbiAgICByZXR1cm4gJ3JlbW92ZSc7XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL3N0YXRzLWNhcmQvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbG9yIH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuXG4vKipcbiAqIFRyZW5kIGNvbmZpZ3VyYXRpb24gZm9yIHN0YXRzIGNhcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdHNUcmVuZCB7XG4gIC8qKiBUcmVuZCB2YWx1ZSAocGVyY2VudGFnZSBvciBhYnNvbHV0ZSkgKi9cbiAgdmFsdWU6IG51bWJlcjtcbiAgLyoqIFRyZW5kIGRpcmVjdGlvbiAqL1xuICBkaXJlY3Rpb246ICd1cCcgfCAnZG93bicgfCAnbmV1dHJhbCc7XG4gIC8qKiBUcmVuZCBsYWJlbCAoZS5nLiwgXCJ2cyBsYXN0IG1vbnRoXCIpICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogSW52ZXJ0IGNvbG9ycyAodXA9YmFkLCBkb3duPWdvb2QpICovXG4gIGludmVydENvbG9ycz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTWV0YWRhdGEgZm9yIHRoZSBzdGF0cyBjYXJkIGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGF0c0NhcmRNZXRhZGF0YSB7XG4gIC8qKiBTdGF0IHRpdGxlL2xhYmVsICovXG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKiBNYWluIHN0YXQgdmFsdWUgKi9cbiAgdmFsdWU6IHN0cmluZyB8IG51bWJlcjtcbiAgLyoqIFZhbHVlIHByZWZpeCAoZS5nLiwgXCIkXCIsIFwi4oKsXCIpICovXG4gIHByZWZpeD86IHN0cmluZztcbiAgLyoqIFZhbHVlIHN1ZmZpeCAoZS5nLiwgXCIlXCIsIFwidXNlcnNcIikgKi9cbiAgc3VmZml4Pzogc3RyaW5nO1xuICAvKiogSWNvbiBuYW1lICovXG4gIGljb24/OiBzdHJpbmc7XG4gIC8qKiBDYXJkIGNvbG9yICovXG4gIGNvbG9yPzogQ29sb3I7XG4gIC8qKiBCYWNrZ3JvdW5kIHN0eWxlICovXG4gIGJhY2tncm91bmQ/OiAnc29saWQnIHwgJ2dyYWRpZW50JyB8ICdsaWdodCc7XG4gIC8qKiBUcmVuZCBpbmRpY2F0b3IgKi9cbiAgdHJlbmQ/OiBTdGF0c1RyZW5kO1xuICAvKiogRm9vdGVyIHRleHQgKi9cbiAgZm9vdGVyPzogc3RyaW5nO1xuICAvKiogTG9hZGluZyBzdGF0ZSAqL1xuICBsb2FkaW5nPzogYm9vbGVhbjtcbiAgLyoqIFVuaXF1ZSB0b2tlbiBpZGVudGlmaWVyICovXG4gIHRva2VuPzogc3RyaW5nO1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL3N0YXRzLWNhcmQvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbG9yIH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuXG4vKipcbiAqIExvZ28gY29uZmlndXJhdGlvbiBmb3Igc3RhdHMgY2FyZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGF0c0NhcmRMb2dvIHtcbiAgLyoqIExvZ28gaW1hZ2UgVVJMICovXG4gIHNyYzogc3RyaW5nO1xuICAvKiogQWx0IHRleHQgZm9yIGFjY2Vzc2liaWxpdHkgKi9cbiAgYWx0OiBzdHJpbmc7XG4gIC8qKiBNYXggaGVpZ2h0IGluIHBpeGVscyAoZGVmYXVsdDogMzIpICovXG4gIG1heEhlaWdodD86IG51bWJlcjtcbiAgLyoqIE1heCB3aWR0aCBpbiBwaXhlbHMgKGRlZmF1bHQ6IDEyMCkgKi9cbiAgbWF4V2lkdGg/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVHJlbmQgY29uZmlndXJhdGlvbiBmb3Igc3RhdHMgY2FyZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGF0c1RyZW5kIHtcbiAgLyoqIFRyZW5kIHZhbHVlIChwZXJjZW50YWdlIG9yIGFic29sdXRlKSAqL1xuICB2YWx1ZTogbnVtYmVyO1xuICAvKiogVHJlbmQgZGlyZWN0aW9uICovXG4gIGRpcmVjdGlvbjogJ3VwJyB8ICdkb3duJyB8ICduZXV0cmFsJztcbiAgLyoqIFRyZW5kIGxhYmVsIChlLmcuLCBcInZzIGxhc3QgbW9udGhcIikgKi9cbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBJbnZlcnQgY29sb3JzICh1cD1iYWQsIGRvd249Z29vZCkgKi9cbiAgaW52ZXJ0Q29sb3JzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNZXRhZGF0YSBmb3IgdGhlIHN0YXRzIGNhcmQgY29tcG9uZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRzQ2FyZE1ldGFkYXRhIHtcbiAgLyoqIFN0YXQgdGl0bGUvbGFiZWwgKi9cbiAgdGl0bGU6IHN0cmluZztcbiAgLyoqIE1haW4gc3RhdCB2YWx1ZSAqL1xuICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyO1xuICAvKiogVmFsdWUgcHJlZml4IChlLmcuLCBcIiRcIiwgXCLigqxcIikgKi9cbiAgcHJlZml4Pzogc3RyaW5nO1xuICAvKiogVmFsdWUgc3VmZml4IChlLmcuLCBcIiVcIiwgXCJ1c2Vyc1wiKSAqL1xuICBzdWZmaXg/OiBzdHJpbmc7XG4gIC8qKiBJY29uIG5hbWUgKi9cbiAgaWNvbj86IHN0cmluZztcbiAgLyoqIENhcmQgY29sb3IgKi9cbiAgY29sb3I/OiBDb2xvcjtcbiAgLyoqIEJhY2tncm91bmQgc3R5bGUgKi9cbiAgYmFja2dyb3VuZD86ICdzb2xpZCcgfCAnZ3JhZGllbnQnIHwgJ2xpZ2h0JztcbiAgLyoqIFRyZW5kIGluZGljYXRvciAqL1xuICB0cmVuZD86IFN0YXRzVHJlbmQ7XG4gIC8qKiBGb290ZXIgdGV4dCAqL1xuICBmb290ZXI/OiBzdHJpbmc7XG4gIC8qKiBEZXNjcmlwdGlvbiB0ZXh0IChmb3IgR2l0TGFiLXN0eWxlIGxheW91dCkgKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBDb21wYW55L2JyYW5kIGxvZ28gZGlzcGxheWVkIGF0IGJvdHRvbSAqL1xuICBsb2dvPzogU3RhdHNDYXJkTG9nbztcbiAgLyoqIExvYWRpbmcgc3RhdGUgKi9cbiAgbG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBVbmlxdWUgdG9rZW4gaWRlbnRpZmllciAqL1xuICB0b2tlbj86IHN0cmluZztcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL3VzZXJuYW1lLWlucHV0L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbXBvbmVudFN0YXRlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG4vKipcbiAqIE1ldGFkYXRhIGZvciBVc2VybmFtZUlucHV0Q29tcG9uZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJuYW1lSW5wdXRNZXRhZGF0YSB7XG4gIC8qKiBGb3JtQ29udHJvbCBwYXJhIGVsIHZhbG9yIGRlbCB1c2VybmFtZSAqL1xuICBjb250cm9sOiBGb3JtQ29udHJvbDxzdHJpbmc+O1xuICAvKiogTGFiZWwgZGVsIGNhbXBvICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogUGxhY2Vob2xkZXIgZGVsIGlucHV0ICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKiogUHJlZmlqbyB2aXN1YWwgKGRlZmF1bHQ6ICdAJykgKi9cbiAgcHJlZml4Pzogc3RyaW5nO1xuICAvKiogTG9uZ2l0dWQgbcOtbmltYSBwZXJtaXRpZGEgKGRlZmF1bHQ6IDMpICovXG4gIG1pbkxlbmd0aD86IG51bWJlcjtcbiAgLyoqIExvbmdpdHVkIG3DoXhpbWEgcGVybWl0aWRhIChkZWZhdWx0OiAzMCkgKi9cbiAgbWF4TGVuZ3RoPzogbnVtYmVyO1xuICAvKiogRnVuY2nDs24gcGFyYSB2ZXJpZmljYXIgZGlzcG9uaWJpbGlkYWQgZGVsIHVzZXJuYW1lICovXG4gIGNoZWNrQXZhaWxhYmlsaXR5PzogKGhhbmRsZTogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogTWVuc2FqZXMgZGUgZXJyb3IgcGVyc29uYWxpemFkb3MgKi9cbiAgZXJyb3JzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIEVzdGFkbyBkZWwgY29tcG9uZW50ZSAqL1xuICBzdGF0ZT86IENvbXBvbmVudFN0YXRlO1xuICAvKiogTW9zdHJhciBpbmRpY2Fkb3IgZGUgZGlzcG9uaWJpbGlkYWQgKGRlZmF1bHQ6IHRydWUpICovXG4gIHNob3dBdmFpbGFiaWxpdHk/OiBib29sZWFuO1xuICAvKiogRGVib3VuY2UgZW4gbXMgcGFyYSBjaGVjayBkZSBkaXNwb25pYmlsaWRhZCAoZGVmYXVsdDogNTAwKSAqL1xuICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRXN0YWRvIGRlIGRpc3BvbmliaWxpZGFkIGRlbCB1c2VybmFtZS5cbiAqL1xuZXhwb3J0IHR5cGUgVXNlcm5hbWVBdmFpbGFiaWxpdHlTdGF0dXMgPSAnaWRsZScgfCAnY2hlY2tpbmcnIHwgJ2F2YWlsYWJsZScgfCAndGFrZW4nIHwgJ2ludmFsaWQnO1xuIl19
@@ -0,0 +1,260 @@
1
+ import { Component, Input, signal, computed, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ReactiveFormsModule } from '@angular/forms';
4
+ import { IonInput, IonSpinner, IonIcon, IonText } from '@ionic/angular/standalone';
5
+ import { Subject, debounceTime, distinctUntilChanged, takeUntil, switchMap, of, catchError } from 'rxjs';
6
+ import { addIcons } from 'ionicons';
7
+ import { checkmarkCircle, closeCircle, alertCircle } from 'ionicons/icons';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/forms";
10
+ addIcons({ checkmarkCircle, closeCircle, alertCircle });
11
+ /**
12
+ * Username Input Component
13
+ *
14
+ * Input especializado para usernames/handles con:
15
+ * - Prefijo '@' visual
16
+ * - Validación de formato (alfanuméricos y _)
17
+ * - Normalización automática (lowercase, sin espacios)
18
+ * - Verificación de disponibilidad con debounce
19
+ * - Estados visuales: available, taken, checking
20
+ *
21
+ * @example
22
+ * <val-username-input
23
+ * [props]="{
24
+ * control: usernameControl,
25
+ * label: 'Nombre de usuario',
26
+ * placeholder: 'tu_username',
27
+ * checkAvailability: checkFn
28
+ * }"
29
+ * />
30
+ */
31
+ export class UsernameInputComponent {
32
+ constructor() {
33
+ this.destroy$ = new Subject();
34
+ this.checkAvailability$ = new Subject();
35
+ // Signals
36
+ this.isFocused = signal(false);
37
+ this.availabilityStatus = signal('idle');
38
+ // Computed
39
+ this.hasError = computed(() => {
40
+ const control = this.props?.control;
41
+ return control?.touched && control?.invalid;
42
+ });
43
+ this.showStatusMessage = computed(() => {
44
+ const status = this.availabilityStatus();
45
+ return status === 'available' || status === 'taken';
46
+ });
47
+ this.statusColor = computed(() => {
48
+ return this.availabilityStatus() === 'available' ? 'success' : 'danger';
49
+ });
50
+ this.statusMessage = computed(() => {
51
+ const status = this.availabilityStatus();
52
+ if (status === 'available')
53
+ return 'Username disponible';
54
+ if (status === 'taken')
55
+ return 'Username ya está en uso';
56
+ return '';
57
+ });
58
+ this.errorMessage = computed(() => {
59
+ const control = this.props?.control;
60
+ if (!control?.errors)
61
+ return '';
62
+ const errors = this.props?.errors || {};
63
+ if (control.errors['required']) {
64
+ return errors['required'] || 'El username es requerido';
65
+ }
66
+ if (control.errors['minlength']) {
67
+ const min = this.props?.minLength || 3;
68
+ return errors['minlength'] || `Mínimo ${min} caracteres`;
69
+ }
70
+ if (control.errors['maxlength']) {
71
+ const max = this.props?.maxLength || 30;
72
+ return errors['maxlength'] || `Máximo ${max} caracteres`;
73
+ }
74
+ if (control.errors['pattern']) {
75
+ return errors['pattern'] || 'Solo letras, números y guión bajo (_)';
76
+ }
77
+ return '';
78
+ });
79
+ }
80
+ ngOnInit() {
81
+ this.setupAvailabilityCheck();
82
+ }
83
+ ngOnDestroy() {
84
+ this.destroy$.next();
85
+ this.destroy$.complete();
86
+ }
87
+ onFocus() {
88
+ this.isFocused.set(true);
89
+ }
90
+ onBlur() {
91
+ this.isFocused.set(false);
92
+ this.props.control.markAsTouched();
93
+ }
94
+ onInput(event) {
95
+ const input = event.detail.value || '';
96
+ // Normalize: lowercase, remove spaces, only allow valid chars
97
+ const normalized = this.normalizeUsername(input);
98
+ if (normalized !== input) {
99
+ this.props.control.setValue(normalized, { emitEvent: false });
100
+ }
101
+ // Trigger availability check
102
+ if (this.props.checkAvailability && this.isValidFormat(normalized)) {
103
+ this.checkAvailability$.next(normalized);
104
+ }
105
+ else if (!this.isValidFormat(normalized) && normalized.length > 0) {
106
+ this.availabilityStatus.set('invalid');
107
+ }
108
+ else {
109
+ this.availabilityStatus.set('idle');
110
+ }
111
+ }
112
+ setupAvailabilityCheck() {
113
+ if (!this.props?.checkAvailability)
114
+ return;
115
+ this.checkAvailability$
116
+ .pipe(debounceTime(this.props.debounceTime || 500), distinctUntilChanged(), switchMap(username => {
117
+ if (!username || username.length < (this.props.minLength || 3)) {
118
+ return of(null);
119
+ }
120
+ this.availabilityStatus.set('checking');
121
+ return this.props.checkAvailability(username).pipe(catchError(() => of(null)));
122
+ }), takeUntil(this.destroy$))
123
+ .subscribe(available => {
124
+ if (available === null) {
125
+ this.availabilityStatus.set('idle');
126
+ }
127
+ else if (available) {
128
+ this.availabilityStatus.set('available');
129
+ }
130
+ else {
131
+ this.availabilityStatus.set('taken');
132
+ }
133
+ });
134
+ }
135
+ normalizeUsername(value) {
136
+ return value
137
+ .toLowerCase()
138
+ .replace(/\s/g, '')
139
+ .replace(/[^a-z0-9_]/g, '');
140
+ }
141
+ isValidFormat(value) {
142
+ if (!value)
143
+ return false;
144
+ const minLen = this.props?.minLength || 3;
145
+ const maxLen = this.props?.maxLength || 30;
146
+ const pattern = /^[a-z0-9_]+$/;
147
+ return value.length >= minLen && value.length <= maxLen && pattern.test(value);
148
+ }
149
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UsernameInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
150
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: UsernameInputComponent, isStandalone: true, selector: "val-username-input", inputs: { props: "props" }, ngImport: i0, template: `
151
+ <div class="username-input-container">
152
+ @if (props.label) {
153
+ <label class="username-label">{{ props.label }}</label>
154
+ }
155
+
156
+ <div class="username-input-wrapper" [class.focused]="isFocused()" [class.error]="hasError()">
157
+ <span class="username-prefix">{{ props.prefix || '@' }}</span>
158
+ <ion-input
159
+ [formControl]="props.control"
160
+ type="text"
161
+ [placeholder]="props.placeholder || 'username'"
162
+ [maxlength]="props.maxLength || 30"
163
+ (ionFocus)="onFocus()"
164
+ (ionBlur)="onBlur()"
165
+ (ionInput)="onInput($event)"
166
+ class="username-field"
167
+ />
168
+
169
+ @if (props.showAvailability !== false) {
170
+ <div class="availability-indicator">
171
+ @switch (availabilityStatus()) {
172
+ @case ('checking') {
173
+ <ion-spinner name="crescent" class="checking-spinner" />
174
+ }
175
+ @case ('available') {
176
+ <ion-icon name="checkmark-circle" class="status-icon available" />
177
+ }
178
+ @case ('taken') {
179
+ <ion-icon name="close-circle" class="status-icon taken" />
180
+ }
181
+ @case ('invalid') {
182
+ <ion-icon name="alert-circle" class="status-icon invalid" />
183
+ }
184
+ }
185
+ </div>
186
+ }
187
+ </div>
188
+
189
+ @if (showStatusMessage()) {
190
+ <ion-text [color]="statusColor()" class="status-message">
191
+ <small>{{ statusMessage() }}</small>
192
+ </ion-text>
193
+ }
194
+
195
+ @if (hasError() && errorMessage()) {
196
+ <ion-text color="danger" class="error-message">
197
+ <small>{{ errorMessage() }}</small>
198
+ </ion-text>
199
+ }
200
+ </div>
201
+ `, isInline: true, styles: [".username-input-container{margin-bottom:1rem}.username-label{display:block;font-size:.875rem;font-weight:500;color:var(--ion-color-dark);margin-bottom:.5rem}.username-input-wrapper{display:flex;align-items:center;background:var(--ion-background-color, #fff);border:1px solid var(--ion-border-color, #e0e0e0);border-radius:8px;padding:0 .75rem;transition:border-color .2s,box-shadow .2s}.username-input-wrapper.focused{border-color:var(--ion-color-primary);box-shadow:0 0 0 2px var(--ion-color-primary-tint)}.username-input-wrapper.error{border-color:var(--ion-color-danger)}.username-prefix{font-size:1rem;font-weight:500;color:var(--ion-color-medium);-webkit-user-select:none;user-select:none}.username-field{flex:1;--padding-start: .25rem;--padding-end: 0;--background: transparent;font-size:1rem}.username-field::part(native){padding-left:.25rem}.availability-indicator{display:flex;align-items:center;justify-content:center;width:24px;height:24px;margin-left:.5rem}.checking-spinner{width:18px;height:18px;--color: var(--ion-color-medium)}.status-icon{font-size:1.25rem}.status-icon.available{color:var(--ion-color-success)}.status-icon.taken{color:var(--ion-color-danger)}.status-icon.invalid{color:var(--ion-color-warning)}.status-message,.error-message{display:block;margin-top:.25rem;padding-left:.25rem}:host-context(body.dark){.username-input-wrapper{background:var(--ion-color-step-50);border-color:var(--ion-color-step-150)}.username-label{color:var(--ion-color-light)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }] }); }
202
+ }
203
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UsernameInputComponent, decorators: [{
204
+ type: Component,
205
+ args: [{ selector: 'val-username-input', standalone: true, imports: [CommonModule, ReactiveFormsModule, IonInput, IonSpinner, IonIcon, IonText], template: `
206
+ <div class="username-input-container">
207
+ @if (props.label) {
208
+ <label class="username-label">{{ props.label }}</label>
209
+ }
210
+
211
+ <div class="username-input-wrapper" [class.focused]="isFocused()" [class.error]="hasError()">
212
+ <span class="username-prefix">{{ props.prefix || '@' }}</span>
213
+ <ion-input
214
+ [formControl]="props.control"
215
+ type="text"
216
+ [placeholder]="props.placeholder || 'username'"
217
+ [maxlength]="props.maxLength || 30"
218
+ (ionFocus)="onFocus()"
219
+ (ionBlur)="onBlur()"
220
+ (ionInput)="onInput($event)"
221
+ class="username-field"
222
+ />
223
+
224
+ @if (props.showAvailability !== false) {
225
+ <div class="availability-indicator">
226
+ @switch (availabilityStatus()) {
227
+ @case ('checking') {
228
+ <ion-spinner name="crescent" class="checking-spinner" />
229
+ }
230
+ @case ('available') {
231
+ <ion-icon name="checkmark-circle" class="status-icon available" />
232
+ }
233
+ @case ('taken') {
234
+ <ion-icon name="close-circle" class="status-icon taken" />
235
+ }
236
+ @case ('invalid') {
237
+ <ion-icon name="alert-circle" class="status-icon invalid" />
238
+ }
239
+ }
240
+ </div>
241
+ }
242
+ </div>
243
+
244
+ @if (showStatusMessage()) {
245
+ <ion-text [color]="statusColor()" class="status-message">
246
+ <small>{{ statusMessage() }}</small>
247
+ </ion-text>
248
+ }
249
+
250
+ @if (hasError() && errorMessage()) {
251
+ <ion-text color="danger" class="error-message">
252
+ <small>{{ errorMessage() }}</small>
253
+ </ion-text>
254
+ }
255
+ </div>
256
+ `, styles: [".username-input-container{margin-bottom:1rem}.username-label{display:block;font-size:.875rem;font-weight:500;color:var(--ion-color-dark);margin-bottom:.5rem}.username-input-wrapper{display:flex;align-items:center;background:var(--ion-background-color, #fff);border:1px solid var(--ion-border-color, #e0e0e0);border-radius:8px;padding:0 .75rem;transition:border-color .2s,box-shadow .2s}.username-input-wrapper.focused{border-color:var(--ion-color-primary);box-shadow:0 0 0 2px var(--ion-color-primary-tint)}.username-input-wrapper.error{border-color:var(--ion-color-danger)}.username-prefix{font-size:1rem;font-weight:500;color:var(--ion-color-medium);-webkit-user-select:none;user-select:none}.username-field{flex:1;--padding-start: .25rem;--padding-end: 0;--background: transparent;font-size:1rem}.username-field::part(native){padding-left:.25rem}.availability-indicator{display:flex;align-items:center;justify-content:center;width:24px;height:24px;margin-left:.5rem}.checking-spinner{width:18px;height:18px;--color: var(--ion-color-medium)}.status-icon{font-size:1.25rem}.status-icon.available{color:var(--ion-color-success)}.status-icon.taken{color:var(--ion-color-danger)}.status-icon.invalid{color:var(--ion-color-warning)}.status-message,.error-message{display:block;margin-top:.25rem;padding-left:.25rem}:host-context(body.dark){.username-input-wrapper{background:var(--ion-color-step-50);border-color:var(--ion-color-step-150)}.username-label{color:var(--ion-color-light)}}\n"] }]
257
+ }], propDecorators: { props: [{
258
+ type: Input
259
+ }] } });
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcm5hbWUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy91c2VybmFtZS1pbnB1dC91c2VybmFtZS1pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBR0wsTUFBTSxFQUNOLFFBQVEsR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFHM0UsUUFBUSxDQUFDLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBRXhEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBK0pILE1BQU0sT0FBTyxzQkFBc0I7SUE5Sm5DO1FBaUtVLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQy9CLHVCQUFrQixHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFFbkQsVUFBVTtRQUNWLGNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsdUJBQWtCLEdBQUcs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QUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFhO1FBQ2pDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDO1FBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUMzQyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUM7UUFDL0IsT0FBTyxLQUFLLENBQUMsTUFBTSxJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLE1BQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pGLENBQUM7K0dBeklVLHNCQUFzQjttR0FBdEIsc0JBQXNCLDBHQTFKdkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1EVCxxaERBcERTLFlBQVksOEJBQUUsbUJBQW1CLDZkQUFFLFFBQVEsOGVBQUUsVUFBVSx5R0FBRSxPQUFPLDJKQUFFLE9BQU87OzRGQTJKeEUsc0JBQXNCO2tCQTlKbEMsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxZQUMxRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbURUOzhCQXdHUSxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgc2lnbmFsLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uSW5wdXQsIElvblNwaW5uZXIsIElvbkljb24sIElvblRleHQgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IFN1YmplY3QsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCwgc3dpdGNoTWFwLCBvZiwgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQgeyBjaGVja21hcmtDaXJjbGUsIGNsb3NlQ2lyY2xlLCBhbGVydENpcmNsZSB9IGZyb20gJ2lvbmljb25zL2ljb25zJztcbmltcG9ydCB7IFVzZXJuYW1lSW5wdXRNZXRhZGF0YSwgVXNlcm5hbWVBdmFpbGFiaWxpdHlTdGF0dXMgfSBmcm9tICcuL3R5cGVzJztcblxuYWRkSWNvbnMoeyBjaGVja21hcmtDaXJjbGUsIGNsb3NlQ2lyY2xlLCBhbGVydENpcmNsZSB9KTtcblxuLyoqXG4gKiBVc2VybmFtZSBJbnB1dCBDb21wb25lbnRcbiAqXG4gKiBJbnB1dCBlc3BlY2lhbGl6YWRvIHBhcmEgdXNlcm5hbWVzL2hhbmRsZXMgY29uOlxuICogLSBQcmVmaWpvICdAJyB2aXN1YWxcbiAqIC0gVmFsaWRhY2nDs24gZGUgZm9ybWF0byAoYWxmYW51bcOpcmljb3MgeSBfKVxuICogLSBOb3JtYWxpemFjacOzbiBhdXRvbcOhdGljYSAobG93ZXJjYXNlLCBzaW4gZXNwYWNpb3MpXG4gKiAtIFZlcmlmaWNhY2nDs24gZGUgZGlzcG9uaWJpbGlkYWQgY29uIGRlYm91bmNlXG4gKiAtIEVzdGFkb3MgdmlzdWFsZXM6IGF2YWlsYWJsZSwgdGFrZW4sIGNoZWNraW5nXG4gKlxuICogQGV4YW1wbGVcbiAqIDx2YWwtdXNlcm5hbWUtaW5wdXRcbiAqICAgW3Byb3BzXT1cIntcbiAqICAgICBjb250cm9sOiB1c2VybmFtZUNvbnRyb2wsXG4gKiAgICAgbGFiZWw6ICdOb21icmUgZGUgdXN1YXJpbycsXG4gKiAgICAgcGxhY2Vob2xkZXI6ICd0dV91c2VybmFtZScsXG4gKiAgICAgY2hlY2tBdmFpbGFiaWxpdHk6IGNoZWNrRm5cbiAqICAgfVwiXG4gKiAvPlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtdXNlcm5hbWUtaW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBJb25JbnB1dCwgSW9uU3Bpbm5lciwgSW9uSWNvbiwgSW9uVGV4dF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInVzZXJuYW1lLWlucHV0LWNvbnRhaW5lclwiPlxuICAgICAgQGlmIChwcm9wcy5sYWJlbCkge1xuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ1c2VybmFtZS1sYWJlbFwiPnt7IHByb3BzLmxhYmVsIH19PC9sYWJlbD5cbiAgICAgIH1cblxuICAgICAgPGRpdiBjbGFzcz1cInVzZXJuYW1lLWlucHV0LXdyYXBwZXJcIiBbY2xhc3MuZm9jdXNlZF09XCJpc0ZvY3VzZWQoKVwiIFtjbGFzcy5lcnJvcl09XCJoYXNFcnJvcigpXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXNlcm5hbWUtcHJlZml4XCI+e3sgcHJvcHMucHJlZml4IHx8ICdAJyB9fTwvc3Bhbj5cbiAgICAgICAgPGlvbi1pbnB1dFxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJwcm9wcy5jb250cm9sXCJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInByb3BzLnBsYWNlaG9sZGVyIHx8ICd1c2VybmFtZSdcIlxuICAgICAgICAgIFttYXhsZW5ndGhdPVwicHJvcHMubWF4TGVuZ3RoIHx8IDMwXCJcbiAgICAgICAgICAoaW9uRm9jdXMpPVwib25Gb2N1cygpXCJcbiAgICAgICAgICAoaW9uQmx1cik9XCJvbkJsdXIoKVwiXG4gICAgICAgICAgKGlvbklucHV0KT1cIm9uSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJ1c2VybmFtZS1maWVsZFwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgQGlmIChwcm9wcy5zaG93QXZhaWxhYmlsaXR5ICE9PSBmYWxzZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmFpbGFiaWxpdHktaW5kaWNhdG9yXCI+XG4gICAgICAgICAgICBAc3dpdGNoIChhdmFpbGFiaWxpdHlTdGF0dXMoKSkge1xuICAgICAgICAgICAgICBAY2FzZSAoJ2NoZWNraW5nJykge1xuICAgICAgICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY3Jlc2NlbnRcIiBjbGFzcz1cImNoZWNraW5nLXNwaW5uZXJcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBjYXNlICgnYXZhaWxhYmxlJykge1xuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hlY2ttYXJrLWNpcmNsZVwiIGNsYXNzPVwic3RhdHVzLWljb24gYXZhaWxhYmxlXCIgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAY2FzZSAoJ3Rha2VuJykge1xuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2UtY2lyY2xlXCIgY2xhc3M9XCJzdGF0dXMtaWNvbiB0YWtlblwiIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGNhc2UgKCdpbnZhbGlkJykge1xuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiYWxlcnQtY2lyY2xlXCIgY2xhc3M9XCJzdGF0dXMtaWNvbiBpbnZhbGlkXCIgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgQGlmIChzaG93U3RhdHVzTWVzc2FnZSgpKSB7XG4gICAgICAgIDxpb24tdGV4dCBbY29sb3JdPVwic3RhdHVzQ29sb3IoKVwiIGNsYXNzPVwic3RhdHVzLW1lc3NhZ2VcIj5cbiAgICAgICAgICA8c21hbGw+e3sgc3RhdHVzTWVzc2FnZSgpIH19PC9zbWFsbD5cbiAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgIH1cblxuICAgICAgQGlmIChoYXNFcnJvcigpICYmIGVycm9yTWVzc2FnZSgpKSB7XG4gICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhbmdlclwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPlxuICAgICAgICAgIDxzbWFsbD57eyBlcnJvck1lc3NhZ2UoKSB9fTwvc21hbGw+XG4gICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICAudXNlcm5hbWUtaW5wdXQtY29udGFpbmVyIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG4gICAgfVxuXG4gICAgLnVzZXJuYW1lLWxhYmVsIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xuICAgIH1cblxuICAgIC51c2VybmFtZS1pbnB1dC13cmFwcGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWJhY2tncm91bmQtY29sb3IsICNmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgI2UwZTBlMCk7XG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICBwYWRkaW5nOiAwIDAuNzVyZW07XG4gICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4ycywgYm94LXNoYWRvdyAwLjJzO1xuICAgIH1cblxuICAgIC51c2VybmFtZS1pbnB1dC13cmFwcGVyLmZvY3VzZWQge1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0taW9uLWNvbG9yLXByaW1hcnktdGludCk7XG4gICAgfVxuXG4gICAgLnVzZXJuYW1lLWlucHV0LXdyYXBwZXIuZXJyb3Ige1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyKTtcbiAgICB9XG5cbiAgICAudXNlcm5hbWUtcHJlZml4IHtcbiAgICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICB9XG5cbiAgICAudXNlcm5hbWUtZmllbGQge1xuICAgICAgZmxleDogMTtcbiAgICAgIC0tcGFkZGluZy1zdGFydDogMC4yNXJlbTtcbiAgICAgIC0tcGFkZGluZy1lbmQ6IDA7XG4gICAgICAtLWJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgZm9udC1zaXplOiAxcmVtO1xuICAgIH1cblxuICAgIC51c2VybmFtZS1maWVsZDo6cGFydChuYXRpdmUpIHtcbiAgICAgIHBhZGRpbmctbGVmdDogMC4yNXJlbTtcbiAgICB9XG5cbiAgICAuYXZhaWxhYmlsaXR5LWluZGljYXRvciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgICBtYXJnaW4tbGVmdDogMC41cmVtO1xuICAgIH1cblxuICAgIC5jaGVja2luZy1zcGlubmVyIHtcbiAgICAgIHdpZHRoOiAxOHB4O1xuICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgLS1jb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgfVxuXG4gICAgLnN0YXR1cy1pY29uIHtcbiAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgICB9XG5cbiAgICAuc3RhdHVzLWljb24uYXZhaWxhYmxlIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3Itc3VjY2Vzcyk7XG4gICAgfVxuXG4gICAgLnN0YXR1cy1pY29uLnRha2VuIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyKTtcbiAgICB9XG5cbiAgICAuc3RhdHVzLWljb24uaW52YWxpZCB7XG4gICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXdhcm5pbmcpO1xuICAgIH1cblxuICAgIC5zdGF0dXMtbWVzc2FnZSxcbiAgICAuZXJyb3ItbWVzc2FnZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbi10b3A6IDAuMjVyZW07XG4gICAgICBwYWRkaW5nLWxlZnQ6IDAuMjVyZW07XG4gICAgfVxuXG4gICAgLyogRGFyayBtb2RlICovXG4gICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIHtcbiAgICAgIC51c2VybmFtZS1pbnB1dC13cmFwcGVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLXN0ZXAtNTApO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWlvbi1jb2xvci1zdGVwLTE1MCk7XG4gICAgICB9XG5cbiAgICAgIC51c2VybmFtZS1sYWJlbCB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbGlnaHQpO1xuICAgICAgfVxuICAgIH1cbiAgYF0sXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJuYW1lSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHByb3BzITogVXNlcm5hbWVJbnB1dE1ldGFkYXRhO1xuXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIGNoZWNrQXZhaWxhYmlsaXR5JCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICAvLyBTaWduYWxzXG4gIGlzRm9jdXNlZCA9IHNpZ25hbChmYWxzZSk7XG4gIGF2YWlsYWJpbGl0eVN0YXR1cyA9IHNpZ25hbDxVc2VybmFtZUF2YWlsYWJpbGl0eVN0YXR1cz4oJ2lkbGUnKTtcblxuICAvLyBDb21wdXRlZFxuICBoYXNFcnJvciA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5wcm9wcz8uY29udHJvbDtcbiAgICByZXR1cm4gY29udHJvbD8udG91Y2hlZCAmJiBjb250cm9sPy5pbnZhbGlkO1xuICB9KTtcblxuICBzaG93U3RhdHVzTWVzc2FnZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLmF2YWlsYWJpbGl0eVN0YXR1cygpO1xuICAgIHJldHVybiBzdGF0dXMgPT09ICdhdmFpbGFibGUnIHx8IHN0YXR1cyA9PT0gJ3Rha2VuJztcbiAgfSk7XG5cbiAgc3RhdHVzQ29sb3IgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuYXZhaWxhYmlsaXR5U3RhdHVzKCkgPT09ICdhdmFpbGFibGUnID8gJ3N1Y2Nlc3MnIDogJ2Rhbmdlcic7XG4gIH0pO1xuXG4gIHN0YXR1c01lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5hdmFpbGFiaWxpdHlTdGF0dXMoKTtcbiAgICBpZiAoc3RhdHVzID09PSAnYXZhaWxhYmxlJykgcmV0dXJuICdVc2VybmFtZSBkaXNwb25pYmxlJztcbiAgICBpZiAoc3RhdHVzID09PSAndGFrZW4nKSByZXR1cm4gJ1VzZXJuYW1lIHlhIGVzdMOhIGVuIHVzbyc7XG4gICAgcmV0dXJuICcnO1xuICB9KTtcblxuICBlcnJvck1lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMucHJvcHM/LmNvbnRyb2w7XG4gICAgaWYgKCFjb250cm9sPy5lcnJvcnMpIHJldHVybiAnJztcblxuICAgIGNvbnN0IGVycm9ycyA9IHRoaXMucHJvcHM/LmVycm9ycyB8fCB7fTtcblxuICAgIGlmIChjb250cm9sLmVycm9yc1sncmVxdWlyZWQnXSkge1xuICAgICAgcmV0dXJuIGVycm9yc1sncmVxdWlyZWQnXSB8fCAnRWwgdXNlcm5hbWUgZXMgcmVxdWVyaWRvJztcbiAgICB9XG4gICAgaWYgKGNvbnRyb2wuZXJyb3JzWydtaW5sZW5ndGgnXSkge1xuICAgICAgY29uc3QgbWluID0gdGhpcy5wcm9wcz8ubWluTGVuZ3RoIHx8IDM7XG4gICAgICByZXR1cm4gZXJyb3JzWydtaW5sZW5ndGgnXSB8fCBgTcOtbmltbyAke21pbn0gY2FyYWN0ZXJlc2A7XG4gICAgfVxuICAgIGlmIChjb250cm9sLmVycm9yc1snbWF4bGVuZ3RoJ10pIHtcbiAgICAgIGNvbnN0IG1heCA9IHRoaXMucHJvcHM/Lm1heExlbmd0aCB8fCAzMDtcbiAgICAgIHJldHVybiBlcnJvcnNbJ21heGxlbmd0aCddIHx8IGBNw6F4aW1vICR7bWF4fSBjYXJhY3RlcmVzYDtcbiAgICB9XG4gICAgaWYgKGNvbnRyb2wuZXJyb3JzWydwYXR0ZXJuJ10pIHtcbiAgICAgIHJldHVybiBlcnJvcnNbJ3BhdHRlcm4nXSB8fCAnU29sbyBsZXRyYXMsIG7Dum1lcm9zIHkgZ3Vpw7NuIGJham8gKF8pJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH0pO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0dXBBdmFpbGFiaWxpdHlDaGVjaygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgb25Gb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9jdXNlZC5zZXQodHJ1ZSk7XG4gIH1cblxuICBvbkJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvY3VzZWQuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnByb3BzLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICB9XG5cbiAgb25JbnB1dChldmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LmRldGFpbC52YWx1ZSB8fCAnJztcbiAgICAvLyBOb3JtYWxpemU6IGxvd2VyY2FzZSwgcmVtb3ZlIHNwYWNlcywgb25seSBhbGxvdyB2YWxpZCBjaGFyc1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZVVzZXJuYW1lKGlucHV0KTtcblxuICAgIGlmIChub3JtYWxpemVkICE9PSBpbnB1dCkge1xuICAgICAgdGhpcy5wcm9wcy5jb250cm9sLnNldFZhbHVlKG5vcm1hbGl6ZWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyIGF2YWlsYWJpbGl0eSBjaGVja1xuICAgIGlmICh0aGlzLnByb3BzLmNoZWNrQXZhaWxhYmlsaXR5ICYmIHRoaXMuaXNWYWxpZEZvcm1hdChub3JtYWxpemVkKSkge1xuICAgICAgdGhpcy5jaGVja0F2YWlsYWJpbGl0eSQubmV4dChub3JtYWxpemVkKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzVmFsaWRGb3JtYXQobm9ybWFsaXplZCkgJiYgbm9ybWFsaXplZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmF2YWlsYWJpbGl0eVN0YXR1cy5zZXQoJ2ludmFsaWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hdmFpbGFiaWxpdHlTdGF0dXMuc2V0KCdpZGxlJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEF2YWlsYWJpbGl0eUNoZWNrKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcm9wcz8uY2hlY2tBdmFpbGFiaWxpdHkpIHJldHVybjtcblxuICAgIHRoaXMuY2hlY2tBdmFpbGFiaWxpdHkkXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMucHJvcHMuZGVib3VuY2VUaW1lIHx8IDUwMCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHN3aXRjaE1hcCh1c2VybmFtZSA9PiB7XG4gICAgICAgICAgaWYgKCF1c2VybmFtZSB8fCB1c2VybmFtZS5sZW5ndGggPCAodGhpcy5wcm9wcy5taW5MZW5ndGggfHwgMykpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmF2YWlsYWJpbGl0eVN0YXR1cy5zZXQoJ2NoZWNraW5nJyk7XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGVja0F2YWlsYWJpbGl0eSEodXNlcm5hbWUpLnBpcGUoXG4gICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoYXZhaWxhYmxlID0+IHtcbiAgICAgICAgaWYgKGF2YWlsYWJsZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuYXZhaWxhYmlsaXR5U3RhdHVzLnNldCgnaWRsZScpO1xuICAgICAgICB9IGVsc2UgaWYgKGF2YWlsYWJsZSkge1xuICAgICAgICAgIHRoaXMuYXZhaWxhYmlsaXR5U3RhdHVzLnNldCgnYXZhaWxhYmxlJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hdmFpbGFiaWxpdHlTdGF0dXMuc2V0KCd0YWtlbicpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplVXNlcm5hbWUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2UoL1xccy9nLCAnJylcbiAgICAgIC5yZXBsYWNlKC9bXmEtejAtOV9dL2csICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZEZvcm1hdCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IG1pbkxlbiA9IHRoaXMucHJvcHM/Lm1pbkxlbmd0aCB8fCAzO1xuICAgIGNvbnN0IG1heExlbiA9IHRoaXMucHJvcHM/Lm1heExlbmd0aCB8fCAzMDtcbiAgICBjb25zdCBwYXR0ZXJuID0gL15bYS16MC05X10rJC87XG4gICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA+PSBtaW5MZW4gJiYgdmFsdWUubGVuZ3RoIDw9IG1heExlbiAmJiBwYXR0ZXJuLnRlc3QodmFsdWUpO1xuICB9XG59XG4iXX0=