@burdenoff/fe-libs 2026.1024.2 → 2026.1024.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/dist/chrome/FooterBar.d.ts +1 -1
  2. package/dist/chrome/NativePageTransition.d.ts +1 -1
  3. package/dist/chrome/ProductPickerSheet.js +42 -42
  4. package/dist/chrome/ProductSwitcher.d.ts +8 -0
  5. package/dist/chrome/ProductSwitcher.js +83 -72
  6. package/dist/chrome/index.d.ts +9 -9
  7. package/dist/chrome/swipe/swipeMath.d.ts +1 -1
  8. package/dist/shared/assistant/api.d.ts +3 -3
  9. package/dist/shared/assistant/appControls/grammar.d.ts +21 -21
  10. package/dist/shared/assistant/appControls/languageReply.d.ts +1 -1
  11. package/dist/shared/assistant/appControls/names.d.ts +3 -3
  12. package/dist/shared/assistant/appControls/pageAdapters.d.ts +5 -5
  13. package/dist/shared/assistant/appControls/plan.d.ts +38 -38
  14. package/dist/shared/assistant/appControls/types.d.ts +15 -15
  15. package/dist/shared/assistant/appControls/useAssistantControl.d.ts +1 -1
  16. package/dist/shared/assistant/attachmentSources.d.ts +2 -2
  17. package/dist/shared/assistant/attachments.d.ts +5 -5
  18. package/dist/shared/assistant/autoRouting.d.ts +6 -6
  19. package/dist/shared/assistant/avatar/live/LiveAvatarMinutes.d.ts +24 -0
  20. package/dist/shared/assistant/avatar/live/LiveAvatarMinutes.js +161 -0
  21. package/dist/shared/assistant/avatar/live/LiveAvatarStage.js +95 -73
  22. package/dist/shared/assistant/avatar/live/LiveAvatarTabView.d.ts +6 -0
  23. package/dist/shared/assistant/avatar/live/LiveAvatarTabView.js +195 -171
  24. package/dist/shared/assistant/avatar/live/avatarSessionClient.d.ts +77 -1
  25. package/dist/shared/assistant/avatar/live/avatarSessionClient.js +193 -72
  26. package/dist/shared/assistant/avatar/live/createLiveAvatarSeam.d.ts +14 -1
  27. package/dist/shared/assistant/avatar/live/createLiveAvatarSeam.js +65 -40
  28. package/dist/shared/assistant/avatar/live/liveAvatarController.d.ts +64 -2
  29. package/dist/shared/assistant/avatar/live/liveAvatarController.js +403 -242
  30. package/dist/shared/assistant/avatar/live/liveAvatarMinutesView.d.ts +127 -0
  31. package/dist/shared/assistant/avatar/live/liveAvatarMinutesView.js +168 -0
  32. package/dist/shared/assistant/avatar/live/liveAvatarStatus.d.ts +3 -0
  33. package/dist/shared/assistant/avatar/live/liveAvatarStatus.js +11 -7
  34. package/dist/shared/assistant/avatar/useAvatarCopy.d.ts +127 -2
  35. package/dist/shared/assistant/avatar/useAvatarCopy.js +116 -7
  36. package/dist/shared/assistant/conversation.d.ts +20 -20
  37. package/dist/shared/assistant/displayContent.d.ts +4 -4
  38. package/dist/shared/assistant/documentText.d.ts +3 -3
  39. package/dist/shared/assistant/exportConversation.d.ts +1 -1
  40. package/dist/shared/assistant/history/historyControls.d.ts +4 -4
  41. package/dist/shared/assistant/history/historyErrors.d.ts +3 -3
  42. package/dist/shared/assistant/history/historyList.d.ts +5 -5
  43. package/dist/shared/assistant/history/historyMerge.d.ts +4 -4
  44. package/dist/shared/assistant/history/historyOperations.d.ts +1 -1
  45. package/dist/shared/assistant/history/historySearch.d.ts +5 -5
  46. package/dist/shared/assistant/history/historyStatus.d.ts +1 -1
  47. package/dist/shared/assistant/history/historyTypes.d.ts +12 -12
  48. package/dist/shared/assistant/history/profileBoundStorage.d.ts +2 -2
  49. package/dist/shared/assistant/i18n.d.ts +1 -1
  50. package/dist/shared/assistant/i18nManifest.d.ts +566 -535
  51. package/dist/shared/assistant/i18nManifest.js +55 -24
  52. package/dist/shared/assistant/index.d.ts +2 -0
  53. package/dist/shared/assistant/liveDeltas.d.ts +1 -1
  54. package/dist/shared/assistant/liveOverlay.d.ts +1 -1
  55. package/dist/shared/assistant/localUiCommandCopy.d.ts +1 -1
  56. package/dist/shared/assistant/localUiCommands.d.ts +22 -22
  57. package/dist/shared/assistant/localeCommands/engine.d.ts +5 -5
  58. package/dist/shared/assistant/localeCommands/evaluate.d.ts +8 -8
  59. package/dist/shared/assistant/localeCommands/fold.d.ts +2 -2
  60. package/dist/shared/assistant/localeCommands/frames.d.ts +3 -3
  61. package/dist/shared/assistant/localeCommands/gate.d.ts +3 -3
  62. package/dist/shared/assistant/localeCommands/languageNames.d.ts +1 -1
  63. package/dist/shared/assistant/localeCommands/normalise.d.ts +1 -1
  64. package/dist/shared/assistant/localeCommands/types.d.ts +4 -4
  65. package/dist/shared/assistant/modeCapabilities.d.ts +1 -1
  66. package/dist/shared/assistant/modeCopy.d.ts +2 -2
  67. package/dist/shared/assistant/permissionError.d.ts +2 -2
  68. package/dist/shared/assistant/preview/surfaceState.d.ts +1 -1
  69. package/dist/shared/assistant/preview/types.d.ts +5 -5
  70. package/dist/shared/assistant/preview/writeActionResults.d.ts +1 -1
  71. package/dist/shared/assistant/prewarm.d.ts +5 -5
  72. package/dist/shared/assistant/quota.d.ts +2 -2
  73. package/dist/shared/assistant/sandboxReadiness.d.ts +2 -2
  74. package/dist/shared/assistant/speech/speechFeed.d.ts +3 -3
  75. package/dist/shared/assistant/turnOutcome.d.ts +2 -2
  76. package/dist/shared/assistant/turnProgress.d.ts +1 -1
  77. package/dist/shared/assistant/turnState.d.ts +1 -1
  78. package/dist/shared/assistant/turnStream.d.ts +3 -3
  79. package/dist/shared/assistant/turnTimeline.d.ts +13 -13
  80. package/dist/shared/assistant/turnTimingReport.d.ts +1 -1
  81. package/dist/shared/assistant/turnTimingReporter.d.ts +3 -3
  82. package/dist/shared/assistant/ui/AssistantAvatarTabs.d.ts +1 -1
  83. package/dist/shared/assistant/ui/AssistantChatArea.js +17 -17
  84. package/dist/shared/assistant/ui/AssistantHistoryNotices.d.ts +1 -1
  85. package/dist/shared/assistant/ui/AssistantMarkdownRenderer.d.ts +5 -2
  86. package/dist/shared/assistant/ui/AssistantToolActivity.d.ts +1 -1
  87. package/dist/shared/assistant/ui/AssistantUiOfferLink.d.ts +2 -2
  88. package/dist/shared/assistant/ui/AssistantWriteConfirmDialog.d.ts +3 -3
  89. package/dist/shared/assistant/ui/assistantLiveAvatarSeam.d.ts +10 -2
  90. package/dist/shared/assistant/ui/avatar/AssistantAvatarTab.js +78 -76
  91. package/dist/shared/assistant/ui/avatar/avatarAskGate.d.ts +2 -0
  92. package/dist/shared/assistant/ui/avatar/avatarAskGate.js +1 -0
  93. package/dist/shared/assistant/ui/composer/AssistantAttachmentButton.d.ts +1 -1
  94. package/dist/shared/assistant/ui/composer/AssistantConnectSourceItem.d.ts +1 -1
  95. package/dist/shared/assistant/ui/leaveConfirmFocus.d.ts +1 -1
  96. package/dist/shared/assistant/ui/leaveConfirmNavigate.d.ts +3 -3
  97. package/dist/shared/assistant/ui/panelOverlays.d.ts +5 -5
  98. package/dist/shared/assistant/ui/useVoiceSession.d.ts +5 -5
  99. package/dist/shared/assistant/ui/useWriteProposalConfirm.d.ts +4 -4
  100. package/dist/shared/assistant/ui/useWriteProposals.d.ts +2 -2
  101. package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts +1 -1
  102. package/dist/shared/assistant/ui/voice/VoiceCaption.d.ts +1 -1
  103. package/dist/shared/assistant/ui/voice/VoiceWaveform.d.ts +1 -1
  104. package/dist/shared/assistant/ui/voice/voiceSessionEscape.d.ts +2 -2
  105. package/dist/shared/assistant/ui/voice/voiceStartGate.d.ts +6 -6
  106. package/dist/shared/assistant/ui/writeProposalPresentation.d.ts +1 -1
  107. package/dist/shared/assistant/uiActions/actOnResolve.d.ts +5 -5
  108. package/dist/shared/assistant/uiActions/assistantHref.d.ts +2 -2
  109. package/dist/shared/assistant/uiActions/backStack.d.ts +1 -1
  110. package/dist/shared/assistant/uiActions/deixis.d.ts +3 -3
  111. package/dist/shared/assistant/uiActions/entityRoutes.d.ts +1 -1
  112. package/dist/shared/assistant/uiActions/navigationOutcome.d.ts +8 -8
  113. package/dist/shared/assistant/uiActions/offerYesOnSurface.d.ts +1 -1
  114. package/dist/shared/assistant/uiActions/resolveTarget.d.ts +2 -2
  115. package/dist/shared/assistant/uiActions/uiOffers.d.ts +5 -5
  116. package/dist/shared/assistant/usageReporting.d.ts +2 -2
  117. package/dist/shared/assistant/useWorkspaceWriteAccess.d.ts +1 -1
  118. package/dist/shared/assistant/voice/affirmations.d.ts +1 -1
  119. package/dist/shared/assistant/voice/handsFree.d.ts +3 -3
  120. package/dist/shared/assistant/voice/handsfree/bargeIn.d.ts +5 -5
  121. package/dist/shared/assistant/voice/handsfree/echoGate.d.ts +6 -6
  122. package/dist/shared/assistant/voice/handsfree/handsFreeController.d.ts +7 -7
  123. package/dist/shared/assistant/voice/handsfree/handsFreeSetting.d.ts +2 -2
  124. package/dist/shared/assistant/voice/handsfree/micCapture.d.ts +1 -1
  125. package/dist/shared/assistant/voice/handsfree/playbackReference.d.ts +1 -1
  126. package/dist/shared/assistant/voice/handsfree/sttTransport.d.ts +3 -3
  127. package/dist/shared/assistant/voice/handsfree/useHandsFreeInterrupt.d.ts +4 -4
  128. package/dist/shared/assistant/voice/handsfree/vad.d.ts +1 -1
  129. package/dist/shared/assistant/voice/speechPlayback.d.ts +7 -7
  130. package/dist/shared/assistant/voice/useVoiceInput.d.ts +1 -1
  131. package/dist/shared/assistant/voice/voiceReopen.d.ts +8 -8
  132. package/dist/shared/assistant/writeConfirmSeam.d.ts +1 -1
  133. package/dist/shared/assistant/writeModeConsent.d.ts +7 -7
  134. package/dist/shared/assistant/writeProposalDiscovery.d.ts +3 -3
  135. package/dist/shared/assistant/writeProposalErrorCopy.d.ts +1 -1
  136. package/dist/shared/assistant/writeProposals.d.ts +23 -23
  137. package/dist/shared/assistant/writeReplyBinder.d.ts +11 -11
  138. package/dist/shared/assistant/writeReplySend.d.ts +7 -7
  139. package/dist/shared/components/LandingOrDashboardRedirect.d.ts +18 -3
  140. package/dist/shared/components/LandingOrDashboardRedirect.js +58 -28
  141. package/dist/shared/components/index.d.ts +2 -1
  142. package/dist/shared/events/index.d.ts +2 -1
  143. package/dist/shared/hooks/shell/globalSearchError.d.ts +2 -2
  144. package/dist/shared/navigation/productSwitchHandoff.d.ts +45 -0
  145. package/dist/shared/navigation/productSwitchHandoff.js +27 -0
  146. package/dist/shared/navigation/unsavedChanges.d.ts +1 -1
  147. package/dist/shared/utils/index.d.ts +3 -3
  148. package/dist/shared-assistant.js +227 -225
  149. package/dist/shared-components.js +7 -6
  150. package/dist/shared.js +71 -70
  151. package/package.json +3 -2
