@tolle_/tolle-ui 18.2.29 → 18.3.0
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/accordion-item.component.mjs +5 -11
- package/esm2022/lib/accordion.component.mjs +4 -9
- package/esm2022/lib/alert-dialog-dynamic.component.mjs +12 -12
- package/esm2022/lib/alert-dialog.component.mjs +82 -64
- package/esm2022/lib/alert-dialog.service.mjs +38 -6
- package/esm2022/lib/alert.component.mjs +5 -11
- package/esm2022/lib/aspect-ratio.component.mjs +119 -0
- package/esm2022/lib/attachment.component.mjs +334 -0
- package/esm2022/lib/avatar-fallback.component.mjs +3 -3
- package/esm2022/lib/avatar.component.mjs +4 -9
- package/esm2022/lib/badge.component.mjs +4 -9
- package/esm2022/lib/breadcrumb-item.component.mjs +3 -3
- package/esm2022/lib/breadcrumb-link.component.mjs +3 -3
- package/esm2022/lib/breadcrumb-separator.component.mjs +3 -3
- package/esm2022/lib/breadcrumb.component.mjs +3 -3
- package/esm2022/lib/bubble.component.mjs +301 -0
- package/esm2022/lib/button.component.mjs +5 -11
- package/esm2022/lib/calendar.component.mjs +5 -11
- package/esm2022/lib/card.component.mjs +14 -43
- package/esm2022/lib/carousel/carousel.component.mjs +5 -12
- package/esm2022/lib/chain-of-thought.component.mjs +380 -0
- package/esm2022/lib/chart-pie.component.mjs +386 -0
- package/esm2022/lib/chart.component.mjs +1146 -0
- package/esm2022/lib/chart.service.mjs +555 -0
- package/esm2022/lib/checkbox.component.mjs +5 -11
- package/esm2022/lib/checkpoint.component.mjs +134 -0
- package/esm2022/lib/collapsible.component.mjs +4 -11
- package/esm2022/lib/combobox.component.mjs +372 -0
- package/esm2022/lib/command-dialog.component.mjs +164 -0
- package/esm2022/lib/command.component.mjs +514 -0
- package/esm2022/lib/command.service.mjs +130 -0
- package/esm2022/lib/confirmation.component.mjs +219 -0
- package/esm2022/lib/context-menu-trigger.directive.mjs +36 -0
- package/esm2022/lib/context-menu.component.mjs +460 -0
- package/esm2022/lib/context-menu.service.mjs +125 -0
- package/esm2022/lib/context.component.mjs +377 -0
- package/esm2022/lib/conversation.component.mjs +442 -0
- package/esm2022/lib/country-selector.component.mjs +5 -11
- package/esm2022/lib/data-table.component.mjs +59 -12
- package/esm2022/lib/date-picker.component.mjs +251 -198
- package/esm2022/lib/date-range-picker.component.mjs +224 -116
- package/esm2022/lib/date-time-picker.component.mjs +506 -0
- package/esm2022/lib/direction.component.mjs +79 -0
- package/esm2022/lib/dropdown-item.component.mjs +3 -3
- package/esm2022/lib/dropdown-label.component.mjs +3 -3
- package/esm2022/lib/dropdown-menu.component.mjs +3 -3
- package/esm2022/lib/dropdown-separator.component.mjs +3 -3
- package/esm2022/lib/dropdown-trigger.directive.mjs +6 -4
- package/esm2022/lib/empty-state.component.mjs +4 -9
- package/esm2022/lib/field.component.mjs +394 -0
- package/esm2022/lib/hover-card.component.mjs +6 -16
- package/esm2022/lib/inline-citation.component.mjs +263 -0
- package/esm2022/lib/input-group.component.mjs +418 -0
- package/esm2022/lib/input.component.mjs +5 -11
- package/esm2022/lib/item.component.mjs +243 -0
- package/esm2022/lib/kbd.component.mjs +82 -0
- package/esm2022/lib/label.component.mjs +4 -9
- package/esm2022/lib/marker.component.mjs +135 -0
- package/esm2022/lib/masked-input.component.mjs +5 -11
- package/esm2022/lib/menubar.component.mjs +683 -0
- package/esm2022/lib/message-scroller.component.mjs +353 -0
- package/esm2022/lib/message-scroller.service.mjs +157 -0
- package/esm2022/lib/message.component.mjs +228 -0
- package/esm2022/lib/modal-ref.mjs +36 -7
- package/esm2022/lib/modal.component.mjs +42 -28
- package/esm2022/lib/modal.mjs +2 -29
- package/esm2022/lib/modal.service.mjs +26 -4
- package/esm2022/lib/model-selector.component.mjs +310 -0
- package/esm2022/lib/multi-select.component.mjs +155 -72
- package/esm2022/lib/native-select.component.mjs +201 -0
- package/esm2022/lib/navigation-menu.component.mjs +642 -0
- package/esm2022/lib/otp-group.component.mjs +3 -3
- package/esm2022/lib/otp-slot.component.mjs +4 -9
- package/esm2022/lib/otp.component.mjs +5 -11
- package/esm2022/lib/pagination.component.mjs +7 -10
- package/esm2022/lib/plan.component.mjs +335 -0
- package/esm2022/lib/popover-content.component.mjs +4 -9
- package/esm2022/lib/popover.component.mjs +15 -13
- package/esm2022/lib/progress.component.mjs +4 -9
- package/esm2022/lib/prompt-input.component.mjs +526 -0
- package/esm2022/lib/queue.component.mjs +280 -0
- package/esm2022/lib/radio-group.component.mjs +6 -13
- package/esm2022/lib/radio-item.component.mjs +4 -9
- package/esm2022/lib/range-calendar.component.mjs +5 -11
- package/esm2022/lib/reasoning.component.mjs +335 -0
- package/esm2022/lib/resizable-panel.component.mjs +5 -5
- package/esm2022/lib/resizable.component.mjs +219 -0
- package/esm2022/lib/segment.component.mjs +19 -9
- package/esm2022/lib/select-group.component.mjs +4 -8
- package/esm2022/lib/select-item.component.mjs +4 -9
- package/esm2022/lib/select-separator.component.mjs +4 -8
- package/esm2022/lib/select.component.mjs +133 -49
- package/esm2022/lib/separator.component.mjs +4 -9
- package/esm2022/lib/sheet.component.mjs +38 -56
- package/esm2022/lib/shimmer.component.mjs +84 -0
- package/esm2022/lib/sidebar.component.mjs +11 -1
- package/esm2022/lib/skeleton.component.mjs +4 -9
- package/esm2022/lib/sources.component.mjs +452 -0
- package/esm2022/lib/spinner.component.mjs +68 -0
- package/esm2022/lib/suggestion.component.mjs +207 -0
- package/esm2022/lib/switch.component.mjs +5 -11
- package/esm2022/lib/table.component.mjs +213 -0
- package/esm2022/lib/tabs.component.mjs +4 -11
- package/esm2022/lib/tag-input.component.mjs +5 -11
- package/esm2022/lib/task.component.mjs +359 -0
- package/esm2022/lib/textarea.component.mjs +5 -11
- package/esm2022/lib/theme.service.mjs +17 -6
- package/esm2022/lib/time-picker.component.mjs +923 -0
- package/esm2022/lib/toast.service.mjs +3 -2
- package/esm2022/lib/toaster.component.mjs +76 -39
- package/esm2022/lib/toggle-group.component.mjs +4 -9
- package/esm2022/lib/toggle.component.mjs +5 -11
- package/esm2022/lib/tool.component.mjs +462 -0
- package/esm2022/lib/typography.component.mjs +83 -0
- package/esm2022/lib/utils/color.mjs +140 -19
- package/esm2022/public-api.mjs +61 -1
- package/fesm2022/tolle-ui.mjs +16642 -1105
- package/fesm2022/tolle-ui.mjs.map +1 -1
- package/lib/alert-dialog-dynamic.component.d.ts +5 -0
- package/lib/alert-dialog.component.d.ts +23 -2
- package/lib/aspect-ratio.component.d.ts +20 -0
- package/lib/attachment.component.d.ts +101 -0
- package/lib/bubble.component.d.ts +112 -0
- package/lib/chain-of-thought.component.d.ts +166 -0
- package/lib/chart-pie.component.d.ts +108 -0
- package/lib/chart.component.d.ts +369 -0
- package/lib/chart.service.d.ts +222 -0
- package/lib/checkpoint.component.d.ts +51 -0
- package/lib/combobox.component.d.ts +90 -0
- package/lib/command-dialog.component.d.ts +53 -0
- package/lib/command.component.d.ts +189 -0
- package/lib/command.service.d.ts +67 -0
- package/lib/confirmation.component.d.ts +70 -0
- package/lib/context-menu-trigger.directive.d.ts +12 -0
- package/lib/context-menu.component.d.ts +41 -0
- package/lib/context-menu.service.d.ts +38 -0
- package/lib/context.component.d.ts +134 -0
- package/lib/conversation.component.d.ts +165 -0
- package/lib/data-table.component.d.ts +26 -1
- package/lib/date-picker.component.d.ts +72 -11
- package/lib/date-range-picker.component.d.ts +63 -6
- package/lib/date-time-picker.component.d.ts +119 -0
- package/lib/direction.component.d.ts +45 -0
- package/lib/field.component.d.ts +201 -0
- package/lib/inline-citation.component.d.ts +103 -0
- package/lib/input-group.component.d.ts +150 -0
- package/lib/item.component.d.ts +154 -0
- package/lib/kbd.component.d.ts +50 -0
- package/lib/marker.component.d.ts +58 -0
- package/lib/menubar.component.d.ts +247 -0
- package/lib/message-scroller.component.d.ts +159 -0
- package/lib/message-scroller.service.d.ts +73 -0
- package/lib/message.component.d.ts +128 -0
- package/lib/modal-ref.d.ts +6 -1
- package/lib/modal.component.d.ts +7 -4
- package/lib/modal.d.ts +9 -3
- package/lib/model-selector.component.d.ts +103 -0
- package/lib/multi-select.component.d.ts +66 -14
- package/lib/native-select.component.d.ts +57 -0
- package/lib/navigation-menu.component.d.ts +230 -0
- package/lib/plan.component.d.ts +120 -0
- package/lib/popover.component.d.ts +1 -0
- package/lib/prompt-input.component.d.ts +194 -0
- package/lib/queue.component.d.ts +106 -0
- package/lib/reasoning.component.d.ts +127 -0
- package/lib/resizable.component.d.ts +43 -0
- package/lib/segment.component.d.ts +13 -3
- package/lib/select.component.d.ts +37 -5
- package/lib/sheet.component.d.ts +3 -0
- package/lib/shimmer.component.d.ts +38 -0
- package/lib/sidebar.component.d.ts +2 -0
- package/lib/sources.component.d.ts +156 -0
- package/lib/spinner.component.d.ts +29 -0
- package/lib/suggestion.component.d.ts +96 -0
- package/lib/table.component.d.ts +106 -0
- package/lib/task.component.d.ts +151 -0
- package/lib/theme.service.d.ts +9 -0
- package/lib/time-picker.component.d.ts +243 -0
- package/lib/toast.service.d.ts +3 -1
- package/lib/toaster.component.d.ts +26 -9
- package/lib/tool.component.d.ts +158 -0
- package/lib/typography.component.d.ts +32 -0
- package/lib/utils/color.d.ts +19 -5
- package/package.json +3 -2
- package/preset.js +7 -1
- package/public-api.d.ts +50 -0
- package/registry/docs-content.json +8480 -1542
- package/registry/llms-full.txt +2679 -319
- package/registry/llms.txt +43 -4
- package/registry/manifest.json +9090 -1742
- package/registry/r/accordion-item.json +1 -1
- package/registry/r/accordion.json +1 -1
- package/registry/r/alert-dialog-dynamic.json +1 -1
- package/registry/r/alert-dialog.json +1 -1
- package/registry/r/alert.json +1 -1
- package/registry/r/attachment.json +23 -0
- package/registry/r/avatar-fallback.json +1 -1
- package/registry/r/avatar.json +1 -1
- package/registry/r/badge.json +1 -1
- package/registry/r/breadcrumb-item.json +1 -1
- package/registry/r/breadcrumb-link.json +1 -1
- package/registry/r/breadcrumb-separator.json +1 -1
- package/registry/r/breadcrumb.json +1 -1
- package/registry/r/bubble.json +23 -0
- package/registry/r/button.json +1 -1
- package/registry/r/calendar.json +1 -1
- package/registry/r/card.json +1 -1
- package/registry/r/carousel.json +1 -1
- package/registry/r/chain-of-thought.json +23 -0
- package/registry/r/chart-pie.json +30 -0
- package/registry/r/chart.json +28 -0
- package/registry/r/checkbox.json +1 -1
- package/registry/r/checkpoint.json +23 -0
- package/registry/r/collapsible.json +1 -1
- package/registry/r/combobox.json +31 -0
- package/registry/r/command-dialog.json +21 -0
- package/registry/r/command.json +26 -0
- package/registry/r/confirmation.json +23 -0
- package/registry/r/context-menu-trigger.json +1 -1
- package/registry/r/context-menu.json +1 -1
- package/registry/r/context.json +26 -0
- package/registry/r/conversation.json +23 -0
- package/registry/r/country-selector.json +1 -1
- package/registry/r/data-table.json +1 -1
- package/registry/r/date-picker.json +4 -4
- package/registry/r/date-range-picker.json +3 -3
- package/registry/r/date-time-picker.json +28 -0
- package/registry/r/direction.json +16 -0
- package/registry/r/dropdown-item.json +1 -1
- package/registry/r/dropdown-label.json +1 -1
- package/registry/r/dropdown-menu.json +1 -1
- package/registry/r/dropdown-separator.json +1 -1
- package/registry/r/dropdown-trigger.json +1 -1
- package/registry/r/empty-state.json +1 -1
- package/registry/r/field.json +23 -0
- package/registry/r/hover-card.json +1 -1
- package/registry/r/inline-citation.json +26 -0
- package/registry/r/input-group.json +23 -0
- package/registry/r/input.json +1 -1
- package/registry/r/item.json +23 -0
- package/registry/r/kbd.json +23 -0
- package/registry/r/label.json +1 -1
- package/registry/r/marker.json +23 -0
- package/registry/r/masked-input.json +1 -1
- package/registry/r/menubar.json +24 -0
- package/registry/r/message-scroller.json +26 -0
- package/registry/r/message.json +23 -0
- package/registry/r/modal.json +3 -3
- package/registry/r/model-selector.json +32 -0
- package/registry/r/multi-select.json +2 -2
- package/registry/r/native-select.json +23 -0
- package/registry/r/navigation-menu.json +24 -0
- package/registry/r/otp-group.json +1 -1
- package/registry/r/otp-slot.json +1 -1
- package/registry/r/otp.json +1 -1
- package/registry/r/pagination.json +3 -2
- package/registry/r/plan.json +23 -0
- package/registry/r/popover-content.json +1 -1
- package/registry/r/popover.json +1 -1
- package/registry/r/progress.json +1 -1
- package/registry/r/prompt-input.json +23 -0
- package/registry/r/queue.json +23 -0
- package/registry/r/radio-group.json +1 -1
- package/registry/r/radio-item.json +1 -1
- package/registry/r/range-calendar.json +1 -1
- package/registry/r/reasoning.json +23 -0
- package/registry/r/resizable-panel.json +1 -1
- package/registry/r/segment.json +1 -1
- package/registry/r/select-group.json +1 -1
- package/registry/r/select-item.json +1 -1
- package/registry/r/select-separator.json +1 -1
- package/registry/r/select.json +4 -3
- package/registry/r/separator.json +1 -1
- package/registry/r/sheet.json +1 -1
- package/registry/r/shimmer.json +23 -0
- package/registry/r/sidebar.json +1 -1
- package/registry/r/skeleton.json +1 -1
- package/registry/r/sources.json +23 -0
- package/registry/r/spinner.json +23 -0
- package/registry/r/suggestion.json +23 -0
- package/registry/r/switch.json +1 -1
- package/registry/r/table.json +21 -0
- package/registry/r/tabs.json +1 -1
- package/registry/r/tag-input.json +1 -1
- package/registry/r/task.json +23 -0
- package/registry/r/textarea.json +1 -1
- package/registry/r/time-picker.json +24 -0
- package/registry/r/toaster.json +2 -2
- package/registry/r/toggle-group.json +1 -1
- package/registry/r/toggle.json +1 -1
- package/registry/r/tool.json +23 -0
- package/registry/r/typography.json +23 -0
- package/registry/registry.json +915 -22
- package/theme.css +121 -8
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
import { Component, Input, ChangeDetectionStrategy, ChangeDetectorRef, inject } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { cva } from 'class-variance-authority';
|
|
4
|
+
import { cn } from './utils/cn';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
const fieldVariants = cva('group/field flex w-full gap-2 data-[invalid=true]:text-destructive', {
|
|
8
|
+
variants: {
|
|
9
|
+
orientation: {
|
|
10
|
+
vertical: 'flex-col',
|
|
11
|
+
horizontal: 'flex-row items-center justify-between',
|
|
12
|
+
// shadcn uses container queries here, but this preset is Tailwind 3.4 with no
|
|
13
|
+
// container-queries plugin — `@md/...` classes would be silently dropped and the
|
|
14
|
+
// field would never go horizontal. Viewport breakpoints work with the stack we have.
|
|
15
|
+
responsive: 'flex-col md:flex-row md:items-center md:justify-between',
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
defaultVariants: { orientation: 'vertical' },
|
|
19
|
+
});
|
|
20
|
+
/**
|
|
21
|
+
* Wraps a label, a control and its help/error text into one accessible form
|
|
22
|
+
* field. Composes *around* the existing controls (`tolle-input`,
|
|
23
|
+
* `tolle-select`, …) — it does not replace them.
|
|
24
|
+
*
|
|
25
|
+
* Use `tolle-item` instead when displaying content rather than a form control.
|
|
26
|
+
* @new
|
|
27
|
+
*/
|
|
28
|
+
export class FieldComponent {
|
|
29
|
+
cdr = inject(ChangeDetectorRef);
|
|
30
|
+
/**
|
|
31
|
+
* Angular writes a bound `class` input through its styling path, which does
|
|
32
|
+
* not mark an OnPush component dirty — without this hook the component keeps
|
|
33
|
+
* rendering the class it was born with.
|
|
34
|
+
*/
|
|
35
|
+
ngOnChanges() {
|
|
36
|
+
this.cdr.markForCheck();
|
|
37
|
+
}
|
|
38
|
+
/** Layout direction; `responsive` goes horizontal at the `@md` container width. @default 'vertical' */
|
|
39
|
+
orientation = 'vertical';
|
|
40
|
+
/** Marks the field invalid, turning on the destructive styling for descendants. @default false */
|
|
41
|
+
invalid = false;
|
|
42
|
+
/** Extra Tailwind classes merged onto the field via `cn()` (last-wins). */
|
|
43
|
+
class = '';
|
|
44
|
+
get computedClass() {
|
|
45
|
+
return cn(fieldVariants({ orientation: this.orientation }), this.class);
|
|
46
|
+
}
|
|
47
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
48
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldComponent, isStandalone: true, selector: "tolle-field", inputs: { orientation: "orientation", invalid: "invalid", class: "class" }, usesOnChanges: true, ngImport: i0, template: `
|
|
49
|
+
<div role="group" [attr.data-invalid]="invalid || null" [class]="computedClass">
|
|
50
|
+
<ng-content></ng-content>
|
|
51
|
+
</div>
|
|
52
|
+
`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
53
|
+
}
|
|
54
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldComponent, decorators: [{
|
|
55
|
+
type: Component,
|
|
56
|
+
args: [{ selector: 'tolle-field', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
57
|
+
<div role="group" [attr.data-invalid]="invalid || null" [class]="computedClass">
|
|
58
|
+
<ng-content></ng-content>
|
|
59
|
+
</div>
|
|
60
|
+
`, styles: [":host{display:block}\n"] }]
|
|
61
|
+
}], propDecorators: { orientation: [{
|
|
62
|
+
type: Input
|
|
63
|
+
}], invalid: [{
|
|
64
|
+
type: Input
|
|
65
|
+
}], class: [{
|
|
66
|
+
type: Input
|
|
67
|
+
}] } });
|
|
68
|
+
/**
|
|
69
|
+
* Label for a field's control. Set `for` to the control's `id` so clicking the
|
|
70
|
+
* label focuses it.
|
|
71
|
+
*/
|
|
72
|
+
export class FieldLabelComponent {
|
|
73
|
+
cdr = inject(ChangeDetectorRef);
|
|
74
|
+
/**
|
|
75
|
+
* Angular writes a bound `class` input through its styling path, which does
|
|
76
|
+
* not mark an OnPush component dirty — without this hook the component keeps
|
|
77
|
+
* rendering the class it was born with.
|
|
78
|
+
*/
|
|
79
|
+
ngOnChanges() {
|
|
80
|
+
this.cdr.markForCheck();
|
|
81
|
+
}
|
|
82
|
+
/** Id of the control this label describes; wire it to the control's `id`. @default '' */
|
|
83
|
+
for = '';
|
|
84
|
+
/** Appends a required marker (*) after the label text. @default false */
|
|
85
|
+
required = false;
|
|
86
|
+
/** Extra Tailwind classes merged onto the label via `cn()` (last-wins). */
|
|
87
|
+
class = '';
|
|
88
|
+
cn = cn;
|
|
89
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
90
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldLabelComponent, isStandalone: true, selector: "tolle-field-label", inputs: { for: "for", required: "required", class: "class" }, usesOnChanges: true, ngImport: i0, template: `
|
|
91
|
+
<label
|
|
92
|
+
[attr.for]="for || null"
|
|
93
|
+
[class]="cn(
|
|
94
|
+
'flex items-center gap-2 text-sm font-medium leading-none text-foreground',
|
|
95
|
+
'group-data-[invalid=true]/field:text-destructive',
|
|
96
|
+
'peer-disabled:cursor-not-allowed peer-disabled:opacity-50',
|
|
97
|
+
class
|
|
98
|
+
)"
|
|
99
|
+
>
|
|
100
|
+
<ng-content></ng-content>
|
|
101
|
+
<span *ngIf="required" class="text-destructive" aria-hidden="true">*</span>
|
|
102
|
+
</label>
|
|
103
|
+
`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
104
|
+
}
|
|
105
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldLabelComponent, decorators: [{
|
|
106
|
+
type: Component,
|
|
107
|
+
args: [{ selector: 'tolle-field-label', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
108
|
+
<label
|
|
109
|
+
[attr.for]="for || null"
|
|
110
|
+
[class]="cn(
|
|
111
|
+
'flex items-center gap-2 text-sm font-medium leading-none text-foreground',
|
|
112
|
+
'group-data-[invalid=true]/field:text-destructive',
|
|
113
|
+
'peer-disabled:cursor-not-allowed peer-disabled:opacity-50',
|
|
114
|
+
class
|
|
115
|
+
)"
|
|
116
|
+
>
|
|
117
|
+
<ng-content></ng-content>
|
|
118
|
+
<span *ngIf="required" class="text-destructive" aria-hidden="true">*</span>
|
|
119
|
+
</label>
|
|
120
|
+
`, styles: [":host{display:block}\n"] }]
|
|
121
|
+
}], propDecorators: { for: [{
|
|
122
|
+
type: Input
|
|
123
|
+
}], required: [{
|
|
124
|
+
type: Input
|
|
125
|
+
}], class: [{
|
|
126
|
+
type: Input
|
|
127
|
+
}] } });
|
|
128
|
+
/** Column that groups the control with its description and error text. */
|
|
129
|
+
export class FieldContentComponent {
|
|
130
|
+
cdr = inject(ChangeDetectorRef);
|
|
131
|
+
/**
|
|
132
|
+
* Angular writes a bound `class` input through its styling path, which does
|
|
133
|
+
* not mark an OnPush component dirty — without this hook the component keeps
|
|
134
|
+
* rendering the class it was born with.
|
|
135
|
+
*/
|
|
136
|
+
ngOnChanges() {
|
|
137
|
+
this.cdr.markForCheck();
|
|
138
|
+
}
|
|
139
|
+
/** Extra Tailwind classes merged onto the content column via `cn()` (last-wins). */
|
|
140
|
+
class = '';
|
|
141
|
+
cn = cn;
|
|
142
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
143
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldContentComponent, isStandalone: true, selector: "tolle-field-content", inputs: { class: "class" }, usesOnChanges: true, ngImport: i0, template: `<div [class]="cn('flex flex-1 flex-col gap-1.5', class)"><ng-content></ng-content></div>`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
144
|
+
}
|
|
145
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldContentComponent, decorators: [{
|
|
146
|
+
type: Component,
|
|
147
|
+
args: [{ selector: 'tolle-field-content', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `<div [class]="cn('flex flex-1 flex-col gap-1.5', class)"><ng-content></ng-content></div>`, styles: [":host{display:block}\n"] }]
|
|
148
|
+
}], propDecorators: { class: [{
|
|
149
|
+
type: Input
|
|
150
|
+
}] } });
|
|
151
|
+
/**
|
|
152
|
+
* Helper text below a control. Give it an `id` and point the control's
|
|
153
|
+
* `aria-describedby` at it.
|
|
154
|
+
*/
|
|
155
|
+
export class FieldDescriptionComponent {
|
|
156
|
+
cdr = inject(ChangeDetectorRef);
|
|
157
|
+
/**
|
|
158
|
+
* Angular writes a bound `class` input through its styling path, which does
|
|
159
|
+
* not mark an OnPush component dirty — without this hook the component keeps
|
|
160
|
+
* rendering the class it was born with.
|
|
161
|
+
*/
|
|
162
|
+
ngOnChanges() {
|
|
163
|
+
this.cdr.markForCheck();
|
|
164
|
+
}
|
|
165
|
+
/** Id to reference from the control's `aria-describedby`. @default '' */
|
|
166
|
+
id = '';
|
|
167
|
+
/** Extra Tailwind classes merged onto the description via `cn()` (last-wins). */
|
|
168
|
+
class = '';
|
|
169
|
+
cn = cn;
|
|
170
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldDescriptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
171
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldDescriptionComponent, isStandalone: true, selector: "tolle-field-description", inputs: { id: "id", class: "class" }, usesOnChanges: true, ngImport: i0, template: `
|
|
172
|
+
<p [id]="id || null" [class]="cn('text-balance text-xs text-muted-foreground', class)">
|
|
173
|
+
<ng-content></ng-content>
|
|
174
|
+
</p>
|
|
175
|
+
`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
176
|
+
}
|
|
177
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldDescriptionComponent, decorators: [{
|
|
178
|
+
type: Component,
|
|
179
|
+
args: [{ selector: 'tolle-field-description', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
180
|
+
<p [id]="id || null" [class]="cn('text-balance text-xs text-muted-foreground', class)">
|
|
181
|
+
<ng-content></ng-content>
|
|
182
|
+
</p>
|
|
183
|
+
`, styles: [":host{display:block}\n"] }]
|
|
184
|
+
}], propDecorators: { id: [{
|
|
185
|
+
type: Input
|
|
186
|
+
}], class: [{
|
|
187
|
+
type: Input
|
|
188
|
+
}] } });
|
|
189
|
+
/**
|
|
190
|
+
* Error text for a field. Renders nothing when there is no error, so it is safe
|
|
191
|
+
* to leave in the template permanently. Announces via `role="alert"`.
|
|
192
|
+
*/
|
|
193
|
+
export class FieldErrorComponent {
|
|
194
|
+
cdr = inject(ChangeDetectorRef);
|
|
195
|
+
/**
|
|
196
|
+
* Angular writes a bound `class` input through its styling path, which does
|
|
197
|
+
* not mark an OnPush component dirty — without this hook the component keeps
|
|
198
|
+
* rendering the class it was born with.
|
|
199
|
+
*/
|
|
200
|
+
ngOnChanges() {
|
|
201
|
+
this.cdr.markForCheck();
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Validation message(s). Accepts a single string, an array of strings, or an
|
|
205
|
+
* Angular `ValidationErrors`-style object whose values are messages.
|
|
206
|
+
* @default ''
|
|
207
|
+
*/
|
|
208
|
+
errors = '';
|
|
209
|
+
/** Id to reference from the control's `aria-describedby`. @default '' */
|
|
210
|
+
id = '';
|
|
211
|
+
/** Extra Tailwind classes merged onto the error text via `cn()` (last-wins). */
|
|
212
|
+
class = '';
|
|
213
|
+
cn = cn;
|
|
214
|
+
/** Normalises the three accepted `errors` shapes to a flat list of strings. */
|
|
215
|
+
get messages() {
|
|
216
|
+
const e = this.errors;
|
|
217
|
+
if (!e)
|
|
218
|
+
return [];
|
|
219
|
+
if (typeof e === 'string')
|
|
220
|
+
return e ? [e] : [];
|
|
221
|
+
if (Array.isArray(e))
|
|
222
|
+
return e.filter(Boolean).map(String);
|
|
223
|
+
return Object.values(e)
|
|
224
|
+
.filter((v) => v !== false && v !== null && v !== undefined)
|
|
225
|
+
.map((v) => (typeof v === 'string' ? v : String(v)));
|
|
226
|
+
}
|
|
227
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
228
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldErrorComponent, isStandalone: true, selector: "tolle-field-error", inputs: { errors: "errors", id: "id", class: "class" }, usesOnChanges: true, ngImport: i0, template: `
|
|
229
|
+
<div
|
|
230
|
+
*ngIf="messages.length"
|
|
231
|
+
[id]="id || null"
|
|
232
|
+
role="alert"
|
|
233
|
+
[class]="cn('text-xs font-medium text-destructive', class)"
|
|
234
|
+
>
|
|
235
|
+
<ng-container *ngIf="messages.length === 1">{{ messages[0] }}</ng-container>
|
|
236
|
+
<ul *ngIf="messages.length > 1" class="ml-4 list-disc space-y-0.5">
|
|
237
|
+
<li *ngFor="let message of messages">{{ message }}</li>
|
|
238
|
+
</ul>
|
|
239
|
+
</div>
|
|
240
|
+
`, isInline: true, styles: [":host{display:block}\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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
241
|
+
}
|
|
242
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldErrorComponent, decorators: [{
|
|
243
|
+
type: Component,
|
|
244
|
+
args: [{ selector: 'tolle-field-error', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
245
|
+
<div
|
|
246
|
+
*ngIf="messages.length"
|
|
247
|
+
[id]="id || null"
|
|
248
|
+
role="alert"
|
|
249
|
+
[class]="cn('text-xs font-medium text-destructive', class)"
|
|
250
|
+
>
|
|
251
|
+
<ng-container *ngIf="messages.length === 1">{{ messages[0] }}</ng-container>
|
|
252
|
+
<ul *ngIf="messages.length > 1" class="ml-4 list-disc space-y-0.5">
|
|
253
|
+
<li *ngFor="let message of messages">{{ message }}</li>
|
|
254
|
+
</ul>
|
|
255
|
+
</div>
|
|
256
|
+
`, styles: [":host{display:block}\n"] }]
|
|
257
|
+
}], propDecorators: { errors: [{
|
|
258
|
+
type: Input
|
|
259
|
+
}], id: [{
|
|
260
|
+
type: Input
|
|
261
|
+
}], class: [{
|
|
262
|
+
type: Input
|
|
263
|
+
}] } });
|
|
264
|
+
/** Stacks several fields with consistent spacing. */
|
|
265
|
+
export class FieldGroupComponent {
|
|
266
|
+
cdr = inject(ChangeDetectorRef);
|
|
267
|
+
/**
|
|
268
|
+
* Angular writes a bound `class` input through its styling path, which does
|
|
269
|
+
* not mark an OnPush component dirty — without this hook the component keeps
|
|
270
|
+
* rendering the class it was born with.
|
|
271
|
+
*/
|
|
272
|
+
ngOnChanges() {
|
|
273
|
+
this.cdr.markForCheck();
|
|
274
|
+
}
|
|
275
|
+
/** Extra Tailwind classes merged onto the group via `cn()` (last-wins). */
|
|
276
|
+
class = '';
|
|
277
|
+
cn = cn;
|
|
278
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
279
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldGroupComponent, isStandalone: true, selector: "tolle-field-group", inputs: { class: "class" }, usesOnChanges: true, ngImport: i0, template: `<div [class]="cn('flex w-full flex-col gap-6', class)"><ng-content></ng-content></div>`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
280
|
+
}
|
|
281
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldGroupComponent, decorators: [{
|
|
282
|
+
type: Component,
|
|
283
|
+
args: [{ selector: 'tolle-field-group', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `<div [class]="cn('flex w-full flex-col gap-6', class)"><ng-content></ng-content></div>`, styles: [":host{display:block}\n"] }]
|
|
284
|
+
}], propDecorators: { class: [{
|
|
285
|
+
type: Input
|
|
286
|
+
}] } });
|
|
287
|
+
/** Semantic `<fieldset>` grouping related fields under a legend. */
|
|
288
|
+
export class FieldSetComponent {
|
|
289
|
+
cdr = inject(ChangeDetectorRef);
|
|
290
|
+
/**
|
|
291
|
+
* Angular writes a bound `class` input through its styling path, which does
|
|
292
|
+
* not mark an OnPush component dirty — without this hook the component keeps
|
|
293
|
+
* rendering the class it was born with.
|
|
294
|
+
*/
|
|
295
|
+
ngOnChanges() {
|
|
296
|
+
this.cdr.markForCheck();
|
|
297
|
+
}
|
|
298
|
+
/** Extra Tailwind classes merged onto the fieldset via `cn()` (last-wins). */
|
|
299
|
+
class = '';
|
|
300
|
+
cn = cn;
|
|
301
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldSetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
302
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldSetComponent, isStandalone: true, selector: "tolle-field-set", inputs: { class: "class" }, usesOnChanges: true, ngImport: i0, template: `<fieldset [class]="cn('flex w-full flex-col gap-4 border-0 p-0', class)"><ng-content></ng-content></fieldset>`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
303
|
+
}
|
|
304
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldSetComponent, decorators: [{
|
|
305
|
+
type: Component,
|
|
306
|
+
args: [{ selector: 'tolle-field-set', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `<fieldset [class]="cn('flex w-full flex-col gap-4 border-0 p-0', class)"><ng-content></ng-content></fieldset>`, styles: [":host{display:block}\n"] }]
|
|
307
|
+
}], propDecorators: { class: [{
|
|
308
|
+
type: Input
|
|
309
|
+
}] } });
|
|
310
|
+
const fieldLegendVariants = cva('mb-1 font-medium text-foreground', {
|
|
311
|
+
variants: {
|
|
312
|
+
variant: {
|
|
313
|
+
legend: 'text-base',
|
|
314
|
+
label: 'text-sm leading-none',
|
|
315
|
+
},
|
|
316
|
+
},
|
|
317
|
+
defaultVariants: { variant: 'legend' },
|
|
318
|
+
});
|
|
319
|
+
/** `<legend>` for a `tolle-field-set`. */
|
|
320
|
+
export class FieldLegendComponent {
|
|
321
|
+
cdr = inject(ChangeDetectorRef);
|
|
322
|
+
/**
|
|
323
|
+
* Angular writes a bound `class` input through its styling path, which does
|
|
324
|
+
* not mark an OnPush component dirty — without this hook the component keeps
|
|
325
|
+
* rendering the class it was born with.
|
|
326
|
+
*/
|
|
327
|
+
ngOnChanges() {
|
|
328
|
+
this.cdr.markForCheck();
|
|
329
|
+
}
|
|
330
|
+
/** Type scale of the legend. @default 'legend' */
|
|
331
|
+
variant = 'legend';
|
|
332
|
+
/** Extra Tailwind classes merged onto the legend via `cn()` (last-wins). */
|
|
333
|
+
class = '';
|
|
334
|
+
get computedClass() {
|
|
335
|
+
return cn(fieldLegendVariants({ variant: this.variant }), this.class);
|
|
336
|
+
}
|
|
337
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldLegendComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
338
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldLegendComponent, isStandalone: true, selector: "tolle-field-legend", inputs: { variant: "variant", class: "class" }, usesOnChanges: true, ngImport: i0, template: `<legend [class]="computedClass"><ng-content></ng-content></legend>`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
339
|
+
}
|
|
340
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldLegendComponent, decorators: [{
|
|
341
|
+
type: Component,
|
|
342
|
+
args: [{ selector: 'tolle-field-legend', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `<legend [class]="computedClass"><ng-content></ng-content></legend>`, styles: [":host{display:block}\n"] }]
|
|
343
|
+
}], propDecorators: { variant: [{
|
|
344
|
+
type: Input
|
|
345
|
+
}], class: [{
|
|
346
|
+
type: Input
|
|
347
|
+
}] } });
|
|
348
|
+
/** Divider between sections of a form. */
|
|
349
|
+
export class FieldSeparatorComponent {
|
|
350
|
+
cdr = inject(ChangeDetectorRef);
|
|
351
|
+
/**
|
|
352
|
+
* Angular writes a bound `class` input through its styling path, which does
|
|
353
|
+
* not mark an OnPush component dirty — without this hook the component keeps
|
|
354
|
+
* rendering the class it was born with.
|
|
355
|
+
*/
|
|
356
|
+
ngOnChanges() {
|
|
357
|
+
this.cdr.markForCheck();
|
|
358
|
+
}
|
|
359
|
+
/** Extra Tailwind classes merged onto the separator via `cn()` (last-wins). */
|
|
360
|
+
class = '';
|
|
361
|
+
cn = cn;
|
|
362
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldSeparatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
363
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldSeparatorComponent, isStandalone: true, selector: "tolle-field-separator", inputs: { class: "class" }, usesOnChanges: true, ngImport: i0, template: `<div role="separator" [class]="cn('h-px w-full bg-border', class)"></div>`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
364
|
+
}
|
|
365
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldSeparatorComponent, decorators: [{
|
|
366
|
+
type: Component,
|
|
367
|
+
args: [{ selector: 'tolle-field-separator', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `<div role="separator" [class]="cn('h-px w-full bg-border', class)"></div>`, styles: [":host{display:block}\n"] }]
|
|
368
|
+
}], propDecorators: { class: [{
|
|
369
|
+
type: Input
|
|
370
|
+
}] } });
|
|
371
|
+
/** Title for a group of fields that is not a `<legend>`. */
|
|
372
|
+
export class FieldTitleComponent {
|
|
373
|
+
cdr = inject(ChangeDetectorRef);
|
|
374
|
+
/**
|
|
375
|
+
* Angular writes a bound `class` input through its styling path, which does
|
|
376
|
+
* not mark an OnPush component dirty — without this hook the component keeps
|
|
377
|
+
* rendering the class it was born with.
|
|
378
|
+
*/
|
|
379
|
+
ngOnChanges() {
|
|
380
|
+
this.cdr.markForCheck();
|
|
381
|
+
}
|
|
382
|
+
/** Extra Tailwind classes merged onto the title via `cn()` (last-wins). */
|
|
383
|
+
class = '';
|
|
384
|
+
cn = cn;
|
|
385
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
386
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldTitleComponent, isStandalone: true, selector: "tolle-field-title", inputs: { class: "class" }, usesOnChanges: true, ngImport: i0, template: `<div [class]="cn('text-sm font-medium leading-none text-foreground', class)"><ng-content></ng-content></div>`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
387
|
+
}
|
|
388
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldTitleComponent, decorators: [{
|
|
389
|
+
type: Component,
|
|
390
|
+
args: [{ selector: 'tolle-field-title', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `<div [class]="cn('text-sm font-medium leading-none text-foreground', class)"><ng-content></ng-content></div>`, styles: [":host{display:block}\n"] }]
|
|
391
|
+
}], propDecorators: { class: [{
|
|
392
|
+
type: Input
|
|
393
|
+
}] } });
|
|
394
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsR0FBRyxFQUFxQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7OztBQUVoQyxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsb0VBQW9FLEVBQUU7SUFDOUYsUUFBUSxFQUFFO1FBQ1IsV0FBVyxFQUFFO1lBQ1gsUUFBUSxFQUFFLFVBQVU7WUFDcEIsVUFBVSxFQUFFLHVDQUF1QztZQUNuRCw4RUFBOEU7WUFDOUUsaUZBQWlGO1lBQ2pGLHFGQUFxRjtZQUNyRixVQUFVLEVBQUUseURBQXlEO1NBQ3RFO0tBQ0Y7SUFDRCxlQUFlLEVBQUUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFO0NBQzdDLENBQUMsQ0FBQztBQUlIOzs7Ozs7O0dBT0c7QUFhSCxNQUFNLE9BQU8sY0FBYztJQUNSLEdBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUVqRDs7OztPQUlHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELHVHQUF1RztJQUM5RixXQUFXLEdBQThCLFVBQVUsQ0FBQztJQUM3RCxrR0FBa0c7SUFDekYsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN6QiwyRUFBMkU7SUFDbEUsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUVwQixJQUFJLGFBQWE7UUFDZixP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RWpEOzs7O09BSUc7SUFDSCxXQUFXO1FBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsK0VBQStFO0lBQ3RFLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDVixFQUFFLEdBQUcsRUFBRSxDQUFDO3dHQWRQLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLGtJQUZ4QiwyRUFBMkUsK0ZBRjNFLFlBQVk7OzRGQUlYLHVCQUF1QjtrQkFSbkMsU0FBUzsrQkFDRSx1QkFBdUIsY0FFckIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLG1CQUNOLHVCQUF1QixDQUFDLE1BQU0sWUFDckMsMkVBQTJFOzhCQWU1RSxLQUFLO3NCQUFiLEtBQUs7O0FBSVIsNERBQTREO0FBUzVELE1BQU0sT0FBTyxtQkFBbUI7SUFDYixHQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFakQ7Ozs7T0FJRztJQUNILFdBQVc7UUFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCwyRUFBMkU7SUFDbEUsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNWLEVBQUUsR0FBRyxFQUFFLENBQUM7d0dBZFAsbUJBQW1COzRGQUFuQixtQkFBbUIsOEhBRnBCLDhHQUE4RywrRkFGOUcsWUFBWTs7NEZBSVgsbUJBQW1CO2tCQVIvQixTQUFTOytCQUNFLG1CQUFtQixjQUVqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsbUJBQ04sdUJBQXVCLENBQUMsTUFBTSxZQUNyQyw4R0FBOEc7OEJBZS9HLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgT25DaGFuZ2VzLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBjdmEsIHR5cGUgVmFyaWFudFByb3BzIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5JztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi91dGlscy9jbic7XG5cbmNvbnN0IGZpZWxkVmFyaWFudHMgPSBjdmEoJ2dyb3VwL2ZpZWxkIGZsZXggdy1mdWxsIGdhcC0yIGRhdGEtW2ludmFsaWQ9dHJ1ZV06dGV4dC1kZXN0cnVjdGl2ZScsIHtcbiAgdmFyaWFudHM6IHtcbiAgICBvcmllbnRhdGlvbjoge1xuICAgICAgdmVydGljYWw6ICdmbGV4LWNvbCcsXG4gICAgICBob3Jpem9udGFsOiAnZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbicsXG4gICAgICAvLyBzaGFkY24gdXNlcyBjb250YWluZXIgcXVlcmllcyBoZXJlLCBidXQgdGhpcyBwcmVzZXQgaXMgVGFpbHdpbmQgMy40IHdpdGggbm9cbiAgICAgIC8vIGNvbnRhaW5lci1xdWVyaWVzIHBsdWdpbiDigJQgYEBtZC8uLi5gIGNsYXNzZXMgd291bGQgYmUgc2lsZW50bHkgZHJvcHBlZCBhbmQgdGhlXG4gICAgICAvLyBmaWVsZCB3b3VsZCBuZXZlciBnbyBob3Jpem9udGFsLiBWaWV3cG9ydCBicmVha3BvaW50cyB3b3JrIHdpdGggdGhlIHN0YWNrIHdlIGhhdmUuXG4gICAgICByZXNwb25zaXZlOiAnZmxleC1jb2wgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtY2VudGVyIG1kOmp1c3RpZnktYmV0d2VlbicsXG4gICAgfSxcbiAgfSxcbiAgZGVmYXVsdFZhcmlhbnRzOiB7IG9yaWVudGF0aW9uOiAndmVydGljYWwnIH0sXG59KTtcblxuZXhwb3J0IHR5cGUgRmllbGRQcm9wcyA9IFZhcmlhbnRQcm9wczx0eXBlb2YgZmllbGRWYXJpYW50cz47XG5cbi8qKlxuICogV3JhcHMgYSBsYWJlbCwgYSBjb250cm9sIGFuZCBpdHMgaGVscC9lcnJvciB0ZXh0IGludG8gb25lIGFjY2Vzc2libGUgZm9ybVxuICogZmllbGQuIENvbXBvc2VzICphcm91bmQqIHRoZSBleGlzdGluZyBjb250cm9scyAoYHRvbGxlLWlucHV0YCxcbiAqIGB0b2xsZS1zZWxlY3RgLCDigKYpIOKAlCBpdCBkb2VzIG5vdCByZXBsYWNlIHRoZW0uXG4gKlxuICogVXNlIGB0b2xsZS1pdGVtYCBpbnN0ZWFkIHdoZW4gZGlzcGxheWluZyBjb250ZW50IHJhdGhlciB0aGFuIGEgZm9ybSBjb250cm9sLlxuICogQG5ld1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1maWVsZCcsXG4gIHN0eWxlczogWyc6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB9J10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IHJvbGU9XCJncm91cFwiIFthdHRyLmRhdGEtaW52YWxpZF09XCJpbnZhbGlkIHx8IG51bGxcIiBbY2xhc3NdPVwiY29tcHV0ZWRDbGFzc1wiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZENvbXBvbmVudCAgaW1wbGVtZW50cyBPbkNoYW5nZXN7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAvKipcbiAgICogQW5ndWxhciB3cml0ZXMgYSBib3VuZCBgY2xhc3NgIGlucHV0IHRocm91Z2ggaXRzIHN0eWxpbmcgcGF0aCwgd2hpY2ggZG9lc1xuICAgKiBub3QgbWFyayBhbiBPblB1c2ggY29tcG9uZW50IGRpcnR5IOKAlCB3aXRob3V0IHRoaXMgaG9vayB0aGUgY29tcG9uZW50IGtlZXBzXG4gICAqIHJlbmRlcmluZyB0aGUgY2xhc3MgaXQgd2FzIGJvcm4gd2l0aC5cbiAgICovXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIExheW91dCBkaXJlY3Rpb247IGByZXNwb25zaXZlYCBnb2VzIGhvcml6b250YWwgYXQgdGhlIGBAbWRgIGNvbnRhaW5lciB3aWR0aC4gQGRlZmF1bHQgJ3ZlcnRpY2FsJyAqL1xuICBASW5wdXQoKSBvcmllbnRhdGlvbjogRmllbGRQcm9wc1snb3JpZW50YXRpb24nXSA9ICd2ZXJ0aWNhbCc7XG4gIC8qKiBNYXJrcyB0aGUgZmllbGQgaW52YWxpZCwgdHVybmluZyBvbiB0aGUgZGVzdHJ1Y3RpdmUgc3R5bGluZyBmb3IgZGVzY2VuZGFudHMuIEBkZWZhdWx0IGZhbHNlICovXG4gIEBJbnB1dCgpIGludmFsaWQgPSBmYWxzZTtcbiAgLyoqIEV4dHJhIFRhaWx3aW5kIGNsYXNzZXMgbWVyZ2VkIG9udG8gdGhlIGZpZWxkIHZpYSBgY24oKWAgKGxhc3Qtd2lucykuICovXG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG5cbiAgZ2V0IGNvbXB1dGVkQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKGZpZWxkVmFyaWFudHMoeyBvcmllbnRhdGlvbjogdGhpcy5vcmllbnRhdGlvbiB9KSwgdGhpcy5jbGFzcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBMYWJlbCBmb3IgYSBmaWVsZCdzIGNvbnRyb2wuIFNldCBgZm9yYCB0byB0aGUgY29udHJvbCdzIGBpZGAgc28gY2xpY2tpbmcgdGhlXG4gKiBsYWJlbCBmb2N1c2VzIGl0LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1maWVsZC1sYWJlbCcsXG4gIHN0eWxlczogWyc6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB9J10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bGFiZWxcbiAgICAgIFthdHRyLmZvcl09XCJmb3IgfHwgbnVsbFwiXG4gICAgICBbY2xhc3NdPVwiY24oXG4gICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIGxlYWRpbmctbm9uZSB0ZXh0LWZvcmVncm91bmQnLFxuICAgICAgICAnZ3JvdXAtZGF0YS1baW52YWxpZD10cnVlXS9maWVsZDp0ZXh0LWRlc3RydWN0aXZlJyxcbiAgICAgICAgJ3BlZXItZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIHBlZXItZGlzYWJsZWQ6b3BhY2l0eS01MCcsXG4gICAgICAgIGNsYXNzXG4gICAgICApXCJcbiAgICA+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICA8c3BhbiAqbmdJZj1cInJlcXVpcmVkXCIgY2xhc3M9XCJ0ZXh0LWRlc3RydWN0aXZlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZExhYmVsQ29tcG9uZW50ICBpbXBsZW1lbnRzIE9uQ2hhbmdlc3tcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIC8qKlxuICAgKiBBbmd1bGFyIHdyaXRlcyBhIGJvdW5kIGBjbGFzc2AgaW5wdXQgdGhyb3VnaCBpdHMgc3R5bGluZyBwYXRoLCB3aGljaCBkb2VzXG4gICAqIG5vdCBtYXJrIGFuIE9uUHVzaCBjb21wb25lbnQgZGlydHkg4oCUIHdpdGhvdXQgdGhpcyBob29rIHRoZSBjb21wb25lbnQga2VlcHNcbiAgICogcmVuZGVyaW5nIHRoZSBjbGFzcyBpdCB3YXMgYm9ybiB3aXRoLlxuICAgKi9cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiogSWQgb2YgdGhlIGNvbnRyb2wgdGhpcyBsYWJlbCBkZXNjcmliZXM7IHdpcmUgaXQgdG8gdGhlIGNvbnRyb2wncyBgaWRgLiBAZGVmYXVsdCAnJyAqL1xuICBASW5wdXQoKSBmb3IgPSAnJztcbiAgLyoqIEFwcGVuZHMgYSByZXF1aXJlZCBtYXJrZXIgKCopIGFmdGVyIHRoZSBsYWJlbCB0ZXh0LiBAZGVmYXVsdCBmYWxzZSAqL1xuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuICAvKiogRXh0cmEgVGFpbHdpbmQgY2xhc3NlcyBtZXJnZWQgb250byB0aGUgbGFiZWwgdmlhIGBjbigpYCAobGFzdC13aW5zKS4gKi9cbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgcHJvdGVjdGVkIGNuID0gY247XG59XG5cbi8qKiBDb2x1bW4gdGhhdCBncm91cHMgdGhlIGNvbnRyb2wgd2l0aCBpdHMgZGVzY3JpcHRpb24gYW5kIGVycm9yIHRleHQuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1maWVsZC1jb250ZW50JyxcbiAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogYmxvY2s7IH0nXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYDxkaXYgW2NsYXNzXT1cImNuKCdmbGV4IGZsZXgtMSBmbGV4LWNvbCBnYXAtMS41JywgY2xhc3MpXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PmAsXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkQ29udGVudENvbXBvbmVudCAgaW1wbGVtZW50cyBPbkNoYW5nZXN7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAvKipcbiAgICogQW5ndWxhciB3cml0ZXMgYSBib3VuZCBgY2xhc3NgIGlucHV0IHRocm91Z2ggaXRzIHN0eWxpbmcgcGF0aCwgd2hpY2ggZG9lc1xuICAgKiBub3QgbWFyayBhbiBPblB1c2ggY29tcG9uZW50IGRpcnR5IOKAlCB3aXRob3V0IHRoaXMgaG9vayB0aGUgY29tcG9uZW50IGtlZXBzXG4gICAqIHJlbmRlcmluZyB0aGUgY2xhc3MgaXQgd2FzIGJvcm4gd2l0aC5cbiAgICovXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIEV4dHJhIFRhaWx3aW5kIGNsYXNzZXMgbWVyZ2VkIG9udG8gdGhlIGNvbnRlbnQgY29sdW1uIHZpYSBgY24oKWAgKGxhc3Qtd2lucykuICovXG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG4gIHByb3RlY3RlZCBjbiA9IGNuO1xufVxuXG4vKipcbiAqIEhlbHBlciB0ZXh0IGJlbG93IGEgY29udHJvbC4gR2l2ZSBpdCBhbiBgaWRgIGFuZCBwb2ludCB0aGUgY29udHJvbCdzXG4gKiBgYXJpYS1kZXNjcmliZWRieWAgYXQgaXQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLWZpZWxkLWRlc2NyaXB0aW9uJyxcbiAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogYmxvY2s7IH0nXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxwIFtpZF09XCJpZCB8fCBudWxsXCIgW2NsYXNzXT1cImNuKCd0ZXh0LWJhbGFuY2UgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQnLCBjbGFzcylcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L3A+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkRGVzY3JpcHRpb25Db21wb25lbnQgIGltcGxlbWVudHMgT25DaGFuZ2Vze1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgLyoqXG4gICAqIEFuZ3VsYXIgd3JpdGVzIGEgYm91bmQgYGNsYXNzYCBpbnB1dCB0aHJvdWdoIGl0cyBzdHlsaW5nIHBhdGgsIHdoaWNoIGRvZXNcbiAgICogbm90IG1hcmsgYW4gT25QdXNoIGNvbXBvbmVudCBkaXJ0eSDigJQgd2l0aG91dCB0aGlzIGhvb2sgdGhlIGNvbXBvbmVudCBrZWVwc1xuICAgKiByZW5kZXJpbmcgdGhlIGNsYXNzIGl0IHdhcyBib3JuIHdpdGguXG4gICAqL1xuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBJZCB0byByZWZlcmVuY2UgZnJvbSB0aGUgY29udHJvbCdzIGBhcmlhLWRlc2NyaWJlZGJ5YC4gQGRlZmF1bHQgJycgKi9cbiAgQElucHV0KCkgaWQgPSAnJztcbiAgLyoqIEV4dHJhIFRhaWx3aW5kIGNsYXNzZXMgbWVyZ2VkIG9udG8gdGhlIGRlc2NyaXB0aW9uIHZpYSBgY24oKWAgKGxhc3Qtd2lucykuICovXG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG4gIHByb3RlY3RlZCBjbiA9IGNuO1xufVxuXG4vKipcbiAqIEVycm9yIHRleHQgZm9yIGEgZmllbGQuIFJlbmRlcnMgbm90aGluZyB3aGVuIHRoZXJlIGlzIG5vIGVycm9yLCBzbyBpdCBpcyBzYWZlXG4gKiB0byBsZWF2ZSBpbiB0aGUgdGVtcGxhdGUgcGVybWFuZW50bHkuIEFubm91bmNlcyB2aWEgYHJvbGU9XCJhbGVydFwiYC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtZmllbGQtZXJyb3InLFxuICBzdHlsZXM6IFsnOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfSddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJtZXNzYWdlcy5sZW5ndGhcIlxuICAgICAgW2lkXT1cImlkIHx8IG51bGxcIlxuICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgIFtjbGFzc109XCJjbigndGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWRlc3RydWN0aXZlJywgY2xhc3MpXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZXMubGVuZ3RoID09PSAxXCI+e3sgbWVzc2FnZXNbMF0gfX08L25nLWNvbnRhaW5lcj5cbiAgICAgIDx1bCAqbmdJZj1cIm1lc3NhZ2VzLmxlbmd0aCA+IDFcIiBjbGFzcz1cIm1sLTQgbGlzdC1kaXNjIHNwYWNlLXktMC41XCI+XG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgbWVzc2FnZSBvZiBtZXNzYWdlc1wiPnt7IG1lc3NhZ2UgfX08L2xpPlxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgRmllbGRFcnJvckNvbXBvbmVudCAgaW1wbGVtZW50cyBPbkNoYW5nZXN7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAvKipcbiAgICogQW5ndWxhciB3cml0ZXMgYSBib3VuZCBgY2xhc3NgIGlucHV0IHRocm91Z2ggaXRzIHN0eWxpbmcgcGF0aCwgd2hpY2ggZG9lc1xuICAgKiBub3QgbWFyayBhbiBPblB1c2ggY29tcG9uZW50IGRpcnR5IOKAlCB3aXRob3V0IHRoaXMgaG9vayB0aGUgY29tcG9uZW50IGtlZXBzXG4gICAqIHJlbmRlcmluZyB0aGUgY2xhc3MgaXQgd2FzIGJvcm4gd2l0aC5cbiAgICovXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRpb24gbWVzc2FnZShzKS4gQWNjZXB0cyBhIHNpbmdsZSBzdHJpbmcsIGFuIGFycmF5IG9mIHN0cmluZ3MsIG9yIGFuXG4gICAqIEFuZ3VsYXIgYFZhbGlkYXRpb25FcnJvcnNgLXN0eWxlIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIG1lc3NhZ2VzLlxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgQElucHV0KCkgZXJyb3JzOiBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsID0gJyc7XG4gIC8qKiBJZCB0byByZWZlcmVuY2UgZnJvbSB0aGUgY29udHJvbCdzIGBhcmlhLWRlc2NyaWJlZGJ5YC4gQGRlZmF1bHQgJycgKi9cbiAgQElucHV0KCkgaWQgPSAnJztcbiAgLyoqIEV4dHJhIFRhaWx3aW5kIGNsYXNzZXMgbWVyZ2VkIG9udG8gdGhlIGVycm9yIHRleHQgdmlhIGBjbigpYCAobGFzdC13aW5zKS4gKi9cbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgcHJvdGVjdGVkIGNuID0gY247XG5cbiAgLyoqIE5vcm1hbGlzZXMgdGhlIHRocmVlIGFjY2VwdGVkIGBlcnJvcnNgIHNoYXBlcyB0byBhIGZsYXQgbGlzdCBvZiBzdHJpbmdzLiAqL1xuICBnZXQgbWVzc2FnZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGUgPSB0aGlzLmVycm9ycztcbiAgICBpZiAoIWUpIHJldHVybiBbXTtcbiAgICBpZiAodHlwZW9mIGUgPT09ICdzdHJpbmcnKSByZXR1cm4gZSA/IFtlXSA6IFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGUpKSByZXR1cm4gZS5maWx0ZXIoQm9vbGVhbikubWFwKFN0cmluZyk7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZSlcbiAgICAgIC5maWx0ZXIoKHYpID0+IHYgIT09IGZhbHNlICYmIHYgIT09IG51bGwgJiYgdiAhPT0gdW5kZWZpbmVkKVxuICAgICAgLm1hcCgodikgPT4gKHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHYgOiBTdHJpbmcodikpKTtcbiAgfVxufVxuXG4vKiogU3RhY2tzIHNldmVyYWwgZmllbGRzIHdpdGggY29uc2lzdGVudCBzcGFjaW5nLiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtZmllbGQtZ3JvdXAnLFxuICBzdHlsZXM6IFsnOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfSddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgPGRpdiBbY2xhc3NdPVwiY24oJ2ZsZXggdy1mdWxsIGZsZXgtY29sIGdhcC02JywgY2xhc3MpXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PmAsXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkR3JvdXBDb21wb25lbnQgIGltcGxlbWVudHMgT25DaGFuZ2Vze1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgLyoqXG4gICAqIEFuZ3VsYXIgd3JpdGVzIGEgYm91bmQgYGNsYXNzYCBpbnB1dCB0aHJvdWdoIGl0cyBzdHlsaW5nIHBhdGgsIHdoaWNoIGRvZXNcbiAgICogbm90IG1hcmsgYW4gT25QdXNoIGNvbXBvbmVudCBkaXJ0eSDigJQgd2l0aG91dCB0aGlzIGhvb2sgdGhlIGNvbXBvbmVudCBrZWVwc1xuICAgKiByZW5kZXJpbmcgdGhlIGNsYXNzIGl0IHdhcyBib3JuIHdpdGguXG4gICAqL1xuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBFeHRyYSBUYWlsd2luZCBjbGFzc2VzIG1lcmdlZCBvbnRvIHRoZSBncm91cCB2aWEgYGNuKClgIChsYXN0LXdpbnMpLiAqL1xuICBASW5wdXQoKSBjbGFzcyA9ICcnO1xuICBwcm90ZWN0ZWQgY24gPSBjbjtcbn1cblxuLyoqIFNlbWFudGljIGA8ZmllbGRzZXQ+YCBncm91cGluZyByZWxhdGVkIGZpZWxkcyB1bmRlciBhIGxlZ2VuZC4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLWZpZWxkLXNldCcsXG4gIHN0eWxlczogWyc6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB9J10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGA8ZmllbGRzZXQgW2NsYXNzXT1cImNuKCdmbGV4IHctZnVsbCBmbGV4LWNvbCBnYXAtNCBib3JkZXItMCBwLTAnLCBjbGFzcylcIj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9maWVsZHNldD5gLFxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZFNldENvbXBvbmVudCAgaW1wbGVtZW50cyBPbkNoYW5nZXN7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAvKipcbiAgICogQW5ndWxhciB3cml0ZXMgYSBib3VuZCBgY2xhc3NgIGlucHV0IHRocm91Z2ggaXRzIHN0eWxpbmcgcGF0aCwgd2hpY2ggZG9lc1xuICAgKiBub3QgbWFyayBhbiBPblB1c2ggY29tcG9uZW50IGRpcnR5IOKAlCB3aXRob3V0IHRoaXMgaG9vayB0aGUgY29tcG9uZW50IGtlZXBzXG4gICAqIHJlbmRlcmluZyB0aGUgY2xhc3MgaXQgd2FzIGJvcm4gd2l0aC5cbiAgICovXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIEV4dHJhIFRhaWx3aW5kIGNsYXNzZXMgbWVyZ2VkIG9udG8gdGhlIGZpZWxkc2V0IHZpYSBgY24oKWAgKGxhc3Qtd2lucykuICovXG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG4gIHByb3RlY3RlZCBjbiA9IGNuO1xufVxuXG5jb25zdCBmaWVsZExlZ2VuZFZhcmlhbnRzID0gY3ZhKCdtYi0xIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZCcsIHtcbiAgdmFyaWFudHM6IHtcbiAgICB2YXJpYW50OiB7XG4gICAgICBsZWdlbmQ6ICd0ZXh0LWJhc2UnLFxuICAgICAgbGFiZWw6ICd0ZXh0LXNtIGxlYWRpbmctbm9uZScsXG4gICAgfSxcbiAgfSxcbiAgZGVmYXVsdFZhcmlhbnRzOiB7IHZhcmlhbnQ6ICdsZWdlbmQnIH0sXG59KTtcblxuZXhwb3J0IHR5cGUgRmllbGRMZWdlbmRQcm9wcyA9IFZhcmlhbnRQcm9wczx0eXBlb2YgZmllbGRMZWdlbmRWYXJpYW50cz47XG5cbi8qKiBgPGxlZ2VuZD5gIGZvciBhIGB0b2xsZS1maWVsZC1zZXRgLiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtZmllbGQtbGVnZW5kJyxcbiAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogYmxvY2s7IH0nXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYDxsZWdlbmQgW2NsYXNzXT1cImNvbXB1dGVkQ2xhc3NcIj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9sZWdlbmQ+YCxcbn0pXG5leHBvcnQgY2xhc3MgRmllbGRMZWdlbmRDb21wb25lbnQgIGltcGxlbWVudHMgT25DaGFuZ2Vze1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgLyoqXG4gICAqIEFuZ3VsYXIgd3JpdGVzIGEgYm91bmQgYGNsYXNzYCBpbnB1dCB0aHJvdWdoIGl0cyBzdHlsaW5nIHBhdGgsIHdoaWNoIGRvZXNcbiAgICogbm90IG1hcmsgYW4gT25QdXNoIGNvbXBvbmVudCBkaXJ0eSDigJQgd2l0aG91dCB0aGlzIGhvb2sgdGhlIGNvbXBvbmVudCBrZWVwc1xuICAgKiByZW5kZXJpbmcgdGhlIGNsYXNzIGl0IHdhcyBib3JuIHdpdGguXG4gICAqL1xuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBUeXBlIHNjYWxlIG9mIHRoZSBsZWdlbmQuIEBkZWZhdWx0ICdsZWdlbmQnICovXG4gIEBJbnB1dCgpIHZhcmlhbnQ6IEZpZWxkTGVnZW5kUHJvcHNbJ3ZhcmlhbnQnXSA9ICdsZWdlbmQnO1xuICAvKiogRXh0cmEgVGFpbHdpbmQgY2xhc3NlcyBtZXJnZWQgb250byB0aGUgbGVnZW5kIHZpYSBgY24oKWAgKGxhc3Qtd2lucykuICovXG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG5cbiAgZ2V0IGNvbXB1dGVkQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKGZpZWxkTGVnZW5kVmFyaWFudHMoeyB2YXJpYW50OiB0aGlzLnZhcmlhbnQgfSksIHRoaXMuY2xhc3MpO1xuICB9XG59XG5cbi8qKiBEaXZpZGVyIGJldHdlZW4gc2VjdGlvbnMgb2YgYSBmb3JtLiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtZmllbGQtc2VwYXJhdG9yJyxcbiAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogYmxvY2s7IH0nXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYDxkaXYgcm9sZT1cInNlcGFyYXRvclwiIFtjbGFzc109XCJjbignaC1weCB3LWZ1bGwgYmctYm9yZGVyJywgY2xhc3MpXCI+PC9kaXY+YCxcbn0pXG5leHBvcnQgY2xhc3MgRmllbGRTZXBhcmF0b3JDb21wb25lbnQgIGltcGxlbWVudHMgT25DaGFuZ2Vze1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgLyoqXG4gICAqIEFuZ3VsYXIgd3JpdGVzIGEgYm91bmQgYGNsYXNzYCBpbnB1dCB0aHJvdWdoIGl0cyBzdHlsaW5nIHBhdGgsIHdoaWNoIGRvZXNcbiAgICogbm90IG1hcmsgYW4gT25QdXNoIGNvbXBvbmVudCBkaXJ0eSDigJQgd2l0aG91dCB0aGlzIGhvb2sgdGhlIGNvbXBvbmVudCBrZWVwc1xuICAgKiByZW5kZXJpbmcgdGhlIGNsYXNzIGl0IHdhcyBib3JuIHdpdGguXG4gICAqL1xuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBFeHRyYSBUYWlsd2luZCBjbGFzc2VzIG1lcmdlZCBvbnRvIHRoZSBzZXBhcmF0b3IgdmlhIGBjbigpYCAobGFzdC13aW5zKS4gKi9cbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgcHJvdGVjdGVkIGNuID0gY247XG59XG5cbi8qKiBUaXRsZSBmb3IgYSBncm91cCBvZiBmaWVsZHMgdGhhdCBpcyBub3QgYSBgPGxlZ2VuZD5gLiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtZmllbGQtdGl0bGUnLFxuICBzdHlsZXM6IFsnOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfSddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgPGRpdiBbY2xhc3NdPVwiY24oJ3RleHQtc20gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHRleHQtZm9yZWdyb3VuZCcsIGNsYXNzKVwiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L2Rpdj5gLFxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZFRpdGxlQ29tcG9uZW50ICBpbXBsZW1lbnRzIE9uQ2hhbmdlc3tcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIC8qKlxuICAgKiBBbmd1bGFyIHdyaXRlcyBhIGJvdW5kIGBjbGFzc2AgaW5wdXQgdGhyb3VnaCBpdHMgc3R5bGluZyBwYXRoLCB3aGljaCBkb2VzXG4gICAqIG5vdCBtYXJrIGFuIE9uUHVzaCBjb21wb25lbnQgZGlydHkg4oCUIHdpdGhvdXQgdGhpcyBob29rIHRoZSBjb21wb25lbnQga2VlcHNcbiAgICogcmVuZGVyaW5nIHRoZSBjbGFzcyBpdCB3YXMgYm9ybiB3aXRoLlxuICAgKi9cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiogRXh0cmEgVGFpbHdpbmQgY2xhc3NlcyBtZXJnZWQgb250byB0aGUgdGl0bGUgdmlhIGBjbigpYCAobGFzdC13aW5zKS4gKi9cbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgcHJvdGVjdGVkIGNuID0gY247XG59XG4iXX0=
|
|
@@ -54,16 +54,11 @@ export class HoverCardComponent {
|
|
|
54
54
|
clearTimeout(this.closeTimeout);
|
|
55
55
|
}
|
|
56
56
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HoverCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
57
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: HoverCardComponent, isStandalone: true, selector: "tolle-hover-card", inputs: { openDelay: "openDelay", closeDelay: "closeDelay", placement: "placement" }, queries: [{ propertyName: "contentComponent", first: true, predicate: i0.forwardRef(() => HoverCardContentComponent), descendants: true }], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
57
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: HoverCardComponent, isStandalone: true, selector: "tolle-hover-card", inputs: { openDelay: "openDelay", closeDelay: "closeDelay", placement: "placement" }, queries: [{ propertyName: "contentComponent", first: true, predicate: i0.forwardRef(() => HoverCardContentComponent), descendants: true }], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
58
58
|
}
|
|
59
59
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HoverCardComponent, decorators: [{
|
|
60
60
|
type: Component,
|
|
61
|
-
args: [{
|
|
62
|
-
selector: 'tolle-hover-card',
|
|
63
|
-
standalone: true,
|
|
64
|
-
imports: [CommonModule],
|
|
65
|
-
template: `<ng-content></ng-content>`
|
|
66
|
-
}]
|
|
61
|
+
args: [{ selector: 'tolle-hover-card', standalone: true, imports: [CommonModule], template: `<ng-content></ng-content>`, styles: [":host{display:block}\n"] }]
|
|
67
62
|
}], propDecorators: { openDelay: [{
|
|
68
63
|
type: Input
|
|
69
64
|
}], closeDelay: [{
|
|
@@ -160,15 +155,11 @@ export class HoverCardContentComponent {
|
|
|
160
155
|
(mouseleave)="onMouseLeave()">
|
|
161
156
|
<ng-content></ng-content>
|
|
162
157
|
</div>
|
|
163
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
158
|
+
`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
164
159
|
}
|
|
165
160
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HoverCardContentComponent, decorators: [{
|
|
166
161
|
type: Component,
|
|
167
|
-
args: [{
|
|
168
|
-
selector: 'tolle-hover-card-content',
|
|
169
|
-
standalone: true,
|
|
170
|
-
imports: [CommonModule],
|
|
171
|
-
template: `
|
|
162
|
+
args: [{ selector: 'tolle-hover-card-content', standalone: true, imports: [CommonModule], template: `
|
|
172
163
|
<div *ngIf="isVisible"
|
|
173
164
|
#content
|
|
174
165
|
[class]="computedClass"
|
|
@@ -176,12 +167,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
176
167
|
(mouseleave)="onMouseLeave()">
|
|
177
168
|
<ng-content></ng-content>
|
|
178
169
|
</div>
|
|
179
|
-
|
|
180
|
-
}]
|
|
170
|
+
`, styles: [":host{display:block}\n"] }]
|
|
181
171
|
}], propDecorators: { class: [{
|
|
182
172
|
type: Input
|
|
183
173
|
}], contentEl: [{
|
|
184
174
|
type: ViewChild,
|
|
185
175
|
args: ['content']
|
|
186
176
|
}] } });
|
|
187
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXItY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL2hvdmVyLWNhcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUF3QixNQUFNLEVBQWUsU0FBUyxFQUErQixZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekwsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQzs7O0FBUWhDLE1BQU0sT0FBTyxrQkFBa0I7SUFDbEIsU0FBUyxHQUFHLEdBQUcsQ0FBQztJQUNoQixVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLFNBQVMsR0FBd0MsUUFBUSxDQUFDO0lBRTNELFdBQVcsQ0FBTztJQUNsQixZQUFZLENBQU87SUFFM0IsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUU0QyxnQkFBZ0IsQ0FBNkI7SUFFeEcsSUFBSSxDQUFDLGNBQTJCO1FBQzVCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7UUFDbEMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRXhCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlCLENBQUMsRUFBRSxJQUFJLENB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QUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7b0JBQ3pCLFFBQVEsRUFBRSxPQUFPO29CQUNqQixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7b0JBQ2QsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJO29CQUNiLE1BQU0sRUFBRSxNQUFNO2lCQUNqQixDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFlBQVk7UUFDUixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsWUFBWTtRQUNSLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksYUFBYTtRQUNiLE9BQU8sRUFBRSxDQUNMLHFOQUFxTixFQUNyTixJQUFJLENBQUMsS0FBSyxDQUNiLENBQUM7SUFDTixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckMsQ0FBQzt3R0ExRFEseUJBQXlCOzRGQUF6Qix5QkFBeUIsc05BVnhCOzs7Ozs7OztHQVFYLDJEQVRXLFlBQVk7OzRGQVdiLHlCQUF5QjtrQkFkckMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsMEJBQTBCO29CQUNwQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixRQUFRLEVBQUU7Ozs7Ozs7O0dBUVg7aUJBQ0Y7OEJBRVksS0FBSztzQkFBYixLQUFLO2dCQUNnQixTQUFTO3NCQUE5QixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBPbkRlc3Ryb3ksIENvbnRlbnRDaGlsZCwgZm9yd2FyZFJlZiwgRWxlbWVudFJlZiwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGNvbXB1dGVQb3NpdGlvbiwgZmxpcCwgc2hpZnQsIG9mZnNldCwgYXV0b1VwZGF0ZSB9IGZyb20gJ0BmbG9hdGluZy11aS9kb20nO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0b2xsZS1ob3Zlci1jYXJkJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICAgIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmBcbn0pXG5leHBvcnQgY2xhc3MgSG92ZXJDYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBvcGVuRGVsYXkgPSA3MDA7XG4gICAgQElucHV0KCkgY2xvc2VEZWxheSA9IDMwMDtcbiAgICBASW5wdXQoKSBwbGFjZW1lbnQ6ICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAncmlnaHQnID0gJ2JvdHRvbSc7XG5cbiAgICBwcml2YXRlIG9wZW5UaW1lb3V0PzogYW55O1xuICAgIHByaXZhdGUgY2xvc2VUaW1lb3V0PzogYW55O1xuXG4gICAgaXNPcGVuID0gZmFsc2U7XG5cbiAgICBAQ29udGVudENoaWxkKGZvcndhcmRSZWYoKCkgPT4gSG92ZXJDYXJkQ29udGVudENvbXBvbmVudCkpIGNvbnRlbnRDb21wb25lbnQ/OiBIb3ZlckNhcmRDb250ZW50Q29tcG9uZW50O1xuXG4gICAgb3Blbih0cmlnZ2VyRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jbG9zZVRpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZVRpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcblxuICAgICAgICB0aGlzLm9wZW5UaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3codHJpZ2dlckVsZW1lbnQpO1xuICAgICAgICB9LCB0aGlzLm9wZW5EZWxheSk7XG4gICAgfVxuXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wZW5UaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5vcGVuVGltZW91dCk7XG4gICAgICAgICAgICB0aGlzLm9wZW5UaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbG9zZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB9LCB0aGlzLmNsb3NlRGVsYXkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvdyh0cmlnZ2VyRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnRDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRDb21wb25lbnQuc2hvdyh0cmlnZ2VyRWxlbWVudCwgdGhpcy5wbGFjZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGUoKSB7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGVudENvbXBvbmVudC5oaWRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIGlmICh0aGlzLm9wZW5UaW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy5vcGVuVGltZW91dCk7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlVGltZW91dCkgY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2VUaW1lb3V0KTtcbiAgICB9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndG9sbGUtaG92ZXItY2FyZC10cmlnZ2VyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICAgIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmAsXG4gICAgaG9zdDoge1xuICAgICAgICAnKG1vdXNlZW50ZXIpJzogJ29uTW91c2VFbnRlcigpJyxcbiAgICAgICAgJyhtb3VzZWxlYXZlKSc6ICdvbk1vdXNlTGVhdmUoKScsXG4gICAgICAgICcoZm9jdXNpbiknOiAnb25Nb3VzZUVudGVyKCknLFxuICAgICAgICAnKGZvY3Vzb3V0KSc6ICdvbk1vdXNlTGVhdmUoKScsXG4gICAgICAgICdbY2xhc3NdJzogJ1wiY3Vyc29yLWRlZmF1bHQgaW5saW5lLWJsb2NrXCInXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBIb3ZlckNhcmRUcmlnZ2VyQ29tcG9uZW50IHtcbiAgICBwcml2YXRlIGhvdmVyQ2FyZCA9IGluamVjdChIb3ZlckNhcmRDb21wb25lbnQpO1xuICAgIHByaXZhdGUgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICAgIG9uTW91c2VFbnRlcigpIHtcbiAgICAgICAgdGhpcy5ob3ZlckNhcmQub3Blbih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgb25Nb3VzZUxlYXZlKCkge1xuICAgICAgICB0aGlzLmhvdmVyQ2FyZC5jbG9zZSgpO1xuICAgIH1cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0b2xsZS1ob3Zlci1jYXJkLWNvbnRlbnQnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gICAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2ICpuZ0lmPVwiaXNWaXNpYmxlXCJcbiAgICAgICAgICNjb250ZW50XG4gICAgICAgICBbY2xhc3NdPVwiY29tcHV0ZWRDbGFzc1wiXG4gICAgICAgICAobW91c2VlbnRlcik9XCJvbk1vdXNlRW50ZXIoKVwiXG4gICAgICAgICAobW91c2VsZWF2ZSk9XCJvbk1vdXNlTGVhdmUoKVwiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIEhvdmVyQ2FyZENvbnRlbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIGNsYXNzOiBzdHJpbmcgPSAnJztcbiAgICBAVmlld0NoaWxkKCdjb250ZW50JykgY29udGVudEVsPzogRWxlbWVudFJlZjtcblxuICAgIGlzVmlzaWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgY2xlYW51cD86ICgpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBob3ZlckNhcmQgPSBpbmplY3QoSG92ZXJDYXJkQ29tcG9uZW50KTtcblxuICAgIHNob3codHJpZ2dlckVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwbGFjZW1lbnQ6IGFueSkge1xuICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udGVudEVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbih0cmlnZ2VyRWxlbWVudCwgdGhpcy5jb250ZW50RWwubmF0aXZlRWxlbWVudCwgcGxhY2VtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGlkZSgpIHtcbiAgICAgICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY2xlYW51cCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVBvc2l0aW9uKHRyaWdnZXI6IEhUTUxFbGVtZW50LCBjb250ZW50OiBIVE1MRWxlbWVudCwgcGxhY2VtZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5jbGVhbnVwID0gYXV0b1VwZGF0ZSh0cmlnZ2VyLCBjb250ZW50LCAoKSA9PiB7XG4gICAgICAgICAgICBjb21wdXRlUG9zaXRpb24odHJpZ2dlciwgY29udGVudCwge1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgICAgICAgICBtaWRkbGV3YXJlOiBbb2Zmc2V0KDgpLCBmbGlwKCksIHNoaWZ0KHsgcGFkZGluZzogOCB9KV0sXG4gICAgICAgICAgICB9KS50aGVuKCh7IHgsIHkgfSkgPT4ge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29udGVudC5zdHlsZSwge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogYCR7eH1weGAsXG4gICAgICAgICAgICAgICAgICAgIHRvcDogYCR7eX1weGAsXG4gICAgICAgICAgICAgICAgICAgIHpJbmRleDogJzk5OTknXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Nb3VzZUVudGVyKCkge1xuICAgICAgICB0aGlzLmhvdmVyQ2FyZC5vcGVuKG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICBvbk1vdXNlTGVhdmUoKSB7XG4gICAgICAgIHRoaXMuaG92ZXJDYXJkLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgZ2V0IGNvbXB1dGVkQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiBjbihcbiAgICAgICAgICAgIFwidy02NCByb3VuZGVkLW1kIGJvcmRlciBiZy1wb3BvdmVyIHAtNCB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBzaGFkb3ctbWQgb3V0bGluZS1ub25lIGFuaW1hdGUtaW4gZmFkZS1pbi0wIHpvb20taW4tOTUgZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NVwiLFxuICAgICAgICAgICAgdGhpcy5jbGFzc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5jbGVhbnVwKSB0aGlzLmNsZWFudXAoKTtcbiAgICB9XG59XG4iXX0=
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXItY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL2hvdmVyLWNhcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUF3QixNQUFNLEVBQWUsU0FBUyxFQUErQixZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekwsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQzs7O0FBU2hDLE1BQU0sT0FBTyxrQkFBa0I7SUFDbEIsU0FBUyxHQUFHLEdBQUcsQ0FBQztJQUNoQixVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLFNBQVMsR0FBd0MsUUFBUSxDQUFDO0lBRTNELFdBQVcsQ0FBTztJQUNsQixZQUFZLENBQU87SUFFM0IsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUU0QyxnQkFBZ0IsQ0FBNkI7SUFFeEcsSUFBSSxDQUFDLGNBQTJCO1FBQzVCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7UUFDbEMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRXhCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlCLENBQUMsRUFBRSxJQUFJLENB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QUFPO29CQUNqQixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7b0JBQ2QsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJO29CQUNiLE1BQU0sRUFBRSxNQUFNO2lCQUNqQixDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFlBQVk7UUFDUixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsWUFBWTtRQUNSLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksYUFBYTtRQUNiLE9BQU8sRUFBRSxDQUNMLHFOQUFxTixFQUNyTixJQUFJLENBQUMsS0FBSyxDQUNiLENBQUM7SUFDTixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckMsQ0FBQzt3R0ExRFEseUJBQXlCOzRGQUF6Qix5QkFBeUIsc05BVnhCOzs7Ozs7OztHQVFYLCtGQVRXLFlBQVk7OzRGQVdiLHlCQUF5QjtrQkFmckMsU0FBUzsrQkFDSSwwQkFBMEIsY0FFeEIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLFlBQ2I7Ozs7Ozs7O0dBUVg7OEJBR1UsS0FBSztzQkFBYixLQUFLO2dCQUNnQixTQUFTO3NCQUE5QixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBPbkRlc3Ryb3ksIENvbnRlbnRDaGlsZCwgZm9yd2FyZFJlZiwgRWxlbWVudFJlZiwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGNvbXB1dGVQb3NpdGlvbiwgZmxpcCwgc2hpZnQsIG9mZnNldCwgYXV0b1VwZGF0ZSB9IGZyb20gJ0BmbG9hdGluZy11aS9kb20nO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0b2xsZS1ob3Zlci1jYXJkJyxcbiAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogYmxvY2s7IH0nXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICAgIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmBcbn0pXG5leHBvcnQgY2xhc3MgSG92ZXJDYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBvcGVuRGVsYXkgPSA3MDA7XG4gICAgQElucHV0KCkgY2xvc2VEZWxheSA9IDMwMDtcbiAgICBASW5wdXQoKSBwbGFjZW1lbnQ6ICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAncmlnaHQnID0gJ2JvdHRvbSc7XG5cbiAgICBwcml2YXRlIG9wZW5UaW1lb3V0PzogYW55O1xuICAgIHByaXZhdGUgY2xvc2VUaW1lb3V0PzogYW55O1xuXG4gICAgaXNPcGVuID0gZmFsc2U7XG5cbiAgICBAQ29udGVudENoaWxkKGZvcndhcmRSZWYoKCkgPT4gSG92ZXJDYXJkQ29udGVudENvbXBvbmVudCkpIGNvbnRlbnRDb21wb25lbnQ/OiBIb3ZlckNhcmRDb250ZW50Q29tcG9uZW50O1xuXG4gICAgb3Blbih0cmlnZ2VyRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jbG9zZVRpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZVRpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHJldHVybjtcblxuICAgICAgICB0aGlzLm9wZW5UaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3codHJpZ2dlckVsZW1lbnQpO1xuICAgICAgICB9LCB0aGlzLm9wZW5EZWxheSk7XG4gICAgfVxuXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wZW5UaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5vcGVuVGltZW91dCk7XG4gICAgICAgICAgICB0aGlzLm9wZW5UaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbG9zZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB9LCB0aGlzLmNsb3NlRGVsYXkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvdyh0cmlnZ2VyRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnRDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRDb21wb25lbnQuc2hvdyh0cmlnZ2VyRWxlbWVudCwgdGhpcy5wbGFjZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGUoKSB7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGVudENvbXBvbmVudC5oaWRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIGlmICh0aGlzLm9wZW5UaW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy5vcGVuVGltZW91dCk7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlVGltZW91dCkgY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2VUaW1lb3V0KTtcbiAgICB9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndG9sbGUtaG92ZXItY2FyZC10cmlnZ2VyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICAgIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmAsXG4gICAgaG9zdDoge1xuICAgICAgICAnKG1vdXNlZW50ZXIpJzogJ29uTW91c2VFbnRlcigpJyxcbiAgICAgICAgJyhtb3VzZWxlYXZlKSc6ICdvbk1vdXNlTGVhdmUoKScsXG4gICAgICAgICcoZm9jdXNpbiknOiAnb25Nb3VzZUVudGVyKCknLFxuICAgICAgICAnKGZvY3Vzb3V0KSc6ICdvbk1vdXNlTGVhdmUoKScsXG4gICAgICAgICdbY2xhc3NdJzogJ1wiY3Vyc29yLWRlZmF1bHQgaW5saW5lLWJsb2NrXCInXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBIb3ZlckNhcmRUcmlnZ2VyQ29tcG9uZW50IHtcbiAgICBwcml2YXRlIGhvdmVyQ2FyZCA9IGluamVjdChIb3ZlckNhcmRDb21wb25lbnQpO1xuICAgIHByaXZhdGUgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICAgIG9uTW91c2VFbnRlcigpIHtcbiAgICAgICAgdGhpcy5ob3ZlckNhcmQub3Blbih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgb25Nb3VzZUxlYXZlKCkge1xuICAgICAgICB0aGlzLmhvdmVyQ2FyZC5jbG9zZSgpO1xuICAgIH1cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0b2xsZS1ob3Zlci1jYXJkLWNvbnRlbnQnLFxuICBzdHlsZXM6IFsnOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfSddLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gICAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2ICpuZ0lmPVwiaXNWaXNpYmxlXCJcbiAgICAgICAgICNjb250ZW50XG4gICAgICAgICBbY2xhc3NdPVwiY29tcHV0ZWRDbGFzc1wiXG4gICAgICAgICAobW91c2VlbnRlcik9XCJvbk1vdXNlRW50ZXIoKVwiXG4gICAgICAgICAobW91c2VsZWF2ZSk9XCJvbk1vdXNlTGVhdmUoKVwiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIEhvdmVyQ2FyZENvbnRlbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIGNsYXNzOiBzdHJpbmcgPSAnJztcbiAgICBAVmlld0NoaWxkKCdjb250ZW50JykgY29udGVudEVsPzogRWxlbWVudFJlZjtcblxuICAgIGlzVmlzaWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgY2xlYW51cD86ICgpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBob3ZlckNhcmQgPSBpbmplY3QoSG92ZXJDYXJkQ29tcG9uZW50KTtcblxuICAgIHNob3codHJpZ2dlckVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwbGFjZW1lbnQ6IGFueSkge1xuICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udGVudEVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbih0cmlnZ2VyRWxlbWVudCwgdGhpcy5jb250ZW50RWwubmF0aXZlRWxlbWVudCwgcGxhY2VtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGlkZSgpIHtcbiAgICAgICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY2xlYW51cCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVBvc2l0aW9uKHRyaWdnZXI6IEhUTUxFbGVtZW50LCBjb250ZW50OiBIVE1MRWxlbWVudCwgcGxhY2VtZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5jbGVhbnVwID0gYXV0b1VwZGF0ZSh0cmlnZ2VyLCBjb250ZW50LCAoKSA9PiB7XG4gICAgICAgICAgICBjb21wdXRlUG9zaXRpb24odHJpZ2dlciwgY29udGVudCwge1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgICAgICAgICBtaWRkbGV3YXJlOiBbb2Zmc2V0KDgpLCBmbGlwKCksIHNoaWZ0KHsgcGFkZGluZzogOCB9KV0sXG4gICAgICAgICAgICB9KS50aGVuKCh7IHgsIHkgfSkgPT4ge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29udGVudC5zdHlsZSwge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogYCR7eH1weGAsXG4gICAgICAgICAgICAgICAgICAgIHRvcDogYCR7eX1weGAsXG4gICAgICAgICAgICAgICAgICAgIHpJbmRleDogJzk5OTknXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Nb3VzZUVudGVyKCkge1xuICAgICAgICB0aGlzLmhvdmVyQ2FyZC5vcGVuKG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICBvbk1vdXNlTGVhdmUoKSB7XG4gICAgICAgIHRoaXMuaG92ZXJDYXJkLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgZ2V0IGNvbXB1dGVkQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiBjbihcbiAgICAgICAgICAgIFwidy02NCByb3VuZGVkLW1kIGJvcmRlciBiZy1wb3BvdmVyIHAtNCB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBzaGFkb3ctbWQgb3V0bGluZS1ub25lIGFuaW1hdGUtaW4gZmFkZS1pbi0wIHpvb20taW4tOTUgZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NVwiLFxuICAgICAgICAgICAgdGhpcy5jbGFzc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5jbGVhbnVwKSB0aGlzLmNsZWFudXAoKTtcbiAgICB9XG59XG4iXX0=
|