@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,93 @@
1
+ import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnChanges } from '@angular/core';
2
+ import { type VoIconName } from '../core/icon.component';
3
+ import * as i0 from "@angular/core";
4
+ export type RunState = 'queued' | 'running' | 'failed' | 'done';
5
+ export interface RunStep {
6
+ label: string;
7
+ state: RunState;
8
+ /** What the step came to, shown once it is done, like "3 of 3" or "4 articles". */
9
+ meta?: string;
10
+ }
11
+ export interface RunJob {
12
+ /** Keeps the job's row when the list changes order. Defaults to the title. */
13
+ id?: string;
14
+ /** What the job is, like "Draft the launch email". */
15
+ title: string;
16
+ /** Who does it, like "Copy agent", under the title. */
17
+ agent?: string;
18
+ /** The icon on the job's badge. Defaults to a spark. */
19
+ icon?: VoIconName;
20
+ state: RunState;
21
+ /** How far the job is, 0 to 1. Defaults to the share of its steps that are done. */
22
+ progress?: number;
23
+ /** The time at the end of the row, like "in ~4s", "12s left" or "4.2s". */
24
+ time?: string;
25
+ /** The line after the agent while it runs. Defaults to the step running or failed. */
26
+ note?: string;
27
+ steps?: RunStep[];
28
+ }
29
+ export type RunQueueDensity = 'detailed' | 'compact';
30
+ /** Internal per-job render state. */
31
+ interface JobView {
32
+ job: RunJob;
33
+ index: number;
34
+ key: string;
35
+ part: 'run' | 'next' | 'done';
36
+ dataS: 'run' | 'fail' | 'done' | 'wait';
37
+ progress: number;
38
+ note?: string;
39
+ showSteps: boolean;
40
+ }
41
+ /** A queue of agent jobs: running, up next, and done, with per-row progress and a compact toggle. */
42
+ export declare class RunQueueComponent implements AfterViewInit, OnChanges {
43
+ private readonly cdr;
44
+ private readonly host;
45
+ jobs: RunJob[];
46
+ /** The queue's name over its status line. */
47
+ title: string;
48
+ /** Overrides the status line. */
49
+ status?: string;
50
+ /** The line under "All N jobs done" once every job is done. */
51
+ summary?: string;
52
+ /** detailed lists the running job's steps, compact folds them away. */
53
+ set density(value: RunQueueDensity | undefined);
54
+ defaultDensity: RunQueueDensity;
55
+ /** Whether the Retry button shows on a failed step (React: onRetry wired). */
56
+ retryWired: boolean;
57
+ /** Sits flat in a chat thread, with no card. */
58
+ bare: boolean;
59
+ densityChange: EventEmitter<RunQueueDensity>;
60
+ retry: EventEmitter<{
61
+ job: number;
62
+ step: number;
63
+ }>;
64
+ readonly densityOptions: {
65
+ value: RunQueueDensity;
66
+ label: string;
67
+ }[];
68
+ dens: RunQueueDensity;
69
+ knobLeft: number;
70
+ knobWidth: number;
71
+ private controlled;
72
+ private ready;
73
+ constructor(cdr: ChangeDetectorRef, host: ElementRef<HTMLElement>);
74
+ private keyOf;
75
+ private partOf;
76
+ get views(): JobView[];
77
+ get runViews(): JobView[];
78
+ get nextViews(): JobView[];
79
+ get doneViews(): JobView[];
80
+ get doneCount(): number;
81
+ get fin(): boolean;
82
+ get line(): string;
83
+ subLine(v: JobView): string;
84
+ pctText(v: JobView): number;
85
+ stepClass(st: RunStep): string;
86
+ setDensity(value: RunQueueDensity): void;
87
+ ngAfterViewInit(): void;
88
+ ngOnChanges(): void;
89
+ private placeKnob;
90
+ static ɵfac: i0.ɵɵFactoryDeclaration<RunQueueComponent, never>;
91
+ static ɵcmp: i0.ɵɵComponentDeclaration<RunQueueComponent, "vo-run-queue", never, { "jobs": { "alias": "jobs"; "required": false; }; "title": { "alias": "title"; "required": false; }; "status": { "alias": "status"; "required": false; }; "summary": { "alias": "summary"; "required": false; }; "density": { "alias": "density"; "required": false; }; "defaultDensity": { "alias": "defaultDensity"; "required": false; }; "retryWired": { "alias": "retryWired"; "required": false; }; "bare": { "alias": "bare"; "required": false; }; }, { "densityChange": "densityChange"; "retry": "retry"; }, never, never, true, never>;
92
+ }
93
+ export {};
@@ -0,0 +1,81 @@
1
+ import { AfterViewInit, EventEmitter, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /** One stat in the row under the title, like "files" or "cost". */
4
+ export interface RunStat {
5
+ /** Like "files" or "cost". */
6
+ label: string;
7
+ /** Counts up from 0 when the summary appears. */
8
+ value: number;
9
+ /** Before the number, like "$". */
10
+ prefix?: string;
11
+ /** After the number, like "k". */
12
+ suffix?: string;
13
+ /** Decimal places, like 2 for a cost. */
14
+ decimals?: number;
15
+ }
16
+ /** One file the run changed, under "What changed". */
17
+ export interface RunChange {
18
+ file: string;
19
+ added: number;
20
+ removed: number;
21
+ }
22
+ /** The button at the end of a need, like Review. */
23
+ export interface RunNeedAction {
24
+ label: string;
25
+ onClick: () => void;
26
+ /** Swaps the label for a spinner. */
27
+ busy?: boolean;
28
+ }
29
+ /** One item left for the person, under "Needs you". */
30
+ export interface RunNeed {
31
+ key: string;
32
+ /** What needs the person. Crossfades when it changes. */
33
+ text: string;
34
+ action?: RunNeedAction;
35
+ }
36
+ export declare class RunSummaryComponent implements AfterViewInit, OnChanges, OnDestroy {
37
+ /** Defaults to "Run complete". */
38
+ title: string;
39
+ /** The title once the changes are undone. */
40
+ undoneTitle: string;
41
+ /** The quiet line under the title, like "Finished in 12m 40s". */
42
+ subtitle?: string;
43
+ /** One line on what the run did. */
44
+ summary?: string;
45
+ stats?: RunStat[];
46
+ /** The files the run changed, under "What changed". */
47
+ changes?: RunChange[];
48
+ /** What is left for the person, under "Needs you". */
49
+ needs?: RunNeed[];
50
+ /** Whether the changes are undone. Leave it out to let "Undo all" toggle it. */
51
+ undone?: boolean;
52
+ defaultUndone: boolean;
53
+ /** Sits flat in a chat thread (the default). Set false to give it a card of its own. */
54
+ bare: boolean;
55
+ /** Adds a button in the corner that opens the run's details. */
56
+ details: EventEmitter<void>;
57
+ /** The main button, "Open changes". */
58
+ openChanges: EventEmitter<void>;
59
+ undoneChange: EventEmitter<boolean>;
60
+ private root;
61
+ private readonly motion;
62
+ private innerUndone;
63
+ /** Whether the glyph should play its entrance (only after undone changes). */
64
+ moved: boolean;
65
+ /** The live counted-up value per stat label; null until its tween starts. */
66
+ private counts;
67
+ private timers;
68
+ private frames;
69
+ ngOnChanges(changes: SimpleChanges): void;
70
+ get isUndone(): boolean;
71
+ ngAfterViewInit(): void;
72
+ /** The text shown for a stat: its live count while rolling, else its final value. */
73
+ display(s: RunStat): string;
74
+ toggleUndone(): void;
75
+ runNeed(a: RunNeedAction): void;
76
+ private tween;
77
+ private after;
78
+ ngOnDestroy(): void;
79
+ static ɵfac: i0.ɵɵFactoryDeclaration<RunSummaryComponent, never>;
80
+ static ɵcmp: i0.ɵɵComponentDeclaration<RunSummaryComponent, "vo-run-summary", never, { "title": { "alias": "title"; "required": false; }; "undoneTitle": { "alias": "undoneTitle"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; "summary": { "alias": "summary"; "required": false; }; "stats": { "alias": "stats"; "required": false; }; "changes": { "alias": "changes"; "required": false; }; "needs": { "alias": "needs"; "required": false; }; "undone": { "alias": "undone"; "required": false; }; "defaultUndone": { "alias": "defaultUndone"; "required": false; }; "bare": { "alias": "bare"; "required": false; }; }, { "details": "details"; "openChanges": "openChanges"; "undoneChange": "undoneChange"; }, never, never, true, never>;
81
+ }
@@ -0,0 +1,139 @@
1
+ import { AfterViewInit, ElementRef, EventEmitter, OnDestroy } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /** A shape for a series, so it reads without colour too. */
4
+ export type ScatterShape = 'circle' | 'square' | 'triangle';
5
+ /** One run: a dot on the chart. */
6
+ export interface ScatterRun {
7
+ id: string | number;
8
+ /** Which series it belongs to, by key. */
9
+ series: string;
10
+ /** Along the bottom, like cost per run in dollars. */
11
+ x: number;
12
+ /** Up the side, like an eval score in %. */
13
+ y: number;
14
+ /** Its dot's size, like thousands of tokens. */
15
+ size: number;
16
+ }
17
+ /** One series: a colour and a shape, with a legend label. */
18
+ export interface ScatterSeries {
19
+ key: string;
20
+ label: string;
21
+ /** Defaults to the chart palette in order: --vo-c1, --vo-c2, --vo-c3. */
22
+ color?: string;
23
+ /** Each series has a shape as well as a colour, so it reads without colour too. */
24
+ shape?: ScatterShape;
25
+ }
26
+ /** Internal per-dot render data. */
27
+ interface DotView {
28
+ run: ScatterRun;
29
+ index: number;
30
+ cls: string;
31
+ fill: string;
32
+ shape: ScatterShape;
33
+ cx: number;
34
+ cy: number;
35
+ r: number;
36
+ }
37
+ export declare class ScatterChartComponent implements AfterViewInit, OnDestroy {
38
+ runs: ScatterRun[];
39
+ series: ScatterSeries[];
40
+ className: string;
41
+ title: string;
42
+ subtitle?: string;
43
+ /** [min, max] of each axis. */
44
+ xDomain: [number, number];
45
+ yDomain: [number, number];
46
+ /** Where the labels go along the bottom. A narrow chart keeps the two ends and the middle. */
47
+ xTicks: number[];
48
+ /** Where the gridlines and their labels go up the side. A narrow chart keeps the two ends and the middle. */
49
+ yTicks: number[];
50
+ xTitle: string;
51
+ yTitle: string;
52
+ formatX: (x: number) => string;
53
+ formatY: (y: number) => string;
54
+ formatSize: (s: number) => string;
55
+ /** The four quadrants the medians make, from the top left, clockwise. A narrow chart keeps the median lines and leaves the names out. */
56
+ quadrants: [string, string, string, string];
57
+ /** Runs to ring, like outliers the agent found. */
58
+ ringed: (string | number)[];
59
+ /** The line under the chart while nothing is selected or in focus. */
60
+ note?: string;
61
+ /** The selected runs, by id. Leave it out to let the chart hold the selection. */
62
+ set selected(value: (string | number)[] | undefined);
63
+ selectedChange: EventEmitter<(string | number)[]>;
64
+ /** Adds "Ask the agent why" to a selection. Return the answer and it streams in. */
65
+ ask: EventEmitter<ScatterRun[]>;
66
+ plotRef: ElementRef<HTMLDivElement>;
67
+ tipRef: ElementRef<HTMLDivElement>;
68
+ private readonly reduced;
69
+ private readonly cdr;
70
+ W: number;
71
+ H: number;
72
+ narrow: boolean;
73
+ l: number;
74
+ b: number;
75
+ t: number;
76
+ rr: number;
77
+ dots: DotView[];
78
+ ringDots: DotView[];
79
+ xt: number[];
80
+ yt: number[];
81
+ mx: number;
82
+ my: number;
83
+ hot: number;
84
+ hr: ScatterRun | null;
85
+ box: number[] | null;
86
+ ttX: number;
87
+ ttY: number;
88
+ focused: boolean;
89
+ order: number[];
90
+ selectedRuns: ScatterRun[];
91
+ avgX: number;
92
+ avgY: number;
93
+ answer: {
94
+ text: string;
95
+ busy: boolean;
96
+ } | null;
97
+ off: string[];
98
+ private sel;
99
+ private controlled;
100
+ private ready;
101
+ private asked;
102
+ private drag;
103
+ private ro?;
104
+ private timers;
105
+ readonly min: (...values: number[]) => number;
106
+ readonly abs: (x: number) => number;
107
+ get defaultNote(): string;
108
+ ngAfterViewInit(): void;
109
+ private si;
110
+ colorOf(key: string): string;
111
+ shapeOf(key: string): ScatterShape;
112
+ labelOf(key: string): string;
113
+ /** The triangle mark's path, so a dot reads without colour too. */
114
+ triPath(x: number, y: number, s: number): string;
115
+ X(v: number): number;
116
+ Y(v: number): number;
117
+ private R;
118
+ private shownIdx;
119
+ draw(): void;
120
+ toggle(key: string): void;
121
+ private local;
122
+ private near;
123
+ private setSel;
124
+ onPointerDown(e: PointerEvent): void;
125
+ onPointerMove(e: PointerEvent): void;
126
+ onPointerUp(): void;
127
+ onPointerCancel(): void;
128
+ onPointerLeave(): void;
129
+ onBlur(): void;
130
+ onKeyDown(e: KeyboardEvent): void;
131
+ runAsk(): void;
132
+ private pendingAsk;
133
+ /** The host calls this with the answer; it streams in word by word. */
134
+ streamAnswer(text: string): void;
135
+ ngOnDestroy(): void;
136
+ static ɵfac: i0.ɵɵFactoryDeclaration<ScatterChartComponent, never>;
137
+ static ɵcmp: i0.ɵɵComponentDeclaration<ScatterChartComponent, "vo-scatter-chart", never, { "runs": { "alias": "runs"; "required": true; }; "series": { "alias": "series"; "required": true; }; "className": { "alias": "className"; "required": false; }; "title": { "alias": "title"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; "xDomain": { "alias": "xDomain"; "required": false; }; "yDomain": { "alias": "yDomain"; "required": false; }; "xTicks": { "alias": "xTicks"; "required": false; }; "yTicks": { "alias": "yTicks"; "required": false; }; "xTitle": { "alias": "xTitle"; "required": false; }; "yTitle": { "alias": "yTitle"; "required": false; }; "formatX": { "alias": "formatX"; "required": false; }; "formatY": { "alias": "formatY"; "required": false; }; "formatSize": { "alias": "formatSize"; "required": false; }; "quadrants": { "alias": "quadrants"; "required": false; }; "ringed": { "alias": "ringed"; "required": false; }; "note": { "alias": "note"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; }, { "selectedChange": "selectedChange"; "ask": "ask"; }, never, never, true, never>;
138
+ }
139
+ export {};
@@ -0,0 +1,107 @@
1
+ import { AfterViewInit, ChangeDetectorRef, EventEmitter, OnDestroy } from '@angular/core';
2
+ import { ReducedMotionService } from '../core/reduced-motion.service';
3
+ import * as i0 from "@angular/core";
4
+ /** One factor that goes into the score. */
5
+ export interface ScoreFactor {
6
+ key: string;
7
+ /** Like "Speed". */
8
+ label: string;
9
+ /** The points it can earn; the weights add up to 100. */
10
+ weight: number;
11
+ /** The points it earned. */
12
+ earned: number;
13
+ /** The agent's one-line note, like "Median reply 6.4s, target under 4s". */
14
+ note: string;
15
+ /** Adds an Improve button to the open row. */
16
+ improvable?: boolean;
17
+ /** A line shown first in the open row, like what was changed. */
18
+ detail?: string;
19
+ }
20
+ /** The agent's proposal for an improvable factor. */
21
+ export interface ScoreProposal {
22
+ /** What the agent would change. */
23
+ text: string;
24
+ /** What it would gain, like "About 2.1s faster a reply". */
25
+ gain?: string;
26
+ /** The points the factor would earn after it. */
27
+ to: number;
28
+ }
29
+ /** Per-factor render state held by the component. */
30
+ interface Row {
31
+ factor: ScoreFactor;
32
+ index: number;
33
+ color: string;
34
+ /** The span of this factor's gauge segment: [startAngle, endAngle]. */
35
+ seg: [number, number];
36
+ /** The track arc path (the full segment). */
37
+ track: string;
38
+ /** The filled arc path, grown to the share currently shown. */
39
+ fillPath: string;
40
+ /** Width of the small inline bar, as a CSS length. */
41
+ barWidth: string;
42
+ /** The proposal for this row, "busy" while the agent works, or null. */
43
+ proposal: ScoreProposal | 'busy' | null;
44
+ }
45
+ export declare class ScoreBreakdownComponent implements AfterViewInit, OnDestroy {
46
+ private readonly reduced;
47
+ private readonly cdr;
48
+ factors: ScoreFactor[];
49
+ title: string;
50
+ /** Last period's score, for the change beside the band word. */
51
+ previous?: number;
52
+ /** What the change is measured against ("since last week"). */
53
+ since: string;
54
+ /** The open rows, by key. Leave it out to let clicks open and close rows. */
55
+ set open(value: string[] | undefined);
56
+ defaultOpen: string[];
57
+ /** What the row says while the agent works on a proposal. */
58
+ improvingLabel: string;
59
+ /** Emitted when a row opens or closes (when uncontrolled). */
60
+ openChange: EventEmitter<string[]>;
61
+ /** Called by Improve; return (or resolve) the agent's proposal. */
62
+ improveRequest: EventEmitter<{
63
+ factor: ScoreFactor;
64
+ resolve: (p: ScoreProposal) => void;
65
+ }>;
66
+ /** Called by Apply on a proposal; update the factor's earned and note. */
67
+ applyProposal: EventEmitter<{
68
+ factor: ScoreFactor;
69
+ proposal: ScoreProposal;
70
+ }>;
71
+ rows: Row[];
72
+ hot: number;
73
+ weakest: number;
74
+ total: number;
75
+ drawn: boolean;
76
+ shownRounded: number;
77
+ bandWord: string;
78
+ delta: number | null;
79
+ absDelta: number;
80
+ private opened;
81
+ private controlled;
82
+ private timers;
83
+ private frames;
84
+ constructor(reduced: ReducedMotionService, cdr: ChangeDetectorRef);
85
+ ngAfterViewInit(): void;
86
+ private fillTo;
87
+ private sweep;
88
+ private count;
89
+ valueText(): string;
90
+ rowLabel(r: Row): string;
91
+ lostText(r: Row): string;
92
+ isOpen(key: string): boolean;
93
+ toggle(key: string): void;
94
+ setHot(index: number): void;
95
+ onPointGauge(e: PointerEvent, index: number): void;
96
+ onPointRow(e: PointerEvent, index: number): void;
97
+ onListLeave(e: Event): void;
98
+ onListFocusOut(e: FocusEvent): void;
99
+ improve(r: Row): void;
100
+ apply(r: Row): void;
101
+ drop(r: Row): void;
102
+ private later;
103
+ ngOnDestroy(): void;
104
+ static ɵfac: i0.ɵɵFactoryDeclaration<ScoreBreakdownComponent, never>;
105
+ static ɵcmp: i0.ɵɵComponentDeclaration<ScoreBreakdownComponent, "vo-score-breakdown", never, { "factors": { "alias": "factors"; "required": true; }; "title": { "alias": "title"; "required": false; }; "previous": { "alias": "previous"; "required": false; }; "since": { "alias": "since"; "required": false; }; "open": { "alias": "open"; "required": false; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; }; "improvingLabel": { "alias": "improvingLabel"; "required": false; }; }, { "openChange": "openChange"; "improveRequest": "improveRequest"; "applyProposal": "applyProposal"; }, never, never, true, never>;
106
+ }
107
+ export {};
@@ -0,0 +1,44 @@
1
+ import { AfterViewInit, ElementRef, EventEmitter, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /** One choice in the control: its value plus its label. */
4
+ export interface SegmentOption {
5
+ value: string;
6
+ label: string;
7
+ }
8
+ export declare class SegmentedControlComponent implements AfterViewInit, OnChanges, OnDestroy {
9
+ /** The choices, each with a value and a label. */
10
+ options: SegmentOption[];
11
+ /** Controlled selected value. Leave out for uncontrolled (uses defaultValue). */
12
+ value?: string;
13
+ /** Initial value when uncontrolled. Defaults to the first option's value. */
14
+ defaultValue?: string;
15
+ /** Names the group for screen readers, like "View". */
16
+ label: string;
17
+ /** `tabs` (default) when it switches a panel, `radio` when it sets an option.
18
+ * Exposed as the `as` attribute (Angular template syntax reserves `as`, so the
19
+ * field itself is named `variant`). */
20
+ variant: 'tabs' | 'radio';
21
+ /** Ties the tabs to their panel. Defaults to a generated id. */
22
+ id?: string;
23
+ /** Emitted when the selected value changes. */
24
+ valueChange: EventEmitter<string>;
25
+ root: ElementRef<HTMLDivElement>;
26
+ /** The value shown now (controlled by `value`, else held internally). */
27
+ current: string;
28
+ base: string;
29
+ knobLeft: number;
30
+ knobWidth: number;
31
+ knobTransition: string;
32
+ private first;
33
+ private ro?;
34
+ ngOnChanges(changes: SimpleChanges): void;
35
+ ngAfterViewInit(): void;
36
+ ngOnDestroy(): void;
37
+ /** The knob takes the picked button's place and width. */
38
+ private place;
39
+ select(v: string): void;
40
+ /** Arrow keys move along and pick; Home/End jump to the ends. */
41
+ onKey(e: KeyboardEvent): void;
42
+ static ɵfac: i0.ɵɵFactoryDeclaration<SegmentedControlComponent, never>;
43
+ static ɵcmp: i0.ɵɵComponentDeclaration<SegmentedControlComponent, "vo-segmented-control", never, { "options": { "alias": "options"; "required": false; }; "value": { "alias": "value"; "required": false; }; "defaultValue": { "alias": "defaultValue"; "required": false; }; "label": { "alias": "label"; "required": false; }; "variant": { "alias": "as"; "required": false; }; "id": { "alias": "id"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
44
+ }
@@ -0,0 +1,60 @@
1
+ import { AfterViewInit, EventEmitter, OnDestroy } from '@angular/core';
2
+ import { ReducedMotionService } from '../core/reduced-motion.service';
3
+ import * as i0 from "@angular/core";
4
+ /** One source the answer draws on, drawn as a row when the stack is open. */
5
+ export interface StackSource {
6
+ /** What kind of source it is. The filter chips pick by this, like 'web', 'file' or 'figma'. */
7
+ kind: string;
8
+ title: string;
9
+ /** Where it came from, like "baymard.com" or "Drive". */
10
+ host: string;
11
+ /** 0 to 1, drawn as a small bar. */
12
+ relevance: number;
13
+ /** One to three letters in the favicon square, like "B" or "CSV". */
14
+ mark: string;
15
+ /** The favicon colour, any CSS colour, like '#635bff' or 'var(--vo-pl)'. */
16
+ color: string;
17
+ /** Adds an open button that shows on hover. */
18
+ onOpen?: () => void;
19
+ }
20
+ /** A filter chip above the list: 'all' or a source kind. */
21
+ export interface SourceFilter {
22
+ /** 'all', or a source kind. */
23
+ value: string;
24
+ label: string;
25
+ }
26
+ export declare class SourceStackComponent implements AfterViewInit, OnDestroy {
27
+ private readonly reduced;
28
+ /** The answer the sources back up, shown above the pill. */
29
+ message?: string;
30
+ sources: StackSource[];
31
+ /** The chips above the list. Defaults to All, Web, Files and Figma. */
32
+ filters: SourceFilter[];
33
+ /** The chosen filter. Leave it out to let the chips switch it. */
34
+ filter?: string;
35
+ defaultFilter: string;
36
+ /** Whether the list is open. Leave it out to let the pill toggle it. */
37
+ open?: boolean;
38
+ defaultOpen: boolean;
39
+ className?: string;
40
+ filterChange: EventEmitter<string>;
41
+ openChange: EventEmitter<boolean>;
42
+ /** Internal open state when `open` is not controlled. */
43
+ private innerOpen;
44
+ /** Internal filter when `filter` is not controlled. */
45
+ private innerFilter?;
46
+ /** Opens the sources once on its own, unless the viewer takes over first. */
47
+ private autoTimer?;
48
+ private touched;
49
+ constructor(reduced: ReducedMotionService);
50
+ get isOpen(): boolean;
51
+ get activeFilter(): string;
52
+ get items(): StackSource[];
53
+ pct(s: StackSource): number;
54
+ toggle(): void;
55
+ pick(value: string): void;
56
+ ngAfterViewInit(): void;
57
+ ngOnDestroy(): void;
58
+ static ɵfac: i0.ɵɵFactoryDeclaration<SourceStackComponent, never>;
59
+ static ɵcmp: i0.ɵɵComponentDeclaration<SourceStackComponent, "vo-source-stack", never, { "message": { "alias": "message"; "required": false; }; "sources": { "alias": "sources"; "required": false; }; "filters": { "alias": "filters"; "required": false; }; "filter": { "alias": "filter"; "required": false; }; "defaultFilter": { "alias": "defaultFilter"; "required": false; }; "open": { "alias": "open"; "required": false; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; }; "className": { "alias": "className"; "required": false; }; }, { "filterChange": "filterChange"; "openChange": "openChange"; }, never, never, true, never>;
60
+ }
@@ -0,0 +1,86 @@
1
+ import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy } from '@angular/core';
2
+ import { type VoIconName } from '../core/icon.component';
3
+ import { ReducedMotionService } from '../core/reduced-motion.service';
4
+ import * as i0 from "@angular/core";
5
+ /** One period's figures for a card. */
6
+ export interface StatCardsValue {
7
+ /** The number in large type, which rolls to it. */
8
+ value: number;
9
+ /** Change against the period before, in percent. Green from 0, red below. */
10
+ change: number;
11
+ /** The sparkline, oldest first. */
12
+ points: number[];
13
+ }
14
+ /** One card. */
15
+ export interface StatCardsStat {
16
+ /** Identifies the card. Defaults to its label. */
17
+ key?: string;
18
+ icon: VoIconName;
19
+ /** Like "Agent runs". */
20
+ label: string;
21
+ /** One entry per period, in the same order as `periods`. */
22
+ values: StatCardsValue[];
23
+ /** Before the number, like "$". */
24
+ prefix?: string;
25
+ /** After the number, like "h". */
26
+ suffix?: string;
27
+ /** The sparkline colour. Defaults to the chart palette (--vo-c1..c6). */
28
+ color?: string;
29
+ }
30
+ /** One entry in the period switch. */
31
+ export interface StatCardsPeriod {
32
+ /** The switch label, like "30 days". */
33
+ label: string;
34
+ /** Shown when you hover a card, like "vs previous 30 days". */
35
+ compare?: string;
36
+ }
37
+ /** Internal per-card render state. */
38
+ interface CardView {
39
+ stat: StatCardsStat;
40
+ index: number;
41
+ shown: number;
42
+ changeText: string;
43
+ changeClass: string;
44
+ changeOut: boolean;
45
+ d: string;
46
+ color: string;
47
+ enterDelay: number;
48
+ sparkDelay: number;
49
+ sparkDrawn: boolean;
50
+ }
51
+ export declare class StatCardsComponent implements AfterViewInit, OnDestroy {
52
+ private readonly reduced;
53
+ private readonly cdr;
54
+ private readonly host;
55
+ stats: StatCardsStat[];
56
+ periods: StatCardsPeriod[];
57
+ /** The period on show, by index. Leave it out to let the switch pick it. */
58
+ set period(value: number | undefined);
59
+ defaultPeriod: number;
60
+ /** The values at the bottom and top of every sparkline. Defaults to each card's own range. */
61
+ sparkRange?: [number, number];
62
+ periodChange: EventEmitter<number>;
63
+ at: number;
64
+ cards: CardView[];
65
+ knobLeft: number;
66
+ knobWidth: number;
67
+ sparkAnimate: boolean;
68
+ private controlled;
69
+ private ready;
70
+ private timers;
71
+ private frames;
72
+ constructor(reduced: ReducedMotionService, cdr: ChangeDetectorRef, host: ElementRef<HTMLElement>);
73
+ compareFor(): string | null;
74
+ format(stat: StatCardsStat, value: number): string;
75
+ ngAfterViewInit(): void;
76
+ selectPeriod(index: number): void;
77
+ private draw;
78
+ private sparklinePath;
79
+ private roll;
80
+ private placeKnob;
81
+ private later;
82
+ ngOnDestroy(): void;
83
+ static ɵfac: i0.ɵɵFactoryDeclaration<StatCardsComponent, never>;
84
+ static ɵcmp: i0.ɵɵComponentDeclaration<StatCardsComponent, "vo-stat-cards", never, { "stats": { "alias": "stats"; "required": true; }; "periods": { "alias": "periods"; "required": true; }; "period": { "alias": "period"; "required": false; }; "defaultPeriod": { "alias": "defaultPeriod"; "required": false; }; "sparkRange": { "alias": "sparkRange"; "required": false; }; }, { "periodChange": "periodChange"; }, never, never, true, never>;
85
+ }
86
+ export {};