valtech-components 2.0.595 → 2.0.597
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/content-reaction/content-reaction.component.mjs +206 -0
- package/esm2022/lib/components/molecules/content-reaction/types.mjs +2 -0
- package/esm2022/lib/components/molecules/docs-section/docs-section.component.mjs +85 -0
- package/esm2022/lib/components/molecules/docs-section/types.mjs +2 -0
- package/esm2022/lib/components/molecules/feedback-form/feedback-form.component.mjs +354 -0
- package/esm2022/lib/components/molecules/feedback-form/types.mjs +2 -0
- package/esm2022/lib/components/templates/docs-page/docs-page.component.mjs +188 -0
- package/esm2022/lib/components/templates/docs-page/types.mjs +2 -0
- package/esm2022/lib/services/ads/types.mjs +1 -1
- package/esm2022/lib/services/feedback/config.mjs +49 -0
- package/esm2022/lib/services/feedback/feedback.service.mjs +264 -0
- package/esm2022/lib/services/feedback/index.mjs +44 -0
- package/esm2022/lib/services/feedback/types.mjs +30 -0
- package/esm2022/public-api.mjs +10 -5
- package/fesm2022/valtech-components.mjs +1184 -4
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/molecules/content-reaction/content-reaction.component.d.ts +57 -0
- package/lib/components/molecules/content-reaction/types.d.ts +71 -0
- package/lib/components/molecules/docs-section/docs-section.component.d.ts +29 -0
- package/lib/components/molecules/docs-section/types.d.ts +27 -0
- package/lib/components/molecules/feedback-form/feedback-form.component.d.ts +58 -0
- package/lib/components/molecules/feedback-form/types.d.ts +54 -0
- package/lib/components/templates/docs-page/docs-page.component.d.ts +54 -0
- package/lib/components/templates/docs-page/types.d.ts +69 -0
- package/lib/services/ads/types.d.ts +10 -0
- package/lib/services/feedback/config.d.ts +35 -0
- package/lib/services/feedback/feedback.service.d.ts +115 -0
- package/lib/services/feedback/index.d.ts +40 -0
- package/lib/services/feedback/types.d.ts +173 -0
- package/package.json +1 -1
- package/public-api.d.ts +9 -0
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { Component, EventEmitter, Input, Output, inject, signal, } from '@angular/core';
|
|
3
|
+
import { I18nService } from '../../../services/i18n';
|
|
4
|
+
import { FormBuilder, ReactiveFormsModule, Validators, } from '@angular/forms';
|
|
5
|
+
import { IonButton, IonIcon, IonItem, IonLabel, IonList, IonNote, IonSelect, IonSelectOption, IonSpinner, IonText, IonTextarea, } from '@ionic/angular/standalone';
|
|
6
|
+
import { addIcons } from 'ionicons';
|
|
7
|
+
import { bugOutline, bulbOutline, chatbubbleOutline, checkmarkCircleOutline, closeCircleOutline, documentTextOutline, } from 'ionicons/icons';
|
|
8
|
+
import { FeedbackService, DEFAULT_FEEDBACK_TYPE_OPTIONS, } from '../../../services/feedback';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@angular/common";
|
|
11
|
+
import * as i2 from "@angular/forms";
|
|
12
|
+
/**
|
|
13
|
+
* val-feedback-form
|
|
14
|
+
*
|
|
15
|
+
* Formulario reutilizable para enviar feedback desde cualquier parte de la aplicación.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```html
|
|
19
|
+
* <!-- Feedback general -->
|
|
20
|
+
* <val-feedback-form
|
|
21
|
+
* [props]="{ defaultType: 'feedback', showTypeSelector: true }"
|
|
22
|
+
* (onSubmit)="handleSuccess($event)"
|
|
23
|
+
* (onCancel)="closeModal()"
|
|
24
|
+
* />
|
|
25
|
+
*
|
|
26
|
+
* <!-- Reportar contenido incorrecto -->
|
|
27
|
+
* <val-feedback-form
|
|
28
|
+
* [props]="{
|
|
29
|
+
* defaultType: 'poor-content',
|
|
30
|
+
* showTypeSelector: false,
|
|
31
|
+
* contentRef: { contentId: article.id, contentType: 'article' },
|
|
32
|
+
* submitButtonText: 'Reportar contenido'
|
|
33
|
+
* }"
|
|
34
|
+
* />
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export class FeedbackFormComponent {
|
|
38
|
+
constructor() {
|
|
39
|
+
/**
|
|
40
|
+
* Configuración del formulario.
|
|
41
|
+
*/
|
|
42
|
+
this.props = {};
|
|
43
|
+
/**
|
|
44
|
+
* Evento emitido cuando el feedback se envía exitosamente.
|
|
45
|
+
*/
|
|
46
|
+
this.onSubmit = new EventEmitter();
|
|
47
|
+
/**
|
|
48
|
+
* Evento emitido cuando el usuario cancela.
|
|
49
|
+
*/
|
|
50
|
+
this.onCancel = new EventEmitter();
|
|
51
|
+
this.fb = inject(FormBuilder);
|
|
52
|
+
this.feedbackService = inject(FeedbackService);
|
|
53
|
+
this.i18n = inject(I18nService);
|
|
54
|
+
this.typeOptions = DEFAULT_FEEDBACK_TYPE_OPTIONS;
|
|
55
|
+
this.isSubmitting = signal(false);
|
|
56
|
+
this.isSuccess = signal(false);
|
|
57
|
+
this.error = signal(null);
|
|
58
|
+
addIcons({
|
|
59
|
+
bugOutline,
|
|
60
|
+
bulbOutline,
|
|
61
|
+
chatbubbleOutline,
|
|
62
|
+
checkmarkCircleOutline,
|
|
63
|
+
closeCircleOutline,
|
|
64
|
+
documentTextOutline,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
ngOnInit() {
|
|
68
|
+
// Filtrar tipos habilitados si se especifica
|
|
69
|
+
if (this.props.enabledTypes?.length) {
|
|
70
|
+
this.typeOptions = this.typeOptions.filter((opt) => this.props.enabledTypes.includes(opt.value));
|
|
71
|
+
}
|
|
72
|
+
// Usar opciones personalizadas si se proporcionan
|
|
73
|
+
if (this.props.typeOptions?.length) {
|
|
74
|
+
this.typeOptions = this.props.typeOptions;
|
|
75
|
+
}
|
|
76
|
+
// Inicializar formulario
|
|
77
|
+
this.form = this.fb.group({
|
|
78
|
+
type: [this.props.defaultType || 'feedback', Validators.required],
|
|
79
|
+
title: [
|
|
80
|
+
'',
|
|
81
|
+
[Validators.required, Validators.minLength(5), Validators.maxLength(200)],
|
|
82
|
+
],
|
|
83
|
+
description: [
|
|
84
|
+
'',
|
|
85
|
+
[Validators.required, Validators.minLength(10), Validators.maxLength(5000)],
|
|
86
|
+
],
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
async handleSubmit() {
|
|
90
|
+
if (this.form.invalid || this.isSubmitting())
|
|
91
|
+
return;
|
|
92
|
+
this.isSubmitting.set(true);
|
|
93
|
+
this.error.set(null);
|
|
94
|
+
this.isSuccess.set(false);
|
|
95
|
+
try {
|
|
96
|
+
const { type, title, description } = this.form.value;
|
|
97
|
+
const response = await this.feedbackService.createAsync(type, title, description, [], // attachments (por ahora vacío)
|
|
98
|
+
this.props.contentRef);
|
|
99
|
+
this.isSuccess.set(true);
|
|
100
|
+
this.form.reset({ type: this.props.defaultType || 'feedback' });
|
|
101
|
+
this.onSubmit.emit({
|
|
102
|
+
response,
|
|
103
|
+
type: type,
|
|
104
|
+
title,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
this.error.set(err.error?.message || err.message || this.i18n.t('feedbackError'));
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
this.isSubmitting.set(false);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
onCancelClick() {
|
|
115
|
+
this.onCancel.emit();
|
|
116
|
+
}
|
|
117
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeedbackFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
118
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FeedbackFormComponent, isStandalone: true, selector: "val-feedback-form", inputs: { props: "props" }, outputs: { onSubmit: "onSubmit", onCancel: "onCancel" }, ngImport: i0, template: `
|
|
119
|
+
<form
|
|
120
|
+
[formGroup]="form"
|
|
121
|
+
(ngSubmit)="handleSubmit()"
|
|
122
|
+
class="feedback-form"
|
|
123
|
+
[class.compact]="props.compact"
|
|
124
|
+
[ngClass]="props.cssClass"
|
|
125
|
+
>
|
|
126
|
+
<!-- Type selector -->
|
|
127
|
+
@if (props.showTypeSelector !== false) {
|
|
128
|
+
<ion-item>
|
|
129
|
+
<ion-select
|
|
130
|
+
formControlName="type"
|
|
131
|
+
[label]="i18n.t('feedbackType')"
|
|
132
|
+
labelPlacement="floating"
|
|
133
|
+
interface="popover"
|
|
134
|
+
>
|
|
135
|
+
@for (option of typeOptions; track option.value) {
|
|
136
|
+
<ion-select-option [value]="option.value">
|
|
137
|
+
{{ option.label }}
|
|
138
|
+
</ion-select-option>
|
|
139
|
+
}
|
|
140
|
+
</ion-select>
|
|
141
|
+
</ion-item>
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
<!-- Title -->
|
|
145
|
+
<ion-item>
|
|
146
|
+
<ion-textarea
|
|
147
|
+
formControlName="title"
|
|
148
|
+
[label]="props.titleLabel || i18n.t('title')"
|
|
149
|
+
labelPlacement="floating"
|
|
150
|
+
[placeholder]="props.titlePlaceholder || i18n.t('titlePlaceholder')"
|
|
151
|
+
[maxlength]="200"
|
|
152
|
+
[counter]="true"
|
|
153
|
+
[autoGrow]="false"
|
|
154
|
+
rows="1"
|
|
155
|
+
></ion-textarea>
|
|
156
|
+
</ion-item>
|
|
157
|
+
@if (form.get('title')?.invalid && form.get('title')?.touched) {
|
|
158
|
+
<ion-note color="danger" class="ion-padding-start">
|
|
159
|
+
{{ i18n.t('titleValidation') }}
|
|
160
|
+
</ion-note>
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
<!-- Description -->
|
|
164
|
+
<ion-item>
|
|
165
|
+
<ion-textarea
|
|
166
|
+
formControlName="description"
|
|
167
|
+
[label]="props.descriptionLabel || i18n.t('description')"
|
|
168
|
+
labelPlacement="floating"
|
|
169
|
+
[placeholder]="props.descriptionPlaceholder || i18n.t('descriptionPlaceholder')"
|
|
170
|
+
[maxlength]="5000"
|
|
171
|
+
[counter]="true"
|
|
172
|
+
[autoGrow]="true"
|
|
173
|
+
rows="4"
|
|
174
|
+
></ion-textarea>
|
|
175
|
+
</ion-item>
|
|
176
|
+
@if (form.get('description')?.invalid && form.get('description')?.touched) {
|
|
177
|
+
<ion-note color="danger" class="ion-padding-start">
|
|
178
|
+
{{ i18n.t('descriptionValidation') }}
|
|
179
|
+
</ion-note>
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
<!-- Error message -->
|
|
183
|
+
@if (error()) {
|
|
184
|
+
<div class="feedback-alert error">
|
|
185
|
+
<ion-icon name="close-circle-outline"></ion-icon>
|
|
186
|
+
<span>{{ error() }}</span>
|
|
187
|
+
</div>
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
<!-- Success message -->
|
|
191
|
+
@if (isSuccess()) {
|
|
192
|
+
<div class="feedback-alert success">
|
|
193
|
+
<ion-icon name="checkmark-circle-outline"></ion-icon>
|
|
194
|
+
<span>{{ props.successMessage || i18n.t('feedbackSuccess') }}</span>
|
|
195
|
+
</div>
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
<!-- Actions -->
|
|
199
|
+
<div class="form-actions">
|
|
200
|
+
@if (props.cancelButtonText) {
|
|
201
|
+
<ion-button
|
|
202
|
+
fill="outline"
|
|
203
|
+
color="medium"
|
|
204
|
+
type="button"
|
|
205
|
+
(click)="onCancelClick()"
|
|
206
|
+
>
|
|
207
|
+
{{ props.cancelButtonText }}
|
|
208
|
+
</ion-button>
|
|
209
|
+
}
|
|
210
|
+
<ion-button
|
|
211
|
+
type="submit"
|
|
212
|
+
[disabled]="form.invalid || isSubmitting()"
|
|
213
|
+
expand="block"
|
|
214
|
+
>
|
|
215
|
+
@if (isSubmitting()) {
|
|
216
|
+
<ion-spinner name="crescent"></ion-spinner>
|
|
217
|
+
} @else {
|
|
218
|
+
{{ props.submitButtonText || i18n.t('submit') }}
|
|
219
|
+
}
|
|
220
|
+
</ion-button>
|
|
221
|
+
</div>
|
|
222
|
+
</form>
|
|
223
|
+
`, isInline: true, styles: [".feedback-form{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.form-actions{display:flex;gap:8px;margin-top:16px;justify-content:flex-end;ion-button{flex:1}}.feedback-alert{display:flex;align-items:center;gap:8px;padding:12px 16px;border-radius:8px;margin-top:8px;&.error{background-color:var(--ion-color-danger-tint);color:var(--ion-color-danger-shade)}&.success{background-color:var(--ion-color-success-tint);color:var(--ion-color-success-shade)}ion-icon{font-size:20px}}ion-note{font-size:12px;margin-top:-4px;margin-bottom:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonTextarea, selector: "ion-textarea", inputs: ["autoGrow", "autocapitalize", "autofocus", "clearOnEdit", "color", "cols", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "maxlength", "minlength", "mode", "name", "placeholder", "readonly", "required", "rows", "shape", "spellcheck", "value", "wrap"] }] }); }
|
|
224
|
+
}
|
|
225
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeedbackFormComponent, decorators: [{
|
|
226
|
+
type: Component,
|
|
227
|
+
args: [{ selector: 'val-feedback-form', standalone: true, imports: [
|
|
228
|
+
CommonModule,
|
|
229
|
+
ReactiveFormsModule,
|
|
230
|
+
IonButton,
|
|
231
|
+
IonIcon,
|
|
232
|
+
IonItem,
|
|
233
|
+
IonLabel,
|
|
234
|
+
IonList,
|
|
235
|
+
IonNote,
|
|
236
|
+
IonSelect,
|
|
237
|
+
IonSelectOption,
|
|
238
|
+
IonSpinner,
|
|
239
|
+
IonText,
|
|
240
|
+
IonTextarea,
|
|
241
|
+
], template: `
|
|
242
|
+
<form
|
|
243
|
+
[formGroup]="form"
|
|
244
|
+
(ngSubmit)="handleSubmit()"
|
|
245
|
+
class="feedback-form"
|
|
246
|
+
[class.compact]="props.compact"
|
|
247
|
+
[ngClass]="props.cssClass"
|
|
248
|
+
>
|
|
249
|
+
<!-- Type selector -->
|
|
250
|
+
@if (props.showTypeSelector !== false) {
|
|
251
|
+
<ion-item>
|
|
252
|
+
<ion-select
|
|
253
|
+
formControlName="type"
|
|
254
|
+
[label]="i18n.t('feedbackType')"
|
|
255
|
+
labelPlacement="floating"
|
|
256
|
+
interface="popover"
|
|
257
|
+
>
|
|
258
|
+
@for (option of typeOptions; track option.value) {
|
|
259
|
+
<ion-select-option [value]="option.value">
|
|
260
|
+
{{ option.label }}
|
|
261
|
+
</ion-select-option>
|
|
262
|
+
}
|
|
263
|
+
</ion-select>
|
|
264
|
+
</ion-item>
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
<!-- Title -->
|
|
268
|
+
<ion-item>
|
|
269
|
+
<ion-textarea
|
|
270
|
+
formControlName="title"
|
|
271
|
+
[label]="props.titleLabel || i18n.t('title')"
|
|
272
|
+
labelPlacement="floating"
|
|
273
|
+
[placeholder]="props.titlePlaceholder || i18n.t('titlePlaceholder')"
|
|
274
|
+
[maxlength]="200"
|
|
275
|
+
[counter]="true"
|
|
276
|
+
[autoGrow]="false"
|
|
277
|
+
rows="1"
|
|
278
|
+
></ion-textarea>
|
|
279
|
+
</ion-item>
|
|
280
|
+
@if (form.get('title')?.invalid && form.get('title')?.touched) {
|
|
281
|
+
<ion-note color="danger" class="ion-padding-start">
|
|
282
|
+
{{ i18n.t('titleValidation') }}
|
|
283
|
+
</ion-note>
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
<!-- Description -->
|
|
287
|
+
<ion-item>
|
|
288
|
+
<ion-textarea
|
|
289
|
+
formControlName="description"
|
|
290
|
+
[label]="props.descriptionLabel || i18n.t('description')"
|
|
291
|
+
labelPlacement="floating"
|
|
292
|
+
[placeholder]="props.descriptionPlaceholder || i18n.t('descriptionPlaceholder')"
|
|
293
|
+
[maxlength]="5000"
|
|
294
|
+
[counter]="true"
|
|
295
|
+
[autoGrow]="true"
|
|
296
|
+
rows="4"
|
|
297
|
+
></ion-textarea>
|
|
298
|
+
</ion-item>
|
|
299
|
+
@if (form.get('description')?.invalid && form.get('description')?.touched) {
|
|
300
|
+
<ion-note color="danger" class="ion-padding-start">
|
|
301
|
+
{{ i18n.t('descriptionValidation') }}
|
|
302
|
+
</ion-note>
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
<!-- Error message -->
|
|
306
|
+
@if (error()) {
|
|
307
|
+
<div class="feedback-alert error">
|
|
308
|
+
<ion-icon name="close-circle-outline"></ion-icon>
|
|
309
|
+
<span>{{ error() }}</span>
|
|
310
|
+
</div>
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
<!-- Success message -->
|
|
314
|
+
@if (isSuccess()) {
|
|
315
|
+
<div class="feedback-alert success">
|
|
316
|
+
<ion-icon name="checkmark-circle-outline"></ion-icon>
|
|
317
|
+
<span>{{ props.successMessage || i18n.t('feedbackSuccess') }}</span>
|
|
318
|
+
</div>
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
<!-- Actions -->
|
|
322
|
+
<div class="form-actions">
|
|
323
|
+
@if (props.cancelButtonText) {
|
|
324
|
+
<ion-button
|
|
325
|
+
fill="outline"
|
|
326
|
+
color="medium"
|
|
327
|
+
type="button"
|
|
328
|
+
(click)="onCancelClick()"
|
|
329
|
+
>
|
|
330
|
+
{{ props.cancelButtonText }}
|
|
331
|
+
</ion-button>
|
|
332
|
+
}
|
|
333
|
+
<ion-button
|
|
334
|
+
type="submit"
|
|
335
|
+
[disabled]="form.invalid || isSubmitting()"
|
|
336
|
+
expand="block"
|
|
337
|
+
>
|
|
338
|
+
@if (isSubmitting()) {
|
|
339
|
+
<ion-spinner name="crescent"></ion-spinner>
|
|
340
|
+
} @else {
|
|
341
|
+
{{ props.submitButtonText || i18n.t('submit') }}
|
|
342
|
+
}
|
|
343
|
+
</ion-button>
|
|
344
|
+
</div>
|
|
345
|
+
</form>
|
|
346
|
+
`, styles: [".feedback-form{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.form-actions{display:flex;gap:8px;margin-top:16px;justify-content:flex-end;ion-button{flex:1}}.feedback-alert{display:flex;align-items:center;gap:8px;padding:12px 16px;border-radius:8px;margin-top:8px;&.error{background-color:var(--ion-color-danger-tint);color:var(--ion-color-danger-shade)}&.success{background-color:var(--ion-color-success-tint);color:var(--ion-color-success-shade)}ion-icon{font-size:20px}}ion-note{font-size:12px;margin-top:-4px;margin-bottom:8px}\n"] }]
|
|
347
|
+
}], ctorParameters: () => [], propDecorators: { props: [{
|
|
348
|
+
type: Input
|
|
349
|
+
}], onSubmit: [{
|
|
350
|
+
type: Output
|
|
351
|
+
}], onCancel: [{
|
|
352
|
+
type: Output
|
|
353
|
+
}] } });
|
|
354
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZGJhY2stZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrLWZvcm0vZmVlZGJhY2stZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUNMLFdBQVcsRUFFWCxtQkFBbUIsRUFDbkIsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLFNBQVMsRUFDVCxPQUFPLEVBQ1AsT0FBTyxFQUNQLFFBQVEsRUFDUixPQUFPLEVBQ1AsT0FBTyxFQUNQLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLE9BQU8sRUFDUCxXQUFXLEdBQ1osTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxVQUFVLEVBQ1YsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ2xCLG1CQUFtQixHQUNwQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFDTCxlQUFlLEVBR2YsNkJBQTZCLEdBQzlCLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFHcEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQW1MSCxNQUFNLE9BQU8scUJBQXFCO0lBMkJoQztRQTFCQTs7V0FFRztRQUNNLFVBQUssR0FBeUIsRUFBRSxDQUFDO1FBRTFDOztXQUVHO1FBQ08sYUFBUSxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBRTdEOztXQUVHO1FBQ08sYUFBUSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFdEMsT0FBRSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6QixvQkFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN4QyxTQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBR3JDLGdCQUFXLEdBQUcsNkJBQTZCLENBQUM7UUFFNUMsaUJBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsY0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixVQUFLLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztRQUdsQyxRQUFRLENBQUM7WUFDUCxVQUFVO1lBQ1YsV0FBVztZQUNYLGlCQUFpQjtZQUNqQixzQkFBc0I7WUFDdEIsa0JBQWtCO1lBQ2xCLG1CQUFtQjtTQUNwQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNOLDZDQUE2QztRQUM3QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUM3QyxDQUFDO1FBQ0osQ0FBQztRQUVELGtEQUFrRDtRQUNsRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDNUMsQ0FBQztRQUVELHlCQUF5QjtRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3hCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLFVBQVUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ2pFLEtBQUssRUFBRTtnQkFDTCxFQUFFO2dCQUNGLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDMUU7WUFDRCxXQUFXLEVBQUU7Z0JBQ1gsRUFBRTtnQkFDRixDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVFO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZO1FBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUFFLE9BQU87UUFFckQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFFckQsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FDckQsSUFBb0IsRUFDcEIsS0FBSyxFQUNMLFdBQVcsRUFDWCxFQUFFLEVBQUUsZ0NBQWdDO1lBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUN0QixDQUFDO1lBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQztZQUVoRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDakIsUUFBUTtnQkFDUixJQUFJLEVBQUUsSUFBb0I7Z0JBQzFCLEtBQUs7YUFDTixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FDWixHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUNsRSxDQUFDO1FBQ0osQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QixDQUFDOytHQXRHVSxxQkFBcUI7bUdBQXJCLHFCQUFxQixrS0FoS3RCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5R1QsNm1CQXZIQyxZQUFZLDRIQUNaLG1CQUFtQixnMkJBQ25CLFNBQVMsb1BBQ1QsT0FBTywySkFDUCxPQUFPLDBOQUdQLE9BQU8sZ0ZBQ1AsU0FBUyxrVkFDVCxlQUFlLDZGQUNmLFVBQVUseUdBRVYsV0FBVzs7NEZBa0tGLHFCQUFxQjtrQkFsTGpDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsU0FBUzt3QkFDVCxPQUFPO3dCQUNQLE9BQU87d0JBQ1AsUUFBUTt3QkFDUixPQUFPO3dCQUNQLE9BQU87d0JBQ1AsU0FBUzt3QkFDVCxlQUFlO3dCQUNmLFVBQVU7d0JBQ1YsT0FBTzt3QkFDUCxXQUFXO3FCQUNaLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlHVDt3REEyRFEsS0FBSztzQkFBYixLQUFLO2dCQUtJLFFBQVE7c0JBQWpCLE1BQU07Z0JBS0csUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBpbmplY3QsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHtcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Hcm91cCxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgSW9uQnV0dG9uLFxuICBJb25JY29uLFxuICBJb25JdGVtLFxuICBJb25MYWJlbCxcbiAgSW9uTGlzdCxcbiAgSW9uTm90ZSxcbiAgSW9uU2VsZWN0LFxuICBJb25TZWxlY3RPcHRpb24sXG4gIElvblNwaW5uZXIsXG4gIElvblRleHQsXG4gIElvblRleHRhcmVhLFxufSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHtcbiAgYnVnT3V0bGluZSxcbiAgYnVsYk91dGxpbmUsXG4gIGNoYXRidWJibGVPdXRsaW5lLFxuICBjaGVja21hcmtDaXJjbGVPdXRsaW5lLFxuICBjbG9zZUNpcmNsZU91dGxpbmUsXG4gIGRvY3VtZW50VGV4dE91dGxpbmUsXG59IGZyb20gJ2lvbmljb25zL2ljb25zJztcblxuaW1wb3J0IHtcbiAgRmVlZGJhY2tTZXJ2aWNlLFxuICBGZWVkYmFja1R5cGUsXG4gIENyZWF0ZUZlZWRiYWNrUmVzcG9uc2UsXG4gIERFRkFVTFRfRkVFREJBQ0tfVFlQRV9PUFRJT05TLFxufSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mZWVkYmFjayc7XG5pbXBvcnQgeyBGZWVkYmFja0Zvcm1NZXRhZGF0YSwgRmVlZGJhY2tTdWJtaXRFdmVudCB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIHZhbC1mZWVkYmFjay1mb3JtXG4gKlxuICogRm9ybXVsYXJpbyByZXV0aWxpemFibGUgcGFyYSBlbnZpYXIgZmVlZGJhY2sgZGVzZGUgY3VhbHF1aWVyIHBhcnRlIGRlIGxhIGFwbGljYWNpw7NuLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8IS0tIEZlZWRiYWNrIGdlbmVyYWwgLS0+XG4gKiA8dmFsLWZlZWRiYWNrLWZvcm1cbiAqICAgW3Byb3BzXT1cInsgZGVmYXVsdFR5cGU6ICdmZWVkYmFjaycsIHNob3dUeXBlU2VsZWN0b3I6IHRydWUgfVwiXG4gKiAgIChvblN1Ym1pdCk9XCJoYW5kbGVTdWNjZXNzKCRldmVudClcIlxuICogICAob25DYW5jZWwpPVwiY2xvc2VNb2RhbCgpXCJcbiAqIC8+XG4gKlxuICogPCEtLSBSZXBvcnRhciBjb250ZW5pZG8gaW5jb3JyZWN0byAtLT5cbiAqIDx2YWwtZmVlZGJhY2stZm9ybVxuICogICBbcHJvcHNdPVwie1xuICogICAgIGRlZmF1bHRUeXBlOiAncG9vci1jb250ZW50JyxcbiAqICAgICBzaG93VHlwZVNlbGVjdG9yOiBmYWxzZSxcbiAqICAgICBjb250ZW50UmVmOiB7IGNvbnRlbnRJZDogYXJ0aWNsZS5pZCwgY29udGVudFR5cGU6ICdhcnRpY2xlJyB9LFxuICogICAgIHN1Ym1pdEJ1dHRvblRleHQ6ICdSZXBvcnRhciBjb250ZW5pZG8nXG4gKiAgIH1cIlxuICogLz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtZmVlZGJhY2stZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBJb25CdXR0b24sXG4gICAgSW9uSWNvbixcbiAgICBJb25JdGVtLFxuICAgIElvbkxhYmVsLFxuICAgIElvbkxpc3QsXG4gICAgSW9uTm90ZSxcbiAgICBJb25TZWxlY3QsXG4gICAgSW9uU2VsZWN0T3B0aW9uLFxuICAgIElvblNwaW5uZXIsXG4gICAgSW9uVGV4dCxcbiAgICBJb25UZXh0YXJlYSxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8Zm9ybVxuICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgIChuZ1N1Ym1pdCk9XCJoYW5kbGVTdWJtaXQoKVwiXG4gICAgICBjbGFzcz1cImZlZWRiYWNrLWZvcm1cIlxuICAgICAgW2NsYXNzLmNvbXBhY3RdPVwicHJvcHMuY29tcGFjdFwiXG4gICAgICBbbmdDbGFzc109XCJwcm9wcy5jc3NDbGFzc1wiXG4gICAgPlxuICAgICAgPCEtLSBUeXBlIHNlbGVjdG9yIC0tPlxuICAgICAgQGlmIChwcm9wcy5zaG93VHlwZVNlbGVjdG9yICE9PSBmYWxzZSkge1xuICAgICAgICA8aW9uLWl0ZW0+XG4gICAgICAgICAgPGlvbi1zZWxlY3RcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInR5cGVcIlxuICAgICAgICAgICAgW2xhYmVsXT1cImkxOG4udCgnZmVlZGJhY2tUeXBlJylcIlxuICAgICAgICAgICAgbGFiZWxQbGFjZW1lbnQ9XCJmbG9hdGluZ1wiXG4gICAgICAgICAgICBpbnRlcmZhY2U9XCJwb3BvdmVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgdHlwZU9wdGlvbnM7IHRyYWNrIG9wdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICA8aW9uLXNlbGVjdC1vcHRpb24gW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxuICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxuICAgICAgICAgICAgICA8L2lvbi1zZWxlY3Qtb3B0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvaW9uLXNlbGVjdD5cbiAgICAgICAgPC9pb24taXRlbT5cbiAgICAgIH1cblxuICAgICAgPCEtLSBUaXRsZSAtLT5cbiAgICAgIDxpb24taXRlbT5cbiAgICAgICAgPGlvbi10ZXh0YXJlYVxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCJcbiAgICAgICAgICBbbGFiZWxdPVwicHJvcHMudGl0bGVMYWJlbCB8fCBpMThuLnQoJ3RpdGxlJylcIlxuICAgICAgICAgIGxhYmVsUGxhY2VtZW50PVwiZmxvYXRpbmdcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwcm9wcy50aXRsZVBsYWNlaG9sZGVyIHx8IGkxOG4udCgndGl0bGVQbGFjZWhvbGRlcicpXCJcbiAgICAgICAgICBbbWF4bGVuZ3RoXT1cIjIwMFwiXG4gICAgICAgICAgW2NvdW50ZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgW2F1dG9Hcm93XT1cImZhbHNlXCJcbiAgICAgICAgICByb3dzPVwiMVwiXG4gICAgICAgID48L2lvbi10ZXh0YXJlYT5cbiAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICBAaWYgKGZvcm0uZ2V0KCd0aXRsZScpPy5pbnZhbGlkICYmIGZvcm0uZ2V0KCd0aXRsZScpPy50b3VjaGVkKSB7XG4gICAgICAgIDxpb24tbm90ZSBjb2xvcj1cImRhbmdlclwiIGNsYXNzPVwiaW9uLXBhZGRpbmctc3RhcnRcIj5cbiAgICAgICAgICB7eyBpMThuLnQoJ3RpdGxlVmFsaWRhdGlvbicpIH19XG4gICAgICAgIDwvaW9uLW5vdGU+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gRGVzY3JpcHRpb24gLS0+XG4gICAgICA8aW9uLWl0ZW0+XG4gICAgICAgIDxpb24tdGV4dGFyZWFcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgW2xhYmVsXT1cInByb3BzLmRlc2NyaXB0aW9uTGFiZWwgfHwgaTE4bi50KCdkZXNjcmlwdGlvbicpXCJcbiAgICAgICAgICBsYWJlbFBsYWNlbWVudD1cImZsb2F0aW5nXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicHJvcHMuZGVzY3JpcHRpb25QbGFjZWhvbGRlciB8fCBpMThuLnQoJ2Rlc2NyaXB0aW9uUGxhY2Vob2xkZXInKVwiXG4gICAgICAgICAgW21heGxlbmd0aF09XCI1MDAwXCJcbiAgICAgICAgICBbY291bnRlcl09XCJ0cnVlXCJcbiAgICAgICAgICBbYXV0b0dyb3ddPVwidHJ1ZVwiXG4gICAgICAgICAgcm93cz1cIjRcIlxuICAgICAgICA+PC9pb24tdGV4dGFyZWE+XG4gICAgICA8L2lvbi1pdGVtPlxuICAgICAgQGlmIChmb3JtLmdldCgnZGVzY3JpcHRpb24nKT8uaW52YWxpZCAmJiBmb3JtLmdldCgnZGVzY3JpcHRpb24nKT8udG91Y2hlZCkge1xuICAgICAgICA8aW9uLW5vdGUgY29sb3I9XCJkYW5nZXJcIiBjbGFzcz1cImlvbi1wYWRkaW5nLXN0YXJ0XCI+XG4gICAgICAgICAge3sgaTE4bi50KCdkZXNjcmlwdGlvblZhbGlkYXRpb24nKSB9fVxuICAgICAgICA8L2lvbi1ub3RlPlxuICAgICAgfVxuXG4gICAgICA8IS0tIEVycm9yIG1lc3NhZ2UgLS0+XG4gICAgICBAaWYgKGVycm9yKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZlZWRiYWNrLWFsZXJ0IGVycm9yXCI+XG4gICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1jaXJjbGUtb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgZXJyb3IoKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gU3VjY2VzcyBtZXNzYWdlIC0tPlxuICAgICAgQGlmIChpc1N1Y2Nlc3MoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmVlZGJhY2stYWxlcnQgc3VjY2Vzc1wiPlxuICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hlY2ttYXJrLWNpcmNsZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBwcm9wcy5zdWNjZXNzTWVzc2FnZSB8fCBpMThuLnQoJ2ZlZWRiYWNrU3VjY2VzcycpIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgPCEtLSBBY3Rpb25zIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tYWN0aW9uc1wiPlxuICAgICAgICBAaWYgKHByb3BzLmNhbmNlbEJ1dHRvblRleHQpIHtcbiAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgZmlsbD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgY29sb3I9XCJtZWRpdW1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25DYW5jZWxDbGljaygpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBwcm9wcy5jYW5jZWxCdXR0b25UZXh0IH19XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICB9XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZCB8fCBpc1N1Ym1pdHRpbmcoKVwiXG4gICAgICAgICAgZXhwYW5kPVwiYmxvY2tcIlxuICAgICAgICA+XG4gICAgICAgICAgQGlmIChpc1N1Ym1pdHRpbmcoKSkge1xuICAgICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJjcmVzY2VudFwiPjwvaW9uLXNwaW5uZXI+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICB7eyBwcm9wcy5zdWJtaXRCdXR0b25UZXh0IHx8IGkxOG4udCgnc3VibWl0JykgfX1cbiAgICAgICAgICB9XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLmZlZWRiYWNrLWZvcm0ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDhweDtcblxuICAgICAgICAmLmNvbXBhY3Qge1xuICAgICAgICAgIGdhcDogNHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5mb3JtLWFjdGlvbnMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcblxuICAgICAgICBpb24tYnV0dG9uIHtcbiAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5mZWVkYmFjay1hbGVydCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgbWFyZ2luLXRvcDogOHB4O1xuXG4gICAgICAgICYuZXJyb3Ige1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYW5nZXItdGludCk7XG4gICAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYW5nZXItc2hhZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5zdWNjZXNzIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pb24tY29sb3Itc3VjY2Vzcy10aW50KTtcbiAgICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXN1Y2Nlc3Mtc2hhZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaW9uLWljb24ge1xuICAgICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpb24tbm90ZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgbWFyZ2luLXRvcDogLTRweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZlZWRiYWNrRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBDb25maWd1cmFjacOzbiBkZWwgZm9ybXVsYXJpby5cbiAgICovXG4gIEBJbnB1dCgpIHByb3BzOiBGZWVkYmFja0Zvcm1NZXRhZGF0YSA9IHt9O1xuXG4gIC8qKlxuICAgKiBFdmVudG8gZW1pdGlkbyBjdWFuZG8gZWwgZmVlZGJhY2sgc2UgZW52w61hIGV4aXRvc2FtZW50ZS5cbiAgICovXG4gIEBPdXRwdXQoKSBvblN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8RmVlZGJhY2tTdWJtaXRFdmVudD4oKTtcblxuICAvKipcbiAgICogRXZlbnRvIGVtaXRpZG8gY3VhbmRvIGVsIHVzdWFyaW8gY2FuY2VsYS5cbiAgICovXG4gIEBPdXRwdXQoKSBvbkNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBwcml2YXRlIGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcbiAgcHJpdmF0ZSBmZWVkYmFja1NlcnZpY2UgPSBpbmplY3QoRmVlZGJhY2tTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuXG4gIGZvcm0hOiBGb3JtR3JvdXA7XG4gIHR5cGVPcHRpb25zID0gREVGQVVMVF9GRUVEQkFDS19UWVBFX09QVElPTlM7XG5cbiAgaXNTdWJtaXR0aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgaXNTdWNjZXNzID0gc2lnbmFsKGZhbHNlKTtcbiAgZXJyb3IgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgYWRkSWNvbnMoe1xuICAgICAgYnVnT3V0bGluZSxcbiAgICAgIGJ1bGJPdXRsaW5lLFxuICAgICAgY2hhdGJ1YmJsZU91dGxpbmUsXG4gICAgICBjaGVja21hcmtDaXJjbGVPdXRsaW5lLFxuICAgICAgY2xvc2VDaXJjbGVPdXRsaW5lLFxuICAgICAgZG9jdW1lbnRUZXh0T3V0bGluZSxcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIEZpbHRyYXIgdGlwb3MgaGFiaWxpdGFkb3Mgc2kgc2UgZXNwZWNpZmljYVxuICAgIGlmICh0aGlzLnByb3BzLmVuYWJsZWRUeXBlcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnR5cGVPcHRpb25zID0gdGhpcy50eXBlT3B0aW9ucy5maWx0ZXIoKG9wdCkgPT5cbiAgICAgICAgdGhpcy5wcm9wcy5lbmFibGVkVHlwZXMhLmluY2x1ZGVzKG9wdC52YWx1ZSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVXNhciBvcGNpb25lcyBwZXJzb25hbGl6YWRhcyBzaSBzZSBwcm9wb3JjaW9uYW5cbiAgICBpZiAodGhpcy5wcm9wcy50eXBlT3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnR5cGVPcHRpb25zID0gdGhpcy5wcm9wcy50eXBlT3B0aW9ucztcbiAgICB9XG5cbiAgICAvLyBJbmljaWFsaXphciBmb3JtdWxhcmlvXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICB0eXBlOiBbdGhpcy5wcm9wcy5kZWZhdWx0VHlwZSB8fCAnZmVlZGJhY2snLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHRpdGxlOiBbXG4gICAgICAgICcnLFxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNSksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDIwMCldLFxuICAgICAgXSxcbiAgICAgIGRlc2NyaXB0aW9uOiBbXG4gICAgICAgICcnLFxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMTApLCBWYWxpZGF0b3JzLm1heExlbmd0aCg1MDAwKV0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlU3VibWl0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCB8fCB0aGlzLmlzU3VibWl0dGluZygpKSByZXR1cm47XG5cbiAgICB0aGlzLmlzU3VibWl0dGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5lcnJvci5zZXQobnVsbCk7XG4gICAgdGhpcy5pc1N1Y2Nlc3Muc2V0KGZhbHNlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHR5cGUsIHRpdGxlLCBkZXNjcmlwdGlvbiB9ID0gdGhpcy5mb3JtLnZhbHVlO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmVlZGJhY2tTZXJ2aWNlLmNyZWF0ZUFzeW5jKFxuICAgICAgICB0eXBlIGFzIEZlZWRiYWNrVHlwZSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBbXSwgLy8gYXR0YWNobWVudHMgKHBvciBhaG9yYSB2YWPDrW8pXG4gICAgICAgIHRoaXMucHJvcHMuY29udGVudFJlZlxuICAgICAgKTtcblxuICAgICAgdGhpcy5pc1N1Y2Nlc3Muc2V0KHRydWUpO1xuICAgICAgdGhpcy5mb3JtLnJlc2V0KHsgdHlwZTogdGhpcy5wcm9wcy5kZWZhdWx0VHlwZSB8fCAnZmVlZGJhY2snIH0pO1xuXG4gICAgICB0aGlzLm9uU3VibWl0LmVtaXQoe1xuICAgICAgICByZXNwb25zZSxcbiAgICAgICAgdHlwZTogdHlwZSBhcyBGZWVkYmFja1R5cGUsXG4gICAgICAgIHRpdGxlLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIHRoaXMuZXJyb3Iuc2V0KFxuICAgICAgICBlcnIuZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyLm1lc3NhZ2UgfHwgdGhpcy5pMThuLnQoJ2ZlZWRiYWNrRXJyb3InKVxuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBvbkNhbmNlbENsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMub25DYW5jZWwuZW1pdCgpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrLWZvcm0vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEZlZWRiYWNrVHlwZSxcbiAgQ29udGVudFJlZixcbiAgQ3JlYXRlRmVlZGJhY2tSZXNwb25zZSxcbiAgRmVlZGJhY2tUeXBlT3B0aW9uLFxufSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mZWVkYmFjay90eXBlcyc7XG5cbi8qKlxuICogTWV0YWRhdGEgcGFyYSBlbCBjb21wb25lbnRlIEZlZWRiYWNrRm9ybS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWVkYmFja0Zvcm1NZXRhZGF0YSB7XG4gIC8qKiBUaXBvIGRlIGZlZWRiYWNrIHByZXNlbGVjY2lvbmFkbyAqL1xuICBkZWZhdWx0VHlwZT86IEZlZWRiYWNrVHlwZTtcblxuICAvKiogUmVmZXJlbmNpYSBhIGNvbnRlbmlkbyAoc2kgYXBsaWNhKSAqL1xuICBjb250ZW50UmVmPzogQ29udGVudFJlZjtcblxuICAvKiogTW9zdHJhciBzZWxlY3RvciBkZSB0aXBvIChkZWZhdWx0OiB0cnVlKSAqL1xuICBzaG93VHlwZVNlbGVjdG9yPzogYm9vbGVhbjtcblxuICAvKiogVGlwb3MgZGUgZmVlZGJhY2sgaGFiaWxpdGFkb3MgKHBvciBkZWZlY3RvIHRvZG9zKSAqL1xuICBlbmFibGVkVHlwZXM/OiBGZWVkYmFja1R5cGVbXTtcblxuICAvKiogT3BjaW9uZXMgcGVyc29uYWxpemFkYXMgcGFyYSB0aXBvcyBkZSBmZWVkYmFjayAqL1xuICB0eXBlT3B0aW9ucz86IEZlZWRiYWNrVHlwZU9wdGlvbltdO1xuXG4gIC8qKiBQbGFjZWhvbGRlciBwYXJhIHTDrXR1bG8gKi9cbiAgdGl0bGVQbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAvKiogUGxhY2Vob2xkZXIgcGFyYSBkZXNjcmlwY2nDs24gKi9cbiAgZGVzY3JpcHRpb25QbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAvKiogTGFiZWwgcGFyYSBjYW1wbyBkZSB0w610dWxvICovXG4gIHRpdGxlTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIExhYmVsIHBhcmEgY2FtcG8gZGUgZGVzY3JpcGNpw7NuICovXG4gIGRlc2NyaXB0aW9uTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIFRleHRvIGRlbCBib3TDs24gZGUgZW52w61vICovXG4gIHN1Ym1pdEJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqIFRleHRvIGRlbCBib3TDs24gY2FuY2VsYXIgKHNpIG5vIHNlIHByb3BvcmNpb25hLCBubyBzZSBtdWVzdHJhKSAqL1xuICBjYW5jZWxCdXR0b25UZXh0Pzogc3RyaW5nO1xuXG4gIC8qKiBNb3N0cmFyIGNhbXBvIGRlIGFkanVudG9zIChkZWZhdWx0OiB0cnVlKSAqL1xuICBzaG93QXR0YWNobWVudHM/OiBib29sZWFuO1xuXG4gIC8qKiBMYWJlbCBwYXJhIGNhbXBvIGRlIGFkanVudG9zICovXG4gIGF0dGFjaG1lbnRzTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIE1lbnNhamUgZGUgw6l4aXRvIHBlcnNvbmFsaXphZG8gKi9cbiAgc3VjY2Vzc01lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqIENTUyBjbGFzcyBhZGljaW9uYWwgcGFyYSBlbCBjb250ZW5lZG9yICovXG4gIGNzc0NsYXNzPzogc3RyaW5nO1xuXG4gIC8qKiBNb2RvIGNvbXBhY3RvIChtZW5vcyBlc3BhY2lhZG8pICovXG4gIGNvbXBhY3Q/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEV2ZW50byBlbWl0aWRvIGN1YW5kbyBlbCBmZWVkYmFjayBzZSBlbnbDrWEgZXhpdG9zYW1lbnRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRiYWNrU3VibWl0RXZlbnQge1xuICByZXNwb25zZTogQ3JlYXRlRmVlZGJhY2tSZXNwb25zZTtcbiAgdHlwZTogRmVlZGJhY2tUeXBlO1xuICB0aXRsZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVzdGFkbyBkZWwgZm9ybXVsYXJpby5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWVkYmFja0Zvcm1TdGF0ZSB7XG4gIGlzU3VibWl0dGluZzogYm9vbGVhbjtcbiAgaXNTdWNjZXNzOiBib29sZWFuO1xuICBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { Component, Input, computed, signal, ElementRef, inject } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { DocsNavLinksComponent } from '../../molecules/docs-nav-links/docs-nav-links.component';
|
|
4
|
+
import { DocsTocComponent } from '../../organisms/docs-toc/docs-toc.component';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
/**
|
|
7
|
+
* val-docs-page
|
|
8
|
+
*
|
|
9
|
+
* A complete documentation page template that eliminates boilerplate.
|
|
10
|
+
* Provides automatic TOC generation, navigation links, and consistent styling.
|
|
11
|
+
*
|
|
12
|
+
* @example Basic usage
|
|
13
|
+
* ```html
|
|
14
|
+
* <val-docs-page [props]="{
|
|
15
|
+
* title: 'Button',
|
|
16
|
+
* lead: 'A clickable element for user interactions.',
|
|
17
|
+
* previousPage: { title: 'Quick Start', route: ['/docs', 'quick-start'] },
|
|
18
|
+
* nextPage: { title: 'Card', route: ['/docs', 'components', 'card'] }
|
|
19
|
+
* }">
|
|
20
|
+
* <val-docs-section [props]="{ id: 'basic-usage', title: 'Basic Usage' }">
|
|
21
|
+
* <p>Content here...</p>
|
|
22
|
+
* </val-docs-section>
|
|
23
|
+
*
|
|
24
|
+
* <val-docs-section [props]="{ id: 'variants', title: 'Variants' }">
|
|
25
|
+
* <p>More content...</p>
|
|
26
|
+
* </val-docs-section>
|
|
27
|
+
* </val-docs-page>
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @example With badge
|
|
31
|
+
* ```html
|
|
32
|
+
* <val-docs-page [props]="{
|
|
33
|
+
* title: 'New Component',
|
|
34
|
+
* badge: 'New',
|
|
35
|
+
* badgeColor: 'success'
|
|
36
|
+
* }">
|
|
37
|
+
* ...
|
|
38
|
+
* </val-docs-page>
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export class DocsPageComponent {
|
|
42
|
+
constructor() {
|
|
43
|
+
this.elementRef = inject(ElementRef);
|
|
44
|
+
this.props = { title: '' };
|
|
45
|
+
this.tocItems = signal([]);
|
|
46
|
+
this.observer = null;
|
|
47
|
+
this.tocProps = computed(() => ({
|
|
48
|
+
title: this.props.toc?.title ?? 'On this page',
|
|
49
|
+
items: this.tocItems(),
|
|
50
|
+
}));
|
|
51
|
+
this.navLinksProps = computed(() => ({
|
|
52
|
+
previous: this.props.previousPage
|
|
53
|
+
? {
|
|
54
|
+
label: this.props.navLabels?.previous ?? 'Previous',
|
|
55
|
+
title: this.props.previousPage.title,
|
|
56
|
+
route: this.props.previousPage.route,
|
|
57
|
+
}
|
|
58
|
+
: undefined,
|
|
59
|
+
next: this.props.nextPage
|
|
60
|
+
? {
|
|
61
|
+
label: this.props.navLabels?.next ?? 'Next',
|
|
62
|
+
title: this.props.nextPage.title,
|
|
63
|
+
route: this.props.nextPage.route,
|
|
64
|
+
}
|
|
65
|
+
: undefined,
|
|
66
|
+
}));
|
|
67
|
+
this.showNavLinks = computed(() => {
|
|
68
|
+
return !!this.props.previousPage || !!this.props.nextPage;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
ngAfterViewInit() {
|
|
72
|
+
// Initial scan
|
|
73
|
+
this.scanForSections();
|
|
74
|
+
// Watch for dynamic content changes
|
|
75
|
+
this.observer = new MutationObserver(() => {
|
|
76
|
+
this.scanForSections();
|
|
77
|
+
});
|
|
78
|
+
const contentEl = this.elementRef.nativeElement.querySelector('.docs-page__sections');
|
|
79
|
+
if (contentEl) {
|
|
80
|
+
this.observer.observe(contentEl, { childList: true, subtree: true });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
ngOnDestroy() {
|
|
84
|
+
this.observer?.disconnect();
|
|
85
|
+
}
|
|
86
|
+
scanForSections() {
|
|
87
|
+
const contentEl = this.elementRef.nativeElement.querySelector('.docs-page__sections');
|
|
88
|
+
if (!contentEl)
|
|
89
|
+
return;
|
|
90
|
+
const headings = contentEl.querySelectorAll('h2[id], h3[id], section[id] > h2, section[id] > h3');
|
|
91
|
+
const items = [];
|
|
92
|
+
headings.forEach((heading) => {
|
|
93
|
+
// Get ID from heading or parent section
|
|
94
|
+
let id = heading.id;
|
|
95
|
+
if (!id && heading.parentElement?.tagName === 'SECTION') {
|
|
96
|
+
id = heading.parentElement.id;
|
|
97
|
+
}
|
|
98
|
+
if (id) {
|
|
99
|
+
const level = heading.tagName === 'H2' ? 2 : 3;
|
|
100
|
+
items.push({ id, label: heading.textContent?.trim() || '', level });
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
this.tocItems.set(items);
|
|
104
|
+
}
|
|
105
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DocsPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
106
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DocsPageComponent, isStandalone: true, selector: "val-docs-page", inputs: { props: "props" }, ngImport: i0, template: `
|
|
107
|
+
<div class="docs-page" [class]="props.cssClass">
|
|
108
|
+
<div class="docs-page__content" #content>
|
|
109
|
+
<header class="docs-page__header">
|
|
110
|
+
<div class="docs-page__title-row">
|
|
111
|
+
<h1 class="docs-page__title">{{ props.title }}</h1>
|
|
112
|
+
@if (props.badge) {
|
|
113
|
+
<span
|
|
114
|
+
class="docs-page__badge"
|
|
115
|
+
[class.docs-page__badge--success]="props.badgeColor === 'success'"
|
|
116
|
+
[class.docs-page__badge--warning]="props.badgeColor === 'warning'"
|
|
117
|
+
[class.docs-page__badge--danger]="props.badgeColor === 'danger'"
|
|
118
|
+
>
|
|
119
|
+
{{ props.badge }}
|
|
120
|
+
</span>
|
|
121
|
+
}
|
|
122
|
+
</div>
|
|
123
|
+
@if (props.lead) {
|
|
124
|
+
<p class="docs-page__lead">{{ props.lead }}</p>
|
|
125
|
+
}
|
|
126
|
+
</header>
|
|
127
|
+
|
|
128
|
+
<div class="docs-page__sections">
|
|
129
|
+
<ng-content></ng-content>
|
|
130
|
+
</div>
|
|
131
|
+
|
|
132
|
+
@if (showNavLinks()) {
|
|
133
|
+
<val-docs-nav-links [props]="navLinksProps()"></val-docs-nav-links>
|
|
134
|
+
}
|
|
135
|
+
</div>
|
|
136
|
+
|
|
137
|
+
@if (!props.toc?.hide) {
|
|
138
|
+
<aside class="docs-page__toc">
|
|
139
|
+
<val-docs-toc [props]="tocProps()"></val-docs-toc>
|
|
140
|
+
</aside>
|
|
141
|
+
}
|
|
142
|
+
</div>
|
|
143
|
+
`, isInline: true, styles: [".docs-page{display:grid;grid-template-columns:1fr;gap:2rem;max-width:1400px;margin:0 auto;padding:2rem 1.5rem}@media (min-width: 1200px){.docs-page{grid-template-columns:1fr 220px;padding:2rem}}.docs-page__content{min-width:0;max-width:900px}.docs-page__header{margin-bottom:2rem}.docs-page__title-row{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}.docs-page__title{margin:0;font-size:2rem;font-weight:700;color:var(--ion-text-color, #1a1a1a);line-height:1.2}@media (min-width: 768px){.docs-page__title{font-size:2.5rem}}.docs-page__badge{display:inline-flex;align-items:center;padding:.25rem .625rem;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.025em;border-radius:4px;background:#00000014;color:var(--ion-color-medium-shade)}.docs-page__badge--success{background:var(--ion-color-success-tint, #e8f5e9);color:var(--ion-color-success-shade, #2e7d32)}.docs-page__badge--warning{background:var(--ion-color-warning-tint, #fff3e0);color:var(--ion-color-warning-shade, #e65100)}.docs-page__badge--danger{background:var(--ion-color-danger-tint, #ffebee);color:var(--ion-color-danger-shade, #c62828)}.docs-page__lead{margin:1rem 0 0;font-size:1.125rem;line-height:1.7;color:var(--ion-color-medium, #666)}.docs-page__sections>*:last-child{margin-bottom:0}.docs-page__toc{display:none}@media (min-width: 1200px){.docs-page__toc{display:block;position:sticky;top:2rem;height:fit-content;max-height:calc(100vh - 4rem);overflow-y:auto}}.docs-page__sections h2{font-size:1.5rem;font-weight:600;margin:0 0 1rem;color:var(--ion-text-color, #1a1a1a);scroll-margin-top:2rem}.docs-page__sections h3{font-size:1.125rem;font-weight:600;margin:1.5rem 0 1rem;color:var(--ion-text-color, #1a1a1a)}.docs-page__sections h4{font-size:1rem;font-weight:600;margin:1.25rem 0 .75rem;color:var(--ion-text-color, #1a1a1a)}.docs-page__sections p{line-height:1.7;color:var(--ion-text-color, #1a1a1a);margin:0 0 1rem}.docs-page__sections ul,.docs-page__sections ol{padding-left:1.5rem;margin:0 0 1rem}.docs-page__sections li{margin-bottom:.5rem;line-height:1.6;color:var(--ion-text-color, #1a1a1a)}.docs-page__sections a{color:var(--ion-color-primary, #3880ff);text-decoration:none}.docs-page__sections a:hover{text-decoration:underline}.docs-page__sections code:not([class*=language-]){background:#0000000f;padding:.125rem .375rem;border-radius:4px;font-family:SF Mono,Fira Code,Consolas,monospace;font-size:.875em}.docs-page__sections pre:not([class*=language-]){background:#0000000a;padding:1rem;border-radius:8px;overflow-x:auto;margin:0 0 1rem}.docs-page__sections pre:not([class*=language-]) code{background:none;padding:0}.docs-page__sections table{width:100%;border-collapse:collapse;margin:0 0 1rem;font-size:.875rem}.docs-page__sections th,.docs-page__sections td{padding:.75rem;text-align:left;border-bottom:1px solid rgba(0,0,0,.1)}.docs-page__sections th{font-weight:600;background:#00000005}.docs-page__sections blockquote{margin:0 0 1rem;padding:1rem 1.5rem;border-left:4px solid var(--ion-color-primary, #3880ff);background:#00000005;border-radius:0 8px 8px 0}.docs-page__sections blockquote p:last-child{margin-bottom:0}.docs-page__sections img{max-width:100%;height:auto;border-radius:8px}.docs-page__sections hr{border:none;border-top:1px solid rgba(0,0,0,.1);margin:2rem 0}.docs-page__sections strong{font-weight:600}.docs-page__sections section{margin-bottom:2rem}:host-context(.dark) .docs-page__badge,:host-context([color-scheme=\"dark\"]) .docs-page__badge{background:#ffffff1a;color:var(--ion-color-medium)}:host-context(.dark) .docs-page__badge--success,:host-context([color-scheme=\"dark\"]) .docs-page__badge--success{background:#2e7d3233;color:#81c784}:host-context(.dark) .docs-page__badge--warning,:host-context([color-scheme=\"dark\"]) .docs-page__badge--warning{background:#e6510033;color:#ffb74d}:host-context(.dark) .docs-page__badge--danger,:host-context([color-scheme=\"dark\"]) .docs-page__badge--danger{background:#c6282833;color:#e57373}:host-context(.dark) .docs-page__sections code:not([class*=language-]),:host-context([color-scheme=\"dark\"]) .docs-page__sections code:not([class*=language-]){background:#ffffff1a}:host-context(.dark) .docs-page__sections pre:not([class*=language-]),:host-context([color-scheme=\"dark\"]) .docs-page__sections pre:not([class*=language-]){background:#ffffff0f}:host-context(.dark) .docs-page__sections th,:host-context([color-scheme=\"dark\"]) .docs-page__sections th{background:#ffffff0a}:host-context(.dark) .docs-page__sections th,:host-context(.dark) .docs-page__sections td,:host-context([color-scheme=\"dark\"]) .docs-page__sections th,:host-context([color-scheme=\"dark\"]) .docs-page__sections td{border-color:#ffffff1a}:host-context(.dark) .docs-page__sections blockquote,:host-context([color-scheme=\"dark\"]) .docs-page__sections blockquote{background:#ffffff0a}:host-context(.dark) .docs-page__sections hr,:host-context([color-scheme=\"dark\"]) .docs-page__sections hr{border-color:#ffffff1a}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DocsNavLinksComponent, selector: "val-docs-nav-links", inputs: ["props"], outputs: ["navigate"] }, { kind: "component", type: DocsTocComponent, selector: "val-docs-toc", inputs: ["props"], outputs: ["sectionChange"] }] }); }
|
|
144
|
+
}
|
|
145
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DocsPageComponent, decorators: [{
|
|
146
|
+
type: Component,
|
|
147
|
+
args: [{ selector: 'val-docs-page', standalone: true, imports: [CommonModule, DocsNavLinksComponent, DocsTocComponent], template: `
|
|
148
|
+
<div class="docs-page" [class]="props.cssClass">
|
|
149
|
+
<div class="docs-page__content" #content>
|
|
150
|
+
<header class="docs-page__header">
|
|
151
|
+
<div class="docs-page__title-row">
|
|
152
|
+
<h1 class="docs-page__title">{{ props.title }}</h1>
|
|
153
|
+
@if (props.badge) {
|
|
154
|
+
<span
|
|
155
|
+
class="docs-page__badge"
|
|
156
|
+
[class.docs-page__badge--success]="props.badgeColor === 'success'"
|
|
157
|
+
[class.docs-page__badge--warning]="props.badgeColor === 'warning'"
|
|
158
|
+
[class.docs-page__badge--danger]="props.badgeColor === 'danger'"
|
|
159
|
+
>
|
|
160
|
+
{{ props.badge }}
|
|
161
|
+
</span>
|
|
162
|
+
}
|
|
163
|
+
</div>
|
|
164
|
+
@if (props.lead) {
|
|
165
|
+
<p class="docs-page__lead">{{ props.lead }}</p>
|
|
166
|
+
}
|
|
167
|
+
</header>
|
|
168
|
+
|
|
169
|
+
<div class="docs-page__sections">
|
|
170
|
+
<ng-content></ng-content>
|
|
171
|
+
</div>
|
|
172
|
+
|
|
173
|
+
@if (showNavLinks()) {
|
|
174
|
+
<val-docs-nav-links [props]="navLinksProps()"></val-docs-nav-links>
|
|
175
|
+
}
|
|
176
|
+
</div>
|
|
177
|
+
|
|
178
|
+
@if (!props.toc?.hide) {
|
|
179
|
+
<aside class="docs-page__toc">
|
|
180
|
+
<val-docs-toc [props]="tocProps()"></val-docs-toc>
|
|
181
|
+
</aside>
|
|
182
|
+
}
|
|
183
|
+
</div>
|
|
184
|
+
`, styles: [".docs-page{display:grid;grid-template-columns:1fr;gap:2rem;max-width:1400px;margin:0 auto;padding:2rem 1.5rem}@media (min-width: 1200px){.docs-page{grid-template-columns:1fr 220px;padding:2rem}}.docs-page__content{min-width:0;max-width:900px}.docs-page__header{margin-bottom:2rem}.docs-page__title-row{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}.docs-page__title{margin:0;font-size:2rem;font-weight:700;color:var(--ion-text-color, #1a1a1a);line-height:1.2}@media (min-width: 768px){.docs-page__title{font-size:2.5rem}}.docs-page__badge{display:inline-flex;align-items:center;padding:.25rem .625rem;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.025em;border-radius:4px;background:#00000014;color:var(--ion-color-medium-shade)}.docs-page__badge--success{background:var(--ion-color-success-tint, #e8f5e9);color:var(--ion-color-success-shade, #2e7d32)}.docs-page__badge--warning{background:var(--ion-color-warning-tint, #fff3e0);color:var(--ion-color-warning-shade, #e65100)}.docs-page__badge--danger{background:var(--ion-color-danger-tint, #ffebee);color:var(--ion-color-danger-shade, #c62828)}.docs-page__lead{margin:1rem 0 0;font-size:1.125rem;line-height:1.7;color:var(--ion-color-medium, #666)}.docs-page__sections>*:last-child{margin-bottom:0}.docs-page__toc{display:none}@media (min-width: 1200px){.docs-page__toc{display:block;position:sticky;top:2rem;height:fit-content;max-height:calc(100vh - 4rem);overflow-y:auto}}.docs-page__sections h2{font-size:1.5rem;font-weight:600;margin:0 0 1rem;color:var(--ion-text-color, #1a1a1a);scroll-margin-top:2rem}.docs-page__sections h3{font-size:1.125rem;font-weight:600;margin:1.5rem 0 1rem;color:var(--ion-text-color, #1a1a1a)}.docs-page__sections h4{font-size:1rem;font-weight:600;margin:1.25rem 0 .75rem;color:var(--ion-text-color, #1a1a1a)}.docs-page__sections p{line-height:1.7;color:var(--ion-text-color, #1a1a1a);margin:0 0 1rem}.docs-page__sections ul,.docs-page__sections ol{padding-left:1.5rem;margin:0 0 1rem}.docs-page__sections li{margin-bottom:.5rem;line-height:1.6;color:var(--ion-text-color, #1a1a1a)}.docs-page__sections a{color:var(--ion-color-primary, #3880ff);text-decoration:none}.docs-page__sections a:hover{text-decoration:underline}.docs-page__sections code:not([class*=language-]){background:#0000000f;padding:.125rem .375rem;border-radius:4px;font-family:SF Mono,Fira Code,Consolas,monospace;font-size:.875em}.docs-page__sections pre:not([class*=language-]){background:#0000000a;padding:1rem;border-radius:8px;overflow-x:auto;margin:0 0 1rem}.docs-page__sections pre:not([class*=language-]) code{background:none;padding:0}.docs-page__sections table{width:100%;border-collapse:collapse;margin:0 0 1rem;font-size:.875rem}.docs-page__sections th,.docs-page__sections td{padding:.75rem;text-align:left;border-bottom:1px solid rgba(0,0,0,.1)}.docs-page__sections th{font-weight:600;background:#00000005}.docs-page__sections blockquote{margin:0 0 1rem;padding:1rem 1.5rem;border-left:4px solid var(--ion-color-primary, #3880ff);background:#00000005;border-radius:0 8px 8px 0}.docs-page__sections blockquote p:last-child{margin-bottom:0}.docs-page__sections img{max-width:100%;height:auto;border-radius:8px}.docs-page__sections hr{border:none;border-top:1px solid rgba(0,0,0,.1);margin:2rem 0}.docs-page__sections strong{font-weight:600}.docs-page__sections section{margin-bottom:2rem}:host-context(.dark) .docs-page__badge,:host-context([color-scheme=\"dark\"]) .docs-page__badge{background:#ffffff1a;color:var(--ion-color-medium)}:host-context(.dark) .docs-page__badge--success,:host-context([color-scheme=\"dark\"]) .docs-page__badge--success{background:#2e7d3233;color:#81c784}:host-context(.dark) .docs-page__badge--warning,:host-context([color-scheme=\"dark\"]) .docs-page__badge--warning{background:#e6510033;color:#ffb74d}:host-context(.dark) .docs-page__badge--danger,:host-context([color-scheme=\"dark\"]) .docs-page__badge--danger{background:#c6282833;color:#e57373}:host-context(.dark) .docs-page__sections code:not([class*=language-]),:host-context([color-scheme=\"dark\"]) .docs-page__sections code:not([class*=language-]){background:#ffffff1a}:host-context(.dark) .docs-page__sections pre:not([class*=language-]),:host-context([color-scheme=\"dark\"]) .docs-page__sections pre:not([class*=language-]){background:#ffffff0f}:host-context(.dark) .docs-page__sections th,:host-context([color-scheme=\"dark\"]) .docs-page__sections th{background:#ffffff0a}:host-context(.dark) .docs-page__sections th,:host-context(.dark) .docs-page__sections td,:host-context([color-scheme=\"dark\"]) .docs-page__sections th,:host-context([color-scheme=\"dark\"]) .docs-page__sections td{border-color:#ffffff1a}:host-context(.dark) .docs-page__sections blockquote,:host-context([color-scheme=\"dark\"]) .docs-page__sections blockquote{background:#ffffff0a}:host-context(.dark) .docs-page__sections hr,:host-context([color-scheme=\"dark\"]) .docs-page__sections hr{border-color:#ffffff1a}\n"] }]
|
|
185
|
+
}], propDecorators: { props: [{
|
|
186
|
+
type: Input
|
|
187
|
+
}] } });
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jcy1wYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy90ZW1wbGF0ZXMvZG9jcy1wYWdlL2RvY3MtcGFnZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBNEIsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFFaEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7O0FBSS9FOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBc1VILE1BQU0sT0FBTyxpQkFBaUI7SUFyVTlCO1FBc1VVLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFL0IsVUFBSyxHQUFxQixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUV6QyxhQUFRLEdBQUcsTUFBTSxDQUFpRCxFQUFFLENBQUMsQ0FBQztRQUN0RSxhQUFRLEdBQTRCLElBQUksQ0FBQztRQTRDakQsYUFBUSxHQUFHLFFBQVEsQ0FBa0IsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUMxQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxJQUFJLGNBQWM7WUFDOUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7U0FDdkIsQ0FBQyxDQUFDLENBQUM7UUFFSixrQkFBYSxHQUFHLFFBQVEsQ0FBdUIsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNwRCxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZO2dCQUMvQixD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QUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7K0dBaERVLGlCQUFpQjttR0FBakIsaUJBQWlCLHFHQWpVbEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQ1QsczhKQXRDUyxZQUFZLCtCQUFFLHFCQUFxQix5R0FBRSxnQkFBZ0I7OzRGQWtVcEQsaUJBQWlCO2tCQXJVN0IsU0FBUzsrQkFDRSxlQUFlLGNBQ2IsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixDQUFDLFlBQ3REOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNUOzhCQStSUSxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBjb21wdXRlZCwgc2lnbmFsLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEVsZW1lbnRSZWYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERvY3NOYXZMaW5rc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9kb2NzLW5hdi1saW5rcy9kb2NzLW5hdi1saW5rcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRG9jc05hdkxpbmtzTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZG9jcy1uYXYtbGlua3MvdHlwZXMnO1xuaW1wb3J0IHsgRG9jc1RvY0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9kb2NzLXRvYy9kb2NzLXRvYy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRG9jc1RvY01ldGFkYXRhIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL2RvY3MtdG9jL3R5cGVzJztcbmltcG9ydCB7IERvY3NQYWdlTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiB2YWwtZG9jcy1wYWdlXG4gKlxuICogQSBjb21wbGV0ZSBkb2N1bWVudGF0aW9uIHBhZ2UgdGVtcGxhdGUgdGhhdCBlbGltaW5hdGVzIGJvaWxlcnBsYXRlLlxuICogUHJvdmlkZXMgYXV0b21hdGljIFRPQyBnZW5lcmF0aW9uLCBuYXZpZ2F0aW9uIGxpbmtzLCBhbmQgY29uc2lzdGVudCBzdHlsaW5nLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlXG4gKiBgYGBodG1sXG4gKiA8dmFsLWRvY3MtcGFnZSBbcHJvcHNdPVwie1xuICogICB0aXRsZTogJ0J1dHRvbicsXG4gKiAgIGxlYWQ6ICdBIGNsaWNrYWJsZSBlbGVtZW50IGZvciB1c2VyIGludGVyYWN0aW9ucy4nLFxuICogICBwcmV2aW91c1BhZ2U6IHsgdGl0bGU6ICdRdWljayBTdGFydCcsIHJvdXRlOiBbJy9kb2NzJywgJ3F1aWNrLXN0YXJ0J10gfSxcbiAqICAgbmV4dFBhZ2U6IHsgdGl0bGU6ICdDYXJkJywgcm91dGU6IFsnL2RvY3MnLCAnY29tcG9uZW50cycsICdjYXJkJ10gfVxuICogfVwiPlxuICogICA8dmFsLWRvY3Mtc2VjdGlvbiBbcHJvcHNdPVwieyBpZDogJ2Jhc2ljLXVzYWdlJywgdGl0bGU6ICdCYXNpYyBVc2FnZScgfVwiPlxuICogICAgIDxwPkNvbnRlbnQgaGVyZS4uLjwvcD5cbiAqICAgPC92YWwtZG9jcy1zZWN0aW9uPlxuICpcbiAqICAgPHZhbC1kb2NzLXNlY3Rpb24gW3Byb3BzXT1cInsgaWQ6ICd2YXJpYW50cycsIHRpdGxlOiAnVmFyaWFudHMnIH1cIj5cbiAqICAgICA8cD5Nb3JlIGNvbnRlbnQuLi48L3A+XG4gKiAgIDwvdmFsLWRvY3Mtc2VjdGlvbj5cbiAqIDwvdmFsLWRvY3MtcGFnZT5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFdpdGggYmFkZ2VcbiAqIGBgYGh0bWxcbiAqIDx2YWwtZG9jcy1wYWdlIFtwcm9wc109XCJ7XG4gKiAgIHRpdGxlOiAnTmV3IENvbXBvbmVudCcsXG4gKiAgIGJhZGdlOiAnTmV3JyxcbiAqICAgYmFkZ2VDb2xvcjogJ3N1Y2Nlc3MnXG4gKiB9XCI+XG4gKiAgIC4uLlxuICogPC92YWwtZG9jcy1wYWdlPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1kb2NzLXBhZ2UnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBEb2NzTmF2TGlua3NDb21wb25lbnQsIERvY3NUb2NDb21wb25lbnRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJkb2NzLXBhZ2VcIiBbY2xhc3NdPVwicHJvcHMuY3NzQ2xhc3NcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkb2NzLXBhZ2VfX2NvbnRlbnRcIiAjY29udGVudD5cbiAgICAgICAgPGhlYWRlciBjbGFzcz1cImRvY3MtcGFnZV9faGVhZGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRvY3MtcGFnZV9fdGl0bGUtcm93XCI+XG4gICAgICAgICAgICA8aDEgY2xhc3M9XCJkb2NzLXBhZ2VfX3RpdGxlXCI+e3sgcHJvcHMudGl0bGUgfX08L2gxPlxuICAgICAgICAgICAgQGlmIChwcm9wcy5iYWRnZSkge1xuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZG9jcy1wYWdlX19iYWRnZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmRvY3MtcGFnZV9fYmFkZ2UtLXN1Y2Nlc3NdPVwicHJvcHMuYmFkZ2VDb2xvciA9PT0gJ3N1Y2Nlc3MnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZG9jcy1wYWdlX19iYWRnZS0td2FybmluZ109XCJwcm9wcy5iYWRnZUNvbG9yID09PSAnd2FybmluZydcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5kb2NzLXBhZ2VfX2JhZGdlLS1kYW5nZXJdPVwicHJvcHMuYmFkZ2VDb2xvciA9PT0gJ2RhbmdlcidcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgcHJvcHMuYmFkZ2UgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBpZiAocHJvcHMubGVhZCkge1xuICAgICAgICAgICAgPHAgY2xhc3M9XCJkb2NzLXBhZ2VfX2xlYWRcIj57eyBwcm9wcy5sZWFkIH19PC9wPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRvY3MtcGFnZV9fc2VjdGlvbnNcIj5cbiAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBpZiAoc2hvd05hdkxpbmtzKCkpIHtcbiAgICAgICAgICA8dmFsLWRvY3MtbmF2LWxpbmtzIFtwcm9wc109XCJuYXZMaW5rc1Byb3BzKClcIj48L3ZhbC1kb2NzLW5hdi1saW5rcz5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIEBpZiAoIXByb3BzLnRvYz8uaGlkZSkge1xuICAgICAgICA8YXNpZGUgY2xhc3M9XCJkb2NzLXBhZ2VfX3RvY1wiPlxuICAgICAgICAgIDx2YWwtZG9jcy10b2MgW3Byb3BzXT1cInRvY1Byb3BzKClcIj48L3ZhbC1kb2NzLXRvYz5cbiAgICAgICAgPC9hc2lkZT5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIC8qIE1haW4gbGF5b3V0ICovXG4gICAgLmRvY3MtcGFnZSB7XG4gICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gICAgICBnYXA6IDJyZW07XG4gICAgICBtYXgtd2lkdGg6IDE0MDBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgcGFkZGluZzogMnJlbSAxLjVyZW07XG4gICAgfVxuXG4gICAgQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAgICAgLmRvY3MtcGFnZSB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDIyMHB4O1xuICAgICAgICBwYWRkaW5nOiAycmVtO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5kb2NzLXBhZ2VfX2NvbnRlbnQge1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgbWF4LXdpZHRoOiA5MDBweDtcbiAgICB9XG5cbiAgICAuZG9jcy1wYWdlX19oZWFkZXIge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMnJlbTtcbiAgICB9XG5cbiAgICAuZG9jcy1wYWdlX190aXRsZS1yb3cge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDAuNzVyZW07XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgfVxuXG4gICAgLmRvY3MtcGFnZV9fdGl0bGUge1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgZm9udC1zaXplOiAycmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1pb24tdGV4dC1jb2xvciwgIzFhMWExYSk7XG4gICAgICBsaW5lLWhlaWdodDogMS4yO1xuICAgIH1cblxuICAgIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgICAgLmRvY3MtcGFnZV9fdGl0bGUge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZG9jcy1wYWdlX19iYWRnZSB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBwYWRkaW5nOiAwLjI1cmVtIDAuNjI1cmVtO1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wMjVlbTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wOCk7XG4gICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bS1zaGFkZSk7XG4gICAgfVxuXG4gICAgLmRvY3MtcGFnZV9fYmFkZ2UtLXN1Y2Nlc3Mge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLXN1Y2Nlc3MtdGludCwgI2U4ZjVlOSk7XG4gICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXN1Y2Nlc3Mtc2hhZGUsICMyZTdkMzIpO1xuICAgIH1cblxuICAgIC5kb2NzLXBhZ2VfX2JhZGdlLS13YXJuaW5nIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci13YXJuaW5nLXRpbnQsICNmZmYzZTApO1xuICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci13YXJuaW5nLXNoYWRlLCAjZTY1MTAwKTtcbiAgICB9XG5cbiAgICAuZG9jcy1wYWdlX19iYWRnZS0tZGFuZ2VyIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1kYW5nZXItdGludCwgI2ZmZWJlZSk7XG4gICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhbmdlci1zaGFkZSwgI2M2MjgyOCk7XG4gICAgfVxuXG4gICAgLmRvY3MtcGFnZV9fbGVhZCB7XG4gICAgICBtYXJnaW46IDFyZW0gMCAwO1xuICAgICAgZm9udC1zaXplOiAxLjEyNXJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjc7XG4gICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzY2Nik7XG4gICAgfVxuXG4gICAgLmRvY3MtcGFnZV9fc2VjdGlvbnMgPiAqOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG5cbiAgICAvKiBUT0MgLSBIaWRkZW4gb24gbW9iaWxlLCB2aXNpYmxlIG9uIGRlc2t0b3AgKi9cbiAgICAuZG9jcy1wYWdlX190b2Mge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gICAgICAuZG9jcy1wYWdlX190b2Mge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgICAgdG9wOiAycmVtO1xuICAgICAgICBoZWlnaHQ6IGZpdC1jb250ZW50O1xuICAgICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNHJlbSk7XG4gICAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogQ29udGVudCB0eXBvZ3JhcGh5IHN0eWxlcyAqL1xuICAgIC5kb2NzLXBhZ2VfX3NlY3Rpb25zIGgyIHtcbiAgICAgIGZvbnQtc2l6ZTogMS41cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIG1hcmdpbjogMCAwIDFyZW0gMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1pb24tdGV4dC1jb2xvciwgIzFhMWExYSk7XG4gICAgICBzY3JvbGwtbWFyZ2luLXRvcDogMnJlbTtcbiAgICB9XG5cbiAgICAuZG9jcy1wYWdlX19zZWN0aW9ucyBoMyB7XG4gICAgICBmb250LXNpemU6IDEuMTI1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIG1hcmdpbjogMS41cmVtIDAgMXJlbSAwO1xuICAgICAgY29sb3I6IHZhcigtLWlvbi10ZXh0LWNvbG9yLCAjMWExYTFhKTtcbiAgICB9XG5cbiAgICAuZG9jcy1wYWdlX19zZWN0aW9ucyBoNCB7XG4gICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbWFyZ2luOiAxLjI1cmVtIDAgMC43NXJlbSAwO1xuICAgICAgY29sb3I6IHZhcigtLWlvbi10ZXh0LWNvbG9yLCAjMWExYTFhKTtcbiAgICB9XG5cbiAgICAuZG9jcy1wYWdlX19zZWN0aW9ucyBwIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjc7XG4gICAgICBjb2xvcjogdmFyKC0taW9uLXRleHQtY29sb3IsICMxYTFhMWEpO1xuICAgICAgbWFyZ2luOiAwIDAgMXJlbSAwO1xuICAgIH1cblxuICAgIC5kb2NzLXBhZ2VfX3NlY3Rpb25zIHVsLFxuICAgIC5kb2NzLXBhZ2VfX3NlY3Rpb25zIG9sIHtcbiAgICAgIHBhZGRpbmctbGVmdDogMS41cmVtO1xuICAgICAgbWFyZ2luOiAwIDAgMXJlbSAwO1xuICAgIH1cblxuICAgIC5kb2NzLXBhZ2VfX3NlY3Rpb25zIGxpIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7XG4gICAgICBjb2xvcjogdmFyKC0taW9uLXRleHQtY29sb3IsICMxYTFhMWEpO1xuICAgIH1cblxuICAgIC5kb2NzLXBhZ2VfX3NlY3Rpb25zIGEge1xuICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LCAjMzg4MGZmKTtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB9XG5cbiAgICAuZG9jcy1wYWdlX19zZWN0aW9ucyBhOmhvdmVyIHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIH1cblxuICAgIC5kb2NzLXBhZ2VfX3NlY3Rpb25zIGNvZGU6bm90KFtjbGFzcyo9J2xhbmd1YWdlLSddKSB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDYpO1xuICAgICAgcGFkZGluZzogMC4xMjVyZW0gMC4zNzVyZW07XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnRmlyYSBDb2RlJywgQ29uc29sYXMsIG1vbm9zcGFjZTtcbiAgICAgIGZvbnQtc2l6ZTogMC44NzVlbTtcbiAgICB9XG5cbiAgICAuZG9jcy1wYWdlX19zZWN0aW9ucyBwcmU6bm90KFtjbGFzcyo9J2xhbmd1YWdlLSddKSB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDQpO1xuICAgICAgcGFkZGluZzogMXJlbTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgICBtYXJnaW46IDAgMCAxcmVtIDA7XG4gICAgfVxuXG4gICAgLmRvY3MtcGFnZV9fc2VjdGlvbnMgcHJlOm5vdChbY2xhc3MqPSdsYW5ndWFnZS0nXSkgY29kZSB7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgcGFkZGluZzogMDtcbiAgICB9XG5cbiAgICAuZG9jcy1wYWdlX19zZWN0aW9ucyB0YWJsZSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgICBtYXJnaW46IDAgMCAxcmVtIDA7XG4gICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgIH1cblxuICAgIC5kb2NzLXBhZ2VfX3NlY3Rpb25zIHRoLFxuICAgIC5kb2NzLXBhZ2VfX3NlY3Rpb25zIHRkIHtcbiAgICAgIHBhZGRpbmc6IDAuNzVyZW07XG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICB9XG5cbiAgICAuZG9jcy1wYWdlX19zZWN0aW9ucyB0aCB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAyKTtcbiAgICB9XG5cbiAgICAuZG9jcy1wYWdlX19zZWN0aW9ucyBibG9ja3F1b3RlIHtcbiAgICAgIG1hcmdpbjogMCAwIDFyZW0gMDtcbiAgICAgIHBhZGRpbmc6IDFyZW0gMS41cmVtO1xuICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSwgIzM4ODBmZik7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDIpO1xuICAgICAgYm9yZGVyLXJhZGl1czogMCA4cHggOHB4IDA7XG4gICAgfVxuXG4gICAgLmRvY3MtcGFnZV9fc2VjdGlvbnMgYmxvY2txdW90ZSBwOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG5cbiAgICAuZG9jcy1wYWdlX19zZWN0aW9ucyBpbWcge1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIH1cblxuICAgIC5kb2NzLXBhZ2VfX3NlY3Rpb25zIGhyIHtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICBtYXJnaW46IDJyZW0gMDtcbiAgICB9XG5cbiAgICAuZG9jcy1wYWdlX19zZWN0aW9ucyBzdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB9XG5cbiAgICAuZG9jcy1wYWdlX19zZWN0aW9ucyBzZWN0aW9uIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDJyZW07XG4gICAgfVxuXG4gICAgLyogRGFyayBtb2RlICovXG4gICAgOmhvc3QtY29udGV4dCguZGFyaykgLmRvY3MtcGFnZV9fYmFkZ2UsXG4gICAgOmhvc3QtY29udGV4dChbY29sb3Itc2NoZW1lPVwiZGFya1wiXSkgLmRvY3MtcGFnZV9fYmFkZ2Uge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0pO1xuICAgIH1cblxuICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5kb2NzLXBhZ2VfX2JhZGdlLS1zdWNjZXNzLFxuICAgIDpob3N0LWNvbnRleHQoW2NvbG9yLXNjaGVtZT1cImRhcmtcIl0pIC5kb2NzLXBhZ2VfX2JhZGdlLS1zdWNjZXNzIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoNDYsIDEyNSwgNTAsIDAuMik7XG4gICAgICBjb2xvcjogIzgxYzc4NDtcbiAgICB9XG5cbiAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuZG9jcy1wYWdlX19iYWRnZS0td2FybmluZyxcbiAgICA6aG9zdC1jb250ZXh0KFtjb2xvci1zY2hlbWU9XCJkYXJrXCJdKSAuZG9jcy1wYWdlX19iYWRnZS0td2FybmluZyB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzMCwgODEsIDAsIDAuMik7XG4gICAgICBjb2xvcjogI2ZmYjc0ZDtcbiAgICB9XG5cbiAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuZG9jcy1wYWdlX19iYWRnZS0tZGFuZ2VyLFxuICAgIDpob3N0LWNvbnRleHQoW2NvbG9yLXNjaGVtZT1cImRhcmtcIl0pIC5kb2NzLXBhZ2VfX2JhZGdlLS1kYW5nZXIge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgxOTgsIDQwLCA0MCwgMC4yKTtcbiAgICAgIGNvbG9yOiAjZTU3MzczO1xuICAgIH1cblxuICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5kb2NzLXBhZ2VfX3NlY3Rpb25zIGNvZGU6bm90KFtjbGFzcyo9J2xhbmd1YWdlLSddKSxcbiAgICA6aG9zdC1jb250ZXh0KFtjb2xvci1zY2hlbWU9XCJkYXJrXCJdKSAuZG9jcy1wYWdlX19zZWN0aW9ucyBjb2RlOm5vdChbY2xhc3MqPSdsYW5ndWFnZS0nXSkge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICAgIH1cblxuICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5kb2NzLXBhZ2VfX3NlY3Rpb25zIHByZTpub3QoW2NsYXNzKj0nbGFuZ3VhZ2UtJ10pLFxuICAgIDpob3N0LWNvbnRleHQoW2NvbG9yLXNjaGVtZT1cImRhcmtcIl0pIC5kb2NzLXBhZ2VfX3NlY3Rpb25zIHByZTpub3QoW2NsYXNzKj0nbGFuZ3VhZ2UtJ10pIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7XG4gICAgfVxuXG4gICAgOmhvc3QtY29udGV4dCguZGFyaykgLmRvY3MtcGFnZV9fc2VjdGlvbnMgdGgsXG4gICAgOmhvc3QtY29udGV4dChbY29sb3Itc2NoZW1lPVwiZGFya1wiXSkgLmRvY3MtcGFnZV9fc2VjdGlvbnMgdGgge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KTtcbiAgICB9XG5cbiAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuZG9jcy1wYWdlX19zZWN0aW9ucyB0aCxcbiAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuZG9jcy1wYWdlX19zZWN0aW9ucyB0ZCxcbiAgICA6aG9zdC1jb250ZXh0KFtjb2xvci1zY2hlbWU9XCJkYXJrXCJdKSAuZG9jcy1wYWdlX19zZWN0aW9ucyB0aCxcbiAgICA6aG9zdC1jb250ZXh0KFtjb2xvci1zY2hlbWU9XCJkYXJrXCJdKSAuZG9jcy1wYWdlX19zZWN0aW9ucyB0ZCB7XG4gICAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTtcbiAgICB9XG5cbiAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuZG9jcy1wYWdlX19zZWN0aW9ucyBibG9ja3F1b3RlLFxuICAgIDpob3N0LWNvbnRleHQoW2NvbG9yLXNjaGVtZT1cImRhcmtcIl0pIC5kb2NzLXBhZ2VfX3NlY3Rpb25zIGJsb2NrcXVvdGUge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KTtcbiAgICB9XG5cbiAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuZG9jcy1wYWdlX19zZWN0aW9ucyBocixcbiAgICA6aG9zdC1jb250ZXh0KFtjb2xvci1zY2hlbWU9XCJkYXJrXCJdKSAuZG9jcy1wYWdlX19zZWN0aW9ucyBociB7XG4gICAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTtcbiAgICB9XG4gIGBdLFxufSlcbmV4cG9ydCBjbGFzcyBEb2NzUGFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICBASW5wdXQoKSBwcm9wczogRG9jc1BhZ2VNZXRhZGF0YSA9IHsgdGl0bGU6ICcnIH07XG5cbiAgcHJpdmF0ZSB0b2NJdGVtcyA9IHNpZ25hbDx7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IGxldmVsOiBudW1iZXIgfVtdPihbXSk7XG4gIHByaXZhdGUgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gSW5pdGlhbCBzY2FuXG4gICAgdGhpcy5zY2FuRm9yU2VjdGlvbnMoKTtcblxuICAgIC8vIFdhdGNoIGZvciBkeW5hbWljIGNvbnRlbnQgY2hhbmdlc1xuICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgICB0aGlzLnNjYW5Gb3JTZWN0aW9ucygpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY29udGVudEVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmRvY3MtcGFnZV9fc2VjdGlvbnMnKTtcbiAgICBpZiAoY29udGVudEVsKSB7XG4gICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUoY29udGVudEVsLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gIH1cblxuICBwcml2YXRlIHNjYW5Gb3JTZWN0aW9ucygpOiB2b2lkIHtcbiAgICBjb25zdCBjb250ZW50RWwgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZG9jcy1wYWdlX19zZWN0aW9ucycpO1xuICAgIGlmICghY29udGVudEVsKSByZXR1cm47XG5cbiAgICBjb25zdCBoZWFkaW5ncyA9IGNvbnRlbnRFbC5xdWVyeVNlbGVjdG9yQWxsKCdoMltpZF0sIGgzW2lkXSwgc2VjdGlvbltpZF0gPiBoMiwgc2VjdGlvbltpZF0gPiBoMycpO1xuICAgIGNvbnN0IGl0ZW1zOiB7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IGxldmVsOiBudW1iZXIgfVtdID0gW107XG5cbiAgICBoZWFkaW5ncy5mb3JFYWNoKChoZWFkaW5nOiBFbGVtZW50KSA9PiB7XG4gICAgICAvLyBHZXQgSUQgZnJvbSBoZWFkaW5nIG9yIHBhcmVudCBzZWN0aW9uXG4gICAgICBsZXQgaWQgPSBoZWFkaW5nLmlkO1xuICAgICAgaWYgKCFpZCAmJiBoZWFkaW5nLnBhcmVudEVsZW1lbnQ/LnRhZ05hbWUgPT09ICdTRUNUSU9OJykge1xuICAgICAgICBpZCA9IGhlYWRpbmcucGFyZW50RWxlbWVudC5pZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGlkKSB7XG4gICAgICAgIGNvbnN0IGxldmVsID0gaGVhZGluZy50YWdOYW1lID09PSAnSDInID8gMiA6IDM7XG4gICAgICAgIGl0ZW1zLnB1c2goeyBpZCwgbGFiZWw6IGhlYWRpbmcudGV4dENvbnRlbnQ/LnRyaW0oKSB8fCAnJywgbGV2ZWwgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnRvY0l0ZW1zLnNldChpdGVtcyk7XG4gIH1cblxuICB0b2NQcm9wcyA9IGNvbXB1dGVkPERvY3NUb2NNZXRhZGF0YT4oKCkgPT4gKHtcbiAgICB0aXRsZTogdGhpcy5wcm9wcy50b2M/LnRpdGxlID8/ICdPbiB0aGlzIHBhZ2UnLFxuICAgIGl0ZW1zOiB0aGlzLnRvY0l0ZW1zKCksXG4gIH0pKTtcblxuICBuYXZMaW5rc1Byb3BzID0gY29tcHV0ZWQ8RG9jc05hdkxpbmtzTWV0YWRhdGE+KCgpID0+ICh7XG4gICAgcHJldmlvdXM6IHRoaXMucHJvcHMucHJldmlvdXNQYWdlXG4gICAgICA/IHtcbiAgICAgICAgICBsYWJlbDogdGhpcy5wcm9wcy5uYXZMYWJlbHM/LnByZXZpb3VzID8/ICdQcmV2aW91cycsXG4gICAgICAgICAgdGl0bGU6IHRoaXMucHJvcHMucHJldmlvdXNQYWdlLnRpdGxlLFxuICAgICAgICAgIHJvdXRlOiB0aGlzLnByb3BzLnByZXZpb3VzUGFnZS5yb3V0ZSxcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQsXG4gICAgbmV4dDogdGhpcy5wcm9wcy5uZXh0UGFnZVxuICAgICAgPyB7XG4gICAgICAgICAgbGFiZWw6IHRoaXMucHJvcHMubmF2TGFiZWxzPy5uZXh0ID8/ICdOZXh0JyxcbiAgICAgICAgICB0aXRsZTogdGhpcy5wcm9wcy5uZXh0UGFnZS50aXRsZSxcbiAgICAgICAgICByb3V0ZTogdGhpcy5wcm9wcy5uZXh0UGFnZS5yb3V0ZSxcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQsXG4gIH0pKTtcblxuICBzaG93TmF2TGlua3MgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuICEhdGhpcy5wcm9wcy5wcmV2aW91c1BhZ2UgfHwgISF0aGlzLnByb3BzLm5leHRQYWdlO1xuICB9KTtcbn1cbiJdfQ==
|