@burtson-labs/ui 0.5.1 → 0.6.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.
@@ -0,0 +1,61 @@
1
+ import { cn } from "../lib/utils.js";
2
+ import { Collapsible } from "radix-ui";
3
+ import "react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import ChevronRight from "@burtson-labs/icons/react/chevron-right";
6
+ import Lightbulb from "@burtson-labs/icons/react/lightbulb";
7
+ //#region src/components/reasoning.tsx
8
+ /** A model's reasoning, collapsed to one line ("Thought for 3s") unless opened. */
9
+ function Reasoning({ streaming = false, durationMs, defaultOpen = false, children, className, ...props }) {
10
+ const label = streaming ? "Thinking…" : durationMs !== void 0 ? `Thought for ${Math.max(1, Math.round(durationMs / 1e3))}s` : "Reasoning";
11
+ return /* @__PURE__ */ jsx(Collapsible.Root, {
12
+ defaultOpen,
13
+ children: /* @__PURE__ */ jsxs("div", {
14
+ "data-slot": "reasoning",
15
+ className: cn("grid gap-1.5", className),
16
+ ...props,
17
+ children: [/* @__PURE__ */ jsxs(Collapsible.Trigger, {
18
+ className: "group/reasoning inline-flex w-fit items-center gap-1.5 rounded-sm text-xs text-muted-foreground outline-none hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/20",
19
+ children: [
20
+ /* @__PURE__ */ jsx(Lightbulb, {
21
+ className: cn("size-3.5", streaming && "animate-pulse"),
22
+ "aria-hidden": true
23
+ }),
24
+ label,
25
+ /* @__PURE__ */ jsx(ChevronRight, {
26
+ "aria-hidden": true,
27
+ className: "size-3.5 transition-transform group-data-[state=open]/reasoning:rotate-90"
28
+ })
29
+ ]
30
+ }), /* @__PURE__ */ jsx(Collapsible.Content, {
31
+ className: "overflow-hidden data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down",
32
+ children: /* @__PURE__ */ jsx("div", {
33
+ className: "border-l-2 border-border-strong pl-3 text-[13px] leading-6 text-muted-foreground",
34
+ children
35
+ })
36
+ })]
37
+ })
38
+ });
39
+ }
40
+ /** Three pulsing dots while a reply is on its way. Still under reduced motion. */
41
+ function StreamingIndicator({ className, label = "Assistant is typing", ...props }) {
42
+ return /* @__PURE__ */ jsx("span", {
43
+ "data-slot": "streaming-indicator",
44
+ role: "status",
45
+ "aria-label": label,
46
+ className: cn("inline-flex h-5 items-center gap-1", className),
47
+ ...props,
48
+ children: [
49
+ 0,
50
+ 150,
51
+ 300
52
+ ].map((delay) => /* @__PURE__ */ jsx("span", {
53
+ className: "size-1.5 animate-bounce rounded-full bg-muted-foreground motion-reduce:animate-none",
54
+ style: { animationDelay: `${delay}ms` }
55
+ }, delay))
56
+ });
57
+ }
58
+ //#endregion
59
+ export { Reasoning, StreamingIndicator };
60
+
61
+ //# sourceMappingURL=reasoning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoning.js","names":["CollapsiblePrimitive"],"sources":["../../src/components/reasoning.tsx"],"sourcesContent":["import ChevronRight from '@burtson-labs/icons/react/chevron-right';\nimport Lightbulb from '@burtson-labs/icons/react/lightbulb';\nimport { Collapsible as CollapsiblePrimitive } from 'radix-ui';\nimport * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\nexport interface ReasoningProps extends React.ComponentProps<'div'> {\n /** True while the model is still thinking. */\n streaming?: boolean;\n durationMs?: number;\n defaultOpen?: boolean;\n}\n\n/** A model's reasoning, collapsed to one line (\"Thought for 3s\") unless opened. */\nfunction Reasoning({\n streaming = false,\n durationMs,\n defaultOpen = false,\n children,\n className,\n ...props\n}: ReasoningProps) {\n const label = streaming\n ? 'Thinking…'\n : durationMs !== undefined\n ? `Thought for ${Math.max(1, Math.round(durationMs / 1000))}s`\n : 'Reasoning';\n return (\n <CollapsiblePrimitive.Root defaultOpen={defaultOpen}>\n <div data-slot=\"reasoning\" className={cn('grid gap-1.5', className)} {...props}>\n <CollapsiblePrimitive.Trigger className=\"group/reasoning inline-flex w-fit items-center gap-1.5 rounded-sm text-xs text-muted-foreground outline-none hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/20\">\n <Lightbulb className={cn('size-3.5', streaming && 'animate-pulse')} aria-hidden />\n {label}\n <ChevronRight\n aria-hidden\n className=\"size-3.5 transition-transform group-data-[state=open]/reasoning:rotate-90\"\n />\n </CollapsiblePrimitive.Trigger>\n <CollapsiblePrimitive.Content className=\"overflow-hidden data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down\">\n <div className=\"border-l-2 border-border-strong pl-3 text-[13px] leading-6 text-muted-foreground\">\n {children}\n </div>\n </CollapsiblePrimitive.Content>\n </div>\n </CollapsiblePrimitive.Root>\n );\n}\n\n/** Three pulsing dots while a reply is on its way. Still under reduced motion. */\nfunction StreamingIndicator({\n className,\n label = 'Assistant is typing',\n ...props\n}: React.ComponentProps<'span'> & { label?: string }) {\n return (\n <span\n data-slot=\"streaming-indicator\"\n role=\"status\"\n aria-label={label}\n className={cn('inline-flex h-5 items-center gap-1', className)}\n {...props}\n >\n {[0, 150, 300].map((delay) => (\n <span\n key={delay}\n className=\"size-1.5 animate-bounce rounded-full bg-muted-foreground motion-reduce:animate-none\"\n style={{ animationDelay: `${delay}ms` }}\n />\n ))}\n </span>\n );\n}\n\nexport { Reasoning, StreamingIndicator };\n"],"mappings":";;;;;;;;AAeA,SAAS,UAAU,EACjB,YAAY,OACZ,YACA,cAAc,OACd,UACA,WACA,GAAG,SACc;CACjB,MAAM,QAAQ,YACV,cACA,eAAe,KAAA,IACb,eAAe,KAAK,IAAI,GAAG,KAAK,MAAM,aAAa,GAAI,CAAC,EAAE,KAC1D;CACN,OACE,oBAACA,YAAqB,MAAtB;EAAwC;EACtC,UAAA,qBAAC,OAAD;GAAK,aAAU;GAAY,WAAW,GAAG,gBAAgB,SAAS;GAAG,GAAI;GAAzE,UAAA,CACE,qBAACA,YAAqB,SAAtB;IAA8B,WAAU;IAAxC,UAAA;KACE,oBAAC,WAAD;MAAW,WAAW,GAAG,YAAY,aAAa,eAAe;MAAG,eAAA;KAAa,CAAA;KAChF;KACD,oBAAC,cAAD;MACE,eAAA;MACA,WAAU;KACX,CAAA;IAC2B;GAC9B,CAAA,GAAA,oBAACA,YAAqB,SAAtB;IAA8B,WAAU;IACtC,UAAA,oBAAC,OAAD;KAAK,WAAU;KACZ;IACE,CAAA;GACuB,CAAA,CAC3B;;CACoB,CAAA;AAE/B;;AAGA,SAAS,mBAAmB,EAC1B,WACA,QAAQ,uBACR,GAAG,SACiD;CACpD,OACE,oBAAC,QAAD;EACE,aAAU;EACV,MAAK;EACL,cAAY;EACZ,WAAW,GAAG,sCAAsC,SAAS;EAC7D,GAAI;EAEH,UAAA;GAAC;GAAG;GAAK;EAAG,CAAC,CAAC,KAAK,UAClB,oBAAC,QAAD;GAEE,WAAU;GACV,OAAO,EAAE,gBAAgB,GAAG,MAAM,IAAI;EACvC,GAHM,KAGN,CACF;CACG,CAAA;AAEV"}
@@ -0,0 +1,32 @@
1
+ import * as React from 'react';
2
+ export type ToolCallStatus = 'pending' | 'running' | 'success' | 'error';
3
+ export interface ToolCallProps extends Omit<React.ComponentProps<'div'>, 'title'> {
4
+ /** The tool's name, e.g. `get_load`. */
5
+ name: string;
6
+ status: ToolCallStatus;
7
+ /** Arguments the agent passed; shown as formatted JSON. */
8
+ args?: unknown;
9
+ /** What the tool returned; shown as formatted JSON. */
10
+ result?: unknown;
11
+ /** Error message when the call failed. */
12
+ error?: string;
13
+ durationMs?: number;
14
+ defaultOpen?: boolean;
15
+ }
16
+ /** A tool call an agent made: name, live status, and collapsible arguments and result. */
17
+ declare function ToolCall({ name, status, args, result, error, durationMs, defaultOpen, className, ...props }: ToolCallProps): React.JSX.Element;
18
+ export interface ToolApprovalProps extends Omit<React.ComponentProps<'div'>, 'title'> {
19
+ name: string;
20
+ /** What will happen, in plain words, e.g. "Approve L-1042 and send it to Gravitate". */
21
+ description: React.ReactNode;
22
+ args?: unknown;
23
+ /** `pending` shows the buttons; the others record the decision. */
24
+ state?: 'pending' | 'approved' | 'denied';
25
+ onApprove?: () => void;
26
+ onDeny?: () => void;
27
+ approveLabel?: string;
28
+ denyLabel?: string;
29
+ }
30
+ /** A gate before an agent runs a tool with side effects: the person approves or denies it. */
31
+ declare function ToolApproval({ name, description, args, state, onApprove, onDeny, approveLabel, denyLabel, className, ...props }: ToolApprovalProps): React.JSX.Element;
32
+ export { ToolApproval, ToolCall };
@@ -0,0 +1,152 @@
1
+ import { cn } from "../lib/utils.js";
2
+ import { Button } from "./button.js";
3
+ import { StatusDot } from "./status.js";
4
+ import { Collapsible } from "radix-ui";
5
+ import "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import ChevronRight from "@burtson-labs/icons/react/chevron-right";
8
+ import Wrench from "@burtson-labs/icons/react/wrench";
9
+ //#region src/components/tool-call.tsx
10
+ var statusText = {
11
+ pending: "Queued",
12
+ running: "Running",
13
+ success: "Done",
14
+ error: "Failed"
15
+ };
16
+ var statusDot = {
17
+ pending: "neutral",
18
+ running: "brand",
19
+ success: "success",
20
+ error: "danger"
21
+ };
22
+ var json = (v) => typeof v === "string" ? v : JSON.stringify(v, null, 2);
23
+ /** A tool call an agent made: name, live status, and collapsible arguments and result. */
24
+ function ToolCall({ name, status, args, result, error, durationMs, defaultOpen = false, className, ...props }) {
25
+ const hasDetail = args !== void 0 || result !== void 0 || Boolean(error);
26
+ return /* @__PURE__ */ jsx(Collapsible.Root, {
27
+ defaultOpen,
28
+ disabled: !hasDetail,
29
+ children: /* @__PURE__ */ jsxs("div", {
30
+ "data-slot": "tool-call",
31
+ "data-status": status,
32
+ className: cn("animate-in overflow-hidden rounded-md border bg-surface text-[13px]", status === "error" && "border-destructive/30", className),
33
+ ...props,
34
+ children: [/* @__PURE__ */ jsxs(Collapsible.Trigger, {
35
+ className: "group/tool flex h-9 w-full items-center gap-2 px-3 text-left outline-none hover:bg-muted/60 focus-visible:ring-[3px] focus-visible:ring-ring/20 disabled:cursor-default disabled:hover:bg-transparent",
36
+ children: [
37
+ /* @__PURE__ */ jsx(Wrench, {
38
+ className: "size-3.5 shrink-0 text-muted-foreground",
39
+ "aria-hidden": true
40
+ }),
41
+ /* @__PURE__ */ jsx("span", {
42
+ className: "min-w-0 flex-1 truncate font-mono text-[12.5px]",
43
+ children: name
44
+ }),
45
+ /* @__PURE__ */ jsxs("span", {
46
+ className: "inline-flex items-center gap-1.5 text-xs text-muted-foreground",
47
+ children: [
48
+ /* @__PURE__ */ jsx(StatusDot, {
49
+ status: statusDot[status],
50
+ pulse: status === "running"
51
+ }),
52
+ statusText[status],
53
+ durationMs !== void 0 && status !== "running" && /* @__PURE__ */ jsxs("span", {
54
+ className: "tabular-nums",
55
+ children: [
56
+ "· ",
57
+ (durationMs / 1e3).toFixed(1),
58
+ "s"
59
+ ]
60
+ })
61
+ ]
62
+ }),
63
+ hasDetail && /* @__PURE__ */ jsx(ChevronRight, {
64
+ "aria-hidden": true,
65
+ className: "size-3.5 text-muted-foreground transition-transform group-data-[state=open]/tool:rotate-90"
66
+ })
67
+ ]
68
+ }), /* @__PURE__ */ jsx(Collapsible.Content, {
69
+ className: "overflow-hidden data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down",
70
+ children: /* @__PURE__ */ jsxs("div", {
71
+ className: "grid gap-2 border-t p-3",
72
+ children: [args !== void 0 && /* @__PURE__ */ jsxs("section", {
73
+ className: "grid gap-1",
74
+ children: [/* @__PURE__ */ jsx("h4", {
75
+ className: "text-[11px] font-semibold tracking-[0.06em] text-muted-foreground uppercase",
76
+ children: "Arguments"
77
+ }), /* @__PURE__ */ jsx("pre", {
78
+ className: "overflow-x-auto rounded-sm bg-muted/60 p-2 font-mono text-[12px] leading-5",
79
+ children: json(args)
80
+ })]
81
+ }), error ? /* @__PURE__ */ jsx("p", {
82
+ role: "alert",
83
+ className: "text-xs font-medium text-destructive",
84
+ children: error
85
+ }) : result !== void 0 && /* @__PURE__ */ jsxs("section", {
86
+ className: "grid gap-1",
87
+ children: [/* @__PURE__ */ jsx("h4", {
88
+ className: "text-[11px] font-semibold tracking-[0.06em] text-muted-foreground uppercase",
89
+ children: "Result"
90
+ }), /* @__PURE__ */ jsx("pre", {
91
+ className: "max-h-64 overflow-auto rounded-sm bg-muted/60 p-2 font-mono text-[12px] leading-5",
92
+ children: json(result)
93
+ })]
94
+ })]
95
+ })
96
+ })]
97
+ })
98
+ });
99
+ }
100
+ /** A gate before an agent runs a tool with side effects: the person approves or denies it. */
101
+ function ToolApproval({ name, description, args, state = "pending", onApprove, onDeny, approveLabel = "Approve", denyLabel = "Deny", className, ...props }) {
102
+ return /* @__PURE__ */ jsxs("div", {
103
+ "data-slot": "tool-approval",
104
+ "data-state": state,
105
+ className: cn("grid animate-in gap-3 rounded-md border p-3 text-[13px]", state === "pending" ? "border-warning/40 bg-warning/5" : "bg-surface", className),
106
+ ...props,
107
+ children: [
108
+ /* @__PURE__ */ jsxs("div", {
109
+ className: "flex items-center gap-2",
110
+ children: [
111
+ /* @__PURE__ */ jsx(Wrench, {
112
+ className: "size-3.5 text-muted-foreground",
113
+ "aria-hidden": true
114
+ }),
115
+ /* @__PURE__ */ jsx("span", {
116
+ className: "font-mono text-[12.5px]",
117
+ children: name
118
+ }),
119
+ /* @__PURE__ */ jsx("span", {
120
+ className: "ml-auto text-xs text-muted-foreground",
121
+ children: state === "pending" ? "Needs your approval" : state === "approved" ? "Approved" : "Denied"
122
+ })
123
+ ]
124
+ }),
125
+ /* @__PURE__ */ jsx("p", {
126
+ className: "text-sm",
127
+ children: description
128
+ }),
129
+ args !== void 0 && /* @__PURE__ */ jsx("pre", {
130
+ className: "overflow-x-auto rounded-sm bg-muted/60 p-2 font-mono text-[12px] leading-5",
131
+ children: json(args)
132
+ }),
133
+ state === "pending" && /* @__PURE__ */ jsxs("div", {
134
+ className: "flex justify-end gap-2",
135
+ children: [/* @__PURE__ */ jsx(Button, {
136
+ size: "sm",
137
+ variant: "outline",
138
+ onClick: onDeny,
139
+ children: denyLabel
140
+ }), /* @__PURE__ */ jsx(Button, {
141
+ size: "sm",
142
+ onClick: onApprove,
143
+ children: approveLabel
144
+ })]
145
+ })
146
+ ]
147
+ });
148
+ }
149
+ //#endregion
150
+ export { ToolApproval, ToolCall };
151
+
152
+ //# sourceMappingURL=tool-call.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-call.js","names":["CollapsiblePrimitive"],"sources":["../../src/components/tool-call.tsx"],"sourcesContent":["import ChevronRight from '@burtson-labs/icons/react/chevron-right';\nimport Wrench from '@burtson-labs/icons/react/wrench';\nimport { Collapsible as CollapsiblePrimitive } from 'radix-ui';\nimport * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\nimport { Button } from './button';\nimport { StatusDot } from './status';\n\nexport type ToolCallStatus = 'pending' | 'running' | 'success' | 'error';\n\nconst statusText: Record<ToolCallStatus, string> = {\n pending: 'Queued',\n running: 'Running',\n success: 'Done',\n error: 'Failed',\n};\nconst statusDot = {\n pending: 'neutral',\n running: 'brand',\n success: 'success',\n error: 'danger',\n} as const;\n\nconst json = (v: unknown) => (typeof v === 'string' ? v : JSON.stringify(v, null, 2));\n\nexport interface ToolCallProps extends Omit<React.ComponentProps<'div'>, 'title'> {\n /** The tool's name, e.g. `get_load`. */\n name: string;\n status: ToolCallStatus;\n /** Arguments the agent passed; shown as formatted JSON. */\n args?: unknown;\n /** What the tool returned; shown as formatted JSON. */\n result?: unknown;\n /** Error message when the call failed. */\n error?: string;\n durationMs?: number;\n defaultOpen?: boolean;\n}\n\n/** A tool call an agent made: name, live status, and collapsible arguments and result. */\nfunction ToolCall({\n name,\n status,\n args,\n result,\n error,\n durationMs,\n defaultOpen = false,\n className,\n ...props\n}: ToolCallProps) {\n const hasDetail = args !== undefined || result !== undefined || Boolean(error);\n return (\n <CollapsiblePrimitive.Root defaultOpen={defaultOpen} disabled={!hasDetail}>\n <div\n data-slot=\"tool-call\"\n data-status={status}\n className={cn(\n 'animate-in overflow-hidden rounded-md border bg-surface text-[13px]',\n status === 'error' && 'border-destructive/30',\n className,\n )}\n {...props}\n >\n <CollapsiblePrimitive.Trigger className=\"group/tool flex h-9 w-full items-center gap-2 px-3 text-left outline-none hover:bg-muted/60 focus-visible:ring-[3px] focus-visible:ring-ring/20 disabled:cursor-default disabled:hover:bg-transparent\">\n <Wrench className=\"size-3.5 shrink-0 text-muted-foreground\" aria-hidden />\n <span className=\"min-w-0 flex-1 truncate font-mono text-[12.5px]\">{name}</span>\n <span className=\"inline-flex items-center gap-1.5 text-xs text-muted-foreground\">\n <StatusDot status={statusDot[status]} pulse={status === 'running'} />\n {statusText[status]}\n {durationMs !== undefined && status !== 'running' && (\n <span className=\"tabular-nums\">· {(durationMs / 1000).toFixed(1)}s</span>\n )}\n </span>\n {hasDetail && (\n <ChevronRight\n aria-hidden\n className=\"size-3.5 text-muted-foreground transition-transform group-data-[state=open]/tool:rotate-90\"\n />\n )}\n </CollapsiblePrimitive.Trigger>\n <CollapsiblePrimitive.Content className=\"overflow-hidden data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down\">\n <div className=\"grid gap-2 border-t p-3\">\n {args !== undefined && (\n <section className=\"grid gap-1\">\n <h4 className=\"text-[11px] font-semibold tracking-[0.06em] text-muted-foreground uppercase\">\n Arguments\n </h4>\n <pre className=\"overflow-x-auto rounded-sm bg-muted/60 p-2 font-mono text-[12px] leading-5\">\n {json(args)}\n </pre>\n </section>\n )}\n {error ? (\n <p role=\"alert\" className=\"text-xs font-medium text-destructive\">\n {error}\n </p>\n ) : (\n result !== undefined && (\n <section className=\"grid gap-1\">\n <h4 className=\"text-[11px] font-semibold tracking-[0.06em] text-muted-foreground uppercase\">\n Result\n </h4>\n <pre className=\"max-h-64 overflow-auto rounded-sm bg-muted/60 p-2 font-mono text-[12px] leading-5\">\n {json(result)}\n </pre>\n </section>\n )\n )}\n </div>\n </CollapsiblePrimitive.Content>\n </div>\n </CollapsiblePrimitive.Root>\n );\n}\n\nexport interface ToolApprovalProps extends Omit<React.ComponentProps<'div'>, 'title'> {\n name: string;\n /** What will happen, in plain words, e.g. \"Approve L-1042 and send it to Gravitate\". */\n description: React.ReactNode;\n args?: unknown;\n /** `pending` shows the buttons; the others record the decision. */\n state?: 'pending' | 'approved' | 'denied';\n onApprove?: () => void;\n onDeny?: () => void;\n approveLabel?: string;\n denyLabel?: string;\n}\n\n/** A gate before an agent runs a tool with side effects: the person approves or denies it. */\nfunction ToolApproval({\n name,\n description,\n args,\n state = 'pending',\n onApprove,\n onDeny,\n approveLabel = 'Approve',\n denyLabel = 'Deny',\n className,\n ...props\n}: ToolApprovalProps) {\n return (\n <div\n data-slot=\"tool-approval\"\n data-state={state}\n className={cn(\n 'grid animate-in gap-3 rounded-md border p-3 text-[13px]',\n state === 'pending' ? 'border-warning/40 bg-warning/5' : 'bg-surface',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center gap-2\">\n <Wrench className=\"size-3.5 text-muted-foreground\" aria-hidden />\n <span className=\"font-mono text-[12.5px]\">{name}</span>\n <span className=\"ml-auto text-xs text-muted-foreground\">\n {state === 'pending'\n ? 'Needs your approval'\n : state === 'approved'\n ? 'Approved'\n : 'Denied'}\n </span>\n </div>\n <p className=\"text-sm\">{description}</p>\n {args !== undefined && (\n <pre className=\"overflow-x-auto rounded-sm bg-muted/60 p-2 font-mono text-[12px] leading-5\">\n {json(args)}\n </pre>\n )}\n {state === 'pending' && (\n <div className=\"flex justify-end gap-2\">\n <Button size=\"sm\" variant=\"outline\" onClick={onDeny}>\n {denyLabel}\n </Button>\n <Button size=\"sm\" onClick={onApprove}>\n {approveLabel}\n </Button>\n </div>\n )}\n </div>\n );\n}\n\nexport { ToolApproval, ToolCall };\n"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -13,6 +13,8 @@ export * from './components/checkbox';
13
13
  export * from './components/collapsible';
