@burdenoff/fe-libs 2026.911.4 → 2026.911.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"AIAssistantPanel.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AIAssistantPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAU,KAAK,EAAE,EAAY,MAAM,OAAO,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAMtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAIvE,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,6BAA6B,CAAC;AAQrC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAGnE,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG;IAC/C,gEAAgE;IAChE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B;;;;;;;;;OASG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,0BAA0B,CAAC;CACtC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAyMtD,CAAC"}
1
+ {"version":3,"file":"AIAssistantPanel.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AIAssistantPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAU,KAAK,EAAE,EAAY,MAAM,OAAO,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAMtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAIvE,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,6BAA6B,CAAC;AAYrC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAGnE,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG;IAC/C,gEAAgE;IAChE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B;;;;;;;;;OASG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,0BAA0B,CAAC;CACtC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA8MtD,CAAC"}
@@ -5,83 +5,84 @@ import { useAssistantStore as r } from "../store.js";
5
5
  import { AssistantSpeechProvider as i } from "./AssistantSpeechProvider.js";
6
6
  import { AssistantConnectSourceProvider as a } from "./composer/connectSource.js";
7
7
  import { AssistantPreviewProvider as o } from "../preview/context.js";
8
- import { escapeDismisses as s, nextPanelOverlays as c } from "./panelOverlays.js";
9
- import { useAssistantPreviewBridge as l } from "../preview/useAssistantPreviewBridge.js";
10
- import { AssistantPreviewOverlay as u } from "../preview/AssistantPreviewOverlay.js";
11
- import { AssistantHeader as d } from "./AssistantHeader.js";
12
- import { AssistantConversationList as f } from "./AssistantConversationList.js";
13
- import { useFilesServiceWarmup as p } from "../../../storage/warmFilesService.js";
14
- import { useAssistantHeartbeat as m } from "../useAssistantHeartbeat.js";
15
- import { useAssistantKeyboardShortcuts as h } from "../useAssistantKeyboardShortcuts.js";
16
- import { AssistantChatArea as g } from "./AssistantChatArea.js";
17
- import { useRef as _, useState as v } from "react";
18
- import { jsx as y, jsxs as b } from "react/jsx-runtime";
8
+ import { ASSISTANT_PANEL_ATTR as s, escapeDismisses as c, nextPanelOverlays as l } from "./panelOverlays.js";
9
+ import { useAssistantPreviewBridge as u } from "../preview/useAssistantPreviewBridge.js";
10
+ import { AssistantPreviewOverlay as d } from "../preview/AssistantPreviewOverlay.js";
11
+ import { AssistantHeader as f } from "./AssistantHeader.js";
12
+ import { AssistantConversationList as p } from "./AssistantConversationList.js";
13
+ import { useFilesServiceWarmup as m } from "../../../storage/warmFilesService.js";
14
+ import { useAssistantHeartbeat as h } from "../useAssistantHeartbeat.js";
15
+ import { useAssistantKeyboardShortcuts as g } from "../useAssistantKeyboardShortcuts.js";
16
+ import { AssistantChatArea as _ } from "./AssistantChatArea.js";
17
+ import { useRef as v, useState as y } from "react";
18
+ import { jsx as b, jsxs as x } from "react/jsx-runtime";
19
19
  //#region src/shared/assistant/ui/AIAssistantPanel.tsx
