@tolle_/tolle-ui 18.2.24 → 18.2.26
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 +17 -5
- package/esm2022/lib/alert-dialog-dynamic.component.mjs +1 -1
- package/esm2022/lib/alert-dialog.component.mjs +48 -10
- package/esm2022/lib/alert-dialog.service.mjs +13 -2
- package/esm2022/lib/alert.component.mjs +5 -5
- package/esm2022/lib/avatar.component.mjs +30 -9
- package/esm2022/lib/badge.component.mjs +41 -15
- package/esm2022/lib/breadcrumb-link.component.mjs +5 -5
- package/esm2022/lib/button.component.mjs +14 -3
- package/esm2022/lib/calendar.component.mjs +99 -17
- package/esm2022/lib/card.component.mjs +29 -9
- package/esm2022/lib/carousel/carousel.component.mjs +19 -3
- package/esm2022/lib/checkbox.component.mjs +44 -21
- package/esm2022/lib/collapsible.component.mjs +12 -4
- package/esm2022/lib/country-selector.component.mjs +140 -20
- package/esm2022/lib/data-table.component.mjs +27 -16
- package/esm2022/lib/date-picker.component.mjs +24 -4
- package/esm2022/lib/date-range-picker.component.mjs +37 -9
- package/esm2022/lib/dropdown-item.component.mjs +19 -5
- 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 +7 -3
- package/esm2022/lib/empty-state.component.mjs +3 -3
- package/esm2022/lib/hover-card.component.mjs +4 -2
- package/esm2022/lib/input.component.mjs +7 -5
- package/esm2022/lib/label.component.mjs +2 -2
- package/esm2022/lib/masked-input.component.mjs +3 -3
- package/esm2022/lib/modal.component.mjs +58 -22
- package/esm2022/lib/modal.service.mjs +13 -1
- package/esm2022/lib/multi-select.component.mjs +228 -20
- package/esm2022/lib/otp.component.mjs +6 -3
- package/esm2022/lib/pagination.component.mjs +19 -9
- package/esm2022/lib/progress.component.mjs +8 -5
- package/esm2022/lib/radio-group.component.mjs +51 -3
- package/esm2022/lib/radio-item.component.mjs +46 -8
- package/esm2022/lib/radio-service.mjs +60 -1
- package/esm2022/lib/range-calendar.component.mjs +317 -98
- package/esm2022/lib/resizable-panel.component.mjs +5 -4
- package/esm2022/lib/scroll-area.component.mjs +5 -5
- package/esm2022/lib/segment.component.mjs +73 -7
- package/esm2022/lib/select-item.component.mjs +20 -2
- package/esm2022/lib/select-separator.component.mjs +3 -3
- package/esm2022/lib/select.component.mjs +221 -14
- package/esm2022/lib/separator.component.mjs +12 -6
- package/esm2022/lib/sheet-ref.mjs +8 -1
- package/esm2022/lib/sheet-wrapper.component.mjs +27 -11
- package/esm2022/lib/sheet.component.mjs +57 -16
- package/esm2022/lib/sheet.service.mjs +5 -1
- package/esm2022/lib/sidebar.component.mjs +73 -15
- package/esm2022/lib/skeleton.component.mjs +19 -5
- package/esm2022/lib/switch.component.mjs +59 -53
- package/esm2022/lib/tabs.component.mjs +75 -13
- package/esm2022/lib/tag-input.component.mjs +6 -3
- package/esm2022/lib/textarea.component.mjs +9 -7
- package/esm2022/lib/theme.service.mjs +114 -138
- package/esm2022/lib/toaster.component.mjs +19 -9
- package/esm2022/lib/toggle-group.component.mjs +76 -4
- package/esm2022/lib/tolle-config.mjs +1 -1
- package/esm2022/lib/tooltip.directive.mjs +41 -17
- package/esm2022/lib/utils/color.mjs +324 -0
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/tolle-ui.mjs +2645 -637
- package/fesm2022/tolle-ui.mjs.map +1 -1
- package/lib/alert-dialog.component.d.ts +10 -1
- package/lib/avatar.component.d.ts +16 -3
- package/lib/badge.component.d.ts +17 -5
- package/lib/button.component.d.ts +10 -3
- package/lib/calendar.component.d.ts +21 -3
- package/lib/card.component.d.ts +6 -0
- package/lib/carousel/carousel.component.d.ts +1 -0
- package/lib/checkbox.component.d.ts +12 -4
- package/lib/country-selector.component.d.ts +11 -2
- package/lib/date-picker.component.d.ts +1 -0
- package/lib/date-range-picker.component.d.ts +4 -1
- package/lib/dropdown-item.component.d.ts +4 -2
- package/lib/dropdown-trigger.directive.d.ts +1 -1
- package/lib/modal.component.d.ts +6 -0
- package/lib/multi-select.component.d.ts +20 -0
- package/lib/otp.component.d.ts +1 -0
- package/lib/progress.component.d.ts +1 -0
- package/lib/radio-group.component.d.ts +8 -0
- package/lib/radio-item.component.d.ts +10 -4
- package/lib/radio-service.d.ts +29 -0
- package/lib/range-calendar.component.d.ts +33 -4
- package/lib/segment.component.d.ts +13 -0
- package/lib/select-item.component.d.ts +4 -1
- package/lib/select.component.d.ts +20 -0
- package/lib/separator.component.d.ts +2 -0
- package/lib/sheet-wrapper.component.d.ts +4 -0
- package/lib/sheet.component.d.ts +10 -1
- package/lib/sidebar.component.d.ts +2 -0
- package/lib/skeleton.component.d.ts +9 -3
- package/lib/switch.component.d.ts +13 -20
- package/lib/tabs.component.d.ts +11 -1
- package/lib/theme.service.d.ts +21 -6
- package/lib/toaster.component.d.ts +2 -2
- package/lib/toggle-group.component.d.ts +20 -2
- package/lib/toggle.component.d.ts +1 -1
- package/lib/tolle-config.d.ts +8 -0
- package/lib/tooltip.directive.d.ts +3 -0
- package/lib/utils/color.d.ts +87 -0
- package/package.json +4 -1
- package/preset.js +28 -0
- package/public-api.d.ts +1 -0
- package/registry/docs-content.json +4214 -0
- package/registry/llms-full.txt +1599 -0
- package/registry/llms.txt +83 -0
- package/registry/manifest.json +4925 -0
- package/registry/r/accordion-item.json +21 -0
- package/registry/r/accordion.json +23 -0
- package/registry/r/alert-dialog-dynamic.json +31 -0
- package/registry/r/alert-dialog.json +26 -0
- package/registry/r/alert.json +23 -0
- package/registry/r/aspect-ratio.json +21 -0
- package/registry/r/avatar-fallback.json +16 -0
- package/registry/r/avatar.json +23 -0
- package/registry/r/badge.json +23 -0
- package/registry/r/breadcrumb-item.json +16 -0
- package/registry/r/breadcrumb-link.json +16 -0
- package/registry/r/breadcrumb-separator.json +16 -0
- package/registry/r/breadcrumb.json +21 -0
- package/registry/r/button-group.json +21 -0
- package/registry/r/button.json +23 -0
- package/registry/r/calendar.json +23 -0
- package/registry/r/card.json +21 -0
- package/registry/r/carousel.json +18 -0
- package/registry/r/checkbox.json +23 -0
- package/registry/r/collapsible.json +21 -0
- package/registry/r/context-menu-trigger.json +23 -0
- package/registry/r/context-menu.json +28 -0
- package/registry/r/country-selector.json +31 -0
- package/registry/r/data-table.json +38 -0
- package/registry/r/date-picker.json +27 -0
- package/registry/r/date-range-picker.json +32 -0
- package/registry/r/dropdown-item.json +21 -0
- package/registry/r/dropdown-label.json +16 -0
- package/registry/r/dropdown-menu.json +16 -0
- package/registry/r/dropdown-separator.json +16 -0
- package/registry/r/dropdown-trigger.json +20 -0
- package/registry/r/empty-state.json +23 -0
- package/registry/r/hover-card.json +23 -0
- package/registry/r/input.json +21 -0
- package/registry/r/label.json +21 -0
- package/registry/r/masked-input.json +21 -0
- package/registry/r/modal.json +36 -0
- package/registry/r/multi-select.json +33 -0
- package/registry/r/otp-group.json +16 -0
- package/registry/r/otp-slot.json +21 -0
- package/registry/r/otp.json +21 -0
- package/registry/r/pagination.json +32 -0
- package/registry/r/phone-number-input.json +34 -0
- package/registry/r/popover-content.json +21 -0
- package/registry/r/popover.json +18 -0
- package/registry/r/progress.json +21 -0
- package/registry/r/radio-group.json +26 -0
- package/registry/r/radio-item.json +26 -0
- package/registry/r/range-calendar.json +28 -0
- package/registry/r/resizable-panel-item.json +23 -0
- package/registry/r/resizable-panel.json +23 -0
- package/registry/r/resizable.json +21 -0
- package/registry/r/scroll-area.json +21 -0
- package/registry/r/segment.json +21 -0
- package/registry/r/select-group.json +21 -0
- package/registry/r/select-item.json +26 -0
- package/registry/r/select-separator.json +21 -0
- package/registry/r/select.json +31 -0
- package/registry/r/separator.json +21 -0
- package/registry/r/sheet-wrapper.json +31 -0
- package/registry/r/sheet.json +21 -0
- package/registry/r/sidebar.json +21 -0
- package/registry/r/skeleton.json +23 -0
- package/registry/r/slider.json +21 -0
- package/registry/r/switch.json +23 -0
- package/registry/r/tabs.json +23 -0
- package/registry/r/tag-input.json +25 -0
- package/registry/r/textarea.json +21 -0
- package/registry/r/toaster.json +26 -0
- package/registry/r/toggle-group.json +25 -0
- package/registry/r/toggle.json +23 -0
- package/registry/r/tolle-cell.json +16 -0
- package/registry/r/tooltip.json +23 -0
- package/registry/registry.json +1540 -0
- package/theme.css +56 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter, forwardRef, ContentChildren, inject, ChangeDetectorRef } from '@angular/core';
|
|
1
|
+
import { Component, Input, Output, EventEmitter, forwardRef, ContentChildren, inject, ChangeDetectorRef, ElementRef } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
4
|
import { cn } from './utils/cn';
|
|
@@ -14,6 +14,9 @@ export class ToggleGroupComponent {
|
|
|
14
14
|
items;
|
|
15
15
|
_value;
|
|
16
16
|
cdr = inject(ChangeDetectorRef);
|
|
17
|
+
host = inject((ElementRef));
|
|
18
|
+
/** Index (into the full button list) of the current roving tab stop. */
|
|
19
|
+
activeIndex = 0;
|
|
17
20
|
onChange = () => { };
|
|
18
21
|
onTouched = () => { };
|
|
19
22
|
get value() { return this._value; }
|
|
@@ -30,11 +33,78 @@ export class ToggleGroupComponent {
|
|
|
30
33
|
this.items.changes.subscribe(() => {
|
|
31
34
|
this.updateItemsState();
|
|
32
35
|
this.cdr.markForCheck();
|
|
36
|
+
// Re-apply roving tabindex once the new toggle views have rendered.
|
|
37
|
+
Promise.resolve().then(() => this.applyRovingTabindex());
|
|
33
38
|
});
|
|
34
39
|
}
|
|
40
|
+
ngAfterViewInit() {
|
|
41
|
+
this.applyRovingTabindex();
|
|
42
|
+
}
|
|
35
43
|
get computedClass() {
|
|
36
44
|
return cn("inline-flex items-center justify-center -space-x-px rounded-md", this.class);
|
|
37
45
|
}
|
|
46
|
+
/** All toggle button elements in DOM order. */
|
|
47
|
+
get toggleButtons() {
|
|
48
|
+
return Array.from(this.host.nativeElement.querySelectorAll('tolle-toggle button'));
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Roving tabindex: exactly one toggle button is tab-reachable at a time.
|
|
52
|
+
* Defaults to the current active button, falling back to the first enabled.
|
|
53
|
+
*/
|
|
54
|
+
applyRovingTabindex() {
|
|
55
|
+
const btns = this.toggleButtons;
|
|
56
|
+
if (!btns.length)
|
|
57
|
+
return;
|
|
58
|
+
let active = this.activeIndex;
|
|
59
|
+
if (active < 0 || active >= btns.length || btns[active].disabled) {
|
|
60
|
+
active = btns.findIndex(b => !b.disabled);
|
|
61
|
+
if (active < 0)
|
|
62
|
+
active = 0;
|
|
63
|
+
}
|
|
64
|
+
this.activeIndex = active;
|
|
65
|
+
btns.forEach((b, i) => { b.tabIndex = i === active ? 0 : -1; });
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Toolbar keyboard nav: Arrow Left/Right (and Home/End) move focus between
|
|
69
|
+
* toggle buttons without activating them (toggles activate on Enter/Space/click).
|
|
70
|
+
*/
|
|
71
|
+
onKeydown(event) {
|
|
72
|
+
const key = event.key;
|
|
73
|
+
if (key !== 'ArrowRight' && key !== 'ArrowLeft' && key !== 'Home' && key !== 'End')
|
|
74
|
+
return;
|
|
75
|
+
const btns = this.toggleButtons;
|
|
76
|
+
const enabled = btns.map((b, i) => ({ b, i })).filter(x => !x.b.disabled);
|
|
77
|
+
if (!enabled.length)
|
|
78
|
+
return;
|
|
79
|
+
event.preventDefault();
|
|
80
|
+
const active = (typeof document !== 'undefined' ? document.activeElement : null);
|
|
81
|
+
const focusedIndex = active ? btns.indexOf(active) : -1;
|
|
82
|
+
let pos = enabled.findIndex(x => x.i === focusedIndex);
|
|
83
|
+
let targetPos;
|
|
84
|
+
if (key === 'Home') {
|
|
85
|
+
targetPos = 0;
|
|
86
|
+
}
|
|
87
|
+
else if (key === 'End') {
|
|
88
|
+
targetPos = enabled.length - 1;
|
|
89
|
+
}
|
|
90
|
+
else if (key === 'ArrowRight') {
|
|
91
|
+
targetPos = pos < 0 ? 0 : (pos + 1) % enabled.length;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
targetPos = pos < 0 ? enabled.length - 1 : (pos - 1 + enabled.length) % enabled.length;
|
|
95
|
+
}
|
|
96
|
+
// Focusing the button triggers focusin, which updates the roving tab stop.
|
|
97
|
+
enabled[targetPos].b.focus();
|
|
98
|
+
}
|
|
99
|
+
/** Keep the roving tab stop in sync when a button gains focus (tab/click). */
|
|
100
|
+
onFocusIn(event) {
|
|
101
|
+
const btns = this.toggleButtons;
|
|
102
|
+
const idx = btns.indexOf(event.target);
|
|
103
|
+
if (idx < 0)
|
|
104
|
+
return;
|
|
105
|
+
this.activeIndex = idx;
|
|
106
|
+
btns.forEach((b, i) => { b.tabIndex = i === idx ? 0 : -1; });
|
|
107
|
+
}
|
|
38
108
|
writeValue(value) {
|
|
39
109
|
this._value = value;
|
|
40
110
|
this.updateItemsState();
|
|
@@ -81,7 +151,7 @@ export class ToggleGroupComponent {
|
|
|
81
151
|
});
|
|
82
152
|
}
|
|
83
153
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToggleGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
84
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ToggleGroupComponent, isStandalone: true, selector: "tolle-toggle-group", inputs: { type: "type", variant: "variant", size: "size", class: "class", disabled: "disabled" }, outputs: { valueChange: "valueChange" }, host: { attributes: { "role": "group" }, properties: { "class": "computedClass" } }, providers: [
|
|
154
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ToggleGroupComponent, isStandalone: true, selector: "tolle-toggle-group", inputs: { type: "type", variant: "variant", size: "size", class: "class", disabled: "disabled" }, outputs: { valueChange: "valueChange" }, host: { attributes: { "role": "group" }, listeners: { "keydown": "onKeydown($event)", "focusin": "onFocusIn($event)" }, properties: { "class": "computedClass" } }, providers: [
|
|
85
155
|
{
|
|
86
156
|
provide: NG_VALUE_ACCESSOR,
|
|
87
157
|
useExisting: forwardRef(() => ToggleGroupComponent),
|
|
@@ -99,7 +169,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
99
169
|
}
|
|
100
170
|
], host: {
|
|
101
171
|
'[class]': 'computedClass',
|
|
102
|
-
'role': 'group'
|
|
172
|
+
'role': 'group',
|
|
173
|
+
'(keydown)': 'onKeydown($event)',
|
|
174
|
+
'(focusin)': 'onFocusIn($event)'
|
|
103
175
|
}, styles: [":host{display:inline-flex}:host ::ng-deep tolle-toggle-group-item:first-child tolle-toggle button{@apply rounded-r-none;}:host ::ng-deep tolle-toggle-group-item:not(:first-child):not(:last-child) tolle-toggle button{@apply rounded-none border-l-0;}:host ::ng-deep tolle-toggle-group-item:last-child:not(:first-child) tolle-toggle button{@apply rounded-l-none border-l-0;}:host ::ng-deep tolle-toggle-group-item tolle-toggle button:hover,:host ::ng-deep tolle-toggle-group-item tolle-toggle button:focus,:host ::ng-deep tolle-toggle-group-item tolle-toggle button[data-state=on]{@apply z-10 relative;}\n"] }]
|
|
104
176
|
}], propDecorators: { type: [{
|
|
105
177
|
type: Input
|
|
@@ -170,4 +242,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
170
242
|
}], disabled: [{
|
|
171
243
|
type: Input
|
|
172
244
|
}] } });
|
|
173
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvdG9nZ2xlLWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQStCLE1BQU0sRUFBRSxpQkFBaUIsRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUN6SyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQThDckQsTUFBTSxPQUFPLG9CQUFvQjtJQUNwQixJQUFJLEdBQTBCLFFBQVEsQ0FBQztJQUN2QyxPQUFPLEdBQTBCLFNBQVMsQ0FBQztJQUMzQyxJQUFJLEdBQTRCLFNBQVMsQ0FBQztJQUMxQyxLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ25CLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFFekIsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFFb0MsS0FBSyxDQUF1QztJQUV4SCxNQUFNLENBQU07SUFDWixHQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFeEMsUUFBUSxHQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixTQUFTLEdBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRTNCLElBQUksS0FBSyxLQUFLLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkMsSUFBSSxLQUFLLENBQUMsQ0FBTTtRQUNaLElBQUksQ0FBQyxLQUFL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LEtBQUs7c0JBQXhGLGVBQWU7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFOztBQTZGdEYsTUFBTSxPQUFPLHdCQUF3QjtJQUNOLEtBQUssQ0FBVTtJQUNqQyxLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ25CLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFFbkMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixPQUFPLEdBQTBCLFNBQVMsQ0FBQztJQUMzQyxJQUFJLEdBQTRCLFNBQVMsQ0FBQztJQUVsQyxLQUFLLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDdEMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRXZDLFFBQVE7UUFDSixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQzt3R0FkUSx3QkFBd0I7NEZBQXhCLHdCQUF3QixxSkFidkI7Ozs7Ozs7Ozs7O0tBV1QsMkRBWlMsWUFBWSwrQkFBRSxlQUFlOzs0RkFjOUIsd0JBQXdCO2tCQWpCcEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQztvQkFDeEMsUUFBUSxFQUFFOzs7Ozs7Ozs7OztLQVdUO2lCQUNKOzhCQUU4QixLQUFLO3NCQUEvQixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDaEIsS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgQ29udGVudENoaWxkcmVuLCBRdWVyeUxpc3QsIEFmdGVyQ29udGVudEluaXQsIGluamVjdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcbmltcG9ydCB7IFRvZ2dsZUNvbXBvbmVudCB9IGZyb20gJy4vdG9nZ2xlLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndG9sbGUtdG9nZ2xlLWdyb3VwJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICAgIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmAsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVG9nZ2xlR3JvdXBDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2NsYXNzXSc6ICdjb21wdXRlZENsYXNzJyxcbiAgICAgICAgJ3JvbGUnOiAnZ3JvdXAnXG4gICAgfSxcbiAgICBzdHlsZXM6IFtgXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgLyogMS4gRmlyc3QgSXRlbTogUmVtb3ZlIHJpZ2h0IHJvdW5kaW5nICovXG4gICAgICAgIDpob3N0IDo6bmctZGVlcCB0b2xsZS10b2dnbGUtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB0b2xsZS10b2dnbGUgYnV0dG9uIHtcbiAgICAgICAgICAgIEBhcHBseSByb3VuZGVkLXItbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIDIuIE1pZGRsZSBJdGVtczogUmVtb3ZlIGFsbCByb3VuZGluZyBhbmQgbGVmdCBib3JkZXIgKi9cbiAgICAgICAgOmhvc3QgOjpuZy1kZWVwIHRvbGxlLXRvZ2dsZS1ncm91cC1pdGVtOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkgdG9sbGUtdG9nZ2xlIGJ1dHRvbiB7XG4gICAgICAgICAgICBAYXBwbHkgcm91bmRlZC1ub25lIGJvcmRlci1sLTA7XG4gICAgICAgIH1cblxuICAgICAgICAvKiAzLiBMYXN0IEl0ZW06IFJlbW92ZSBsZWZ0IHJvdW5kaW5nIGFuZCBsZWZ0IGJvcmRlciAqL1xuICAgICAgICA6aG9zdCA6Om5nLWRlZXAgdG9sbGUtdG9nZ2xlLWdyb3VwLWl0ZW06bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSB0b2xsZS10b2dnbGUgYnV0dG9uIHtcbiAgICAgICAgICAgIEBhcHBseSByb3VuZGVkLWwtbm9uZSBib3JkZXItbC0wO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogNC4gSG92ZXIvRm9jdXMgU3RhdGU6IEhpZ2hlciB6LWluZGV4IHRvIHNob3cgYm9yZGVycy9yaW5ncyBjb3JyZWN0bHkgKi9cbiAgICAgICAgOmhvc3QgOjpuZy1kZWVwIHRvbGxlLXRvZ2dsZS1ncm91cC1pdGVtIHRvbGxlLXRvZ2dsZSBidXR0b246aG92ZXIsXG4gICAgICAgIDpob3N0IDo6bmctZGVlcCB0b2xsZS10b2dnbGUtZ3JvdXAtaXRlbSB0b2xsZS10b2dnbGUgYnV0dG9uOmZvY3VzLFxuICAgICAgICA6aG9zdCA6Om5nLWRlZXAgdG9sbGUtdG9nZ2xlLWdyb3VwLWl0ZW0gdG9sbGUtdG9nZ2xlIGJ1dHRvbltkYXRhLXN0YXRlPW9uXSB7XG4gICAgICAgICAgICBAYXBwbHkgei0xMCByZWxhdGl2ZTtcbiAgICAgICAgfVxuICAgIGBdXG59KVxuZXhwb3J0IGNsYXNzIFRvZ2dsZUdyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIEBJbnB1dCgpIHR5cGU6ICdzaW5nbGUnIHwgJ211bHRpcGxlJyA9ICdzaW5nbGUnO1xuICAgIEBJbnB1dCgpIHZhcmlhbnQ6ICdkZWZhdWx0JyB8ICdvdXRsaW5lJyA9ICdkZWZhdWx0JztcbiAgICBASW5wdXQoKSBzaXplOiAnZGVmYXVsdCcgfCAnc20nIHwgJ2xnJyA9ICdkZWZhdWx0JztcbiAgICBASW5wdXQoKSBjbGFzczogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IFRvZ2dsZUdyb3VwSXRlbUNvbXBvbmVudCksIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgaXRlbXMhOiBRdWVyeUxpc3Q8VG9nZ2xlR3JvdXBJdGVtQ29tcG9uZW50PjtcblxuICAgIHByaXZhdGUgX3ZhbHVlOiBhbnk7XG4gICAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gICAgb25DaGFuZ2U6IGFueSA9ICgpID0+IHsgfTtcbiAgICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHsgfTtcblxuICAgIGdldCB2YWx1ZSgpIHsgcmV0dXJuIHRoaXMuX3ZhbHVlOyB9XG4gICAgc2V0IHZhbHVlKHY6IGFueSkge1xuICAgICAgICBpZiAodiAhPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSXRlbXNTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh2KTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVJdGVtc1N0YXRlKCk7XG4gICAgICAgIHRoaXMuaXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtc1N0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGNvbXB1dGVkQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiBjbihcImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciAtc3BhY2UteC1weCByb3VuZGVkLW1kXCIsIHRoaXMuY2xhc3MpO1xuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1zU3RhdGUoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7IHRoaXMub25DaGFuZ2UgPSBmbjsgfVxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vblRvdWNoZWQgPSBmbjsgfVxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgdGhpcy51cGRhdGVJdGVtc1N0YXRlKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlSXRlbShpdGVtVmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSA9PT0gaXRlbVZhbHVlID8gbnVsbCA6IGl0ZW1WYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpID8gWy4uLnRoaXMudmFsdWVdIDogW107XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGN1cnJlbnQuaW5kZXhPZihpdGVtVmFsdWUpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1cnJlbnQucHVzaChpdGVtVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGN1cnJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUl0ZW1zU3RhdGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5pdGVtcykgcmV0dXJuO1xuICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgICAgIGl0ZW0ucHJlc3NlZCA9IHRoaXMudmFsdWUgPT09IGl0ZW0udmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW0ucHJlc3NlZCA9IEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5pbmNsdWRlcyhpdGVtLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW0udmFyaWFudCA9IHRoaXMudmFyaWFudDtcbiAgICAgICAgICAgIGl0ZW0uc2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICAgICAgICAgIGl0ZW0uZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkIHx8IGl0ZW0uZGlzYWJsZWQ7XG4gICAgICAgICAgICBpdGVtLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RvbGxlLXRvZ2dsZS1ncm91cC1pdGVtJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRvZ2dsZUNvbXBvbmVudF0sXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPHRvbGxlLXRvZ2dsZVxuICAgICAgICAgICAgW3ByZXNzZWRdPVwicHJlc3NlZFwiXG4gICAgICAgICAgICBbdmFyaWFudF09XCJ2YXJpYW50XCJcbiAgICAgICAgICAgIFtzaXplXT1cInNpemVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIChwcmVzc2VkQ2hhbmdlKT1cIm9uVG9nZ2xlKClcIlxuICAgICAgICAgICAgW2NsYXNzXT1cImNsYXNzXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L3RvbGxlLXRvZ2dsZT5cbiAgICBgXG59KVxuZXhwb3J0IGNsYXNzIFRvZ2dsZUdyb3VwSXRlbUNvbXBvbmVudCB7XG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgdmFsdWUhOiBzdHJpbmc7XG4gICAgQElucHV0KCkgY2xhc3M6IHN0cmluZyA9ICcnO1xuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwcmVzc2VkID0gZmFsc2U7XG4gICAgdmFyaWFudDogJ2RlZmF1bHQnIHwgJ291dGxpbmUnID0gJ2RlZmF1bHQnO1xuICAgIHNpemU6ICdkZWZhdWx0JyB8ICdzbScgfCAnbGcnID0gJ2RlZmF1bHQnO1xuXG4gICAgcHJpdmF0ZSBncm91cCA9IGluamVjdChUb2dnbGVHcm91cENvbXBvbmVudCk7XG4gICAgcHVibGljIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgICBvblRvZ2dsZSgpIHtcbiAgICAgICAgdGhpcy5ncm91cC50b2dnbGVJdGVtKHRoaXMudmFsdWUpO1xuICAgIH1cbn1cbiJdfQ==
|
|
245
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvdG9nZ2xlLWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQThDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDcE0sT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFnRHJELE1BQU0sT0FBTyxvQkFBb0I7SUFDcEIsSUFBSSxHQUEwQixRQUFRLENBQUM7SUFDdkMsT0FBTyxHQUEwQixTQUFTLENBQUM7SUFDM0MsSUFBSSxHQUE0QixTQUFTLENBQUM7SUFDMUMsS0FBSyxHQUFXLEVBQUUsQ0FBQztJQUNuQixRQUFRLEdBQVksS0FBSyxDQUFDO0lBRXpCLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBRW9DLEtBQUssQ0FBdUM7SUFFeEgsTUFBTSxDQUFNO0lBQ1osR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2hDLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQSxVQUF1QixDQUFBLENBQUMsQ0FBQztJQUUvQyx3RUFBd0U7SUFDaEUsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUV4QixRQUFRLEdBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLFNBQVMsR0FBUSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7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ImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBDb250ZW50Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgaW5qZWN0LCBDaGFuZ2VEZXRlY3RvclJlZiwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuaW1wb3J0IHsgVG9nZ2xlQ29tcG9uZW50IH0gZnJvbSAnLi90b2dnbGUuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0b2xsZS10b2dnbGUtZ3JvdXAnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gICAgdGVtcGxhdGU6IGA8bmctY29udGVudD48L25nLWNvbnRlbnQ+YCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUb2dnbGVHcm91cENvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbY2xhc3NdJzogJ2NvbXB1dGVkQ2xhc3MnLFxuICAgICAgICAncm9sZSc6ICdncm91cCcsXG4gICAgICAgICcoa2V5ZG93biknOiAnb25LZXlkb3duKCRldmVudCknLFxuICAgICAgICAnKGZvY3VzaW4pJzogJ29uRm9jdXNJbigkZXZlbnQpJ1xuICAgIH0sXG4gICAgc3R5bGVzOiBbYFxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIDEuIEZpcnN0IEl0ZW06IFJlbW92ZSByaWdodCByb3VuZGluZyAqL1xuICAgICAgICA6aG9zdCA6Om5nLWRlZXAgdG9sbGUtdG9nZ2xlLWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQgdG9sbGUtdG9nZ2xlIGJ1dHRvbiB7XG4gICAgICAgICAgICBAYXBwbHkgcm91bmRlZC1yLW5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICAvKiAyLiBNaWRkbGUgSXRlbXM6IFJlbW92ZSBhbGwgcm91bmRpbmcgYW5kIGxlZnQgYm9yZGVyICovXG4gICAgICAgIDpob3N0IDo6bmctZGVlcCB0b2xsZS10b2dnbGUtZ3JvdXAtaXRlbTpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpIHRvbGxlLXRvZ2dsZSBidXR0b24ge1xuICAgICAgICAgICAgQGFwcGx5IHJvdW5kZWQtbm9uZSBib3JkZXItbC0wO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogMy4gTGFzdCBJdGVtOiBSZW1vdmUgbGVmdCByb3VuZGluZyBhbmQgbGVmdCBib3JkZXIgKi9cbiAgICAgICAgOmhvc3QgOjpuZy1kZWVwIHRvbGxlLXRvZ2dsZS1ncm91cC1pdGVtOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkgdG9sbGUtdG9nZ2xlIGJ1dHRvbiB7XG4gICAgICAgICAgICBAYXBwbHkgcm91bmRlZC1sLW5vbmUgYm9yZGVyLWwtMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIDQuIEhvdmVyL0ZvY3VzIFN0YXRlOiBIaWdoZXIgei1pbmRleCB0byBzaG93IGJvcmRlcnMvcmluZ3MgY29ycmVjdGx5ICovXG4gICAgICAgIDpob3N0IDo6bmctZGVlcCB0b2xsZS10b2dnbGUtZ3JvdXAtaXRlbSB0b2xsZS10b2dnbGUgYnV0dG9uOmhvdmVyLFxuICAgICAgICA6aG9zdCA6Om5nLWRlZXAgdG9sbGUtdG9nZ2xlLWdyb3VwLWl0ZW0gdG9sbGUtdG9nZ2xlIGJ1dHRvbjpmb2N1cyxcbiAgICAgICAgOmhvc3QgOjpuZy1kZWVwIHRvbGxlLXRvZ2dsZS1ncm91cC1pdGVtIHRvbGxlLXRvZ2dsZSBidXR0b25bZGF0YS1zdGF0ZT1vbl0ge1xuICAgICAgICAgICAgQGFwcGx5IHotMTAgcmVsYXRpdmU7XG4gICAgICAgIH1cbiAgICBgXVxufSlcbmV4cG9ydCBjbGFzcyBUb2dnbGVHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBASW5wdXQoKSB0eXBlOiAnc2luZ2xlJyB8ICdtdWx0aXBsZScgPSAnc2luZ2xlJztcbiAgICBASW5wdXQoKSB2YXJpYW50OiAnZGVmYXVsdCcgfCAnb3V0bGluZScgPSAnZGVmYXVsdCc7XG4gICAgQElucHV0KCkgc2l6ZTogJ2RlZmF1bHQnIHwgJ3NtJyB8ICdsZycgPSAnZGVmYXVsdCc7XG4gICAgQElucHV0KCkgY2xhc3M6IHN0cmluZyA9ICcnO1xuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBUb2dnbGVHcm91cEl0ZW1Db21wb25lbnQpLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGl0ZW1zITogUXVlcnlMaXN0PFRvZ2dsZUdyb3VwSXRlbUNvbXBvbmVudD47XG5cbiAgICBwcml2YXRlIF92YWx1ZTogYW55O1xuICAgIHByaXZhdGUgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICBwcml2YXRlIGhvc3QgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pO1xuXG4gICAgLyoqIEluZGV4IChpbnRvIHRoZSBmdWxsIGJ1dHRvbiBsaXN0KSBvZiB0aGUgY3VycmVudCByb3ZpbmcgdGFiIHN0b3AuICovXG4gICAgcHJpdmF0ZSBhY3RpdmVJbmRleCA9IDA7XG5cbiAgICBvbkNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xuICAgIG9uVG91Y2hlZDogYW55ID0gKCkgPT4geyB9O1xuXG4gICAgZ2V0IHZhbHVlKCkgeyByZXR1cm4gdGhpcy5fdmFsdWU7IH1cbiAgICBzZXQgdmFsdWUodjogYW55KSB7XG4gICAgICAgIGlmICh2ICE9PSB0aGlzLl92YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtc1N0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHYpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1zU3RhdGUoKTtcbiAgICAgICAgdGhpcy5pdGVtcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1zU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgLy8gUmUtYXBwbHkgcm92aW5nIHRhYmluZGV4IG9uY2UgdGhlIG5ldyB0b2dnbGUgdmlld3MgaGF2ZSByZW5kZXJlZC5cbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5hcHBseVJvdmluZ1RhYmluZGV4KCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuYXBwbHlSb3ZpbmdUYWJpbmRleCgpO1xuICAgIH1cblxuICAgIGdldCBjb21wdXRlZENsYXNzKCkge1xuICAgICAgICByZXR1cm4gY24oXCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgLXNwYWNlLXgtcHggcm91bmRlZC1tZFwiLCB0aGlzLmNsYXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsIHRvZ2dsZSBidXR0b24gZWxlbWVudHMgaW4gRE9NIG9yZGVyLiAqL1xuICAgIHByaXZhdGUgZ2V0IHRvZ2dsZUJ1dHRvbnMoKTogSFRNTEJ1dHRvbkVsZW1lbnRbXSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgICAgICAgdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgndG9sbGUtdG9nZ2xlIGJ1dHRvbicpXG4gICAgICAgICkgYXMgSFRNTEJ1dHRvbkVsZW1lbnRbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSb3ZpbmcgdGFiaW5kZXg6IGV4YWN0bHkgb25lIHRvZ2dsZSBidXR0b24gaXMgdGFiLXJlYWNoYWJsZSBhdCBhIHRpbWUuXG4gICAgICogRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIGJ1dHRvbiwgZmFsbGluZyBiYWNrIHRvIHRoZSBmaXJzdCBlbmFibGVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgYXBwbHlSb3ZpbmdUYWJpbmRleCgpIHtcbiAgICAgICAgY29uc3QgYnRucyA9IHRoaXMudG9nZ2xlQnV0dG9ucztcbiAgICAgICAgaWYgKCFidG5zLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgIGxldCBhY3RpdmUgPSB0aGlzLmFjdGl2ZUluZGV4O1xuICAgICAgICBpZiAoYWN0aXZlIDwgMCB8fCBhY3RpdmUgPj0gYnRucy5sZW5ndGggfHwgYnRuc1thY3RpdmVdLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBhY3RpdmUgPSBidG5zLmZpbmRJbmRleChiID0+ICFiLmRpc2FibGVkKTtcbiAgICAgICAgICAgIGlmIChhY3RpdmUgPCAwKSBhY3RpdmUgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBhY3RpdmU7XG4gICAgICAgIGJ0bnMuZm9yRWFjaCgoYiwgaSkgPT4geyBiLnRhYkluZGV4ID0gaSA9PT0gYWN0aXZlID8gMCA6IC0xOyB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb29sYmFyIGtleWJvYXJkIG5hdjogQXJyb3cgTGVmdC9SaWdodCAoYW5kIEhvbWUvRW5kKSBtb3ZlIGZvY3VzIGJldHdlZW5cbiAgICAgKiB0b2dnbGUgYnV0dG9ucyB3aXRob3V0IGFjdGl2YXRpbmcgdGhlbSAodG9nZ2xlcyBhY3RpdmF0ZSBvbiBFbnRlci9TcGFjZS9jbGljaykuXG4gICAgICovXG4gICAgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTtcbiAgICAgICAgaWYgKGtleSAhPT0gJ0Fycm93UmlnaHQnICYmIGtleSAhPT0gJ0Fycm93TGVmdCcgJiYga2V5ICE9PSAnSG9tZScgJiYga2V5ICE9PSAnRW5kJykgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGJ0bnMgPSB0aGlzLnRvZ2dsZUJ1dHRvbnM7XG4gICAgICAgIGNvbnN0IGVuYWJsZWQgPSBidG5zLm1hcCgoYiwgaSkgPT4gKHsgYiwgaSB9KSkuZmlsdGVyKHggPT4gIXguYi5kaXNhYmxlZCk7XG4gICAgICAgIGlmICghZW5hYmxlZC5sZW5ndGgpIHJldHVybjtcblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9ICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnID8gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA6IG51bGwpIGFzIEhUTUxCdXR0b25FbGVtZW50IHwgbnVsbDtcbiAgICAgICAgY29uc3QgZm9jdXNlZEluZGV4ID0gYWN0aXZlID8gYnRucy5pbmRleE9mKGFjdGl2ZSkgOiAtMTtcbiAgICAgICAgbGV0IHBvcyA9IGVuYWJsZWQuZmluZEluZGV4KHggPT4geC5pID09PSBmb2N1c2VkSW5kZXgpO1xuXG4gICAgICAgIGxldCB0YXJnZXRQb3M6IG51bWJlcjtcbiAgICAgICAgaWYgKGtleSA9PT0gJ0hvbWUnKSB7XG4gICAgICAgICAgICB0YXJnZXRQb3MgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ0VuZCcpIHtcbiAgICAgICAgICAgIHRhcmdldFBvcyA9IGVuYWJsZWQubGVuZ3RoIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgICAgdGFyZ2V0UG9zID0gcG9zIDwgMCA/IDAgOiAocG9zICsgMSkgJSBlbmFibGVkLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldFBvcyA9IHBvcyA8IDAgPyBlbmFibGVkLmxlbmd0aCAtIDEgOiAocG9zIC0gMSArIGVuYWJsZWQubGVuZ3RoKSAlIGVuYWJsZWQubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9jdXNpbmcgdGhlIGJ1dHRvbiB0cmlnZ2VycyBmb2N1c2luLCB3aGljaCB1cGRhdGVzIHRoZSByb3ZpbmcgdGFiIHN0b3AuXG4gICAgICAgIGVuYWJsZWRbdGFyZ2V0UG9zXS5iLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEtlZXAgdGhlIHJvdmluZyB0YWIgc3RvcCBpbiBzeW5jIHdoZW4gYSBidXR0b24gZ2FpbnMgZm9jdXMgKHRhYi9jbGljaykuICovXG4gICAgb25Gb2N1c0luKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgICAgIGNvbnN0IGJ0bnMgPSB0aGlzLnRvZ2dsZUJ1dHRvbnM7XG4gICAgICAgIGNvbnN0IGlkeCA9IGJ0bnMuaW5kZXhPZihldmVudC50YXJnZXQgYXMgSFRNTEJ1dHRvbkVsZW1lbnQpO1xuICAgICAgICBpZiAoaWR4IDwgMCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gaWR4O1xuICAgICAgICBidG5zLmZvckVhY2goKGIsIGkpID0+IHsgYi50YWJJbmRleCA9IGkgPT09IGlkeCA/IDAgOiAtMTsgfSk7XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlSXRlbXNTdGF0ZSgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vbkNoYW5nZSA9IGZuOyB9XG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQgeyB0aGlzLm9uVG91Y2hlZCA9IGZuOyB9XG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1zU3RhdGUoKTtcbiAgICB9XG5cbiAgICB0b2dnbGVJdGVtKGl0ZW1WYWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlID09PSBpdGVtVmFsdWUgPyBudWxsIDogaXRlbVZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyBbLi4udGhpcy52YWx1ZV0gOiBbXTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY3VycmVudC5pbmRleE9mKGl0ZW1WYWx1ZSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3VycmVudC5wdXNoKGl0ZW1WYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY3VycmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlSXRlbXNTdGF0ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLml0ZW1zKSByZXR1cm47XG4gICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5wcmVzc2VkID0gdGhpcy52YWx1ZSA9PT0gaXRlbS52YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbS5wcmVzc2VkID0gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSAmJiB0aGlzLnZhbHVlLmluY2x1ZGVzKGl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbS52YXJpYW50ID0gdGhpcy52YXJpYW50O1xuICAgICAgICAgICAgaXRlbS5zaXplID0gdGhpcy5zaXplO1xuICAgICAgICAgICAgaXRlbS5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQgfHwgaXRlbS5kaXNhYmxlZDtcbiAgICAgICAgICAgIGl0ZW0uY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndG9sbGUtdG9nZ2xlLWdyb3VwLWl0ZW0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgVG9nZ2xlQ29tcG9uZW50XSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8dG9sbGUtdG9nZ2xlXG4gICAgICAgICAgICBbcHJlc3NlZF09XCJwcmVzc2VkXCJcbiAgICAgICAgICAgIFt2YXJpYW50XT1cInZhcmlhbnRcIlxuICAgICAgICAgICAgW3NpemVdPVwic2l6ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgKHByZXNzZWRDaGFuZ2UpPVwib25Ub2dnbGUoKVwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiY2xhc3NcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvdG9sbGUtdG9nZ2xlPlxuICAgIGBcbn0pXG5leHBvcnQgY2xhc3MgVG9nZ2xlR3JvdXBJdGVtQ29tcG9uZW50IHtcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSB2YWx1ZSE6IHN0cmluZztcbiAgICBASW5wdXQoKSBjbGFzczogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHByZXNzZWQgPSBmYWxzZTtcbiAgICB2YXJpYW50OiAnZGVmYXVsdCcgfCAnb3V0bGluZScgPSAnZGVmYXVsdCc7XG4gICAgc2l6ZTogJ2RlZmF1bHQnIHwgJ3NtJyB8ICdsZycgPSAnZGVmYXVsdCc7XG5cbiAgICBwcml2YXRlIGdyb3VwID0gaW5qZWN0KFRvZ2dsZUdyb3VwQ29tcG9uZW50KTtcbiAgICBwdWJsaWMgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAgIG9uVG9nZ2xlKCkge1xuICAgICAgICB0aGlzLmdyb3VwLnRvZ2dsZUl0ZW0odGhpcy52YWx1ZSk7XG4gICAgfVxufVxuIl19
|
|
@@ -15,4 +15,4 @@ export function provideTolleConfig(config) {
|
|
|
15
15
|
},
|
|
16
16
|
];
|
|
17
17
|
}
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9sbGUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi90b2xsZS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBaUIvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQWMsYUFBYSxDQUFDLENBQUM7QUFFM0UsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQW1CO0lBQ3BELE9BQU87UUFDTCxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTtRQUMzQztZQUNFLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLFVBQVUsRUFBRSxDQUFDLENBQWUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFO2dCQUNwQyw4Q0FBOEM7Z0JBQzlDLHFFQUFxRTtZQUN2RSxDQUFDO1lBQ0QsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDO1lBQ3BCLEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgSW5qZWN0aW9uVG9rZW4sIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICcuL3RoZW1lLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRvbGxlQ29uZmlnIHtcbiAgcHJpbWFyeUNvbG9yPzogc3RyaW5nO1xuICByYWRpdXM/OiBzdHJpbmc7XG4gIGRlZmF1bHRUb2FzdER1cmF0aW9uPzogbnVtYmVyO1xuICBkYXJrQnlEZWZhdWx0PzogYm9vbGVhbjtcbiAgLyoqIE5ldXRyYWwgYmFzZS1jb2xvciBmYW1pbHk6IGB6aW5jYCB8IGBzbGF0ZWAgfCBgZ3JheWAgfCBgbmV1dHJhbGAgfCBgc3RvbmVgLiAqL1xuICBiYXNlQ29sb3I/OiBzdHJpbmc7XG4gIC8qKiBDaGFydCBiYXNlIGNvbG9yIChoZXgpOyBkZXJpdmVzIGAtLWNoYXJ0LTHigKY1YC4gKi9cbiAgY2hhcnRDb2xvcj86IHN0cmluZztcbiAgLyoqIFR5cG9ncmFwaHkgc3RhY2tzIGFwcGxpZWQgdG8gYC0tZm9udC1zYW5zYCAvIGAtLWZvbnQtc2VyaWZgIC8gYC0tZm9udC1tb25vYC4gKi9cbiAgZm9udFNhbnM/OiBzdHJpbmc7XG4gIGZvbnRTZXJpZj86IHN0cmluZztcbiAgZm9udE1vbm8/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBUT0xMRV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48VG9sbGVDb25maWc+KCdUb2xsZUNvbmZpZycpO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVRvbGxlQ29uZmlnKGNvbmZpZzogVG9sbGVDb25maWcpOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFtcbiAgICB7IHByb3ZpZGU6IFRPTExFX0NPTkZJRywgdXNlVmFsdWU6IGNvbmZpZyB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICAgIHVzZUZhY3Rvcnk6IChfOiBUaGVtZVNlcnZpY2UpID0+ICgpID0+IHtcbiAgICAgICAgLy8gVGhlbWUgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBpbiBjb25zdHJ1Y3RvclxuICAgICAgICAvLyBUaGlzIGZhY3RvcnkgZW5zdXJlcyB0aGVtZVNlcnZpY2UgaXMgaW5zdGFudGlhdGVkIGR1cmluZyBib290c3RyYXBcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbVGhlbWVTZXJ2aWNlXSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF07XG59XG4iXX0=
|
|
@@ -2,37 +2,57 @@ import { Directive, HostListener, Input } from '@angular/core';
|
|
|
2
2
|
import { computePosition, flip, shift, offset, autoUpdate } from '@floating-ui/dom';
|
|
3
3
|
import { cn } from './utils/cn';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
|
+
let tooltipIdCounter = 0;
|
|
5
6
|
export class TooltipDirective {
|
|
6
7
|
el;
|
|
7
8
|
content = '';
|
|
8
9
|
placement = 'top';
|
|
9
10
|
tooltipEl = null;
|
|
10
11
|
cleanup;
|
|
12
|
+
showTimeout;
|
|
13
|
+
tooltipId = `tolle-tooltip-${tooltipIdCounter++}`;
|
|
11
14
|
constructor(el) {
|
|
12
15
|
this.el = el;
|
|
13
16
|
}
|
|
14
17
|
show() {
|
|
15
18
|
if (!this.content)
|
|
16
19
|
return;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
this.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
20
|
+
if (this.showTimeout || this.tooltipEl)
|
|
21
|
+
return;
|
|
22
|
+
// Delay showing the tooltip (~600ms) to avoid flicker on quick pointer passes.
|
|
23
|
+
this.showTimeout = setTimeout(() => {
|
|
24
|
+
this.showTimeout = undefined;
|
|
25
|
+
// 1. Create Tooltip Element
|
|
26
|
+
this.tooltipEl = document.createElement('div');
|
|
27
|
+
this.tooltipEl.setAttribute('role', 'tooltip');
|
|
28
|
+
this.tooltipEl.id = this.tooltipId;
|
|
29
|
+
this.tooltipEl.className = cn('absolute z-[100] px-2 py-1 text-xs font-medium bg-popover text-popover-foreground border border-border rounded-md shadow-md pointer-events-none');
|
|
30
|
+
this.tooltipEl.innerText = this.content;
|
|
31
|
+
document.body.appendChild(this.tooltipEl);
|
|
32
|
+
// Associate the tooltip with its host for assistive technology.
|
|
33
|
+
this.el.nativeElement.setAttribute('aria-describedby', this.tooltipId);
|
|
34
|
+
// 2. Position it using Floating UI
|
|
35
|
+
this.cleanup = autoUpdate(this.el.nativeElement, this.tooltipEl, () => {
|
|
36
|
+
computePosition(this.el.nativeElement, this.tooltipEl, {
|
|
37
|
+
placement: this.placement,
|
|
38
|
+
middleware: [offset(8), flip(), shift({ padding: 5 })],
|
|
39
|
+
}).then(({ x, y }) => {
|
|
40
|
+
Object.assign(this.tooltipEl.style, {
|
|
41
|
+
left: `${x}px`,
|
|
42
|
+
top: `${y}px`,
|
|
43
|
+
});
|
|
31
44
|
});
|
|
32
45
|
});
|
|
33
|
-
});
|
|
46
|
+
}, 600);
|
|
47
|
+
}
|
|
48
|
+
onFocus() {
|
|
49
|
+
this.show();
|
|
34
50
|
}
|
|
35
51
|
hide() {
|
|
52
|
+
if (this.showTimeout) {
|
|
53
|
+
clearTimeout(this.showTimeout);
|
|
54
|
+
this.showTimeout = undefined;
|
|
55
|
+
}
|
|
36
56
|
if (this.tooltipEl) {
|
|
37
57
|
this.tooltipEl.remove();
|
|
38
58
|
this.tooltipEl = null;
|
|
@@ -40,12 +60,13 @@ export class TooltipDirective {
|
|
|
40
60
|
if (this.cleanup) {
|
|
41
61
|
this.cleanup();
|
|
42
62
|
}
|
|
63
|
+
this.el.nativeElement.removeAttribute('aria-describedby');
|
|
43
64
|
}
|
|
44
65
|
ngOnDestroy() {
|
|
45
66
|
this.hide();
|
|
46
67
|
}
|
|
47
68
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TooltipDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
48
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: TooltipDirective, isStandalone: true, selector: "[tolleTooltip]", inputs: { content: ["tolleTooltip", "content"], placement: "placement" }, host: { listeners: { "mouseenter": "show()", "mouseleave": "hide()", "focusout": "hide()" } }, ngImport: i0 });
|
|
69
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: TooltipDirective, isStandalone: true, selector: "[tolleTooltip]", inputs: { content: ["tolleTooltip", "content"], placement: "placement" }, host: { listeners: { "mouseenter": "show()", "focusin": "onFocus()", "mouseleave": "hide()", "focusout": "hide()" } }, ngImport: i0 });
|
|
49
70
|
}
|
|
50
71
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TooltipDirective, decorators: [{
|
|
51
72
|
type: Directive,
|
|
@@ -61,6 +82,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
61
82
|
}], show: [{
|
|
62
83
|
type: HostListener,
|
|
63
84
|
args: ['mouseenter']
|
|
85
|
+
}], onFocus: [{
|
|
86
|
+
type: HostListener,
|
|
87
|
+
args: ['focusin']
|
|
64
88
|
}], hide: [{
|
|
65
89
|
type: HostListener,
|
|
66
90
|
args: ['mouseleave']
|
|
@@ -68,4 +92,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
68
92
|
type: HostListener,
|
|
69
93
|
args: ['focusout']
|
|
70
94
|
}] } });
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL3Rvb2x0aXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFFM0MsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBUyxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDOztBQUVoQyxJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQztBQU16QixNQUFNLE9BQU8sZ0JBQWdCO0lBU1A7SUFSRyxPQUFPLEdBQVcsRUFBRSxDQUFDO0lBQ25DLFNBQVMsR0FBd0MsS0FBSyxDQUFDO0lBRXhELFNBQVMsR0FBMEIsSUFBSSxDQUFDO0lBQ3hDLE9BQU8sQ0FBYztJQUNyQixXQUFXLENBQU87SUFDVCxTQUFTLEdBQUcsaUJBQWlCLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztJQUVuRSxZQUFvQixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtJQUFHLENBQUM7SUFHdEMsSUFBSTtRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDMUIsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUUvQywrRUFBK0U7UUFDL0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO1lBRTdCLDRCQUE0QjtZQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLFNB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cG9ydCB7XG4gIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCxcbiAgT25EZXN0cm95LCBDb21wb25lbnRSZWYsIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjb21wdXRlUG9zaXRpb24sIGZsaXAsIHNoaWZ0LCBvZmZzZXQsIGFycm93LCBhdXRvVXBkYXRlIH0gZnJvbSAnQGZsb2F0aW5nLXVpL2RvbSc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuXG5sZXQgdG9vbHRpcElkQ291bnRlciA9IDA7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0b2xsZVRvb2x0aXBdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBUb29sdGlwRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQElucHV0KCd0b2xsZVRvb2x0aXAnKSBjb250ZW50OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgcGxhY2VtZW50OiAndG9wJyB8ICdib3R0b20nIHwgJ2xlZnQnIHwgJ3JpZ2h0JyA9ICd0b3AnO1xuXG4gIHByaXZhdGUgdG9vbHRpcEVsOiBIVE1MRGl2RWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNsZWFudXA/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIHNob3dUaW1lb3V0PzogYW55O1xuICBwcml2YXRlIHJlYWRvbmx5IHRvb2x0aXBJZCA9IGB0b2xsZS10b29sdGlwLSR7dG9vbHRpcElkQ291bnRlcisrfWA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZikge31cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJylcbiAgc2hvdygpIHtcbiAgICBpZiAoIXRoaXMuY29udGVudCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnNob3dUaW1lb3V0IHx8IHRoaXMudG9vbHRpcEVsKSByZXR1cm47XG5cbiAgICAvLyBEZWxheSBzaG93aW5nIHRoZSB0b29sdGlwICh+NjAwbXMpIHRvIGF2b2lkIGZsaWNrZXIgb24gcXVpY2sgcG9pbnRlciBwYXNzZXMuXG4gICAgdGhpcy5zaG93VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zaG93VGltZW91dCA9IHVuZGVmaW5lZDtcblxuICAgICAgLy8gMS4gQ3JlYXRlIFRvb2x0aXAgRWxlbWVudFxuICAgICAgdGhpcy50b29sdGlwRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRoaXMudG9vbHRpcEVsLnNldEF0dHJpYnV0ZSgncm9sZScsICd0b29sdGlwJyk7XG4gICAgICB0aGlzLnRvb2x0aXBFbC5pZCA9IHRoaXMudG9vbHRpcElkO1xuICAgICAgdGhpcy50b29sdGlwRWwuY2xhc3NOYW1lID0gY24oXG4gICAgICAgICdhYnNvbHV0ZSB6LVsxMDBdIHB4LTIgcHktMSB0ZXh0LXhzIGZvbnQtbWVkaXVtIGJnLXBvcG92ZXIgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgYm9yZGVyIGJvcmRlci1ib3JkZXIgcm91bmRlZC1tZCBzaGFkb3ctbWQgcG9pbnRlci1ldmVudHMtbm9uZSdcbiAgICAgICk7XG4gICAgICB0aGlzLnRvb2x0aXBFbC5pbm5lclRleHQgPSB0aGlzLmNvbnRlbnQ7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMudG9vbHRpcEVsKTtcblxuICAgICAgLy8gQXNzb2NpYXRlIHRoZSB0b29sdGlwIHdpdGggaXRzIGhvc3QgZm9yIGFzc2lzdGl2ZSB0ZWNobm9sb2d5LlxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIHRoaXMudG9vbHRpcElkKTtcblxuICAgICAgLy8gMi4gUG9zaXRpb24gaXQgdXNpbmcgRmxvYXRpbmcgVUlcbiAgICAgIHRoaXMuY2xlYW51cCA9IGF1dG9VcGRhdGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCB0aGlzLnRvb2x0aXBFbCwgKCkgPT4ge1xuICAgICAgICBjb21wdXRlUG9zaXRpb24odGhpcy5lbC5uYXRpdmVFbGVtZW50LCB0aGlzLnRvb2x0aXBFbCEsIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6IHRoaXMucGxhY2VtZW50LFxuICAgICAgICAgIG1pZGRsZXdhcmU6IFtvZmZzZXQoOCksIGZsaXAoKSwgc2hpZnQoeyBwYWRkaW5nOiA1IH0pXSxcbiAgICAgICAgfSkudGhlbigoeyB4LCB5IH0pID0+IHtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMudG9vbHRpcEVsIS5zdHlsZSwge1xuICAgICAgICAgICAgbGVmdDogYCR7eH1weGAsXG4gICAgICAgICAgICB0b3A6IGAke3l9cHhgLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIDYwMCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1c2luJylcbiAgb25Gb2N1cygpIHtcbiAgICB0aGlzLnNob3coKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnKVxuICBASG9zdExpc3RlbmVyKCdmb2N1c291dCcpXG4gIGhpZGUoKSB7XG4gICAgaWYgKHRoaXMuc2hvd1RpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNob3dUaW1lb3V0KTtcbiAgICAgIHRoaXMuc2hvd1RpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLnRvb2x0aXBFbCkge1xuICAgICAgdGhpcy50b29sdGlwRWwucmVtb3ZlKCk7XG4gICAgICB0aGlzLnRvb2x0aXBFbCA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLmNsZWFudXApIHtcbiAgICAgIHRoaXMuY2xlYW51cCgpO1xuICAgIH1cbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5Jyk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmhpZGUoKTtcbiAgfVxufVxuIl19
|