@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.
Files changed (63) hide show
  1. package/README.md +10 -24
  2. package/dist/artifacts.js +7 -7
  3. package/dist/{browser-viewer-SS46LUAC.js → browser-viewer-NTD6UIPR.js} +3 -3
  4. package/dist/{chunk-VEPNNDNG.js → chunk-24M4YBCL.js} +4 -4
  5. package/dist/{chunk-ELIYWBZR.js → chunk-BV5A4OTE.js} +4 -4
  6. package/dist/{chunk-7W6PVVTK.js → chunk-CQG7YUJB.js} +2582 -1037
  7. package/dist/chunk-CQG7YUJB.js.map +1 -0
  8. package/dist/{chunk-BXJOQFCD.js → chunk-HUMIRRYI.js} +84 -221
  9. package/dist/chunk-HUMIRRYI.js.map +1 -0
  10. package/dist/{chunk-7BWFU6H4.js → chunk-Z7WBDB4E.js} +395 -287
  11. package/dist/chunk-Z7WBDB4E.js.map +1 -0
  12. package/dist/components/human-input-form.d.ts +3 -1
  13. package/dist/components/human-input-surface.d.ts +3 -2
  14. package/dist/components/markdown-table-layout.d.ts +9 -0
  15. package/dist/components/session-conversation.d.ts +2 -0
  16. package/dist/composer.js +2 -3
  17. package/dist/{computer-viewer-FWEZISW4.js → computer-viewer-7TEZC6Y2.js} +3 -3
  18. package/dist/hooks/use-codex-accounts.d.ts +11 -1
  19. package/dist/hooks/use-session-events.d.ts +2 -2
  20. package/dist/index.d.ts +1 -1
  21. package/dist/index.js +44 -34
  22. package/dist/index.js.map +1 -1
  23. package/dist/interaction.js +3 -3
  24. package/dist/markdown-table-layout-3Z3AWBY7.js +71 -0
  25. package/dist/markdown-table-layout-3Z3AWBY7.js.map +1 -0
  26. package/dist/older-history.d.ts +3 -2
  27. package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-27LKAWZD.js} +2 -2
  28. package/dist/platform-activity-row-27LKAWZD.js.map +1 -0
  29. package/dist/realtime.js +3 -3
  30. package/dist/session-ui.js +6 -9
  31. package/dist/session.js +1 -1
  32. package/dist/timeline/types.d.ts +3 -0
  33. package/package.json +2 -6
  34. package/src/components/human-input-form.tsx +185 -53
  35. package/src/components/human-input-surface.tsx +3 -0
  36. package/src/components/markdown-table-layout.ts +85 -0
  37. package/src/components/markdown.tsx +20 -2
  38. package/src/components/message-timeline.tsx +47 -7
  39. package/src/components/session-commands-panel.tsx +7 -1
  40. package/src/components/session-conversation.tsx +4 -1
  41. package/src/hooks/use-codex-accounts.ts +32 -5
  42. package/src/hooks/use-session-events.ts +16 -277
  43. package/src/index.ts +0 -1
  44. package/src/older-history.ts +22 -4
  45. package/src/timeline/platform-activity-row.tsx +4 -1
  46. package/src/timeline/projection.ts +99 -9
  47. package/src/timeline/types.ts +3 -0
  48. package/dist/chat.d.ts +0 -37
  49. package/dist/chat.js +0 -315
  50. package/dist/chat.js.map +0 -1
  51. package/dist/chunk-7BWFU6H4.js.map +0 -1
  52. package/dist/chunk-7W6PVVTK.js.map +0 -1
  53. package/dist/chunk-BXJOQFCD.js.map +0 -1
  54. package/dist/chunk-HQV2I5HV.js +0 -124
  55. package/dist/chunk-HQV2I5HV.js.map +0 -1
  56. package/dist/chunk-YAIPFO5D.js +0 -1416
  57. package/dist/chunk-YAIPFO5D.js.map +0 -1
  58. package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
  59. package/src/chat.tsx +0 -393
  60. /package/dist/{browser-viewer-SS46LUAC.js.map → browser-viewer-NTD6UIPR.js.map} +0 -0
  61. /package/dist/{chunk-VEPNNDNG.js.map → chunk-24M4YBCL.js.map} +0 -0
  62. /package/dist/{chunk-ELIYWBZR.js.map → chunk-BV5A4OTE.js.map} +0 -0
  63. /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 = createContext(null);
