@stigmer/react 3.7.0 → 3.9.0
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/attachment/AttachmentChipList.d.ts.map +1 -1
- package/attachment/AttachmentChipList.js +30 -1
- package/attachment/AttachmentChipList.js.map +1 -1
- package/attachment/attachment-utils.d.ts +11 -0
- package/attachment/attachment-utils.d.ts.map +1 -1
- package/attachment/attachment-utils.js +23 -0
- package/attachment/attachment-utils.js.map +1 -1
- package/attachment/clipboard.d.ts +51 -0
- package/attachment/clipboard.d.ts.map +1 -0
- package/attachment/clipboard.js +89 -0
- package/attachment/clipboard.js.map +1 -0
- package/attachment/index.d.ts +6 -1
- package/attachment/index.d.ts.map +1 -1
- package/attachment/index.js +4 -1
- package/attachment/index.js.map +1 -1
- package/attachment/prepare-image.d.ts +43 -0
- package/attachment/prepare-image.d.ts.map +1 -0
- package/attachment/prepare-image.js +162 -0
- package/attachment/prepare-image.js.map +1 -0
- package/attachment/useAttachments.d.ts.map +1 -1
- package/attachment/useAttachments.js +23 -3
- package/attachment/useAttachments.js.map +1 -1
- package/attachment/vision-fit.d.ts +50 -0
- package/attachment/vision-fit.d.ts.map +1 -0
- package/attachment/vision-fit.js +76 -0
- package/attachment/vision-fit.js.map +1 -0
- package/channel/AgentChannelsPanel.d.ts.map +1 -1
- package/channel/AgentChannelsPanel.js +21 -2
- package/channel/AgentChannelsPanel.js.map +1 -1
- package/channel/ChannelConversationsDialog.d.ts +12 -4
- package/channel/ChannelConversationsDialog.d.ts.map +1 -1
- package/channel/ChannelConversationsDialog.js +18 -24
- package/channel/ChannelConversationsDialog.js.map +1 -1
- package/channel/providers.d.ts +23 -0
- package/channel/providers.d.ts.map +1 -1
- package/channel/providers.js +4 -0
- package/channel/providers.js.map +1 -1
- package/channel/useSaveAgentChannel.d.ts +5 -4
- package/channel/useSaveAgentChannel.d.ts.map +1 -1
- package/channel/useSaveAgentChannel.js +18 -4
- package/channel/useSaveAgentChannel.js.map +1 -1
- package/composer/ComposerToolbar.d.ts +1 -1
- package/composer/ComposerToolbar.d.ts.map +1 -1
- package/composer/SessionComposer.d.ts +4 -2
- package/composer/SessionComposer.d.ts.map +1 -1
- package/composer/SessionComposer.js +51 -5
- package/composer/SessionComposer.js.map +1 -1
- package/conversation/ConversationAttentionBanner.d.ts +22 -0
- package/conversation/ConversationAttentionBanner.d.ts.map +1 -0
- package/conversation/ConversationAttentionBanner.js +25 -0
- package/conversation/ConversationAttentionBanner.js.map +1 -0
- package/conversation/ConversationComposer.d.ts +41 -0
- package/conversation/ConversationComposer.d.ts.map +1 -0
- package/conversation/ConversationComposer.js +57 -0
- package/conversation/ConversationComposer.js.map +1 -0
- package/conversation/ConversationControlBanner.d.ts +52 -0
- package/conversation/ConversationControlBanner.d.ts.map +1 -0
- package/conversation/ConversationControlBanner.js +59 -0
- package/conversation/ConversationControlBanner.js.map +1 -0
- package/conversation/ConversationListPane.d.ts +68 -0
- package/conversation/ConversationListPane.d.ts.map +1 -0
- package/conversation/ConversationListPane.js +120 -0
- package/conversation/ConversationListPane.js.map +1 -0
- package/conversation/ConversationTimelineView.d.ts +46 -0
- package/conversation/ConversationTimelineView.d.ts.map +1 -0
- package/conversation/ConversationTimelineView.js +166 -0
- package/conversation/ConversationTimelineView.js.map +1 -0
- package/conversation/ConversationsWorkbench.d.ts +63 -0
- package/conversation/ConversationsWorkbench.d.ts.map +1 -0
- package/conversation/ConversationsWorkbench.js +165 -0
- package/conversation/ConversationsWorkbench.js.map +1 -0
- package/conversation/conversationPresentation.d.ts +137 -0
- package/conversation/conversationPresentation.d.ts.map +1 -0
- package/conversation/conversationPresentation.js +230 -0
- package/conversation/conversationPresentation.js.map +1 -0
- package/conversation/index.d.ts +26 -0
- package/conversation/index.d.ts.map +1 -0
- package/conversation/index.js +14 -0
- package/conversation/index.js.map +1 -0
- package/conversation/polling.d.ts +39 -0
- package/conversation/polling.d.ts.map +1 -0
- package/conversation/polling.js +39 -0
- package/conversation/polling.js.map +1 -0
- package/conversation/useConversation.d.ts +61 -0
- package/conversation/useConversation.d.ts.map +1 -0
- package/conversation/useConversation.js +153 -0
- package/conversation/useConversation.js.map +1 -0
- package/conversation/useConversationList.d.ts +98 -0
- package/conversation/useConversationList.d.ts.map +1 -0
- package/conversation/useConversationList.js +200 -0
- package/conversation/useConversationList.js.map +1 -0
- package/conversation/useConversationParticipation.d.ts +63 -0
- package/conversation/useConversationParticipation.d.ts.map +1 -0
- package/conversation/useConversationParticipation.js +84 -0
- package/conversation/useConversationParticipation.js.map +1 -0
- package/conversation/useConversationTimeline.d.ts +71 -0
- package/conversation/useConversationTimeline.d.ts.map +1 -0
- package/conversation/useConversationTimeline.js +152 -0
- package/conversation/useConversationTimeline.js.map +1 -0
- package/conversation/useConversationsWantsHumanCount.d.ts +42 -0
- package/conversation/useConversationsWantsHumanCount.d.ts.map +1 -0
- package/conversation/useConversationsWantsHumanCount.js +40 -0
- package/conversation/useConversationsWantsHumanCount.js.map +1 -0
- package/index.d.ts +6 -2
- package/index.d.ts.map +1 -1
- package/index.js +11 -2
- package/index.js.map +1 -1
- package/internal/tooltip.d.ts.map +1 -1
- package/internal/tooltip.js +7 -1
- package/internal/tooltip.js.map +1 -1
- package/internal/useAutoScroll.d.ts +25 -4
- package/internal/useAutoScroll.d.ts.map +1 -1
- package/internal/useAutoScroll.js +55 -15
- package/internal/useAutoScroll.js.map +1 -1
- package/internal/useFetch.d.ts.map +1 -1
- package/internal/useFetch.js +14 -4
- package/internal/useFetch.js.map +1 -1
- package/models/ModelSelector.d.ts +24 -5
- package/models/ModelSelector.d.ts.map +1 -1
- package/models/ModelSelector.js +31 -9
- package/models/ModelSelector.js.map +1 -1
- package/models/registry.d.ts +3 -2
- package/models/registry.d.ts.map +1 -1
- package/models/registry.js.map +1 -1
- package/models/service-tier.d.ts +1 -1
- package/models/service-tier.d.ts.map +1 -1
- package/models/service-tier.js +1 -1
- package/models/service-tier.js.map +1 -1
- package/package.json +4 -4
- package/schedule/ScheduleDetailView.js +1 -1
- package/schedule/ScheduleDetailView.js.map +1 -1
- package/schedule/ScheduleForm.d.ts.map +1 -1
- package/schedule/ScheduleForm.js +7 -6
- package/schedule/ScheduleForm.js.map +1 -1
- package/sharing/useSaveAgentShare.d.ts +10 -1
- package/sharing/useSaveAgentShare.d.ts.map +1 -1
- package/sharing/useSaveAgentShare.js +9 -0
- package/sharing/useSaveAgentShare.js.map +1 -1
- package/sidebar/WorkspaceSidebar.d.ts +12 -4
- package/sidebar/WorkspaceSidebar.d.ts.map +1 -1
- package/sidebar/WorkspaceSidebar.js +19 -7
- package/sidebar/WorkspaceSidebar.js.map +1 -1
- package/src/attachment/AttachmentChipList.tsx +45 -1
- package/src/attachment/__tests__/AttachmentChipList.test.tsx +103 -0
- package/src/attachment/__tests__/attachment-utils.test.ts +54 -0
- package/src/attachment/__tests__/clipboard.test.ts +110 -0
- package/src/attachment/__tests__/prepare-image.browser.test.ts +166 -0
- package/src/attachment/__tests__/prepare-image.test.ts +32 -0
- package/src/attachment/__tests__/vision-fit.test.ts +93 -0
- package/src/attachment/attachment-utils.ts +27 -0
- package/src/attachment/clipboard.ts +102 -0
- package/src/attachment/index.ts +13 -0
- package/src/attachment/prepare-image.ts +179 -0
- package/src/attachment/useAttachments.ts +26 -2
- package/src/attachment/vision-fit.ts +90 -0
- package/src/channel/AgentChannelsPanel.tsx +33 -2
- package/src/channel/ChannelConversationsDialog.tsx +22 -25
- package/src/channel/__tests__/AgentChannelsPanel.test.tsx +36 -5
- package/src/channel/__tests__/ChannelConversationsDialog.test.tsx +38 -1
- package/src/channel/__tests__/useSaveAgentChannel.test.tsx +26 -0
- package/src/channel/providers.ts +27 -0
- package/src/channel/useSaveAgentChannel.ts +18 -4
- package/src/composer/ComposerToolbar.tsx +1 -1
- package/src/composer/SessionComposer.tsx +75 -6
- package/src/composer/__tests__/SessionComposer-paste.test.tsx +263 -0
- package/src/composer/__tests__/SessionComposer-serviceTier.test.tsx +4 -3
- package/src/composer/__tests__/SessionComposer-uploadGate.test.tsx +239 -0
- package/src/conversation/ConversationAttentionBanner.tsx +77 -0
- package/src/conversation/ConversationComposer.tsx +156 -0
- package/src/conversation/ConversationControlBanner.tsx +193 -0
- package/src/conversation/ConversationListPane.tsx +459 -0
- package/src/conversation/ConversationTimelineView.tsx +435 -0
- package/src/conversation/ConversationsWorkbench.tsx +378 -0
- package/src/conversation/__tests__/ConversationAttentionBanner.test.tsx +82 -0
- package/src/conversation/__tests__/ConversationComposer.test.tsx +160 -0
- package/src/conversation/__tests__/ConversationControlBanner.test.tsx +190 -0
- package/src/conversation/__tests__/ConversationListPane.test.tsx +372 -0
- package/src/conversation/__tests__/ConversationTimelineView.layout.test.tsx +160 -0
- package/src/conversation/__tests__/ConversationTimelineView.test.tsx +405 -0
- package/src/conversation/__tests__/ConversationsWorkbench.test.tsx +860 -0
- package/src/conversation/__tests__/a11y/conversation-surfaces.a11y.test.tsx +235 -0
- package/src/conversation/__tests__/a11y/harness.tsx +100 -0
- package/src/conversation/__tests__/conversation-tooltips.layout.test.tsx +167 -0
- package/src/conversation/__tests__/conversationPollingComposition.test.tsx +138 -0
- package/src/conversation/__tests__/conversationPresentation.test.ts +289 -0
- package/src/conversation/__tests__/useConversation.test.tsx +243 -0
- package/src/conversation/__tests__/useConversationList.test.tsx +492 -0
- package/src/conversation/__tests__/useConversationParticipation.test.tsx +190 -0
- package/src/conversation/__tests__/useConversationTimeline.test.tsx +258 -0
- package/src/conversation/__tests__/useConversationsWantsHumanCount.test.tsx +102 -0
- package/src/conversation/conversationPresentation.ts +305 -0
- package/src/conversation/index.ts +80 -0
- package/src/conversation/polling.ts +41 -0
- package/src/conversation/useConversation.ts +221 -0
- package/src/conversation/useConversationList.ts +328 -0
- package/src/conversation/useConversationParticipation.ts +178 -0
- package/src/conversation/useConversationTimeline.ts +244 -0
- package/src/conversation/useConversationsWantsHumanCount.ts +86 -0
- package/src/index.ts +78 -1
- package/src/internal/__tests__/fake-timer-slices.ts +29 -0
- package/src/internal/__tests__/useAutoScroll.layout.test.tsx +143 -0
- package/src/internal/__tests__/useAutoScroll.test.tsx +62 -5
- package/src/internal/__tests__/useFetch-poll-under-render-pressure.test.tsx +79 -0
- package/src/internal/tooltip.tsx +6 -1
- package/src/internal/useAutoScroll.ts +66 -20
- package/src/internal/useFetch.ts +15 -4
- package/src/models/ModelSelector.tsx +81 -49
- package/src/models/__tests__/ModelSelector-serviceTier.test.tsx +105 -21
- package/src/models/registry.ts +3 -2
- package/src/models/service-tier.ts +1 -1
- package/src/schedule/ScheduleDetailView.tsx +1 -1
- package/src/schedule/ScheduleForm.tsx +7 -6
- package/src/schedule/__tests__/scheduleCreation.test.tsx +2 -2
- package/src/sharing/__tests__/useSaveAgentShare.test.tsx +55 -1
- package/src/sharing/__tests__/useShareToolReadiness.test.tsx +1 -0
- package/src/sharing/useSaveAgentShare.ts +19 -1
- package/src/sidebar/WorkspaceSidebar.tsx +62 -3
- package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +56 -1
- package/styles.css +1 -1
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
LayoutDashboard,
|
|
7
7
|
Library,
|
|
8
8
|
MessageSquare,
|
|
9
|
+
MessagesSquare,
|
|
9
10
|
Workflow,
|
|
10
11
|
type LucideIcon,
|
|
11
12
|
} from "lucide-react";
|
|
@@ -29,7 +30,11 @@ import type { RenderSidebarLink } from "./types.js";
|
|
|
29
30
|
// ---------------------------------------------------------------------------
|
|
30
31
|
|
|
31
32
|
/** Primary navigation destinations in the workspace sidebar. */
|
|
32
|
-
export type WorkspaceNavId =
|
|
33
|
+
export type WorkspaceNavId =
|
|
34
|
+
| "new-session"
|
|
35
|
+
| "dashboard"
|
|
36
|
+
| "conversations"
|
|
37
|
+
| "library";
|
|
33
38
|
|
|
34
39
|
/**
|
|
35
40
|
* Recent-activity data for the sidebar's Recents section — the return
|
|
@@ -66,6 +71,14 @@ export interface WorkspaceSidebarProps {
|
|
|
66
71
|
* timestamp column, inside the row.
|
|
67
72
|
*/
|
|
68
73
|
readonly renderEntryAccessory?: (entry: RecentActivityEntry) => ReactNode;
|
|
74
|
+
/**
|
|
75
|
+
* Count for the Conversations row's badge: how many conversations
|
|
76
|
+
* want a human right now (`useConversationsWantsHumanCount`). Data as
|
|
77
|
+
* props per the chrome contract — hosts fetch, deterministic hosts
|
|
78
|
+
* (tours) pass a fixture or omit. Hidden at `0`/omitted; the display
|
|
79
|
+
* caps at "99+" while the accessible name keeps the real number.
|
|
80
|
+
*/
|
|
81
|
+
readonly conversationsBadgeCount?: number;
|
|
69
82
|
/** Footer content — typically the host app's `UserMenu` wrapper. */
|
|
70
83
|
readonly footer: ReactNode;
|
|
71
84
|
/** Reflected as `aria-expanded` on the collapse toggle. @default true */
|
|
@@ -85,8 +98,8 @@ export interface WorkspaceSidebarProps {
|
|
|
85
98
|
|
|
86
99
|
/**
|
|
87
100
|
* The console's workspace-zone sidebar: org switcher, primary navigation
|
|
88
|
-
* (New Session / Dashboard / Library), time-bucketed
|
|
89
|
-
* and a user footer.
|
|
101
|
+
* (New Session / Dashboard / Conversations / Library), time-bucketed
|
|
102
|
+
* recent activity, and a user footer.
|
|
90
103
|
*
|
|
91
104
|
* This is the same component the Stigmer web console and desktop app
|
|
92
105
|
* render — hosts differ only in what they return from `renderLink`
|
|
@@ -117,6 +130,7 @@ export function WorkspaceSidebar({
|
|
|
117
130
|
activeSessionId = null,
|
|
118
131
|
activeExecutionId = null,
|
|
119
132
|
renderEntryAccessory,
|
|
133
|
+
conversationsBadgeCount,
|
|
120
134
|
footer,
|
|
121
135
|
isOpen = true,
|
|
122
136
|
onCollapse,
|
|
@@ -154,6 +168,22 @@ export function WorkspaceSidebar({
|
|
|
154
168
|
active={activeNav === "dashboard"}
|
|
155
169
|
renderLink={renderLink}
|
|
156
170
|
/>
|
|
171
|
+
{/* MessagesSquare, deliberately not MessageSquare — the singular
|
|
172
|
+
mark is the session glyph in Recents, and the two areas must
|
|
173
|
+
not read as one. */}
|
|
174
|
+
<PrimaryNavRow
|
|
175
|
+
id="conversations"
|
|
176
|
+
href="/conversations"
|
|
177
|
+
label="Conversations"
|
|
178
|
+
icon={MessagesSquare}
|
|
179
|
+
active={activeNav === "conversations"}
|
|
180
|
+
renderLink={renderLink}
|
|
181
|
+
accessory={
|
|
182
|
+
conversationsBadgeCount !== undefined && conversationsBadgeCount > 0 ? (
|
|
183
|
+
<WantsHumanBadge count={conversationsBadgeCount} />
|
|
184
|
+
) : null
|
|
185
|
+
}
|
|
186
|
+
/>
|
|
157
187
|
<PrimaryNavRow
|
|
158
188
|
id="library"
|
|
159
189
|
href="/library"
|
|
@@ -204,6 +234,7 @@ function PrimaryNavRow({
|
|
|
204
234
|
icon: Icon,
|
|
205
235
|
active,
|
|
206
236
|
renderLink,
|
|
237
|
+
accessory = null,
|
|
207
238
|
}: {
|
|
208
239
|
readonly id: WorkspaceNavId;
|
|
209
240
|
readonly href: string;
|
|
@@ -211,6 +242,8 @@ function PrimaryNavRow({
|
|
|
211
242
|
readonly icon: LucideIcon;
|
|
212
243
|
readonly active: boolean;
|
|
213
244
|
readonly renderLink: RenderSidebarLink;
|
|
245
|
+
/** Trailing row content (e.g. the Conversations count pill). */
|
|
246
|
+
readonly accessory?: ReactNode;
|
|
214
247
|
}) {
|
|
215
248
|
return (
|
|
216
249
|
<div className="flex-none px-3 py-1">
|
|
@@ -224,6 +257,7 @@ function PrimaryNavRow({
|
|
|
224
257
|
<>
|
|
225
258
|
<Icon className="size-4 shrink-0" />
|
|
226
259
|
{label}
|
|
260
|
+
{accessory}
|
|
227
261
|
</>
|
|
228
262
|
),
|
|
229
263
|
})}
|
|
@@ -231,6 +265,31 @@ function PrimaryNavRow({
|
|
|
231
265
|
);
|
|
232
266
|
}
|
|
233
267
|
|
|
268
|
+
/**
|
|
269
|
+
* The Conversations row's count pill: how many conversations want a
|
|
270
|
+
* human right now (DD-011 D-f — `needs_attention` OR awaiting-reply
|
|
271
|
+
* while human-held). The visible number caps at "99+"; the accessible
|
|
272
|
+
* name states the meaning with the real number, because a bare "104"
|
|
273
|
+
* read aloud after "Conversations" says nothing.
|
|
274
|
+
*/
|
|
275
|
+
function WantsHumanBadge({ count }: { readonly count: number }) {
|
|
276
|
+
return (
|
|
277
|
+
<span className="ml-auto flex shrink-0 items-center">
|
|
278
|
+
<span
|
|
279
|
+
aria-hidden="true"
|
|
280
|
+
className="bg-sidebar-primary text-sidebar-primary-foreground rounded-full px-1.5 py-0.5 text-[10px] leading-none font-semibold tabular-nums"
|
|
281
|
+
>
|
|
282
|
+
{count > 99 ? "99+" : count}
|
|
283
|
+
</span>
|
|
284
|
+
<span className="sr-only">
|
|
285
|
+
{count === 1
|
|
286
|
+
? "1 conversation needs a human"
|
|
287
|
+
: `${count} conversations need a human`}
|
|
288
|
+
</span>
|
|
289
|
+
</span>
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
|
|
234
293
|
function ActivityGroupList({
|
|
235
294
|
groups,
|
|
236
295
|
activeSessionId,
|
|
@@ -109,14 +109,69 @@ function baseProps() {
|
|
|
109
109
|
};
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
+
describe("WorkspaceSidebar — Conversations badge (channel-conversations DD-011 D-f)", () => {
|
|
113
|
+
const conversationsRow = (container: HTMLElement) =>
|
|
114
|
+
container.querySelector<HTMLAnchorElement>('[data-row-id="conversations"]')!;
|
|
115
|
+
|
|
116
|
+
it("shows the wants-human count on the Conversations row with a meaning-stating accessible name", () => {
|
|
117
|
+
const { container } = renderSidebar(
|
|
118
|
+
<WorkspaceSidebar {...baseProps()} conversationsBadgeCount={3} />,
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
const row = conversationsRow(container);
|
|
122
|
+
expect(within(row).getByText("3")).toBeDefined();
|
|
123
|
+
expect(within(row).getByText("3 conversations need a human")).toBeDefined();
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it("speaks the singular for one conversation", () => {
|
|
127
|
+
const { container } = renderSidebar(
|
|
128
|
+
<WorkspaceSidebar {...baseProps()} conversationsBadgeCount={1} />,
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
expect(
|
|
132
|
+
within(conversationsRow(container)).getByText("1 conversation needs a human"),
|
|
133
|
+
).toBeDefined();
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it("hides the badge at zero and when the host passes no count", () => {
|
|
137
|
+
const { container } = renderSidebar(
|
|
138
|
+
<WorkspaceSidebar {...baseProps()} conversationsBadgeCount={0} />,
|
|
139
|
+
);
|
|
140
|
+
expect(
|
|
141
|
+
within(conversationsRow(container)).queryByText(/need(s)? a human/),
|
|
142
|
+
).toBeNull();
|
|
143
|
+
|
|
144
|
+
cleanup();
|
|
145
|
+
|
|
146
|
+
const { container: without } = renderSidebar(
|
|
147
|
+
<WorkspaceSidebar {...baseProps()} />,
|
|
148
|
+
);
|
|
149
|
+
expect(
|
|
150
|
+
within(conversationsRow(without)).queryByText(/need(s)? a human/),
|
|
151
|
+
).toBeNull();
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
it("caps the visible number at 99+ while the accessible name keeps the real count", () => {
|
|
155
|
+
const { container } = renderSidebar(
|
|
156
|
+
<WorkspaceSidebar {...baseProps()} conversationsBadgeCount={104} />,
|
|
157
|
+
);
|
|
158
|
+
|
|
159
|
+
const row = conversationsRow(container);
|
|
160
|
+
expect(within(row).getByText("99+")).toBeDefined();
|
|
161
|
+
expect(within(row).queryByText("104")).toBeNull();
|
|
162
|
+
expect(within(row).getByText("104 conversations need a human")).toBeDefined();
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
|
|
112
166
|
describe("WorkspaceSidebar — primary navigation", () => {
|
|
113
|
-
it("renders the
|
|
167
|
+
it("renders the four primary rows through renderLink with stable ids and hrefs", () => {
|
|
114
168
|
const { container } = renderSidebar(<WorkspaceSidebar {...baseProps()} />);
|
|
115
169
|
|
|
116
170
|
const row = (id: string) =>
|
|
117
171
|
container.querySelector<HTMLAnchorElement>(`[data-row-id="${id}"]`);
|
|
118
172
|
expect(row("new-session")?.getAttribute("href")).toBe("/");
|
|
119
173
|
expect(row("dashboard")?.getAttribute("href")).toBe("/dashboard");
|
|
174
|
+
expect(row("conversations")?.getAttribute("href")).toBe("/conversations");
|
|
120
175
|
expect(row("library")?.getAttribute("href")).toBe("/library");
|
|
121
176
|
});
|
|
122
177
|
|