@burdenoff/fe-libs 2026.930.1 → 2026.930.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 (48) hide show
  1. package/dist/shared/assistant/i18nManifest.d.ts +1 -1
  2. package/dist/shared/assistant/i18nManifest.d.ts.map +1 -1
  3. package/dist/shared/assistant/i18nManifest.js +1 -1
  4. package/dist/shared/assistant/preview/AssistantPreviewOverlay.d.ts.map +1 -1
  5. package/dist/shared/assistant/preview/AssistantPreviewOverlay.js +26 -25
  6. package/dist/shared/assistant/preview/types.d.ts +34 -4
  7. package/dist/shared/assistant/preview/types.d.ts.map +1 -1
  8. package/dist/shared/assistant/preview/types.js +6 -0
  9. package/dist/shared/assistant/ui/AIAssistantPanel.d.ts +5 -0
  10. package/dist/shared/assistant/ui/AIAssistantPanel.d.ts.map +1 -1
  11. package/dist/shared/assistant/ui/AIAssistantPanel.js +67 -66
  12. package/dist/shared/assistant/ui/AssistantChatArea.d.ts.map +1 -1
  13. package/dist/shared/assistant/ui/AssistantChatArea.js +1 -0
  14. package/dist/shared/assistant/ui/AssistantEmptyState.d.ts.map +1 -1
  15. package/dist/shared/assistant/ui/AssistantEmptyState.js +24 -18
  16. package/dist/shared/assistant/ui/AssistantHeader.d.ts.map +1 -1
  17. package/dist/shared/assistant/ui/AssistantHeader.js +45 -44
  18. package/dist/shared/assistant/ui/AssistantOverlay.d.ts +14 -1
  19. package/dist/shared/assistant/ui/AssistantOverlay.d.ts.map +1 -1
  20. package/dist/shared/assistant/ui/AssistantOverlay.js +105 -90
  21. package/dist/shared/assistant/ui/AssistantWriteConfirmDialog.d.ts +2 -0
  22. package/dist/shared/assistant/ui/AssistantWriteConfirmDialog.d.ts.map +1 -1
  23. package/dist/shared/assistant/ui/AssistantWriteConfirmDialog.js +104 -104
  24. package/dist/shared/assistant/ui/AssistantWriteProposalCard.d.ts +7 -0
  25. package/dist/shared/assistant/ui/AssistantWriteProposalCard.d.ts.map +1 -1
  26. package/dist/shared/assistant/ui/AssistantWriteProposalCard.js +91 -87
  27. package/dist/shared/assistant/ui/AssistantWriteProposalSlot.d.ts.map +1 -1
  28. package/dist/shared/assistant/ui/AssistantWriteProposalSlot.js +3 -2
  29. package/dist/shared/assistant/ui/assistantOverlayState.d.ts +38 -0
  30. package/dist/shared/assistant/ui/assistantOverlayState.d.ts.map +1 -1
  31. package/dist/shared/assistant/ui/assistantOverlayState.js +14 -10
  32. package/dist/shared/assistant/ui/composer/AssistantAttachmentButton.d.ts +9 -0
  33. package/dist/shared/assistant/ui/composer/AssistantAttachmentButton.d.ts.map +1 -1
  34. package/dist/shared/assistant/ui/composer/AssistantAttachmentButton.js +37 -33
  35. package/dist/shared/assistant/ui/composer/AssistantComposer.d.ts.map +1 -1
  36. package/dist/shared/assistant/ui/composer/AssistantComposer.js +2 -1
  37. package/dist/shared/assistant/ui/composer/AssistantConnectSourceItem.d.ts +16 -0
  38. package/dist/shared/assistant/ui/composer/AssistantConnectSourceItem.d.ts.map +1 -1
  39. package/dist/shared/assistant/ui/composer/AssistantConnectSourceItem.js +27 -24
  40. package/dist/shared/assistant/ui/useWriteProposalConfirm.d.ts +2 -2
  41. package/dist/shared/assistant/ui/useWriteProposals.d.ts +6 -0
  42. package/dist/shared/assistant/ui/useWriteProposals.d.ts.map +1 -1
  43. package/dist/shared/assistant/ui/useWriteProposals.js +11 -3
  44. package/dist/shared/assistant/ui/writeProposalPresentation.d.ts +26 -6
  45. package/dist/shared/assistant/ui/writeProposalPresentation.d.ts.map +1 -1
  46. package/dist/shared/assistant/ui/writeProposalPresentation.js +23 -16
  47. package/dist/shared-assistant.js +93 -92
  48. package/package.json +1 -1