143
+ import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
144
+ var LightboxContext = createContext2(null);
41
145
  function useLightbox() {
42
- return useContext(LightboxContext) ?? NOOP;
146
+ return useContext2(LightboxContext) ?? NOOP;
43
147
  }
44
148
  function useLightboxOptional() {
45
- return useContext(LightboxContext);
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 = useContext(LightboxContext);
169
+ const ancestor = useContext2(LightboxContext);
66
170
  if (ancestor) {
67
- return /* @__PURE__ */ jsx(Fragment, { children });
171
+ return /* @__PURE__ */ jsx2(Fragment, { children });
68
172
  }
69
- return /* @__PURE__ */ jsx(LightboxRoot, { children });
173
+ return /* @__PURE__ */ jsx2(LightboxRoot, { children });
70
174
  }
71
175
  function LightboxRoot({ children }) {
72
- const [state, setState] = useState(null);
73
- const [tokenSource, setTokenSource] = useState(null);
74
- const sourceOwner = useMemo(() => createLightboxSourceOwner(), []);
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 = useMemo(() => ({ open }), [open]);
100
- return /* @__PURE__ */ jsxs(LightboxContext.Provider, { value: controller, children: [
203
+ const controller = useMemo2(() => ({ open }), [open]);
204
+ return /* @__PURE__ */ jsxs2(LightboxContext.Provider, { value: controller, children: [
101
205
  children,
102
- /* @__PURE__ */ jsx(Dialog.Root, { open: state !== null, onOpenChange: (next) => !next && close(), children: /* @__PURE__ */ jsx(AnimatePresence, { children: state !== null ? /* @__PURE__ */ jsxs(Dialog.Portal, { forceMount: true, children: [
103
- /* @__PURE__ */ jsx(Dialog.Overlay, { asChild: true, forceMount: true, children: /* @__PURE__ */ jsx(
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__ */ jsx(
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__ */ jsxs(
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__ */ jsx(Dialog.Title, { className: "sr-only", children: state.label }),
137
- /* @__PURE__ */ jsx(Dialog.Description, { className: "sr-only", children: state.caption ?? `Expanded ${state.label.toLowerCase()}` }),
138
- /* @__PURE__ */ jsxs("figure", { className: "m-0 flex max-h-full max-w-5xl flex-col items-center gap-3", children: [
139
- /* @__PURE__ */ jsxs("div", { className: "relative flex min-h-0 w-fit max-w-full", children: [
140
- /* @__PURE__ */ jsx(
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__ */ jsx(
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__ */ jsx("figcaption", { className: "max-w-2xl text-center font-og-mono text-og-xs text-white/55", children: state.caption }) : /* @__PURE__ */ jsx("figcaption", { className: "font-og-mono text-og-xs uppercase tracking-[0.1em] text-white/35", children: "Esc or click outside to close" })
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__ */ jsxs("div", { className: "absolute -right-3 -top-3 flex items-center gap-2", children: [
173
- downloadFilename ? /* @__PURE__ */ jsx(
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__ */ jsx(DownloadIcon, { className: "size-4" })
288
+ children: /* @__PURE__ */ jsx2(DownloadIcon, { className: "size-4" })
185
289
  }
186
290
  ) : null,
187
- /* @__PURE__ */ jsx(
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__ */ jsx(XIcon, { className: "size-4" })
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 useMemo2, useRef, useState as useState2 } from "react";
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] = useState2(0);
398
- const [dismissedValue, setDismissedValue] = useState2(null);
501
+ const [highlight, setHighlight] = useState3(0);
502
+ const [dismissedValue, setDismissedValue] = useState3(null);
399
503
  const dismissed = dismissedValue !== null && dismissedValue === value;
400
- const navigatedRef = useRef(false);
401
- const navTokenRef = useRef(value);
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 = useMemo2(() => parseCommandLine(value), [value]);
407
- const filterCtx = useMemo2(
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 = useMemo2(() => {
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 = useMemo2(() => {
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 = useRef(false);
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 jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
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__ */ jsx2(AnimatePresence2, { children: open ? /* @__PURE__ */ jsxs2(
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__ */ jsx2(
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__ */ jsxs2(
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__ */ jsxs2("span", { className: "flex min-w-0 items-baseline gap-1.5", children: [
656
- /* @__PURE__ */ jsxs2(
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__ */ jsx2("span", { className: "truncate font-mono text-[11px] text-og-fg-subtle", children: hint }) : null
773
+ hint ? /* @__PURE__ */ jsx3("span", { className: "truncate font-mono text-[11px] text-og-fg-subtle", children: hint }) : null
670
774
  ] }),
671
- /* @__PURE__ */ jsxs2("span", { className: "ml-auto flex items-center gap-1.5", children: [
672
- command.danger ? /* @__PURE__ */ jsx2("span", { className: "rounded-og-xs bg-og-status-failed/15 px-1 text-[10px] uppercase tracking-wide text-og-status-failed", children: dangerLabel }) : null,
673
- /* @__PURE__ */ jsx2("span", { className: "og-command-description truncate text-[12px] text-og-fg-subtle max-sm:hidden", children: command.description })
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__ */ jsx2("div", { className: "border-t border-og-border px-3 py-1.5 font-mono text-[11px] text-og-fg-subtle", children: argHintText }) : null
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 useMemo3 } from "react";
691
- import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
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 = useMemo3(
840
+ const effectiveRows = useMemo4(
737
841
  () => rows && rows.length > 0 ? applyCodexOnlyRows(rows, codexOnly) : [],
738
842
  [rows, codexOnly]
739
843
  );
740
- const billingGroups = useMemo3(
844
+ const billingGroups = useMemo4(
741
845
  () => effectiveRows.length > 0 ? groupPickerRowsByBillingClass(effectiveRows) : [],
742
846
  [effectiveRows]
743
847
  );
744
- const providerGroupList = useMemo3(() => providerGroups(models, codexOnly), [models, codexOnly]);
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__ */ jsxs3("span", { className: cn("relative inline-flex items-center", className), children: [
750
- /* @__PURE__ */ jsx3("label", { htmlFor: selectId, className: "sr-only", children: label }),
751
- /* @__PURE__ */ jsx3(
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__ */ jsx3("optgroup", { label: group.label, children: group.rows.map((row) => /* @__PURE__ */ jsx3("option", { value: row.id, disabled: !row.selectable, children: row.unavailableReason ? `${row.label} (${row.unavailableReason})` : row.label }, row.id)) }, group.billingClass)) : providerGroupList.map((group) => /* @__PURE__ */ jsx3("optgroup", { label: group.label, children: group.models.map((model) => /* @__PURE__ */ jsx3("option", { value: model.id, disabled: model.optionDisabled, children: model.label }, model.id)) }, group.label))
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__ */ jsx3(
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 createContext2,
899
+ createContext as createContext3,
796
900
  forwardRef,
797
901
  useCallback as useCallback3,
798
- useContext as useContext2,
902
+ useContext as useContext3,
799
903
  useEffect as useEffect2,
800
904
  useId as useId2,
801
- useLayoutEffect,
802
- useMemo as useMemo4,
803
- useRef as useRef2,
804
- useState as useState3
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 jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
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 = useMemo4(
1059
+ const messages = useMemo5(
956
1060
  () => ({ ...defaultChatComposerMessages, ...messageOverrides }),
957
1061
  [messageOverrides]
958
1062
  );
959
1063
  const id = useId2();
960
- const rootRef = useRef2(null);
961
- const textareaRef = useRef2(null);
962
- const pauseButtonRef = useRef2(null);
963
- const fileInputRef = useRef2(null);
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] = useState3(false);
967
- const [paletteMounted, setPaletteMounted] = useState3(false);
968
- const [submitting, setSubmitting] = useState3(false);
969
- const submittingRef = useRef2(false);
970
- const controlOperationRef = useRef2(false);
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 = useRef2(true);
974
- const deliveredValueRef = useRef2(deliveryValue);
975
- const liveValueRef = useRef2(deliveryValue);
976
- const [renderedValue, setRenderedValue] = useState3(deliveryValue);
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
- useLayoutEffect(() => {
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] = useState3(false);
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] = useState3(null);
1050
- const [helpOpen, setHelpOpen] = useState3(false);
1051
- const [confirmState, setConfirmState] = useState3(null);
1052
- const pendingConfirm = useRef2(null);
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 = useRef2(null);
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 = useMemo4(
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 = useMemo4(
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 = createContext2(null);
1404
+ var ComposerContext = createContext3(null);
1301
1405
  function useComposerController() {
1302
- const controller = useContext2(ComposerContext);
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 = useRef2(null);
1314
- const responsiveContext = useMemo4(
1417
+ const responsiveRootRef = useRef3(null);
1418
+ const responsiveContext = useMemo5(
1315
1419
  () => ({ responsiveBasis, rootRef: responsiveRootRef }),
1316
1420
  [responsiveBasis]
1317
1421
  );
1318
- return /* @__PURE__ */ jsx4(ComposerContext.Provider, { value: controller, children: /* @__PURE__ */ jsx4(ComposerResponsiveContext.Provider, { value: responsiveContext, children: /* @__PURE__ */ jsx4(TooltipProvider, { delayDuration: 300, children: /* @__PURE__ */ jsxs4(
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__ */ jsx4(ComposerAnnouncements, {})
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__ */ jsx4("div", { ...props, ref, className: cn("relative", className) });
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__ */ jsx4("div", { className, children: /* @__PURE__ */ jsx4(
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__ */ jsxs4(
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__ */ jsx4(
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__ */ jsxs4("span", { className: "inline-flex items-center gap-2", children: [
1390
- /* @__PURE__ */ jsx4(PaperclipIcon, { className: "size-4" }),
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__ */ jsx4(
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__ */ jsx4(
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__ */ jsx4(
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 = useRef2(false);
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__ */ jsx4(
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__ */ jsx4(
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__ */ jsx4(
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__ */ jsx4(
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__ */ jsx4(
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__ */ jsx4(
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__ */ jsxs4(Fragment2, { children: [
1569
- /* @__PURE__ */ jsx4(
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__ */ jsx4(ComposerTip, { tip, children: /* @__PURE__ */ jsx4(
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__ */ jsx4(PaperclipIcon, { className: "size-4" })
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__ */ jsx4(
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__ */ jsx4(ComposerTip, { tip, children: /* @__PURE__ */ jsx4(
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__ */ jsx4(LoaderCircleIcon, { className: "size-3.5 animate-og-spin" }) : /* @__PURE__ */ jsx4(PauseIcon, { className: "size-3.5 fill-current" }))
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__ */ jsx4(ComposerTip, { tip, children: /* @__PURE__ */ jsx4(
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__ */ jsx4(LoaderCircleIcon, { className: "size-4 animate-og-spin" }) : /* @__PURE__ */ jsx4(ArrowUpIcon, { className: "size-4" }))
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__ */ jsx4(AnimatePresence3, { children: controller.helpOpen ? /* @__PURE__ */ jsx4(
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__ */ jsxs4(Fragment2, { children: [
1694
- /* @__PURE__ */ jsx4(AnimatePresence3, { children: controller.activeNotice ? /* @__PURE__ */ jsx4(
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__ */ jsxs4("div", { className: "mt-1.5 flex flex-wrap items-center gap-2 px-1 text-og-xs text-og-status-failed", children: [
1708
- /* @__PURE__ */ jsx4("span", { className: "min-w-0 flex-1", children: controller.messages.draftConflict }),
1709
- /* @__PURE__ */ jsx4(
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__ */ jsx4(
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__ */ jsxs4("div", { className: "sr-only", children: [
1733
- controller.activeNotice ? /* @__PURE__ */ jsx4("p", { role: controller.activeNotice.tone === "error" ? "alert" : "status", children: controller.activeNotice.message }) : null,
1734
- controller.draftConflict ? /* @__PURE__ */ jsx4("p", { role: "alert", children: controller.messages.draftConflict }) : null
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__ */ jsxs4("div", { className: "border-b border-og-status-waiting/25 bg-og-status-waiting/[0.07]", children: [
1765
- /* @__PURE__ */ jsxs4("div", { className: "flex min-w-0 items-center gap-2 px-3 py-2", children: [
1766
- /* @__PURE__ */ jsx4(PauseIcon, { className: "size-3.5 shrink-0 text-og-status-waiting" }),
1767
- /* @__PURE__ */ jsxs4(
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__ */ jsx4("span", { className: "block truncate text-og-xs font-medium text-og-fg", children: cause }),
1776
- /* @__PURE__ */ jsx4("span", { className: "block truncate text-[11px] text-og-fg-muted", children: queuedAheadCount > 0 ? messages.queuedAhead(queuedAheadCount) : sending ? messages.resumingAndSending : messages.nextMessageResumes })
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__ */ jsxs4(
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__ */ jsx4(LoaderCircleIcon, { className: "size-3.5 animate-og-spin" }) : /* @__PURE__ */ jsx4(PlayIcon, { className: "size-3.5 fill-current" }),
1790
- /* @__PURE__ */ jsx4("span", { className: "og-composer-resume-label-long hidden min-[400px]:inline", children: messages.resumeThisWorkstream }),
1791
- /* @__PURE__ */ jsx4("span", { className: "og-composer-resume-label-short min-[400px]:hidden", children: messages.resumeShort })
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__ */ jsx4(
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__ */ jsx4(ChevronDownIcon2, { className: cn("size-3.5 transition-transform", open && "rotate-180") })
1906
+ children: /* @__PURE__ */ jsx5(ChevronDownIcon2, { className: cn("size-3.5 transition-transform", open && "rotate-180") })
1803
1907
  }
1804
1908
  )
1805
1909
  ] }),
1806
- open ? /* @__PURE__ */ jsxs4("div", { className: "border-t border-og-status-waiting/20 px-3 pb-3 pt-2", children: [
1807
- /* @__PURE__ */ jsx4("ul", { className: "grid gap-2", "aria-label": messages.pauseReasonsLabel, children: control.blockers.map((entry, index) => /* @__PURE__ */ jsxs4(
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__ */ jsx4("span", { className: "font-medium text-og-fg", children: index === 0 ? messages.pausedByLabel : messages.alsoPausedByLabel }),
1813
- blockerHref(entry, controlLinks) ? /* @__PURE__ */ jsx4(
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__ */ jsx4("span", { className: "font-medium text-og-fg", children: entry.displayName }),
1821
- entry.reason ? /* @__PURE__ */ jsxs4("span", { className: "text-og-fg-muted", children: [
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__ */ jsxs4("span", { className: "text-og-fg-subtle", children: [
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__ */ jsxs4("span", { className: "text-og-fg-subtle", children: [
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__ */ jsx4("div", { className: "mt-2 flex flex-wrap gap-1.5", children: broaderOptions.map((option) => /* @__PURE__ */ jsx4(
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__ */ jsxs4(
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__ */ jsx4("span", { className: "block font-medium", children: option.scope === "workspace" ? messages.resumeWorkspace : messages.resumeFromSession }),
1851
- /* @__PURE__ */ jsx4("span", { className: "block text-[10px] text-og-fg-subtle", children: option.selectedStateAfter === "active" ? messages.sessionCanRun : messages.stillPausedBy(
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__ */ jsx4(
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__ */ jsxs4(
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__ */ jsx4(FileIcon, { className: "size-3 shrink-0" }),
1883
- /* @__PURE__ */ jsx4("span", { className: "truncate", children: resource.kind === "file" ? messages.restoredFile(resource.fileId) : resource.uri }),
1884
- /* @__PURE__ */ jsx4(
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__ */ jsx4(XIcon2, { className: "size-3" })
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 = useRef2(null);
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__ */ jsxs4(
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__ */ jsx4("span", { id: descriptionId, className: "min-w-0 flex-1 px-1.5 text-og-sm text-og-status-failed", children: messages.confirmDescription(command) }),
1932
- /* @__PURE__ */ jsxs4("span", { className: "flex shrink-0 items-center gap-1.5", children: [
1933
- /* @__PURE__ */ jsx4(
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__ */ jsx4(
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 = useRef2(null);
1967
- const [previewLoadingId, setPreviewLoadingId] = useState3(null);
1968
- const [previewErrorId, setPreviewErrorId] = useState3(null);
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__ */ jsx4("div", { className: "flex flex-wrap gap-2 px-3 py-2", children: attachments.map((attachment) => {
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__ */ jsxs4(
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__ */ jsx4(
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__ */ jsx4(
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__ */ jsx4(LoaderCircleIcon, { className: "size-4 animate-og-spin text-og-fg-muted" }) : /* @__PURE__ */ jsx4(ImageIcon, { className: "size-4 text-og-fg-muted" })
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__ */ jsx4(
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__ */ jsx4(ImageIcon, { className: "size-4 shrink-0 text-og-fg-muted" }) : /* @__PURE__ */ jsx4(FileIcon, { className: "size-4 shrink-0 text-og-fg-muted" }),
2058
- /* @__PURE__ */ jsxs4("div", { className: "min-w-0 flex-1", children: [
2059
- /* @__PURE__ */ jsx4("div", { className: "truncate font-medium text-og-fg", children: attachment.name }),
2060
- secureContextRequired ? /* @__PURE__ */ jsx4("div", { className: "break-words text-og-xs leading-4 text-og-status-failed", children: statusText }) : failed || previewFailed ? /* @__PURE__ */ jsx4(ComposerTip, { tip: statusText, children: /* @__PURE__ */ jsx4("div", { className: "truncate text-og-xs text-og-status-failed", children: statusText }) }) : /* @__PURE__ */ jsx4("div", { className: "truncate text-og-xs text-og-fg-subtle", children: statusText })
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__ */ jsx4(LoaderCircleIcon, { className: "size-3.5 shrink-0 animate-og-spin" }) : null,
2063
- failed && !secureContextRequired && onRetry ? /* @__PURE__ */ jsx4(ComposerTip, { tip: messages.retryUpload, children: /* @__PURE__ */ jsx4(
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__ */ jsx4(RotateCwIcon, { className: "size-3.5" })
2174
+ children: /* @__PURE__ */ jsx5(RotateCwIcon, { className: "size-3.5" })
2071
2175
  }
2072
2176
  ) }) : null,
2073
- /* @__PURE__ */ jsx4(
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__ */ jsx4(XIcon2, { className: "size-3.5" })
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__ */ jsxs4(
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__ */ jsxs4("div", { className: "flex items-center justify-between border-b border-og-border px-3 py-1.5", children: [
2103
- /* @__PURE__ */ jsx4("span", { className: "text-og-sm font-medium text-og-fg", children: messages.commands }),
2104
- /* @__PURE__ */ jsx4(
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__ */ jsx4("ul", { className: "py-1", children: commands.map((command) => {
2218
+ /* @__PURE__ */ jsx5("ul", { className: "py-1", children: commands.map((command) => {
2115
2219
  const hint = argHint(command.args);
2116
- return /* @__PURE__ */ jsxs4("li", { className: "flex items-baseline gap-2 px-3 py-1", children: [
2117
- /* @__PURE__ */ jsxs4("span", { className: "font-mono text-og-sm text-og-accent", children: [
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__ */ jsx4("span", { className: "ml-1 text-og-fg-subtle", children: hint }) : null
2224
+ hint ? /* @__PURE__ */ jsx5("span", { className: "ml-1 text-og-fg-subtle", children: hint }) : null
2121
2225
  ] }),
2122
- /* @__PURE__ */ jsx4("span", { className: "text-og-sm text-og-fg-muted", children: command.description }),
2123
- command.danger ? /* @__PURE__ */ jsx4("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
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 useMemo5, useRef as useRef3, useState as useState4 } from "react";
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] = useState4(INITIAL_TRANSCRIPTION_CONTROL_STATE);
2644
- const stateRef = useRef3(state);
2645
- const valueRef = useRef3(value);
2646
- const sessionRef = useRef3(null);
2647
- const pendingStartRef = useRef3(null);
2648
- const activePolicyRef = useRef3(null);
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 = useRef3({ cleanupTimeoutMs, reportDiagnostic });
2772
+ const cleanupRuntimeRef = useRef4({ cleanupTimeoutMs, reportDiagnostic });
2669
2773
  useEffect3(() => {
2670
2774
  cleanupRuntimeRef.current = { cleanupTimeoutMs, reportDiagnostic };
2671
2775
  }, [cleanupTimeoutMs, reportDiagnostic]);
2672
- const policyRevision = useMemo5(
2776
+ const policyRevision = useMemo6(
2673
2777
  () => transcriptionPolicyRevision(policy, selection),
2674
2778
  [policy, selection]
2675
2779
  );
2676
- const authorization = useMemo5(
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 useRef4, useState as useState5 } from "react";
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] = useState5("idle");
3267
- const [error, setError] = useState5(null);
3268
- const [stream, setStream] = useState5(null);
3269
- const [recordingId, setRecordingId] = useState5(null);
3270
- const [durationSeconds, setDurationSeconds] = useState5(0);
3271
- const [locallySaved, setLocallySaved] = useState5(false);
3272
- const [storageAvailable, setStorageAvailable] = useState5(
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 = useRef4(createRecordingStore);
3379
+ const createRecordingStoreRef = useRef5(createRecordingStore);
3276
3380
  createRecordingStoreRef.current = createRecordingStore;
3277
- const nowRef = useRef4(now);
3381
+ const nowRef = useRef5(now);
3278
3382
  nowRef.current = now;
3279
3383
  const readNow = useCallback5(() => nowRef.current(), []);
3280
- const generationRef = useRef4(0);
3281
- const workspaceIdRef = useRef4(workspaceId);
3282
- const ownerIdRef = useRef4(null);
3283
- const ownerLeaseRef = useRef4(null);
3284
- const ownerIdPromiseRef = useRef4(null);
3285
- const createOwnerIdRef = useRef4(createOwnerId);
3286
- const recorderRef = useRef4(null);
3287
- const streamRef = useRef4(null);
3288
- const timerRef = useRef4(null);
3289
- const automaticRetryTimerRef = useRef4(null);
3290
- const automaticRetryAttemptRef = useRef4(0);
3291
- const ownerHeartbeatTimerRef = useRef4(null);
3292
- const controllerRef = useRef4(null);
3293
- const valueRef = useRef4(value);
3294
- const storeRef = useRef4(null);
3295
- const storePromiseRef = useRef4(null);
3296
- const ownsStoreRef = useRef4(false);
3297
- const manifestRef = useRef4(null);
3298
- const persistenceQueueRef = useRef4(Promise.resolve());
3299
- const persistenceErrorRef = useRef4(null);
3300
- const captureLimitErrorRef = useRef4(null);
3301
- const captureSettledRef = useRef4(Promise.resolve());
3302
- const resolveCaptureSettledRef = useRef4(null);
3303
- const statusRef = useRef4(status);
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 = useRef4(finalizePersistedRecording);
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 useState6 } from "react";
4404
- import { Fragment as Fragment3, jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
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__ */ jsxs5(Tooltip, { children: [
4407
- /* @__PURE__ */ jsx5(TooltipTrigger, { asChild: true, children }),
4408
- /* @__PURE__ */ jsx5(TooltipContent, { side: "top", children: tip })
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__ */ jsx5(AnimatePresence4, { initial: false, children: suppressed ? null : /* @__PURE__ */ jsx5(
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__ */ jsxs5("span", { className: "inline-flex min-w-0 items-center gap-1.5", children: [
4509
- /* @__PURE__ */ jsx5(AnimatePresence4, { mode: "popLayout", initial: false, children: recoverable ? /* @__PURE__ */ jsxs5(
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__ */ jsx5("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 }),
4522
- /* @__PURE__ */ jsx5(
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__ */ jsx5(
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__ */ jsx5(ClipboardPasteIcon, { className: "size-3.5" }) : retrying ? /* @__PURE__ */ jsx5(SquareIcon, { className: "size-3.5" }) : /* @__PURE__ */ jsx5(RefreshCwIcon, { className: "size-3.5" })
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__ */ jsx5(Tip, { tip: messages.discardRecovered, children: /* @__PURE__ */ jsx5(
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__ */ jsx5(Trash2Icon, { className: "size-3.5" })
4657
+ children: /* @__PURE__ */ jsx6(Trash2Icon, { className: "size-3.5" })
4554
4658
  }
4555
4659
  ) })
4556
4660
  ]
4557
4661
  },
4558
4662
  "recovered"
4559
- ) : active ? /* @__PURE__ */ jsxs5(
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__ */ jsx5(
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__ */ jsxs5("span", { className: "flex items-center gap-1.5", children: [
4578
- status === "recording" ? /* @__PURE__ */ jsx5(
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__ */ jsx5(
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__ */ jsxs5(Fragment3, { children: [
4594
- /* @__PURE__ */ jsx5(Tip, { tip: messages.cancel, children: /* @__PURE__ */ jsx5(
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__ */ jsx5(XIcon3, { className: "size-3.5" })
4710
+ children: /* @__PURE__ */ jsx6(XIcon3, { className: "size-3.5" })
4607
4711
  }
4608
4712
  ) }),
4609
- /* @__PURE__ */ jsx5(Tip, { tip: messages.stop, children: /* @__PURE__ */ jsx5(
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__ */ jsx5(SquareIcon, { className: "size-2.5 fill-current" })
4724
+ children: /* @__PURE__ */ jsx6(SquareIcon, { className: "size-2.5 fill-current" })
4621
4725
  }
4622
4726
  ) })
4623
- ] }) : status === "transcribing" || status === "saving" ? /* @__PURE__ */ jsx5("span", { className: "og-shimmer-text px-1.5 text-og-xs font-medium whitespace-nowrap", children: status === "saving" ? messages.saving : messages.transcribing }) : /* @__PURE__ */ jsx5("span", { className: "px-1.5 text-og-xs text-og-fg-muted whitespace-nowrap", children: messages.requestingPermission })
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__ */ jsx5(Tip, { tip: idleLabel, children: /* @__PURE__ */ jsx5(
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__ */ jsx5(MicIcon, { className: "size-4" })
4749
+ children: /* @__PURE__ */ jsx6(MicIcon, { className: "size-4" })
4646
4750
  }
4647
4751
  ) }, "idle") }),
4648
- status === "error" && errorMessage3 && !recoverable ? /* @__PURE__ */ jsx5(Tip, { tip: errorMessage3, children: /* @__PURE__ */ jsx5(
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__ */ jsx5(
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] = useState6(() => restingLevels(WAVEFORM_BARS));
4675
- const [live, setLive] = useState6(false);
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__ */ jsx5(
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__ */ jsx5(
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-7BWFU6H4.js.map
4947
+ //# sourceMappingURL=chunk-Z7WBDB4E.js.map