@@ -1,117 +1,119 @@
1
- import { clearReplyRequests as e } from "../../speech/replySpeechRequests.js";
2
- import { useAvatarCopy as t } from "../../avatar/useAvatarCopy.js";
3
- import { ASSISTANT_VOICE_SESSION_ATTR as n } from "../panelOverlays.js";
4
- import { useLiveAvatarHandsFreeGuard as r } from "../assistantLiveAvatarSeam.js";
5
- import { avatarAskBlockerLasts as i } from "./avatarAskGate.js";
6
- import { AvatarTabAskBox as a } from "./AvatarTabAskBox.js";
7
- import { AvatarTabLastExchange as o } from "./AvatarTabLastExchange.js";
8
- import { useAvatarTabExchange as s } from "./avatarTabExchange.js";
9
- import { useEffect as c, useLayoutEffect as l, useRef as u, useState as d } from "react";
10
- import { jsx as f, jsxs as p } from "react/jsx-runtime";
1
+ import { useAssistantNavigate as e } from "../AssistantMarkdownRenderer.js";
2
+ import { clearReplyRequests as t } from "../../speech/replySpeechRequests.js";
3
+ import { useAvatarCopy as n } from "../../avatar/useAvatarCopy.js";
4
+ import { ASSISTANT_VOICE_SESSION_ATTR as r } from "../panelOverlays.js";
5
+ import { useLiveAvatarHandsFreeGuard as i } from "../assistantLiveAvatarSeam.js";
6
+ import { avatarAskBlockerLasts as a } from "./avatarAskGate.js";
7
+ import { AvatarTabAskBox as o } from "./AvatarTabAskBox.js";
8
+ import { AvatarTabLastExchange as s } from "./AvatarTabLastExchange.js";
9
+ import { useAvatarTabExchange as c } from "./avatarTabExchange.js";
10
+ import { useEffect as l, useLayoutEffect as u, useRef as d, useState as f } from "react";
11
+ import { jsx as p, jsxs as m } from "react/jsx-runtime";
11
12
  //#region src/shared/assistant/ui/avatar/AssistantAvatarTab.tsx
