valtech-components 2.0.848 → 2.0.850
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/molecules/empty-state/empty-state.component.mjs +167 -0
- package/esm2022/lib/components/molecules/empty-state/factory.mjs +54 -0
- package/esm2022/lib/components/molecules/empty-state/types.mjs +2 -0
- package/esm2022/lib/components/organisms/mfa-modal/mfa-modal.component.mjs +19 -5
- package/esm2022/lib/components/organisms/wizard/wizard.component.mjs +9 -1
- package/esm2022/lib/services/i18n/default-content.mjs +3 -1
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/public-api.mjs +4 -1
- package/fesm2022/valtech-components.mjs +232 -6
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/molecules/empty-state/empty-state.component.d.ts +43 -0
- package/lib/components/molecules/empty-state/factory.d.ts +64 -0
- package/lib/components/molecules/empty-state/types.d.ts +58 -0
- package/lib/components/organisms/mfa-modal/mfa-modal.component.d.ts +4 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, computed, input, } from '@angular/core';
|
|
3
|
+
import { IonIcon } from '@ionic/angular/standalone';
|
|
4
|
+
import { addIcons } from 'ionicons';
|
|
5
|
+
import { alertCircleOutline, cloudOfflineOutline, documentOutline, } from 'ionicons/icons';
|
|
6
|
+
import { ButtonComponent } from '../../atoms/button/button.component';
|
|
7
|
+
import { TextComponent } from '../../atoms/text/text.component';
|
|
8
|
+
import { TitleComponent } from '../../atoms/title/title.component';
|
|
9
|
+
import { ComponentStates } from '../../types';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
// Registra los 3 iconos default (variantes). Si la página pasa un icono custom
|
|
12
|
+
// en `props.icon`, debe registrarlo ella misma con addIcons() — Ionic
|
|
13
|
+
// standalone no resuelve nombres global, solo los del registry local.
|
|
14
|
+
addIcons({
|
|
15
|
+
alertCircleOutline,
|
|
16
|
+
cloudOfflineOutline,
|
|
17
|
+
documentOutline,
|
|
18
|
+
});
|
|
19
|
+
const DEFAULT_ICON_BY_VARIANT = {
|
|
20
|
+
empty: 'document-outline',
|
|
21
|
+
error: 'alert-circle-outline',
|
|
22
|
+
offline: 'cloud-offline-outline',
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* `<val-empty-state>` — molecule declarativo para estados de "no hay datos /
|
|
26
|
+
* hubo error / sin red". Reemplaza el patrón ad-hoc (ion-icon + val-title +
|
|
27
|
+
* val-text + val-button) que cada página venía improvisando.
|
|
28
|
+
*
|
|
29
|
+
* Uso típico:
|
|
30
|
+
*
|
|
31
|
+
* ```html
|
|
32
|
+
* @if (loading()) {
|
|
33
|
+
* <val-skeleton-layout [props]="..." />
|
|
34
|
+
* } @else if (errorState(); as e) {
|
|
35
|
+
* <val-empty-state [props]="e" />
|
|
36
|
+
* } @else if (items().length === 0) {
|
|
37
|
+
* <val-empty-state [props]="emptyProps" />
|
|
38
|
+
* } @else {
|
|
39
|
+
* <!-- contenido normal -->
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* I18n: las cadenas vienen ya traducidas en las props (la lib es agnóstica de
|
|
44
|
+
* namespaces). Para wiring automático desde un error capturado, usar el
|
|
45
|
+
* helper `createErrorStateProps(err, ...)` (`valtech-components`).
|
|
46
|
+
*/
|
|
47
|
+
export class EmptyStateComponent {
|
|
48
|
+
constructor() {
|
|
49
|
+
this.props = input.required();
|
|
50
|
+
/** Variante resuelta (default `'empty'`). */
|
|
51
|
+
this.variantClass = computed(() => this.props().variant ?? 'empty');
|
|
52
|
+
/** Icono final — custom si se pasó, default de la variante si no. */
|
|
53
|
+
this.iconName = computed(() => this.props().icon ?? DEFAULT_ICON_BY_VARIANT[this.variantClass()]);
|
|
54
|
+
/** Tamaño en px. Default 64. */
|
|
55
|
+
this.iconSize = computed(() => this.props().iconSize ?? 64);
|
|
56
|
+
/**
|
|
57
|
+
* Props del botón CTA. Construidas a partir de `props().action`. El estado
|
|
58
|
+
* `WORKING` se aplica cuando `action.loading === true` (spinner mientras
|
|
59
|
+
* el handler corre).
|
|
60
|
+
*/
|
|
61
|
+
this.ctaProps = computed(() => {
|
|
62
|
+
const action = this.props().action;
|
|
63
|
+
return {
|
|
64
|
+
text: action?.label ?? '',
|
|
65
|
+
color: 'dark',
|
|
66
|
+
type: 'button',
|
|
67
|
+
fill: 'solid',
|
|
68
|
+
size: 'default',
|
|
69
|
+
shape: 'round',
|
|
70
|
+
state: action?.loading ? ComponentStates.WORKING : ComponentStates.ENABLED,
|
|
71
|
+
};
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EmptyStateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
75
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: EmptyStateComponent, isStandalone: true, selector: "val-empty-state", inputs: { props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
76
|
+
<section
|
|
77
|
+
class="empty-state"
|
|
78
|
+
[class.empty-state--error]="variantClass() === 'error'"
|
|
79
|
+
[class.empty-state--offline]="variantClass() === 'offline'"
|
|
80
|
+
role="status"
|
|
81
|
+
aria-live="polite"
|
|
82
|
+
>
|
|
83
|
+
<ion-icon
|
|
84
|
+
class="empty-state__icon"
|
|
85
|
+
[name]="iconName()"
|
|
86
|
+
[style.font-size.px]="iconSize()"
|
|
87
|
+
aria-hidden="true"
|
|
88
|
+
/>
|
|
89
|
+
|
|
90
|
+
<val-title
|
|
91
|
+
[props]="{
|
|
92
|
+
size: 'large',
|
|
93
|
+
color: 'dark',
|
|
94
|
+
bold: true,
|
|
95
|
+
content: props().title,
|
|
96
|
+
}"
|
|
97
|
+
/>
|
|
98
|
+
|
|
99
|
+
@if (props().description; as desc) {
|
|
100
|
+
<val-text
|
|
101
|
+
[props]="{
|
|
102
|
+
size: 'large',
|
|
103
|
+
color: 'medium',
|
|
104
|
+
bold: false,
|
|
105
|
+
content: desc,
|
|
106
|
+
}"
|
|
107
|
+
/>
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
@if (props().action; as a) {
|
|
111
|
+
<val-button
|
|
112
|
+
class="empty-state__cta"
|
|
113
|
+
[props]="ctaProps()"
|
|
114
|
+
(click)="a.handler()"
|
|
115
|
+
/>
|
|
116
|
+
}
|
|
117
|
+
</section>
|
|
118
|
+
`, isInline: true, styles: [".empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:12px;padding:32px 16px;min-height:240px}.empty-state__icon{color:var(--ion-color-medium)}.empty-state--error .empty-state__icon{color:var(--ion-color-warning, #ffb800)}.empty-state--offline .empty-state__icon{color:var(--ion-color-medium);opacity:.7}.empty-state__cta{margin-top:8px}\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"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
119
|
+
}
|
|
120
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EmptyStateComponent, decorators: [{
|
|
121
|
+
type: Component,
|
|
122
|
+
args: [{ selector: 'val-empty-state', standalone: true, imports: [CommonModule, IonIcon, ButtonComponent, TextComponent, TitleComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
123
|
+
<section
|
|
124
|
+
class="empty-state"
|
|
125
|
+
[class.empty-state--error]="variantClass() === 'error'"
|
|
126
|
+
[class.empty-state--offline]="variantClass() === 'offline'"
|
|
127
|
+
role="status"
|
|
128
|
+
aria-live="polite"
|
|
129
|
+
>
|
|
130
|
+
<ion-icon
|
|
131
|
+
class="empty-state__icon"
|
|
132
|
+
[name]="iconName()"
|
|
133
|
+
[style.font-size.px]="iconSize()"
|
|
134
|
+
aria-hidden="true"
|
|
135
|
+
/>
|
|
136
|
+
|
|
137
|
+
<val-title
|
|
138
|
+
[props]="{
|
|
139
|
+
size: 'large',
|
|
140
|
+
color: 'dark',
|
|
141
|
+
bold: true,
|
|
142
|
+
content: props().title,
|
|
143
|
+
}"
|
|
144
|
+
/>
|
|
145
|
+
|
|
146
|
+
@if (props().description; as desc) {
|
|
147
|
+
<val-text
|
|
148
|
+
[props]="{
|
|
149
|
+
size: 'large',
|
|
150
|
+
color: 'medium',
|
|
151
|
+
bold: false,
|
|
152
|
+
content: desc,
|
|
153
|
+
}"
|
|
154
|
+
/>
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
@if (props().action; as a) {
|
|
158
|
+
<val-button
|
|
159
|
+
class="empty-state__cta"
|
|
160
|
+
[props]="ctaProps()"
|
|
161
|
+
(click)="a.handler()"
|
|
162
|
+
/>
|
|
163
|
+
}
|
|
164
|
+
</section>
|
|
165
|
+
`, styles: [".empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:12px;padding:32px 16px;min-height:240px}.empty-state__icon{color:var(--ion-color-medium)}.empty-state--error .empty-state__icon{color:var(--ion-color-warning, #ffb800)}.empty-state--offline .empty-state__icon{color:var(--ion-color-medium);opacity:.7}.empty-state__cta{margin-top:8px}\n"] }]
|
|
166
|
+
}] });
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktc3RhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsZUFBZSxHQUNoQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBa0IsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUc5RCwrRUFBK0U7QUFDL0Usc0VBQXNFO0FBQ3RFLHNFQUFzRTtBQUN0RSxRQUFRLENBQUM7SUFDUCxrQkFBa0I7SUFDbEIsbUJBQW1CO0lBQ25CLGVBQWU7Q0FDaEIsQ0FBQyxDQUFDO0FBRUgsTUFBTSx1QkFBdUIsR0FBc0M7SUFDakUsS0FBSyxFQUFFLGtCQUFrQjtJQUN6QixLQUFLLEVBQUUsc0JBQXNCO0lBQzdCLE9BQU8sRUFBRSx1QkFBdUI7Q0FDakMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBOEVILE1BQU0sT0FBTyxtQkFBbUI7SUE3RWhDO1FBOEVFLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFzQixDQUFDO1FBRTdDLDZDQUE2QztRQUNuQyxpQkFBWSxHQUFHLFFBQVEsQ0FDL0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQ3RDLENBQUM7UUFFRixxRUFBcUU7UUFDM0QsYUFBUSxHQUFHLFFBQVEsQ0FDM0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FDeEUsQ0FBQztRQUVGLGdDQUFnQztRQUN0QixhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7UUFFakU7Ozs7V0FJRztRQUNPLGFBQVEsR0FBRyxRQUFRLENBQWlCLEdBQUcsRUFBRTtZQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ25DLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDekIsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPO2FBQ3pELENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7S0FDSjsrR0FqQ1ksbUJBQW1CO21HQUFuQixtQkFBbUIsOE1BeEVwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJDVCxzZEE3Q1MsWUFBWSwrQkFBRSxPQUFPLDJKQUFFLGVBQWUsMEdBQUUsYUFBYSx3RUFBRSxjQUFjOzs0RkEwRXBFLG1CQUFtQjtrQkE3RS9CLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxtQkFDL0QsdUJBQXVCLENBQUMsTUFBTSxZQUNyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJDVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgaW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQge1xuICBhbGVydENpcmNsZU91dGxpbmUsXG4gIGNsb3VkT2ZmbGluZU91dGxpbmUsXG4gIGRvY3VtZW50T3V0bGluZSxcbn0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25NZXRhZGF0YSwgQ29tcG9uZW50U3RhdGVzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgRW1wdHlTdGF0ZU1ldGFkYXRhLCBFbXB0eVN0YXRlVmFyaWFudCB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyBSZWdpc3RyYSBsb3MgMyBpY29ub3MgZGVmYXVsdCAodmFyaWFudGVzKS4gU2kgbGEgcMOhZ2luYSBwYXNhIHVuIGljb25vIGN1c3RvbVxuLy8gZW4gYHByb3BzLmljb25gLCBkZWJlIHJlZ2lzdHJhcmxvIGVsbGEgbWlzbWEgY29uIGFkZEljb25zKCkg4oCUIElvbmljXG4vLyBzdGFuZGFsb25lIG5vIHJlc3VlbHZlIG5vbWJyZXMgZ2xvYmFsLCBzb2xvIGxvcyBkZWwgcmVnaXN0cnkgbG9jYWwuXG5hZGRJY29ucyh7XG4gIGFsZXJ0Q2lyY2xlT3V0bGluZSxcbiAgY2xvdWRPZmZsaW5lT3V0bGluZSxcbiAgZG9jdW1lbnRPdXRsaW5lLFxufSk7XG5cbmNvbnN0IERFRkFVTFRfSUNPTl9CWV9WQVJJQU5UOiBSZWNvcmQ8RW1wdHlTdGF0ZVZhcmlhbnQsIHN0cmluZz4gPSB7XG4gIGVtcHR5OiAnZG9jdW1lbnQtb3V0bGluZScsXG4gIGVycm9yOiAnYWxlcnQtY2lyY2xlLW91dGxpbmUnLFxuICBvZmZsaW5lOiAnY2xvdWQtb2ZmbGluZS1vdXRsaW5lJyxcbn07XG5cbi8qKlxuICogYDx2YWwtZW1wdHktc3RhdGU+YCDigJQgbW9sZWN1bGUgZGVjbGFyYXRpdm8gcGFyYSBlc3RhZG9zIGRlIFwibm8gaGF5IGRhdG9zIC9cbiAqIGh1Ym8gZXJyb3IgLyBzaW4gcmVkXCIuIFJlZW1wbGF6YSBlbCBwYXRyw7NuIGFkLWhvYyAoaW9uLWljb24gKyB2YWwtdGl0bGUgK1xuICogdmFsLXRleHQgKyB2YWwtYnV0dG9uKSBxdWUgY2FkYSBww6FnaW5hIHZlbsOtYSBpbXByb3Zpc2FuZG8uXG4gKlxuICogVXNvIHTDrXBpY286XG4gKlxuICogYGBgaHRtbFxuICogQGlmIChsb2FkaW5nKCkpIHtcbiAqICAgPHZhbC1za2VsZXRvbi1sYXlvdXQgW3Byb3BzXT1cIi4uLlwiIC8+XG4gKiB9IEBlbHNlIGlmIChlcnJvclN0YXRlKCk7IGFzIGUpIHtcbiAqICAgPHZhbC1lbXB0eS1zdGF0ZSBbcHJvcHNdPVwiZVwiIC8+XG4gKiB9IEBlbHNlIGlmIChpdGVtcygpLmxlbmd0aCA9PT0gMCkge1xuICogICA8dmFsLWVtcHR5LXN0YXRlIFtwcm9wc109XCJlbXB0eVByb3BzXCIgLz5cbiAqIH0gQGVsc2Uge1xuICogICA8IS0tIGNvbnRlbmlkbyBub3JtYWwgLS0+XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBJMThuOiBsYXMgY2FkZW5hcyB2aWVuZW4geWEgdHJhZHVjaWRhcyBlbiBsYXMgcHJvcHMgKGxhIGxpYiBlcyBhZ27Ds3N0aWNhIGRlXG4gKiBuYW1lc3BhY2VzKS4gUGFyYSB3aXJpbmcgYXV0b23DoXRpY28gZGVzZGUgdW4gZXJyb3IgY2FwdHVyYWRvLCB1c2FyIGVsXG4gKiBoZWxwZXIgYGNyZWF0ZUVycm9yU3RhdGVQcm9wcyhlcnIsIC4uLilgIChgdmFsdGVjaC1jb21wb25lbnRzYCkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1lbXB0eS1zdGF0ZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIElvbkljb24sIEJ1dHRvbkNvbXBvbmVudCwgVGV4dENvbXBvbmVudCwgVGl0bGVDb21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8c2VjdGlvblxuICAgICAgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiXG4gICAgICBbY2xhc3MuZW1wdHktc3RhdGUtLWVycm9yXT1cInZhcmlhbnRDbGFzcygpID09PSAnZXJyb3InXCJcbiAgICAgIFtjbGFzcy5lbXB0eS1zdGF0ZS0tb2ZmbGluZV09XCJ2YXJpYW50Q2xhc3MoKSA9PT0gJ29mZmxpbmUnXCJcbiAgICAgIHJvbGU9XCJzdGF0dXNcIlxuICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICA+XG4gICAgICA8aW9uLWljb25cbiAgICAgICAgY2xhc3M9XCJlbXB0eS1zdGF0ZV9faWNvblwiXG4gICAgICAgIFtuYW1lXT1cImljb25OYW1lKClcIlxuICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cImljb25TaXplKClcIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgLz5cblxuICAgICAgPHZhbC10aXRsZVxuICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgIHNpemU6ICdsYXJnZScsXG4gICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICAgIGNvbnRlbnQ6IHByb3BzKCkudGl0bGUsXG4gICAgICAgIH1cIlxuICAgICAgLz5cblxuICAgICAgQGlmIChwcm9wcygpLmRlc2NyaXB0aW9uOyBhcyBkZXNjKSB7XG4gICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICBzaXplOiAnbGFyZ2UnLFxuICAgICAgICAgICAgY29sb3I6ICdtZWRpdW0nLFxuICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICBjb250ZW50OiBkZXNjLFxuICAgICAgICAgIH1cIlxuICAgICAgICAvPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHByb3BzKCkuYWN0aW9uOyBhcyBhKSB7XG4gICAgICAgIDx2YWwtYnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJlbXB0eS1zdGF0ZV9fY3RhXCJcbiAgICAgICAgICBbcHJvcHNdPVwiY3RhUHJvcHMoKVwiXG4gICAgICAgICAgKGNsaWNrKT1cImEuaGFuZGxlcigpXCJcbiAgICAgICAgLz5cbiAgICAgIH1cbiAgICA8L3NlY3Rpb24+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5lbXB0eS1zdGF0ZSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgICAgcGFkZGluZzogMzJweCAxNnB4O1xuICAgICAgICBtaW4taGVpZ2h0OiAyNDBweDtcbiAgICAgIH1cbiAgICAgIC5lbXB0eS1zdGF0ZV9faWNvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtKTtcbiAgICAgIH1cbiAgICAgIC5lbXB0eS1zdGF0ZS0tZXJyb3IgLmVtcHR5LXN0YXRlX19pY29uIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci13YXJuaW5nLCAjZmZiODAwKTtcbiAgICAgIH1cbiAgICAgIC5lbXB0eS1zdGF0ZS0tb2ZmbGluZSAuZW1wdHktc3RhdGVfX2ljb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICAgIH1cbiAgICAgIC5lbXB0eS1zdGF0ZV9fY3RhIHtcbiAgICAgICAgbWFyZ2luLXRvcDogOHB4O1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEVtcHR5U3RhdGVDb21wb25lbnQge1xuICBwcm9wcyA9IGlucHV0LnJlcXVpcmVkPEVtcHR5U3RhdGVNZXRhZGF0YT4oKTtcblxuICAvKiogVmFyaWFudGUgcmVzdWVsdGEgKGRlZmF1bHQgYCdlbXB0eSdgKS4gKi9cbiAgcHJvdGVjdGVkIHZhcmlhbnRDbGFzcyA9IGNvbXB1dGVkPEVtcHR5U3RhdGVWYXJpYW50PihcbiAgICAoKSA9PiB0aGlzLnByb3BzKCkudmFyaWFudCA/PyAnZW1wdHknLFxuICApO1xuXG4gIC8qKiBJY29ubyBmaW5hbCDigJQgY3VzdG9tIHNpIHNlIHBhc8OzLCBkZWZhdWx0IGRlIGxhIHZhcmlhbnRlIHNpIG5vLiAqL1xuICBwcm90ZWN0ZWQgaWNvbk5hbWUgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnByb3BzKCkuaWNvbiA/PyBERUZBVUxUX0lDT05fQllfVkFSSUFOVFt0aGlzLnZhcmlhbnRDbGFzcygpXSxcbiAgKTtcblxuICAvKiogVGFtYcOxbyBlbiBweC4gRGVmYXVsdCA2NC4gKi9cbiAgcHJvdGVjdGVkIGljb25TaXplID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wcm9wcygpLmljb25TaXplID8/IDY0KTtcblxuICAvKipcbiAgICogUHJvcHMgZGVsIGJvdMOzbiBDVEEuIENvbnN0cnVpZGFzIGEgcGFydGlyIGRlIGBwcm9wcygpLmFjdGlvbmAuIEVsIGVzdGFkb1xuICAgKiBgV09SS0lOR2Agc2UgYXBsaWNhIGN1YW5kbyBgYWN0aW9uLmxvYWRpbmcgPT09IHRydWVgIChzcGlubmVyIG1pZW50cmFzXG4gICAqIGVsIGhhbmRsZXIgY29ycmUpLlxuICAgKi9cbiAgcHJvdGVjdGVkIGN0YVByb3BzID0gY29tcHV0ZWQ8QnV0dG9uTWV0YWRhdGE+KCgpID0+IHtcbiAgICBjb25zdCBhY3Rpb24gPSB0aGlzLnByb3BzKCkuYWN0aW9uO1xuICAgIHJldHVybiB7XG4gICAgICB0ZXh0OiBhY3Rpb24/LmxhYmVsID8/ICcnLFxuICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgZmlsbDogJ3NvbGlkJyxcbiAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgc3RhdGU6IGFjdGlvbj8ubG9hZGluZyA/IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HIDogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgfSBhcyBCdXR0b25NZXRhZGF0YTtcbiAgfSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { interpretError } from '../../../services/errors/interpret-error';
|
|
2
|
+
/**
|
|
3
|
+
* Convierte un error capturado en `EmptyStateMetadata` listo para
|
|
4
|
+
* `<val-empty-state>`. Decide la variante (`offline` vs `error`) según
|
|
5
|
+
* `interpretError(err).isNetwork`.
|
|
6
|
+
*
|
|
7
|
+
* Uso típico en una page:
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* readonly errorState = computed(() => {
|
|
11
|
+
* const err = this.loadError();
|
|
12
|
+
* if (!err) return null;
|
|
13
|
+
* return createErrorStateProps(err, {
|
|
14
|
+
* title: { offline: this.t('offlineTitle'), error: this.t('errorTitle') },
|
|
15
|
+
* description: { offline: this.t('offlineHint'), error: interpretError(err).message },
|
|
16
|
+
* retryLabel: this.t('retry'),
|
|
17
|
+
* onRetry: () => this.reload(),
|
|
18
|
+
* retrying: this.reloading(),
|
|
19
|
+
* });
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* En el template:
|
|
24
|
+
*
|
|
25
|
+
* ```html
|
|
26
|
+
* @if (errorState(); as e) {
|
|
27
|
+
* <val-empty-state [props]="e" />
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* Para escenarios SIN error (lista vacía), construir `EmptyStateMetadata`
|
|
32
|
+
* manualmente con `variant: 'empty'` — no es lo que este helper resuelve.
|
|
33
|
+
*/
|
|
34
|
+
export function createErrorStateProps(err, opts) {
|
|
35
|
+
const interpreted = interpretError(err);
|
|
36
|
+
const variant = interpreted.isNetwork ? 'offline' : 'error';
|
|
37
|
+
const pick = (v) => typeof v === 'object' && v !== null && 'offline' in v
|
|
38
|
+
? v[variant]
|
|
39
|
+
: v;
|
|
40
|
+
const action = opts.retryLabel && opts.onRetry
|
|
41
|
+
? {
|
|
42
|
+
label: opts.retryLabel,
|
|
43
|
+
handler: opts.onRetry,
|
|
44
|
+
loading: opts.retrying ?? false,
|
|
45
|
+
}
|
|
46
|
+
: undefined;
|
|
47
|
+
return {
|
|
48
|
+
variant,
|
|
49
|
+
title: pick(opts.title),
|
|
50
|
+
description: opts.description ? pick(opts.description) : undefined,
|
|
51
|
+
action,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tb2xlY3VsZXMvZW1wdHktc3RhdGUvZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUE0QjFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxHQUFZLEVBQ1osSUFBMEI7SUFFMUIsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBRTVELE1BQU0sSUFBSSxHQUFHLENBQUksQ0FBK0IsRUFBSyxFQUFFLENBQ3JELE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLFNBQVMsSUFBSSxDQUFDO1FBQ25ELENBQUMsQ0FBRSxDQUE4QixDQUFDLE9BQU8sQ0FBQztRQUMxQyxDQUFDLENBQUUsQ0FBTyxDQUFDO0lBRWYsTUFBTSxNQUFNLEdBQ1YsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTztRQUM3QixDQUFDLENBQUM7WUFDRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDdEIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUs7U0FDaEM7UUFDSCxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRWhCLE9BQU87UUFDTCxPQUFPO1FBQ1AsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQ2xFLE1BQU07S0FDUCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVycHJldEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXJyb3JzL2ludGVycHJldC1lcnJvcic7XG5pbXBvcnQgeyBFbXB0eVN0YXRlTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBPcGNpb25lcyBkZWwgaGVscGVyLiBMb3Mgc3RyaW5ncyBzb24gcmVxdWVyaWRvcyBwYXJhIG1hbnRlbmVyIGVsXG4gKiBjb21wb25lbnRlIGkxOG4tYWduw7NzdGljbyDigJQgbGEgcMOhZ2luYSBsb3MgcmVzdWVsdmUgKGNvbiBzdSBuYW1lc3BhY2UpIHkgbG9zXG4gKiBwYXNhIHlhIHRyYWR1Y2lkb3MuIEVsIGhlbHBlciBzb2xvIGRlY2lkZSBsYSBWQVJJQU5URSB5IGNvbXBvbmUgbG9zIHByb3BzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUVycm9yU3RhdGVPcHRzIHtcbiAgLyoqXG4gICAqIFTDrXR1bG8gYSBtb3N0cmFyLiBDb252ZW5jacOzbjogbGEgcMOhZ2luYSBsbyByZXN1ZWx2ZSBwb3IgZXNjZW5hcmlvOlxuICAgKiAgLSByZWQgY2HDrWRhICAgICDihpIgYHQoJ29mZmxpbmVUaXRsZScpYFxuICAgKiAgLSBlcnJvciBiYWNrZW5kIOKGkiBgdCgnZXJyb3JUaXRsZScpYFxuICAgKlxuICAgKiBTaSBwYXPDoXMgdW4gc29sbyBzdHJpbmcsIHNlIHVzYSBlbiBhbWJhcyB2YXJpYW50ZXMuIFNpIHBhc8OhcyBlbCBvYmpldG8sXG4gICAqIGVsIGhlbHBlciBlbGlnZSBzZWfDum4gYGlzTmV0d29ya2AgZGVsIGVycm9yIGludGVycHJldGFkby5cbiAgICovXG4gIHRpdGxlOiBzdHJpbmcgfCB7IG9mZmxpbmU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB9O1xuICAvKiogRGVzY3JpcGNpw7NuIGEgbW9zdHJhciAodMOtcGljYW1lbnRlIGVsIGBtZXNzYWdlYCBkZWwgYmFja2VuZCBlbiBlc3Bhw7FvbCkuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgeyBvZmZsaW5lOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfTtcbiAgLyoqIExhYmVsIGRlbCBib3TDs24gQ1RBICh0w61waWNhbWVudGUgYHQoJ3JldHJ5JylgKS4gU2kgc2Ugb21pdGUsIG5vIHNlIG11ZXN0cmEgYm90w7NuLiAqL1xuICByZXRyeUxhYmVsPzogc3RyaW5nO1xuICAvKiogSGFuZGxlciBpbnZvY2FkbyBhbCBjbGljayBkZSByZXRyeS4gUmVxdWVyaWRvIHNpIGByZXRyeUxhYmVsYCBlc3TDoS4gKi9cbiAgb25SZXRyeT86ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAvKiogYHRydWVgIG1pZW50cmFzIGVsIHJldHJ5IGVzdMOhIGNvcnJpZW5kbyDigJQgZWwgYm90w7NuIHBhc2EgYSBXT1JLSU5HLiAqL1xuICByZXRyeWluZz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmllcnRlIHVuIGVycm9yIGNhcHR1cmFkbyBlbiBgRW1wdHlTdGF0ZU1ldGFkYXRhYCBsaXN0byBwYXJhXG4gKiBgPHZhbC1lbXB0eS1zdGF0ZT5gLiBEZWNpZGUgbGEgdmFyaWFudGUgKGBvZmZsaW5lYCB2cyBgZXJyb3JgKSBzZWfDum5cbiAqIGBpbnRlcnByZXRFcnJvcihlcnIpLmlzTmV0d29ya2AuXG4gKlxuICogVXNvIHTDrXBpY28gZW4gdW5hIHBhZ2U6XG4gKlxuICogYGBgdHNcbiAqIHJlYWRvbmx5IGVycm9yU3RhdGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gKiAgIGNvbnN0IGVyciA9IHRoaXMubG9hZEVycm9yKCk7XG4gKiAgIGlmICghZXJyKSByZXR1cm4gbnVsbDtcbiAqICAgcmV0dXJuIGNyZWF0ZUVycm9yU3RhdGVQcm9wcyhlcnIsIHtcbiAqICAgICB0aXRsZTogeyBvZmZsaW5lOiB0aGlzLnQoJ29mZmxpbmVUaXRsZScpLCBlcnJvcjogdGhpcy50KCdlcnJvclRpdGxlJykgfSxcbiAqICAgICBkZXNjcmlwdGlvbjogeyBvZmZsaW5lOiB0aGlzLnQoJ29mZmxpbmVIaW50JyksIGVycm9yOiBpbnRlcnByZXRFcnJvcihlcnIpLm1lc3NhZ2UgfSxcbiAqICAgICByZXRyeUxhYmVsOiB0aGlzLnQoJ3JldHJ5JyksXG4gKiAgICAgb25SZXRyeTogKCkgPT4gdGhpcy5yZWxvYWQoKSxcbiAqICAgICByZXRyeWluZzogdGhpcy5yZWxvYWRpbmcoKSxcbiAqICAgfSk7XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEVuIGVsIHRlbXBsYXRlOlxuICpcbiAqIGBgYGh0bWxcbiAqIEBpZiAoZXJyb3JTdGF0ZSgpOyBhcyBlKSB7XG4gKiAgIDx2YWwtZW1wdHktc3RhdGUgW3Byb3BzXT1cImVcIiAvPlxuICogfVxuICogYGBgXG4gKlxuICogUGFyYSBlc2NlbmFyaW9zIFNJTiBlcnJvciAobGlzdGEgdmFjw61hKSwgY29uc3RydWlyIGBFbXB0eVN0YXRlTWV0YWRhdGFgXG4gKiBtYW51YWxtZW50ZSBjb24gYHZhcmlhbnQ6ICdlbXB0eSdgIOKAlCBubyBlcyBsbyBxdWUgZXN0ZSBoZWxwZXIgcmVzdWVsdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFcnJvclN0YXRlUHJvcHMoXG4gIGVycjogdW5rbm93bixcbiAgb3B0czogQ3JlYXRlRXJyb3JTdGF0ZU9wdHMsXG4pOiBFbXB0eVN0YXRlTWV0YWRhdGEge1xuICBjb25zdCBpbnRlcnByZXRlZCA9IGludGVycHJldEVycm9yKGVycik7XG4gIGNvbnN0IHZhcmlhbnQgPSBpbnRlcnByZXRlZC5pc05ldHdvcmsgPyAnb2ZmbGluZScgOiAnZXJyb3InO1xuXG4gIGNvbnN0IHBpY2sgPSA8VD4odjogVCB8IHsgb2ZmbGluZTogVDsgZXJyb3I6IFQgfSk6IFQgPT5cbiAgICB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiAhPT0gbnVsbCAmJiAnb2ZmbGluZScgaW4gdlxuICAgICAgPyAodiBhcyB7IG9mZmxpbmU6IFQ7IGVycm9yOiBUIH0pW3ZhcmlhbnRdXG4gICAgICA6ICh2IGFzIFQpO1xuXG4gIGNvbnN0IGFjdGlvbiA9XG4gICAgb3B0cy5yZXRyeUxhYmVsICYmIG9wdHMub25SZXRyeVxuICAgICAgPyB7XG4gICAgICAgICAgbGFiZWw6IG9wdHMucmV0cnlMYWJlbCxcbiAgICAgICAgICBoYW5kbGVyOiBvcHRzLm9uUmV0cnksXG4gICAgICAgICAgbG9hZGluZzogb3B0cy5yZXRyeWluZyA/PyBmYWxzZSxcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHtcbiAgICB2YXJpYW50LFxuICAgIHRpdGxlOiBwaWNrKG9wdHMudGl0bGUpLFxuICAgIGRlc2NyaXB0aW9uOiBvcHRzLmRlc2NyaXB0aW9uID8gcGljayhvcHRzLmRlc2NyaXB0aW9uKSA6IHVuZGVmaW5lZCxcbiAgICBhY3Rpb24sXG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2VtcHR5LXN0YXRlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZhcmlhbnRlIHNlbcOhbnRpY2EgZGVsIGVtcHR5L2Vycm9yIHN0YXRlLlxuICpcbiAqIC0gYGVtcHR5YCAgICDigJQgbGEgZnVlbnRlIGRldm9sdmnDsyBjZXJvIHJlc3VsdGFkb3MgKGxpc3RhIHZhY8OtYSwgc2luIG5vdGlmcykuXG4gKiAgICAgICAgICAgICAgICBJY29ubyBuZXV0cm8sIHNpbiBhbGFybWEuXG4gKiAtIGBlcnJvcmAgICAg4oCUIGxhIGZ1ZW50ZSBmYWxsw7MgcG9yIHVuIGVycm9yIGRlIGxhIGFwcC9zZXJ2aWRvciAoNTAwLCBwYXJzZSkuXG4gKiAgICAgICAgICAgICAgICBJY29ubyBkZSBhbGVydGEuXG4gKiAtIGBvZmZsaW5lYCAg4oCUIGxhIGZ1ZW50ZSBmYWxsw7MgcG9yIHJlZCBjYcOtZGEgLyBGaXJlc3RvcmUgdW5yZWFjaGFibGUuXG4gKiAgICAgICAgICAgICAgICBJY29ubyBjbG91ZC1vZmZsaW5lLlxuICpcbiAqIENhZGEgdmFyaWFudGUgbWFwZWEgYSB1biBpY29ubyBkZWZhdWx0IHNpIGBpY29uYCBubyBzZSBlc3BlY2lmaWNhLlxuICovXG5leHBvcnQgdHlwZSBFbXB0eVN0YXRlVmFyaWFudCA9ICdlbXB0eScgfCAnZXJyb3InIHwgJ29mZmxpbmUnO1xuXG4vKipcbiAqIEFjY2nDs24gQ1RBIG9wY2lvbmFsIGRlbCBzdGF0ZSAodMOtcGljYW1lbnRlIFwiUmVpbnRlbnRhclwiIC8gXCJSZWNhcmdhclwiKS5cbiAqXG4gKiBTaSBzZSBvbWl0ZSwgZWwgY29tcG9uZW50ZSBubyByZW5kZXJpemEgYm90w7NuLiBFbCBgaGFuZGxlcmAgeWEgdmllbmVcbiAqIHRyYWR1Y2lkbyDigJQgZWwgY29tcG9uZW50ZSBOTyByZXN1ZWx2ZSBpMThuIGludGVybmFtZW50ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbXB0eVN0YXRlQWN0aW9uIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgaGFuZGxlcjogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIC8qKiBTaSBgdHJ1ZWAsIGVsIGJvdMOzbiBwYXNhIGEgZXN0YWRvIFdPUktJTkcgKHNwaW5uZXIpLiDDmnRpbCBtaWVudHJhcyByZS1mZXRjaGEuICovXG4gIGxvYWRpbmc/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1ldGFkYXRhIHBhcmEgYDx2YWwtZW1wdHktc3RhdGU+YCDigJQgbW9sZWN1bGUgcXVlIHJlbmRlcml6YSB1biBlc3RhZG9cbiAqIGRlY2xhcmF0aXZvIGRlIFwibm8gaGF5IGRhdG9zIC8gaHVibyBlcnJvciAvIHNpbiByZWRcIiBjb24gdMOtdHVsbywgZGVzY3JpcGNpw7NuXG4gKiBvcGNpb25hbCB5IENUQSBvcGNpb25hbC4gUmVlbXBsYXphIGVsIHBhdHLDs24gYWQtaG9jIChpb24taWNvbiArIHZhbC10aXRsZSArXG4gKiB2YWwtdGV4dCArIHZhbC1idXR0b24pIHF1ZSBjYWRhIHDDoWdpbmEgdmVuw61hIGltcHJvdmlzYW5kby5cbiAqXG4gKiBJMThuOiBsb3Mgc3RyaW5ncyAoYHRpdGxlYCwgYGRlc2NyaXB0aW9uYCwgYGFjdGlvbi5sYWJlbGApIGxvcyByZXN1ZWx2ZSBsYVxuICogcMOhZ2luYSBhbnRlcyBkZSBjb25zdHJ1aXIgbGFzIHByb3BzLiBFc3RvIG1hbnRpZW5lIGVsIGNvbXBvbmVudGUgYWduw7NzdGljb1xuICogYSBuYW1lc3BhY2VzIHkgY29uc2lzdGVudGUgY29uIGVsIHJlc3RvIGRlIGxhIGxpYiAoRm9ybU1ldGFkYXRhLCBldGMuKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbXB0eVN0YXRlTWV0YWRhdGEge1xuICAvKiogVMOtdHVsbyBwcmluY2lwYWwuIFJlcXVlcmlkby4gKi9cbiAgdGl0bGU6IHN0cmluZztcbiAgLyoqIERlc2NyaXBjacOzbiBvcGNpb25hbCAoMS0yIGzDrW5lYXMpIGRlYmFqbyBkZWwgdMOtdHVsby4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBWYXJpYW50ZSBzZW3DoW50aWNhLiBEZWZhdWx0IGAnZW1wdHknYC4gKi9cbiAgdmFyaWFudD86IEVtcHR5U3RhdGVWYXJpYW50O1xuICAvKipcbiAgICogTm9tYnJlIGRlbCBpY29ubyBJb25pY29ucyAoa2ViYWItY2FzZSkuIFNpIHNlIG9taXRlLCBlbCBjb21wb25lbnRlIHVzYVxuICAgKiBlbCBkZWZhdWx0IGRlIGxhIHZhcmlhbnRlOlxuICAgKiAgLSBlbXB0eSAgIOKGkiBgZG9jdW1lbnQtb3V0bGluZWBcbiAgICogIC0gZXJyb3IgICDihpIgYGFsZXJ0LWNpcmNsZS1vdXRsaW5lYFxuICAgKiAgLSBvZmZsaW5lIOKGkiBgY2xvdWQtb2ZmbGluZS1vdXRsaW5lYFxuICAgKlxuICAgKiBTaSBwYXPDoXMgdW4gaWNvbm8gY3VzdG9tLCBpbXBvcnRhbG8gKyByZWdpc3RyYWxvIGNvbiBgYWRkSWNvbnMoeyAuLi4gfSlgXG4gICAqIGVuIGVsIGNvbXBvbmVudGUgY29uc3VtaWRvciAoSW9uaWMgc3RhbmRhbG9uZSBubyBhdXRvLXJlZ2lzdHJhKS5cbiAgICovXG4gIGljb24/OiBzdHJpbmc7XG4gIC8qKiBUYW1hw7FvIGRlbCBpY29ubyBlbiBww614ZWxlcy4gRGVmYXVsdCBgNjRgLiAqL1xuICBpY29uU2l6ZT86IG51bWJlcjtcbiAgLyoqIEFjY2nDs24gQ1RBIG9wY2lvbmFsLiBTaSBzZSBvbWl0ZSwgbm8gc2UgbXVlc3RyYSBib3TDs24uICovXG4gIGFjdGlvbj86IEVtcHR5U3RhdGVBY3Rpb247XG59XG4iXX0=
|