@unofficialbox/box-open-elements 0.19.0 → 0.20.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 (79) hide show
  1. package/dist/components/collections/check-list.d.ts +10 -0
  2. package/dist/components/collections/check-list.js +8 -0
  3. package/dist/components/collections/document-list.d.ts +10 -0
  4. package/dist/components/collections/document-list.js +8 -0
  5. package/dist/components/collections/fact-list.d.ts +10 -0
  6. package/dist/components/collections/fact-list.js +8 -0
  7. package/dist/components/collections/result-blocks.d.ts +54 -0
  8. package/dist/components/collections/result-blocks.js +71 -0
  9. package/dist/components/feedback/progress-bar.d.ts +9 -0
  10. package/dist/components/feedback/progress-bar.js +29 -3
  11. package/dist/components/feedback/status-icon.d.ts +10 -0
  12. package/dist/components/feedback/status-icon.js +26 -0
  13. package/dist/element-maps.d.ts +39 -19
  14. package/dist/entries/agent-workspace.d.ts +1 -0
  15. package/dist/entries/agent-workspace.js +1 -0
  16. package/dist/entries/call-console.d.ts +1 -0
  17. package/dist/entries/call-console.js +1 -0
  18. package/dist/entries/check-list.d.ts +1 -0
  19. package/dist/entries/check-list.js +1 -0
  20. package/dist/entries/document-list.d.ts +1 -0
  21. package/dist/entries/document-list.js +1 -0
  22. package/dist/entries/fact-list.d.ts +1 -0
  23. package/dist/entries/fact-list.js +1 -0
  24. package/dist/entries/result-blocks.d.ts +1 -0
  25. package/dist/entries/result-blocks.js +1 -0
  26. package/dist/entries/run-summary.d.ts +1 -0
  27. package/dist/entries/run-summary.js +1 -0
  28. package/dist/entries/status-icon.d.ts +1 -0
  29. package/dist/entries/status-icon.js +1 -0
  30. package/dist/foundations/motion/behaviors.d.ts +8 -0
  31. package/dist/foundations/motion/behaviors.js +24 -0
  32. package/dist/foundations/motion/index.d.ts +2 -0
  33. package/dist/foundations/motion/index.js +2 -0
  34. package/dist/foundations/motion/scroll-pin.d.ts +19 -0
  35. package/dist/foundations/motion/scroll-pin.js +60 -0
  36. package/dist/foundations/motion/tokens.d.ts +2 -0
  37. package/dist/foundations/motion/tokens.js +2 -0
  38. package/dist/foundations/profiles/registry.d.ts +3 -0
  39. package/dist/foundations/profiles/registry.js +3 -0
  40. package/dist/foundations/profiles/types.d.ts +3 -0
  41. package/dist/foundations/status/index.d.ts +6 -0
  42. package/dist/foundations/status/index.js +33 -0
  43. package/dist/index.d.ts +10 -0
  44. package/dist/index.js +10 -0
  45. package/dist/patterns/agent-chat/agent-chat.d.ts +9 -0
  46. package/dist/patterns/agent-chat/agent-chat.js +135 -21
  47. package/dist/patterns/agent-chat/controller.d.ts +3 -1
  48. package/dist/patterns/agent-chat/controller.js +92 -16
  49. package/dist/patterns/agent-chat/index.d.ts +1 -0
  50. package/dist/patterns/agent-chat/index.js +1 -0
  51. package/dist/patterns/agent-chat/ndjson.d.ts +5 -0
  52. package/dist/patterns/agent-chat/ndjson.js +41 -0
  53. package/dist/patterns/agent-chat/types.d.ts +44 -1
  54. package/dist/patterns/agent-workspace/agent-workspace.d.ts +28 -0
  55. package/dist/patterns/agent-workspace/agent-workspace.js +215 -0
  56. package/dist/patterns/agent-workspace/controller.d.ts +38 -0
  57. package/dist/patterns/agent-workspace/controller.js +65 -0
  58. package/dist/patterns/agent-workspace/index.d.ts +2 -0
  59. package/dist/patterns/agent-workspace/index.js +2 -0
  60. package/dist/patterns/call-console/call-console.d.ts +17 -0
  61. package/dist/patterns/call-console/call-console.js +107 -0
  62. package/dist/patterns/call-console/controller.d.ts +23 -0
  63. package/dist/patterns/call-console/controller.js +50 -0
  64. package/dist/patterns/call-console/http-transport.d.ts +3 -0
  65. package/dist/patterns/call-console/http-transport.js +26 -0
  66. package/dist/patterns/call-console/index.d.ts +4 -0
  67. package/dist/patterns/call-console/index.js +4 -0
  68. package/dist/patterns/call-console/types.d.ts +32 -0
  69. package/dist/patterns/call-console/types.js +8 -0
  70. package/dist/patterns/content-uploader/content-uploader.js +2 -1
  71. package/dist/patterns/run/index.d.ts +2 -0
  72. package/dist/patterns/run/index.js +2 -0
  73. package/dist/patterns/run/progress.d.ts +24 -0
  74. package/dist/patterns/run/progress.js +32 -0
  75. package/dist/patterns/run/run-summary.d.ts +21 -0
  76. package/dist/patterns/run/run-summary.js +82 -0
  77. package/dist/patterns/run/run-trace.d.ts +1 -0
  78. package/dist/patterns/run/run-trace.js +14 -3
  79. package/package.json +13 -1
