valtech-components 2.0.590 → 2.0.592

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.
@@ -0,0 +1,180 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, Input, signal, computed } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ /**
6
+ * val-rotating-text
7
+ *
8
+ * A component that rotates through an array of text messages with smooth animations.
9
+ * Features entrance/exit animations with fade, blur, and scale effects.
10
+ *
11
+ * @example
12
+ * <val-rotating-text
13
+ * [props]="{
14
+ * messages: [
15
+ * { aboveTitle: 'Welcome', title: 'Hello World' },
16
+ * { aboveTitle: 'Tip:', title: 'Stay curious' }
17
+ * ],
18
+ * interval: 4000,
19
+ * showDots: true
20
+ * }"
21
+ * ></val-rotating-text>
22
+ *
23
+ * @input props - Configuration for the rotating text component
24
+ */
25
+ export class RotatingTextComponent {
26
+ constructor() {
27
+ this.intervalId = null;
28
+ /**
29
+ * Component configuration.
30
+ */
31
+ this.props = {
32
+ messages: [],
33
+ interval: 4000,
34
+ showDots: true,
35
+ aboveTitleColor: 'medium',
36
+ titleColor: 'dark',
37
+ };
38
+ // Animation state
39
+ this.currentIndex = signal(0);
40
+ this.isEntering = signal(true);
41
+ this.isExiting = signal(false);
42
+ // Current message computed from index
43
+ this.currentMessage = computed(() => this.props.messages[this.currentIndex()]);
44
+ }
45
+ // Color values
46
+ get aboveTitleColorValue() {
47
+ const color = this.props.aboveTitleColor || 'medium';
48
+ return color.startsWith('--') || color.startsWith('#') || color.startsWith('rgb')
49
+ ? color
50
+ : `var(--ion-color-${color})`;
51
+ }
52
+ get titleColorValue() {
53
+ const color = this.props.titleColor || 'dark';
54
+ return color.startsWith('--') || color.startsWith('#') || color.startsWith('rgb')
55
+ ? color
56
+ : `var(--ion-color-${color})`;
57
+ }
58
+ ngOnInit() {
59
+ if (this.props.messages.length > 1) {
60
+ this.startRotation();
61
+ }
62
+ }
63
+ ngOnDestroy() {
64
+ this.stopRotation();
65
+ }
66
+ startRotation() {
67
+ const interval = this.props.interval ?? 4000;
68
+ this.intervalId = setInterval(() => {
69
+ this.rotateToNext();
70
+ }, interval);
71
+ }
72
+ stopRotation() {
73
+ if (this.intervalId) {
74
+ clearInterval(this.intervalId);
75
+ this.intervalId = null;
76
+ }
77
+ }
78
+ rotateToNext() {
79
+ // Start exit animation
80
+ this.isEntering.set(false);
81
+ this.isExiting.set(true);
82
+ // After exit animation, change text and start enter animation
83
+ setTimeout(() => {
84
+ this.currentIndex.update((i) => (i + 1) % this.props.messages.length);
85
+ this.isExiting.set(false);
86
+ this.isEntering.set(true);
87
+ }, 400); // Match exit animation duration
88
+ }
89
+ /**
90
+ * Navigate to a specific message by index.
91
+ */
92
+ goToMessage(index) {
93
+ if (index === this.currentIndex())
94
+ return;
95
+ this.stopRotation();
96
+ this.isEntering.set(false);
97
+ this.isExiting.set(true);
98
+ setTimeout(() => {
99
+ this.currentIndex.set(index);
100
+ this.isExiting.set(false);
101
+ this.isEntering.set(true);
102
+ if (this.props.messages.length > 1) {
103
+ this.startRotation();
104
+ }
105
+ }, 400);
106
+ }
107
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RotatingTextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
108
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: RotatingTextComponent, isStandalone: true, selector: "val-rotating-text", inputs: { props: "props" }, ngImport: i0, template: `
109
+ <div
110
+ class="rotating-banner"
111
+ [ngStyle]="{ background: props.backgroundColor || 'transparent' }"
112
+ >
113
+ <div
114
+ class="rotating-text"
115
+ [class.text-enter]="isEntering()"
116
+ [class.text-exit]="isExiting()"
117
+ >
118
+ <div
119
+ class="above-title"
120
+ [ngStyle]="{ color: aboveTitleColorValue }"
121
+ >
122
+ {{ currentMessage()?.aboveTitle }}
123
+ </div>
124
+ <div
125
+ class="title"
126
+ [ngStyle]="{ color: titleColorValue }"
127
+ >
128
+ {{ currentMessage()?.title }}
129
+ </div>
130
+ </div>
131
+ <div class="progress-dots" *ngIf="props.showDots !== false">
132
+ <div
133
+ *ngFor="let message of props.messages; let i = index"
134
+ class="progress-dot"
135
+ [class.active]="i === currentIndex()"
136
+ (click)="goToMessage(i)"
137
+ ></div>
138
+ </div>
139
+ </div>
140
+ `, isInline: true, styles: [".rotating-banner{text-align:center;padding:2rem 1rem;min-height:120px;display:flex;flex-direction:column;justify-content:center;align-items:center}.rotating-text{position:relative;overflow:hidden}.rotating-text .above-title{font-size:1.125rem;margin-bottom:.75rem;font-family:monospace}.rotating-text .title{font-size:2rem;font-weight:900}.text-enter{animation:textEnter .6s ease-out forwards}.text-exit{animation:textExit .4s ease-in forwards}@keyframes textEnter{0%{opacity:0;transform:translateY(20px) scale(.95);filter:blur(4px)}to{opacity:1;transform:translateY(0) scale(1);filter:blur(0)}}@keyframes textExit{0%{opacity:1;transform:translateY(0) scale(1);filter:blur(0)}to{opacity:0;transform:translateY(-20px) scale(.95);filter:blur(4px)}}.progress-dots{display:flex;gap:8px;margin-top:1.5rem}.progress-dot{width:8px;height:8px;border-radius:50%;background:var(--ion-color-medium-tint);transition:all .3s ease;cursor:pointer}.progress-dot.active{background:var(--ion-color-dark);transform:scale(1.3)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
141
+ }
142
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RotatingTextComponent, decorators: [{
143
+ type: Component,
144
+ args: [{ selector: 'val-rotating-text', standalone: true, imports: [CommonModule], template: `
145
+ <div
146
+ class="rotating-banner"
147
+ [ngStyle]="{ background: props.backgroundColor || 'transparent' }"
148
+ >
149
+ <div
150
+ class="rotating-text"
151
+ [class.text-enter]="isEntering()"
152
+ [class.text-exit]="isExiting()"
153
+ >
154
+ <div
155
+ class="above-title"
156
+ [ngStyle]="{ color: aboveTitleColorValue }"
157
+ >
158
+ {{ currentMessage()?.aboveTitle }}
159
+ </div>
160
+ <div
161
+ class="title"
162
+ [ngStyle]="{ color: titleColorValue }"
163
+ >
164
+ {{ currentMessage()?.title }}
165
+ </div>
166
+ </div>
167
+ <div class="progress-dots" *ngIf="props.showDots !== false">
168
+ <div
169
+ *ngFor="let message of props.messages; let i = index"
170
+ class="progress-dot"
171
+ [class.active]="i === currentIndex()"
172
+ (click)="goToMessage(i)"
173
+ ></div>
174
+ </div>
175
+ </div>
176
+ `, styles: [".rotating-banner{text-align:center;padding:2rem 1rem;min-height:120px;display:flex;flex-direction:column;justify-content:center;align-items:center}.rotating-text{position:relative;overflow:hidden}.rotating-text .above-title{font-size:1.125rem;margin-bottom:.75rem;font-family:monospace}.rotating-text .title{font-size:2rem;font-weight:900}.text-enter{animation:textEnter .6s ease-out forwards}.text-exit{animation:textExit .4s ease-in forwards}@keyframes textEnter{0%{opacity:0;transform:translateY(20px) scale(.95);filter:blur(4px)}to{opacity:1;transform:translateY(0) scale(1);filter:blur(0)}}@keyframes textExit{0%{opacity:1;transform:translateY(0) scale(1);filter:blur(0)}to{opacity:0;transform:translateY(-20px) scale(.95);filter:blur(4px)}}.progress-dots{display:flex;gap:8px;margin-top:1.5rem}.progress-dot{width:8px;height:8px;border-radius:50%;background:var(--ion-color-medium-tint);transition:all .3s ease;cursor:pointer}.progress-dot.active{background:var(--ion-color-dark);transform:scale(1.3)}\n"] }]
177
+ }], propDecorators: { props: [{
178
+ type: Input
179
+ }] } });
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm90YXRpbmctdGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL3JvdGF0aW5nLXRleHQvcm90YXRpbmctdGV4dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFHdEY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUEwSEgsTUFBTSxPQUFPLHFCQUFxQjtJQXpIbEM7UUEwSFUsZUFBVSxHQUEwQyxJQUFJLENBQUM7UUFFakU7O1dBRUc7UUFDTSxVQUFLLEdBQXlCO1lBQ3JDLFFBQVEsRUFBRSxFQUFFO1lBQ1osUUFBUSxFQUFFLElBQUk7WUFDZCxRQUFRLEVBQUUsSUFBSTtZQUNkLGVBQWUsRUFBRSxRQUFRO1lBQ3pCLFVBQVUsRUFBRSxNQUFNO1NBQ25CLENBQUM7UUFFRixrQkFBa0I7UUFDbEIsaUJBQVksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixjQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFCLHNDQUFzQztRQUN0QyxtQkFBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBeUUzRTtJQXZFQyxlQUFlO0lBQ2YsSUFBSSxvQkFBb0I7UUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLElBQUksUUFBUSxDQUFDO1FBQ3JELE9BQU8s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Q0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLENBQUM7UUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDOytHQTVGVSxxQkFBcUI7bUdBQXJCLHFCQUFxQix5R0FsQ3RCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdDVCwwakNBcEhTLFlBQVk7OzRGQXNIWCxxQkFBcUI7a0JBekhqQyxTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsWUFvRmI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NUOzhCQVFRLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgc2lnbmFsLCBjb21wdXRlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm90YXRpbmdUZXh0TWV0YWRhdGEsIFJvdGF0aW5nVGV4dE1lc3NhZ2UgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiB2YWwtcm90YXRpbmctdGV4dFxuICpcbiAqIEEgY29tcG9uZW50IHRoYXQgcm90YXRlcyB0aHJvdWdoIGFuIGFycmF5IG9mIHRleHQgbWVzc2FnZXMgd2l0aCBzbW9vdGggYW5pbWF0aW9ucy5cbiAqIEZlYXR1cmVzIGVudHJhbmNlL2V4aXQgYW5pbWF0aW9ucyB3aXRoIGZhZGUsIGJsdXIsIGFuZCBzY2FsZSBlZmZlY3RzLlxuICpcbiAqIEBleGFtcGxlXG4gKiA8dmFsLXJvdGF0aW5nLXRleHRcbiAqICAgW3Byb3BzXT1cIntcbiAqICAgICBtZXNzYWdlczogW1xuICogICAgICAgeyBhYm92ZVRpdGxlOiAnV2VsY29tZScsIHRpdGxlOiAnSGVsbG8gV29ybGQnIH0sXG4gKiAgICAgICB7IGFib3ZlVGl0bGU6ICdUaXA6JywgdGl0bGU6ICdTdGF5IGN1cmlvdXMnIH1cbiAqICAgICBdLFxuICogICAgIGludGVydmFsOiA0MDAwLFxuICogICAgIHNob3dEb3RzOiB0cnVlXG4gKiAgIH1cIlxuICogPjwvdmFsLXJvdGF0aW5nLXRleHQ+XG4gKlxuICogQGlucHV0IHByb3BzIC0gQ29uZmlndXJhdGlvbiBmb3IgdGhlIHJvdGF0aW5nIHRleHQgY29tcG9uZW50XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1yb3RhdGluZy10ZXh0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5yb3RhdGluZy1iYW5uZXIge1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmc6IDJyZW0gMXJlbTtcbiAgICAgICAgbWluLWhlaWdodDogMTIwcHg7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAucm90YXRpbmctdGV4dCB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgLnJvdGF0aW5nLXRleHQgLmFib3ZlLXRpdGxlIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjEyNXJlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC43NXJlbTtcbiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcbiAgICAgIH1cblxuICAgICAgLnJvdGF0aW5nLXRleHQgLnRpdGxlIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtO1xuICAgICAgICBmb250LXdlaWdodDogOTAwO1xuICAgICAgfVxuXG4gICAgICAudGV4dC1lbnRlciB7XG4gICAgICAgIGFuaW1hdGlvbjogdGV4dEVudGVyIDAuNnMgZWFzZS1vdXQgZm9yd2FyZHM7XG4gICAgICB9XG5cbiAgICAgIC50ZXh0LWV4aXQge1xuICAgICAgICBhbmltYXRpb246IHRleHRFeGl0IDAuNHMgZWFzZS1pbiBmb3J3YXJkcztcbiAgICAgIH1cblxuICAgICAgQGtleWZyYW1lcyB0ZXh0RW50ZXIge1xuICAgICAgICAwJSB7XG4gICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMjBweCkgc2NhbGUoMC45NSk7XG4gICAgICAgICAgZmlsdGVyOiBibHVyKDRweCk7XG4gICAgICAgIH1cbiAgICAgICAgMTAwJSB7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSk7XG4gICAgICAgICAgZmlsdGVyOiBibHVyKDApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgdGV4dEV4aXQge1xuICAgICAgICAwJSB7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSk7XG4gICAgICAgICAgZmlsdGVyOiBibHVyKDApO1xuICAgICAgICB9XG4gICAgICAgIDEwMCUge1xuICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMHB4KSBzY2FsZSgwLjk1KTtcbiAgICAgICAgICBmaWx0ZXI6IGJsdXIoNHB4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAucHJvZ3Jlc3MtZG90cyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAxLjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5wcm9ncmVzcy1kb3Qge1xuICAgICAgICB3aWR0aDogOHB4O1xuICAgICAgICBoZWlnaHQ6IDhweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLXRpbnQpO1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5wcm9ncmVzcy1kb3QuYWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMyk7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInJvdGF0aW5nLWJhbm5lclwiXG4gICAgICBbbmdTdHlsZV09XCJ7IGJhY2tncm91bmQ6IHByb3BzLmJhY2tncm91bmRDb2xvciB8fCAndHJhbnNwYXJlbnQnIH1cIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJyb3RhdGluZy10ZXh0XCJcbiAgICAgICAgW2NsYXNzLnRleHQtZW50ZXJdPVwiaXNFbnRlcmluZygpXCJcbiAgICAgICAgW2NsYXNzLnRleHQtZXhpdF09XCJpc0V4aXRpbmcoKVwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImFib3ZlLXRpdGxlXCJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7IGNvbG9yOiBhYm92ZVRpdGxlQ29sb3JWYWx1ZSB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGN1cnJlbnRNZXNzYWdlKCk/LmFib3ZlVGl0bGUgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInRpdGxlXCJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7IGNvbG9yOiB0aXRsZUNvbG9yVmFsdWUgfVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBjdXJyZW50TWVzc2FnZSgpPy50aXRsZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWRvdHNcIiAqbmdJZj1cInByb3BzLnNob3dEb3RzICE9PSBmYWxzZVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nRm9yPVwibGV0IG1lc3NhZ2Ugb2YgcHJvcHMubWVzc2FnZXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIGNsYXNzPVwicHJvZ3Jlc3MtZG90XCJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImkgPT09IGN1cnJlbnRJbmRleCgpXCJcbiAgICAgICAgICAoY2xpY2spPVwiZ29Ub01lc3NhZ2UoaSlcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgUm90YXRpbmdUZXh0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGludGVydmFsSWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIEBJbnB1dCgpIHByb3BzOiBSb3RhdGluZ1RleHRNZXRhZGF0YSA9IHtcbiAgICBtZXNzYWdlczogW10sXG4gICAgaW50ZXJ2YWw6IDQwMDAsXG4gICAgc2hvd0RvdHM6IHRydWUsXG4gICAgYWJvdmVUaXRsZUNvbG9yOiAnbWVkaXVtJyxcbiAgICB0aXRsZUNvbG9yOiAnZGFyaycsXG4gIH07XG5cbiAgLy8gQW5pbWF0aW9uIHN0YXRlXG4gIGN1cnJlbnRJbmRleCA9IHNpZ25hbCgwKTtcbiAgaXNFbnRlcmluZyA9IHNpZ25hbCh0cnVlKTtcbiAgaXNFeGl0aW5nID0gc2lnbmFsKGZhbHNlKTtcblxuICAvLyBDdXJyZW50IG1lc3NhZ2UgY29tcHV0ZWQgZnJvbSBpbmRleFxuICBjdXJyZW50TWVzc2FnZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMucHJvcHMubWVzc2FnZXNbdGhpcy5jdXJyZW50SW5kZXgoKV0pO1xuXG4gIC8vIENvbG9yIHZhbHVlc1xuICBnZXQgYWJvdmVUaXRsZUNvbG9yVmFsdWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb2xvciA9IHRoaXMucHJvcHMuYWJvdmVUaXRsZUNvbG9yIHx8ICdtZWRpdW0nO1xuICAgIHJldHVybiBjb2xvci5zdGFydHNXaXRoKCctLScpIHx8IGNvbG9yLnN0YXJ0c1dpdGgoJyMnKSB8fCBjb2xvci5zdGFydHNXaXRoKCdyZ2InKVxuICAgICAgPyBjb2xvclxuICAgICAgOiBgdmFyKC0taW9uLWNvbG9yLSR7Y29sb3J9KWA7XG4gIH1cblxuICBnZXQgdGl0bGVDb2xvclZhbHVlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY29sb3IgPSB0aGlzLnByb3BzLnRpdGxlQ29sb3IgfHwgJ2RhcmsnO1xuICAgIHJldHVybiBjb2xvci5zdGFydHNXaXRoKCctLScpIHx8IGNvbG9yLnN0YXJ0c1dpdGgoJyMnKSB8fCBjb2xvci5zdGFydHNXaXRoKCdyZ2InKVxuICAgICAgPyBjb2xvclxuICAgICAgOiBgdmFyKC0taW9uLWNvbG9yLSR7Y29sb3J9KWA7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcy5tZXNzYWdlcy5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLnN0YXJ0Um90YXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BSb3RhdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFJvdGF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGludGVydmFsID0gdGhpcy5wcm9wcy5pbnRlcnZhbCA/PyA0MDAwO1xuICAgIHRoaXMuaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMucm90YXRlVG9OZXh0KCk7XG4gICAgfSwgaW50ZXJ2YWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wUm90YXRpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsSWQpO1xuICAgICAgdGhpcy5pbnRlcnZhbElkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJvdGF0ZVRvTmV4dCgpOiB2b2lkIHtcbiAgICAvLyBTdGFydCBleGl0IGFuaW1hdGlvblxuICAgIHRoaXMuaXNFbnRlcmluZy5zZXQoZmFsc2UpO1xuICAgIHRoaXMuaXNFeGl0aW5nLnNldCh0cnVlKTtcblxuICAgIC8vIEFmdGVyIGV4aXQgYW5pbWF0aW9uLCBjaGFuZ2UgdGV4dCBhbmQgc3RhcnQgZW50ZXIgYW5pbWF0aW9uXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleC51cGRhdGUoKGkpID0+IChpICsgMSkgJSB0aGlzLnByb3BzLm1lc3NhZ2VzLmxlbmd0aCk7XG4gICAgICB0aGlzLmlzRXhpdGluZy5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5pc0VudGVyaW5nLnNldCh0cnVlKTtcbiAgICB9LCA0MDApOyAvLyBNYXRjaCBleGl0IGFuaW1hdGlvbiBkdXJhdGlvblxuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlIHRvIGEgc3BlY2lmaWMgbWVzc2FnZSBieSBpbmRleC5cbiAgICovXG4gIGdvVG9NZXNzYWdlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoaW5kZXggPT09IHRoaXMuY3VycmVudEluZGV4KCkpIHJldHVybjtcblxuICAgIHRoaXMuc3RvcFJvdGF0aW9uKCk7XG4gICAgdGhpcy5pc0VudGVyaW5nLnNldChmYWxzZSk7XG4gICAgdGhpcy5pc0V4aXRpbmcuc2V0KHRydWUpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleC5zZXQoaW5kZXgpO1xuICAgICAgdGhpcy5pc0V4aXRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuaXNFbnRlcmluZy5zZXQodHJ1ZSk7XG4gICAgICBpZiAodGhpcy5wcm9wcy5tZXNzYWdlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMuc3RhcnRSb3RhdGlvbigpO1xuICAgICAgfVxuICAgIH0sIDQwMCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL3JvdGF0aW5nLXRleHQvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQSBzaW5nbGUgbWVzc2FnZSB0byBkaXNwbGF5IGluIHRoZSByb3RhdGluZyB0ZXh0IGNvbXBvbmVudC5cbiAqXG4gKiBAcHJvcGVydHkgYWJvdmVUaXRsZSAtIFNtYWxsIHRleHQgZGlzcGxheWVkIGFib3ZlIHRoZSBtYWluIHRpdGxlLlxuICogQHByb3BlcnR5IHRpdGxlIC0gVGhlIG1haW4gdGl0bGUgdGV4dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3RhdGluZ1RleHRNZXNzYWdlIHtcbiAgYWJvdmVUaXRsZTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB2YWwtcm90YXRpbmctdGV4dCBjb21wb25lbnQuXG4gKlxuICogQHByb3BlcnR5IG1lc3NhZ2VzIC0gQXJyYXkgb2YgbWVzc2FnZXMgdG8gcm90YXRlIHRocm91Z2guXG4gKiBAcHJvcGVydHkgaW50ZXJ2YWwgLSBUaW1lIGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHJvdGF0aW9ucyAoZGVmYXVsdDogNDAwMCkuXG4gKiBAcHJvcGVydHkgc2hvd0RvdHMgLSBXaGV0aGVyIHRvIHNob3cgbmF2aWdhdGlvbiBkb3RzIChkZWZhdWx0OiB0cnVlKS5cbiAqIEBwcm9wZXJ0eSBhYm92ZVRpdGxlQ29sb3IgLSBDb2xvciBmb3IgYWJvdmUgdGl0bGUgdGV4dCAoZGVmYXVsdDogJ21lZGl1bScpLlxuICogQHByb3BlcnR5IHRpdGxlQ29sb3IgLSBDb2xvciBmb3IgbWFpbiB0aXRsZSB0ZXh0IChkZWZhdWx0OiAnZGFyaycpLlxuICogQHByb3BlcnR5IGJhY2tncm91bmRDb2xvciAtIEJhY2tncm91bmQgY29sb3IgZm9yIHRoZSBzZWN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdGF0aW5nVGV4dE1ldGFkYXRhIHtcbiAgbWVzc2FnZXM6IFJvdGF0aW5nVGV4dE1lc3NhZ2VbXTtcbiAgaW50ZXJ2YWw/OiBudW1iZXI7XG4gIHNob3dEb3RzPzogYm9vbGVhbjtcbiAgYWJvdmVUaXRsZUNvbG9yPzogc3RyaW5nO1xuICB0aXRsZUNvbG9yPzogc3RyaW5nO1xuICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG59XG4iXX0=
@@ -0,0 +1,224 @@
1
+ import { Component, Input, signal } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { RouterLink } from '@angular/router';
4
+ import { IonButton } from '@ionic/angular/standalone';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ /**
8
+ * val-terminal-404
9
+ *
10
+ * A fun, terminal-styled 404 page component with typing animations.
11
+ *
12
+ * Features:
13
+ * - Terminal window aesthetic with colored dots
14
+ * - Typing animation effect with sequential line reveals
15
+ * - Blinking cursor
16
+ * - Customizable colors to match brand
17
+ * - Shows the attempted path
18
+ *
19
+ * @example
20
+ * <val-terminal-404
21
+ * [props]="{
22
+ * primaryColor: '#4a1d96',
23
+ * homeRoute: '/',
24
+ * homeButtonText: 'cd /home'
25
+ * }"
26
+ * ></val-terminal-404>
27
+ */
28
+ export class Terminal404Component {
29
+ constructor() {
30
+ this.props = {};
31
+ this.requestedPath = signal('page-not-found');
32
+ }
33
+ get backgroundGradient() {
34
+ const bg = this.props.backgroundColor;
35
+ if (bg) {
36
+ return `linear-gradient(135deg, ${bg.start} 0%, ${bg.middle} 50%, ${bg.end} 100%)`;
37
+ }
38
+ return 'linear-gradient(135deg, #ede9fe 0%, #ddd6fe 50%, #c4b5fd 100%)';
39
+ }
40
+ ngOnInit() {
41
+ if (typeof window !== 'undefined') {
42
+ const path = window.location.pathname.slice(1) || 'unknown';
43
+ this.requestedPath.set(path);
44
+ }
45
+ }
46
+ /**
47
+ * Lighten a hex color for hover states
48
+ */
49
+ lightenColor(hex) {
50
+ // Simple lighten by adding to RGB values
51
+ const num = parseInt(hex.replace('#', ''), 16);
52
+ const r = Math.min(255, (num >> 16) + 20);
53
+ const g = Math.min(255, ((num >> 8) & 0x00ff) + 20);
54
+ const b = Math.min(255, (num & 0x0000ff) + 20);
55
+ return `#${((r << 16) | (g << 8) | b).toString(16).padStart(6, '0')}`;
56
+ }
57
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: Terminal404Component, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
58
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: Terminal404Component, isStandalone: true, selector: "val-terminal-404", inputs: { props: "props" }, ngImport: i0, template: `
59
+ <div
60
+ class="terminal-container"
61
+ [ngStyle]="{
62
+ background: backgroundGradient
63
+ }"
64
+ >
65
+ <div
66
+ class="error-code"
67
+ [ngStyle]="{
68
+ color: props.primaryColor || '#4a1d96',
69
+ textShadow: '0 0 40px ' + (props.primaryColor || '#4a1d96') + '4d'
70
+ }"
71
+ >
72
+ 404
73
+ </div>
74
+
75
+ <div
76
+ class="terminal"
77
+ [ngStyle]="{ background: props.terminalBackground || '#0d1117' }"
78
+ >
79
+ <div class="terminal-header">
80
+ <div class="terminal-dot dot-red"></div>
81
+ <div class="terminal-dot dot-yellow"></div>
82
+ <div class="terminal-dot dot-green"></div>
83
+ <span class="terminal-title">bash - 404</span>
84
+ </div>
85
+
86
+ <div class="terminal-body">
87
+ <div class="line">
88
+ <span class="prompt">user&#64;app</span>
89
+ <span class="command">:~$ </span>
90
+ <span class="command">cd /{{ requestedPath() }}</span>
91
+ </div>
92
+
93
+ <div class="line">
94
+ <span class="error"
95
+ >bash: cd: /{{ requestedPath() }}: No existe el directorio</span
96
+ >
97
+ </div>
98
+
99
+ <div class="line">
100
+ <span class="prompt">user&#64;app</span>
101
+ <span class="command">:~$ </span>
102
+ <span class="command">sudo find / -name "pagina"</span>
103
+ </div>
104
+
105
+ <div class="line">
106
+ <span class="info"
107
+ ><span class="search-icon">🔍</span> Buscando...</span
108
+ >
109
+ </div>
110
+
111
+ <div class="line">
112
+ <span class="warning">find: No se encontraron resultados.</span>
113
+ </div>
114
+
115
+ <div class="line">
116
+ <span class="prompt">user&#64;app</span>
117
+ <span class="command">:~$ </span>
118
+ <span class="cursor"></span>
119
+ </div>
120
+ </div>
121
+ </div>
122
+
123
+ <div class="action-container">
124
+ <ion-button
125
+ class="home-button"
126
+ [routerLink]="props.homeRoute || '/'"
127
+ expand="block"
128
+ [ngStyle]="{
129
+ '--background': props.primaryColor || '#4a1d96',
130
+ '--background-hover': lightenColor(props.primaryColor || '#4a1d96')
131
+ }"
132
+ >
133
+ {{ props.homeButtonText || 'cd /home' }}
134
+ </ion-button>
135
+ </div>
136
+ </div>
137
+ `, isInline: true, styles: [":host{display:block;width:100%}.terminal-container{min-height:70vh;display:flex;flex-direction:column;justify-content:center;align-items:center;padding:2rem;border-radius:16px}.terminal{border-radius:12px;padding:0;max-width:600px;width:100%;box-shadow:0 20px 60px #0000004d;overflow:hidden}.terminal-header{background:#161b22;padding:12px 16px;display:flex;align-items:center;gap:8px}.terminal-dot{width:12px;height:12px;border-radius:50%}.dot-red{background:#ff5f56}.dot-yellow{background:#ffbd2e}.dot-green{background:#27ca40}.terminal-title{flex:1;text-align:center;color:#8b949e;font-size:.85rem;font-family:monospace}.terminal-body{padding:24px;font-family:Fira Code,Monaco,Consolas,monospace;font-size:.95rem;line-height:1.8}.line{margin-bottom:8px;opacity:0;animation:fadeIn .3s ease forwards}.line:nth-child(1){animation-delay:.2s}.line:nth-child(2){animation-delay:.8s}.line:nth-child(3){animation-delay:1.4s}.line:nth-child(4){animation-delay:2s}.line:nth-child(5){animation-delay:2.6s}.line:nth-child(6){animation-delay:3.2s}@keyframes fadeIn{to{opacity:1}}.prompt{color:#7ee787}.command{color:#c9d1d9}.error{color:#f85149}.info{color:#58a6ff}.warning{color:#d29922}.cursor{display:inline-block;width:10px;height:18px;background:#7ee787;margin-left:4px;animation:blink 1s step-end infinite;vertical-align:text-bottom}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}.error-code{font-size:6rem;font-weight:900;text-align:center;margin:.5rem 0 1rem;font-family:monospace}.action-container{margin-top:2rem;text-align:center;opacity:0;animation:fadeIn .5s ease forwards;animation-delay:3.8s}.home-button{--border-radius: 8px;font-family:monospace}.search-icon{animation:searching 2s ease-in-out infinite;display:inline-block}@keyframes searching{0%,to{transform:translate(0)}25%{transform:translate(5px)}75%{transform:translate(-5px)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
138
+ }
139
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: Terminal404Component, decorators: [{
140
+ type: Component,
141
+ args: [{ selector: 'val-terminal-404', standalone: true, imports: [CommonModule, IonButton, RouterLink], template: `
142
+ <div
143
+ class="terminal-container"
144
+ [ngStyle]="{
145
+ background: backgroundGradient
146
+ }"
147
+ >
148
+ <div
149
+ class="error-code"
150
+ [ngStyle]="{
151
+ color: props.primaryColor || '#4a1d96',
152
+ textShadow: '0 0 40px ' + (props.primaryColor || '#4a1d96') + '4d'
153
+ }"
154
+ >
155
+ 404
156
+ </div>
157
+
158
+ <div
159
+ class="terminal"
160
+ [ngStyle]="{ background: props.terminalBackground || '#0d1117' }"
161
+ >
162
+ <div class="terminal-header">
163
+ <div class="terminal-dot dot-red"></div>
164
+ <div class="terminal-dot dot-yellow"></div>
165
+ <div class="terminal-dot dot-green"></div>
166
+ <span class="terminal-title">bash - 404</span>
167
+ </div>
168
+
169
+ <div class="terminal-body">
170
+ <div class="line">
171
+ <span class="prompt">user&#64;app</span>
172
+ <span class="command">:~$ </span>
173
+ <span class="command">cd /{{ requestedPath() }}</span>
174
+ </div>
175
+
176
+ <div class="line">
177
+ <span class="error"
178
+ >bash: cd: /{{ requestedPath() }}: No existe el directorio</span
179
+ >
180
+ </div>
181
+
182
+ <div class="line">
183
+ <span class="prompt">user&#64;app</span>
184
+ <span class="command">:~$ </span>
185
+ <span class="command">sudo find / -name "pagina"</span>
186
+ </div>
187
+
188
+ <div class="line">
189
+ <span class="info"
190
+ ><span class="search-icon">🔍</span> Buscando...</span
191
+ >
192
+ </div>
193
+
194
+ <div class="line">
195
+ <span class="warning">find: No se encontraron resultados.</span>
196
+ </div>
197
+
198
+ <div class="line">
199
+ <span class="prompt">user&#64;app</span>
200
+ <span class="command">:~$ </span>
201
+ <span class="cursor"></span>
202
+ </div>
203
+ </div>
204
+ </div>
205
+
206
+ <div class="action-container">
207
+ <ion-button
208
+ class="home-button"
209
+ [routerLink]="props.homeRoute || '/'"
210
+ expand="block"
211
+ [ngStyle]="{
212
+ '--background': props.primaryColor || '#4a1d96',
213
+ '--background-hover': lightenColor(props.primaryColor || '#4a1d96')
214
+ }"
215
+ >
216
+ {{ props.homeButtonText || 'cd /home' }}
217
+ </ion-button>
218
+ </div>
219
+ </div>
220
+ `, styles: [":host{display:block;width:100%}.terminal-container{min-height:70vh;display:flex;flex-direction:column;justify-content:center;align-items:center;padding:2rem;border-radius:16px}.terminal{border-radius:12px;padding:0;max-width:600px;width:100%;box-shadow:0 20px 60px #0000004d;overflow:hidden}.terminal-header{background:#161b22;padding:12px 16px;display:flex;align-items:center;gap:8px}.terminal-dot{width:12px;height:12px;border-radius:50%}.dot-red{background:#ff5f56}.dot-yellow{background:#ffbd2e}.dot-green{background:#27ca40}.terminal-title{flex:1;text-align:center;color:#8b949e;font-size:.85rem;font-family:monospace}.terminal-body{padding:24px;font-family:Fira Code,Monaco,Consolas,monospace;font-size:.95rem;line-height:1.8}.line{margin-bottom:8px;opacity:0;animation:fadeIn .3s ease forwards}.line:nth-child(1){animation-delay:.2s}.line:nth-child(2){animation-delay:.8s}.line:nth-child(3){animation-delay:1.4s}.line:nth-child(4){animation-delay:2s}.line:nth-child(5){animation-delay:2.6s}.line:nth-child(6){animation-delay:3.2s}@keyframes fadeIn{to{opacity:1}}.prompt{color:#7ee787}.command{color:#c9d1d9}.error{color:#f85149}.info{color:#58a6ff}.warning{color:#d29922}.cursor{display:inline-block;width:10px;height:18px;background:#7ee787;margin-left:4px;animation:blink 1s step-end infinite;vertical-align:text-bottom}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}.error-code{font-size:6rem;font-weight:900;text-align:center;margin:.5rem 0 1rem;font-family:monospace}.action-container{margin-top:2rem;text-align:center;opacity:0;animation:fadeIn .5s ease forwards;animation-delay:3.8s}.home-button{--border-radius: 8px;font-family:monospace}.search-icon{animation:searching 2s ease-in-out infinite;display:inline-block}@keyframes searching{0%,to{transform:translate(0)}25%{transform:translate(5px)}75%{transform:translate(-5px)}}\n"] }]
221
+ }], propDecorators: { props: [{
222
+ type: Input
223
+ }] } });
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybWluYWwtNDA0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvdGVybWluYWwtNDA0L3Rlcm1pbmFsLTQwNC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7QUFHdEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBc1FILE1BQU0sT0FBTyxvQkFBb0I7SUFyUWpDO1FBc1FXLFVBQUssR0FBd0IsRUFBRSxDQUFDO1FBRXpDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0E0QjFDO0lBMUJDLElBQUksa0JBQWtCO1FBQ3BCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO1FBQ3RDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDUCxPQUFPLDJCQUEyQixFQUFFLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQyxNQUFNLFNBQVMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQ3JGLENBQUM7UUFDRCxPQUFPLGdFQUFnRSxDQUFDO0lBQzFFLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNsQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO1lBQzVELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZLENBQUMsR0FBVztRQUN0Qix5Q0FBeUM7UUFDekMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDcEQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDL0MsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUN4RSxDQUFDOytHQTlCVSxvQkFBb0I7bUdBQXBCLG9CQUFvQix3R0FqRnJCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0VULDYzREFoUVMsWUFBWSxvSEFBRSxTQUFTLG9QQUFFLFVBQVU7OzRGQWtRbEMsb0JBQW9CO2tCQXJRaEMsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsWUFpTHBDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0VUOzhCQUdRLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUm91dGVyTGluayB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJb25CdXR0b24gfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IFRlcm1pbmFsNDA0TWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiB2YWwtdGVybWluYWwtNDA0XG4gKlxuICogQSBmdW4sIHRlcm1pbmFsLXN0eWxlZCA0MDQgcGFnZSBjb21wb25lbnQgd2l0aCB0eXBpbmcgYW5pbWF0aW9ucy5cbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gVGVybWluYWwgd2luZG93IGFlc3RoZXRpYyB3aXRoIGNvbG9yZWQgZG90c1xuICogLSBUeXBpbmcgYW5pbWF0aW9uIGVmZmVjdCB3aXRoIHNlcXVlbnRpYWwgbGluZSByZXZlYWxzXG4gKiAtIEJsaW5raW5nIGN1cnNvclxuICogLSBDdXN0b21pemFibGUgY29sb3JzIHRvIG1hdGNoIGJyYW5kXG4gKiAtIFNob3dzIHRoZSBhdHRlbXB0ZWQgcGF0aFxuICpcbiAqIEBleGFtcGxlXG4gKiA8dmFsLXRlcm1pbmFsLTQwNFxuICogICBbcHJvcHNdPVwie1xuICogICAgIHByaW1hcnlDb2xvcjogJyM0YTFkOTYnLFxuICogICAgIGhvbWVSb3V0ZTogJy8nLFxuICogICAgIGhvbWVCdXR0b25UZXh0OiAnY2QgL2hvbWUnXG4gKiAgIH1cIlxuICogPjwvdmFsLXRlcm1pbmFsLTQwND5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLXRlcm1pbmFsLTQwNCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIElvbkJ1dHRvbiwgUm91dGVyTGlua10sXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAudGVybWluYWwtY29udGFpbmVyIHtcbiAgICAgICAgbWluLWhlaWdodDogNzB2aDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmc6IDJyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgICB9XG5cbiAgICAgIC50ZXJtaW5hbCB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIG1heC13aWR0aDogNjAwcHg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBib3gtc2hhZG93OiAwIDIwcHggNjBweCByZ2JhKDAsIDAsIDAsIDAuMyk7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgIC50ZXJtaW5hbC1oZWFkZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMTYxYjIyO1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgfVxuXG4gICAgICAudGVybWluYWwtZG90IHtcbiAgICAgICAgd2lkdGg6IDEycHg7XG4gICAgICAgIGhlaWdodDogMTJweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgfVxuXG4gICAgICAuZG90LXJlZCB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZjVmNTY7XG4gICAgICB9XG4gICAgICAuZG90LXllbGxvdyB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmJkMmU7XG4gICAgICB9XG4gICAgICAuZG90LWdyZWVuIHtcbiAgICAgICAgYmFja2dyb3VuZDogIzI3Y2E0MDtcbiAgICAgIH1cblxuICAgICAgLnRlcm1pbmFsLXRpdGxlIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBjb2xvcjogIzhiOTQ5ZTtcbiAgICAgICAgZm9udC1zaXplOiAwLjg1cmVtO1xuICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuICAgICAgfVxuXG4gICAgICAudGVybWluYWwtYm9keSB7XG4gICAgICAgIHBhZGRpbmc6IDI0cHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnRmlyYSBDb2RlJywgJ01vbmFjbycsICdDb25zb2xhcycsIG1vbm9zcGFjZTtcbiAgICAgICAgZm9udC1zaXplOiAwLjk1cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS44O1xuICAgICAgfVxuXG4gICAgICAubGluZSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDhweDtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgYW5pbWF0aW9uOiBmYWRlSW4gMC4zcyBlYXNlIGZvcndhcmRzO1xuICAgICAgfVxuXG4gICAgICAubGluZTpudGgtY2hpbGQoMSkge1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IDAuMnM7XG4gICAgICB9XG4gICAgICAubGluZTpudGgtY2hpbGQoMikge1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IDAuOHM7XG4gICAgICB9XG4gICAgICAubGluZTpudGgtY2hpbGQoMykge1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IDEuNHM7XG4gICAgICB9XG4gICAgICAubGluZTpudGgtY2hpbGQoNCkge1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IDJzO1xuICAgICAgfVxuICAgICAgLmxpbmU6bnRoLWNoaWxkKDUpIHtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAyLjZzO1xuICAgICAgfVxuICAgICAgLmxpbmU6bnRoLWNoaWxkKDYpIHtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAzLjJzO1xuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIGZhZGVJbiB7XG4gICAgICAgIHRvIHtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5wcm9tcHQge1xuICAgICAgICBjb2xvcjogIzdlZTc4NztcbiAgICAgIH1cblxuICAgICAgLmNvbW1hbmQge1xuICAgICAgICBjb2xvcjogI2M5ZDFkOTtcbiAgICAgIH1cblxuICAgICAgLmVycm9yIHtcbiAgICAgICAgY29sb3I6ICNmODUxNDk7XG4gICAgICB9XG5cbiAgICAgIC5pbmZvIHtcbiAgICAgICAgY29sb3I6ICM1OGE2ZmY7XG4gICAgICB9XG5cbiAgICAgIC53YXJuaW5nIHtcbiAgICAgICAgY29sb3I6ICNkMjk5MjI7XG4gICAgICB9XG5cbiAgICAgIC5jdXJzb3Ige1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMHB4O1xuICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICM3ZWU3ODc7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7XG4gICAgICAgIGFuaW1hdGlvbjogYmxpbmsgMXMgc3RlcC1lbmQgaW5maW5pdGU7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTtcbiAgICAgIH1cblxuICAgICAgQGtleWZyYW1lcyBibGluayB7XG4gICAgICAgIDAlLFxuICAgICAgICAxMDAlIHtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB9XG4gICAgICAgIDUwJSB7XG4gICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuZXJyb3ItY29kZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNnJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDkwMDtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBtYXJnaW46IDAuNXJlbSAwIDFyZW07XG4gICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG4gICAgICB9XG5cbiAgICAgIC5hY3Rpb24tY29udGFpbmVyIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMnJlbTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICBhbmltYXRpb246IGZhZGVJbiAwLjVzIGVhc2UgZm9yd2FyZHM7XG4gICAgICAgIGFuaW1hdGlvbi1kZWxheTogMy44cztcbiAgICAgIH1cblxuICAgICAgLmhvbWUtYnV0dG9uIHtcbiAgICAgICAgLS1ib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG4gICAgICB9XG5cbiAgICAgIC5zZWFyY2gtaWNvbiB7XG4gICAgICAgIGFuaW1hdGlvbjogc2VhcmNoaW5nIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgc2VhcmNoaW5nIHtcbiAgICAgICAgMCUsXG4gICAgICAgIDEwMCUge1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICAgICAgfVxuICAgICAgICAyNSUge1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1cHgpO1xuICAgICAgICB9XG4gICAgICAgIDc1JSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01cHgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInRlcm1pbmFsLWNvbnRhaW5lclwiXG4gICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgIGJhY2tncm91bmQ6IGJhY2tncm91bmRHcmFkaWVudFxuICAgICAgfVwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImVycm9yLWNvZGVcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgY29sb3I6IHByb3BzLnByaW1hcnlDb2xvciB8fCAnIzRhMWQ5NicsXG4gICAgICAgICAgdGV4dFNoYWRvdzogJzAgMCA0MHB4ICcgKyAocHJvcHMucHJpbWFyeUNvbG9yIHx8ICcjNGExZDk2JykgKyAnNGQnXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICA0MDRcbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidGVybWluYWxcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7IGJhY2tncm91bmQ6IHByb3BzLnRlcm1pbmFsQmFja2dyb3VuZCB8fCAnIzBkMTExNycgfVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXJtaW5hbC1oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGVybWluYWwtZG90IGRvdC1yZWRcIj48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGVybWluYWwtZG90IGRvdC15ZWxsb3dcIj48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGVybWluYWwtZG90IGRvdC1ncmVlblwiPjwvZGl2PlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybWluYWwtdGl0bGVcIj5iYXNoIC0gNDA0PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwidGVybWluYWwtYm9keVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5lXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInByb21wdFwiPnVzZXImIzY0O2FwcDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tbWFuZFwiPjp+JCA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbW1hbmRcIj5jZCAve3sgcmVxdWVzdGVkUGF0aCgpIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmVcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIlxuICAgICAgICAgICAgICA+YmFzaDogY2Q6IC97eyByZXF1ZXN0ZWRQYXRoKCkgfX06IE5vIGV4aXN0ZSBlbCBkaXJlY3RvcmlvPC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcm9tcHRcIj51c2VyJiM2NDthcHA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbW1hbmRcIj46fiQgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21tYW5kXCI+c3VkbyBmaW5kIC8gLW5hbWUgXCJwYWdpbmFcIjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5lXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm9cIlxuICAgICAgICAgICAgICA+PHNwYW4gY2xhc3M9XCJzZWFyY2gtaWNvblwiPvCflI08L3NwYW4+IEJ1c2NhbmRvLi4uPC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3YXJuaW5nXCI+ZmluZDogTm8gc2UgZW5jb250cmFyb24gcmVzdWx0YWRvcy48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcm9tcHRcIj51c2VyJiM2NDthcHA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbW1hbmRcIj46fiQgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3JcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tY29udGFpbmVyXCI+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJob21lLWJ1dHRvblwiXG4gICAgICAgICAgW3JvdXRlckxpbmtdPVwicHJvcHMuaG9tZVJvdXRlIHx8ICcvJ1wiXG4gICAgICAgICAgZXhwYW5kPVwiYmxvY2tcIlxuICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICctLWJhY2tncm91bmQnOiBwcm9wcy5wcmltYXJ5Q29sb3IgfHwgJyM0YTFkOTYnLFxuICAgICAgICAgICAgJy0tYmFja2dyb3VuZC1ob3Zlcic6IGxpZ2h0ZW5Db2xvcihwcm9wcy5wcmltYXJ5Q29sb3IgfHwgJyM0YTFkOTYnKVxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAge3sgcHJvcHMuaG9tZUJ1dHRvblRleHQgfHwgJ2NkIC9ob21lJyB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgVGVybWluYWw0MDRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBwcm9wczogVGVybWluYWw0MDRNZXRhZGF0YSA9IHt9O1xuXG4gIHJlcXVlc3RlZFBhdGggPSBzaWduYWwoJ3BhZ2Utbm90LWZvdW5kJyk7XG5cbiAgZ2V0IGJhY2tncm91bmRHcmFkaWVudCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJnID0gdGhpcy5wcm9wcy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgaWYgKGJnKSB7XG4gICAgICByZXR1cm4gYGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICR7Ymcuc3RhcnR9IDAlLCAke2JnLm1pZGRsZX0gNTAlLCAke2JnLmVuZH0gMTAwJSlgO1xuICAgIH1cbiAgICByZXR1cm4gJ2xpbmVhci1ncmFkaWVudCgxMzVkZWcsICNlZGU5ZmUgMCUsICNkZGQ2ZmUgNTAlLCAjYzRiNWZkIDEwMCUpJztcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgcGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zbGljZSgxKSB8fCAndW5rbm93bic7XG4gICAgICB0aGlzLnJlcXVlc3RlZFBhdGguc2V0KHBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaWdodGVuIGEgaGV4IGNvbG9yIGZvciBob3ZlciBzdGF0ZXNcbiAgICovXG4gIGxpZ2h0ZW5Db2xvcihoZXg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gU2ltcGxlIGxpZ2h0ZW4gYnkgYWRkaW5nIHRvIFJHQiB2YWx1ZXNcbiAgICBjb25zdCBudW0gPSBwYXJzZUludChoZXgucmVwbGFjZSgnIycsICcnKSwgMTYpO1xuICAgIGNvbnN0IHIgPSBNYXRoLm1pbigyNTUsIChudW0gPj4gMTYpICsgMjApO1xuICAgIGNvbnN0IGcgPSBNYXRoLm1pbigyNTUsICgobnVtID4+IDgpICYgMHgwMGZmKSArIDIwKTtcbiAgICBjb25zdCBiID0gTWF0aC5taW4oMjU1LCAobnVtICYgMHgwMDAwZmYpICsgMjApO1xuICAgIHJldHVybiBgIyR7KChyIDw8IDE2KSB8IChnIDw8IDgpIHwgYikudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDYsICcwJyl9YDtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL3Rlcm1pbmFsLTQwNC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0ZXJtaW5hbCA0MDQgcGFnZSBjb21wb25lbnQuXG4gKlxuICogQHByb3BlcnR5IGJhY2tncm91bmRDb2xvciAtIEJhY2tncm91bmQgZ3JhZGllbnQgY29sb3JzIChkZWZhdWx0OiBsYXZlbmRlciBwdXJwbGUpXG4gKiBAcHJvcGVydHkgcHJpbWFyeUNvbG9yIC0gTWFpbiBicmFuZCBjb2xvciBmb3IgNDA0IHRleHQgYW5kIGJ1dHRvbiAoZGVmYXVsdDogIzRhMWQ5NilcbiAqIEBwcm9wZXJ0eSB0ZXJtaW5hbEJhY2tncm91bmQgLSBUZXJtaW5hbCB3aW5kb3cgYmFja2dyb3VuZCAoZGVmYXVsdDogIzBkMTExNylcbiAqIEBwcm9wZXJ0eSBob21lUm91dGUgLSBSb3V0ZSBmb3IgdGhlIGhvbWUgYnV0dG9uIChkZWZhdWx0OiAnLycpXG4gKiBAcHJvcGVydHkgaG9tZUJ1dHRvblRleHQgLSBUZXh0IGZvciBob21lIGJ1dHRvbiAoZGVmYXVsdDogJ2NkIC9ob21lJylcbiAqIEBwcm9wZXJ0eSBzaG93TGFuZ3VhZ2VTZWxlY3RvciAtIFNob3cgbGFuZ3VhZ2Ugc2VsZWN0b3IgaW4gaGVhZGVyIChkZWZhdWx0OiB0cnVlKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlcm1pbmFsNDA0TWV0YWRhdGEge1xuICBiYWNrZ3JvdW5kQ29sb3I/OiB7XG4gICAgc3RhcnQ6IHN0cmluZztcbiAgICBtaWRkbGU6IHN0cmluZztcbiAgICBlbmQ6IHN0cmluZztcbiAgfTtcbiAgcHJpbWFyeUNvbG9yPzogc3RyaW5nO1xuICB0ZXJtaW5hbEJhY2tncm91bmQ/OiBzdHJpbmc7XG4gIGhvbWVSb3V0ZT86IHN0cmluZztcbiAgaG9tZUJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIHNob3dMYW5ndWFnZVNlbGVjdG9yPzogYm9vbGVhbjtcbn1cbiJdfQ==