@burdenoff/fe-libs 2026.914.1 → 2026.914.2

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.
@@ -111,6 +111,7 @@ export * from './preview/entity/AssistantEntityPreview';
111
111
  export * from './ui/panelOverlays';
112
112
  export * from './ui/useDropdownEscape';
113
113
  export * from './ui/useOverlayFocus';
114
+ export * from './ui/usePrefersReducedMotion';
114
115
  export * from './preview/useAssistantPreviewBridge';
115
116
  export * from './preview/AssistantPreviewOverlay';
116
117
  export * from './ui/composer/AssistantLanguageSelector';
@@ -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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"}
@@ -21,7 +21,11 @@ export interface TurnActivityCopy {
21
21
  readonly shown: string;
22
22
  /** For assistive tech. Changes only when the step does. */
23
23
  readonly label: string;
24
- /** Whether `shown` moves with elapsed time. */
24
+ /**
25
+ * Whether this step is ELIGIBLE to rotate (thinking). The component holds it
26
+ * still under reduced motion by passing no elapsed time — see
27
+ * `AssistantTurnActivity`.
28
+ */
25
29
  readonly rotating: boolean;
26
30
  }
27
31
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"turnActivity.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/turnActivity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,+BAA+B,EAC/B,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAU1C;;;;;;GAMG;AAEH;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,+BAA+B,GAAG,IAAI,GAAG,SAAS,GAC7D,kBAAkB,GAAG,IAAI,CAM3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAKD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,WAAW,EACf,UAAU,EAAE,+BAA+B,GAAG,IAAI,GAAG,SAAS,EAC9D,SAAS,EAAE,MAAM,GAChB,gBAAgB,GAAG,IAAI,CAczB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKvE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAC7B,KAAK,GAAE,MAAM,MAAiB,GAC7B,MAAM,IAAI,CAoBZ"}
1
+ {"version":3,"file":"turnActivity.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/turnActivity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,+BAA+B,EAC/B,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAU1C;;;;;;GAMG;AAEH;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,+BAA+B,GAAG,IAAI,GAAG,SAAS,GAC7D,kBAAkB,GAAG,IAAI,CAM3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAKD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,WAAW,EACf,UAAU,EAAE,+BAA+B,GAAG,IAAI,GAAG,SAAS,EAC9D,SAAS,EAAE,MAAM,GAChB,gBAAgB,GAAG,IAAI,CAczB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKvE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAC7B,KAAK,GAAE,MAAM,MAAiB,GAC7B,MAAM,IAAI,CAoBZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantMessageList.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantMessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAEnD,OAAO,KAAK,EAAE,+BAA+B,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAGhF,UAAU,KAAK;IACb,2EAA2E;IAC3E,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,+BAA+B,GAAG,IAAI,CAAC;IACpD,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,KAAK,CAgF1C,CAAC"}
1
+ {"version":3,"file":"AssistantMessageList.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantMessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAGnD,OAAO,KAAK,EAAE,+BAA+B,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAGhF,UAAU,KAAK;IACb,2EAA2E;IAC3E,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,+BAA+B,GAAG,IAAI,CAAC;IACpD,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,KAAK,CAkF1C,CAAC"}
@@ -1,40 +1,41 @@
1
1
  import { useAssistantTr as e } from "../i18n.js";
2
- import { AssistantMessageItem as t } from "./AssistantMessageItem.js";
3
- import { useEffect as n, useRef as r } from "react";
4
- import { jsx as i, jsxs as a } from "react/jsx-runtime";
2
+ import { readReducedMotion as t } from "./usePrefersReducedMotion.js";
3
+ import { AssistantMessageItem as n } from "./AssistantMessageItem.js";
4
+ import { useEffect as r, useRef as i } from "react";
5
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
5
6
  //#region src/shared/assistant/ui/AssistantMessageList.tsx
6
- var o = ({ onApprovePendingWrite: o, approvingWriteRef: s = null, messages: c, processing: l, streamingMessageId: u, failedMessageId: d, onRetry: f }) => {
7
- let p = e(), m = (() => {
8
- for (let e = c.length - 1; e >= 0; --e) if (c[e].role === "assistant") return c[e].id;
7
+ var s = ({ onApprovePendingWrite: s, approvingWriteRef: c = null, messages: l, processing: u, streamingMessageId: d, failedMessageId: f, onRetry: p }) => {
8
+ let m = e(), h = (() => {
9
+ for (let e = l.length - 1; e >= 0; --e) if (l[e].role === "assistant") return l[e].id;
9
10
  return null;
10
- })(), h = r(null), g = r(null);
11
- return n(() => {
12
- let e = g.current;
11
+ })(), g = i(null), _ = i(null);
12
+ return r(() => {
13
+ let e = _.current;
13
14
  if (e && e.scrollHeight - e.scrollTop - e.clientHeight < 100) {
14
- let e = typeof window < "u" && window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
15
- h.current?.scrollIntoView({ behavior: e ? "auto" : "smooth" });
15
+ let e = t();
16
+ g.current?.scrollIntoView({ behavior: e ? "auto" : "smooth" });
16
17
  }
17
- }, [c, u]), n(() => {
18
- h.current?.scrollIntoView({ behavior: "instant" });
19
- }, []), /* @__PURE__ */ a("div", {
20
- ref: g,
18
+ }, [l, d]), r(() => {
19
+ g.current?.scrollIntoView({ behavior: "instant" });
20
+ }, []), /* @__PURE__ */ o("div", {
21
+ ref: _,
21
22
  className: "flex-1 space-y-4 overflow-y-auto p-3",
22
23
  role: "log",
23
24
  "aria-live": "polite",
24
25
  "aria-relevant": "additions",
25
- "aria-busy": u !== null,
26
- "aria-label": p("messageList.ariaLabel", "Conversation messages"),
27
- children: [c.map((e) => /* @__PURE__ */ i(t, {
28
- onApprovePendingWrite: o,
29
- approvingWriteRef: s,
26
+ "aria-busy": d !== null,
27
+ "aria-label": m("messageList.ariaLabel", "Conversation messages"),
28
+ children: [l.map((e) => /* @__PURE__ */ a(n, {
29
+ onApprovePendingWrite: s,
30
+ approvingWriteRef: c,
30
31
  message: e,
31
- processing: l,
32
- isStreaming: e.id === u,
33
- isFailed: e.id === d,
34
- isLastAssistant: e.id === m,
35
- onRetry: f
36
- }, e.id)), /* @__PURE__ */ i("div", { ref: h })]
32
+ processing: u,
33
+ isStreaming: e.id === d,
34
+ isFailed: e.id === f,
35
+ isLastAssistant: e.id === h,
36
+ onRetry: p
37
+ }, e.id)), /* @__PURE__ */ a("div", { ref: g })]
37
38
  });
38
39
  };
39
40
  //#endregion
40
- export { o as AssistantMessageList };
41
+ export { s as AssistantMessageList };
@@ -27,9 +27,12 @@ export declare const TurnActivityLine: FC<{
27
27
  * stays free of timers, and nothing is written anywhere — the message's content
28
28
  * is untouched while the phrase moves.
29
29
  *
30
- * ★ Under `prefers-reduced-motion` the line holds the step's label instead of
31
- * rotating: text that changes every few seconds on its own is exactly the kind
32
- * of movement that preference asks to stop, as the avatar and caret already do.
30
+ * ★ Under reduced motion the line holds the step's label instead of rotating:
31
+ * text that changes every few seconds on its own is what a person asking for
32
+ * less motion wants stopped, as the avatar and caret already are. BOTH routes
33
+ * count — the OS setting and the app's own "Reduce motion" (BOFF-7284); this
34
+ * used to honour only the first. (For auto-updating text the WCAG criterion is
35
+ * 2.2.2 Pause, Stop, Hide.)
33
36
  */
34
37
  export declare const AssistantTurnActivity: FC<{
35
38
  processing: AssistantConversationProcessing | null | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantTurnActivity.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantTurnActivity.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAGrD,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AASvE;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAkBjE,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC;IACrC,UAAU,EAAE,+BAA+B,GAAG,IAAI,GAAG,SAAS,CAAC;CAChE,CAaA,CAAC"}
1
+ {"version":3,"file":"AssistantTurnActivity.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantTurnActivity.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAErD,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAUvE;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAkBjE,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC;IACrC,UAAU,EAAE,+BAA+B,GAAG,IAAI,GAAG,SAAS,CAAC;CAChE,CAaA,CAAC"}
@@ -1,6 +1,6 @@
1
- import { useMediaQuery as e } from "../../hooks/useMediaQuery.js";
2
- import { useAssistantTr as t } from "../i18n.js";
3
- import { elapsedSince as n, startPhraseTicker as r, turnActivityCopy as i, turnActivityStage as a } from "../turnActivity.js";
1
+ import { useAssistantTr as e } from "../i18n.js";
2
+ import { elapsedSince as t, startPhraseTicker as n, turnActivityCopy as r, turnActivityStage as i } from "../turnActivity.js";
3
+ import { usePrefersReducedMotion as a } from "./usePrefersReducedMotion.js";
4
4
  import { useEffect as o, useState as s } from "react";
5
5
  import { jsx as c, jsxs as l } from "react/jsx-runtime";
6
6
  //#region src/shared/assistant/ui/AssistantTurnActivity.tsx
@@ -16,18 +16,18 @@ var u = ({ shown: e, label: t }) => /* @__PURE__ */ l("p", {
16
16
  "data-testid": "assistant-turn-activity-label",
17
17
  children: t
18
18
  })]
19
- }), d = ({ processing: n }) => {
20
- let r = t(), o = e("(prefers-reduced-motion: reduce)"), s = i(r, n, f(a(n) === "thinking" && !o && typeof n?.stageStartedAt == "number" ? n.stageStartedAt : null));
19
+ }), d = ({ processing: t }) => {
20
+ let n = e(), o = a(), s = r(n, t, f(i(t) === "thinking" && !o && typeof t?.stageStartedAt == "number" ? t.stageStartedAt : null));
21
21
  return s ? /* @__PURE__ */ c(u, {
22
22
  shown: s.shown,
23
23
  label: s.label
24
24
  }) : null;
25
25
  };
26
26
  function f(e) {
27
- let [t, i] = s(() => Date.now());
27
+ let [r, i] = s(() => Date.now());
28
28
  return o(() => {
29
- if (e !== null) return r(e, i);
30
- }, [e]), n(e, t);
29
+ if (e !== null) return n(e, i);
30
+ }, [e]), t(e, r);
31
31
  }