@@ -1,81 +1,82 @@
1
1
  import { useAssistantTr as e } from "../i18n.js";
2
- import { useAssistantPreview as t } from "../preview/context.js";
3
- import { AssistantMoreMenu as n } from "./AssistantMoreMenu.js";
4
- import { Eye as r, History as i, PanelBottom as a, PanelRight as o, Plus as s, Sparkles as c, X as l } from "lucide-react";
5
- import { Fragment as u, jsx as d, jsxs as f } from "react/jsx-runtime";
2
+ import { hasAssistantPreviewSurface as t } from "../preview/types.js";
3
+ import { useAssistantPreview as n } from "../preview/context.js";
4
+ import { AssistantMoreMenu as r } from "./AssistantMoreMenu.js";
5
+ import { Eye as i, History as a, PanelBottom as o, PanelRight as s, Plus as c, Sparkles as l, X as u } from "lucide-react";
6
+ import { Fragment as d, jsx as f, jsxs as p } from "react/jsx-runtime";
6
7
  //#region src/shared/assistant/ui/AssistantHeader.tsx
7
- var p = ({ contextLabel: p, onNewConversation: m, onOpenHistory: h, historyOpen: g, onTogglePreview: _, previewOpen: v, onClose: y, docked: b, onToggleDock: x }) => {
8
- let S = e(), C = t();
9
- return /* @__PURE__ */ f("div", {
8
+ var m = ({ contextLabel: m, onNewConversation: h, onOpenHistory: g, historyOpen: _, onTogglePreview: v, previewOpen: y, onClose: b, docked: x, onToggleDock: S }) => {
9
+ let C = e(), w = n();
10
+ return /* @__PURE__ */ p("div", {
10
11
  className: "flex items-center gap-2 border-b border-border-default bg-bg-elevated px-3 py-2.5",
11
- children: [/* @__PURE__ */ f("div", {
12
+ children: [/* @__PURE__ */ p("div", {
12
13
  className: "flex min-w-0 flex-1 items-center gap-2",
13
- children: [/* @__PURE__ */ d("span", {
14
+ children: [/* @__PURE__ */ f("span", {
14
15
  className: "flex size-7 flex-shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-action-primary-bg/25 to-action-primary-bg/5 text-action-primary-bg",
15
- children: /* @__PURE__ */ d(c, { className: "size-4" })
16
- }), /* @__PURE__ */ f("span", {
16
+ children: /* @__PURE__ */ f(l, { className: "size-4" })
17
+ }), /* @__PURE__ */ p("span", {
17
18
  className: "min-w-0 flex-1",
18
- children: [/* @__PURE__ */ d("span", {
19
+ children: [/* @__PURE__ */ f("span", {
19
20
  className: "block truncate text-[14px] font-semibold leading-tight text-text-primary",
20
- children: S("header.title", "AI Assistant")
21
- }), /* @__PURE__ */ f("span", {
21
+ children: C("header.title", "AI Assistant")
22
+ }), /* @__PURE__ */ p("span", {
22
23
  className: "block truncate text-[11px] leading-tight text-text-muted",
23
- children: [S("header.ready", "Ready"), p && /* @__PURE__ */ f(u, { children: [/* @__PURE__ */ d("span", {
24
+ children: [C("header.ready", "Ready"), m && /* @__PURE__ */ p(d, { children: [/* @__PURE__ */ f("span", {
24
25
  "aria-hidden": "true",
25
26
  children: " · "
26
- }), S("header.context", "Context: {{page}}", { page: p })] })]
27
+ }), C("header.context", "Context: {{page}}", { page: m })] })]
27
28
  })]
28
29
  })]
29
- }), /* @__PURE__ */ f("div", {
30
+ }), /* @__PURE__ */ p("div", {
30
31
  className: "flex flex-shrink-0 items-center gap-0.5",
31
32
  children: [
32
- /* @__PURE__ */ d("button", {
33
+ /* @__PURE__ */ f("button", {
33
34
  type: "button",
34
- onClick: m,
35
+ onClick: h,
35
36
  className: "rounded-lg p-1.5 text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary",
36
- "aria-label": S("header.newConversation", "New conversation"),
37
+ "aria-label": C("header.newConversation", "New conversation"),
37
38
  "data-testid": "assistant-new-conversation",
38
- children: /* @__PURE__ */ d(s, { className: "size-4" })
39
+ children: /* @__PURE__ */ f(c, { className: "size-4" })
39
40
  }),
40
- /* @__PURE__ */ d("button", {
41
+ /* @__PURE__ */ f("button", {
41
42
  type: "button",
42
- onClick: h,
43
- className: `rounded-lg p-1.5 transition-colors ${g ? "bg-action-primary-bg/15 text-action-primary-bg" : "text-text-secondary hover:bg-bg-sunken hover:text-text-primary"}`,
44
- "aria-label": S("header.history", "Conversation history"),
45
- "aria-pressed": g,
43
+ onClick: g,
44
+ className: `rounded-lg p-1.5 transition-colors ${_ ? "bg-action-primary-bg/15 text-action-primary-bg" : "text-text-secondary hover:bg-bg-sunken hover:text-text-primary"}`,
45
+ "aria-label": C("header.history", "Conversation history"),
46
+ "aria-pressed": _,
46
47
  "data-testid": "assistant-open-history",
47
- children: /* @__PURE__ */ d(i, { className: "size-4" })
48
+ children: /* @__PURE__ */ f(a, { className: "size-4" })
48
49
  }),
49
- C && _ && /* @__PURE__ */ d("button", {
50
+ t(w) && v && /* @__PURE__ */ f("button", {
50
51
  type: "button",
51
- onClick: _,
52
- className: `rounded-lg p-1.5 transition-colors ${v ? "bg-action-primary-bg/15 text-action-primary-bg" : "text-text-secondary hover:bg-bg-sunken hover:text-text-primary"}`,
53
- "aria-label": C.label ?? S("header.preview", "Preview"),
54
- "aria-pressed": !!v,
52
+ onClick: v,
53
+ className: `rounded-lg p-1.5 transition-colors ${y ? "bg-action-primary-bg/15 text-action-primary-bg" : "text-text-secondary hover:bg-bg-sunken hover:text-text-primary"}`,
54
+ "aria-label": w.label ?? C("header.preview", "Preview"),
55
+ "aria-pressed": !!y,
55
56
  "data-testid": "assistant-toggle-preview",
56
- children: /* @__PURE__ */ d(r, { className: "size-4" })
57
+ children: /* @__PURE__ */ f(i, { className: "size-4" })
57
58
  }),
58
- /* @__PURE__ */ d(n, {}),
59
- x && /* @__PURE__ */ d("button", {
59
+ /* @__PURE__ */ f(r, {}),
60
+ S && /* @__PURE__ */ f("button", {
60
61
  type: "button",
61
- onClick: x,
62
+ onClick: S,
62
63
  className: "hidden rounded-lg p-1.5 text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary sm:inline-flex",
63
- "aria-label": b ? S("header.float", "Float chat window") : S("header.dock", "Dock to side panel"),
64
- "aria-pressed": b,
64
+ "aria-label": x ? C("header.float", "Float chat window") : C("header.dock", "Dock to side panel"),
65
+ "aria-pressed": x,
65
66
  "data-testid": "assistant-toggle-dock",
66
- children: d(b ? a : o, { className: "size-4" })
67
+ children: f(x ? o : s, { className: "size-4" })
67
68
  }),
68
- /* @__PURE__ */ d("button", {
69
+ /* @__PURE__ */ f("button", {
69
70
  type: "button",
70
- onClick: y,
71
+ onClick: b,
71
72
  className: "rounded-lg p-1.5 text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary",
72
- "aria-label": S("header.close", "Close assistant"),
73
+ "aria-label": C("header.close", "Close assistant"),
73
74
  "data-testid": "assistant-close",
74
- children: /* @__PURE__ */ d(l, { className: "size-4" })
75
+ children: /* @__PURE__ */ f(u, { className: "size-4" })
75
76
  })
76
77
  ]
77
78
  })]
78
79
  });
79
80
  };
80
81
  //#endregion
81
- export { p as AssistantHeader };
82
+ export { m as AssistantHeader };
@@ -12,6 +12,11 @@ export interface AssistantOverlayContextValue {
12
12
  toggleDock: () => void;
13
13
  /** Width the docked panel takes from the page right now, in px (0 if none). */
14
14
  dockWidthPx: number;
15
+ /**
16
+ * How far the open assistant reaches in from the page's right edge, in px:
17
+ * docked or floating, 0 when closed or on a phone (BOFF-7799).
18
+ */
19
+ panelInsetPx: number;
15
20
  keys: AssistantOverlayKeys;
16
21
  }
17
22
  /** The overlay state in force, or null when no provider is mounted. */
@@ -22,6 +27,13 @@ export declare function useAssistantOverlayOrNull(): AssistantOverlayContextValu
22
27
  * published as `var(--assistant-dock-width)` on `<html>` for CSS consumers.
23
28
  */
24
29
  export declare function useAssistantDockWidth(): number;
30
+ /**
31
+ * How far, in px, the open assistant reaches in from the right of the page,
32
+ * docked OR floating: 0 when it is closed, on a phone, or not mounted at all.
33
+ * The same value is published as `var(--assistant-panel-inset)` on `<html>`.
34
+ * See `ASSISTANT_PANEL_INSET_VAR` for why it differs from the dock width.
35
+ */
36
+ export declare function useAssistantPanelInset(): number;
25
37
  /**
26
38
  * Listen for `<product>:quota-exhausted` and hand each wall to the product.
27
39
  *
@@ -62,7 +74,8 @@ export interface AssistantOverlayProviderProps {
62
74
  * the panel's own close and dock buttons) without each path remembering to
63
75
  * persist.
64
76
  *
65
- * Mount ONE per page: the published dock width is a single `<html>` variable.
77
+ * Mount ONE per page: the published dock width and panel inset are single
78
+ * `<html>` variables.
66
79
  */
67
80
  export declare function AssistantOverlayProvider({ keyPrefix, quota, children, }: AssistantOverlayProviderProps): import("react/jsx-runtime").JSX.Element;
68
81
  /** What the overlay hands the panel it renders. */
@@ -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;AAK1C,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,EAoBL,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;;;;;;;;;;;;;;OAcG;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":"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"}
@@ -2,174 +2,189 @@ 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
4
  import { AssistantPreviewBridgeHost as r } from "../preview/bridgeHost.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, closestAround 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";
6
- import { useAssistantServerHistory as b } from "../history/useAssistantServerHistory.js";
7
- import { AIAssistantPanel as x } from "./AIAssistantPanel.js";
8
- import { createContext as S, useCallback as C, useContext as w, useEffect as T, useMemo as E, useRef as D, useState as O, useSyncExternalStore as k } from "react";
9
- import { Sparkles as A } from "lucide-react";
10
- import { jsx as j, jsxs as M } from "react/jsx-runtime";
5
+ import { ASSISTANT_DOCK_WIDTH_VAR as i, ASSISTANT_OVERLAY_DESKTOP_QUERY as a, ASSISTANT_OVERLAY_TOP_VAR as o, ASSISTANT_PANEL_INSET_VAR as s, aboveAssistantBottomChrome as c, assistantOverlayClassName as l, assistantOverlayEscapeAction as u, assistantOverlayKeys as d, assistantQuotaKindOf as f, closestAround as p, createAssistantNavigate as m, isAssistantToggleShortcut as h, nextAssistantOpenState as g, publishedAssistantDockWidth as _, publishedAssistantPanelInset as v, readAssistantOverlayFlag as y, requestedAssistantOpenState as b, writeAssistantOverlayFlag as x } from "./assistantOverlayState.js";
6
+ import { useAssistantServerHistory as S } from "../history/useAssistantServerHistory.js";
7
+ import { AIAssistantPanel as C } from "./AIAssistantPanel.js";
8
+ import { createContext as w, useCallback as T, useContext as E, useEffect as D, useMemo as O, useRef as k, useState as A, useSyncExternalStore as j } from "react";
9
+ import { Sparkles as M } from "lucide-react";
10
+ import { jsx as N, jsxs as P } from "react/jsx-runtime";
11
11
  //#region src/shared/assistant/ui/AssistantOverlay.tsx
12
- var N = S(null);
13
- function P() {
14
- return w(N);
12
+ var F = w(null);
13
+ function I() {
14
+ return E(F);
15
15
  }
16
- function F() {
17
- return w(N)?.dockWidthPx ?? 0;
16
+ function L() {
17
+ return E(F)?.dockWidthPx ?? 0;
18
18
  }
19
- var I = () => typeof window > "u" ? void 0 : window.sessionStorage, L = () => typeof window > "u" ? void 0 : window.localStorage;
20
- function R(e) {
19
+ function R() {
20
+ return E(F)?.panelInsetPx ?? 0;
21
+ }
22
+ var z = () => typeof window > "u" ? void 0 : window.sessionStorage, B = () => typeof window > "u" ? void 0 : window.localStorage;
23
+ function V(e) {
21
24
  if (typeof window > "u" || typeof window.matchMedia != "function") return () => {};
22
25
  let t = window.matchMedia(a);
23
26
  return t.addEventListener("change", e), () => t.removeEventListener("change", e);
24
27
  }
25
- function z() {
28
+ function H() {
26
29
  return typeof window < "u" && typeof window.matchMedia == "function" && window.matchMedia("(min-width: 640px)").matches;
27
30
  }
28
- function B() {
29
- return k(R, z, () => !1);
31
+ function U() {
32
+ return j(V, H, () => !1);
30
33
  }
31
- function V(e, n) {
32
- let r = D(n);
33
- T(() => {
34
+ function W(e, n) {
35
+ let r = k(n);
36
+ D(() => {
34
37
  r.current = n;
35
- }, [n]), T(() => {
38
+ }, [n]), D(() => {
36
39
  if (!e || typeof window > "u") return;
37
- let n = t(e), i = (e) => r.current(d(e), e);
40
+ let n = t(e), i = (e) => r.current(f(e), e);
38
41
  return window.addEventListener(n, i), () => window.removeEventListener(n, i);
39
42
  }, [e]);
40
43
  }
41
- var H = () => {};
42
- function U({ keyPrefix: e, quota: t, children: n }) {
43
- let r = E(() => u(e), [e]), [a, o] = O(() => _(I, r.openStorageKey)), [s, c] = O(() => _(L, r.dockStorageKey)), l = C(() => o(!0), []), d = C(() => o(!1), []), f = C(() => o((e) => !e), []), p = C(() => c((e) => !e), []);
44
- T(() => {
45
- y(I, r.openStorageKey, a);
46
- }, [r.openStorageKey, a]), T(() => {
47
- y(L, r.dockStorageKey, s);
48
- }, [r.dockStorageKey, s]), T(() => {
44
+ var G = () => {};
45
+ function K({ keyPrefix: e, quota: t, children: n }) {
46
+ let r = O(() => d(e), [e]), [a, o] = A(() => y(z, r.openStorageKey)), [c, l] = A(() => y(B, r.dockStorageKey)), u = T(() => o(!0), []), f = T(() => o(!1), []), p = T(() => o((e) => !e), []), m = T(() => l((e) => !e), []);
47
+ D(() => {
48
+ x(z, r.openStorageKey, a);
49
+ }, [r.openStorageKey, a]), D(() => {
50
+ x(B, r.dockStorageKey, c);
51
+ }, [r.dockStorageKey, c]), D(() => {
49
52
  if (typeof window > "u") return;
50
53
  let e = (e) => {
51
- let t = v(e);
52
- o((e) => h(e, t));
54
+ let t = b(e);
55
+ o((e) => g(e, t));
53
56
  };
54
57
  return window.addEventListener(r.toggleEvent, e), () => window.removeEventListener(r.toggleEvent, e);
55
- }, [r.toggleEvent]), T(() => {
58
+ }, [r.toggleEvent]), D(() => {
56
59
  if (typeof document > "u") return;
57
60
  let e = (e) => {
58
- m(e) && (e.preventDefault(), o((e) => !e));
61
+ h(e) && (e.preventDefault(), o((e) => !e));
59
62
  };
60
63
  return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
61
- }, []), V(t?.product ?? null, t?.onExhausted ?? H);
62
- let b = g({
64
+ }, []), W(t?.product ?? null, t?.onExhausted ?? G);
65
+ let S = U(), C = _({
66
+ isOpen: a,
67
+ docked: c,
68
+ isDesktop: S
69
+ }), w = v({
63
70
  isOpen: a,
64
- docked: s,
65
- isDesktop: B()
71
+ docked: c,
72
+ isDesktop: S
66
73
  });
67
- T(() => {
74
+ D(() => {
68
75
  if (typeof document > "u") return;
69
76
  let e = document.documentElement.style;
70
- return e.setProperty(i, `${b}px`), () => {
77
+ return e.setProperty(i, `${C}px`), () => {
71
78
  e.removeProperty(i);
72
79
  };
73
- }, [b]);
74
- let x = E(() => ({
80
+ }, [C]), D(() => {
81
+ if (typeof document > "u") return;
82
+ let e = document.documentElement.style;
83
+ return e.setProperty(s, `${w}px`), () => {
84
+ e.removeProperty(s);
85
+ };
86
+ }, [w]);
87
+ let E = O(() => ({
75
88
  isOpen: a,
76
- open: l,
77
- close: d,
78
- toggle: f,
79
- docked: s,
80
- toggleDock: p,
81
- dockWidthPx: b,
89
+ open: u,
90
+ close: f,
91
+ toggle: p,
92
+ docked: c,
93
+ toggleDock: m,
94
+ dockWidthPx: C,
95
+ panelInsetPx: w,
82
96
  keys: r
83
97
  }), [
84
98
  a,
85
- l,
86
- d,
99
+ u,
87
100
  f,
88
- s,
89
101
  p,
90
- b,
102
+ c,
103
+ m,
104
+ C,
105
+ w,
91
106
  r
92
107
  ]);
93
- return /* @__PURE__ */ j(N.Provider, {
94
- value: x,
108
+ return /* @__PURE__ */ N(F.Provider, {
109
+ value: E,
95
110
  children: n
96
111
  });
97
112
  }
98
- var W = (e, t) => /* @__PURE__ */ j(x, {
113
+ var q = (e, t) => /* @__PURE__ */ N(C, {
99
114
  ...e,
100
115
  ...t
101
116
  });
102
- function G(e) {
103
- let t = P();
104
- return t ? /* @__PURE__ */ j(K, {
117
+ function J(e) {
118
+ let t = I();
119
+ return t ? /* @__PURE__ */ N(Y, {
105
120
  state: t,
106
121
  ...e
107
122
  }) : null;
108
123
  }
109
- function K({ state: t, panelId: i = "ai-assistant", panelProps: a, renderPanel: u, navigate: d, isShellLessTarget: m, topOffsetPx: h = 56, launcherIcon: g, launcherBottomInset: _ = "1.5rem", showLauncher: v = !0 }) {
110
- let { isOpen: y, close: x, toggle: S, docked: C, toggleDock: w } = t, D = e();
111
- b(a?.serverHistory === !0);
112
- let [k, N] = O(!1), P = E(() => d ? p({
124
+ function Y({ state: t, panelId: i = "ai-assistant", panelProps: a, renderPanel: s, navigate: d, isShellLessTarget: f, topOffsetPx: h = 56, launcherIcon: g, launcherBottomInset: _ = "1.5rem", showLauncher: v = !0 }) {
125
+ let { isOpen: y, close: b, toggle: x, docked: C, toggleDock: w } = t, T = e();
126
+ S(a?.serverHistory === !0);
127
+ let [E, k] = A(!1), j = O(() => d ? m({
113
128
  navigate: d,
114
- isShellLessTarget: m,
115
- isDesktop: z,
116
- collapseSheet: () => N(!1),
129
+ isShellLessTarget: f,
130
+ isDesktop: H,
131
+ collapseSheet: () => k(!1),
117
132
  openInNewTab: (e) => window.open(e, "_blank", "noopener,noreferrer")
118
- }) : void 0, [d, m]);
119
- T(() => {
133
+ }) : void 0, [d, f]);
134
+ D(() => {
120
135
  if (!y) return;
121
136
  let e = (e) => {
122
- l({
137
+ u({
123
138
  key: e.key,
124
139
  isOpen: y,
125
140
  alreadyHandled: e.defaultPrevented,
126
141
  dialogOpen: document.querySelector("[role=\"dialog\"],[role=\"alertdialog\"],dialog[open]") !== null,
127
- pressedInsideDialog: f(e.target, "[role=\"dialog\"],[role=\"alertdialog\"],dialog[open]") !== null,
142
+ pressedInsideDialog: p(e.target, "[role=\"dialog\"],[role=\"alertdialog\"],dialog[open]") !== null,
128
143
  panelOwnsEscape: n()
129
- }) === "close" && (e.preventDefault(), x());
144
+ }) === "close" && (e.preventDefault(), b());
130
145
  };
131
146
  return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
132
- }, [y, x]);
147
+ }, [y, b]);
133
148
  let F = {
134
149
  panelId: i,
135
150
  visible: !0,
136
- onClose: x,
151
+ onClose: b,
137
152
  docked: C,
138
153
  onToggleDock: w,
139
- onNavigate: P
140
- }, I = D("overlay.launcher", "AI Assistant"), L = { [o]: `${h}px` };
141
- return /* @__PURE__ */ M(r, {
154
+ onNavigate: j
155
+ }, I = T("overlay.launcher", "AI Assistant"), L = { [o]: `${h}px` };
156
+ return /* @__PURE__ */ P(r, {
142
157
  preview: a?.preview,
143
- children: [y && /* @__PURE__ */ M("div", {
144
- className: c({
145
- expanded: k,
158
+ children: [y && /* @__PURE__ */ P("div", {
159
+ className: l({
160
+ expanded: E,
146
161
  docked: C
147
162
  }),
148
163
  style: L,
149
164
  "data-testid": "assistant-overlay",
150
- children: [/* @__PURE__ */ j("button", {
165
+ children: [/* @__PURE__ */ N("button", {
151
166
  type: "button",
152
- onClick: () => N((e) => !e),
167
+ onClick: () => k((e) => !e),
153
168
  className: "flex w-full shrink-0 justify-center pt-2 pb-1 sm:hidden",
154
- "aria-label": k ? D("sheet.collapse", "Shrink the assistant") : D("sheet.expand", "Expand the assistant"),
155
- "aria-expanded": k,
169
+ "aria-label": E ? T("sheet.collapse", "Shrink the assistant") : T("sheet.expand", "Expand the assistant"),
170
+ "aria-expanded": E,
156
171
  "data-testid": "assistant-sheet-handle",
157
- children: /* @__PURE__ */ j("span", { className: "h-1.5 w-10 rounded-full bg-border-strong" })
158
- }), /* @__PURE__ */ j("div", {
172
+ children: /* @__PURE__ */ N("span", { className: "h-1.5 w-10 rounded-full bg-border-strong" })
173
+ }), /* @__PURE__ */ N("div", {
159
174
  className: "flex min-h-0 flex-1 flex-col",
160
- children: u ? u(F) : W(a, F)
175
+ children: s ? s(F) : q(a, F)
161
176
  })]
162
- }), v && /* @__PURE__ */ j("button", {
177
+ }), v && /* @__PURE__ */ N("button", {
163
178
  type: "button",
164
- onClick: S,
165
- title: D("overlay.launcherTitle", "AI Assistant ({{shortcut}})", { shortcut: "Ctrl+Shift+A" }),
179
+ onClick: x,
180
+ title: T("overlay.launcherTitle", "AI Assistant ({{shortcut}})", { shortcut: "Ctrl+Shift+A" }),
166
181
  "aria-label": I,
167
182
  "aria-haspopup": "dialog",
168
183
  "aria-expanded": y,
169
184
  "data-testid": "assistant-fab",
170
- style: { bottom: s(_) },
185
+ style: { bottom: c(_) },
171
186
  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 " + (y ? "hidden sm:inline-flex" : "inline-flex"),
172
- children: g ?? /* @__PURE__ */ j(A, {
187
+ children: g ?? /* @__PURE__ */ N(M, {
173
188
  className: "size-6",
174
189
  "aria-hidden": "true"
175
190
  })
@@ -177,4 +192,4 @@ function K({ state: t, panelId: i = "ai-assistant", panelProps: a, renderPanel:
177
192
  });
178
193
  }
179
194
  //#endregion
180
- export { G as AssistantOverlay, U as AssistantOverlayProvider, F as useAssistantDockWidth, P as useAssistantOverlayOrNull, V as useAssistantQuotaExhausted };
195
+ export { J as AssistantOverlay, K as AssistantOverlayProvider, L as useAssistantDockWidth, I as useAssistantOverlayOrNull, R as useAssistantPanelInset, W as useAssistantQuotaExhausted };
@@ -41,6 +41,8 @@ export interface AssistantWriteConfirmDialogProps {
41
41
  view: WriteProposalView | null;
42
42
  /** The issuing sandbox's clock when `view` was read (`list().serverNow`). */
43
43
  serverNow: number;
44
+ /** This device's clock when that read arrived (BOFF-8163). */
45
+ arrivedAt: number;
44
46
  /** The ISSUING sandbox's `/health` write capabilities; absent = unknown. */
45
47
  capabilities: SandboxWriteCapabilities | null | undefined;
46
48
  /** A turn is running in this conversation: no decision can be made. */
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantWriteConfirmDialog.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantWriteConfirmDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,EAAE,EAGR,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EACV,wBAAwB,EAExB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAmB3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,4DAA4D;AAC5D,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,MAAM,WAAW,gCAAgC;IAC/C,mFAAmF;IACnF,IAAI,EAAE,OAAO,CAAC;IACd,6DAA6D;IAC7D,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC/B,6EAA6E;IAC7E,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,YAAY,EAAE,wBAAwB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1D,uEAAuE;IACvE,YAAY,EAAE,OAAO,CAAC;IACtB,EAAE,EAAE,WAAW,CAAC;IAChB;;;OAGG;IACH,SAAS,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnE,qDAAqD;IACrD,SAAS,EAAE,CACT,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,iBAAiB,KACvB,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,iEAAiE;IACjE,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,6EAA6E;IAC7E,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAiBD,eAAO,MAAM,2BAA2B,EAAE,EAAE,CAC1C,gCAAgC,CAUjC,CAAC"}
1
+ {"version":3,"file":"AssistantWriteConfirmDialog.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantWriteConfirmDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,EAAE,EAGR,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EACV,wBAAwB,EAExB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAmB3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,4DAA4D;AAC5D,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,MAAM,WAAW,gCAAgC;IAC/C,mFAAmF;IACnF,IAAI,EAAE,OAAO,CAAC;IACd,6DAA6D;IAC7D,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC/B,6EAA6E;IAC7E,SAAS,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,YAAY,EAAE,wBAAwB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1D,uEAAuE;IACvE,YAAY,EAAE,OAAO,CAAC;IACtB,EAAE,EAAE,WAAW,CAAC;IAChB;;;OAGG;IACH,SAAS,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnE,qDAAqD;IACrD,SAAS,EAAE,CACT,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,iBAAiB,KACvB,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,iEAAiE;IACjE,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,6EAA6E;IAC7E,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAiBD,eAAO,MAAM,2BAA2B,EAAE,EAAE,CAC1C,gCAAgC,CAUjC,CAAC"}