@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.
Files changed (175) hide show
  1. package/LICENSE +24 -0
  2. package/README.md +56 -2
  3. package/account-table/account-table.component.d.ts +72 -0
  4. package/action-log/action-log.component.d.ts +41 -0
  5. package/activity-heatmap/activity-heatmap.component.d.ts +67 -0
  6. package/agent-inbox/agent-inbox.component.d.ts +75 -0
  7. package/agent-lanes/agent-lanes.component.d.ts +152 -0
  8. package/agent-phases/agent-phases.component.d.ts +62 -0
  9. package/agent-run-timeline/agent-run-timeline.component.d.ts +113 -0
  10. package/agent-tree/agent-tree.component.d.ts +80 -0
  11. package/answer-action-bar/answer-action-bar.component.d.ts +110 -0
  12. package/artifact-card/artifact-card.component.d.ts +145 -0
  13. package/attachment-tray/attachment-tray.component.d.ts +84 -0
  14. package/badge/badge.component.d.ts +25 -0
  15. package/bar-chart/bar-chart.component.d.ts +87 -0
  16. package/browser-session/browser-session.component.d.ts +70 -0
  17. package/buttons/buttons.component.d.ts +63 -0
  18. package/card/card.component.d.ts +21 -0
  19. package/change-review/change-review.component.d.ts +97 -0
  20. package/citation-hover-card/citation-hover-card.component.d.ts +95 -0
  21. package/code-viewer/code-viewer.component.d.ts +86 -0
  22. package/composer/composer.component.d.ts +114 -0
  23. package/context-meter/context-meter.component.d.ts +60 -0
  24. package/core/icon.component.d.ts +10 -0
  25. package/core/reduced-motion.service.d.ts +15 -0
  26. package/decision-prompt/decision-prompt.component.d.ts +56 -0
  27. package/design-review/design-review.component.d.ts +108 -0
  28. package/design-tuner/design-tuner.component.d.ts +75 -0
  29. package/details-panel/details-panel.component.d.ts +150 -0
  30. package/donut-chart/donut-chart.component.d.ts +63 -0
  31. package/draft-review/draft-review.component.d.ts +128 -0
  32. package/error-recovery/error-recovery.component.d.ts +59 -0
  33. package/esm2022/account-table/account-table.component.mjs +399 -0
  34. package/esm2022/action-log/action-log.component.mjs +177 -0
  35. package/esm2022/activity-heatmap/activity-heatmap.component.mjs +285 -0
  36. package/esm2022/agent-inbox/agent-inbox.component.mjs +284 -0
  37. package/esm2022/agent-lanes/agent-lanes.component.mjs +600 -0
  38. package/esm2022/agent-phases/agent-phases.component.mjs +300 -0
  39. package/esm2022/agent-run-timeline/agent-run-timeline.component.mjs +412 -0
  40. package/esm2022/agent-tree/agent-tree.component.mjs +393 -0
  41. package/esm2022/answer-action-bar/answer-action-bar.component.mjs +636 -0
  42. package/esm2022/artifact-card/artifact-card.component.mjs +916 -0
  43. package/esm2022/attachment-tray/attachment-tray.component.mjs +402 -0
  44. package/esm2022/badge/badge.component.mjs +97 -0
  45. package/esm2022/bar-chart/bar-chart.component.mjs +300 -0
  46. package/esm2022/browser-session/browser-session.component.mjs +352 -0
  47. package/esm2022/buttons/buttons.component.mjs +215 -0
  48. package/esm2022/card/card.component.mjs +107 -0
  49. package/esm2022/change-review/change-review.component.mjs +398 -0
  50. package/esm2022/citation-hover-card/citation-hover-card.component.mjs +360 -0
  51. package/esm2022/code-viewer/code-viewer.component.mjs +291 -0
  52. package/esm2022/composer/composer.component.mjs +743 -0
  53. package/esm2022/context-meter/context-meter.component.mjs +275 -0
  54. package/esm2022/core/icon.component.mjs +111 -0
  55. package/esm2022/core/reduced-motion.service.mjs +34 -0
  56. package/esm2022/decision-prompt/decision-prompt.component.mjs +259 -0
  57. package/esm2022/design-review/design-review.component.mjs +428 -0
  58. package/esm2022/design-tuner/design-tuner.component.mjs +341 -0
  59. package/esm2022/details-panel/details-panel.component.mjs +537 -0
  60. package/esm2022/donut-chart/donut-chart.component.mjs +240 -0
  61. package/esm2022/draft-review/draft-review.component.mjs +549 -0
  62. package/esm2022/error-recovery/error-recovery.component.mjs +231 -0
  63. package/esm2022/eval-results/eval-results.component.mjs +368 -0
  64. package/esm2022/feedback-sheet/feedback-sheet.component.mjs +411 -0
  65. package/esm2022/field-extraction/field-extraction.component.mjs +368 -0
  66. package/esm2022/funnel-chart/funnel-chart.component.mjs +258 -0
  67. package/esm2022/grid/grid.component.mjs +66 -0
  68. package/esm2022/health-score/health-score.component.mjs +420 -0
  69. package/esm2022/human-handoff/human-handoff.component.mjs +676 -0
  70. package/esm2022/image-generation/image-generation.component.mjs +1028 -0
  71. package/esm2022/inline-text-diff/inline-text-diff.component.mjs +390 -0
  72. package/esm2022/launch-checklist/launch-checklist.component.mjs +229 -0
  73. package/esm2022/line-chart/line-chart.component.mjs +417 -0
  74. package/esm2022/live-answer/live-answer.component.mjs +411 -0
  75. package/esm2022/metric-insight/metric-insight.component.mjs +511 -0
  76. package/esm2022/modal/modal.component.mjs +202 -0
  77. package/esm2022/model-picker/model-picker.component.mjs +491 -0
  78. package/esm2022/permission-gate/permission-gate.component.mjs +498 -0
  79. package/esm2022/plan-review/plan-review.component.mjs +432 -0
  80. package/esm2022/progress/progress.component.mjs +503 -0
  81. package/esm2022/prompt-library/prompt-library.component.mjs +453 -0
  82. package/esm2022/prompt-starters/prompt-starters.component.mjs +272 -0
  83. package/esm2022/proposal-card/proposal-card.component.mjs +402 -0
  84. package/esm2022/public-api.mjs +88 -0
  85. package/esm2022/radar-chart/radar-chart.component.mjs +500 -0
  86. package/esm2022/radial-goals/radial-goals.component.mjs +418 -0
  87. package/esm2022/reasoning-trail/reasoning-trail.component.mjs +284 -0
  88. package/esm2022/response-versions/response-versions.component.mjs +288 -0
  89. package/esm2022/rewrite-toolbar/rewrite-toolbar.component.mjs +397 -0
  90. package/esm2022/rich-text-editor/rich-text-editor.component.mjs +1755 -0
  91. package/esm2022/run-cost/run-cost.component.mjs +215 -0
  92. package/esm2022/run-queue/run-queue.component.mjs +481 -0
  93. package/esm2022/run-summary/run-summary.component.mjs +331 -0
  94. package/esm2022/scatter-chart/scatter-chart.component.mjs +705 -0
  95. package/esm2022/score-breakdown/score-breakdown.component.mjs +460 -0
  96. package/esm2022/segmented-control/segmented-control.component.mjs +180 -0
  97. package/esm2022/source-stack/source-stack.component.mjs +245 -0
  98. package/esm2022/stat-cards/stat-cards.component.mjs +258 -0
  99. package/esm2022/status-pill/status-pill.component.mjs +305 -0
  100. package/esm2022/steering/steering.component.mjs +343 -0
  101. package/esm2022/step-loader/step-loader.component.mjs +209 -0
  102. package/esm2022/task-table/task-table.component.mjs +534 -0
  103. package/esm2022/terminal-stream/terminal-stream.component.mjs +583 -0
  104. package/esm2022/thinking/thinking.component.mjs +276 -0
  105. package/esm2022/thinking-states/thinking-states.component.mjs +333 -0
  106. package/esm2022/thread-panel/thread-panel.component.mjs +271 -0
  107. package/esm2022/toast/toast.component.mjs +195 -0
  108. package/esm2022/toast-stack/toast-stack.component.mjs +301 -0
  109. package/esm2022/tool-call/tool-call.component.mjs +273 -0
  110. package/esm2022/tooltip/tooltip.component.mjs +417 -0
  111. package/esm2022/top-pages/top-pages.component.mjs +240 -0
  112. package/esm2022/trace-view/trace-view.component.mjs +440 -0
  113. package/esm2022/visuno-angular.mjs +5 -0
  114. package/esm2022/voice-capture/voice-capture.component.mjs +650 -0
  115. package/esm2022/voice-orb/voice-orb.component.mjs +538 -0
  116. package/esm2022/web-search/web-search.component.mjs +374 -0
  117. package/eval-results/eval-results.component.d.ts +67 -0
  118. package/feedback-sheet/feedback-sheet.component.d.ts +74 -0
  119. package/fesm2022/visuno-angular.mjs +31992 -0
  120. package/fesm2022/visuno-angular.mjs.map +1 -0
  121. package/field-extraction/field-extraction.component.d.ts +82 -0
  122. package/funnel-chart/funnel-chart.component.d.ts +70 -0
  123. package/grid/grid.component.d.ts +22 -0
  124. package/health-score/health-score.component.d.ts +87 -0
  125. package/human-handoff/human-handoff.component.d.ts +125 -0
  126. package/image-generation/image-generation.component.d.ts +253 -0
  127. package/index.d.ts +5 -0
  128. package/inline-text-diff/inline-text-diff.component.d.ts +76 -0
  129. package/launch-checklist/launch-checklist.component.d.ts +46 -0
  130. package/line-chart/line-chart.component.d.ts +89 -0
  131. package/live-answer/live-answer.component.d.ts +110 -0
  132. package/metric-insight/metric-insight.component.d.ts +110 -0
  133. package/modal/modal.component.d.ts +37 -0
  134. package/model-picker/model-picker.component.d.ts +97 -0
  135. package/package.json +51 -4
  136. package/permission-gate/permission-gate.component.d.ts +100 -0
  137. package/plan-review/plan-review.component.d.ts +86 -0
  138. package/progress/progress.component.d.ts +91 -0
  139. package/prompt-library/prompt-library.component.d.ts +121 -0
  140. package/prompt-starters/prompt-starters.component.d.ts +65 -0
  141. package/proposal-card/proposal-card.component.d.ts +101 -0
  142. package/public-api.d.ts +82 -0
  143. package/radar-chart/radar-chart.component.d.ts +110 -0
  144. package/radial-goals/radial-goals.component.d.ts +90 -0
  145. package/reasoning-trail/reasoning-trail.component.d.ts +73 -0
  146. package/response-versions/response-versions.component.d.ts +54 -0
  147. package/rewrite-toolbar/rewrite-toolbar.component.d.ts +92 -0
  148. package/rich-text-editor/rich-text-editor.component.d.ts +180 -0
  149. package/run-cost/run-cost.component.d.ts +43 -0
  150. package/run-queue/run-queue.component.d.ts +93 -0
  151. package/run-summary/run-summary.component.d.ts +81 -0
  152. package/scatter-chart/scatter-chart.component.d.ts +139 -0
  153. package/score-breakdown/score-breakdown.component.d.ts +107 -0
  154. package/segmented-control/segmented-control.component.d.ts +44 -0
  155. package/source-stack/source-stack.component.d.ts +60 -0
  156. package/stat-cards/stat-cards.component.d.ts +86 -0
  157. package/status-pill/status-pill.component.d.ts +64 -0
  158. package/steering/steering.component.d.ts +75 -0
  159. package/step-loader/step-loader.component.d.ts +40 -0
  160. package/styles.css +424 -0
  161. package/task-table/task-table.component.d.ts +114 -0
  162. package/terminal-stream/terminal-stream.component.d.ts +110 -0
  163. package/thinking/thinking.component.d.ts +63 -0
  164. package/thinking-states/thinking-states.component.d.ts +51 -0
  165. package/thread-panel/thread-panel.component.d.ts +75 -0
  166. package/toast/toast.component.d.ts +56 -0
  167. package/toast-stack/toast-stack.component.d.ts +72 -0
  168. package/tokens.css +424 -0
  169. package/tool-call/tool-call.component.d.ts +61 -0
  170. package/tooltip/tooltip.component.d.ts +89 -0
  171. package/top-pages/top-pages.component.d.ts +75 -0
  172. package/trace-view/trace-view.component.d.ts +95 -0
  173. package/voice-capture/voice-capture.component.d.ts +103 -0
  174. package/voice-orb/voice-orb.component.d.ts +78 -0
  175. package/web-search/web-search.component.d.ts +77 -0
