@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,503 @@
|
|
|
1
|
+
// framework/angular/progress/progress.component.ts
|
|
2
|
+
//
|
|
3
|
+
// Native Angular port of framework/react/progress/Progress.tsx.
|
|
4
|
+
// A run's progress three ways (a ring for the whole run, segments for its steps,
|
|
5
|
+
// a bar for the step in hand), with state colours (running = accent, paused =
|
|
6
|
+
// grey, error = red + Retry, complete = green) and an optional credits meter
|
|
7
|
+
// that warns in words as it fills. Inputs mirror the React props; callbacks
|
|
8
|
+
// become @Output() EventEmitters.
|
|
9
|
+
import { Component, EventEmitter, Input, Output, ViewEncapsulation, } from '@angular/core';
|
|
10
|
+
import { VoIconComponent } from '../core/icon.component';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "../core/reduced-motion.service";
|
|
13
|
+
const CODE = {
|
|
14
|
+
indeterminate: 'ind',
|
|
15
|
+
running: 'run',
|
|
16
|
+
paused: 'paused',
|
|
17
|
+
error: 'err',
|
|
18
|
+
complete: 'done',
|
|
19
|
+
};
|
|
20
|
+
const TAG = {
|
|
21
|
+
indeterminate: ['Starting', ''],
|
|
22
|
+
running: ['Running', 'vo-run'],
|
|
23
|
+
paused: ['Paused', ''],
|
|
24
|
+
error: ['Failed', 'vo-bad'],
|
|
25
|
+
complete: ['Done', 'vo-ok'],
|
|
26
|
+
};
|
|
27
|
+
const fmt = (n) => Math.round(n).toLocaleString('en-US');
|
|
28
|
+
/** A run's progress three ways, with an optional meter that warns as it fills. */
|
|
29
|
+
export class ProgressComponent {
|
|
30
|
+
constructor(motion) {
|
|
31
|
+
this.motion = motion;
|
|
32
|
+
/** Like "Indexing the docs". */
|
|
33
|
+
this.title = '';
|
|
34
|
+
this.state = 'running';
|
|
35
|
+
this.steps = [];
|
|
36
|
+
/** The step in hand, from 0. */
|
|
37
|
+
this.step = 0;
|
|
38
|
+
/** How far the step in hand is, 0 to 1. */
|
|
39
|
+
this.stepProgress = 0;
|
|
40
|
+
/** What failed, shown over the bar with a Retry button while state is "error". */
|
|
41
|
+
this.error = 'The step failed';
|
|
42
|
+
this.onPause = new EventEmitter();
|
|
43
|
+
this.onResume = new EventEmitter();
|
|
44
|
+
this.onRetry = new EventEmitter();
|
|
45
|
+
this.onRestart = new EventEmitter();
|
|
46
|
+
/** Whether the respective callbacks are wired (so their controls show). */
|
|
47
|
+
this.pauseWired = true;
|
|
48
|
+
this.resumeWired = true;
|
|
49
|
+
this.retryWired = true;
|
|
50
|
+
this.restartWired = true;
|
|
51
|
+
this.said = '';
|
|
52
|
+
this.tagOut = false;
|
|
53
|
+
this.shownTag = '';
|
|
54
|
+
}
|
|
55
|
+
/* ---------- derived values ---------- */
|
|
56
|
+
get n() {
|
|
57
|
+
return this.steps.length;
|
|
58
|
+
}
|
|
59
|
+
get at() {
|
|
60
|
+
return Math.max(0, Math.min(this.step, this.n - 1));
|
|
61
|
+
}
|
|
62
|
+
get cur() {
|
|
63
|
+
return this.steps[this.at] ?? { label: '', unit: '', total: 0 };
|
|
64
|
+
}
|
|
65
|
+
get done() {
|
|
66
|
+
return this.state === 'complete';
|
|
67
|
+
}
|
|
68
|
+
get ind() {
|
|
69
|
+
return this.state === 'indeterminate';
|
|
70
|
+
}
|
|
71
|
+
get sub() {
|
|
72
|
+
return this.done ? 1 : Math.max(0, Math.min(1, this.stepProgress));
|
|
73
|
+
}
|
|
74
|
+
get all() {
|
|
75
|
+
return this.done ? 1 : (this.at + this.sub) / this.n;
|
|
76
|
+
}
|
|
77
|
+
get pct() {
|
|
78
|
+
return Math.round(this.all * 100);
|
|
79
|
+
}
|
|
80
|
+
get subPct() {
|
|
81
|
+
return Math.round(this.sub * 100);
|
|
82
|
+
}
|
|
83
|
+
get code() {
|
|
84
|
+
return CODE[this.state];
|
|
85
|
+
}
|
|
86
|
+
get tagClass() {
|
|
87
|
+
return 'vo-prg-st ' + TAG[this.state][1];
|
|
88
|
+
}
|
|
89
|
+
get words() {
|
|
90
|
+
if (this.valueText !== undefined)
|
|
91
|
+
return this.valueText;
|
|
92
|
+
const at = this.at;
|
|
93
|
+
const n = this.n;
|
|
94
|
+
if (this.ind)
|
|
95
|
+
return 'Preparing the run';
|
|
96
|
+
if (this.state === 'paused')
|
|
97
|
+
return `Paused at step ${at + 1} of ${n}`;
|
|
98
|
+
if (this.state === 'error')
|
|
99
|
+
return `Failed at step ${at + 1} of ${n}`;
|
|
100
|
+
if (this.done)
|
|
101
|
+
return `All ${n} steps done`;
|
|
102
|
+
return `Step ${at + 1} of ${n}, ${this.cur.label.toLowerCase()}`;
|
|
103
|
+
}
|
|
104
|
+
get btn() {
|
|
105
|
+
if (this.state === 'paused')
|
|
106
|
+
return { icon: 'play', label: 'Resume', on: this.resumeWired ? this.onResume : null };
|
|
107
|
+
if (this.done)
|
|
108
|
+
return { icon: 'refresh', label: 'Run again', on: this.restartWired ? this.onRestart : null };
|
|
109
|
+
return { icon: 'pause', label: 'Pause', on: this.pauseWired ? this.onPause : null };
|
|
110
|
+
}
|
|
111
|
+
/* ---------- meter ---------- */
|
|
112
|
+
get warnAt() {
|
|
113
|
+
return this.meter?.warnAt ?? 0.75;
|
|
114
|
+
}
|
|
115
|
+
get dangerAt() {
|
|
116
|
+
return this.meter?.dangerAt ?? 0.9;
|
|
117
|
+
}
|
|
118
|
+
get m() {
|
|
119
|
+
return this.meter ? this.meter.value / this.meter.max : 0;
|
|
120
|
+
}
|
|
121
|
+
get band() {
|
|
122
|
+
if (!this.meter)
|
|
123
|
+
return 0;
|
|
124
|
+
return this.m >= this.dangerAt ? 2 : this.m >= this.warnAt ? 1 : 0;
|
|
125
|
+
}
|
|
126
|
+
get meterFillPct() {
|
|
127
|
+
return Math.min(100, this.m * 100);
|
|
128
|
+
}
|
|
129
|
+
get meterNow() {
|
|
130
|
+
return Math.round(this.meter?.value ?? 0);
|
|
131
|
+
}
|
|
132
|
+
get meterValueText() {
|
|
133
|
+
if (!this.meter)
|
|
134
|
+
return '';
|
|
135
|
+
const base = `${fmt(this.meter.value)} of ${fmt(this.meter.max)} ${this.meter.unit ?? ''}`.trim();
|
|
136
|
+
const tail = ['', ', running low', ', ' + (this.meter.dangerLabel ?? 'almost out').toLowerCase()][this.band];
|
|
137
|
+
return base + tail;
|
|
138
|
+
}
|
|
139
|
+
segFill(j) {
|
|
140
|
+
if (this.done || j < this.at)
|
|
141
|
+
return 1;
|
|
142
|
+
if (j === this.at && !this.ind)
|
|
143
|
+
return this.sub;
|
|
144
|
+
return 0;
|
|
145
|
+
}
|
|
146
|
+
fmtN(n) {
|
|
147
|
+
return fmt(n);
|
|
148
|
+
}
|
|
149
|
+
ngOnChanges(changes) {
|
|
150
|
+
if (this.was === undefined) {
|
|
151
|
+
this.was = this.state;
|
|
152
|
+
this.shownTag = TAG[this.state][0];
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
if (changes['state'] && this.was !== this.state) {
|
|
156
|
+
this.was = this.state;
|
|
157
|
+
// announce only a change of state, never every percent
|
|
158
|
+
const msg = {
|
|
159
|
+
indeterminate: 'Starting',
|
|
160
|
+
running: 'Running',
|
|
161
|
+
paused: 'Paused',
|
|
162
|
+
error: `Step ${this.at + 1} failed: ${this.error}`,
|
|
163
|
+
complete: 'Done. ' + this.words,
|
|
164
|
+
};
|
|
165
|
+
clearTimeout(this.saidTimer);
|
|
166
|
+
this.saidTimer = setTimeout(() => (this.said = msg[this.state]));
|
|
167
|
+
// the tag text blurs out and back in on a state change (Swap)
|
|
168
|
+
this.tagOut = true;
|
|
169
|
+
clearTimeout(this.tagTimer);
|
|
170
|
+
this.tagTimer = setTimeout(() => {
|
|
171
|
+
this.shownTag = TAG[this.state][0];
|
|
172
|
+
this.tagOut = false;
|
|
173
|
+
}, this.motion.reduce() ? 0 : 170);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
ngOnDestroy() {
|
|
177
|
+
clearTimeout(this.saidTimer);
|
|
178
|
+
clearTimeout(this.tagTimer);
|
|
179
|
+
}
|
|
180
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProgressComponent, deps: [{ token: i1.ReducedMotionService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
181
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ProgressComponent, isStandalone: true, selector: "vo-progress", inputs: { title: "title", state: "state", steps: "steps", step: "step", stepProgress: "stepProgress", valueText: "valueText", error: "error", meter: "meter", pauseWired: "pauseWired", resumeWired: "resumeWired", retryWired: "retryWired", restartWired: "restartWired" }, outputs: { onPause: "onPause", onResume: "onResume", onRetry: "onRetry", onRestart: "onRestart" }, usesOnChanges: true, ngImport: i0, template: `
|
|
182
|
+
<div data-vo="" [attr.data-s]="code" class="vo-prg vo-panel">
|
|
183
|
+
<div class="vo-prg-h">
|
|
184
|
+
<span
|
|
185
|
+
class="vo-prg-ring"
|
|
186
|
+
role="progressbar"
|
|
187
|
+
aria-label="Run progress"
|
|
188
|
+
[attr.aria-valuemin]="ind ? null : 0"
|
|
189
|
+
[attr.aria-valuemax]="ind ? null : 100"
|
|
190
|
+
[attr.aria-valuenow]="ind ? null : pct"
|
|
191
|
+
[attr.aria-valuetext]="ind ? 'Preparing the run' : pct + '% of the run'"
|
|
192
|
+
>
|
|
193
|
+
<svg viewBox="0 0 36 36" aria-hidden="true">
|
|
194
|
+
<circle class="vo-tr" cx="18" cy="18" r="15"></circle>
|
|
195
|
+
<circle
|
|
196
|
+
class="vo-fl"
|
|
197
|
+
cx="18"
|
|
198
|
+
cy="18"
|
|
199
|
+
r="15"
|
|
200
|
+
pathLength="100"
|
|
201
|
+
[style.stroke-dasharray]="ind ? null : all * 100 + ' 100'"
|
|
202
|
+
></circle>
|
|
203
|
+
</svg>
|
|
204
|
+
<span class="vo-prg-pc vo-num">
|
|
205
|
+
@if (done) {
|
|
206
|
+
<vo-icon name="check" size="xs" class="vo-enter"></vo-icon>
|
|
207
|
+
} @else if (!ind) {
|
|
208
|
+
{{ pct }}%
|
|
209
|
+
}
|
|
210
|
+
</span>
|
|
211
|
+
</span>
|
|
212
|
+
<div class="vo-prg-t">
|
|
213
|
+
<b>{{ title }}</b>
|
|
214
|
+
<span class="vo-muted vo-prg-vt">{{ words }}</span>
|
|
215
|
+
</div>
|
|
216
|
+
<span class="vo-tag vo-prg-st" [class]="tagClass">
|
|
217
|
+
<span class="vo-sw" [class.vo-out]="tagOut">{{ shownTag }}</span>
|
|
218
|
+
</span>
|
|
219
|
+
@if (btn.on) {
|
|
220
|
+
<button
|
|
221
|
+
type="button"
|
|
222
|
+
class="vo-ib vo-prg-btn"
|
|
223
|
+
[attr.aria-label]="btn.label"
|
|
224
|
+
(click)="btn.on!.emit()"
|
|
225
|
+
[disabled]="state === 'error' || ind"
|
|
226
|
+
[style.visibility]="state === 'error' ? 'hidden' : null"
|
|
227
|
+
>
|
|
228
|
+
<vo-icon [name]="btn.icon"></vo-icon>
|
|
229
|
+
</button>
|
|
230
|
+
}
|
|
231
|
+
</div>
|
|
232
|
+
|
|
233
|
+
<div
|
|
234
|
+
class="vo-prg-seg"
|
|
235
|
+
role="progressbar"
|
|
236
|
+
aria-label="Steps"
|
|
237
|
+
[attr.aria-valuemin]="0"
|
|
238
|
+
[attr.aria-valuemax]="n"
|
|
239
|
+
[attr.aria-valuenow]="done ? n : at"
|
|
240
|
+
[attr.aria-valuetext]="done ? 'All ' + n + ' steps done' : ind ? 'Not started' : 'Step ' + (at + 1) + ' of ' + n"
|
|
241
|
+
>
|
|
242
|
+
@for (s of steps; track $index; let j = $index) {
|
|
243
|
+
<i><b [style.--vo-f]="segFill(j)"></b></i>
|
|
244
|
+
}
|
|
245
|
+
</div>
|
|
246
|
+
|
|
247
|
+
<div class="vo-prg-ll">
|
|
248
|
+
@if (state === 'error') {
|
|
249
|
+
<span class="vo-e vo-enter">
|
|
250
|
+
<vo-icon name="alert" size="xs"></vo-icon>
|
|
251
|
+
<span>{{ error }}</span>
|
|
252
|
+
</span>
|
|
253
|
+
@if (retryWired) {
|
|
254
|
+
<button type="button" class="vo-pill vo-line vo-sm" (click)="onRetry.emit()">
|
|
255
|
+
<vo-icon name="refresh" size="xs"></vo-icon>Retry
|
|
256
|
+
</button>
|
|
257
|
+
}
|
|
258
|
+
} @else if (ind) {
|
|
259
|
+
<span>Getting ready</span><span class="vo-n">Counting</span>
|
|
260
|
+
} @else {
|
|
261
|
+
<span>{{ cur.unit }}</span>
|
|
262
|
+
<span class="vo-n vo-num">{{ fmtN(sub * cur.total) }} of {{ fmtN(cur.total) }}</span>
|
|
263
|
+
}
|
|
264
|
+
</div>
|
|
265
|
+
|
|
266
|
+
<div
|
|
267
|
+
class="vo-prg-lin"
|
|
268
|
+
[class.vo-ind]="ind"
|
|
269
|
+
role="progressbar"
|
|
270
|
+
aria-label="This step"
|
|
271
|
+
[attr.aria-valuemin]="0"
|
|
272
|
+
[attr.aria-valuemax]="100"
|
|
273
|
+
[attr.aria-valuenow]="ind ? null : subPct"
|
|
274
|
+
[attr.aria-valuetext]="ind ? 'Working out how much there is' : fmtN(sub * cur.total) + ' of ' + fmtN(cur.total) + ' ' + cur.unit.toLowerCase()"
|
|
275
|
+
>
|
|
276
|
+
<i [style.width]="ind ? null : sub * 100 + '%'"></i>
|
|
277
|
+
</div>
|
|
278
|
+
|
|
279
|
+
@if (meter) {
|
|
280
|
+
<div class="vo-prg-meter">
|
|
281
|
+
<div class="vo-prg-mh">
|
|
282
|
+
<span>{{ meter.label }}</span>
|
|
283
|
+
<span class="vo-num vo-muted"
|
|
284
|
+
><b class="vo-prg-mv">{{ fmtN(meter.value) }}</b> of {{ fmtN(meter.max) }}</span
|
|
285
|
+
>
|
|
286
|
+
</div>
|
|
287
|
+
<div
|
|
288
|
+
class="vo-prg-mb"
|
|
289
|
+
[class.vo-warn]="band === 1"
|
|
290
|
+
[class.vo-bad]="band === 2"
|
|
291
|
+
role="meter"
|
|
292
|
+
[attr.aria-label]="meter.label"
|
|
293
|
+
[attr.aria-valuemin]="0"
|
|
294
|
+
[attr.aria-valuemax]="meter.max"
|
|
295
|
+
[attr.aria-valuenow]="meterNow"
|
|
296
|
+
[attr.aria-valuetext]="meterValueText"
|
|
297
|
+
>
|
|
298
|
+
<i class="vo-fl" [style.width]="meterFillPct + '%'"></i>
|
|
299
|
+
<i class="vo-th" [style.left]="warnAt * 100 + '%'"></i>
|
|
300
|
+
<i class="vo-th" [style.left]="dangerAt * 100 + '%'"></i>
|
|
301
|
+
</div>
|
|
302
|
+
<div class="vo-prg-ml">
|
|
303
|
+
<span [class.vo-enter]="band > 0">
|
|
304
|
+
@if (band === 2) {
|
|
305
|
+
<span class="vo-tag vo-bad"
|
|
306
|
+
><vo-icon name="alert" size="xs"></vo-icon>{{ meter.dangerLabel ?? 'Almost out' }}</span
|
|
307
|
+
>
|
|
308
|
+
} @else if (band === 1) {
|
|
309
|
+
<span class="vo-tag vo-warn"><vo-icon name="warn" size="xs"></vo-icon>Running low</span>
|
|
310
|
+
} @else {
|
|
311
|
+
<span class="vo-muted">On track</span>
|
|
312
|
+
}
|
|
313
|
+
</span>
|
|
314
|
+
@if (meter.note) {
|
|
315
|
+
<span class="vo-muted">{{ meter.note }}</span>
|
|
316
|
+
}
|
|
317
|
+
</div>
|
|
318
|
+
</div>
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
<p class="vo-prg-sr" aria-live="polite">{{ said }}</p>
|
|
322
|
+
</div>
|
|
323
|
+
`, isInline: true, styles: [".vo-prg{padding:var(--vo-s-4);display:flex;flex-direction:column;gap:var(--vo-s-3);--vo-prg-c:var(--vo-accent-mark,var(--vo-accent))}.vo-prg[data-s=paused]{--vo-prg-c:var(--vo-faint)}.vo-prg[data-s=err]{--vo-prg-c:var(--vo-bad)}.vo-prg[data-s=done]{--vo-prg-c:var(--vo-ok-mark)}.vo-prg-h{display:flex;align-items:center;gap:var(--vo-s-3)}.vo-prg-ring{position:relative;width:44px;height:44px;flex:none;display:grid;place-items:center;color:var(--vo-ok-mark)}.vo-prg-ring>svg{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg)}.vo-prg-ring circle{fill:none;stroke-width:3}.vo-prg-ring .vo-tr{stroke:var(--vo-chip)}.vo-prg-ring .vo-fl{stroke:var(--vo-prg-c);stroke-dasharray:0 100;stroke-linecap:round;transition:stroke-dasharray .6s var(--vo-ease),stroke .3s}.vo-prg[data-s=ind] .vo-prg-ring>svg{animation:vo-rot 1.1s linear infinite}.vo-prg[data-s=ind] .vo-prg-ring .vo-fl{stroke-dasharray:25 100;transition:none}.vo-prg-pc{font-size:13px;font-weight:500;color:var(--vo-fg);line-height:1;letter-spacing:-.02em}.vo-prg-t{flex:1;min-width:0;display:flex;flex-direction:column;font-size:13.5px;line-height:1.4}.vo-prg-t b{font-weight:500}.vo-prg-vt{font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.vo-prg-st{flex:none}.vo-prg-st.vo-run{background:var(--vo-accent-bg);color:var(--vo-accent-fg,var(--vo-accent))}.vo-prg-seg{display:flex;gap:var(--vo-s-1)}.vo-prg-seg i,.vo-prg-lin{position:relative;flex:none;height:6px;border-radius:calc(3px * var(--vo-rk));background:var(--vo-chip);overflow:hidden}.vo-prg-seg i{flex:1}.vo-prg-seg b{position:absolute;inset:0;border-radius:inherit;background:var(--vo-prg-c);transform-origin:left;transform:scaleX(var(--vo-f,0));transition:transform .45s var(--vo-ease),background .3s}.vo-prg-ll{display:flex;align-items:center;justify-content:space-between;gap:var(--vo-s-2);min-height:28px;margin-bottom:calc(var(--vo-s-1) * -1);font-size:12.5px;color:var(--vo-fg2)}.vo-prg-ll .vo-n{color:var(--vo-muted)}.vo-prg-ll .vo-e{display:flex;align-items:center;gap:6px;min-width:0;color:var(--vo-bad)}.vo-prg-ll .vo-e span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.vo-prg-lin i{position:absolute;left:0;top:0;bottom:0;width:0;border-radius:inherit;background:var(--vo-prg-c);transition:width .45s var(--vo-ease),background .3s}.vo-prg-lin.vo-ind i{width:32%;animation:vo-prgsweep 1.3s var(--vo-ease-io) infinite;transition:none}@keyframes vo-prgsweep{0%{transform:translate(-100%)}to{transform:translate(320%)}}.vo-prg-meter{display:flex;flex-direction:column;gap:var(--vo-s-2);margin-top:var(--vo-s-1);padding-top:var(--vo-s-4);border-top:1px solid color-mix(in srgb,var(--vo-line) 50%,transparent)}.vo-prg-mh{display:flex;align-items:baseline;justify-content:space-between;gap:var(--vo-s-2);font-size:13px}.vo-prg-mh b{font-weight:500;color:var(--vo-fg)}.vo-prg-mh .vo-muted{font-size:12.5px}.vo-prg-mb{position:relative;height:8px;border-radius:calc(4px * var(--vo-rk));background:var(--vo-chip)}.vo-prg-mb .vo-fl{position:absolute;left:0;top:0;bottom:0;width:0;border-radius:inherit;background:var(--vo-accent-mark,var(--vo-accent));transition:width .6s var(--vo-ease),background .3s}.vo-prg-mb.vo-warn .vo-fl{background:var(--vo-warn-mark)}.vo-prg-mb.vo-bad .vo-fl{background:var(--vo-bad)}.vo-prg-mb .vo-th{position:absolute;top:-3px;bottom:-3px;width:2px;margin-left:-1px;border-radius:1px;background:color-mix(in srgb,var(--vo-fg) 35%,transparent)}.vo-prg-ml{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--vo-s-1) var(--vo-s-2);min-height:20px;font-size:12px}.vo-prg-ml .vo-tag .vo-i{margin-left:-1px}.vo-prg-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}@media (prefers-reduced-motion:reduce){.vo-prg[data-s=ind] .vo-prg-ring>svg{animation:none}.vo-prg-lin.vo-ind i{animation:none;width:100%;opacity:.35}}\n"], dependencies: [{ kind: "component", type: VoIconComponent, selector: "vo-icon", inputs: ["name", "size"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
324
|
+
}
|
|
325
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProgressComponent, decorators: [{
|
|
326
|
+
type: Component,
|
|
327
|
+
args: [{ selector: 'vo-progress', standalone: true, encapsulation: ViewEncapsulation.None, imports: [VoIconComponent], template: `
|
|
328
|
+
<div data-vo="" [attr.data-s]="code" class="vo-prg vo-panel">
|
|
329
|
+
<div class="vo-prg-h">
|
|
330
|
+
<span
|
|
331
|
+
class="vo-prg-ring"
|
|
332
|
+
role="progressbar"
|
|
333
|
+
aria-label="Run progress"
|
|
334
|
+
[attr.aria-valuemin]="ind ? null : 0"
|
|
335
|
+
[attr.aria-valuemax]="ind ? null : 100"
|
|
336
|
+
[attr.aria-valuenow]="ind ? null : pct"
|
|
337
|
+
[attr.aria-valuetext]="ind ? 'Preparing the run' : pct + '% of the run'"
|
|
338
|
+
>
|
|
339
|
+
<svg viewBox="0 0 36 36" aria-hidden="true">
|
|
340
|
+
<circle class="vo-tr" cx="18" cy="18" r="15"></circle>
|
|
341
|
+
<circle
|
|
342
|
+
class="vo-fl"
|
|
343
|
+
cx="18"
|
|
344
|
+
cy="18"
|
|
345
|
+
r="15"
|
|
346
|
+
pathLength="100"
|
|
347
|
+
[style.stroke-dasharray]="ind ? null : all * 100 + ' 100'"
|
|
348
|
+
></circle>
|
|
349
|
+
</svg>
|
|
350
|
+
<span class="vo-prg-pc vo-num">
|
|
351
|
+
@if (done) {
|
|
352
|
+
<vo-icon name="check" size="xs" class="vo-enter"></vo-icon>
|
|
353
|
+
} @else if (!ind) {
|
|
354
|
+
{{ pct }}%
|
|
355
|
+
}
|
|
356
|
+
</span>
|
|
357
|
+
</span>
|
|
358
|
+
<div class="vo-prg-t">
|
|
359
|
+
<b>{{ title }}</b>
|
|
360
|
+
<span class="vo-muted vo-prg-vt">{{ words }}</span>
|
|
361
|
+
</div>
|
|
362
|
+
<span class="vo-tag vo-prg-st" [class]="tagClass">
|
|
363
|
+
<span class="vo-sw" [class.vo-out]="tagOut">{{ shownTag }}</span>
|
|
364
|
+
</span>
|
|
365
|
+
@if (btn.on) {
|
|
366
|
+
<button
|
|
367
|
+
type="button"
|
|
368
|
+
class="vo-ib vo-prg-btn"
|
|
369
|
+
[attr.aria-label]="btn.label"
|
|
370
|
+
(click)="btn.on!.emit()"
|
|
371
|
+
[disabled]="state === 'error' || ind"
|
|
372
|
+
[style.visibility]="state === 'error' ? 'hidden' : null"
|
|
373
|
+
>
|
|
374
|
+
<vo-icon [name]="btn.icon"></vo-icon>
|
|
375
|
+
</button>
|
|
376
|
+
}
|
|
377
|
+
</div>
|
|
378
|
+
|
|
379
|
+
<div
|
|
380
|
+
class="vo-prg-seg"
|
|
381
|
+
role="progressbar"
|
|
382
|
+
aria-label="Steps"
|
|
383
|
+
[attr.aria-valuemin]="0"
|
|
384
|
+
[attr.aria-valuemax]="n"
|
|
385
|
+
[attr.aria-valuenow]="done ? n : at"
|
|
386
|
+
[attr.aria-valuetext]="done ? 'All ' + n + ' steps done' : ind ? 'Not started' : 'Step ' + (at + 1) + ' of ' + n"
|
|
387
|
+
>
|
|
388
|
+
@for (s of steps; track $index; let j = $index) {
|
|
389
|
+
<i><b [style.--vo-f]="segFill(j)"></b></i>
|
|
390
|
+
}
|
|
391
|
+
</div>
|
|
392
|
+
|
|
393
|
+
<div class="vo-prg-ll">
|
|
394
|
+
@if (state === 'error') {
|
|
395
|
+
<span class="vo-e vo-enter">
|
|
396
|
+
<vo-icon name="alert" size="xs"></vo-icon>
|
|
397
|
+
<span>{{ error }}</span>
|
|
398
|
+
</span>
|
|
399
|
+
@if (retryWired) {
|
|
400
|
+
<button type="button" class="vo-pill vo-line vo-sm" (click)="onRetry.emit()">
|
|
401
|
+
<vo-icon name="refresh" size="xs"></vo-icon>Retry
|
|
402
|
+
</button>
|
|
403
|
+
}
|
|
404
|
+
} @else if (ind) {
|
|
405
|
+
<span>Getting ready</span><span class="vo-n">Counting</span>
|
|
406
|
+
} @else {
|
|
407
|
+
<span>{{ cur.unit }}</span>
|
|
408
|
+
<span class="vo-n vo-num">{{ fmtN(sub * cur.total) }} of {{ fmtN(cur.total) }}</span>
|
|
409
|
+
}
|
|
410
|
+
</div>
|
|
411
|
+
|
|
412
|
+
<div
|
|
413
|
+
class="vo-prg-lin"
|
|
414
|
+
[class.vo-ind]="ind"
|
|
415
|
+
role="progressbar"
|
|
416
|
+
aria-label="This step"
|
|
417
|
+
[attr.aria-valuemin]="0"
|
|
418
|
+
[attr.aria-valuemax]="100"
|
|
419
|
+
[attr.aria-valuenow]="ind ? null : subPct"
|
|
420
|
+
[attr.aria-valuetext]="ind ? 'Working out how much there is' : fmtN(sub * cur.total) + ' of ' + fmtN(cur.total) + ' ' + cur.unit.toLowerCase()"
|
|
421
|
+
>
|
|
422
|
+
<i [style.width]="ind ? null : sub * 100 + '%'"></i>
|
|
423
|
+
</div>
|
|
424
|
+
|
|
425
|
+
@if (meter) {
|
|
426
|
+
<div class="vo-prg-meter">
|
|
427
|
+
<div class="vo-prg-mh">
|
|
428
|
+
<span>{{ meter.label }}</span>
|
|
429
|
+
<span class="vo-num vo-muted"
|
|
430
|
+
><b class="vo-prg-mv">{{ fmtN(meter.value) }}</b> of {{ fmtN(meter.max) }}</span
|
|
431
|
+
>
|
|
432
|
+
</div>
|
|
433
|
+
<div
|
|
434
|
+
class="vo-prg-mb"
|
|
435
|
+
[class.vo-warn]="band === 1"
|
|
436
|
+
[class.vo-bad]="band === 2"
|
|
437
|
+
role="meter"
|
|
438
|
+
[attr.aria-label]="meter.label"
|
|
439
|
+
[attr.aria-valuemin]="0"
|
|
440
|
+
[attr.aria-valuemax]="meter.max"
|
|
441
|
+
[attr.aria-valuenow]="meterNow"
|
|
442
|
+
[attr.aria-valuetext]="meterValueText"
|
|
443
|
+
>
|
|
444
|
+
<i class="vo-fl" [style.width]="meterFillPct + '%'"></i>
|
|
445
|
+
<i class="vo-th" [style.left]="warnAt * 100 + '%'"></i>
|
|
446
|
+
<i class="vo-th" [style.left]="dangerAt * 100 + '%'"></i>
|
|
447
|
+
</div>
|
|
448
|
+
<div class="vo-prg-ml">
|
|
449
|
+
<span [class.vo-enter]="band > 0">
|
|
450
|
+
@if (band === 2) {
|
|
451
|
+
<span class="vo-tag vo-bad"
|
|
452
|
+
><vo-icon name="alert" size="xs"></vo-icon>{{ meter.dangerLabel ?? 'Almost out' }}</span
|
|
453
|
+
>
|
|
454
|
+
} @else if (band === 1) {
|
|
455
|
+
<span class="vo-tag vo-warn"><vo-icon name="warn" size="xs"></vo-icon>Running low</span>
|
|
456
|
+
} @else {
|
|
457
|
+
<span class="vo-muted">On track</span>
|
|
458
|
+
}
|
|
459
|
+
</span>
|
|
460
|
+
@if (meter.note) {
|
|
461
|
+
<span class="vo-muted">{{ meter.note }}</span>
|
|
462
|
+
}
|
|
463
|
+
</div>
|
|
464
|
+
</div>
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
<p class="vo-prg-sr" aria-live="polite">{{ said }}</p>
|
|
468
|
+
</div>
|
|
469
|
+
`, styles: [".vo-prg{padding:var(--vo-s-4);display:flex;flex-direction:column;gap:var(--vo-s-3);--vo-prg-c:var(--vo-accent-mark,var(--vo-accent))}.vo-prg[data-s=paused]{--vo-prg-c:var(--vo-faint)}.vo-prg[data-s=err]{--vo-prg-c:var(--vo-bad)}.vo-prg[data-s=done]{--vo-prg-c:var(--vo-ok-mark)}.vo-prg-h{display:flex;align-items:center;gap:var(--vo-s-3)}.vo-prg-ring{position:relative;width:44px;height:44px;flex:none;display:grid;place-items:center;color:var(--vo-ok-mark)}.vo-prg-ring>svg{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg)}.vo-prg-ring circle{fill:none;stroke-width:3}.vo-prg-ring .vo-tr{stroke:var(--vo-chip)}.vo-prg-ring .vo-fl{stroke:var(--vo-prg-c);stroke-dasharray:0 100;stroke-linecap:round;transition:stroke-dasharray .6s var(--vo-ease),stroke .3s}.vo-prg[data-s=ind] .vo-prg-ring>svg{animation:vo-rot 1.1s linear infinite}.vo-prg[data-s=ind] .vo-prg-ring .vo-fl{stroke-dasharray:25 100;transition:none}.vo-prg-pc{font-size:13px;font-weight:500;color:var(--vo-fg);line-height:1;letter-spacing:-.02em}.vo-prg-t{flex:1;min-width:0;display:flex;flex-direction:column;font-size:13.5px;line-height:1.4}.vo-prg-t b{font-weight:500}.vo-prg-vt{font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.vo-prg-st{flex:none}.vo-prg-st.vo-run{background:var(--vo-accent-bg);color:var(--vo-accent-fg,var(--vo-accent))}.vo-prg-seg{display:flex;gap:var(--vo-s-1)}.vo-prg-seg i,.vo-prg-lin{position:relative;flex:none;height:6px;border-radius:calc(3px * var(--vo-rk));background:var(--vo-chip);overflow:hidden}.vo-prg-seg i{flex:1}.vo-prg-seg b{position:absolute;inset:0;border-radius:inherit;background:var(--vo-prg-c);transform-origin:left;transform:scaleX(var(--vo-f,0));transition:transform .45s var(--vo-ease),background .3s}.vo-prg-ll{display:flex;align-items:center;justify-content:space-between;gap:var(--vo-s-2);min-height:28px;margin-bottom:calc(var(--vo-s-1) * -1);font-size:12.5px;color:var(--vo-fg2)}.vo-prg-ll .vo-n{color:var(--vo-muted)}.vo-prg-ll .vo-e{display:flex;align-items:center;gap:6px;min-width:0;color:var(--vo-bad)}.vo-prg-ll .vo-e span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.vo-prg-lin i{position:absolute;left:0;top:0;bottom:0;width:0;border-radius:inherit;background:var(--vo-prg-c);transition:width .45s var(--vo-ease),background .3s}.vo-prg-lin.vo-ind i{width:32%;animation:vo-prgsweep 1.3s var(--vo-ease-io) infinite;transition:none}@keyframes vo-prgsweep{0%{transform:translate(-100%)}to{transform:translate(320%)}}.vo-prg-meter{display:flex;flex-direction:column;gap:var(--vo-s-2);margin-top:var(--vo-s-1);padding-top:var(--vo-s-4);border-top:1px solid color-mix(in srgb,var(--vo-line) 50%,transparent)}.vo-prg-mh{display:flex;align-items:baseline;justify-content:space-between;gap:var(--vo-s-2);font-size:13px}.vo-prg-mh b{font-weight:500;color:var(--vo-fg)}.vo-prg-mh .vo-muted{font-size:12.5px}.vo-prg-mb{position:relative;height:8px;border-radius:calc(4px * var(--vo-rk));background:var(--vo-chip)}.vo-prg-mb .vo-fl{position:absolute;left:0;top:0;bottom:0;width:0;border-radius:inherit;background:var(--vo-accent-mark,var(--vo-accent));transition:width .6s var(--vo-ease),background .3s}.vo-prg-mb.vo-warn .vo-fl{background:var(--vo-warn-mark)}.vo-prg-mb.vo-bad .vo-fl{background:var(--vo-bad)}.vo-prg-mb .vo-th{position:absolute;top:-3px;bottom:-3px;width:2px;margin-left:-1px;border-radius:1px;background:color-mix(in srgb,var(--vo-fg) 35%,transparent)}.vo-prg-ml{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--vo-s-1) var(--vo-s-2);min-height:20px;font-size:12px}.vo-prg-ml .vo-tag .vo-i{margin-left:-1px}.vo-prg-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}@media (prefers-reduced-motion:reduce){.vo-prg[data-s=ind] .vo-prg-ring>svg{animation:none}.vo-prg-lin.vo-ind i{animation:none;width:100%;opacity:.35}}\n"] }]
|
|
470
|
+
}], ctorParameters: () => [{ type: i1.ReducedMotionService }], propDecorators: { title: [{
|
|
471
|
+
type: Input
|
|
472
|
+
}], state: [{
|
|
473
|
+
type: Input
|
|
474
|
+
}], steps: [{
|
|
475
|
+
type: Input
|
|
476
|
+
}], step: [{
|
|
477
|
+
type: Input
|
|
478
|
+
}], stepProgress: [{
|
|
479
|
+
type: Input
|
|
480
|
+
}], valueText: [{
|
|
481
|
+
type: Input
|
|
482
|
+
}], error: [{
|
|
483
|
+
type: Input
|
|
484
|
+
}], meter: [{
|
|
485
|
+
type: Input
|
|
486
|
+
}], onPause: [{
|
|
487
|
+
type: Output
|
|
488
|
+
}], onResume: [{
|
|
489
|
+
type: Output
|
|
490
|
+
}], onRetry: [{
|
|
491
|
+
type: Output
|
|
492
|
+
}], onRestart: [{
|
|
493
|
+
type: Output
|
|
494
|
+
}], pauseWired: [{
|
|
495
|
+
type: Input
|
|
496
|
+
}], resumeWired: [{
|
|
497
|
+
type: Input
|
|
498
|
+
}], retryWired: [{
|
|
499
|
+
type: Input
|
|
500
|
+
}], restartWired: [{
|
|
501
|
+
type: Input
|
|
502
|
+
}] } });
|
|
503
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvZ3Jlc3MvcHJvZ3Jlc3MuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1EQUFtRDtBQUNuRCxFQUFFO0FBQ0YsZ0VBQWdFO0FBQ2hFLGlGQUFpRjtBQUNqRiw4RUFBOEU7QUFDOUUsNkVBQTZFO0FBQzdFLDRFQUE0RTtBQUM1RSxrQ0FBa0M7QUFFbEMsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUErQnpELE1BQU0sSUFBSSxHQUFrQztJQUMxQyxhQUFhLEVBQUUsS0FBSztJQUNwQixPQUFPLEVBQUUsS0FBSztJQUNkLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLEtBQUssRUFBRSxLQUFLO0lBQ1osUUFBUSxFQUFFLE1BQU07Q0FDakIsQ0FBQztBQUNGLE1BQU0sR0FBRyxHQUE0QztJQUNuRCxhQUFhLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO0lBQy9CLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUM7SUFDOUIsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztJQUN0QixLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDO0lBQzNCLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7Q0FDNUIsQ0FBQztBQUNGLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBUyxFQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUV6RSxrRkFBa0Y7QUF1SmxGLE1BQU0sT0FBTyxpQkFBaUI7SUFpQzVCLFlBQTZCLE1BQTRC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QUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmcmFtZXdvcmsvYW5ndWxhci9wcm9ncmVzcy9wcm9ncmVzcy5jb21wb25lbnQudHNcbi8vXG4vLyBOYXRpdmUgQW5ndWxhciBwb3J0IG9mIGZyYW1ld29yay9yZWFjdC9wcm9ncmVzcy9Qcm9ncmVzcy50c3guXG4vLyBBIHJ1bidzIHByb2dyZXNzIHRocmVlIHdheXMgKGEgcmluZyBmb3IgdGhlIHdob2xlIHJ1biwgc2VnbWVudHMgZm9yIGl0cyBzdGVwcyxcbi8vIGEgYmFyIGZvciB0aGUgc3RlcCBpbiBoYW5kKSwgd2l0aCBzdGF0ZSBjb2xvdXJzIChydW5uaW5nID0gYWNjZW50LCBwYXVzZWQgPVxuLy8gZ3JleSwgZXJyb3IgPSByZWQgKyBSZXRyeSwgY29tcGxldGUgPSBncmVlbikgYW5kIGFuIG9wdGlvbmFsIGNyZWRpdHMgbWV0ZXJcbi8vIHRoYXQgd2FybnMgaW4gd29yZHMgYXMgaXQgZmlsbHMuIElucHV0cyBtaXJyb3IgdGhlIFJlYWN0IHByb3BzOyBjYWxsYmFja3Ncbi8vIGJlY29tZSBAT3V0cHV0KCkgRXZlbnRFbWl0dGVycy5cblxuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWb0ljb25Db21wb25lbnQgfSBmcm9tICcuLi9jb3JlL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IFJlZHVjZWRNb3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9yZWR1Y2VkLW1vdGlvbi5zZXJ2aWNlJztcblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3NTdGF0ZSA9ICdpbmRldGVybWluYXRlJyB8ICdydW5uaW5nJyB8ICdwYXVzZWQnIHwgJ2Vycm9yJyB8ICdjb21wbGV0ZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZ3Jlc3NTdGVwIHtcbiAgLyoqIExpa2UgXCJJbmRleGluZyBmaWxlc1wiLiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogV2hhdCB0aGUgc3RlcCBjb3VudHMsIGxpa2UgXCJGaWxlc1wiLiAqL1xuICB1bml0OiBzdHJpbmc7XG4gIC8qKiBIb3cgbWFueSB0aGVyZSBhcmUgdG8gY291bnQsIGxpa2UgMjAwMC4gKi9cbiAgdG90YWw6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9ncmVzc01ldGVyIHtcbiAgLyoqIExpa2UgXCJDcmVkaXRzIHRoaXMgbW9udGhcIi4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlcjtcbiAgbWF4OiBudW1iZXI7XG4gIC8qKiBUaGUgdW5pdCBpbiB0aGUgbWV0ZXIncyBzcG9rZW4gdmFsdWUsIGxpa2UgXCJjcmVkaXRzXCIuICovXG4gIHVuaXQ/OiBzdHJpbmc7XG4gIC8qKiBTaGFyZSBvZiBtYXggd2hlcmUgaXQgc2F5cyBcIlJ1bm5pbmcgbG93XCIgKDAuNzUpLiAqL1xuICB3YXJuQXQ/OiBudW1iZXI7XG4gIC8qKiBTaGFyZSBvZiBtYXggd2hlcmUgaXQgd2FybnMgbW9yZSBzdHJvbmdseSAoMC45KS4gKi9cbiAgZGFuZ2VyQXQ/OiBudW1iZXI7XG4gIC8qKiBUaGUgd29yZHMgZm9yIHRoZSBzdHJvbmdlciB3YXJuaW5nIChcIkFsbW9zdCBvdXRcIikuICovXG4gIGRhbmdlckxhYmVsPzogc3RyaW5nO1xuICAvKiogUXVpZXQgdGV4dCBhdCB0aGUgcmlnaHQgdW5kZXIgdGhlIG1ldGVyLCBsaWtlIFwiUmVzZXRzIERlYyAxXCIuICovXG4gIG5vdGU/OiBzdHJpbmc7XG59XG5cbmNvbnN0IENPREU6IFJlY29yZDxQcm9ncmVzc1N0YXRlLCBzdHJpbmc+ID0ge1xuICBpbmRldGVybWluYXRlOiAnaW5kJyxcbiAgcnVubmluZzogJ3J1bicsXG4gIHBhdXNlZDogJ3BhdXNlZCcsXG4gIGVycm9yOiAnZXJyJyxcbiAgY29tcGxldGU6ICdkb25lJyxcbn07XG5jb25zdCBUQUc6IFJlY29yZDxQcm9ncmVzc1N0YXRlLCBbc3RyaW5nLCBzdHJpbmddPiA9IHtcbiAgaW5kZXRlcm1pbmF0ZTogWydTdGFydGluZycsICcnXSxcbiAgcnVubmluZzogWydSdW5uaW5nJywgJ3ZvLXJ1biddLFxuICBwYXVzZWQ6IFsnUGF1c2VkJywgJyddLFxuICBlcnJvcjogWydGYWlsZWQnLCAndm8tYmFkJ10sXG4gIGNvbXBsZXRlOiBbJ0RvbmUnLCAndm8tb2snXSxcbn07XG5jb25zdCBmbXQgPSAobjogbnVtYmVyKTogc3RyaW5nID0+IE1hdGgucm91bmQobikudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJyk7XG5cbi8qKiBBIHJ1bidzIHByb2dyZXNzIHRocmVlIHdheXMsIHdpdGggYW4gb3B0aW9uYWwgbWV0ZXIgdGhhdCB3YXJucyBhcyBpdCBmaWxscy4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZvLXByb2dyZXNzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1ZvSWNvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBkYXRhLXZvPVwiXCIgW2F0dHIuZGF0YS1zXT1cImNvZGVcIiBjbGFzcz1cInZvLXByZyB2by1wYW5lbFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInZvLXByZy1oXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJ2by1wcmctcmluZ1wiXG4gICAgICAgICAgcm9sZT1cInByb2dyZXNzYmFyXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiUnVuIHByb2dyZXNzXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWluXT1cImluZCA/IG51bGwgOiAwXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWF4XT1cImluZCA/IG51bGwgOiAxMDBcIlxuICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwiaW5kID8gbnVsbCA6IHBjdFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZXRleHRdPVwiaW5kID8gJ1ByZXBhcmluZyB0aGUgcnVuJyA6IHBjdCArICclIG9mIHRoZSBydW4nXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAzNiAzNlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz1cInZvLXRyXCIgY3g9XCIxOFwiIGN5PVwiMThcIiByPVwiMTVcIj48L2NpcmNsZT5cbiAgICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgICAgY2xhc3M9XCJ2by1mbFwiXG4gICAgICAgICAgICAgIGN4PVwiMThcIlxuICAgICAgICAgICAgICBjeT1cIjE4XCJcbiAgICAgICAgICAgICAgcj1cIjE1XCJcbiAgICAgICAgICAgICAgcGF0aExlbmd0aD1cIjEwMFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5zdHJva2UtZGFzaGFycmF5XT1cImluZCA/IG51bGwgOiBhbGwgKiAxMDAgKyAnIDEwMCdcIlxuICAgICAgICAgICAgPjwvY2lyY2xlPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidm8tcHJnLXBjIHZvLW51bVwiPlxuICAgICAgICAgICAgQGlmIChkb25lKSB7XG4gICAgICAgICAgICAgIDx2by1pY29uIG5hbWU9XCJjaGVja1wiIHNpemU9XCJ4c1wiIGNsYXNzPVwidm8tZW50ZXJcIj48L3ZvLWljb24+XG4gICAgICAgICAgICB9IEBlbHNlIGlmICghaW5kKSB7XG4gICAgICAgICAgICAgIHt7IHBjdCB9fSVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZvLXByZy10XCI+XG4gICAgICAgICAgPGI+e3sgdGl0bGUgfX08L2I+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2by1tdXRlZCB2by1wcmctdnRcIj57eyB3b3JkcyB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidm8tdGFnIHZvLXByZy1zdFwiIFtjbGFzc109XCJ0YWdDbGFzc1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidm8tc3dcIiBbY2xhc3Mudm8tb3V0XT1cInRhZ091dFwiPnt7IHNob3duVGFnIH19PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIEBpZiAoYnRuLm9uKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInZvLWliIHZvLXByZy1idG5cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJidG4ubGFiZWxcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImJ0bi5vbiEuZW1pdCgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzdGF0ZSA9PT0gJ2Vycm9yJyB8fCBpbmRcIlxuICAgICAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwic3RhdGUgPT09ICdlcnJvcicgPyAnaGlkZGVuJyA6IG51bGxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx2by1pY29uIFtuYW1lXT1cImJ0bi5pY29uXCI+PC92by1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInZvLXByZy1zZWdcIlxuICAgICAgICByb2xlPVwicHJvZ3Jlc3NiYXJcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiU3RlcHNcIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWluXT1cIjBcIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWF4XT1cIm5cIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cImRvbmUgPyBuIDogYXRcIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVldGV4dF09XCJkb25lID8gJ0FsbCAnICsgbiArICcgc3RlcHMgZG9uZScgOiBpbmQgPyAnTm90IHN0YXJ0ZWQnIDogJ1N0ZXAgJyArIChhdCArIDEpICsgJyBvZiAnICsgblwiXG4gICAgICA+XG4gICAgICAgIEBmb3IgKHMgb2Ygc3RlcHM7IHRyYWNrICRpbmRleDsgbGV0IGogPSAkaW5kZXgpIHtcbiAgICAgICAgICA8aT48YiBbc3R5bGUuLS12by1mXT1cInNlZ0ZpbGwoailcIj48L2I+PC9pPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInZvLXByZy1sbFwiPlxuICAgICAgICBAaWYgKHN0YXRlID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2by1lIHZvLWVudGVyXCI+XG4gICAgICAgICAgICA8dm8taWNvbiBuYW1lPVwiYWxlcnRcIiBzaXplPVwieHNcIj48L3ZvLWljb24+XG4gICAgICAgICAgICA8c3Bhbj57eyBlcnJvciB9fTwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgQGlmIChyZXRyeVdpcmVkKSB7XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInZvLXBpbGwgdm8tbGluZSB2by1zbVwiIChjbGljayk9XCJvblJldHJ5LmVtaXQoKVwiPlxuICAgICAgICAgICAgICA8dm8taWNvbiBuYW1lPVwicmVmcmVzaFwiIHNpemU9XCJ4c1wiPjwvdm8taWNvbj5SZXRyeVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmIChpbmQpIHtcbiAgICAgICAgICA8c3Bhbj5HZXR0aW5nIHJlYWR5PC9zcGFuPjxzcGFuIGNsYXNzPVwidm8tblwiPkNvdW50aW5nPC9zcGFuPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8c3Bhbj57eyBjdXIudW5pdCB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInZvLW4gdm8tbnVtXCI+e3sgZm10TihzdWIgKiBjdXIudG90YWwpIH19IG9mIHt7IGZtdE4oY3VyLnRvdGFsKSB9fTwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ2by1wcmctbGluXCJcbiAgICAgICAgW2NsYXNzLnZvLWluZF09XCJpbmRcIlxuICAgICAgICByb2xlPVwicHJvZ3Jlc3NiYXJcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiVGhpcyBzdGVwXCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1pbl09XCIwXCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1heF09XCIxMDBcIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cImluZCA/IG51bGwgOiBzdWJQY3RcIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVldGV4dF09XCJpbmQgPyAnV29ya2luZyBvdXQgaG93IG11Y2ggdGhlcmUgaXMnIDogZm10TihzdWIgKiBjdXIudG90YWwpICsgJyBvZiAnICsgZm10TihjdXIudG90YWwpICsgJyAnICsgY3VyLnVuaXQudG9Mb3dlckNhc2UoKVwiXG4gICAgICA+XG4gICAgICAgIDxpIFtzdHlsZS53aWR0aF09XCJpbmQgPyBudWxsIDogc3ViICogMTAwICsgJyUnXCI+PC9pPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIEBpZiAobWV0ZXIpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInZvLXByZy1tZXRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2by1wcmctbWhcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IG1ldGVyLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2by1udW0gdm8tbXV0ZWRcIlxuICAgICAgICAgICAgICA+PGIgY2xhc3M9XCJ2by1wcmctbXZcIj57eyBmbXROKG1ldGVyLnZhbHVlKSB9fTwvYj4gb2Yge3sgZm10TihtZXRlci5tYXgpIH19PC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ2by1wcmctbWJcIlxuICAgICAgICAgICAgW2NsYXNzLnZvLXdhcm5dPVwiYmFuZCA9PT0gMVwiXG4gICAgICAgICAgICBbY2xhc3Mudm8tYmFkXT1cImJhbmQgPT09IDJcIlxuICAgICAgICAgICAgcm9sZT1cIm1ldGVyXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibWV0ZXIubGFiZWxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1pbl09XCIwXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwibWV0ZXIubWF4XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwibWV0ZXJOb3dcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZXRleHRdPVwibWV0ZXJWYWx1ZVRleHRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwidm8tZmxcIiBbc3R5bGUud2lkdGhdPVwibWV0ZXJGaWxsUGN0ICsgJyUnXCI+PC9pPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJ2by10aFwiIFtzdHlsZS5sZWZ0XT1cIndhcm5BdCAqIDEwMCArICclJ1wiPjwvaT5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwidm8tdGhcIiBbc3R5bGUubGVmdF09XCJkYW5nZXJBdCAqIDEwMCArICclJ1wiPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidm8tcHJnLW1sXCI+XG4gICAgICAgICAgICA8c3BhbiBbY2xhc3Mudm8tZW50ZXJdPVwiYmFuZCA+IDBcIj5cbiAgICAgICAgICAgICAgQGlmIChiYW5kID09PSAyKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2by10YWcgdm8tYmFkXCJcbiAgICAgICAgICAgICAgICAgID48dm8taWNvbiBuYW1lPVwiYWxlcnRcIiBzaXplPVwieHNcIj48L3ZvLWljb24+e3sgbWV0ZXIuZGFuZ2VyTGFiZWwgPz8gJ0FsbW9zdCBvdXQnIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB9IEBlbHNlIGlmIChiYW5kID09PSAxKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2by10YWcgdm8td2FyblwiPjx2by1pY29uIG5hbWU9XCJ3YXJuXCIgc2l6ZT1cInhzXCI+PC92by1pY29uPlJ1bm5pbmcgbG93PC9zcGFuPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZvLW11dGVkXCI+T24gdHJhY2s8L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAobWV0ZXIubm90ZSkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZvLW11dGVkXCI+e3sgbWV0ZXIubm90ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDxwIGNsYXNzPVwidm8tcHJnLXNyXCIgYXJpYS1saXZlPVwicG9saXRlXCI+e3sgc2FpZCB9fTwvcD5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmw6ICcuL3Byb2dyZXNzLmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIFByb2dyZXNzQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAvKiogTGlrZSBcIkluZGV4aW5nIHRoZSBkb2NzXCIuICovXG4gIEBJbnB1dCgpIHRpdGxlID0gJyc7XG4gIEBJbnB1dCgpIHN0YXRlOiBQcm9ncmVzc1N0YXRlID0gJ3J1bm5pbmcnO1xuICBASW5wdXQoKSBzdGVwczogUHJvZ3Jlc3NTdGVwW10gPSBbXTtcbiAgLyoqIFRoZSBzdGVwIGluIGhhbmQsIGZyb20gMC4gKi9cbiAgQElucHV0KCkgc3RlcCA9IDA7XG4gIC8qKiBIb3cgZmFyIHRoZSBzdGVwIGluIGhhbmQgaXMsIDAgdG8gMS4gKi9cbiAgQElucHV0KCkgc3RlcFByb2dyZXNzID0gMDtcbiAgLyoqIFRoZSBsaW5lIHVuZGVyIHRoZSB0aXRsZS4gRGVmYXVsdHMgdG8gXCJTdGVwIDMgb2YgNSwgaW5kZXhpbmcgZmlsZXNcIi4gKi9cbiAgQElucHV0KCkgdmFsdWVUZXh0Pzogc3RyaW5nO1xuICAvKiogV2hhdCBmYWlsZWQsIHNob3duIG92ZXIgdGhlIGJhciB3aXRoIGEgUmV0cnkgYnV0dG9uIHdoaWxlIHN0YXRlIGlzIFwiZXJyb3JcIi4gKi9cbiAgQElucHV0KCkgZXJyb3IgPSAnVGhlIHN0ZXAgZmFpbGVkJztcbiAgQElucHV0KCkgbWV0ZXI/OiBQcm9ncmVzc01ldGVyO1xuXG4gIEBPdXRwdXQoKSBvblBhdXNlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgb25SZXN1bWUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvblJldHJ5ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgb25SZXN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSByZXNwZWN0aXZlIGNhbGxiYWNrcyBhcmUgd2lyZWQgKHNvIHRoZWlyIGNvbnRyb2xzIHNob3cpLiAqL1xuICBASW5wdXQoKSBwYXVzZVdpcmVkID0gdHJ1ZTtcbiAgQElucHV0KCkgcmVzdW1lV2lyZWQgPSB0cnVlO1xuICBASW5wdXQoKSByZXRyeVdpcmVkID0gdHJ1ZTtcbiAgQElucHV0KCkgcmVzdGFydFdpcmVkID0gdHJ1ZTtcblxuICBzYWlkID0gJyc7XG4gIHRhZ091dCA9IGZhbHNlO1xuICBwcml2YXRlIHdhcz86IFByb2dyZXNzU3RhdGU7XG4gIHByaXZhdGUgc2FpZFRpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgdGFnVGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgc2hvd25UYWcgPSAnJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG1vdGlvbjogUmVkdWNlZE1vdGlvblNlcnZpY2UpIHt9XG5cbiAgLyogLS0tLS0tLS0tLSBkZXJpdmVkIHZhbHVlcyAtLS0tLS0tLS0tICovXG4gIGdldCBuKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHMubGVuZ3RoO1xuICB9XG4gIGdldCBhdCgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbih0aGlzLnN0ZXAsIHRoaXMubiAtIDEpKTtcbiAgfVxuICBnZXQgY3VyKCk6IFByb2dyZXNzU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHNbdGhpcy5hdF0gPz8geyBsYWJlbDogJycsIHVuaXQ6ICcnLCB0b3RhbDogMCB9O1xuICB9XG4gIGdldCBkb25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlID09PSAnY29tcGxldGUnO1xuICB9XG4gIGdldCBpbmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09ICdpbmRldGVybWluYXRlJztcbiAgfVxuICBnZXQgc3ViKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZG9uZSA/IDEgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB0aGlzLnN0ZXBQcm9ncmVzcykpO1xuICB9XG4gIGdldCBhbGwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5kb25lID8gMSA6ICh0aGlzLmF0ICsgdGhpcy5zdWIpIC8gdGhpcy5uO1xuICB9XG4gIGdldCBwY3QoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLmFsbCAqIDEwMCk7XG4gIH1cbiAgZ2V0IHN1YlBjdCgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuc3ViICogMTAwKTtcbiAgfVxuICBnZXQgY29kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBDT0RFW3RoaXMuc3RhdGVdO1xuICB9XG4gIGdldCB0YWdDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiAndm8tcHJnLXN0ICcgKyBUQUdbdGhpcy5zdGF0ZV1bMV07XG4gIH1cbiAgZ2V0IHdvcmRzKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMudmFsdWVUZXh0ICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLnZhbHVlVGV4dDtcbiAgICBjb25zdCBhdCA9IHRoaXMuYXQ7XG4gICAgY29uc3QgbiA9IHRoaXMubjtcbiAgICBpZiAodGhpcy5pbmQpIHJldHVybiAnUHJlcGFyaW5nIHRoZSBydW4nO1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAncGF1c2VkJykgcmV0dXJuIGBQYXVzZWQgYXQgc3RlcCAke2F0ICsgMX0gb2YgJHtufWA7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdlcnJvcicpIHJldHVybiBgRmFpbGVkIGF0IHN0ZXAgJHthdCArIDF9IG9mICR7bn1gO1xuICAgIGlmICh0aGlzLmRvbmUpIHJldHVybiBgQWxsICR7bn0gc3RlcHMgZG9uZWA7XG4gICAgcmV0dXJuIGBTdGVwICR7YXQgKyAxfSBvZiAke259LCAke3RoaXMuY3VyLmxhYmVsLnRvTG93ZXJDYXNlKCl9YDtcbiAgfVxuICBnZXQgYnRuKCk6IHsgaWNvbjogJ3BsYXknIHwgJ3BhdXNlJyB8ICdyZWZyZXNoJzsgbGFiZWw6IHN0cmluZzsgb246IEV2ZW50RW1pdHRlcjx2b2lkPiB8IG51bGwgfSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdwYXVzZWQnKVxuICAgICAgcmV0dXJuIHsgaWNvbjogJ3BsYXknLCBsYWJlbDogJ1Jlc3VtZScsIG9uOiB0aGlzLnJlc3VtZVdpcmVkID8gdGhpcy5vblJlc3VtZSA6IG51bGwgfTtcbiAgICBpZiAodGhpcy5kb25lKVxuICAgICAgcmV0dXJuIHsgaWNvbjogJ3JlZnJlc2gnLCBsYWJlbDogJ1J1biBhZ2FpbicsIG9uOiB0aGlzLnJlc3RhcnRXaXJlZCA/IHRoaXMub25SZXN0YXJ0IDogbnVsbCB9O1xuICAgIHJldHVybiB7IGljb246ICdwYXVzZScsIGxhYmVsOiAnUGF1c2UnLCBvbjogdGhpcy5wYXVzZVdpcmVkID8gdGhpcy5vblBhdXNlIDogbnVsbCB9O1xuICB9XG5cbiAgLyogLS0tLS0tLS0tLSBtZXRlciAtLS0tLS0tLS0tICovXG4gIGdldCB3YXJuQXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tZXRlcj8ud2FybkF0ID8/IDAuNzU7XG4gIH1cbiAgZ2V0IGRhbmdlckF0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubWV0ZXI/LmRhbmdlckF0ID8/IDAuOTtcbiAgfVxuICBnZXQgbSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm1ldGVyID8gdGhpcy5tZXRlci52YWx1ZSAvIHRoaXMubWV0ZXIubWF4IDogMDtcbiAgfVxuICBnZXQgYmFuZCgpOiAwIHwgMSB8IDIge1xuICAgIGlmICghdGhpcy5tZXRlcikgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHRoaXMubSA+PSB0aGlzLmRhbmdlckF0ID8gMiA6IHRoaXMubSA+PSB0aGlzLndhcm5BdCA/IDEgOiAwO1xuICB9XG4gIGdldCBtZXRlckZpbGxQY3QoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5taW4oMTAwLCB0aGlzLm0gKiAxMDApO1xuICB9XG4gIGdldCBtZXRlck5vdygpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMubWV0ZXI/LnZhbHVlID8/IDApO1xuICB9XG4gIGdldCBtZXRlclZhbHVlVGV4dCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5tZXRlcikgcmV0dXJuICcnO1xuICAgIGNvbnN0IGJhc2UgPSBgJHtmbXQodGhpcy5tZXRlci52YWx1ZSl9IG9mICR7Zm10KHRoaXMubWV0ZXIubWF4KX0gJHt0aGlzLm1ldGVyLnVuaXQgPz8gJyd9YC50cmltKCk7XG4gICAgY29uc3QgdGFpbCA9IFsnJywgJywgcnVubmluZyBsb3cnLCAnLCAnICsgKHRoaXMubWV0ZXIuZGFuZ2VyTGFiZWwgPz8gJ2FsbW9zdCBvdXQnKS50b0xvd2VyQ2FzZSgpXVtcbiAgICAgIHRoaXMuYmFuZFxuICAgIF07XG4gICAgcmV0dXJuIGJhc2UgKyB0YWlsO1xuICB9XG5cbiAgc2VnRmlsbChqOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmRvbmUgfHwgaiA8IHRoaXMuYXQpIHJldHVybiAxO1xuICAgIGlmIChqID09PSB0aGlzLmF0ICYmICF0aGlzLmluZCkgcmV0dXJuIHRoaXMuc3ViO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZm10TihuOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBmbXQobik7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMud2FzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMud2FzID0gdGhpcy5zdGF0ZTtcbiAgICAgIHRoaXMuc2hvd25UYWcgPSBUQUdbdGhpcy5zdGF0ZV1bMF07XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydzdGF0ZSddICYmIHRoaXMud2FzICE9PSB0aGlzLnN0YXRlKSB7XG4gICAgICB0aGlzLndhcyA9IHRoaXMuc3RhdGU7XG4gICAgICAvLyBhbm5vdW5jZSBvbmx5IGEgY2hhbmdlIG9mIHN0YXRlLCBuZXZlciBldmVyeSBwZXJjZW50XG4gICAgICBjb25zdCBtc2c6IFJlY29yZDxQcm9ncmVzc1N0YXRlLCBzdHJpbmc+ID0ge1xuICAgICAgICBpbmRldGVybWluYXRlOiAnU3RhcnRpbmcnLFxuICAgICAgICBydW5uaW5nOiAnUnVubmluZycsXG4gICAgICAgIHBhdXNlZDogJ1BhdXNlZCcsXG4gICAgICAgIGVycm9yOiBgU3RlcCAke3RoaXMuYXQgKyAxfSBmYWlsZWQ6ICR7dGhpcy5lcnJvcn1gLFxuICAgICAgICBjb21wbGV0ZTogJ0RvbmUuICcgKyB0aGlzLndvcmRzLFxuICAgICAgfTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNhaWRUaW1lcik7XG4gICAgICB0aGlzLnNhaWRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuc2FpZCA9IG1zZ1t0aGlzLnN0YXRlXSkpO1xuICAgICAgLy8gdGhlIHRhZyB0ZXh0IGJsdXJzIG91dCBhbmQgYmFjayBpbiBvbiBhIHN0YXRlIGNoYW5nZSAoU3dhcClcbiAgICAgIHRoaXMudGFnT3V0ID0gdHJ1ZTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRhZ1RpbWVyKTtcbiAgICAgIHRoaXMudGFnVGltZXIgPSBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zaG93blRhZyA9IFRBR1t0aGlzLnN0YXRlXVswXTtcbiAgICAgICAgICB0aGlzLnRhZ091dCA9IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICB0aGlzLm1vdGlvbi5yZWR1Y2UoKSA/IDAgOiAxNzAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnNhaWRUaW1lcik7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGFnVGltZXIpO1xuICB9XG59XG4iXX0=
|