12
- var m = 180;
13
- function h(e, t) {
14
- let [r, i] = d(0);
15
- return l(() => {
13
+ var h = 180;
14
+ function g(e, t) {
15
+ let [n, i] = f(0);
16
+ return u(() => {
16
17
  if (!t) return;
17
- let r = e.current?.parentElement?.querySelector(`[${n}]`);
18
- if (!r) return;
18
+ let n = e.current?.parentElement?.querySelector(`[${r}]`);
19
+ if (!n) return;
19
20
  let a = () => {
20
- let e = typeof r.getBoundingClientRect == "function" ? r.getBoundingClientRect().height : 0;
21
+ let e = typeof n.getBoundingClientRect == "function" ? n.getBoundingClientRect().height : 0;
21
22
  i(Math.round(e));
22
23
  };
23
24
  if (a(), typeof ResizeObserver > "u") return;
24
25
  let o = new ResizeObserver(a);
25
- return o.observe(r), () => o.disconnect();
26
- }, [e, t]), t ? r > 0 ? r : m : 0;
26
+ return o.observe(n), () => o.disconnect();
27
+ }, [e, t]), t ? n > 0 ? n : h : 0;
27
28
  }
28
- function g() {
29
+ function _() {
29
30
  if (typeof document > "u") return !1;
30
31
  let e = document.activeElement;
31
32
  return e === null || e === document.body || !e.isConnected || e.hasAttribute("data-assistant-panel");
32
33
  }
33
- var _ = ({ state: e, restored: n }) => {
34
- let r = t();
35
- return /* @__PURE__ */ f("p", {
34
+ var v = ({ state: e, restored: t }) => {
35
+ let r = n();
36
+ return /* @__PURE__ */ p("p", {
36
37
  className: "sr-only",
37
38
  "aria-live": "polite",
38
39
  "aria-atomic": "true",
39
40
  "data-testid": "assistant-avatar-tab-ask-live",
40
- children: e === "thinking" ? r.askThinking : e === "not-spoken" ? r.askNotSpoken : e === "cut" ? r.askCut : e === "not-heard" ? r.askNotHeard : e === "failed" ? n ? r.askFailed : r.askFailedInChat : ""
41
+ children: e === "thinking" ? r.askThinking : e === "not-spoken" ? r.askNotSpoken : e === "cut" ? r.askCut : e === "not-heard" ? r.askNotHeard : e === "failed" ? t ? r.askFailed : r.askFailedInChat : ""
41
42
  });
42
- }, v = ({ tab: t, id: n, labelledBy: m, leaveHintId: v, shown: y, voice: b, ask: x }) => {
43
- let S = u(null), C = u(null), w = u(null), T = r(), E = h(S, b.live), D = u(null);
44
- l(() => {
45
- let n = (D.current?.setup ?? 0) + 1;
46
- return D.current = {
47
- tab: t,
48
- setup: n
49
- }, t.setOpen(!0), () => {
43
+ }, y = ({ tab: n, id: r, labelledBy: h, leaveHintId: y, shown: b, voice: x, ask: S }) => {
44
+ let C = d(null), w = d(null), T = d(null), E = i(), D = g(C, x.live), O = e(), k = d(null);
45
+ u(() => {
46
+ let e = (k.current?.setup ?? 0) + 1;
47
+ return k.current = {
48
+ tab: n,
49
+ setup: e
50
+ }, n.setOpen(!0), () => {
50
51
  queueMicrotask(() => {
51
- let r = D.current;
52
- r !== null && r.tab === t && r.setup !== n || (t.setOpen(!1), e());
52
+ let r = k.current;
53
+ r !== null && r.tab === n && r.setup !== e || (n.setOpen(!1), t());
53
54
  });
54
55
  };
55
- }, [t]);
56
- let O = u(b.live);
57
- c(() => {
58
- let e = O.current;
59
- O.current = b.live, !(!e || b.live) && g() && w.current?.focus();
60
- }, [b.live]);
61
- let k = s(x?.last ?? null, x?.navigatingReplyId ?? null), A = b.live ? void 0 : x, [j, M] = d(null), N = k?.state === "failed" ? k.exchange.replyId : null, P = k?.question ?? "", F = x?.draft;
56
+ }, [n]);
57
+ let A = d(x.live);
62
58
  l(() => {
63
- if (N === null || F === void 0 || j?.replyId === N) return;
64
- let e = F.get().trim() === "";
65
- e && F.set(P), M({
66
- replyId: N,
59
+ let e = A.current;
60
+ A.current = x.live, !(!e || x.live) && _() && T.current?.focus();
61
+ }, [x.live]);
62
+ let j = c(S?.last ?? null, S?.navigatingReplyId ?? null), M = x.live ? void 0 : S, [N, P] = f(null), F = j?.state === "failed" ? j.exchange.replyId : null, I = j?.question ?? "", L = S?.draft;
63
+ u(() => {
64
+ if (F === null || L === void 0 || N?.replyId === F) return;
65
+ let e = L.get().trim() === "";
66
+ e && L.set(I), P({
67
+ replyId: F,
67
68
  restored: e
68
69
  });
69
70
  }, [
70
- N,
71
- P,
72
71
  F,
73
- j
72
+ I,
73
+ L,
74
+ N
74
75
  ]);
75
- let I = j === null || j.replyId !== N || j.restored;
76
- return /* @__PURE__ */ p("div", {
77
- ref: S,
76
+ let R = N === null || N.replyId !== F || N.restored;
77
+ return /* @__PURE__ */ m("div", {
78
+ ref: C,
78
79
  role: "tabpanel",
79
- id: n,
80
- "aria-labelledby": m,
80
+ id: r,
81
+ "aria-labelledby": h,
81
82
  className: "absolute inset-0 z-[5] flex flex-col bg-bg-surface",
82
83
  "data-testid": "assistant-avatar-tab",
83
84
  children: [
84
- /* @__PURE__ */ p("div", {
85
+ /* @__PURE__ */ m("div", {
85
86
  className: "flex min-h-0 flex-1 flex-col overflow-y-auto px-4 pt-4",
86
87
  style: {
87
- paddingBottom: E + 16,
88
- scrollPaddingBottom: E + 16
88
+ paddingBottom: D + 16,
89
+ scrollPaddingBottom: D + 16
89
90
  },
90
91
  "data-testid": "assistant-avatar-tab-column",
91
- children: [/* @__PURE__ */ f(t.View, {
92
- shown: y,
93
- voice: b,
94
- handsFreeOff: T,
95
- leaveHintId: v,
96
- startVoiceRef: w,
97
- ...x ? { askLine: x.line } : {}
98
- }), A ? /* @__PURE__ */ f(o, {
99
- view: k,
100
- invite: !i(A.blocker),
101
- restored: I,
102
- focusAfterStop: C
103
- }, k?.exchange.replyId ?? "none") : null]
92
+ children: [/* @__PURE__ */ p(n.View, {
93
+ shown: b,
94
+ voice: x,
95
+ handsFreeOff: E,
96
+ leaveHintId: y,
97
+ startVoiceRef: T,
98
+ navigate: O,
99
+ ...S ? { askLine: S.line } : {}
100
+ }), M ? /* @__PURE__ */ p(s, {
101
+ view: j,
102
+ invite: !a(M.blocker),
103
+ restored: R,
104
+ focusAfterStop: w
105
+ }, j?.exchange.replyId ?? "none") : null]
104
106
  }),
105
- A ? /* @__PURE__ */ f(a, {
106
- ask: A,
107
- inputRef: C
107
+ M ? /* @__PURE__ */ p(o, {
108
+ ask: M,
109
+ inputRef: w
108
110
  }) : null,
109
- x ? /* @__PURE__ */ f(_, {
110
- state: k?.state ?? null,
111
- restored: I
111
+ S ? /* @__PURE__ */ p(v, {
112
+ state: j?.state ?? null,
113
+ restored: R
112
114
  }) : null
113
115
  ]
114
116
  });
115
117
  };
116
118
  //#endregion
117
- export { v as AssistantAvatarTab };
119
+ export { y as AssistantAvatarTab };
@@ -17,6 +17,8 @@ export type AvatarAskBlocker =
17
17
  | 'avatar-off'
18
18
  /** The avatar is stopping, near its time limit, or Turn on waits for a time a refusal named (critic m11). */
19
19
  | 'avatar-again'
20
+ /** ★ BOFF-9446: Turn on cannot start the avatar until avatar credits are available (none left for this person). */
21
+ | 'avatar-minutes'
20
22
  /** The avatar is on, but the browser blocks its sound until a tap on its frame (critic m1). */
21
23
  | 'sound'
22
24
  /** The avatar is being started. */
@@ -10,6 +10,7 @@ function n(e) {
10
10
  case "off": return "avatar-off";
11
11
  case "locked":
12
12
  case "ending": return "avatar-again";
13
+ case "no-minutes": return "avatar-minutes";
13
14
  case "sound-blocked": return "sound";
14
15
  case "starting": return "starting";
15
16
  case "ready": break;
@@ -19,7 +19,7 @@ interface Props {
19
19
  * would open above the button, outside the panel, and all four sources would be
20
20
  * unreachable. The control would look present and do nothing.
21
21
  */
22
- direction?: "up" | "down";
22
+ direction?: 'up' | 'down';
23
23
  /** False once MAX_ATTACHMENTS is reached — the control explains why. */
24
24
  canAddMore: boolean;
25
25
  disabled?: boolean;
@@ -28,7 +28,7 @@ export declare function connectSourceActivation(open: () => void, onActivate?: (
28
28
  * predicate, a product's own `open` winning over its href, the router getting
29
29
  * the resolved path, the browser winning a modified click) lives here once.
30
30
  */
31
- export type AssistantConnectSourcePresentation = "menuitem" | "action";
31
+ export type AssistantConnectSourcePresentation = 'menuitem' | 'action';
32
32
  export interface AssistantConnectSourceItemProps {
33
33
  /** Close the surrounding menu. Fired only when this item actually acts. */
34
34
  onActivate?: () => void;
@@ -23,7 +23,7 @@ import { FocusReturnDocument } from '../../hooks/useReturnFocus';
23
23
  */
24
24
  export declare const FOCUS_AFTER_KEEP_INTERVAL_MS = 40;
25
25
  export declare const FOCUS_AFTER_KEEP_MAX_MS = 2000;
26
- type FocusAfterKeepDocument = FocusReturnDocument & Pick<Document, "querySelectorAll">;
26
+ type FocusAfterKeepDocument = FocusReturnDocument & Pick<Document, 'querySelectorAll'>;
27
27
  /**
28
28
  * Start returning focus for the offer `offerId`, whose link was given back.
29
29
  * Returns a function that stops it (the panel unmounted, or a newer question).
@@ -22,15 +22,15 @@ import { AssistantNavigate, AssistantNavigateSurface } from './AssistantMarkdown
22
22
  * ★ Fail-safe in one direction only: anything that is not an explicit "leave"
23
23
  * (a rejected or throwing `ask`, an unmounted dialog) keeps the draft.
24
24
  */
25
- export type LeaveDecision = "leave" | "keep";
25
+ export type LeaveDecision = 'leave' | 'keep';
26
26
  /**
27
27
  * What a decision reports, for counting. ★ Never a label, a path or any text:
28
28
  * `editorIds` are the stable ids products register (`dashboard-editor`), not
29
29
  * what the person calls them.
30
30
  */
31
31
  export interface LeaveConfirmReport {
32
- decision: "left" | "kept";
33
- surface: AssistantNavigateSurface | "unknown";
32
+ decision: 'left' | 'kept';
33
+ surface: AssistantNavigateSurface | 'unknown';
34
34
  editorCount: number;
35
35
  editorIds: readonly string[];
36
36
  }
@@ -32,7 +32,7 @@ export declare const NO_PANEL_OVERLAY: PanelOverlayState;
32
32
  * Pressing the toggle of the overlay already showing closes it; pressing the
33
33
  * other one swaps to it. There is deliberately no way to express "both".
34
34
  */
35
- export declare function nextPanelOverlays(current: PanelOverlayState, toggled: "history" | "preview"): PanelOverlayState;
35
+ export declare function nextPanelOverlays(current: PanelOverlayState, toggled: 'history' | 'preview'): PanelOverlayState;
36
36
  /**
37
37
  * The overlay slot, plus the Avatar tab (BOFF-9341) where the panel offers it.
38
38
  *
@@ -65,7 +65,7 @@ export interface PanelLayerState extends PanelOverlayState {
65
65
  * Escape is "back out of the thing I just opened"; here it destroyed a
66
66
  * conversation instead.
67
67
  */
68
- export declare function escapeDismisses(current: PanelLayerState): "overlay" | "tab-reply" | "tab" | "panel";
68
+ export declare function escapeDismisses(current: PanelLayerState): 'overlay' | 'tab-reply' | 'tab' | 'panel';
69
69
  /**
70
70
  * Attribute marking the assistant panel's root element.
71
71
  *
@@ -115,7 +115,7 @@ export declare const ASSISTANT_VOICE_SESSION_ATTR = "data-assistant-voice-sessio
115
115
  * comes first. The panel backs out of it, as `escapeDismisses` says, and marks
116
116
  * the key handled so the session does not also act on it.
117
117
  */
118
- export declare function voiceSessionOwnsEscape(panel: Pick<Element, "hasAttribute" | "querySelector"> & Partial<Pick<Element, "getAttribute">>): boolean;
118
+ export declare function voiceSessionOwnsEscape(panel: Pick<Element, 'hasAttribute' | 'querySelector'> & Partial<Pick<Element, 'getAttribute'>>): boolean;
119
119
  /**
120
120
  * `data-assistant-overlay` while the Avatar tab is the view on screen and no
121
121
  * overlay covers it (BOFF-9341): the panel then owns an Escape pressed with
@@ -124,7 +124,7 @@ export declare function voiceSessionOwnsEscape(panel: Pick<Element, "hasAttribut
124
124
  */
125
125
  export declare const AVATAR_TAB_OVERLAY = "avatar";
126
126
  /** Which overlay is showing, as the attribute value — `null` when none is. */
127
- export declare function activePanelOverlay(current: PanelLayerState): "history" | "preview" | typeof AVATAR_TAB_OVERLAY | null;
127
+ export declare function activePanelOverlay(current: PanelLayerState): 'history' | 'preview' | typeof AVATAR_TAB_OVERLAY | null;
128
128
  /**
129
129
  * Is `active` the panel itself, or inside it?
130
130
  *
@@ -193,7 +193,7 @@ export declare function focusIsInsidePanel(panel: {
193
193
  * had been closed and missed one that was reachable in three clicks, which is
194
194
  * worse than no list at all: the next reader trusts it.
195
195
  */
196
- export declare function assistantPanelOwnsEscape(doc?: Pick<Document, "querySelectorAll" | "activeElement" | "body">): boolean;
196
+ export declare function assistantPanelOwnsEscape(doc?: Pick<Document, 'querySelectorAll' | 'activeElement' | 'body'>): boolean;
197
197
  /**
198
198
  * Does THIS panel claim Escape, given what is focused?
199
199
  *
@@ -11,17 +11,17 @@ import { VoiceReply } from '../voice/voiceReply';
11
11
  * dead, and nothing anywhere said otherwise. `useVoiceInput` reports `network`
12
12
  * and `unknown` and the session ignored both.
13
13
  */
14
- export type VoiceSessionNotice = "network" | "not-capturing" | "nothing-heard" | "recognition-failed"
14
+ export type VoiceSessionNotice = 'network' | 'not-capturing' | 'nothing-heard' | 'recognition-failed'
15
15
  /** H3: a barge-in stopped the assistant but no words followed (a cough, a door). */
16
- | "hands-free-nothing-heard"
16
+ | 'hands-free-nothing-heard'
17
17
  /** H3: hands-free gave up for this conversation; the tap-first path is in charge. */
18
- | "hands-free-fallback"
18
+ | 'hands-free-fallback'
19
19
  /**
20
20
  * BOFF-8822 (operator decision D7 b): this turn's reply was refused by its
21
21
  * audio output (`output-not-cleared`) and never heard; its text is in the
22
22
  * transcript.
23
23
  */
24
- | "reply-not-heard";
24
+ | 'reply-not-heard';
25
25
  /**
26
26
  * ★ BOFF-9207: why the turn just spoken ended WITHOUT an answer - a refusal
27
27
  * before it started ("No active subscription covers ..."), or a failure. The
@@ -29,7 +29,7 @@ export type VoiceSessionNotice = "network" | "not-capturing" | "nothing-heard" |
29
29
  * given; it is never spoken, so no new speech is paid for.
30
30
  */
31
31
  export interface VoiceTurnRefusalNotice {
32
- readonly kind: "turn-refused";
32
+ readonly kind: 'turn-refused';
33
33
  readonly text: string;
34
34
  }
35
35
  /** Everything the voice stage can show in its notice slot. */
@@ -28,7 +28,7 @@ import { AssistantWriteConfirmDialogProps } from './AssistantWriteConfirmDialog'
28
28
  * and aborts the product's.
29
29
  */
30
30
  /** Where a HIGH-risk confirmation was made. */
31
- export type WriteConfirmDecisionSurface = "assistant_modal" | "host_modal";
31
+ export type WriteConfirmDecisionSurface = 'assistant_modal' | 'host_modal';
32
32
  /**
33
33
  * The calls the flow makes. Each is the caller's, bound to the ISSUING sandbox
34
34
  * (`WriteProposalClient`), and handles its own errors: a rejection here only
@@ -38,11 +38,11 @@ export interface WriteProposalConfirmActions {
38
38
  /** Approve by button (`method: "button"`), from `surface`. */
39
39
  approve: (view: WriteProposalView, surface: WriteConfirmDecisionSurface) => void | Promise<unknown>;
40
40
  /** Decline by button, from `surface`. */
41
- decline: (view: WriteProposalView, reason: "user_declined", surface: WriteConfirmDecisionSurface) => void | Promise<unknown>;
41
+ decline: (view: WriteProposalView, reason: 'user_declined', surface: WriteConfirmDecisionSurface) => void | Promise<unknown>;
42
42
  /** The proposal was shown in a dialog. */
43
- presented: (view: WriteProposalView, surface: "modal") => void | Promise<unknown>;
43
+ presented: (view: WriteProposalView, surface: 'modal') => void | Promise<unknown>;
44
44
  }
45
- export type WriteProposalConfirmDialogBinding = Pick<AssistantWriteConfirmDialogProps, "open" | "view" | "onApprove" | "onDecline" | "onPresented" | "onDismiss">;
45
+ export type WriteProposalConfirmDialogBinding = Pick<AssistantWriteConfirmDialogProps, 'open' | 'view' | 'onApprove' | 'onDecline' | 'onPresented' | 'onDismiss'>;
46
46
  export interface WriteProposalConfirmController {
47
47
  /** The person asked to confirm `view` (the card's "Review & confirm…"). */
48
48
  review: (view: WriteProposalView) => void;
@@ -56,7 +56,7 @@ import { WriteReplyLiveState, WriteReplyPersonOrigin } from '../writeReplySend';
56
56
  * already withdrawn is not withdrawn again by the next event.
57
57
  */
58
58
  /** Why the panel withdraws a conversation's waiting changes on its own. */
59
- export type WriteProposalLifecycleReason = Extract<WriteProposalDeclineReason, "conversation_closed" | "mode_switched">;
59
+ export type WriteProposalLifecycleReason = Extract<WriteProposalDeclineReason, 'conversation_closed' | 'mode_switched'>;
60
60
  /** One proposal as its issuing sandbox last reported it. */
61
61
  export interface WriteProposalEntry {
62
62
  view: WriteProposalView;
@@ -87,7 +87,7 @@ export interface WriteProposalPanel {
87
87
  /** Confirm pressed (the card's single button, or a dialog's). */
88
88
  approve: (view: WriteProposalView, surface: WriteProposalApproveSurface) => Promise<void>;
89
89
  /** Cancel pressed. */
90
- decline: (view: WriteProposalView, reason: "user_declined", surface: WriteProposalDecisionSurface) => Promise<void>;
90
+ decline: (view: WriteProposalView, reason: 'user_declined', surface: WriteProposalDecisionSurface) => Promise<void>;
91
91
  /** The proposal was shown. */
92
92
  presented: (view: WriteProposalView, surface: WriteProposalPresentationSurface) => Promise<void>;
93
93
  /** The latest entry for a proposal, read live. */
@@ -5,7 +5,7 @@ import { VoiceSessionSnapshot } from '../../voice/voiceSession';
5
5
  import { VoiceSessionNoticeState } from '../useVoiceSession';
6
6
  import { VoiceTranscriptTurn } from '../../voice/turnVisibility';
7
7
  /** How much room the voice session takes: a strip, the panel, or the screen. */
8
- export type VoiceView = "mini" | "panel" | "full";
8
+ export type VoiceView = 'mini' | 'panel' | 'full';
9
9
  interface Props {
10
10
  session: VoiceSessionSnapshot;
11
11
  /** Recent exchanges, oldest first — the running conversation. */
@@ -31,7 +31,7 @@ import { FC } from 'react';
31
31
  interface Props {
32
32
  text: string;
33
33
  /** Who is speaking. The assistant's caption is the loud one. */
34
- role: "user" | "assistant";
34
+ role: 'user' | 'assistant';
35
35
  /** Full-screen rather than docked in the panel. */
36
36
  expanded: boolean;
37
37
  /**
@@ -31,7 +31,7 @@ interface Props {
31
31
  */
32
32
  settled?: boolean;
33
33
  /** `speaking` reads as the assistant's voice, `listening` as the user's. */
34
- tone: "listening" | "speaking";
34
+ tone: 'listening' | 'speaking';
35
35
  expanded?: boolean;
36
36
  }
37
37
  export declare const VoiceWaveform: FC<Props>;
@@ -14,7 +14,7 @@ export declare const VOICE_ESCAPE_LAYER_SELECTOR = "[role=\"dialog\"],[role=\"al
14
14
  * `<dialog>` is not a modal, and must not block Escape across the whole page.
15
15
  */
16
16
  export declare const VOICE_ESCAPE_MODAL_SELECTOR = "[aria-modal=\"true\"],[role=\"alertdialog\"]";
17
- export type VoiceSessionEscapeAction = "ignore" | "close-transcript" | "end";
17
+ export type VoiceSessionEscapeAction = 'ignore' | 'close-transcript' | 'end';
18
18
  /**
19
19
  * What the voice session does with an Escape.
20
20
  *
@@ -52,5 +52,5 @@ export declare function voiceSessionEscapeAction(input: {
52
52
  export declare function escapeBelongsToLayerAbove(input: {
53
53
  target: EventTarget | null;
54
54
  session: Element | null;
55
- doc: Pick<Document, "activeElement" | "querySelectorAll">;
55
+ doc: Pick<Document, 'activeElement' | 'querySelectorAll'>;
56
56
  }): boolean;
@@ -22,17 +22,17 @@
22
22
  /** Why a voice conversation cannot start now, most lasting first. */
23
23
  export type VoiceStartBlocker =
24
24
  /** Nothing here can hold a voice conversation (no speech input, or nothing to speak the reply). */
25
- "unavailable"
25
+ 'unavailable'
26
26
  /** The active mode takes no voice (it writes, and no voice proposal is bound to it). */
27
- | "mode"
27
+ | 'mode'
28
28
  /** This conversation takes no new turn at all. */
29
- | "read-only"
29
+ | 'read-only'
30
30
  /** Not now: a turn in flight, an approval being recorded, history loading, navigation busy. */
31
- | "busy"
31
+ | 'busy'
32
32
  /** Not now: a Send is saving its attachments. */
33
- | "committing"
33
+ | 'committing'
34
34
  /** Not now: dictation holds the microphone. */
35
- | "dictating";
35
+ | 'dictating';
36
36
  export interface VoiceStartGateInput {
37
37
  /** `voiceSession.available`: speech in and out work here. */
38
38
  readonly available: boolean;
@@ -39,7 +39,7 @@ export interface WriteProposalShownValue {
39
39
  sensitive: boolean;
40
40
  }
41
41
  /** A root field as written in the document: `alias: field`, or `field`. */
42
- export declare function writeProposalRootFieldName(field: Pick<WriteProposalRootField, "alias" | "field">): string;
42
+ export declare function writeProposalRootFieldName(field: Pick<WriteProposalRootField, 'alias' | 'field'>): string;
43
43
  /** A root field's arguments, as the values that will be sent. */
44
44
  export declare function writeProposalArgumentValues(field: WriteProposalRootField): WriteProposalShownValue[];
45
45
  /** The operation's variables, as the values that will be sent. */
@@ -51,7 +51,7 @@ export type UnsavedChangesProbe = () => readonly UnsavedChange[];
51
51
  * offer. A product sets `leaveGuard: true` only in the same release as its
52
52
  * editors' `useUnsavedChanges` adoption, with a seam test that pins both.
53
53
  */
54
- export declare function n4LeaveGuard(options: Pick<LocalUiCommandOptions, "leaveGuard"> | null | undefined): UnsavedChangesProbe | null;
54
+ export declare function n4LeaveGuard(options: Pick<LocalUiCommandOptions, 'leaveGuard'> | null | undefined): UnsavedChangesProbe | null;
55
55
  /** Where the person was, and as whom, at one moment (R4). */
56
56
  export interface ActOnResolveSnapshot {
57
57
  /** `pathname + search`. */
@@ -82,16 +82,16 @@ export interface ActOnResolveInput {
82
82
  alreadyThere: (offer: LiveUiOffer) => boolean;
83
83
  }
84
84
  /** Which guard kept the page an offer. */
85
- export type ActOnResolveHold = "R1" | "R2" | "R2b" | "R3" | "R4" | "R5-absent" | "R5-unsaved";
85
+ export type ActOnResolveHold = 'R1' | 'R2' | 'R2b' | 'R3' | 'R4' | 'R5-absent' | 'R5-unsaved';
86
86
  export type ActOnResolveDecision =
87
87
  /** Open it (`runNavigation`, `via: 'offer'`, `trigger: 'resolve'`). */
88
88
  {
89
- act: "navigate";
89
+ act: 'navigate';
90
90
  offer: LiveUiOffer;
91
91
  }
92
92
  /** R6: say "You're already on {page}", record it, and stay. */
93
93
  | {
94
- act: "already-here";
94
+ act: 'already-here';
95
95
  offer: LiveUiOffer;
96
96
  }
97
97
  /**
@@ -99,7 +99,7 @@ export type ActOnResolveDecision =
99
99
  * changes N4 named, for the "you have unsaved changes" line.
100
100
  */
101
101
  | {
102
- act: "keep-offer";
102
+ act: 'keep-offer';
103
103
  hold: ActOnResolveHold;
104
104
  unsaved?: readonly UnsavedChange[];
105
105
  };
@@ -2,7 +2,7 @@ import { Options } from 'react-markdown';
2
2
  /** @internal Exported for unit tests; not part of the module's public surface. */
3
3
  export declare function transformAssistantUrl(url: string, key: string, tagName: string): string;
4
4
  /** @internal The react-markdown option form of `transformAssistantUrl`. */
5
- export declare const assistantUrlTransform: Options["urlTransform"];
5
+ export declare const assistantUrlTransform: Options['urlTransform'];
6
6
  /**
7
7
  * How a link in an assistant reply should be treated.
8
8
  *
@@ -17,7 +17,7 @@ export declare const assistantUrlTransform: Options["urlTransform"];
17
17
  * been reduced to an empty string upstream — `blocked` here is the empty case,
18
18
  * not a second scheme allow-list. The scheme policy stays in one place.
19
19
  */
20
- export type AssistantLinkKind = "internal" | "external" | "fragment" | "blocked";
20
+ export type AssistantLinkKind = 'internal' | 'external' | 'fragment' | 'blocked';
21
21
  export declare function classifyAssistantHref(href: string | null | undefined, baseOrigin?: string): AssistantLinkKind;
22
22
  /**
23
23
  * The router-ready path for an href already classified as `internal`, or null if
@@ -31,4 +31,4 @@ export declare const assistantBackStack: BackStack;
31
31
  * ordinary sentence ("want to go back and change step 2?") and reaches the
32
32
  * model.
33
33
  */
34
- export declare function isBackRunnable(stack: Pick<BackStack, "top">, currentPath: string, newestAssistantMessageId: string | null): boolean;
34
+ export declare function isBackRunnable(stack: Pick<BackStack, 'top'>, currentPath: string, newestAssistantMessageId: string | null): boolean;
@@ -15,14 +15,14 @@ export declare const isThereRequest: (utterance: string) => boolean;
15
15
  export type ChoiceRequest =
16
16
  /** 1-based position in the list. */
17
17
  {
18
- kind: "ordinal";
18
+ kind: 'ordinal';
19
19
  position: number;
20
20
  } | {
21
- kind: "last";
21
+ kind: 'last';
22
22
  }
23
23
  /** "the one in crops": a word of the entry's parent or group. */
24
24
  | {
25
- kind: "context";
25
+ kind: 'context';
26
26
  context: string;
27
27
  };
28
28
  export declare function parseChoice(utterance: string): ChoiceRequest | null;
@@ -14,7 +14,7 @@
14
14
  * never swallow. A router guard test in each app renders every template and
15
15
  * every static sibling to prove the two lists agree with the real router.
16
16
  */
17
- export type EntityParamKind = "id" | "slug" | "int";
17
+ export type EntityParamKind = 'id' | 'slug' | 'int';
18
18
  export interface EntityParam {
19
19
  kind: EntityParamKind;
20
20
  /** Static sibling segments of the router this param must never match (case-insensitive: the router is). */
@@ -11,15 +11,15 @@ import { UnsavedChange } from '../../navigation/unsavedChanges';
11
11
  * Pure: the clock, the timer, the location and the shell-less predicate are
12
12
  * injected, so it is tested with a fake clock and no DOM.
13
13
  */
14
- export type NavigationRefusal = "unsaved-changes" | "not-routable" | "no-router";
14
+ export type NavigationRefusal = 'unsaved-changes' | 'not-routable' | 'no-router';
15
15
  export type NavigationOutcome = {
16
- status: "arrived";
16
+ status: 'arrived';
17
17
  landedPath: string;
18
18
  } | {
19
- status: "redirected";
19
+ status: 'redirected';
20
20
  landedPath: string;
21
21
  } | {
22
- status: "new-tab";
22
+ status: 'new-tab';
23
23
  }
24
24
  /**
25
25
  * Not routed. ★ BOFF-8060 (N4): `unsaved` names the unsaved changes that
@@ -27,11 +27,11 @@ export type NavigationOutcome = {
27
27
  * written into the navigate record.
28
28
  */
29
29
  | {
30
- status: "refused";
30
+ status: 'refused';
31
31
  reason: NavigationRefusal;
32
32
  unsaved?: readonly UnsavedChange[];
33
33
  } | {
34
- status: "unconfirmed";
34
+ status: 'unconfirmed';
35
35
  }
36
36
  /**
37
37
  * ★ BOFF-8060 (N4 tap-confirm): the person tapped, was asked about their
@@ -39,11 +39,11 @@ export type NavigationOutcome = {
39
39
  * changed, so there is nothing to say and nothing to record.
40
40
  */
41
41
  | {
42
- status: "kept";
42
+ status: 'kept';
43
43
  };
44
44
  /** An outcome that says something happened (or why it did not): everything but `kept`. */
45
45
  export type DecidedNavigationOutcome = Exclude<NavigationOutcome, {
46
- status: "kept";
46
+ status: 'kept';
47
47
  }>;
48
48
  export interface NavigationDeps {
49
49
  /** The current pathname + search. */
@@ -17,7 +17,7 @@ import { UiOfferSession, UiOfferYesInput, UiOfferYesState } from './uiOffers';
17
17
  *
18
18
  * Pure: no React, no store, no DOM.
19
19
  */
20
- export interface UiOfferYesOnSurfaceInput<T extends SurfaceMessage> extends Omit<UiOfferYesInput, "newestReply"> {
20
+ export interface UiOfferYesOnSurfaceInput<T extends SurfaceMessage> extends Omit<UiOfferYesInput, 'newestReply'> {
21
21
  /** The open conversation's messages, oldest first. */
22
22
  messages: readonly T[];
23
23
  /** The voice session a spoken "yes" came from; undefined for a typed one. */