@visuno/angular 0.0.0-stage → 0.1.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/LICENSE +24 -0
- package/README.md +56 -2
- package/account-table/account-table.component.d.ts +72 -0
- package/action-log/action-log.component.d.ts +41 -0
- package/activity-heatmap/activity-heatmap.component.d.ts +67 -0
- package/agent-inbox/agent-inbox.component.d.ts +75 -0
- package/agent-lanes/agent-lanes.component.d.ts +152 -0
- package/agent-phases/agent-phases.component.d.ts +62 -0
- package/agent-run-timeline/agent-run-timeline.component.d.ts +113 -0
- package/agent-tree/agent-tree.component.d.ts +80 -0
- package/answer-action-bar/answer-action-bar.component.d.ts +110 -0
- package/artifact-card/artifact-card.component.d.ts +145 -0
- package/attachment-tray/attachment-tray.component.d.ts +84 -0
- package/badge/badge.component.d.ts +25 -0
- package/bar-chart/bar-chart.component.d.ts +87 -0
- package/browser-session/browser-session.component.d.ts +70 -0
- package/buttons/buttons.component.d.ts +63 -0
- package/card/card.component.d.ts +21 -0
- package/change-review/change-review.component.d.ts +97 -0
- package/citation-hover-card/citation-hover-card.component.d.ts +95 -0
- package/code-viewer/code-viewer.component.d.ts +86 -0
- package/composer/composer.component.d.ts +114 -0
- package/context-meter/context-meter.component.d.ts +60 -0
- package/core/icon.component.d.ts +10 -0
- package/core/reduced-motion.service.d.ts +15 -0
- package/decision-prompt/decision-prompt.component.d.ts +56 -0
- package/design-review/design-review.component.d.ts +108 -0
- package/design-tuner/design-tuner.component.d.ts +75 -0
- package/details-panel/details-panel.component.d.ts +150 -0
- package/donut-chart/donut-chart.component.d.ts +63 -0
- package/draft-review/draft-review.component.d.ts +128 -0
- package/error-recovery/error-recovery.component.d.ts +59 -0
- package/esm2022/account-table/account-table.component.mjs +399 -0
- package/esm2022/action-log/action-log.component.mjs +177 -0
- package/esm2022/activity-heatmap/activity-heatmap.component.mjs +285 -0
- package/esm2022/agent-inbox/agent-inbox.component.mjs +284 -0
- package/esm2022/agent-lanes/agent-lanes.component.mjs +600 -0
- package/esm2022/agent-phases/agent-phases.component.mjs +300 -0
- package/esm2022/agent-run-timeline/agent-run-timeline.component.mjs +412 -0
- package/esm2022/agent-tree/agent-tree.component.mjs +393 -0
- package/esm2022/answer-action-bar/answer-action-bar.component.mjs +636 -0
- package/esm2022/artifact-card/artifact-card.component.mjs +916 -0
- package/esm2022/attachment-tray/attachment-tray.component.mjs +402 -0
- package/esm2022/badge/badge.component.mjs +97 -0
- package/esm2022/bar-chart/bar-chart.component.mjs +300 -0
- package/esm2022/browser-session/browser-session.component.mjs +352 -0
- package/esm2022/buttons/buttons.component.mjs +215 -0
- package/esm2022/card/card.component.mjs +107 -0
- package/esm2022/change-review/change-review.component.mjs +398 -0
- package/esm2022/citation-hover-card/citation-hover-card.component.mjs +360 -0
- package/esm2022/code-viewer/code-viewer.component.mjs +291 -0
- package/esm2022/composer/composer.component.mjs +743 -0
- package/esm2022/context-meter/context-meter.component.mjs +275 -0
- package/esm2022/core/icon.component.mjs +111 -0
- package/esm2022/core/reduced-motion.service.mjs +34 -0
- package/esm2022/decision-prompt/decision-prompt.component.mjs +259 -0
- package/esm2022/design-review/design-review.component.mjs +428 -0
- package/esm2022/design-tuner/design-tuner.component.mjs +341 -0
- package/esm2022/details-panel/details-panel.component.mjs +537 -0
- package/esm2022/donut-chart/donut-chart.component.mjs +240 -0
- package/esm2022/draft-review/draft-review.component.mjs +549 -0
- package/esm2022/error-recovery/error-recovery.component.mjs +231 -0
- package/esm2022/eval-results/eval-results.component.mjs +368 -0
- package/esm2022/feedback-sheet/feedback-sheet.component.mjs +411 -0
- package/esm2022/field-extraction/field-extraction.component.mjs +368 -0
- package/esm2022/funnel-chart/funnel-chart.component.mjs +258 -0
- package/esm2022/grid/grid.component.mjs +66 -0
- package/esm2022/health-score/health-score.component.mjs +420 -0
- package/esm2022/human-handoff/human-handoff.component.mjs +676 -0
- package/esm2022/image-generation/image-generation.component.mjs +1028 -0
- package/esm2022/inline-text-diff/inline-text-diff.component.mjs +390 -0
- package/esm2022/launch-checklist/launch-checklist.component.mjs +229 -0
- package/esm2022/line-chart/line-chart.component.mjs +417 -0
- package/esm2022/live-answer/live-answer.component.mjs +411 -0
- package/esm2022/metric-insight/metric-insight.component.mjs +511 -0
- package/esm2022/modal/modal.component.mjs +202 -0
- package/esm2022/model-picker/model-picker.component.mjs +491 -0
- package/esm2022/permission-gate/permission-gate.component.mjs +498 -0
- package/esm2022/plan-review/plan-review.component.mjs +432 -0
- package/esm2022/progress/progress.component.mjs +503 -0
- package/esm2022/prompt-library/prompt-library.component.mjs +453 -0
- package/esm2022/prompt-starters/prompt-starters.component.mjs +272 -0
- package/esm2022/proposal-card/proposal-card.component.mjs +402 -0
- package/esm2022/public-api.mjs +88 -0
- package/esm2022/radar-chart/radar-chart.component.mjs +500 -0
- package/esm2022/radial-goals/radial-goals.component.mjs +418 -0
- package/esm2022/reasoning-trail/reasoning-trail.component.mjs +284 -0
- package/esm2022/response-versions/response-versions.component.mjs +288 -0
- package/esm2022/rewrite-toolbar/rewrite-toolbar.component.mjs +397 -0
- package/esm2022/rich-text-editor/rich-text-editor.component.mjs +1755 -0
- package/esm2022/run-cost/run-cost.component.mjs +215 -0
- package/esm2022/run-queue/run-queue.component.mjs +481 -0
- package/esm2022/run-summary/run-summary.component.mjs +331 -0
- package/esm2022/scatter-chart/scatter-chart.component.mjs +705 -0
- package/esm2022/score-breakdown/score-breakdown.component.mjs +460 -0
- package/esm2022/segmented-control/segmented-control.component.mjs +180 -0
- package/esm2022/source-stack/source-stack.component.mjs +245 -0
- package/esm2022/stat-cards/stat-cards.component.mjs +258 -0
- package/esm2022/status-pill/status-pill.component.mjs +305 -0
- package/esm2022/steering/steering.component.mjs +343 -0
- package/esm2022/step-loader/step-loader.component.mjs +209 -0
- package/esm2022/task-table/task-table.component.mjs +534 -0
- package/esm2022/terminal-stream/terminal-stream.component.mjs +583 -0
- package/esm2022/thinking/thinking.component.mjs +276 -0
- package/esm2022/thinking-states/thinking-states.component.mjs +333 -0
- package/esm2022/thread-panel/thread-panel.component.mjs +271 -0
- package/esm2022/toast/toast.component.mjs +195 -0
- package/esm2022/toast-stack/toast-stack.component.mjs +301 -0
- package/esm2022/tool-call/tool-call.component.mjs +273 -0
- package/esm2022/tooltip/tooltip.component.mjs +417 -0
- package/esm2022/top-pages/top-pages.component.mjs +240 -0
- package/esm2022/trace-view/trace-view.component.mjs +440 -0
- package/esm2022/visuno-angular.mjs +5 -0
- package/esm2022/voice-capture/voice-capture.component.mjs +650 -0
- package/esm2022/voice-orb/voice-orb.component.mjs +538 -0
- package/esm2022/web-search/web-search.component.mjs +374 -0
- package/eval-results/eval-results.component.d.ts +67 -0
- package/feedback-sheet/feedback-sheet.component.d.ts +74 -0
- package/fesm2022/visuno-angular.mjs +31992 -0
- package/fesm2022/visuno-angular.mjs.map +1 -0
- package/field-extraction/field-extraction.component.d.ts +82 -0
- package/funnel-chart/funnel-chart.component.d.ts +70 -0
- package/grid/grid.component.d.ts +22 -0
- package/health-score/health-score.component.d.ts +87 -0
- package/human-handoff/human-handoff.component.d.ts +125 -0
- package/image-generation/image-generation.component.d.ts +253 -0
- package/index.d.ts +5 -0
- package/inline-text-diff/inline-text-diff.component.d.ts +76 -0
- package/launch-checklist/launch-checklist.component.d.ts +46 -0
- package/line-chart/line-chart.component.d.ts +89 -0
- package/live-answer/live-answer.component.d.ts +110 -0
- package/metric-insight/metric-insight.component.d.ts +110 -0
- package/modal/modal.component.d.ts +37 -0
- package/model-picker/model-picker.component.d.ts +97 -0
- package/package.json +51 -4
- package/permission-gate/permission-gate.component.d.ts +100 -0
- package/plan-review/plan-review.component.d.ts +86 -0
- package/progress/progress.component.d.ts +91 -0
- package/prompt-library/prompt-library.component.d.ts +121 -0
- package/prompt-starters/prompt-starters.component.d.ts +65 -0
- package/proposal-card/proposal-card.component.d.ts +101 -0
- package/public-api.d.ts +82 -0
- package/radar-chart/radar-chart.component.d.ts +110 -0
- package/radial-goals/radial-goals.component.d.ts +90 -0
- package/reasoning-trail/reasoning-trail.component.d.ts +73 -0
- package/response-versions/response-versions.component.d.ts +54 -0
- package/rewrite-toolbar/rewrite-toolbar.component.d.ts +92 -0
- package/rich-text-editor/rich-text-editor.component.d.ts +180 -0
- package/run-cost/run-cost.component.d.ts +43 -0
- package/run-queue/run-queue.component.d.ts +93 -0
- package/run-summary/run-summary.component.d.ts +81 -0
- package/scatter-chart/scatter-chart.component.d.ts +139 -0
- package/score-breakdown/score-breakdown.component.d.ts +107 -0
- package/segmented-control/segmented-control.component.d.ts +44 -0
- package/source-stack/source-stack.component.d.ts +60 -0
- package/stat-cards/stat-cards.component.d.ts +86 -0
- package/status-pill/status-pill.component.d.ts +64 -0
- package/steering/steering.component.d.ts +75 -0
- package/step-loader/step-loader.component.d.ts +40 -0
- package/styles.css +424 -0
- package/task-table/task-table.component.d.ts +114 -0
- package/terminal-stream/terminal-stream.component.d.ts +110 -0
- package/thinking/thinking.component.d.ts +63 -0
- package/thinking-states/thinking-states.component.d.ts +51 -0
- package/thread-panel/thread-panel.component.d.ts +75 -0
- package/toast/toast.component.d.ts +56 -0
- package/toast-stack/toast-stack.component.d.ts +72 -0
- package/tokens.css +424 -0
- package/tool-call/tool-call.component.d.ts +61 -0
- package/tooltip/tooltip.component.d.ts +89 -0
- package/top-pages/top-pages.component.d.ts +75 -0
- package/trace-view/trace-view.component.d.ts +95 -0
- package/voice-capture/voice-capture.component.d.ts +103 -0
- package/voice-orb/voice-orb.component.d.ts +78 -0
- package/web-search/web-search.component.d.ts +77 -0
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
// framework/angular/proposal-card/proposal-card.component.ts
|
|
2
|
+
//
|
|
3
|
+
// Native Angular port of framework/react/proposal-card/ProposalCard.tsx.
|
|
4
|
+
// A change the agent proposes: a from -> to colour diff, a confidence meter that
|
|
5
|
+
// fills in a moment after the card appears, a fold of other options, and Accept /
|
|
6
|
+
// Not now with an Undo. Inputs mirror the React props; callbacks are @Outputs.
|
|
7
|
+
//
|
|
8
|
+
// Icon substitutions (the Angular core icon set has no 'wand' or 'right'):
|
|
9
|
+
// wand -> 'spark' (the AI-suggestion glint)
|
|
10
|
+
// right -> 'chev-r' (the from -> to arrow)
|
|
11
|
+
// 'chev-r' (fold toggle), 'ok' (accepted) and 'undo' are used as-is.
|
|
12
|
+
import { Component, EventEmitter, Input, Output, ViewEncapsulation, inject, } from '@angular/core';
|
|
13
|
+
import { VoIconComponent } from '../core/icon.component';
|
|
14
|
+
import { ReducedMotionService } from '../core/reduced-motion.service';
|
|
15
|
+
import * as i0 from "@angular/core";
|
|
16
|
+
const STEPS = 5;
|
|
17
|
+
export class ProposalCardComponent {
|
|
18
|
+
constructor() {
|
|
19
|
+
/** The icon in the orange tile. Defaults to a wand (substituted with 'spark'). */
|
|
20
|
+
this.icon = 'spark';
|
|
21
|
+
/** The changes on offer, the agent's pick first. */
|
|
22
|
+
this.options = [];
|
|
23
|
+
/** Defaults to 0, the agent's pick. */
|
|
24
|
+
this.defaultValue = 0;
|
|
25
|
+
this.valueChange = new EventEmitter();
|
|
26
|
+
this.defaultOpen = false;
|
|
27
|
+
this.openChange = new EventEmitter();
|
|
28
|
+
this.defaultStatus = 'open';
|
|
29
|
+
this.statusChange = new EventEmitter();
|
|
30
|
+
/** Called with the chosen option when Accept is pressed. */
|
|
31
|
+
this.accepted = new EventEmitter();
|
|
32
|
+
this.dismissed = new EventEmitter();
|
|
33
|
+
this.undone = new EventEmitter();
|
|
34
|
+
/** Shown once accepted, like "Applied to 3 buttons". */
|
|
35
|
+
this.acceptedLabel = 'Applied';
|
|
36
|
+
/** Shown once dismissed. */
|
|
37
|
+
this.dismissedLabel = 'Dismissed. The agent will not suggest this again.';
|
|
38
|
+
this.confidenceLabel = 'Confidence';
|
|
39
|
+
/** Sits flat in a chat thread (the default). Set false to give it a card of its own. */
|
|
40
|
+
this.bare = true;
|
|
41
|
+
this.motion = inject(ReducedMotionService);
|
|
42
|
+
this.segIndexes = Array.from({ length: STEPS }, (_, i) => i);
|
|
43
|
+
// controllable state: an input, when set, drives; otherwise the internal value does
|
|
44
|
+
this.selInner = 0;
|
|
45
|
+
this.openInner = false;
|
|
46
|
+
this.stateInner = 'open';
|
|
47
|
+
/** The tweened confidence shown in the meter, 0..100. */
|
|
48
|
+
this.conf = 0;
|
|
49
|
+
this.picked = false;
|
|
50
|
+
this.ready = false;
|
|
51
|
+
}
|
|
52
|
+
get sel() {
|
|
53
|
+
return this.value ?? this.selInner;
|
|
54
|
+
}
|
|
55
|
+
get isOpen() {
|
|
56
|
+
return this.open ?? this.openInner;
|
|
57
|
+
}
|
|
58
|
+
get state() {
|
|
59
|
+
return this.status ?? this.stateInner;
|
|
60
|
+
}
|
|
61
|
+
get roundConf() {
|
|
62
|
+
return Math.round(this.conf);
|
|
63
|
+
}
|
|
64
|
+
ngOnChanges(changes) {
|
|
65
|
+
if (changes['defaultValue'] && this.value === undefined)
|
|
66
|
+
this.selInner = this.defaultValue;
|
|
67
|
+
if (changes['defaultOpen'] && this.open === undefined)
|
|
68
|
+
this.openInner = this.defaultOpen;
|
|
69
|
+
if (changes['defaultStatus'] && this.status === undefined)
|
|
70
|
+
this.stateInner = this.defaultStatus;
|
|
71
|
+
// keep the meter following the chosen option once the card is ready
|
|
72
|
+
if ((changes['value'] || changes['options']) && this.ready)
|
|
73
|
+
this.tweenTo(this.opt()?.confidence ?? 0);
|
|
74
|
+
}
|
|
75
|
+
ngAfterViewInit() {
|
|
76
|
+
// the confidence fills in a moment after the card appears (400ms), as in the source
|
|
77
|
+
const delay = this.motion.reduce() ? 0 : 400;
|
|
78
|
+
this.readyTimer = setTimeout(() => {
|
|
79
|
+
this.ready = true;
|
|
80
|
+
this.tweenTo(this.opt()?.confidence ?? 0);
|
|
81
|
+
}, delay);
|
|
82
|
+
}
|
|
83
|
+
/** The chosen option, clamped to the list. */
|
|
84
|
+
opt() {
|
|
85
|
+
if (!this.options.length)
|
|
86
|
+
return undefined;
|
|
87
|
+
const i = Math.max(0, Math.min(this.options.length - 1, this.sel));
|
|
88
|
+
return this.options[i];
|
|
89
|
+
}
|
|
90
|
+
/** The options other than the chosen one, with their list index and stagger key. */
|
|
91
|
+
others() {
|
|
92
|
+
const sel = this.sel;
|
|
93
|
+
const out = [];
|
|
94
|
+
this.options.forEach((o, i) => {
|
|
95
|
+
if (i !== sel)
|
|
96
|
+
out.push({ o, i, k: out.length });
|
|
97
|
+
});
|
|
98
|
+
return out;
|
|
99
|
+
}
|
|
100
|
+
choose(i) {
|
|
101
|
+
this.picked = true;
|
|
102
|
+
if (this.value === undefined)
|
|
103
|
+
this.selInner = i;
|
|
104
|
+
this.valueChange.emit(i);
|
|
105
|
+
if (this.ready)
|
|
106
|
+
this.tweenTo(this.opt()?.confidence ?? 0);
|
|
107
|
+
}
|
|
108
|
+
toggleOpen() {
|
|
109
|
+
const next = !this.isOpen;
|
|
110
|
+
if (this.open === undefined)
|
|
111
|
+
this.openInner = next;
|
|
112
|
+
this.openChange.emit(next);
|
|
113
|
+
}
|
|
114
|
+
accept() {
|
|
115
|
+
if (this.open === undefined)
|
|
116
|
+
this.openInner = false;
|
|
117
|
+
this.openChange.emit(false);
|
|
118
|
+
this.setState('accepted');
|
|
119
|
+
const o = this.opt();
|
|
120
|
+
if (o)
|
|
121
|
+
this.accepted.emit({ option: o, index: this.sel });
|
|
122
|
+
}
|
|
123
|
+
dismiss() {
|
|
124
|
+
this.setState('dismissed');
|
|
125
|
+
this.dismissed.emit();
|
|
126
|
+
}
|
|
127
|
+
undo() {
|
|
128
|
+
this.setState('open');
|
|
129
|
+
this.undone.emit();
|
|
130
|
+
}
|
|
131
|
+
setState(s) {
|
|
132
|
+
if (this.status === undefined)
|
|
133
|
+
this.stateInner = s;
|
|
134
|
+
this.statusChange.emit(s);
|
|
135
|
+
}
|
|
136
|
+
// a small rAF tween so the meter counts up to its target, like the source's tween()
|
|
137
|
+
tweenTo(target) {
|
|
138
|
+
if (this.tweenRaf)
|
|
139
|
+
cancelAnimationFrame(this.tweenRaf);
|
|
140
|
+
if (this.motion.reduce() || typeof requestAnimationFrame !== 'function') {
|
|
141
|
+
this.conf = target;
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
const from = this.conf;
|
|
145
|
+
const start = performance.now();
|
|
146
|
+
const dur = 700;
|
|
147
|
+
const step = (now) => {
|
|
148
|
+
const t = Math.min(1, (now - start) / dur);
|
|
149
|
+
const eased = 1 - Math.pow(1 - t, 3); // easeOutCubic
|
|
150
|
+
this.conf = from + (target - from) * eased;
|
|
151
|
+
if (t < 1)
|
|
152
|
+
this.tweenRaf = requestAnimationFrame(step);
|
|
153
|
+
};
|
|
154
|
+
this.tweenRaf = requestAnimationFrame(step);
|
|
155
|
+
}
|
|
156
|
+
ngOnDestroy() {
|
|
157
|
+
if (this.readyTimer)
|
|
158
|
+
clearTimeout(this.readyTimer);
|
|
159
|
+
if (this.tweenRaf)
|
|
160
|
+
cancelAnimationFrame(this.tweenRaf);
|
|
161
|
+
}
|
|
162
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProposalCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
163
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ProposalCardComponent, isStandalone: true, selector: "vo-proposal-card", inputs: { title: "title", subtitle: "subtitle", icon: "icon", from: "from", options: "options", value: "value", defaultValue: "defaultValue", open: "open", defaultOpen: "defaultOpen", status: "status", defaultStatus: "defaultStatus", acceptedLabel: "acceptedLabel", dismissedLabel: "dismissedLabel", confidenceLabel: "confidenceLabel", bare: "bare" }, outputs: { valueChange: "valueChange", openChange: "openChange", statusChange: "statusChange", accepted: "accepted", dismissed: "dismissed", undone: "undone" }, usesOnChanges: true, ngImport: i0, template: `
|
|
164
|
+
<div data-vo="" class="vo-prx" [class.vo-panel]="!bare">
|
|
165
|
+
<div class="vo-prx-h">
|
|
166
|
+
<span class="vo-prx-ic"><vo-icon [name]="icon"></vo-icon></span>
|
|
167
|
+
<div class="vo-prx-ht">
|
|
168
|
+
<b>{{ title }}</b>
|
|
169
|
+
@if (subtitle) {
|
|
170
|
+
<span class="vo-muted">{{ subtitle }}</span>
|
|
171
|
+
}
|
|
172
|
+
</div>
|
|
173
|
+
</div>
|
|
174
|
+
<div class="vo-prx-diff">
|
|
175
|
+
<div class="vo-prx-sw">
|
|
176
|
+
<span class="vo-prx-c" [style.background]="from.color"></span>
|
|
177
|
+
<span class="vo-num">{{ from.label }}</span>
|
|
178
|
+
@if (from.badge) {
|
|
179
|
+
<span class="vo-tag" [class]="'vo-' + (from.tone ?? 'bad')">{{ from.badge }}</span>
|
|
180
|
+
}
|
|
181
|
+
</div>
|
|
182
|
+
<span class="vo-prx-ar"><vo-icon name="chev-r" size="xs"></vo-icon></span>
|
|
183
|
+
@if (opt(); as o) {
|
|
184
|
+
<div class="vo-prx-sw vo-prx-new">
|
|
185
|
+
<span class="vo-prx-c" [style.background]="o.color"></span>
|
|
186
|
+
<span class="vo-num">{{ o.label }}</span>
|
|
187
|
+
@if (o.badge) {
|
|
188
|
+
<span class="vo-tag" [class]="'vo-' + (o.tone ?? 'ok')"><span class="vo-prx-rt">{{ o.badge }}</span></span>
|
|
189
|
+
}
|
|
190
|
+
</div>
|
|
191
|
+
}
|
|
192
|
+
</div>
|
|
193
|
+
<div class="vo-prx-cf">
|
|
194
|
+
<span class="vo-muted">{{ confidenceLabel }}</span>
|
|
195
|
+
<div
|
|
196
|
+
class="vo-prx-seg"
|
|
197
|
+
role="meter"
|
|
198
|
+
[attr.aria-label]="confidenceLabel"
|
|
199
|
+
[attr.aria-valuemin]="0"
|
|
200
|
+
[attr.aria-valuemax]="100"
|
|
201
|
+
[attr.aria-valuenow]="opt()?.confidence ?? 0"
|
|
202
|
+
>
|
|
203
|
+
@for (i of segIndexes; track i) {
|
|
204
|
+
<i [class.vo-on]="conf >= (i + 1) * 20 - 10"></i>
|
|
205
|
+
}
|
|
206
|
+
</div>
|
|
207
|
+
<span class="vo-num vo-prx-pc">{{ roundConf }}%</span>
|
|
208
|
+
</div>
|
|
209
|
+
@if (others().length > 0) {
|
|
210
|
+
<button
|
|
211
|
+
type="button"
|
|
212
|
+
class="vo-prx-alt-t"
|
|
213
|
+
[class.vo-open]="isOpen"
|
|
214
|
+
[attr.aria-expanded]="isOpen"
|
|
215
|
+
(click)="toggleOpen()"
|
|
216
|
+
>
|
|
217
|
+
<vo-icon name="chev-r" size="xs"></vo-icon>
|
|
218
|
+
<span>{{ others().length }} other {{ others().length > 1 ? 'options' : 'option' }}</span>
|
|
219
|
+
</button>
|
|
220
|
+
<div class="vo-fold vo-prx-alt" [class.vo-shut]="!isOpen">
|
|
221
|
+
<div>
|
|
222
|
+
<div class="vo-prx-alts">
|
|
223
|
+
@for (x of others(); track x.i) {
|
|
224
|
+
<button
|
|
225
|
+
type="button"
|
|
226
|
+
class="vo-prx-a"
|
|
227
|
+
[class.vo-enter]="picked"
|
|
228
|
+
[style.animation-delay.ms]="picked ? x.k * 50 : null"
|
|
229
|
+
(click)="choose(x.i)"
|
|
230
|
+
>
|
|
231
|
+
<span class="vo-prx-c" [style.background]="x.o.color"></span>
|
|
232
|
+
<span>{{ x.o.name }}{{ x.o.badge ? ', ' + x.o.badge : '' }}</span>
|
|
233
|
+
@if (x.o.description) {
|
|
234
|
+
<span class="vo-d">{{ x.o.description }}</span>
|
|
235
|
+
}
|
|
236
|
+
</button>
|
|
237
|
+
}
|
|
238
|
+
</div>
|
|
239
|
+
</div>
|
|
240
|
+
</div>
|
|
241
|
+
}
|
|
242
|
+
<div class="vo-prx-f">
|
|
243
|
+
@if (state === 'open') {
|
|
244
|
+
<button type="button" class="vo-pill vo-ghost vo-sm vo-prx-no" (click)="dismiss()">Not now</button>
|
|
245
|
+
<button type="button" class="vo-pill vo-primary vo-sm vo-prx-ok" (click)="accept()">Accept</button>
|
|
246
|
+
} @else if (state === 'accepted') {
|
|
247
|
+
<span class="vo-prx-done vo-enter"><vo-icon name="ok"></vo-icon><span>{{ acceptedLabel }}</span></span>
|
|
248
|
+
<button type="button" class="vo-pill vo-ghost vo-sm vo-prx-un vo-enter" [style.animation-delay.ms]="60" (click)="undo()">
|
|
249
|
+
<vo-icon name="undo" size="xs"></vo-icon>Undo
|
|
250
|
+
</button>
|
|
251
|
+
} @else {
|
|
252
|
+
<span class="vo-prx-done vo-muted vo-enter" style="color:var(--vo-muted)">{{ dismissedLabel }}</span>
|
|
253
|
+
<button type="button" class="vo-pill vo-ghost vo-sm vo-prx-un vo-enter" [style.animation-delay.ms]="60" (click)="undo()">Undo</button>
|
|
254
|
+
}
|
|
255
|
+
</div>
|
|
256
|
+
</div>
|
|
257
|
+
`, isInline: true, styles: [".vo-prx{padding:14px 0;display:flex;flex-direction:column;gap:var(--vo-s-3)}.vo-prx.vo-panel{padding:14px}.vo-prx-h{display:flex;gap:10px;align-items:center}.vo-prx-ic{width:32px;height:32px;border-radius:calc(10px * var(--vo-rk));background:var(--vo-pp-bg);color:var(--vo-pp);display:grid;place-items:center;flex:none}.vo-prx-ht{display:flex;flex-direction:column;min-width:0}.vo-prx-ht b{font-weight:500;font-size:13.5px}.vo-prx-ht span{font-size:12.5px}.vo-prx-diff{display:flex;align-items:center;gap:var(--vo-s-2);padding:10px;border-radius:var(--vo-r-in);background:var(--vo-chip);flex-wrap:wrap}.vo-prx-sw{display:flex;align-items:center;gap:7px;font-size:12px;flex:1;min-width:0}.vo-prx-ar{color:var(--vo-muted);display:grid}.vo-prx-c{width:18px;height:18px;border-radius:calc(6px * var(--vo-rk));flex:none;box-shadow:inset 0 0 0 1px #00000014;transition:background .5s var(--vo-ease)}.vo-prx-new .vo-num{transition:opacity .3s}.vo-prx-cf{display:flex;align-items:center;gap:10px;font-size:12.5px}.vo-prx-seg{display:flex;gap:3px;flex:1}.vo-prx-seg i{flex:1;height:5px;border-radius:3px;background:var(--vo-line);transition:background .4s}.vo-prx-seg i.vo-on{background:var(--vo-ok)}.vo-prx-pc{width:34px;text-align:right;color:var(--vo-fg2)}.vo-prx-alt-t{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--vo-fg2);align-self:flex-start;cursor:pointer}.vo-prx-alt-t svg{transition:transform .4s var(--vo-ease)}.vo-prx-alt-t.vo-open svg{transform:rotate(90deg)}.vo-prx-alts{display:flex;flex-direction:column;gap:2px;padding-top:2px;margin-inline:-8px}.vo-prx-a{display:flex;align-items:center;gap:9px;padding:7px var(--vo-s-2);border-radius:calc(10px * var(--vo-rk));font-size:13px;text-align:left;cursor:pointer;transition:background .25s}@media (hover:hover) and (pointer:fine){.vo-prx-a:hover{background:var(--vo-row)}}.vo-prx-a .vo-d{margin-left:auto;font-size:12px;color:var(--vo-muted)}.vo-prx-f{display:flex;justify-content:flex-end;gap:6px}.vo-prx-done{display:flex;align-items:center;gap:var(--vo-s-2);font-size:13px;color:var(--vo-ok);flex:1}.vo-fold{display:grid;grid-template-rows:1fr;transition:grid-template-rows .4s var(--vo-ease)}.vo-fold>*{overflow:hidden;min-height:0}.vo-fold.vo-shut{grid-template-rows:0fr}.vo-num{font-family:var(--vo-mono),ui-monospace,monospace;font-variant-numeric:tabular-nums}.vo-muted{color:var(--vo-muted)}.vo-tag{display:inline-flex;align-items:center;height:18px;padding:0 6px;border-radius:calc(5px * var(--vo-rk));font-size:11px;font-weight:500;line-height:1}.vo-tag.vo-ok{background:var(--vo-ok-bg);color:var(--vo-ok)}.vo-tag.vo-warn{background:var(--vo-warn-bg);color:var(--vo-warn)}.vo-tag.vo-bad{background:var(--vo-bad-bg);color:var(--vo-bad)}.vo-enter{animation:vo-prx-enter .4s var(--vo-ease) both}@keyframes vo-prx-enter{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}.vo-pill{display:inline-flex;align-items:center;justify-content:center;gap:7px;height:32px;padding:0 14px;border-radius:var(--vo-r-pill);font-size:13px;font-weight:500;white-space:nowrap;cursor:pointer;transition:background var(--vo-t-fast),color var(--vo-t-fast),opacity var(--vo-t-fast),transform .15s}.vo-pill:active{transform:scale(.97)}.vo-pill.vo-primary{background:var(--vo-accent);color:var(--vo-on-accent)}@media (hover:hover) and (pointer:fine){.vo-pill.vo-primary:hover{background:var(--vo-accent-2)}}.vo-pill.vo-ghost{color:var(--vo-fg2)}@media (hover:hover) and (pointer:fine){.vo-pill.vo-ghost:hover{background:var(--vo-row);color:var(--vo-fg)}}.vo-pill.vo-sm{height:28px;padding:0 11px;font-size:12.5px}\n"], dependencies: [{ kind: "component", type: VoIconComponent, selector: "vo-icon", inputs: ["name", "size"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
258
|
+
}
|
|
259
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProposalCardComponent, decorators: [{
|
|
260
|
+
type: Component,
|
|
261
|
+
args: [{ selector: 'vo-proposal-card', standalone: true, encapsulation: ViewEncapsulation.None, imports: [VoIconComponent], template: `
|
|
262
|
+
<div data-vo="" class="vo-prx" [class.vo-panel]="!bare">
|
|
263
|
+
<div class="vo-prx-h">
|
|
264
|
+
<span class="vo-prx-ic"><vo-icon [name]="icon"></vo-icon></span>
|
|
265
|
+
<div class="vo-prx-ht">
|
|
266
|
+
<b>{{ title }}</b>
|
|
267
|
+
@if (subtitle) {
|
|
268
|
+
<span class="vo-muted">{{ subtitle }}</span>
|
|
269
|
+
}
|
|
270
|
+
</div>
|
|
271
|
+
</div>
|
|
272
|
+
<div class="vo-prx-diff">
|
|
273
|
+
<div class="vo-prx-sw">
|
|
274
|
+
<span class="vo-prx-c" [style.background]="from.color"></span>
|
|
275
|
+
<span class="vo-num">{{ from.label }}</span>
|
|
276
|
+
@if (from.badge) {
|
|
277
|
+
<span class="vo-tag" [class]="'vo-' + (from.tone ?? 'bad')">{{ from.badge }}</span>
|
|
278
|
+
}
|
|
279
|
+
</div>
|
|
280
|
+
<span class="vo-prx-ar"><vo-icon name="chev-r" size="xs"></vo-icon></span>
|
|
281
|
+
@if (opt(); as o) {
|
|
282
|
+
<div class="vo-prx-sw vo-prx-new">
|
|
283
|
+
<span class="vo-prx-c" [style.background]="o.color"></span>
|
|
284
|
+
<span class="vo-num">{{ o.label }}</span>
|
|
285
|
+
@if (o.badge) {
|
|
286
|
+
<span class="vo-tag" [class]="'vo-' + (o.tone ?? 'ok')"><span class="vo-prx-rt">{{ o.badge }}</span></span>
|
|
287
|
+
}
|
|
288
|
+
</div>
|
|
289
|
+
}
|
|
290
|
+
</div>
|
|
291
|
+
<div class="vo-prx-cf">
|
|
292
|
+
<span class="vo-muted">{{ confidenceLabel }}</span>
|
|
293
|
+
<div
|
|
294
|
+
class="vo-prx-seg"
|
|
295
|
+
role="meter"
|
|
296
|
+
[attr.aria-label]="confidenceLabel"
|
|
297
|
+
[attr.aria-valuemin]="0"
|
|
298
|
+
[attr.aria-valuemax]="100"
|
|
299
|
+
[attr.aria-valuenow]="opt()?.confidence ?? 0"
|
|
300
|
+
>
|
|
301
|
+
@for (i of segIndexes; track i) {
|
|
302
|
+
<i [class.vo-on]="conf >= (i + 1) * 20 - 10"></i>
|
|
303
|
+
}
|
|
304
|
+
</div>
|
|
305
|
+
<span class="vo-num vo-prx-pc">{{ roundConf }}%</span>
|
|
306
|
+
</div>
|
|
307
|
+
@if (others().length > 0) {
|
|
308
|
+
<button
|
|
309
|
+
type="button"
|
|
310
|
+
class="vo-prx-alt-t"
|
|
311
|
+
[class.vo-open]="isOpen"
|
|
312
|
+
[attr.aria-expanded]="isOpen"
|
|
313
|
+
(click)="toggleOpen()"
|
|
314
|
+
>
|
|
315
|
+
<vo-icon name="chev-r" size="xs"></vo-icon>
|
|
316
|
+
<span>{{ others().length }} other {{ others().length > 1 ? 'options' : 'option' }}</span>
|
|
317
|
+
</button>
|
|
318
|
+
<div class="vo-fold vo-prx-alt" [class.vo-shut]="!isOpen">
|
|
319
|
+
<div>
|
|
320
|
+
<div class="vo-prx-alts">
|
|
321
|
+
@for (x of others(); track x.i) {
|
|
322
|
+
<button
|
|
323
|
+
type="button"
|
|
324
|
+
class="vo-prx-a"
|
|
325
|
+
[class.vo-enter]="picked"
|
|
326
|
+
[style.animation-delay.ms]="picked ? x.k * 50 : null"
|
|
327
|
+
(click)="choose(x.i)"
|
|
328
|
+
>
|
|
329
|
+
<span class="vo-prx-c" [style.background]="x.o.color"></span>
|
|
330
|
+
<span>{{ x.o.name }}{{ x.o.badge ? ', ' + x.o.badge : '' }}</span>
|
|
331
|
+
@if (x.o.description) {
|
|
332
|
+
<span class="vo-d">{{ x.o.description }}</span>
|
|
333
|
+
}
|
|
334
|
+
</button>
|
|
335
|
+
}
|
|
336
|
+
</div>
|
|
337
|
+
</div>
|
|
338
|
+
</div>
|
|
339
|
+
}
|
|
340
|
+
<div class="vo-prx-f">
|
|
341
|
+
@if (state === 'open') {
|
|
342
|
+
<button type="button" class="vo-pill vo-ghost vo-sm vo-prx-no" (click)="dismiss()">Not now</button>
|
|
343
|
+
<button type="button" class="vo-pill vo-primary vo-sm vo-prx-ok" (click)="accept()">Accept</button>
|
|
344
|
+
} @else if (state === 'accepted') {
|
|
345
|
+
<span class="vo-prx-done vo-enter"><vo-icon name="ok"></vo-icon><span>{{ acceptedLabel }}</span></span>
|
|
346
|
+
<button type="button" class="vo-pill vo-ghost vo-sm vo-prx-un vo-enter" [style.animation-delay.ms]="60" (click)="undo()">
|
|
347
|
+
<vo-icon name="undo" size="xs"></vo-icon>Undo
|
|
348
|
+
</button>
|
|
349
|
+
} @else {
|
|
350
|
+
<span class="vo-prx-done vo-muted vo-enter" style="color:var(--vo-muted)">{{ dismissedLabel }}</span>
|
|
351
|
+
<button type="button" class="vo-pill vo-ghost vo-sm vo-prx-un vo-enter" [style.animation-delay.ms]="60" (click)="undo()">Undo</button>
|
|
352
|
+
}
|
|
353
|
+
</div>
|
|
354
|
+
</div>
|
|
355
|
+
`, styles: [".vo-prx{padding:14px 0;display:flex;flex-direction:column;gap:var(--vo-s-3)}.vo-prx.vo-panel{padding:14px}.vo-prx-h{display:flex;gap:10px;align-items:center}.vo-prx-ic{width:32px;height:32px;border-radius:calc(10px * var(--vo-rk));background:var(--vo-pp-bg);color:var(--vo-pp);display:grid;place-items:center;flex:none}.vo-prx-ht{display:flex;flex-direction:column;min-width:0}.vo-prx-ht b{font-weight:500;font-size:13.5px}.vo-prx-ht span{font-size:12.5px}.vo-prx-diff{display:flex;align-items:center;gap:var(--vo-s-2);padding:10px;border-radius:var(--vo-r-in);background:var(--vo-chip);flex-wrap:wrap}.vo-prx-sw{display:flex;align-items:center;gap:7px;font-size:12px;flex:1;min-width:0}.vo-prx-ar{color:var(--vo-muted);display:grid}.vo-prx-c{width:18px;height:18px;border-radius:calc(6px * var(--vo-rk));flex:none;box-shadow:inset 0 0 0 1px #00000014;transition:background .5s var(--vo-ease)}.vo-prx-new .vo-num{transition:opacity .3s}.vo-prx-cf{display:flex;align-items:center;gap:10px;font-size:12.5px}.vo-prx-seg{display:flex;gap:3px;flex:1}.vo-prx-seg i{flex:1;height:5px;border-radius:3px;background:var(--vo-line);transition:background .4s}.vo-prx-seg i.vo-on{background:var(--vo-ok)}.vo-prx-pc{width:34px;text-align:right;color:var(--vo-fg2)}.vo-prx-alt-t{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--vo-fg2);align-self:flex-start;cursor:pointer}.vo-prx-alt-t svg{transition:transform .4s var(--vo-ease)}.vo-prx-alt-t.vo-open svg{transform:rotate(90deg)}.vo-prx-alts{display:flex;flex-direction:column;gap:2px;padding-top:2px;margin-inline:-8px}.vo-prx-a{display:flex;align-items:center;gap:9px;padding:7px var(--vo-s-2);border-radius:calc(10px * var(--vo-rk));font-size:13px;text-align:left;cursor:pointer;transition:background .25s}@media (hover:hover) and (pointer:fine){.vo-prx-a:hover{background:var(--vo-row)}}.vo-prx-a .vo-d{margin-left:auto;font-size:12px;color:var(--vo-muted)}.vo-prx-f{display:flex;justify-content:flex-end;gap:6px}.vo-prx-done{display:flex;align-items:center;gap:var(--vo-s-2);font-size:13px;color:var(--vo-ok);flex:1}.vo-fold{display:grid;grid-template-rows:1fr;transition:grid-template-rows .4s var(--vo-ease)}.vo-fold>*{overflow:hidden;min-height:0}.vo-fold.vo-shut{grid-template-rows:0fr}.vo-num{font-family:var(--vo-mono),ui-monospace,monospace;font-variant-numeric:tabular-nums}.vo-muted{color:var(--vo-muted)}.vo-tag{display:inline-flex;align-items:center;height:18px;padding:0 6px;border-radius:calc(5px * var(--vo-rk));font-size:11px;font-weight:500;line-height:1}.vo-tag.vo-ok{background:var(--vo-ok-bg);color:var(--vo-ok)}.vo-tag.vo-warn{background:var(--vo-warn-bg);color:var(--vo-warn)}.vo-tag.vo-bad{background:var(--vo-bad-bg);color:var(--vo-bad)}.vo-enter{animation:vo-prx-enter .4s var(--vo-ease) both}@keyframes vo-prx-enter{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}.vo-pill{display:inline-flex;align-items:center;justify-content:center;gap:7px;height:32px;padding:0 14px;border-radius:var(--vo-r-pill);font-size:13px;font-weight:500;white-space:nowrap;cursor:pointer;transition:background var(--vo-t-fast),color var(--vo-t-fast),opacity var(--vo-t-fast),transform .15s}.vo-pill:active{transform:scale(.97)}.vo-pill.vo-primary{background:var(--vo-accent);color:var(--vo-on-accent)}@media (hover:hover) and (pointer:fine){.vo-pill.vo-primary:hover{background:var(--vo-accent-2)}}.vo-pill.vo-ghost{color:var(--vo-fg2)}@media (hover:hover) and (pointer:fine){.vo-pill.vo-ghost:hover{background:var(--vo-row);color:var(--vo-fg)}}.vo-pill.vo-sm{height:28px;padding:0 11px;font-size:12.5px}\n"] }]
|
|
356
|
+
}], propDecorators: { title: [{
|
|
357
|
+
type: Input,
|
|
358
|
+
args: [{ required: true }]
|
|
359
|
+
}], subtitle: [{
|
|
360
|
+
type: Input
|
|
361
|
+
}], icon: [{
|
|
362
|
+
type: Input
|
|
363
|
+
}], from: [{
|
|
364
|
+
type: Input,
|
|
365
|
+
args: [{ required: true }]
|
|
366
|
+
}], options: [{
|
|
367
|
+
type: Input,
|
|
368
|
+
args: [{ required: true }]
|
|
369
|
+
}], value: [{
|
|
370
|
+
type: Input
|
|
371
|
+
}], defaultValue: [{
|
|
372
|
+
type: Input
|
|
373
|
+
}], valueChange: [{
|
|
374
|
+
type: Output
|
|
375
|
+
}], open: [{
|
|
376
|
+
type: Input
|
|
377
|
+
}], defaultOpen: [{
|
|
378
|
+
type: Input
|
|
379
|
+
}], openChange: [{
|
|
380
|
+
type: Output
|
|
381
|
+
}], status: [{
|
|
382
|
+
type: Input
|
|
383
|
+
}], defaultStatus: [{
|
|
384
|
+
type: Input
|
|
385
|
+
}], statusChange: [{
|
|
386
|
+
type: Output
|
|
387
|
+
}], accepted: [{
|
|
388
|
+
type: Output
|
|
389
|
+
}], dismissed: [{
|
|
390
|
+
type: Output
|
|
391
|
+
}], undone: [{
|
|
392
|
+
type: Output
|
|
393
|
+
}], acceptedLabel: [{
|
|
394
|
+
type: Input
|
|
395
|
+
}], dismissedLabel: [{
|
|
396
|
+
type: Input
|
|
397
|
+
}], confidenceLabel: [{
|
|
398
|
+
type: Input
|
|
399
|
+
}], bare: [{
|
|
400
|
+
type: Input
|
|
401
|
+
}] } });
|
|
402
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWwtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9wb3NhbC1jYXJkL3Byb3Bvc2FsLWNhcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZEQUE2RDtBQUM3RCxFQUFFO0FBQ0YseUVBQXlFO0FBQ3pFLGlGQUFpRjtBQUNqRixrRkFBa0Y7QUFDbEYsK0VBQStFO0FBQy9FLEVBQUU7QUFDRiwyRUFBMkU7QUFDM0UsZ0RBQWdEO0FBQ2hELDZDQUE2QztBQUM3QyxxRUFBcUU7QUFFckUsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixpQkFBaUIsRUFDakIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQW1CLE1BQU0sd0JBQXdCLENBQUM7QUFDMUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBOEJ0RSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUM7QUF3R2hCLE1BQU0sT0FBTyxxQkFBcUI7SUF0R2xDO1FBMkdFLGtGQUFrRjtRQUN6RSxTQUFJLEdBQWUsT0FBTyxDQUFDO1FBR3BDLG9EQUFvRDtRQUN6QixZQUFPLEdBQXFCLEVBQUUsQ0FBQztRQUcxRCx1Q0FBdUM7UUFDOUIsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFDaEIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRzFDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRzFDLGtCQUFhLEdBQW1CLE1BQU0sQ0FBQztRQUN0QyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBQzVELDREQUE0RDtRQUNsRCxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQTZDLENBQUM7UUFDekUsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFR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bWV3b3JrL2FuZ3VsYXIvcHJvcG9zYWwtY2FyZC9wcm9wb3NhbC1jYXJkLmNvbXBvbmVudC50c1xuLy9cbi8vIE5hdGl2ZSBBbmd1bGFyIHBvcnQgb2YgZnJhbWV3b3JrL3JlYWN0L3Byb3Bvc2FsLWNhcmQvUHJvcG9zYWxDYXJkLnRzeC5cbi8vIEEgY2hhbmdlIHRoZSBhZ2VudCBwcm9wb3NlczogYSBmcm9tIC0+IHRvIGNvbG91ciBkaWZmLCBhIGNvbmZpZGVuY2UgbWV0ZXIgdGhhdFxuLy8gZmlsbHMgaW4gYSBtb21lbnQgYWZ0ZXIgdGhlIGNhcmQgYXBwZWFycywgYSBmb2xkIG9mIG90aGVyIG9wdGlvbnMsIGFuZCBBY2NlcHQgL1xuLy8gTm90IG5vdyB3aXRoIGFuIFVuZG8uIElucHV0cyBtaXJyb3IgdGhlIFJlYWN0IHByb3BzOyBjYWxsYmFja3MgYXJlIEBPdXRwdXRzLlxuLy9cbi8vIEljb24gc3Vic3RpdHV0aW9ucyAodGhlIEFuZ3VsYXIgY29yZSBpY29uIHNldCBoYXMgbm8gJ3dhbmQnIG9yICdyaWdodCcpOlxuLy8gICB3YW5kICAtPiAnc3BhcmsnICAodGhlIEFJLXN1Z2dlc3Rpb24gZ2xpbnQpXG4vLyAgIHJpZ2h0IC0+ICdjaGV2LXInICh0aGUgZnJvbSAtPiB0byBhcnJvdylcbi8vICdjaGV2LXInIChmb2xkIHRvZ2dsZSksICdvaycgKGFjY2VwdGVkKSBhbmQgJ3VuZG8nIGFyZSB1c2VkIGFzLWlzLlxuXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVm9JY29uQ29tcG9uZW50LCB0eXBlIFZvSWNvbk5hbWUgfSBmcm9tICcuLi9jb3JlL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IFJlZHVjZWRNb3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9yZWR1Y2VkLW1vdGlvbi5zZXJ2aWNlJztcblxuLyoqIENvbG91cnMgdGhlIHRhZyBhZnRlciBhIHZhbHVlLiAqL1xuZXhwb3J0IHR5cGUgUHJvcG9zYWxUb25lID0gJ29rJyB8ICd3YXJuJyB8ICdiYWQnO1xuXG4vKiogT25lIHNpZGUgb2YgdGhlIGNoYW5nZTogYSBzd2F0Y2gsIGl0cyB2YWx1ZSBhbmQgYSB0YWcsIGxpa2UgI0M5Q0ZEOCB3aXRoIFwiMi4xIDogMVwiLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9wb3NhbFZhbHVlIHtcbiAgLyoqIEFueSBDU1MgY29sb3VyLCBzaG93biBpbiB0aGUgc3dhdGNoLiAqL1xuICBjb2xvcjogc3RyaW5nO1xuICAvKiogTGlrZSBcIiNDOUNGRDhcIi4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqIEEgc2hvcnQgdGFnIGFmdGVyIHRoZSB2YWx1ZSwgbGlrZSBhIGNvbnRyYXN0IHJhdGlvLiAqL1xuICBiYWRnZT86IHN0cmluZztcbiAgLyoqIENvbG91cnMgdGhlIHRhZy4gVGhlIGN1cnJlbnQgdmFsdWUgZGVmYXVsdHMgdG8gYmFkLCB0aGUgb3B0aW9ucyB0byBvay4gKi9cbiAgdG9uZT86IFByb3Bvc2FsVG9uZTtcbn1cblxuLyoqIEEgY2hhbmdlIHRoZSBhZ2VudCBjYW4gbWFrZS4gVGhlIGZpcnN0IG9uZSBpcyBpdHMgc3VnZ2VzdGlvbiwgdGhlIG90aGVycyBzaG93IHVuZGVyIFwib3RoZXIgb3B0aW9uc1wiLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9wb3NhbE9wdGlvbiBleHRlbmRzIFByb3Bvc2FsVmFsdWUge1xuICAvKiogTGlrZSBcIlN1Z2dlc3RlZFwiIG9yIFwiRGFya2VyXCIuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFRoZSBxdWlldCBsaW5lIGJlc2lkZSBpdCBpbiB0aGUgbGlzdCwgbGlrZSBcIkJhbGFuY2VkIHdpdGggdGhlIHByaW1hcnlcIi4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBIb3cgc3VyZSB0aGUgYWdlbnQgaXMsIDAgdG8gMTAwLiAqL1xuICBjb25maWRlbmNlOiBudW1iZXI7XG59XG5cbi8qKiBvcGVuLCBhY2NlcHRlZCBvciBkaXNtaXNzZWQuICovXG5leHBvcnQgdHlwZSBQcm9wb3NhbFN0YXR1cyA9ICdvcGVuJyB8ICdhY2NlcHRlZCcgfCAnZGlzbWlzc2VkJztcblxuY29uc3QgU1RFUFMgPSA1O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2by1wcm9wb3NhbC1jYXJkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1ZvSWNvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBkYXRhLXZvPVwiXCIgY2xhc3M9XCJ2by1wcnhcIiBbY2xhc3Mudm8tcGFuZWxdPVwiIWJhcmVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2by1wcngtaFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInZvLXByeC1pY1wiPjx2by1pY29uIFtuYW1lXT1cImljb25cIj48L3ZvLWljb24+PC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidm8tcHJ4LWh0XCI+XG4gICAgICAgICAgPGI+e3sgdGl0bGUgfX08L2I+XG4gICAgICAgICAgQGlmIChzdWJ0aXRsZSkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2by1tdXRlZFwiPnt7IHN1YnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2by1wcngtZGlmZlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidm8tcHJ4LXN3XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2by1wcngtY1wiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImZyb20uY29sb3JcIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2by1udW1cIj57eyBmcm9tLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgIEBpZiAoZnJvbS5iYWRnZSkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2by10YWdcIiBbY2xhc3NdPVwiJ3ZvLScgKyAoZnJvbS50b25lID8/ICdiYWQnKVwiPnt7IGZyb20uYmFkZ2UgfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ2by1wcngtYXJcIj48dm8taWNvbiBuYW1lPVwiY2hldi1yXCIgc2l6ZT1cInhzXCI+PC92by1pY29uPjwvc3Bhbj5cbiAgICAgICAgQGlmIChvcHQoKTsgYXMgbykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2by1wcngtc3cgdm8tcHJ4LW5ld1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2by1wcngtY1wiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cIm8uY29sb3JcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZvLW51bVwiPnt7IG8ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICBAaWYgKG8uYmFkZ2UpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2by10YWdcIiBbY2xhc3NdPVwiJ3ZvLScgKyAoby50b25lID8/ICdvaycpXCI+PHNwYW4gY2xhc3M9XCJ2by1wcngtcnRcIj57eyBvLmJhZGdlIH19PC9zcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidm8tcHJ4LWNmXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidm8tbXV0ZWRcIj57eyBjb25maWRlbmNlTGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInZvLXByeC1zZWdcIlxuICAgICAgICAgIHJvbGU9XCJtZXRlclwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb25maWRlbmNlTGFiZWxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtaW5dPVwiMFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1heF09XCIxMDBcIlxuICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwib3B0KCk/LmNvbmZpZGVuY2UgPz8gMFwiXG4gICAgICAgID5cbiAgICAgICAgICBAZm9yIChpIG9mIHNlZ0luZGV4ZXM7IHRyYWNrIGkpIHtcbiAgICAgICAgICAgIDxpIFtjbGFzcy52by1vbl09XCJjb25mID49IChpICsgMSkgKiAyMCAtIDEwXCI+PC9pPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidm8tbnVtIHZvLXByeC1wY1wiPnt7IHJvdW5kQ29uZiB9fSU8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAob3RoZXJzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJ2by1wcngtYWx0LXRcIlxuICAgICAgICAgIFtjbGFzcy52by1vcGVuXT1cImlzT3BlblwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW5cIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVPcGVuKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPHZvLWljb24gbmFtZT1cImNoZXYtclwiIHNpemU9XCJ4c1wiPjwvdm8taWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBvdGhlcnMoKS5sZW5ndGggfX0gb3RoZXIge3sgb3RoZXJzKCkubGVuZ3RoID4gMSA/ICdvcHRpb25zJyA6ICdvcHRpb24nIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZvLWZvbGQgdm8tcHJ4LWFsdFwiIFtjbGFzcy52by1zaHV0XT1cIiFpc09wZW5cIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZvLXByeC1hbHRzXCI+XG4gICAgICAgICAgICAgIEBmb3IgKHggb2Ygb3RoZXJzKCk7IHRyYWNrIHguaSkge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2by1wcngtYVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3Mudm8tZW50ZXJdPVwicGlja2VkXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5hbmltYXRpb24tZGVsYXkubXNdPVwicGlja2VkID8geC5rICogNTAgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaG9vc2UoeC5pKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2by1wcngtY1wiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInguby5jb2xvclwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHguby5uYW1lIH19e3sgeC5vLmJhZGdlID8gJywgJyArIHguby5iYWRnZSA6ICcnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgQGlmICh4Lm8uZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2by1kXCI+e3sgeC5vLmRlc2NyaXB0aW9uIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8ZGl2IGNsYXNzPVwidm8tcHJ4LWZcIj5cbiAgICAgICAgQGlmIChzdGF0ZSA9PT0gJ29wZW4nKSB7XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ2by1waWxsIHZvLWdob3N0IHZvLXNtIHZvLXByeC1ub1wiIChjbGljayk9XCJkaXNtaXNzKClcIj5Ob3Qgbm93PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ2by1waWxsIHZvLXByaW1hcnkgdm8tc20gdm8tcHJ4LW9rXCIgKGNsaWNrKT1cImFjY2VwdCgpXCI+QWNjZXB0PC9idXR0b24+XG4gICAgICAgIH0gQGVsc2UgaWYgKHN0YXRlID09PSAnYWNjZXB0ZWQnKSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2by1wcngtZG9uZSB2by1lbnRlclwiPjx2by1pY29uIG5hbWU9XCJva1wiPjwvdm8taWNvbj48c3Bhbj57eyBhY2NlcHRlZExhYmVsIH19PC9zcGFuPjwvc3Bhbj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInZvLXBpbGwgdm8tZ2hvc3Qgdm8tc20gdm8tcHJ4LXVuIHZvLWVudGVyXCIgW3N0eWxlLmFuaW1hdGlvbi1kZWxheS5tc109XCI2MFwiIChjbGljayk9XCJ1bmRvKClcIj5cbiAgICAgICAgICAgIDx2by1pY29uIG5hbWU9XCJ1bmRvXCIgc2l6ZT1cInhzXCI+PC92by1pY29uPlVuZG9cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2by1wcngtZG9uZSB2by1tdXRlZCB2by1lbnRlclwiIHN0eWxlPVwiY29sb3I6dmFyKC0tdm8tbXV0ZWQpXCI+e3sgZGlzbWlzc2VkTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ2by1waWxsIHZvLWdob3N0IHZvLXNtIHZvLXByeC11biB2by1lbnRlclwiIFtzdHlsZS5hbmltYXRpb24tZGVsYXkubXNdPVwiNjBcIiAoY2xpY2spPVwidW5kbygpXCI+VW5kbzwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmw6ICcuL3Byb3Bvc2FsLWNhcmQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgUHJvcG9zYWxDYXJkQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAvKiogV2hhdCB0aGUgYWdlbnQgd2FudHMgdG8gY2hhbmdlLiAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSB0aXRsZSE6IHN0cmluZztcbiAgLyoqIFdoZXJlLCBsaWtlIFwiUHJpY2luZywgZnJhbWUgMiBvZiAzXCIuICovXG4gIEBJbnB1dCgpIHN1YnRpdGxlPzogc3RyaW5nO1xuICAvKiogVGhlIGljb24gaW4gdGhlIG9yYW5nZSB0aWxlLiBEZWZhdWx0cyB0byBhIHdhbmQgKHN1YnN0aXR1dGVkIHdpdGggJ3NwYXJrJykuICovXG4gIEBJbnB1dCgpIGljb246IFZvSWNvbk5hbWUgPSAnc3BhcmsnO1xuICAvKiogSG93IGl0IGlzIG5vdy4gKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgZnJvbSE6IFByb3Bvc2FsVmFsdWU7XG4gIC8qKiBUaGUgY2hhbmdlcyBvbiBvZmZlciwgdGhlIGFnZW50J3MgcGljayBmaXJzdC4gKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgb3B0aW9uczogUHJvcG9zYWxPcHRpb25bXSA9IFtdO1xuICAvKiogSW5kZXggb2YgdGhlIG9wdGlvbiBzaG93biBhcyB0aGUgY2hhbmdlLiBMZWF2ZSBpdCBvdXQgdG8gbGV0IHRoZSBsaXN0IHBpY2sgaXQuICovXG4gIEBJbnB1dCgpIHZhbHVlPzogbnVtYmVyO1xuICAvKiogRGVmYXVsdHMgdG8gMCwgdGhlIGFnZW50J3MgcGljay4gKi9cbiAgQElucHV0KCkgZGVmYXVsdFZhbHVlID0gMDtcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIC8qKiBXaGV0aGVyIHRoZSBvdGhlciBvcHRpb25zIGFyZSBsaXN0ZWQuIExlYXZlIGl0IG91dCB0byBsZXQgdGhlaXIgdG9nZ2xlIG9wZW4gdGhlbS4gKi9cbiAgQElucHV0KCkgb3Blbj86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRlZmF1bHRPcGVuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBvcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAvKiogb3BlbiwgYWNjZXB0ZWQgb3IgZGlzbWlzc2VkLiBMZWF2ZSBpdCBvdXQgdG8gbGV0IEFjY2VwdCwgTm90IG5vdyBhbmQgVW5kbyBtb3ZlIGl0LiAqL1xuICBASW5wdXQoKSBzdGF0dXM/OiBQcm9wb3NhbFN0YXR1cztcbiAgQElucHV0KCkgZGVmYXVsdFN0YXR1czogUHJvcG9zYWxTdGF0dXMgPSAnb3Blbic7XG4gIEBPdXRwdXQoKSBzdGF0dXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFByb3Bvc2FsU3RhdHVzPigpO1xuICAvKiogQ2FsbGVkIHdpdGggdGhlIGNob3NlbiBvcHRpb24gd2hlbiBBY2NlcHQgaXMgcHJlc3NlZC4gKi9cbiAgQE91dHB1dCgpIGFjY2VwdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7IG9wdGlvbjogUHJvcG9zYWxPcHRpb247IGluZGV4OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgpIGRpc21pc3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHVuZG9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIFNob3duIG9uY2UgYWNjZXB0ZWQsIGxpa2UgXCJBcHBsaWVkIHRvIDMgYnV0dG9uc1wiLiAqL1xuICBASW5wdXQoKSBhY2NlcHRlZExhYmVsID0gJ0FwcGxpZWQnO1xuICAvKiogU2hvd24gb25jZSBkaXNtaXNzZWQuICovXG4gIEBJbnB1dCgpIGRpc21pc3NlZExhYmVsID0gJ0Rpc21pc3NlZC4gVGhlIGFnZW50IHdpbGwgbm90IHN1Z2dlc3QgdGhpcyBhZ2Fpbi4nO1xuICBASW5wdXQoKSBjb25maWRlbmNlTGFiZWwgPSAnQ29uZmlkZW5jZSc7XG4gIC8qKiBTaXRzIGZsYXQgaW4gYSBjaGF0IHRocmVhZCAodGhlIGRlZmF1bHQpLiBTZXQgZmFsc2UgdG8gZ2l2ZSBpdCBhIGNhcmQgb2YgaXRzIG93bi4gKi9cbiAgQElucHV0KCkgYmFyZSA9IHRydWU7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtb3Rpb24gPSBpbmplY3QoUmVkdWNlZE1vdGlvblNlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IHNlZ0luZGV4ZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBTVEVQUyB9LCAoXywgaSkgPT4gaSk7XG5cbiAgLy8gY29udHJvbGxhYmxlIHN0YXRlOiBhbiBpbnB1dCwgd2hlbiBzZXQsIGRyaXZlczsgb3RoZXJ3aXNlIHRoZSBpbnRlcm5hbCB2YWx1ZSBkb2VzXG4gIHByaXZhdGUgc2VsSW5uZXIgPSAwO1xuICBwcml2YXRlIG9wZW5Jbm5lciA9IGZhbHNlO1xuICBwcml2YXRlIHN0YXRlSW5uZXI6IFByb3Bvc2FsU3RhdHVzID0gJ29wZW4nO1xuXG4gIC8qKiBUaGUgdHdlZW5lZCBjb25maWRlbmNlIHNob3duIGluIHRoZSBtZXRlciwgMC4uMTAwLiAqL1xuICBjb25mID0gMDtcbiAgcGlja2VkID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZHkgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkeVRpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgdHdlZW5SYWY/OiBudW1iZXI7XG5cbiAgZ2V0IHNlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnZhbHVlID8/IHRoaXMuc2VsSW5uZXI7XG4gIH1cbiAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuID8/IHRoaXMub3BlbklubmVyO1xuICB9XG4gIGdldCBzdGF0ZSgpOiBQcm9wb3NhbFN0YXR1cyB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID8/IHRoaXMuc3RhdGVJbm5lcjtcbiAgfVxuICBnZXQgcm91bmRDb25mKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQodGhpcy5jb25mKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZGVmYXVsdFZhbHVlJ10gJiYgdGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkKSB0aGlzLnNlbElubmVyID0gdGhpcy5kZWZhdWx0VmFsdWU7XG4gICAgaWYgKGNoYW5nZXNbJ2RlZmF1bHRPcGVuJ10gJiYgdGhpcy5vcGVuID09PSB1bmRlZmluZWQpIHRoaXMub3BlbklubmVyID0gdGhpcy5kZWZhdWx0T3BlbjtcbiAgICBpZiAoY2hhbmdlc1snZGVmYXVsdFN0YXR1cyddICYmIHRoaXMuc3RhdHVzID09PSB1bmRlZmluZWQpIHRoaXMuc3RhdGVJbm5lciA9IHRoaXMuZGVmYXVsdFN0YXR1cztcbiAgICAvLyBrZWVwIHRoZSBtZXRlciBmb2xsb3dpbmcgdGhlIGNob3NlbiBvcHRpb24gb25jZSB0aGUgY2FyZCBpcyByZWFkeVxuICAgIGlmICgoY2hhbmdlc1sndmFsdWUnXSB8fCBjaGFuZ2VzWydvcHRpb25zJ10pICYmIHRoaXMucmVhZHkpIHRoaXMudHdlZW5Ubyh0aGlzLm9wdCgpPy5jb25maWRlbmNlID8/IDApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIHRoZSBjb25maWRlbmNlIGZpbGxzIGluIGEgbW9tZW50IGFmdGVyIHRoZSBjYXJkIGFwcGVhcnMgKDQwMG1zKSwgYXMgaW4gdGhlIHNvdXJjZVxuICAgIGNvbnN0IGRlbGF5ID0gdGhpcy5tb3Rpb24ucmVkdWNlKCkgPyAwIDogNDAwO1xuICAgIHRoaXMucmVhZHlUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gICAgICB0aGlzLnR3ZWVuVG8odGhpcy5vcHQoKT8uY29uZmlkZW5jZSA/PyAwKTtcbiAgICB9LCBkZWxheSk7XG4gIH1cblxuICAvKiogVGhlIGNob3NlbiBvcHRpb24sIGNsYW1wZWQgdG8gdGhlIGxpc3QuICovXG4gIG9wdCgpOiBQcm9wb3NhbE9wdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMubGVuZ3RoKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGkgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0aGlzLm9wdGlvbnMubGVuZ3RoIC0gMSwgdGhpcy5zZWwpKTtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zW2ldO1xuICB9XG5cbiAgLyoqIFRoZSBvcHRpb25zIG90aGVyIHRoYW4gdGhlIGNob3NlbiBvbmUsIHdpdGggdGhlaXIgbGlzdCBpbmRleCBhbmQgc3RhZ2dlciBrZXkuICovXG4gIG90aGVycygpOiB7IG86IFByb3Bvc2FsT3B0aW9uOyBpOiBudW1iZXI7IGs6IG51bWJlciB9W10ge1xuICAgIGNvbnN0IHNlbCA9IHRoaXMuc2VsO1xuICAgIGNvbnN0IG91dDogeyBvOiBQcm9wb3NhbE9wdGlvbjsgaTogbnVtYmVyOyBrOiBudW1iZXIgfVtdID0gW107XG4gICAgdGhpcy5vcHRpb25zLmZvckVhY2goKG8sIGkpID0+IHtcbiAgICAgIGlmIChpICE9PSBzZWwpIG91dC5wdXNoKHsgbywgaSwgazogb3V0Lmxlbmd0aCB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgY2hvb3NlKGk6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGlja2VkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkKSB0aGlzLnNlbElubmVyID0gaTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoaSk7XG4gICAgaWYgKHRoaXMucmVhZHkpIHRoaXMudHdlZW5Ubyh0aGlzLm9wdCgpPy5jb25maWRlbmNlID8/IDApO1xuICB9XG5cbiAgdG9nZ2xlT3BlbigpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gIXRoaXMuaXNPcGVuO1xuICAgIGlmICh0aGlzLm9wZW4gPT09IHVuZGVmaW5lZCkgdGhpcy5vcGVuSW5uZXIgPSBuZXh0O1xuICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KG5leHQpO1xuICB9XG5cbiAgYWNjZXB0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wZW4gPT09IHVuZGVmaW5lZCkgdGhpcy5vcGVuSW5uZXIgPSBmYWxzZTtcbiAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSgnYWNjZXB0ZWQnKTtcbiAgICBjb25zdCBvID0gdGhpcy5vcHQoKTtcbiAgICBpZiAobykgdGhpcy5hY2NlcHRlZC5lbWl0KHsgb3B0aW9uOiBvLCBpbmRleDogdGhpcy5zZWwgfSk7XG4gIH1cblxuICBkaXNtaXNzKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0U3RhdGUoJ2Rpc21pc3NlZCcpO1xuICAgIHRoaXMuZGlzbWlzc2VkLmVtaXQoKTtcbiAgfVxuXG4gIHVuZG8oKTogdm9pZCB7XG4gICAgdGhpcy5zZXRTdGF0ZSgnb3BlbicpO1xuICAgIHRoaXMudW5kb25lLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3RhdGUoczogUHJvcG9zYWxTdGF0dXMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0dXMgPT09IHVuZGVmaW5lZCkgdGhpcy5zdGF0ZUlubmVyID0gcztcbiAgICB0aGlzLnN0YXR1c0NoYW5nZS5lbWl0KHMpO1xuICB9XG5cbiAgLy8gYSBzbWFsbCByQUYgdHdlZW4gc28gdGhlIG1ldGVyIGNvdW50cyB1cCB0byBpdHMgdGFyZ2V0LCBsaWtlIHRoZSBzb3VyY2UncyB0d2VlbigpXG4gIHByaXZhdGUgdHdlZW5Ubyh0YXJnZXQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLnR3ZWVuUmFmKSBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnR3ZWVuUmFmKTtcbiAgICBpZiAodGhpcy5tb3Rpb24ucmVkdWNlKCkgfHwgdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5jb25mID0gdGFyZ2V0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmcm9tID0gdGhpcy5jb25mO1xuICAgIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgY29uc3QgZHVyID0gNzAwO1xuICAgIGNvbnN0IHN0ZXAgPSAobm93OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHQgPSBNYXRoLm1pbigxLCAobm93IC0gc3RhcnQpIC8gZHVyKTtcbiAgICAgIGNvbnN0IGVhc2VkID0gMSAtIE1hdGgucG93KDEgLSB0LCAzKTsgLy8gZWFzZU91dEN1YmljXG4gICAgICB0aGlzLmNvbmYgPSBmcm9tICsgKHRhcmdldCAtIGZyb20pICogZWFzZWQ7XG4gICAgICBpZiAodCA8IDEpIHRoaXMudHdlZW5SYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XG4gICAgfTtcbiAgICB0aGlzLnR3ZWVuUmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVhZHlUaW1lcikgY2xlYXJUaW1lb3V0KHRoaXMucmVhZHlUaW1lcik7XG4gICAgaWYgKHRoaXMudHdlZW5SYWYpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMudHdlZW5SYWYpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// @visuno/angular — public API. Auto-generated.
|
|
2
|
+
// Import the tokens stylesheet globally (angular.json styles or @import):
|
|
3
|
+
// @import '@visuno/angular/styles.css';
|
|
4
|
+
// Shared
|
|
5
|
+
export * from './core/icon.component';
|
|
6
|
+
export * from './core/reduced-motion.service';
|
|
7
|
+
// Components
|
|
8
|
+
export * from './account-table/account-table.component';
|
|
9
|
+
export * from './action-log/action-log.component';
|
|
10
|
+
export * from './activity-heatmap/activity-heatmap.component';
|
|
11
|
+
export * from './agent-inbox/agent-inbox.component';
|
|
12
|
+
export * from './agent-lanes/agent-lanes.component';
|
|
13
|
+
export * from './agent-phases/agent-phases.component';
|
|
14
|
+
export * from './agent-run-timeline/agent-run-timeline.component';
|
|
15
|
+
export * from './agent-tree/agent-tree.component';
|
|
16
|
+
export * from './answer-action-bar/answer-action-bar.component';
|
|
17
|
+
export * from './artifact-card/artifact-card.component';
|
|
18
|
+
export * from './attachment-tray/attachment-tray.component';
|
|
19
|
+
export * from './badge/badge.component';
|
|
20
|
+
export * from './bar-chart/bar-chart.component';
|
|
21
|
+
export * from './browser-session/browser-session.component';
|
|
22
|
+
export * from './buttons/buttons.component';
|
|
23
|
+
export * from './card/card.component';
|
|
24
|
+
export * from './change-review/change-review.component';
|
|
25
|
+
export * from './citation-hover-card/citation-hover-card.component';
|
|
26
|
+
export * from './code-viewer/code-viewer.component';
|
|
27
|
+
export * from './composer/composer.component';
|
|
28
|
+
export * from './context-meter/context-meter.component';
|
|
29
|
+
export * from './decision-prompt/decision-prompt.component';
|
|
30
|
+
export * from './design-review/design-review.component';
|
|
31
|
+
export * from './design-tuner/design-tuner.component';
|
|
32
|
+
export * from './details-panel/details-panel.component';
|
|
33
|
+
export * from './donut-chart/donut-chart.component';
|
|
34
|
+
export * from './draft-review/draft-review.component';
|
|
35
|
+
export * from './error-recovery/error-recovery.component';
|
|
36
|
+
export * from './eval-results/eval-results.component';
|
|
37
|
+
export * from './feedback-sheet/feedback-sheet.component';
|
|
38
|
+
export * from './field-extraction/field-extraction.component';
|
|
39
|
+
export * from './funnel-chart/funnel-chart.component';
|
|
40
|
+
export * from './grid/grid.component';
|
|
41
|
+
export * from './health-score/health-score.component';
|
|
42
|
+
export * from './human-handoff/human-handoff.component';
|
|
43
|
+
export * from './image-generation/image-generation.component';
|
|
44
|
+
export * from './inline-text-diff/inline-text-diff.component';
|
|
45
|
+
export * from './launch-checklist/launch-checklist.component';
|
|
46
|
+
export * from './line-chart/line-chart.component';
|
|
47
|
+
export * from './live-answer/live-answer.component';
|
|
48
|
+
export * from './metric-insight/metric-insight.component';
|
|
49
|
+
export * from './modal/modal.component';
|
|
50
|
+
export * from './model-picker/model-picker.component';
|
|
51
|
+
export * from './permission-gate/permission-gate.component';
|
|
52
|
+
export * from './plan-review/plan-review.component';
|
|
53
|
+
export * from './progress/progress.component';
|
|
54
|
+
export * from './prompt-library/prompt-library.component';
|
|
55
|
+
export * from './prompt-starters/prompt-starters.component';
|
|
56
|
+
export * from './proposal-card/proposal-card.component';
|
|
57
|
+
export * from './radar-chart/radar-chart.component';
|
|
58
|
+
export * from './radial-goals/radial-goals.component';
|
|
59
|
+
export * from './reasoning-trail/reasoning-trail.component';
|
|
60
|
+
export * from './response-versions/response-versions.component';
|
|
61
|
+
export * from './rewrite-toolbar/rewrite-toolbar.component';
|
|
62
|
+
export * from './rich-text-editor/rich-text-editor.component';
|
|
63
|
+
export * from './run-cost/run-cost.component';
|
|
64
|
+
export * from './run-queue/run-queue.component';
|
|
65
|
+
export * from './run-summary/run-summary.component';
|
|
66
|
+
export * from './scatter-chart/scatter-chart.component';
|
|
67
|
+
export * from './score-breakdown/score-breakdown.component';
|
|
68
|
+
export * from './segmented-control/segmented-control.component';
|
|
69
|
+
export * from './source-stack/source-stack.component';
|
|
70
|
+
export * from './stat-cards/stat-cards.component';
|
|
71
|
+
export * from './status-pill/status-pill.component';
|
|
72
|
+
export * from './steering/steering.component';
|
|
73
|
+
export * from './step-loader/step-loader.component';
|
|
74
|
+
export * from './task-table/task-table.component';
|
|
75
|
+
export * from './terminal-stream/terminal-stream.component';
|
|
76
|
+
export * from './thinking/thinking.component';
|
|
77
|
+
export * from './thinking-states/thinking-states.component';
|
|
78
|
+
export * from './thread-panel/thread-panel.component';
|
|
79
|
+
export * from './toast/toast.component';
|
|
80
|
+
export * from './toast-stack/toast-stack.component';
|
|
81
|
+
export * from './tool-call/tool-call.component';
|
|
82
|
+
export * from './tooltip/tooltip.component';
|
|
83
|
+
export * from './top-pages/top-pages.component';
|
|
84
|
+
export * from './trace-view/trace-view.component';
|
|
85
|
+
export * from './voice-capture/voice-capture.component';
|
|
86
|
+
export * from './voice-orb/voice-orb.component';
|
|
87
|
+
export * from './web-search/web-search.component';
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0RBQWdEO0FBQ2hELDBFQUEwRTtBQUMxRSwwQ0FBMEM7QUFFMUMsU0FBUztBQUNULGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywrQkFBK0IsQ0FBQztBQUU5QyxhQUFhO0FBQ2IsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLG1DQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHZpc3Vuby9hbmd1bGFyIOKAlCBwdWJsaWMgQVBJLiBBdXRvLWdlbmVyYXRlZC5cbi8vIEltcG9ydCB0aGUgdG9rZW5zIHN0eWxlc2hlZXQgZ2xvYmFsbHkgKGFuZ3VsYXIuanNvbiBzdHlsZXMgb3IgQGltcG9ydCk6XG4vLyAgIEBpbXBvcnQgJ0B2aXN1bm8vYW5ndWxhci9zdHlsZXMuY3NzJztcblxuLy8gU2hhcmVkXG5leHBvcnQgKiBmcm9tICcuL2NvcmUvaWNvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb3JlL3JlZHVjZWQtbW90aW9uLnNlcnZpY2UnO1xuXG4vLyBDb21wb25lbnRzXG5leHBvcnQgKiBmcm9tICcuL2FjY291bnQtdGFibGUvYWNjb3VudC10YWJsZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9hY3Rpb24tbG9nL2FjdGlvbi1sb2cuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYWN0aXZpdHktaGVhdG1hcC9hY3Rpdml0eS1oZWF0bWFwLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2FnZW50LWluYm94L2FnZW50LWluYm94LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2FnZW50LWxhbmVzL2FnZW50LWxhbmVzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2FnZW50LXBoYXNlcy9hZ2VudC1waGFzZXMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYWdlbnQtcnVuLXRpbWVsaW5lL2FnZW50LXJ1bi10aW1lbGluZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9hZ2VudC10cmVlL2FnZW50LXRyZWUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYW5zd2VyLWFjdGlvbi1iYXIvYW5zd2VyLWFjdGlvbi1iYXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYXJ0aWZhY3QtY2FyZC9hcnRpZmFjdC1jYXJkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2F0dGFjaG1lbnQtdHJheS9hdHRhY2htZW50LXRyYXkuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYmFkZ2UvYmFkZ2UuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYmFyLWNoYXJ0L2Jhci1jaGFydC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9icm93c2VyLXNlc3Npb24vYnJvd3Nlci1zZXNzaW9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2J1dHRvbnMvYnV0dG9ucy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jYXJkL2NhcmQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vY2hhbmdlLXJldmlldy9jaGFuZ2UtcmV2aWV3LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NpdGF0aW9uLWhvdmVyLWNhcmQvY2l0YXRpb24taG92ZXItY2FyZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2RlLXZpZXdlci9jb2RlLXZpZXdlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb3Nlci9jb21wb3Nlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250ZXh0LW1ldGVyL2NvbnRleHQtbWV0ZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZGVjaXNpb24tcHJvbXB0L2RlY2lzaW9uLXByb21wdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9kZXNpZ24tcmV2aWV3L2Rlc2lnbi1yZXZpZXcuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZGVzaWduLXR1bmVyL2Rlc2lnbi10dW5lci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9kZXRhaWxzLXBhbmVsL2RldGFpbHMtcGFuZWwuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZG9udXQtY2hhcnQvZG9udXQtY2hhcnQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZHJhZnQtcmV2aWV3L2RyYWZ0LXJldmlldy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9lcnJvci1yZWNvdmVyeS9lcnJvci1yZWNvdmVyeS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9ldmFsLXJlc3VsdHMvZXZhbC1yZXN1bHRzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2ZlZWRiYWNrLXNoZWV0L2ZlZWRiYWNrLXNoZWV0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2ZpZWxkLWV4dHJhY3Rpb24vZmllbGQtZXh0cmFjdGlvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9mdW5uZWwtY2hhcnQvZnVubmVsLWNoYXJ0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2dyaWQvZ3JpZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9oZWFsdGgtc2NvcmUvaGVhbHRoLXNjb3JlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2h1bWFuLWhhbmRvZmYvaHVtYW4taGFuZG9mZi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9pbWFnZS1nZW5lcmF0aW9uL2ltYWdlLWdlbmVyYXRpb24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaW5saW5lLXRleHQtZGlmZi9pbmxpbmUtdGV4dC1kaWZmLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xhdW5jaC1jaGVja2xpc3QvbGF1bmNoLWNoZWNrbGlzdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saW5lLWNoYXJ0L2xpbmUtY2hhcnQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGl2ZS1hbnN3ZXIvbGl2ZS1hbnN3ZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbWV0cmljLWluc2lnaHQvbWV0cmljLWluc2lnaHQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbW9kYWwvbW9kYWwuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwtcGlja2VyL21vZGVsLXBpY2tlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9wZXJtaXNzaW9uLWdhdGUvcGVybWlzc2lvbi1nYXRlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3BsYW4tcmV2aWV3L3BsYW4tcmV2aWV3LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3Byb2dyZXNzL3Byb2dyZXNzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3Byb21wdC1saWJyYXJ5L3Byb21wdC1saWJyYXJ5LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3Byb21wdC1zdGFydGVycy9wcm9tcHQtc3RhcnRlcnMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcHJvcG9zYWwtY2FyZC9wcm9wb3NhbC1jYXJkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3JhZGFyLWNoYXJ0L3JhZGFyLWNoYXJ0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3JhZGlhbC1nb2Fscy9yYWRpYWwtZ29hbHMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcmVhc29uaW5nLXRyYWlsL3JlYXNvbmluZy10cmFpbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXNwb25zZS12ZXJzaW9ucy9yZXNwb25zZS12ZXJzaW9ucy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXdyaXRlLXRvb2xiYXIvcmV3cml0ZS10b29sYmFyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3JpY2gtdGV4dC1lZGl0b3IvcmljaC10ZXh0LWVkaXRvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9ydW4tY29zdC9ydW4tY29zdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9ydW4tcXVldWUvcnVuLXF1ZXVlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3J1bi1zdW1tYXJ5L3J1bi1zdW1tYXJ5LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NjYXR0ZXItY2hhcnQvc2NhdHRlci1jaGFydC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zY29yZS1icmVha2Rvd24vc2NvcmUtYnJlYWtkb3duLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NlZ21lbnRlZC1jb250cm9sL3NlZ21lbnRlZC1jb250cm9sLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NvdXJjZS1zdGFjay9zb3VyY2Utc3RhY2suY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdC1jYXJkcy9zdGF0LWNhcmRzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXR1cy1waWxsL3N0YXR1cy1waWxsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3N0ZWVyaW5nL3N0ZWVyaW5nLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3N0ZXAtbG9hZGVyL3N0ZXAtbG9hZGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3Rhc2stdGFibGUvdGFzay10YWJsZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXJtaW5hbC1zdHJlYW0vdGVybWluYWwtc3RyZWFtLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RoaW5raW5nL3RoaW5raW5nLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RoaW5raW5nLXN0YXRlcy90aGlua2luZy1zdGF0ZXMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGhyZWFkLXBhbmVsL3RocmVhZC1wYW5lbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90b2FzdC90b2FzdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90b2FzdC1zdGFjay90b2FzdC1zdGFjay5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90b29sLWNhbGwvdG9vbC1jYWxsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3Rvb2x0aXAvdG9vbHRpcC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90b3AtcGFnZXMvdG9wLXBhZ2VzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RyYWNlLXZpZXcvdHJhY2Utdmlldy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi92b2ljZS1jYXB0dXJlL3ZvaWNlLWNhcHR1cmUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdm9pY2Utb3JiL3ZvaWNlLW9yYi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi93ZWItc2VhcmNoL3dlYi1zZWFyY2guY29tcG9uZW50JztcbiJdfQ==
|