@@ -0,0 +1,10 @@
1
+ import { ResultBlocks, type ResultBlock } from "./result-blocks.js";
2
+ export declare class CheckList extends ResultBlocks {
3
+ static readonly tagName = "box-check-list";
4
+ get rows(): Extract<ResultBlock, {
5
+ type: "checks";
6
+ }>["rows"];
7
+ set rows(rows: Extract<ResultBlock, {
8
+ type: "checks";
9
+ }>["rows"]);
10
+ }
@@ -0,0 +1,8 @@
1
+ import { ResultBlocks } from "./result-blocks.js";
2
+ const DEFAULT_TAG_NAME = "box-check-list";
3
+ export class CheckList extends ResultBlocks {
4
+ static tagName = DEFAULT_TAG_NAME;
5
+ get rows() { const b = this.blocks[0]; return b?.type === "checks" ? b.rows : []; }
6
+ set rows(rows) { this.blocks = [{ type: "checks", rows }]; }
7
+ }
8
+ CheckList.register();
@@ -0,0 +1,10 @@
1
+ import { ResultBlocks, type ResultBlock } from "./result-blocks.js";
2
+ export declare class DocumentList extends ResultBlocks {
3
+ static readonly tagName = "box-document-list";
4
+ get items(): Extract<ResultBlock, {
5
+ type: "documents";
6
+ }>["items"];
7
+ set items(items: Extract<ResultBlock, {
8
+ type: "documents";
9
+ }>["items"]);
10
+ }
@@ -0,0 +1,8 @@
1
+ import { ResultBlocks } from "./result-blocks.js";
2
+ const DEFAULT_TAG_NAME = "box-document-list";
3
+ export class DocumentList extends ResultBlocks {
4
+ static tagName = DEFAULT_TAG_NAME;
5
+ get items() { const b = this.blocks[0]; return b?.type === "documents" ? b.items : []; }
6
+ set items(items) { this.blocks = [{ type: "documents", items }]; }
7
+ }
8
+ DocumentList.register();
@@ -0,0 +1,10 @@
1
+ import { ResultBlocks, type ResultBlock } from "./result-blocks.js";
2
+ export declare class FactList extends ResultBlocks {
3
+ static readonly tagName = "box-fact-list";
4
+ get rows(): Extract<ResultBlock, {
5
+ type: "facts";
6
+ }>["rows"];
7
+ set rows(rows: Extract<ResultBlock, {
8
+ type: "facts";
9
+ }>["rows"]);
10
+ }
@@ -0,0 +1,8 @@
1
+ import { ResultBlocks } from "./result-blocks.js";
2
+ const DEFAULT_TAG_NAME = "box-fact-list";
3
+ export class FactList extends ResultBlocks {
4
+ static tagName = DEFAULT_TAG_NAME;
5
+ get rows() { const b = this.blocks[0]; return b?.type === "facts" ? b.rows : []; }
6
+ set rows(rows) { this.blocks = [{ type: "facts", rows }]; }
7
+ }
8
+ FactList.register();
@@ -0,0 +1,54 @@
1
+ import { BaseElement } from "../../core/element.js";
2
+ export type CheckStatus = "pass" | "warn" | "fail" | "info";
3
+ export type ResultBlock = {
4
+ id?: string;
5
+ } & ({
6
+ type: "facts";
7
+ title?: string;
8
+ rows: {
9
+ label: string;
10
+ value: string;
11
+ }[];
12
+ } | {
13
+ type: "checks";
14
+ title?: string;
15
+ rows: {
16
+ label: string;
17
+ value?: string;
18
+ detail?: string;
19
+ status: CheckStatus;
20
+ }[];
21
+ } | {
22
+ type: "table";
23
+ title?: string;
24
+ columns: string[];
25
+ rows: {
26
+ cells: string[];
27
+ status?: CheckStatus;
28
+ note?: string;
29
+ }[];
30
+ footnote?: string;
31
+ } | {
32
+ type: "documents";
33
+ title?: string;
34
+ items: {
35
+ id: string;
36
+ name: string;
37
+ detail?: string;
38
+ href?: string;
39
+ }[];
40
+ });
41
+ export declare const resultDocumentIds: (blocks: readonly ResultBlock[]) => string[];
42
+ /** Pure escaped renderer also usable by host-composed conversations. */
43
+ export declare function renderResultBlock(block: ResultBlock): string;
44
+ export declare const resultBlockStyles: string;
45
+ export declare class ResultBlocks extends BaseElement {
46
+ static readonly tagName: string;
47
+ private value;
48
+ get blocks(): ResultBlock[];
49
+ set blocks(value: ResultBlock[]);
50
+ get documentIds(): string[];
51
+ protected renderTemplate(): void;
52
+ protected setupListeners(): void;
53
+ protected update(): void;
54
+ }
@@ -0,0 +1,71 @@
1
+ import { BaseElement } from "../../core/element.js";
2
+ import { isSafeHref } from "../../patterns/internal/safe-href.js";
3
+ import { boeStatusGlyph, boeStatusStyles, statusLabel, toStatusKind } from "../../foundations/status/index.js";
4
+ import { boeEntrance, boeEntranceKeyframes, boeReducedMotionPolicy, boeStaggerStyles } from "../../foundations/motion/index.js";
5
+ const escape = (s) => s.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&#39;");
6
+ const verdict = (s) => ({ pass: "Within policy", warn: "Needs exception", fail: "Outside policy", info: "Information" })[s];
7
+ const glyph = (s) => boeStatusGlyph(toStatusKind(s));
8
+ export const resultDocumentIds = (blocks) => [...new Set(blocks.flatMap(b => b.type === "documents" ? b.items.map(i => i.id) : []))];
9
+ /** Pure escaped renderer also usable by host-composed conversations. */
10
+ export function renderResultBlock(block) {
11
+ const heading = block.title ? `<h3 part="title">${escape(block.title)}</h3>` : "";
12
+ if (block.type === "facts")
13
+ return `${heading}<dl part="facts">${block.rows.map(r => `<div part="row"><dt>${escape(r.label)}</dt><dd>${escape(r.value)}</dd></div>`).join("")}</dl>`;
14
+ if (block.type === "checks")
15
+ return `${heading}<ul part="checks">${block.rows.map(r => `<li part="row">${glyph(r.status)}<div><strong>${escape(r.label)}</strong>${r.detail ? `<p>${escape(r.detail)}</p>` : ""}</div><span part="verdict" data-status="${r.status}">${escape(r.value ?? verdict(r.status))}</span></li>`).join("")}</ul>`;
16
+ if (block.type === "documents")
17
+ return `${heading}<ul part="documents">${block.items.map(i => {
18
+ const content = `<svg aria-hidden="true" width="16" height="20" viewBox="0 0 16 20"><path d="M2 1h8l4 4v14H2zM10 1v5h4" fill="none" stroke="currentColor"/></svg><span><strong>${escape(i.name)}</strong>${i.detail ? `<small>${escape(i.detail)}</small>` : ""}</span>`;
19
+ return `<li part="row">${i.href && isSafeHref(i.href) ? `<a part="document" data-document-id="${escape(i.id)}" href="${escape(i.href)}" target="_blank" rel="noopener noreferrer">${content}</a>` : `<button part="document" data-document-id="${escape(i.id)}">${content}</button>`}</li>`;
20
+ }).join("")}</ul>`;
21
+ return `${heading}<div part="table-frame" role="region" aria-label="${escape(block.title ?? "Results")}" tabindex="0"><table><thead><tr>${block.columns.map(c => `<th scope="col">${escape(c)}</th>`).join("")}</tr></thead><tbody>${block.rows.map(r => `<tr>${r.cells.map((cell, index) => index === 0 ? `<th scope="row">${r.status ? `${glyph(r.status)}<span class="sr">${statusLabel(toStatusKind(r.status))}: </span>` : ""}${escape(cell)}${r.note ? `<small>${escape(r.note)}</small>` : ""}</th>` : `<td>${escape(cell)}</td>`).join("")}</tr>`).join("")}</tbody></table></div>${block.footnote ? `<p>${escape(block.footnote)}</p>` : ""}`;
22
+ }
23
+ export const resultBlockStyles = `
24
+ :host { display:block; min-width:0; color:var(--boe-token-text-text,#222); font:inherit; }
25
+ :host([hidden]){display:none !important} *{box-sizing:border-box} h3{font-size:1em;margin:0 0 .5rem} dl,ul{padding:0;margin:0;list-style:none}
26
+ [part="row"]{border-bottom:1px solid var(--boe-token-stroke-stroke,#ddd);padding:.7rem 0;display:flex;gap:.6rem;align-items:baseline}
27
+ dt{color:var(--boe-token-text-text-secondary,#666)} dd{margin:0 0 0 auto;font-variant-numeric:tabular-nums}
28
+ p{margin:.25rem 0;color:var(--boe-token-text-text-secondary,#666)} small{display:block;font-weight:normal;color:var(--boe-token-text-text-secondary,#666)}
29
+ [part="verdict"]{margin-left:auto;text-align:right} [data-status="warn"]{color:var(--boe-token-text-status-text-warning,#946400)} [data-status="fail"]{color:var(--boe-token-text-status-text-error,#c52a46)}
30
+ [part="document"]{display:flex;gap:.6rem;align-items:center;width:100%;text-align:left;color:inherit;font:inherit;background:none;border:0;text-decoration:none;cursor:pointer}
31
+ [part="table-frame"]{overflow:auto;max-width:100%} table{border-collapse:collapse;min-width:100%;font-variant-numeric:tabular-nums} td,th{padding:.7rem;text-align:left;border-bottom:1px solid var(--boe-token-stroke-stroke,#ddd)} td:last-child{font-weight:600;background:var(--boe-token-surface-surface-secondary,#f7f7f7)}
32
+ .sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
33
+ [part="block"]{${boeEntrance()}${boeStaggerStyles};margin-block:1rem;min-width:0}
34
+ ${boeEntranceKeyframes}${boeStatusStyles}${boeReducedMotionPolicy}`;
35
+ const DEFAULT_TAG_NAME = "box-result-blocks";
36
+ export class ResultBlocks extends BaseElement {
37
+ static tagName = DEFAULT_TAG_NAME;
38
+ value = [];
39
+ get blocks() { return this.value; }
40
+ set blocks(value) { this.value = value; if (this.isRendered)
41
+ this.update(); }
42
+ get documentIds() { return resultDocumentIds(this.value); }
43
+ renderTemplate() { this.shadowRoot.innerHTML = `<style>${resultBlockStyles}</style><div part="blocks"></div>`; }
44
+ setupListeners() {
45
+ this.shadowRoot.addEventListener("click", event => {
46
+ const row = event.target.closest("[data-document-id]");
47
+ if (row)
48
+ this.dispatchEvent(new CustomEvent("document-selected", { bubbles: true, composed: true, detail: { id: row.dataset.documentId } }));
49
+ });
50
+ }
51
+ update() {
52
+ const parent = this.shadowRoot.querySelector('[part="blocks"]');
53
+ this.value.forEach((block, index) => {
54
+ let node = parent.children[index];
55
+ const signature = JSON.stringify(block);
56
+ if (!node) {
57
+ node = document.createElement("section");
58
+ node.setAttribute("part", "block");
59
+ parent.append(node);
60
+ }
61
+ node.style.setProperty("--i", String(index));
62
+ if (node.dataset.signature !== signature) {
63
+ node.innerHTML = renderResultBlock(block);
64
+ node.dataset.signature = signature;
65
+ }
66
+ });
67
+ while (parent.children.length > this.value.length)
68
+ parent.lastElementChild.remove();
69
+ }
70
+ }
71
+ ResultBlocks.register();
@@ -9,6 +9,15 @@ export declare class ProgressBar extends BaseElement {
9
9
  private indicatorEl;
10
10
  get label(): string;
11
11
  set label(value: string);
12
+ /**
13
+ * Keep the label as the bar's accessible name but drop it from the layout.
14
+ *
15
+ * For a bar sitting under something that already names it — an upload row
16
+ * showing the filename above it — the visible label is a second copy of text
17
+ * the reader can already see.
18
+ */
19
+ get hideLabel(): boolean;
20
+ set hideLabel(value: boolean);
12
21
  get max(): number;
13
22
  set max(value: number);
14
23
  get value(): number;
@@ -35,6 +35,14 @@ const progressBarStyles = `
35
35
  color: var(--boe-token-text-text-secondary, #6f6f6f);
36
36
  }
37
37
 
38
+ /* Fully hidden rather than the sr-only clip the form fields use. There the
39
+ label element *is* the control's accessible name, so it has to stay
40
+ readable; here the name lives on [part="track"]'s aria-label, and leaving
41
+ a clipped copy behind would just make a screen reader read it twice. */
42
+ :host([hide-label]) [part="label"] {
43
+ display: none;
44
+ }
45
+
38
46
  [part="value"] {
39
47
  font-size: 0.86rem;
40
48
  font-weight: 700;
@@ -61,7 +69,7 @@ const progressBarStyles = `
61
69
  export class ProgressBar extends BaseElement {
62
70
  static tagName = DEFAULT_TAG_NAME;
63
71
  static get observedAttributes() {
64
- return ["label", "max", "value"];
72
+ return ["hide-label", "label", "max", "value"];
65
73
  }
66
74
  progressEl;
67
75
  labelEl;
@@ -74,6 +82,19 @@ export class ProgressBar extends BaseElement {
74
82
  set label(value) {
75
83
  this.setAttribute("label", value);
76
84
  }
85
+ /**
86
+ * Keep the label as the bar's accessible name but drop it from the layout.
87
+ *
88
+ * For a bar sitting under something that already names it — an upload row
89
+ * showing the filename above it — the visible label is a second copy of text
90
+ * the reader can already see.
91
+ */
92
+ get hideLabel() {
93
+ return this.hasAttribute("hide-label");
94
+ }
95
+ set hideLabel(value) {
96
+ this.toggleAttribute("hide-label", Boolean(value));
97
+ }
77
98
  get max() {
78
99
  return Number(this.getAttribute("max") ?? "100");
79
100
  }
@@ -92,7 +113,7 @@ export class ProgressBar extends BaseElement {
92
113
  }
93
114
  this.shadowRoot.innerHTML = `
94
115
  <style>${progressBarStyles}</style>
95
- <div part="progress" role="group">
116
+ <div part="progress">
96
117
  <div part="meta">
97
118
  <span part="label"></span>
98
119
  <span part="value"></span>
@@ -115,7 +136,12 @@ export class ProgressBar extends BaseElement {
115
136
  const max = Math.max(1, this.max);
116
137
  const value = clamp(this.value, 0, max);
117
138
  const percentage = Math.round((value / max) * 100);
118
- this.progressEl.setAttribute("aria-label", `${this.label} progress`);
139
+ // The name belongs to [part="track"] — the element carrying the
140
+ // progressbar role — and to nothing else. The wrapper used to be a
141
+ // role="group" named `${label} progress`, which both duplicated that name
142
+ // and stuttered: the default label is "Progress", so it announced
143
+ // "Progress progress", and the uploader's "<file> upload progress" became
144
+ // "<file> upload progress progress".
119
145
  this.labelEl.textContent = this.label;
120
146
  this.valueEl.textContent = `${percentage}%`;
121
147
  this.trackEl.setAttribute("aria-label", this.label);
@@ -0,0 +1,10 @@
1
+ import { BaseElement } from "../../core/element.js";
2
+ import { type StatusKind } from "../../foundations/status/index.js";
3
+ export declare class StatusIcon extends BaseElement {
4
+ static readonly tagName = "box-status-icon";
5
+ static get observedAttributes(): string[];
6
+ get kind(): StatusKind;
7
+ set kind(value: StatusKind);
8
+ protected renderTemplate(): void;
9
+ protected update(): void;
10
+ }
@@ -0,0 +1,26 @@
1
+ import { BaseElement } from "../../core/element.js";
2
+ import { boeStatusGlyph, boeStatusStyles, statusLabel, toStatusKind } from "../../foundations/status/index.js";
3
+ import { boeEntranceKeyframes, boeReducedMotionPolicy } from "../../foundations/motion/index.js";
4
+ const DEFAULT_TAG_NAME = "box-status-icon";
5
+ export class StatusIcon extends BaseElement {
6
+ static tagName = DEFAULT_TAG_NAME;
7
+ static get observedAttributes() { return ["kind"]; }
8
+ get kind() { return toStatusKind(this.getAttribute("kind") ?? "pending"); }
9
+ set kind(value) { this.setAttribute("kind", value); }
10
+ renderTemplate() {
11
+ this.shadowRoot.innerHTML = `<style>:host{display:inline-flex} :host([hidden]){display:none !important}
12
+ .label{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
13
+ ${boeEntranceKeyframes}${boeStatusStyles}${boeReducedMotionPolicy}</style><span part="glyph"></span><span class="label" part="label"></span>`;
14
+ }
15
+ update() {
16
+ if (!this.isRendered)
17
+ return;
18
+ const glyph = this.shadowRoot.querySelector('[part="glyph"]');
19
+ if (glyph.getAttribute("data-kind") !== this.kind) {
20
+ glyph.setAttribute("data-kind", this.kind);
21
+ glyph.innerHTML = boeStatusGlyph(this.kind);
22
+ }
23
+ this.shadowRoot.querySelector('[part="label"]').textContent = statusLabel(this.kind);
24
+ }
25
+ }
26
+ StatusIcon.register();
@@ -10,6 +10,7 @@ import type { AccessStats } from "./patterns/share/access-stats.js";
10
10
  import type { Accordion } from "./components/navigation/accordion.js";
11
11
  import type { ActivityDensityStrip } from "./patterns/audit/activity-density.js";
12
12
  import type { AgentChat } from "./patterns/agent-chat/agent-chat.js";
13
+ import type { AgentWorkspace } from "./patterns/agent-workspace/agent-workspace.js";
13
14
  import type { Alert } from "./components/feedback/alert.js";
14
15
  import type { AnnotationInspector } from "./patterns/preview/annotation-inspector.js";
15
16
  import type { AnnotationThread } from "./patterns/preview/annotation-thread.js";
@@ -25,25 +26,21 @@ import type { BulkActionBar } from "./patterns/item/bulk-action-bar.js";
25
26
  import type { Button } from "./components/actions/button.js";
26
27
  import type { ButtonGroup } from "./components/actions/button-group.js";
27
28
  import type { Calendar } from "./components/forms/calendar.js";
29
+ import type { CallConsole } from "./patterns/call-console/call-console.js";
28
30
  import type { Card } from "./components/collections/card.js";
29
31
  import type { Carousel } from "./components/collections/carousel.js";
30
32
  import type { CategorySelector } from "./components/forms/category-selector.js";
31
33
  import type { ChartPanel } from "./patterns/insights/chart-panel.js";
34
+ import type { CheckList } from "./components/collections/check-list.js";
32
35
  import type { Checkbox } from "./components/forms/checkbox.js";
33
36
  import type { CheckboxGroup } from "./components/forms/checkbox-group.js";
34
37
  import type { Chip } from "./components/feedback/chip.js";
38
+ import type { CodeBlock } from "./components/output/code-block.js";
35
39
  import type { CollaboratorAvatars } from "./patterns/share/collaborator-avatars.js";
36
40
  import type { ColorPicker } from "./components/forms/color-picker.js";
37
41
  import type { Combobox } from "./components/forms/combobox.js";
38
42
  import type { CommandPalette } from "./components/overlays/command-palette.js";
39
43
  import type { CommentThread } from "./patterns/comments/comment-thread.js";
40
- import type { CodeBlock } from "./components/output/code-block.js";
41
- import type { FormattedDate } from "./components/output/formatted-date.js";
42
- import type { Indicator } from "./components/feedback/indicator.js";
43
- import type { TileGroup } from "./components/forms/tile-group.js";
44
- import type { FormattedFileSize } from "./components/output/formatted-file-size.js";
45
- import type { FormattedNumber } from "./components/output/formatted-number.js";
46
- import type { RelativeTime } from "./components/output/relative-time.js";
47
44
  import type { CompareView } from "./patterns/diff/compare-view.js";
48
45
  import type { ContactDatalistItem } from "./components/identity/contact-datalist-item.js";
49
46
  import type { ContentExplorer } from "./patterns/content-explorer/content-explorer.js";
@@ -56,7 +53,7 @@ import type { DateField } from "./components/forms/date-field.js";
56
53
  import type { Dialog } from "./components/overlays/dialog.js";
57
54
  import type { DiffViewer } from "./patterns/diff/diff-viewer.js";
58
55
  import type { Divider } from "./components/layout/divider.js";
59
- import type { Grid } from "./components/layout/grid.js";
56
+ import type { DocumentList } from "./components/collections/document-list.js";
60
57
  import type { DonutChart } from "./patterns/insights/donut-chart.js";
61
58
  import type { DraggableList } from "./components/collections/draggable-list.js";
62
59
  import type { Drawer } from "./components/overlays/drawer.js";
@@ -72,16 +69,23 @@ import type { ExplorerItems } from "./patterns/content-explorer/adapters/items.j
72
69
  import type { ExplorerList } from "./patterns/content-explorer/adapters/list.js";
73
70
  import type { ExplorerTable } from "./patterns/content-explorer/adapters/table.js";
74
71
  import type { ExplorerToolbar } from "./patterns/content-explorer/adapters/toolbar.js";
72
+ import type { FactList } from "./components/collections/fact-list.js";
75
73
  import type { Fieldset } from "./components/forms/fieldset.js";
76
74
  import type { FileRequestBuilder } from "./patterns/file-request/file-request-builder.js";
77
75
  import type { FilterBar } from "./patterns/search/filter-bar.js";
78
76
  import type { FormWizard } from "./patterns/form-wizard/form-wizard.js";
77
+ import type { FormattedDate } from "./components/output/formatted-date.js";
78
+ import type { FormattedDuration } from "./components/output/formatted-duration.js";
79
+ import type { FormattedFileSize } from "./components/output/formatted-file-size.js";
80
+ import type { FormattedNumber } from "./components/output/formatted-number.js";
79
81
  import type { GovernancePanel } from "./patterns/governance/governance-panel.js";
82
+ import type { Grid } from "./components/layout/grid.js";
80
83
  import type { GridView } from "./components/collections/grid-view.js";
81
84
  import type { GuideTooltip } from "./components/overlays/guide-tooltip.js";
82
85
  import type { HelpText } from "./components/feedback/help-text.js";
83
86
  import type { IconButton } from "./components/actions/icon-button.js";
84
87
  import type { Illustration } from "./components/visuals/illustration.js";
88
+ import type { Indicator } from "./components/feedback/indicator.js";
85
89
  import type { InviteCollaboratorsModal } from "./patterns/share/invite-collaborators-modal.js";
86
90
  import type { ItemDetailsPanel } from "./patterns/item/item-details-panel.js";
87
91
  import type { ItemForm } from "./patterns/item/item-form.js";
@@ -100,6 +104,7 @@ import type { NotificationInbox } from "./patterns/notifications/notification-in
100
104
  import type { Nudge } from "./components/feedback/nudge.js";
101
105
  import type { NumberInput } from "./components/forms/number-input.js";
102
106
  import type { Pagination } from "./components/collections/pagination.js";
107
+ import type { Path } from "./components/feedback/path.js";
103
108
  import type { PermissionMatrix } from "./patterns/share/permission-matrix.js";
104
109
  import type { Persona } from "./components/identity/persona.js";
105
110
  import type { PillCloud } from "./components/forms/pill-cloud.js";
@@ -115,8 +120,11 @@ import type { ProvenanceStrip } from "./patterns/lineage/provenance-strip.js";
115
120
  import type { RadioGroup } from "./components/forms/radio-group.js";
116
121
  import type { RangeSlider } from "./components/forms/range-slider.js";
117
122
  import type { Rating } from "./components/forms/rating.js";
123
+ import type { RelativeTime } from "./components/output/relative-time.js";
124
+ import type { ResultBlocks } from "./components/collections/result-blocks.js";
118
125
  import type { ReviewQueueItem } from "./patterns/task/review-queue-item.js";
119
126
  import type { RichTextInput } from "./components/forms/rich-text-input.js";
127
+ import type { RunSummary } from "./patterns/run/run-summary.js";
120
128
  import type { RunTrace } from "./patterns/run/run-trace.js";
121
129
  import type { SavedViewPicker } from "./patterns/search/saved-view-picker.js";
122
130
  import type { SearchField } from "./components/forms/search-field.js";
@@ -133,7 +141,7 @@ import type { Slider } from "./components/forms/slider.js";
133
141
  import type { SpinButton } from "./components/forms/spin-button.js";
134
142
  import type { Spinner } from "./components/feedback/spinner.js";
135
143
  import type { SplitView } from "./components/layout/split-view.js";
136
- import type { Path } from "./components/feedback/path.js";
144
+ import type { StatusIcon } from "./components/feedback/status-icon.js";
137
145
  import type { Switch } from "./components/forms/switch.js";
138
146
  import type { Table } from "./components/collections/table.js";
139
147
  import type { Tabs } from "./components/navigation/tabs.js";
@@ -142,9 +150,11 @@ import type { TaskAssignmentPanel } from "./patterns/task/task-assignment-panel.
142
150
  import type { TextArea } from "./components/forms/text-area.js";
143
151
  import type { TextField } from "./components/forms/text-field.js";
144
152
  import type { ThumbnailCard } from "./components/collections/thumbnail-card.js";
153
+ import type { TileGroup } from "./components/forms/tile-group.js";
145
154
  import type { TimeField } from "./components/forms/time-field.js";
146
155
  import type { Timeline } from "./patterns/timeline/timeline.js";
147
156
  import type { Toast } from "./components/feedback/toast.js";
157
+ import type { Toolbar } from "./components/actions/toolbar.js";
148
158
  import type { Tooltip } from "./components/overlays/tooltip.js";
149
159
  import type { Tree } from "./components/collections/tree.js";
150
160
  import type { TreeGrid } from "./components/collections/tree-grid.js";
@@ -160,6 +170,7 @@ declare global {
160
170
  "box-accordion": Accordion;
161
171
  "box-activity-density": ActivityDensityStrip;
162
172
  "box-agent-chat": AgentChat;
173
+ "box-agent-workspace": AgentWorkspace;
163
174
  "box-alert": Alert;
164
175
  "box-annotation-inspector": AnnotationInspector;
165
176
  "box-annotation-thread": AnnotationThread;
@@ -175,25 +186,21 @@ declare global {
175
186
  "box-button": Button;
176
187
  "box-button-group": ButtonGroup;
177
188
  "box-calendar": Calendar;
189
+ "box-call-console": CallConsole;
178
190
  "box-card": Card;
179
191
  "box-carousel": Carousel;
180
192
  "box-category-selector": CategorySelector;
181
193
  "box-chart-panel": ChartPanel;
194
+ "box-check-list": CheckList;
182
195
  "box-checkbox": Checkbox;
183
196
  "box-checkbox-group": CheckboxGroup;
184
197
  "box-chip": Chip;
198
+ "box-code-block": CodeBlock;
185
199
  "box-collaborator-avatars": CollaboratorAvatars;
186
200
  "box-color-picker": ColorPicker;
187
201
  "box-combobox": Combobox;
188
202
  "box-command-palette": CommandPalette;
189
203
  "box-comment-thread": CommentThread;
190
- "box-code-block": CodeBlock;
191
- "box-formatted-date": FormattedDate;
192
- "box-indicator": Indicator;
193
- "box-tile-group": TileGroup;
194
- "box-formatted-file-size": FormattedFileSize;
195
- "box-formatted-number": FormattedNumber;
196
- "box-relative-time": RelativeTime;
197
204
  "box-compare-view": CompareView;
198
205
  "box-contact-datalist-item": ContactDatalistItem;
199
206
  "box-content-explorer": ContentExplorer;
@@ -206,7 +213,7 @@ declare global {
206
213
  "box-dialog": Dialog;
207
214
  "box-diff-viewer": DiffViewer;
208
215
  "box-divider": Divider;
209
- "box-grid": Grid;
216
+ "box-document-list": DocumentList;
210
217
  "box-donut-chart": DonutChart;
211
218
  "box-draggable-list": DraggableList;
212
219
  "box-drawer": Drawer;
@@ -222,16 +229,23 @@ declare global {
222
229
  "box-explorer-list": ExplorerList;
223
230
  "box-explorer-table": ExplorerTable;
224
231
  "box-explorer-toolbar": ExplorerToolbar;
232
+ "box-fact-list": FactList;
225
233
  "box-fieldset": Fieldset;
226
234
  "box-file-request-builder": FileRequestBuilder;
227
235
  "box-filter-bar": FilterBar;
228
236
  "box-form-wizard": FormWizard;
237
+ "box-formatted-date": FormattedDate;
238
+ "box-formatted-duration": FormattedDuration;
239
+ "box-formatted-file-size": FormattedFileSize;
240
+ "box-formatted-number": FormattedNumber;
229
241
  "box-governance-panel": GovernancePanel;
242
+ "box-grid": Grid;
230
243
  "box-grid-view": GridView;
231
244
  "box-guide-tooltip": GuideTooltip;
232
245
  "box-help-text": HelpText;
233
246
  "box-icon-button": IconButton;
234
247
  "box-illustration": Illustration;
248
+ "box-indicator": Indicator;
235
249
  "box-invite-collaborators-modal": InviteCollaboratorsModal;
236
250
  "box-item-details-panel": ItemDetailsPanel;
237
251
  "box-item-form": ItemForm;
@@ -250,6 +264,7 @@ declare global {
250
264
  "box-nudge": Nudge;
251
265
  "box-number-input": NumberInput;
252
266
  "box-pagination": Pagination;
267
+ "box-path": Path;
253
268
  "box-permission-matrix": PermissionMatrix;
254
269
  "box-persona": Persona;
255
270
  "box-pill-cloud": PillCloud;
@@ -265,8 +280,11 @@ declare global {
265
280
  "box-radio-group": RadioGroup;
266
281
  "box-range-slider": RangeSlider;
267
282
  "box-rating": Rating;
283
+ "box-relative-time": RelativeTime;
284
+ "box-result-blocks": ResultBlocks;
268
285
  "box-review-queue-item": ReviewQueueItem;
269
286
  "box-rich-text-input": RichTextInput;
287
+ "box-run-summary": RunSummary;
270
288
  "box-run-trace": RunTrace;
271
289
  "box-saved-view-picker": SavedViewPicker;
272
290
  "box-search-field": SearchField;
@@ -283,7 +301,7 @@ declare global {
283
301
  "box-spin-button": SpinButton;
284
302
  "box-spinner": Spinner;
285
303
  "box-split-view": SplitView;
286
- "box-path": Path;
304
+ "box-status-icon": StatusIcon;
287
305
  "box-switch": Switch;
288
306
  "box-table": Table;
289
307
  "box-tabs": Tabs;
@@ -292,9 +310,11 @@ declare global {
292
310
  "box-text-area": TextArea;
293
311
  "box-text-field": TextField;
294
312
  "box-thumbnail-card": ThumbnailCard;
313
+ "box-tile-group": TileGroup;
295
314
  "box-time-field": TimeField;
296
315
  "box-timeline": Timeline;
297
316
  "box-toast": Toast;
317
+ "box-toolbar": Toolbar;
298
318
  "box-tooltip": Tooltip;
299
319
  "box-tree": Tree;
300
320
  "box-tree-grid": TreeGrid;
@@ -307,4 +327,4 @@ declare global {
307
327
  }
308
328
  }
309
329
  /** Every element tag the library registers, for host-side narrowing. */
310
- export type BoxElementTagName = "box-access-stats" | "box-accordion" | "box-activity-density" | "box-agent-chat" | "box-alert" | "box-annotation-inspector" | "box-annotation-thread" | "box-annotation-toolbar" | "box-app-shell" | "box-audit-log" | "box-avatar" | "box-badge" | "box-badgeable" | "box-bar-chart" | "box-breadcrumb" | "box-bulk-action-bar" | "box-button" | "box-button-group" | "box-calendar" | "box-card" | "box-carousel" | "box-category-selector" | "box-chart-panel" | "box-checkbox" | "box-checkbox-group" | "box-chip" | "box-collaborator-avatars" | "box-color-picker" | "box-combobox" | "box-command-palette" | "box-comment-thread" | "box-code-block" | "box-formatted-date" | "box-indicator" | "box-tile-group" | "box-formatted-file-size" | "box-formatted-number" | "box-relative-time" | "box-compare-view" | "box-contact-datalist-item" | "box-content-explorer" | "box-content-picker" | "box-content-sidebar" | "box-content-uploader" | "box-context-menu" | "box-datalist-item" | "box-date-field" | "box-dialog" | "box-diff-viewer" | "box-divider" | "box-grid" | "box-donut-chart" | "box-draggable-list" | "box-drawer" | "box-drop-zone" | "box-dropdown" | "box-dual-listbox" | "box-due-badge" | "box-empty-state" | "box-error-mask" | "box-explorer-action-menu" | "box-explorer-breadcrumbs" | "box-explorer-items" | "box-explorer-list" | "box-explorer-table" | "box-explorer-toolbar" | "box-fieldset" | "box-file-request-builder" | "box-filter-bar" | "box-form-wizard" | "box-governance-panel" | "box-grid-view" | "box-guide-tooltip" | "box-help-text" | "box-icon-button" | "box-illustration" | "box-invite-collaborators-modal" | "box-item-details-panel" | "box-item-form" | "box-line-chart" | "box-lineage-graph" | "box-link-button" | "box-menu" | "box-menu-item" | "box-metadata-filter-builder" | "box-metadata-inspector" | "box-metric-card" | "box-multi-select" | "box-nav-sidebar" | "box-notification-bell" | "box-notification-inbox" | "box-nudge" | "box-number-input" | "box-pagination" | "box-permission-matrix" | "box-persona" | "box-pill-cloud" | "box-pill-selector-dropdown" | "box-popover" | "box-presence" | "box-preview-element" | "box-preview-header" | "box-progress-bar" | "box-progress-ring" | "box-progress-steps" | "box-provenance-strip" | "box-radio-group" | "box-range-slider" | "box-rating" | "box-review-queue-item" | "box-rich-text-input" | "box-run-trace" | "box-saved-view-picker" | "box-search-field" | "box-search-results-header" | "box-section" | "box-segmented-control" | "box-select" | "box-share-panel" | "box-shortcuts-overlay" | "box-sidebar-toggle-button" | "box-signature-ceremony" | "box-skeleton" | "box-slider" | "box-spin-button" | "box-spinner" | "box-split-view" | "box-path" | "box-switch" | "box-table" | "box-tabs" | "box-tag-input" | "box-task-assignment-panel" | "box-text-area" | "box-text-field" | "box-thumbnail-card" | "box-time-field" | "box-timeline" | "box-toast" | "box-tooltip" | "box-tree" | "box-tree-grid" | "box-unified-share-modal" | "box-version-graph" | "box-version-list" | "box-wizard-summary" | "box-work-queue" | "box-workload-board";
330
+ export type BoxElementTagName = "box-access-stats" | "box-accordion" | "box-activity-density" | "box-agent-chat" | "box-agent-workspace" | "box-alert" | "box-annotation-inspector" | "box-annotation-thread" | "box-annotation-toolbar" | "box-app-shell" | "box-audit-log" | "box-avatar" | "box-badge" | "box-badgeable" | "box-bar-chart" | "box-breadcrumb" | "box-bulk-action-bar" | "box-button" | "box-button-group" | "box-calendar" | "box-call-console" | "box-card" | "box-carousel" | "box-category-selector" | "box-chart-panel" | "box-check-list" | "box-checkbox" | "box-checkbox-group" | "box-chip" | "box-code-block" | "box-collaborator-avatars" | "box-color-picker" | "box-combobox" | "box-command-palette" | "box-comment-thread" | "box-compare-view" | "box-contact-datalist-item" | "box-content-explorer" | "box-content-picker" | "box-content-sidebar" | "box-content-uploader" | "box-context-menu" | "box-datalist-item" | "box-date-field" | "box-dialog" | "box-diff-viewer" | "box-divider" | "box-document-list" | "box-donut-chart" | "box-draggable-list" | "box-drawer" | "box-drop-zone" | "box-dropdown" | "box-dual-listbox" | "box-due-badge" | "box-empty-state" | "box-error-mask" | "box-explorer-action-menu" | "box-explorer-breadcrumbs" | "box-explorer-items" | "box-explorer-list" | "box-explorer-table" | "box-explorer-toolbar" | "box-fact-list" | "box-fieldset" | "box-file-request-builder" | "box-filter-bar" | "box-form-wizard" | "box-formatted-date" | "box-formatted-duration" | "box-formatted-file-size" | "box-formatted-number" | "box-governance-panel" | "box-grid" | "box-grid-view" | "box-guide-tooltip" | "box-help-text" | "box-icon-button" | "box-illustration" | "box-indicator" | "box-invite-collaborators-modal" | "box-item-details-panel" | "box-item-form" | "box-line-chart" | "box-lineage-graph" | "box-link-button" | "box-menu" | "box-menu-item" | "box-metadata-filter-builder" | "box-metadata-inspector" | "box-metric-card" | "box-multi-select" | "box-nav-sidebar" | "box-notification-bell" | "box-notification-inbox" | "box-nudge" | "box-number-input" | "box-pagination" | "box-path" | "box-permission-matrix" | "box-persona" | "box-pill-cloud" | "box-pill-selector-dropdown" | "box-popover" | "box-presence" | "box-preview-element" | "box-preview-header" | "box-progress-bar" | "box-progress-ring" | "box-progress-steps" | "box-provenance-strip" | "box-radio-group" | "box-range-slider" | "box-rating" | "box-relative-time" | "box-result-blocks" | "box-review-queue-item" | "box-rich-text-input" | "box-run-summary" | "box-run-trace" | "box-saved-view-picker" | "box-search-field" | "box-search-results-header" | "box-section" | "box-segmented-control" | "box-select" | "box-share-panel" | "box-shortcuts-overlay" | "box-sidebar-toggle-button" | "box-signature-ceremony" | "box-skeleton" | "box-slider" | "box-spin-button" | "box-spinner" | "box-split-view" | "box-status-icon" | "box-switch" | "box-table" | "box-tabs" | "box-tag-input" | "box-task-assignment-panel" | "box-text-area" | "box-text-field" | "box-thumbnail-card" | "box-tile-group" | "box-time-field" | "box-timeline" | "box-toast" | "box-toolbar" | "box-tooltip" | "box-tree" | "box-tree-grid" | "box-unified-share-modal" | "box-version-graph" | "box-version-list" | "box-wizard-summary" | "box-work-queue" | "box-workload-board";
@@ -0,0 +1 @@
1
+ export * from "../patterns/agent-workspace/index.js";
@@ -0,0 +1 @@
1
+ export * from "../patterns/agent-workspace/index.js";
@@ -0,0 +1 @@
1
+ export * from "../patterns/call-console/index.js";
@@ -0,0 +1 @@
1
+ export * from "../patterns/call-console/index.js";
@@ -0,0 +1 @@
1
+ export * from "../components/collections/check-list.js";
@@ -0,0 +1 @@
1
+ export * from "../components/collections/check-list.js";
@@ -0,0 +1 @@
1
+ export * from "../components/collections/document-list.js";
@@ -0,0 +1 @@
1
+ export * from "../components/collections/document-list.js";
@@ -0,0 +1 @@
1
+ export * from "../components/collections/fact-list.js";
@@ -0,0 +1 @@
1
+ export * from "../components/collections/fact-list.js";
@@ -0,0 +1 @@
1
+ export * from "../components/collections/result-blocks.js";
@@ -0,0 +1 @@
1
+ export * from "../components/collections/result-blocks.js";
@@ -0,0 +1 @@
1
+ export * from "../patterns/run/run-summary.js";
@@ -0,0 +1 @@
1
+ export * from "../patterns/run/run-summary.js";
@@ -0,0 +1 @@
1
+ export * from "../components/feedback/status-icon.js";
@@ -0,0 +1 @@
1
+ export * from "../components/feedback/status-icon.js";
@@ -0,0 +1,8 @@
1
+ export declare const boeMotionStagger = "var(--boe-profile-motion-stagger, 50ms)";
2
+ export declare const boeEntranceKeyframes = "\n@keyframes boe-rise { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }\n@keyframes boe-pop { from { opacity: 0; transform: scale(.8); } to { opacity: 1; transform: none; } }\n@keyframes boe-fade-in { from { opacity: 0; } to { opacity: 1; } }\n@keyframes boe-status-check { from { stroke-dashoffset: 20; } to { stroke-dashoffset: 0; } }\n@keyframes boe-status-spin { to { transform: rotate(360deg); } }\n";
3
+ export declare const boeEntrance: (name?: "rise" | "pop" | "fade-in") => string;
4
+ export declare const boeStaggerStyles = "animation-delay: calc(var(--i, 0) * var(--boe-profile-motion-stagger, 50ms));";
5
+ /** Put padding on a grandchild, not the collapsible child. Pair with inert. */
6
+ export declare const boeDisclosureStyles: (selector?: string) => string;
7
+ /** Include in document and shadow styles: media rules do not cross shadow roots. */
8
+ export declare const boeReducedMotionPolicy = "\n@media (prefers-reduced-motion: reduce) {\n *, *::before, *::after { animation-duration: 1ms !important; animation-iteration-count: 1 !important;\n animation-delay: 0ms !important; transition-duration: 1ms !important; transition-delay: 0ms !important; scroll-behavior: auto !important; }\n}\n";