14
14
  export * from './components/combobox';
15
15
  export * from './components/command';
16
+ export * from './components/composer';
17
+ export * from './components/conversation';
16
18
  export * from './components/dialog';
17
19
  export * from './components/dropdown-menu';
18
20
  export * from './components/empty-state';
@@ -21,12 +23,15 @@ export * from './components/icon-button';
21
23
  export * from './components/input';
22
24
  export * from './components/kbd';
23
25
  export * from './components/label';
26
+ export * from './components/markdown';
27
+ export * from './components/message';
24
28
  export * from './components/navigation-menu';
25
29
  export * from './components/page-header';
26
30
  export * from './components/pagination';
27
31
  export * from './components/popover';
28
32
  export * from './components/progress';
29
33
  export * from './components/radio-group';
34
+ export * from './components/reasoning';
30
35
  export * from './components/scroll-area';
31
36
  export * from './components/select';
32
37
  export * from './components/separator';
@@ -41,5 +46,6 @@ export * from './components/table';
41
46
  export * from './components/tabs';
42
47
  export * from './components/textarea';
43
48
  export * from './components/toast';
49
+ export * from './components/tool-call';
44
50
  export * from './components/toolbar';
45
51
  export * from './components/tooltip';
package/dist/index.js CHANGED
@@ -17,17 +17,22 @@ import { Input, fieldClasses } from "./components/input.js";
17
17
  import { Popover, PopoverAnchor, PopoverContent, PopoverTrigger, surfaceClasses } from "./components/popover.js";
