@burdenoff/fe-libs 2026.915.2 → 2026.915.3

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.
@@ -204,6 +204,8 @@ export declare const ASSISTANT_I18N_LITERAL_COPY: {
204
204
  readonly "message.stopSpeakingShort": "Stop";
205
205
  readonly "messageList.ariaLabel": "Conversation messages";
206
206
  readonly "modeSelector.ariaLabel": "Select assistant mode";
207
+ readonly "overlay.launcher": "AI Assistant";
208
+ readonly "overlay.launcherTitle": "AI Assistant ({{shortcut}})";
207
209
  readonly "panel.ariaLabel": "AI Assistant";
208
210
  readonly "pendingWrite.approve": "Approve this change";
209
211
  readonly "pendingWrite.approvedPrompt": "I approved that change — go ahead.";
@@ -216,6 +218,8 @@ export declare const ASSISTANT_I18N_LITERAL_COPY: {
216
218
  readonly "preview.close": "Close preview";
217
219
  readonly "preview.failed": "The preview could not be displayed.";
218
220
  readonly "preview.title": "Preview";
221
+ readonly "sheet.collapse": "Shrink the assistant";
222
+ readonly "sheet.expand": "Expand the assistant";
219
223
  readonly "speech.codeBlock": "Code block";
220
224
  readonly "speech.emailAt": "at";
221
225
  readonly "speech.emailDot": "dot";
@@ -1 +1 @@
1
- {"version":3,"file":"i18nManifest.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/i18nManifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAQ1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyGG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuMG,CAAC;AAE5C,mDAAmD;AACnD,MAAM,MAAM,uBAAuB,GAAG,MAAM,OAAO,2BAA2B,CAAC;AAW/E;;;GAGG;AACH,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBtE,CAAC;AAEL;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIjE,CAAC;AAEL,kEAAkE;AAClE,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC;AAEhF;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,uBAAuB,EAAE,GACxC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOxB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC9C,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiCzB"}
1
+ {"version":3,"file":"i18nManifest.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/i18nManifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAQ1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyGG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2MG,CAAC;AAE5C,mDAAmD;AACnD,MAAM,MAAM,uBAAuB,GAAG,MAAM,OAAO,2BAA2B,CAAC;AAW/E;;;GAGG;AACH,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBtE,CAAC;AAEL;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIjE,CAAC;AAEL,kEAAkE;AAClE,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC;AAEhF;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,uBAAuB,EAAE,GACxC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOxB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC9C,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiCzB"}
@@ -98,6 +98,8 @@ var l = {
98
98
  "message.stopSpeakingShort": "Stop",
99
99
  "messageList.ariaLabel": "Conversation messages",
100
100
  "modeSelector.ariaLabel": "Select assistant mode",
101
+ "overlay.launcher": "AI Assistant",
102
+ "overlay.launcherTitle": "AI Assistant ({{shortcut}})",
101
103
  "panel.ariaLabel": "AI Assistant",
102
104
  "pendingWrite.approve": "Approve this change",
103
105
  "pendingWrite.approvedPrompt": "I approved that change — go ahead.",
@@ -110,6 +112,8 @@ var l = {
110
112
  "preview.close": "Close preview",
111
113
  "preview.failed": "The preview could not be displayed.",
112
114
  "preview.title": "Preview",
115
+ "sheet.collapse": "Shrink the assistant",
116
+ "sheet.expand": "Expand the assistant",
113
117
  "speech.codeBlock": "Code block",
114
118
  "speech.emailAt": "at",
115
119
  "speech.emailDot": "dot",
@@ -154,4 +154,6 @@ export * from './useAssistantKeyboardShortcuts';
154
154
  export * from './ui/AssistantApiCallsConsentDialog';
155
155
  export * from './ui/AssistantChatArea';
156
156
  export * from './ui/AIAssistantPanel';
157
+ export * from './ui/assistantOverlayState';
158
+ export * from './ui/AssistantOverlay';
157
159
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ import { ReactNode } from 'react';
2
+ import { QuotaKind } from '../quota';
3
+ import { AIAssistantPanelProps } from './AIAssistantPanel';
4
+ import { AssistantNavigate } from './AssistantMarkdownRenderer';
5
+ import { AssistantOverlayKeys } from './assistantOverlayState';
6
+ export interface AssistantOverlayContextValue {
7
+ isOpen: boolean;
8
+ open: () => void;
9
+ close: () => void;
10
+ toggle: () => void;
11
+ docked: boolean;
12
+ toggleDock: () => void;
13
+ /** Width the docked panel takes from the page right now, in px (0 if none). */
14
+ dockWidthPx: number;
15
+ keys: AssistantOverlayKeys;
16
+ }
17
+ /** The overlay state in force, or null when no provider is mounted. */
18
+ export declare function useAssistantOverlayOrNull(): AssistantOverlayContextValue | null;
19
+ /**
20
+ * Width, in px, the docked assistant takes from the right of the page — 0 when
21
+ * it is closed, floating, on a phone, or not mounted at all. The same value is
22
+ * published as `var(--assistant-dock-width)` on `<html>` for CSS consumers.
23
+ */
24
+ export declare function useAssistantDockWidth(): number;
25
+ /**
26
+ * Listen for `<product>:quota-exhausted` and hand each wall to the product.
27
+ *
28
+ * ★ The handler is read through a ref, so the listener is registered ONCE per
29
+ * product id. Re-subscribing whenever a product passes a fresh inline function
30
+ * would drop an event that arrived between the cleanup and the new listener.
31
+ *
32
+ * Called synchronously at dispatch. A product that must first see whether some
33
+ * other dialog claims the wall (by deferring a tick, as a product microfrontend
34
+ * might) does that inside its handler.
35
+ */
36
+ export declare function useAssistantQuotaExhausted(product: string | null, onExhausted: (kind: QuotaKind, event: Event) => void): void;
37
+ export interface AssistantOverlayProviderProps {
38
+ /**
39
+ * Short product prefix for the toggle event and the storage keys — see
40
+ * `assistantOverlayKeys`. A host adopting this overlay keeps its existing
41
+ * prefix, so remembered state and existing dispatchers carry over.
42
+ */
43
+ keyPrefix: string;
44
+ /**
45
+ * Forward the assistant's quota walls to the product's own upgrade UI.
46
+ * `product` is the id the assistant dispatches under (the
47
+ * `AssistantProductProvider` id). Absent, nothing listens.
48
+ */
49
+ quota?: {
50
+ product: string;
51
+ onExhausted: (kind: QuotaKind, event: Event) => void;
52
+ };
53
+ children: ReactNode;
54
+ }
55
+ /**
56
+ * Owns whether the assistant is open and docked, for the whole shell.
57
+ *
58
+ * ★★ Storage is written AFTER React commits, from one effect per value, never
59
+ * inside a state updater. An updater must be pure — React may call it more than
60
+ * once for one update, and Strict Mode does so on purpose — and one effect per
61
+ * value catches every way it changes (launcher, shortcut, toggle event, Escape,
62
+ * the panel's own close and dock buttons) without each path remembering to
63
+ * persist.
64
+ *
65
+ * Mount ONE per page: the published dock width is a single `<html>` variable.
66
+ */
67
+ export declare function AssistantOverlayProvider({ keyPrefix, quota, children, }: AssistantOverlayProviderProps): import("react/jsx-runtime").JSX.Element;
68
+ /** What the overlay hands the panel it renders. */
69
+ export interface AssistantOverlayPanelProps {
70
+ panelId: string;
71
+ visible: boolean;
72
+ onClose: () => void;
73
+ docked: boolean;
74
+ onToggleDock: () => void;
75
+ onNavigate?: AssistantNavigate;
76
+ }
77
+ export interface AssistantOverlayProps {
78
+ /** Panel id handed to the panel. */
79
+ panelId?: string;
80
+ /**
81
+ * Extra props for the default `AIAssistantPanel` — `writeAccess`,
82
+ * `connectSourceHref`, `preview`. The overlay's own props always win.
83
+ */
84
+ panelProps?: Omit<AIAssistantPanelProps, keyof AssistantOverlayPanelProps>;
85
+ /**
86
+ * Render something other than the shared `AIAssistantPanel` — a product
87
+ * wrapper around it. Receives the props the overlay owns; spread them.
88
+ */
89
+ renderPanel?: (props: AssistantOverlayPanelProps) => ReactNode;
90
+ /**
91
+ * The product router's navigate. When given, links in replies route in-app;
92
+ * when absent, they stay ordinary anchors.
93
+ */
94
+ navigate?: (path: string) => void;
95
+ /** Paths rendered without the shell hosting this overlay: opened in a new tab. */
96
+ isShellLessTarget?: (path: string) => boolean;
97
+ /** Top of the docked side panel, below the product's header. Default 56. */
98
+ topOffsetPx?: number;
99
+ /** Launcher icon. Default: a sparkles glyph. */
100
+ launcherIcon?: ReactNode;
101
+ /** Launcher's inset above the bottom chrome. Default `1.5rem`. */
102
+ launcherBottomInset?: string;
103
+ /** Hide the launcher when the product opens the assistant from its own chrome. */
104
+ showLauncher?: boolean;
105
+ }
106
+ /**
107
+ * The launcher and the window. Renders nothing without an
108
+ * `AssistantOverlayProvider` above it — there is no state to show.
109
+ */
110
+ export declare function AssistantOverlay(props: AssistantOverlayProps): import("react/jsx-runtime").JSX.Element | null;
111
+ //# sourceMappingURL=AssistantOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssistantOverlay.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantOverlay.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAUL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG1C,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,EAmBL,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,+EAA+E;IAC/E,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,oBAAoB,CAAC;CAC5B;AAID,uEAAuE;AACvE,wBAAgB,yBAAyB,IAAI,4BAA4B,GAAG,IAAI,CAE/E;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AA6BD;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GACnD,IAAI,CAaN;AAID,MAAM,WAAW,6BAA6B;IAC5C;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;KACtD,CAAC;IACF,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,SAAS,EACT,KAAK,EACL,QAAQ,GACT,EAAE,6BAA6B,2CAkE/B;AAED,mDAAmD;AACnD,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,MAAM,WAAW,qBAAqB;IACpC,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,UAAU,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,0BAA0B,CAAC,CAAC;IAC3E;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,SAAS,CAAC;IAC/D;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,kEAAkE;IAClE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kFAAkF;IAClF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAOD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,kDAI5D"}
@@ -0,0 +1,171 @@
1
+ import { useAssistantTr as e } from "../i18n.js";
2
+ import { quotaExhaustedEventName as t } from "../quota.js";
3
+ import { assistantPanelOwnsEscape as n } from "./panelOverlays.js";
4
+ import { AIAssistantPanel as r } from "./AIAssistantPanel.js";
5
+ import { ASSISTANT_DOCK_WIDTH_VAR as i, ASSISTANT_OVERLAY_DESKTOP_QUERY as a, ASSISTANT_OVERLAY_TOP_VAR as o, aboveAssistantBottomChrome as s, assistantOverlayClassName as c, assistantOverlayEscapeAction as l, assistantOverlayKeys as u, assistantQuotaKindOf as d, createAssistantNavigate as f, isAssistantToggleShortcut as p, nextAssistantOpenState as m, publishedAssistantDockWidth as h, readAssistantOverlayFlag as g, requestedAssistantOpenState as _, writeAssistantOverlayFlag as v } from "./assistantOverlayState.js";
6
+ import { createContext as y, useCallback as b, useContext as x, useEffect as S, useMemo as C, useRef as w, useState as T, useSyncExternalStore as E } from "react";
7
+ import { Sparkles as D } from "lucide-react";
8
+ import { Fragment as O, jsx as k, jsxs as A } from "react/jsx-runtime";
9
+ //#region src/shared/assistant/ui/AssistantOverlay.tsx
10
+ var j = y(null);
11
+ function M() {
12
+ return x(j);
13
+ }
14
+ function N() {
15
+ return x(j)?.dockWidthPx ?? 0;
16
+ }
17
+ var P = () => typeof window > "u" ? void 0 : window.sessionStorage, F = () => typeof window > "u" ? void 0 : window.localStorage;
18
+ function I(e) {
19
+ if (typeof window > "u" || typeof window.matchMedia != "function") return () => {};
20
+ let t = window.matchMedia(a);
21
+ return t.addEventListener("change", e), () => t.removeEventListener("change", e);
22
+ }
23
+ function L() {
24
+ return typeof window < "u" && typeof window.matchMedia == "function" && window.matchMedia("(min-width: 640px)").matches;
25
+ }
26
+ function R() {
27
+ return E(I, L, () => !1);
28
+ }
29
+ function z(e, n) {
30
+ let r = w(n);
31
+ S(() => {
32
+ r.current = n;
33
+ }, [n]), S(() => {
34
+ if (!e || typeof window > "u") return;
35
+ let n = t(e), i = (e) => r.current(d(e), e);
36
+ return window.addEventListener(n, i), () => window.removeEventListener(n, i);
37
+ }, [e]);
38
+ }
39
+ var B = () => {};
40
+ function V({ keyPrefix: e, quota: t, children: n }) {
41
+ let r = C(() => u(e), [e]), [a, o] = T(() => g(P, r.openStorageKey)), [s, c] = T(() => g(F, r.dockStorageKey)), l = b(() => o(!0), []), d = b(() => o(!1), []), f = b(() => o((e) => !e), []), y = b(() => c((e) => !e), []);
42
+ S(() => {
43
+ v(P, r.openStorageKey, a);
44
+ }, [r.openStorageKey, a]), S(() => {
45
+ v(F, r.dockStorageKey, s);
46
+ }, [r.dockStorageKey, s]), S(() => {
47
+ if (typeof window > "u") return;
48
+ let e = (e) => {
49
+ let t = _(e);
50
+ o((e) => m(e, t));
51
+ };
52
+ return window.addEventListener(r.toggleEvent, e), () => window.removeEventListener(r.toggleEvent, e);
53
+ }, [r.toggleEvent]), S(() => {
54
+ if (typeof document > "u") return;
55
+ let e = (e) => {
56
+ p(e) && (e.preventDefault(), o((e) => !e));
57
+ };
58
+ return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
59
+ }, []), z(t?.product ?? null, t?.onExhausted ?? B);
60
+ let x = h({
61
+ isOpen: a,
62
+ docked: s,
63
+ isDesktop: R()
64
+ });
65
+ S(() => {
66
+ if (typeof document > "u") return;
67
+ let e = document.documentElement.style;
68
+ return e.setProperty(i, `${x}px`), () => {
69
+ e.removeProperty(i);
70
+ };
71
+ }, [x]);
72
+ let w = C(() => ({
73
+ isOpen: a,
74
+ open: l,
75
+ close: d,
76
+ toggle: f,
77
+ docked: s,
78
+ toggleDock: y,
79
+ dockWidthPx: x,
80
+ keys: r
81
+ }), [
82
+ a,
83
+ l,
84
+ d,
85
+ f,
86
+ s,
87
+ y,
88
+ x,
89
+ r
90
+ ]);
91
+ return /* @__PURE__ */ k(j.Provider, {
92
+ value: w,
93
+ children: n
94
+ });
95
+ }
96
+ var H = (e, t) => /* @__PURE__ */ k(r, {
97
+ ...e,
98
+ ...t
99
+ });
100
+ function U(e) {
101
+ let t = M();
102
+ return t ? /* @__PURE__ */ k(W, {
103
+ state: t,
104
+ ...e
105
+ }) : null;
106
+ }
107
+ function W({ state: t, panelId: r = "ai-assistant", panelProps: i, renderPanel: a, navigate: u, isShellLessTarget: d, topOffsetPx: p = 56, launcherIcon: m, launcherBottomInset: h = "1.5rem", showLauncher: g = !0 }) {
108
+ let { isOpen: _, close: v, toggle: y, docked: b, toggleDock: x } = t, w = e(), [E, j] = T(!1), M = C(() => u ? f({
109
+ navigate: u,
110
+ isShellLessTarget: d,
111
+ isDesktop: L,
112
+ collapseSheet: () => j(!1),
113
+ openInNewTab: (e) => window.open(e, "_blank", "noopener,noreferrer")
114
+ }) : void 0, [u, d]);
115
+ S(() => {
116
+ if (!_) return;
117
+ let e = (e) => {
118
+ l({
119
+ key: e.key,
120
+ isOpen: _,
121
+ dialogOpen: document.querySelector("[role=\"dialog\"],[role=\"alertdialog\"],dialog[open]") !== null,
122
+ panelOwnsEscape: n()
123
+ }) === "close" && (e.preventDefault(), v());
124
+ };
125
+ return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
126
+ }, [_, v]);
127
+ let N = {
128
+ panelId: r,
129
+ visible: !0,
130
+ onClose: v,
131
+ docked: b,
132
+ onToggleDock: x,
133
+ onNavigate: M
134
+ }, P = w("overlay.launcher", "AI Assistant"), F = { [o]: `${p}px` };
135
+ return /* @__PURE__ */ A(O, { children: [_ && /* @__PURE__ */ A("div", {
136
+ className: c({
137
+ expanded: E,
138
+ docked: b
139
+ }),
140
+ style: F,
141
+ "data-testid": "assistant-overlay",
142
+ children: [/* @__PURE__ */ k("button", {
143
+ type: "button",
144
+ onClick: () => j((e) => !e),
145
+ className: "flex w-full shrink-0 justify-center pt-2 pb-1 sm:hidden",
146
+ "aria-label": E ? w("sheet.collapse", "Shrink the assistant") : w("sheet.expand", "Expand the assistant"),
147
+ "aria-expanded": E,
148
+ "data-testid": "assistant-sheet-handle",
149
+ children: /* @__PURE__ */ k("span", { className: "h-1.5 w-10 rounded-full bg-border-strong" })
150
+ }), /* @__PURE__ */ k("div", {
151
+ className: "flex min-h-0 flex-1 flex-col",
152
+ children: a ? a(N) : H(i, N)
153
+ })]
154
+ }), g && /* @__PURE__ */ k("button", {
155
+ type: "button",
156
+ onClick: y,
157
+ title: w("overlay.launcherTitle", "AI Assistant ({{shortcut}})", { shortcut: "Ctrl+Shift+A" }),
158
+ "aria-label": P,
159
+ "aria-haspopup": "dialog",
160
+ "aria-expanded": _,
161
+ "data-testid": "assistant-fab",
162
+ style: { bottom: s(h) },
163
+ className: "fixed right-6 z-30 size-14 items-center justify-center rounded-full border border-border-strong bg-[var(--color-accent-soft)] text-action-primary-bg shadow-float transition-colors duration-200 hover:border-action-primary-bg focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)] cursor-pointer " + (_ ? "hidden sm:inline-flex" : "inline-flex"),
164
+ children: m ?? /* @__PURE__ */ k(D, {
165
+ className: "size-6",
166
+ "aria-hidden": "true"
167
+ })
168
+ })] });
169
+ }
170
+ //#endregion
171
+ export { U as AssistantOverlay, V as AssistantOverlayProvider, N as useAssistantDockWidth, M as useAssistantOverlayOrNull, z as useAssistantQuotaExhausted };
@@ -0,0 +1,184 @@
1
+ import { QuotaKind } from '../quota';
2
+ /** The window event, and the two storage keys, one overlay instance owns. */
3
+ export interface AssistantOverlayKeys {
4
+ /** Window event that opens, closes or toggles the overlay. */
5
+ toggleEvent: string;
6
+ /** sessionStorage key for open/closed. */
7
+ openStorageKey: string;
8
+ /** localStorage key for docked/floating. */
9
+ dockStorageKey: string;
10
+ }
11
+ /**
12
+ * The keys for a product prefix.
13
+ *
14
+ * ★★ Byte-compatible with what the host apps already persist and dispatch: a
15
+ * prefix of `hb` gives `hb:toggle-ai-assistant`, `hb:ai-panel:isOpen` and
16
+ * `hb:ai-panel:docked`, exactly the strings those apps ship today. A host that
17
+ * adopts this overlay with its existing prefix therefore keeps every user's
18
+ * remembered dock choice and every dispatcher of its toggle event — no
19
+ * migration, and nothing to re-seed.
20
+ */
21
+ export declare function assistantOverlayKeys(prefix: string): AssistantOverlayKeys;
22
+ /**
23
+ * What a toggle event asks for: `detail.open` `true` opens, `false` closes, and
24
+ * anything else — no detail, no `open`, a non-boolean, a plain `Event` — is a
25
+ * toggle (`null`).
26
+ *
27
+ * ★★ `open: true` must NOT toggle. A "Get help" button dispatches it while the
28
+ * panel may already be open; toggling there closes the panel — unmounting it,
29
+ * and any turn in flight — at the moment the user asked for help.
30
+ */
31
+ export declare function requestedAssistantOpenState(event: Event): boolean | null;
32
+ /** The open state after a request: an explicit value wins, `null` toggles. */
33
+ export declare function nextAssistantOpenState(current: boolean, requested: boolean | null): boolean;
34
+ /** The chord a user sees in the launcher's tooltip. */
35
+ export declare const ASSISTANT_TOGGLE_SHORTCUT_LABEL = "Ctrl+Shift+A";
36
+ /**
37
+ * Ctrl+Shift+A, or Cmd+Shift+A on a Mac.
38
+ *
39
+ * ★ The key is lower-cased: with Shift held most layouts report `"A"`, but a
40
+ * layout with Caps Lock on, or a synthetic event, reports `"a"`. Matching only
41
+ * the upper case made the shortcut silently dead there.
42
+ */
43
+ export declare function isAssistantToggleShortcut(event: Pick<KeyboardEvent, 'key' | 'ctrlKey' | 'metaKey' | 'shiftKey'>): boolean;
44
+ /**
45
+ * A dialog that owns its own Escape.
46
+ *
47
+ * ★★ `dialog[open]` as well as the roles: a native `<dialog>` opened with
48
+ * `showModal()` has an IMPLICIT dialog role, and `[role="dialog"]` is an
49
+ * attribute selector that does not match it — so Escape dismissed the modal
50
+ * AND closed the assistant underneath it.
51
+ */
52
+ export declare const ASSISTANT_DIALOG_SELECTOR = "[role=\"dialog\"],[role=\"alertdialog\"],dialog[open]";
53
+ export type AssistantOverlayEscapeAction = 'close' | 'ignore';
54
+ /**
55
+ * What the overlay does with a key press, given who else wants Escape.
56
+ *
57
+ * ★★★ Escape closes ONE thing. Two owners outrank the overlay, in this order:
58
+ *
59
+ * - an open dialog (the consent dialog, a product's native modal) handles its
60
+ * own Escape; closing the assistant under it dismisses two things at once;
61
+ * - the panel itself, when `assistantPanelOwnsEscape()` says so — one of its
62
+ * full-surface overlays is showing and holds focus. The panel's listener is
63
+ * on the same `document` node, so `stopPropagation` there cannot stop this
64
+ * one; ownership has to be decided by STATE, not by listener order.
65
+ *
66
+ * Only when neither claims the key does the overlay close.
67
+ */
68
+ export declare function assistantOverlayEscapeAction(input: {
69
+ key: string;
70
+ isOpen: boolean;
71
+ dialogOpen: boolean;
72
+ panelOwnsEscape: boolean;
73
+ }): AssistantOverlayEscapeAction;
74
+ /**
75
+ * How far a bottom-anchored control must sit to clear the fixed chrome along
76
+ * the bottom edge.
77
+ *
78
+ * ★★ The LARGER of the tab bar and the safe area, never their sum. The shell's
79
+ * `MobileTabBar` publishes its measured height as `--mobile-tabbar-height`, and
80
+ * that height already includes its own safe-area padding — so adding the safe
81
+ * area again lifts the launcher a second home-indicator's height on a notched
82
+ * phone. Where there is no tab bar the variable is 0px and the safe area wins.
83
+ */
84
+ export declare const ASSISTANT_BOTTOM_CHROME_CLEARANCE = "max(var(--mobile-tabbar-height, 0px), var(--safe-bottom, 0px), env(safe-area-inset-bottom, 0px))";
85
+ /**
86
+ * A CSS `bottom` value `inset` above whatever bottom chrome is showing.
87
+ *
88
+ * Exported for hosts that stack their own floating controls above the launcher
89
+ * (a page-discussion button, say): lifting only the launcher slides it into
90
+ * whatever sat above it.
91
+ */
92
+ export declare function aboveAssistantBottomChrome(inset: string): string;
93
+ /** Width of the docked side panel. Must match `sm:w-[440px]` below. */
94
+ export declare const ASSISTANT_DOCK_WIDTH_PX = 440;
95
+ /**
96
+ * CSS custom property on `<html>` carrying the docked panel's width (`440px`
97
+ * while docked and open on a desktop viewport, `0px` otherwise). A product's
98
+ * own right-hand surface (a preview pane) pads by it to stay clear of the dock.
99
+ */
100
+ export declare const ASSISTANT_DOCK_WIDTH_VAR = "--assistant-dock-width";
101
+ /** CSS custom property on the sheet carrying the docked panel's top offset. */
102
+ export declare const ASSISTANT_OVERLAY_TOP_VAR = "--assistant-overlay-top";
103
+ /** Default top offset for the docked panel: a 3.5rem (56px) shell header. */
104
+ export declare const ASSISTANT_OVERLAY_DEFAULT_TOP_PX = 56;
105
+ /**
106
+ * Where the layout switches from the phone sheet to the desktop window.
107
+ * Must agree with the `sm:` prefix on every desktop class below.
108
+ */
109
+ export declare const ASSISTANT_OVERLAY_DESKTOP_QUERY = "(min-width: 640px)";
110
+ /** The dock width actually taken from the page right now, in px. */
111
+ export declare function publishedAssistantDockWidth(input: {
112
+ isOpen: boolean;
113
+ docked: boolean;
114
+ isDesktop: boolean;
115
+ }): number;
116
+ /**
117
+ * Shared by every layout. On a phone: a full-width bottom sheet with a rounded
118
+ * top edge. ★ No height here — see the two below.
119
+ */
120
+ export declare const ASSISTANT_SHEET_BASE_CLASS: string;
121
+ /** Phone: opens COMPACT, leaving the page visible above it. */
122
+ export declare const ASSISTANT_SHEET_COMPACT_CLASS = "h-[60vh] max-h-[60vh]";
123
+ /** Phone, expanded from the grab handle. */
124
+ export declare const ASSISTANT_SHEET_EXPANDED_CLASS = "h-[88vh] max-h-[88vh]";
125
+ /** Desktop floating window, rising from the launcher, clamped to the viewport. */
126
+ export declare const ASSISTANT_FLOATING_DESKTOP_CLASS: string;
127
+ /**
128
+ * Desktop docked side panel, from below the shell header to the bottom edge.
129
+ * The top is a variable so a product with a different header height sets
130
+ * `topOffsetPx` instead of forking the class.
131
+ */
132
+ export declare const ASSISTANT_DOCKED_DESKTOP_CLASS: string;
133
+ /**
134
+ * The sheet's class for a layout.
135
+ *
136
+ * ★★ Both layout axes select a CLASS on one persistent element — never a mount.
137
+ * The in-flight turn, draft attachments, microphone capture, TTS playback and
138
+ * the voice session id all live in React state below it, so a conditional
139
+ * mount or a changing `key` for dock or expand would reset every one of them.
140
+ */
141
+ export declare function assistantOverlayClassName(input: {
142
+ expanded: boolean;
143
+ docked: boolean;
144
+ }): string;
145
+ export interface AssistantNavigateOptions {
146
+ /** The product router's navigate, e.g. React Router's `useNavigate()`. */
147
+ navigate: (path: string) => void;
148
+ /**
149
+ * Paths the product renders WITHOUT the shell that hosts this overlay — auth
150
+ * screens, invite acceptance, public portals. Pass the same predicate the
151
+ * shell itself uses to decide, or the two will disagree.
152
+ */
153
+ isShellLessTarget?: (path: string) => boolean;
154
+ /** Is the desktop layout showing? */
155
+ isDesktop: () => boolean;
156
+ /** Collapse the phone sheet to its compact height. */
157
+ collapseSheet: () => void;
158
+ /** Open a path in a new tab. */
159
+ openInNewTab: (path: string) => void;
160
+ }
161
+ /**
162
+ * Route a link the assistant put in a reply.
163
+ *
164
+ * The panel hands over a router-ready, same-origin PATH, so this is a plain
165
+ * in-app route change: no reload, and the panel, the in-flight turn and any
166
+ * voice session survive it.
167
+ *
168
+ * ★★ A shell-less destination opens in a NEW TAB and is never routed. The
169
+ * overlay is mounted inside the shell; routing to a page rendered without the
170
+ * shell unmounts the panel and destroys the conversation on every viewport.
171
+ *
172
+ * ★★ On a phone the sheet COLLAPSES, it does not close. The page the user asked
173
+ * for renders beneath the sheet, so it steps aside — but closing unmounts the
174
+ * panel, and collapsing is a class swap on the same node. On desktop the panel
175
+ * sits beside the page and nothing moves.
176
+ */
177
+ export declare function createAssistantNavigate(options: AssistantNavigateOptions): (path: string) => void;
178
+ /** The quota wall a `<product>:quota-exhausted` event names. */
179
+ export declare function assistantQuotaKindOf(event: Event): QuotaKind;
180
+ /** A persisted `"1"`, read defensively: storage can be missing or throw. */
181
+ export declare function readAssistantOverlayFlag(storage: () => Pick<Storage, 'getItem'> | undefined, key: string): boolean;
182
+ /** Persist a flag as `"1"`/`"0"`; an unavailable store keeps it in memory only. */
183
+ export declare function writeAssistantOverlayFlag(storage: () => Pick<Storage, 'setItem'> | undefined, key: string, value: boolean): void;
184
+ //# sourceMappingURL=assistantOverlayState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistantOverlayState.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/assistantOverlayState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ //#region src/shared/assistant/ui/assistantOverlayState.ts
2
+ function e(e) {
3
+ return {
4
+ toggleEvent: `${e}:toggle-ai-assistant`,
5
+ openStorageKey: `${e}:ai-panel:isOpen`,
6
+ dockStorageKey: `${e}:ai-panel:docked`
7
+ };
8
+ }
9
+ function t(e) {
10
+ if (typeof CustomEvent > "u" || !(e instanceof CustomEvent)) return null;
11
+ let t = e.detail;
12
+ return typeof t != "object" || !t || !("open" in t) ? null : typeof t.open == "boolean" ? t.open : null;
13
+ }
14
+ function n(e, t) {
15
+ return t ?? !e;
16
+ }
17
+ var r = "Ctrl+Shift+A";
18
+ function i(e) {
19
+ return (e.ctrlKey || e.metaKey) && e.shiftKey && typeof e.key == "string" && e.key.toLowerCase() === "a";
20
+ }
21
+ var a = "[role=\"dialog\"],[role=\"alertdialog\"],dialog[open]";
22
+ function o(e) {
23
+ return e.key !== "Escape" || !e.isOpen || e.dialogOpen || e.panelOwnsEscape ? "ignore" : "close";
24
+ }
25
+ var s = "max(var(--mobile-tabbar-height, 0px), var(--safe-bottom, 0px), env(safe-area-inset-bottom, 0px))";
26
+ function c(e) {
27
+ return `calc(${e} + ${s})`;
28
+ }
29
+ var l = 440, u = "--assistant-dock-width", d = "--assistant-overlay-top", f = 56, p = "(min-width: 640px)";
30
+ function m(e) {
31
+ return e.isOpen && e.docked && e.isDesktop ? 440 : 0;
32
+ }
33
+ var h = "fixed z-50 flex flex-col overflow-hidden border border-border-default bg-bg-surface shadow-2xl inset-x-0 bottom-0 top-auto rounded-t-2xl animate-in slide-in-from-bottom-4 fade-in duration-200", g = "h-[60vh] max-h-[60vh]", _ = "h-[88vh] max-h-[88vh]", v = "sm:inset-auto sm:top-auto sm:bottom-24 sm:right-6 sm:rounded-2xl sm:h-[680px] sm:max-h-[calc(100vh-8rem)] sm:w-[520px] sm:max-w-[calc(100vw-2rem)]", y = "sm:left-auto sm:right-0 sm:top-[var(--assistant-overlay-top)] sm:bottom-0 sm:rounded-none sm:h-auto sm:max-h-none sm:w-[440px] sm:max-w-[calc(100vw-2rem)]";
34
+ function b(e) {
35
+ return [
36
+ h,
37
+ e.expanded ? _ : g,
38
+ e.docked ? y : v
39
+ ].join(" ");
40
+ }
41
+ function x(e) {
42
+ return (t) => {
43
+ if (e.isShellLessTarget?.(t)) {
44
+ e.openInNewTab(t);
45
+ return;
46
+ }
47
+ e.navigate(t), e.isDesktop() || e.collapseSheet();
48
+ };
49
+ }
50
+ function S(e) {
51
+ if (typeof CustomEvent > "u" || !(e instanceof CustomEvent)) return "generic";
52
+ let t = e.detail;
53
+ return typeof t != "object" || !t || !("kind" in t) ? "generic" : t.kind === "sandbox" || t.kind === "ai-credits" ? t.kind : "generic";
54
+ }
55
+ function C(e, t) {
56
+ try {
57
+ return e()?.getItem(t) === "1";
58
+ } catch {
59
+ return !1;
60
+ }
61
+ }
62
+ function w(e, t, n) {
63
+ try {
64
+ e()?.setItem(t, n ? "1" : "0");
65
+ } catch {}
66
+ }
67
+ //#endregion
68
+ export { s as ASSISTANT_BOTTOM_CHROME_CLEARANCE, a as ASSISTANT_DIALOG_SELECTOR, y as ASSISTANT_DOCKED_DESKTOP_CLASS, l as ASSISTANT_DOCK_WIDTH_PX, u as ASSISTANT_DOCK_WIDTH_VAR, v as ASSISTANT_FLOATING_DESKTOP_CLASS, f as ASSISTANT_OVERLAY_DEFAULT_TOP_PX, p as ASSISTANT_OVERLAY_DESKTOP_QUERY, d as ASSISTANT_OVERLAY_TOP_VAR, h as ASSISTANT_SHEET_BASE_CLASS, g as ASSISTANT_SHEET_COMPACT_CLASS, _ as ASSISTANT_SHEET_EXPANDED_CLASS, r as ASSISTANT_TOGGLE_SHORTCUT_LABEL, c as aboveAssistantBottomChrome, b as assistantOverlayClassName, o as assistantOverlayEscapeAction, e as assistantOverlayKeys, S as assistantQuotaKindOf, x as createAssistantNavigate, i as isAssistantToggleShortcut, n as nextAssistantOpenState, m as publishedAssistantDockWidth, C as readAssistantOverlayFlag, t as requestedAssistantOpenState, w as writeAssistantOverlayFlag };
@@ -119,4 +119,6 @@ import { useAssistantKeyboardShortcuts as ko } from "./shared/assistant/useAssis
119
119
  import { AssistantApiCallsConsentDialog as Ao } from "./shared/assistant/ui/AssistantApiCallsConsentDialog.js";
120
120
  import { AssistantChatArea as jo } from "./shared/assistant/ui/AssistantChatArea.js";
121
121
  import { AIAssistantPanel as Mo } from "./shared/assistant/ui/AIAssistantPanel.js";
122
- export { Mo as AIAssistantPanel, L as ASSISTANT_API_AUTH_STRATEGY, Yr as ASSISTANT_I18N_COMPUTED_COPY, Xr as ASSISTANT_I18N_LITERAL_COPY, Zr as ASSISTANT_I18N_MANIFEST, Fn as ASSISTANT_LANGUAGES, qr as ASSISTANT_MODE_FALLBACK_LABELS, Jr as ASSISTANT_MODE_IDS, Va as ASSISTANT_MODE_META, Yi as ASSISTANT_OVERLAY_ATTR, Xi as ASSISTANT_PANEL_ATTR, dr as ATTACHMENT_ACCEPT, Wr as ATTACHMENT_SOURCES, Ga as AUTO_VOICE, Ao as AssistantApiCallsConsentDialog, aa as AssistantAttachmentButton, oa as AssistantAttachmentChips, zi as AssistantAutoSpeakToggle, ki as AssistantAvatar, jo as AssistantChatArea, Eo as AssistantComposer, Ji as AssistantConnectSourceItem, Ki as AssistantConnectSourceProvider, co as AssistantConversationList, lo as AssistantEmptyState, Aa as AssistantEntityPreview, so as AssistantHeader, s as AssistantI18nProvider, Hi as AssistantLanguageMenu, za as AssistantLanguageSelector, f as AssistantMarkdownImage, h as AssistantMarkdownRenderer, Bi as AssistantMessageAttachments, po as AssistantMessageItem, mo as AssistantMessageList, Ha as AssistantModeSelector, oo as AssistantMoreMenu, g as AssistantNavigateProvider, Vi as AssistantPendingWriteCard, Ra as AssistantPreviewOverlay, sa as AssistantPreviewProvider, t as AssistantProductProvider, Ui as AssistantReplyLanguageSelector, ve as AssistantRuntimeManager, Wi as AssistantSpeakButton, Ai as AssistantSpeechProvider, Gi as AssistantSpokenTurnsNotice, ka as AssistantStepRail, Ti as AssistantToolActivity, uo as AssistantTurnActivity, Wa as AssistantVoiceButton, qa as AssistantVoiceOrb, Ka as AssistantVoiceSelector, ho as AssistantVoiceSession, Ja as AssistantVoiceSessionButton, fr as AttachmentRejectedError, Gn as BOILERPLATE_PAGE_SHARE, Ya as CAPTION_SCROLL_ATTR, O as CHECK_AI_CREDITS, k as CREATE_SANDBOX, mn as DEFAULT_SPEAKABLE_LABELS, In as DEFAULT_SPEECH_RATE, je as DEFAULT_STREAM_BUDGET_MS, Qt as ENDPOINT_GRACE_MS, A as EXTEND_SANDBOX_TTL, Ba as FOLLOW_APP_LOCALE, j as GET_ACTIVE_SANDBOXES, M as GET_SANDBOX, Je as HOSTED_DISABLE_MS, Ye as HOSTED_TTS_MAX_CHARS, We as HOSTED_TTS_TIER, Ge as HOSTED_VOICES, ct as HOSTED_VOICE_RANK, Sa as IDLE_ACTIVE_TAB, ii as IDLE_PLAYBACK, pa as IDLE_PREVIEW, la as IDLE_PREVIEW_STATE, qt as IDLE_ROTATION_CLOCK, $t as INITIAL_SESSION, pr as INLINE_IMAGE_MAX_DIM, mr as INLINE_IMAGE_QUALITY, en as INTERRUPT_MAX_MS, tn as INTERRUPT_MIN_MS, hr as MAX_ATTACHMENTS, Kn as MAX_BOILERPLATE_LINE_CHARS, qn as MAX_EXTRACTED_CHARS, gr as MAX_FILE_BYTES, _r as MAX_INLINE_CHARS_PER_FILE, vr as MAX_INLINE_CHARS_TOTAL, Un as MAX_INLINE_IMAGE_BASE64_BYTES, yr as MAX_INLINE_IMAGE_BASE64_CHARS, br as MAX_INLINE_IMAGE_PARTS, xr as MAX_INLINE_TURN_BODY_BYTES, Jn as MAX_PDF_PAGES_SCANNED, Wn as MAX_REQUEST_BODY_BYTES, hn as MAX_SPEAKABLE_CHARS, gn as MAX_SPOKEN_TABLE_ROWS, Sr as MAX_TURN_BODY_BYTES, En as MINI_CAPTION_BUDGET, Yn as MIN_PAGE_TEXT_CHARS, Xn as MIN_TEXT_PAGE_SHARE, ma as NO_OWNER, Zi as NO_PANEL_OVERLAY, Ft as PHRASE_ROTATE_MS, On as POLL_FAST_MS, kn as POLL_FAST_UNTIL_MS, An as POLL_SLOW_MS, jn as POLL_STEADY_MS, Mn as POLL_STEADY_UNTIL_MS, wn as PREVIEW_LANGUAGES, Cr as PROMPT_ENVELOPE_RESERVE_BYTES, wr as PROVIDER_READABLE_FILE_MEDIA_TYPES, N as PROXY_SANDBOX_REQUEST, Ma as REDUCED_MOTION_ATTRIBUTE, Na as REDUCED_MOTION_QUERY, P as REPORT_AI_TOKEN_USAGE, Ii as SANDBOX_READY_TTL_MS, nn as SILENCE_SUBMIT_MS, Xe as SPEAKING_RATE_MAX, Ze as SPEAKING_RATE_MAX_STREAMING, Qe as SPEAKING_RATE_MAX_SYNC, $e as SPEAKING_RATE_MIN, _n as SPEECH_CHUNK_CHARS, vn as SPEECH_CHUNK_CJK_CHARS, lt as SPEECH_LANG, ei as SPOKEN_LABEL_LANGUAGES, It as STAGE_COPY, F as STOP_ASSISTANT_SANDBOX, Me as STREAM_BUDGET_MS, Lt as THINKING_PHRASES, Tr as TURN_BODY_HEADROOM_BYTES, fo as TurnActivityLine, ut as VOICE_LIST_TIMEOUT_MS, Ht as VOICE_MUTED_LABEL, Ut as VOICE_THINKING_LABEL, Xa as VoiceCaption, Za as VoiceConversationView, to as VoiceMiniController, no as VoiceStage, $a as VoiceStatusLine, eo as VoiceStatusText, ro as VoiceTranscriptDrawer, Qa as VoiceWaveform, I as WAIT_FOR_SANDBOX_RUNNING, q as abortAssistantTurn, Qi as activePanelOverlay, Jt as advanceRotationClock, bo as aiCreditsUpdatedEventName, ha as applyPreviewEvent, J as approvePendingWrite, Qr as assistantI18nSeedCopy, $r as assistantModeI18nCopy, $i as assistantPanelOwnsEscape, _ as assistantRoutePath, c as assistantTranslationKey, v as assistantUrlTransform, Gr as availableAttachmentSources, et as base64ToBytes, y as browserShouldHandle, Ue as browserSpeechEngine, wi as buildAssistantProgress, Y as buildAssistantSandboxEnv, Er as buildAttachmentPromptBlock, dn as buildContinuedFromVoiceNote, ye as buildProgress, Dr as buildPromptParts, X as buildPromptRequestBody, Or as buildPromptWithAttachments, tt as buildRequest, E as buildSandboxContextInput, fn as buildVoiceTranscriptMarkdown, Ie as chatTurns, Z as checkAssistantAiCredits, yn as chunkForSpeech, b as classifyAssistantHref, kr as classifyAttachment, nt as classifyHttpFailure, S as classifyQuotaError, Zn as columnLetterToIndex, Wt as composeVoiceStatus, Ct as configureSpeechEngine, bn as containsCjk, d as copyToClipboard, Ar as countInlineImageCandidates, jr as countInlinedImageParts, Di as countSpokenTurns, ga as createAssistantPreviewSurface, Q as createAssistantSandbox, $ as createAssistantSession, st as createHostedTtsEngine, Li as createReadinessTracker, St as createRoutingSpeechEngine, ba as createRunIdentityCache, ke as createSandboxAssistantTransport, wt as createSpeechEngines, _a as currentPreviewOwner, rt as decodeAudioResponse, Qn as decodeXmlEntities, C as describeQuotaError, Mr as detectDocumentFormat, ni as detectScriptLocale, Kr as deviceHasCamera, it as disableDurationMs, xo as dispatchAssistantQuotaExhausted, $n as docxXmlToText, ee as downloadAssistantArtifact, io as downloadFile, yi as elapsedSince, ea as escapeDismisses, Nr as estimateTurnBodyBytes, D as executeSandboxGraphQL, ao as exportConversation, te as extendAssistantSandboxTTL, wo as extractDocumentText, Ln as findAssistantLanguage, ne as findExistingSandbox, Vn as findPendingWrite, er as fitPdfPages, ta as focusIsInsidePanel, Pr as formatBytes, tr as formatPageRanges, re as forwardsUserTokensToSandbox, Ni as getActorId, ie as getAssistantArtifacts, vi as getAssistantDisplayContent, be as getAssistantMedia, ae as getAssistantMessages, oe as getAssistantSession, se as getAssistantStreamAccess, xe as getAssistantText, Fr as getAttachmentSendBlocker, U as getCapability, Ir as getExtension, R as getImageForMode, z as getImageTagForMode, Pi as getOrganizationId, Se as getRawMessageCreatedAt, B as getResourcesForMode, V as getSandboxImageRegistry, Lr as getSendableAttachments, Tt as getSpeechEngine, Ce as getToolProgress, Fi as getWorkspaceId, Le as groupBySession, Re as groupConsecutiveBySession, Rr as hasAttachmentWorkInFlight, Ke as hostedLocaleFor, qe as hostedSupportsLanguage, p as imageHostLabel, Ne as incompleteTurnNotice, ua as isBlankProse, rn as isCapturing, an as isEcho, dt as isHostedVoice, mi as isLegacyFiller, hi as isLegacyStopped, nr as isMostlyImagePages, vo as isMultimodalBodyRejection, Do as isProdRuntime, zr as isProviderReadableFilePart, w as isQuotaExhaustedError, we as isReapedSandboxConnectionError, Ri as isRecentlyVerified, Te as isRecoverable, yo as isRecoverableAssistantError, m as isRemoteImageSrc, da as isRunningStatus, ai as isSpeakingMessage, ft as isSpeechBlocked, gi as isStageCopy, on as isSubmittable, di as isTurnInFlight, W as isUnknownFieldError, ze as isVoiceTurn, rr as joinSheets, pt as languageDisplayName, Ee as mapSessionToHistory, G as markSupported, K as markUnsupported, De as mergeMessagesById, kt as micIsInterrupt, ce as modeRequiresConfirmWrites, bi as msUntilNextPhrase, Ca as nextActiveTab, Ua as nextModeIndex, na as nextPanelOverlays, fa as nextPreviewEvents, mt as normalizeLangTag, So as notifyAiCreditsUpdated, sn as orbMode, ir as pageMarker, ra as panelOwnsEscape, Hn as parseConfirmationRefusal, Br as parseDataUrl, ar as parseSharedStrings, Ei as parseToolActivity, or as parseWorkbookSheets, sr as pdfTextItemsToPage, wa as pinActiveTab, fi as planAbandonedTurn, cn as planReplyConsumption, pi as planTurnAbort, Nn as pollDelayMs, ht as primaryLanguageSubtag, oi as publishedChunks, T as quotaExhaustedEventName, Pa as readReducedMotion, Et as readSpeechEngineConfig, le as releaseSupersededAssistantSandboxes, zn as replyFollowsInput, ue as reportAssistantAiTokenUsage, si as requiresCancel, Dt as resetSpeechEngine, li as resolveActiveModeSandbox, Rn as resolveAssistantLanguage, Bn as resolveLanguagePair, n as resolveModeConfig, H as resolveSandboxAssistantMode, ri as resolveSpeechLocale, Yt as rotationElapsedMs, va as runBelongsTo, xa as runIdentities, ya as sameOwner, Oe as sanitize, de as selectExistingAssistantSandbox, fe as selectSupersededAssistantSandboxes, gt as selectVoiceForLocale, pe as sendAssistantPromptAsync, me as sendHeartbeat, cr as sheetXmlToRows, at as shouldDisableEngine, Ta as shouldPinOnMove, Ea as shouldPinOnSelect, Dn as showPreviousChunk, At as showsAssistantCaption, jt as showsUserCaption, xn as speakableEmail, _t as speechGate, ti as speechLabelsFor, vt as speechLangForLocale, ci as speechPlaybackReducer, ot as splitForVendor, Sn as splitTableRow, ln as spokenSoFar, Oi as spokenTurnText, Rt as stageText, xi as startPhraseTicker, Xt as startRotationTicker, zt as statusStageCopy, Da as stepsFromToolActivity, he as stopReapedAssistantSandbox, Pe as streamBudgetMs, _i as stripLegacyFillerPrefix, Fa as subscribeReducedMotion, Ot as subscribeSpeechEngine, lr as summarisePageText, Zt as syncRotationClock, Oa as tabForArrowKey, Bt as thinkingPhrase, Vt as thinkingPhraseEntry, Pn as toCaptionText, Vr as toMessageAttachment, Cn as toSpeakableText, Hr as truncateForInline, ur as truncatePagesForInline, Si as turnActivityCopy, Ci as turnActivityStage, go as useAssistantApiAccess, To as useAssistantAttachments, qi as useAssistantConnectSource, Oo as useAssistantHeartbeat, l as useAssistantI18nNamespace, ko as useAssistantKeyboardShortcuts, x as useAssistantNavigate, r as useAssistantPageLabel, ca as useAssistantPreview, La as useAssistantPreviewBridge, i as useAssistantProduct, a as useAssistantProductOrNull, ji as useAssistantSpeech, o as useAssistantStorageFolders, ui as useAssistantStore, u as useAssistantTr, _o as useConversationTurns, ia as useDropdownEscape, ja as useOverlayFocus, Ia as usePrefersReducedMotion, Ae as useSandboxAssistantTransport, e as useVoiceInput, Mi as useVoiceSession, Co as useWorkspaceWriteAccess, Ur as validateFile, yt as voiceAvailability, Be as voiceMarker, Tn as voicePreviewText, bt as voiceQualityRank, Ve as voiceSessionIdOf, un as voiceSessionReducer, Mt as voiceStageState, Gt as voiceStatusParts, Kt as voiceStatusSuffix, pn as voiceTranscriptFilename, He as voiceTurnsOnly, xt as voicesForLocale, ge as waitForAssistantServiceReady, _e as waitForSandboxRunning, Nt as waveformIsActive, Pt as waveformIsSettled, Fe as withIncompleteTurnNotice };
122
+ import { ASSISTANT_BOTTOM_CHROME_CLEARANCE as No, ASSISTANT_DIALOG_SELECTOR as Po, ASSISTANT_DOCKED_DESKTOP_CLASS as Fo, ASSISTANT_DOCK_WIDTH_PX as Io, ASSISTANT_DOCK_WIDTH_VAR as Lo, ASSISTANT_FLOATING_DESKTOP_CLASS as Ro, ASSISTANT_OVERLAY_DEFAULT_TOP_PX as zo, ASSISTANT_OVERLAY_DESKTOP_QUERY as Bo, ASSISTANT_OVERLAY_TOP_VAR as Vo, ASSISTANT_SHEET_BASE_CLASS as Ho, ASSISTANT_SHEET_COMPACT_CLASS as Uo, ASSISTANT_SHEET_EXPANDED_CLASS as Wo, ASSISTANT_TOGGLE_SHORTCUT_LABEL as Go, aboveAssistantBottomChrome as Ko, assistantOverlayClassName as qo, assistantOverlayEscapeAction as Jo, assistantOverlayKeys as Yo, assistantQuotaKindOf as Xo, createAssistantNavigate as Zo, isAssistantToggleShortcut as Qo, nextAssistantOpenState as $o, publishedAssistantDockWidth as es, readAssistantOverlayFlag as ts, requestedAssistantOpenState as ns, writeAssistantOverlayFlag as rs } from "./shared/assistant/ui/assistantOverlayState.js";
123
+ import { AssistantOverlay as is, AssistantOverlayProvider as as, useAssistantDockWidth as os, useAssistantOverlayOrNull as ss, useAssistantQuotaExhausted as cs } from "./shared/assistant/ui/AssistantOverlay.js";
124
+ export { Mo as AIAssistantPanel, L as ASSISTANT_API_AUTH_STRATEGY, No as ASSISTANT_BOTTOM_CHROME_CLEARANCE, Po as ASSISTANT_DIALOG_SELECTOR, Fo as ASSISTANT_DOCKED_DESKTOP_CLASS, Io as ASSISTANT_DOCK_WIDTH_PX, Lo as ASSISTANT_DOCK_WIDTH_VAR, Ro as ASSISTANT_FLOATING_DESKTOP_CLASS, Yr as ASSISTANT_I18N_COMPUTED_COPY, Xr as ASSISTANT_I18N_LITERAL_COPY, Zr as ASSISTANT_I18N_MANIFEST, Fn as ASSISTANT_LANGUAGES, qr as ASSISTANT_MODE_FALLBACK_LABELS, Jr as ASSISTANT_MODE_IDS, Va as ASSISTANT_MODE_META, Yi as ASSISTANT_OVERLAY_ATTR, zo as ASSISTANT_OVERLAY_DEFAULT_TOP_PX, Bo as ASSISTANT_OVERLAY_DESKTOP_QUERY, Vo as ASSISTANT_OVERLAY_TOP_VAR, Xi as ASSISTANT_PANEL_ATTR, Ho as ASSISTANT_SHEET_BASE_CLASS, Uo as ASSISTANT_SHEET_COMPACT_CLASS, Wo as ASSISTANT_SHEET_EXPANDED_CLASS, Go as ASSISTANT_TOGGLE_SHORTCUT_LABEL, dr as ATTACHMENT_ACCEPT, Wr as ATTACHMENT_SOURCES, Ga as AUTO_VOICE, Ao as AssistantApiCallsConsentDialog, aa as AssistantAttachmentButton, oa as AssistantAttachmentChips, zi as AssistantAutoSpeakToggle, ki as AssistantAvatar, jo as AssistantChatArea, Eo as AssistantComposer, Ji as AssistantConnectSourceItem, Ki as AssistantConnectSourceProvider, co as AssistantConversationList, lo as AssistantEmptyState, Aa as AssistantEntityPreview, so as AssistantHeader, s as AssistantI18nProvider, Hi as AssistantLanguageMenu, za as AssistantLanguageSelector, f as AssistantMarkdownImage, h as AssistantMarkdownRenderer, Bi as AssistantMessageAttachments, po as AssistantMessageItem, mo as AssistantMessageList, Ha as AssistantModeSelector, oo as AssistantMoreMenu, g as AssistantNavigateProvider, is as AssistantOverlay, as as AssistantOverlayProvider, Vi as AssistantPendingWriteCard, Ra as AssistantPreviewOverlay, sa as AssistantPreviewProvider, t as AssistantProductProvider, Ui as AssistantReplyLanguageSelector, ve as AssistantRuntimeManager, Wi as AssistantSpeakButton, Ai as AssistantSpeechProvider, Gi as AssistantSpokenTurnsNotice, ka as AssistantStepRail, Ti as AssistantToolActivity, uo as AssistantTurnActivity, Wa as AssistantVoiceButton, qa as AssistantVoiceOrb, Ka as AssistantVoiceSelector, ho as AssistantVoiceSession, Ja as AssistantVoiceSessionButton, fr as AttachmentRejectedError, Gn as BOILERPLATE_PAGE_SHARE, Ya as CAPTION_SCROLL_ATTR, O as CHECK_AI_CREDITS, k as CREATE_SANDBOX, mn as DEFAULT_SPEAKABLE_LABELS, In as DEFAULT_SPEECH_RATE, je as DEFAULT_STREAM_BUDGET_MS, Qt as ENDPOINT_GRACE_MS, A as EXTEND_SANDBOX_TTL, Ba as FOLLOW_APP_LOCALE, j as GET_ACTIVE_SANDBOXES, M as GET_SANDBOX, Je as HOSTED_DISABLE_MS, Ye as HOSTED_TTS_MAX_CHARS, We as HOSTED_TTS_TIER, Ge as HOSTED_VOICES, ct as HOSTED_VOICE_RANK, Sa as IDLE_ACTIVE_TAB, ii as IDLE_PLAYBACK, pa as IDLE_PREVIEW, la as IDLE_PREVIEW_STATE, qt as IDLE_ROTATION_CLOCK, $t as INITIAL_SESSION, pr as INLINE_IMAGE_MAX_DIM, mr as INLINE_IMAGE_QUALITY, en as INTERRUPT_MAX_MS, tn as INTERRUPT_MIN_MS, hr as MAX_ATTACHMENTS, Kn as MAX_BOILERPLATE_LINE_CHARS, qn as MAX_EXTRACTED_CHARS, gr as MAX_FILE_BYTES, _r as MAX_INLINE_CHARS_PER_FILE, vr as MAX_INLINE_CHARS_TOTAL, Un as MAX_INLINE_IMAGE_BASE64_BYTES, yr as MAX_INLINE_IMAGE_BASE64_CHARS, br as MAX_INLINE_IMAGE_PARTS, xr as MAX_INLINE_TURN_BODY_BYTES, Jn as MAX_PDF_PAGES_SCANNED, Wn as MAX_REQUEST_BODY_BYTES, hn as MAX_SPEAKABLE_CHARS, gn as MAX_SPOKEN_TABLE_ROWS, Sr as MAX_TURN_BODY_BYTES, En as MINI_CAPTION_BUDGET, Yn as MIN_PAGE_TEXT_CHARS, Xn as MIN_TEXT_PAGE_SHARE, ma as NO_OWNER, Zi as NO_PANEL_OVERLAY, Ft as PHRASE_ROTATE_MS, On as POLL_FAST_MS, kn as POLL_FAST_UNTIL_MS, An as POLL_SLOW_MS, jn as POLL_STEADY_MS, Mn as POLL_STEADY_UNTIL_MS, wn as PREVIEW_LANGUAGES, Cr as PROMPT_ENVELOPE_RESERVE_BYTES, wr as PROVIDER_READABLE_FILE_MEDIA_TYPES, N as PROXY_SANDBOX_REQUEST, Ma as REDUCED_MOTION_ATTRIBUTE, Na as REDUCED_MOTION_QUERY, P as REPORT_AI_TOKEN_USAGE, Ii as SANDBOX_READY_TTL_MS, nn as SILENCE_SUBMIT_MS, Xe as SPEAKING_RATE_MAX, Ze as SPEAKING_RATE_MAX_STREAMING, Qe as SPEAKING_RATE_MAX_SYNC, $e as SPEAKING_RATE_MIN, _n as SPEECH_CHUNK_CHARS, vn as SPEECH_CHUNK_CJK_CHARS, lt as SPEECH_LANG, ei as SPOKEN_LABEL_LANGUAGES, It as STAGE_COPY, F as STOP_ASSISTANT_SANDBOX, Me as STREAM_BUDGET_MS, Lt as THINKING_PHRASES, Tr as TURN_BODY_HEADROOM_BYTES, fo as TurnActivityLine, ut as VOICE_LIST_TIMEOUT_MS, Ht as VOICE_MUTED_LABEL, Ut as VOICE_THINKING_LABEL, Xa as VoiceCaption, Za as VoiceConversationView, to as VoiceMiniController, no as VoiceStage, $a as VoiceStatusLine, eo as VoiceStatusText, ro as VoiceTranscriptDrawer, Qa as VoiceWaveform, I as WAIT_FOR_SANDBOX_RUNNING, q as abortAssistantTurn, Ko as aboveAssistantBottomChrome, Qi as activePanelOverlay, Jt as advanceRotationClock, bo as aiCreditsUpdatedEventName, ha as applyPreviewEvent, J as approvePendingWrite, Qr as assistantI18nSeedCopy, $r as assistantModeI18nCopy, qo as assistantOverlayClassName, Jo as assistantOverlayEscapeAction, Yo as assistantOverlayKeys, $i as assistantPanelOwnsEscape, Xo as assistantQuotaKindOf, _ as assistantRoutePath, c as assistantTranslationKey, v as assistantUrlTransform, Gr as availableAttachmentSources, et as base64ToBytes, y as browserShouldHandle, Ue as browserSpeechEngine, wi as buildAssistantProgress, Y as buildAssistantSandboxEnv, Er as buildAttachmentPromptBlock, dn as buildContinuedFromVoiceNote, ye as buildProgress, Dr as buildPromptParts, X as buildPromptRequestBody, Or as buildPromptWithAttachments, tt as buildRequest, E as buildSandboxContextInput, fn as buildVoiceTranscriptMarkdown, Ie as chatTurns, Z as checkAssistantAiCredits, yn as chunkForSpeech, b as classifyAssistantHref, kr as classifyAttachment, nt as classifyHttpFailure, S as classifyQuotaError, Zn as columnLetterToIndex, Wt as composeVoiceStatus, Ct as configureSpeechEngine, bn as containsCjk, d as copyToClipboard, Ar as countInlineImageCandidates, jr as countInlinedImageParts, Di as countSpokenTurns, Zo as createAssistantNavigate, ga as createAssistantPreviewSurface, Q as createAssistantSandbox, $ as createAssistantSession, st as createHostedTtsEngine, Li as createReadinessTracker, St as createRoutingSpeechEngine, ba as createRunIdentityCache, ke as createSandboxAssistantTransport, wt as createSpeechEngines, _a as currentPreviewOwner, rt as decodeAudioResponse, Qn as decodeXmlEntities, C as describeQuotaError, Mr as detectDocumentFormat, ni as detectScriptLocale, Kr as deviceHasCamera, it as disableDurationMs, xo as dispatchAssistantQuotaExhausted, $n as docxXmlToText, ee as downloadAssistantArtifact, io as downloadFile, yi as elapsedSince, ea as escapeDismisses, Nr as estimateTurnBodyBytes, D as executeSandboxGraphQL, ao as exportConversation, te as extendAssistantSandboxTTL, wo as extractDocumentText, Ln as findAssistantLanguage, ne as findExistingSandbox, Vn as findPendingWrite, er as fitPdfPages, ta as focusIsInsidePanel, Pr as formatBytes, tr as formatPageRanges, re as forwardsUserTokensToSandbox, Ni as getActorId, ie as getAssistantArtifacts, vi as getAssistantDisplayContent, be as getAssistantMedia, ae as getAssistantMessages, oe as getAssistantSession, se as getAssistantStreamAccess, xe as getAssistantText, Fr as getAttachmentSendBlocker, U as getCapability, Ir as getExtension, R as getImageForMode, z as getImageTagForMode, Pi as getOrganizationId, Se as getRawMessageCreatedAt, B as getResourcesForMode, V as getSandboxImageRegistry, Lr as getSendableAttachments, Tt as getSpeechEngine, Ce as getToolProgress, Fi as getWorkspaceId, Le as groupBySession, Re as groupConsecutiveBySession, Rr as hasAttachmentWorkInFlight, Ke as hostedLocaleFor, qe as hostedSupportsLanguage, p as imageHostLabel, Ne as incompleteTurnNotice, Qo as isAssistantToggleShortcut, ua as isBlankProse, rn as isCapturing, an as isEcho, dt as isHostedVoice, mi as isLegacyFiller, hi as isLegacyStopped, nr as isMostlyImagePages, vo as isMultimodalBodyRejection, Do as isProdRuntime, zr as isProviderReadableFilePart, w as isQuotaExhaustedError, we as isReapedSandboxConnectionError, Ri as isRecentlyVerified, Te as isRecoverable, yo as isRecoverableAssistantError, m as isRemoteImageSrc, da as isRunningStatus, ai as isSpeakingMessage, ft as isSpeechBlocked, gi as isStageCopy, on as isSubmittable, di as isTurnInFlight, W as isUnknownFieldError, ze as isVoiceTurn, rr as joinSheets, pt as languageDisplayName, Ee as mapSessionToHistory, G as markSupported, K as markUnsupported, De as mergeMessagesById, kt as micIsInterrupt, ce as modeRequiresConfirmWrites, bi as msUntilNextPhrase, Ca as nextActiveTab, $o as nextAssistantOpenState, Ua as nextModeIndex, na as nextPanelOverlays, fa as nextPreviewEvents, mt as normalizeLangTag, So as notifyAiCreditsUpdated, sn as orbMode, ir as pageMarker, ra as panelOwnsEscape, Hn as parseConfirmationRefusal, Br as parseDataUrl, ar as parseSharedStrings, Ei as parseToolActivity, or as parseWorkbookSheets, sr as pdfTextItemsToPage, wa as pinActiveTab, fi as planAbandonedTurn, cn as planReplyConsumption, pi as planTurnAbort, Nn as pollDelayMs, ht as primaryLanguageSubtag, es as publishedAssistantDockWidth, oi as publishedChunks, T as quotaExhaustedEventName, ts as readAssistantOverlayFlag, Pa as readReducedMotion, Et as readSpeechEngineConfig, le as releaseSupersededAssistantSandboxes, zn as replyFollowsInput, ue as reportAssistantAiTokenUsage, ns as requestedAssistantOpenState, si as requiresCancel, Dt as resetSpeechEngine, li as resolveActiveModeSandbox, Rn as resolveAssistantLanguage, Bn as resolveLanguagePair, n as resolveModeConfig, H as resolveSandboxAssistantMode, ri as resolveSpeechLocale, Yt as rotationElapsedMs, va as runBelongsTo, xa as runIdentities, ya as sameOwner, Oe as sanitize, de as selectExistingAssistantSandbox, fe as selectSupersededAssistantSandboxes, gt as selectVoiceForLocale, pe as sendAssistantPromptAsync, me as sendHeartbeat, cr as sheetXmlToRows, at as shouldDisableEngine, Ta as shouldPinOnMove, Ea as shouldPinOnSelect, Dn as showPreviousChunk, At as showsAssistantCaption, jt as showsUserCaption, xn as speakableEmail, _t as speechGate, ti as speechLabelsFor, vt as speechLangForLocale, ci as speechPlaybackReducer, ot as splitForVendor, Sn as splitTableRow, ln as spokenSoFar, Oi as spokenTurnText, Rt as stageText, xi as startPhraseTicker, Xt as startRotationTicker, zt as statusStageCopy, Da as stepsFromToolActivity, he as stopReapedAssistantSandbox, Pe as streamBudgetMs, _i as stripLegacyFillerPrefix, Fa as subscribeReducedMotion, Ot as subscribeSpeechEngine, lr as summarisePageText, Zt as syncRotationClock, Oa as tabForArrowKey, Bt as thinkingPhrase, Vt as thinkingPhraseEntry, Pn as toCaptionText, Vr as toMessageAttachment, Cn as toSpeakableText, Hr as truncateForInline, ur as truncatePagesForInline, Si as turnActivityCopy, Ci as turnActivityStage, go as useAssistantApiAccess, To as useAssistantAttachments, qi as useAssistantConnectSource, os as useAssistantDockWidth, Oo as useAssistantHeartbeat, l as useAssistantI18nNamespace, ko as useAssistantKeyboardShortcuts, x as useAssistantNavigate, ss as useAssistantOverlayOrNull, r as useAssistantPageLabel, ca as useAssistantPreview, La as useAssistantPreviewBridge, i as useAssistantProduct, a as useAssistantProductOrNull, cs as useAssistantQuotaExhausted, ji as useAssistantSpeech, o as useAssistantStorageFolders, ui as useAssistantStore, u as useAssistantTr, _o as useConversationTurns, ia as useDropdownEscape, ja as useOverlayFocus, Ia as usePrefersReducedMotion, Ae as useSandboxAssistantTransport, e as useVoiceInput, Mi as useVoiceSession, Co as useWorkspaceWriteAccess, Ur as validateFile, yt as voiceAvailability, Be as voiceMarker, Tn as voicePreviewText, bt as voiceQualityRank, Ve as voiceSessionIdOf, un as voiceSessionReducer, Mt as voiceStageState, Gt as voiceStatusParts, Kt as voiceStatusSuffix, pn as voiceTranscriptFilename, He as voiceTurnsOnly, xt as voicesForLocale, ge as waitForAssistantServiceReady, _e as waitForSandboxRunning, Nt as waveformIsActive, Pt as waveformIsSettled, Fe as withIncompleteTurnNotice, rs as writeAssistantOverlayFlag };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/fe-libs",
3
- "version": "2026.915.2",
3
+ "version": "2026.915.3",
4
4
  "description": "Burdenoff frontend primitives and domain libraries",
5
5
  "type": "module",
6
6
  "bin": {