@@ -0,0 +1,498 @@
1
+ // framework/angular/permission-gate/permission-gate.component.ts
2
+ //
3
+ // Native Angular port of framework/react/permission-gate/PermissionGate.tsx.
4
+ // The agent asks before it acts: a card with the question, the scopes to tick,
5
+ // and a footer with how long the grant lasts and the two answers (Allow /
6
+ // decline). Once allowed it gives way to a shorter result row (a spinner while
7
+ // the agent works, a green check when done) with a Revoke button; declining
8
+ // shows an undoable notice. A follow-up ask mid-run turns the icon tile amber.
9
+ // Inputs mirror the React props; React callbacks become @Output EventEmitters.
10
+ //
11
+ // Icon note: the React default tile icon is a shield, which is not in the
12
+ // Angular core glyph set. The default here is `figma` (as in the Vanilla demo);
13
+ // pass any VoIconName via [iconName] to override. Available glyphs: see
14
+ // VoIconName in ../core/icon.component.
15
+ import { Component, EventEmitter, Input, Output, ViewEncapsulation, inject, } from '@angular/core';
16
+ import { VoIconComponent } from '../core/icon.component';
17
+ import { ReducedMotionService } from '../core/reduced-motion.service';
18
+ import * as i0 from "@angular/core";
19
+ /** The agent asks before it acts: pick the scopes and how long they last, then allow or decline. */
20
+ export class PermissionGateComponent {
21
+ constructor() {
22
+ /** The question, like "Allow the agent to edit Figma?". */
23
+ this.title = '';
24
+ /** The glyph in the tile beside the question. Defaults to figma (React uses a shield). */
25
+ this.iconName = 'figma';
26
+ this.scopes = [];
27
+ this.defaultValue = [];
28
+ this.valueChange = new EventEmitter();
29
+ /** How long the permission lasts, picked from a small dropdown in the footer. */
30
+ this.durations = ['This task', 'Today', 'Always'];
31
+ /** The quiet line under each duration in its menu, by duration. */
32
+ this.durationDetails = {
33
+ 'This task': 'Until the task is done',
34
+ Today: 'Until midnight',
35
+ Always: 'Until you revoke it',
36
+ };
37
+ this.durationChange = new EventEmitter();
38
+ this.defaultStatus = 'asking';
39
+ this.statusChange = new EventEmitter();
40
+ /** Called with the ticked scopes and the duration. Return a promise and the button spins until it settles. */
41
+ this.allowEvent = new EventEmitter();
42
+ this.declineEvent = new EventEmitter();
43
+ /** Called by Revoke, after allowing. */
44
+ this.revokeEvent = new EventEmitter();
45
+ /** Called by Undo, after declining. */
46
+ this.undoEvent = new EventEmitter();
47
+ /** The agent is still working under the permission: a spinner instead of the green check. */
48
+ this.working = false;
49
+ /** A follow-up ask in the middle of a run, for one more scope: the icon tile turns amber. */
50
+ this.followUp = false;
51
+ /** The decline button. Defaults to "Not now"; a follow-up ask might say "Skip this frame". */
52
+ this.declineLabel = 'Not now';
53
+ /** Shown after Not now. */
54
+ this.declinedTitle = 'The agent will skip these changes';
55
+ /** Sits flat in a chat thread (the default). Set false to give it a card of its own. */
56
+ this.bare = true;
57
+ this.motion = inject(ReducedMotionService);
58
+ /** Internal state when the matching input is left uncontrolled. */
59
+ this.innerTicked = [];
60
+ this.innerStatus = 'asking';
61
+ this.menuOpen = false;
62
+ this.waiting = false;
63
+ // a revoked permission fades out before the scopes come back
64
+ this.leaving = false;
65
+ // the scopes play their entrance when they come back, not when the card first appears
66
+ this.back = 0;
67
+ this.granted = 0;
68
+ // the scopes give way to a shorter result row: the gate keeps the height it had and centres the row
69
+ this.held = null;
70
+ }
71
+ ngOnChanges(changes) {
72
+ if (changes['defaultValue'] && this.value === undefined && !this.innerTicked.length) {
73
+ this.innerTicked = [...this.defaultValue];
74
+ }
75
+ if (changes['defaultStatus'] && this.status === undefined) {
76
+ this.innerStatus = this.defaultStatus;
77
+ }
78
+ }
79
+ get ticked() {
80
+ return this.value ?? (this.innerTicked.length ? this.innerTicked : this.defaultValue);
81
+ }
82
+ get dur() {
83
+ return this.duration ?? this.innerDur ?? this.defaultDuration ?? this.durations[0] ?? '';
84
+ }
85
+ get state() {
86
+ return this.status ?? this.innerStatus;
87
+ }
88
+ get n() {
89
+ return this.ticked.length;
90
+ }
91
+ // "For this task" in the menu and "for this task" after Allowed; Always reads as it is
92
+ durLabel(d) {
93
+ return /^always$/i.test(d) ? d : 'For ' + d.toLowerCase();
94
+ }
95
+ durSpan(d) {
96
+ return /^always$/i.test(d) ? 'always' : 'for ' + d.toLowerCase();
97
+ }
98
+ setTicked(keys) {
99
+ if (this.value === undefined)
100
+ this.innerTicked = keys;
101
+ this.valueChange.emit(keys);
102
+ }
103
+ setStatus(s) {
104
+ if (this.status === undefined)
105
+ this.innerStatus = s;
106
+ this.statusChange.emit(s);
107
+ }
108
+ toggle(key) {
109
+ const next = this.ticked.includes(key)
110
+ ? this.ticked.filter((k) => k !== key)
111
+ : this.scopes.map((s) => s.key).filter((k) => k === key || this.ticked.includes(k));
112
+ this.setTicked(next);
113
+ }
114
+ toggleMenu() {
115
+ this.menuOpen = !this.menuOpen;
116
+ }
117
+ pickDuration(d) {
118
+ if (this.duration === undefined)
119
+ this.innerDur = d;
120
+ this.durationChange.emit(d);
121
+ this.menuOpen = false;
122
+ }
123
+ hold() {
124
+ if (this.held === null)
125
+ this.held = 0;
126
+ }
127
+ async allow() {
128
+ if (!this.n || this.waiting)
129
+ return;
130
+ this.waiting = true;
131
+ this.granted = this.n;
132
+ this.allowEvent.emit({ keys: this.ticked, duration: this.dur });
133
+ // the Allow button spins briefly, as the React port awaits onAllow
134
+ await new Promise((r) => setTimeout(r, this.motion.reduce() ? 0 : 500));
135
+ this.waiting = false;
136
+ this.hold();
137
+ this.setStatus('allowed');
138
+ }
139
+ decline() {
140
+ this.hold();
141
+ this.setStatus('declined');
142
+ this.declineEvent.emit();
143
+ }
144
+ revoke() {
145
+ this.leaving = true;
146
+ clearTimeout(this.leaveTimer);
147
+ this.leaveTimer = setTimeout(() => {
148
+ this.leaving = false;
149
+ this.held = null;
150
+ this.setStatus('asking');
151
+ this.back += 1;
152
+ this.revokeEvent.emit();
153
+ }, this.motion.reduce() ? 0 : 300);
154
+ }
155
+ undo() {
156
+ this.held = null;
157
+ this.setStatus('asking');
158
+ this.back += 1;
159
+ this.undoEvent.emit();
160
+ }
161
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PermissionGateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
162
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PermissionGateComponent, isStandalone: true, selector: "vo-permission-gate", inputs: { title: "title", subtitle: "subtitle", iconName: "iconName", scopes: "scopes", value: "value", defaultValue: "defaultValue", durations: "durations", durationDetails: "durationDetails", duration: "duration", defaultDuration: "defaultDuration", status: "status", defaultStatus: "defaultStatus", allowedDetail: "allowedDetail", allowedTitle: "allowedTitle", working: "working", meta: "meta", followUp: "followUp", declineLabel: "declineLabel", declinedTitle: "declinedTitle", declinedDetail: "declinedDetail", bare: "bare" }, outputs: { valueChange: "valueChange", durationChange: "durationChange", statusChange: "statusChange", allowEvent: "allowEvent", declineEvent: "declineEvent", revokeEvent: "revokeEvent", undoEvent: "undoEvent" }, usesOnChanges: true, ngImport: i0, template: `
163
+ <div
164
+ data-vo=""
165
+ class="vo-pgx"
166
+ [class.vo-panel]="!bare"
167
+ [class.vo-esc]="followUp && state === 'asking'"
168
+ [class.vo-held]="held !== null"
169
+ [style.minHeight.px]="held !== null ? held : null"
170
+ >
171
+ <div class="vo-pgx-h">
172
+ <span class="vo-pgx-ic"><vo-icon [name]="iconName"></vo-icon></span>
173
+ <div class="vo-pgx-ht">
174
+ <b>{{ title }}</b>
175
+ @if (subtitle) {
176
+ <span class="vo-muted">{{ subtitle }}</span>
177
+ }
178
+ </div>
179
+ </div>
180
+
181
+ @if (state === 'asking') {
182
+ <div class="vo-pgx-sc" [class.vo-enter]="back > 0">
183
+ @for (s of scopes; track s.key) {
184
+ <label class="vo-pgx-o">
185
+ <input
186
+ type="checkbox"
187
+ [checked]="ticked.includes(s.key)"
188
+ (change)="toggle(s.key)"
189
+ />
190
+ <span class="vo-bx"><vo-icon name="check" size="xs"></vo-icon></span>
191
+ <span class="vo-t"
192
+ >{{ s.label }}@if (s.detail) {<span class="vo-d">{{ s.detail }}</span>}</span
193
+ >
194
+ @if (s.risk) {
195
+ <span class="vo-tag vo-warn" [attr.title]="s.riskDetail ?? null">{{ s.risk }}</span>
196
+ }
197
+ </label>
198
+ }
199
+ </div>
200
+ <div class="vo-pgx-f" [class.vo-enter]="back > 0">
201
+ <button
202
+ type="button"
203
+ class="vo-pgx-db"
204
+ aria-haspopup="menu"
205
+ [attr.aria-expanded]="menuOpen"
206
+ aria-label="How long"
207
+ (click)="toggleMenu()"
208
+ >
209
+ <span class="vo-pgx-dv">{{ durLabel(dur) }}</span>
210
+ <vo-icon name="chev-d" size="xs"></vo-icon>
211
+ </button>
212
+ <span class="vo-sp"></span>
213
+ <button type="button" class="vo-pill vo-ghost vo-sm vo-pgx-no" (click)="decline()">
214
+ {{ declineLabel }}
215
+ </button>
216
+ <button
217
+ type="button"
218
+ class="vo-pill vo-primary vo-sm vo-pgx-ok"
219
+ [disabled]="!n || waiting"
220
+ (click)="allow()"
221
+ >
222
+ @if (waiting) {
223
+ <span class="vo-spin" aria-hidden="true"></span>
224
+ } @else {
225
+ {{ n ? 'Allow ' + n + (n > 1 ? ' scopes' : ' scope') : 'Pick a scope' }}
226
+ }
227
+ </button>
228
+ </div>
229
+ }
230
+
231
+ <div
232
+ class="vo-pop vo-pgx-pop"
233
+ role="menu"
234
+ aria-label="How long"
235
+ [hidden]="!menuOpen"
236
+ >
237
+ @for (d of durations; track d) {
238
+ <button
239
+ type="button"
240
+ class="vo-mi"
241
+ role="menuitemradio"
242
+ [attr.aria-checked]="d === dur"
243
+ (click)="pickDuration(d)"
244
+ >
245
+ <span
246
+ >{{ durLabel(d) }}@if (durationDetails[d]) {<span class="vo-d">{{
247
+ durationDetails[d]
248
+ }}</span>}</span
249
+ >
250
+ <span class="vo-ck"><vo-icon name="check" size="xs"></vo-icon></span>
251
+ </button>
252
+ }
253
+ </div>
254
+
255
+ @if (state === 'allowed') {
256
+ <div
257
+ class="vo-pgx-done"
258
+ [class.vo-run]="working"
259
+ [class.vo-ok]="!working"
260
+ [class.vo-leave]="leaving"
261
+ [class.vo-enter]="!leaving"
262
+ >
263
+ <span class="vo-g">
264
+ @if (working) {
265
+ <span class="vo-spin" aria-hidden="true"></span>
266
+ } @else {
267
+ <vo-icon name="ok"></vo-icon>
268
+ }
269
+ </span>
270
+ <span class="vo-t">
271
+ <b class="vo-pgx-a">{{
272
+ allowedTitle ??
273
+ 'Allowed ' +
274
+ (granted || n) +
275
+ ((granted || n) > 1 ? ' scopes ' : ' scope ') +
276
+ durSpan(dur)
277
+ }}</b>
278
+ @if (allowedDetail !== undefined) {
279
+ <span class="vo-pgx-d">{{ allowedDetail }}</span>
280
+ }
281
+ </span>
282
+ @if (meta !== undefined) {
283
+ <span class="vo-pgx-tm vo-num">{{ meta }}</span>
284
+ }
285
+ <button type="button" class="vo-pill vo-ghost vo-sm" (click)="revoke()">Revoke</button>
286
+ </div>
287
+ }
288
+
289
+ @if (state === 'declined') {
290
+ <div class="vo-pgx-done vo-enter" style="background:var(--vo-chip)">
291
+ <vo-icon name="info"></vo-icon>
292
+ <span class="vo-t"
293
+ >{{ declinedTitle }}@if (declinedDetail) {<span>{{ declinedDetail }}</span>}</span
294
+ >
295
+ <button type="button" class="vo-pill vo-ghost vo-sm" (click)="undo()">Undo</button>
296
+ </div>
297
+ }
298
+ </div>
299
+ `, isInline: true, styles: [".vo-pgx{position:relative;width:100%;max-width:400px;margin:0 auto;padding:var(--vo-s-1) 0;display:flex;flex-direction:column;gap:var(--vo-s-3)}.vo-pgx.vo-panel{padding:var(--vo-s-4)}.vo-pgx-h{display:flex;gap:var(--vo-s-3);align-items:center}.vo-pgx-ic{width:32px;height:32px;border-radius:calc(9px * var(--vo-rk));background:var(--vo-chip);display:grid;place-items:center;flex:none}.vo-pgx-ht{display:flex;flex-direction:column;min-width:0}.vo-pgx-ht b{font-weight:500;font-size:14px}.vo-pgx-ht span{font-size:13px}.vo-pgx-sc{display:flex;flex-direction:column;margin-inline:-8px}.vo-pgx-o{display:flex;align-items:center;gap:var(--vo-s-3);padding:var(--vo-s-2);border-radius:calc(10px * var(--vo-rk));cursor:pointer;font-size:13.5px;transition:background .25s}@media (hover:hover) and (pointer:fine){.vo-pgx-o:hover{background:var(--vo-row)}}.vo-pgx-o input{position:absolute;opacity:0;pointer-events:none}.vo-pgx-o .vo-bx{width:18px;height:18px;border-radius:calc(6px * var(--vo-rk));box-shadow:inset 0 0 0 1.5px color-mix(in srgb,var(--vo-muted) 80%,var(--vo-surface));display:grid;place-items:center;color:transparent;flex:none;transition:background .3s var(--vo-ease),box-shadow .3s,color .3s}.vo-pgx-o .vo-bx svg{transform:scale(.4);transition:transform .35s var(--vo-ease)}.vo-pgx-o input:checked+.vo-bx{background:var(--vo-accent);box-shadow:inset 0 0 0 1px var(--vo-accent-mark,var(--vo-accent));color:var(--vo-on-accent)}.vo-pgx-o input:checked+.vo-bx svg{transform:none}.vo-pgx-o input:focus-visible+.vo-bx{outline:2px solid var(--vo-focus);outline-offset:2px}.vo-pgx-o .vo-t{flex:1;min-width:0}.vo-pgx-o .vo-d{display:block;font-size:12px;color:var(--vo-muted)}.vo-pgx-f{display:flex;align-items:center;gap:6px;padding-top:var(--vo-s-3);border-top:1px solid color-mix(in srgb,var(--vo-line) 50%,transparent)}.vo-pgx-f .vo-sp{flex:1}@container (max-width:340px){.vo-pgx-f{flex-wrap:wrap}.vo-pgx-f .vo-sp{flex-basis:100%}.vo-pgx-no{margin:var(--vo-s-2) 0 0 auto}.vo-pgx-ok{margin-top:var(--vo-s-2)}}.vo-pgx-db{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 var(--vo-s-2) 0 10px;margin-left:-2px;border-radius:var(--vo-r-pill);font-size:13px;color:var(--vo-fg2);white-space:nowrap;cursor:pointer;transition:background .16s,color .16s}.vo-pgx-db[aria-expanded=true]{background:var(--vo-row);color:var(--vo-fg)}@media (hover:hover) and (pointer:fine){.vo-pgx-db:hover{background:var(--vo-row);color:var(--vo-fg)}}.vo-pgx-db>svg{color:var(--vo-muted);transition:transform .32s var(--vo-ease)}.vo-pgx-db[aria-expanded=true]>svg{transform:rotate(180deg)}.vo-pgx-pop{min-width:230px}.vo-pgx-ok[disabled]{opacity:1;cursor:not-allowed;background:var(--vo-dis-hatch),var(--vo-dis-fill);color:var(--vo-dis);box-shadow:var(--vo-soft-ring)}.vo-pgx-done{display:flex;align-items:center;gap:var(--vo-s-3);padding:10px 10px 10px var(--vo-s-3);border-radius:var(--vo-r-in);background:var(--vo-ok-bg);font-size:13.5px}.vo-pgx-done .vo-pill{background:var(--vo-surface);color:var(--vo-fg);box-shadow:var(--vo-shadow)}@media (hover:hover) and (pointer:fine){.vo-pgx-done .vo-pill:hover{background:var(--vo-surface);box-shadow:var(--vo-shadow-pop)}}.vo-pgx-done .vo-t{flex:1;color:var(--vo-fg)}.vo-pgx-done .vo-t span{display:block;font-size:12px;color:var(--vo-fg2)}.vo-pgx-done>svg{color:var(--vo-ok)}.vo-pgx-done.vo-run{background:var(--vo-chip)}.vo-pgx-done .vo-g{width:18px;height:18px;display:grid;place-items:center;flex:none;color:var(--vo-fg2)}.vo-pgx-done.vo-ok .vo-g{color:var(--vo-ok)}.vo-pgx-done .vo-t b{display:block;font-weight:400}.vo-pgx-tm{font-size:12px;color:var(--vo-muted)}.vo-pgx-ic{transition:background .32s var(--vo-ease)}.vo-pgx.vo-esc .vo-pgx-ic{background:var(--vo-warn-bg)}.vo-pgx-scope{display:flex;flex-direction:column;gap:var(--vo-s-3)}.vo-muted{color:var(--vo-muted)}.vo-num{font-variant-numeric:tabular-nums}.vo-spin{width:12px;height:12px;border-radius:50%;border:1.5px solid currentColor;border-right-color:transparent;animation:vo-rot .8s linear infinite;flex:none;display:inline-block}@keyframes vo-rot{to{transform:rotate(360deg)}}.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}.vo-pop{position:absolute;z-index:40;top:100%;left:0;margin-top:6px;padding:6px;background:var(--vo-surface);border:1px solid var(--vo-line);border-radius:var(--vo-r-in);box-shadow:var(--vo-shadow-pop);display:flex;flex-direction:column;gap:2px}.vo-pop[hidden]{display:none}.vo-mi{display:flex;align-items:center;gap:var(--vo-s-3);padding:8px 10px;border-radius:calc(8px * var(--vo-rk));font-size:13px;color:var(--vo-fg);text-align:left;cursor:pointer;transition:background .14s}@media (hover:hover) and (pointer:fine){.vo-mi:hover{background:var(--vo-row)}}.vo-mi>span:first-child{flex:1;min-width:0}.vo-mi .vo-d{display:block;font-size:12px;color:var(--vo-muted)}.vo-mi .vo-ck{color:transparent;flex:none;display:grid;place-items:center}.vo-mi[aria-checked=true] .vo-ck{color:var(--vo-accent)}.vo-tag{display:inline-flex;align-items:center;height:20px;padding:0 8px;border-radius:var(--vo-r-pill);font-size:11.5px;font-weight:500;flex:none}.vo-tag.vo-warn{background:var(--vo-warn-bg);color:var(--vo-warn)}.vo-enter{animation:vo-pgxin .5s var(--vo-ease) both}@keyframes vo-pgxin{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.vo-leave{animation:vo-pgxout .3s var(--vo-ease) both}@keyframes vo-pgxout{to{opacity:0;transform:translateY(-6px)}}\n"], dependencies: [{ kind: "component", type: VoIconComponent, selector: "vo-icon", inputs: ["name", "size"] }], encapsulation: i0.ViewEncapsulation.None }); }
300
+ }
301
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PermissionGateComponent, decorators: [{
302
+ type: Component,
303
+ args: [{ selector: 'vo-permission-gate', standalone: true, encapsulation: ViewEncapsulation.None, imports: [VoIconComponent], template: `
304
+ <div
305
+ data-vo=""
306
+ class="vo-pgx"
307
+ [class.vo-panel]="!bare"
308
+ [class.vo-esc]="followUp && state === 'asking'"
309
+ [class.vo-held]="held !== null"
310
+ [style.minHeight.px]="held !== null ? held : null"
311
+ >
312
+ <div class="vo-pgx-h">
313
+ <span class="vo-pgx-ic"><vo-icon [name]="iconName"></vo-icon></span>
314
+ <div class="vo-pgx-ht">
315
+ <b>{{ title }}</b>
316
+ @if (subtitle) {
317
+ <span class="vo-muted">{{ subtitle }}</span>
318
+ }
319
+ </div>
320
+ </div>
321
+
322
+ @if (state === 'asking') {
323
+ <div class="vo-pgx-sc" [class.vo-enter]="back > 0">
324
+ @for (s of scopes; track s.key) {
325
+ <label class="vo-pgx-o">
326
+ <input
327
+ type="checkbox"
328
+ [checked]="ticked.includes(s.key)"
329
+ (change)="toggle(s.key)"
330
+ />
331
+ <span class="vo-bx"><vo-icon name="check" size="xs"></vo-icon></span>
332
+ <span class="vo-t"
333
+ >{{ s.label }}@if (s.detail) {<span class="vo-d">{{ s.detail }}</span>}</span
334
+ >
335
+ @if (s.risk) {
336
+ <span class="vo-tag vo-warn" [attr.title]="s.riskDetail ?? null">{{ s.risk }}</span>
337
+ }
338
+ </label>
339
+ }
340
+ </div>
341
+ <div class="vo-pgx-f" [class.vo-enter]="back > 0">
342
+ <button
343
+ type="button"
344
+ class="vo-pgx-db"
345
+ aria-haspopup="menu"
346
+ [attr.aria-expanded]="menuOpen"
347
+ aria-label="How long"
348
+ (click)="toggleMenu()"
349
+ >
350
+ <span class="vo-pgx-dv">{{ durLabel(dur) }}</span>
351
+ <vo-icon name="chev-d" size="xs"></vo-icon>
352
+ </button>
353
+ <span class="vo-sp"></span>
354
+ <button type="button" class="vo-pill vo-ghost vo-sm vo-pgx-no" (click)="decline()">
355
+ {{ declineLabel }}
356
+ </button>
357
+ <button
358
+ type="button"
359
+ class="vo-pill vo-primary vo-sm vo-pgx-ok"
360
+ [disabled]="!n || waiting"
361
+ (click)="allow()"
362
+ >
363
+ @if (waiting) {
364
+ <span class="vo-spin" aria-hidden="true"></span>
365
+ } @else {
366
+ {{ n ? 'Allow ' + n + (n > 1 ? ' scopes' : ' scope') : 'Pick a scope' }}
367
+ }
368
+ </button>
369
+ </div>
370
+ }
371
+
372
+ <div
373
+ class="vo-pop vo-pgx-pop"
374
+ role="menu"
375
+ aria-label="How long"
376
+ [hidden]="!menuOpen"
377
+ >
378
+ @for (d of durations; track d) {
379
+ <button
380
+ type="button"
381
+ class="vo-mi"
382
+ role="menuitemradio"
383
+ [attr.aria-checked]="d === dur"
384
+ (click)="pickDuration(d)"
385
+ >
386
+ <span
387
+ >{{ durLabel(d) }}@if (durationDetails[d]) {<span class="vo-d">{{
388
+ durationDetails[d]
389
+ }}</span>}</span
390
+ >
391
+ <span class="vo-ck"><vo-icon name="check" size="xs"></vo-icon></span>
392
+ </button>
393
+ }
394
+ </div>
395
+
396
+ @if (state === 'allowed') {
397
+ <div
398
+ class="vo-pgx-done"
399
+ [class.vo-run]="working"
400
+ [class.vo-ok]="!working"
401
+ [class.vo-leave]="leaving"
402
+ [class.vo-enter]="!leaving"
403
+ >
404
+ <span class="vo-g">
405
+ @if (working) {
406
+ <span class="vo-spin" aria-hidden="true"></span>
407
+ } @else {
408
+ <vo-icon name="ok"></vo-icon>
409
+ }
410
+ </span>
411
+ <span class="vo-t">
412
+ <b class="vo-pgx-a">{{
413
+ allowedTitle ??
414
+ 'Allowed ' +
415
+ (granted || n) +
416
+ ((granted || n) > 1 ? ' scopes ' : ' scope ') +
417
+ durSpan(dur)
418
+ }}</b>
419
+ @if (allowedDetail !== undefined) {
420
+ <span class="vo-pgx-d">{{ allowedDetail }}</span>
421
+ }
422
+ </span>
423
+ @if (meta !== undefined) {
424
+ <span class="vo-pgx-tm vo-num">{{ meta }}</span>
425
+ }
426
+ <button type="button" class="vo-pill vo-ghost vo-sm" (click)="revoke()">Revoke</button>
427
+ </div>
428
+ }
429
+
430
+ @if (state === 'declined') {
431
+ <div class="vo-pgx-done vo-enter" style="background:var(--vo-chip)">
432
+ <vo-icon name="info"></vo-icon>
433
+ <span class="vo-t"
434
+ >{{ declinedTitle }}@if (declinedDetail) {<span>{{ declinedDetail }}</span>}</span
435
+ >
436
+ <button type="button" class="vo-pill vo-ghost vo-sm" (click)="undo()">Undo</button>
437
+ </div>
438
+ }
439
+ </div>
440
+ `, styles: [".vo-pgx{position:relative;width:100%;max-width:400px;margin:0 auto;padding:var(--vo-s-1) 0;display:flex;flex-direction:column;gap:var(--vo-s-3)}.vo-pgx.vo-panel{padding:var(--vo-s-4)}.vo-pgx-h{display:flex;gap:var(--vo-s-3);align-items:center}.vo-pgx-ic{width:32px;height:32px;border-radius:calc(9px * var(--vo-rk));background:var(--vo-chip);display:grid;place-items:center;flex:none}.vo-pgx-ht{display:flex;flex-direction:column;min-width:0}.vo-pgx-ht b{font-weight:500;font-size:14px}.vo-pgx-ht span{font-size:13px}.vo-pgx-sc{display:flex;flex-direction:column;margin-inline:-8px}.vo-pgx-o{display:flex;align-items:center;gap:var(--vo-s-3);padding:var(--vo-s-2);border-radius:calc(10px * var(--vo-rk));cursor:pointer;font-size:13.5px;transition:background .25s}@media (hover:hover) and (pointer:fine){.vo-pgx-o:hover{background:var(--vo-row)}}.vo-pgx-o input{position:absolute;opacity:0;pointer-events:none}.vo-pgx-o .vo-bx{width:18px;height:18px;border-radius:calc(6px * var(--vo-rk));box-shadow:inset 0 0 0 1.5px color-mix(in srgb,var(--vo-muted) 80%,var(--vo-surface));display:grid;place-items:center;color:transparent;flex:none;transition:background .3s var(--vo-ease),box-shadow .3s,color .3s}.vo-pgx-o .vo-bx svg{transform:scale(.4);transition:transform .35s var(--vo-ease)}.vo-pgx-o input:checked+.vo-bx{background:var(--vo-accent);box-shadow:inset 0 0 0 1px var(--vo-accent-mark,var(--vo-accent));color:var(--vo-on-accent)}.vo-pgx-o input:checked+.vo-bx svg{transform:none}.vo-pgx-o input:focus-visible+.vo-bx{outline:2px solid var(--vo-focus);outline-offset:2px}.vo-pgx-o .vo-t{flex:1;min-width:0}.vo-pgx-o .vo-d{display:block;font-size:12px;color:var(--vo-muted)}.vo-pgx-f{display:flex;align-items:center;gap:6px;padding-top:var(--vo-s-3);border-top:1px solid color-mix(in srgb,var(--vo-line) 50%,transparent)}.vo-pgx-f .vo-sp{flex:1}@container (max-width:340px){.vo-pgx-f{flex-wrap:wrap}.vo-pgx-f .vo-sp{flex-basis:100%}.vo-pgx-no{margin:var(--vo-s-2) 0 0 auto}.vo-pgx-ok{margin-top:var(--vo-s-2)}}.vo-pgx-db{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 var(--vo-s-2) 0 10px;margin-left:-2px;border-radius:var(--vo-r-pill);font-size:13px;color:var(--vo-fg2);white-space:nowrap;cursor:pointer;transition:background .16s,color .16s}.vo-pgx-db[aria-expanded=true]{background:var(--vo-row);color:var(--vo-fg)}@media (hover:hover) and (pointer:fine){.vo-pgx-db:hover{background:var(--vo-row);color:var(--vo-fg)}}.vo-pgx-db>svg{color:var(--vo-muted);transition:transform .32s var(--vo-ease)}.vo-pgx-db[aria-expanded=true]>svg{transform:rotate(180deg)}.vo-pgx-pop{min-width:230px}.vo-pgx-ok[disabled]{opacity:1;cursor:not-allowed;background:var(--vo-dis-hatch),var(--vo-dis-fill);color:var(--vo-dis);box-shadow:var(--vo-soft-ring)}.vo-pgx-done{display:flex;align-items:center;gap:var(--vo-s-3);padding:10px 10px 10px var(--vo-s-3);border-radius:var(--vo-r-in);background:var(--vo-ok-bg);font-size:13.5px}.vo-pgx-done .vo-pill{background:var(--vo-surface);color:var(--vo-fg);box-shadow:var(--vo-shadow)}@media (hover:hover) and (pointer:fine){.vo-pgx-done .vo-pill:hover{background:var(--vo-surface);box-shadow:var(--vo-shadow-pop)}}.vo-pgx-done .vo-t{flex:1;color:var(--vo-fg)}.vo-pgx-done .vo-t span{display:block;font-size:12px;color:var(--vo-fg2)}.vo-pgx-done>svg{color:var(--vo-ok)}.vo-pgx-done.vo-run{background:var(--vo-chip)}.vo-pgx-done .vo-g{width:18px;height:18px;display:grid;place-items:center;flex:none;color:var(--vo-fg2)}.vo-pgx-done.vo-ok .vo-g{color:var(--vo-ok)}.vo-pgx-done .vo-t b{display:block;font-weight:400}.vo-pgx-tm{font-size:12px;color:var(--vo-muted)}.vo-pgx-ic{transition:background .32s var(--vo-ease)}.vo-pgx.vo-esc .vo-pgx-ic{background:var(--vo-warn-bg)}.vo-pgx-scope{display:flex;flex-direction:column;gap:var(--vo-s-3)}.vo-muted{color:var(--vo-muted)}.vo-num{font-variant-numeric:tabular-nums}.vo-spin{width:12px;height:12px;border-radius:50%;border:1.5px solid currentColor;border-right-color:transparent;animation:vo-rot .8s linear infinite;flex:none;display:inline-block}@keyframes vo-rot{to{transform:rotate(360deg)}}.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}.vo-pop{position:absolute;z-index:40;top:100%;left:0;margin-top:6px;padding:6px;background:var(--vo-surface);border:1px solid var(--vo-line);border-radius:var(--vo-r-in);box-shadow:var(--vo-shadow-pop);display:flex;flex-direction:column;gap:2px}.vo-pop[hidden]{display:none}.vo-mi{display:flex;align-items:center;gap:var(--vo-s-3);padding:8px 10px;border-radius:calc(8px * var(--vo-rk));font-size:13px;color:var(--vo-fg);text-align:left;cursor:pointer;transition:background .14s}@media (hover:hover) and (pointer:fine){.vo-mi:hover{background:var(--vo-row)}}.vo-mi>span:first-child{flex:1;min-width:0}.vo-mi .vo-d{display:block;font-size:12px;color:var(--vo-muted)}.vo-mi .vo-ck{color:transparent;flex:none;display:grid;place-items:center}.vo-mi[aria-checked=true] .vo-ck{color:var(--vo-accent)}.vo-tag{display:inline-flex;align-items:center;height:20px;padding:0 8px;border-radius:var(--vo-r-pill);font-size:11.5px;font-weight:500;flex:none}.vo-tag.vo-warn{background:var(--vo-warn-bg);color:var(--vo-warn)}.vo-enter{animation:vo-pgxin .5s var(--vo-ease) both}@keyframes vo-pgxin{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.vo-leave{animation:vo-pgxout .3s var(--vo-ease) both}@keyframes vo-pgxout{to{opacity:0;transform:translateY(-6px)}}\n"] }]
441
+ }], propDecorators: { title: [{
442
+ type: Input
443
+ }], subtitle: [{
444
+ type: Input
445
+ }], iconName: [{
446
+ type: Input
447
+ }], scopes: [{
448
+ type: Input
449
+ }], value: [{
450
+ type: Input
451
+ }], defaultValue: [{
452
+ type: Input
453
+ }], valueChange: [{
454
+ type: Output
455
+ }], durations: [{
456
+ type: Input
457
+ }], durationDetails: [{
458
+ type: Input
459
+ }], duration: [{
460
+ type: Input
461
+ }], defaultDuration: [{
462
+ type: Input
463
+ }], durationChange: [{
464
+ type: Output
465
+ }], status: [{
466
+ type: Input
467
+ }], defaultStatus: [{
468
+ type: Input
469
+ }], statusChange: [{
470
+ type: Output
471
+ }], allowEvent: [{
472
+ type: Output
473
+ }], declineEvent: [{
474
+ type: Output
475
+ }], revokeEvent: [{
476
+ type: Output
477
+ }], undoEvent: [{
478
+ type: Output
479
+ }], allowedDetail: [{
480
+ type: Input
481
+ }], allowedTitle: [{
482
+ type: Input
483
+ }], working: [{
484
+ type: Input
485
+ }], meta: [{
486
+ type: Input
487
+ }], followUp: [{
488
+ type: Input
489
+ }], declineLabel: [{
490
+ type: Input
491
+ }], declinedTitle: [{
492
+ type: Input
493
+ }], declinedDetail: [{
494
+ type: Input
495
+ }], bare: [{
496
+ type: Input
497
+ }] } });
498
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1nYXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Blcm1pc3Npb24tZ2F0ZS9wZXJtaXNzaW9uLWdhdGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlFQUFpRTtBQUNqRSxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLCtFQUErRTtBQUMvRSwwRUFBMEU7QUFDMUUsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFDL0UsK0VBQStFO0FBQy9FLEVBQUU7QUFDRiwwRUFBMEU7QUFDMUUsZ0ZBQWdGO0FBQ2hGLHdFQUF3RTtBQUN4RSx3Q0FBd0M7QUFFeEMsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixpQkFBaUIsRUFDakIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQW1CLE1BQU0sd0JBQXdCLENBQUM7QUFDMUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBa0J0RSxvR0FBb0c7QUFrSnBHLE1BQU0sT0FBTyx1QkFBdUI7SUFqSnBDO1FBa0pFLDJEQUEyRDtRQUNsRCxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBR3BCLDBGQUEwRjtRQUNqRixhQUFRLEdBQWUsT0FBTyxDQUFDO1FBQy9CLFdBQU0sR0FBc0IsRUFBRSxDQUFDO1FBSS9CLGlCQUFZLEdBQWEsRUFBRSxDQUFDO1FBQzNCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUVyRCxpRkFBaUY7UUFDeEUsY0FBUyxHQUFhLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNoRSxtRUFBbUU7UUFDMUQsb0JBQWUsR0FBMkI7WUFDakQsV0FBVyxFQUFFLHdCQUF3QjtZQUNyQyxLQUFLLEVBQUUsZ0JBQWdCO1lBQ3ZCLE1BQU0sRUFBRSxxQkFBcUI7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LGlCQUNELGlCQUFpQixDQUFDLElBQUksV0FDNUIsQ0FBQyxlQUFlLENBQUMsWUFDaEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUlUOzhCQUtRLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUdHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBR0UsU0FBUztzQkFBakIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDSSxjQUFjO3NCQUF2QixNQUFNO2dCQUdFLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU07Z0JBR0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcsU0FBUztzQkFBbEIsTUFBTTtnQkFHRSxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGZyYW1ld29yay9hbmd1bGFyL3Blcm1pc3Npb24tZ2F0ZS9wZXJtaXNzaW9uLWdhdGUuY29tcG9uZW50LnRzXG4vL1xuLy8gTmF0aXZlIEFuZ3VsYXIgcG9ydCBvZiBmcmFtZXdvcmsvcmVhY3QvcGVybWlzc2lvbi1nYXRlL1Blcm1pc3Npb25HYXRlLnRzeC5cbi8vIFRoZSBhZ2VudCBhc2tzIGJlZm9yZSBpdCBhY3RzOiBhIGNhcmQgd2l0aCB0aGUgcXVlc3Rpb24sIHRoZSBzY29wZXMgdG8gdGljayxcbi8vIGFuZCBhIGZvb3RlciB3aXRoIGhvdyBsb25nIHRoZSBncmFudCBsYXN0cyBhbmQgdGhlIHR3byBhbnN3ZXJzIChBbGxvdyAvXG4vLyBkZWNsaW5lKS4gT25jZSBhbGxvd2VkIGl0IGdpdmVzIHdheSB0byBhIHNob3J0ZXIgcmVzdWx0IHJvdyAoYSBzcGlubmVyIHdoaWxlXG4vLyB0aGUgYWdlbnQgd29ya3MsIGEgZ3JlZW4gY2hlY2sgd2hlbiBkb25lKSB3aXRoIGEgUmV2b2tlIGJ1dHRvbjsgZGVjbGluaW5nXG4vLyBzaG93cyBhbiB1bmRvYWJsZSBub3RpY2UuIEEgZm9sbG93LXVwIGFzayBtaWQtcnVuIHR1cm5zIHRoZSBpY29uIHRpbGUgYW1iZXIuXG4vLyBJbnB1dHMgbWlycm9yIHRoZSBSZWFjdCBwcm9wczsgUmVhY3QgY2FsbGJhY2tzIGJlY29tZSBAT3V0cHV0IEV2ZW50RW1pdHRlcnMuXG4vL1xuLy8gSWNvbiBub3RlOiB0aGUgUmVhY3QgZGVmYXVsdCB0aWxlIGljb24gaXMgYSBzaGllbGQsIHdoaWNoIGlzIG5vdCBpbiB0aGVcbi8vIEFuZ3VsYXIgY29yZSBnbHlwaCBzZXQuIFRoZSBkZWZhdWx0IGhlcmUgaXMgYGZpZ21hYCAoYXMgaW4gdGhlIFZhbmlsbGEgZGVtbyk7XG4vLyBwYXNzIGFueSBWb0ljb25OYW1lIHZpYSBbaWNvbk5hbWVdIHRvIG92ZXJyaWRlLiBBdmFpbGFibGUgZ2x5cGhzOiBzZWVcbi8vIFZvSWNvbk5hbWUgaW4gLi4vY29yZS9pY29uLmNvbXBvbmVudC5cblxuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWb0ljb25Db21wb25lbnQsIHR5cGUgVm9JY29uTmFtZSB9IGZyb20gJy4uL2NvcmUvaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVkdWNlZE1vdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL3JlZHVjZWQtbW90aW9uLnNlcnZpY2UnO1xuXG4vKiogU29tZXRoaW5nIHRoZSBhZ2VudCBpcyBhc2tpbmcgdG8gYmUgYWxsb3dlZCB0byBkby4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvblNjb3BlIHtcbiAga2V5OiBzdHJpbmc7XG4gIC8qKiBMaWtlIFwiRWRpdCBmcmFtZXNcIi4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqIFRoZSBxdWlldCBsaW5lIHVuZGVyIGl0LCBsaWtlIFwiT25seSBvbiBhIG5ldyBwYWdlXCIuICovXG4gIGRldGFpbD86IHN0cmluZztcbiAgLyoqIEEgd2FybmluZyB0YWcgYWZ0ZXIgaXQsIGxpa2UgXCJSaXNreVwiLiAqL1xuICByaXNrPzogc3RyaW5nO1xuICAvKiogV2hhdCB0aGUgcmlzayB0YWcgcmV2ZWFscyBvbiBob3ZlciwgbGlrZSBcIkNoZWNrb3V0IGFuZCBEb2NzIHVzZSB0aGlzIGxpYnJhcnlcIi4gKi9cbiAgcmlza0RldGFpbD86IHN0cmluZztcbn1cblxuLyoqIGFza2luZywgYWxsb3dlZCBvciBkZWNsaW5lZC4gKi9cbmV4cG9ydCB0eXBlIFBlcm1pc3Npb25TdGF0dXMgPSAnYXNraW5nJyB8ICdhbGxvd2VkJyB8ICdkZWNsaW5lZCc7XG5cbi8qKiBUaGUgYWdlbnQgYXNrcyBiZWZvcmUgaXQgYWN0czogcGljayB0aGUgc2NvcGVzIGFuZCBob3cgbG9uZyB0aGV5IGxhc3QsIHRoZW4gYWxsb3cgb3IgZGVjbGluZS4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZvLXBlcm1pc3Npb24tZ2F0ZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtWb0ljb25Db21wb25lbnRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdm89XCJcIlxuICAgICAgY2xhc3M9XCJ2by1wZ3hcIlxuICAgICAgW2NsYXNzLnZvLXBhbmVsXT1cIiFiYXJlXCJcbiAgICAgIFtjbGFzcy52by1lc2NdPVwiZm9sbG93VXAgJiYgc3RhdGUgPT09ICdhc2tpbmcnXCJcbiAgICAgIFtjbGFzcy52by1oZWxkXT1cImhlbGQgIT09IG51bGxcIlxuICAgICAgW3N0eWxlLm1pbkhlaWdodC5weF09XCJoZWxkICE9PSBudWxsID8gaGVsZCA6IG51bGxcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2by1wZ3gtaFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInZvLXBneC1pY1wiPjx2by1pY29uIFtuYW1lXT1cImljb25OYW1lXCI+PC92by1pY29uPjwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZvLXBneC1odFwiPlxuICAgICAgICAgIDxiPnt7IHRpdGxlIH19PC9iPlxuICAgICAgICAgIEBpZiAoc3VidGl0bGUpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidm8tbXV0ZWRcIj57eyBzdWJ0aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIEBpZiAoc3RhdGUgPT09ICdhc2tpbmcnKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2by1wZ3gtc2NcIiBbY2xhc3Mudm8tZW50ZXJdPVwiYmFjayA+IDBcIj5cbiAgICAgICAgICBAZm9yIChzIG9mIHNjb3BlczsgdHJhY2sgcy5rZXkpIHtcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZvLXBneC1vXCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwidGlja2VkLmluY2x1ZGVzKHMua2V5KVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGUocy5rZXkpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2by1ieFwiPjx2by1pY29uIG5hbWU9XCJjaGVja1wiIHNpemU9XCJ4c1wiPjwvdm8taWNvbj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidm8tdFwiXG4gICAgICAgICAgICAgICAgPnt7IHMubGFiZWwgfX1AaWYgKHMuZGV0YWlsKSB7PHNwYW4gY2xhc3M9XCJ2by1kXCI+e3sgcy5kZXRhaWwgfX08L3NwYW4+fTwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEBpZiAocy5yaXNrKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2by10YWcgdm8td2FyblwiIFthdHRyLnRpdGxlXT1cInMucmlza0RldGFpbCA/PyBudWxsXCI+e3sgcy5yaXNrIH19PC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2by1wZ3gtZlwiIFtjbGFzcy52by1lbnRlcl09XCJiYWNrID4gMFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJ2by1wZ3gtZGJcIlxuICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cIm1lbnVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJtZW51T3BlblwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiSG93IGxvbmdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1lbnUoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2by1wZ3gtZHZcIj57eyBkdXJMYWJlbChkdXIpIH19PC9zcGFuPlxuICAgICAgICAgICAgPHZvLWljb24gbmFtZT1cImNoZXYtZFwiIHNpemU9XCJ4c1wiPjwvdm8taWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInZvLXNwXCI+PC9zcGFuPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidm8tcGlsbCB2by1naG9zdCB2by1zbSB2by1wZ3gtbm9cIiAoY2xpY2spPVwiZGVjbGluZSgpXCI+XG4gICAgICAgICAgICB7eyBkZWNsaW5lTGFiZWwgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwidm8tcGlsbCB2by1wcmltYXJ5IHZvLXNtIHZvLXBneC1va1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW4gfHwgd2FpdGluZ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWxsb3coKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQGlmICh3YWl0aW5nKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidm8tc3BpblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICB7eyBuID8gJ0FsbG93ICcgKyBuICsgKG4gPiAxID8gJyBzY29wZXMnIDogJyBzY29wZScpIDogJ1BpY2sgYSBzY29wZScgfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ2by1wb3Agdm8tcGd4LXBvcFwiXG4gICAgICAgIHJvbGU9XCJtZW51XCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIkhvdyBsb25nXCJcbiAgICAgICAgW2hpZGRlbl09XCIhbWVudU9wZW5cIlxuICAgICAgPlxuICAgICAgICBAZm9yIChkIG9mIGR1cmF0aW9uczsgdHJhY2sgZCkge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJ2by1taVwiXG4gICAgICAgICAgICByb2xlPVwibWVudWl0ZW1yYWRpb1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwiZCA9PT0gZHVyXCJcbiAgICAgICAgICAgIChjbGljayk9XCJwaWNrRHVyYXRpb24oZClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgID57eyBkdXJMYWJlbChkKSB9fUBpZiAoZHVyYXRpb25EZXRhaWxzW2RdKSB7PHNwYW4gY2xhc3M9XCJ2by1kXCI+e3tcbiAgICAgICAgICAgICAgICBkdXJhdGlvbkRldGFpbHNbZF1cbiAgICAgICAgICAgICAgfX08L3NwYW4+fTwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2by1ja1wiPjx2by1pY29uIG5hbWU9XCJjaGVja1wiIHNpemU9XCJ4c1wiPjwvdm8taWNvbj48L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICBAaWYgKHN0YXRlID09PSAnYWxsb3dlZCcpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwidm8tcGd4LWRvbmVcIlxuICAgICAgICAgIFtjbGFzcy52by1ydW5dPVwid29ya2luZ1wiXG4gICAgICAgICAgW2NsYXNzLnZvLW9rXT1cIiF3b3JraW5nXCJcbiAgICAgICAgICBbY2xhc3Mudm8tbGVhdmVdPVwibGVhdmluZ1wiXG4gICAgICAgICAgW2NsYXNzLnZvLWVudGVyXT1cIiFsZWF2aW5nXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidm8tZ1wiPlxuICAgICAgICAgICAgQGlmICh3b3JraW5nKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidm8tc3BpblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8dm8taWNvbiBuYW1lPVwib2tcIj48L3ZvLWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidm8tdFwiPlxuICAgICAgICAgICAgPGIgY2xhc3M9XCJ2by1wZ3gtYVwiPnt7XG4gICAgICAgICAgICAgIGFsbG93ZWRUaXRsZSA/P1xuICAgICAgICAgICAgICAgICdBbGxvd2VkICcgK1xuICAgICAgICAgICAgICAgICAgKGdyYW50ZWQgfHwgbikgK1xuICAgICAgICAgICAgICAgICAgKChncmFudGVkIHx8IG4pID4gMSA/ICcgc2NvcGVzICcgOiAnIHNjb3BlICcpICtcbiAgICAgICAgICAgICAgICAgIGR1clNwYW4oZHVyKVxuICAgICAgICAgICAgfX08L2I+XG4gICAgICAgICAgICBAaWYgKGFsbG93ZWREZXRhaWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZvLXBneC1kXCI+e3sgYWxsb3dlZERldGFpbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgQGlmIChtZXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidm8tcGd4LXRtIHZvLW51bVwiPnt7IG1ldGEgfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidm8tcGlsbCB2by1naG9zdCB2by1zbVwiIChjbGljayk9XCJyZXZva2UoKVwiPlJldm9rZTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgQGlmIChzdGF0ZSA9PT0gJ2RlY2xpbmVkJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidm8tcGd4LWRvbmUgdm8tZW50ZXJcIiBzdHlsZT1cImJhY2tncm91bmQ6dmFyKC0tdm8tY2hpcClcIj5cbiAgICAgICAgICA8dm8taWNvbiBuYW1lPVwiaW5mb1wiPjwvdm8taWNvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInZvLXRcIlxuICAgICAgICAgICAgPnt7IGRlY2xpbmVkVGl0bGUgfX1AaWYgKGRlY2xpbmVkRGV0YWlsKSB7PHNwYW4+e3sgZGVjbGluZWREZXRhaWwgfX08L3NwYW4+fTwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInZvLXBpbGwgdm8tZ2hvc3Qgdm8tc21cIiAoY2xpY2spPVwidW5kbygpXCI+VW5kbzwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmw6ICcuL3Blcm1pc3Npb24tZ2F0ZS5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uR2F0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8qKiBUaGUgcXVlc3Rpb24sIGxpa2UgXCJBbGxvdyB0aGUgYWdlbnQgdG8gZWRpdCBGaWdtYT9cIi4gKi9cbiAgQElucHV0KCkgdGl0bGUgPSAnJztcbiAgLyoqIFdoeSBpdCBhc2tzLiAqL1xuICBASW5wdXQoKSBzdWJ0aXRsZT86IHN0cmluZztcbiAgLyoqIFRoZSBnbHlwaCBpbiB0aGUgdGlsZSBiZXNpZGUgdGhlIHF1ZXN0aW9uLiBEZWZhdWx0cyB0byBmaWdtYSAoUmVhY3QgdXNlcyBhIHNoaWVsZCkuICovXG4gIEBJbnB1dCgpIGljb25OYW1lOiBWb0ljb25OYW1lID0gJ2ZpZ21hJztcbiAgQElucHV0KCkgc2NvcGVzOiBQZXJtaXNzaW9uU2NvcGVbXSA9IFtdO1xuXG4gIC8qKiBLZXlzIG9mIHRoZSB0aWNrZWQgc2NvcGVzLiBMZWF2ZSBpdCBvdXQgdG8gbGV0IHRoZSBjaGVja2JveGVzIGhvbGQgdGhlaXIgb3duLiAqL1xuICBASW5wdXQoKSB2YWx1ZT86IHN0cmluZ1tdO1xuICBASW5wdXQoKSBkZWZhdWx0VmFsdWU6IHN0cmluZ1tdID0gW107XG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgLyoqIEhvdyBsb25nIHRoZSBwZXJtaXNzaW9uIGxhc3RzLCBwaWNrZWQgZnJvbSBhIHNtYWxsIGRyb3Bkb3duIGluIHRoZSBmb290ZXIuICovXG4gIEBJbnB1dCgpIGR1cmF0aW9uczogc3RyaW5nW10gPSBbJ1RoaXMgdGFzaycsICdUb2RheScsICdBbHdheXMnXTtcbiAgLyoqIFRoZSBxdWlldCBsaW5lIHVuZGVyIGVhY2ggZHVyYXRpb24gaW4gaXRzIG1lbnUsIGJ5IGR1cmF0aW9uLiAqL1xuICBASW5wdXQoKSBkdXJhdGlvbkRldGFpbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgJ1RoaXMgdGFzayc6ICdVbnRpbCB0aGUgdGFzayBpcyBkb25lJyxcbiAgICBUb2RheTogJ1VudGlsIG1pZG5pZ2h0JyxcbiAgICBBbHdheXM6ICdVbnRpbCB5b3UgcmV2b2tlIGl0JyxcbiAgfTtcbiAgQElucHV0KCkgZHVyYXRpb24/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRlZmF1bHREdXJhdGlvbj86IHN0cmluZztcbiAgQE91dHB1dCgpIGR1cmF0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqIGFza2luZywgYWxsb3dlZCBvciBkZWNsaW5lZC4gTGVhdmUgaXQgb3V0IHRvIGxldCB0aGUgYnV0dG9ucyBtb3ZlIGl0LiAqL1xuICBASW5wdXQoKSBzdGF0dXM/OiBQZXJtaXNzaW9uU3RhdHVzO1xuICBASW5wdXQoKSBkZWZhdWx0U3RhdHVzOiBQZXJtaXNzaW9uU3RhdHVzID0gJ2Fza2luZyc7XG4gIEBPdXRwdXQoKSBzdGF0dXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFBlcm1pc3Npb25TdGF0dXM+KCk7XG5cbiAgLyoqIENhbGxlZCB3aXRoIHRoZSB0aWNrZWQgc2NvcGVzIGFuZCB0aGUgZHVyYXRpb24uIFJldHVybiBhIHByb21pc2UgYW5kIHRoZSBidXR0b24gc3BpbnMgdW50aWwgaXQgc2V0dGxlcy4gKi9cbiAgQE91dHB1dCgpIGFsbG93RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHsga2V5czogc3RyaW5nW107IGR1cmF0aW9uOiBzdHJpbmcgfT4oKTtcbiAgQE91dHB1dCgpIGRlY2xpbmVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIENhbGxlZCBieSBSZXZva2UsIGFmdGVyIGFsbG93aW5nLiAqL1xuICBAT3V0cHV0KCkgcmV2b2tlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKiBDYWxsZWQgYnkgVW5kbywgYWZ0ZXIgZGVjbGluaW5nLiAqL1xuICBAT3V0cHV0KCkgdW5kb0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBUaGUgbGluZSB1bmRlciBcIkFsbG93ZWQg4oCmXCIsIGxpa2UgXCJBcHBseWluZyB0aGUgcHJpY2luZyBmaXhlcyBub3dcIi4gKi9cbiAgQElucHV0KCkgYWxsb3dlZERldGFpbD86IHN0cmluZztcbiAgLyoqIFJlcGxhY2VzIFwiQWxsb3dlZCAyIHNjb3BlcyBmb3IgdGhpcyB0YXNrXCIsIGxpa2UgXCJEb25lLiA2IGZyYW1lcyBlZGl0ZWRcIi4gKi9cbiAgQElucHV0KCkgYWxsb3dlZFRpdGxlPzogc3RyaW5nO1xuICAvKiogVGhlIGFnZW50IGlzIHN0aWxsIHdvcmtpbmcgdW5kZXIgdGhlIHBlcm1pc3Npb246IGEgc3Bpbm5lciBpbnN0ZWFkIG9mIHRoZSBncmVlbiBjaGVjay4gKi9cbiAgQElucHV0KCkgd29ya2luZyA9IGZhbHNlO1xuICAvKiogUXVpZXQgdGV4dCBhdCB0aGUgZW5kIG9mIHRoZSBhbGxvd2VkIHJvdywgbGlrZSBhbiBlbGFwc2VkIHRpbWUgXCIwOjA0XCIuICovXG4gIEBJbnB1dCgpIG1ldGE/OiBzdHJpbmc7XG4gIC8qKiBBIGZvbGxvdy11cCBhc2sgaW4gdGhlIG1pZGRsZSBvZiBhIHJ1biwgZm9yIG9uZSBtb3JlIHNjb3BlOiB0aGUgaWNvbiB0aWxlIHR1cm5zIGFtYmVyLiAqL1xuICBASW5wdXQoKSBmb2xsb3dVcCA9IGZhbHNlO1xuICAvKiogVGhlIGRlY2xpbmUgYnV0dG9uLiBEZWZhdWx0cyB0byBcIk5vdCBub3dcIjsgYSBmb2xsb3ctdXAgYXNrIG1pZ2h0IHNheSBcIlNraXAgdGhpcyBmcmFtZVwiLiAqL1xuICBASW5wdXQoKSBkZWNsaW5lTGFiZWwgPSAnTm90IG5vdyc7XG4gIC8qKiBTaG93biBhZnRlciBOb3Qgbm93LiAqL1xuICBASW5wdXQoKSBkZWNsaW5lZFRpdGxlID0gJ1RoZSBhZ2VudCB3aWxsIHNraXAgdGhlc2UgY2hhbmdlcyc7XG4gIEBJbnB1dCgpIGRlY2xpbmVkRGV0YWlsPzogc3RyaW5nO1xuICAvKiogU2l0cyBmbGF0IGluIGEgY2hhdCB0aHJlYWQgKHRoZSBkZWZhdWx0KS4gU2V0IGZhbHNlIHRvIGdpdmUgaXQgYSBjYXJkIG9mIGl0cyBvd24uICovXG4gIEBJbnB1dCgpIGJhcmUgPSB0cnVlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbW90aW9uID0gaW5qZWN0KFJlZHVjZWRNb3Rpb25TZXJ2aWNlKTtcblxuICAvKiogSW50ZXJuYWwgc3RhdGUgd2hlbiB0aGUgbWF0Y2hpbmcgaW5wdXQgaXMgbGVmdCB1bmNvbnRyb2xsZWQuICovXG4gIHByaXZhdGUgaW5uZXJUaWNrZWQ6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgaW5uZXJEdXI/OiBzdHJpbmc7XG4gIHByaXZhdGUgaW5uZXJTdGF0dXM6IFBlcm1pc3Npb25TdGF0dXMgPSAnYXNraW5nJztcblxuICBtZW51T3BlbiA9IGZhbHNlO1xuICB3YWl0aW5nID0gZmFsc2U7XG4gIC8vIGEgcmV2b2tlZCBwZXJtaXNzaW9uIGZhZGVzIG91dCBiZWZvcmUgdGhlIHNjb3BlcyBjb21lIGJhY2tcbiAgbGVhdmluZyA9IGZhbHNlO1xuICAvLyB0aGUgc2NvcGVzIHBsYXkgdGhlaXIgZW50cmFuY2Ugd2hlbiB0aGV5IGNvbWUgYmFjaywgbm90IHdoZW4gdGhlIGNhcmQgZmlyc3QgYXBwZWFyc1xuICBiYWNrID0gMDtcbiAgZ3JhbnRlZCA9IDA7XG4gIC8vIHRoZSBzY29wZXMgZ2l2ZSB3YXkgdG8gYSBzaG9ydGVyIHJlc3VsdCByb3c6IHRoZSBnYXRlIGtlZXBzIHRoZSBoZWlnaHQgaXQgaGFkIGFuZCBjZW50cmVzIHRoZSByb3dcbiAgaGVsZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbGVhdmVUaW1lcj86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZGVmYXVsdFZhbHVlJ10gJiYgdGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkICYmICF0aGlzLmlubmVyVGlja2VkLmxlbmd0aCkge1xuICAgICAgdGhpcy5pbm5lclRpY2tlZCA9IFsuLi50aGlzLmRlZmF1bHRWYWx1ZV07XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydkZWZhdWx0U3RhdHVzJ10gJiYgdGhpcy5zdGF0dXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pbm5lclN0YXR1cyA9IHRoaXMuZGVmYXVsdFN0YXR1cztcbiAgICB9XG4gIH1cblxuICBnZXQgdGlja2VkKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSA/PyAodGhpcy5pbm5lclRpY2tlZC5sZW5ndGggPyB0aGlzLmlubmVyVGlja2VkIDogdGhpcy5kZWZhdWx0VmFsdWUpO1xuICB9XG5cbiAgZ2V0IGR1cigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmR1cmF0aW9uID8/IHRoaXMuaW5uZXJEdXIgPz8gdGhpcy5kZWZhdWx0RHVyYXRpb24gPz8gdGhpcy5kdXJhdGlvbnNbMF0gPz8gJyc7XG4gIH1cblxuICBnZXQgc3RhdGUoKTogUGVybWlzc2lvblN0YXR1cyB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID8/IHRoaXMuaW5uZXJTdGF0dXM7XG4gIH1cblxuICBnZXQgbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRpY2tlZC5sZW5ndGg7XG4gIH1cblxuICAvLyBcIkZvciB0aGlzIHRhc2tcIiBpbiB0aGUgbWVudSBhbmQgXCJmb3IgdGhpcyB0YXNrXCIgYWZ0ZXIgQWxsb3dlZDsgQWx3YXlzIHJlYWRzIGFzIGl0IGlzXG4gIGR1ckxhYmVsKGQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIC9eYWx3YXlzJC9pLnRlc3QoZCkgPyBkIDogJ0ZvciAnICsgZC50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIGR1clNwYW4oZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gL15hbHdheXMkL2kudGVzdChkKSA/ICdhbHdheXMnIDogJ2ZvciAnICsgZC50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRUaWNrZWQoa2V5czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkKSB0aGlzLmlubmVyVGlja2VkID0ga2V5cztcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoa2V5cyk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRTdGF0dXMoczogUGVybWlzc2lvblN0YXR1cyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gdW5kZWZpbmVkKSB0aGlzLmlubmVyU3RhdHVzID0gcztcbiAgICB0aGlzLnN0YXR1c0NoYW5nZS5lbWl0KHMpO1xuICB9XG5cbiAgdG9nZ2xlKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMudGlja2VkLmluY2x1ZGVzKGtleSlcbiAgICAgID8gdGhpcy50aWNrZWQuZmlsdGVyKChrKSA9PiBrICE9PSBrZXkpXG4gICAgICA6IHRoaXMuc2NvcGVzLm1hcCgocykgPT4gcy5rZXkpLmZpbHRlcigoaykgPT4gayA9PT0ga2V5IHx8IHRoaXMudGlja2VkLmluY2x1ZGVzKGspKTtcbiAgICB0aGlzLnNldFRpY2tlZChuZXh0KTtcbiAgfVxuXG4gIHRvZ2dsZU1lbnUoKTogdm9pZCB7XG4gICAgdGhpcy5tZW51T3BlbiA9ICF0aGlzLm1lbnVPcGVuO1xuICB9XG5cbiAgcGlja0R1cmF0aW9uKGQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmR1cmF0aW9uID09PSB1bmRlZmluZWQpIHRoaXMuaW5uZXJEdXIgPSBkO1xuICAgIHRoaXMuZHVyYXRpb25DaGFuZ2UuZW1pdChkKTtcbiAgICB0aGlzLm1lbnVPcGVuID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhvbGQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGVsZCA9PT0gbnVsbCkgdGhpcy5oZWxkID0gMDtcbiAgfVxuXG4gIGFzeW5jIGFsbG93KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5uIHx8IHRoaXMud2FpdGluZykgcmV0dXJuO1xuICAgIHRoaXMud2FpdGluZyA9IHRydWU7XG4gICAgdGhpcy5ncmFudGVkID0gdGhpcy5uO1xuICAgIHRoaXMuYWxsb3dFdmVudC5lbWl0KHsga2V5czogdGhpcy50aWNrZWQsIGR1cmF0aW9uOiB0aGlzLmR1ciB9KTtcbiAgICAvLyB0aGUgQWxsb3cgYnV0dG9uIHNwaW5zIGJyaWVmbHksIGFzIHRoZSBSZWFjdCBwb3J0IGF3YWl0cyBvbkFsbG93XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgdGhpcy5tb3Rpb24ucmVkdWNlKCkgPyAwIDogNTAwKSk7XG4gICAgdGhpcy53YWl0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5ob2xkKCk7XG4gICAgdGhpcy5zZXRTdGF0dXMoJ2FsbG93ZWQnKTtcbiAgfVxuXG4gIGRlY2xpbmUoKTogdm9pZCB7XG4gICAgdGhpcy5ob2xkKCk7XG4gICAgdGhpcy5zZXRTdGF0dXMoJ2RlY2xpbmVkJyk7XG4gICAgdGhpcy5kZWNsaW5lRXZlbnQuZW1pdCgpO1xuICB9XG5cbiAgcmV2b2tlKCk6IHZvaWQge1xuICAgIHRoaXMubGVhdmluZyA9IHRydWU7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMubGVhdmVUaW1lcik7XG4gICAgdGhpcy5sZWF2ZVRpbWVyID0gc2V0VGltZW91dChcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5sZWF2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGVsZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc2V0U3RhdHVzKCdhc2tpbmcnKTtcbiAgICAgICAgdGhpcy5iYWNrICs9IDE7XG4gICAgICAgIHRoaXMucmV2b2tlRXZlbnQuZW1pdCgpO1xuICAgICAgfSxcbiAgICAgIHRoaXMubW90aW9uLnJlZHVjZSgpID8gMCA6IDMwMCxcbiAgICApO1xuICB9XG5cbiAgdW5kbygpOiB2b2lkIHtcbiAgICB0aGlzLmhlbGQgPSBudWxsO1xuICAgIHRoaXMuc2V0U3RhdHVzKCdhc2tpbmcnKTtcbiAgICB0aGlzLmJhY2sgKz0gMTtcbiAgICB0aGlzLnVuZG9FdmVudC5lbWl0KCk7XG4gIH1cbn1cbiJdfQ==