@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,108 @@
1
+ import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
2
+ import { type VoIconName } from '../core/icon.component';
3
+ import * as i0 from "@angular/core";
4
+ /** A check's state: wait (not run yet), run (running now), ok or bad. */
5
+ export type ReviewCheckState = 'wait' | 'run' | 'ok' | 'bad';
6
+ /** One row in the Checks column. */
7
+ export interface ReviewCheck {
8
+ /** What is checked, like "Visual diff". */
9
+ label: string;
10
+ /** wait (not run yet), run (running now), ok or bad. */
11
+ state: ReviewCheckState;
12
+ /** The result on the right, like "2 of 6 screens changed". */
13
+ note?: string;
14
+ }
15
+ /** Who wrote a review message. `agent` draws the agent's mark instead of an avatar. */
16
+ export interface ReviewAuthor {
17
+ name: string;
18
+ initials?: string;
19
+ color?: string;
20
+ agent?: boolean;
21
+ }
22
+ /** The tag beside the name, like Changes requested or Approved. `busy` puts a spinner in it. */
23
+ export interface ReviewVerdict {
24
+ label: string;
25
+ tone?: 'ok' | 'warn' | 'bad' | 'neutral';
26
+ icon?: VoIconName;
27
+ busy?: boolean;
28
+ }
29
+ /** One message in the review: who, a verdict tag, and what they said. */
30
+ export interface ReviewMessage {
31
+ author: ReviewAuthor;
32
+ verdict?: ReviewVerdict;
33
+ /** What they said, under the name. */
34
+ text?: string;
35
+ }
36
+ /** One way it can ship, picked from the menu beside the button. */
37
+ export interface ShipOption {
38
+ key: string;
39
+ /** The button's label when it is picked, like "Ship to 10% first". */
40
+ label: string;
41
+ /** The quiet line under it in the menu. */
42
+ detail?: string;
43
+ }
44
+ /** Where it is: in review, approved (Ship turns on), shipping, then live or scheduled. */
45
+ export type ReviewPhase = 'review' | 'approved' | 'shipping' | 'live' | 'scheduled';
46
+ /** Overridable copy for the fixed labels. */
47
+ export interface ReviewLabels {
48
+ checks?: string;
49
+ review?: string;
50
+ inReview?: string;
51
+ approved?: string;
52
+ live?: string;
53
+ scheduled?: string;
54
+ shipping?: string;
55
+ }
56
+ export declare class DesignReviewComponent implements OnChanges {
57
+ /** What is up for review, like "Pricing page v4". */
58
+ title: string;
59
+ /** The line under the title. */
60
+ subtitle?: string;
61
+ /** Header mark. Defaults to `figma` (the React `palette` glyph is not in the set). */
62
+ icon: VoIconName;
63
+ /** The Checks column, top to bottom. */
64
+ checks: ReviewCheck[];
65
+ /** The review so far, oldest first. */
66
+ messages: ReviewMessage[];
67
+ /** Where it is: review, approved, shipping, live or scheduled. */
68
+ phase: ReviewPhase;
69
+ /** The line beside the Ship button, like "Waiting on Maya". */
70
+ note?: string;
71
+ /** Shown in the review column before anyone has written. */
72
+ waitingLabel: string;
73
+ /** The ways it can ship, picked from the menu beside the button. */
74
+ options: ShipOption[];
75
+ /** Controlled picked option key. */
76
+ option?: string;
77
+ /** Uncontrolled starting option key. */
78
+ defaultOption?: string;
79
+ /** The line that replaces the buttons once it is live or scheduled. */
80
+ doneLabel?: string;
81
+ /** Overridable fixed copy. */
82
+ labels: ReviewLabels;
83
+ className: string;
84
+ /** The picked ship option changed. */
85
+ optionChange: EventEmitter<string>;
86
+ /** The Ship button was pressed, with the chosen option. */
87
+ shipClick: EventEmitter<ShipOption>;
88
+ /** Internal pick for the uncontrolled case. */
89
+ private innerPick?;
90
+ menuOpen: boolean;
91
+ ngOnChanges(changes: SimpleChanges): void;
92
+ get L(): Required<ReviewLabels>;
93
+ private pick;
94
+ chosen(): ShipOption;
95
+ done(): boolean;
96
+ locked(): boolean;
97
+ tag(): {
98
+ tone: string;
99
+ label: string;
100
+ };
101
+ verdictClass(v: ReviewVerdict): string;
102
+ initials(a: ReviewAuthor): string;
103
+ toggleMenu(): void;
104
+ pickOption(o: ShipOption): void;
105
+ ship(): void;
106
+ static ɵfac: i0.ɵɵFactoryDeclaration<DesignReviewComponent, never>;
107
+ static ɵcmp: i0.ɵɵComponentDeclaration<DesignReviewComponent, "vo-design-review", never, { "title": { "alias": "title"; "required": true; }; "subtitle": { "alias": "subtitle"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "checks": { "alias": "checks"; "required": false; }; "messages": { "alias": "messages"; "required": false; }; "phase": { "alias": "phase"; "required": true; }; "note": { "alias": "note"; "required": false; }; "waitingLabel": { "alias": "waitingLabel"; "required": false; }; "options": { "alias": "options"; "required": false; }; "option": { "alias": "option"; "required": false; }; "defaultOption": { "alias": "defaultOption"; "required": false; }; "doneLabel": { "alias": "doneLabel"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "className": { "alias": "className"; "required": false; }; }, { "optionChange": "optionChange"; "shipClick": "shipClick"; }, never, never, true, never>;
108
+ }
@@ -0,0 +1,75 @@
1
+ import { AfterViewInit, EventEmitter, OnDestroy } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /** One slider: names a value and the CSS variable it sets on the preview, `--vo-<key>`. */
4
+ export interface TunerParam {
5
+ /** Names the value and the CSS variable it sets on the preview, `--vo-<key>`. */
6
+ key: string;
7
+ /** Shown beside the slider, like "Radius". */
8
+ label: string;
9
+ min: number;
10
+ max: number;
11
+ /** Where the slider starts when you don't pass values. */
12
+ value: number;
13
+ /** Added after whole numbers, like "px". Leave it out for plain numbers. */
14
+ unit?: string;
15
+ /** Shows and sets the value with this many decimals instead of rounding, like 2 for a shadow strength. */
16
+ decimals?: number;
17
+ }
18
+ /** A slider plus its live, shown and css-ready value. */
19
+ interface Row {
20
+ param: TunerParam;
21
+ value: number;
22
+ pct: number;
23
+ shown: string;
24
+ drag: boolean;
25
+ hot: boolean;
26
+ target: number;
27
+ }
28
+ export declare class DesignTunerComponent implements AfterViewInit, OnDestroy {
29
+ /** The sliders. Defaults to radius, padding, spacing and shadow for the sample card. */
30
+ params: TunerParam[];
31
+ /** The value of each slider by key. Leave it out to let the sliders keep their own. */
32
+ values?: Record<string, number>;
33
+ /** What is being tuned, like "Pricing card". */
34
+ title: string;
35
+ /** Quiet line beside the title, like "Edited by you" or "Agent is tuning". */
36
+ status: string;
37
+ /** The button's label, like "Tune with agent" or "Tune again". */
38
+ actionLabel: string;
39
+ /** The preview lets the agent tune once on its own after a beat. Set false to turn that off. */
40
+ auto: boolean;
41
+ /** Emitted with the values by key whenever a slider or the agent moves one. */
42
+ valuesChange: EventEmitter<Record<string, number>>;
43
+ /** Emitted when the agent-tune button is pressed. */
44
+ tune_: EventEmitter<void>;
45
+ private readonly motion;
46
+ rows: Row[];
47
+ /** The agent is tuning: the button thinks and stops taking clicks. */
48
+ tuning: boolean;
49
+ /** What the agent changed and why, shown above the button. */
50
+ note: string;
51
+ /** The sample card's feature list. */
52
+ readonly features: string[];
53
+ private timers;
54
+ private frame?;
55
+ private touched;
56
+ ngAfterViewInit(): void;
57
+ /** The css-ready `--vo-<key>` variables the preview card reads. */
58
+ get vars(): Record<string, string>;
59
+ valueNow(r: Row): number;
60
+ private set;
61
+ private emit;
62
+ down(r: Row, e: PointerEvent): void;
63
+ move(r: Row, e: PointerEvent): void;
64
+ up(r: Row): void;
65
+ private at;
66
+ key(r: Row, e: KeyboardEvent): void;
67
+ tune(): void;
68
+ private run;
69
+ private tween;
70
+ private wait;
71
+ ngOnDestroy(): void;
72
+ static ɵfac: i0.ɵɵFactoryDeclaration<DesignTunerComponent, never>;
73
+ static ɵcmp: i0.ɵɵComponentDeclaration<DesignTunerComponent, "vo-design-tuner", never, { "params": { "alias": "params"; "required": false; }; "values": { "alias": "values"; "required": false; }; "title": { "alias": "title"; "required": false; }; "status": { "alias": "status"; "required": false; }; "actionLabel": { "alias": "actionLabel"; "required": false; }; "auto": { "alias": "auto"; "required": false; }; }, { "valuesChange": "valuesChange"; "tune_": "tune_"; }, never, never, true, never>;
74
+ }
75
+ export {};
@@ -0,0 +1,150 @@
1
+ import { AfterViewInit, EventEmitter, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
2
+ import { type VoIconName } from '../core/icon.component';
3
+ import * as i0 from "@angular/core";
4
+ /** One choice in a select row's menu. */
5
+ export interface DetailsPanelOption {
6
+ value: string;
7
+ label: string;
8
+ /** A quieter line under the label in the menu, like "Best for design". */
9
+ detail?: string;
10
+ /** A coloured dot before the label, like 'var(--vo-ok)'. */
11
+ color?: string;
12
+ /** An avatar before the label instead of a dot. */
13
+ avatar?: {
14
+ initials: string;
15
+ color: string;
16
+ };
17
+ }
18
+ export type DetailsPanelTone = 'blue' | 'purple' | 'green' | 'orange' | 'red' | 'yellow' | 'pink' | 'teal';
19
+ export interface DetailsPanelTag {
20
+ label: string;
21
+ tone?: DetailsPanelTone;
22
+ }
23
+ /** A plain value, like a date or a duration. */
24
+ export interface DetailsPanelTextRow {
25
+ key: string;
26
+ label: string;
27
+ type?: 'text';
28
+ value: string | number;
29
+ }
30
+ /** A value picked from a menu. */
31
+ export interface DetailsPanelSelectRow {
32
+ key: string;
33
+ label: string;
34
+ type: 'select';
35
+ options: DetailsPanelOption[];
36
+ value?: string;
37
+ defaultValue?: string;
38
+ /** Shows a chevron after the value. Defaults to true when the options have no dots or avatars. */
39
+ chevron?: boolean;
40
+ }
41
+ /** A number that rolls to its new value, like tokens or cost. */
42
+ export interface DetailsPanelNumberRow {
43
+ key: string;
44
+ label: string;
45
+ type: 'number';
46
+ value: number;
47
+ /** Turns the number into text. Defaults to a rounded number with thousands separators. */
48
+ format?: (n: number) => string;
49
+ }
50
+ /** Labels, with an optional add button. */
51
+ export interface DetailsPanelTagsRow {
52
+ key: string;
53
+ label: string;
54
+ type: 'tags';
55
+ tags: DetailsPanelTag[];
56
+ addLabel?: string;
57
+ /** Present to show the add button; emits through (add). */
58
+ canAdd?: boolean;
59
+ }
60
+ export type DetailsPanelRow = DetailsPanelTextRow | DetailsPanelSelectRow | DetailsPanelNumberRow | DetailsPanelTagsRow;
61
+ export interface DetailsPanelSection {
62
+ key: string;
63
+ title: string;
64
+ rows: DetailsPanelRow[];
65
+ }
66
+ /** A row's live state carried in the template. */
67
+ interface RowView {
68
+ row: DetailsPanelRow;
69
+ /** select: the picked value. */
70
+ value: string;
71
+ /** select: whether to draw the trailing chevron. */
72
+ chevron: boolean;
73
+ /** select/owner-avatar flash after a change. */
74
+ flash: boolean;
75
+ /** avatar should play its entrance on the next change. */
76
+ changed: boolean;
77
+ /** number: the currently shown (tweened) value. */
78
+ shown: number;
79
+ /** the popover for a select row is open. */
80
+ open: boolean;
81
+ /** tags present when the panel first showed, so later ones enter. */
82
+ initialTags: Set<string>;
83
+ }
84
+ /** A record's properties in folding sections, edited in place from small menus. */
85
+ export declare class DetailsPanelComponent implements OnChanges, AfterViewInit, OnDestroy {
86
+ /** The title at the top, like "Pricing page redesign". */
87
+ title: string;
88
+ /** A short type tag before the title, like "RUN". */
89
+ kind?: string;
90
+ /** Adds a copy button that copies this, like a run ID. */
91
+ copyValue?: string;
92
+ /** The copy button's tooltip. */
93
+ copyLabel: string;
94
+ /** The sections of rows. */
95
+ sections: DetailsPanelSection[];
96
+ /** Keys of the open sections. Leave it out to let the headers toggle them; every section starts open. */
97
+ open?: string[];
98
+ defaultOpen?: string[];
99
+ /** An extra class on the panel. */
100
+ className: string;
101
+ /** Emitted when a select row's value changes. */
102
+ valueChange: EventEmitter<{
103
+ key: string;
104
+ value: string;
105
+ }>;
106
+ /** Emitted when the open sections change. */
107
+ openChange: EventEmitter<string[]>;
108
+ /** Emitted when a tags row's add button is pressed. */
109
+ add_: EventEmitter<string>;
110
+ private root;
111
+ private readonly motion;
112
+ /** React uses a "link" glyph; the Angular set substitutes "copy". */
113
+ readonly copyIcon: VoIconName;
114
+ /** Per-section row view state, keyed by section key. */
115
+ views: Record<string, RowView[]>;
116
+ copied: boolean;
117
+ private shownState;
118
+ private copyTimer?;
119
+ private tweenTimers;
120
+ ngOnChanges(changes: SimpleChanges): void;
121
+ ngAfterViewInit(): void;
122
+ ngOnDestroy(): void;
123
+ isOpen(key: string): boolean;
124
+ toggle(key: string): void;
125
+ private buildViews;
126
+ private blank;
127
+ selectOptions(row: DetailsPanelRow): DetailsPanelOption[];
128
+ picked(v: RowView): DetailsPanelOption | undefined;
129
+ mark(v: RowView): DetailsPanelOption | undefined;
130
+ openMenu(v: RowView): void;
131
+ choose(v: RowView, o: DetailsPanelOption): void;
132
+ onFlashEnd(v: RowView, e: AnimationEvent): void;
133
+ format(v: RowView): string;
134
+ textValue(row: DetailsPanelRow): string | number;
135
+ tagsOf(row: DetailsPanelRow): DetailsPanelTag[];
136
+ canAdd(row: DetailsPanelRow): boolean;
137
+ addLabel(row: DetailsPanelRow): string;
138
+ tone(t: DetailsPanelTone): string;
139
+ add(row: DetailsPanelRow): void;
140
+ copy(): void;
141
+ /** Rolls a number row to a new value over ~800ms (respecting reduced motion). */
142
+ setNumber(sectionKey: string, rowKey: string, value: number): void;
143
+ private tween;
144
+ private closeAll;
145
+ private closeSoon;
146
+ private readonly onOutside;
147
+ static ɵfac: i0.ɵɵFactoryDeclaration<DetailsPanelComponent, never>;
148
+ static ɵcmp: i0.ɵɵComponentDeclaration<DetailsPanelComponent, "vo-details-panel", never, { "title": { "alias": "title"; "required": true; }; "kind": { "alias": "kind"; "required": false; }; "copyValue": { "alias": "copyValue"; "required": false; }; "copyLabel": { "alias": "copyLabel"; "required": false; }; "sections": { "alias": "sections"; "required": false; }; "open": { "alias": "open"; "required": false; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; }; "className": { "alias": "className"; "required": false; }; }, { "valueChange": "valueChange"; "openChange": "openChange"; "add_": "add_"; }, never, never, true, never>;
149
+ }
150
+ export {};
@@ -0,0 +1,63 @@
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 segment of the ring. */
5
+ export interface DonutChartSegment {
6
+ /** Like "Design reviews". */
7
+ label: string;
8
+ value: number;
9
+ /** Defaults to the chart palette (--vo-c1..c6), in order. */
10
+ color?: string;
11
+ }
12
+ /** Internal per-segment render state. */
13
+ interface Arc {
14
+ seg: DonutChartSegment;
15
+ index: number;
16
+ color: string;
17
+ /** Length of the drawn part of this arc (value share minus the gap). */
18
+ len: number;
19
+ /** Negative start offset around the ring. */
20
+ at: number;
21
+ /** Whether this arc has swept in yet. */
22
+ drawn: boolean;
23
+ enterDelay: number;
24
+ percent: number;
25
+ }
26
+ export declare class DonutChartComponent implements AfterViewInit, OnDestroy {
27
+ private readonly reduced;
28
+ private readonly cdr;
29
+ segments: DonutChartSegment[];
30
+ /** Under the total in the middle, like "Agent time". */
31
+ label: string;
32
+ /** After every value, like "h" in "14.2h". */
33
+ unit: string;
34
+ /** Writes a value. Defaults to one decimal, like 14.2. */
35
+ format: (n: number) => string;
36
+ /**
37
+ * Index of the highlighted segment, or null. Leave it out to let hovering a
38
+ * segment or its row highlight it.
39
+ */
40
+ set active(value: number | null | undefined);
41
+ defaultActive: number | null;
42
+ activeChange: EventEmitter<number | null>;
43
+ readonly R = 48;
44
+ readonly C: number;
45
+ arcs: Arc[];
46
+ hl: number | null;
47
+ centerValue: string;
48
+ centerLabel: string;
49
+ private total;
50
+ private controlled;
51
+ private timers;
52
+ private frames;
53
+ constructor(reduced: ReducedMotionService, cdr: ChangeDetectorRef);
54
+ ngAfterViewInit(): void;
55
+ highlight(index: number | null): void;
56
+ private updateCenter;
57
+ private count;
58
+ private later;
59
+ ngOnDestroy(): void;
60
+ static ɵfac: i0.ɵɵFactoryDeclaration<DonutChartComponent, never>;
61
+ static ɵcmp: i0.ɵɵComponentDeclaration<DonutChartComponent, "vo-donut-chart", never, { "segments": { "alias": "segments"; "required": true; }; "label": { "alias": "label"; "required": false; }; "unit": { "alias": "unit"; "required": false; }; "format": { "alias": "format"; "required": false; }; "active": { "alias": "active"; "required": false; }; "defaultActive": { "alias": "defaultActive"; "required": false; }; }, { "activeChange": "activeChange"; }, never, never, true, never>;
62
+ }
63
+ export {};
@@ -0,0 +1,128 @@
1
+ import { AfterViewInit, EventEmitter, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
2
+ import { type VoIconName } from '../core/icon.component';
3
+ import * as i0 from "@angular/core";
4
+ /** Someone the draft is addressed to. */
5
+ export interface DraftRecipient {
6
+ name: string;
7
+ /** The avatar's letters. Defaults to the first letters of the name. */
8
+ initials?: string;
9
+ /** The avatar's colour, like 'var(--vo-av-l)'. */
10
+ color?: string;
11
+ }
12
+ /** A file on the draft. */
13
+ export interface DraftAttachment {
14
+ name: string;
15
+ /** Shown beside the name, like "240 KB". */
16
+ size?: string;
17
+ /** Still uploading: a spinner in place of the size. */
18
+ loading?: boolean;
19
+ }
20
+ /** One button in the warning notice. */
21
+ export interface DraftWarningAction {
22
+ label: string;
23
+ onClick: () => void;
24
+ primary?: boolean;
25
+ }
26
+ /** A problem to settle before it sends, like an attachment the message mentions but nothing attached. */
27
+ export interface DraftWarning {
28
+ text: string;
29
+ actions: DraftWarningAction[];
30
+ }
31
+ /** One option in the "when to send" menu. */
32
+ export interface SendOption {
33
+ /** `now` sends straight away; any other key schedules it. */
34
+ key: string;
35
+ /** Like "Tomorrow at 09:00". */
36
+ label: string;
37
+ /** The quiet line under it in the menu. */
38
+ detail?: string;
39
+ }
40
+ /** draft (being checked), sending, undo (sent, with a window to take it back), sent, scheduled or discarded. */
41
+ export type DraftPhase = 'draft' | 'sending' | 'undo' | 'sent' | 'scheduled' | 'discarded';
42
+ /** The words on the controls, each overridable. */
43
+ export interface DraftLabels {
44
+ send?: string;
45
+ schedule?: string;
46
+ sending?: string;
47
+ scheduling?: string;
48
+ discard?: string;
49
+ notSent?: string;
50
+ sent?: string;
51
+ scheduled?: string;
52
+ delivered?: string;
53
+ discarded?: string;
54
+ nothingSent?: string;
55
+ undo?: string;
56
+ cancel?: string;
57
+ }
58
+ /** The outcome row that takes the footer's place while the draft is not a draft. */
59
+ interface DoneRow {
60
+ icon: VoIconName;
61
+ small: boolean;
62
+ cls: string;
63
+ t: string;
64
+ sub: string;
65
+ btn?: string;
66
+ }
67
+ /** An email the agent drafted, to check and edit before it sends. */
68
+ export declare class DraftReviewComponent implements OnChanges, AfterViewInit, OnDestroy {
69
+ title: string;
70
+ /** The line under the title, like "After the pricing review with Maya". */
71
+ subtitle?: string;
72
+ to: DraftRecipient[];
73
+ subject: string;
74
+ /** The message as the agent wrote it. It stays editable; read edits from bodyChange. */
75
+ body: string;
76
+ attachments: DraftAttachment[];
77
+ /** A problem to settle before it sends. */
78
+ warning: DraftWarning | null;
79
+ phase: DraftPhase;
80
+ /** When to send, picked from the menu beside the button. */
81
+ sendOptions: SendOption[];
82
+ sendOption?: string;
83
+ defaultSendOption?: string;
84
+ /** Seconds left to undo, shown while the phase is undo. */
85
+ undoLeft: number;
86
+ labels: DraftLabels;
87
+ className?: string;
88
+ subjectChange: EventEmitter<string>;
89
+ bodyChange: EventEmitter<string>;
90
+ sendOptionChange: EventEmitter<string>;
91
+ send: EventEmitter<SendOption>;
92
+ discard: EventEmitter<void>;
93
+ /** Takes it back: undoes a send in its window, cancels a scheduled one, or brings back a discarded draft. */
94
+ undo: EventEmitter<void>;
95
+ private bodyEl;
96
+ private ddBtn?;
97
+ private pop?;
98
+ private readonly motion;
99
+ menuOpen: boolean;
100
+ private bodyWritten;
101
+ private pickState;
102
+ ngOnChanges(changes: SimpleChanges): void;
103
+ ngAfterViewInit(): void;
104
+ ngOnDestroy(): void;
105
+ private writeBody;
106
+ get L(): Required<DraftLabels>;
107
+ get busy(): boolean;
108
+ get done(): boolean;
109
+ get editable(): boolean;
110
+ get pickedKey(): string;
111
+ get chosen(): SendOption;
112
+ get later(): boolean;
113
+ private get names();
114
+ get showWarning(): boolean;
115
+ get tagLabel(): string;
116
+ get row(): DoneRow | null;
117
+ initials(p: DraftRecipient): string;
118
+ onSubjectInput(e: Event): void;
119
+ onBodyInput(): void;
120
+ pick(key: string): void;
121
+ toggleMenu(): void;
122
+ private closeMenuSoon;
123
+ onKeydown(e: KeyboardEvent): void;
124
+ private readonly onOutside;
125
+ static ɵfac: i0.ɵɵFactoryDeclaration<DraftReviewComponent, never>;
126
+ static ɵcmp: i0.ɵɵComponentDeclaration<DraftReviewComponent, "vo-draft-review", never, { "title": { "alias": "title"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; "to": { "alias": "to"; "required": false; }; "subject": { "alias": "subject"; "required": false; }; "body": { "alias": "body"; "required": false; }; "attachments": { "alias": "attachments"; "required": false; }; "warning": { "alias": "warning"; "required": false; }; "phase": { "alias": "phase"; "required": false; }; "sendOptions": { "alias": "sendOptions"; "required": false; }; "sendOption": { "alias": "sendOption"; "required": false; }; "defaultSendOption": { "alias": "defaultSendOption"; "required": false; }; "undoLeft": { "alias": "undoLeft"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "className": { "alias": "className"; "required": false; }; }, { "subjectChange": "subjectChange"; "bodyChange": "bodyChange"; "sendOptionChange": "sendOptionChange"; "send": "send"; "discard": "discard"; "undo": "undo"; }, never, never, true, never>;
127
+ }
128
+ export {};
@@ -0,0 +1,59 @@
1
+ import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
2
+ import { type VoIconName } from '../core/icon.component';
3
+ import * as i0 from "@angular/core";
4
+ /** The state of one recovery step: picks its glyph and tone. */
5
+ export type RecoveryStepState = 'done' | 'fail' | 'run' | 'wait' | 'skip' | 'hand';
6
+ /** One step in the run, around the one that failed. */
7
+ export interface RecoveryStep {
8
+ label: string;
9
+ /** done, fail (red note), run (spinner), wait (not started), skip (struck through) or hand (passed to a person) */
10
+ state: RecoveryStepState;
11
+ /** The quiet line under the step, like "Done in 8s" or the error. Crossfades when it changes */
12
+ note?: string;
13
+ }
14
+ /** One of the ways the agent can carry on. */
15
+ export interface RecoveryOption {
16
+ value: string;
17
+ label: string;
18
+ }
19
+ interface GlyphStyle {
20
+ icon: VoIconName | null;
21
+ color: string | null;
22
+ }
23
+ export declare class ErrorRecoveryComponent implements OnChanges {
24
+ /** What the agent was doing, like "Sync the pipeline to Sheets". */
25
+ title: string;
26
+ /** Where the run stands, like "Stopped at step 2". Crossfades when it changes. */
27
+ status?: string;
28
+ steps: RecoveryStep[];
29
+ /** The question above the choices. */
30
+ question: string;
31
+ /** The ways the agent can carry on. */
32
+ options: RecoveryOption[];
33
+ /** The chosen option. Leave it out to let the choices hold their own selection. */
34
+ value?: string;
35
+ /** Defaults to the first option. */
36
+ defaultValue?: string;
37
+ continueLabel: string;
38
+ /** Whether the choices show. Leave it out and they fold away once Continue is pressed. */
39
+ open?: boolean;
40
+ defaultOpen: boolean;
41
+ /** Sits flat in a chat thread (the default). Set false to give it a card of its own. */
42
+ bare: boolean;
43
+ valueChange: EventEmitter<string>;
44
+ /** Emitted with the chosen option when Continue is pressed. */
45
+ continue: EventEmitter<string>;
46
+ openChange: EventEmitter<boolean>;
47
+ private readonly motion;
48
+ pick: string;
49
+ isOpen: boolean;
50
+ private pickSet;
51
+ private openSet;
52
+ ngOnChanges(changes: SimpleChanges): void;
53
+ glyph(state: RecoveryStepState): GlyphStyle;
54
+ select(value: string): void;
55
+ go(): void;
56
+ static ɵfac: i0.ɵɵFactoryDeclaration<ErrorRecoveryComponent, never>;
57
+ static ɵcmp: i0.ɵɵComponentDeclaration<ErrorRecoveryComponent, "vo-error-recovery", never, { "title": { "alias": "title"; "required": true; }; "status": { "alias": "status"; "required": false; }; "steps": { "alias": "steps"; "required": true; }; "question": { "alias": "question"; "required": false; }; "options": { "alias": "options"; "required": true; }; "value": { "alias": "value"; "required": false; }; "defaultValue": { "alias": "defaultValue"; "required": false; }; "continueLabel": { "alias": "continueLabel"; "required": false; }; "open": { "alias": "open"; "required": false; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; }; "bare": { "alias": "bare"; "required": false; }; }, { "valueChange": "valueChange"; "continue": "continue"; "openChange": "openChange"; }, never, never, true, never>;
58
+ }
59
+ export {};