@burdenoff/fe-libs 2026.912.2 → 2026.912.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.
@@ -69,6 +69,14 @@ export interface AssistantEntityPreviewProps {
69
69
  * is the whole message.
70
70
  */
71
71
  readonly stepStatus?: AssistantStepRailProps['statusLabels'];
72
+ /**
73
+ * Names the failure above the message — "Build stopped", "Import failed".
74
+ *
75
+ * ★ Optional. A raw transport message ("ECONNRESET") tells a viewer that
76
+ * something broke but not WHAT, and only the product knows what the run was
77
+ * called. Omit it and the message stands alone, as before.
78
+ */
79
+ readonly errorHeading?: string;
72
80
  };
73
81
  /** Body shown when there are no tabs. */
74
82
  readonly children?: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantEntityPreview.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/preview/entity/AssistantEntityPreview.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAQL,KAAK,EAAE,EACP,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAML,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC/C;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC;IACzC,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC;IACnC,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAC/B;;;;;;;WAOG;QACH,QAAQ,CAAC,UAAU,CAAC,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAAC;KAC9D,CAAC;IACF,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;CAC/B;AA+XD,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,2BAA2B,CAqKlE,CAAC"}
1
+ {"version":3,"file":"AssistantEntityPreview.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/preview/entity/AssistantEntityPreview.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAQL,KAAK,EAAE,EACP,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EAAqB,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAQL,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC/C;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC;IACzC,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC;IACnC,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAC/B;;;;;;;WAOG;QACH,QAAQ,CAAC,UAAU,CAAC,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAAC;QAC7D;;;;;;WAMG;QACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;IACF,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;CAC/B;AAmaD,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,2BAA2B,CAqKlE,CAAC"}
@@ -1,29 +1,33 @@
1
- import { IDLE_ACTIVE_TAB as e, nextActiveTab as t, pinActiveTab as n, tabForArrowKey as r } from "./entityPreviewState.js";
2
- import { AssistantStepRail as i } from "./AssistantStepRail.js";
3
- import { useCallback as a, useEffect as o, useId as s, useMemo as c, useRef as l, useState as u } from "react";
4
- import { Fragment as d, jsx as f, jsxs as p } from "react/jsx-runtime";
1
+ import { IDLE_ACTIVE_TAB as e, nextActiveTab as t, pinActiveTab as n, shouldPinOnMove as r, shouldPinOnSelect as i, tabForArrowKey as a } from "./entityPreviewState.js";
2
+ import { AssistantStepRail as o } from "./AssistantStepRail.js";
3
+ import { useCallback as s, useEffect as c, useId as l, useMemo as u, useRef as d, useState as f } from "react";
4
+ import { Fragment as p, jsx as m, jsxs as h } from "react/jsx-runtime";
5
5
  //#region src/shared/assistant/preview/entity/AssistantEntityPreview.tsx
