@opengeni/react 3.8.0-canary.1 → 4.0.1-canary.1
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/README.md +10 -24
- package/dist/artifacts.js +7 -7
- package/dist/{browser-viewer-SS46LUAC.js → browser-viewer-NTD6UIPR.js} +3 -3
- package/dist/{chunk-VEPNNDNG.js → chunk-24M4YBCL.js} +4 -4
- package/dist/{chunk-ELIYWBZR.js → chunk-BV5A4OTE.js} +4 -4
- package/dist/{chunk-7W6PVVTK.js → chunk-CQG7YUJB.js} +2582 -1037
- package/dist/chunk-CQG7YUJB.js.map +1 -0
- package/dist/{chunk-BXJOQFCD.js → chunk-HUMIRRYI.js} +84 -221
- package/dist/chunk-HUMIRRYI.js.map +1 -0
- package/dist/{chunk-7BWFU6H4.js → chunk-Z7WBDB4E.js} +395 -287
- package/dist/chunk-Z7WBDB4E.js.map +1 -0
- package/dist/components/human-input-form.d.ts +3 -1
- package/dist/components/human-input-surface.d.ts +3 -2
- package/dist/components/markdown-table-layout.d.ts +9 -0
- package/dist/components/session-conversation.d.ts +2 -0
- package/dist/composer.js +2 -3
- package/dist/{computer-viewer-FWEZISW4.js → computer-viewer-7TEZC6Y2.js} +3 -3
- package/dist/hooks/use-codex-accounts.d.ts +11 -1
- package/dist/hooks/use-session-events.d.ts +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +44 -34
- package/dist/index.js.map +1 -1
- package/dist/interaction.js +3 -3
- package/dist/markdown-table-layout-3Z3AWBY7.js +71 -0
- package/dist/markdown-table-layout-3Z3AWBY7.js.map +1 -0
- package/dist/older-history.d.ts +3 -2
- package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-27LKAWZD.js} +2 -2
- package/dist/platform-activity-row-27LKAWZD.js.map +1 -0
- package/dist/realtime.js +3 -3
- package/dist/session-ui.js +6 -9
- package/dist/session.js +1 -1
- package/dist/timeline/types.d.ts +3 -0
- package/package.json +2 -6
- package/src/components/human-input-form.tsx +185 -53
- package/src/components/human-input-surface.tsx +3 -0
- package/src/components/markdown-table-layout.ts +85 -0
- package/src/components/markdown.tsx +20 -2
- package/src/components/message-timeline.tsx +47 -7
- package/src/components/session-commands-panel.tsx +7 -1
- package/src/components/session-conversation.tsx +4 -1
- package/src/hooks/use-codex-accounts.ts +32 -5
- package/src/hooks/use-session-events.ts +16 -277
- package/src/index.ts +0 -1
- package/src/older-history.ts +22 -4
- package/src/timeline/platform-activity-row.tsx +4 -1
- package/src/timeline/projection.ts +99 -9
- package/src/timeline/types.ts +3 -0
- package/dist/chat.d.ts +0 -37
- package/dist/chat.js +0 -315
- package/dist/chat.js.map +0 -1
- package/dist/chunk-7BWFU6H4.js.map +0 -1
- package/dist/chunk-7W6PVVTK.js.map +0 -1
- package/dist/chunk-BXJOQFCD.js.map +0 -1
- package/dist/chunk-HQV2I5HV.js +0 -124
- package/dist/chunk-HQV2I5HV.js.map +0 -1
- package/dist/chunk-YAIPFO5D.js +0 -1416
- package/dist/chunk-YAIPFO5D.js.map +0 -1
- package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
- package/src/chat.tsx +0 -393
- /package/dist/{browser-viewer-SS46LUAC.js.map → browser-viewer-NTD6UIPR.js.map} +0 -0
- /package/dist/{chunk-VEPNNDNG.js.map → chunk-24M4YBCL.js.map} +0 -0
- /package/dist/{chunk-ELIYWBZR.js.map → chunk-BV5A4OTE.js.map} +0 -0
- /package/dist/{computer-viewer-FWEZISW4.js.map → computer-viewer-7TEZC6Y2.js.map} +0 -0
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ComposerResponsiveContext,
|
|
3
|
+
usePortalTokenStyle
|
|
4
|
+
} from "./chunk-VZTQ73XT.js";
|
|
1
5
|
import {
|
|
2
6
|
shouldSteerOnKey,
|
|
3
7
|
shouldSubmitOnKey
|
|
@@ -7,16 +11,6 @@ import {
|
|
|
7
11
|
formatBytes,
|
|
8
12
|
formatRelativeTime
|
|
9
13
|
} from "./chunk-PLYRL5ER.js";
|
|
10
|
-
import {
|
|
11
|
-
Tooltip,
|
|
12
|
-
TooltipContent,
|
|
13
|
-
TooltipProvider,
|
|
14
|
-
TooltipTrigger
|
|
15
|
-
} from "./chunk-HQV2I5HV.js";
|
|
16
|
-
import {
|
|
17
|
-
ComposerResponsiveContext,
|
|
18
|
-
usePortalTokenStyle
|
|
19
|
-
} from "./chunk-VZTQ73XT.js";
|
|
20
14
|
import {
|
|
21
15
|
groupPickerRowsByBillingClass
|
|
22
16
|
} from "./chunk-VRBL3F5E.js";
|
|
@@ -24,25 +18,135 @@ import {
|
|
|
24
18
|
cn
|
|
25
19
|
} from "./chunk-22KP6LR5.js";
|
|
26
20
|
|
|
21
|
+
// src/components/tooltip.tsx
|
|
22
|
+
import { Tooltip as TooltipPrimitive } from "radix-ui";
|
|
23
|
+
import {
|
|
24
|
+
createContext,
|
|
25
|
+
useContext,
|
|
26
|
+
useLayoutEffect,
|
|
27
|
+
useMemo,
|
|
28
|
+
useRef,
|
|
29
|
+
useState
|
|
30
|
+
} from "react";
|
|
31
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
32
|
+
var TooltipSourceContext = createContext(null);
|
|
33
|
+
function TooltipProvider({
|
|
34
|
+
delayDuration = 300,
|
|
35
|
+
...props
|
|
36
|
+
}) {
|
|
37
|
+
return /* @__PURE__ */ jsx(TooltipPrimitive.Provider, { delayDuration, ...props });
|
|
38
|
+
}
|
|
39
|
+
function Tooltip({ children, ...props }) {
|
|
40
|
+
const { onOpenChange, ...rootProps } = props;
|
|
41
|
+
const sourceRef = useRef(null);
|
|
42
|
+
const sourcePublishedRef = useRef(false);
|
|
43
|
+
const [source, setSource] = useState(null);
|
|
44
|
+
const ref = useRef((node) => {
|
|
45
|
+
sourceRef.current = node;
|
|
46
|
+
if (sourcePublishedRef.current) setSource(node);
|
|
47
|
+
}).current;
|
|
48
|
+
useLayoutEffect(() => {
|
|
49
|
+
if (rootProps.open === true || rootProps.defaultOpen === true) {
|
|
50
|
+
sourcePublishedRef.current = true;
|
|
51
|
+
setSource(sourceRef.current);
|
|
52
|
+
}
|
|
53
|
+
}, [rootProps.defaultOpen, rootProps.open]);
|
|
54
|
+
const sourceContext = useMemo(() => ({ source, ref }), [ref, source]);
|
|
55
|
+
return /* @__PURE__ */ jsx(TooltipSourceContext.Provider, { value: sourceContext, children: /* @__PURE__ */ jsx(
|
|
56
|
+
TooltipPrimitive.Root,
|
|
57
|
+
{
|
|
58
|
+
"data-slot": "tooltip",
|
|
59
|
+
onOpenChange: (open) => {
|
|
60
|
+
if (open) {
|
|
61
|
+
sourcePublishedRef.current = true;
|
|
62
|
+
setSource(sourceRef.current);
|
|
63
|
+
}
|
|
64
|
+
onOpenChange?.(open);
|
|
65
|
+
},
|
|
66
|
+
...rootProps,
|
|
67
|
+
children
|
|
68
|
+
}
|
|
69
|
+
) });
|
|
70
|
+
}
|
|
71
|
+
function TooltipTrigger({
|
|
72
|
+
asChild = true,
|
|
73
|
+
...props
|
|
74
|
+
}) {
|
|
75
|
+
const sourceRef = useContext(TooltipSourceContext);
|
|
76
|
+
return /* @__PURE__ */ jsx(
|
|
77
|
+
TooltipPrimitive.Trigger,
|
|
78
|
+
{
|
|
79
|
+
"data-slot": "tooltip-trigger",
|
|
80
|
+
asChild,
|
|
81
|
+
ref: (node) => {
|
|
82
|
+
sourceRef?.ref(node);
|
|
83
|
+
},
|
|
84
|
+
...props
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
var tooltipSurfaceStyle = {
|
|
89
|
+
backgroundColor: "var(--og-color-fg)",
|
|
90
|
+
color: "var(--og-color-bg)"
|
|
91
|
+
};
|
|
92
|
+
function TooltipContent({
|
|
93
|
+
className,
|
|
94
|
+
sideOffset = 6,
|
|
95
|
+
children,
|
|
96
|
+
style,
|
|
97
|
+
...props
|
|
98
|
+
}) {
|
|
99
|
+
const source = useContext(TooltipSourceContext);
|
|
100
|
+
const portalStyle = usePortalTokenStyle(source?.source ?? null);
|
|
101
|
+
return /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
|
|
102
|
+
TooltipPrimitive.Content,
|
|
103
|
+
{
|
|
104
|
+
"data-slot": "tooltip-content",
|
|
105
|
+
sideOffset,
|
|
106
|
+
className: cn(
|
|
107
|
+
"og-root z-50 w-fit max-w-xs origin-[var(--radix-tooltip-content-transform-origin)]",
|
|
108
|
+
"rounded-og-md px-2.5 py-1.5 text-og-xs leading-4 text-balance shadow-og-md",
|
|
109
|
+
"animate-og-enter data-[state=closed]:opacity-0 data-[state=closed]:transition-opacity",
|
|
110
|
+
className
|
|
111
|
+
),
|
|
112
|
+
style: { ...portalStyle, ...tooltipSurfaceStyle, ...style },
|
|
113
|
+
...props,
|
|
114
|
+
children: [
|
|
115
|
+
children,
|
|
116
|
+
/* @__PURE__ */ jsx(
|
|
117
|
+
TooltipPrimitive.Arrow,
|
|
118
|
+
{
|
|
119
|
+
className: "z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]",
|
|
120
|
+
style: {
|
|
121
|
+
backgroundColor: "var(--og-color-fg)",
|
|
122
|
+
fill: "var(--og-color-fg)"
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
)
|
|
126
|
+
]
|
|
127
|
+
}
|
|
128
|
+
) });
|
|
129
|
+
}
|
|
130
|
+
|
|
27
131
|
// src/timeline/screenshot-lightbox.tsx
|
|
28
132
|
import { DownloadIcon, XIcon } from "lucide-react";
|
|
29
133
|
import { AnimatePresence, motion } from "motion/react";
|
|
30
134
|
import {
|
|
31
|
-
createContext,
|
|
135
|
+
createContext as createContext2,
|
|
32
136
|
useCallback,
|
|
33
|
-
useContext,
|
|
137
|
+
useContext as useContext2,
|
|
34
138
|
useEffect,
|
|
35
|
-
useMemo,
|
|
36
|
-
useState
|
|
139
|
+
useMemo as useMemo2,
|
|
140
|
+
useState as useState2
|
|
37
141
|
} from "react";
|
|
38
142
|
import { Dialog } from "radix-ui";
|
|
39
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
40
|
-
var LightboxContext =
|
|
143
|
+
import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
144
|
+
var LightboxContext = createContext2(null);
|
|
41
145
|
function useLightbox() {
|
|
42
|
-
return
|
|
146
|
+
return useContext2(LightboxContext) ?? NOOP;
|
|
43
147
|
}
|
|
44
148
|
function useLightboxOptional() {
|
|
45
|
-
return
|
|
149
|
+
return useContext2(LightboxContext);
|
|
46
150
|
}
|
|
47
151
|
var NOOP = { open: () => {
|
|
48
152
|
} };
|
|
@@ -62,16 +166,16 @@ function createLightboxSourceOwner() {
|
|
|
62
166
|
};
|
|
63
167
|
}
|
|
64
168
|
function LightboxProvider({ children }) {
|
|
65
|
-
const ancestor =
|
|
169
|
+
const ancestor = useContext2(LightboxContext);
|
|
66
170
|
if (ancestor) {
|
|
67
|
-
return /* @__PURE__ */
|
|
171
|
+
return /* @__PURE__ */ jsx2(Fragment, { children });
|
|
68
172
|
}
|
|
69
|
-
return /* @__PURE__ */
|
|
173
|
+
return /* @__PURE__ */ jsx2(LightboxRoot, { children });
|
|
70
174
|
}
|
|
71
175
|
function LightboxRoot({ children }) {
|
|
72
|
-
const [state, setState] =
|
|
73
|
-
const [tokenSource, setTokenSource] =
|
|
74
|
-
const sourceOwner =
|
|
176
|
+
const [state, setState] = useState2(null);
|
|
177
|
+
const [tokenSource, setTokenSource] = useState2(null);
|
|
178
|
+
const sourceOwner = useMemo2(() => createLightboxSourceOwner(), []);
|
|
75
179
|
const portalStyle = usePortalTokenStyle(tokenSource);
|
|
76
180
|
const releaseCurrentSource = useCallback(() => {
|
|
77
181
|
sourceOwner.release();
|
|
@@ -96,11 +200,11 @@ function LightboxRoot({ children }) {
|
|
|
96
200
|
setState(null);
|
|
97
201
|
setTokenSource(null);
|
|
98
202
|
}, [releaseCurrentSource]);
|
|
99
|
-
const controller =
|
|
100
|
-
return /* @__PURE__ */
|
|
203
|
+
const controller = useMemo2(() => ({ open }), [open]);
|
|
204
|
+
return /* @__PURE__ */ jsxs2(LightboxContext.Provider, { value: controller, children: [
|
|
101
205
|
children,
|
|
102
|
-
/* @__PURE__ */
|
|
103
|
-
/* @__PURE__ */
|
|
206
|
+
/* @__PURE__ */ jsx2(Dialog.Root, { open: state !== null, onOpenChange: (next) => !next && close(), children: /* @__PURE__ */ jsx2(AnimatePresence, { children: state !== null ? /* @__PURE__ */ jsxs2(Dialog.Portal, { forceMount: true, children: [
|
|
207
|
+
/* @__PURE__ */ jsx2(Dialog.Overlay, { asChild: true, forceMount: true, children: /* @__PURE__ */ jsx2(
|
|
104
208
|
motion.div,
|
|
105
209
|
{
|
|
106
210
|
initial: { opacity: 0 },
|
|
@@ -111,14 +215,14 @@ function LightboxRoot({ children }) {
|
|
|
111
215
|
style: portalStyle
|
|
112
216
|
}
|
|
113
217
|
) }),
|
|
114
|
-
/* @__PURE__ */
|
|
218
|
+
/* @__PURE__ */ jsx2(
|
|
115
219
|
Dialog.Content,
|
|
116
220
|
{
|
|
117
221
|
asChild: true,
|
|
118
222
|
forceMount: true,
|
|
119
223
|
"aria-label": state.label,
|
|
120
224
|
onOpenAutoFocus: (event) => event.preventDefault(),
|
|
121
|
-
children: /* @__PURE__ */
|
|
225
|
+
children: /* @__PURE__ */ jsxs2(
|
|
122
226
|
motion.div,
|
|
123
227
|
{
|
|
124
228
|
initial: { opacity: 0, scale: 0.98 },
|
|
@@ -133,11 +237,11 @@ function LightboxRoot({ children }) {
|
|
|
133
237
|
className: "og-root fixed inset-0 z-50 flex items-center justify-center p-6 sm:p-12",
|
|
134
238
|
style: portalStyle,
|
|
135
239
|
children: [
|
|
136
|
-
/* @__PURE__ */
|
|
137
|
-
/* @__PURE__ */
|
|
138
|
-
/* @__PURE__ */
|
|
139
|
-
/* @__PURE__ */
|
|
140
|
-
/* @__PURE__ */
|
|
240
|
+
/* @__PURE__ */ jsx2(Dialog.Title, { className: "sr-only", children: state.label }),
|
|
241
|
+
/* @__PURE__ */ jsx2(Dialog.Description, { className: "sr-only", children: state.caption ?? `Expanded ${state.label.toLowerCase()}` }),
|
|
242
|
+
/* @__PURE__ */ jsxs2("figure", { className: "m-0 flex max-h-full max-w-5xl flex-col items-center gap-3", children: [
|
|
243
|
+
/* @__PURE__ */ jsxs2("div", { className: "relative flex min-h-0 w-fit max-w-full", children: [
|
|
244
|
+
/* @__PURE__ */ jsx2(
|
|
141
245
|
"img",
|
|
142
246
|
{
|
|
143
247
|
src: state.src,
|
|
@@ -145,7 +249,7 @@ function LightboxRoot({ children }) {
|
|
|
145
249
|
className: "min-h-0 max-h-[82vh] w-auto max-w-full rounded-og-md border border-white/10 object-contain shadow-og-lg"
|
|
146
250
|
}
|
|
147
251
|
),
|
|
148
|
-
/* @__PURE__ */
|
|
252
|
+
/* @__PURE__ */ jsx2(
|
|
149
253
|
ScreenshotLightboxControls,
|
|
150
254
|
{
|
|
151
255
|
src: state.src,
|
|
@@ -154,7 +258,7 @@ function LightboxRoot({ children }) {
|
|
|
154
258
|
}
|
|
155
259
|
)
|
|
156
260
|
] }),
|
|
157
|
-
state.caption ? /* @__PURE__ */
|
|
261
|
+
state.caption ? /* @__PURE__ */ jsx2("figcaption", { className: "max-w-2xl text-center font-og-mono text-og-xs text-white/55", children: state.caption }) : /* @__PURE__ */ jsx2("figcaption", { className: "font-og-mono text-og-xs uppercase tracking-[0.1em] text-white/35", children: "Esc or click outside to close" })
|
|
158
262
|
] })
|
|
159
263
|
]
|
|
160
264
|
}
|
|
@@ -169,8 +273,8 @@ function ScreenshotLightboxControls({
|
|
|
169
273
|
downloadFilename,
|
|
170
274
|
controlLabels
|
|
171
275
|
}) {
|
|
172
|
-
return /* @__PURE__ */
|
|
173
|
-
downloadFilename ? /* @__PURE__ */
|
|
276
|
+
return /* @__PURE__ */ jsxs2("div", { className: "absolute -right-3 -top-3 flex items-center gap-2", children: [
|
|
277
|
+
downloadFilename ? /* @__PURE__ */ jsx2(
|
|
174
278
|
"a",
|
|
175
279
|
{
|
|
176
280
|
href: src,
|
|
@@ -181,10 +285,10 @@ function ScreenshotLightboxControls({
|
|
|
181
285
|
"transition-colors hover:border-white/30 hover:text-white"
|
|
182
286
|
),
|
|
183
287
|
"aria-label": controlLabels?.download ?? `Download ${downloadFilename}`,
|
|
184
|
-
children: /* @__PURE__ */
|
|
288
|
+
children: /* @__PURE__ */ jsx2(DownloadIcon, { className: "size-4" })
|
|
185
289
|
}
|
|
186
290
|
) : null,
|
|
187
|
-
/* @__PURE__ */
|
|
291
|
+
/* @__PURE__ */ jsx2(
|
|
188
292
|
Dialog.Close,
|
|
189
293
|
{
|
|
190
294
|
className: cn(
|
|
@@ -193,7 +297,7 @@ function ScreenshotLightboxControls({
|
|
|
193
297
|
"transition-colors hover:border-white/30 hover:text-white"
|
|
194
298
|
),
|
|
195
299
|
"aria-label": controlLabels?.close ?? "Close",
|
|
196
|
-
children: /* @__PURE__ */
|
|
300
|
+
children: /* @__PURE__ */ jsx2(XIcon, { className: "size-4" })
|
|
197
301
|
}
|
|
198
302
|
)
|
|
199
303
|
] });
|
|
@@ -391,20 +495,20 @@ function clearErrorMessage(cause) {
|
|
|
391
495
|
}
|
|
392
496
|
|
|
393
497
|
// src/hooks/use-slash-commands.ts
|
|
394
|
-
import { useCallback as useCallback2, useMemo as
|
|
498
|
+
import { useCallback as useCallback2, useMemo as useMemo3, useRef as useRef2, useState as useState3 } from "react";
|
|
395
499
|
function useSlashCommands(options) {
|
|
396
500
|
const { commands, context, handlers, value, setValue } = options;
|
|
397
|
-
const [highlight, setHighlight] =
|
|
398
|
-
const [dismissedValue, setDismissedValue] =
|
|
501
|
+
const [highlight, setHighlight] = useState3(0);
|
|
502
|
+
const [dismissedValue, setDismissedValue] = useState3(null);
|
|
399
503
|
const dismissed = dismissedValue !== null && dismissedValue === value;
|
|
400
|
-
const navigatedRef =
|
|
401
|
-
const navTokenRef =
|
|
504
|
+
const navigatedRef = useRef2(false);
|
|
505
|
+
const navTokenRef = useRef2(value);
|
|
402
506
|
if (navTokenRef.current !== value) {
|
|
403
507
|
navTokenRef.current = value;
|
|
404
508
|
navigatedRef.current = false;
|
|
405
509
|
}
|
|
406
|
-
const parsed =
|
|
407
|
-
const filterCtx =
|
|
510
|
+
const parsed = useMemo3(() => parseCommandLine(value), [value]);
|
|
511
|
+
const filterCtx = useMemo3(
|
|
408
512
|
() => ({
|
|
409
513
|
sessionId: context?.sessionId ?? null,
|
|
410
514
|
status: context?.status ?? null,
|
|
@@ -412,13 +516,13 @@ function useSlashCommands(options) {
|
|
|
412
516
|
}),
|
|
413
517
|
[context?.sessionId, context?.status, context?.permissions]
|
|
414
518
|
);
|
|
415
|
-
const activeCommand =
|
|
519
|
+
const activeCommand = useMemo3(() => {
|
|
416
520
|
if (!parsed || !parsed.hasTrailingSpace) {
|
|
417
521
|
return null;
|
|
418
522
|
}
|
|
419
523
|
return matchCommand(commands, value);
|
|
420
524
|
}, [commands, value, parsed]);
|
|
421
|
-
const items =
|
|
525
|
+
const items = useMemo3(() => {
|
|
422
526
|
if (!parsed) {
|
|
423
527
|
return [];
|
|
424
528
|
}
|
|
@@ -473,7 +577,7 @@ function useSlashCommands(options) {
|
|
|
473
577
|
autocomplete(command);
|
|
474
578
|
}
|
|
475
579
|
}, [items, clampedHighlight, autocomplete]);
|
|
476
|
-
const runningRef =
|
|
580
|
+
const runningRef = useRef2(false);
|
|
477
581
|
const runResolved = useCallback2(
|
|
478
582
|
async (command, executionOptions) => {
|
|
479
583
|
if (!parsed || runningRef.current) {
|
|
@@ -601,7 +705,7 @@ function errorMessage2(cause) {
|
|
|
601
705
|
|
|
602
706
|
// src/components/command-palette.tsx
|
|
603
707
|
import { AnimatePresence as AnimatePresence2, motion as motion2 } from "motion/react";
|
|
604
|
-
import { jsx as
|
|
708
|
+
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
605
709
|
function CommandPalette({
|
|
606
710
|
open,
|
|
607
711
|
items,
|
|
@@ -613,7 +717,7 @@ function CommandPalette({
|
|
|
613
717
|
label = "Slash commands",
|
|
614
718
|
dangerLabel = "danger"
|
|
615
719
|
}) {
|
|
616
|
-
return /* @__PURE__ */
|
|
720
|
+
return /* @__PURE__ */ jsx3(AnimatePresence2, { children: open ? /* @__PURE__ */ jsxs3(
|
|
617
721
|
motion2.div,
|
|
618
722
|
{
|
|
619
723
|
initial: { opacity: 0, y: 6, scale: 0.99 },
|
|
@@ -625,7 +729,7 @@ function CommandPalette({
|
|
|
625
729
|
"rounded-og-lg border border-og-border bg-og-surface-2 shadow-og-sm"
|
|
626
730
|
),
|
|
627
731
|
children: [
|
|
628
|
-
/* @__PURE__ */
|
|
732
|
+
/* @__PURE__ */ jsx3(
|
|
629
733
|
"ul",
|
|
630
734
|
{
|
|
631
735
|
id: listboxId,
|
|
@@ -635,7 +739,7 @@ function CommandPalette({
|
|
|
635
739
|
children: items.map((command, index) => {
|
|
636
740
|
const selected = index === highlight;
|
|
637
741
|
const hint = argHint(command.args);
|
|
638
|
-
return /* @__PURE__ */
|
|
742
|
+
return /* @__PURE__ */ jsxs3(
|
|
639
743
|
"li",
|
|
640
744
|
{
|
|
641
745
|
id: `${listboxId}-option-${index}`,
|
|
@@ -652,8 +756,8 @@ function CommandPalette({
|
|
|
652
756
|
selected ? "bg-og-accent/15 text-og-fg" : "text-og-fg-muted hover:bg-og-surface-3"
|
|
653
757
|
),
|
|
654
758
|
children: [
|
|
655
|
-
/* @__PURE__ */
|
|
656
|
-
/* @__PURE__ */
|
|
759
|
+
/* @__PURE__ */ jsxs3("span", { className: "flex min-w-0 items-baseline gap-1.5", children: [
|
|
760
|
+
/* @__PURE__ */ jsxs3(
|
|
657
761
|
"span",
|
|
658
762
|
{
|
|
659
763
|
className: cn(
|
|
@@ -666,11 +770,11 @@ function CommandPalette({
|
|
|
666
770
|
]
|
|
667
771
|
}
|
|
668
772
|
),
|
|
669
|
-
hint ? /* @__PURE__ */
|
|
773
|
+
hint ? /* @__PURE__ */ jsx3("span", { className: "truncate font-mono text-[11px] text-og-fg-subtle", children: hint }) : null
|
|
670
774
|
] }),
|
|
671
|
-
/* @__PURE__ */
|
|
672
|
-
command.danger ? /* @__PURE__ */
|
|
673
|
-
/* @__PURE__ */
|
|
775
|
+
/* @__PURE__ */ jsxs3("span", { className: "ml-auto flex items-center gap-1.5", children: [
|
|
776
|
+
command.danger ? /* @__PURE__ */ jsx3("span", { className: "rounded-og-xs bg-og-status-failed/15 px-1 text-[10px] uppercase tracking-wide text-og-status-failed", children: dangerLabel }) : null,
|
|
777
|
+
/* @__PURE__ */ jsx3("span", { className: "og-command-description truncate text-[12px] text-og-fg-subtle max-sm:hidden", children: command.description })
|
|
674
778
|
] })
|
|
675
779
|
]
|
|
676
780
|
},
|
|
@@ -679,7 +783,7 @@ function CommandPalette({
|
|
|
679
783
|
})
|
|
680
784
|
}
|
|
681
785
|
),
|
|
682
|
-
argHintText ? /* @__PURE__ */
|
|
786
|
+
argHintText ? /* @__PURE__ */ jsx3("div", { className: "border-t border-og-border px-3 py-1.5 font-mono text-[11px] text-og-fg-subtle", children: argHintText }) : null
|
|
683
787
|
]
|
|
684
788
|
}
|
|
685
789
|
) : null });
|
|
@@ -687,8 +791,8 @@ function CommandPalette({
|
|
|
687
791
|
|
|
688
792
|
// src/components/model-picker.tsx
|
|
689
793
|
import { ChevronDownIcon } from "lucide-react";
|
|
690
|
-
import { useId, useMemo as
|
|
691
|
-
import { jsx as
|
|
794
|
+
import { useId, useMemo as useMemo4 } from "react";
|
|
795
|
+
import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
692
796
|
var EMPTY_CLIENT_MODELS = [];
|
|
693
797
|
function isCodexClientModel(model) {
|
|
694
798
|
return model.id.startsWith("codex/") || model.source === "codex";
|
|
@@ -733,22 +837,22 @@ function ModelPicker({
|
|
|
733
837
|
codexOnly = false
|
|
734
838
|
}) {
|
|
735
839
|
const selectId = useId();
|
|
736
|
-
const effectiveRows =
|
|
840
|
+
const effectiveRows = useMemo4(
|
|
737
841
|
() => rows && rows.length > 0 ? applyCodexOnlyRows(rows, codexOnly) : [],
|
|
738
842
|
[rows, codexOnly]
|
|
739
843
|
);
|
|
740
|
-
const billingGroups =
|
|
844
|
+
const billingGroups = useMemo4(
|
|
741
845
|
() => effectiveRows.length > 0 ? groupPickerRowsByBillingClass(effectiveRows) : [],
|
|
742
846
|
[effectiveRows]
|
|
743
847
|
);
|
|
744
|
-
const providerGroupList =
|
|
848
|
+
const providerGroupList = useMemo4(() => providerGroups(models, codexOnly), [models, codexOnly]);
|
|
745
849
|
const useBillingGroups = Boolean(effectiveRows.length);
|
|
746
850
|
if (models.length === 0 && effectiveRows.length === 0) {
|
|
747
851
|
return null;
|
|
748
852
|
}
|
|
749
|
-
return /* @__PURE__ */
|
|
750
|
-
/* @__PURE__ */
|
|
751
|
-
/* @__PURE__ */
|
|
853
|
+
return /* @__PURE__ */ jsxs4("span", { className: cn("relative inline-flex items-center", className), children: [
|
|
854
|
+
/* @__PURE__ */ jsx4("label", { htmlFor: selectId, className: "sr-only", children: label }),
|
|
855
|
+
/* @__PURE__ */ jsx4(
|
|
752
856
|
"select",
|
|
753
857
|
{
|
|
754
858
|
id: selectId,
|
|
@@ -763,10 +867,10 @@ function ModelPicker({
|
|
|
763
867
|
"focus:outline-hidden focus-visible:outline-hidden",
|
|
764
868
|
"disabled:cursor-not-allowed disabled:opacity-50"
|
|
765
869
|
),
|
|
766
|
-
children: useBillingGroups ? billingGroups.map((group) => /* @__PURE__ */
|
|
870
|
+
children: useBillingGroups ? billingGroups.map((group) => /* @__PURE__ */ jsx4("optgroup", { label: group.label, children: group.rows.map((row) => /* @__PURE__ */ jsx4("option", { value: row.id, disabled: !row.selectable, children: row.unavailableReason ? `${row.label} (${row.unavailableReason})` : row.label }, row.id)) }, group.billingClass)) : providerGroupList.map((group) => /* @__PURE__ */ jsx4("optgroup", { label: group.label, children: group.models.map((model) => /* @__PURE__ */ jsx4("option", { value: model.id, disabled: model.optionDisabled, children: model.label }, model.id)) }, group.label))
|
|
767
871
|
}
|
|
768
872
|
),
|
|
769
|
-
/* @__PURE__ */
|
|
873
|
+
/* @__PURE__ */ jsx4(
|
|
770
874
|
ChevronDownIcon,
|
|
771
875
|
{
|
|
772
876
|
"aria-hidden": true,
|
|
@@ -792,18 +896,18 @@ import {
|
|
|
792
896
|
import { AnimatePresence as AnimatePresence3, motion as motion3 } from "motion/react";
|
|
793
897
|
import {
|
|
794
898
|
cloneElement,
|
|
795
|
-
createContext as
|
|
899
|
+
createContext as createContext3,
|
|
796
900
|
forwardRef,
|
|
797
901
|
useCallback as useCallback3,
|
|
798
|
-
useContext as
|
|
902
|
+
useContext as useContext3,
|
|
799
903
|
useEffect as useEffect2,
|
|
800
904
|
useId as useId2,
|
|
801
|
-
useLayoutEffect,
|
|
802
|
-
useMemo as
|
|
803
|
-
useRef as
|
|
804
|
-
useState as
|
|
905
|
+
useLayoutEffect as useLayoutEffect2,
|
|
906
|
+
useMemo as useMemo5,
|
|
907
|
+
useRef as useRef3,
|
|
908
|
+
useState as useState4
|
|
805
909
|
} from "react";
|
|
806
|
-
import { Fragment as Fragment2, jsx as
|
|
910
|
+
import { Fragment as Fragment2, jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
807
911
|
function ComposerTip({
|
|
808
912
|
tip,
|
|
809
913
|
children
|
|
@@ -952,28 +1056,28 @@ function useChatComposerController({
|
|
|
952
1056
|
onPaste,
|
|
953
1057
|
messages: messageOverrides
|
|
954
1058
|
}) {
|
|
955
|
-
const messages =
|
|
1059
|
+
const messages = useMemo5(
|
|
956
1060
|
() => ({ ...defaultChatComposerMessages, ...messageOverrides }),
|
|
957
1061
|
[messageOverrides]
|
|
958
1062
|
);
|
|
959
1063
|
const id = useId2();
|
|
960
|
-
const rootRef =
|
|
961
|
-
const textareaRef =
|
|
962
|
-
const pauseButtonRef =
|
|
963
|
-
const fileInputRef =
|
|
1064
|
+
const rootRef = useRef3(null);
|
|
1065
|
+
const textareaRef = useRef3(null);
|
|
1066
|
+
const pauseButtonRef = useRef3(null);
|
|
1067
|
+
const fileInputRef = useRef3(null);
|
|
964
1068
|
const listboxId = useId2();
|
|
965
1069
|
const paused = effectiveControl?.state === "paused";
|
|
966
|
-
const [controlDetailsOpen, setControlDetailsOpen] =
|
|
967
|
-
const [paletteMounted, setPaletteMounted] =
|
|
968
|
-
const [submitting, setSubmitting] =
|
|
969
|
-
const submittingRef =
|
|
970
|
-
const controlOperationRef =
|
|
1070
|
+
const [controlDetailsOpen, setControlDetailsOpen] = useState4(false);
|
|
1071
|
+
const [paletteMounted, setPaletteMounted] = useState4(false);
|
|
1072
|
+
const [submitting, setSubmitting] = useState4(false);
|
|
1073
|
+
const submittingRef = useRef3(false);
|
|
1074
|
+
const controlOperationRef = useRef3(false);
|
|
971
1075
|
const deliveryValue = delivery.value;
|
|
972
1076
|
const setDeliveryValue = delivery.setValue;
|
|
973
|
-
const mountedRef =
|
|
974
|
-
const deliveredValueRef =
|
|
975
|
-
const liveValueRef =
|
|
976
|
-
const [renderedValue, setRenderedValue] =
|
|
1077
|
+
const mountedRef = useRef3(true);
|
|
1078
|
+
const deliveredValueRef = useRef3(deliveryValue);
|
|
1079
|
+
const liveValueRef = useRef3(deliveryValue);
|
|
1080
|
+
const [renderedValue, setRenderedValue] = useState4(deliveryValue);
|
|
977
1081
|
const deliveryChanged = deliveryValue !== deliveredValueRef.current;
|
|
978
1082
|
if (deliveryChanged) {
|
|
979
1083
|
deliveredValueRef.current = deliveryValue;
|
|
@@ -988,7 +1092,7 @@ function useChatComposerController({
|
|
|
988
1092
|
[setDeliveryValue]
|
|
989
1093
|
);
|
|
990
1094
|
const visibleValue = deliveryChanged ? deliveryValue : renderedValue;
|
|
991
|
-
|
|
1095
|
+
useLayoutEffect2(() => {
|
|
992
1096
|
if (renderedValue !== liveValueRef.current) {
|
|
993
1097
|
setRenderedValue(liveValueRef.current);
|
|
994
1098
|
}
|
|
@@ -1019,7 +1123,7 @@ function useChatComposerController({
|
|
|
1019
1123
|
}, [id, paused]);
|
|
1020
1124
|
const blockedByAttachment = attachments?.hasUnresolved === true;
|
|
1021
1125
|
const hasReadyAttachment = (attachments?.readyResources.length ?? 0) > 0;
|
|
1022
|
-
const [dragging, setDragging] =
|
|
1126
|
+
const [dragging, setDragging] = useState4(false);
|
|
1023
1127
|
const dragCarriesFiles = (event) => event.dataTransfer !== null && [...event.dataTransfer.types].includes("Files");
|
|
1024
1128
|
const handleDragOver = useCallback3(
|
|
1025
1129
|
(event) => {
|
|
@@ -1046,10 +1150,10 @@ function useChatComposerController({
|
|
|
1046
1150
|
},
|
|
1047
1151
|
[attachments]
|
|
1048
1152
|
);
|
|
1049
|
-
const [notice, setNotice] =
|
|
1050
|
-
const [helpOpen, setHelpOpen] =
|
|
1051
|
-
const [confirmState, setConfirmState] =
|
|
1052
|
-
const pendingConfirm =
|
|
1153
|
+
const [notice, setNotice] = useState4(null);
|
|
1154
|
+
const [helpOpen, setHelpOpen] = useState4(false);
|
|
1155
|
+
const [confirmState, setConfirmState] = useState4(null);
|
|
1156
|
+
const pendingConfirm = useRef3(null);
|
|
1053
1157
|
const settleConfirmation = useCallback3((confirmed) => {
|
|
1054
1158
|
const resolve = pendingConfirm.current;
|
|
1055
1159
|
pendingConfirm.current = null;
|
|
@@ -1063,7 +1167,7 @@ function useChatComposerController({
|
|
|
1063
1167
|
},
|
|
1064
1168
|
[]
|
|
1065
1169
|
);
|
|
1066
|
-
const resizeInputRafRef =
|
|
1170
|
+
const resizeInputRafRef = useRef3(null);
|
|
1067
1171
|
const resizeInput = useCallback3(() => {
|
|
1068
1172
|
if (resizeInputRafRef.current !== null) {
|
|
1069
1173
|
return;
|
|
@@ -1087,7 +1191,7 @@ function useChatComposerController({
|
|
|
1087
1191
|
},
|
|
1088
1192
|
[]
|
|
1089
1193
|
);
|
|
1090
|
-
const handlers =
|
|
1194
|
+
const handlers = useMemo5(
|
|
1091
1195
|
() => ({
|
|
1092
1196
|
notice: (next) => {
|
|
1093
1197
|
setNotice(next);
|
|
@@ -1180,7 +1284,7 @@ function useChatComposerController({
|
|
|
1180
1284
|
},
|
|
1181
1285
|
[attachments]
|
|
1182
1286
|
);
|
|
1183
|
-
const helpCommands =
|
|
1287
|
+
const helpCommands = useMemo5(
|
|
1184
1288
|
() => commands.filter((command) => {
|
|
1185
1289
|
if (command.permission && commandContext) {
|
|
1186
1290
|
const permissions = commandContext.permissions;
|
|
@@ -1297,9 +1401,9 @@ function useChatComposerController({
|
|
|
1297
1401
|
value: visibleValue
|
|
1298
1402
|
};
|
|
1299
1403
|
}
|
|
1300
|
-
var ComposerContext =
|
|
1404
|
+
var ComposerContext = createContext3(null);
|
|
1301
1405
|
function useComposerController() {
|
|
1302
|
-
const controller =
|
|
1406
|
+
const controller = useContext3(ComposerContext);
|
|
1303
1407
|
if (!controller) throw new Error("useChatComposer must be used inside <Composer.Root>");
|
|
1304
1408
|
return controller;
|
|
1305
1409
|
}
|
|
@@ -1310,12 +1414,12 @@ function isRecord(value) {
|
|
|
1310
1414
|
return typeof value === "object" && value !== null;
|
|
1311
1415
|
}
|
|
1312
1416
|
var Root = forwardRef(function ComposerRoot({ controller, children, className, style, responsiveBasis = "viewport", ...props }, forwardedRef) {
|
|
1313
|
-
const responsiveRootRef =
|
|
1314
|
-
const responsiveContext =
|
|
1417
|
+
const responsiveRootRef = useRef3(null);
|
|
1418
|
+
const responsiveContext = useMemo5(
|
|
1315
1419
|
() => ({ responsiveBasis, rootRef: responsiveRootRef }),
|
|
1316
1420
|
[responsiveBasis]
|
|
1317
1421
|
);
|
|
1318
|
-
return /* @__PURE__ */
|
|
1422
|
+
return /* @__PURE__ */ jsx5(ComposerContext.Provider, { value: controller, children: /* @__PURE__ */ jsx5(ComposerResponsiveContext.Provider, { value: responsiveContext, children: /* @__PURE__ */ jsx5(TooltipProvider, { delayDuration: 300, children: /* @__PURE__ */ jsxs5(
|
|
1319
1423
|
"div",
|
|
1320
1424
|
{
|
|
1321
1425
|
...props,
|
|
@@ -1326,13 +1430,13 @@ var Root = forwardRef(function ComposerRoot({ controller, children, className, s
|
|
|
1326
1430
|
style: { paddingBottom: "env(safe-area-inset-bottom)", ...style },
|
|
1327
1431
|
children: [
|
|
1328
1432
|
children,
|
|
1329
|
-
/* @__PURE__ */
|
|
1433
|
+
/* @__PURE__ */ jsx5(ComposerAnnouncements, {})
|
|
1330
1434
|
]
|
|
1331
1435
|
}
|
|
1332
1436
|
) }) }) });
|
|
1333
1437
|
});
|
|
1334
1438
|
var Frame = forwardRef(function ComposerFrame({ className, ...props }, ref) {
|
|
1335
|
-
return /* @__PURE__ */
|
|
1439
|
+
return /* @__PURE__ */ jsx5("div", { ...props, ref, className: cn("relative", className) });
|
|
1336
1440
|
});
|
|
1337
1441
|
function CommandPalette2({ className }) {
|
|
1338
1442
|
const controller = useComposerController();
|
|
@@ -1342,7 +1446,7 @@ function CommandPalette2({ className }) {
|
|
|
1342
1446
|
return () => setPaletteMounted(false);
|
|
1343
1447
|
}, [setPaletteMounted]);
|
|
1344
1448
|
if (!controller.paletteEnabled) return null;
|
|
1345
|
-
return /* @__PURE__ */
|
|
1449
|
+
return /* @__PURE__ */ jsx5("div", { className, children: /* @__PURE__ */ jsx5(
|
|
1346
1450
|
CommandPalette,
|
|
1347
1451
|
{
|
|
1348
1452
|
open: controller.palette.open && controller.confirmState === null,
|
|
@@ -1362,7 +1466,7 @@ function CommandPalette2({ className }) {
|
|
|
1362
1466
|
}
|
|
1363
1467
|
var Surface = forwardRef(function ComposerSurface({ className, children, ...props }, ref) {
|
|
1364
1468
|
const controller = useComposerController();
|
|
1365
|
-
return /* @__PURE__ */
|
|
1469
|
+
return /* @__PURE__ */ jsxs5(
|
|
1366
1470
|
"div",
|
|
1367
1471
|
{
|
|
1368
1472
|
...props,
|
|
@@ -1378,7 +1482,7 @@ var Surface = forwardRef(function ComposerSurface({ className, children, ...prop
|
|
|
1378
1482
|
className
|
|
1379
1483
|
),
|
|
1380
1484
|
children: [
|
|
1381
|
-
controller.dragging ? /* @__PURE__ */
|
|
1485
|
+
controller.dragging ? /* @__PURE__ */ jsx5(
|
|
1382
1486
|
"div",
|
|
1383
1487
|
{
|
|
1384
1488
|
"aria-hidden": true,
|
|
@@ -1386,8 +1490,8 @@ var Surface = forwardRef(function ComposerSurface({ className, children, ...prop
|
|
|
1386
1490
|
"pointer-events-none absolute inset-0 z-10 flex items-center justify-center",
|
|
1387
1491
|
"rounded-og-lg bg-og-surface-1/85 text-og-menu font-medium text-og-accent backdrop-blur-[1px]"
|
|
1388
1492
|
),
|
|
1389
|
-
children: /* @__PURE__ */
|
|
1390
|
-
/* @__PURE__ */
|
|
1493
|
+
children: /* @__PURE__ */ jsxs5("span", { className: "inline-flex items-center gap-2", children: [
|
|
1494
|
+
/* @__PURE__ */ jsx5(PaperclipIcon, { className: "size-4" }),
|
|
1391
1495
|
controller.messages.dropFiles
|
|
1392
1496
|
] })
|
|
1393
1497
|
}
|
|
@@ -1400,7 +1504,7 @@ var Surface = forwardRef(function ComposerSurface({ className, children, ...prop
|
|
|
1400
1504
|
function PausedState() {
|
|
1401
1505
|
const controller = useComposerController();
|
|
1402
1506
|
if (!controller.paused || !controller.effectiveControl || !controller.hasControl) return null;
|
|
1403
|
-
return /* @__PURE__ */
|
|
1507
|
+
return /* @__PURE__ */ jsx5(
|
|
1404
1508
|
WorkstreamPausedStrip,
|
|
1405
1509
|
{
|
|
1406
1510
|
control: controller.effectiveControl,
|
|
@@ -1420,7 +1524,7 @@ function PausedState() {
|
|
|
1420
1524
|
function RestoredResources() {
|
|
1421
1525
|
const controller = useComposerController();
|
|
1422
1526
|
if (controller.restoredResources.length === 0 || !controller.removeRestoredResource) return null;
|
|
1423
|
-
return /* @__PURE__ */
|
|
1527
|
+
return /* @__PURE__ */ jsx5(
|
|
1424
1528
|
RestoredResourceChips,
|
|
1425
1529
|
{
|
|
1426
1530
|
resources: controller.restoredResources,
|
|
@@ -1432,7 +1536,7 @@ function RestoredResources() {
|
|
|
1432
1536
|
function Attachments() {
|
|
1433
1537
|
const controller = useComposerController();
|
|
1434
1538
|
if (!controller.attachments || controller.attachments.attachments.length === 0) return null;
|
|
1435
|
-
return /* @__PURE__ */
|
|
1539
|
+
return /* @__PURE__ */ jsx5(
|
|
1436
1540
|
AttachmentChips,
|
|
1437
1541
|
{
|
|
1438
1542
|
attachments: controller.attachments.attachments,
|
|
@@ -1446,7 +1550,7 @@ function Attachments() {
|
|
|
1446
1550
|
}
|
|
1447
1551
|
var Input = forwardRef(function ComposerInput({ rows = 1, placeholder, className, "aria-label": ariaLabel, autoFocus = false, ...props }, forwardedRef) {
|
|
1448
1552
|
const controller = useComposerController();
|
|
1449
|
-
const autoFocusedRef =
|
|
1553
|
+
const autoFocusedRef = useRef3(false);
|
|
1450
1554
|
const paletteOpen = controller.paletteEnabled && controller.paletteMounted && controller.palette.open;
|
|
1451
1555
|
useEffect2(() => {
|
|
1452
1556
|
if (!autoFocus || controller.disabled || autoFocusedRef.current) return;
|
|
@@ -1458,7 +1562,7 @@ var Input = forwardRef(function ComposerInput({ rows = 1, placeholder, className
|
|
|
1458
1562
|
});
|
|
1459
1563
|
return () => window.cancelAnimationFrame(frame);
|
|
1460
1564
|
}, [autoFocus, controller.disabled, controller.textareaRef]);
|
|
1461
|
-
return /* @__PURE__ */
|
|
1565
|
+
return /* @__PURE__ */ jsx5(
|
|
1462
1566
|
"textarea",
|
|
1463
1567
|
{
|
|
1464
1568
|
...props,
|
|
@@ -1489,7 +1593,7 @@ function Confirmation() {
|
|
|
1489
1593
|
const controller = useComposerController();
|
|
1490
1594
|
const command = controller.confirmState?.command;
|
|
1491
1595
|
if (!command || !controller.confirmState) return null;
|
|
1492
|
-
return /* @__PURE__ */
|
|
1596
|
+
return /* @__PURE__ */ jsx5(
|
|
1493
1597
|
ConfirmBar,
|
|
1494
1598
|
{
|
|
1495
1599
|
command,
|
|
@@ -1501,7 +1605,7 @@ function Confirmation() {
|
|
|
1501
1605
|
);
|
|
1502
1606
|
}
|
|
1503
1607
|
var Footer = forwardRef(function ComposerFooter({ className, ...props }, ref) {
|
|
1504
|
-
return /* @__PURE__ */
|
|
1608
|
+
return /* @__PURE__ */ jsx5(
|
|
1505
1609
|
"div",
|
|
1506
1610
|
{
|
|
1507
1611
|
...props,
|
|
@@ -1517,7 +1621,7 @@ var Footer = forwardRef(function ComposerFooter({ className, ...props }, ref) {
|
|
|
1517
1621
|
});
|
|
1518
1622
|
var Controls = forwardRef(
|
|
1519
1623
|
function ComposerControls({ className, ...props }, ref) {
|
|
1520
|
-
return /* @__PURE__ */
|
|
1624
|
+
return /* @__PURE__ */ jsx5(
|
|
1521
1625
|
"span",
|
|
1522
1626
|
{
|
|
1523
1627
|
...props,
|
|
@@ -1533,7 +1637,7 @@ var Controls = forwardRef(
|
|
|
1533
1637
|
);
|
|
1534
1638
|
var Hint = forwardRef(function ComposerHint({ className, children, ...props }, ref) {
|
|
1535
1639
|
const controller = useComposerController();
|
|
1536
|
-
return /* @__PURE__ */
|
|
1640
|
+
return /* @__PURE__ */ jsx5(
|
|
1537
1641
|
"span",
|
|
1538
1642
|
{
|
|
1539
1643
|
...props,
|
|
@@ -1547,7 +1651,7 @@ var Hint = forwardRef(function ComposerHint({ className, children, ...props }, r
|
|
|
1547
1651
|
);
|
|
1548
1652
|
});
|
|
1549
1653
|
var Actions = forwardRef(function ComposerActions({ className, ...props }, ref) {
|
|
1550
|
-
return /* @__PURE__ */
|
|
1654
|
+
return /* @__PURE__ */ jsx5(
|
|
1551
1655
|
"span",
|
|
1552
1656
|
{
|
|
1553
1657
|
...props,
|
|
@@ -1565,8 +1669,8 @@ var AttachButton = forwardRef(
|
|
|
1565
1669
|
const controller = useComposerController();
|
|
1566
1670
|
if (!controller.attachments) return null;
|
|
1567
1671
|
const tip = title ?? controller.messages.attachFiles;
|
|
1568
|
-
return /* @__PURE__ */
|
|
1569
|
-
/* @__PURE__ */
|
|
1672
|
+
return /* @__PURE__ */ jsxs5(Fragment2, { children: [
|
|
1673
|
+
/* @__PURE__ */ jsx5(
|
|
1570
1674
|
"input",
|
|
1571
1675
|
{
|
|
1572
1676
|
ref: controller.fileInputRef,
|
|
@@ -1578,7 +1682,7 @@ var AttachButton = forwardRef(
|
|
|
1578
1682
|
onChange: controller.handleFileChange
|
|
1579
1683
|
}
|
|
1580
1684
|
),
|
|
1581
|
-
/* @__PURE__ */
|
|
1685
|
+
/* @__PURE__ */ jsx5(ComposerTip, { tip, children: /* @__PURE__ */ jsx5(
|
|
1582
1686
|
"button",
|
|
1583
1687
|
{
|
|
1584
1688
|
...props,
|
|
@@ -1593,7 +1697,7 @@ var AttachButton = forwardRef(
|
|
|
1593
1697
|
"disabled:cursor-not-allowed disabled:opacity-50 pointer-coarse:size-11",
|
|
1594
1698
|
className
|
|
1595
1699
|
),
|
|
1596
|
-
children: children ?? /* @__PURE__ */
|
|
1700
|
+
children: children ?? /* @__PURE__ */ jsx5(PaperclipIcon, { className: "size-4" })
|
|
1597
1701
|
}
|
|
1598
1702
|
) })
|
|
1599
1703
|
] });
|
|
@@ -1609,7 +1713,7 @@ function ModelPicker2({
|
|
|
1609
1713
|
codexOnly
|
|
1610
1714
|
}) {
|
|
1611
1715
|
const controller = useComposerController();
|
|
1612
|
-
return /* @__PURE__ */
|
|
1716
|
+
return /* @__PURE__ */ jsx5(
|
|
1613
1717
|
ModelPicker,
|
|
1614
1718
|
{
|
|
1615
1719
|
models,
|
|
@@ -1629,7 +1733,7 @@ var PauseButton = forwardRef(
|
|
|
1629
1733
|
if (!controller.effectiveControl || controller.paused || !controller.hasControl) return null;
|
|
1630
1734
|
const busy = controller.pausing || controller.resuming;
|
|
1631
1735
|
const tip = title ?? controller.messages.pauseTitle;
|
|
1632
|
-
return /* @__PURE__ */
|
|
1736
|
+
return /* @__PURE__ */ jsx5(ComposerTip, { tip, children: /* @__PURE__ */ jsx5(
|
|
1633
1737
|
"button",
|
|
1634
1738
|
{
|
|
1635
1739
|
...props,
|
|
@@ -1645,7 +1749,7 @@ var PauseButton = forwardRef(
|
|
|
1645
1749
|
"disabled:opacity-50",
|
|
1646
1750
|
className
|
|
1647
1751
|
),
|
|
1648
|
-
children: children ?? (busy ? /* @__PURE__ */
|
|
1752
|
+
children: children ?? (busy ? /* @__PURE__ */ jsx5(LoaderCircleIcon, { className: "size-3.5 animate-og-spin" }) : /* @__PURE__ */ jsx5(PauseIcon, { className: "size-3.5 fill-current" }))
|
|
1649
1753
|
}
|
|
1650
1754
|
) });
|
|
1651
1755
|
}
|
|
@@ -1654,7 +1758,7 @@ var SendButton = forwardRef(
|
|
|
1654
1758
|
function ComposerSendButton({ className, "aria-label": ariaLabel, title, children, ...props }, ref) {
|
|
1655
1759
|
const controller = useComposerController();
|
|
1656
1760
|
const tip = title ?? (controller.submitBlocker === "annotations" ? controller.messages.annotationNotesRequired : controller.paused ? controller.messages.sendAndResumeTitle : controller.messages.sendTitle);
|
|
1657
|
-
return /* @__PURE__ */
|
|
1761
|
+
return /* @__PURE__ */ jsx5(ComposerTip, { tip, children: /* @__PURE__ */ jsx5(
|
|
1658
1762
|
"button",
|
|
1659
1763
|
{
|
|
1660
1764
|
...props,
|
|
@@ -1672,14 +1776,14 @@ var SendButton = forwardRef(
|
|
|
1672
1776
|
"disabled:cursor-not-allowed disabled:bg-og-surface-3 disabled:text-og-fg-subtle disabled:shadow-none",
|
|
1673
1777
|
className
|
|
1674
1778
|
),
|
|
1675
|
-
children: children ?? (controller.sending ? /* @__PURE__ */
|
|
1779
|
+
children: children ?? (controller.sending ? /* @__PURE__ */ jsx5(LoaderCircleIcon, { className: "size-4 animate-og-spin" }) : /* @__PURE__ */ jsx5(ArrowUpIcon, { className: "size-4" }))
|
|
1676
1780
|
}
|
|
1677
1781
|
) });
|
|
1678
1782
|
}
|
|
1679
1783
|
);
|
|
1680
1784
|
function Help() {
|
|
1681
1785
|
const controller = useComposerController();
|
|
1682
|
-
return /* @__PURE__ */
|
|
1786
|
+
return /* @__PURE__ */ jsx5(AnimatePresence3, { children: controller.helpOpen ? /* @__PURE__ */ jsx5(
|
|
1683
1787
|
HelpPanel,
|
|
1684
1788
|
{
|
|
1685
1789
|
commands: controller.helpCommands,
|
|
@@ -1690,8 +1794,8 @@ function Help() {
|
|
|
1690
1794
|
}
|
|
1691
1795
|
function Status() {
|
|
1692
1796
|
const controller = useComposerController();
|
|
1693
|
-
return /* @__PURE__ */
|
|
1694
|
-
/* @__PURE__ */
|
|
1797
|
+
return /* @__PURE__ */ jsxs5(Fragment2, { children: [
|
|
1798
|
+
/* @__PURE__ */ jsx5(AnimatePresence3, { children: controller.activeNotice ? /* @__PURE__ */ jsx5(
|
|
1695
1799
|
motion3.p,
|
|
1696
1800
|
{
|
|
1697
1801
|
initial: { opacity: 0, height: 0 },
|
|
@@ -1704,9 +1808,9 @@ function Status() {
|
|
|
1704
1808
|
children: controller.activeNotice.message
|
|
1705
1809
|
}
|
|
1706
1810
|
) : null }),
|
|
1707
|
-
controller.draftConflict ? /* @__PURE__ */
|
|
1708
|
-
/* @__PURE__ */
|
|
1709
|
-
/* @__PURE__ */
|
|
1811
|
+
controller.draftConflict ? /* @__PURE__ */ jsxs5("div", { className: "mt-1.5 flex flex-wrap items-center gap-2 px-1 text-og-xs text-og-status-failed", children: [
|
|
1812
|
+
/* @__PURE__ */ jsx5("span", { className: "min-w-0 flex-1", children: controller.messages.draftConflict }),
|
|
1813
|
+
/* @__PURE__ */ jsx5(
|
|
1710
1814
|
"button",
|
|
1711
1815
|
{
|
|
1712
1816
|
type: "button",
|
|
@@ -1715,7 +1819,7 @@ function Status() {
|
|
|
1715
1819
|
children: controller.messages.useOtherDraft
|
|
1716
1820
|
}
|
|
1717
1821
|
),
|
|
1718
|
-
/* @__PURE__ */
|
|
1822
|
+
/* @__PURE__ */ jsx5(
|
|
1719
1823
|
"button",
|
|
1720
1824
|
{
|
|
1721
1825
|
type: "button",
|
|
@@ -1729,9 +1833,9 @@ function Status() {
|
|
|
1729
1833
|
}
|
|
1730
1834
|
function ComposerAnnouncements() {
|
|
1731
1835
|
const controller = useComposerController();
|
|
1732
|
-
return /* @__PURE__ */
|
|
1733
|
-
controller.activeNotice ? /* @__PURE__ */
|
|
1734
|
-
controller.draftConflict ? /* @__PURE__ */
|
|
1836
|
+
return /* @__PURE__ */ jsxs5("div", { className: "sr-only", children: [
|
|
1837
|
+
controller.activeNotice ? /* @__PURE__ */ jsx5("p", { role: controller.activeNotice.tone === "error" ? "alert" : "status", children: controller.activeNotice.message }) : null,
|
|
1838
|
+
controller.draftConflict ? /* @__PURE__ */ jsx5("p", { role: "alert", children: controller.messages.draftConflict }) : null
|
|
1735
1839
|
] });
|
|
1736
1840
|
}
|
|
1737
1841
|
function mergeRefs(...refs) {
|
|
@@ -1761,10 +1865,10 @@ function WorkstreamPausedStrip({
|
|
|
1761
1865
|
const broaderOptions = control.resumeOptions.filter(
|
|
1762
1866
|
(option) => option !== primary && option.scope !== "selected" && (option.scope !== "workspace" || canControlWorkspace)
|
|
1763
1867
|
);
|
|
1764
|
-
return /* @__PURE__ */
|
|
1765
|
-
/* @__PURE__ */
|
|
1766
|
-
/* @__PURE__ */
|
|
1767
|
-
/* @__PURE__ */
|
|
1868
|
+
return /* @__PURE__ */ jsxs5("div", { className: "border-b border-og-status-waiting/25 bg-og-status-waiting/[0.07]", children: [
|
|
1869
|
+
/* @__PURE__ */ jsxs5("div", { className: "flex min-w-0 items-center gap-2 px-3 py-2", children: [
|
|
1870
|
+
/* @__PURE__ */ jsx5(PauseIcon, { className: "size-3.5 shrink-0 text-og-status-waiting" }),
|
|
1871
|
+
/* @__PURE__ */ jsxs5(
|
|
1768
1872
|
"button",
|
|
1769
1873
|
{
|
|
1770
1874
|
type: "button",
|
|
@@ -1772,12 +1876,12 @@ function WorkstreamPausedStrip({
|
|
|
1772
1876
|
onClick: () => onOpenChange(!open),
|
|
1773
1877
|
"aria-expanded": open,
|
|
1774
1878
|
children: [
|
|
1775
|
-
/* @__PURE__ */
|
|
1776
|
-
/* @__PURE__ */
|
|
1879
|
+
/* @__PURE__ */ jsx5("span", { className: "block truncate text-og-xs font-medium text-og-fg", children: cause }),
|
|
1880
|
+
/* @__PURE__ */ jsx5("span", { className: "block truncate text-[11px] text-og-fg-muted", children: queuedAheadCount > 0 ? messages.queuedAhead(queuedAheadCount) : sending ? messages.resumingAndSending : messages.nextMessageResumes })
|
|
1777
1881
|
]
|
|
1778
1882
|
}
|
|
1779
1883
|
),
|
|
1780
|
-
/* @__PURE__ */
|
|
1884
|
+
/* @__PURE__ */ jsxs5(
|
|
1781
1885
|
"button",
|
|
1782
1886
|
{
|
|
1783
1887
|
type: "button",
|
|
@@ -1786,47 +1890,47 @@ function WorkstreamPausedStrip({
|
|
|
1786
1890
|
disabled: busy,
|
|
1787
1891
|
onClick: onResume,
|
|
1788
1892
|
children: [
|
|
1789
|
-
busy ? /* @__PURE__ */
|
|
1790
|
-
/* @__PURE__ */
|
|
1791
|
-
/* @__PURE__ */
|
|
1893
|
+
busy ? /* @__PURE__ */ jsx5(LoaderCircleIcon, { className: "size-3.5 animate-og-spin" }) : /* @__PURE__ */ jsx5(PlayIcon, { className: "size-3.5 fill-current" }),
|
|
1894
|
+
/* @__PURE__ */ jsx5("span", { className: "og-composer-resume-label-long hidden min-[400px]:inline", children: messages.resumeThisWorkstream }),
|
|
1895
|
+
/* @__PURE__ */ jsx5("span", { className: "og-composer-resume-label-short min-[400px]:hidden", children: messages.resumeShort })
|
|
1792
1896
|
]
|
|
1793
1897
|
}
|
|
1794
1898
|
),
|
|
1795
|
-
/* @__PURE__ */
|
|
1899
|
+
/* @__PURE__ */ jsx5(
|
|
1796
1900
|
"button",
|
|
1797
1901
|
{
|
|
1798
1902
|
type: "button",
|
|
1799
1903
|
className: "inline-flex size-8 shrink-0 items-center justify-center rounded-og-md text-og-fg-muted hover:bg-og-surface-2 pointer-coarse:size-11",
|
|
1800
1904
|
onClick: () => onOpenChange(!open),
|
|
1801
1905
|
"aria-label": open ? messages.hidePauseDetails : messages.showPauseDetails,
|
|
1802
|
-
children: /* @__PURE__ */
|
|
1906
|
+
children: /* @__PURE__ */ jsx5(ChevronDownIcon2, { className: cn("size-3.5 transition-transform", open && "rotate-180") })
|
|
1803
1907
|
}
|
|
1804
1908
|
)
|
|
1805
1909
|
] }),
|
|
1806
|
-
open ? /* @__PURE__ */
|
|
1807
|
-
/* @__PURE__ */
|
|
1910
|
+
open ? /* @__PURE__ */ jsxs5("div", { className: "border-t border-og-status-waiting/20 px-3 pb-3 pt-2", children: [
|
|
1911
|
+
/* @__PURE__ */ jsx5("ul", { className: "grid gap-2", "aria-label": messages.pauseReasonsLabel, children: control.blockers.map((entry, index) => /* @__PURE__ */ jsxs5(
|
|
1808
1912
|
"li",
|
|
1809
1913
|
{
|
|
1810
1914
|
className: "text-og-xs",
|
|
1811
1915
|
children: [
|
|
1812
|
-
/* @__PURE__ */
|
|
1813
|
-
blockerHref(entry, controlLinks) ? /* @__PURE__ */
|
|
1916
|
+
/* @__PURE__ */ jsx5("span", { className: "font-medium text-og-fg", children: index === 0 ? messages.pausedByLabel : messages.alsoPausedByLabel }),
|
|
1917
|
+
blockerHref(entry, controlLinks) ? /* @__PURE__ */ jsx5(
|
|
1814
1918
|
"a",
|
|
1815
1919
|
{
|
|
1816
1920
|
href: blockerHref(entry, controlLinks),
|
|
1817
1921
|
className: "font-medium text-og-fg underline decoration-og-border-strong underline-offset-2 hover:text-og-accent focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-og-ring/40",
|
|
1818
1922
|
children: entry.displayName
|
|
1819
1923
|
}
|
|
1820
|
-
) : /* @__PURE__ */
|
|
1821
|
-
entry.reason ? /* @__PURE__ */
|
|
1924
|
+
) : /* @__PURE__ */ jsx5("span", { className: "font-medium text-og-fg", children: entry.displayName }),
|
|
1925
|
+
entry.reason ? /* @__PURE__ */ jsxs5("span", { className: "text-og-fg-muted", children: [
|
|
1822
1926
|
" \xB7 ",
|
|
1823
1927
|
entry.reason
|
|
1824
1928
|
] }) : null,
|
|
1825
|
-
entry.actor ? /* @__PURE__ */
|
|
1929
|
+
entry.actor ? /* @__PURE__ */ jsxs5("span", { className: "text-og-fg-subtle", children: [
|
|
1826
1930
|
" \xB7 ",
|
|
1827
1931
|
entry.actor
|
|
1828
1932
|
] }) : null,
|
|
1829
|
-
entry.changedAt ? /* @__PURE__ */
|
|
1933
|
+
entry.changedAt ? /* @__PURE__ */ jsxs5("span", { className: "text-og-fg-subtle", children: [
|
|
1830
1934
|
" ",
|
|
1831
1935
|
"\xB7 ",
|
|
1832
1936
|
messages.formatRelativeTime(entry.changedAt)
|
|
@@ -1835,11 +1939,11 @@ function WorkstreamPausedStrip({
|
|
|
1835
1939
|
},
|
|
1836
1940
|
`${entry.kind}-${entry.sessionId ?? "workspace"}-${entry.revision}`
|
|
1837
1941
|
)) }),
|
|
1838
|
-
broaderOptions.length > 0 ? /* @__PURE__ */
|
|
1942
|
+
broaderOptions.length > 0 ? /* @__PURE__ */ jsx5("div", { className: "mt-2 flex flex-wrap gap-1.5", children: broaderOptions.map((option) => /* @__PURE__ */ jsx5(
|
|
1839
1943
|
ComposerTip,
|
|
1840
1944
|
{
|
|
1841
1945
|
tip: option.impactCopy,
|
|
1842
|
-
children: /* @__PURE__ */
|
|
1946
|
+
children: /* @__PURE__ */ jsxs5(
|
|
1843
1947
|
"button",
|
|
1844
1948
|
{
|
|
1845
1949
|
type: "button",
|
|
@@ -1847,8 +1951,8 @@ function WorkstreamPausedStrip({
|
|
|
1847
1951
|
onClick: () => onResumeOption(option),
|
|
1848
1952
|
className: "rounded-og-md border border-og-border bg-og-surface-1 px-2 py-1 text-og-xs text-og-fg-muted hover:bg-og-surface-2 hover:text-og-fg pointer-coarse:min-h-10",
|
|
1849
1953
|
children: [
|
|
1850
|
-
/* @__PURE__ */
|
|
1851
|
-
/* @__PURE__ */
|
|
1954
|
+
/* @__PURE__ */ jsx5("span", { className: "block font-medium", children: option.scope === "workspace" ? messages.resumeWorkspace : messages.resumeFromSession }),
|
|
1955
|
+
/* @__PURE__ */ jsx5("span", { className: "block text-[10px] text-og-fg-subtle", children: option.selectedStateAfter === "active" ? messages.sessionCanRun : messages.stillPausedBy(
|
|
1852
1956
|
option.remainingPrimaryBlocker?.displayName ?? messages.narrowerPause
|
|
1853
1957
|
) })
|
|
1854
1958
|
]
|
|
@@ -1869,26 +1973,26 @@ function RestoredResourceChips({
|
|
|
1869
1973
|
messages,
|
|
1870
1974
|
onRemove
|
|
1871
1975
|
}) {
|
|
1872
|
-
return /* @__PURE__ */
|
|
1976
|
+
return /* @__PURE__ */ jsx5(
|
|
1873
1977
|
"div",
|
|
1874
1978
|
{
|
|
1875
1979
|
className: "flex flex-wrap gap-1.5 border-b border-og-border px-3 py-2",
|
|
1876
1980
|
"aria-label": messages.restoredResourcesLabel,
|
|
1877
|
-
children: resources.map((resource, index) => /* @__PURE__ */
|
|
1981
|
+
children: resources.map((resource, index) => /* @__PURE__ */ jsxs5(
|
|
1878
1982
|
"span",
|
|
1879
1983
|
{
|
|
1880
1984
|
className: "inline-flex min-w-0 max-w-full items-center gap-1.5 rounded-og-md border border-og-border bg-og-surface-2 px-2 py-1 text-og-xs text-og-fg-muted",
|
|
1881
1985
|
children: [
|
|
1882
|
-
/* @__PURE__ */
|
|
1883
|
-
/* @__PURE__ */
|
|
1884
|
-
/* @__PURE__ */
|
|
1986
|
+
/* @__PURE__ */ jsx5(FileIcon, { className: "size-3 shrink-0" }),
|
|
1987
|
+
/* @__PURE__ */ jsx5("span", { className: "truncate", children: resource.kind === "file" ? messages.restoredFile(resource.fileId) : resource.uri }),
|
|
1988
|
+
/* @__PURE__ */ jsx5(
|
|
1885
1989
|
"button",
|
|
1886
1990
|
{
|
|
1887
1991
|
type: "button",
|
|
1888
1992
|
className: "shrink-0 hover:text-og-fg",
|
|
1889
1993
|
onClick: () => onRemove(index),
|
|
1890
1994
|
"aria-label": messages.removeRestoredResource(index),
|
|
1891
|
-
children: /* @__PURE__ */
|
|
1995
|
+
children: /* @__PURE__ */ jsx5(XIcon2, { className: "size-3" })
|
|
1892
1996
|
}
|
|
1893
1997
|
)
|
|
1894
1998
|
]
|
|
@@ -1905,14 +2009,14 @@ function ConfirmBar({
|
|
|
1905
2009
|
onConfirm,
|
|
1906
2010
|
returnFocusRef
|
|
1907
2011
|
}) {
|
|
1908
|
-
const confirmRef =
|
|
2012
|
+
const confirmRef = useRef3(null);
|
|
1909
2013
|
const descriptionId = useId2();
|
|
1910
2014
|
useEffect2(() => {
|
|
1911
2015
|
const returnTo = returnFocusRef?.current ?? null;
|
|
1912
2016
|
confirmRef.current?.focus();
|
|
1913
2017
|
return () => returnTo?.focus();
|
|
1914
2018
|
}, [returnFocusRef]);
|
|
1915
|
-
return /* @__PURE__ */
|
|
2019
|
+
return /* @__PURE__ */ jsxs5(
|
|
1916
2020
|
"div",
|
|
1917
2021
|
{
|
|
1918
2022
|
role: "alertdialog",
|
|
@@ -1928,9 +2032,9 @@ function ConfirmBar({
|
|
|
1928
2032
|
},
|
|
1929
2033
|
className: "flex items-end justify-between gap-2 px-2.5 pb-2.5 pt-1",
|
|
1930
2034
|
children: [
|
|
1931
|
-
/* @__PURE__ */
|
|
1932
|
-
/* @__PURE__ */
|
|
1933
|
-
/* @__PURE__ */
|
|
2035
|
+
/* @__PURE__ */ jsx5("span", { id: descriptionId, className: "min-w-0 flex-1 px-1.5 text-og-sm text-og-status-failed", children: messages.confirmDescription(command) }),
|
|
2036
|
+
/* @__PURE__ */ jsxs5("span", { className: "flex shrink-0 items-center gap-1.5", children: [
|
|
2037
|
+
/* @__PURE__ */ jsx5(
|
|
1934
2038
|
"button",
|
|
1935
2039
|
{
|
|
1936
2040
|
type: "button",
|
|
@@ -1939,7 +2043,7 @@ function ConfirmBar({
|
|
|
1939
2043
|
children: messages.cancel
|
|
1940
2044
|
}
|
|
1941
2045
|
),
|
|
1942
|
-
/* @__PURE__ */
|
|
2046
|
+
/* @__PURE__ */ jsx5(
|
|
1943
2047
|
"button",
|
|
1944
2048
|
{
|
|
1945
2049
|
ref: confirmRef,
|
|
@@ -1963,9 +2067,9 @@ function AttachmentChips({
|
|
|
1963
2067
|
onLoadPreview
|
|
1964
2068
|
}) {
|
|
1965
2069
|
const lightbox = useLightboxOptional();
|
|
1966
|
-
const previewRequest =
|
|
1967
|
-
const [previewLoadingId, setPreviewLoadingId] =
|
|
1968
|
-
const [previewErrorId, setPreviewErrorId] =
|
|
2070
|
+
const previewRequest = useRef3(null);
|
|
2071
|
+
const [previewLoadingId, setPreviewLoadingId] = useState4(null);
|
|
2072
|
+
const [previewErrorId, setPreviewErrorId] = useState4(null);
|
|
1969
2073
|
useEffect2(() => () => previewRequest.current?.abort(), [onLoadPreview]);
|
|
1970
2074
|
async function openPreview(attachment, source, canLoadPreview) {
|
|
1971
2075
|
previewRequest.current?.abort();
|
|
@@ -2006,7 +2110,7 @@ function AttachmentChips({
|
|
|
2006
2110
|
releaseSource
|
|
2007
2111
|
);
|
|
2008
2112
|
}
|
|
2009
|
-
return /* @__PURE__ */
|
|
2113
|
+
return /* @__PURE__ */ jsx5("div", { className: "flex flex-wrap gap-2 px-3 py-2", children: attachments.map((attachment) => {
|
|
2010
2114
|
const failed = attachment.status === "failed";
|
|
2011
2115
|
const secureContextRequired = attachment.errorCode === "secure_context_required";
|
|
2012
2116
|
const previewFailed = previewErrorId === attachment.id;
|
|
@@ -2015,7 +2119,7 @@ function AttachmentChips({
|
|
|
2015
2119
|
lightbox && onLoadPreview && attachment.status === "ready" && attachment.file && attachment.contentType.startsWith("image/")
|
|
2016
2120
|
);
|
|
2017
2121
|
const statusText = previewFailed ? messages.previewUnavailable ?? "Preview unavailable" : attachment.status === "uploading" ? messages.uploading : failed ? attachment.error || messages.uploadFailed : messages.formatBytes(attachment.sizeBytes);
|
|
2018
|
-
return /* @__PURE__ */
|
|
2122
|
+
return /* @__PURE__ */ jsxs5(
|
|
2019
2123
|
"div",
|
|
2020
2124
|
{
|
|
2021
2125
|
className: cn(
|
|
@@ -2026,7 +2130,7 @@ function AttachmentChips({
|
|
|
2026
2130
|
) : "max-w-[240px] border-og-border bg-og-surface-2"
|
|
2027
2131
|
),
|
|
2028
2132
|
children: [
|
|
2029
|
-
lightbox && (attachment.previewUrl || canLoadPreview) ? /* @__PURE__ */
|
|
2133
|
+
lightbox && (attachment.previewUrl || canLoadPreview) ? /* @__PURE__ */ jsx5(
|
|
2030
2134
|
"button",
|
|
2031
2135
|
{
|
|
2032
2136
|
type: "button",
|
|
@@ -2038,46 +2142,46 @@ function AttachmentChips({
|
|
|
2038
2142
|
"aria-busy": previewLoading || void 0,
|
|
2039
2143
|
disabled: previewLoading,
|
|
2040
2144
|
onClick: (event) => void openPreview(attachment, event.currentTarget, canLoadPreview),
|
|
2041
|
-
children: attachment.previewUrl ? /* @__PURE__ */
|
|
2145
|
+
children: attachment.previewUrl ? /* @__PURE__ */ jsx5(
|
|
2042
2146
|
"img",
|
|
2043
2147
|
{
|
|
2044
2148
|
src: attachment.previewUrl,
|
|
2045
2149
|
alt: "",
|
|
2046
2150
|
className: "h-full w-full object-cover transition-opacity hover:opacity-80"
|
|
2047
2151
|
}
|
|
2048
|
-
) : previewLoading ? /* @__PURE__ */
|
|
2152
|
+
) : previewLoading ? /* @__PURE__ */ jsx5(LoaderCircleIcon, { className: "size-4 animate-og-spin text-og-fg-muted" }) : /* @__PURE__ */ jsx5(ImageIcon, { className: "size-4 text-og-fg-muted" })
|
|
2049
2153
|
}
|
|
2050
|
-
) : attachment.previewUrl ? /* @__PURE__ */
|
|
2154
|
+
) : attachment.previewUrl ? /* @__PURE__ */ jsx5(
|
|
2051
2155
|
"img",
|
|
2052
2156
|
{
|
|
2053
2157
|
src: attachment.previewUrl,
|
|
2054
2158
|
alt: "",
|
|
2055
2159
|
className: "size-8 shrink-0 rounded object-cover"
|
|
2056
2160
|
}
|
|
2057
|
-
) : attachment.contentType.startsWith("image/") ? /* @__PURE__ */
|
|
2058
|
-
/* @__PURE__ */
|
|
2059
|
-
/* @__PURE__ */
|
|
2060
|
-
secureContextRequired ? /* @__PURE__ */
|
|
2161
|
+
) : attachment.contentType.startsWith("image/") ? /* @__PURE__ */ jsx5(ImageIcon, { className: "size-4 shrink-0 text-og-fg-muted" }) : /* @__PURE__ */ jsx5(FileIcon, { className: "size-4 shrink-0 text-og-fg-muted" }),
|
|
2162
|
+
/* @__PURE__ */ jsxs5("div", { className: "min-w-0 flex-1", children: [
|
|
2163
|
+
/* @__PURE__ */ jsx5("div", { className: "truncate font-medium text-og-fg", children: attachment.name }),
|
|
2164
|
+
secureContextRequired ? /* @__PURE__ */ jsx5("div", { className: "break-words text-og-xs leading-4 text-og-status-failed", children: statusText }) : failed || previewFailed ? /* @__PURE__ */ jsx5(ComposerTip, { tip: statusText, children: /* @__PURE__ */ jsx5("div", { className: "truncate text-og-xs text-og-status-failed", children: statusText }) }) : /* @__PURE__ */ jsx5("div", { className: "truncate text-og-xs text-og-fg-subtle", children: statusText })
|
|
2061
2165
|
] }),
|
|
2062
|
-
attachment.status === "uploading" ? /* @__PURE__ */
|
|
2063
|
-
failed && !secureContextRequired && onRetry ? /* @__PURE__ */
|
|
2166
|
+
attachment.status === "uploading" ? /* @__PURE__ */ jsx5(LoaderCircleIcon, { className: "size-3.5 shrink-0 animate-og-spin" }) : null,
|
|
2167
|
+
failed && !secureContextRequired && onRetry ? /* @__PURE__ */ jsx5(ComposerTip, { tip: messages.retryUpload, children: /* @__PURE__ */ jsx5(
|
|
2064
2168
|
"button",
|
|
2065
2169
|
{
|
|
2066
2170
|
type: "button",
|
|
2067
2171
|
onClick: () => onRetry(attachment.id),
|
|
2068
2172
|
className: "shrink-0 rounded-og-xs p-1 text-og-fg-muted hover:bg-og-surface-1 hover:text-og-fg pointer-coarse:size-10",
|
|
2069
2173
|
"aria-label": messages.retryAttachment(attachment.name),
|
|
2070
|
-
children: /* @__PURE__ */
|
|
2174
|
+
children: /* @__PURE__ */ jsx5(RotateCwIcon, { className: "size-3.5" })
|
|
2071
2175
|
}
|
|
2072
2176
|
) }) : null,
|
|
2073
|
-
/* @__PURE__ */
|
|
2177
|
+
/* @__PURE__ */ jsx5(
|
|
2074
2178
|
"button",
|
|
2075
2179
|
{
|
|
2076
2180
|
type: "button",
|
|
2077
2181
|
onClick: () => onRemove(attachment.id),
|
|
2078
2182
|
className: "shrink-0 rounded-og-xs p-1 text-og-fg-muted hover:bg-og-surface-1 hover:text-og-fg pointer-coarse:size-10",
|
|
2079
2183
|
"aria-label": messages.removeAttachment(attachment.name),
|
|
2080
|
-
children: /* @__PURE__ */
|
|
2184
|
+
children: /* @__PURE__ */ jsx5(XIcon2, { className: "size-3.5" })
|
|
2081
2185
|
}
|
|
2082
2186
|
)
|
|
2083
2187
|
]
|
|
@@ -2091,7 +2195,7 @@ function HelpPanel({
|
|
|
2091
2195
|
messages,
|
|
2092
2196
|
onClose
|
|
2093
2197
|
}) {
|
|
2094
|
-
return /* @__PURE__ */
|
|
2198
|
+
return /* @__PURE__ */ jsxs5(
|
|
2095
2199
|
motion3.div,
|
|
2096
2200
|
{
|
|
2097
2201
|
initial: { opacity: 0, height: 0 },
|
|
@@ -2099,9 +2203,9 @@ function HelpPanel({
|
|
|
2099
2203
|
exit: { opacity: 0, height: 0 },
|
|
2100
2204
|
className: "mt-2 overflow-hidden rounded-og-lg border border-og-border bg-og-surface-2",
|
|
2101
2205
|
children: [
|
|
2102
|
-
/* @__PURE__ */
|
|
2103
|
-
/* @__PURE__ */
|
|
2104
|
-
/* @__PURE__ */
|
|
2206
|
+
/* @__PURE__ */ jsxs5("div", { className: "flex items-center justify-between border-b border-og-border px-3 py-1.5", children: [
|
|
2207
|
+
/* @__PURE__ */ jsx5("span", { className: "text-og-sm font-medium text-og-fg", children: messages.commands }),
|
|
2208
|
+
/* @__PURE__ */ jsx5(
|
|
2105
2209
|
"button",
|
|
2106
2210
|
{
|
|
2107
2211
|
type: "button",
|
|
@@ -2111,16 +2215,16 @@ function HelpPanel({
|
|
|
2111
2215
|
}
|
|
2112
2216
|
)
|
|
2113
2217
|
] }),
|
|
2114
|
-
/* @__PURE__ */
|
|
2218
|
+
/* @__PURE__ */ jsx5("ul", { className: "py-1", children: commands.map((command) => {
|
|
2115
2219
|
const hint = argHint(command.args);
|
|
2116
|
-
return /* @__PURE__ */
|
|
2117
|
-
/* @__PURE__ */
|
|
2220
|
+
return /* @__PURE__ */ jsxs5("li", { className: "flex items-baseline gap-2 px-3 py-1", children: [
|
|
2221
|
+
/* @__PURE__ */ jsxs5("span", { className: "font-mono text-og-sm text-og-accent", children: [
|
|
2118
2222
|
"/",
|
|
2119
2223
|
command.name,
|
|
2120
|
-
hint ? /* @__PURE__ */
|
|
2224
|
+
hint ? /* @__PURE__ */ jsx5("span", { className: "ml-1 text-og-fg-subtle", children: hint }) : null
|
|
2121
2225
|
] }),
|
|
2122
|
-
/* @__PURE__ */
|
|
2123
|
-
command.danger ? /* @__PURE__ */
|
|
2226
|
+
/* @__PURE__ */ jsx5("span", { className: "text-og-sm text-og-fg-muted", children: command.description }),
|
|
2227
|
+
command.danger ? /* @__PURE__ */ jsx5("span", { className: "ml-auto rounded-og-xs bg-og-status-failed/15 px-1 text-og-xs uppercase tracking-wide text-og-status-failed", children: messages.danger }) : null
|
|
2124
2228
|
] }, command.name);
|
|
2125
2229
|
}) })
|
|
2126
2230
|
]
|
|
@@ -2478,7 +2582,7 @@ import {
|
|
|
2478
2582
|
authorizeTranscriptionAdapter,
|
|
2479
2583
|
createTranscriptionSessionRequest
|
|
2480
2584
|
} from "@opengeni/sdk";
|
|
2481
|
-
import { useCallback as useCallback4, useEffect as useEffect3, useMemo as
|
|
2585
|
+
import { useCallback as useCallback4, useEffect as useEffect3, useMemo as useMemo6, useRef as useRef4, useState as useState5 } from "react";
|
|
2482
2586
|
var INITIAL_TRANSCRIPTION_CONTROL_STATE = {
|
|
2483
2587
|
status: "idle",
|
|
2484
2588
|
generation: 0,
|
|
@@ -2640,12 +2744,12 @@ function useTranscription({
|
|
|
2640
2744
|
lifecycleTimeouts,
|
|
2641
2745
|
onDiagnostic
|
|
2642
2746
|
}) {
|
|
2643
|
-
const [state, setState] =
|
|
2644
|
-
const stateRef =
|
|
2645
|
-
const valueRef =
|
|
2646
|
-
const sessionRef =
|
|
2647
|
-
const pendingStartRef =
|
|
2648
|
-
const activePolicyRef =
|
|
2747
|
+
const [state, setState] = useState5(INITIAL_TRANSCRIPTION_CONTROL_STATE);
|
|
2748
|
+
const stateRef = useRef4(state);
|
|
2749
|
+
const valueRef = useRef4(value);
|
|
2750
|
+
const sessionRef = useRef4(null);
|
|
2751
|
+
const pendingStartRef = useRef4(null);
|
|
2752
|
+
const activePolicyRef = useRef4(null);
|
|
2649
2753
|
valueRef.current = value;
|
|
2650
2754
|
const startTimeoutMs = normalizeTimeout(
|
|
2651
2755
|
lifecycleTimeouts?.startMs,
|
|
@@ -2665,15 +2769,15 @@ function useTranscription({
|
|
|
2665
2769
|
},
|
|
2666
2770
|
[onDiagnostic]
|
|
2667
2771
|
);
|
|
2668
|
-
const cleanupRuntimeRef =
|
|
2772
|
+
const cleanupRuntimeRef = useRef4({ cleanupTimeoutMs, reportDiagnostic });
|
|
2669
2773
|
useEffect3(() => {
|
|
2670
2774
|
cleanupRuntimeRef.current = { cleanupTimeoutMs, reportDiagnostic };
|
|
2671
2775
|
}, [cleanupTimeoutMs, reportDiagnostic]);
|
|
2672
|
-
const policyRevision =
|
|
2776
|
+
const policyRevision = useMemo6(
|
|
2673
2777
|
() => transcriptionPolicyRevision(policy, selection),
|
|
2674
2778
|
[policy, selection]
|
|
2675
2779
|
);
|
|
2676
|
-
const authorization =
|
|
2780
|
+
const authorization = useMemo6(
|
|
2677
2781
|
() => adapter ? authorizeTranscriptionAdapter(policy, adapter.descriptor, selection) : null,
|
|
2678
2782
|
[adapter, policy, selection]
|
|
2679
2783
|
);
|
|
@@ -3039,7 +3143,7 @@ function transcriptionPolicyRevision(policy, selection) {
|
|
|
3039
3143
|
|
|
3040
3144
|
// src/hooks/use-voice-input.ts
|
|
3041
3145
|
import { OpenGeniApiError } from "@opengeni/sdk";
|
|
3042
|
-
import { useCallback as useCallback5, useEffect as useEffect4, useRef as
|
|
3146
|
+
import { useCallback as useCallback5, useEffect as useEffect4, useRef as useRef5, useState as useState6 } from "react";
|
|
3043
3147
|
|
|
3044
3148
|
// src/voice-recording-owner.ts
|
|
3045
3149
|
var VOICE_RECORDING_OWNER_SESSION_KEY = "opengeni.voice-recording-owner.v1";
|
|
@@ -3263,44 +3367,44 @@ function useVoiceInput({
|
|
|
3263
3367
|
now = currentDate,
|
|
3264
3368
|
automaticRetryDelayMilliseconds
|
|
3265
3369
|
}) {
|
|
3266
|
-
const [status, setStatus] =
|
|
3267
|
-
const [error, setError] =
|
|
3268
|
-
const [stream, setStream] =
|
|
3269
|
-
const [recordingId, setRecordingId] =
|
|
3270
|
-
const [durationSeconds, setDurationSeconds] =
|
|
3271
|
-
const [locallySaved, setLocallySaved] =
|
|
3272
|
-
const [storageAvailable, setStorageAvailable] =
|
|
3370
|
+
const [status, setStatus] = useState6("idle");
|
|
3371
|
+
const [error, setError] = useState6(null);
|
|
3372
|
+
const [stream, setStream] = useState6(null);
|
|
3373
|
+
const [recordingId, setRecordingId] = useState6(null);
|
|
3374
|
+
const [durationSeconds, setDurationSeconds] = useState6(0);
|
|
3375
|
+
const [locallySaved, setLocallySaved] = useState6(false);
|
|
3376
|
+
const [storageAvailable, setStorageAvailable] = useState6(
|
|
3273
3377
|
() => Boolean(createRecordingStore) || typeof globalThis.indexedDB !== "undefined"
|
|
3274
3378
|
);
|
|
3275
|
-
const createRecordingStoreRef =
|
|
3379
|
+
const createRecordingStoreRef = useRef5(createRecordingStore);
|
|
3276
3380
|
createRecordingStoreRef.current = createRecordingStore;
|
|
3277
|
-
const nowRef =
|
|
3381
|
+
const nowRef = useRef5(now);
|
|
3278
3382
|
nowRef.current = now;
|
|
3279
3383
|
const readNow = useCallback5(() => nowRef.current(), []);
|
|
3280
|
-
const generationRef =
|
|
3281
|
-
const workspaceIdRef =
|
|
3282
|
-
const ownerIdRef =
|
|
3283
|
-
const ownerLeaseRef =
|
|
3284
|
-
const ownerIdPromiseRef =
|
|
3285
|
-
const createOwnerIdRef =
|
|
3286
|
-
const recorderRef =
|
|
3287
|
-
const streamRef =
|
|
3288
|
-
const timerRef =
|
|
3289
|
-
const automaticRetryTimerRef =
|
|
3290
|
-
const automaticRetryAttemptRef =
|
|
3291
|
-
const ownerHeartbeatTimerRef =
|
|
3292
|
-
const controllerRef =
|
|
3293
|
-
const valueRef =
|
|
3294
|
-
const storeRef =
|
|
3295
|
-
const storePromiseRef =
|
|
3296
|
-
const ownsStoreRef =
|
|
3297
|
-
const manifestRef =
|
|
3298
|
-
const persistenceQueueRef =
|
|
3299
|
-
const persistenceErrorRef =
|
|
3300
|
-
const captureLimitErrorRef =
|
|
3301
|
-
const captureSettledRef =
|
|
3302
|
-
const resolveCaptureSettledRef =
|
|
3303
|
-
const statusRef =
|
|
3384
|
+
const generationRef = useRef5(0);
|
|
3385
|
+
const workspaceIdRef = useRef5(workspaceId);
|
|
3386
|
+
const ownerIdRef = useRef5(null);
|
|
3387
|
+
const ownerLeaseRef = useRef5(null);
|
|
3388
|
+
const ownerIdPromiseRef = useRef5(null);
|
|
3389
|
+
const createOwnerIdRef = useRef5(createOwnerId);
|
|
3390
|
+
const recorderRef = useRef5(null);
|
|
3391
|
+
const streamRef = useRef5(null);
|
|
3392
|
+
const timerRef = useRef5(null);
|
|
3393
|
+
const automaticRetryTimerRef = useRef5(null);
|
|
3394
|
+
const automaticRetryAttemptRef = useRef5(0);
|
|
3395
|
+
const ownerHeartbeatTimerRef = useRef5(null);
|
|
3396
|
+
const controllerRef = useRef5(null);
|
|
3397
|
+
const valueRef = useRef5(value);
|
|
3398
|
+
const storeRef = useRef5(null);
|
|
3399
|
+
const storePromiseRef = useRef5(null);
|
|
3400
|
+
const ownsStoreRef = useRef5(false);
|
|
3401
|
+
const manifestRef = useRef5(null);
|
|
3402
|
+
const persistenceQueueRef = useRef5(Promise.resolve());
|
|
3403
|
+
const persistenceErrorRef = useRef5(null);
|
|
3404
|
+
const captureLimitErrorRef = useRef5(null);
|
|
3405
|
+
const captureSettledRef = useRef5(Promise.resolve());
|
|
3406
|
+
const resolveCaptureSettledRef = useRef5(null);
|
|
3407
|
+
const statusRef = useRef5(status);
|
|
3304
3408
|
valueRef.current = value;
|
|
3305
3409
|
statusRef.current = status;
|
|
3306
3410
|
workspaceIdRef.current = workspaceId;
|
|
@@ -3624,7 +3728,7 @@ function useVoiceInput({
|
|
|
3624
3728
|
workspaceId
|
|
3625
3729
|
]
|
|
3626
3730
|
);
|
|
3627
|
-
const finalizePersistedRecordingRef =
|
|
3731
|
+
const finalizePersistedRecordingRef = useRef5(finalizePersistedRecording);
|
|
3628
3732
|
finalizePersistedRecordingRef.current = finalizePersistedRecording;
|
|
3629
3733
|
const clientAvailable = client !== null && client !== void 0;
|
|
3630
3734
|
useEffect4(() => {
|
|
@@ -4400,12 +4504,12 @@ import {
|
|
|
4400
4504
|
XIcon as XIcon3
|
|
4401
4505
|
} from "lucide-react";
|
|
4402
4506
|
import { AnimatePresence as AnimatePresence4, motion as motion4 } from "motion/react";
|
|
4403
|
-
import { useEffect as useEffect5, useState as
|
|
4404
|
-
import { Fragment as Fragment3, jsx as
|
|
4507
|
+
import { useEffect as useEffect5, useState as useState7 } from "react";
|
|
4508
|
+
import { Fragment as Fragment3, jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
4405
4509
|
function Tip({ tip, children }) {
|
|
4406
|
-
return /* @__PURE__ */
|
|
4407
|
-
/* @__PURE__ */
|
|
4408
|
-
/* @__PURE__ */
|
|
4510
|
+
return /* @__PURE__ */ jsxs6(Tooltip, { children: [
|
|
4511
|
+
/* @__PURE__ */ jsx6(TooltipTrigger, { asChild: true, children }),
|
|
4512
|
+
/* @__PURE__ */ jsx6(TooltipContent, { side: "top", children: tip })
|
|
4409
4513
|
] });
|
|
4410
4514
|
}
|
|
4411
4515
|
var defaultMessages = {
|
|
@@ -4489,7 +4593,7 @@ function ComposerTranscriptionControl({
|
|
|
4489
4593
|
}
|
|
4490
4594
|
void transcription.start();
|
|
4491
4595
|
}
|
|
4492
|
-
return /* @__PURE__ */
|
|
4596
|
+
return /* @__PURE__ */ jsx6(AnimatePresence4, { initial: false, children: suppressed ? null : /* @__PURE__ */ jsx6(
|
|
4493
4597
|
motion4.span,
|
|
4494
4598
|
{
|
|
4495
4599
|
initial: { opacity: 0, width: 0 },
|
|
@@ -4505,8 +4609,8 @@ function ComposerTranscriptionControl({
|
|
|
4505
4609
|
),
|
|
4506
4610
|
"data-transcription-status": status,
|
|
4507
4611
|
"data-transcription-capturing": capturing ? "" : void 0,
|
|
4508
|
-
children: /* @__PURE__ */
|
|
4509
|
-
/* @__PURE__ */
|
|
4612
|
+
children: /* @__PURE__ */ jsxs6("span", { className: "inline-flex min-w-0 items-center gap-1.5", children: [
|
|
4613
|
+
/* @__PURE__ */ jsx6(AnimatePresence4, { mode: "popLayout", initial: false, children: recoverable ? /* @__PURE__ */ jsxs6(
|
|
4510
4614
|
motion4.span,
|
|
4511
4615
|
{
|
|
4512
4616
|
initial: { opacity: 0, scale: 0.96 },
|
|
@@ -4518,12 +4622,12 @@ function ComposerTranscriptionControl({
|
|
|
4518
4622
|
"bg-og-surface-2/70 pl-2 pr-1 pointer-coarse:h-11"
|
|
4519
4623
|
),
|
|
4520
4624
|
children: [
|
|
4521
|
-
/* @__PURE__ */
|
|
4522
|
-
/* @__PURE__ */
|
|
4625
|
+
/* @__PURE__ */ jsx6("span", { className: "og-transcription-recovered-label max-w-44 truncate text-og-xs text-og-fg-muted max-sm:max-w-28", children: savedTranscript ? errorMessage3 ?? messages.recoveredTranscript : retrying ? messages.retrying : status === "error" ? errorMessage3 ?? messages.errorRetryable : messages.recovered }),
|
|
4626
|
+
/* @__PURE__ */ jsx6(
|
|
4523
4627
|
Tip,
|
|
4524
4628
|
{
|
|
4525
4629
|
tip: savedTranscript ? messages.insertRecoveredTranscript : retrying ? messages.pauseRetrying : messages.retry,
|
|
4526
|
-
children: /* @__PURE__ */
|
|
4630
|
+
children: /* @__PURE__ */ jsx6(
|
|
4527
4631
|
"button",
|
|
4528
4632
|
{
|
|
4529
4633
|
type: "button",
|
|
@@ -4534,12 +4638,12 @@ function ComposerTranscriptionControl({
|
|
|
4534
4638
|
"bg-og-fg text-og-bg transition-colors duration-150 motion-reduce:transition-none",
|
|
4535
4639
|
"hover:bg-og-fg-muted pointer-coarse:size-11"
|
|
4536
4640
|
),
|
|
4537
|
-
children: savedTranscript ? /* @__PURE__ */
|
|
4641
|
+
children: savedTranscript ? /* @__PURE__ */ jsx6(ClipboardPasteIcon, { className: "size-3.5" }) : retrying ? /* @__PURE__ */ jsx6(SquareIcon, { className: "size-3.5" }) : /* @__PURE__ */ jsx6(RefreshCwIcon, { className: "size-3.5" })
|
|
4538
4642
|
}
|
|
4539
4643
|
)
|
|
4540
4644
|
}
|
|
4541
4645
|
),
|
|
4542
|
-
/* @__PURE__ */
|
|
4646
|
+
/* @__PURE__ */ jsx6(Tip, { tip: messages.discardRecovered, children: /* @__PURE__ */ jsx6(
|
|
4543
4647
|
"button",
|
|
4544
4648
|
{
|
|
4545
4649
|
type: "button",
|
|
@@ -4550,13 +4654,13 @@ function ComposerTranscriptionControl({
|
|
|
4550
4654
|
"text-og-fg-muted transition-colors duration-150 motion-reduce:transition-none",
|
|
4551
4655
|
"hover:bg-og-surface-3 hover:text-og-status-failed pointer-coarse:size-11"
|
|
4552
4656
|
),
|
|
4553
|
-
children: /* @__PURE__ */
|
|
4657
|
+
children: /* @__PURE__ */ jsx6(Trash2Icon, { className: "size-3.5" })
|
|
4554
4658
|
}
|
|
4555
4659
|
) })
|
|
4556
4660
|
]
|
|
4557
4661
|
},
|
|
4558
4662
|
"recovered"
|
|
4559
|
-
) : active ? /* @__PURE__ */
|
|
4663
|
+
) : active ? /* @__PURE__ */ jsxs6(
|
|
4560
4664
|
motion4.span,
|
|
4561
4665
|
{
|
|
4562
4666
|
initial: { opacity: 0, scale: 0.96 },
|
|
@@ -4568,21 +4672,21 @@ function ComposerTranscriptionControl({
|
|
|
4568
4672
|
"bg-og-surface-2/70 pl-2 pr-1 pointer-coarse:h-11"
|
|
4569
4673
|
),
|
|
4570
4674
|
children: [
|
|
4571
|
-
status === "requesting-permission" ? /* @__PURE__ */
|
|
4675
|
+
status === "requesting-permission" ? /* @__PURE__ */ jsx6(
|
|
4572
4676
|
LoaderCircleIcon2,
|
|
4573
4677
|
{
|
|
4574
4678
|
className: "size-3.5 shrink-0 text-og-fg-muted animate-og-spin motion-reduce:animate-none",
|
|
4575
4679
|
"aria-hidden": true
|
|
4576
4680
|
}
|
|
4577
|
-
) : /* @__PURE__ */
|
|
4578
|
-
status === "recording" ? /* @__PURE__ */
|
|
4681
|
+
) : /* @__PURE__ */ jsxs6("span", { className: "flex items-center gap-1.5", children: [
|
|
4682
|
+
status === "recording" ? /* @__PURE__ */ jsx6(
|
|
4579
4683
|
"span",
|
|
4580
4684
|
{
|
|
4581
4685
|
"aria-hidden": true,
|
|
4582
4686
|
className: "size-1.5 shrink-0 rounded-full bg-og-status-failed animate-og-pulse motion-reduce:animate-none"
|
|
4583
4687
|
}
|
|
4584
4688
|
) : null,
|
|
4585
|
-
/* @__PURE__ */
|
|
4689
|
+
/* @__PURE__ */ jsx6(
|
|
4586
4690
|
VoiceWaveform,
|
|
4587
4691
|
{
|
|
4588
4692
|
stream: status === "recording" ? transcription.stream : null,
|
|
@@ -4590,8 +4694,8 @@ function ComposerTranscriptionControl({
|
|
|
4590
4694
|
}
|
|
4591
4695
|
)
|
|
4592
4696
|
] }),
|
|
4593
|
-
status === "recording" ? /* @__PURE__ */
|
|
4594
|
-
/* @__PURE__ */
|
|
4697
|
+
status === "recording" ? /* @__PURE__ */ jsxs6(Fragment3, { children: [
|
|
4698
|
+
/* @__PURE__ */ jsx6(Tip, { tip: messages.cancel, children: /* @__PURE__ */ jsx6(
|
|
4595
4699
|
"button",
|
|
4596
4700
|
{
|
|
4597
4701
|
type: "button",
|
|
@@ -4603,10 +4707,10 @@ function ComposerTranscriptionControl({
|
|
|
4603
4707
|
"text-og-fg-muted transition-colors duration-150 motion-reduce:transition-none",
|
|
4604
4708
|
"hover:bg-og-surface-3 hover:text-og-fg pointer-coarse:size-11"
|
|
4605
4709
|
),
|
|
4606
|
-
children: /* @__PURE__ */
|
|
4710
|
+
children: /* @__PURE__ */ jsx6(XIcon3, { className: "size-3.5" })
|
|
4607
4711
|
}
|
|
4608
4712
|
) }),
|
|
4609
|
-
/* @__PURE__ */
|
|
4713
|
+
/* @__PURE__ */ jsx6(Tip, { tip: messages.stop, children: /* @__PURE__ */ jsx6(
|
|
4610
4714
|
"button",
|
|
4611
4715
|
{
|
|
4612
4716
|
type: "button",
|
|
@@ -4617,14 +4721,14 @@ function ComposerTranscriptionControl({
|
|
|
4617
4721
|
"bg-og-fg text-og-bg transition-colors duration-150 motion-reduce:transition-none",
|
|
4618
4722
|
"hover:bg-og-fg-muted pointer-coarse:size-11"
|
|
4619
4723
|
),
|
|
4620
|
-
children: /* @__PURE__ */
|
|
4724
|
+
children: /* @__PURE__ */ jsx6(SquareIcon, { className: "size-2.5 fill-current" })
|
|
4621
4725
|
}
|
|
4622
4726
|
) })
|
|
4623
|
-
] }) : status === "transcribing" || status === "saving" ? /* @__PURE__ */
|
|
4727
|
+
] }) : status === "transcribing" || status === "saving" ? /* @__PURE__ */ jsx6("span", { className: "og-shimmer-text px-1.5 text-og-xs font-medium whitespace-nowrap", children: status === "saving" ? messages.saving : messages.transcribing }) : /* @__PURE__ */ jsx6("span", { className: "px-1.5 text-og-xs text-og-fg-muted whitespace-nowrap", children: messages.requestingPermission })
|
|
4624
4728
|
]
|
|
4625
4729
|
},
|
|
4626
4730
|
status === "transcribing" || status === "saving" ? "processing" : "capture"
|
|
4627
|
-
) : /* @__PURE__ */
|
|
4731
|
+
) : /* @__PURE__ */ jsx6(Tip, { tip: idleLabel, children: /* @__PURE__ */ jsx6(
|
|
4628
4732
|
motion4.button,
|
|
4629
4733
|
{
|
|
4630
4734
|
type: "button",
|
|
@@ -4642,10 +4746,10 @@ function ComposerTranscriptionControl({
|
|
|
4642
4746
|
"text-og-fg-muted transition-colors duration-150 motion-reduce:transition-none",
|
|
4643
4747
|
unavailableMessage ? "cursor-not-allowed opacity-45" : "hover:bg-og-surface-2 hover:text-og-fg"
|
|
4644
4748
|
),
|
|
4645
|
-
children: /* @__PURE__ */
|
|
4749
|
+
children: /* @__PURE__ */ jsx6(MicIcon, { className: "size-4" })
|
|
4646
4750
|
}
|
|
4647
4751
|
) }, "idle") }),
|
|
4648
|
-
status === "error" && errorMessage3 && !recoverable ? /* @__PURE__ */
|
|
4752
|
+
status === "error" && errorMessage3 && !recoverable ? /* @__PURE__ */ jsx6(Tip, { tip: errorMessage3, children: /* @__PURE__ */ jsx6(
|
|
4649
4753
|
"span",
|
|
4650
4754
|
{
|
|
4651
4755
|
"aria-hidden": "true",
|
|
@@ -4653,7 +4757,7 @@ function ComposerTranscriptionControl({
|
|
|
4653
4757
|
children: errorMessage3
|
|
4654
4758
|
}
|
|
4655
4759
|
) }) : null,
|
|
4656
|
-
/* @__PURE__ */
|
|
4760
|
+
/* @__PURE__ */ jsx6(
|
|
4657
4761
|
"span",
|
|
4658
4762
|
{
|
|
4659
4763
|
className: "sr-only",
|
|
@@ -4671,8 +4775,8 @@ function VoiceWaveform({
|
|
|
4671
4775
|
stream,
|
|
4672
4776
|
mode
|
|
4673
4777
|
}) {
|
|
4674
|
-
const [levels, setLevels] =
|
|
4675
|
-
const [live, setLive] =
|
|
4778
|
+
const [levels, setLevels] = useState7(() => restingLevels(WAVEFORM_BARS));
|
|
4779
|
+
const [live, setLive] = useState7(false);
|
|
4676
4780
|
useEffect5(() => {
|
|
4677
4781
|
if (!stream || mode !== "recording") {
|
|
4678
4782
|
setLive(false);
|
|
@@ -4721,7 +4825,7 @@ function VoiceWaveform({
|
|
|
4721
4825
|
void context?.close();
|
|
4722
4826
|
};
|
|
4723
4827
|
}, [stream, mode]);
|
|
4724
|
-
return /* @__PURE__ */
|
|
4828
|
+
return /* @__PURE__ */ jsx6(
|
|
4725
4829
|
"span",
|
|
4726
4830
|
{
|
|
4727
4831
|
"aria-hidden": true,
|
|
@@ -4729,7 +4833,7 @@ function VoiceWaveform({
|
|
|
4729
4833
|
className: "flex h-4 w-[3.75rem] items-center justify-center gap-px",
|
|
4730
4834
|
children: WAVEFORM_BAR_KEYS.map((key, index) => {
|
|
4731
4835
|
const level = levels[index] ?? 0;
|
|
4732
|
-
return /* @__PURE__ */
|
|
4836
|
+
return /* @__PURE__ */ jsx6(
|
|
4733
4837
|
"span",
|
|
4734
4838
|
{
|
|
4735
4839
|
className: cn(
|
|
@@ -4780,6 +4884,10 @@ function transcriptionErrorMessage(code, messages) {
|
|
|
4780
4884
|
}
|
|
4781
4885
|
|
|
4782
4886
|
export {
|
|
4887
|
+
TooltipProvider,
|
|
4888
|
+
Tooltip,
|
|
4889
|
+
TooltipTrigger,
|
|
4890
|
+
TooltipContent,
|
|
4783
4891
|
useLightbox,
|
|
4784
4892
|
useLightboxOptional,
|
|
4785
4893
|
LightboxProvider,
|
|
@@ -4836,4 +4944,4 @@ export {
|
|
|
4836
4944
|
useVoiceInput,
|
|
4837
4945
|
ComposerTranscriptionControl
|
|
4838
4946
|
};
|
|
4839
|
-
//# sourceMappingURL=chunk-
|
|
4947
|
+
//# sourceMappingURL=chunk-Z7WBDB4E.js.map
|