@burdenoff/fe-libs 2026.920.1 → 2026.920.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/shared/assistant/api.d.ts +17 -0
  2. package/dist/shared/assistant/api.d.ts.map +1 -1
  3. package/dist/shared/assistant/api.js +88 -66
  4. package/dist/shared/assistant/attachmentTurn.d.ts +21 -0
  5. package/dist/shared/assistant/attachmentTurn.d.ts.map +1 -0
  6. package/dist/shared/assistant/attachmentTurn.js +48 -0
  7. package/dist/shared/assistant/attachments.d.ts +85 -6
  8. package/dist/shared/assistant/attachments.d.ts.map +1 -1
  9. package/dist/shared/assistant/attachments.js +165 -112
  10. package/dist/shared/assistant/conversation.d.ts +21 -0
  11. package/dist/shared/assistant/conversation.d.ts.map +1 -1
  12. package/dist/shared/assistant/documentExtract.d.ts +11 -2
  13. package/dist/shared/assistant/documentExtract.d.ts.map +1 -1
  14. package/dist/shared/assistant/documentExtract.js +39 -37
  15. package/dist/shared/assistant/gatewayLimits.d.ts +10 -0
  16. package/dist/shared/assistant/gatewayLimits.d.ts.map +1 -1
  17. package/dist/shared/assistant/gatewayLimits.js +2 -2
  18. package/dist/shared/assistant/index.d.ts +3 -0
  19. package/dist/shared/assistant/index.d.ts.map +1 -1
  20. package/dist/shared/assistant/preview/bridgeHost.d.ts +26 -0
  21. package/dist/shared/assistant/preview/bridgeHost.d.ts.map +1 -0
  22. package/dist/shared/assistant/preview/bridgeHost.js +16 -0
  23. package/dist/shared/assistant/preview/bridgeHostContext.d.ts +17 -0
  24. package/dist/shared/assistant/preview/bridgeHostContext.d.ts.map +1 -0
  25. package/dist/shared/assistant/preview/bridgeHostContext.js +11 -0
  26. package/dist/shared/assistant/preview/useAssistantPreviewBridge.d.ts.map +1 -1
  27. package/dist/shared/assistant/ui/AIAssistantPanel.d.ts +4 -0
  28. package/dist/shared/assistant/ui/AIAssistantPanel.d.ts.map +1 -1
  29. package/dist/shared/assistant/ui/AIAssistantPanel.js +63 -62
  30. package/dist/shared/assistant/ui/AssistantChatArea.d.ts.map +1 -1
  31. package/dist/shared/assistant/ui/AssistantChatArea.js +342 -325
  32. package/dist/shared/assistant/ui/AssistantOverlay.d.ts +6 -0
  33. package/dist/shared/assistant/ui/AssistantOverlay.d.ts.map +1 -1
  34. package/dist/shared/assistant/ui/AssistantOverlay.js +93 -89
  35. package/dist/shared/assistant/ui/composer/AssistantComposer.d.ts +12 -0
  36. package/dist/shared/assistant/ui/composer/AssistantComposer.d.ts.map +1 -1
  37. package/dist/shared/assistant/ui/composer/AssistantComposer.js +57 -57
  38. package/dist/shared/assistant/useAssistantAttachments.d.ts +12 -1
  39. package/dist/shared/assistant/useAssistantAttachments.d.ts.map +1 -1
  40. package/dist/shared/assistant/useAssistantAttachments.js +98 -98
  41. package/dist/shared-assistant.js +118 -115
  42. package/package.json +1 -1