18
18
  import { Spinner } from "./components/spinner.js";
19
19
  import { Combobox } from "./components/combobox.js";
20
+ import { Composer, Suggestions } from "./components/composer.js";
21
+ import { Conversation } from "./components/conversation.js";
20
22
  import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from "./components/dropdown-menu.js";
21
23
  import { EmptyState, EmptyStateActions, EmptyStateDescription, EmptyStateIcon, EmptyStateTitle } from "./components/empty-state.js";
22
24
  import { Field, FieldDescription, FieldError, FieldHeader, FieldHint, FieldLabel } from "./components/field.js";
23
25
  import { IconButton } from "./components/icon-button.js";
24
26
  import { Kbd, KbdGroup } from "./components/kbd.js";
25
27
  import { Label } from "./components/label.js";
28
+ import { CodeBlock, Markdown, parseMarkdown } from "./components/markdown.js";
29
+ import { Message } from "./components/message.js";
26
30
  import { NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, navigationMenuTriggerStyle } from "./components/navigation-menu.js";
27
31
  import { PageHeader, PageHeaderActions, PageHeaderDescription, PageHeaderEyebrow, PageHeaderMain, PageHeaderTitle } from "./components/page-header.js";
28
32
  import { Pagination, paginationRange } from "./components/pagination.js";