32
32
  //#endregion
33
33
  export { d as AssistantTurnActivity, u as TurnActivityLine };
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Whether the person has asked for less motion — by EITHER route.
3
+ *
4
+ * ★★ TWO SIGNALS, and the assistant's own animated text must obey both:
5
+ *
6
+ * - the operating system's `prefers-reduced-motion: reduce`;
7
+ * - the app's own "Reduce motion" setting (ThemePreferences). `ThemeProvider`
8
+ * writes its EFFECTIVE value — a custom theme's override included — to
9
+ * `<html data-reduce-motion>`, and `tokens.css` clamps every CSS animation
10
+ * under that attribute.
11
+ *
12
+ * CSS covers the avatar, the caret and every `motion-safe:` class. It cannot
13
+ * stop a phrase that JavaScript swaps every few seconds, which is why the chat
14
+ * waiting line honoured only the OS setting and the voice status line honoured
15
+ * neither (BOFF-7284). Reading the attribute rather than theme context keeps the
16
+ * JS in lockstep with the CSS by construction, needs no change to
17
+ * `ThemeProvider` (whose context is not exported, and whose `useTheme` throws
18
+ * without a provider), and in a host with no `ThemeProvider` simply falls back
19
+ * to the OS signal.
20
+ */
21
+ export declare const REDUCED_MOTION_QUERY = "(prefers-reduced-motion: reduce)";
22
+ export declare const REDUCED_MOTION_ATTRIBUTE = "data-reduce-motion";
23
+ /**
24
+ * The current answer, read fresh from the environment every time.
25
+ *
26
+ * ★ Guarded piece by piece — `window`, `matchMedia` and `document` are each
27
+ * absent in some test or render environment here — and never cached: a test
28
+ * may swap `window` between two renders, and a cached `MediaQueryList` would
29
+ * keep answering for the old one.
30
+ */
31
+ export declare function readReducedMotion(): boolean;
32
+ /**
33
+ * Call `onChange` whenever either signal may have changed. Returns the cleanup.
34
+ *
35
+ * ★ The attribute is written by a passive effect in `ThemeProvider`, one commit
36
+ * after its state changes — the observer is what carries that change here
37
+ * without a reload.
38
+ */
39
+ export declare function subscribeReducedMotion(onChange: () => void): () => void;
40
+ /**
41
+ * React binding: re-renders the caller when either signal changes.
42
+ *
43
+ * ★★ The server snapshot is the SAME guarded reader, deliberately — not a
44
+ * constant `false`. On a real server there is no `window`, so it answers false
45
+ * anyway; under a test that stubs the environment it answers from the stub, which
46
+ * is what lets a static render prove the reduced-motion path at all. Both host
47
+ * apps mount with `createRoot`, so there is no hydration for this to mismatch.
48
+ *
49
+ * ★ Not for `hydrateRoot`: on hydration React calls the server snapshot on the
50
+ * client, where this reader can answer true while the server's HTML was rendered
51
+ * with false — a recoverable hydration mismatch. A future SSR consumer must pass
52
+ * a constant server snapshot instead.
53
+ */
54
+ export declare function usePrefersReducedMotion(): boolean;
55
+ //# sourceMappingURL=usePrefersReducedMotion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePrefersReducedMotion.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/usePrefersReducedMotion.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,oBAAoB,qCAAqC,CAAC;AACvE,eAAO,MAAM,wBAAwB,uBAAuB,CAAC;AAE7D;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAW3C;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CA+BvE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,IAAI,OAAO,CAMjD"}
@@ -0,0 +1,28 @@
1
+ import { useSyncExternalStore as e } from "react";
2
+ //#region src/shared/assistant/ui/usePrefersReducedMotion.ts
3
+ var t = "(prefers-reduced-motion: reduce)", n = "data-reduce-motion";
4
+ function r() {
5
+ return typeof document < "u" && typeof document.documentElement?.hasAttribute == "function" && document.documentElement.hasAttribute("data-reduce-motion") ? !0 : typeof window > "u" || typeof window.matchMedia != "function" ? !1 : window.matchMedia(t)?.matches === !0;
6
+ }
7
+ function i(e) {
8
+ let r = [];
9
+ if (typeof window < "u" && typeof window.matchMedia == "function") {
10
+ let n = window.matchMedia(t);
11
+ typeof n?.addEventListener == "function" ? (n.addEventListener("change", e), r.push(() => n.removeEventListener("change", e))) : typeof n?.addListener == "function" && (n.addListener(e), r.push(() => n.removeListener(e)));
12
+ }
13
+ if (typeof document < "u" && document.documentElement && typeof MutationObserver < "u") {
14
+ let t = new MutationObserver(e);
15
+ t.observe(document.documentElement, {
16
+ attributes: !0,
17
+ attributeFilter: [n]
18
+ }), r.push(() => t.disconnect());
19
+ }
20
+ return () => {
21
+ for (let e of r) e();
22
+ };
23
+ }
24
+ function a() {
25
+ return e(i, r, r);
26
+ }
27
+ //#endregion
28
+ export { n as REDUCED_MOTION_ATTRIBUTE, t as REDUCED_MOTION_QUERY, r as readReducedMotion, i as subscribeReducedMotion, a as usePrefersReducedMotion };
@@ -43,8 +43,10 @@ interface Props {
43
43
  */
44
44
  statusSuffix?: string | null;
45
45
  /**
46
- * Rotate the SHOWN status through the thinking phrases while the assistant
47
- * thinks. What is ANNOUNCED is always `statusText` — see `VoiceStatusText`.
46
+ * Ask for the SHOWN status to rotate through the thinking phrases while the
47
+ * assistant thinks — suppressed under reduced motion (OS or app setting, see
48
+ * `usePrefersReducedMotion`). What is ANNOUNCED is always `statusText` — see
49
+ * `VoiceStatusText`.
48
50
  */
49
51
  rotateStatus?: boolean;
50
52
  /** Mic / interrupt control — the same orb, in its compact size. */
@@ -1 +1 @@
1
- {"version":3,"file":"VoiceMiniController.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/VoiceMiniController.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI3C,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,6BAA6B,CAAC;AAErC;;;;;;;;;;;;;;;;;GAiBG;AAEH,UAAU,KAAK;IACb,KAAK,EAAE,eAAe,CAAC;IACvB,uEAAuE;IACvE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mEAAmE;IACnE,OAAO,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,KAAK,CAiHzC,CAAC"}
1
+ {"version":3,"file":"VoiceMiniController.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/VoiceMiniController.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI3C,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,6BAA6B,CAAC;AAErC;;;;;;;;;;;;;;;;;GAiBG;AAEH,UAAU,KAAK;IACb,KAAK,EAAE,eAAe,CAAC;IACvB,uEAAuE;IACvE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mEAAmE;IACnE,OAAO,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,KAAK,CAiHzC,CAAC"}
@@ -33,8 +33,10 @@ interface Props {
33
33
  */
34
34
  statusSuffix?: string | null;
35
35
  /**
36
- * Rotate the SHOWN status through the thinking phrases while the assistant
37
- * thinks. What is ANNOUNCED is always `statusText` — see `VoiceStatusText`.
36
+ * Ask for the SHOWN status to rotate through the thinking phrases while the
37
+ * assistant thinks — suppressed under reduced motion (OS or app setting, see
38
+ * `usePrefersReducedMotion`). What is ANNOUNCED is always `statusText` — see
39
+ * `VoiceStatusText`.
38
40
  */
39
41
  rotateStatus?: boolean;
40
42
  /** The microphone / interrupt control. */
@@ -1 +1 @@
1
- {"version":3,"file":"VoiceStage.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/VoiceStage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI3C,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,6BAA6B,CAAC;AAErC;;;;;;;;;;;;;;;;;GAiBG;AAEH,UAAU,KAAK;IACb,KAAK,EAAE,eAAe,CAAC;IACvB,mDAAmD;IACnD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,oCAAoC;IACpC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0CAA0C;IAC1C,OAAO,EAAE,SAAS,CAAC;IACnB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,+EAA+E;IAC/E,YAAY,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC3D;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,KAAK,CAmIhC,CAAC"}
1
+ {"version":3,"file":"VoiceStage.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/VoiceStage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI3C,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,6BAA6B,CAAC;AAErC;;;;;;;;;;;;;;;;;GAiBG;AAEH,UAAU,KAAK;IACb,KAAK,EAAE,eAAe,CAAC;IACvB,mDAAmD;IACnD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,oCAAoC;IACpC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0CAA0C;IAC1C,OAAO,EAAE,SAAS,CAAC;IACnB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,+EAA+E;IAC/E,YAAY,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC3D;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,KAAK,CAmIhC,CAAC"}
@@ -38,13 +38,24 @@ export declare const VoiceStatusLine: FC<{
38
38
  *
39
39
  * ★ The clock lives HERE, not in `AssistantVoiceSession`: a tick re-renders only
40
40
  * this line, and the orchestrators stay free of timers.
41
+ *
42
+ * ★★ Under reduced motion — the OS setting OR the app's own (BOFF-7284) — the
43
+ * line does not rotate: no clock runs, and it shows the status itself, e.g.
44
+ * "Thinking…" (with "· Microphone off" when muted). A phrase swapped every
45
+ * 2.5 seconds is exactly the self-starting movement that preference asks to stop.
46
+ * The announced text was never affected, so nothing changes for a screen reader.
47
+ * (The WCAG criterion for auto-updating text is 2.2.2 Pause, Stop, Hide; the
48
+ * reduced-motion preferences are how a person asks for it here.)
41
49
  */
42
50
  export declare const VoiceStatusText: FC<{
43
51
  /** The meaningful status. This is what is announced. */
44
52
  status: string;
45
53
  /** Kept visible while the shown phrase rotates, e.g. "Microphone off". */
46
54
  suffix?: string | null;
47
- /** Rotate the SHOWN text through the thinking phrases. */
55
+ /**
56
+ * The stage ASKS to rotate the shown text through the thinking phrases. The
57
+ * line honours it only when motion is allowed — see `usePrefersReducedMotion`.
58
+ */
48
59
  rotating?: boolean;
49
60
  className: string;
50
61
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"VoiceStatusText.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/VoiceStatusText.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAYrD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAiBA,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC;IAC/B,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB,CAiBA,CAAC"}
1
+ {"version":3,"file":"VoiceStatusText.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/VoiceStatusText.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAarD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAiBA,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC;IAC/B,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB,CAqBA,CAAC"}
@@ -1,42 +1,43 @@
1
1
  import { useAssistantTr as e } from "../../i18n.js";
2
2
  import { voiceStatusParts as t } from "../../voice/voiceStatus.js";
3
3
  import { IDLE_ROTATION_CLOCK as n, advanceRotationClock as r, rotationElapsedMs as i, startRotationTicker as a, syncRotationClock as o } from "../../voice/rotationClock.js";
4
- import { useEffect as s, useState as c } from "react";
5
- import { jsx as l, jsxs as u } from "react/jsx-runtime";
4
+ import { usePrefersReducedMotion as s } from "../usePrefersReducedMotion.js";
5
+ import { useEffect as c, useState as l } from "react";
6
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
6
7
  //#region src/shared/assistant/ui/voice/VoiceStatusText.tsx
7
- var d = ({ announced: e, shown: t, className: n }) => /* @__PURE__ */ u("p", {
8
+ var f = ({ announced: e, shown: t, className: n }) => /* @__PURE__ */ d("p", {
8
9
  className: `relative ${n}`,
9
10
  "data-testid": "assistant-voice-status-line",
10
- children: [/* @__PURE__ */ l("span", {
11
+ children: [/* @__PURE__ */ u("span", {
11
12
  "aria-hidden": "true",
12
13
  "data-testid": "assistant-voice-status-shown",
13
14
  children: t
14
- }), /* @__PURE__ */ l("span", {
15
+ }), /* @__PURE__ */ u("span", {
15
16
  className: "sr-only left-0 top-0",
16
17
  "aria-live": "polite",
17
18
  "aria-atomic": "true",
18
19
  "data-testid": "assistant-voice-status",
19
20
  children: e
20
21
  })]
21
- }), f = ({ status: n, suffix: r = null, rotating: i = !1, className: a }) => {
22
- let { announced: o, shown: s } = t({
23
- tr: e(),
22
+ }), p = ({ status: n, suffix: r = null, rotating: i = !1, className: a }) => {
23
+ let o = e(), c = s(), l = i && !c, { announced: d, shown: p } = t({
24
+ tr: o,
24
25
  status: n,
25
26
  suffix: r,
26
- rotating: i,
27
- elapsedMs: p(i)
27
+ rotating: l,
28
+ elapsedMs: m(l)
28
29
  });
29
- return /* @__PURE__ */ l(d, {
30
+ return /* @__PURE__ */ u(f, {
30
31
  className: a,
31
- announced: o,
32
- shown: s
32
+ announced: d,
33
+ shown: p
33
34
  });
34
35
  };
35
- function p(e) {
36
- let [t, l] = c(() => o(n, e)), u = o(t, e);
37
- return u !== t && l(u), s(() => {
38
- if (e) return a(() => l((e) => r(e)));
36
+ function m(e) {
37
+ let [t, s] = l(() => o(n, e)), u = o(t, e);
38
+ return u !== t && s(u), c(() => {
39
+ if (e) return a(() => s((e) => r(e)));
39
40
  }, [e]), i(u);
40
41
  }
41
42
  //#endregion
42
- export { d as VoiceStatusLine, f as VoiceStatusText };
43
+ export { f as VoiceStatusLine, p as VoiceStatusText };
@@ -64,7 +64,10 @@ export declare function composeVoiceStatus(label: string, suffix: string | null)
64
64
  export interface VoiceStatusParts {
65
65
  /** For the live region. Changes only when the status does. */
66
66
  readonly announced: string;
67
- /** For the eye. Rotates while thinking; otherwise identical to `announced`. */
67
+ /**
68
+ * For the eye. Rotates while `rotating` (thinking, with motion allowed);
69
+ * otherwise identical to `announced`.
70
+ */
68
71
  readonly shown: string;
69
72
  }
70
73
  export declare function voiceStatusParts(args: {
@@ -73,7 +76,10 @@ export declare function voiceStatusParts(args: {
73
76
  status: string;
74
77
  /** Kept on the shown text while it rotates, e.g. "Microphone off". */
75
78
  suffix: string | null;
76
- /** True only while the assistant is thinking. */
79
+ /**
80
+ * Whether the shown text may rotate: the assistant is thinking AND motion is
81
+ * allowed. `VoiceStatusText` passes false under reduced motion (BOFF-7284).
82
+ */
77
83
  rotating: boolean;
78
84
  /** Time since rotation began. */
79
85
  elapsedMs: number;
@@ -1 +1 @@
1
- {"version":3,"file":"voiceStatus.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/voice/voiceStatus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,yGAAyG;AACzG,eAAO,MAAM,oBAAoB,EAAE,cAGlC,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,EAAE,cAG/B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,EAAE,EAAE,WAAW,CAAC;IAChB,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,GAAG,IAAI,CAKhB;AAED,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,MAAM,CAER;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAKD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,EAAE,EAAE,WAAW,CAAC;IAChB,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,iDAAiD;IACjD,QAAQ,EAAE,OAAO,CAAC;IAClB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,gBAAgB,CAmBnB"}
1
+ {"version":3,"file":"voiceStatus.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/voice/voiceStatus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,yGAAyG;AACzG,eAAO,MAAM,oBAAoB,EAAE,cAGlC,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,EAAE,cAG/B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,EAAE,EAAE,WAAW,CAAC;IAChB,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,GAAG,IAAI,CAKhB;AAED,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,MAAM,CAER;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAKD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,EAAE,EAAE,WAAW,CAAC;IAChB,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,gBAAgB,CAmBnB"}
@@ -78,42 +78,43 @@ import { IDLE_ACTIVE_TAB as ca, nextActiveTab as la, pinActiveTab as ua, shouldP
78
78
  import { AssistantStepRail as ha } from "./shared/assistant/preview/entity/AssistantStepRail.js";
79
79
  import { AssistantEntityPreview as ga } from "./shared/assistant/preview/entity/AssistantEntityPreview.js";
80
80
  import { useOverlayFocus as _a } from "./shared/assistant/ui/useOverlayFocus.js";
81
- import { useAssistantPreviewBridge as va } from "./shared/assistant/preview/useAssistantPreviewBridge.js";
82
- import { AssistantPreviewOverlay as ya } from "./shared/assistant/preview/AssistantPreviewOverlay.js";
83
- import { AssistantLanguageSelector as ba, FOLLOW_APP_LOCALE as xa } from "./shared/assistant/ui/composer/AssistantLanguageSelector.js";
84
- import { ASSISTANT_MODE_META as Sa, AssistantModeSelector as Ca, nextModeIndex as wa } from "./shared/assistant/ui/composer/AssistantModeSelector.js";
85
- import { AssistantVoiceButton as Ta } from "./shared/assistant/ui/composer/AssistantVoiceButton.js";
86
- import { AUTO_VOICE as Ea, AssistantVoiceSelector as Da } from "./shared/assistant/ui/composer/AssistantVoiceSelector.js";
87
- import { AssistantVoiceOrb as Oa } from "./shared/assistant/ui/voice/AssistantVoiceOrb.js";
88
- import { AssistantVoiceSessionButton as ka } from "./shared/assistant/ui/voice/AssistantVoiceSessionButton.js";
89
- import { CAPTION_SCROLL_ATTR as Aa, VoiceCaption as ja } from "./shared/assistant/ui/voice/VoiceCaption.js";
90
- import { VoiceConversationView as Ma } from "./shared/assistant/ui/voice/VoiceConversationView.js";
91
- import { VoiceWaveform as Na } from "./shared/assistant/ui/voice/VoiceWaveform.js";
92
- import { VoiceStatusLine as Pa, VoiceStatusText as Fa } from "./shared/assistant/ui/voice/VoiceStatusText.js";
93
- import { VoiceMiniController as Ia } from "./shared/assistant/ui/voice/VoiceMiniController.js";
94
- import { VoiceStage as La } from "./shared/assistant/ui/voice/VoiceStage.js";
95
- import { VoiceTranscriptDrawer as Ra } from "./shared/assistant/ui/voice/VoiceTranscriptDrawer.js";
96
- import { downloadFile as za, exportConversation as Ba } from "./shared/assistant/exportConversation.js";
97
- import { AssistantMoreMenu as Va } from "./shared/assistant/ui/AssistantMoreMenu.js";
98
- import { AssistantHeader as Ha } from "./shared/assistant/ui/AssistantHeader.js";
99
- import { AssistantConversationList as Ua } from "./shared/assistant/ui/AssistantConversationList.js";
100
- import { AssistantEmptyState as Wa } from "./shared/assistant/ui/AssistantEmptyState.js";
101
- import { AssistantTurnActivity as Ga, TurnActivityLine as Ka } from "./shared/assistant/ui/AssistantTurnActivity.js";
102
- import { AssistantMessageItem as qa } from "./shared/assistant/ui/AssistantMessageItem.js";
103
- import { AssistantMessageList as Ja } from "./shared/assistant/ui/AssistantMessageList.js";
104
- import { AssistantVoiceSession as Ya } from "./shared/assistant/ui/voice/AssistantVoiceSession.js";
105
- import { useAssistantApiAccess as Xa } from "./shared/assistant/useAssistantApiAccess.js";
106
- import { useConversationTurns as Za } from "./shared/assistant/useConversationTurns.js";
107
- import { isMultimodalBodyRejection as Qa, isRecoverableAssistantError as $a } from "./shared/assistant/transportErrors.js";
108
- import { aiCreditsUpdatedEventName as eo, dispatchAssistantQuotaExhausted as to, notifyAiCreditsUpdated as no } from "./shared/assistant/aiCredits.js";
109
- import { useWorkspaceWriteAccess as ro } from "./shared/assistant/useWorkspaceWriteAccess.js";
110
- import { extractDocumentText as io } from "./shared/assistant/documentExtract.js";
111
- import { useAssistantAttachments as ao } from "./shared/assistant/useAssistantAttachments.js";
112
- import { AssistantComposer as oo } from "./shared/assistant/ui/composer/AssistantComposer.js";
113
- import { isProdRuntime as so } from "./shared/assistant/env.js";
114
- import { useAssistantHeartbeat as co } from "./shared/assistant/useAssistantHeartbeat.js";
115
- import { useAssistantKeyboardShortcuts as lo } from "./shared/assistant/useAssistantKeyboardShortcuts.js";
116
- import { AssistantApiCallsConsentDialog as uo } from "./shared/assistant/ui/AssistantApiCallsConsentDialog.js";
117
- import { AssistantChatArea as fo } from "./shared/assistant/ui/AssistantChatArea.js";
118
- import { AIAssistantPanel as po } from "./shared/assistant/ui/AIAssistantPanel.js";
119
- export { po as AIAssistantPanel, L as ASSISTANT_API_AUTH_STRATEGY, kn as ASSISTANT_LANGUAGES, Sa as ASSISTANT_MODE_META, Fi as ASSISTANT_OVERLAY_ATTR, Ii as ASSISTANT_PANEL_ATTR, mr as ATTACHMENT_ACCEPT, yi as ATTACHMENT_SOURCES, Ea as AUTO_VOICE, uo as AssistantApiCallsConsentDialog, Gi as AssistantAttachmentButton, Ki as AssistantAttachmentChips, Ti as AssistantAutoSpeakToggle, fi as AssistantAvatar, fo as AssistantChatArea, oo as AssistantComposer, Pi as AssistantConnectSourceItem, Mi as AssistantConnectSourceProvider, Ua as AssistantConversationList, Wa as AssistantEmptyState, ga as AssistantEntityPreview, Ha as AssistantHeader, s as AssistantI18nProvider, Oi as AssistantLanguageMenu, ba as AssistantLanguageSelector, f as AssistantMarkdownImage, h as AssistantMarkdownRenderer, Ei as AssistantMessageAttachments, qa as AssistantMessageItem, Ja as AssistantMessageList, Ca as AssistantModeSelector, Va as AssistantMoreMenu, g as AssistantNavigateProvider, Di as AssistantPendingWriteCard, ya as AssistantPreviewOverlay, qi as AssistantPreviewProvider, t as AssistantProductProvider, ki as AssistantReplyLanguageSelector, _e as AssistantRuntimeManager, Ai as AssistantSpeakButton, pi as AssistantSpeechProvider, ji as AssistantSpokenTurnsNotice, ha as AssistantStepRail, ci as AssistantToolActivity, Ga as AssistantTurnActivity, Ta as AssistantVoiceButton, Oa as AssistantVoiceOrb, Da as AssistantVoiceSelector, Ya as AssistantVoiceSession, ka as AssistantVoiceSessionButton, hr as AttachmentRejectedError, Jn as BOILERPLATE_PAGE_SHARE, Aa as CAPTION_SCROLL_ATTR, O as CHECK_AI_CREDITS, k as CREATE_SANDBOX, cn as DEFAULT_SPEAKABLE_LABELS, An as DEFAULT_SPEECH_RATE, Ae as DEFAULT_STREAM_BUDGET_MS, Pt as ENDPOINT_GRACE_MS, A as EXTEND_SANDBOX_TTL, xa as FOLLOW_APP_LOCALE, j as GET_ACTIVE_SANDBOXES, M as GET_SANDBOX, qe as HOSTED_TTS_MAX_CHARS, Ue as HOSTED_TTS_TIER, We as HOSTED_VOICES, ca as IDLE_ACTIVE_TAB, Vn as IDLE_PLAYBACK, $i as IDLE_PREVIEW, Yi as IDLE_PREVIEW_STATE, kt as IDLE_ROTATION_CLOCK, Ft as INITIAL_SESSION, gr as INLINE_IMAGE_MAX_DIM, _r as INLINE_IMAGE_QUALITY, It as INTERRUPT_MAX_MS, Lt as INTERRUPT_MIN_MS, vr as MAX_ATTACHMENTS, Yn as MAX_BOILERPLATE_LINE_CHARS, Xn as MAX_EXTRACTED_CHARS, yr as MAX_FILE_BYTES, br as MAX_INLINE_CHARS_PER_FILE, xr as MAX_INLINE_CHARS_TOTAL, Kn as MAX_INLINE_IMAGE_BASE64_BYTES, Sr as MAX_INLINE_IMAGE_BASE64_CHARS, Cr as MAX_INLINE_IMAGE_PARTS, wr as MAX_INLINE_TURN_BODY_BYTES, Zn as MAX_PDF_PAGES_SCANNED, qn as MAX_REQUEST_BODY_BYTES, ln as MAX_SPEAKABLE_CHARS, un as MAX_SPOKEN_TABLE_ROWS, Tr as MAX_TURN_BODY_BYTES, bn as MINI_CAPTION_BUDGET, Qn as MIN_PAGE_TEXT_CHARS, $n as MIN_TEXT_PAGE_SHARE, ea as NO_OWNER, Li as NO_PANEL_OVERLAY, _t as PHRASE_ROTATE_MS, Sn as POLL_FAST_MS, Cn as POLL_FAST_UNTIL_MS, wn as POLL_SLOW_MS, Tn as POLL_STEADY_MS, En as POLL_STEADY_UNTIL_MS, vn as PREVIEW_LANGUAGES, Er as PROMPT_ENVELOPE_RESERVE_BYTES, Dr as PROVIDER_READABLE_FILE_MEDIA_TYPES, N as PROXY_SANDBOX_REQUEST, P as REPORT_AI_TOKEN_USAGE, Si as SANDBOX_READY_TTL_MS, Rt as SILENCE_SUBMIT_MS, Je as SPEAKING_RATE_MAX, Ye as SPEAKING_RATE_MAX_STREAMING, Xe as SPEAKING_RATE_MAX_SYNC, Ze as SPEAKING_RATE_MIN, dn as SPEECH_CHUNK_CHARS, fn as SPEECH_CHUNK_CJK_CHARS, Kt as SPEECH_LANG, Ln as SPOKEN_LABEL_LANGUAGES, vt as STAGE_COPY, F as STOP_ASSISTANT_SANDBOX, je as STREAM_BUDGET_MS, yt as THINKING_PHRASES, Or as TURN_BODY_HEADROOM_BYTES, Ka as TurnActivityLine, qt as VOICE_LIST_TIMEOUT_MS, wt as VOICE_MUTED_LABEL, Tt as VOICE_THINKING_LABEL, ja as VoiceCaption, Ma as VoiceConversationView, Ia as VoiceMiniController, La as VoiceStage, Pa as VoiceStatusLine, Fa as VoiceStatusText, Ra as VoiceTranscriptDrawer, Na as VoiceWaveform, I as WAIT_FOR_SANDBOX_RUNNING, q as abortAssistantTurn, Ri as activePanelOverlay, At as advanceRotationClock, eo as aiCreditsUpdatedEventName, ta as applyPreviewEvent, J as approvePendingWrite, zi as assistantPanelOwnsEscape, _ as assistantRoutePath, c as assistantTranslationKey, v as assistantUrlTransform, bi as availableAttachmentSources, Qe as base64ToBytes, y as browserShouldHandle, He as browserSpeechEngine, si as buildAssistantProgress, Y as buildAssistantSandboxEnv, kr as buildAttachmentPromptBlock, an as buildContinuedFromVoiceNote, ve as buildProgress, Ar as buildPromptParts, X as buildPromptRequestBody, jr as buildPromptWithAttachments, $e as buildRequest, E as buildSandboxContextInput, on as buildVoiceTranscriptMarkdown, Fe as chatTurns, Z as checkAssistantAiCredits, pn as chunkForSpeech, b as classifyAssistantHref, Mr as classifyAttachment, et as classifyHttpFailure, S as classifyQuotaError, er as columnLetterToIndex, Et as composeVoiceStatus, ot as configureSpeechEngine, mn as containsCjk, d as copyToClipboard, Nr as countInlineImageCandidates, Pr as countInlinedImageParts, ui as countSpokenTurns, na as createAssistantPreviewSurface, Q as createAssistantSandbox, $ as createAssistantSession, it as createHostedTtsEngine, Ci as createReadinessTracker, at as createRoutingSpeechEngine, oa as createRunIdentityCache, Oe as createSandboxAssistantTransport, st as createSpeechEngines, ra as currentPreviewOwner, tt as decodeAudioResponse, tr as decodeXmlEntities, C as describeQuotaError, Fr as detectDocumentFormat, zn as detectScriptLocale, xi as deviceHasCamera, to as dispatchAssistantQuotaExhausted, nr as docxXmlToText, ee as downloadAssistantArtifact, za as downloadFile, ni as elapsedSince, Bi as escapeDismisses, Ir as estimateTurnBodyBytes, D as executeSandboxGraphQL, Ba as exportConversation, te as extendAssistantSandboxTTL, io as extractDocumentText, jn as findAssistantLanguage, ne as findExistingSandbox, Fn as findPendingWrite, rr as fitPdfPages, Vi as focusIsInsidePanel, Lr as formatBytes, ir as formatPageRanges, gi as getActorId, re as getAssistantArtifacts, ti as getAssistantDisplayContent, ye as getAssistantMedia, ie as getAssistantMessages, ae as getAssistantSession, oe as getAssistantStreamAccess, be as getAssistantText, Rr as getAttachmentSendBlocker, U as getCapability, zr as getExtension, R as getImageForMode, z as getImageTagForMode, _i as getOrganizationId, xe as getRawMessageCreatedAt, B as getResourcesForMode, V as getSandboxImageRegistry, Br as getSendableAttachments, ct as getSpeechEngine, Se as getToolProgress, vi as getWorkspaceId, Ie as groupBySession, Le as groupConsecutiveBySession, Vr as hasAttachmentWorkInFlight, Ge as hostedLocaleFor, Ke as hostedSupportsLanguage, p as imageHostLabel, Me as incompleteTurnNotice, Xi as isBlankProse, zt as isCapturing, Bt as isEcho, Zr as isLegacyFiller, Qr as isLegacyStopped, ar as isMostlyImagePages, Qa as isMultimodalBodyRejection, so as isProdRuntime, Hr as isProviderReadableFilePart, w as isQuotaExhaustedError, Ce as isReapedSandboxConnectionError, wi as isRecentlyVerified, we as isRecoverable, $a as isRecoverableAssistantError, m as isRemoteImageSrc, Zi as isRunningStatus, Hn as isSpeakingMessage, Jt as isSpeechBlocked, $r as isStageCopy, Vt as isSubmittable, Jr as isTurnInFlight, W as isUnknownFieldError, Re as isVoiceTurn, or as joinSheets, Yt as languageDisplayName, Te as mapSessionToHistory, G as markSupported, K as markUnsupported, Ee as mergeMessagesById, dt as micIsInterrupt, se as modeRequiresConfirmWrites, ri as msUntilNextPhrase, la as nextActiveTab, wa as nextModeIndex, Hi as nextPanelOverlays, Qi as nextPreviewEvents, Xt as normalizeLangTag, no as notifyAiCreditsUpdated, Ht as orbMode, sr as pageMarker, Ui as panelOwnsEscape, In as parseConfirmationRefusal, Ur as parseDataUrl, cr as parseSharedStrings, li as parseToolActivity, lr as parseWorkbookSheets, ur as pdfTextItemsToPage, ua as pinActiveTab, Yr as planAbandonedTurn, Ut as planReplyConsumption, Xr as planTurnAbort, Dn as pollDelayMs, Zt as primaryLanguageSubtag, Un as publishedChunks, T as quotaExhaustedEventName, lt as readSpeechEngineConfig, ce as releaseSupersededAssistantSandboxes, Nn as replyFollowsInput, le as reportAssistantAiTokenUsage, Wn as requiresCancel, ut as resetSpeechEngine, Mn as resolveAssistantLanguage, Pn as resolveLanguagePair, n as resolveModeConfig, H as resolveSandboxAssistantMode, Bn as resolveSpeechLocale, jt as rotationElapsedMs, ia as runBelongsTo, sa as runIdentities, aa as sameOwner, De as sanitize, ue as selectExistingAssistantSandbox, de as selectSupersededAssistantSandboxes, Qt as selectVoiceForLocale, fe as sendAssistantPromptAsync, pe as sendHeartbeat, dr as sheetXmlToRows, nt as shouldDisableEngine, da as shouldPinOnMove, fa as shouldPinOnSelect, xn as showPreviousChunk, ft as showsAssistantCaption, pt as showsUserCaption, hn as speakableEmail, $t as speechGate, Rn as speechLabelsFor, en as speechLangForLocale, Gn as speechPlaybackReducer, rt as splitForVendor, gn as splitTableRow, Wt as spokenSoFar, di as spokenTurnText, bt as stageText, ii as startPhraseTicker, Mt as startRotationTicker, xt as statusStageCopy, pa as stepsFromToolActivity, me as stopReapedAssistantSandbox, Ne as streamBudgetMs, ei as stripLegacyFillerPrefix, fr as summarisePageText, Nt as syncRotationClock, ma as tabForArrowKey, St as thinkingPhrase, Ct as thinkingPhraseEntry, On as toCaptionText, Wr as toMessageAttachment, _n as toSpeakableText, Gr as truncateForInline, pr as truncatePagesForInline, ai as turnActivityCopy, oi as turnActivityStage, Xa as useAssistantApiAccess, ao as useAssistantAttachments, Ni as useAssistantConnectSource, co as useAssistantHeartbeat, l as useAssistantI18nNamespace, lo as useAssistantKeyboardShortcuts, x as useAssistantNavigate, r as useAssistantPageLabel, Ji as useAssistantPreview, va as useAssistantPreviewBridge, i as useAssistantProduct, a as useAssistantProductOrNull, mi as useAssistantSpeech, o as useAssistantStorageFolders, qr as useAssistantStore, u as useAssistantTr, Za as useConversationTurns, Wi as useDropdownEscape, _a as useOverlayFocus, ke as useSandboxAssistantTransport, e as useVoiceInput, hi as useVoiceSession, ro as useWorkspaceWriteAccess, Kr as validateFile, tn as voiceAvailability, ze as voiceMarker, yn as voicePreviewText, nn as voiceQualityRank, Be as voiceSessionIdOf, Gt as voiceSessionReducer, mt as voiceStageState, Dt as voiceStatusParts, Ot as voiceStatusSuffix, sn as voiceTranscriptFilename, Ve as voiceTurnsOnly, rn as voicesForLocale, he as waitForAssistantServiceReady, ge as waitForSandboxRunning, ht as waveformIsActive, gt as waveformIsSettled, Pe as withIncompleteTurnNotice };
81
+ import { REDUCED_MOTION_ATTRIBUTE as va, REDUCED_MOTION_QUERY as ya, readReducedMotion as ba, subscribeReducedMotion as xa, usePrefersReducedMotion as Sa } from "./shared/assistant/ui/usePrefersReducedMotion.js";
82
+ import { useAssistantPreviewBridge as Ca } from "./shared/assistant/preview/useAssistantPreviewBridge.js";
83
+ import { AssistantPreviewOverlay as wa } from "./shared/assistant/preview/AssistantPreviewOverlay.js";
84
+ import { AssistantLanguageSelector as Ta, FOLLOW_APP_LOCALE as Ea } from "./shared/assistant/ui/composer/AssistantLanguageSelector.js";
85
+ import { ASSISTANT_MODE_META as Da, AssistantModeSelector as Oa, nextModeIndex as ka } from "./shared/assistant/ui/composer/AssistantModeSelector.js";
86
+ import { AssistantVoiceButton as Aa } from "./shared/assistant/ui/composer/AssistantVoiceButton.js";
87
+ import { AUTO_VOICE as ja, AssistantVoiceSelector as Ma } from "./shared/assistant/ui/composer/AssistantVoiceSelector.js";
88
+ import { AssistantVoiceOrb as Na } from "./shared/assistant/ui/voice/AssistantVoiceOrb.js";
89
+ import { AssistantVoiceSessionButton as Pa } from "./shared/assistant/ui/voice/AssistantVoiceSessionButton.js";
90
+ import { CAPTION_SCROLL_ATTR as Fa, VoiceCaption as Ia } from "./shared/assistant/ui/voice/VoiceCaption.js";
91
+ import { VoiceConversationView as La } from "./shared/assistant/ui/voice/VoiceConversationView.js";
92
+ import { VoiceWaveform as Ra } from "./shared/assistant/ui/voice/VoiceWaveform.js";
93
+ import { VoiceStatusLine as za, VoiceStatusText as Ba } from "./shared/assistant/ui/voice/VoiceStatusText.js";
94
+ import { VoiceMiniController as Va } from "./shared/assistant/ui/voice/VoiceMiniController.js";
95
+ import { VoiceStage as Ha } from "./shared/assistant/ui/voice/VoiceStage.js";
96
+ import { VoiceTranscriptDrawer as Ua } from "./shared/assistant/ui/voice/VoiceTranscriptDrawer.js";
97
+ import { downloadFile as Wa, exportConversation as Ga } from "./shared/assistant/exportConversation.js";
98
+ import { AssistantMoreMenu as Ka } from "./shared/assistant/ui/AssistantMoreMenu.js";
99
+ import { AssistantHeader as qa } from "./shared/assistant/ui/AssistantHeader.js";
100
+ import { AssistantConversationList as Ja } from "./shared/assistant/ui/AssistantConversationList.js";
101
+ import { AssistantEmptyState as Ya } from "./shared/assistant/ui/AssistantEmptyState.js";
102
+ import { AssistantTurnActivity as Xa, TurnActivityLine as Za } from "./shared/assistant/ui/AssistantTurnActivity.js";
103
+ import { AssistantMessageItem as Qa } from "./shared/assistant/ui/AssistantMessageItem.js";
104
+ import { AssistantMessageList as $a } from "./shared/assistant/ui/AssistantMessageList.js";
105
+ import { AssistantVoiceSession as eo } from "./shared/assistant/ui/voice/AssistantVoiceSession.js";
106
+ import { useAssistantApiAccess as to } from "./shared/assistant/useAssistantApiAccess.js";
107
+ import { useConversationTurns as no } from "./shared/assistant/useConversationTurns.js";
108
+ import { isMultimodalBodyRejection as ro, isRecoverableAssistantError as io } from "./shared/assistant/transportErrors.js";
109
+ import { aiCreditsUpdatedEventName as ao, dispatchAssistantQuotaExhausted as oo, notifyAiCreditsUpdated as so } from "./shared/assistant/aiCredits.js";
110
+ import { useWorkspaceWriteAccess as co } from "./shared/assistant/useWorkspaceWriteAccess.js";
111
+ import { extractDocumentText as lo } from "./shared/assistant/documentExtract.js";
112
+ import { useAssistantAttachments as uo } from "./shared/assistant/useAssistantAttachments.js";
113
+ import { AssistantComposer as fo } from "./shared/assistant/ui/composer/AssistantComposer.js";
114
+ import { isProdRuntime as po } from "./shared/assistant/env.js";
115
+ import { useAssistantHeartbeat as mo } from "./shared/assistant/useAssistantHeartbeat.js";
116
+ import { useAssistantKeyboardShortcuts as ho } from "./shared/assistant/useAssistantKeyboardShortcuts.js";
117
+ import { AssistantApiCallsConsentDialog as go } from "./shared/assistant/ui/AssistantApiCallsConsentDialog.js";
118
+ import { AssistantChatArea as _o } from "./shared/assistant/ui/AssistantChatArea.js";
119
+ import { AIAssistantPanel as vo } from "./shared/assistant/ui/AIAssistantPanel.js";
120
+ export { vo as AIAssistantPanel, L as ASSISTANT_API_AUTH_STRATEGY, kn as ASSISTANT_LANGUAGES, Da as ASSISTANT_MODE_META, Fi as ASSISTANT_OVERLAY_ATTR, Ii as ASSISTANT_PANEL_ATTR, mr as ATTACHMENT_ACCEPT, yi as ATTACHMENT_SOURCES, ja as AUTO_VOICE, go as AssistantApiCallsConsentDialog, Gi as AssistantAttachmentButton, Ki as AssistantAttachmentChips, Ti as AssistantAutoSpeakToggle, fi as AssistantAvatar, _o as AssistantChatArea, fo as AssistantComposer, Pi as AssistantConnectSourceItem, Mi as AssistantConnectSourceProvider, Ja as AssistantConversationList, Ya as AssistantEmptyState, ga as AssistantEntityPreview, qa as AssistantHeader, s as AssistantI18nProvider, Oi as AssistantLanguageMenu, Ta as AssistantLanguageSelector, f as AssistantMarkdownImage, h as AssistantMarkdownRenderer, Ei as AssistantMessageAttachments, Qa as AssistantMessageItem, $a as AssistantMessageList, Oa as AssistantModeSelector, Ka as AssistantMoreMenu, g as AssistantNavigateProvider, Di as AssistantPendingWriteCard, wa as AssistantPreviewOverlay, qi as AssistantPreviewProvider, t as AssistantProductProvider, ki as AssistantReplyLanguageSelector, _e as AssistantRuntimeManager, Ai as AssistantSpeakButton, pi as AssistantSpeechProvider, ji as AssistantSpokenTurnsNotice, ha as AssistantStepRail, ci as AssistantToolActivity, Xa as AssistantTurnActivity, Aa as AssistantVoiceButton, Na as AssistantVoiceOrb, Ma as AssistantVoiceSelector, eo as AssistantVoiceSession, Pa as AssistantVoiceSessionButton, hr as AttachmentRejectedError, Jn as BOILERPLATE_PAGE_SHARE, Fa as CAPTION_SCROLL_ATTR, O as CHECK_AI_CREDITS, k as CREATE_SANDBOX, cn as DEFAULT_SPEAKABLE_LABELS, An as DEFAULT_SPEECH_RATE, Ae as DEFAULT_STREAM_BUDGET_MS, Pt as ENDPOINT_GRACE_MS, A as EXTEND_SANDBOX_TTL, Ea as FOLLOW_APP_LOCALE, j as GET_ACTIVE_SANDBOXES, M as GET_SANDBOX, qe as HOSTED_TTS_MAX_CHARS, Ue as HOSTED_TTS_TIER, We as HOSTED_VOICES, ca as IDLE_ACTIVE_TAB, Vn as IDLE_PLAYBACK, $i as IDLE_PREVIEW, Yi as IDLE_PREVIEW_STATE, kt as IDLE_ROTATION_CLOCK, Ft as INITIAL_SESSION, gr as INLINE_IMAGE_MAX_DIM, _r as INLINE_IMAGE_QUALITY, It as INTERRUPT_MAX_MS, Lt as INTERRUPT_MIN_MS, vr as MAX_ATTACHMENTS, Yn as MAX_BOILERPLATE_LINE_CHARS, Xn as MAX_EXTRACTED_CHARS, yr as MAX_FILE_BYTES, br as MAX_INLINE_CHARS_PER_FILE, xr as MAX_INLINE_CHARS_TOTAL, Kn as MAX_INLINE_IMAGE_BASE64_BYTES, Sr as MAX_INLINE_IMAGE_BASE64_CHARS, Cr as MAX_INLINE_IMAGE_PARTS, wr as MAX_INLINE_TURN_BODY_BYTES, Zn as MAX_PDF_PAGES_SCANNED, qn as MAX_REQUEST_BODY_BYTES, ln as MAX_SPEAKABLE_CHARS, un as MAX_SPOKEN_TABLE_ROWS, Tr as MAX_TURN_BODY_BYTES, bn as MINI_CAPTION_BUDGET, Qn as MIN_PAGE_TEXT_CHARS, $n as MIN_TEXT_PAGE_SHARE, ea as NO_OWNER, Li as NO_PANEL_OVERLAY, _t as PHRASE_ROTATE_MS, Sn as POLL_FAST_MS, Cn as POLL_FAST_UNTIL_MS, wn as POLL_SLOW_MS, Tn as POLL_STEADY_MS, En as POLL_STEADY_UNTIL_MS, vn as PREVIEW_LANGUAGES, Er as PROMPT_ENVELOPE_RESERVE_BYTES, Dr as PROVIDER_READABLE_FILE_MEDIA_TYPES, N as PROXY_SANDBOX_REQUEST, va as REDUCED_MOTION_ATTRIBUTE, ya as REDUCED_MOTION_QUERY, P as REPORT_AI_TOKEN_USAGE, Si as SANDBOX_READY_TTL_MS, Rt as SILENCE_SUBMIT_MS, Je as SPEAKING_RATE_MAX, Ye as SPEAKING_RATE_MAX_STREAMING, Xe as SPEAKING_RATE_MAX_SYNC, Ze as SPEAKING_RATE_MIN, dn as SPEECH_CHUNK_CHARS, fn as SPEECH_CHUNK_CJK_CHARS, Kt as SPEECH_LANG, Ln as SPOKEN_LABEL_LANGUAGES, vt as STAGE_COPY, F as STOP_ASSISTANT_SANDBOX, je as STREAM_BUDGET_MS, yt as THINKING_PHRASES, Or as TURN_BODY_HEADROOM_BYTES, Za as TurnActivityLine, qt as VOICE_LIST_TIMEOUT_MS, wt as VOICE_MUTED_LABEL, Tt as VOICE_THINKING_LABEL, Ia as VoiceCaption, La as VoiceConversationView, Va as VoiceMiniController, Ha as VoiceStage, za as VoiceStatusLine, Ba as VoiceStatusText, Ua as VoiceTranscriptDrawer, Ra as VoiceWaveform, I as WAIT_FOR_SANDBOX_RUNNING, q as abortAssistantTurn, Ri as activePanelOverlay, At as advanceRotationClock, ao as aiCreditsUpdatedEventName, ta as applyPreviewEvent, J as approvePendingWrite, zi as assistantPanelOwnsEscape, _ as assistantRoutePath, c as assistantTranslationKey, v as assistantUrlTransform, bi as availableAttachmentSources, Qe as base64ToBytes, y as browserShouldHandle, He as browserSpeechEngine, si as buildAssistantProgress, Y as buildAssistantSandboxEnv, kr as buildAttachmentPromptBlock, an as buildContinuedFromVoiceNote, ve as buildProgress, Ar as buildPromptParts, X as buildPromptRequestBody, jr as buildPromptWithAttachments, $e as buildRequest, E as buildSandboxContextInput, on as buildVoiceTranscriptMarkdown, Fe as chatTurns, Z as checkAssistantAiCredits, pn as chunkForSpeech, b as classifyAssistantHref, Mr as classifyAttachment, et as classifyHttpFailure, S as classifyQuotaError, er as columnLetterToIndex, Et as composeVoiceStatus, ot as configureSpeechEngine, mn as containsCjk, d as copyToClipboard, Nr as countInlineImageCandidates, Pr as countInlinedImageParts, ui as countSpokenTurns, na as createAssistantPreviewSurface, Q as createAssistantSandbox, $ as createAssistantSession, it as createHostedTtsEngine, Ci as createReadinessTracker, at as createRoutingSpeechEngine, oa as createRunIdentityCache, Oe as createSandboxAssistantTransport, st as createSpeechEngines, ra as currentPreviewOwner, tt as decodeAudioResponse, tr as decodeXmlEntities, C as describeQuotaError, Fr as detectDocumentFormat, zn as detectScriptLocale, xi as deviceHasCamera, oo as dispatchAssistantQuotaExhausted, nr as docxXmlToText, ee as downloadAssistantArtifact, Wa as downloadFile, ni as elapsedSince, Bi as escapeDismisses, Ir as estimateTurnBodyBytes, D as executeSandboxGraphQL, Ga as exportConversation, te as extendAssistantSandboxTTL, lo as extractDocumentText, jn as findAssistantLanguage, ne as findExistingSandbox, Fn as findPendingWrite, rr as fitPdfPages, Vi as focusIsInsidePanel, Lr as formatBytes, ir as formatPageRanges, gi as getActorId, re as getAssistantArtifacts, ti as getAssistantDisplayContent, ye as getAssistantMedia, ie as getAssistantMessages, ae as getAssistantSession, oe as getAssistantStreamAccess, be as getAssistantText, Rr as getAttachmentSendBlocker, U as getCapability, zr as getExtension, R as getImageForMode, z as getImageTagForMode, _i as getOrganizationId, xe as getRawMessageCreatedAt, B as getResourcesForMode, V as getSandboxImageRegistry, Br as getSendableAttachments, ct as getSpeechEngine, Se as getToolProgress, vi as getWorkspaceId, Ie as groupBySession, Le as groupConsecutiveBySession, Vr as hasAttachmentWorkInFlight, Ge as hostedLocaleFor, Ke as hostedSupportsLanguage, p as imageHostLabel, Me as incompleteTurnNotice, Xi as isBlankProse, zt as isCapturing, Bt as isEcho, Zr as isLegacyFiller, Qr as isLegacyStopped, ar as isMostlyImagePages, ro as isMultimodalBodyRejection, po as isProdRuntime, Hr as isProviderReadableFilePart, w as isQuotaExhaustedError, Ce as isReapedSandboxConnectionError, wi as isRecentlyVerified, we as isRecoverable, io as isRecoverableAssistantError, m as isRemoteImageSrc, Zi as isRunningStatus, Hn as isSpeakingMessage, Jt as isSpeechBlocked, $r as isStageCopy, Vt as isSubmittable, Jr as isTurnInFlight, W as isUnknownFieldError, Re as isVoiceTurn, or as joinSheets, Yt as languageDisplayName, Te as mapSessionToHistory, G as markSupported, K as markUnsupported, Ee as mergeMessagesById, dt as micIsInterrupt, se as modeRequiresConfirmWrites, ri as msUntilNextPhrase, la as nextActiveTab, ka as nextModeIndex, Hi as nextPanelOverlays, Qi as nextPreviewEvents, Xt as normalizeLangTag, so as notifyAiCreditsUpdated, Ht as orbMode, sr as pageMarker, Ui as panelOwnsEscape, In as parseConfirmationRefusal, Ur as parseDataUrl, cr as parseSharedStrings, li as parseToolActivity, lr as parseWorkbookSheets, ur as pdfTextItemsToPage, ua as pinActiveTab, Yr as planAbandonedTurn, Ut as planReplyConsumption, Xr as planTurnAbort, Dn as pollDelayMs, Zt as primaryLanguageSubtag, Un as publishedChunks, T as quotaExhaustedEventName, ba as readReducedMotion, lt as readSpeechEngineConfig, ce as releaseSupersededAssistantSandboxes, Nn as replyFollowsInput, le as reportAssistantAiTokenUsage, Wn as requiresCancel, ut as resetSpeechEngine, Mn as resolveAssistantLanguage, Pn as resolveLanguagePair, n as resolveModeConfig, H as resolveSandboxAssistantMode, Bn as resolveSpeechLocale, jt as rotationElapsedMs, ia as runBelongsTo, sa as runIdentities, aa as sameOwner, De as sanitize, ue as selectExistingAssistantSandbox, de as selectSupersededAssistantSandboxes, Qt as selectVoiceForLocale, fe as sendAssistantPromptAsync, pe as sendHeartbeat, dr as sheetXmlToRows, nt as shouldDisableEngine, da as shouldPinOnMove, fa as shouldPinOnSelect, xn as showPreviousChunk, ft as showsAssistantCaption, pt as showsUserCaption, hn as speakableEmail, $t as speechGate, Rn as speechLabelsFor, en as speechLangForLocale, Gn as speechPlaybackReducer, rt as splitForVendor, gn as splitTableRow, Wt as spokenSoFar, di as spokenTurnText, bt as stageText, ii as startPhraseTicker, Mt as startRotationTicker, xt as statusStageCopy, pa as stepsFromToolActivity, me as stopReapedAssistantSandbox, Ne as streamBudgetMs, ei as stripLegacyFillerPrefix, xa as subscribeReducedMotion, fr as summarisePageText, Nt as syncRotationClock, ma as tabForArrowKey, St as thinkingPhrase, Ct as thinkingPhraseEntry, On as toCaptionText, Wr as toMessageAttachment, _n as toSpeakableText, Gr as truncateForInline, pr as truncatePagesForInline, ai as turnActivityCopy, oi as turnActivityStage, to as useAssistantApiAccess, uo as useAssistantAttachments, Ni as useAssistantConnectSource, mo as useAssistantHeartbeat, l as useAssistantI18nNamespace, ho as useAssistantKeyboardShortcuts, x as useAssistantNavigate, r as useAssistantPageLabel, Ji as useAssistantPreview, Ca as useAssistantPreviewBridge, i as useAssistantProduct, a as useAssistantProductOrNull, mi as useAssistantSpeech, o as useAssistantStorageFolders, qr as useAssistantStore, u as useAssistantTr, no as useConversationTurns, Wi as useDropdownEscape, _a as useOverlayFocus, Sa as usePrefersReducedMotion, ke as useSandboxAssistantTransport, e as useVoiceInput, hi as useVoiceSession, co as useWorkspaceWriteAccess, Kr as validateFile, tn as voiceAvailability, ze as voiceMarker, yn as voicePreviewText, nn as voiceQualityRank, Be as voiceSessionIdOf, Gt as voiceSessionReducer, mt as voiceStageState, Dt as voiceStatusParts, Ot as voiceStatusSuffix, sn as voiceTranscriptFilename, Ve as voiceTurnsOnly, rn as voicesForLocale, he as waitForAssistantServiceReady, ge as waitForSandboxRunning, ht as waveformIsActive, gt as waveformIsSettled, Pe as withIncompleteTurnNotice };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/fe-libs",
3
- "version": "2026.914.1",
3
+ "version": "2026.914.2",
4
4
  "description": "Burdenoff frontend primitives and domain libraries",
5
5
  "type": "module",
6
6
  "bin": {