@burdenoff/fe-libs 2026.1002.1 → 2026.1002.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/shared/assistant/gatewayClient.d.ts +6 -0
- package/dist/shared/assistant/gatewayClient.d.ts.map +1 -1
- package/dist/shared/assistant/gatewayClient.js +1 -0
- package/dist/shared/assistant/history/historyApi.d.ts +12 -0
- package/dist/shared/assistant/history/historyApi.d.ts.map +1 -1
- package/dist/shared/assistant/history/historyApi.js +62 -46
- package/dist/shared/assistant/history/historyControls.d.ts +7 -0
- package/dist/shared/assistant/history/historyControls.d.ts.map +1 -1
- package/dist/shared/assistant/history/historyControls.js +19 -16
- package/dist/shared/assistant/history/historyEngine.d.ts +17 -1
- package/dist/shared/assistant/history/historyEngine.d.ts.map +1 -1
- package/dist/shared/assistant/history/historyEngine.js +507 -467
- package/dist/shared/assistant/history/historyList.d.ts +15 -0
- package/dist/shared/assistant/history/historyList.d.ts.map +1 -1
- package/dist/shared/assistant/history/historyList.js +37 -38
- package/dist/shared/assistant/history/historyOperations.d.ts +35 -3
- package/dist/shared/assistant/history/historyOperations.d.ts.map +1 -1
- package/dist/shared/assistant/history/historyOperations.js +64 -27
- package/dist/shared/assistant/history/historySearch.d.ts +110 -0
- package/dist/shared/assistant/history/historySearch.d.ts.map +1 -0
- package/dist/shared/assistant/history/historySearch.js +226 -0
- package/dist/shared/assistant/history/historySearchQuery.d.ts +50 -0
- package/dist/shared/assistant/history/historySearchQuery.d.ts.map +1 -0
- package/dist/shared/assistant/history/historySearchQuery.js +23 -0
- package/dist/shared/assistant/history/historyTransportErrors.d.ts +17 -0
- package/dist/shared/assistant/history/historyTransportErrors.d.ts.map +1 -1
- package/dist/shared/assistant/history/historyTransportErrors.js +9 -1
- package/dist/shared/assistant/history/historyTypes.d.ts +32 -0
- package/dist/shared/assistant/history/historyTypes.d.ts.map +1 -1
- package/dist/shared/assistant/history/useAssistantHistorySearch.d.ts +32 -0
- package/dist/shared/assistant/history/useAssistantHistorySearch.d.ts.map +1 -0
- package/dist/shared/assistant/history/useAssistantHistorySearch.js +34 -0
- package/dist/shared/assistant/i18nManifest.d.ts +8 -0
- package/dist/shared/assistant/i18nManifest.d.ts.map +1 -1
- package/dist/shared/assistant/i18nManifest.js +8 -0
- package/dist/shared/assistant/index.d.ts +4 -0
- package/dist/shared/assistant/index.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantConversationFilters.d.ts +5 -1
- package/dist/shared/assistant/ui/AssistantConversationFilters.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantConversationFilters.js +81 -74
- package/dist/shared/assistant/ui/AssistantConversationList.d.ts +9 -0
- package/dist/shared/assistant/ui/AssistantConversationList.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantConversationList.js +316 -242
- package/dist/shared/assistant/ui/AssistantHistorySearchBox.d.ts +12 -0
- package/dist/shared/assistant/ui/AssistantHistorySearchBox.d.ts.map +1 -0
- package/dist/shared/assistant/ui/AssistantHistorySearchBox.js +74 -0
- package/dist/shared-assistant.js +175 -171
- package/package.json +1 -1
|
@@ -4,29 +4,32 @@ import { DEFAULT_HISTORY_LIST_FILTER as n, clampToCodePoints as r, codePointLeng
|
|
|
4
4
|
import { useAssistantStore as s } from "../store.js";
|
|
5
5
|
import { chatTurns as c, voiceTurnsOnly as l } from "../voice/turnVisibility.js";
|
|
6
6
|
import { getAssistantDisplayContent as u } from "../displayContent.js";
|
|
7
|
-
import { useOverlayFocus as
|
|
8
|
-
import { AssistantHistoryPinLimitBanner as
|
|
9
|
-
import { historyRowAcceptsControls as
|
|
10
|
-
import { useAssistantHistoryStatus as
|
|
11
|
-
import { useAssistantHistoryStore as
|
|
12
|
-
import { assistantHistory as
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
7
|
+
import { useOverlayFocus as ee } from "./useOverlayFocus.js";
|
|
8
|
+
import { AssistantHistoryPinLimitBanner as d, AssistantHistoryUnsavedDeleteNotice as f } from "./AssistantHistoryNotices.js";
|
|
9
|
+
import { historyRowAcceptsControls as te, selectAssistantHistoryList as ne } from "../history/historyList.js";
|
|
10
|
+
import { useAssistantHistoryStatus as p } from "../history/historyStatus.js";
|
|
11
|
+
import { useAssistantHistoryStore as m } from "../history/historyStore.js";
|
|
12
|
+
import { assistantHistory as h } from "../history/historyEngine.js";
|
|
13
|
+
import { selectHistorySearchList as re } from "../history/historySearch.js";
|
|
14
|
+
import { useAssistantHistorySearch as ie } from "../history/useAssistantHistorySearch.js";
|
|
15
|
+
import { AssistantConversationFilters as ae } from "./AssistantConversationFilters.js";
|
|
16
|
+
import { AssistantHistorySearchBox as oe } from "./AssistantHistorySearchBox.js";
|
|
17
|
+
import { useEffect as se, useId as ce, useLayoutEffect as le, useMemo as g, useRef as _, useState as v } from "react";
|
|
18
|
+
import { Archive as ue, ArchiveRestore as de, Check as fe, MessageSquare as pe, PanelLeftClose as me, Pencil as he, Pin as ge, PinOff as _e, Plus as ve, Trash2 as ye } from "lucide-react";
|
|
19
|
+
import { Fragment as be, jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
17
20
|
//#region src/shared/assistant/ui/AssistantConversationList.tsx
|
|
18
|
-
var
|
|
21
|
+
var xe = {
|
|
19
22
|
channel: "ANY",
|
|
20
23
|
pinned: null,
|
|
21
24
|
archived: "INCLUDE"
|
|
22
|
-
},
|
|
23
|
-
let c =
|
|
24
|
-
return /* @__PURE__ */
|
|
25
|
-
className:
|
|
25
|
+
}, Se = (e) => `group relative px-3 py-2 cursor-pointer hover:bg-bg-elevated transition-colors ${e ? "bg-bg-elevated border-l-2 border-action-primary-bg" : ""}`, Ce = ({ active: e, title: t, onOpen: n, details: r, actions: i, openRef: a, actionRef: o, testId: s }) => {
|
|
26
|
+
let c = ce(), l = `${c}-title`, u = `${c}-details`;
|
|
27
|
+
return /* @__PURE__ */ b("div", {
|
|
28
|
+
className: Se(e),
|
|
26
29
|
"data-testid": s,
|
|
27
|
-
children: [/* @__PURE__ */
|
|
30
|
+
children: [/* @__PURE__ */ b("div", {
|
|
28
31
|
className: "flex items-center justify-between",
|
|
29
|
-
children: [/* @__PURE__ */
|
|
32
|
+
children: [/* @__PURE__ */ y("button", {
|
|
30
33
|
ref: a,
|
|
31
34
|
type: "button",
|
|
32
35
|
onClick: n,
|
|
@@ -34,16 +37,16 @@ var ge = {
|
|
|
34
37
|
"aria-describedby": u,
|
|
35
38
|
className: "flex-1 min-w-0 text-left cursor-pointer focus:outline-none after:absolute after:inset-0 focus-visible:after:outline-2 focus-visible:after:outline-solid focus-visible:after:-outline-offset-2 focus-visible:after:outline-[var(--color-focus-ring)]",
|
|
36
39
|
"data-testid": "open-conversation",
|
|
37
|
-
children: /* @__PURE__ */
|
|
40
|
+
children: /* @__PURE__ */ y("span", {
|
|
38
41
|
id: l,
|
|
39
42
|
className: "block text-xs font-medium text-text-primary truncate",
|
|
40
43
|
children: t
|
|
41
44
|
})
|
|
42
|
-
}), /* @__PURE__ */
|
|
45
|
+
}), /* @__PURE__ */ y("div", {
|
|
43
46
|
className: "sr-only group-hover:not-sr-only group-focus-within:not-sr-only [@media(pointer:coarse)]:not-sr-only",
|
|
44
|
-
children: /* @__PURE__ */
|
|
47
|
+
children: /* @__PURE__ */ y("div", {
|
|
45
48
|
className: "relative z-10 flex items-center gap-0.5 ml-1",
|
|
46
|
-
children: i.map((e) => /* @__PURE__ */
|
|
49
|
+
children: i.map((e) => /* @__PURE__ */ y("button", {
|
|
47
50
|
ref: o(e.id),
|
|
48
51
|
type: "button",
|
|
49
52
|
onClick: e.onActivate,
|
|
@@ -55,390 +58,461 @@ var ge = {
|
|
|
55
58
|
}, e.id))
|
|
56
59
|
})
|
|
57
60
|
})]
|
|
58
|
-
}), /* @__PURE__ */
|
|
61
|
+
}), /* @__PURE__ */ y("div", {
|
|
59
62
|
id: u,
|
|
60
63
|
children: r
|
|
61
64
|
})]
|
|
62
65
|
});
|
|
63
|
-
},
|
|
66
|
+
}, we = (e, t) => {
|
|
64
67
|
let n = [];
|
|
65
68
|
for (let r = 1; r < e.length; r += 1) {
|
|
66
69
|
let i = e[t + r], a = t - r >= 0 ? e[t - r] : void 0;
|
|
67
70
|
i !== void 0 && n.push(i), a !== void 0 && n.push(a);
|
|
68
71
|
}
|
|
69
72
|
return n;
|
|
70
|
-
},
|
|
71
|
-
let
|
|
72
|
-
|
|
73
|
-
},
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
73
|
+
}, x = () => {
|
|
74
|
+
let x = t(), { modes: Te } = e(), { conversations: S, activeConversationId: C, processingByConversationId: Ee, setActiveConversation: De, setMode: Oe, createConversation: ke, deleteConversation: Ae, renameConversation: je, setConversationListOpen: w } = s(), [T, E] = v(null), [D, Me] = v(""), [Ne, O] = v(!1), Pe = ce(), k = p((e) => e.product !== null), A = p((e) => e.scopeKey), Fe = p((e) => e.loadingIds), j = p((e) => e.olderHeaders), Ie = p((e) => e.unsavedDelete !== void 0), Le = p((e) => e.controlsAvailable), M = k && Le, Re = p((e) => e.pinLimit), N = m((e) => A === null ? void 0 : e.scopes[A]), ze = m((e) => e.tombstones), P = m((e) => e.outbox), [F, Be] = v(n), [Ve, He] = v(!1), Ue = M ? F : xe, We = (e) => {
|
|
75
|
+
Be(e), He(!0);
|
|
76
|
+
}, [Ge, Ke] = v(""), I = ie({
|
|
77
|
+
text: Ge,
|
|
78
|
+
filter: F,
|
|
79
|
+
enabled: M,
|
|
80
|
+
scopeKey: A,
|
|
81
|
+
epoch: p((e) => e.epoch)
|
|
82
|
+
}), L = M && I.query !== "", R = I.server;
|
|
83
|
+
L && !Ve && He(!0);
|
|
84
|
+
let z = g(() => ({
|
|
85
|
+
conversations: S,
|
|
86
|
+
scopeKey: A,
|
|
87
|
+
headers: N?.headers ?? {},
|
|
88
|
+
olderHeaders: j && j.scopeKey === A ? j.headers : void 0,
|
|
89
|
+
tombstones: ze,
|
|
90
|
+
loadingIds: Fe,
|
|
91
|
+
outbox: P
|
|
92
|
+
}), [
|
|
93
|
+
S,
|
|
94
|
+
A,
|
|
82
95
|
N,
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
96
|
+
j,
|
|
97
|
+
ze,
|
|
98
|
+
Fe,
|
|
99
|
+
P
|
|
100
|
+
]), B = g(() => k ? ne(z, Ue) : null, [
|
|
101
|
+
k,
|
|
102
|
+
z,
|
|
103
|
+
Ue
|
|
104
|
+
]), V = g(() => k && L ? re(z, F, I.query, R.status === "results" ? R.hits : null) : null, [
|
|
105
|
+
k,
|
|
106
|
+
L,
|
|
89
107
|
z,
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
108
|
+
F,
|
|
109
|
+
I.query,
|
|
110
|
+
R
|
|
111
|
+
]), H = R.status === "results" && R.hasMore, U = R.status === "results" && R.loadingMore, qe = M ? F : void 0, Je = o(qe), W = j && j.scopeKey === A ? j : void 0, G = W ? W.filterKey === Je ? W.hasMore : !0 : N?.hasOlderHeaders === !0, K = g(() => V ? [
|
|
112
|
+
...V.server.map((e) => e.key),
|
|
113
|
+
...V.local.map((e) => e.key),
|
|
114
|
+
...V.device.map((e) => e.id)
|
|
115
|
+
] : B ? [...B.workspace.map((e) => e.key), ...B.device.map((e) => e.id)] : S.map((e) => e.id), [
|
|
116
|
+
V,
|
|
117
|
+
B,
|
|
118
|
+
S
|
|
119
|
+
]);
|
|
120
|
+
se(() => {
|
|
121
|
+
k && h.notePanelOpened();
|
|
122
|
+
}, [k]);
|
|
123
|
+
let Ye = () => {
|
|
124
|
+
ke(), w(!1);
|
|
125
|
+
}, Xe = (e) => {
|
|
126
|
+
if (k) {
|
|
127
|
+
h.openConversation(e, { modes: Te }), w(!1);
|
|
100
128
|
return;
|
|
101
129
|
}
|
|
102
|
-
let t =
|
|
103
|
-
|
|
104
|
-
},
|
|
105
|
-
t ?
|
|
106
|
-
},
|
|
130
|
+
let t = S.find((t) => t.id === e);
|
|
131
|
+
De(e), t && Oe(t.mode), w(!1);
|
|
132
|
+
}, Ze = _(/* @__PURE__ */ new Map()), Qe = (e) => (t) => {
|
|
133
|
+
t ? Ze.current.set(e, t) : Ze.current.delete(e);
|
|
134
|
+
}, $e = _(/* @__PURE__ */ new Map()), et = (e) => (t) => (n) => {
|
|
107
135
|
let r = `${e}\u0000${t}`;
|
|
108
|
-
n ?
|
|
109
|
-
}, q = _(null),
|
|
110
|
-
|
|
111
|
-
},
|
|
112
|
-
|
|
113
|
-
},
|
|
114
|
-
|
|
136
|
+
n ? $e.current.set(r, n) : $e.current.delete(r);
|
|
137
|
+
}, q = _(null), tt = _(null), nt = _(null), rt = _(null), it = _(null), at = (e, t) => {
|
|
138
|
+
E(e), Me(r(t, 80)), O(!1);
|
|
139
|
+
}, ot = (e) => {
|
|
140
|
+
Me(r(e, 80)), O(i(e) > 80);
|
|
141
|
+
}, st = () => {
|
|
142
|
+
T && D.trim() && je(T, D), T && (q.current = {
|
|
115
143
|
kind: "renamed",
|
|
116
|
-
key:
|
|
117
|
-
}),
|
|
118
|
-
},
|
|
144
|
+
key: T
|
|
145
|
+
}), E(null), O(!1);
|
|
146
|
+
}, ct = (e) => {
|
|
119
147
|
q.current = {
|
|
120
148
|
kind: "deleted",
|
|
121
149
|
key: e,
|
|
122
|
-
before:
|
|
123
|
-
},
|
|
124
|
-
},
|
|
150
|
+
before: K
|
|
151
|
+
}, k ? h.deleteConversation(e) : Ae(e);
|
|
152
|
+
}, lt = (e, t, n) => {
|
|
125
153
|
q.current = {
|
|
126
154
|
kind: "control",
|
|
127
155
|
key: e,
|
|
128
156
|
control: t,
|
|
129
|
-
before:
|
|
130
|
-
},
|
|
131
|
-
},
|
|
132
|
-
className:
|
|
133
|
-
children: [/* @__PURE__ */
|
|
157
|
+
before: K
|
|
158
|
+
}, h.updateConversation(e, n) || (q.current = null);
|
|
159
|
+
}, ut = x("history.untitled", "Untitled conversation"), J = "text-[10px] text-text-muted px-1 py-0.5 bg-bg-sunken rounded", dt = (e) => e === 1 ? x("conversationList.messageCountOne", "1 message") : x("conversationList.messageCount", "{{count}} messages", { count: e }), ft = (e) => e === 1 ? x("conversationList.spokenCountOne", "1 spoken") : x("conversationList.spokenCount", "{{count}} spoken", { count: e }), pt = (e, t) => /* @__PURE__ */ b("div", {
|
|
160
|
+
className: Se(t),
|
|
161
|
+
children: [/* @__PURE__ */ b("div", {
|
|
134
162
|
className: "flex items-center gap-1",
|
|
135
|
-
children: [/* @__PURE__ */
|
|
136
|
-
ref:
|
|
137
|
-
"aria-label":
|
|
138
|
-
"aria-describedby":
|
|
139
|
-
value:
|
|
140
|
-
onChange: (e) =>
|
|
163
|
+
children: [/* @__PURE__ */ y("input", {
|
|
164
|
+
ref: tt,
|
|
165
|
+
"aria-label": x("conversations.renameLabel", "Conversation title"),
|
|
166
|
+
"aria-describedby": Ne ? Pe : void 0,
|
|
167
|
+
value: D,
|
|
168
|
+
onChange: (e) => ot(e.target.value),
|
|
141
169
|
onKeyDown: (t) => {
|
|
142
|
-
t.key === "Enter" && (t.preventDefault(),
|
|
170
|
+
t.key === "Enter" && (t.preventDefault(), st()), t.key === "Escape" && (t.preventDefault(), t.stopPropagation(), E(null), O(!1), q.current = {
|
|
143
171
|
kind: "renamed",
|
|
144
172
|
key: e
|
|
145
173
|
});
|
|
146
174
|
},
|
|
147
175
|
className: "flex-1 text-xs bg-bg-sunken border border-border-default rounded px-2 py-1 text-text-primary focus:outline-none focus:border-action-primary-bg"
|
|
148
|
-
}), /* @__PURE__ */
|
|
176
|
+
}), /* @__PURE__ */ y("button", {
|
|
149
177
|
type: "button",
|
|
150
|
-
onClick:
|
|
178
|
+
onClick: st,
|
|
151
179
|
className: "p-1 hover:bg-bg-sunken rounded",
|
|
152
|
-
"aria-label":
|
|
153
|
-
children: /* @__PURE__ */
|
|
180
|
+
"aria-label": x("conversations.saveTitle", "Save title"),
|
|
181
|
+
children: /* @__PURE__ */ y(fe, { className: "size-3 text-status-success-text" })
|
|
154
182
|
})]
|
|
155
|
-
}), /* @__PURE__ */
|
|
156
|
-
id:
|
|
183
|
+
}), /* @__PURE__ */ y("p", {
|
|
184
|
+
id: Pe,
|
|
157
185
|
role: "status",
|
|
158
186
|
className: "text-[10px] text-text-muted",
|
|
159
|
-
children:
|
|
187
|
+
children: Ne ? x("conversations.titleLimit", "Titles are up to {{limit}} characters", { limit: 80 }) : ""
|
|
160
188
|
})]
|
|
161
|
-
}, e),
|
|
162
|
-
let t =
|
|
189
|
+
}, e), mt = (e) => {
|
|
190
|
+
let t = M && te(e, P, A), n = e.pinnedAt !== null, r = e.archivedAt !== null, i = [];
|
|
163
191
|
return t && !r && i.push({
|
|
164
192
|
id: "pin",
|
|
165
|
-
label: n ?
|
|
166
|
-
icon:
|
|
167
|
-
onActivate: () =>
|
|
193
|
+
label: n ? x("conversations.unpin", "Unpin conversation") : x("conversations.pin", "Pin conversation"),
|
|
194
|
+
icon: y(n ? _e : ge, { className: "size-3 text-text-muted" }),
|
|
195
|
+
onActivate: () => lt(e.key, "pin", { pinned: !n }),
|
|
168
196
|
testId: "pin-conversation"
|
|
169
197
|
}), (e.conversation || t) && i.push({
|
|
170
198
|
id: "rename",
|
|
171
|
-
label:
|
|
172
|
-
icon: /* @__PURE__ */
|
|
173
|
-
onActivate: () =>
|
|
199
|
+
label: x("conversations.rename", "Rename conversation"),
|
|
200
|
+
icon: /* @__PURE__ */ y(he, { className: "size-3 text-text-muted" }),
|
|
201
|
+
onActivate: () => at(e.key, e.title),
|
|
174
202
|
testId: "rename-conversation"
|
|
175
203
|
}), t && i.push({
|
|
176
204
|
id: "archive",
|
|
177
|
-
label: r ?
|
|
178
|
-
icon:
|
|
179
|
-
onActivate: () =>
|
|
205
|
+
label: r ? x("conversations.unarchive", "Unarchive conversation") : x("conversations.archive", "Archive conversation"),
|
|
206
|
+
icon: y(r ? de : ue, { className: "size-3 text-text-muted" }),
|
|
207
|
+
onActivate: () => lt(e.key, "archive", { archived: !r }),
|
|
180
208
|
testId: "archive-conversation"
|
|
181
209
|
}), i.push({
|
|
182
210
|
id: "delete",
|
|
183
|
-
label:
|
|
184
|
-
icon: /* @__PURE__ */
|
|
185
|
-
onActivate: () =>
|
|
211
|
+
label: x("conversations.delete", "Delete conversation"),
|
|
212
|
+
icon: /* @__PURE__ */ y(ye, { className: "size-3 text-status-error-text" }),
|
|
213
|
+
onActivate: () => ct(e.key),
|
|
186
214
|
testId: "delete-conversation"
|
|
187
215
|
}), i;
|
|
188
|
-
},
|
|
216
|
+
}, ht = (e) => [{
|
|
189
217
|
id: "rename",
|
|
190
|
-
label:
|
|
191
|
-
icon: /* @__PURE__ */
|
|
192
|
-
onActivate: () =>
|
|
218
|
+
label: x("conversations.rename", "Rename conversation"),
|
|
219
|
+
icon: /* @__PURE__ */ y(he, { className: "size-3 text-text-muted" }),
|
|
220
|
+
onActivate: () => at(e.id, e.title),
|
|
193
221
|
testId: "rename-conversation"
|
|
194
222
|
}, {
|
|
195
223
|
id: "delete",
|
|
196
|
-
label:
|
|
197
|
-
icon: /* @__PURE__ */
|
|
198
|
-
onActivate: () =>
|
|
224
|
+
label: x("conversations.delete", "Delete conversation"),
|
|
225
|
+
icon: /* @__PURE__ */ y(ye, { className: "size-3 text-status-error-text" }),
|
|
226
|
+
onActivate: () => ct(e.id),
|
|
199
227
|
testId: "delete-conversation"
|
|
200
|
-
}],
|
|
201
|
-
let n = e.id ===
|
|
202
|
-
return r ?
|
|
228
|
+
}], Y = (e, t) => {
|
|
229
|
+
let n = e.id === C, r = e.id === T, i = Te.find((t) => t.id === e.mode), a = c(e.messages), o = l(e.messages), s = a[a.length - 1], ee = a.length === 0 && e.messages.length > 0, d = Ee[e.id], f = s ? u(s, d, x).text.slice(0, 60) : "";
|
|
230
|
+
return r ? pt(e.id, n) : /* @__PURE__ */ y(Ce, {
|
|
203
231
|
active: n,
|
|
204
|
-
title: (t ? t.title : e.title) ||
|
|
205
|
-
onOpen: () =>
|
|
206
|
-
openRef:
|
|
207
|
-
actionRef:
|
|
208
|
-
actions: t ? t.actions :
|
|
209
|
-
details: /* @__PURE__ */
|
|
210
|
-
/* @__PURE__ */
|
|
232
|
+
title: (t ? t.title : e.title) || ut,
|
|
233
|
+
onOpen: () => Xe(e.id),
|
|
234
|
+
openRef: Qe(e.id),
|
|
235
|
+
actionRef: et(e.id),
|
|
236
|
+
actions: t ? t.actions : ht(e),
|
|
237
|
+
details: /* @__PURE__ */ b(be, { children: [
|
|
238
|
+
/* @__PURE__ */ b("div", {
|
|
211
239
|
className: "flex flex-wrap items-center gap-1.5 mt-0.5",
|
|
212
240
|
children: [
|
|
213
|
-
/* @__PURE__ */
|
|
214
|
-
className:
|
|
241
|
+
/* @__PURE__ */ y("span", {
|
|
242
|
+
className: J,
|
|
215
243
|
children: i?.label ?? e.mode
|
|
216
244
|
}),
|
|
217
|
-
/* @__PURE__ */
|
|
245
|
+
/* @__PURE__ */ y("span", {
|
|
218
246
|
className: "text-[10px] text-text-muted",
|
|
219
|
-
children:
|
|
247
|
+
children: dt(a.length)
|
|
220
248
|
}),
|
|
221
|
-
o.length > 0 ? /* @__PURE__ */
|
|
249
|
+
o.length > 0 ? /* @__PURE__ */ y("span", {
|
|
222
250
|
className: "text-[10px] text-text-muted",
|
|
223
251
|
"data-testid": "history-spoken-count",
|
|
224
|
-
children:
|
|
252
|
+
children: ft(o.length)
|
|
225
253
|
}) : null,
|
|
226
|
-
|
|
254
|
+
d && d.status !== "idle" && /* @__PURE__ */ y("span", {
|
|
227
255
|
className: "text-[10px] text-action-primary-bg px-1 py-0.5 bg-bg-sunken rounded",
|
|
228
|
-
children:
|
|
256
|
+
children: d.status
|
|
229
257
|
}),
|
|
230
258
|
t?.badges
|
|
231
259
|
]
|
|
232
260
|
}),
|
|
233
261
|
t?.note,
|
|
234
|
-
|
|
262
|
+
f && /* @__PURE__ */ y("p", {
|
|
235
263
|
className: "text-[10px] text-text-muted truncate mt-0.5",
|
|
236
|
-
children:
|
|
264
|
+
children: f
|
|
237
265
|
}),
|
|
238
|
-
|
|
266
|
+
ee && /* @__PURE__ */ y("p", {
|
|
239
267
|
className: "text-[10px] text-text-muted truncate mt-0.5",
|
|
240
|
-
children:
|
|
268
|
+
children: x("conversationList.voiceOnly", "Spoken conversation")
|
|
241
269
|
})
|
|
242
270
|
] })
|
|
243
271
|
}, e.id);
|
|
244
|
-
},
|
|
245
|
-
let t =
|
|
246
|
-
return /* @__PURE__ */
|
|
247
|
-
e.channel === "VOICE" ? /* @__PURE__ */
|
|
248
|
-
className:
|
|
272
|
+
}, gt = (e) => e.blocked === "quota" ? x("history.notSavedQuota", "Not saved yet: this workspace has reached its conversation limit. It will be saved when there is room.") : e.blocked === "invalid" ? x("history.notSavedInvalid", "Part of this conversation couldn't be saved. It stays on this device.") : e.blocked === "scope" ? x("history.notSavedScope", "Some turns were sent from another workspace. They stay on this device.") : null, _t = (e) => {
|
|
273
|
+
let t = gt(e);
|
|
274
|
+
return /* @__PURE__ */ b(be, { children: [
|
|
275
|
+
e.channel === "VOICE" ? /* @__PURE__ */ y("span", {
|
|
276
|
+
className: J,
|
|
249
277
|
"data-testid": "history-badge-voice",
|
|
250
|
-
children:
|
|
251
|
-
}) : e.channel === "MIXED" ? /* @__PURE__ */
|
|
252
|
-
className:
|
|
278
|
+
children: x("conversationList.badgeVoice", "Voice")
|
|
279
|
+
}) : e.channel === "MIXED" ? /* @__PURE__ */ y("span", {
|
|
280
|
+
className: J,
|
|
253
281
|
"data-testid": "history-badge-mixed",
|
|
254
|
-
children:
|
|
282
|
+
children: x("conversationList.badgeMixed", "Chat + voice")
|
|
255
283
|
}) : null,
|
|
256
|
-
e.pinnedAt === null ? null : /* @__PURE__ */
|
|
257
|
-
className: `${
|
|
284
|
+
e.pinnedAt === null ? null : /* @__PURE__ */ b("span", {
|
|
285
|
+
className: `${J} inline-flex items-center gap-0.5`,
|
|
258
286
|
"data-testid": "history-badge-pinned",
|
|
259
|
-
children: [/* @__PURE__ */
|
|
287
|
+
children: [/* @__PURE__ */ y(ge, {
|
|
260
288
|
className: "size-2.5",
|
|
261
289
|
"aria-hidden": "true"
|
|
262
|
-
}),
|
|
290
|
+
}), x("conversationList.badgePinned", "Pinned")]
|
|
263
291
|
}),
|
|
264
|
-
e.archivedAt === null ? null : /* @__PURE__ */
|
|
265
|
-
className: `${
|
|
292
|
+
e.archivedAt === null ? null : /* @__PURE__ */ b("span", {
|
|
293
|
+
className: `${J} inline-flex items-center gap-0.5`,
|
|
266
294
|
"data-testid": "history-badge-archived",
|
|
267
|
-
children: [/* @__PURE__ */
|
|
295
|
+
children: [/* @__PURE__ */ y(ue, {
|
|
268
296
|
className: "size-2.5",
|
|
269
297
|
"aria-hidden": "true"
|
|
270
|
-
}),
|
|
298
|
+
}), x("conversationList.badgeArchived", "Archived")]
|
|
271
299
|
}),
|
|
272
|
-
e.legacy ? /* @__PURE__ */
|
|
273
|
-
className:
|
|
300
|
+
e.legacy ? /* @__PURE__ */ y("span", {
|
|
301
|
+
className: J,
|
|
274
302
|
"data-testid": "history-badge-read-only",
|
|
275
|
-
children:
|
|
303
|
+
children: x("history.badgeReadOnly", "Read-only")
|
|
276
304
|
}) : null,
|
|
277
|
-
t === null ? null : /* @__PURE__ */
|
|
278
|
-
className:
|
|
305
|
+
t === null ? null : /* @__PURE__ */ y("span", {
|
|
306
|
+
className: J,
|
|
279
307
|
"data-testid": "history-badge-not-saved",
|
|
280
|
-
children:
|
|
308
|
+
children: x("history.badgeNotSaved", "Not saved")
|
|
281
309
|
}),
|
|
282
|
-
e.loading ? /* @__PURE__ */
|
|
283
|
-
className:
|
|
310
|
+
e.loading ? /* @__PURE__ */ y("span", {
|
|
311
|
+
className: J,
|
|
284
312
|
"data-testid": "history-badge-loading",
|
|
285
|
-
children:
|
|
313
|
+
children: x("history.badgeLoading", "Loading…")
|
|
286
314
|
}) : null
|
|
287
315
|
] });
|
|
288
|
-
},
|
|
289
|
-
let t =
|
|
290
|
-
return t === null ? null : /* @__PURE__ */
|
|
316
|
+
}, vt = (e) => {
|
|
317
|
+
let t = gt(e);
|
|
318
|
+
return t === null ? null : /* @__PURE__ */ y("p", {
|
|
291
319
|
className: "text-[10px] text-text-muted break-words mt-0.5",
|
|
292
320
|
"data-testid": "history-not-saved-reason",
|
|
293
321
|
children: t
|
|
294
322
|
});
|
|
295
|
-
},
|
|
296
|
-
active: e.key ===
|
|
297
|
-
title: e.title ||
|
|
298
|
-
onOpen: () =>
|
|
299
|
-
openRef:
|
|
300
|
-
actionRef:
|
|
301
|
-
actions:
|
|
302
|
-
details: /* @__PURE__ */
|
|
323
|
+
}, yt = (e) => e.key === T ? pt(e.key, e.key === C) : /* @__PURE__ */ y(Ce, {
|
|
324
|
+
active: e.key === C,
|
|
325
|
+
title: e.title || ut,
|
|
326
|
+
onOpen: () => Xe(e.key),
|
|
327
|
+
openRef: Qe(e.key),
|
|
328
|
+
actionRef: et(e.key),
|
|
329
|
+
actions: mt(e),
|
|
330
|
+
details: /* @__PURE__ */ b(be, { children: [/* @__PURE__ */ y("div", {
|
|
303
331
|
className: "flex flex-wrap items-center gap-1.5 mt-0.5",
|
|
304
|
-
children:
|
|
305
|
-
}),
|
|
332
|
+
children: _t(e)
|
|
333
|
+
}), vt(e)] }),
|
|
306
334
|
testId: "history-server-row"
|
|
307
|
-
}, e.key),
|
|
335
|
+
}, e.key), bt = (e) => e.conversation ? Y(e.conversation, {
|
|
336
|
+
title: e.title || ut,
|
|
337
|
+
badges: _t(e),
|
|
338
|
+
note: vt(e),
|
|
339
|
+
actions: mt(e)
|
|
340
|
+
}) : yt(e), X = (e) => /* @__PURE__ */ y("h3", {
|
|
308
341
|
className: "px-3 pt-2 pb-1 text-[10px] font-semibold uppercase tracking-wide text-text-muted",
|
|
309
342
|
children: e
|
|
310
|
-
}),
|
|
311
|
-
return
|
|
312
|
-
|
|
313
|
-
}, [
|
|
343
|
+
}), Z = V ? V.server.length + V.local.length + V.device.length : B ? B.workspace.length + B.device.length : S.length, xt = V ? Z === 0 && R.status !== "searching" && !H : B ? Z === 0 && !G : S.length === 0, St = (e) => e === 0 ? x("conversationFilters.none", "No conversations match") : e === 1 ? x("conversationFilters.countOne", "1 conversation") : x("conversationFilters.count", "{{count}} conversations", { count: e }), Ct = L ? I.tooShort ? x("historySearch.tooShort", "Type 2 or more characters to search this workspace") : R.status === "searching" ? x("historySearch.searching", "Searching…") : St(Z) : void 0, wt = L ? R.status === "fallback" ? R.reason === "busy" ? x("historySearch.busy", "Search is busy right now. Showing matches on this device.") : x("historySearch.failed", "Couldn't search this workspace. Showing matches on this device.") : R.status === "results" && R.moreFailed ? x("historySearch.moreFailed", "Couldn't load more results. Try again.") : "" : "", Q = M && !L ? a(F) : null, Tt = L ? St(0) : Q === "archived" ? x("conversationList.emptyArchived", "No archived conversations") : Q === "pinned" ? x("conversationList.emptyPinned", "No pinned conversations") : Q === "voice" ? x("conversationList.emptyVoice", "No voice conversations") : Q === "chat" ? x("conversationList.emptyChat", "No chat conversations") : x("conversations.empty", "No conversations yet"), $ = ee("assistant-open-history");
|
|
344
|
+
return le(() => {
|
|
345
|
+
T !== null && tt.current?.focus({ preventScroll: !0 });
|
|
346
|
+
}, [T]), le(() => {
|
|
314
347
|
let e = q.current;
|
|
315
|
-
if (!e || (e.kind === "deleted" ?
|
|
348
|
+
if (!e || (e.kind === "deleted" ? K.includes(e.key) : e.kind === "renamed" ? T === e.key : e.kind !== "control" && (e.kind === "more" ? U : G))) return;
|
|
316
349
|
q.current = null;
|
|
317
350
|
let t = document.activeElement;
|
|
318
351
|
if (t && t !== document.body) return;
|
|
319
|
-
let n, r = e.kind === "control" &&
|
|
352
|
+
let n, r = e.kind === "control" && K.includes(e.key) ? $e.current.get(`${e.key}\u0000${e.control}`) : void 0;
|
|
320
353
|
if (e.kind === "renamed") n = [e.key];
|
|
321
|
-
else if (e.kind === "control") n =
|
|
322
|
-
else if (e.kind === "deleted") n = [...
|
|
323
|
-
else {
|
|
324
|
-
let t =
|
|
354
|
+
else if (e.kind === "control") n = K.includes(e.key) ? [e.key] : [...we(e.before, e.before.indexOf(e.key)), ...K];
|
|
355
|
+
else if (e.kind === "deleted") n = [...we(e.before, e.before.indexOf(e.key)), ...K];
|
|
356
|
+
else if (e.kind === "more") {
|
|
357
|
+
let t = new Set(e.before), r = V?.server ?? [];
|
|
358
|
+
n = [
|
|
359
|
+
...K.filter((e) => !t.has(e)),
|
|
360
|
+
r[r.length - 1]?.key,
|
|
361
|
+
...K
|
|
362
|
+
];
|
|
363
|
+
} else {
|
|
364
|
+
let t = j && j.scopeKey === A ? j.headers : {}, r = new Set(e.before), i = B?.workspace ?? [];
|
|
325
365
|
n = [
|
|
326
|
-
...
|
|
366
|
+
...K.filter((e) => !r.has(e) && e in t),
|
|
327
367
|
i[i.length - 1]?.key,
|
|
328
|
-
...
|
|
368
|
+
...K
|
|
329
369
|
];
|
|
330
370
|
}
|
|
331
|
-
(r ?? n.map((e) => e === void 0 ? void 0 : e ===
|
|
371
|
+
(r ?? n.map((e) => e === void 0 ? void 0 : e === T ? tt.current ?? void 0 : Ze.current.get(e)).find((e) => e !== void 0) ?? nt.current ?? rt.current ?? it.current ?? $.current)?.focus({ preventScroll: !0 });
|
|
332
372
|
}, [
|
|
333
|
-
|
|
334
|
-
|
|
373
|
+
K,
|
|
374
|
+
T,
|
|
375
|
+
G,
|
|
376
|
+
j,
|
|
377
|
+
A,
|
|
378
|
+
B,
|
|
379
|
+
$,
|
|
335
380
|
U,
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
V,
|
|
339
|
-
$
|
|
340
|
-
]), /* @__PURE__ */ S("div", {
|
|
381
|
+
V
|
|
382
|
+
]), /* @__PURE__ */ b("div", {
|
|
341
383
|
ref: $,
|
|
342
384
|
tabIndex: -1,
|
|
343
385
|
role: "region",
|
|
344
|
-
"aria-label":
|
|
386
|
+
"aria-label": x("conversations.title", "History"),
|
|
345
387
|
className: "absolute inset-0 z-10 flex flex-col bg-bg-surface outline-none animate-in slide-in-from-left-2 fade-in duration-200",
|
|
346
388
|
"data-testid": "conversation-list",
|
|
347
389
|
children: [
|
|
348
|
-
/* @__PURE__ */
|
|
390
|
+
/* @__PURE__ */ b("div", {
|
|
349
391
|
className: "flex items-center justify-between px-4 py-3 border-b border-border-default bg-bg-elevated",
|
|
350
|
-
children: [/* @__PURE__ */
|
|
392
|
+
children: [/* @__PURE__ */ y("span", {
|
|
351
393
|
className: "text-[13px] font-semibold text-text-primary",
|
|
352
|
-
children:
|
|
353
|
-
}), /* @__PURE__ */
|
|
394
|
+
children: x("conversations.title", "History")
|
|
395
|
+
}), /* @__PURE__ */ b("div", {
|
|
354
396
|
className: "flex items-center gap-0.5",
|
|
355
|
-
children: [/* @__PURE__ */
|
|
397
|
+
children: [/* @__PURE__ */ y("button", {
|
|
356
398
|
type: "button",
|
|
357
|
-
onClick:
|
|
399
|
+
onClick: Ye,
|
|
358
400
|
className: "p-1.5 rounded-lg text-text-secondary hover:bg-bg-sunken transition-colors",
|
|
359
|
-
"aria-label":
|
|
401
|
+
"aria-label": x("conversations.new", "New conversation"),
|
|
360
402
|
"data-testid": "new-conversation",
|
|
361
|
-
children: /* @__PURE__ */
|
|
362
|
-
}), /* @__PURE__ */
|
|
403
|
+
children: /* @__PURE__ */ y(ve, { className: "size-4" })
|
|
404
|
+
}), /* @__PURE__ */ b("button", {
|
|
363
405
|
type: "button",
|
|
364
|
-
onClick: () =>
|
|
406
|
+
onClick: () => w(!1),
|
|
365
407
|
className: "flex items-center gap-1 px-2 py-1.5 rounded-lg text-text-secondary hover:bg-bg-sunken transition-colors",
|
|
366
|
-
"aria-label":
|
|
408
|
+
"aria-label": x("conversations.collapse", "Collapse history"),
|
|
367
409
|
"data-testid": "collapse-conversation-list",
|
|
368
|
-
children: [/* @__PURE__ */
|
|
410
|
+
children: [/* @__PURE__ */ y(me, { className: "size-4" }), /* @__PURE__ */ y("span", {
|
|
369
411
|
className: "text-[11px] font-medium",
|
|
370
|
-
children:
|
|
412
|
+
children: x("conversations.collapseLabel", "Collapse")
|
|
371
413
|
})]
|
|
372
414
|
})]
|
|
373
415
|
})]
|
|
374
416
|
}),
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
limit:
|
|
378
|
-
onDismiss: () =>
|
|
417
|
+
k && Ie ? /* @__PURE__ */ y(f, {}) : null,
|
|
418
|
+
k && Re ? /* @__PURE__ */ y(d, {
|
|
419
|
+
limit: Re.limit,
|
|
420
|
+
onDismiss: () => p.getState().notePinLimit(void 0)
|
|
379
421
|
}) : null,
|
|
380
|
-
|
|
381
|
-
filter:
|
|
382
|
-
onChange:
|
|
383
|
-
count:
|
|
384
|
-
announce:
|
|
422
|
+
M ? /* @__PURE__ */ y(ae, {
|
|
423
|
+
filter: F,
|
|
424
|
+
onChange: We,
|
|
425
|
+
count: Z,
|
|
426
|
+
announce: Ve,
|
|
427
|
+
search: /* @__PURE__ */ y(oe, {
|
|
428
|
+
value: Ge,
|
|
429
|
+
onChange: Ke,
|
|
430
|
+
onSubmit: I.flush,
|
|
431
|
+
notice: wt
|
|
432
|
+
}),
|
|
433
|
+
statusText: Ct
|
|
385
434
|
}) : null,
|
|
386
|
-
/* @__PURE__ */
|
|
435
|
+
/* @__PURE__ */ y("div", {
|
|
387
436
|
className: "scrollbar-slim flex-1 overflow-y-auto",
|
|
388
|
-
children:
|
|
437
|
+
children: xt ? /* @__PURE__ */ b("div", {
|
|
389
438
|
className: "flex flex-col items-center justify-center h-full text-center px-4",
|
|
390
439
|
"data-testid": "history-empty",
|
|
391
440
|
children: [
|
|
392
|
-
/* @__PURE__ */
|
|
393
|
-
/* @__PURE__ */
|
|
441
|
+
/* @__PURE__ */ y(pe, { className: "size-6 text-text-muted mb-2" }),
|
|
442
|
+
/* @__PURE__ */ y("p", {
|
|
394
443
|
className: "text-xs text-text-muted",
|
|
395
|
-
children:
|
|
444
|
+
children: Tt
|
|
396
445
|
}),
|
|
397
|
-
Q === null ? /* @__PURE__ */
|
|
398
|
-
ref:
|
|
446
|
+
Q === null && !L ? /* @__PURE__ */ y("button", {
|
|
447
|
+
ref: it,
|
|
399
448
|
type: "button",
|
|
400
|
-
onClick:
|
|
449
|
+
onClick: Ye,
|
|
401
450
|
className: "mt-2 text-xs text-action-primary-bg hover:underline",
|
|
402
|
-
children:
|
|
451
|
+
children: x("conversations.startNew", "Start a new conversation")
|
|
403
452
|
}) : null
|
|
404
453
|
]
|
|
405
|
-
}) : V ? /* @__PURE__ */
|
|
454
|
+
}) : V ? /* @__PURE__ */ b("div", {
|
|
455
|
+
className: "py-1",
|
|
456
|
+
"data-testid": "history-search-results",
|
|
457
|
+
children: [V.server.length > 0 || H ? /* @__PURE__ */ b("section", {
|
|
458
|
+
"data-testid": "history-search-group-workspace",
|
|
459
|
+
children: [
|
|
460
|
+
X(x("history.groupWorkspace", "This workspace")),
|
|
461
|
+
V.server.map(bt),
|
|
462
|
+
H ? /* @__PURE__ */ y("button", {
|
|
463
|
+
ref: rt,
|
|
464
|
+
type: "button",
|
|
465
|
+
onClick: () => {
|
|
466
|
+
U || (q.current = {
|
|
467
|
+
kind: "more",
|
|
468
|
+
before: K
|
|
469
|
+
}), I.loadMore();
|
|
470
|
+
},
|
|
471
|
+
className: "mx-3 my-1 text-xs text-action-primary-bg hover:underline",
|
|
472
|
+
"data-testid": "history-search-show-more",
|
|
473
|
+
children: x("historySearch.showMore", "Show more results")
|
|
474
|
+
}) : null
|
|
475
|
+
]
|
|
476
|
+
}) : null, V.local.length > 0 || V.device.length > 0 ? /* @__PURE__ */ b("section", {
|
|
477
|
+
"data-testid": "history-search-group-device",
|
|
478
|
+
children: [
|
|
479
|
+
X(x("history.groupDevice", "On this device")),
|
|
480
|
+
V.local.map(bt),
|
|
481
|
+
V.device.map((e) => Y(e))
|
|
482
|
+
]
|
|
483
|
+
}) : null]
|
|
484
|
+
}) : B ? /* @__PURE__ */ b("div", {
|
|
406
485
|
className: "py-1",
|
|
407
|
-
children: [
|
|
486
|
+
children: [B.workspace.length > 0 || G ? /* @__PURE__ */ b("section", {
|
|
408
487
|
"data-testid": "history-group-workspace",
|
|
409
488
|
children: [
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
note: rt(e),
|
|
415
|
-
actions: $e(e)
|
|
416
|
-
}) : it(e)),
|
|
417
|
-
U ? /* @__PURE__ */ x("button", {
|
|
418
|
-
ref: Ue,
|
|
489
|
+
X(x("history.groupWorkspace", "This workspace")),
|
|
490
|
+
B.workspace.map(bt),
|
|
491
|
+
G ? /* @__PURE__ */ y("button", {
|
|
492
|
+
ref: nt,
|
|
419
493
|
type: "button",
|
|
420
494
|
onClick: () => {
|
|
421
495
|
q.current = {
|
|
422
496
|
kind: "older",
|
|
423
|
-
before:
|
|
424
|
-
},
|
|
497
|
+
before: K
|
|
498
|
+
}, h.loadOlderHeaders(qe);
|
|
425
499
|
},
|
|
426
500
|
className: "mx-3 my-1 text-xs text-action-primary-bg hover:underline",
|
|
427
501
|
"data-testid": "history-show-older",
|
|
428
|
-
children:
|
|
502
|
+
children: x("history.showOlder", "Show older conversations")
|
|
429
503
|
}) : null
|
|
430
504
|
]
|
|
431
|
-
}) : null,
|
|
505
|
+
}) : null, B.device.length > 0 ? /* @__PURE__ */ b("section", {
|
|
432
506
|
"data-testid": "history-group-device",
|
|
433
|
-
children: [
|
|
507
|
+
children: [X(x("history.groupDevice", "On this device")), B.device.map((e) => Y(e))]
|
|
434
508
|
}) : null]
|
|
435
|
-
}) : /* @__PURE__ */
|
|
509
|
+
}) : /* @__PURE__ */ y("div", {
|
|
436
510
|
className: "py-1",
|
|
437
|
-
children:
|
|
511
|
+
children: S.map((e) => Y(e))
|
|
438
512
|
})
|
|
439
513
|
})
|
|
440
514
|
]
|
|
441
515
|
});
|
|
442
516
|
};
|
|
443
517
|
//#endregion
|
|
444
|
-
export {
|
|
518
|
+
export { x as AssistantConversationList };
|