29
33
  import { Progress } from "./components/progress.js";
30
34
  import { RadioGroup, RadioGroupItem } from "./components/radio-group.js";
35
+ import { Reasoning, StreamingIndicator } from "./components/reasoning.js";
31
36
  import { ScrollArea, ScrollBar } from "./components/scroll-area.js";
32
37
  import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue } from "./components/select.js";
33
38
  import { Separator } from "./components/separator.js";
@@ -41,6 +46,7 @@ import { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, Tabl
41
46
  import { Tabs, TabsContent, TabsList, TabsTrigger } from "./components/tabs.js";
42
47
  import { Textarea } from "./components/textarea.js";
43
48
  import { Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, toastVariants } from "./components/toast.js";
49
+ import { ToolApproval, ToolCall } from "./components/tool-call.js";
44
50
  import { Toolbar, ToolbarGroup, ToolbarSeparator, ToolbarSpacer } from "./components/toolbar.js";
45
51
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./components/tooltip.js";
46
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppShell, AppShellBody, AppShellContent, AppShellHeader, AppShellMain, AppShellSidebar, Avatar, AvatarFallback, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, Card, CardAction, CardContent, CardDescription, CardEyebrow, CardFooter, CardHeader, CardTitle, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, EmptyStateActions, EmptyStateDescription, EmptyStateIcon, EmptyStateTitle, Field, FieldDescription, FieldError, FieldHeader, FieldHint, FieldLabel, IconButton, Input, Kbd, KbdGroup, Label, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, PageHeader, PageHeaderActions, PageHeaderDescription, PageHeaderEyebrow, PageHeaderMain, PageHeaderTitle, Pagination, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, RadioGroup, RadioGroupItem, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Skeleton, Spinner, StatCard, Status, StatusDot, Steps, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toolbar, ToolbarGroup, ToolbarSeparator, ToolbarSpacer, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, alertVariants, badgeVariants, brand, buttonVariants, cardVariants, cn, dark, fieldClasses, fontMono, fontSans, light, motion, navigationMenuTriggerStyle, paginationRange, radius, shadow, statusDotVariants, surfaceClasses, toastVariants, tokens };
52
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppShell, AppShellBody, AppShellContent, AppShellHeader, AppShellMain, AppShellSidebar, Avatar, AvatarFallback, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, Card, CardAction, CardContent, CardDescription, CardEyebrow, CardFooter, CardHeader, CardTitle, Checkbox, CodeBlock, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Composer, Conversation, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, EmptyStateActions, EmptyStateDescription, EmptyStateIcon, EmptyStateTitle, Field, FieldDescription, FieldError, FieldHeader, FieldHint, FieldLabel, IconButton, Input, Kbd, KbdGroup, Label, Markdown, Message, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, PageHeader, PageHeaderActions, PageHeaderDescription, PageHeaderEyebrow, PageHeaderMain, PageHeaderTitle, Pagination, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, RadioGroup, RadioGroupItem, Reasoning, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Skeleton, Spinner, StatCard, Status, StatusDot, Steps, StreamingIndicator, Suggestions, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, ToolApproval, ToolCall, Toolbar, ToolbarGroup, ToolbarSeparator, ToolbarSpacer, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, alertVariants, badgeVariants, brand, buttonVariants, cardVariants, cn, dark, fieldClasses, fontMono, fontSans, light, motion, navigationMenuTriggerStyle, paginationRange, parseMarkdown, radius, shadow, statusDotVariants, surfaceClasses, toastVariants, tokens };