@@ -80,6 +80,12 @@ export interface AssistantOverlayProps {
80
80
  /**
81
81
  * Extra props for the default `AIAssistantPanel` — `writeAccess`,
82
82
  * `connectSourceHref`, `preview`. The overlay's own props always win.
83
+ *
84
+ * ★★ `preview` is bridged HERE, by the overlay, not by the panel — so a
85
+ * product surface outside the panel keeps following a run after the assistant
86
+ * is closed (BOFF-7367). A `renderPanel` wrapper that hands its panel the
87
+ * same controller should pass it here too; one it passes only to its panel is
88
+ * bridged by that panel, for that panel's lifetime.
83
89
  */
84
90
  panelProps?: Omit<AIAssistantPanelProps, keyof AssistantOverlayPanelProps>;
85
91
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantOverlay.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantOverlay.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAUL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG1C,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,EAmBL,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,+EAA+E;IAC/E,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,oBAAoB,CAAC;CAC5B;AAID,uEAAuE;AACvE,wBAAgB,yBAAyB,IAAI,4BAA4B,GAAG,IAAI,CAE/E;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AA6BD;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GACnD,IAAI,CAaN;AAID,MAAM,WAAW,6BAA6B;IAC5C;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;KACtD,CAAC;IACF,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,SAAS,EACT,KAAK,EACL,QAAQ,GACT,EAAE,6BAA6B,2CAkE/B;AAED,mDAAmD;AACnD,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,MAAM,WAAW,qBAAqB;IACpC,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,UAAU,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,0BAA0B,CAAC,CAAC;IAC3E;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,SAAS,CAAC;IAC/D;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,kEAAkE;IAClE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kFAAkF;IAClF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAOD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,kDAI5D"}
1
+ {"version":3,"file":"AssistantOverlay.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantOverlay.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAUL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAI1C,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,EAmBL,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,+EAA+E;IAC/E,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,oBAAoB,CAAC;CAC5B;AAID,uEAAuE;AACvE,wBAAgB,yBAAyB,IAAI,4BAA4B,GAAG,IAAI,CAE/E;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AA6BD;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GACnD,IAAI,CAaN;AAID,MAAM,WAAW,6BAA6B;IAC5C;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;KACtD,CAAC;IACF,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,SAAS,EACT,KAAK,EACL,QAAQ,GACT,EAAE,6BAA6B,2CAkE/B;AAED,mDAAmD;AACnD,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,MAAM,WAAW,qBAAqB;IACpC,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,0BAA0B,CAAC,CAAC;IAC3E;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,SAAS,CAAC;IAC/D;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,kEAAkE;IAClE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kFAAkF;IAClF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAOD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,kDAI5D"}
@@ -1,99 +1,100 @@
1
1
  import { useAssistantTr as e } from "../i18n.js";
2
2
  import { quotaExhaustedEventName as t } from "../quota.js";
3
3
  import { assistantPanelOwnsEscape as n } from "./panelOverlays.js";
4
- import { AIAssistantPanel as r } from "./AIAssistantPanel.js";
5
- import { ASSISTANT_DOCK_WIDTH_VAR as i, ASSISTANT_OVERLAY_DESKTOP_QUERY as a, ASSISTANT_OVERLAY_TOP_VAR as o, aboveAssistantBottomChrome as s, assistantOverlayClassName as c, assistantOverlayEscapeAction as l, assistantOverlayKeys as u, assistantQuotaKindOf as d, createAssistantNavigate as f, isAssistantToggleShortcut as p, nextAssistantOpenState as m, publishedAssistantDockWidth as h, readAssistantOverlayFlag as g, requestedAssistantOpenState as _, writeAssistantOverlayFlag as v } from "./assistantOverlayState.js";
6
- import { createContext as y, useCallback as b, useContext as x, useEffect as S, useMemo as C, useRef as w, useState as T, useSyncExternalStore as E } from "react";
7
- import { Sparkles as D } from "lucide-react";
8
- import { Fragment as O, jsx as k, jsxs as A } from "react/jsx-runtime";
4
+ import { AssistantPreviewBridgeHost as r } from "../preview/bridgeHost.js";
5
+ import { AIAssistantPanel as i } from "./AIAssistantPanel.js";
6
+ import { ASSISTANT_DOCK_WIDTH_VAR as a, ASSISTANT_OVERLAY_DESKTOP_QUERY as o, ASSISTANT_OVERLAY_TOP_VAR as s, aboveAssistantBottomChrome as c, assistantOverlayClassName as l, assistantOverlayEscapeAction as u, assistantOverlayKeys as d, assistantQuotaKindOf as f, createAssistantNavigate as p, isAssistantToggleShortcut as m, nextAssistantOpenState as h, publishedAssistantDockWidth as g, readAssistantOverlayFlag as _, requestedAssistantOpenState as v, writeAssistantOverlayFlag as y } from "./assistantOverlayState.js";
7
+ import { createContext as b, useCallback as x, useContext as S, useEffect as C, useMemo as w, useRef as T, useState as E, useSyncExternalStore as D } from "react";
8
+ import { Sparkles as O } from "lucide-react";
9
+ import { jsx as k, jsxs as A } from "react/jsx-runtime";
9
10
  //#region src/shared/assistant/ui/AssistantOverlay.tsx
10
- var j = y(null);
11
+ var j = b(null);
11
12
  function M() {
12
- return x(j);
13
+ return S(j);
13
14
  }
14
15
  function N() {
15
- return x(j)?.dockWidthPx ?? 0;
16
+ return S(j)?.dockWidthPx ?? 0;
16
17
  }
17
18
  var P = () => typeof window > "u" ? void 0 : window.sessionStorage, F = () => typeof window > "u" ? void 0 : window.localStorage;
18
19
  function I(e) {
19
20
  if (typeof window > "u" || typeof window.matchMedia != "function") return () => {};
20
- let t = window.matchMedia(a);
21
+ let t = window.matchMedia(o);
21
22
  return t.addEventListener("change", e), () => t.removeEventListener("change", e);
22
23
  }
23
24
  function L() {
24
25
  return typeof window < "u" && typeof window.matchMedia == "function" && window.matchMedia("(min-width: 640px)").matches;
25
26
  }
26
27
  function R() {
27
- return E(I, L, () => !1);
28
+ return D(I, L, () => !1);
28
29
  }
29
30
  function z(e, n) {
30
- let r = w(n);
31
- S(() => {
31
+ let r = T(n);
32
+ C(() => {
32
33
  r.current = n;
33
- }, [n]), S(() => {
34
+ }, [n]), C(() => {
34
35
  if (!e || typeof window > "u") return;
35
- let n = t(e), i = (e) => r.current(d(e), e);
36
+ let n = t(e), i = (e) => r.current(f(e), e);
36
37
  return window.addEventListener(n, i), () => window.removeEventListener(n, i);
37
38
  }, [e]);
38
39
  }
39
40
  var B = () => {};
40
41
  function V({ keyPrefix: e, quota: t, children: n }) {
41
- let r = C(() => u(e), [e]), [a, o] = T(() => g(P, r.openStorageKey)), [s, c] = T(() => g(F, r.dockStorageKey)), l = b(() => o(!0), []), d = b(() => o(!1), []), f = b(() => o((e) => !e), []), y = b(() => c((e) => !e), []);
42
- S(() => {
43
- v(P, r.openStorageKey, a);
44
- }, [r.openStorageKey, a]), S(() => {
45
- v(F, r.dockStorageKey, s);
46
- }, [r.dockStorageKey, s]), S(() => {
42
+ let r = w(() => d(e), [e]), [i, o] = E(() => _(P, r.openStorageKey)), [s, c] = E(() => _(F, r.dockStorageKey)), l = x(() => o(!0), []), u = x(() => o(!1), []), f = x(() => o((e) => !e), []), p = x(() => c((e) => !e), []);
43
+ C(() => {
44
+ y(P, r.openStorageKey, i);
45
+ }, [r.openStorageKey, i]), C(() => {
46
+ y(F, r.dockStorageKey, s);
47
+ }, [r.dockStorageKey, s]), C(() => {
47
48
  if (typeof window > "u") return;
48
49
  let e = (e) => {
49
- let t = _(e);
50
- o((e) => m(e, t));
50
+ let t = v(e);
51
+ o((e) => h(e, t));
51
52
  };
52
53
  return window.addEventListener(r.toggleEvent, e), () => window.removeEventListener(r.toggleEvent, e);
53
- }, [r.toggleEvent]), S(() => {
54
+ }, [r.toggleEvent]), C(() => {
54
55
  if (typeof document > "u") return;
55
56
  let e = (e) => {
56
- p(e) && (e.preventDefault(), o((e) => !e));
57
+ m(e) && (e.preventDefault(), o((e) => !e));
57
58
  };
58
59
  return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
59
60
  }, []), z(t?.product ?? null, t?.onExhausted ?? B);
60
- let x = h({
61
- isOpen: a,
61
+ let b = g({
62
+ isOpen: i,
62
63
  docked: s,
63
64
  isDesktop: R()
64
65
  });
65
- S(() => {
66
+ C(() => {
66
67
  if (typeof document > "u") return;
67
68
  let e = document.documentElement.style;
68
- return e.setProperty(i, `${x}px`), () => {
69
- e.removeProperty(i);
69
+ return e.setProperty(a, `${b}px`), () => {
70
+ e.removeProperty(a);
70
71
  };
71
- }, [x]);
72
- let w = C(() => ({
73
- isOpen: a,
72
+ }, [b]);
73
+ let S = w(() => ({
74
+ isOpen: i,
74
75
  open: l,
75
- close: d,
76
+ close: u,
76
77
  toggle: f,
77
78
  docked: s,
78
- toggleDock: y,
79
- dockWidthPx: x,
79
+ toggleDock: p,
80
+ dockWidthPx: b,
80
81
  keys: r
81
82
  }), [
82
- a,
83
+ i,
83
84
  l,
84
- d,
85
+ u,
85
86
  f,
86
87
  s,
87
- y,
88
- x,
88
+ p,
89
+ b,
89
90
  r
90
91
  ]);
91
92
  return /* @__PURE__ */ k(j.Provider, {
92
- value: w,
93
+ value: S,
93
94
  children: n
94
95
  });
95
96
  }
96
- var H = (e, t) => /* @__PURE__ */ k(r, {
97
+ var H = (e, t) => /* @__PURE__ */ k(i, {
97
98
  ...e,
98
99
  ...t
99
100
  });
@@ -104,68 +105,71 @@ function U(e) {
104
105
  ...e
105
106
  }) : null;
106
107
  }
107
- function W({ state: t, panelId: r = "ai-assistant", panelProps: i, renderPanel: a, navigate: u, isShellLessTarget: d, topOffsetPx: p = 56, launcherIcon: m, launcherBottomInset: h = "1.5rem", showLauncher: g = !0 }) {
108
- let { isOpen: _, close: v, toggle: y, docked: b, toggleDock: x } = t, w = e(), [E, j] = T(!1), M = C(() => u ? f({
109
- navigate: u,
110
- isShellLessTarget: d,
108
+ function W({ state: t, panelId: i = "ai-assistant", panelProps: a, renderPanel: o, navigate: d, isShellLessTarget: f, topOffsetPx: m = 56, launcherIcon: h, launcherBottomInset: g = "1.5rem", showLauncher: _ = !0 }) {
109
+ let { isOpen: v, close: y, toggle: b, docked: x, toggleDock: S } = t, T = e(), [D, j] = E(!1), M = w(() => d ? p({
110
+ navigate: d,
111
+ isShellLessTarget: f,
111
112
  isDesktop: L,
112
113
  collapseSheet: () => j(!1),
113
114
  openInNewTab: (e) => window.open(e, "_blank", "noopener,noreferrer")
114
- }) : void 0, [u, d]);
115
- S(() => {
116
- if (!_) return;
115
+ }) : void 0, [d, f]);
116
+ C(() => {
117
+ if (!v) return;
117
118
  let e = (e) => {
118
- l({
119
+ u({
119
120
  key: e.key,
120
- isOpen: _,
121
+ isOpen: v,
121
122
  dialogOpen: document.querySelector("[role=\"dialog\"],[role=\"alertdialog\"],dialog[open]") !== null,
122
123
  panelOwnsEscape: n()
123
- }) === "close" && (e.preventDefault(), v());
124
+ }) === "close" && (e.preventDefault(), y());
124
125
  };
125
126
  return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
126
- }, [_, v]);
127
+ }, [v, y]);
127
128
  let N = {
128
- panelId: r,
129
+ panelId: i,
129
130
  visible: !0,
130
- onClose: v,
131
- docked: b,
132
- onToggleDock: x,
131
+ onClose: y,
132
+ docked: x,
133
+ onToggleDock: S,
133
134
  onNavigate: M
134
- }, P = w("overlay.launcher", "AI Assistant"), F = { [o]: `${p}px` };
135
- return /* @__PURE__ */ A(O, { children: [_ && /* @__PURE__ */ A("div", {
136
- className: c({
137
- expanded: E,
138
- docked: b
139
- }),
140
- style: F,
141
- "data-testid": "assistant-overlay",
142
- children: [/* @__PURE__ */ k("button", {
135
+ }, P = T("overlay.launcher", "AI Assistant"), F = { [s]: `${m}px` };
136
+ return /* @__PURE__ */ A(r, {
137
+ preview: a?.preview,
138
+ children: [v && /* @__PURE__ */ A("div", {
139
+ className: l({
140
+ expanded: D,
141
+ docked: x
142
+ }),
143
+ style: F,
144
+ "data-testid": "assistant-overlay",
145
+ children: [/* @__PURE__ */ k("button", {
146
+ type: "button",
147
+ onClick: () => j((e) => !e),
148
+ className: "flex w-full shrink-0 justify-center pt-2 pb-1 sm:hidden",
149
+ "aria-label": D ? T("sheet.collapse", "Shrink the assistant") : T("sheet.expand", "Expand the assistant"),
150
+ "aria-expanded": D,
151
+ "data-testid": "assistant-sheet-handle",
152
+ children: /* @__PURE__ */ k("span", { className: "h-1.5 w-10 rounded-full bg-border-strong" })
153
+ }), /* @__PURE__ */ k("div", {
154
+ className: "flex min-h-0 flex-1 flex-col",
155
+ children: o ? o(N) : H(a, N)
156
+ })]
157
+ }), _ && /* @__PURE__ */ k("button", {
143
158
  type: "button",
144
- onClick: () => j((e) => !e),
145
- className: "flex w-full shrink-0 justify-center pt-2 pb-1 sm:hidden",
146
- "aria-label": E ? w("sheet.collapse", "Shrink the assistant") : w("sheet.expand", "Expand the assistant"),
147
- "aria-expanded": E,
148
- "data-testid": "assistant-sheet-handle",
149
- children: /* @__PURE__ */ k("span", { className: "h-1.5 w-10 rounded-full bg-border-strong" })
150
- }), /* @__PURE__ */ k("div", {
151
- className: "flex min-h-0 flex-1 flex-col",
152
- children: a ? a(N) : H(i, N)
159
+ onClick: b,
160
+ title: T("overlay.launcherTitle", "AI Assistant ({{shortcut}})", { shortcut: "Ctrl+Shift+A" }),
161
+ "aria-label": P,
162
+ "aria-haspopup": "dialog",
163
+ "aria-expanded": v,
164
+ "data-testid": "assistant-fab",
165
+ style: { bottom: c(g) },
166
+ className: "fixed right-6 z-30 size-14 items-center justify-center rounded-full border border-border-strong bg-[var(--color-accent-soft)] text-action-primary-bg shadow-float transition-colors duration-200 hover:border-action-primary-bg focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)] cursor-pointer " + (v ? "hidden sm:inline-flex" : "inline-flex"),
167
+ children: h ?? /* @__PURE__ */ k(O, {
168
+ className: "size-6",
169
+ "aria-hidden": "true"
170
+ })
153
171
  })]
154
- }), g && /* @__PURE__ */ k("button", {
155
- type: "button",
156
- onClick: y,
157
- title: w("overlay.launcherTitle", "AI Assistant ({{shortcut}})", { shortcut: "Ctrl+Shift+A" }),
158
- "aria-label": P,
159
- "aria-haspopup": "dialog",
160
- "aria-expanded": _,
161
- "data-testid": "assistant-fab",
162
- style: { bottom: s(h) },
163
- className: "fixed right-6 z-30 size-14 items-center justify-center rounded-full border border-border-strong bg-[var(--color-accent-soft)] text-action-primary-bg shadow-float transition-colors duration-200 hover:border-action-primary-bg focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)] cursor-pointer " + (_ ? "hidden sm:inline-flex" : "inline-flex"),
164
- children: m ?? /* @__PURE__ */ k(D, {
165
- className: "size-6",
166
- "aria-hidden": "true"
167
- })
168
- })] });
172
+ });
169
173
  }
170
174
  //#endregion
171
175
  export { U as AssistantOverlay, V as AssistantOverlayProvider, N as useAssistantDockWidth, M as useAssistantOverlayOrNull, z as useAssistantQuotaExhausted };
@@ -20,6 +20,18 @@ interface Props {
20
20
  mode: AssistantMode;
21
21
  /** Role-filtered list of modes the user may pick. */
22
22
  availableModes: AssistantModeConfig[];
23
+ /**
24
+ * How many characters of an attached text or document file to KEEP — the
25
+ * largest per-file limit among ALL the product's modes (BOFF-7334). The send
26
+ * cuts each file to the sending mode's own limit.
27
+ *
28
+ * ★ All modes, not `availableModes`. That list is role-filtered, and while the
29
+ * role check loads it omits an admin-only mode — so a file attached in that
30
+ * window was cut to 8,000 characters for good, and the Build mode the admin
31
+ * switched to a moment later received 8,000 of the 100,000 it asks for.
32
+ * Absent: the shared default, `MAX_INLINE_CHARS_PER_FILE`.
33
+ */
34
+ attachmentCharsPerFile?: number;
23
35
  onModeChange: (mode: AssistantMode) => void;
24
36
  /**
25
37
  * Opens the hands-free voice conversation. Omitted where a voice session
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantComposer.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/composer/AssistantComposer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,EAAE,EAER,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQjD,OAAO,EAGL,KAAK,mBAAmB,EAEzB,MAAM,mBAAmB,CAAC;AAO3B,UAAU,KAAK;IACb;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,IAAI,CAAC;IACtE,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,aAAa,CAAC;IACpB,qDAAqD;IACrD,cAAc,EAAE,mBAAmB,EAAE,CAAC;IACtC,YAAY,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IAC5C;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;CAClC;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,KAAK,CAuZvC,CAAC"}
1
+ {"version":3,"file":"AssistantComposer.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/composer/AssistantComposer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,EAAE,EAER,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQjD,OAAO,EAGL,KAAK,mBAAmB,EAEzB,MAAM,mBAAmB,CAAC;AAO3B,UAAU,KAAK;IACb;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,IAAI,CAAC;IACtE,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,aAAa,CAAC;IACpB,qDAAqD;IACrD,cAAc,EAAE,mBAAmB,EAAE,CAAC;IACtC;;;;;;;;;;OAUG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,YAAY,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IAC5C;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;CAClC;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,KAAK,CA6ZvC,CAAC"}
@@ -11,44 +11,44 @@ import { AssistantModeSelector as c } from "./AssistantModeSelector.js";
11
11
  import { AssistantVoiceButton as te } from "./AssistantVoiceButton.js";
12
12
  import { AssistantVoiceSessionButton as ne } from "../voice/AssistantVoiceSessionButton.js";
13
13
  import { useAssistantAttachments as re } from "../../useAssistantAttachments.js";
14
- import { useCallback as l, useLayoutEffect as ie, useMemo as u, useRef as d, useState as f } from "react";
15
- import { ArrowUp as p, Loader2 as m } from "lucide-react";
16
- import { jsx as h, jsxs as g } from "react/jsx-runtime";
14
+ import { useCallback as l, useLayoutEffect as u, useMemo as d, useRef as f, useState as p } from "react";
15
+ import { ArrowUp as m, Loader2 as h } from "lucide-react";
16
+ import { jsx as g, jsxs as _ } from "react/jsx-runtime";
17
17
  //#region src/shared/assistant/ui/composer/AssistantComposer.tsx
18
- var _ = 200, v = ({ writeAccessDenied: v = !1, onSend: y, disabled: b = !1, placeholder: x, mode: S, availableModes: C, onModeChange: ae, onStartVoiceSession: w }) => {
19
- let T = ee(), { locale: E } = e(), D = d(null), [O, k] = f(""), [A, j] = f(!1), M = d(0), { attachments: N, isBusy: P, preparingCount: F, sendBlocker: I, rejection: L, addFiles: R, remove: z, retry: B, clear: V, clearRejection: H, canAddMore: U } = re(), oe = l((e) => {
18
+ var v = 200, y = ({ writeAccessDenied: y = !1, onSend: b, disabled: x = !1, placeholder: S, mode: ie, availableModes: C, attachmentCharsPerFile: ae, onModeChange: oe, onStartVoiceSession: w }) => {
19
+ let T = ee(), { locale: E } = e(), D = f(null), [O, k] = p(""), [A, j] = p(!1), M = f(0), { attachments: N, isBusy: P, preparingCount: F, sendBlocker: I, rejection: L, addFiles: R, remove: z, retry: B, clear: V, clearRejection: H, canAddMore: se } = re({ perFileChars: ae }), U = l((e) => {
20
20
  k((t) => t ? `${t.replace(/\s+$/, "")} ${e}` : e);
21
21
  }, []), W = a((e) => e.assistantLanguage), G = t({
22
- onFinalize: oe,
23
- language: u(() => r(W, E), [W, E]).tag
24
- }), K = x ?? T("composer.placeholder", "Ask me anything…"), q = O.trim(), J = i(N), Y = N.filter((e) => e.status === "error"), X = (q.length > 0 || J.length > 0) && !b && I === null;
25
- ie(() => {
22
+ onFinalize: U,
23
+ language: d(() => r(W, E), [W, E]).tag
24
+ }), K = S ?? T("composer.placeholder", "Ask me anything…"), q = O.trim(), J = i(N), Y = N.filter((e) => e.status === "error"), X = (q.length > 0 || J.length > 0) && !x && I === null;
25
+ u(() => {
26
26
  let e = D.current;
27
- e && (e.style.height = "auto", e.style.height = `${Math.min(e.scrollHeight, _)}px`);
27
+ e && (e.style.height = "auto", e.style.height = `${Math.min(e.scrollHeight, v)}px`);
28
28
  }, [O]);
29
29
  let Z = l(() => {
30
- X && (G.isActive && G.stop(), y(O.trim(), J), k(""), V());
30
+ X && (G.isActive && G.stop(), b(O.trim(), J), k(""), V());
31
31
  }, [
32
32
  X,
33
- y,
33
+ b,
34
34
  O,
35
35
  J,
36
36
  V,
37
37
  G
38
- ]), se = l((e) => {
38
+ ]), ce = l((e) => {
39
39
  e.key === "Enter" && !e.shiftKey && (e.preventDefault(), Z());
40
- }, [Z]), ce = l((e) => {
40
+ }, [Z]), le = l((e) => {
41
41
  let t = Array.from(e.clipboardData?.files ?? []);
42
42
  t.length !== 0 && (e.preventDefault(), R(t));
43
- }, [R]), le = l((e) => {
43
+ }, [R]), ue = l((e) => {
44
44
  Array.from(e.dataTransfer?.types ?? []).includes("Files") && (M.current += 1, j(!0));
45
- }, []), ue = l(() => {
45
+ }, []), Q = l(() => {
46
46
  M.current = Math.max(0, M.current - 1), M.current === 0 && j(!1);
47
- }, []), Q = l((e) => {
48
- Array.from(e.dataTransfer?.types ?? []).includes("Files") && e.preventDefault();
49
47
  }, []), de = l((e) => {
48
+ Array.from(e.dataTransfer?.types ?? []).includes("Files") && e.preventDefault();
49
+ }, []), fe = l((e) => {
50
50
  e.preventDefault(), M.current = 0, j(!1), R(e.dataTransfer?.files ?? null);
51
- }, [R]), fe = (e) => {
51
+ }, [R]), pe = (e) => {
52
52
  switch (e) {
53
53
  case "too-many": return T("attachments.tooMany", "You can attach up to {{max}} files per message.", { max: 5 });
54
54
  case "too-large": return T("attachments.tooLarge", "That file is larger than 10 MB.");
@@ -66,107 +66,107 @@ var _ = 200, v = ({ writeAccessDenied: v = !1, onSend: y, disabled: b = !1, plac
66
66
  default: return null;
67
67
  }
68
68
  })();
69
- return /* @__PURE__ */ g("div", {
69
+ return /* @__PURE__ */ _("div", {
70
70
  className: "flex-shrink-0 px-3 pb-3 pt-1.5",
71
71
  children: [
72
- /* @__PURE__ */ g("div", {
73
- onDragEnter: le,
74
- onDragLeave: ue,
75
- onDragOver: Q,
76
- onDrop: de,
72
+ /* @__PURE__ */ _("div", {
73
+ onDragEnter: ue,
74
+ onDragLeave: Q,
75
+ onDragOver: de,
76
+ onDrop: fe,
77
77
  className: `rounded-2xl border p-2 shadow-sm transition-colors focus-within:border-action-primary-bg focus-within:ring-2 focus-within:ring-action-primary-bg/15 ${A ? "border-action-primary-bg border-dashed bg-action-primary-bg/5" : "border-border-default bg-bg-sunken"}`,
78
78
  "data-testid": "assistant-composer",
79
79
  children: [
80
- /* @__PURE__ */ h(s, {
80
+ /* @__PURE__ */ g(s, {
81
81
  attachments: N,
82
82
  onRemove: z,
83
83
  onRetry: B,
84
- disabled: b,
84
+ disabled: x,
85
85
  preparingCount: F
86
86
  }),
87
- /* @__PURE__ */ g("div", {
87
+ /* @__PURE__ */ _("div", {
88
88
  className: "flex items-end gap-2",
89
89
  children: [
90
- /* @__PURE__ */ h(o, {
90
+ /* @__PURE__ */ g(o, {
91
91
  onFiles: R,
92
- canAddMore: U,
93
- disabled: b
92
+ canAddMore: se,
93
+ disabled: x
94
94
  }),
95
- /* @__PURE__ */ h("textarea", {
95
+ /* @__PURE__ */ g("textarea", {
96
96
  ref: D,
97
97
  value: O,
98
98
  onChange: (e) => k(e.target.value),
99
- onKeyDown: se,
100
- onPaste: ce,
101
- disabled: b,
99
+ onKeyDown: ce,
100
+ onPaste: le,
101
+ disabled: x,
102
102
  placeholder: A ? T("composer.dropHere", "Drop files to attach") : K,
103
103
  rows: 1,
104
104
  className: "min-h-[36px] flex-1 resize-none self-center bg-transparent px-1 py-2 text-[15px] leading-relaxed text-text-primary placeholder:text-text-muted focus:outline-none disabled:opacity-50",
105
105
  "aria-label": T("chatInput.ariaLabel", "Message input"),
106
106
  "data-testid": "assistant-input"
107
107
  }),
108
- G.isSupported && /* @__PURE__ */ h(te, {
108
+ G.isSupported && /* @__PURE__ */ g(te, {
109
109
  isListening: G.isListening,
110
110
  isStarting: G.isStarting,
111
111
  onToggle: G.toggle,
112
- disabled: b
112
+ disabled: x
113
113
  }),
114
- w && q.length === 0 && N.length === 0 && !G.isActive ? /* @__PURE__ */ h(ne, {
114
+ w && q.length === 0 && N.length === 0 && !G.isActive ? /* @__PURE__ */ g(ne, {
115
115
  onStart: w,
116
- disabled: b
117
- }) : /* @__PURE__ */ h("button", {
116
+ disabled: x
117
+ }) : /* @__PURE__ */ g("button", {
118
118
  type: "button",
119
119
  onClick: Z,
120
120
  disabled: !X,
121
121
  className: `flex size-9 flex-shrink-0 items-center justify-center rounded-full shadow-sm transition-all focus:outline-none focus-visible:ring-2 focus-visible:ring-border-strong ${X ? "bg-action-primary-bg text-action-primary-text hover:scale-105 hover:bg-action-primary-bg-hover" : "bg-bg-elevated text-text-muted"}`,
122
122
  "aria-label": T("chatInput.send", "Send message"),
123
123
  "data-testid": "assistant-send",
124
- children: b || P ? /* @__PURE__ */ h(m, { className: "size-4 motion-safe:animate-spin" }) : /* @__PURE__ */ h(p, { className: "size-4" })
124
+ children: x || P ? /* @__PURE__ */ g(h, { className: "size-4 motion-safe:animate-spin" }) : /* @__PURE__ */ g(m, { className: "size-4" })
125
125
  })
126
126
  ]
127
127
  }),
128
- C.length > 1 && /* @__PURE__ */ h("div", {
128
+ C.length > 1 && /* @__PURE__ */ g("div", {
129
129
  className: "mt-2 px-0.5",
130
- children: /* @__PURE__ */ h(c, {
131
- mode: S,
130
+ children: /* @__PURE__ */ g(c, {
131
+ mode: ie,
132
132
  availableModes: C,
133
- onModeChange: ae,
134
- disabled: b
133
+ onModeChange: oe,
134
+ disabled: x
135
135
  })
136
136
  })
137
137
  ]
138
138
  }),
139
- v ? /* @__PURE__ */ h("p", {
139
+ y ? /* @__PURE__ */ g("p", {
140
140
  className: "mt-1.5 px-1 text-center text-[11px] text-status-warning",
141
141
  "data-testid": "assistant-write-access-warning",
142
142
  children: T("composer.writeAccessDenied", "Changes may not save — your role in this workspace does not currently allow edits. You can still plan and review an action.")
143
143
  }) : null,
144
- /* @__PURE__ */ h("div", {
144
+ /* @__PURE__ */ g("div", {
145
145
  className: "mt-1.5 px-1 text-center text-[11px]",
146
146
  "aria-live": "polite",
147
- children: G.isStarting && !G.isListening ? /* @__PURE__ */ h("p", {
147
+ children: G.isStarting && !G.isListening ? /* @__PURE__ */ g("p", {
148
148
  className: "text-text-muted",
149
149
  "data-testid": "assistant-voice-starting",
150
150
  children: T("voice.starting", "Starting the microphone…")
151
- }) : G.isListening ? /* @__PURE__ */ g("p", {
151
+ }) : G.isListening ? /* @__PURE__ */ _("p", {
152
152
  className: "text-status-error-text",
153
153
  "data-testid": "assistant-voice-status",
154
- children: [/* @__PURE__ */ h("span", { className: "mr-1 inline-block size-1.5 rounded-full bg-status-error-text align-middle motion-safe:animate-pulse" }), G.interim || T("voice.listening", "Listening… speak now, tap the square to stop")]
155
- }) : $ ? /* @__PURE__ */ h("p", {
154
+ children: [/* @__PURE__ */ g("span", { className: "mr-1 inline-block size-1.5 rounded-full bg-status-error-text align-middle motion-safe:animate-pulse" }), G.interim || T("voice.listening", "Listening… speak now, tap the square to stop")]
155
+ }) : $ ? /* @__PURE__ */ g("p", {
156
156
  className: "text-status-error-text",
157
157
  "data-testid": "assistant-voice-error",
158
158
  children: $
159
- }) : L ? /* @__PURE__ */ h("button", {
159
+ }) : L ? /* @__PURE__ */ g("button", {
160
160
  type: "button",
161
161
  onClick: H,
162
162
  className: "text-status-error-text underline-offset-2 hover:underline",
163
163
  "data-testid": "assistant-attachment-rejection",
164
- children: fe(L)
165
- }) : I === "failed" ? /* @__PURE__ */ h("p", {
164
+ children: pe(L)
165
+ }) : I === "failed" ? /* @__PURE__ */ g("p", {
166
166
  className: "text-status-error-text",
167
167
  "data-testid": "assistant-attachment-blocked",
168
168
  children: Y.length === 1 ? T("attachments.blockedOne", "{{name}} didn't upload. Retry or remove it before sending.", { name: Y[0].filename }) : T("attachments.blockedMany", "{{count}} attachments didn't upload. Retry or remove them before sending.", { count: Y.length })
169
- }) : /* @__PURE__ */ h("p", {
169
+ }) : /* @__PURE__ */ g("p", {
170
170
  className: "text-text-muted",
171
171
  children: T("composer.hint", "Enter to send · Shift+Enter for newline · drag or paste files to attach")
172
172
  })
@@ -175,4 +175,4 @@ var _ = 200, v = ({ writeAccessDenied: v = !1, onSend: y, disabled: b = !1, plac
175
175
  });
176
176
  };
177
177
  //#endregion
178
- export { v as AssistantComposer };
178
+ export { y as AssistantComposer };
@@ -22,5 +22,16 @@ export interface UseAssistantAttachmentsResult {
22
22
  clearRejection: () => void;
23
23
  canAddMore: boolean;
24
24
  }
25
- export declare function useAssistantAttachments(): UseAssistantAttachmentsResult;
25
+ export interface UseAssistantAttachmentsOptions {
26
+ /**
27
+ * How many characters of a text or document file to keep when it is attached
28
+ * (BOFF-7334). Pass `largestInlineCharsPerFile(availableModes)`: the send cuts
29
+ * each file again to the SENDING mode's limit, so keeping the largest is what
30
+ * lets a file attached in one mode be sent in another without having been cut
31
+ * to the smaller limit first. Absent: the shared default,
32
+ * `MAX_INLINE_CHARS_PER_FILE`. Bounded like a mode's own limit.
33
+ */
34
+ perFileChars?: number;
35
+ }
36
+ export declare function useAssistantAttachments(options?: UseAssistantAttachmentsOptions): UseAssistantAttachmentsResult;
26
37
  //# sourceMappingURL=useAssistantAttachments.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAssistantAttachments.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/useAssistantAttachments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAOH,OAAO,EAYL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC3B,MAAM,eAAe,CAAC;AAkJvB,MAAM,WAAW,6BAA6B;IAC5C,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,qEAAqE;IACrE,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,WAAW,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC1C,6DAA6D;IAC7D,SAAS,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACtC,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC;IAChE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,gFAAgF;IAChF,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,uBAAuB,IAAI,6BAA6B,CAqQvE"}
1
+ {"version":3,"file":"useAssistantAttachments.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/useAssistantAttachments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAOH,OAAO,EAYL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC3B,MAAM,eAAe,CAAC;AAsJvB,MAAM,WAAW,6BAA6B;IAC5C,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,qEAAqE;IACrE,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,WAAW,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC1C,6DAA6D;IAC7D,SAAS,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACtC,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC;IAChE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,gFAAgF;IAChF,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,8BAA8B;IAC7C;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,8BAAmC,GAC3C,6BAA6B,CAyQ/B"}