6
- var m = {
6
+ var g = {
7
7
  borderColor: "var(--color-border-subtle)",
8
8
  backgroundColor: "var(--color-bg-sunken)",
9
9
  boxShadow: "var(--shadow-elevation-1)",
10
10
  borderRadius: "var(--radius-card)"
11
- }, h = { borderColor: "var(--color-border-subtle)" }, g = (e) => e.replace(/[^A-Za-z0-9_-]/g, (e) => `-${e.charCodeAt(0).toString(36)}-`), _ = [], v = [], y = ({ title: e, meta: t, onClose: n, headerActions: r, closeLabel: i }) => /* @__PURE__ */ p("header", {
11
+ }, _ = { borderColor: "var(--color-border-subtle)" }, v = {
12
+ borderColor: "var(--color-status-error-border)",
13
+ backgroundColor: "var(--color-status-error-bgSubtle)",
14
+ color: "var(--color-status-error-text)"
15
+ }, y = (e) => e.replace(/[^A-Za-z0-9_-]/g, (e) => `-${e.charCodeAt(0).toString(36)}-`), b = [], x = [], S = ({ title: e, meta: t, onClose: n, headerActions: r, closeLabel: i }) => /* @__PURE__ */ h("header", {
12
16
  className: "flex items-center justify-between gap-2 border-b px-3 py-2",
13
- style: h,
14
- children: [/* @__PURE__ */ p("div", {
17
+ style: _,
18
+ children: [/* @__PURE__ */ h("div", {
15
19
  className: "flex min-w-0 items-center gap-2",
16
- children: [/* @__PURE__ */ f("span", {
20
+ children: [/* @__PURE__ */ m("span", {
17
21
  className: "truncate text-sm font-medium",
18
22
  style: { color: "var(--color-text-primary)" },
19
23
  children: e
20
- }), t == null ? null : /* @__PURE__ */ f("span", {
21
- className: "shrink-0 text-xs",
24
+ }), t == null ? null : /* @__PURE__ */ m("span", {
25
+ className: "min-w-0 truncate text-xs",
22
26
  style: { color: "var(--color-text-muted)" },
23
27
  "data-testid": "assistant-entity-preview-meta",
24
28
  children: t
25
29
  })]
26
- }), r ?? (n ? /* @__PURE__ */ f("button", {
30
+ }), r ?? (n ? /* @__PURE__ */ m("button", {
27
31
  type: "button",
28
32
  onClick: n,
29
33
  className: "shrink-0 rounded-md px-2 py-1 text-xs focus:outline-none focus-visible:ring-2",
@@ -32,76 +36,110 @@ var m = {
32
36
  "data-testid": "assistant-entity-preview-close",
33
37
  children: i ?? "Close preview"
34
38
  }) : null)]
35
- }), b = ({ error: e, caption: t }) => /* @__PURE__ */ p(d, { children: [e ? /* @__PURE__ */ f("p", {
39
+ }), C = ({ error: e, errorHeading: t, caption: n }) => /* @__PURE__ */ h(p, { children: [e ? /* @__PURE__ */ m("div", {
36
40
  role: "alert",
37
- className: "border-b px-3 py-2 text-xs",
38
- style: {
39
- ...h,
40
- color: "var(--color-status-error-text)"
41
- },
41
+ className: "border-b px-3 py-2",
42
+ style: v,
42
43
  "data-testid": "assistant-entity-preview-error",
43
- children: e
44
- }) : null, /* @__PURE__ */ f("p", {
44
+ children: /* @__PURE__ */ h("p", {
45
+ className: "flex items-start gap-1.5 text-xs",
46
+ style: { margin: 0 },
47
+ children: [/* @__PURE__ */ h("svg", {
48
+ "aria-hidden": "true",
49
+ focusable: "false",
50
+ width: "14",
51
+ height: "14",
52
+ viewBox: "0 0 24 24",
53
+ fill: "none",
54
+ stroke: "currentColor",
55
+ strokeWidth: "2",
56
+ strokeLinecap: "round",
57
+ strokeLinejoin: "round",
58
+ className: "mt-px shrink-0",
59
+ children: [
60
+ /* @__PURE__ */ m("path", { d: "M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0Z" }),
61
+ /* @__PURE__ */ m("line", {
62
+ x1: "12",
63
+ y1: "9",
64
+ x2: "12",
65
+ y2: "13"
66
+ }),
67
+ /* @__PURE__ */ m("line", {
68
+ x1: "12",
69
+ y1: "17",
70
+ x2: "12.01",
71
+ y2: "17"
72
+ })
73
+ ]
74
+ }), /* @__PURE__ */ h("span", {
75
+ className: "min-w-0 break-words",
76
+ children: [t ? /* @__PURE__ */ h("span", {
77
+ className: "font-semibold uppercase tracking-wide",
78
+ children: [t, ": "]
79
+ }) : null, e]
80
+ })]
81
+ })
82
+ }) : null, /* @__PURE__ */ m("p", {
45
83
  "aria-live": "polite",
46
- className: e == null && t ? "border-b px-3 py-2 text-xs" : void 0,
47
- style: t && !e ? {
48
- ...h,
84
+ className: e == null && n ? "border-b px-3 py-2 text-xs" : void 0,
85
+ style: n && !e ? {
86
+ ..._,
49
87
  color: "var(--color-text-secondary)",
50
88
  margin: 0
51
89
  } : { margin: 0 },
52
90
  "data-testid": "assistant-entity-preview-caption",
53
- children: e ? "" : t ?? ""
54
- })] }), x = ({ tabs: e, tabIds: t, title: n, activeId: i, pinnedId: a, onPick: s, tabDomId: c, panelDomId: u }) => {
55
- let d = l(null), m = l(null);
56
- return o(() => {
57
- let e = m.current;
91
+ children: e ? "" : n ?? ""
92
+ })] }), w = ({ tabs: e, tabIds: t, title: n, activeId: o, pinnedId: s, onPick: l, tabDomId: u, panelDomId: f }) => {
93
+ let p = d(null), g = d(null);
94
+ return c(() => {
95
+ let e = g.current;
58
96
  if (e !== null) {
59
97
  if (t.includes(e)) {
60
- document.activeElement === document.body && (m.current = null);
98
+ document.activeElement === document.body && (g.current = null);
61
99
  return;
62
100
  }
63
- m.current = null, document.activeElement === document.body && i !== null && (m.current = i, document.getElementById(c(i))?.focus());
101
+ g.current = null, document.activeElement === document.body && o !== null && (g.current = o, document.getElementById(u(o))?.focus());
64
102
  }
65
103
  }, [
66
104
  t,
67
- i,
68
- c
69
- ]), e.length === 0 ? null : /* @__PURE__ */ f("div", {
70
- ref: d,
105
+ o,
106
+ u
107
+ ]), e.length === 0 ? null : /* @__PURE__ */ m("div", {
108
+ ref: p,
71
109
  role: "tablist",
72
110
  "aria-label": n,
73
111
  className: "flex min-w-0 items-center gap-1 overflow-x-auto border-b px-2 py-1",
74
- style: h,
112
+ style: _,
75
113
  children: e.map((e) => {
76
- let n = e.id === i;
77
- return /* @__PURE__ */ p("button", {
114
+ let n = e.id === o;
115
+ return /* @__PURE__ */ h("button", {
78
116
  type: "button",
79
117
  role: "tab",
80
- id: c(e.id),
118
+ id: u(e.id),
81
119
  "aria-selected": n,
82
- "aria-controls": n ? u(e.id) : void 0,
120
+ "aria-controls": n ? f(e.id) : void 0,
83
121
  tabIndex: n ? 0 : -1,
84
122
  onClick: () => {
85
- e.id !== (a ?? i) && s(e.id);
123
+ i(e.id, s) && l(e.id);
86
124
  },
87
125
  onFocus: () => {
88
- m.current = e.id;
126
+ g.current = e.id;
89
127
  },
90
128
  onBlur: (t) => {
91
129
  let n = t.relatedTarget;
92
130
  if (n !== null) {
93
- if (d.current?.contains(n) === !0) return;
94
- m.current === e.id && (m.current = null);
131
+ if (p.current?.contains(n) === !0) return;
132
+ g.current === e.id && (g.current = null);
95
133
  return;
96
134
  }
97
135
  let r = e.id;
98
136
  queueMicrotask(() => {
99
- m.current === r && document.getElementById(c(r)) !== null && (m.current = null);
137
+ g.current === r && document.getElementById(u(r)) !== null && (g.current = null);
100
138
  });
101
139
  },
102
140
  onKeyDown: (n) => {
103
- let o = getComputedStyle(n.currentTarget).direction === "rtl", l = r(n.key, t, e.id, o);
104
- l !== null && (n.preventDefault(), l !== (a ?? i) && s(l), document.getElementById(c(l))?.focus());
141
+ let i = getComputedStyle(n.currentTarget).direction === "rtl", c = a(n.key, t, e.id, i);
142
+ c !== null && (n.preventDefault(), r(c, s, o) && l(c), document.getElementById(u(c))?.focus());
105
143
  },
106
144
  "data-testid": `assistant-entity-tab-${e.id}`,
107
145
  "data-selected": n ? "true" : "false",
@@ -110,72 +148,73 @@ var m = {
110
148
  backgroundColor: n ? "var(--color-bg-surface)" : "transparent",
111
149
  color: n ? "var(--color-text-primary)" : "var(--color-text-muted)"
112
150
  },
113
- children: [e.label, e.badge === void 0 ? null : /* @__PURE__ */ f("span", {
151
+ children: [e.label, e.badge === void 0 ? null : /* @__PURE__ */ m("span", {
114
152
  className: "ml-1.5 text-[10px]",
115
153
  children: e.badge
116
154
  })]
117
155
  }, e.id);
118
156
  })
119
157
  });
120
- }, S = ({ title: r, steps: o = _, tabs: l = v, runKey: d = null, follow: S, caption: C, error: w, meta: T, onClose: E, headerActions: D, labels: O, children: k }) => {
121
- let A = s(), j = a((e) => `assistant-entity-tab-${A}-${g(e)}`, [A]), M = a((e) => `assistant-entity-panel-${A}-${g(e)}`, [A]), [N, P] = u(e), F = c(() => l.map((e) => e.id), [l]), I = t(N, {
122
- runKey: d,
158
+ }, T = ({ title: r, steps: i = b, tabs: a = x, runKey: c = null, follow: d, caption: p, error: v, meta: T, onClose: E, headerActions: D, labels: O, children: k }) => {
159
+ let A = l(), j = s((e) => `assistant-entity-tab-${A}-${y(e)}`, [A]), M = s((e) => `assistant-entity-panel-${A}-${y(e)}`, [A]), [N, P] = f(e), F = u(() => a.map((e) => e.id), [a]), I = t(N, {
160
+ runKey: c,
123
161
  tabIds: F,
124
- steps: o,
125
- follow: S
162
+ steps: i,
163
+ follow: d
126
164
  });
127
165
  (I.pinnedId !== N.pinnedId || I.runKey !== N.runKey || I.activeId !== N.activeId) && P({
128
166
  activeId: I.activeId,
129
167
  pinnedId: I.pinnedId,
130
168
  runKey: I.runKey
131
169
  });
132
- let L = l.find((e) => e.id === I.activeId) ?? null;
133
- return /* @__PURE__ */ p("section", {
170
+ let L = a.find((e) => e.id === I.activeId) ?? null;
171
+ return /* @__PURE__ */ h("section", {
134
172
  className: "flex min-w-0 flex-col overflow-hidden border",
135
- style: m,
173
+ style: g,
136
174
  "data-testid": "assistant-entity-preview",
137
175
  "aria-label": r,
138
176
  children: [
139
- /* @__PURE__ */ f(y, {
177
+ /* @__PURE__ */ m(S, {
140
178
  title: r,
141
179
  meta: T,
142
180
  onClose: E,
143
181
  headerActions: D,
144
182
  closeLabel: O?.close
145
183
  }),
146
- o.length > 0 ? /* @__PURE__ */ p("div", {
184
+ i.length > 0 ? /* @__PURE__ */ h("div", {
147
185
  className: "border-b px-3 py-2",
148
- style: h,
149
- children: [O?.stepsHeading ? /* @__PURE__ */ f("h3", {
186
+ style: _,
187
+ children: [O?.stepsHeading ? /* @__PURE__ */ m("h3", {
150
188
  className: "mb-1 text-[11px] font-semibold uppercase tracking-wide",
151
189
  style: { color: "var(--color-text-muted)" },
152
190
  children: O.stepsHeading
153
- }) : null, /* @__PURE__ */ f(i, {
154
- steps: o,
191
+ }) : null, /* @__PURE__ */ m(o, {
192
+ steps: i,
155
193
  label: O?.steps,
156
194
  skippedLabel: O?.skipped,
157
195
  statusLabels: O?.stepStatus
158
196
  })]
159
197
  }) : null,
160
- /* @__PURE__ */ f(b, {
161
- error: w,
162
- caption: C
198
+ /* @__PURE__ */ m(C, {
199
+ error: v,
200
+ errorHeading: O?.errorHeading,
201
+ caption: p
163
202
  }),
164
- /* @__PURE__ */ f(x, {
165
- tabs: l,
203
+ /* @__PURE__ */ m(w, {
204
+ tabs: a,
166
205
  tabIds: F,
167
206
  title: r,
168
207
  activeId: I.activeId,
169
208
  pinnedId: I.pinnedId,
170
209
  onPick: (e) => {
171
- P(n(e, d));
210
+ P(n(e, c));
172
211
  },
173
212
  tabDomId: j,
174
213
  panelDomId: M
175
214
  }),
176
- /* @__PURE__ */ f("div", {
215
+ /* @__PURE__ */ m("div", {
177
216
  className: "min-w-0 flex-1 overflow-auto",
178
- children: L ? /* @__PURE__ */ f("div", {
217
+ children: L ? /* @__PURE__ */ m("div", {
179
218
  role: "tabpanel",
180
219
  tabIndex: 0,
181
220
  id: M(L.id),
@@ -188,4 +227,4 @@ var m = {
188
227
  });
189
228
  };
190
229
  //#endregion
191
- export { S as AssistantEntityPreview };
230
+ export { T as AssistantEntityPreview };
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantStepRail.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/preview/entity/AssistantStepRail.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAiB,EAAE,EAAE,MAAM,OAAO,CAAC;AAE/C,OAAO,KAAK,EACV,oBAAoB,EACpB,0BAA0B,EAC3B,MAAM,sBAAsB,CAAC;AA4I9B,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAChD,iFAAiF;IACjF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;;;;;OASG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC,CAAC;CAC7E;AAED,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CAsGxD,CAAC"}
1
+ {"version":3,"file":"AssistantStepRail.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/preview/entity/AssistantStepRail.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAiB,EAAE,EAAE,MAAM,OAAO,CAAC;AAE/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAyI7F,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAChD,iFAAiF;IACjF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;;;;;OASG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC,CAAC;CAC7E;AAED,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CAsGxD,CAAC"}
@@ -131,4 +131,46 @@ export declare function tabForArrowKey(key: string, tabIds: readonly string[], a
131
131
  * arrow press goes the opposite way from the one they pressed.
132
132
  */
133
133
  rtl?: boolean): string | null;
134
+ /**
135
+ * Whether SELECTING `tabId` — a click, or Enter/Space on a focused tab — should
136
+ * be recorded as the viewer's choice.
137
+ *
138
+ * ★★★ COMPARED AGAINST THE PIN, NOT AGAINST WHAT IS ON SCREEN.
139
+ *
140
+ * Selecting the tab you are already reading is the commonest way to say "stay
141
+ * here", and it used to do nothing. The guard compared against
142
+ * `pinnedId ?? activeId`, so with nothing pinned a click on the displayed tab
143
+ * was swallowed as "no preference different from what the surface chose". In a
144
+ * real run that is exactly backwards: the surface puts you on the entity that
145
+ * just landed, you start reading it, the next one lands seconds later and takes
146
+ * you away — and the one tab you want to click is the only one that is inert.
147
+ * Reaching a pin meant clicking some other tab and clicking back.
148
+ *
149
+ * Comparing against the pin alone keeps the case the old guard was written for.
150
+ * A pinned tab that disappears KEEPS its pin while a fallback is shown, so
151
+ * clicking that fallback still replaces a pin the viewer can no longer see.
152
+ *
153
+ * The only selection worth ignoring is one that is already the pin.
154
+ */
155
+ export declare function shouldPinOnSelect(tabId: string, pinnedId: string | null): boolean;
156
+ /**
157
+ * Whether MOVING to `nextId` with an arrow/Home/End key should create a pin.
158
+ *
159
+ * ★★★ A DIFFERENT QUESTION FROM `shouldPinOnSelect`, and the difference is the
160
+ * point. A click says "I choose this one" even when it is already displayed. A
161
+ * navigation key says "go there" — and when there is nowhere to go it has said
162
+ * nothing at all.
163
+ *
164
+ * `tabForArrowKey` wraps, so in a ONE-TAB list every arrow resolves back to the
165
+ * tab you are on, and Home/End do the same at their edges. A one-tab list is
166
+ * not exotic here: it is what a run looks like before the second entity lands.
167
+ * Pinning on that keypress would opt the viewer out of follow-the-run for the
168
+ * rest of the build — silently, for a key that moved nothing.
169
+ *
170
+ * So this compares against what is DISPLAYED, falling back through the pin: a
171
+ * key that lands on the tab already on screen pins nothing, while one that
172
+ * lands anywhere else — including on the fallback shown in place of a pin whose
173
+ * tab has disappeared — still records the choice.
174
+ */
175
+ export declare function shouldPinOnMove(nextId: string, pinnedId: string | null, activeId: string | null): boolean;
134
176
  //# sourceMappingURL=entityPreviewState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entityPreviewState.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/preview/entity/entityPreviewState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAExE;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,0BAA0B,GAClC,SAAS,GACT,SAAS,GACT,MAAM,GACN,QAAQ,GACR,SAAS,CAAC;AAEd;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,oBAAoB;IACnC,wEAAwE;IACxE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,0BAA0B,CAAC;CAC7C;AAmBD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,iBAAiB,EAAE,GAClC,oBAAoB,EAAE,CAMxB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B;uEACmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,eAAO,MAAM,eAAe,EAAE,cAI7B,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,iCAAiC;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAChD,qEAAqE;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC;CAC1C;AAkCD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,cAAc,GACpB,cAAc,CAoEhB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,cAAc,CAEhB;AAGD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,QAAQ,EAAE,MAAM,GAAG,IAAI;AACvB;;;;;GAKG;AACH,GAAG,UAAQ,GACV,MAAM,GAAG,IAAI,CAef"}
1
+ {"version":3,"file":"entityPreviewState.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/preview/entity/entityPreviewState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAExE;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,0BAA0B,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE/F;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,oBAAoB;IACnC,wEAAwE;IACxE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,0BAA0B,CAAC;CAC7C;AAYD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,GAAG,oBAAoB,EAAE,CAMjG;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B;uEACmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,eAAO,MAAM,eAAe,EAAE,cAI7B,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,iCAAiC;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAChD,qEAAqE;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC;CAC1C;AA6BD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,cAAc,CA+D1F;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,CAEpF;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,QAAQ,EAAE,MAAM,GAAG,IAAI;AACvB;;;;;GAKG;AACH,GAAG,UAAQ,GACV,MAAM,GAAG,IAAI,CAef;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAEjF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,OAAO,CAET"}
@@ -59,5 +59,11 @@ function s(e, t, n, r = !1) {
59
59
  let s = n === null ? -1 : t.indexOf(n);
60
60
  return s < 0 ? i : t[(s + o + t.length) % t.length] ?? null;
61
61
  }
62
+ function c(e, t) {
63
+ return e !== t;
64
+ }
65
+ function l(e, t, n) {
66
+ return e !== (t ?? n);
67
+ }
62
68
  //#endregion
63
- export { r as IDLE_ACTIVE_TAB, a as nextActiveTab, o as pinActiveTab, n as stepsFromToolActivity, s as tabForArrowKey };
69
+ export { r as IDLE_ACTIVE_TAB, a as nextActiveTab, o as pinActiveTab, l as shouldPinOnMove, c as shouldPinOnSelect, n as stepsFromToolActivity, s as tabForArrowKey };
@@ -65,44 +65,44 @@ import { AssistantPreviewProvider as gi, useAssistantPreview as _i } from "./sha
65
65
  import { IDLE_PREVIEW_STATE as vi, isRunningStatus as yi, nextPreviewEvents as bi } from "./shared/assistant/preview/previewTransitions.js";
66
66
  import { IDLE_PREVIEW as xi, NO_OWNER as Si, applyPreviewEvent as Ci, createAssistantPreviewSurface as wi, currentPreviewOwner as Ti, runBelongsTo as Ei, sameOwner as Di } from "./shared/assistant/preview/surfaceState.js";
67
67
  import { createRunIdentityCache as Oi, runIdentities as ki } from "./shared/assistant/preview/runIdentity.js";
68
- import { IDLE_ACTIVE_TAB as Ai, nextActiveTab as ji, pinActiveTab as Mi, stepsFromToolActivity as Ni, tabForArrowKey as Pi } from "./shared/assistant/preview/entity/entityPreviewState.js";
69
- import { AssistantStepRail as Fi } from "./shared/assistant/preview/entity/AssistantStepRail.js";
70
- import { AssistantEntityPreview as Ii } from "./shared/assistant/preview/entity/AssistantEntityPreview.js";
71
- import { useOverlayFocus as Li } from "./shared/assistant/ui/useOverlayFocus.js";
72
- import { useAssistantPreviewBridge as Ri } from "./shared/assistant/preview/useAssistantPreviewBridge.js";
73
- import { AssistantPreviewOverlay as zi } from "./shared/assistant/preview/AssistantPreviewOverlay.js";
74
- import { AssistantLanguageSelector as Bi, FOLLOW_APP_LOCALE as Vi } from "./shared/assistant/ui/composer/AssistantLanguageSelector.js";
75
- import { ASSISTANT_MODE_META as Hi, AssistantModeSelector as Ui, nextModeIndex as Wi } from "./shared/assistant/ui/composer/AssistantModeSelector.js";
76
- import { AssistantVoiceButton as Gi } from "./shared/assistant/ui/composer/AssistantVoiceButton.js";
77
- import { AUTO_VOICE as Ki, AssistantVoiceSelector as qi } from "./shared/assistant/ui/composer/AssistantVoiceSelector.js";
78
- import { AssistantVoiceOrb as Ji } from "./shared/assistant/ui/voice/AssistantVoiceOrb.js";
79
- import { AssistantVoiceSessionButton as Yi } from "./shared/assistant/ui/voice/AssistantVoiceSessionButton.js";
80
- import { CAPTION_SCROLL_ATTR as Xi, VoiceCaption as Zi } from "./shared/assistant/ui/voice/VoiceCaption.js";
81
- import { VoiceConversationView as Qi } from "./shared/assistant/ui/voice/VoiceConversationView.js";
82
- import { VoiceWaveform as $i } from "./shared/assistant/ui/voice/VoiceWaveform.js";
83
- import { VoiceMiniController as ea } from "./shared/assistant/ui/voice/VoiceMiniController.js";
84
- import { VoiceStage as ta } from "./shared/assistant/ui/voice/VoiceStage.js";
85
- import { VoiceTranscriptDrawer as na } from "./shared/assistant/ui/voice/VoiceTranscriptDrawer.js";
86
- import { downloadFile as ra, exportConversation as ia } from "./shared/assistant/exportConversation.js";
87
- import { AssistantMoreMenu as aa } from "./shared/assistant/ui/AssistantMoreMenu.js";
88
- import { AssistantHeader as oa } from "./shared/assistant/ui/AssistantHeader.js";
89
- import { AssistantConversationList as sa } from "./shared/assistant/ui/AssistantConversationList.js";
90
- import { AssistantEmptyState as ca } from "./shared/assistant/ui/AssistantEmptyState.js";
91
- import { AssistantMessageItem as la } from "./shared/assistant/ui/AssistantMessageItem.js";
92
- import { AssistantMessageList as ua } from "./shared/assistant/ui/AssistantMessageList.js";
93
- import { AssistantVoiceSession as da } from "./shared/assistant/ui/voice/AssistantVoiceSession.js";
94
- import { useAssistantApiAccess as fa } from "./shared/assistant/useAssistantApiAccess.js";
95
- import { useConversationTurns as pa } from "./shared/assistant/useConversationTurns.js";
96
- import { isMultimodalBodyRejection as ma, isRecoverableAssistantError as ha } from "./shared/assistant/transportErrors.js";
97
- import { aiCreditsUpdatedEventName as ga, dispatchAssistantQuotaExhausted as _a, notifyAiCreditsUpdated as va } from "./shared/assistant/aiCredits.js";
98
- import { useWorkspaceWriteAccess as ya } from "./shared/assistant/useWorkspaceWriteAccess.js";
99
- import { extractDocumentText as ba } from "./shared/assistant/documentExtract.js";
100
- import { useAssistantAttachments as xa } from "./shared/assistant/useAssistantAttachments.js";
101
- import { AssistantComposer as Sa } from "./shared/assistant/ui/composer/AssistantComposer.js";
102
- import { isProdRuntime as Ca } from "./shared/assistant/env.js";
103
- import { useAssistantHeartbeat as wa } from "./shared/assistant/useAssistantHeartbeat.js";
104
- import { useAssistantKeyboardShortcuts as Ta } from "./shared/assistant/useAssistantKeyboardShortcuts.js";
105
- import { AssistantApiCallsConsentDialog as Ea } from "./shared/assistant/ui/AssistantApiCallsConsentDialog.js";
106
- import { AssistantChatArea as Da } from "./shared/assistant/ui/AssistantChatArea.js";
107
- import { AIAssistantPanel as Oa } from "./shared/assistant/ui/AIAssistantPanel.js";
108
- export { Oa as AIAssistantPanel, L as ASSISTANT_API_AUTH_STRATEGY, sn as ASSISTANT_LANGUAGES, Hi as ASSISTANT_MODE_META, ii as ASSISTANT_OVERLAY_ATTR, ai as ASSISTANT_PANEL_ATTR, Kn as ATTACHMENT_ACCEPT, Hr as ATTACHMENT_SOURCES, Ki as AUTO_VOICE, Ea as AssistantApiCallsConsentDialog, mi as AssistantAttachmentButton, hi as AssistantAttachmentChips, Jr as AssistantAutoSpeakToggle, Da as AssistantChatArea, Sa as AssistantComposer, ri as AssistantConnectSourceItem, ti as AssistantConnectSourceProvider, sa as AssistantConversationList, ca as AssistantEmptyState, Ii as AssistantEntityPreview, oa as AssistantHeader, s as AssistantI18nProvider, Zr as AssistantLanguageMenu, Bi as AssistantLanguageSelector, f as AssistantMarkdownImage, h as AssistantMarkdownRenderer, Yr as AssistantMessageAttachments, la as AssistantMessageItem, ua as AssistantMessageList, Ui as AssistantModeSelector, aa as AssistantMoreMenu, g as AssistantNavigateProvider, Xr as AssistantPendingWriteCard, zi as AssistantPreviewOverlay, gi as AssistantPreviewProvider, t as AssistantProductProvider, Qr as AssistantReplyLanguageSelector, _e as AssistantRuntimeManager, $r as AssistantSpeakButton, Ir as AssistantSpeechProvider, ei as AssistantSpokenTurnsNotice, Fi as AssistantStepRail, Pr as AssistantToolActivity, Gi as AssistantVoiceButton, Ji as AssistantVoiceOrb, qi as AssistantVoiceSelector, da as AssistantVoiceSession, Yi as AssistantVoiceSessionButton, qn as AttachmentRejectedError, En as BOILERPLATE_PAGE_SHARE, Xi as CAPTION_SCROLL_ATTR, O as CHECK_AI_CREDITS, k as CREATE_SANDBOX, zt as DEFAULT_SPEAKABLE_LABELS, cn as DEFAULT_SPEECH_RATE, ft as ENDPOINT_GRACE_MS, A as EXTEND_SANDBOX_TTL, Vi as FOLLOW_APP_LOCALE, j as GET_ACTIVE_SANDBOXES, M as GET_SANDBOX, He as HOSTED_TTS_MAX_CHARS, Re as HOSTED_TTS_TIER, ze as HOSTED_VOICES, Ai as IDLE_ACTIVE_TAB, yn as IDLE_PLAYBACK, xi as IDLE_PREVIEW, vi as IDLE_PREVIEW_STATE, pt as INITIAL_SESSION, Jn as INLINE_IMAGE_MAX_DIM, Yn as INLINE_IMAGE_QUALITY, mt as INTERRUPT_MAX_MS, ht as INTERRUPT_MIN_MS, Xn as MAX_ATTACHMENTS, Dn as MAX_BOILERPLATE_LINE_CHARS, On as MAX_EXTRACTED_CHARS, Zn as MAX_FILE_BYTES, Qn as MAX_INLINE_CHARS_PER_FILE, $n as MAX_INLINE_CHARS_TOTAL, wn as MAX_INLINE_IMAGE_BASE64_BYTES, er as MAX_INLINE_IMAGE_BASE64_CHARS, tr as MAX_INLINE_IMAGE_PARTS, nr as MAX_INLINE_TURN_BODY_BYTES, kn as MAX_PDF_PAGES_SCANNED, Tn as MAX_REQUEST_BODY_BYTES, Bt as MAX_SPEAKABLE_CHARS, Vt as MAX_SPOKEN_TABLE_ROWS, rr as MAX_TURN_BODY_BYTES, Zt as MINI_CAPTION_BUDGET, An as MIN_PAGE_TEXT_CHARS, jn as MIN_TEXT_PAGE_SHARE, Si as NO_OWNER, oi as NO_PANEL_OVERLAY, Dr as PHRASE_ROTATE_MS, $t as POLL_FAST_MS, en as POLL_FAST_UNTIL_MS, tn as POLL_SLOW_MS, nn as POLL_STEADY_MS, rn as POLL_STEADY_UNTIL_MS, Yt as PREVIEW_LANGUAGES, ir as PROMPT_ENVELOPE_RESERVE_BYTES, N as PROXY_SANDBOX_REQUEST, P as REPORT_AI_TOKEN_USAGE, Gr as SANDBOX_READY_TTL_MS, gt as SILENCE_SUBMIT_MS, Ue as SPEAKING_RATE_MAX, We as SPEAKING_RATE_MAX_STREAMING, Ge as SPEAKING_RATE_MAX_SYNC, Ke as SPEAKING_RATE_MIN, Ht as SPEECH_CHUNK_CHARS, Ut as SPEECH_CHUNK_CJK_CHARS, wt as SPEECH_LANG, hn as SPOKEN_LABEL_LANGUAGES, Or as STAGE_COPY, F as STOP_ASSISTANT_SANDBOX, kr as THINKING_PHRASES, ar as TURN_BODY_HEADROOM_BYTES, Tt as VOICE_LIST_TIMEOUT_MS, Zi as VoiceCaption, Qi as VoiceConversationView, ea as VoiceMiniController, ta as VoiceStage, na as VoiceTranscriptDrawer, $i as VoiceWaveform, I as WAIT_FOR_SANDBOX_RUNNING, q as abortAssistantTurn, si as activePanelOverlay, ga as aiCreditsUpdatedEventName, Ci as applyPreviewEvent, J as approvePendingWrite, ci as assistantPanelOwnsEscape, _ as assistantRoutePath, c as assistantTranslationKey, v as assistantUrlTransform, Ur as availableAttachmentSources, qe as base64ToBytes, y as browserShouldHandle, Le as browserSpeechEngine, Y as buildAssistantSandboxEnv, or as buildAttachmentPromptBlock, It as buildContinuedFromVoiceNote, ve as buildProgress, sr as buildPromptParts, X as buildPromptRequestBody, cr as buildPromptWithAttachments, Je as buildRequest, E as buildSandboxContextInput, Lt as buildVoiceTranscriptMarkdown, Ae as chatTurns, Z as checkAssistantAiCredits, Wt as chunkForSpeech, b as classifyAssistantHref, lr as classifyAttachment, Ye as classifyHttpFailure, S as classifyQuotaError, Mn as columnLetterToIndex, tt as configureSpeechEngine, Gt as containsCjk, d as copyToClipboard, ur as countInlineImageCandidates, dr as countInlinedImageParts, wi as createAssistantPreviewSurface, Q as createAssistantSandbox, $ as createAssistantSession, $e as createHostedTtsEngine, Kr as createReadinessTracker, et as createRoutingSpeechEngine, Oi as createRunIdentityCache, Oe as createSandboxAssistantTransport, nt as createSpeechEngines, Ti as currentPreviewOwner, Xe as decodeAudioResponse, Nn as decodeXmlEntities, C as describeQuotaError, fr as detectDocumentFormat, _n as detectScriptLocale, Wr as deviceHasCamera, _a as dispatchAssistantQuotaExhausted, Pn as docxXmlToText, ee as downloadAssistantArtifact, ra as downloadFile, li as escapeDismisses, pr as estimateTurnBodyBytes, D as executeSandboxGraphQL, ia as exportConversation, te as extendAssistantSandboxTTL, ba as extractDocumentText, ln as findAssistantLanguage, ne as findExistingSandbox, pn as findPendingWrite, Fn as fitPdfPages, ui as focusIsInsidePanel, mr as formatBytes, In as formatPageRanges, zr as getActorId, re as getAssistantArtifacts, ye as getAssistantMedia, ie as getAssistantMessages, ae as getAssistantSession, oe as getAssistantStreamAccess, be as getAssistantText, hr as getAttachmentSendBlocker, U as getCapability, gr as getExtension, R as getImageForMode, z as getImageTagForMode, Br as getOrganizationId, xe as getRawMessageCreatedAt, B as getResourcesForMode, V as getSandboxImageRegistry, _r as getSendableAttachments, rt as getSpeechEngine, Se as getToolProgress, Vr as getWorkspaceId, je as groupBySession, Me as groupConsecutiveBySession, vr as hasAttachmentWorkInFlight, Be as hostedLocaleFor, Ve as hostedSupportsLanguage, p as imageHostLabel, _t as isCapturing, vt as isEcho, Ln as isMostlyImagePages, ma as isMultimodalBodyRejection, Ca as isProdRuntime, w as isQuotaExhaustedError, Ce as isReapedSandboxConnectionError, qr as isRecentlyVerified, we as isRecoverable, ha as isRecoverableAssistantError, m as isRemoteImageSrc, yi as isRunningStatus, bn as isSpeakingMessage, Et as isSpeechBlocked, Ar as isStageCopy, yt as isSubmittable, wr as isTurnInFlight, W as isUnknownFieldError, Ne as isVoiceTurn, Rn as joinSheets, Dt as languageDisplayName, Te as mapSessionToHistory, G as markSupported, K as markUnsupported, Ee as mergeMessagesById, ot as micIsInterrupt, se as modeRequiresConfirmWrites, ji as nextActiveTab, Wi as nextModeIndex, di as nextPanelOverlays, bi as nextPreviewEvents, Ot as normalizeLangTag, va as notifyAiCreditsUpdated, bt as orbMode, zn as pageMarker, fi as panelOwnsEscape, mn as parseConfirmationRefusal, yr as parseDataUrl, Bn as parseSharedStrings, Fr as parseToolActivity, Vn as parseWorkbookSheets, Hn as pdfTextItemsToPage, Mi as pinActiveTab, Tr as planAbandonedTurn, xt as planReplyConsumption, Er as planTurnAbort, an as pollDelayMs, kt as primaryLanguageSubtag, xn as publishedChunks, T as quotaExhaustedEventName, it as readSpeechEngineConfig, ce as releaseSupersededAssistantSandboxes, dn as replyFollowsInput, le as reportAssistantAiTokenUsage, Sn as requiresCancel, at as resetSpeechEngine, un as resolveAssistantLanguage, fn as resolveLanguagePair, n as resolveModeConfig, H as resolveSandboxAssistantMode, vn as resolveSpeechLocale, Ei as runBelongsTo, ki as runIdentities, Di as sameOwner, De as sanitize, ue as selectExistingAssistantSandbox, de as selectSupersededAssistantSandboxes, At as selectVoiceForLocale, fe as sendAssistantPromptAsync, pe as sendHeartbeat, Un as sheetXmlToRows, Ze as shouldDisableEngine, Qt as showPreviousChunk, st as showsAssistantCaption, ct as showsUserCaption, Kt as speakableEmail, jt as speechGate, gn as speechLabelsFor, Mt as speechLangForLocale, Cn as speechPlaybackReducer, Qe as splitForVendor, qt as splitTableRow, St as spokenSoFar, jr as stageText, Mr as statusStageCopy, Ni as stepsFromToolActivity, me as stopReapedAssistantSandbox, Wn as summarisePageText, Pi as tabForArrowKey, Nr as thinkingPhrase, on as toCaptionText, br as toMessageAttachment, Jt as toSpeakableText, xr as truncateForInline, Gn as truncatePagesForInline, fa as useAssistantApiAccess, xa as useAssistantAttachments, ni as useAssistantConnectSource, wa as useAssistantHeartbeat, l as useAssistantI18nNamespace, Ta as useAssistantKeyboardShortcuts, x as useAssistantNavigate, r as useAssistantPageLabel, _i as useAssistantPreview, Ri as useAssistantPreviewBridge, i as useAssistantProduct, a as useAssistantProductOrNull, Lr as useAssistantSpeech, o as useAssistantStorageFolders, Cr as useAssistantStore, u as useAssistantTr, pa as useConversationTurns, pi as useDropdownEscape, Li as useOverlayFocus, ke as useSandboxAssistantTransport, e as useVoiceInput, Rr as useVoiceSession, ya as useWorkspaceWriteAccess, Sr as validateFile, Nt as voiceAvailability, Pe as voiceMarker, Xt as voicePreviewText, Pt as voiceQualityRank, Fe as voiceSessionIdOf, Ct as voiceSessionReducer, lt as voiceStageState, Rt as voiceTranscriptFilename, Ie as voiceTurnsOnly, Ft as voicesForLocale, he as waitForAssistantServiceReady, ge as waitForSandboxRunning, ut as waveformIsActive, dt as waveformIsSettled };
68
+ import { IDLE_ACTIVE_TAB as Ai, nextActiveTab as ji, pinActiveTab as Mi, shouldPinOnMove as Ni, shouldPinOnSelect as Pi, stepsFromToolActivity as Fi, tabForArrowKey as Ii } from "./shared/assistant/preview/entity/entityPreviewState.js";
69
+ import { AssistantStepRail as Li } from "./shared/assistant/preview/entity/AssistantStepRail.js";
70
+ import { AssistantEntityPreview as Ri } from "./shared/assistant/preview/entity/AssistantEntityPreview.js";
71
+ import { useOverlayFocus as zi } from "./shared/assistant/ui/useOverlayFocus.js";
72
+ import { useAssistantPreviewBridge as Bi } from "./shared/assistant/preview/useAssistantPreviewBridge.js";
73
+ import { AssistantPreviewOverlay as Vi } from "./shared/assistant/preview/AssistantPreviewOverlay.js";
74
+ import { AssistantLanguageSelector as Hi, FOLLOW_APP_LOCALE as Ui } from "./shared/assistant/ui/composer/AssistantLanguageSelector.js";
75
+ import { ASSISTANT_MODE_META as Wi, AssistantModeSelector as Gi, nextModeIndex as Ki } from "./shared/assistant/ui/composer/AssistantModeSelector.js";
76
+ import { AssistantVoiceButton as qi } from "./shared/assistant/ui/composer/AssistantVoiceButton.js";
77
+ import { AUTO_VOICE as Ji, AssistantVoiceSelector as Yi } from "./shared/assistant/ui/composer/AssistantVoiceSelector.js";
78
+ import { AssistantVoiceOrb as Xi } from "./shared/assistant/ui/voice/AssistantVoiceOrb.js";
79
+ import { AssistantVoiceSessionButton as Zi } from "./shared/assistant/ui/voice/AssistantVoiceSessionButton.js";
80
+ import { CAPTION_SCROLL_ATTR as Qi, VoiceCaption as $i } from "./shared/assistant/ui/voice/VoiceCaption.js";
81
+ import { VoiceConversationView as ea } from "./shared/assistant/ui/voice/VoiceConversationView.js";
82
+ import { VoiceWaveform as ta } from "./shared/assistant/ui/voice/VoiceWaveform.js";
83
+ import { VoiceMiniController as na } from "./shared/assistant/ui/voice/VoiceMiniController.js";
84
+ import { VoiceStage as ra } from "./shared/assistant/ui/voice/VoiceStage.js";
85
+ import { VoiceTranscriptDrawer as ia } from "./shared/assistant/ui/voice/VoiceTranscriptDrawer.js";
86
+ import { downloadFile as aa, exportConversation as oa } from "./shared/assistant/exportConversation.js";
87
+ import { AssistantMoreMenu as sa } from "./shared/assistant/ui/AssistantMoreMenu.js";
88
+ import { AssistantHeader as ca } from "./shared/assistant/ui/AssistantHeader.js";
89
+ import { AssistantConversationList as la } from "./shared/assistant/ui/AssistantConversationList.js";
90
+ import { AssistantEmptyState as ua } from "./shared/assistant/ui/AssistantEmptyState.js";
91
+ import { AssistantMessageItem as da } from "./shared/assistant/ui/AssistantMessageItem.js";
92
+ import { AssistantMessageList as fa } from "./shared/assistant/ui/AssistantMessageList.js";
93
+ import { AssistantVoiceSession as pa } from "./shared/assistant/ui/voice/AssistantVoiceSession.js";
94
+ import { useAssistantApiAccess as ma } from "./shared/assistant/useAssistantApiAccess.js";
95
+ import { useConversationTurns as ha } from "./shared/assistant/useConversationTurns.js";
96
+ import { isMultimodalBodyRejection as ga, isRecoverableAssistantError as _a } from "./shared/assistant/transportErrors.js";
97
+ import { aiCreditsUpdatedEventName as va, dispatchAssistantQuotaExhausted as ya, notifyAiCreditsUpdated as ba } from "./shared/assistant/aiCredits.js";
98
+ import { useWorkspaceWriteAccess as xa } from "./shared/assistant/useWorkspaceWriteAccess.js";
99
+ import { extractDocumentText as Sa } from "./shared/assistant/documentExtract.js";
100
+ import { useAssistantAttachments as Ca } from "./shared/assistant/useAssistantAttachments.js";
101
+ import { AssistantComposer as wa } from "./shared/assistant/ui/composer/AssistantComposer.js";
102
+ import { isProdRuntime as Ta } from "./shared/assistant/env.js";
103
+ import { useAssistantHeartbeat as Ea } from "./shared/assistant/useAssistantHeartbeat.js";
104
+ import { useAssistantKeyboardShortcuts as Da } from "./shared/assistant/useAssistantKeyboardShortcuts.js";
105
+ import { AssistantApiCallsConsentDialog as Oa } from "./shared/assistant/ui/AssistantApiCallsConsentDialog.js";
106
+ import { AssistantChatArea as ka } from "./shared/assistant/ui/AssistantChatArea.js";
107
+ import { AIAssistantPanel as Aa } from "./shared/assistant/ui/AIAssistantPanel.js";
108
+ export { Aa as AIAssistantPanel, L as ASSISTANT_API_AUTH_STRATEGY, sn as ASSISTANT_LANGUAGES, Wi as ASSISTANT_MODE_META, ii as ASSISTANT_OVERLAY_ATTR, ai as ASSISTANT_PANEL_ATTR, Kn as ATTACHMENT_ACCEPT, Hr as ATTACHMENT_SOURCES, Ji as AUTO_VOICE, Oa as AssistantApiCallsConsentDialog, mi as AssistantAttachmentButton, hi as AssistantAttachmentChips, Jr as AssistantAutoSpeakToggle, ka as AssistantChatArea, wa as AssistantComposer, ri as AssistantConnectSourceItem, ti as AssistantConnectSourceProvider, la as AssistantConversationList, ua as AssistantEmptyState, Ri as AssistantEntityPreview, ca as AssistantHeader, s as AssistantI18nProvider, Zr as AssistantLanguageMenu, Hi as AssistantLanguageSelector, f as AssistantMarkdownImage, h as AssistantMarkdownRenderer, Yr as AssistantMessageAttachments, da as AssistantMessageItem, fa as AssistantMessageList, Gi as AssistantModeSelector, sa as AssistantMoreMenu, g as AssistantNavigateProvider, Xr as AssistantPendingWriteCard, Vi as AssistantPreviewOverlay, gi as AssistantPreviewProvider, t as AssistantProductProvider, Qr as AssistantReplyLanguageSelector, _e as AssistantRuntimeManager, $r as AssistantSpeakButton, Ir as AssistantSpeechProvider, ei as AssistantSpokenTurnsNotice, Li as AssistantStepRail, Pr as AssistantToolActivity, qi as AssistantVoiceButton, Xi as AssistantVoiceOrb, Yi as AssistantVoiceSelector, pa as AssistantVoiceSession, Zi as AssistantVoiceSessionButton, qn as AttachmentRejectedError, En as BOILERPLATE_PAGE_SHARE, Qi as CAPTION_SCROLL_ATTR, O as CHECK_AI_CREDITS, k as CREATE_SANDBOX, zt as DEFAULT_SPEAKABLE_LABELS, cn as DEFAULT_SPEECH_RATE, ft as ENDPOINT_GRACE_MS, A as EXTEND_SANDBOX_TTL, Ui as FOLLOW_APP_LOCALE, j as GET_ACTIVE_SANDBOXES, M as GET_SANDBOX, He as HOSTED_TTS_MAX_CHARS, Re as HOSTED_TTS_TIER, ze as HOSTED_VOICES, Ai as IDLE_ACTIVE_TAB, yn as IDLE_PLAYBACK, xi as IDLE_PREVIEW, vi as IDLE_PREVIEW_STATE, pt as INITIAL_SESSION, Jn as INLINE_IMAGE_MAX_DIM, Yn as INLINE_IMAGE_QUALITY, mt as INTERRUPT_MAX_MS, ht as INTERRUPT_MIN_MS, Xn as MAX_ATTACHMENTS, Dn as MAX_BOILERPLATE_LINE_CHARS, On as MAX_EXTRACTED_CHARS, Zn as MAX_FILE_BYTES, Qn as MAX_INLINE_CHARS_PER_FILE, $n as MAX_INLINE_CHARS_TOTAL, wn as MAX_INLINE_IMAGE_BASE64_BYTES, er as MAX_INLINE_IMAGE_BASE64_CHARS, tr as MAX_INLINE_IMAGE_PARTS, nr as MAX_INLINE_TURN_BODY_BYTES, kn as MAX_PDF_PAGES_SCANNED, Tn as MAX_REQUEST_BODY_BYTES, Bt as MAX_SPEAKABLE_CHARS, Vt as MAX_SPOKEN_TABLE_ROWS, rr as MAX_TURN_BODY_BYTES, Zt as MINI_CAPTION_BUDGET, An as MIN_PAGE_TEXT_CHARS, jn as MIN_TEXT_PAGE_SHARE, Si as NO_OWNER, oi as NO_PANEL_OVERLAY, Dr as PHRASE_ROTATE_MS, $t as POLL_FAST_MS, en as POLL_FAST_UNTIL_MS, tn as POLL_SLOW_MS, nn as POLL_STEADY_MS, rn as POLL_STEADY_UNTIL_MS, Yt as PREVIEW_LANGUAGES, ir as PROMPT_ENVELOPE_RESERVE_BYTES, N as PROXY_SANDBOX_REQUEST, P as REPORT_AI_TOKEN_USAGE, Gr as SANDBOX_READY_TTL_MS, gt as SILENCE_SUBMIT_MS, Ue as SPEAKING_RATE_MAX, We as SPEAKING_RATE_MAX_STREAMING, Ge as SPEAKING_RATE_MAX_SYNC, Ke as SPEAKING_RATE_MIN, Ht as SPEECH_CHUNK_CHARS, Ut as SPEECH_CHUNK_CJK_CHARS, wt as SPEECH_LANG, hn as SPOKEN_LABEL_LANGUAGES, Or as STAGE_COPY, F as STOP_ASSISTANT_SANDBOX, kr as THINKING_PHRASES, ar as TURN_BODY_HEADROOM_BYTES, Tt as VOICE_LIST_TIMEOUT_MS, $i as VoiceCaption, ea as VoiceConversationView, na as VoiceMiniController, ra as VoiceStage, ia as VoiceTranscriptDrawer, ta as VoiceWaveform, I as WAIT_FOR_SANDBOX_RUNNING, q as abortAssistantTurn, si as activePanelOverlay, va as aiCreditsUpdatedEventName, Ci as applyPreviewEvent, J as approvePendingWrite, ci as assistantPanelOwnsEscape, _ as assistantRoutePath, c as assistantTranslationKey, v as assistantUrlTransform, Ur as availableAttachmentSources, qe as base64ToBytes, y as browserShouldHandle, Le as browserSpeechEngine, Y as buildAssistantSandboxEnv, or as buildAttachmentPromptBlock, It as buildContinuedFromVoiceNote, ve as buildProgress, sr as buildPromptParts, X as buildPromptRequestBody, cr as buildPromptWithAttachments, Je as buildRequest, E as buildSandboxContextInput, Lt as buildVoiceTranscriptMarkdown, Ae as chatTurns, Z as checkAssistantAiCredits, Wt as chunkForSpeech, b as classifyAssistantHref, lr as classifyAttachment, Ye as classifyHttpFailure, S as classifyQuotaError, Mn as columnLetterToIndex, tt as configureSpeechEngine, Gt as containsCjk, d as copyToClipboard, ur as countInlineImageCandidates, dr as countInlinedImageParts, wi as createAssistantPreviewSurface, Q as createAssistantSandbox, $ as createAssistantSession, $e as createHostedTtsEngine, Kr as createReadinessTracker, et as createRoutingSpeechEngine, Oi as createRunIdentityCache, Oe as createSandboxAssistantTransport, nt as createSpeechEngines, Ti as currentPreviewOwner, Xe as decodeAudioResponse, Nn as decodeXmlEntities, C as describeQuotaError, fr as detectDocumentFormat, _n as detectScriptLocale, Wr as deviceHasCamera, ya as dispatchAssistantQuotaExhausted, Pn as docxXmlToText, ee as downloadAssistantArtifact, aa as downloadFile, li as escapeDismisses, pr as estimateTurnBodyBytes, D as executeSandboxGraphQL, oa as exportConversation, te as extendAssistantSandboxTTL, Sa as extractDocumentText, ln as findAssistantLanguage, ne as findExistingSandbox, pn as findPendingWrite, Fn as fitPdfPages, ui as focusIsInsidePanel, mr as formatBytes, In as formatPageRanges, zr as getActorId, re as getAssistantArtifacts, ye as getAssistantMedia, ie as getAssistantMessages, ae as getAssistantSession, oe as getAssistantStreamAccess, be as getAssistantText, hr as getAttachmentSendBlocker, U as getCapability, gr as getExtension, R as getImageForMode, z as getImageTagForMode, Br as getOrganizationId, xe as getRawMessageCreatedAt, B as getResourcesForMode, V as getSandboxImageRegistry, _r as getSendableAttachments, rt as getSpeechEngine, Se as getToolProgress, Vr as getWorkspaceId, je as groupBySession, Me as groupConsecutiveBySession, vr as hasAttachmentWorkInFlight, Be as hostedLocaleFor, Ve as hostedSupportsLanguage, p as imageHostLabel, _t as isCapturing, vt as isEcho, Ln as isMostlyImagePages, ga as isMultimodalBodyRejection, Ta as isProdRuntime, w as isQuotaExhaustedError, Ce as isReapedSandboxConnectionError, qr as isRecentlyVerified, we as isRecoverable, _a as isRecoverableAssistantError, m as isRemoteImageSrc, yi as isRunningStatus, bn as isSpeakingMessage, Et as isSpeechBlocked, Ar as isStageCopy, yt as isSubmittable, wr as isTurnInFlight, W as isUnknownFieldError, Ne as isVoiceTurn, Rn as joinSheets, Dt as languageDisplayName, Te as mapSessionToHistory, G as markSupported, K as markUnsupported, Ee as mergeMessagesById, ot as micIsInterrupt, se as modeRequiresConfirmWrites, ji as nextActiveTab, Ki as nextModeIndex, di as nextPanelOverlays, bi as nextPreviewEvents, Ot as normalizeLangTag, ba as notifyAiCreditsUpdated, bt as orbMode, zn as pageMarker, fi as panelOwnsEscape, mn as parseConfirmationRefusal, yr as parseDataUrl, Bn as parseSharedStrings, Fr as parseToolActivity, Vn as parseWorkbookSheets, Hn as pdfTextItemsToPage, Mi as pinActiveTab, Tr as planAbandonedTurn, xt as planReplyConsumption, Er as planTurnAbort, an as pollDelayMs, kt as primaryLanguageSubtag, xn as publishedChunks, T as quotaExhaustedEventName, it as readSpeechEngineConfig, ce as releaseSupersededAssistantSandboxes, dn as replyFollowsInput, le as reportAssistantAiTokenUsage, Sn as requiresCancel, at as resetSpeechEngine, un as resolveAssistantLanguage, fn as resolveLanguagePair, n as resolveModeConfig, H as resolveSandboxAssistantMode, vn as resolveSpeechLocale, Ei as runBelongsTo, ki as runIdentities, Di as sameOwner, De as sanitize, ue as selectExistingAssistantSandbox, de as selectSupersededAssistantSandboxes, At as selectVoiceForLocale, fe as sendAssistantPromptAsync, pe as sendHeartbeat, Un as sheetXmlToRows, Ze as shouldDisableEngine, Ni as shouldPinOnMove, Pi as shouldPinOnSelect, Qt as showPreviousChunk, st as showsAssistantCaption, ct as showsUserCaption, Kt as speakableEmail, jt as speechGate, gn as speechLabelsFor, Mt as speechLangForLocale, Cn as speechPlaybackReducer, Qe as splitForVendor, qt as splitTableRow, St as spokenSoFar, jr as stageText, Mr as statusStageCopy, Fi as stepsFromToolActivity, me as stopReapedAssistantSandbox, Wn as summarisePageText, Ii as tabForArrowKey, Nr as thinkingPhrase, on as toCaptionText, br as toMessageAttachment, Jt as toSpeakableText, xr as truncateForInline, Gn as truncatePagesForInline, ma as useAssistantApiAccess, Ca as useAssistantAttachments, ni as useAssistantConnectSource, Ea as useAssistantHeartbeat, l as useAssistantI18nNamespace, Da as useAssistantKeyboardShortcuts, x as useAssistantNavigate, r as useAssistantPageLabel, _i as useAssistantPreview, Bi as useAssistantPreviewBridge, i as useAssistantProduct, a as useAssistantProductOrNull, Lr as useAssistantSpeech, o as useAssistantStorageFolders, Cr as useAssistantStore, u as useAssistantTr, ha as useConversationTurns, pi as useDropdownEscape, zi as useOverlayFocus, ke as useSandboxAssistantTransport, e as useVoiceInput, Rr as useVoiceSession, xa as useWorkspaceWriteAccess, Sr as validateFile, Nt as voiceAvailability, Pe as voiceMarker, Xt as voicePreviewText, Pt as voiceQualityRank, Fe as voiceSessionIdOf, Ct as voiceSessionReducer, lt as voiceStageState, Rt as voiceTranscriptFilename, Ie as voiceTurnsOnly, Ft as voicesForLocale, he as waitForAssistantServiceReady, ge as waitForSandboxRunning, ut as waveformIsActive, dt as waveformIsSettled };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/fe-libs",
3
- "version": "2026.912.2",
3
+ "version": "2026.912.4",
4
4
  "description": "Burdenoff frontend primitives and domain libraries",
5
5
  "type": "module",
6
6
  "bin": {