20
- var x = ({ onClose: x, visible: S, docked: C, onToggleDock: w, writeAccess: T, onNavigate: E, connectSourceHref: D, preview: O }) => {
21
- let k = t(), [A, j] = v(!1);
22
- A && !O && j(!1);
23
- let M = A && !!O;
24
- l(O ?? null);
25
- let N = _(null), { conversations: P, activeConversationId: F, conversationListOpen: I, setConversationListOpen: L, createConversation: R } = r(), z = I || M, B = (e) => {
26
- let t = c({
27
- historyOpen: I,
28
- previewOpen: M
20
+ var S = ({ onClose: S, visible: C, docked: w, onToggleDock: T, writeAccess: E, onNavigate: D, connectSourceHref: O, preview: k }) => {
21
+ let A = t(), [j, M] = y(!1);
22
+ j && !k && M(!1);
23
+ let N = j && !!k;
24
+ u(k ?? null);
25
+ let P = v(null), { conversations: F, activeConversationId: I, conversationListOpen: L, setConversationListOpen: R, createConversation: z } = r(), B = L || N, V = (e) => {
26
+ let t = l({
27
+ historyOpen: L,
28
+ previewOpen: N
29
29
  }, e);
30
- L(t.historyOpen), j(t.previewOpen);
31
- }, V = P.find((e) => e.id === F);
32
- m(V?.backendSessionId ?? null, V?.mode ?? null, S ?? !0), p(S ?? !0);
33
- let H = e(S !== !1);
34
- return h({
35
- panelRef: N,
30
+ R(t.historyOpen), M(t.previewOpen);
31
+ }, H = F.find((e) => e.id === I);
32
+ h(H?.backendSessionId ?? null, H?.mode ?? null, C ?? !0), m(C ?? !0);
33
+ let U = e(C !== !1);
34
+ return g({
35
+ panelRef: P,
36
36
  onClose: () => {
37
- if (s({
38
- historyOpen: I,
39
- previewOpen: M
37
+ if (c({
38
+ historyOpen: L,
39
+ previewOpen: N
40
40
  }) === "overlay") {
41
- L(!1), j(!1);
41
+ R(!1), M(!1);
42
42
  return;
43
43
  }
44
- x();
44
+ S();
45
45
  }
46
- }), /* @__PURE__ */ y(i, {
47
- visible: S ?? !0,
48
- children: /* @__PURE__ */ y(o, {
49
- value: O,
50
- children: /* @__PURE__ */ y(n, {
51
- value: E,
52
- children: /* @__PURE__ */ y(a, {
53
- value: D,
54
- children: /* @__PURE__ */ b("div", {
55
- ref: N,
46
+ }), /* @__PURE__ */ b(i, {
47
+ visible: C ?? !0,
48
+ children: /* @__PURE__ */ b(o, {
49
+ value: k,
50
+ children: /* @__PURE__ */ b(n, {
51
+ value: D,
52
+ children: /* @__PURE__ */ b(a, {
53
+ value: O,
54
+ children: /* @__PURE__ */ x("div", {
55
+ ref: P,
56
56
  className: "relative flex h-full w-full flex-col bg-bg-surface",
57
57
  role: "complementary",
58
- "aria-label": k("panel.ariaLabel", "AI Assistant"),
58
+ "aria-label": A("panel.ariaLabel", "AI Assistant"),
59
59
  "data-testid": "ai-assistant-panel",
60
+ [s]: "",
60
61
  tabIndex: -1,
61
62
  children: [
62
- /* @__PURE__ */ y("div", {
63
+ /* @__PURE__ */ b("div", {
63
64
  className: "contents",
64
- inert: z || void 0,
65
- children: /* @__PURE__ */ y(d, {
66
- contextLabel: H,
67
- onNewConversation: () => R(),
68
- onOpenHistory: () => B("history"),
69
- historyOpen: I,
70
- onTogglePreview: () => B("preview"),
71
- previewOpen: M,
72
- onClose: x,
73
- docked: C,
74
- onToggleDock: w
65
+ inert: B || void 0,
66
+ children: /* @__PURE__ */ b(f, {
67
+ contextLabel: U,
68
+ onNewConversation: () => z(),
69
+ onOpenHistory: () => V("history"),
70
+ historyOpen: L,
71
+ onTogglePreview: () => V("preview"),
72
+ previewOpen: N,
73
+ onClose: S,
74
+ docked: w,
75
+ onToggleDock: T
75
76
  })
76
77
  }),
77
- I && /* @__PURE__ */ y(f, {}),
78
- M && /* @__PURE__ */ y(u, { onClose: () => j(!1) }),
79
- /* @__PURE__ */ y("div", {
78
+ L && /* @__PURE__ */ b(p, {}),
79
+ N && /* @__PURE__ */ b(d, { onClose: () => M(!1) }),
80
+ /* @__PURE__ */ b("div", {
80
81
  className: "contents",
81
- inert: z || void 0,
82
- children: /* @__PURE__ */ y(g, {
83
- visible: S ?? !0,
84
- writeAccess: T
82
+ inert: B || void 0,
83
+ children: /* @__PURE__ */ b(_, {
84
+ visible: C ?? !0,
85
+ writeAccess: E
85
86
  })
86
87
  })
87
88
  ]
@@ -92,4 +93,4 @@ var x = ({ onClose: x, visible: S, docked: C, onToggleDock: w, writeAccess: T, o
92
93
  });
93
94
  };
94
95
  //#endregion
95
- export { x as AIAssistantPanel };
96
+ export { S as AIAssistantPanel };
@@ -45,4 +45,61 @@ export declare function nextPanelOverlays(current: PanelOverlayState, toggled: "
45
45
  * conversation instead.
46
46
  */
47
47
  export declare function escapeDismisses(current: PanelOverlayState): "overlay" | "panel";
48
+ /**
49
+ * Attribute marking the assistant panel's root element.
50
+ *
51
+ * ★★ A CROSS-PACKAGE CONTRACT, not a styling hook. Each host app's own Escape
52
+ * handler reads it through `assistantPanelOwnsEscape` to decide whether the
53
+ * panel is about to handle the key itself. Renaming it silently reintroduces
54
+ * the double-close below, in a different repo, with every test still green.
55
+ *
56
+ * Deliberately NOT the `data-testid` — that is a test handle, free to change.
57
+ * This one is load-bearing at runtime.
58
+ */
59
+ export declare const ASSISTANT_PANEL_ATTR = "data-assistant-panel";
60
+ /**
61
+ * Is `active` the panel itself, or inside it?
62
+ *
63
+ * Extracted so `useAssistantKeyboardShortcuts` (`:32`) and
64
+ * `assistantPanelOwnsEscape` cannot drift apart. The host has to decline
65
+ * exactly the key presses the panel takes — no more, or Escape stops working
66
+ * altogether; no fewer, or it fires twice — and "exactly" is only checkable if
67
+ * both sides ask one question.
68
+ */
69
+ export declare function focusIsInsidePanel(panel: {
70
+ contains(node: Node | null): boolean;
71
+ } | null, active: Node | null): boolean;
72
+ /**
73
+ * Will the assistant panel handle this Escape itself?
74
+ *
75
+ * ★★★ HOSTS MUST CALL THIS BEFORE CLOSING THE PANEL ON ESCAPE. Both host apps
76
+ * register a `document` keydown listener so Escape closes the panel even when
77
+ * focus is elsewhere on the page (healthybowl-app and vibecontrols-app,
78
+ * `src/components/chrome/AIAssistantOverlay.tsx`). The panel registers one too
79
+ * (`useAssistantKeyboardShortcuts.ts:80`), routed through `escapeDismisses` so
80
+ * an open overlay is backed out of rather than the whole assistant.
81
+ *
82
+ * Both listeners are on `document`, so ONE key press ran BOTH: the overlay
83
+ * closed AND the panel unmounted, taking the in-flight turn with it — the exact
84
+ * defect `escapeDismisses` exists to prevent, reintroduced one layer up where
85
+ * this package could not see it. Measured on alpha 2026-09-11: preview open,
86
+ * focus on the overlay, one Escape, and the panel was gone.
87
+ *
88
+ * ★★ `stopPropagation()` CANNOT FIX IT. The two listeners sit on the SAME node,
89
+ * and propagation stops travel BETWEEN nodes; only `stopImmediatePropagation()`
90
+ * reaches a sibling listener, and only one registered later. The panel's is not
91
+ * reliably earlier: `AIAssistantPanel.tsx:207` passes a fresh inline arrow as
92
+ * `onClose`, which is in the hook's dependency array (`:82`), so the panel's
93
+ * effect re-subscribes on EVERY render and keeps moving to the back of the
94
+ * queue. Neither side can depend on order.
95
+ *
96
+ * So ownership is decided by STATE, not by event order — whoever holds focus
97
+ * owns the key:
98
+ * - focus inside the panel -> the panel decides (overlay first, then close)
99
+ * - focus anywhere else -> the host closes the panel, exactly as before
100
+ *
101
+ * That partition is total and disjoint, so Escape is neither dropped nor
102
+ * double-handled, whichever listener happens to run first.
103
+ */
104
+ export declare function assistantPanelOwnsEscape(doc?: Pick<Document, "querySelectorAll" | "activeElement">): boolean;
48
105
  //# sourceMappingURL=panelOverlays.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"panelOverlays.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/panelOverlays.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,EAAE,iBAG9B,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,SAAS,GAAG,SAAS,GAC7B,iBAAiB,CAOnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,iBAAiB,GACzB,SAAS,GAAG,OAAO,CAErB"}
1
+ {"version":3,"file":"panelOverlays.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/panelOverlays.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,EAAE,iBAG9B,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,SAAS,GAAG,SAAS,GAC7B,iBAAiB,CAOnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,iBAAiB,GACzB,SAAS,GAAG,OAAO,CAErB;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAE3D;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAA;CAAE,GAAG,IAAI,EACtD,MAAM,EAAE,IAAI,GAAG,IAAI,GAClB,OAAO,CAGT;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,GAAE,IAAI,CAAC,QAAQ,EAAE,kBAAkB,GAAG,eAAe,CAAY,GACnE,OAAO,CAaT"}
@@ -12,5 +12,15 @@ function t(t, n) {
12
12
  function n(e) {
13
13
  return e.historyOpen || e.previewOpen ? "overlay" : "panel";
14
14
  }
15
+ var r = "data-assistant-panel";
16
+ function i(e, t) {
17
+ return !e || !t ? !1 : e === t || e.contains(t);
18
+ }
19
+ function a(e = document) {
20
+ let t = e.activeElement;
21
+ if (!t) return !1;
22
+ for (let n of Array.from(e.querySelectorAll(`[${r}]`))) if (i(n, t)) return !0;
23
+ return !1;
24
+ }
15
25
  //#endregion
16
- export { e as NO_PANEL_OVERLAY, n as escapeDismisses, t as nextPanelOverlays };
26
+ export { r as ASSISTANT_PANEL_ATTR, e as NO_PANEL_OVERLAY, a as assistantPanelOwnsEscape, n as escapeDismisses, i as focusIsInsidePanel, t as nextPanelOverlays };
@@ -1 +1 @@
1
- {"version":3,"file":"useOverlayFocus.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/useOverlayFocus.ts"],"names":[],"mappings":"AAmDA,wBAAgB,eAAe,CAAC,CAAC,SAAS,WAAW;AACnD,8EAA8E;AAC9E,iBAAiB,CAAC,EAAE,MAAM,uCAgE3B"}
1
+ {"version":3,"file":"useOverlayFocus.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/useOverlayFocus.ts"],"names":[],"mappings":"AA4DA,wBAAgB,eAAe,CAAC,CAAC,SAAS,WAAW;AACnD,8EAA8E;AAC9E,iBAAiB,CAAC,EAAE,MAAM,uCAgE3B"}
@@ -1,19 +1,20 @@
1
- import { useEffect as e, useLayoutEffect as t, useRef as n } from "react";
1
+ import { ASSISTANT_PANEL_ATTR as e } from "./panelOverlays.js";
2
+ import { useEffect as t, useLayoutEffect as n, useRef as r } from "react";
2
3
  //#region src/shared/assistant/ui/useOverlayFocus.ts
3
- var r = "[data-testid=\"ai-assistant-panel\"]", i = typeof document > "u" ? e : t;
4
- function a(e) {
5
- let t = n(null);
6
- return i(() => {
7
- let n = t.current, i = n?.closest(r) ?? null;
4
+ var i = `[${e}]`, a = typeof document > "u" ? t : n;
5
+ function o(e) {
6
+ let t = r(null);
7
+ return a(() => {
8
+ let n = t.current, r = n?.closest(i) ?? null;
8
9
  return n?.focus({ preventScroll: !0 }), () => {
9
10
  let t = document.activeElement;
10
11
  if (!(n && (n === t || n.contains(t)))) return;
11
- let r = e ? i?.querySelector(`[data-testid="${e}"]`) : null;
12
- (r?.isConnected ? r : i)?.focus({ preventScroll: !0 });
12
+ let i = e ? r?.querySelector(`[data-testid="${e}"]`) : null;
13
+ (i?.isConnected ? i : r)?.focus({ preventScroll: !0 });
13
14
  let a = document.activeElement;
14
- i && a !== n && !n?.contains(a) && (i === a || i.contains(a)) || i?.focus({ preventScroll: !0 });
15
+ r && a !== n && !n?.contains(a) && (r === a || r.contains(a)) || r?.focus({ preventScroll: !0 });
15
16
  };
16
17
  }, [e]), t;
17
18
  }
18
19
  //#endregion
19
- export { a as useOverlayFocus };
20
+ export { o as useOverlayFocus };
@@ -1 +1 @@
1
- {"version":3,"file":"VoiceTranscriptDrawer.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/VoiceTranscriptDrawer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAInD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE;;;;;;;;;;;;;;;;;;GAkBG;AAEH,UAAU,KAAK;IACb,KAAK,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;;;;;;;;;;OAYG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,KAAK,CAqI3C,CAAC"}
1
+ {"version":3,"file":"VoiceTranscriptDrawer.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/VoiceTranscriptDrawer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAKnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE;;;;;;;;;;;;;;;;;;GAkBG;AAEH,UAAU,KAAK;IACb,KAAK,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;;;;;;;;;;OAYG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,KAAK,CAsI3C,CAAC"}
@@ -1,64 +1,65 @@
1
1
  import { useAssistantTr as e } from "../../i18n.js";
2
- import { VoiceConversationView as t } from "./VoiceConversationView.js";
3
- import { useEffect as n, useRef as r } from "react";
4
- import { ArrowRight as i, Download as a, X as o } from "lucide-react";
5
- import { jsx as s, jsxs as c } from "react/jsx-runtime";
2
+ import { ASSISTANT_PANEL_ATTR as t, focusIsInsidePanel as n } from "../panelOverlays.js";
3
+ import { VoiceConversationView as r } from "./VoiceConversationView.js";
4
+ import { useEffect as i, useRef as a } from "react";
5
+ import { ArrowRight as o, Download as s, X as c } from "lucide-react";
6
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
6
7
  //#region src/shared/assistant/ui/voice/VoiceTranscriptDrawer.tsx
7
- var l = ({ turns: l, onClose: u, onSave: d, onContinueInChat: f, closeOnEscape: p = !1 }) => {
8
- let m = e(), h = r(null);
9
- return n(() => {
10
- if (!p) return;
8
+ var d = ({ turns: d, onClose: f, onSave: p, onContinueInChat: m, closeOnEscape: h = !1 }) => {
9
+ let g = e(), _ = a(null);
10
+ return i(() => {
11
+ if (!h) return;
11
12
  let e = (e) => {
12
13
  if (e.key !== "Escape" || document.querySelector("[role=\"alertdialog\"]")) return;
13
- let t = h.current?.closest("[data-testid=\"ai-assistant-panel\"]"), n = document.activeElement;
14
- !t || !n || !t.contains(n) || (e.preventDefault(), e.stopPropagation(), u());
14
+ let r = _.current?.closest(`[${t}]`), i = document.activeElement;
15
+ n(r ?? null, i) && (e.preventDefault(), e.stopPropagation(), f());
15
16
  };
16
17
  return document.addEventListener("keydown", e, !0), () => document.removeEventListener("keydown", e, !0);
17
- }, [p, u]), /* @__PURE__ */ c("div", {
18
- ref: h,
18
+ }, [h, f]), /* @__PURE__ */ u("div", {
19
+ ref: _,
19
20
  className: "absolute inset-0 z-30 flex flex-col bg-bg-sunken/95 backdrop-blur-sm",
20
21
  role: "dialog",
21
- "aria-label": m("voiceSession.transcriptTitle", "Voice transcript"),
22
+ "aria-label": g("voiceSession.transcriptTitle", "Voice transcript"),
22
23
  "data-testid": "assistant-voice-transcript",
23
24
  children: [
24
- /* @__PURE__ */ c("div", {
25
+ /* @__PURE__ */ u("div", {
25
26
  className: "flex items-center justify-between border-b border-border-subtle px-4 py-3",
26
- children: [/* @__PURE__ */ c("div", {
27
+ children: [/* @__PURE__ */ u("div", {
27
28
  className: "min-w-0",
28
- children: [/* @__PURE__ */ s("h2", {
29
+ children: [/* @__PURE__ */ l("h2", {
29
30
  className: "text-sm font-semibold text-text-primary",
30
- children: m("voiceSession.transcript", "Voice conversation")
31
- }), /* @__PURE__ */ s("p", {
31
+ children: g("voiceSession.transcript", "Voice conversation")
32
+ }), /* @__PURE__ */ l("p", {
32
33
  className: "truncate text-xs text-text-muted",
33
- children: m("voiceSession.transcriptHint", "Spoken turns in this conversation — kept out of your typed chat.")
34
+ children: g("voiceSession.transcriptHint", "Spoken turns in this conversation — kept out of your typed chat.")
34
35
  })]
35
- }), /* @__PURE__ */ s("button", {
36
+ }), /* @__PURE__ */ l("button", {
36
37
  type: "button",
37
- onClick: u,
38
+ onClick: f,
38
39
  className: "flex size-8 items-center justify-center rounded-full text-text-secondary transition-colors hover:bg-bg-raised hover:text-text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-border-strong",
39
- "aria-label": m("voiceSession.transcriptClose", "Close the transcript"),
40
+ "aria-label": g("voiceSession.transcriptClose", "Close the transcript"),
40
41
  "data-testid": "assistant-voice-transcript-close",
41
- children: /* @__PURE__ */ s(o, { className: "size-4" })
42
+ children: /* @__PURE__ */ l(c, { className: "size-4" })
42
43
  })]
43
44
  }),
44
- /* @__PURE__ */ s(t, { turns: l }),
45
- (d || f) && l.length > 0 ? /* @__PURE__ */ c("div", {
45
+ /* @__PURE__ */ l(r, { turns: d }),
46
+ (p || m) && d.length > 0 ? /* @__PURE__ */ u("div", {
46
47
  className: "flex items-center justify-end gap-2 border-t border-border-subtle px-4 py-3",
47
- children: [d ? /* @__PURE__ */ c("button", {
48
+ children: [p ? /* @__PURE__ */ u("button", {
48
49
  type: "button",
49
- onClick: d,
50
+ onClick: p,
50
51
  className: "flex items-center gap-1.5 rounded-lg border border-border-default px-3 py-1.5 text-xs text-text-secondary transition-colors hover:bg-bg-elevated hover:text-text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-border-strong",
51
52
  "data-testid": "assistant-voice-save-transcript",
52
- children: [/* @__PURE__ */ s(a, {
53
+ children: [/* @__PURE__ */ l(s, {
53
54
  className: "size-3.5",
54
55
  "aria-hidden": "true"
55
- }), m("voiceSession.save", "Save transcript")]
56
- }) : null, f ? /* @__PURE__ */ c("button", {
56
+ }), g("voiceSession.save", "Save transcript")]
57
+ }) : null, m ? /* @__PURE__ */ u("button", {
57
58
  type: "button",
58
- onClick: f,
59
+ onClick: m,
59
60
  className: "flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-3 py-1.5 text-xs font-medium text-action-primary-fg transition-opacity hover:opacity-90 focus:outline-none focus-visible:ring-2 focus-visible:ring-border-strong",
60
61
  "data-testid": "assistant-voice-continue-in-chat",
61
- children: [m("voiceSession.continueInChat", "Continue in chat"), /* @__PURE__ */ s(i, {
62
+ children: [g("voiceSession.continueInChat", "Continue in chat"), /* @__PURE__ */ l(o, {
62
63
  className: "size-3.5",
63
64
  "aria-hidden": "true"
64
65
  })]
@@ -68,4 +69,4 @@ var l = ({ turns: l, onClose: u, onSave: d, onContinueInChat: f, closeOnEscape:
68
69
  });
69
70
  };
70
71
  //#endregion
71
- export { l as VoiceTranscriptDrawer };
72
+ export { d as VoiceTranscriptDrawer };
@@ -1 +1 @@
1
- {"version":3,"file":"useAssistantKeyboardShortcuts.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/useAssistantKeyboardShortcuts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlD,UAAU,OAAO;IACf,QAAQ,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC3C,QAAQ,CAAC,EAAE,SAAS,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;IACjD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,6BAA6B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,QA0DrF"}
1
+ {"version":3,"file":"useAssistantKeyboardShortcuts.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/useAssistantKeyboardShortcuts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlD,UAAU,OAAO;IACf,QAAQ,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC3C,QAAQ,CAAC,EAAE,SAAS,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;IACjD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,6BAA6B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,QA8DrF"}
@@ -1,35 +1,36 @@
1
1
  import { useAssistantStore as e } from "./store.js";
2
- import { useEffect as t } from "react";
2
+ import { focusIsInsidePanel as t } from "./ui/panelOverlays.js";
3
+ import { useEffect as n } from "react";
3
4
  //#region src/shared/assistant/useAssistantKeyboardShortcuts.ts
4
- function n({ panelRef: n, inputRef: r, onClose: i }) {
5
- t(() => {
6
- let t = (t) => {
7
- let a = n.current;
8
- if (!a || !a.contains(document.activeElement) && document.activeElement !== a) return;
9
- let o = t.ctrlKey || t.metaKey;
10
- if (t.key === "Escape") {
11
- t.preventDefault(), i();
5
+ function r({ panelRef: r, inputRef: i, onClose: a }) {
6
+ n(() => {
7
+ let n = (n) => {
8
+ let o = r.current;
9
+ if (!o || !t(o, document.activeElement)) return;
10
+ let s = n.ctrlKey || n.metaKey;
11
+ if (n.key === "Escape") {
12
+ n.preventDefault(), a();
12
13
  return;
13
14
  }
14
- if (o && t.shiftKey && (t.key === "N" || t.key === "n")) {
15
- t.preventDefault(), e.getState().createConversation();
15
+ if (s && n.shiftKey && (n.key === "N" || n.key === "n")) {
16
+ n.preventDefault(), e.getState().createConversation();
16
17
  return;
17
18
  }
18
- if (o && t.shiftKey && (t.key === "E" || t.key === "e")) {
19
- t.preventDefault(), a.querySelector("[data-testid=\"assistant-more\"]")?.click();
19
+ if (s && n.shiftKey && (n.key === "E" || n.key === "e")) {
20
+ n.preventDefault(), o.querySelector("[data-testid=\"assistant-more\"]")?.click();
20
21
  return;
21
22
  }
22
- if (t.key === "/" && !o && !t.shiftKey) {
23
+ if (n.key === "/" && !s && !n.shiftKey) {
23
24
  let e = document.activeElement?.tagName;
24
- e !== "INPUT" && e !== "TEXTAREA" && (t.preventDefault(), r?.current?.focus());
25
+ e !== "INPUT" && e !== "TEXTAREA" && (n.preventDefault(), i?.current?.focus());
25
26
  }
26
27
  };
27
- return document.addEventListener("keydown", t), () => document.removeEventListener("keydown", t);
28
+ return document.addEventListener("keydown", n), () => document.removeEventListener("keydown", n);
28
29
  }, [
29
- n,
30
30
  r,
31
- i
31
+ i,
32
+ a
32
33
  ]);
33
34
  }
34
35
  //#endregion
35
- export { n as useAssistantKeyboardShortcuts };
36
+ export { r as useAssistantKeyboardShortcuts };
@@ -61,42 +61,42 @@ import { AssistantAttachmentButton as ii } from "./shared/assistant/ui/composer/
61
61
  import { AssistantAttachmentChips as ai } from "./shared/assistant/ui/composer/AssistantAttachmentChips.js";
62
62
  import { AssistantPreviewProvider as oi, useAssistantPreview as si } from "./shared/assistant/preview/context.js";
63
63
  import { IDLE_PREVIEW_STATE as ci, nextPreviewEvents as li } from "./shared/assistant/preview/previewTransitions.js";
64
- import { NO_PANEL_OVERLAY as ui, escapeDismisses as di, nextPanelOverlays as fi } from "./shared/assistant/ui/panelOverlays.js";
65
- import { useOverlayFocus as pi } from "./shared/assistant/ui/useOverlayFocus.js";
66
- import { useAssistantPreviewBridge as mi } from "./shared/assistant/preview/useAssistantPreviewBridge.js";
67
- import { AssistantPreviewOverlay as hi } from "./shared/assistant/preview/AssistantPreviewOverlay.js";
68
- import { AssistantLanguageSelector as gi, FOLLOW_APP_LOCALE as _i } from "./shared/assistant/ui/composer/AssistantLanguageSelector.js";
69
- import { ASSISTANT_MODE_META as vi, AssistantModeSelector as yi, nextModeIndex as bi } from "./shared/assistant/ui/composer/AssistantModeSelector.js";
70
- import { AssistantVoiceButton as xi } from "./shared/assistant/ui/composer/AssistantVoiceButton.js";
71
- import { AUTO_VOICE as Si, AssistantVoiceSelector as Ci } from "./shared/assistant/ui/composer/AssistantVoiceSelector.js";
72
- import { AssistantVoiceOrb as wi } from "./shared/assistant/ui/voice/AssistantVoiceOrb.js";
73
- import { AssistantVoiceSessionButton as Ti } from "./shared/assistant/ui/voice/AssistantVoiceSessionButton.js";
74
- import { CAPTION_SCROLL_ATTR as Ei, VoiceCaption as Di } from "./shared/assistant/ui/voice/VoiceCaption.js";
75
- import { VoiceConversationView as Oi } from "./shared/assistant/ui/voice/VoiceConversationView.js";
76
- import { VoiceWaveform as ki } from "./shared/assistant/ui/voice/VoiceWaveform.js";
77
- import { VoiceMiniController as Ai } from "./shared/assistant/ui/voice/VoiceMiniController.js";
78
- import { VoiceStage as ji } from "./shared/assistant/ui/voice/VoiceStage.js";
79
- import { VoiceTranscriptDrawer as Mi } from "./shared/assistant/ui/voice/VoiceTranscriptDrawer.js";
80
- import { downloadFile as Ni, exportConversation as Pi } from "./shared/assistant/exportConversation.js";
81
- import { AssistantMoreMenu as Fi } from "./shared/assistant/ui/AssistantMoreMenu.js";
82
- import { AssistantHeader as Ii } from "./shared/assistant/ui/AssistantHeader.js";
83
- import { AssistantConversationList as Li } from "./shared/assistant/ui/AssistantConversationList.js";
84
- import { AssistantEmptyState as Ri } from "./shared/assistant/ui/AssistantEmptyState.js";
85
- import { AssistantMessageItem as zi } from "./shared/assistant/ui/AssistantMessageItem.js";
86
- import { AssistantMessageList as Bi } from "./shared/assistant/ui/AssistantMessageList.js";
87
- import { AssistantVoiceSession as Vi } from "./shared/assistant/ui/voice/AssistantVoiceSession.js";
88
- import { useAssistantApiAccess as Hi } from "./shared/assistant/useAssistantApiAccess.js";
89
- import { useConversationTurns as Ui } from "./shared/assistant/useConversationTurns.js";
90
- import { isMultimodalBodyRejection as Wi, isRecoverableAssistantError as Gi } from "./shared/assistant/transportErrors.js";
91
- import { aiCreditsUpdatedEventName as Ki, dispatchAssistantQuotaExhausted as qi, notifyAiCreditsUpdated as Ji } from "./shared/assistant/aiCredits.js";
92
- import { useWorkspaceWriteAccess as Yi } from "./shared/assistant/useWorkspaceWriteAccess.js";
93
- import { extractDocumentText as Xi } from "./shared/assistant/documentExtract.js";
94
- import { useAssistantAttachments as Zi } from "./shared/assistant/useAssistantAttachments.js";
95
- import { AssistantComposer as Qi } from "./shared/assistant/ui/composer/AssistantComposer.js";
96
- import { isProdRuntime as $i } from "./shared/assistant/env.js";
97
- import { useAssistantHeartbeat as ea } from "./shared/assistant/useAssistantHeartbeat.js";
98
- import { useAssistantKeyboardShortcuts as ta } from "./shared/assistant/useAssistantKeyboardShortcuts.js";
99
- import { AssistantApiCallsConsentDialog as na } from "./shared/assistant/ui/AssistantApiCallsConsentDialog.js";
100
- import { AssistantChatArea as ra } from "./shared/assistant/ui/AssistantChatArea.js";
101
- import { AIAssistantPanel as ia } from "./shared/assistant/ui/AIAssistantPanel.js";
102
- export { ia as AIAssistantPanel, L as ASSISTANT_API_AUTH_STRATEGY, sn as ASSISTANT_LANGUAGES, vi as ASSISTANT_MODE_META, Kn as ATTACHMENT_ACCEPT, Hr as ATTACHMENT_SOURCES, Si as AUTO_VOICE, na as AssistantApiCallsConsentDialog, ii as AssistantAttachmentButton, ai as AssistantAttachmentChips, Jr as AssistantAutoSpeakToggle, ra as AssistantChatArea, Qi as AssistantComposer, ri as AssistantConnectSourceItem, ti as AssistantConnectSourceProvider, Li as AssistantConversationList, Ri as AssistantEmptyState, Ii as AssistantHeader, s as AssistantI18nProvider, Zr as AssistantLanguageMenu, gi as AssistantLanguageSelector, f as AssistantMarkdownImage, h as AssistantMarkdownRenderer, Yr as AssistantMessageAttachments, zi as AssistantMessageItem, Bi as AssistantMessageList, yi as AssistantModeSelector, Fi as AssistantMoreMenu, g as AssistantNavigateProvider, Xr as AssistantPendingWriteCard, hi as AssistantPreviewOverlay, oi as AssistantPreviewProvider, t as AssistantProductProvider, Qr as AssistantReplyLanguageSelector, _e as AssistantRuntimeManager, $r as AssistantSpeakButton, Ir as AssistantSpeechProvider, ei as AssistantSpokenTurnsNotice, Pr as AssistantToolActivity, xi as AssistantVoiceButton, wi as AssistantVoiceOrb, Ci as AssistantVoiceSelector, Vi as AssistantVoiceSession, Ti as AssistantVoiceSessionButton, qn as AttachmentRejectedError, En as BOILERPLATE_PAGE_SHARE, Ei as CAPTION_SCROLL_ATTR, O as CHECK_AI_CREDITS, k as CREATE_SANDBOX, zt as DEFAULT_SPEAKABLE_LABELS, cn as DEFAULT_SPEECH_RATE, ft as ENDPOINT_GRACE_MS, A as EXTEND_SANDBOX_TTL, _i as FOLLOW_APP_LOCALE, j as GET_ACTIVE_SANDBOXES, M as GET_SANDBOX, He as HOSTED_TTS_MAX_CHARS, Re as HOSTED_TTS_TIER, ze as HOSTED_VOICES, yn as IDLE_PLAYBACK, ci as IDLE_PREVIEW_STATE, pt as INITIAL_SESSION, Jn as INLINE_IMAGE_MAX_DIM, Yn as INLINE_IMAGE_QUALITY, mt as INTERRUPT_MAX_MS, ht as INTERRUPT_MIN_MS, Xn as MAX_ATTACHMENTS, Dn as MAX_BOILERPLATE_LINE_CHARS, On as MAX_EXTRACTED_CHARS, Zn as MAX_FILE_BYTES, Qn as MAX_INLINE_CHARS_PER_FILE, $n as MAX_INLINE_CHARS_TOTAL, wn as MAX_INLINE_IMAGE_BASE64_BYTES, er as MAX_INLINE_IMAGE_BASE64_CHARS, tr as MAX_INLINE_IMAGE_PARTS, nr as MAX_INLINE_TURN_BODY_BYTES, kn as MAX_PDF_PAGES_SCANNED, Tn as MAX_REQUEST_BODY_BYTES, Bt as MAX_SPEAKABLE_CHARS, Vt as MAX_SPOKEN_TABLE_ROWS, rr as MAX_TURN_BODY_BYTES, Zt as MINI_CAPTION_BUDGET, An as MIN_PAGE_TEXT_CHARS, jn as MIN_TEXT_PAGE_SHARE, ui as NO_PANEL_OVERLAY, Dr as PHRASE_ROTATE_MS, $t as POLL_FAST_MS, en as POLL_FAST_UNTIL_MS, tn as POLL_SLOW_MS, nn as POLL_STEADY_MS, rn as POLL_STEADY_UNTIL_MS, Yt as PREVIEW_LANGUAGES, ir as PROMPT_ENVELOPE_RESERVE_BYTES, N as PROXY_SANDBOX_REQUEST, P as REPORT_AI_TOKEN_USAGE, Gr as SANDBOX_READY_TTL_MS, gt as SILENCE_SUBMIT_MS, Ue as SPEAKING_RATE_MAX, We as SPEAKING_RATE_MAX_STREAMING, Ge as SPEAKING_RATE_MAX_SYNC, Ke as SPEAKING_RATE_MIN, Ht as SPEECH_CHUNK_CHARS, Ut as SPEECH_CHUNK_CJK_CHARS, wt as SPEECH_LANG, hn as SPOKEN_LABEL_LANGUAGES, Or as STAGE_COPY, F as STOP_ASSISTANT_SANDBOX, kr as THINKING_PHRASES, ar as TURN_BODY_HEADROOM_BYTES, Tt as VOICE_LIST_TIMEOUT_MS, Di as VoiceCaption, Oi as VoiceConversationView, Ai as VoiceMiniController, ji as VoiceStage, Mi as VoiceTranscriptDrawer, ki as VoiceWaveform, I as WAIT_FOR_SANDBOX_RUNNING, q as abortAssistantTurn, Ki as aiCreditsUpdatedEventName, J as approvePendingWrite, _ as assistantRoutePath, c as assistantTranslationKey, v as assistantUrlTransform, Ur as availableAttachmentSources, qe as base64ToBytes, y as browserShouldHandle, Le as browserSpeechEngine, Y as buildAssistantSandboxEnv, or as buildAttachmentPromptBlock, It as buildContinuedFromVoiceNote, ve as buildProgress, sr as buildPromptParts, X as buildPromptRequestBody, cr as buildPromptWithAttachments, Je as buildRequest, E as buildSandboxContextInput, Lt as buildVoiceTranscriptMarkdown, Ae as chatTurns, Z as checkAssistantAiCredits, Wt as chunkForSpeech, b as classifyAssistantHref, lr as classifyAttachment, Ye as classifyHttpFailure, S as classifyQuotaError, Mn as columnLetterToIndex, tt as configureSpeechEngine, Gt as containsCjk, d as copyToClipboard, ur as countInlineImageCandidates, dr as countInlinedImageParts, Q as createAssistantSandbox, $ as createAssistantSession, $e as createHostedTtsEngine, Kr as createReadinessTracker, et as createRoutingSpeechEngine, Oe as createSandboxAssistantTransport, nt as createSpeechEngines, Xe as decodeAudioResponse, Nn as decodeXmlEntities, C as describeQuotaError, fr as detectDocumentFormat, _n as detectScriptLocale, Wr as deviceHasCamera, qi as dispatchAssistantQuotaExhausted, Pn as docxXmlToText, ee as downloadAssistantArtifact, Ni as downloadFile, di as escapeDismisses, pr as estimateTurnBodyBytes, D as executeSandboxGraphQL, Pi as exportConversation, te as extendAssistantSandboxTTL, Xi as extractDocumentText, ln as findAssistantLanguage, ne as findExistingSandbox, pn as findPendingWrite, Fn as fitPdfPages, mr as formatBytes, In as formatPageRanges, zr as getActorId, re as getAssistantArtifacts, ye as getAssistantMedia, ie as getAssistantMessages, ae as getAssistantSession, oe as getAssistantStreamAccess, be as getAssistantText, hr as getAttachmentSendBlocker, U as getCapability, gr as getExtension, R as getImageForMode, z as getImageTagForMode, Br as getOrganizationId, xe as getRawMessageCreatedAt, B as getResourcesForMode, V as getSandboxImageRegistry, _r as getSendableAttachments, rt as getSpeechEngine, Se as getToolProgress, Vr as getWorkspaceId, je as groupBySession, Me as groupConsecutiveBySession, vr as hasAttachmentWorkInFlight, Be as hostedLocaleFor, Ve as hostedSupportsLanguage, p as imageHostLabel, _t as isCapturing, vt as isEcho, Ln as isMostlyImagePages, Wi as isMultimodalBodyRejection, $i as isProdRuntime, w as isQuotaExhaustedError, Ce as isReapedSandboxConnectionError, qr as isRecentlyVerified, we as isRecoverable, Gi as isRecoverableAssistantError, m as isRemoteImageSrc, bn as isSpeakingMessage, Et as isSpeechBlocked, Ar as isStageCopy, yt as isSubmittable, wr as isTurnInFlight, W as isUnknownFieldError, Ne as isVoiceTurn, Rn as joinSheets, Dt as languageDisplayName, Te as mapSessionToHistory, G as markSupported, K as markUnsupported, Ee as mergeMessagesById, ot as micIsInterrupt, se as modeRequiresConfirmWrites, bi as nextModeIndex, fi as nextPanelOverlays, li as nextPreviewEvents, Ot as normalizeLangTag, Ji as notifyAiCreditsUpdated, bt as orbMode, zn as pageMarker, mn as parseConfirmationRefusal, yr as parseDataUrl, Bn as parseSharedStrings, Fr as parseToolActivity, Vn as parseWorkbookSheets, Hn as pdfTextItemsToPage, Tr as planAbandonedTurn, xt as planReplyConsumption, Er as planTurnAbort, an as pollDelayMs, kt as primaryLanguageSubtag, xn as publishedChunks, T as quotaExhaustedEventName, it as readSpeechEngineConfig, ce as releaseSupersededAssistantSandboxes, dn as replyFollowsInput, le as reportAssistantAiTokenUsage, Sn as requiresCancel, at as resetSpeechEngine, un as resolveAssistantLanguage, fn as resolveLanguagePair, n as resolveModeConfig, H as resolveSandboxAssistantMode, vn as resolveSpeechLocale, De as sanitize, ue as selectExistingAssistantSandbox, de as selectSupersededAssistantSandboxes, At as selectVoiceForLocale, fe as sendAssistantPromptAsync, pe as sendHeartbeat, Un as sheetXmlToRows, Ze as shouldDisableEngine, Qt as showPreviousChunk, st as showsAssistantCaption, ct as showsUserCaption, Kt as speakableEmail, jt as speechGate, gn as speechLabelsFor, Mt as speechLangForLocale, Cn as speechPlaybackReducer, Qe as splitForVendor, qt as splitTableRow, St as spokenSoFar, jr as stageText, Mr as statusStageCopy, me as stopReapedAssistantSandbox, Wn as summarisePageText, Nr as thinkingPhrase, on as toCaptionText, br as toMessageAttachment, Jt as toSpeakableText, xr as truncateForInline, Gn as truncatePagesForInline, Hi as useAssistantApiAccess, Zi as useAssistantAttachments, ni as useAssistantConnectSource, ea as useAssistantHeartbeat, l as useAssistantI18nNamespace, ta as useAssistantKeyboardShortcuts, x as useAssistantNavigate, r as useAssistantPageLabel, si as useAssistantPreview, mi as useAssistantPreviewBridge, i as useAssistantProduct, a as useAssistantProductOrNull, Lr as useAssistantSpeech, o as useAssistantStorageFolders, Cr as useAssistantStore, u as useAssistantTr, Ui as useConversationTurns, pi as useOverlayFocus, ke as useSandboxAssistantTransport, e as useVoiceInput, Rr as useVoiceSession, Yi as useWorkspaceWriteAccess, Sr as validateFile, Nt as voiceAvailability, Pe as voiceMarker, Xt as voicePreviewText, Pt as voiceQualityRank, Fe as voiceSessionIdOf, Ct as voiceSessionReducer, lt as voiceStageState, Rt as voiceTranscriptFilename, Ie as voiceTurnsOnly, Ft as voicesForLocale, he as waitForAssistantServiceReady, ge as waitForSandboxRunning, ut as waveformIsActive, dt as waveformIsSettled };
64
+ import { ASSISTANT_PANEL_ATTR as ui, NO_PANEL_OVERLAY as di, assistantPanelOwnsEscape as fi, escapeDismisses as pi, focusIsInsidePanel as mi, nextPanelOverlays as hi } from "./shared/assistant/ui/panelOverlays.js";
65
+ import { useOverlayFocus as gi } from "./shared/assistant/ui/useOverlayFocus.js";
66
+ import { useAssistantPreviewBridge as _i } from "./shared/assistant/preview/useAssistantPreviewBridge.js";
67
+ import { AssistantPreviewOverlay as vi } from "./shared/assistant/preview/AssistantPreviewOverlay.js";
68
+ import { AssistantLanguageSelector as yi, FOLLOW_APP_LOCALE as bi } from "./shared/assistant/ui/composer/AssistantLanguageSelector.js";
69
+ import { ASSISTANT_MODE_META as xi, AssistantModeSelector as Si, nextModeIndex as Ci } from "./shared/assistant/ui/composer/AssistantModeSelector.js";
70
+ import { AssistantVoiceButton as wi } from "./shared/assistant/ui/composer/AssistantVoiceButton.js";
71
+ import { AUTO_VOICE as Ti, AssistantVoiceSelector as Ei } from "./shared/assistant/ui/composer/AssistantVoiceSelector.js";
72
+ import { AssistantVoiceOrb as Di } from "./shared/assistant/ui/voice/AssistantVoiceOrb.js";
73
+ import { AssistantVoiceSessionButton as Oi } from "./shared/assistant/ui/voice/AssistantVoiceSessionButton.js";
74
+ import { CAPTION_SCROLL_ATTR as ki, VoiceCaption as Ai } from "./shared/assistant/ui/voice/VoiceCaption.js";
75
+ import { VoiceConversationView as ji } from "./shared/assistant/ui/voice/VoiceConversationView.js";
76
+ import { VoiceWaveform as Mi } from "./shared/assistant/ui/voice/VoiceWaveform.js";
77
+ import { VoiceMiniController as Ni } from "./shared/assistant/ui/voice/VoiceMiniController.js";
78
+ import { VoiceStage as Pi } from "./shared/assistant/ui/voice/VoiceStage.js";
79
+ import { VoiceTranscriptDrawer as Fi } from "./shared/assistant/ui/voice/VoiceTranscriptDrawer.js";
80
+ import { downloadFile as Ii, exportConversation as Li } from "./shared/assistant/exportConversation.js";
81
+ import { AssistantMoreMenu as Ri } from "./shared/assistant/ui/AssistantMoreMenu.js";
82
+ import { AssistantHeader as zi } from "./shared/assistant/ui/AssistantHeader.js";
83
+ import { AssistantConversationList as Bi } from "./shared/assistant/ui/AssistantConversationList.js";
84
+ import { AssistantEmptyState as Vi } from "./shared/assistant/ui/AssistantEmptyState.js";
85
+ import { AssistantMessageItem as Hi } from "./shared/assistant/ui/AssistantMessageItem.js";
86
+ import { AssistantMessageList as Ui } from "./shared/assistant/ui/AssistantMessageList.js";
87
+ import { AssistantVoiceSession as Wi } from "./shared/assistant/ui/voice/AssistantVoiceSession.js";
88
+ import { useAssistantApiAccess as Gi } from "./shared/assistant/useAssistantApiAccess.js";
89
+ import { useConversationTurns as Ki } from "./shared/assistant/useConversationTurns.js";
90
+ import { isMultimodalBodyRejection as qi, isRecoverableAssistantError as Ji } from "./shared/assistant/transportErrors.js";
91
+ import { aiCreditsUpdatedEventName as Yi, dispatchAssistantQuotaExhausted as Xi, notifyAiCreditsUpdated as Zi } from "./shared/assistant/aiCredits.js";
92
+ import { useWorkspaceWriteAccess as Qi } from "./shared/assistant/useWorkspaceWriteAccess.js";
93
+ import { extractDocumentText as $i } from "./shared/assistant/documentExtract.js";
94
+ import { useAssistantAttachments as ea } from "./shared/assistant/useAssistantAttachments.js";
95
+ import { AssistantComposer as ta } from "./shared/assistant/ui/composer/AssistantComposer.js";
96
+ import { isProdRuntime as na } from "./shared/assistant/env.js";
97
+ import { useAssistantHeartbeat as ra } from "./shared/assistant/useAssistantHeartbeat.js";
98
+ import { useAssistantKeyboardShortcuts as ia } from "./shared/assistant/useAssistantKeyboardShortcuts.js";
99
+ import { AssistantApiCallsConsentDialog as aa } from "./shared/assistant/ui/AssistantApiCallsConsentDialog.js";
100
+ import { AssistantChatArea as oa } from "./shared/assistant/ui/AssistantChatArea.js";
101
+ import { AIAssistantPanel as sa } from "./shared/assistant/ui/AIAssistantPanel.js";
102
+ export { sa as AIAssistantPanel, L as ASSISTANT_API_AUTH_STRATEGY, sn as ASSISTANT_LANGUAGES, xi as ASSISTANT_MODE_META, ui as ASSISTANT_PANEL_ATTR, Kn as ATTACHMENT_ACCEPT, Hr as ATTACHMENT_SOURCES, Ti as AUTO_VOICE, aa as AssistantApiCallsConsentDialog, ii as AssistantAttachmentButton, ai as AssistantAttachmentChips, Jr as AssistantAutoSpeakToggle, oa as AssistantChatArea, ta as AssistantComposer, ri as AssistantConnectSourceItem, ti as AssistantConnectSourceProvider, Bi as AssistantConversationList, Vi as AssistantEmptyState, zi as AssistantHeader, s as AssistantI18nProvider, Zr as AssistantLanguageMenu, yi as AssistantLanguageSelector, f as AssistantMarkdownImage, h as AssistantMarkdownRenderer, Yr as AssistantMessageAttachments, Hi as AssistantMessageItem, Ui as AssistantMessageList, Si as AssistantModeSelector, Ri as AssistantMoreMenu, g as AssistantNavigateProvider, Xr as AssistantPendingWriteCard, vi as AssistantPreviewOverlay, oi as AssistantPreviewProvider, t as AssistantProductProvider, Qr as AssistantReplyLanguageSelector, _e as AssistantRuntimeManager, $r as AssistantSpeakButton, Ir as AssistantSpeechProvider, ei as AssistantSpokenTurnsNotice, Pr as AssistantToolActivity, wi as AssistantVoiceButton, Di as AssistantVoiceOrb, Ei as AssistantVoiceSelector, Wi as AssistantVoiceSession, Oi as AssistantVoiceSessionButton, qn as AttachmentRejectedError, En as BOILERPLATE_PAGE_SHARE, ki as CAPTION_SCROLL_ATTR, O as CHECK_AI_CREDITS, k as CREATE_SANDBOX, zt as DEFAULT_SPEAKABLE_LABELS, cn as DEFAULT_SPEECH_RATE, ft as ENDPOINT_GRACE_MS, A as EXTEND_SANDBOX_TTL, bi as FOLLOW_APP_LOCALE, j as GET_ACTIVE_SANDBOXES, M as GET_SANDBOX, He as HOSTED_TTS_MAX_CHARS, Re as HOSTED_TTS_TIER, ze as HOSTED_VOICES, yn as IDLE_PLAYBACK, ci as IDLE_PREVIEW_STATE, pt as INITIAL_SESSION, Jn as INLINE_IMAGE_MAX_DIM, Yn as INLINE_IMAGE_QUALITY, mt as INTERRUPT_MAX_MS, ht as INTERRUPT_MIN_MS, Xn as MAX_ATTACHMENTS, Dn as MAX_BOILERPLATE_LINE_CHARS, On as MAX_EXTRACTED_CHARS, Zn as MAX_FILE_BYTES, Qn as MAX_INLINE_CHARS_PER_FILE, $n as MAX_INLINE_CHARS_TOTAL, wn as MAX_INLINE_IMAGE_BASE64_BYTES, er as MAX_INLINE_IMAGE_BASE64_CHARS, tr as MAX_INLINE_IMAGE_PARTS, nr as MAX_INLINE_TURN_BODY_BYTES, kn as MAX_PDF_PAGES_SCANNED, Tn as MAX_REQUEST_BODY_BYTES, Bt as MAX_SPEAKABLE_CHARS, Vt as MAX_SPOKEN_TABLE_ROWS, rr as MAX_TURN_BODY_BYTES, Zt as MINI_CAPTION_BUDGET, An as MIN_PAGE_TEXT_CHARS, jn as MIN_TEXT_PAGE_SHARE, di as NO_PANEL_OVERLAY, Dr as PHRASE_ROTATE_MS, $t as POLL_FAST_MS, en as POLL_FAST_UNTIL_MS, tn as POLL_SLOW_MS, nn as POLL_STEADY_MS, rn as POLL_STEADY_UNTIL_MS, Yt as PREVIEW_LANGUAGES, ir as PROMPT_ENVELOPE_RESERVE_BYTES, N as PROXY_SANDBOX_REQUEST, P as REPORT_AI_TOKEN_USAGE, Gr as SANDBOX_READY_TTL_MS, gt as SILENCE_SUBMIT_MS, Ue as SPEAKING_RATE_MAX, We as SPEAKING_RATE_MAX_STREAMING, Ge as SPEAKING_RATE_MAX_SYNC, Ke as SPEAKING_RATE_MIN, Ht as SPEECH_CHUNK_CHARS, Ut as SPEECH_CHUNK_CJK_CHARS, wt as SPEECH_LANG, hn as SPOKEN_LABEL_LANGUAGES, Or as STAGE_COPY, F as STOP_ASSISTANT_SANDBOX, kr as THINKING_PHRASES, ar as TURN_BODY_HEADROOM_BYTES, Tt as VOICE_LIST_TIMEOUT_MS, Ai as VoiceCaption, ji as VoiceConversationView, Ni as VoiceMiniController, Pi as VoiceStage, Fi as VoiceTranscriptDrawer, Mi as VoiceWaveform, I as WAIT_FOR_SANDBOX_RUNNING, q as abortAssistantTurn, Yi as aiCreditsUpdatedEventName, J as approvePendingWrite, fi as assistantPanelOwnsEscape, _ as assistantRoutePath, c as assistantTranslationKey, v as assistantUrlTransform, Ur as availableAttachmentSources, qe as base64ToBytes, y as browserShouldHandle, Le as browserSpeechEngine, Y as buildAssistantSandboxEnv, or as buildAttachmentPromptBlock, It as buildContinuedFromVoiceNote, ve as buildProgress, sr as buildPromptParts, X as buildPromptRequestBody, cr as buildPromptWithAttachments, Je as buildRequest, E as buildSandboxContextInput, Lt as buildVoiceTranscriptMarkdown, Ae as chatTurns, Z as checkAssistantAiCredits, Wt as chunkForSpeech, b as classifyAssistantHref, lr as classifyAttachment, Ye as classifyHttpFailure, S as classifyQuotaError, Mn as columnLetterToIndex, tt as configureSpeechEngine, Gt as containsCjk, d as copyToClipboard, ur as countInlineImageCandidates, dr as countInlinedImageParts, Q as createAssistantSandbox, $ as createAssistantSession, $e as createHostedTtsEngine, Kr as createReadinessTracker, et as createRoutingSpeechEngine, Oe as createSandboxAssistantTransport, nt as createSpeechEngines, Xe as decodeAudioResponse, Nn as decodeXmlEntities, C as describeQuotaError, fr as detectDocumentFormat, _n as detectScriptLocale, Wr as deviceHasCamera, Xi as dispatchAssistantQuotaExhausted, Pn as docxXmlToText, ee as downloadAssistantArtifact, Ii as downloadFile, pi as escapeDismisses, pr as estimateTurnBodyBytes, D as executeSandboxGraphQL, Li as exportConversation, te as extendAssistantSandboxTTL, $i as extractDocumentText, ln as findAssistantLanguage, ne as findExistingSandbox, pn as findPendingWrite, Fn as fitPdfPages, mi as focusIsInsidePanel, mr as formatBytes, In as formatPageRanges, zr as getActorId, re as getAssistantArtifacts, ye as getAssistantMedia, ie as getAssistantMessages, ae as getAssistantSession, oe as getAssistantStreamAccess, be as getAssistantText, hr as getAttachmentSendBlocker, U as getCapability, gr as getExtension, R as getImageForMode, z as getImageTagForMode, Br as getOrganizationId, xe as getRawMessageCreatedAt, B as getResourcesForMode, V as getSandboxImageRegistry, _r as getSendableAttachments, rt as getSpeechEngine, Se as getToolProgress, Vr as getWorkspaceId, je as groupBySession, Me as groupConsecutiveBySession, vr as hasAttachmentWorkInFlight, Be as hostedLocaleFor, Ve as hostedSupportsLanguage, p as imageHostLabel, _t as isCapturing, vt as isEcho, Ln as isMostlyImagePages, qi as isMultimodalBodyRejection, na as isProdRuntime, w as isQuotaExhaustedError, Ce as isReapedSandboxConnectionError, qr as isRecentlyVerified, we as isRecoverable, Ji as isRecoverableAssistantError, m as isRemoteImageSrc, bn as isSpeakingMessage, Et as isSpeechBlocked, Ar as isStageCopy, yt as isSubmittable, wr as isTurnInFlight, W as isUnknownFieldError, Ne as isVoiceTurn, Rn as joinSheets, Dt as languageDisplayName, Te as mapSessionToHistory, G as markSupported, K as markUnsupported, Ee as mergeMessagesById, ot as micIsInterrupt, se as modeRequiresConfirmWrites, Ci as nextModeIndex, hi as nextPanelOverlays, li as nextPreviewEvents, Ot as normalizeLangTag, Zi as notifyAiCreditsUpdated, bt as orbMode, zn as pageMarker, mn as parseConfirmationRefusal, yr as parseDataUrl, Bn as parseSharedStrings, Fr as parseToolActivity, Vn as parseWorkbookSheets, Hn as pdfTextItemsToPage, Tr as planAbandonedTurn, xt as planReplyConsumption, Er as planTurnAbort, an as pollDelayMs, kt as primaryLanguageSubtag, xn as publishedChunks, T as quotaExhaustedEventName, it as readSpeechEngineConfig, ce as releaseSupersededAssistantSandboxes, dn as replyFollowsInput, le as reportAssistantAiTokenUsage, Sn as requiresCancel, at as resetSpeechEngine, un as resolveAssistantLanguage, fn as resolveLanguagePair, n as resolveModeConfig, H as resolveSandboxAssistantMode, vn as resolveSpeechLocale, De as sanitize, ue as selectExistingAssistantSandbox, de as selectSupersededAssistantSandboxes, At as selectVoiceForLocale, fe as sendAssistantPromptAsync, pe as sendHeartbeat, Un as sheetXmlToRows, Ze as shouldDisableEngine, Qt as showPreviousChunk, st as showsAssistantCaption, ct as showsUserCaption, Kt as speakableEmail, jt as speechGate, gn as speechLabelsFor, Mt as speechLangForLocale, Cn as speechPlaybackReducer, Qe as splitForVendor, qt as splitTableRow, St as spokenSoFar, jr as stageText, Mr as statusStageCopy, me as stopReapedAssistantSandbox, Wn as summarisePageText, Nr as thinkingPhrase, on as toCaptionText, br as toMessageAttachment, Jt as toSpeakableText, xr as truncateForInline, Gn as truncatePagesForInline, Gi as useAssistantApiAccess, ea as useAssistantAttachments, ni as useAssistantConnectSource, ra as useAssistantHeartbeat, l as useAssistantI18nNamespace, ia as useAssistantKeyboardShortcuts, x as useAssistantNavigate, r as useAssistantPageLabel, si as useAssistantPreview, _i as useAssistantPreviewBridge, i as useAssistantProduct, a as useAssistantProductOrNull, Lr as useAssistantSpeech, o as useAssistantStorageFolders, Cr as useAssistantStore, u as useAssistantTr, Ki as useConversationTurns, gi as useOverlayFocus, ke as useSandboxAssistantTransport, e as useVoiceInput, Rr as useVoiceSession, Qi as useWorkspaceWriteAccess, Sr as validateFile, Nt as voiceAvailability, Pe as voiceMarker, Xt as voicePreviewText, Pt as voiceQualityRank, Fe as voiceSessionIdOf, Ct as voiceSessionReducer, lt as voiceStageState, Rt as voiceTranscriptFilename, Ie as voiceTurnsOnly, Ft as voicesForLocale, he as waitForAssistantServiceReady, ge as waitForSandboxRunning, ut as waveformIsActive, dt as waveformIsSettled };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/fe-libs",
3
- "version": "2026.911.4",
3
+ "version": "2026.911.5",
4
4
  "description": "Burdenoff frontend primitives and domain libraries",
5
5
  "type": "module",
6
6
  "bin": {