@epicbagel/saas-kit 1.22.0 → 1.24.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.
- package/dist/chunk-HETZNLKT.cjs +148 -0
- package/dist/{chunk-WE3F6EUM.cjs → chunk-KLBMHQ6U.cjs} +5 -1
- package/dist/{chunk-YFXZWDA5.js → chunk-M5BYOPDK.js} +5 -1
- package/dist/chunk-PL2462GA.js +148 -0
- package/dist/primitives/agent-audio-visualizer-bar.d.cts +2 -2
- package/dist/primitives/agent-audio-visualizer-bar.d.ts +2 -2
- package/dist/primitives/alert.d.cts +1 -1
- package/dist/primitives/alert.d.ts +1 -1
- package/dist/primitives/attachment.d.cts +1 -1
- package/dist/primitives/attachment.d.ts +1 -1
- package/dist/primitives/badge.d.cts +1 -1
- package/dist/primitives/badge.d.ts +1 -1
- package/dist/primitives/bubble.d.cts +1 -1
- package/dist/primitives/bubble.d.ts +1 -1
- package/dist/primitives/button.d.cts +2 -2
- package/dist/primitives/button.d.ts +2 -2
- package/dist/primitives/chat.cjs +7 -5
- package/dist/primitives/chat.js +4 -2
- package/dist/primitives/editable-list.cjs +27 -24
- package/dist/primitives/editable-list.js +27 -24
- package/dist/primitives/item.d.cts +2 -2
- package/dist/primitives/item.d.ts +2 -2
- package/dist/primitives/list.cjs +2 -2
- package/dist/primitives/list.js +1 -1
- package/dist/primitives/section-header.d.cts +1 -1
- package/dist/primitives/section-header.d.ts +1 -1
- package/dist/primitives/toggle-group.d.cts +2 -2
- package/dist/primitives/toggle-group.d.ts +2 -2
- package/dist/primitives/toggle.d.cts +2 -2
- package/dist/primitives/toggle.d.ts +2 -2
- package/dist/primitives/voice-session-controls.cjs +2 -2
- package/dist/primitives/voice-session-controls.d.cts +9 -1
- package/dist/primitives/voice-session-controls.d.ts +9 -1
- package/dist/primitives/voice-session-controls.js +1 -1
- package/dist/primitives/workflow-assistant.cjs +2 -2
- package/dist/primitives/workflow-assistant.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-KF4X37DP.js +0 -140
- package/dist/chunk-YMI3X2YL.cjs +0 -140
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkNKWHDI4Ccjs = require('./chunk-NKWHDI4C.cjs');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _chunkJDEXZGIYcjs = require('./chunk-JDEXZGIY.cjs');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
var _chunkKWLSBTB2cjs = require('./chunk-KWLSBTB2.cjs');
|
|
11
|
+
|
|
12
|
+
// src/primitives/voice-session-controls.tsx
|
|
13
|
+
var _react = require('react');
|
|
14
|
+
var _lucidereact = require('lucide-react');
|
|
15
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
16
|
+
var SILENCE = [];
|
|
17
|
+
var silence = () => SILENCE;
|
|
18
|
+
var noSubscription = () => () => {
|
|
19
|
+
};
|
|
20
|
+
var DEFAULT_LABELS = {
|
|
21
|
+
disconnected: "Voice chat",
|
|
22
|
+
connecting: "Connecting\u2026",
|
|
23
|
+
listening: "Listening\u2026",
|
|
24
|
+
thinking: "Thinking\u2026",
|
|
25
|
+
speaking: "Speaking",
|
|
26
|
+
reconnecting: "Reconnecting\u2026",
|
|
27
|
+
error: "Voice chat unavailable",
|
|
28
|
+
start: "Start voice chat",
|
|
29
|
+
end: "End voice chat",
|
|
30
|
+
mute: "Mute microphone",
|
|
31
|
+
unmute: "Unmute microphone",
|
|
32
|
+
muted: "Microphone muted",
|
|
33
|
+
retry: "Retry voice chat",
|
|
34
|
+
endShort: "End voice",
|
|
35
|
+
muteShort: "Mute",
|
|
36
|
+
unmuteShort: "Unmute"
|
|
37
|
+
};
|
|
38
|
+
function VoiceSessionControls({
|
|
39
|
+
state,
|
|
40
|
+
onStart,
|
|
41
|
+
onEnd,
|
|
42
|
+
muted = false,
|
|
43
|
+
onMutedChange,
|
|
44
|
+
disabled = false,
|
|
45
|
+
error,
|
|
46
|
+
volumeBands,
|
|
47
|
+
audioLevels,
|
|
48
|
+
labels,
|
|
49
|
+
onWarm,
|
|
50
|
+
size = "icon",
|
|
51
|
+
className
|
|
52
|
+
}) {
|
|
53
|
+
const liveBands = _react.useSyncExternalStore.call(void 0, _nullishCoalesce(_optionalChain([audioLevels, 'optionalAccess', _ => _.subscribe]), () => ( noSubscription)), _nullishCoalesce(_optionalChain([audioLevels, 'optionalAccess', _2 => _2.getSnapshot]), () => ( silence)), silence);
|
|
54
|
+
const copy = { ...DEFAULT_LABELS, ...labels };
|
|
55
|
+
const active = state !== "disconnected" && state !== "error";
|
|
56
|
+
const waiting = state === "connecting" || state === "reconnecting";
|
|
57
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
58
|
+
"div",
|
|
59
|
+
{
|
|
60
|
+
"data-slot": "voice-session-controls",
|
|
61
|
+
"data-state": state,
|
|
62
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0, "min-w-0", active ? "@container/voice w-full" : "flex flex-wrap items-center gap-2", className),
|
|
63
|
+
children: [
|
|
64
|
+
active ? (
|
|
65
|
+
// One row at every width: on a narrow strip the actions show only their
|
|
66
|
+
// icons (each keeps its full name), rather than wrapping onto a second row.
|
|
67
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { "data-slot": "voice-session-strip", className: "flex w-full flex-nowrap items-center gap-3 bg-primary/5 p-3 @sm/voice:gap-4 @sm/voice:p-4 @2xl/voice:px-5", children: [
|
|
68
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 items-center gap-3 @2xl/voice:gap-4", children: [
|
|
69
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "aria-hidden": "true", className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
70
|
+
"flex size-10 shrink-0 items-center justify-center rounded-full ring-8 ring-primary/5 @sm/voice:size-12 @md/voice:size-14",
|
|
71
|
+
muted ? "bg-muted text-muted-foreground" : "bg-primary text-primary-foreground"
|
|
72
|
+
), children: muted ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.MicOff, { className: "size-5" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Mic, { className: "size-5" }) }),
|
|
73
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
74
|
+
_chunkNKWHDI4Ccjs.AgentAudioVisualizerBar,
|
|
75
|
+
{
|
|
76
|
+
"aria-hidden": "true",
|
|
77
|
+
size: "sm",
|
|
78
|
+
barCount: 5,
|
|
79
|
+
className: "shrink-0 text-primary [&>div]:w-1",
|
|
80
|
+
state: muted && state === "listening" ? "disconnected" : state === "reconnecting" ? "connecting" : state,
|
|
81
|
+
volumeBands: muted && state === "listening" ? SILENCE : _nullishCoalesce(volumeBands, () => ( liveBands))
|
|
82
|
+
}
|
|
83
|
+
),
|
|
84
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { role: "status", className: "min-w-0 flex-1 truncate text-sm font-medium text-primary", children: muted && state === "listening" ? copy.muted : copy[state] })
|
|
85
|
+
] }),
|
|
86
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "ml-auto flex shrink-0 items-center gap-2", children: [
|
|
87
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
88
|
+
_chunkJDEXZGIYcjs.Button,
|
|
89
|
+
{
|
|
90
|
+
type: "button",
|
|
91
|
+
variant: "outline",
|
|
92
|
+
size: "sm",
|
|
93
|
+
className: "min-h-[44px] min-w-[44px] shrink-0 rounded-xl bg-background px-0 text-foreground @md/voice:px-3",
|
|
94
|
+
"aria-label": muted ? copy.unmute : copy.mute,
|
|
95
|
+
title: muted ? copy.unmute : copy.mute,
|
|
96
|
+
"aria-pressed": muted,
|
|
97
|
+
disabled: waiting,
|
|
98
|
+
onClick: () => onMutedChange(!muted),
|
|
99
|
+
children: [
|
|
100
|
+
muted ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Mic, { "aria-hidden": "true" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.MicOff, { "aria-hidden": "true" }),
|
|
101
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { "data-slot": "voice-session-action-label", className: "hidden @md/voice:inline", children: muted ? copy.unmuteShort : copy.muteShort })
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
),
|
|
105
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
106
|
+
_chunkJDEXZGIYcjs.Button,
|
|
107
|
+
{
|
|
108
|
+
type: "button",
|
|
109
|
+
variant: "outline",
|
|
110
|
+
size: "sm",
|
|
111
|
+
className: "min-h-[44px] min-w-[44px] shrink-0 rounded-xl bg-background px-0 text-foreground @md/voice:px-3",
|
|
112
|
+
"aria-label": copy.end,
|
|
113
|
+
title: copy.end,
|
|
114
|
+
onClick: onEnd,
|
|
115
|
+
children: [
|
|
116
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Square, { "aria-hidden": "true", className: "fill-current" }),
|
|
117
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { "data-slot": "voice-session-action-label", className: "hidden @md/voice:inline", children: copy.endShort })
|
|
118
|
+
]
|
|
119
|
+
}
|
|
120
|
+
)
|
|
121
|
+
] })
|
|
122
|
+
] })
|
|
123
|
+
) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
124
|
+
_chunkJDEXZGIYcjs.Button,
|
|
125
|
+
{
|
|
126
|
+
type: "button",
|
|
127
|
+
size: "icon",
|
|
128
|
+
shape: "circle",
|
|
129
|
+
disabled,
|
|
130
|
+
onClick: onStart,
|
|
131
|
+
onPointerEnter: onWarm,
|
|
132
|
+
onPointerDown: onWarm,
|
|
133
|
+
onFocus: onWarm,
|
|
134
|
+
"aria-label": state === "error" ? copy.retry : copy.start,
|
|
135
|
+
title: state === "error" ? copy.retry : copy.start,
|
|
136
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0, "min-h-[44px] min-w-[44px] shrink-0 rounded-full", size === "hero" && "size-24 [&_svg]:size-7"),
|
|
137
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.AudioLines, { "aria-hidden": "true" })
|
|
138
|
+
}
|
|
139
|
+
),
|
|
140
|
+
state === "error" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { role: "alert", className: "basis-full text-xs text-destructive", children: error || copy.error })
|
|
141
|
+
]
|
|
142
|
+
}
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
exports.VoiceSessionControls = VoiceSessionControls;
|
|
@@ -66,7 +66,11 @@ var ListItem = _react.forwardRef.call(void 0, function ListItem2({ className, la
|
|
|
66
66
|
radius === "md" && "rounded-md",
|
|
67
67
|
accent === "success" && "border-l-2 border-emerald-500 bg-emerald-500/5",
|
|
68
68
|
accent === "destructive" && "border-l-2 border-red-500 bg-red-500/5",
|
|
69
|
-
layout === "bullet" && "group flex
|
|
69
|
+
layout === "bullet" && "group flex items-start gap-3",
|
|
70
|
+
// A row with controls is as tall as they are, and a touch target on a
|
|
71
|
+
// touchscreen; a read-only row is just its text, so a brief's lists don't
|
|
72
|
+
// stand 44px apart on a phone.
|
|
73
|
+
layout === "bullet" && actions && "min-h-8 pointer-coarse:min-h-[max(44px,2.75rem)]",
|
|
70
74
|
className
|
|
71
75
|
), ...props, children: layout === "bullet" ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
72
76
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkW5I4FN7Gcjs.SentimentDot, { sentiment, className: "mt-[5px] shrink-0" }),
|
|
@@ -66,7 +66,11 @@ var ListItem = forwardRef(function ListItem2({ className, layout = "plain", sent
|
|
|
66
66
|
radius === "md" && "rounded-md",
|
|
67
67
|
accent === "success" && "border-l-2 border-emerald-500 bg-emerald-500/5",
|
|
68
68
|
accent === "destructive" && "border-l-2 border-red-500 bg-red-500/5",
|
|
69
|
-
layout === "bullet" && "group flex
|
|
69
|
+
layout === "bullet" && "group flex items-start gap-3",
|
|
70
|
+
// A row with controls is as tall as they are, and a touch target on a
|
|
71
|
+
// touchscreen; a read-only row is just its text, so a brief's lists don't
|
|
72
|
+
// stand 44px apart on a phone.
|
|
73
|
+
layout === "bullet" && actions && "min-h-8 pointer-coarse:min-h-[max(44px,2.75rem)]",
|
|
70
74
|
className
|
|
71
75
|
), ...props, children: layout === "bullet" ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
72
76
|
/* @__PURE__ */ jsx(SentimentDot, { sentiment, className: "mt-[5px] shrink-0" }),
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
AgentAudioVisualizerBar
|
|
4
|
+
} from "./chunk-5OF6D3GH.js";
|
|
5
|
+
import {
|
|
6
|
+
Button
|
|
7
|
+
} from "./chunk-W326GKML.js";
|
|
8
|
+
import {
|
|
9
|
+
cn
|
|
10
|
+
} from "./chunk-G6SRSWXB.js";
|
|
11
|
+
|
|
12
|
+
// src/primitives/voice-session-controls.tsx
|
|
13
|
+
import { useSyncExternalStore } from "react";
|
|
14
|
+
import { Mic, MicOff, Square, AudioLines } from "lucide-react";
|
|
15
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
16
|
+
var SILENCE = [];
|
|
17
|
+
var silence = () => SILENCE;
|
|
18
|
+
var noSubscription = () => () => {
|
|
19
|
+
};
|
|
20
|
+
var DEFAULT_LABELS = {
|
|
21
|
+
disconnected: "Voice chat",
|
|
22
|
+
connecting: "Connecting\u2026",
|
|
23
|
+
listening: "Listening\u2026",
|
|
24
|
+
thinking: "Thinking\u2026",
|
|
25
|
+
speaking: "Speaking",
|
|
26
|
+
reconnecting: "Reconnecting\u2026",
|
|
27
|
+
error: "Voice chat unavailable",
|
|
28
|
+
start: "Start voice chat",
|
|
29
|
+
end: "End voice chat",
|
|
30
|
+
mute: "Mute microphone",
|
|
31
|
+
unmute: "Unmute microphone",
|
|
32
|
+
muted: "Microphone muted",
|
|
33
|
+
retry: "Retry voice chat",
|
|
34
|
+
endShort: "End voice",
|
|
35
|
+
muteShort: "Mute",
|
|
36
|
+
unmuteShort: "Unmute"
|
|
37
|
+
};
|
|
38
|
+
function VoiceSessionControls({
|
|
39
|
+
state,
|
|
40
|
+
onStart,
|
|
41
|
+
onEnd,
|
|
42
|
+
muted = false,
|
|
43
|
+
onMutedChange,
|
|
44
|
+
disabled = false,
|
|
45
|
+
error,
|
|
46
|
+
volumeBands,
|
|
47
|
+
audioLevels,
|
|
48
|
+
labels,
|
|
49
|
+
onWarm,
|
|
50
|
+
size = "icon",
|
|
51
|
+
className
|
|
52
|
+
}) {
|
|
53
|
+
const liveBands = useSyncExternalStore(audioLevels?.subscribe ?? noSubscription, audioLevels?.getSnapshot ?? silence, silence);
|
|
54
|
+
const copy = { ...DEFAULT_LABELS, ...labels };
|
|
55
|
+
const active = state !== "disconnected" && state !== "error";
|
|
56
|
+
const waiting = state === "connecting" || state === "reconnecting";
|
|
57
|
+
return /* @__PURE__ */ jsxs(
|
|
58
|
+
"div",
|
|
59
|
+
{
|
|
60
|
+
"data-slot": "voice-session-controls",
|
|
61
|
+
"data-state": state,
|
|
62
|
+
className: cn("min-w-0", active ? "@container/voice w-full" : "flex flex-wrap items-center gap-2", className),
|
|
63
|
+
children: [
|
|
64
|
+
active ? (
|
|
65
|
+
// One row at every width: on a narrow strip the actions show only their
|
|
66
|
+
// icons (each keeps its full name), rather than wrapping onto a second row.
|
|
67
|
+
/* @__PURE__ */ jsxs("div", { "data-slot": "voice-session-strip", className: "flex w-full flex-nowrap items-center gap-3 bg-primary/5 p-3 @sm/voice:gap-4 @sm/voice:p-4 @2xl/voice:px-5", children: [
|
|
68
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-3 @2xl/voice:gap-4", children: [
|
|
69
|
+
/* @__PURE__ */ jsx("div", { "aria-hidden": "true", className: cn(
|
|
70
|
+
"flex size-10 shrink-0 items-center justify-center rounded-full ring-8 ring-primary/5 @sm/voice:size-12 @md/voice:size-14",
|
|
71
|
+
muted ? "bg-muted text-muted-foreground" : "bg-primary text-primary-foreground"
|
|
72
|
+
), children: muted ? /* @__PURE__ */ jsx(MicOff, { className: "size-5" }) : /* @__PURE__ */ jsx(Mic, { className: "size-5" }) }),
|
|
73
|
+
/* @__PURE__ */ jsx(
|
|
74
|
+
AgentAudioVisualizerBar,
|
|
75
|
+
{
|
|
76
|
+
"aria-hidden": "true",
|
|
77
|
+
size: "sm",
|
|
78
|
+
barCount: 5,
|
|
79
|
+
className: "shrink-0 text-primary [&>div]:w-1",
|
|
80
|
+
state: muted && state === "listening" ? "disconnected" : state === "reconnecting" ? "connecting" : state,
|
|
81
|
+
volumeBands: muted && state === "listening" ? SILENCE : volumeBands ?? liveBands
|
|
82
|
+
}
|
|
83
|
+
),
|
|
84
|
+
/* @__PURE__ */ jsx("span", { role: "status", className: "min-w-0 flex-1 truncate text-sm font-medium text-primary", children: muted && state === "listening" ? copy.muted : copy[state] })
|
|
85
|
+
] }),
|
|
86
|
+
/* @__PURE__ */ jsxs("div", { className: "ml-auto flex shrink-0 items-center gap-2", children: [
|
|
87
|
+
/* @__PURE__ */ jsxs(
|
|
88
|
+
Button,
|
|
89
|
+
{
|
|
90
|
+
type: "button",
|
|
91
|
+
variant: "outline",
|
|
92
|
+
size: "sm",
|
|
93
|
+
className: "min-h-[44px] min-w-[44px] shrink-0 rounded-xl bg-background px-0 text-foreground @md/voice:px-3",
|
|
94
|
+
"aria-label": muted ? copy.unmute : copy.mute,
|
|
95
|
+
title: muted ? copy.unmute : copy.mute,
|
|
96
|
+
"aria-pressed": muted,
|
|
97
|
+
disabled: waiting,
|
|
98
|
+
onClick: () => onMutedChange(!muted),
|
|
99
|
+
children: [
|
|
100
|
+
muted ? /* @__PURE__ */ jsx(Mic, { "aria-hidden": "true" }) : /* @__PURE__ */ jsx(MicOff, { "aria-hidden": "true" }),
|
|
101
|
+
/* @__PURE__ */ jsx("span", { "data-slot": "voice-session-action-label", className: "hidden @md/voice:inline", children: muted ? copy.unmuteShort : copy.muteShort })
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
),
|
|
105
|
+
/* @__PURE__ */ jsxs(
|
|
106
|
+
Button,
|
|
107
|
+
{
|
|
108
|
+
type: "button",
|
|
109
|
+
variant: "outline",
|
|
110
|
+
size: "sm",
|
|
111
|
+
className: "min-h-[44px] min-w-[44px] shrink-0 rounded-xl bg-background px-0 text-foreground @md/voice:px-3",
|
|
112
|
+
"aria-label": copy.end,
|
|
113
|
+
title: copy.end,
|
|
114
|
+
onClick: onEnd,
|
|
115
|
+
children: [
|
|
116
|
+
/* @__PURE__ */ jsx(Square, { "aria-hidden": "true", className: "fill-current" }),
|
|
117
|
+
/* @__PURE__ */ jsx("span", { "data-slot": "voice-session-action-label", className: "hidden @md/voice:inline", children: copy.endShort })
|
|
118
|
+
]
|
|
119
|
+
}
|
|
120
|
+
)
|
|
121
|
+
] })
|
|
122
|
+
] })
|
|
123
|
+
) : /* @__PURE__ */ jsx(
|
|
124
|
+
Button,
|
|
125
|
+
{
|
|
126
|
+
type: "button",
|
|
127
|
+
size: "icon",
|
|
128
|
+
shape: "circle",
|
|
129
|
+
disabled,
|
|
130
|
+
onClick: onStart,
|
|
131
|
+
onPointerEnter: onWarm,
|
|
132
|
+
onPointerDown: onWarm,
|
|
133
|
+
onFocus: onWarm,
|
|
134
|
+
"aria-label": state === "error" ? copy.retry : copy.start,
|
|
135
|
+
title: state === "error" ? copy.retry : copy.start,
|
|
136
|
+
className: cn("min-h-[44px] min-w-[44px] shrink-0 rounded-full", size === "hero" && "size-24 [&_svg]:size-7"),
|
|
137
|
+
children: /* @__PURE__ */ jsx(AudioLines, { "aria-hidden": "true" })
|
|
138
|
+
}
|
|
139
|
+
),
|
|
140
|
+
state === "error" && /* @__PURE__ */ jsx("span", { role: "alert", className: "basis-full text-xs text-destructive", children: error || copy.error })
|
|
141
|
+
]
|
|
142
|
+
}
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export {
|
|
147
|
+
VoiceSessionControls
|
|
148
|
+
};
|
|
@@ -11,10 +11,10 @@ import { AgentVisualizerState } from '../hooks/use-agent-audio-visualizer-bar.cj
|
|
|
11
11
|
*/
|
|
12
12
|
declare function normalizeVolumeBands(bands: number[], count: number): number[];
|
|
13
13
|
declare const AgentAudioVisualizerBarElementVariants: (props?: ({
|
|
14
|
-
size?: "
|
|
14
|
+
size?: "sm" | "md" | "lg" | "xl" | "icon" | null | undefined;
|
|
15
15
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
16
16
|
declare const AgentAudioVisualizerBarVariants: (props?: ({
|
|
17
|
-
size?: "
|
|
17
|
+
size?: "sm" | "md" | "lg" | "xl" | "icon" | null | undefined;
|
|
18
18
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
19
19
|
/**
|
|
20
20
|
* Props for the AgentAudioVisualizerBar component.
|
|
@@ -11,10 +11,10 @@ import { AgentVisualizerState } from '../hooks/use-agent-audio-visualizer-bar.js
|
|
|
11
11
|
*/
|
|
12
12
|
declare function normalizeVolumeBands(bands: number[], count: number): number[];
|
|
13
13
|
declare const AgentAudioVisualizerBarElementVariants: (props?: ({
|
|
14
|
-
size?: "
|
|
14
|
+
size?: "sm" | "md" | "lg" | "xl" | "icon" | null | undefined;
|
|
15
15
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
16
16
|
declare const AgentAudioVisualizerBarVariants: (props?: ({
|
|
17
|
-
size?: "
|
|
17
|
+
size?: "sm" | "md" | "lg" | "xl" | "icon" | null | undefined;
|
|
18
18
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
19
19
|
/**
|
|
20
20
|
* Props for the AgentAudioVisualizerBar component.
|
|
@@ -4,7 +4,7 @@ import * as class_variance_authority_types from 'class-variance-authority/types'
|
|
|
4
4
|
import { VariantProps } from 'class-variance-authority';
|
|
5
5
|
|
|
6
6
|
declare const alertVariants: (props?: ({
|
|
7
|
-
variant?: "
|
|
7
|
+
variant?: "default" | "destructive" | "success" | "warning" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
9
|
interface AlertProps extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof alertVariants> {
|
|
10
10
|
marginBottom?: "none" | "md";
|
|
@@ -4,7 +4,7 @@ import * as class_variance_authority_types from 'class-variance-authority/types'
|
|
|
4
4
|
import { VariantProps } from 'class-variance-authority';
|
|
5
5
|
|
|
6
6
|
declare const alertVariants: (props?: ({
|
|
7
|
-
variant?: "
|
|
7
|
+
variant?: "default" | "destructive" | "success" | "warning" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
9
|
interface AlertProps extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof alertVariants> {
|
|
10
10
|
marginBottom?: "none" | "md";
|
|
@@ -12,7 +12,7 @@ declare function Attachment({ className, state, size, orientation, ...props }: R
|
|
|
12
12
|
state?: "idle" | "uploading" | "processing" | "error" | "done";
|
|
13
13
|
}): react_jsx_runtime.JSX.Element;
|
|
14
14
|
declare const attachmentMediaVariants: (props?: ({
|
|
15
|
-
variant?: "
|
|
15
|
+
variant?: "image" | "icon" | null | undefined;
|
|
16
16
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
17
17
|
declare function AttachmentMedia({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof attachmentMediaVariants>): react_jsx_runtime.JSX.Element;
|
|
18
18
|
declare function AttachmentContent({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
@@ -12,7 +12,7 @@ declare function Attachment({ className, state, size, orientation, ...props }: R
|
|
|
12
12
|
state?: "idle" | "uploading" | "processing" | "error" | "done";
|
|
13
13
|
}): react_jsx_runtime.JSX.Element;
|
|
14
14
|
declare const attachmentMediaVariants: (props?: ({
|
|
15
|
-
variant?: "
|
|
15
|
+
variant?: "image" | "icon" | null | undefined;
|
|
16
16
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
17
17
|
declare function AttachmentMedia({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof attachmentMediaVariants>): react_jsx_runtime.JSX.Element;
|
|
18
18
|
declare function AttachmentContent({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
@@ -4,7 +4,7 @@ import { VariantProps } from 'class-variance-authority';
|
|
|
4
4
|
import { ElementType } from 'react';
|
|
5
5
|
|
|
6
6
|
declare const badgeVariants: (props?: ({
|
|
7
|
-
variant?: "
|
|
7
|
+
variant?: "default" | "secondary" | "destructive" | "outline" | "success" | "warning" | "error" | "info" | "neutral" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
9
|
interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
|
|
10
10
|
weight?: "normal" | "semibold" | "bold";
|
|
@@ -4,7 +4,7 @@ import { VariantProps } from 'class-variance-authority';
|
|
|
4
4
|
import { ElementType } from 'react';
|
|
5
5
|
|
|
6
6
|
declare const badgeVariants: (props?: ({
|
|
7
|
-
variant?: "
|
|
7
|
+
variant?: "default" | "secondary" | "destructive" | "outline" | "success" | "warning" | "error" | "info" | "neutral" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
9
|
interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
|
|
10
10
|
weight?: "normal" | "semibold" | "bold";
|
|
@@ -5,7 +5,7 @@ import { VariantProps } from 'class-variance-authority';
|
|
|
5
5
|
|
|
6
6
|
declare function BubbleGroup({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
7
7
|
declare const bubbleVariants: (props?: ({
|
|
8
|
-
variant?: "
|
|
8
|
+
variant?: "default" | "muted" | "secondary" | "destructive" | "outline" | "ghost" | "tinted" | null | undefined;
|
|
9
9
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
10
10
|
declare function Bubble({ variant, align, className, ...props }: React.ComponentProps<"div"> & VariantProps<typeof bubbleVariants> & {
|
|
11
11
|
align?: "start" | "end";
|
|
@@ -5,7 +5,7 @@ import { VariantProps } from 'class-variance-authority';
|
|
|
5
5
|
|
|
6
6
|
declare function BubbleGroup({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
7
7
|
declare const bubbleVariants: (props?: ({
|
|
8
|
-
variant?: "
|
|
8
|
+
variant?: "default" | "muted" | "secondary" | "destructive" | "outline" | "ghost" | "tinted" | null | undefined;
|
|
9
9
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
10
10
|
declare function Bubble({ variant, align, className, ...props }: React.ComponentProps<"div"> & VariantProps<typeof bubbleVariants> & {
|
|
11
11
|
align?: "start" | "end";
|
|
@@ -5,12 +5,12 @@ import { VariantProps } from 'class-variance-authority';
|
|
|
5
5
|
|
|
6
6
|
declare const buttonVariants: (props?: ({
|
|
7
7
|
variant?: "link" | "default" | "secondary" | "destructive" | "outline" | "outline-muted" | "ghost" | "quiet" | "ghost-destructive" | "link-muted" | "inverted" | "status-error" | "status-warning" | "status-muted" | null | undefined;
|
|
8
|
-
size?: "filter" | "status" | "
|
|
8
|
+
size?: "filter" | "status" | "toolbar" | "sm" | "lg" | "default" | "micro" | "compact" | "hero" | "icon" | "icon-lg" | "icon-sm" | "icon-md" | "icon-xs" | "icon-compact" | "icon-micro" | "bare" | "voice-sm" | "voice" | "suggestion" | "tone" | null | undefined;
|
|
9
9
|
width?: "auto" | "full" | "responsive" | null | undefined;
|
|
10
10
|
align?: "center" | "start" | null | undefined;
|
|
11
11
|
shrink?: boolean | null | undefined;
|
|
12
12
|
shape?: "circle" | "default" | "pill" | null | undefined;
|
|
13
|
-
ring?: "
|
|
13
|
+
ring?: "none" | "surface" | null | undefined;
|
|
14
14
|
grow?: boolean | null | undefined;
|
|
15
15
|
minWidth?: "auto" | "zero" | null | undefined;
|
|
16
16
|
textAlign?: "center" | "start" | null | undefined;
|
|
@@ -5,12 +5,12 @@ import { VariantProps } from 'class-variance-authority';
|
|
|
5
5
|
|
|
6
6
|
declare const buttonVariants: (props?: ({
|
|
7
7
|
variant?: "link" | "default" | "secondary" | "destructive" | "outline" | "outline-muted" | "ghost" | "quiet" | "ghost-destructive" | "link-muted" | "inverted" | "status-error" | "status-warning" | "status-muted" | null | undefined;
|
|
8
|
-
size?: "filter" | "status" | "
|
|
8
|
+
size?: "filter" | "status" | "toolbar" | "sm" | "lg" | "default" | "micro" | "compact" | "hero" | "icon" | "icon-lg" | "icon-sm" | "icon-md" | "icon-xs" | "icon-compact" | "icon-micro" | "bare" | "voice-sm" | "voice" | "suggestion" | "tone" | null | undefined;
|
|
9
9
|
width?: "auto" | "full" | "responsive" | null | undefined;
|
|
10
10
|
align?: "center" | "start" | null | undefined;
|
|
11
11
|
shrink?: boolean | null | undefined;
|
|
12
12
|
shape?: "circle" | "default" | "pill" | null | undefined;
|
|
13
|
-
ring?: "
|
|
13
|
+
ring?: "none" | "surface" | null | undefined;
|
|
14
14
|
grow?: boolean | null | undefined;
|
|
15
15
|
minWidth?: "auto" | "zero" | null | undefined;
|
|
16
16
|
textAlign?: "center" | "start" | null | undefined;
|
package/dist/primitives/chat.cjs
CHANGED
|
@@ -10,7 +10,7 @@ var _chunk2BTDBZYNcjs = require('../chunk-2BTDBZYN.cjs');
|
|
|
10
10
|
var _chunkPH2TV7XIcjs = require('../chunk-PH2TV7XI.cjs');
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
var
|
|
13
|
+
var _chunkHETZNLKTcjs = require('../chunk-HETZNLKT.cjs');
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
|
|
@@ -489,7 +489,7 @@ function ChatInput({
|
|
|
489
489
|
children: header
|
|
490
490
|
}
|
|
491
491
|
),
|
|
492
|
-
liveVoiceActive && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7LDJAXRXcjs.InputGroupAddon, { align: "block-start", className: "w-full cursor-default border-b border-border p-0 [.border-b]:pb-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
492
|
+
liveVoiceActive && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7LDJAXRXcjs.InputGroupAddon, { align: "block-start", className: "w-full cursor-default border-b border-border p-0 [.border-b]:pb-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHETZNLKTcjs.VoiceSessionControls, { ...voiceSession }) }),
|
|
493
493
|
attachments.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
494
494
|
ChatAttachmentList,
|
|
495
495
|
{
|
|
@@ -520,7 +520,9 @@ function ChatInput({
|
|
|
520
520
|
// Grows with the text, then scrolls rather than pushing the thread away.
|
|
521
521
|
"leading-relaxed disabled:opacity-70 placeholder:text-sm",
|
|
522
522
|
!compact && "max-h-48",
|
|
523
|
-
|
|
523
|
+
// Compact: in from the rounded corner, the text starting where the + icon below it does
|
|
524
|
+
// (22px in at any root size: the bar's 0.5rem padding plus half of 44px less the 1rem icon).
|
|
525
|
+
compact ? "pb-1 pl-[22px] pr-4 pt-3.5" : spacious ? "px-6 pb-2 pt-6" : "px-4 py-3.5"
|
|
524
526
|
)
|
|
525
527
|
}
|
|
526
528
|
),
|
|
@@ -579,7 +581,7 @@ function ChatInput({
|
|
|
579
581
|
)
|
|
580
582
|
}
|
|
581
583
|
),
|
|
582
|
-
voiceSession && !liveVoiceActive && !hasText && attachments.length === 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
584
|
+
voiceSession && !liveVoiceActive && !hasText && attachments.length === 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHETZNLKTcjs.VoiceSessionControls, { ...voiceSession, disabled: voiceSession.disabled || isDisabled }) : submitLabel ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
583
585
|
_chunkJDEXZGIYcjs.Button,
|
|
584
586
|
{
|
|
585
587
|
type: "submit",
|
|
@@ -641,7 +643,7 @@ function VoiceHero({
|
|
|
641
643
|
}) {
|
|
642
644
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col items-center gap-5 py-6", children: [
|
|
643
645
|
voiceSession ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
644
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
646
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHETZNLKTcjs.VoiceSessionControls, { ...voiceSession, size: "hero" }),
|
|
645
647
|
voice && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
646
648
|
_chunkPH2TV7XIcjs.VoiceDictationButton,
|
|
647
649
|
{
|
package/dist/primitives/chat.js
CHANGED
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
} from "../chunk-ZGTPNSR7.js";
|
|
11
11
|
import {
|
|
12
12
|
VoiceSessionControls
|
|
13
|
-
} from "../chunk-
|
|
13
|
+
} from "../chunk-PL2462GA.js";
|
|
14
14
|
import {
|
|
15
15
|
Suggestion,
|
|
16
16
|
Suggestions
|
|
@@ -520,7 +520,9 @@ function ChatInput({
|
|
|
520
520
|
// Grows with the text, then scrolls rather than pushing the thread away.
|
|
521
521
|
"leading-relaxed disabled:opacity-70 placeholder:text-sm",
|
|
522
522
|
!compact && "max-h-48",
|
|
523
|
-
|
|
523
|
+
// Compact: in from the rounded corner, the text starting where the + icon below it does
|
|
524
|
+
// (22px in at any root size: the bar's 0.5rem padding plus half of 44px less the 1rem icon).
|
|
525
|
+
compact ? "pb-1 pl-[22px] pr-4 pt-3.5" : spacious ? "px-6 pb-2 pt-6" : "px-4 py-3.5"
|
|
524
526
|
)
|
|
525
527
|
}
|
|
526
528
|
),
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var _chunkKLBMHQ6Ucjs = require('../chunk-KLBMHQ6U.cjs');
|
|
6
6
|
require('../chunk-W5I4FN7G.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
@@ -51,29 +51,32 @@ function EditableList({
|
|
|
51
51
|
};
|
|
52
52
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "section", { className: _chunkKWLSBTB2cjs.cn.call(void 0, "border-t border-border pt-4", className), children: [
|
|
53
53
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk373W6VADcjs.Text, { as: "span", variant: "caption", className: "text-xs font-medium uppercase tracking-wider", children: label }),
|
|
54
|
-
items.length === 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk373W6VADcjs.Text, { variant: "caption", className: "mt-3 italic", children: emptyText }) :
|
|
55
|
-
|
|
56
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
54
|
+
items.length === 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk373W6VADcjs.Text, { variant: "caption", className: "mt-3 italic", children: emptyText }) : (
|
|
55
|
+
// Read-only rows are just text, about 1.8em apart; editable rows keep room for their controls.
|
|
56
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKLBMHQ6Ucjs.List, { spacing: readOnly ? "tight" : "normal", className: "mt-3", children: items.map((item, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKLBMHQ6Ucjs.ListItem, { layout: "bullet", sentiment, actions: !readOnly && (_optionalChain([editing, 'optionalAccess', _5 => _5.index]) === index ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
57
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJDEXZGIYcjs.Button, { type: "button", variant: "ghost", size: "icon-sm", shrink: true, className: "text-emerald-600", "aria-label": `Save ${itemName}`, onClick: commitEdit, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Check, { className: "h-4 w-4" }) }),
|
|
58
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJDEXZGIYcjs.Button, { type: "button", variant: "quiet", size: "icon-sm", shrink: true, marginEnd: "negative-xs", "aria-label": `Cancel editing ${itemName}`, onClick: () => setEditing(null), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.X, { className: "h-4 w-4" }) })
|
|
59
|
+
] }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
60
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJDEXZGIYcjs.Button, { type: "button", variant: "ghost", size: "icon", className: "h-8 w-8 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100 focus:opacity-100", "aria-label": `Edit ${itemName}`, onClick: () => setEditing({ index, value: item }), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Pencil, { className: "h-4 w-4" }) }),
|
|
61
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJDEXZGIYcjs.Button, { type: "button", variant: "ghost", size: "icon", className: "-mr-1 h-8 w-8 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100 focus:opacity-100", "aria-label": `Remove ${itemName}`, onClick: () => onChange(items.filter((_, itemIndex) => itemIndex !== index)), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.X, { className: "h-4 w-4" }) })
|
|
62
|
+
] })), children: !readOnly && _optionalChain([editing, 'optionalAccess', _6 => _6.index]) === index ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
63
|
+
_chunkPQUSJEXLcjs.Input,
|
|
64
|
+
{
|
|
65
|
+
autoFocus: true,
|
|
66
|
+
value: editing.value,
|
|
67
|
+
"aria-label": `Edit ${itemName}`,
|
|
68
|
+
onChange: (event) => setEditing({ index, value: event.target.value }),
|
|
69
|
+
onKeyDown: (event) => {
|
|
70
|
+
if (event.key === "Enter") {
|
|
71
|
+
event.preventDefault();
|
|
72
|
+
commitEdit();
|
|
73
|
+
}
|
|
74
|
+
if (event.key === "Escape") setEditing(null);
|
|
75
|
+
},
|
|
76
|
+
grow: true
|
|
77
|
+
}
|
|
78
|
+
) : item }, `${item}-${index}`)) })
|
|
79
|
+
),
|
|
77
80
|
!readOnly && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mt-3 flex items-center gap-2", children: [
|
|
78
81
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
79
82
|
_chunkPQUSJEXLcjs.Input,
|