@arbidocs/react 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,14 +1,14 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkBXP6S34V_cjs = require('./chunk-BXP6S34V.cjs');
4
- var chunkOU2QLIKS_cjs = require('./chunk-OU2QLIKS.cjs');
4
+ var chunkORKGCXG3_cjs = require('./chunk-ORKGCXG3.cjs');
5
5
  var chunkRZQACYNQ_cjs = require('./chunk-RZQACYNQ.cjs');
6
6
  var chunk7IOCMCC5_cjs = require('./chunk-7IOCMCC5.cjs');
7
7
  var React = require('react');
8
8
  var reactQuery = require('@tanstack/react-query');
9
+ var lucideReact = require('lucide-react');
9
10
  var jsxRuntime = require('react/jsx-runtime');
10
11
  var browser = require('@arbidocs/sdk/browser');
11
- var lucideReact = require('lucide-react');
12
12
  var client = require('@arbidocs/client');
13
13
  var zustand = require('zustand');
14
14
  var diff = require('diff');
@@ -25,566 +25,6 @@ var React__default = /*#__PURE__*/_interopDefault(React);
25
25
  var ReactMarkdown__default = /*#__PURE__*/_interopDefault(ReactMarkdown);
26
26
  var Cropper__default = /*#__PURE__*/_interopDefault(Cropper);
27
27
 
28
- // src/chat/styles.ts
29
- var DEFAULT_THEME = {
30
- primaryColor: "#00adef",
31
- backgroundColor: "#ffffff",
32
- surfaceColor: "#f9fafb",
33
- textColor: "#111827",
34
- mutedColor: "#6b7280",
35
- borderColor: "#e5e7eb",
36
- userBubbleColor: "#f3f4f6",
37
- userBubbleTextColor: "#111827",
38
- assistantBubbleColor: "rgba(0, 173, 239, 0.08)",
39
- assistantBubbleTextColor: "#111827",
40
- borderRadius: "8px",
41
- fontFamily: "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif"
42
- };
43
- var DEFAULT_LABELS = {
44
- title: "Chat",
45
- email: "Email",
46
- password: "Password",
47
- loginButton: "Log in",
48
- loginButtonLoading: "Logging in...",
49
- registerButton: "Create account",
50
- sendCodeButton: "Email me a code",
51
- haveCodeButton: "I have an invitation code",
52
- verificationCode: "Verification code",
53
- confirmPassword: "Confirm password",
54
- firstName: "First name",
55
- lastName: "Last name",
56
- switchToRegister: "Create account",
57
- switchToLogin: "Back to login",
58
- selectWorkspace: "Select a workspace",
59
- workspacePlaceholder: "Choose...",
60
- continueButton: "Continue",
61
- createWorkspace: "Create new workspace",
62
- workspaceName: "Workspace name",
63
- createButton: "Create",
64
- changeWorkspace: "Change workspace",
65
- documents: "Documents",
66
- sendButton: "Send",
67
- placeholder: "Ask a question...",
68
- uploadButton: "Upload",
69
- uploading: "Uploading...",
70
- emptyNoDocs: "No documents found in this workspace.",
71
- emptyNoSelection: "Select at least one document to start chatting.",
72
- emptyReady: "Ask a question about your documents."
73
- };
74
- function getTheme(partial) {
75
- return { ...DEFAULT_THEME, ...partial };
76
- }
77
- function getLabels(partial) {
78
- return { ...DEFAULT_LABELS, ...partial };
79
- }
80
- function containerStyle(theme, width, height) {
81
- return {
82
- width: typeof width === "number" ? `${width}px` : width,
83
- height: typeof height === "number" ? `${height}px` : height,
84
- display: "flex",
85
- flexDirection: "column",
86
- fontFamily: theme.fontFamily,
87
- fontSize: "14px",
88
- lineHeight: "1.5",
89
- color: theme.textColor,
90
- backgroundColor: theme.backgroundColor,
91
- border: `1px solid ${theme.borderColor}`,
92
- borderRadius: theme.borderRadius,
93
- overflow: "hidden",
94
- boxSizing: "border-box"
95
- };
96
- }
97
- function headerStyle(theme) {
98
- return {
99
- display: "flex",
100
- alignItems: "center",
101
- padding: "12px 16px",
102
- fontWeight: 600,
103
- fontSize: "15px",
104
- borderBottom: `1px solid ${theme.borderColor}`,
105
- flexShrink: 0
106
- };
107
- }
108
- function bodyStyle() {
109
- return {
110
- flex: 1,
111
- display: "flex",
112
- flexDirection: "column",
113
- overflow: "hidden"
114
- };
115
- }
116
- function formContainerStyle() {
117
- return {
118
- flex: 1,
119
- display: "flex",
120
- flexDirection: "column",
121
- justifyContent: "center",
122
- padding: "24px 16px",
123
- gap: "12px"
124
- };
125
- }
126
- function labelStyle(theme) {
127
- return {
128
- fontSize: "13px",
129
- fontWeight: 500,
130
- color: theme.textColor,
131
- marginBottom: "4px"
132
- };
133
- }
134
- function inputStyle(theme) {
135
- return {
136
- width: "100%",
137
- padding: "8px 12px",
138
- fontSize: "14px",
139
- fontFamily: theme.fontFamily,
140
- color: theme.textColor,
141
- backgroundColor: theme.backgroundColor,
142
- border: `1px solid ${theme.borderColor}`,
143
- borderRadius: "8px",
144
- outline: "none",
145
- boxSizing: "border-box"
146
- };
147
- }
148
- function selectStyle(theme) {
149
- return {
150
- ...inputStyle(theme),
151
- cursor: "pointer",
152
- appearance: "auto"
153
- };
154
- }
155
- function buttonStyle(theme, disabled) {
156
- return {
157
- padding: "8px 16px",
158
- fontSize: "14px",
159
- fontWeight: 500,
160
- fontFamily: theme.fontFamily,
161
- color: "#ffffff",
162
- backgroundColor: disabled ? theme.mutedColor : theme.primaryColor,
163
- border: "none",
164
- borderRadius: "8px",
165
- cursor: disabled ? "not-allowed" : "pointer",
166
- opacity: disabled ? 0.6 : 1,
167
- transition: "opacity 150ms"
168
- };
169
- }
170
- function errorStyle() {
171
- return {
172
- fontSize: "13px",
173
- color: "#ef4444",
174
- margin: "4px 0 0"
175
- };
176
- }
177
- function messagesContainerStyle() {
178
- return {
179
- flex: 1,
180
- overflowY: "auto",
181
- padding: "12px 16px",
182
- display: "flex",
183
- flexDirection: "column",
184
- gap: "8px"
185
- };
186
- }
187
- function messageBubbleStyle(theme, role) {
188
- const isUser = role === "user";
189
- return {
190
- maxWidth: "85%",
191
- padding: "8px 12px",
192
- borderRadius: "12px",
193
- fontSize: "14px",
194
- lineHeight: "1.5",
195
- wordBreak: "break-word",
196
- whiteSpace: "pre-wrap",
197
- alignSelf: isUser ? "flex-end" : "flex-start",
198
- backgroundColor: isUser ? theme.userBubbleColor : theme.assistantBubbleColor,
199
- color: isUser ? theme.userBubbleTextColor : theme.assistantBubbleTextColor
200
- };
201
- }
202
- function inputBarStyle(theme) {
203
- return {
204
- display: "flex",
205
- gap: "8px",
206
- padding: "12px 16px",
207
- borderTop: `1px solid ${theme.borderColor}`,
208
- flexShrink: 0
209
- };
210
- }
211
- function chatInputStyle(theme) {
212
- return {
213
- ...inputStyle(theme),
214
- flex: 1
215
- };
216
- }
217
- function sendButtonStyle(theme, disabled) {
218
- return {
219
- ...buttonStyle(theme, disabled),
220
- padding: "8px 14px",
221
- flexShrink: 0
222
- };
223
- }
224
- function docSelectorStyle(theme) {
225
- return {
226
- padding: "8px 16px",
227
- borderBottom: `1px solid ${theme.borderColor}`,
228
- flexShrink: 0
229
- };
230
- }
231
- function docToggleStyle(theme) {
232
- return {
233
- display: "flex",
234
- alignItems: "center",
235
- gap: "6px",
236
- fontSize: "13px",
237
- fontWeight: 500,
238
- color: theme.mutedColor,
239
- cursor: "pointer",
240
- background: "none",
241
- border: "none",
242
- padding: 0,
243
- fontFamily: theme.fontFamily
244
- };
245
- }
246
- function docListStyle() {
247
- return {
248
- marginTop: "6px",
249
- display: "flex",
250
- flexDirection: "column",
251
- gap: "4px",
252
- maxHeight: "120px",
253
- overflowY: "auto"
254
- };
255
- }
256
- function docItemStyle(theme) {
257
- return {
258
- display: "flex",
259
- alignItems: "center",
260
- gap: "6px",
261
- fontSize: "13px",
262
- color: theme.textColor,
263
- cursor: "pointer",
264
- textAlign: "left"
265
- };
266
- }
267
- function emptyStateStyle(theme) {
268
- return {
269
- flex: 1,
270
- display: "flex",
271
- alignItems: "center",
272
- justifyContent: "center",
273
- color: theme.mutedColor,
274
- fontSize: "13px",
275
- padding: "24px",
276
- textAlign: "center"
277
- };
278
- }
279
- function loadingContainerStyle() {
280
- return {
281
- flex: 1,
282
- display: "flex",
283
- alignItems: "center",
284
- justifyContent: "center",
285
- gap: "8px",
286
- fontSize: "13px"
287
- };
288
- }
289
- function brandingStyle(theme) {
290
- return {
291
- display: "flex",
292
- alignItems: "center",
293
- justifyContent: "center",
294
- gap: "4px",
295
- padding: "6px 16px",
296
- fontSize: "11px",
297
- color: theme.mutedColor,
298
- borderTop: `1px solid ${theme.borderColor}`,
299
- flexShrink: 0,
300
- userSelect: "none"
301
- };
302
- }
303
- function brandingLinkStyle(theme) {
304
- return {
305
- color: theme.mutedColor,
306
- fontWeight: 600,
307
- textDecoration: "none"
308
- };
309
- }
310
- function linkButtonStyle(theme) {
311
- return {
312
- background: "none",
313
- border: "none",
314
- padding: 0,
315
- fontSize: "13px",
316
- color: theme.primaryColor,
317
- cursor: "pointer",
318
- fontFamily: theme.fontFamily,
319
- textDecoration: "underline"
320
- };
321
- }
322
- function secondaryButtonStyle(theme, disabled) {
323
- return {
324
- padding: "4px 10px",
325
- fontSize: "12px",
326
- fontWeight: 500,
327
- fontFamily: theme.fontFamily,
328
- color: disabled ? theme.mutedColor : theme.primaryColor,
329
- backgroundColor: "transparent",
330
- border: `1px solid ${disabled ? theme.borderColor : theme.primaryColor}`,
331
- borderRadius: "6px",
332
- cursor: disabled ? "not-allowed" : "pointer",
333
- opacity: disabled ? 0.6 : 1,
334
- transition: "opacity 150ms",
335
- whiteSpace: "nowrap"
336
- };
337
- }
338
- function fileInputStyle() {
339
- return { display: "none" };
340
- }
341
- function agentStatusStyle(theme) {
342
- return {
343
- fontSize: "12px",
344
- color: theme.mutedColor,
345
- fontStyle: "italic",
346
- padding: "4px 0",
347
- alignSelf: "flex-start"
348
- };
349
- }
350
- function AuthScreen({ theme, labels, onLogin }) {
351
- const arbi = chunk7IOCMCC5_cjs.useArbi();
352
- const [mode, setMode] = React.useState("login");
353
- const [step, setStep] = React.useState("email");
354
- const [email, setEmail] = React.useState("");
355
- const [password, setPassword] = React.useState("");
356
- const [confirmPw, setConfirmPw] = React.useState("");
357
- const [code, setCode] = React.useState("");
358
- const [firstName, setFirstName] = React.useState("");
359
- const [lastName, setLastName] = React.useState("");
360
- const [loading, setLoading] = React.useState(false);
361
- const [error, setError] = React.useState("");
362
- const resetForm = () => {
363
- setPassword("");
364
- setConfirmPw("");
365
- setCode("");
366
- setFirstName("");
367
- setLastName("");
368
- setError("");
369
- setStep("email");
370
- };
371
- const switchMode = (next) => {
372
- resetForm();
373
- setMode(next);
374
- };
375
- const handleLogin = async (e) => {
376
- e.preventDefault();
377
- setLoading(true);
378
- setError("");
379
- try {
380
- await arbi.login(email, password);
381
- onLogin();
382
- } catch (err) {
383
- setError(err instanceof Error ? err.message : "Login failed");
384
- } finally {
385
- setLoading(false);
386
- }
387
- };
388
- const handleHaveCode = () => {
389
- setError("");
390
- setStep("verify");
391
- };
392
- const handleEmailCode = async () => {
393
- if (!email) return;
394
- setLoading(true);
395
- setError("");
396
- try {
397
- await arbi.requestVerification(email);
398
- setStep("verify");
399
- } catch (err) {
400
- setError(err instanceof Error ? err.message : "Failed to send verification code");
401
- } finally {
402
- setLoading(false);
403
- }
404
- };
405
- const handleRegister = async (e) => {
406
- e.preventDefault();
407
- if (password !== confirmPw) {
408
- setError("Passwords do not match");
409
- return;
410
- }
411
- setLoading(true);
412
- setError("");
413
- try {
414
- await arbi.register({ email, password, verificationCode: code, firstName, lastName });
415
- await arbi.login(email, password);
416
- onLogin();
417
- } catch (err) {
418
- setError(err instanceof Error ? err.message : "Registration failed");
419
- } finally {
420
- setLoading(false);
421
- }
422
- };
423
- if (mode === "login") {
424
- return /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: handleLogin, style: formContainerStyle(), children: [
425
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
426
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: labelStyle(theme), children: labels.email }),
427
- /* @__PURE__ */ jsxRuntime.jsx(
428
- "input",
429
- {
430
- type: "email",
431
- value: email,
432
- onChange: (e) => setEmail(e.target.value),
433
- placeholder: "you@example.com",
434
- autoComplete: "email",
435
- required: true,
436
- style: inputStyle(theme)
437
- }
438
- )
439
- ] }),
440
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
441
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: labelStyle(theme), children: labels.password }),
442
- /* @__PURE__ */ jsxRuntime.jsx(
443
- "input",
444
- {
445
- type: "password",
446
- value: password,
447
- onChange: (e) => setPassword(e.target.value),
448
- autoComplete: "current-password",
449
- required: true,
450
- style: inputStyle(theme)
451
- }
452
- )
453
- ] }),
454
- /* @__PURE__ */ jsxRuntime.jsx("button", { type: "submit", disabled: loading, style: buttonStyle(theme, loading), children: loading ? labels.loginButtonLoading : labels.loginButton }),
455
- error && /* @__PURE__ */ jsxRuntime.jsx("div", { style: errorStyle(), children: error }),
456
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { textAlign: "center" }, children: /* @__PURE__ */ jsxRuntime.jsx(
457
- "button",
458
- {
459
- type: "button",
460
- onClick: () => switchMode("register"),
461
- style: linkButtonStyle(theme),
462
- children: labels.switchToRegister
463
- }
464
- ) })
465
- ] });
466
- }
467
- if (step === "email") {
468
- const noEmail = !email.trim();
469
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: formContainerStyle(), children: [
470
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
471
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: labelStyle(theme), children: labels.email }),
472
- /* @__PURE__ */ jsxRuntime.jsx(
473
- "input",
474
- {
475
- type: "email",
476
- value: email,
477
- onChange: (e) => setEmail(e.target.value),
478
- placeholder: "you@example.com",
479
- autoComplete: "email",
480
- style: inputStyle(theme)
481
- }
482
- )
483
- ] }),
484
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", gap: "8px" }, children: [
485
- /* @__PURE__ */ jsxRuntime.jsx(
486
- "button",
487
- {
488
- type: "button",
489
- onClick: handleHaveCode,
490
- disabled: noEmail,
491
- style: { ...buttonStyle(theme, noEmail), flex: 1 },
492
- children: labels.haveCodeButton
493
- }
494
- ),
495
- /* @__PURE__ */ jsxRuntime.jsx(
496
- "button",
497
- {
498
- type: "button",
499
- onClick: handleEmailCode,
500
- disabled: noEmail || loading,
501
- style: { ...buttonStyle(theme, noEmail || loading), flex: 1 },
502
- children: loading ? "..." : labels.sendCodeButton
503
- }
504
- )
505
- ] }),
506
- error && /* @__PURE__ */ jsxRuntime.jsx("div", { style: errorStyle(), children: error }),
507
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { textAlign: "center" }, children: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => switchMode("login"), style: linkButtonStyle(theme), children: labels.switchToLogin }) })
508
- ] });
509
- }
510
- return /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: handleRegister, style: formContainerStyle(), children: [
511
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", gap: "8px" }, children: [
512
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { flex: 1 }, children: [
513
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: labelStyle(theme), children: labels.firstName }),
514
- /* @__PURE__ */ jsxRuntime.jsx(
515
- "input",
516
- {
517
- type: "text",
518
- value: firstName,
519
- onChange: (e) => setFirstName(e.target.value),
520
- autoComplete: "given-name",
521
- required: true,
522
- style: inputStyle(theme)
523
- }
524
- )
525
- ] }),
526
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { flex: 1 }, children: [
527
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: labelStyle(theme), children: labels.lastName }),
528
- /* @__PURE__ */ jsxRuntime.jsx(
529
- "input",
530
- {
531
- type: "text",
532
- value: lastName,
533
- onChange: (e) => setLastName(e.target.value),
534
- autoComplete: "family-name",
535
- required: true,
536
- style: inputStyle(theme)
537
- }
538
- )
539
- ] })
540
- ] }),
541
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
542
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: labelStyle(theme), children: labels.verificationCode }),
543
- /* @__PURE__ */ jsxRuntime.jsx(
544
- "input",
545
- {
546
- type: "text",
547
- value: code,
548
- onChange: (e) => setCode(e.target.value),
549
- autoComplete: "one-time-code",
550
- required: true,
551
- style: inputStyle(theme)
552
- }
553
- )
554
- ] }),
555
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
556
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: labelStyle(theme), children: labels.password }),
557
- /* @__PURE__ */ jsxRuntime.jsx(
558
- "input",
559
- {
560
- type: "password",
561
- value: password,
562
- onChange: (e) => setPassword(e.target.value),
563
- autoComplete: "new-password",
564
- required: true,
565
- style: inputStyle(theme)
566
- }
567
- )
568
- ] }),
569
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
570
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: labelStyle(theme), children: labels.confirmPassword }),
571
- /* @__PURE__ */ jsxRuntime.jsx(
572
- "input",
573
- {
574
- type: "password",
575
- value: confirmPw,
576
- onChange: (e) => setConfirmPw(e.target.value),
577
- autoComplete: "new-password",
578
- required: true,
579
- style: inputStyle(theme)
580
- }
581
- )
582
- ] }),
583
- /* @__PURE__ */ jsxRuntime.jsx("button", { type: "submit", disabled: loading, style: buttonStyle(theme, loading), children: loading ? "..." : labels.registerButton }),
584
- error && /* @__PURE__ */ jsxRuntime.jsx("div", { style: errorStyle(), children: error }),
585
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { textAlign: "center" }, children: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => switchMode("login"), style: linkButtonStyle(theme), children: labels.switchToLogin }) })
586
- ] });
587
- }
588
28
  var arbiQueryKeys = {
589
29
  workspaces: () => ["arbi", "workspaces"],
590
30
  documents: (workspaceId) => ["arbi", "documents", workspaceId],
@@ -818,524 +258,220 @@ function useUserUsageToday(options) {
818
258
  enabled: options?.enabled ?? arbi.isLoggedIn
819
259
  });
820
260
  }
821
- function WorkspaceScreen({ theme, labels, onSelect }) {
822
- const arbi = chunk7IOCMCC5_cjs.useArbi();
823
- const { data: workspaces, isLoading } = useWorkspaces();
824
- const [mode, setMode] = React.useState("select");
825
- const [selected, setSelected] = React.useState("");
826
- const [newName, setNewName] = React.useState("");
827
- const [loading, setLoading] = React.useState(false);
828
- const [error, setError] = React.useState("");
829
- if (isLoading) {
830
- return /* @__PURE__ */ jsxRuntime.jsx("div", { style: loadingContainerStyle(), children: "Loading workspaces..." });
831
- }
832
- const handleConfirm = async () => {
833
- if (!selected) return;
834
- setLoading(true);
835
- setError("");
836
- try {
837
- await arbi.selectWorkspace(selected);
838
- onSelect(selected);
839
- } catch (err) {
840
- setError(err instanceof Error ? err.message : "Failed to select workspace");
841
- } finally {
842
- setLoading(false);
843
- }
844
- };
845
- const handleCreate = async () => {
846
- const name = newName.trim();
847
- if (!name) return;
848
- setLoading(true);
849
- setError("");
850
- try {
851
- const projects = await arbi.projects.list();
852
- const projectExtId = projects[0]?.external_id;
853
- if (!projectExtId) {
854
- throw new Error("No project available; create one before adding a workspace");
855
- }
856
- const ws = await arbi.workspaces.create(name, projectExtId);
857
- await arbi.selectWorkspace(ws.external_id);
858
- onSelect(ws.external_id);
859
- } catch (err) {
860
- setError(err instanceof Error ? err.message : "Failed to create workspace");
861
- } finally {
862
- setLoading(false);
863
- }
864
- };
865
- if (mode === "create") {
866
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: formContainerStyle(), children: [
867
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
868
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: labelStyle(theme), children: labels.workspaceName }),
869
- /* @__PURE__ */ jsxRuntime.jsx(
870
- "input",
871
- {
872
- type: "text",
873
- value: newName,
874
- onChange: (e) => setNewName(e.target.value),
875
- disabled: loading,
876
- style: inputStyle(theme)
877
- }
878
- )
879
- ] }),
880
- /* @__PURE__ */ jsxRuntime.jsx(
881
- "button",
882
- {
883
- type: "button",
884
- onClick: handleCreate,
885
- disabled: !newName.trim() || loading,
886
- style: buttonStyle(theme, !newName.trim() || loading),
887
- children: loading ? "..." : labels.createButton
888
- }
889
- ),
890
- error && /* @__PURE__ */ jsxRuntime.jsx("div", { style: errorStyle(), children: error }),
891
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { textAlign: "center" }, children: /* @__PURE__ */ jsxRuntime.jsx(
892
- "button",
893
- {
894
- type: "button",
895
- onClick: () => {
896
- setError("");
897
- setMode("select");
898
- },
899
- style: linkButtonStyle(theme),
900
- children: "or select existing"
901
- }
902
- ) })
903
- ] });
904
- }
905
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: formContainerStyle(), children: [
906
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
907
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: labelStyle(theme), children: labels.selectWorkspace }),
908
- /* @__PURE__ */ jsxRuntime.jsxs(
909
- "select",
910
- {
911
- value: selected,
912
- onChange: (e) => setSelected(e.target.value),
913
- disabled: loading,
914
- style: selectStyle(theme),
915
- children: [
916
- /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", disabled: true, children: labels.workspacePlaceholder }),
917
- workspaces?.map((ws) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: ws.external_id, children: ws.name }, ws.external_id))
918
- ]
919
- }
920
- )
921
- ] }),
922
- /* @__PURE__ */ jsxRuntime.jsx(
923
- "button",
924
- {
925
- type: "button",
926
- onClick: handleConfirm,
927
- disabled: !selected || loading,
928
- style: buttonStyle(theme, !selected || loading),
929
- children: loading ? "Connecting..." : labels.continueButton
930
- }
931
- ),
932
- error && /* @__PURE__ */ jsxRuntime.jsx("div", { style: errorStyle(), children: error }),
933
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { textAlign: "center" }, children: /* @__PURE__ */ jsxRuntime.jsx(
934
- "button",
935
- {
936
- type: "button",
937
- onClick: () => {
938
- setError("");
939
- setMode("create");
940
- },
941
- style: linkButtonStyle(theme),
942
- children: labels.createWorkspace
943
- }
944
- ) })
945
- ] });
946
- }
947
- var CITE_RE = /\[([^\]]+)\]\(#cite-(\d+)\)/g;
948
- function MessageBubble({ message, theme }) {
949
- const [expandedCite, setExpandedCite] = React.useState(null);
950
- const hasCitations = message.role === "assistant" && message.metadata && CITE_RE.test(message.text);
951
- CITE_RE.lastIndex = 0;
952
- const resolved = hasCitations ? browser.resolveCitations(message.metadata) : [];
953
- const summaries = hasCitations ? browser.summarizeCitations(resolved) : [];
954
- const summaryMap = new Map(summaries.map((s) => [s.citationNum, s]));
955
- const activeSummary = expandedCite ? summaryMap.get(expandedCite) : null;
956
- const activeResolved = expandedCite ? resolved.find((r) => r.citationNum === expandedCite) : null;
957
- const markdownComponents = React.useMemo(
958
- () => ({
959
- a: ({ href, children, ...props }) => {
960
- if (href?.startsWith("#cite-")) {
961
- const num = href.slice("#cite-".length);
962
- return /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
963
- children,
964
- /* @__PURE__ */ jsxRuntime.jsx(
965
- "sup",
966
- {
967
- onClick: (e) => {
968
- e.stopPropagation();
969
- setExpandedCite((prev) => prev === num ? null : num);
970
- },
971
- style: citeSupStyle(theme),
972
- title: `Citation ${num}`,
973
- children: num
974
- }
975
- )
976
- ] });
977
- }
978
- return /* @__PURE__ */ jsxRuntime.jsx(
979
- "a",
980
- {
981
- href,
982
- target: "_blank",
983
- rel: "noopener noreferrer",
984
- style: { color: theme.primaryColor },
985
- ...props,
986
- children
987
- }
988
- );
989
- }
990
- }),
991
- [theme]
992
- );
993
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
994
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: messageBubbleStyle(theme, message.role), children: /* @__PURE__ */ jsxRuntime.jsx(chunkOU2QLIKS_cjs.MarkdownRenderer, { components: markdownComponents, children: message.text }) }),
995
- activeSummary && activeResolved && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: citePanelStyle(theme), children: [
996
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: citePanelHeaderStyle(theme), children: [
997
- /* @__PURE__ */ jsxRuntime.jsxs("strong", { children: [
998
- "[",
999
- activeSummary.citationNum,
1000
- "]"
1001
- ] }),
1002
- " ",
1003
- activeSummary.docTitle,
1004
- activeSummary.pageNumber != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { color: theme.mutedColor }, children: [
1005
- " p.",
1006
- activeSummary.pageNumber
1007
- ] })
1008
- ] }),
1009
- activeResolved.chunks.map((chunk, i) => /* @__PURE__ */ jsxRuntime.jsx("div", { style: citeChunkStyle(theme), children: chunk.content }, i))
1010
- ] })
1011
- ] });
1012
- }
1013
- function citeSupStyle(theme) {
1014
- return {
1015
- display: "inline-flex",
1016
- alignItems: "center",
1017
- justifyContent: "center",
1018
- fontSize: "10px",
1019
- fontWeight: 600,
1020
- color: theme.primaryColor,
1021
- cursor: "pointer",
1022
- marginLeft: "1px",
1023
- minWidth: "14px",
1024
- lineHeight: 1
1025
- };
1026
- }
1027
- function citePanelStyle(theme) {
1028
- return {
1029
- marginTop: "4px",
1030
- padding: "8px 10px",
1031
- fontSize: "12px",
1032
- lineHeight: "1.5",
1033
- backgroundColor: theme.surfaceColor,
1034
- border: `1px solid ${theme.borderColor}`,
1035
- borderRadius: "8px",
1036
- maxWidth: "85%"
1037
- };
1038
- }
1039
- function citePanelHeaderStyle(theme) {
1040
- return {
1041
- fontSize: "12px",
1042
- fontWeight: 500,
1043
- color: theme.textColor,
1044
- marginBottom: "4px"
1045
- };
1046
- }
1047
- function citeChunkStyle(theme) {
1048
- return {
1049
- fontSize: "11px",
1050
- color: theme.mutedColor,
1051
- borderLeft: `2px solid ${theme.borderColor}`,
1052
- paddingLeft: "8px",
1053
- marginTop: "4px",
1054
- whiteSpace: "pre-wrap",
1055
- wordBreak: "break-word"
1056
- };
1057
- }
1058
- function ChatView({ workspaceId, theme, labels }) {
261
+
262
+ // src/chat/useArbiChat.ts
263
+ var counter = 0;
264
+ var nextId = (prefix) => `${prefix}-${Date.now().toString(36)}-${(counter++).toString(36)}`;
265
+ var emptyThread = () => ({
266
+ id: nextId("thread"),
267
+ title: "",
268
+ messages: [],
269
+ responseId: null
270
+ });
271
+ function titleFromQuestion(question, maxLength = 48) {
272
+ const flat = question.replace(/\s+/g, " ").trim();
273
+ if (flat.length <= maxLength) return flat;
274
+ const cut = flat.slice(0, maxLength);
275
+ const lastSpace = cut.lastIndexOf(" ");
276
+ const words = lastSpace > maxLength / 2 ? cut.slice(0, lastSpace) : cut;
277
+ return `${words.replace(/[\s,;:.\-–—]+$/, "")}\u2026`;
278
+ }
279
+ var messageOf = (e, fallback) => e instanceof Error ? e.message : fallback;
280
+ function useArbiChat(options = {}) {
281
+ const { workspaceId, model, titleLength = 48 } = options;
1059
282
  const arbi = chunk7IOCMCC5_cjs.useArbi();
1060
- const { data: docs, refetch: refetchDocs } = useDocuments(workspaceId);
1061
- const mutation = useAssistantQuery();
1062
- const [messages, setMessages] = React.useState([]);
1063
- const [input, setInput] = React.useState("");
1064
- const [streaming, setStreaming] = React.useState("");
1065
- const [agentStatus, setAgentStatus] = React.useState("");
1066
- const [selectedDocs, setSelectedDocs] = React.useState([]);
1067
- const [docsExpanded, setDocsExpanded] = React.useState(false);
1068
- const [previousResponseId, setPreviousResponseId] = React.useState(null);
1069
- const [uploading, setUploading] = React.useState(false);
1070
- const messagesEndRef = React.useRef(null);
1071
- const fileInputRef = React.useRef(null);
283
+ const { data: docs = [], isLoading: isLoadingDocuments, refetch } = useDocuments(workspaceId);
284
+ const query = useAssistantQuery();
285
+ const { mutateAsync } = query;
286
+ const [threads, setThreads] = React.useState(() => [emptyThread()]);
287
+ const [activeId, setActiveId] = React.useState(() => threads[0].id);
288
+ const [deselected, setDeselected] = React.useState(/* @__PURE__ */ new Set());
289
+ const [isRunning, setIsRunning] = React.useState(false);
290
+ const [isUploading, setIsUploading] = React.useState(false);
291
+ const [uploadError, setUploadError] = React.useState(null);
292
+ const scopeRef = React.useRef(workspaceId);
1072
293
  React.useEffect(() => {
1073
- if (docs && docs.length > 0 && selectedDocs.length === 0) {
1074
- setSelectedDocs(docs.map((d) => d.external_id));
1075
- }
1076
- }, [docs, selectedDocs.length]);
1077
- React.useEffect(() => {
1078
- messagesEndRef.current?.scrollIntoView({ behavior: "smooth" });
1079
- }, [messages, streaming, agentStatus]);
1080
- const toggleDoc = (docId) => {
1081
- setSelectedDocs(
1082
- (prev) => prev.includes(docId) ? prev.filter((id) => id !== docId) : [...prev, docId]
1083
- );
1084
- };
1085
- const handleUpload = React.useCallback(
1086
- async (e) => {
1087
- const files = e.target.files;
1088
- if (!files || files.length === 0) return;
1089
- setUploading(true);
1090
- try {
1091
- const newIds = [];
1092
- for (const file of Array.from(files)) {
1093
- const result = await arbi.documents.uploadFile(file, file.name);
1094
- if (result.doc_ext_ids) newIds.push(...result.doc_ext_ids);
1095
- }
1096
- await refetchDocs();
1097
- setSelectedDocs((prev) => [...prev, ...newIds]);
1098
- } catch {
1099
- } finally {
1100
- setUploading(false);
1101
- if (fileInputRef.current) fileInputRef.current.value = "";
1102
- }
1103
- },
1104
- [arbi, refetchDocs]
294
+ if (scopeRef.current === workspaceId) return;
295
+ scopeRef.current = workspaceId;
296
+ const fresh = emptyThread();
297
+ setThreads([fresh]);
298
+ setActiveId(fresh.id);
299
+ setDeselected(/* @__PURE__ */ new Set());
300
+ setUploadError(null);
301
+ }, [workspaceId]);
302
+ const active = threads.find((t) => t.id === activeId) ?? threads[0];
303
+ const selectedIds = React.useMemo(
304
+ () => docs.map((d) => d.external_id).filter((id) => !!id && !deselected.has(id)),
305
+ [docs, deselected]
1105
306
  );
1106
- const handleSubmit = React.useCallback(
1107
- (e) => {
1108
- e.preventDefault();
1109
- const question = input.trim();
1110
- if (!question || selectedDocs.length === 0 || mutation.isPending) return;
1111
- setMessages((prev) => [...prev, { role: "user", text: question }]);
1112
- setInput("");
1113
- setStreaming("");
1114
- setAgentStatus("");
1115
- mutation.mutate(
1116
- {
1117
- question,
1118
- docIds: selectedDocs,
1119
- previousResponseId,
1120
- onToken: (t) => setStreaming((prev) => prev + t),
307
+ const documents = React.useMemo(
308
+ () => docs.filter((d) => !!d.external_id).map((d) => ({
309
+ id: d.external_id,
310
+ name: d.file_name ?? d.external_id,
311
+ isSelected: !deselected.has(d.external_id)
312
+ })),
313
+ [docs, deselected]
314
+ );
315
+ const patchThread = React.useCallback(
316
+ (id, patch) => setThreads((all) => all.map((t) => t.id === id ? patch(t) : t)),
317
+ []
318
+ );
319
+ const patchMessage = React.useCallback(
320
+ (threadId, messageId, patch) => patchThread(threadId, (t) => ({
321
+ ...t,
322
+ messages: t.messages.map((m) => m.id === messageId ? { ...m, ...patch } : m)
323
+ })),
324
+ [patchThread]
325
+ );
326
+ const ask = React.useCallback(
327
+ async (thread, text) => {
328
+ const userMessage = {
329
+ id: nextId("msg"),
330
+ role: "user",
331
+ content: text,
332
+ status: "complete"
333
+ };
334
+ const answer = {
335
+ id: nextId("msg"),
336
+ role: "assistant",
337
+ content: "",
338
+ status: "streaming"
339
+ };
340
+ patchThread(thread.id, (t) => ({
341
+ ...t,
342
+ title: t.title || titleFromQuestion(text, titleLength),
343
+ messages: [...t.messages, userMessage, answer]
344
+ }));
345
+ setIsRunning(true);
346
+ let buffer = "";
347
+ let steps = 0;
348
+ let streamError = null;
349
+ try {
350
+ const result = await mutateAsync({
351
+ question: text,
352
+ docIds: selectedIds,
353
+ previousResponseId: thread.responseId,
354
+ model,
355
+ onToken: (token) => {
356
+ buffer += token;
357
+ patchMessage(thread.id, answer.id, { content: buffer });
358
+ },
1121
359
  onOutputItemDone: (ev) => {
1122
- const item = ev.item;
1123
- if (item.type === "function_call" || item.type === "reasoning") {
1124
- setAgentStatus(item.arbi?.focus || item.arbi?.label || "");
360
+ const type = ev.item.type;
361
+ if (type === "function_call" || type === "reasoning") {
362
+ steps += 1;
363
+ patchMessage(thread.id, answer.id, { stepCount: steps });
1125
364
  }
1126
- }
1127
- },
1128
- {
1129
- onSuccess: (result) => {
1130
- setStreaming("");
1131
- setAgentStatus("");
1132
- setMessages((prev) => [
1133
- ...prev,
1134
- { role: "assistant", text: result.text, metadata: result.metadata }
1135
- ]);
1136
- setPreviousResponseId(result.assistantMessageExtId);
1137
365
  },
1138
- onError: (err) => {
1139
- setStreaming("");
1140
- setAgentStatus("");
1141
- setMessages((prev) => [...prev, { role: "assistant", text: `Error: ${err.message}` }]);
366
+ onError: (message) => {
367
+ streamError = message;
1142
368
  }
369
+ });
370
+ const finalText = result.text || buffer;
371
+ const failure = streamError || result.errors[0] || null;
372
+ if (failure && !finalText) {
373
+ patchMessage(thread.id, answer.id, { status: "error", error: failure });
374
+ } else {
375
+ patchMessage(thread.id, answer.id, {
376
+ status: "complete",
377
+ content: finalText,
378
+ stepCount: result.agentSteps.length || steps || void 0
379
+ });
380
+ patchThread(thread.id, (t) => ({
381
+ ...t,
382
+ responseId: result.assistantMessageExtId ?? t.responseId
383
+ }));
1143
384
  }
1144
- );
385
+ } catch (e) {
386
+ patchMessage(thread.id, answer.id, {
387
+ status: "error",
388
+ error: messageOf(e, "The assistant request failed.")
389
+ });
390
+ } finally {
391
+ setIsRunning(false);
392
+ }
1145
393
  },
1146
- [input, selectedDocs, previousResponseId, mutation]
394
+ [mutateAsync, patchMessage, patchThread, selectedIds, model, titleLength]
1147
395
  );
1148
- const noDocs = !docs || docs.length === 0;
1149
- const noDocsSelected = selectedDocs.length === 0;
1150
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1151
- /* @__PURE__ */ jsxRuntime.jsx(
1152
- "input",
1153
- {
1154
- ref: fileInputRef,
1155
- type: "file",
1156
- multiple: true,
1157
- accept: ".pdf,.txt,.md,.html,.doc,.docx,.rtf,.ppt,.pptx,.xls,.xlsx",
1158
- onChange: handleUpload,
1159
- style: fileInputStyle()
1160
- }
1161
- ),
1162
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: docSelectorStyle(theme), children: [
1163
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between" }, children: [
1164
- /* @__PURE__ */ jsxRuntime.jsxs(
1165
- "button",
1166
- {
1167
- type: "button",
1168
- onClick: () => setDocsExpanded((prev) => !prev),
1169
- style: docToggleStyle(theme),
1170
- children: [
1171
- /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: "10px" }, children: docsExpanded ? "\u25BC" : "\u25B6" }),
1172
- labels.documents,
1173
- " (",
1174
- selectedDocs.length,
1175
- "/",
1176
- docs?.length ?? 0,
1177
- " in chat)"
1178
- ]
1179
- }
1180
- ),
1181
- /* @__PURE__ */ jsxRuntime.jsx(
1182
- "button",
1183
- {
1184
- type: "button",
1185
- onClick: () => fileInputRef.current?.click(),
1186
- disabled: uploading,
1187
- style: secondaryButtonStyle(theme, uploading),
1188
- children: uploading ? labels.uploading : labels.uploadButton
1189
- }
1190
- )
1191
- ] }),
1192
- docsExpanded && docs && docs.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: docListStyle(), children: docs.map((doc) => /* @__PURE__ */ jsxRuntime.jsxs("label", { style: docItemStyle(theme), children: [
1193
- /* @__PURE__ */ jsxRuntime.jsx(
1194
- "input",
1195
- {
1196
- type: "checkbox",
1197
- checked: selectedDocs.includes(doc.external_id),
1198
- onChange: () => toggleDoc(doc.external_id)
1199
- }
1200
- ),
1201
- doc.file_name
1202
- ] }, doc.external_id)) })
1203
- ] }),
1204
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: messagesContainerStyle(), children: [
1205
- messages.length === 0 && !streaming && /* @__PURE__ */ jsxRuntime.jsx("div", { style: emptyStateStyle(theme), children: noDocs ? labels.emptyNoDocs : noDocsSelected ? labels.emptyNoSelection : labels.emptyReady }),
1206
- messages.map((msg, i) => /* @__PURE__ */ jsxRuntime.jsx(MessageBubble, { message: msg, theme }, i)),
1207
- agentStatus && !streaming && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: agentStatusStyle(theme), children: [
1208
- agentStatus,
1209
- "..."
1210
- ] }),
1211
- streaming && /* @__PURE__ */ jsxRuntime.jsx(MessageBubble, { message: { role: "assistant", text: streaming }, theme }),
1212
- /* @__PURE__ */ jsxRuntime.jsx("div", { ref: messagesEndRef })
1213
- ] }),
1214
- /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: handleSubmit, style: inputBarStyle(theme), children: [
1215
- /* @__PURE__ */ jsxRuntime.jsx(
1216
- "input",
1217
- {
1218
- type: "text",
1219
- value: input,
1220
- onChange: (e) => setInput(e.target.value),
1221
- placeholder: noDocs || noDocsSelected ? "Select documents first..." : labels.placeholder,
1222
- disabled: noDocs || noDocsSelected || mutation.isPending,
1223
- style: chatInputStyle(theme)
1224
- }
1225
- ),
1226
- /* @__PURE__ */ jsxRuntime.jsx(
1227
- "button",
1228
- {
1229
- type: "submit",
1230
- disabled: !input.trim() || noDocsSelected || mutation.isPending,
1231
- style: sendButtonStyle(theme, !input.trim() || noDocsSelected || mutation.isPending),
1232
- children: mutation.isPending ? "..." : labels.sendButton
1233
- }
1234
- )
1235
- ] })
1236
- ] });
1237
- }
1238
- function ChatWidget({ theme, labels, initialWorkspaceId, width, height }) {
1239
- const arbi = chunk7IOCMCC5_cjs.useArbi();
1240
- const [screen, setScreen] = React.useState("auth");
1241
- const [workspaceId, setWorkspaceId] = React.useState(initialWorkspaceId);
1242
- const resolveWorkspace = React.useCallback(async () => {
1243
- if (initialWorkspaceId) {
1244
- try {
1245
- await arbi.selectWorkspace(initialWorkspaceId);
1246
- setScreen("chat");
1247
- return;
1248
- } catch {
1249
- setScreen("workspace");
1250
- return;
1251
- }
1252
- }
1253
- setScreen("workspace");
1254
- }, [arbi, initialWorkspaceId]);
1255
- const handleLogin = React.useCallback(() => resolveWorkspace(), [resolveWorkspace]);
1256
- React.useEffect(() => {
1257
- if (arbi.isLoggedIn) void resolveWorkspace();
1258
- }, [arbi, resolveWorkspace]);
1259
- const handleWorkspaceSelect = React.useCallback((id) => {
1260
- setWorkspaceId(id);
1261
- setScreen("chat");
1262
- }, []);
1263
- const handleChangeWorkspace = React.useCallback(() => {
1264
- setScreen("workspace");
1265
- }, []);
1266
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: containerStyle(theme, width, height), children: [
1267
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { ...headerStyle(theme), justifyContent: "space-between" }, children: [
1268
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: labels.title }),
1269
- screen === "chat" && !initialWorkspaceId && /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: handleChangeWorkspace, style: linkButtonStyle(theme), children: labels.changeWorkspace })
1270
- ] }),
1271
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: bodyStyle(), children: [
1272
- screen === "auth" && /* @__PURE__ */ jsxRuntime.jsx(AuthScreen, { theme, labels, onLogin: handleLogin }),
1273
- screen === "workspace" && /* @__PURE__ */ jsxRuntime.jsx(WorkspaceScreen, { theme, labels, onSelect: handleWorkspaceSelect }),
1274
- screen === "chat" && workspaceId && /* @__PURE__ */ jsxRuntime.jsx(ChatView, { workspaceId, theme, labels })
1275
- ] }),
1276
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: brandingStyle(theme), children: [
1277
- "Powered by",
1278
- " ",
1279
- /* @__PURE__ */ jsxRuntime.jsx(
1280
- "a",
1281
- {
1282
- href: "https://www.arbidocs.com",
1283
- target: "_blank",
1284
- rel: "noopener noreferrer",
1285
- style: brandingLinkStyle(theme),
1286
- children: "ARBI"
1287
- }
1288
- )
1289
- ] })
1290
- ] });
1291
- }
1292
- function ArbiChatPanel({
1293
- workspaceId,
1294
- theme: themeOverrides,
1295
- labels: labelOverrides,
1296
- width = "100%",
1297
- height = "100%"
1298
- }) {
1299
- const theme = React.useMemo(() => getTheme(themeOverrides), [themeOverrides]);
1300
- const labels = React.useMemo(() => getLabels(labelOverrides), [labelOverrides]);
1301
- return /* @__PURE__ */ jsxRuntime.jsx(
1302
- ChatWidget,
1303
- {
1304
- theme,
1305
- labels,
1306
- initialWorkspaceId: workspaceId,
1307
- width,
1308
- height
1309
- }
396
+ const send = React.useCallback(
397
+ async (text) => {
398
+ const trimmed = text.trim();
399
+ if (!trimmed || isRunning) return;
400
+ await ask(active, trimmed);
401
+ },
402
+ [active, ask, isRunning]
1310
403
  );
1311
- }
1312
- function ArbiChat({
1313
- url,
1314
- workspaceId,
1315
- theme: themeOverrides,
1316
- labels: labelOverrides,
1317
- width = "400px",
1318
- height = "600px"
1319
- }) {
1320
- const queryClient = React.useMemo(
1321
- () => new reactQuery.QueryClient({
1322
- defaultOptions: {
1323
- queries: { retry: 1, refetchOnWindowFocus: false },
1324
- mutations: { retry: false }
404
+ const lastMessage = active.messages[active.messages.length - 1];
405
+ const error = lastMessage?.status === "error" ? lastMessage.error ?? null : null;
406
+ const retry = React.useCallback(async () => {
407
+ if (isRunning) return;
408
+ const messages = active.messages;
409
+ const failed = messages[messages.length - 1];
410
+ const question = messages[messages.length - 2];
411
+ if (failed?.status !== "error" || question?.role !== "user") return;
412
+ const trimmed = { ...active, messages: messages.slice(0, -2) };
413
+ patchThread(active.id, () => trimmed);
414
+ await ask(trimmed, question.content);
415
+ }, [active, ask, isRunning, patchThread]);
416
+ const newThread = React.useCallback(() => {
417
+ if (active.messages.length === 0) return;
418
+ const fresh = emptyThread();
419
+ setThreads((all) => [fresh, ...all]);
420
+ setActiveId(fresh.id);
421
+ }, [active.messages.length]);
422
+ const deleteThread = React.useCallback(
423
+ (id) => {
424
+ const rest = threads.filter((t) => t.id !== id);
425
+ const next = rest.length > 0 ? rest : [emptyThread()];
426
+ setThreads(next);
427
+ if (id === activeId) setActiveId(next[0].id);
428
+ },
429
+ [threads, activeId]
430
+ );
431
+ const toggleDocument = React.useCallback((id) => {
432
+ setDeselected((prev) => {
433
+ const next = new Set(prev);
434
+ if (next.has(id)) next.delete(id);
435
+ else next.add(id);
436
+ return next;
437
+ });
438
+ }, []);
439
+ const selectAllDocuments = React.useCallback(() => setDeselected(/* @__PURE__ */ new Set()), []);
440
+ const upload = React.useCallback(
441
+ async (files) => {
442
+ if (files.length === 0) return;
443
+ setIsUploading(true);
444
+ setUploadError(null);
445
+ try {
446
+ for (const file of files) await arbi.documents.uploadFile(file, file.name);
447
+ await refetch();
448
+ } catch (e) {
449
+ setUploadError(messageOf(e, "The upload failed."));
450
+ } finally {
451
+ setIsUploading(false);
1325
452
  }
1326
- }),
1327
- []
453
+ },
454
+ [arbi, refetch]
1328
455
  );
1329
- return /* @__PURE__ */ jsxRuntime.jsx(reactQuery.QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsxRuntime.jsx(chunk7IOCMCC5_cjs.ArbiProvider, { url, children: /* @__PURE__ */ jsxRuntime.jsx(
1330
- ArbiChatPanel,
1331
- {
1332
- workspaceId,
1333
- theme: themeOverrides,
1334
- labels: labelOverrides,
1335
- width,
1336
- height
1337
- }
1338
- ) }) });
456
+ return {
457
+ threads: threads.map(({ id, title }) => ({ id, title })),
458
+ activeThreadId: active.id,
459
+ messages: active.messages,
460
+ isRunning,
461
+ error,
462
+ documents,
463
+ isLoadingDocuments,
464
+ isUploading,
465
+ uploadError,
466
+ send,
467
+ retry,
468
+ selectThread: setActiveId,
469
+ newThread,
470
+ deleteThread,
471
+ toggleDocument,
472
+ selectAllDocuments,
473
+ upload
474
+ };
1339
475
  }
1340
476
  var TypingIndicator = React.memo(function TypingIndicator2() {
1341
477
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex w-full justify-start mb-2", "data-testid": "dm-typing-indicator", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-card border border-primary rounded-2xl rounded-bl-md px-4 py-2.5", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-1 items-center", children: [
@@ -1618,6 +754,144 @@ function useArbiDocumentSync(workspaceId) {
1618
754
  }
1619
755
  });
1620
756
  }
757
+
758
+ // src/workspaces/shell-workspaces.ts
759
+ function getWorkspaceKind(workspace) {
760
+ if (workspace.is_public) return "common";
761
+ if ((workspace.users?.length ?? 0) > 1) return "shared";
762
+ return "private";
763
+ }
764
+ function memberName(user) {
765
+ const full = [user?.given_name, user?.family_name].filter(Boolean).join(" ").trim();
766
+ return full || user?.email || "";
767
+ }
768
+ function toShellWorkspace(workspace) {
769
+ const people = (workspace.users ?? []).filter((u) => !u.agent_ext_id);
770
+ return {
771
+ id: workspace.external_id,
772
+ name: workspace.name,
773
+ kind: getWorkspaceKind(workspace),
774
+ description: workspace.description,
775
+ projectName: workspace.project_name,
776
+ docCount: (workspace.shared_document_count ?? 0) + (workspace.private_document_count ?? 0),
777
+ memberCount: people.length,
778
+ members: people.map((u) => ({ name: memberName(u.user), picture: u.user?.picture })),
779
+ updatedAt: workspace.updated_at
780
+ };
781
+ }
782
+ function recency(workspace, lastOpened) {
783
+ const opened = lastOpened?.[workspace.id];
784
+ if (opened !== void 0) return opened;
785
+ const updated = Date.parse(workspace.updatedAt ?? "");
786
+ return Number.isNaN(updated) ? 0 : updated;
787
+ }
788
+ function resolveActiveWorkspace(items, selectedId, options = {}) {
789
+ const selected = selectedId ? items.find((w) => w.id === selectedId) : void 0;
790
+ if (selected) return selected;
791
+ if (options.isSeed && options.seedActiveId) {
792
+ const seeded = items.find((w) => w.id === options.seedActiveId);
793
+ if (seeded) return seeded;
794
+ }
795
+ return items[0];
796
+ }
797
+ function pickRecentWorkspaces(items, activeId, options = {}) {
798
+ const { limit = 4, lastOpened, formatLastSeen } = options;
799
+ return items.filter((w) => w.id !== activeId).map((w) => ({ w, at: recency(w, lastOpened) })).sort((a, b) => b.at - a.at).slice(0, limit).map(({ w, at }) => formatLastSeen ? { ...w, lastSeen: formatLastSeen(at) } : w);
800
+ }
801
+
802
+ // src/workspaces/useShellWorkspaces.ts
803
+ function useShellWorkspaces(options) {
804
+ const {
805
+ workspaces,
806
+ isLoading = false,
807
+ loadError,
808
+ selectedId,
809
+ seed,
810
+ decorate,
811
+ recentLimit,
812
+ lastOpened,
813
+ formatLastSeen
814
+ } = options;
815
+ const live = React.useMemo(
816
+ () => (workspaces ?? []).map((source) => {
817
+ const item = toShellWorkspace(source);
818
+ return decorate ? { ...item, ...decorate(item, source) } : item;
819
+ }),
820
+ [workspaces, decorate]
821
+ );
822
+ const isLive = live.length > 0;
823
+ const isSeed = !isLive && !isLoading && !!seed;
824
+ const items = React.useMemo(
825
+ () => isLive ? live : isSeed ? [...seed.workspaces] : [],
826
+ [isLive, live, isSeed, seed]
827
+ );
828
+ const active = React.useMemo(
829
+ () => resolveActiveWorkspace(items, selectedId, { isSeed, seedActiveId: seed?.activeId }),
830
+ [items, selectedId, isSeed, seed?.activeId]
831
+ );
832
+ const recent = React.useMemo(
833
+ () => pickRecentWorkspaces(items, active?.id, { limit: recentLimit, lastOpened, formatLastSeen }),
834
+ [items, active?.id, recentLimit, lastOpened, formatLastSeen]
835
+ );
836
+ const [openingId, setOpeningId] = React.useState(null);
837
+ const [openError, setOpenError] = React.useState(void 0);
838
+ const callbacks = React.useRef({
839
+ select: options.select,
840
+ onOpened: options.onOpened,
841
+ onOpenError: options.onOpenError
842
+ });
843
+ callbacks.current = {
844
+ select: options.select,
845
+ onOpened: options.onOpened,
846
+ onOpenError: options.onOpenError
847
+ };
848
+ const itemsRef = React.useRef(items);
849
+ itemsRef.current = items;
850
+ const open = React.useCallback(async (target) => {
851
+ const id = typeof target === "string" ? target : target.id;
852
+ const workspace = itemsRef.current.find((w) => w.id === id);
853
+ if (!workspace) return false;
854
+ setOpenError(void 0);
855
+ setOpeningId(id);
856
+ try {
857
+ await callbacks.current.select(workspace);
858
+ } catch (err) {
859
+ setOpenError(err);
860
+ setOpeningId(null);
861
+ callbacks.current.onOpenError?.(err, workspace);
862
+ return false;
863
+ }
864
+ setOpeningId(null);
865
+ callbacks.current.onOpened?.(workspace);
866
+ return true;
867
+ }, []);
868
+ return {
869
+ items,
870
+ active,
871
+ recent,
872
+ isLive,
873
+ isLoading,
874
+ error: openError ?? loadError ?? null,
875
+ openingId,
876
+ open
877
+ };
878
+ }
879
+ function useArbiShellWorkspaces(options = {}) {
880
+ const arbi = chunk7IOCMCC5_cjs.useArbi();
881
+ const query = useWorkspaces();
882
+ const { select, ...rest } = options;
883
+ const defaultSelect = React.useCallback(
884
+ (workspace) => arbi.selectWorkspace(workspace.id),
885
+ [arbi]
886
+ );
887
+ return useShellWorkspaces({
888
+ ...rest,
889
+ workspaces: Array.isArray(query.data) ? query.data : void 0,
890
+ isLoading: query.isLoading,
891
+ loadError: query.error,
892
+ select: select ?? defaultSelect
893
+ });
894
+ }
1621
895
  function useWorkspaceDocs(workspaceId) {
1622
896
  const { data: docs = [], isLoading, isError } = useDocuments(workspaceId);
1623
897
  const docIds = React.useMemo(
@@ -1840,7 +1114,7 @@ function AiAnswer({
1840
1114
  }
1841
1115
  ),
1842
1116
  hasText && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1843
- /* @__PURE__ */ jsxRuntime.jsx(chunkOU2QLIKS_cjs.AiMarkdown, { isStreaming: running, children: text }),
1117
+ /* @__PURE__ */ jsxRuntime.jsx(chunkORKGCXG3_cjs.AiMarkdown, { isStreaming: running, children: text }),
1844
1118
  !running && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-t border-border pt-2.5", children: [
1845
1119
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-1.5 text-xs text-muted-foreground", children: [
1846
1120
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ShieldCheck, { className: "size-3.5 text-ai-accent" }),
@@ -1885,7 +1159,7 @@ function AiActionCard({
1885
1159
  const p = typeof prompt === "function" ? prompt() : prompt;
1886
1160
  void task.run(p, docIds);
1887
1161
  };
1888
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkOU2QLIKS_cjs.Card, { variant: "elevated", className: "rounded-xl p-5", "data-testid": testId, children: [
1162
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkORKGCXG3_cjs.Card, { variant: "elevated", className: "rounded-xl p-5", "data-testid": testId, children: [
1889
1163
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-4", children: [
1890
1164
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [
1891
1165
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex size-9 shrink-0 items-center justify-center rounded-lg bg-ai-accent-soft text-ai-accent", children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "size-4" }) }),
@@ -1895,7 +1169,7 @@ function AiActionCard({
1895
1169
  ] })
1896
1170
  ] }),
1897
1171
  /* @__PURE__ */ jsxRuntime.jsxs(
1898
- chunkOU2QLIKS_cjs.Button,
1172
+ chunkORKGCXG3_cjs.Button,
1899
1173
  {
1900
1174
  variant: task.isDone ? "outline" : "accent",
1901
1175
  size: "sm",
@@ -2027,11 +1301,11 @@ function ArtifactCanvas({
2027
1301
  children: active.title
2028
1302
  }
2029
1303
  ),
2030
- isRedline && /* @__PURE__ */ jsxRuntime.jsxs(chunkOU2QLIKS_cjs.Badge, { variant: "accent", className: "gap-1", children: [
1304
+ isRedline && /* @__PURE__ */ jsxRuntime.jsxs(chunkORKGCXG3_cjs.Badge, { variant: "accent", className: "gap-1", children: [
2031
1305
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.GitCompareArrows, { className: "size-3" }),
2032
1306
  " Redline"
2033
1307
  ] }),
2034
- /* @__PURE__ */ jsxRuntime.jsxs(chunkOU2QLIKS_cjs.Badge, { variant: "secondary", children: [
1308
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkORKGCXG3_cjs.Badge, { variant: "secondary", children: [
2035
1309
  "v",
2036
1310
  active.version
2037
1311
  ] }),
@@ -2087,7 +1361,7 @@ function ArtifactCanvas({
2087
1361
  animate: { opacity: 1, y: 0 },
2088
1362
  transition: { duration: 0.2 },
2089
1363
  className: "mx-auto max-w-2xl rounded-lg bg-card p-8 shadow-sm ring-1 ring-border",
2090
- children: active.mode === "html" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm", dangerouslySetInnerHTML: { __html: active.content } }) : active.mode === "text" ? /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "whitespace-pre-wrap font-mono text-xs text-foreground", children: active.content }) : /* @__PURE__ */ jsxRuntime.jsx(chunkOU2QLIKS_cjs.AiMarkdown, { children: active.content })
1364
+ children: active.mode === "html" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm", dangerouslySetInnerHTML: { __html: active.content } }) : active.mode === "text" ? /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "whitespace-pre-wrap font-mono text-xs text-foreground", children: active.content }) : /* @__PURE__ */ jsxRuntime.jsx(chunkORKGCXG3_cjs.AiMarkdown, { children: active.content })
2091
1365
  },
2092
1366
  active.doc_ext_id
2093
1367
  ) }) })
@@ -2104,7 +1378,7 @@ function MessageArtifactCard({
2104
1378
  const Icon = isImage ? lucideReact.Image : lucideReact.FileText;
2105
1379
  const statusText = isImage ? isComplete ? "Image ready" : "Generating\u2026" : isComplete ? "Draft ready" : "Drafting\u2026";
2106
1380
  return /* @__PURE__ */ jsxRuntime.jsxs(
2107
- chunkOU2QLIKS_cjs.Card,
1381
+ chunkORKGCXG3_cjs.Card,
2108
1382
  {
2109
1383
  variant: "outline",
2110
1384
  className: "mt-3 flex items-center gap-3 px-3 py-2.5",
@@ -2180,7 +1454,7 @@ function DocSearch({
2180
1454
  status === "done" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", "data-testid": "doc-search-results", children: [
2181
1455
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: results.length === 0 ? `No passages matched \u201C${query}\u201D.` : `${results.length} passage${results.length === 1 ? "" : "s"} for \u201C${query}\u201D` }),
2182
1456
  results.slice(0, 8).map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs(
2183
- chunkOU2QLIKS_cjs.Card,
1457
+ chunkORKGCXG3_cjs.Card,
2184
1458
  {
2185
1459
  variant: "elevated",
2186
1460
  className: chunkRZQACYNQ_cjs.cn(
@@ -2193,7 +1467,7 @@ function DocSearch({
2193
1467
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-1 flex items-center gap-2", children: [
2194
1468
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: "size-3.5 text-ai-accent" }),
2195
1469
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-xs font-medium text-foreground", children: r.docTitle ?? "Document" }),
2196
- r.page != null && /* @__PURE__ */ jsxRuntime.jsxs(chunkOU2QLIKS_cjs.Badge, { variant: "secondary", children: [
1470
+ r.page != null && /* @__PURE__ */ jsxRuntime.jsxs(chunkORKGCXG3_cjs.Badge, { variant: "secondary", children: [
2197
1471
  "p.",
2198
1472
  r.page
2199
1473
  ] }),
@@ -2287,7 +1561,7 @@ function DocumentReview({
2287
1561
  findings.length ? ` \xB7 ${findings.length} findings` : ""
2288
1562
  ] })
2289
1563
  ] }),
2290
- doc?.status ? /* @__PURE__ */ jsxRuntime.jsx(chunkOU2QLIKS_cjs.Badge, { variant: "secondary", children: doc.status }) : null,
1564
+ doc?.status ? /* @__PURE__ */ jsxRuntime.jsx(chunkORKGCXG3_cjs.Badge, { variant: "secondary", children: doc.status }) : null,
2291
1565
  onClose ? /* @__PURE__ */ jsxRuntime.jsx(
2292
1566
  "button",
2293
1567
  {
@@ -2324,7 +1598,7 @@ function DocumentReview({
2324
1598
  className: "w-full cursor-pointer rounded-md border p-2 text-left text-xs transition hover:border-ring hover:bg-muted/50 focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",
2325
1599
  children: [
2326
1600
  /* @__PURE__ */ jsxRuntime.jsx(
2327
- chunkOU2QLIKS_cjs.TagEntity,
1601
+ chunkORKGCXG3_cjs.TagEntity,
2328
1602
  {
2329
1603
  size: "sm",
2330
1604
  tag: {
@@ -2369,7 +1643,7 @@ function DocumentReview({
2369
1643
  ),
2370
1644
  children: [
2371
1645
  highlighted ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-1", children: /* @__PURE__ */ jsxRuntime.jsx(
2372
- chunkOU2QLIKS_cjs.TagEntity,
1646
+ chunkORKGCXG3_cjs.TagEntity,
2373
1647
  {
2374
1648
  size: "sm",
2375
1649
  tag: {
@@ -2378,7 +1652,7 @@ function DocumentReview({
2378
1652
  }
2379
1653
  }
2380
1654
  ) }) : null,
2381
- /* @__PURE__ */ jsxRuntime.jsx(chunkOU2QLIKS_cjs.MarkdownRenderer, { className: "prose prose-sm max-w-none dark:prose-invert", children: c.content })
1655
+ /* @__PURE__ */ jsxRuntime.jsx(chunkORKGCXG3_cjs.MarkdownRenderer, { className: "prose prose-sm max-w-none dark:prose-invert", children: c.content })
2382
1656
  ]
2383
1657
  },
2384
1658
  cid ?? i
@@ -2418,7 +1692,7 @@ function ResultRow({
2418
1692
  onSelect
2419
1693
  }) {
2420
1694
  return /* @__PURE__ */ jsxRuntime.jsx(
2421
- chunkOU2QLIKS_cjs.PassageCard,
1695
+ chunkORKGCXG3_cjs.PassageCard,
2422
1696
  {
2423
1697
  onClick: onSelect,
2424
1698
  active: isActive,
@@ -2427,7 +1701,7 @@ function ResultRow({
2427
1701
  header: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2428
1702
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: "size-3.5 shrink-0 text-ai-accent" }),
2429
1703
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-xs font-medium text-foreground", children: result.docTitle ?? "Document" }),
2430
- result.page != null && /* @__PURE__ */ jsxRuntime.jsxs(chunkOU2QLIKS_cjs.Badge, { variant: "secondary", children: [
1704
+ result.page != null && /* @__PURE__ */ jsxRuntime.jsxs(chunkORKGCXG3_cjs.Badge, { variant: "secondary", children: [
2431
1705
  "p.",
2432
1706
  result.page
2433
1707
  ] })
@@ -2537,7 +1811,7 @@ function SemanticSearch({
2537
1811
  "data-testid": "arbi-semantic-search-viewer",
2538
1812
  children: selected && selected.docId ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full min-h-0 flex-col gap-2", children: [
2539
1813
  /* @__PURE__ */ jsxRuntime.jsxs(
2540
- chunkOU2QLIKS_cjs.Button,
1814
+ chunkORKGCXG3_cjs.Button,
2541
1815
  {
2542
1816
  variant: "ghost",
2543
1817
  size: "sm",
@@ -2596,7 +1870,7 @@ Question: ${question}`,
2596
1870
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 space-y-3", "data-testid": "doc-qa", children: [
2597
1871
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
2598
1872
  /* @__PURE__ */ jsxRuntime.jsx(
2599
- chunkOU2QLIKS_cjs.Input,
1873
+ chunkORKGCXG3_cjs.Input,
2600
1874
  {
2601
1875
  value: q,
2602
1876
  onChange: (e) => setQ(e.target.value),
@@ -2607,7 +1881,7 @@ Question: ${question}`,
2607
1881
  }
2608
1882
  ),
2609
1883
  /* @__PURE__ */ jsxRuntime.jsx(
2610
- chunkOU2QLIKS_cjs.Button,
1884
+ chunkORKGCXG3_cjs.Button,
2611
1885
  {
2612
1886
  variant: "accent",
2613
1887
  size: "icon",
@@ -2619,7 +1893,7 @@ Question: ${question}`,
2619
1893
  }
2620
1894
  ),
2621
1895
  /* @__PURE__ */ jsxRuntime.jsxs(
2622
- chunkOU2QLIKS_cjs.Button,
1896
+ chunkORKGCXG3_cjs.Button,
2623
1897
  {
2624
1898
  variant: "outline",
2625
1899
  size: "sm",
@@ -2755,7 +2029,11 @@ var CitationRendererComponent = ({
2755
2029
  onDismissCitation,
2756
2030
  notify2
2757
2031
  ]);
2758
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkRZQACYNQ_cjs.cn("citation-container", className), "data-testid": "citation-renderer", children: renderMarkdown({ components: markdownComponents, isStreaming, children: content }) });
2032
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkRZQACYNQ_cjs.cn("citation-container", className), "data-testid": "citation-renderer", children: renderMarkdown({
2033
+ components: markdownComponents,
2034
+ isStreaming,
2035
+ children: chunkORKGCXG3_cjs.normalizeCitationMarkup(content)
2036
+ }) });
2759
2037
  };
2760
2038
  var CitationPopover = ({
2761
2039
  citationNum,
@@ -2979,7 +2257,7 @@ var CitationLink = ({
2979
2257
  triggerRef,
2980
2258
  children
2981
2259
  }) => /* @__PURE__ */ jsxRuntime.jsxs(
2982
- chunkOU2QLIKS_cjs.MarkMenu,
2260
+ chunkORKGCXG3_cjs.MarkMenu,
2983
2261
  {
2984
2262
  triggerRef,
2985
2263
  items,
@@ -3017,8 +2295,8 @@ var DocIcon = ({ size = 16, className = "" }) => {
3017
2295
  "path",
3018
2296
  {
3019
2297
  d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
3020
- fill: chunkOU2QLIKS_cjs.FILE_TYPE_COLORS.doc,
3021
- stroke: chunkOU2QLIKS_cjs.FILE_TYPE_COLORS.doc,
2298
+ fill: chunkORKGCXG3_cjs.FILE_TYPE_COLORS.doc,
2299
+ stroke: chunkORKGCXG3_cjs.FILE_TYPE_COLORS.doc,
3022
2300
  strokeWidth: "1",
3023
2301
  strokeLinecap: "round",
3024
2302
  strokeLinejoin: "round"
@@ -3029,7 +2307,7 @@ var DocIcon = ({ size = 16, className = "" }) => {
3029
2307
  {
3030
2308
  d: "M14 2v6h6",
3031
2309
  fill: "none",
3032
- stroke: chunkOU2QLIKS_cjs.FILE_TYPE_COLORS.white,
2310
+ stroke: chunkORKGCXG3_cjs.FILE_TYPE_COLORS.white,
3033
2311
  strokeWidth: "1",
3034
2312
  strokeLinecap: "round",
3035
2313
  strokeLinejoin: "round"
@@ -3067,8 +2345,8 @@ var HtmlIcon = ({ size = 16, className = "" }) => {
3067
2345
  "path",
3068
2346
  {
3069
2347
  d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
3070
- fill: chunkOU2QLIKS_cjs.FILE_TYPE_COLORS.html,
3071
- stroke: chunkOU2QLIKS_cjs.FILE_TYPE_COLORS.html,
2348
+ fill: chunkORKGCXG3_cjs.FILE_TYPE_COLORS.html,
2349
+ stroke: chunkORKGCXG3_cjs.FILE_TYPE_COLORS.html,
3072
2350
  strokeWidth: "1",
3073
2351
  strokeLinecap: "round",
3074
2352
  strokeLinejoin: "round"
@@ -3079,7 +2357,7 @@ var HtmlIcon = ({ size = 16, className = "" }) => {
3079
2357
  {
3080
2358
  d: "M14 2v6h6",
3081
2359
  fill: "none",
3082
- stroke: chunkOU2QLIKS_cjs.FILE_TYPE_COLORS.white,
2360
+ stroke: chunkORKGCXG3_cjs.FILE_TYPE_COLORS.white,
3083
2361
  strokeWidth: "1",
3084
2362
  strokeLinecap: "round",
3085
2363
  strokeLinejoin: "round"
@@ -3117,8 +2395,8 @@ var TxtIcon = ({ size = 16, className = "" }) => {
3117
2395
  "path",
3118
2396
  {
3119
2397
  d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
3120
- fill: chunkOU2QLIKS_cjs.FILE_TYPE_COLORS.txt,
3121
- stroke: chunkOU2QLIKS_cjs.FILE_TYPE_COLORS.txt,
2398
+ fill: chunkORKGCXG3_cjs.FILE_TYPE_COLORS.txt,
2399
+ stroke: chunkORKGCXG3_cjs.FILE_TYPE_COLORS.txt,
3122
2400
  strokeWidth: "1",
3123
2401
  strokeLinecap: "round",
3124
2402
  strokeLinejoin: "round"
@@ -3129,7 +2407,7 @@ var TxtIcon = ({ size = 16, className = "" }) => {
3129
2407
  {
3130
2408
  d: "M14 2v6h6",
3131
2409
  fill: "none",
3132
- stroke: chunkOU2QLIKS_cjs.FILE_TYPE_COLORS.white,
2410
+ stroke: chunkORKGCXG3_cjs.FILE_TYPE_COLORS.white,
3133
2411
  strokeWidth: "1",
3134
2412
  strokeLinecap: "round",
3135
2413
  strokeLinejoin: "round"
@@ -3167,8 +2445,8 @@ var XlsIcon = ({ size = 16, className = "" }) => {
3167
2445
  "path",
3168
2446
  {
3169
2447
  d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
3170
- fill: chunkOU2QLIKS_cjs.FILE_TYPE_COLORS.xls,
3171
- stroke: chunkOU2QLIKS_cjs.FILE_TYPE_COLORS.xls,
2448
+ fill: chunkORKGCXG3_cjs.FILE_TYPE_COLORS.xls,
2449
+ stroke: chunkORKGCXG3_cjs.FILE_TYPE_COLORS.xls,
3172
2450
  strokeWidth: "1",
3173
2451
  strokeLinecap: "round",
3174
2452
  strokeLinejoin: "round"
@@ -3179,7 +2457,7 @@ var XlsIcon = ({ size = 16, className = "" }) => {
3179
2457
  {
3180
2458
  d: "M14 2v6h6",
3181
2459
  fill: "none",
3182
- stroke: chunkOU2QLIKS_cjs.FILE_TYPE_COLORS.white,
2460
+ stroke: chunkORKGCXG3_cjs.FILE_TYPE_COLORS.white,
3183
2461
  strokeWidth: "1",
3184
2462
  strokeLinecap: "round",
3185
2463
  strokeLinejoin: "round"
@@ -3217,8 +2495,8 @@ var FileIcon = ({ size = 16, className = "" }) => {
3217
2495
  "path",
3218
2496
  {
3219
2497
  d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
3220
- fill: chunkOU2QLIKS_cjs.FILE_TYPE_COLORS.generic,
3221
- stroke: chunkOU2QLIKS_cjs.FILE_TYPE_COLORS.generic,
2498
+ fill: chunkORKGCXG3_cjs.FILE_TYPE_COLORS.generic,
2499
+ stroke: chunkORKGCXG3_cjs.FILE_TYPE_COLORS.generic,
3222
2500
  strokeWidth: "1",
3223
2501
  strokeLinecap: "round",
3224
2502
  strokeLinejoin: "round"
@@ -3229,7 +2507,7 @@ var FileIcon = ({ size = 16, className = "" }) => {
3229
2507
  {
3230
2508
  d: "M14 2v6h6",
3231
2509
  fill: "none",
3232
- stroke: chunkOU2QLIKS_cjs.FILE_TYPE_COLORS.white,
2510
+ stroke: chunkORKGCXG3_cjs.FILE_TYPE_COLORS.white,
3233
2511
  strokeWidth: "1",
3234
2512
  strokeLinecap: "round",
3235
2513
  strokeLinejoin: "round"
@@ -3585,7 +2863,7 @@ var ArbiBotIcon = ({ size = 24, className = "" }) => {
3585
2863
  );
3586
2864
  };
3587
2865
  function getNotificationTypeMeta(type) {
3588
- const WorkspaceIcon = chunkOU2QLIKS_cjs.getEntityIcon("WORKSPACE");
2866
+ const WorkspaceIcon = chunkORKGCXG3_cjs.getEntityIcon("WORKSPACE");
3589
2867
  switch (type) {
3590
2868
  case "user_message":
3591
2869
  return { Icon: lucideReact.MessageCircleMore, iconClassName: "text-primary", label: "Message" };
@@ -3700,7 +2978,7 @@ function describeActivity(content) {
3700
2978
  }
3701
2979
  default:
3702
2980
  return {
3703
- Icon: parsed.workspace_ext_id ? chunkOU2QLIKS_cjs.getEntityIcon("WORKSPACE") : lucideReact.Activity,
2981
+ Icon: parsed.workspace_ext_id ? chunkORKGCXG3_cjs.getEntityIcon("WORKSPACE") : lucideReact.Activity,
3704
2982
  iconClassName: "text-muted-foreground",
3705
2983
  title: humaniseEvent(parsed.event)
3706
2984
  };
@@ -3917,7 +3195,7 @@ function DmAvatar({ user, className, size = "lg" }) {
3917
3195
  const presence = useArbiWsStore((s) => s.presence[user.external_id]);
3918
3196
  const displayStatus = presence === void 0 ? void 0 : presence === "online" ? "connected" : "disconnected";
3919
3197
  return /* @__PURE__ */ jsxRuntime.jsx(
3920
- chunkOU2QLIKS_cjs.UserEntity,
3198
+ chunkORKGCXG3_cjs.UserEntity,
3921
3199
  {
3922
3200
  variant: "icon",
3923
3201
  size,
@@ -3927,7 +3205,7 @@ function DmAvatar({ user, className, size = "lg" }) {
3927
3205
  initials: userInitials(user),
3928
3206
  displayName: userDisplayName(user),
3929
3207
  picture: user.picture,
3930
- avatarStyle: chunkOU2QLIKS_cjs.getEntityColorStyles(user.external_id),
3208
+ avatarStyle: chunkORKGCXG3_cjs.getEntityColorStyles(user.external_id),
3931
3209
  isAgent: isAgentUser(user),
3932
3210
  displayStatus
3933
3211
  }
@@ -3980,10 +3258,10 @@ function ConversationList({
3980
3258
  children: userDisplayName(peer)
3981
3259
  }
3982
3260
  ),
3983
- c.badge ?? (isAgentUser(peer) ? /* @__PURE__ */ jsxRuntime.jsx(chunkOU2QLIKS_cjs.AgentBadge, {}) : null)
3261
+ c.badge ?? (isAgentUser(peer) ? /* @__PURE__ */ jsxRuntime.jsx(chunkORKGCXG3_cjs.AgentBadge, {}) : null)
3984
3262
  ] }),
3985
3263
  c.statusLabel ? /* @__PURE__ */ jsxRuntime.jsx(
3986
- chunkOU2QLIKS_cjs.Badge,
3264
+ chunkORKGCXG3_cjs.Badge,
3987
3265
  {
3988
3266
  variant: "outline",
3989
3267
  className: "shrink-0 rounded-full px-2 py-0 text-xs font-medium text-muted-foreground",
@@ -3994,7 +3272,7 @@ function ConversationList({
3994
3272
  // shouted louder than the message it was counting.
3995
3273
  // Enough to catch the eye scanning the list, no more.
3996
3274
  /* @__PURE__ */ jsxRuntime.jsx(
3997
- chunkOU2QLIKS_cjs.Badge,
3275
+ chunkORKGCXG3_cjs.Badge,
3998
3276
  {
3999
3277
  variant: "accent",
4000
3278
  className: chunkRZQACYNQ_cjs.cn(
@@ -4101,7 +3379,7 @@ function annotateThread(messages, accessors, runWindowMs = RUN_WINDOW_MS) {
4101
3379
  function DateSeparator({ children }) {
4102
3380
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "my-3 flex justify-center", "data-testid": "dm-date-separator", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-background/80 px-2 py-0.5 text-xs text-muted-foreground", children }) });
4103
3381
  }
4104
- function MessageBubble2({
3382
+ function MessageBubble({
4105
3383
  message,
4106
3384
  classNames,
4107
3385
  isLastOfRun = true,
@@ -4167,7 +3445,7 @@ function MessageThread({
4167
3445
  items.map(({ message: m, isLastOfRun, isFirstOfDay }) => /* @__PURE__ */ jsxRuntime.jsxs(React.Fragment, { children: [
4168
3446
  isFirstOfDay && formatDay && /* @__PURE__ */ jsxRuntime.jsx(DateSeparator, { children: formatDay(m.createdAt) }),
4169
3447
  /* @__PURE__ */ jsxRuntime.jsx(
4170
- MessageBubble2,
3448
+ MessageBubble,
4171
3449
  {
4172
3450
  message: m,
4173
3451
  classNames,
@@ -4213,7 +3491,7 @@ function DmComposer({
4213
3491
  children,
4214
3492
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-end gap-2", children: [
4215
3493
  /* @__PURE__ */ jsxRuntime.jsx(
4216
- chunkOU2QLIKS_cjs.Textarea,
3494
+ chunkORKGCXG3_cjs.Textarea,
4217
3495
  {
4218
3496
  ref: inputRef,
4219
3497
  value: draft,
@@ -4227,7 +3505,7 @@ function DmComposer({
4227
3505
  }
4228
3506
  ),
4229
3507
  /* @__PURE__ */ jsxRuntime.jsxs(
4230
- chunkOU2QLIKS_cjs.Button,
3508
+ chunkORKGCXG3_cjs.Button,
4231
3509
  {
4232
3510
  type: "button",
4233
3511
  onClick: () => void submit(),
@@ -4248,7 +3526,7 @@ function DmComposer({
4248
3526
  function DirectMessages({
4249
3527
  className,
4250
3528
  classNames,
4251
- emptyThread,
3529
+ emptyThread: emptyThread2,
4252
3530
  emptyList
4253
3531
  }) {
4254
3532
  const {
@@ -4309,7 +3587,7 @@ function DirectMessages({
4309
3587
  }
4310
3588
  ),
4311
3589
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-0 min-w-0 flex-1 flex-col", children: [
4312
- /* @__PURE__ */ jsxRuntime.jsx(MessageThread, { conversation: selected, classNames, emptyState: emptyThread }),
3590
+ /* @__PURE__ */ jsxRuntime.jsx(MessageThread, { conversation: selected, classNames, emptyState: emptyThread2 }),
4313
3591
  selected ? /* @__PURE__ */ jsxRuntime.jsx(
4314
3592
  DmComposer,
4315
3593
  {
@@ -4392,7 +3670,7 @@ function ImageCropper({
4392
3670
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
4393
3671
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-xs font-semibold uppercase tracking-wider text-muted-foreground", children: "Zoom" }),
4394
3672
  /* @__PURE__ */ jsxRuntime.jsx(
4395
- chunkOU2QLIKS_cjs.Slider,
3673
+ chunkORKGCXG3_cjs.Slider,
4396
3674
  {
4397
3675
  value: [zoom],
4398
3676
  onValueChange: ([v]) => setZoom(v ?? 1),
@@ -4469,8 +3747,8 @@ function ImageCropModal({
4469
3747
  setBusy(false);
4470
3748
  }
4471
3749
  };
4472
- return /* @__PURE__ */ jsxRuntime.jsx(chunkOU2QLIKS_cjs.Dialog, { open, onOpenChange: (next) => !next ? onCancel() : void 0, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkOU2QLIKS_cjs.DialogContent, { className: "sm:max-w-md", "data-testid": "image-crop-modal", children: [
4473
- /* @__PURE__ */ jsxRuntime.jsx(chunkOU2QLIKS_cjs.DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkOU2QLIKS_cjs.DialogTitle, { children: title }) }),
3750
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkORKGCXG3_cjs.Dialog, { open, onOpenChange: (next) => !next ? onCancel() : void 0, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkORKGCXG3_cjs.DialogContent, { className: "sm:max-w-md", "data-testid": "image-crop-modal", children: [
3751
+ /* @__PURE__ */ jsxRuntime.jsx(chunkORKGCXG3_cjs.DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkORKGCXG3_cjs.DialogTitle, { children: title }) }),
4474
3752
  image ? /* @__PURE__ */ jsxRuntime.jsx(
4475
3753
  ImageCropper,
4476
3754
  {
@@ -4481,9 +3759,9 @@ function ImageCropModal({
4481
3759
  onCropComplete: setArea
4482
3760
  }
4483
3761
  ) : null,
4484
- /* @__PURE__ */ jsxRuntime.jsxs(chunkOU2QLIKS_cjs.DialogFooter, { className: "gap-2 sm:gap-2", children: [
4485
- /* @__PURE__ */ jsxRuntime.jsx(chunkOU2QLIKS_cjs.Button, { variant: "ghost", onClick: onCancel, disabled: busy, children: "Cancel" }),
4486
- /* @__PURE__ */ jsxRuntime.jsxs(chunkOU2QLIKS_cjs.Button, { onClick: handleSave, disabled: !area || busy, "data-testid": "image-crop-save", children: [
3762
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkORKGCXG3_cjs.DialogFooter, { className: "gap-2 sm:gap-2", children: [
3763
+ /* @__PURE__ */ jsxRuntime.jsx(chunkORKGCXG3_cjs.Button, { variant: "ghost", onClick: onCancel, disabled: busy, children: "Cancel" }),
3764
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkORKGCXG3_cjs.Button, { onClick: handleSave, disabled: !area || busy, "data-testid": "image-crop-save", children: [
4487
3765
  busy ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "mr-1 size-4 animate-spin" }) : null,
4488
3766
  saveLabel
4489
3767
  ] })
@@ -4549,8 +3827,8 @@ function CommandPalette({
4549
3827
  if (!q || task.isRunning) return;
4550
3828
  void task.run(buildAskPrompt(q), askDocIds, { model });
4551
3829
  };
4552
- return /* @__PURE__ */ jsxRuntime.jsx(chunkOU2QLIKS_cjs.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(
4553
- chunkOU2QLIKS_cjs.DialogContent,
3830
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkORKGCXG3_cjs.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(
3831
+ chunkORKGCXG3_cjs.DialogContent,
4554
3832
  {
4555
3833
  className: chunkRZQACYNQ_cjs.cn(
4556
3834
  "top-[12%] max-w-2xl translate-y-0 gap-0 overflow-hidden p-0",
@@ -4558,7 +3836,7 @@ function CommandPalette({
4558
3836
  ),
4559
3837
  "data-testid": testId,
4560
3838
  children: [
4561
- /* @__PURE__ */ jsxRuntime.jsx(chunkOU2QLIKS_cjs.DialogTitle, { className: "sr-only", children: "Command palette" }),
3839
+ /* @__PURE__ */ jsxRuntime.jsx(chunkORKGCXG3_cjs.DialogTitle, { className: "sr-only", children: "Command palette" }),
4562
3840
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 border-b border-border px-4", children: [
4563
3841
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: chunkRZQACYNQ_cjs.cn("size-4 shrink-0 text-ai-accent", classNames?.leadingIcon) }),
4564
3842
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -4629,7 +3907,7 @@ function CommandPalette({
4629
3907
  }
4630
3908
  ),
4631
3909
  task.isDone && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3 flex justify-end", children: /* @__PURE__ */ jsxRuntime.jsx(
4632
- chunkOU2QLIKS_cjs.Button,
3910
+ chunkORKGCXG3_cjs.Button,
4633
3911
  {
4634
3912
  variant: "outline",
4635
3913
  size: "sm",
@@ -4827,7 +4105,7 @@ function DocumentTable({
4827
4105
  const doc = p.data;
4828
4106
  if (!doc) return null;
4829
4107
  return /* @__PURE__ */ jsxRuntime.jsx(
4830
- chunkOU2QLIKS_cjs.DocumentEntity,
4108
+ chunkORKGCXG3_cjs.DocumentEntity,
4831
4109
  {
4832
4110
  doc,
4833
4111
  size: "base",
@@ -4850,7 +4128,7 @@ function DocumentTable({
4850
4128
  cellRenderer: (p) => {
4851
4129
  const status = p.data?.status;
4852
4130
  if (!status) return null;
4853
- return /* @__PURE__ */ jsxRuntime.jsx(chunkOU2QLIKS_cjs.Badge, { variant: STATUS_VARIANTS[status.toLowerCase()] ?? "secondary", children: status });
4131
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkORKGCXG3_cjs.Badge, { variant: STATUS_VARIANTS[status.toLowerCase()] ?? "secondary", children: status });
4854
4132
  }
4855
4133
  },
4856
4134
  {
@@ -4864,7 +4142,7 @@ function DocumentTable({
4864
4142
  const doctags = p.data?.doctags ?? [];
4865
4143
  if (doctags.length === 0) return null;
4866
4144
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap items-center gap-1 py-1", children: doctags.map((dt) => /* @__PURE__ */ jsxRuntime.jsx(
4867
- chunkOU2QLIKS_cjs.TagEntity,
4145
+ chunkORKGCXG3_cjs.TagEntity,
4868
4146
  {
4869
4147
  size: "sm",
4870
4148
  tag: {
@@ -5140,7 +4418,7 @@ function DocumentGallery({
5140
4418
  (dt) => tagNameById.get(dt.tag_ext_id) ?? dt.tag_ext_id.slice(0, 8)
5141
4419
  );
5142
4420
  return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-doc-id": id, "data-testid": "document-gallery-card", children: /* @__PURE__ */ jsxRuntime.jsx(
5143
- chunkOU2QLIKS_cjs.DocumentCard,
4421
+ chunkORKGCXG3_cjs.DocumentCard,
5144
4422
  {
5145
4423
  doc,
5146
4424
  thumbnailUrl: thumbs[id],
@@ -5177,7 +4455,7 @@ function VoiceNoteRecorder({
5177
4455
  isSaving = false,
5178
4456
  transcribe
5179
4457
  }) {
5180
- const recorder = chunkOU2QLIKS_cjs.useAudioRecorder();
4458
+ const recorder = chunkORKGCXG3_cjs.useAudioRecorder();
5181
4459
  const [transcript, setTranscript] = React.useState(null);
5182
4460
  const [isTranscribing, setIsTranscribing] = React.useState(false);
5183
4461
  React.useEffect(() => {
@@ -5209,7 +4487,7 @@ function VoiceNoteRecorder({
5209
4487
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full flex-col items-center justify-center gap-6 p-8", children: [
5210
4488
  recorder.state === "idle" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5211
4489
  /* @__PURE__ */ jsxRuntime.jsx(
5212
- chunkOU2QLIKS_cjs.Button,
4490
+ chunkORKGCXG3_cjs.Button,
5213
4491
  {
5214
4492
  type: "button",
5215
4493
  size: "lg",
@@ -5223,7 +4501,7 @@ function VoiceNoteRecorder({
5223
4501
  ] }),
5224
4502
  (recorder.state === "recording" || recorder.state === "paused") && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5225
4503
  /* @__PURE__ */ jsxRuntime.jsx(
5226
- chunkOU2QLIKS_cjs.MicWaveformIndicator,
4504
+ chunkORKGCXG3_cjs.MicWaveformIndicator,
5227
4505
  {
5228
4506
  level: recorder.level,
5229
4507
  elapsedMs: recorder.elapsedMs,
@@ -5232,7 +4510,7 @@ function VoiceNoteRecorder({
5232
4510
  ),
5233
4511
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
5234
4512
  recorder.state === "recording" ? /* @__PURE__ */ jsxRuntime.jsxs(
5235
- chunkOU2QLIKS_cjs.Button,
4513
+ chunkORKGCXG3_cjs.Button,
5236
4514
  {
5237
4515
  type: "button",
5238
4516
  variant: "outline",
@@ -5244,7 +4522,7 @@ function VoiceNoteRecorder({
5244
4522
  ]
5245
4523
  }
5246
4524
  ) : /* @__PURE__ */ jsxRuntime.jsxs(
5247
- chunkOU2QLIKS_cjs.Button,
4525
+ chunkORKGCXG3_cjs.Button,
5248
4526
  {
5249
4527
  type: "button",
5250
4528
  variant: "outline",
@@ -5256,7 +4534,7 @@ function VoiceNoteRecorder({
5256
4534
  ]
5257
4535
  }
5258
4536
  ),
5259
- /* @__PURE__ */ jsxRuntime.jsxs(chunkOU2QLIKS_cjs.Button, { type: "button", onClick: recorder.stop, "data-testid": "voice-note-stop-button", children: [
4537
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkORKGCXG3_cjs.Button, { type: "button", onClick: recorder.stop, "data-testid": "voice-note-stop-button", children: [
5260
4538
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Square, { className: "mr-1.5 h-3.5 w-3.5 fill-current" }),
5261
4539
  "Stop"
5262
4540
  ] })
@@ -5280,7 +4558,7 @@ function VoiceNoteRecorder({
5280
4558
  ),
5281
4559
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
5282
4560
  /* @__PURE__ */ jsxRuntime.jsxs(
5283
- chunkOU2QLIKS_cjs.Button,
4561
+ chunkORKGCXG3_cjs.Button,
5284
4562
  {
5285
4563
  type: "button",
5286
4564
  variant: "outline",
@@ -5294,7 +4572,7 @@ function VoiceNoteRecorder({
5294
4572
  }
5295
4573
  ),
5296
4574
  /* @__PURE__ */ jsxRuntime.jsxs(
5297
- chunkOU2QLIKS_cjs.Button,
4575
+ chunkORKGCXG3_cjs.Button,
5298
4576
  {
5299
4577
  type: "button",
5300
4578
  variant: "outline",
@@ -5308,7 +4586,7 @@ function VoiceNoteRecorder({
5308
4586
  }
5309
4587
  ),
5310
4588
  /* @__PURE__ */ jsxRuntime.jsxs(
5311
- chunkOU2QLIKS_cjs.Button,
4589
+ chunkORKGCXG3_cjs.Button,
5312
4590
  {
5313
4591
  type: "button",
5314
4592
  onClick: handleSave,
@@ -5345,7 +4623,7 @@ function DraftTitleControls({
5345
4623
  }
5346
4624
  ),
5347
4625
  /* @__PURE__ */ jsxRuntime.jsx(
5348
- chunkOU2QLIKS_cjs.IconToggle,
4626
+ chunkORKGCXG3_cjs.IconToggle,
5349
4627
  {
5350
4628
  icon: lucideReact.Sparkles,
5351
4629
  isActive: autoRename,
@@ -5379,7 +4657,7 @@ function useCameraStream(constraints = { video: true, audio: false }) {
5379
4657
  streamRef.current = media;
5380
4658
  setStream(media);
5381
4659
  } catch (err) {
5382
- setError(chunkOU2QLIKS_cjs.classifyMediaError(err, "camera"));
4660
+ setError(chunkORKGCXG3_cjs.classifyMediaError(err, "camera"));
5383
4661
  } finally {
5384
4662
  setIsStarting(false);
5385
4663
  }
@@ -5510,7 +4788,7 @@ function PhotoCapture({ onSave, onDiscard, onError, isSaving = false }) {
5510
4788
  }
5511
4789
  ) }),
5512
4790
  /* @__PURE__ */ jsxRuntime.jsx(
5513
- chunkOU2QLIKS_cjs.Button,
4791
+ chunkORKGCXG3_cjs.Button,
5514
4792
  {
5515
4793
  type: "button",
5516
4794
  size: "lg",
@@ -5528,7 +4806,7 @@ function PhotoCapture({ onSave, onDiscard, onError, isSaving = false }) {
5528
4806
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full max-w-md", children: /* @__PURE__ */ jsxRuntime.jsx(chunk7IOCMCC5_cjs.ImageViewer, { blob: capturedBlob, alt: "Captured photo" }) }),
5529
4807
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
5530
4808
  /* @__PURE__ */ jsxRuntime.jsxs(
5531
- chunkOU2QLIKS_cjs.Button,
4809
+ chunkORKGCXG3_cjs.Button,
5532
4810
  {
5533
4811
  type: "button",
5534
4812
  variant: "outline",
@@ -5542,7 +4820,7 @@ function PhotoCapture({ onSave, onDiscard, onError, isSaving = false }) {
5542
4820
  }
5543
4821
  ),
5544
4822
  /* @__PURE__ */ jsxRuntime.jsxs(
5545
- chunkOU2QLIKS_cjs.Button,
4823
+ chunkORKGCXG3_cjs.Button,
5546
4824
  {
5547
4825
  type: "button",
5548
4826
  variant: "outline",
@@ -5556,7 +4834,7 @@ function PhotoCapture({ onSave, onDiscard, onError, isSaving = false }) {
5556
4834
  }
5557
4835
  ),
5558
4836
  /* @__PURE__ */ jsxRuntime.jsxs(
5559
- chunkOU2QLIKS_cjs.Button,
4837
+ chunkORKGCXG3_cjs.Button,
5560
4838
  {
5561
4839
  type: "button",
5562
4840
  onClick: handleSave,
@@ -5615,10 +4893,10 @@ function VideoCapture({ onSave, onDiscard, onError, isSaving = false }) {
5615
4893
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "relative inline-flex h-2 w-2 rounded-full bg-red-500" })
5616
4894
  ] }),
5617
4895
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-semibold uppercase tracking-wide text-red-500", children: "Rec" }),
5618
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono text-xs tabular-nums text-muted-foreground", children: chunkOU2QLIKS_cjs.formatElapsed(recorder.elapsedMs) })
4896
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono text-xs tabular-nums text-muted-foreground", children: chunkORKGCXG3_cjs.formatElapsed(recorder.elapsedMs) })
5619
4897
  ] }),
5620
4898
  recorder.state === "recording" ? /* @__PURE__ */ jsxRuntime.jsx(
5621
- chunkOU2QLIKS_cjs.Button,
4899
+ chunkORKGCXG3_cjs.Button,
5622
4900
  {
5623
4901
  type: "button",
5624
4902
  size: "lg",
@@ -5628,7 +4906,7 @@ function VideoCapture({ onSave, onDiscard, onError, isSaving = false }) {
5628
4906
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Square, { className: "h-5 w-5 fill-current" })
5629
4907
  }
5630
4908
  ) : /* @__PURE__ */ jsxRuntime.jsx(
5631
- chunkOU2QLIKS_cjs.Button,
4909
+ chunkORKGCXG3_cjs.Button,
5632
4910
  {
5633
4911
  type: "button",
5634
4912
  size: "lg",
@@ -5645,7 +4923,7 @@ function VideoCapture({ onSave, onDiscard, onError, isSaving = false }) {
5645
4923
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full max-w-md", children: /* @__PURE__ */ jsxRuntime.jsx(chunk7IOCMCC5_cjs.VideoViewer, { blob: recorder.blob, title: "Captured video" }) }),
5646
4924
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
5647
4925
  /* @__PURE__ */ jsxRuntime.jsxs(
5648
- chunkOU2QLIKS_cjs.Button,
4926
+ chunkORKGCXG3_cjs.Button,
5649
4927
  {
5650
4928
  type: "button",
5651
4929
  variant: "outline",
@@ -5659,7 +4937,7 @@ function VideoCapture({ onSave, onDiscard, onError, isSaving = false }) {
5659
4937
  }
5660
4938
  ),
5661
4939
  /* @__PURE__ */ jsxRuntime.jsxs(
5662
- chunkOU2QLIKS_cjs.Button,
4940
+ chunkORKGCXG3_cjs.Button,
5663
4941
  {
5664
4942
  type: "button",
5665
4943
  variant: "outline",
@@ -5673,7 +4951,7 @@ function VideoCapture({ onSave, onDiscard, onError, isSaving = false }) {
5673
4951
  }
5674
4952
  ),
5675
4953
  /* @__PURE__ */ jsxRuntime.jsxs(
5676
- chunkOU2QLIKS_cjs.Button,
4954
+ chunkORKGCXG3_cjs.Button,
5677
4955
  {
5678
4956
  type: "button",
5679
4957
  onClick: handleSave,
@@ -5752,551 +5030,555 @@ Object.defineProperty(exports, "useNotify", {
5752
5030
  });
5753
5031
  Object.defineProperty(exports, "AgentBadge", {
5754
5032
  enumerable: true,
5755
- get: function () { return chunkOU2QLIKS_cjs.AgentBadge; }
5033
+ get: function () { return chunkORKGCXG3_cjs.AgentBadge; }
5756
5034
  });
5757
5035
  Object.defineProperty(exports, "AiMarkdown", {
5758
5036
  enumerable: true,
5759
- get: function () { return chunkOU2QLIKS_cjs.AiMarkdown; }
5037
+ get: function () { return chunkORKGCXG3_cjs.AiMarkdown; }
5760
5038
  });
5761
5039
  Object.defineProperty(exports, "ArbiBotHeadIcon", {
5762
5040
  enumerable: true,
5763
- get: function () { return chunkOU2QLIKS_cjs.ArbiBotHeadIcon; }
5041
+ get: function () { return chunkORKGCXG3_cjs.ArbiBotHeadIcon; }
5764
5042
  });
5765
5043
  Object.defineProperty(exports, "AudIcon", {
5766
5044
  enumerable: true,
5767
- get: function () { return chunkOU2QLIKS_cjs.AudIcon; }
5045
+ get: function () { return chunkORKGCXG3_cjs.AudIcon; }
5768
5046
  });
5769
5047
  Object.defineProperty(exports, "Avatar", {
5770
5048
  enumerable: true,
5771
- get: function () { return chunkOU2QLIKS_cjs.Avatar; }
5049
+ get: function () { return chunkORKGCXG3_cjs.Avatar; }
5772
5050
  });
5773
5051
  Object.defineProperty(exports, "AvatarFallback", {
5774
5052
  enumerable: true,
5775
- get: function () { return chunkOU2QLIKS_cjs.AvatarFallback; }
5053
+ get: function () { return chunkORKGCXG3_cjs.AvatarFallback; }
5776
5054
  });
5777
5055
  Object.defineProperty(exports, "AvatarImage", {
5778
5056
  enumerable: true,
5779
- get: function () { return chunkOU2QLIKS_cjs.AvatarImage; }
5057
+ get: function () { return chunkORKGCXG3_cjs.AvatarImage; }
5780
5058
  });
5781
5059
  Object.defineProperty(exports, "BASE_COLORS", {
5782
5060
  enumerable: true,
5783
- get: function () { return chunkOU2QLIKS_cjs.BASE_COLORS; }
5061
+ get: function () { return chunkORKGCXG3_cjs.BASE_COLORS; }
5784
5062
  });
5785
5063
  Object.defineProperty(exports, "Badge", {
5786
5064
  enumerable: true,
5787
- get: function () { return chunkOU2QLIKS_cjs.Badge; }
5065
+ get: function () { return chunkORKGCXG3_cjs.Badge; }
5788
5066
  });
5789
5067
  Object.defineProperty(exports, "Button", {
5790
5068
  enumerable: true,
5791
- get: function () { return chunkOU2QLIKS_cjs.Button; }
5069
+ get: function () { return chunkORKGCXG3_cjs.Button; }
5792
5070
  });
5793
5071
  Object.defineProperty(exports, "Card", {
5794
5072
  enumerable: true,
5795
- get: function () { return chunkOU2QLIKS_cjs.Card; }
5073
+ get: function () { return chunkORKGCXG3_cjs.Card; }
5796
5074
  });
5797
5075
  Object.defineProperty(exports, "CardContent", {
5798
5076
  enumerable: true,
5799
- get: function () { return chunkOU2QLIKS_cjs.CardContent; }
5077
+ get: function () { return chunkORKGCXG3_cjs.CardContent; }
5800
5078
  });
5801
5079
  Object.defineProperty(exports, "CardDescription", {
5802
5080
  enumerable: true,
5803
- get: function () { return chunkOU2QLIKS_cjs.CardDescription; }
5081
+ get: function () { return chunkORKGCXG3_cjs.CardDescription; }
5804
5082
  });
5805
5083
  Object.defineProperty(exports, "CardFooter", {
5806
5084
  enumerable: true,
5807
- get: function () { return chunkOU2QLIKS_cjs.CardFooter; }
5085
+ get: function () { return chunkORKGCXG3_cjs.CardFooter; }
5808
5086
  });
5809
5087
  Object.defineProperty(exports, "CardHeader", {
5810
5088
  enumerable: true,
5811
- get: function () { return chunkOU2QLIKS_cjs.CardHeader; }
5089
+ get: function () { return chunkORKGCXG3_cjs.CardHeader; }
5812
5090
  });
5813
5091
  Object.defineProperty(exports, "CardTitle", {
5814
5092
  enumerable: true,
5815
- get: function () { return chunkOU2QLIKS_cjs.CardTitle; }
5093
+ get: function () { return chunkORKGCXG3_cjs.CardTitle; }
5816
5094
  });
5817
5095
  Object.defineProperty(exports, "Checkbox", {
5818
5096
  enumerable: true,
5819
- get: function () { return chunkOU2QLIKS_cjs.Checkbox; }
5097
+ get: function () { return chunkORKGCXG3_cjs.Checkbox; }
5820
5098
  });
5821
5099
  Object.defineProperty(exports, "Collapsible", {
5822
5100
  enumerable: true,
5823
- get: function () { return chunkOU2QLIKS_cjs.Collapsible; }
5101
+ get: function () { return chunkORKGCXG3_cjs.Collapsible; }
5824
5102
  });
5825
5103
  Object.defineProperty(exports, "CollapsibleContent", {
5826
5104
  enumerable: true,
5827
- get: function () { return chunkOU2QLIKS_cjs.CollapsibleContent; }
5105
+ get: function () { return chunkORKGCXG3_cjs.CollapsibleContent; }
5828
5106
  });
5829
5107
  Object.defineProperty(exports, "CollapsibleTrigger", {
5830
5108
  enumerable: true,
5831
- get: function () { return chunkOU2QLIKS_cjs.CollapsibleTrigger; }
5109
+ get: function () { return chunkORKGCXG3_cjs.CollapsibleTrigger; }
5832
5110
  });
5833
5111
  Object.defineProperty(exports, "Command", {
5834
5112
  enumerable: true,
5835
- get: function () { return chunkOU2QLIKS_cjs.Command; }
5113
+ get: function () { return chunkORKGCXG3_cjs.Command; }
5836
5114
  });
5837
5115
  Object.defineProperty(exports, "CommandDialog", {
5838
5116
  enumerable: true,
5839
- get: function () { return chunkOU2QLIKS_cjs.CommandDialog; }
5117
+ get: function () { return chunkORKGCXG3_cjs.CommandDialog; }
5840
5118
  });
5841
5119
  Object.defineProperty(exports, "CommandEmpty", {
5842
5120
  enumerable: true,
5843
- get: function () { return chunkOU2QLIKS_cjs.CommandEmpty; }
5121
+ get: function () { return chunkORKGCXG3_cjs.CommandEmpty; }
5844
5122
  });
5845
5123
  Object.defineProperty(exports, "CommandGroup", {
5846
5124
  enumerable: true,
5847
- get: function () { return chunkOU2QLIKS_cjs.CommandGroup; }
5125
+ get: function () { return chunkORKGCXG3_cjs.CommandGroup; }
5848
5126
  });
5849
5127
  Object.defineProperty(exports, "CommandInput", {
5850
5128
  enumerable: true,
5851
- get: function () { return chunkOU2QLIKS_cjs.CommandInput; }
5129
+ get: function () { return chunkORKGCXG3_cjs.CommandInput; }
5852
5130
  });
5853
5131
  Object.defineProperty(exports, "CommandItem", {
5854
5132
  enumerable: true,
5855
- get: function () { return chunkOU2QLIKS_cjs.CommandItem; }
5133
+ get: function () { return chunkORKGCXG3_cjs.CommandItem; }
5856
5134
  });
5857
5135
  Object.defineProperty(exports, "CommandList", {
5858
5136
  enumerable: true,
5859
- get: function () { return chunkOU2QLIKS_cjs.CommandList; }
5137
+ get: function () { return chunkORKGCXG3_cjs.CommandList; }
5860
5138
  });
5861
5139
  Object.defineProperty(exports, "CommandSeparator", {
5862
5140
  enumerable: true,
5863
- get: function () { return chunkOU2QLIKS_cjs.CommandSeparator; }
5141
+ get: function () { return chunkORKGCXG3_cjs.CommandSeparator; }
5864
5142
  });
5865
5143
  Object.defineProperty(exports, "CommandShortcut", {
5866
5144
  enumerable: true,
5867
- get: function () { return chunkOU2QLIKS_cjs.CommandShortcut; }
5145
+ get: function () { return chunkORKGCXG3_cjs.CommandShortcut; }
5868
5146
  });
5869
5147
  Object.defineProperty(exports, "Dialog", {
5870
5148
  enumerable: true,
5871
- get: function () { return chunkOU2QLIKS_cjs.Dialog; }
5149
+ get: function () { return chunkORKGCXG3_cjs.Dialog; }
5872
5150
  });
5873
5151
  Object.defineProperty(exports, "DialogClose", {
5874
5152
  enumerable: true,
5875
- get: function () { return chunkOU2QLIKS_cjs.DialogClose; }
5153
+ get: function () { return chunkORKGCXG3_cjs.DialogClose; }
5876
5154
  });
5877
5155
  Object.defineProperty(exports, "DialogContent", {
5878
5156
  enumerable: true,
5879
- get: function () { return chunkOU2QLIKS_cjs.DialogContent; }
5157
+ get: function () { return chunkORKGCXG3_cjs.DialogContent; }
5880
5158
  });
5881
5159
  Object.defineProperty(exports, "DialogDescription", {
5882
5160
  enumerable: true,
5883
- get: function () { return chunkOU2QLIKS_cjs.DialogDescription; }
5161
+ get: function () { return chunkORKGCXG3_cjs.DialogDescription; }
5884
5162
  });
5885
5163
  Object.defineProperty(exports, "DialogFooter", {
5886
5164
  enumerable: true,
5887
- get: function () { return chunkOU2QLIKS_cjs.DialogFooter; }
5165
+ get: function () { return chunkORKGCXG3_cjs.DialogFooter; }
5888
5166
  });
5889
5167
  Object.defineProperty(exports, "DialogHeader", {
5890
5168
  enumerable: true,
5891
- get: function () { return chunkOU2QLIKS_cjs.DialogHeader; }
5169
+ get: function () { return chunkORKGCXG3_cjs.DialogHeader; }
5892
5170
  });
5893
5171
  Object.defineProperty(exports, "DialogOverlay", {
5894
5172
  enumerable: true,
5895
- get: function () { return chunkOU2QLIKS_cjs.DialogOverlay; }
5173
+ get: function () { return chunkORKGCXG3_cjs.DialogOverlay; }
5896
5174
  });
5897
5175
  Object.defineProperty(exports, "DialogPortal", {
5898
5176
  enumerable: true,
5899
- get: function () { return chunkOU2QLIKS_cjs.DialogPortal; }
5177
+ get: function () { return chunkORKGCXG3_cjs.DialogPortal; }
5900
5178
  });
5901
5179
  Object.defineProperty(exports, "DialogTitle", {
5902
5180
  enumerable: true,
5903
- get: function () { return chunkOU2QLIKS_cjs.DialogTitle; }
5181
+ get: function () { return chunkORKGCXG3_cjs.DialogTitle; }
5904
5182
  });
5905
5183
  Object.defineProperty(exports, "DialogTrigger", {
5906
5184
  enumerable: true,
5907
- get: function () { return chunkOU2QLIKS_cjs.DialogTrigger; }
5185
+ get: function () { return chunkORKGCXG3_cjs.DialogTrigger; }
5908
5186
  });
5909
5187
  Object.defineProperty(exports, "DictateProvider", {
5910
5188
  enumerable: true,
5911
- get: function () { return chunkOU2QLIKS_cjs.DictateProvider; }
5189
+ get: function () { return chunkORKGCXG3_cjs.DictateProvider; }
5912
5190
  });
5913
5191
  Object.defineProperty(exports, "DocumentCard", {
5914
5192
  enumerable: true,
5915
- get: function () { return chunkOU2QLIKS_cjs.DocumentCard; }
5193
+ get: function () { return chunkORKGCXG3_cjs.DocumentCard; }
5916
5194
  });
5917
5195
  Object.defineProperty(exports, "DocumentEntity", {
5918
5196
  enumerable: true,
5919
- get: function () { return chunkOU2QLIKS_cjs.DocumentEntity; }
5197
+ get: function () { return chunkORKGCXG3_cjs.DocumentEntity; }
5920
5198
  });
5921
5199
  Object.defineProperty(exports, "ENTITY_MAPPINGS", {
5922
5200
  enumerable: true,
5923
- get: function () { return chunkOU2QLIKS_cjs.ENTITY_MAPPINGS; }
5201
+ get: function () { return chunkORKGCXG3_cjs.ENTITY_MAPPINGS; }
5924
5202
  });
5925
5203
  Object.defineProperty(exports, "EmlIcon", {
5926
5204
  enumerable: true,
5927
- get: function () { return chunkOU2QLIKS_cjs.EmlIcon; }
5205
+ get: function () { return chunkORKGCXG3_cjs.EmlIcon; }
5928
5206
  });
5929
5207
  Object.defineProperty(exports, "EntityIcon", {
5930
5208
  enumerable: true,
5931
- get: function () { return chunkOU2QLIKS_cjs.EntityIcon; }
5209
+ get: function () { return chunkORKGCXG3_cjs.EntityIcon; }
5932
5210
  });
5933
5211
  Object.defineProperty(exports, "EntityPill", {
5934
5212
  enumerable: true,
5935
- get: function () { return chunkOU2QLIKS_cjs.EntityPill; }
5213
+ get: function () { return chunkORKGCXG3_cjs.EntityPill; }
5936
5214
  });
5937
5215
  Object.defineProperty(exports, "FILE_TYPE_COLORS", {
5938
5216
  enumerable: true,
5939
- get: function () { return chunkOU2QLIKS_cjs.FILE_TYPE_COLORS; }
5217
+ get: function () { return chunkORKGCXG3_cjs.FILE_TYPE_COLORS; }
5940
5218
  });
5941
5219
  Object.defineProperty(exports, "HoverCard", {
5942
5220
  enumerable: true,
5943
- get: function () { return chunkOU2QLIKS_cjs.HoverCard; }
5221
+ get: function () { return chunkORKGCXG3_cjs.HoverCard; }
5944
5222
  });
5945
5223
  Object.defineProperty(exports, "HoverCardContent", {
5946
5224
  enumerable: true,
5947
- get: function () { return chunkOU2QLIKS_cjs.HoverCardContent; }
5225
+ get: function () { return chunkORKGCXG3_cjs.HoverCardContent; }
5948
5226
  });
5949
5227
  Object.defineProperty(exports, "HoverCardTrigger", {
5950
5228
  enumerable: true,
5951
- get: function () { return chunkOU2QLIKS_cjs.HoverCardTrigger; }
5229
+ get: function () { return chunkORKGCXG3_cjs.HoverCardTrigger; }
5952
5230
  });
5953
5231
  Object.defineProperty(exports, "IconToggle", {
5954
5232
  enumerable: true,
5955
- get: function () { return chunkOU2QLIKS_cjs.IconToggle; }
5233
+ get: function () { return chunkORKGCXG3_cjs.IconToggle; }
5956
5234
  });
5957
5235
  Object.defineProperty(exports, "ImgIcon", {
5958
5236
  enumerable: true,
5959
- get: function () { return chunkOU2QLIKS_cjs.ImgIcon; }
5237
+ get: function () { return chunkORKGCXG3_cjs.ImgIcon; }
5960
5238
  });
5961
5239
  Object.defineProperty(exports, "InlineMicButton", {
5962
5240
  enumerable: true,
5963
- get: function () { return chunkOU2QLIKS_cjs.InlineMicButton; }
5241
+ get: function () { return chunkORKGCXG3_cjs.InlineMicButton; }
5964
5242
  });
5965
5243
  Object.defineProperty(exports, "Input", {
5966
5244
  enumerable: true,
5967
- get: function () { return chunkOU2QLIKS_cjs.Input; }
5245
+ get: function () { return chunkORKGCXG3_cjs.Input; }
5968
5246
  });
5969
5247
  Object.defineProperty(exports, "Label", {
5970
5248
  enumerable: true,
5971
- get: function () { return chunkOU2QLIKS_cjs.Label; }
5249
+ get: function () { return chunkORKGCXG3_cjs.Label; }
5972
5250
  });
5973
5251
  Object.defineProperty(exports, "MarkMenu", {
5974
5252
  enumerable: true,
5975
- get: function () { return chunkOU2QLIKS_cjs.MarkMenu; }
5253
+ get: function () { return chunkORKGCXG3_cjs.MarkMenu; }
5976
5254
  });
5977
5255
  Object.defineProperty(exports, "MarkdownRenderer", {
5978
5256
  enumerable: true,
5979
- get: function () { return chunkOU2QLIKS_cjs.MarkdownRenderer; }
5257
+ get: function () { return chunkORKGCXG3_cjs.MarkdownRenderer; }
5980
5258
  });
5981
5259
  Object.defineProperty(exports, "MarkdownStreamingContext", {
5982
5260
  enumerable: true,
5983
- get: function () { return chunkOU2QLIKS_cjs.MarkdownStreamingContext; }
5261
+ get: function () { return chunkORKGCXG3_cjs.MarkdownStreamingContext; }
5984
5262
  });
5985
5263
  Object.defineProperty(exports, "MicRecordingOverlay", {
5986
5264
  enumerable: true,
5987
- get: function () { return chunkOU2QLIKS_cjs.MicRecordingOverlay; }
5265
+ get: function () { return chunkORKGCXG3_cjs.MicRecordingOverlay; }
5988
5266
  });
5989
5267
  Object.defineProperty(exports, "MicWaveformIndicator", {
5990
5268
  enumerable: true,
5991
- get: function () { return chunkOU2QLIKS_cjs.MicWaveformIndicator; }
5269
+ get: function () { return chunkORKGCXG3_cjs.MicWaveformIndicator; }
5992
5270
  });
5993
5271
  Object.defineProperty(exports, "NEUTRAL_GRAY", {
5994
5272
  enumerable: true,
5995
- get: function () { return chunkOU2QLIKS_cjs.NEUTRAL_GRAY; }
5273
+ get: function () { return chunkORKGCXG3_cjs.NEUTRAL_GRAY; }
5996
5274
  });
5997
5275
  Object.defineProperty(exports, "PLACEHOLDER_COLOR", {
5998
5276
  enumerable: true,
5999
- get: function () { return chunkOU2QLIKS_cjs.PLACEHOLDER_COLOR; }
5277
+ get: function () { return chunkORKGCXG3_cjs.PLACEHOLDER_COLOR; }
6000
5278
  });
6001
5279
  Object.defineProperty(exports, "PassageCard", {
6002
5280
  enumerable: true,
6003
- get: function () { return chunkOU2QLIKS_cjs.PassageCard; }
5281
+ get: function () { return chunkORKGCXG3_cjs.PassageCard; }
6004
5282
  });
6005
5283
  Object.defineProperty(exports, "PdfIcon", {
6006
5284
  enumerable: true,
6007
- get: function () { return chunkOU2QLIKS_cjs.PdfIcon; }
5285
+ get: function () { return chunkORKGCXG3_cjs.PdfIcon; }
6008
5286
  });
6009
5287
  Object.defineProperty(exports, "Popover", {
6010
5288
  enumerable: true,
6011
- get: function () { return chunkOU2QLIKS_cjs.Popover; }
5289
+ get: function () { return chunkORKGCXG3_cjs.Popover; }
6012
5290
  });
6013
5291
  Object.defineProperty(exports, "PopoverAnchor", {
6014
5292
  enumerable: true,
6015
- get: function () { return chunkOU2QLIKS_cjs.PopoverAnchor; }
5293
+ get: function () { return chunkORKGCXG3_cjs.PopoverAnchor; }
6016
5294
  });
6017
5295
  Object.defineProperty(exports, "PopoverContent", {
6018
5296
  enumerable: true,
6019
- get: function () { return chunkOU2QLIKS_cjs.PopoverContent; }
5297
+ get: function () { return chunkORKGCXG3_cjs.PopoverContent; }
6020
5298
  });
6021
5299
  Object.defineProperty(exports, "PopoverTrigger", {
6022
5300
  enumerable: true,
6023
- get: function () { return chunkOU2QLIKS_cjs.PopoverTrigger; }
5301
+ get: function () { return chunkORKGCXG3_cjs.PopoverTrigger; }
6024
5302
  });
6025
5303
  Object.defineProperty(exports, "PresenceLabel", {
6026
5304
  enumerable: true,
6027
- get: function () { return chunkOU2QLIKS_cjs.PresenceLabel; }
5305
+ get: function () { return chunkORKGCXG3_cjs.PresenceLabel; }
6028
5306
  });
6029
5307
  Object.defineProperty(exports, "Progress", {
6030
5308
  enumerable: true,
6031
- get: function () { return chunkOU2QLIKS_cjs.Progress; }
5309
+ get: function () { return chunkORKGCXG3_cjs.Progress; }
6032
5310
  });
6033
5311
  Object.defineProperty(exports, "ProjectEntity", {
6034
5312
  enumerable: true,
6035
- get: function () { return chunkOU2QLIKS_cjs.ProjectEntity; }
5313
+ get: function () { return chunkORKGCXG3_cjs.ProjectEntity; }
6036
5314
  });
6037
5315
  Object.defineProperty(exports, "RadioGroup", {
6038
5316
  enumerable: true,
6039
- get: function () { return chunkOU2QLIKS_cjs.RadioGroup; }
5317
+ get: function () { return chunkORKGCXG3_cjs.RadioGroup; }
6040
5318
  });
6041
5319
  Object.defineProperty(exports, "RadioGroupItem", {
6042
5320
  enumerable: true,
6043
- get: function () { return chunkOU2QLIKS_cjs.RadioGroupItem; }
5321
+ get: function () { return chunkORKGCXG3_cjs.RadioGroupItem; }
6044
5322
  });
6045
5323
  Object.defineProperty(exports, "RagDot", {
6046
5324
  enumerable: true,
6047
- get: function () { return chunkOU2QLIKS_cjs.RagDot; }
5325
+ get: function () { return chunkORKGCXG3_cjs.RagDot; }
6048
5326
  });
6049
5327
  Object.defineProperty(exports, "RelevanceDot", {
6050
5328
  enumerable: true,
6051
- get: function () { return chunkOU2QLIKS_cjs.RelevanceDot; }
5329
+ get: function () { return chunkORKGCXG3_cjs.RelevanceDot; }
6052
5330
  });
6053
5331
  Object.defineProperty(exports, "Select", {
6054
5332
  enumerable: true,
6055
- get: function () { return chunkOU2QLIKS_cjs.Select; }
5333
+ get: function () { return chunkORKGCXG3_cjs.Select; }
6056
5334
  });
6057
5335
  Object.defineProperty(exports, "SelectContent", {
6058
5336
  enumerable: true,
6059
- get: function () { return chunkOU2QLIKS_cjs.SelectContent; }
5337
+ get: function () { return chunkORKGCXG3_cjs.SelectContent; }
6060
5338
  });
6061
5339
  Object.defineProperty(exports, "SelectGroup", {
6062
5340
  enumerable: true,
6063
- get: function () { return chunkOU2QLIKS_cjs.SelectGroup; }
5341
+ get: function () { return chunkORKGCXG3_cjs.SelectGroup; }
6064
5342
  });
6065
5343
  Object.defineProperty(exports, "SelectItem", {
6066
5344
  enumerable: true,
6067
- get: function () { return chunkOU2QLIKS_cjs.SelectItem; }
5345
+ get: function () { return chunkORKGCXG3_cjs.SelectItem; }
6068
5346
  });
6069
5347
  Object.defineProperty(exports, "SelectLabel", {
6070
5348
  enumerable: true,
6071
- get: function () { return chunkOU2QLIKS_cjs.SelectLabel; }
5349
+ get: function () { return chunkORKGCXG3_cjs.SelectLabel; }
6072
5350
  });
6073
5351
  Object.defineProperty(exports, "SelectScrollDownButton", {
6074
5352
  enumerable: true,
6075
- get: function () { return chunkOU2QLIKS_cjs.SelectScrollDownButton; }
5353
+ get: function () { return chunkORKGCXG3_cjs.SelectScrollDownButton; }
6076
5354
  });
6077
5355
  Object.defineProperty(exports, "SelectScrollUpButton", {
6078
5356
  enumerable: true,
6079
- get: function () { return chunkOU2QLIKS_cjs.SelectScrollUpButton; }
5357
+ get: function () { return chunkORKGCXG3_cjs.SelectScrollUpButton; }
6080
5358
  });
6081
5359
  Object.defineProperty(exports, "SelectSeparator", {
6082
5360
  enumerable: true,
6083
- get: function () { return chunkOU2QLIKS_cjs.SelectSeparator; }
5361
+ get: function () { return chunkORKGCXG3_cjs.SelectSeparator; }
6084
5362
  });
6085
5363
  Object.defineProperty(exports, "SelectTrigger", {
6086
5364
  enumerable: true,
6087
- get: function () { return chunkOU2QLIKS_cjs.SelectTrigger; }
5365
+ get: function () { return chunkORKGCXG3_cjs.SelectTrigger; }
6088
5366
  });
6089
5367
  Object.defineProperty(exports, "SelectValue", {
6090
5368
  enumerable: true,
6091
- get: function () { return chunkOU2QLIKS_cjs.SelectValue; }
5369
+ get: function () { return chunkORKGCXG3_cjs.SelectValue; }
6092
5370
  });
6093
5371
  Object.defineProperty(exports, "Separator", {
6094
5372
  enumerable: true,
6095
- get: function () { return chunkOU2QLIKS_cjs.Separator; }
5373
+ get: function () { return chunkORKGCXG3_cjs.Separator; }
6096
5374
  });
6097
5375
  Object.defineProperty(exports, "Slider", {
6098
5376
  enumerable: true,
6099
- get: function () { return chunkOU2QLIKS_cjs.Slider; }
5377
+ get: function () { return chunkORKGCXG3_cjs.Slider; }
6100
5378
  });
6101
5379
  Object.defineProperty(exports, "StatusPill", {
6102
5380
  enumerable: true,
6103
- get: function () { return chunkOU2QLIKS_cjs.StatusPill; }
5381
+ get: function () { return chunkORKGCXG3_cjs.StatusPill; }
6104
5382
  });
6105
5383
  Object.defineProperty(exports, "Switch", {
6106
5384
  enumerable: true,
6107
- get: function () { return chunkOU2QLIKS_cjs.Switch; }
5385
+ get: function () { return chunkORKGCXG3_cjs.Switch; }
6108
5386
  });
6109
5387
  Object.defineProperty(exports, "TAG_TYPE_ICONS", {
6110
5388
  enumerable: true,
6111
- get: function () { return chunkOU2QLIKS_cjs.TAG_TYPE_ICONS; }
5389
+ get: function () { return chunkORKGCXG3_cjs.TAG_TYPE_ICONS; }
6112
5390
  });
6113
5391
  Object.defineProperty(exports, "TAG_TYPE_LABELS", {
6114
5392
  enumerable: true,
6115
- get: function () { return chunkOU2QLIKS_cjs.TAG_TYPE_LABELS; }
5393
+ get: function () { return chunkORKGCXG3_cjs.TAG_TYPE_LABELS; }
6116
5394
  });
6117
5395
  Object.defineProperty(exports, "Table", {
6118
5396
  enumerable: true,
6119
- get: function () { return chunkOU2QLIKS_cjs.Table; }
5397
+ get: function () { return chunkORKGCXG3_cjs.Table; }
6120
5398
  });
6121
5399
  Object.defineProperty(exports, "TableBody", {
6122
5400
  enumerable: true,
6123
- get: function () { return chunkOU2QLIKS_cjs.TableBody; }
5401
+ get: function () { return chunkORKGCXG3_cjs.TableBody; }
6124
5402
  });
6125
5403
  Object.defineProperty(exports, "TableCaption", {
6126
5404
  enumerable: true,
6127
- get: function () { return chunkOU2QLIKS_cjs.TableCaption; }
5405
+ get: function () { return chunkORKGCXG3_cjs.TableCaption; }
6128
5406
  });
6129
5407
  Object.defineProperty(exports, "TableCell", {
6130
5408
  enumerable: true,
6131
- get: function () { return chunkOU2QLIKS_cjs.TableCell; }
5409
+ get: function () { return chunkORKGCXG3_cjs.TableCell; }
6132
5410
  });
6133
5411
  Object.defineProperty(exports, "TableFooter", {
6134
5412
  enumerable: true,
6135
- get: function () { return chunkOU2QLIKS_cjs.TableFooter; }
5413
+ get: function () { return chunkORKGCXG3_cjs.TableFooter; }
6136
5414
  });
6137
5415
  Object.defineProperty(exports, "TableHead", {
6138
5416
  enumerable: true,
6139
- get: function () { return chunkOU2QLIKS_cjs.TableHead; }
5417
+ get: function () { return chunkORKGCXG3_cjs.TableHead; }
6140
5418
  });
6141
5419
  Object.defineProperty(exports, "TableHeader", {
6142
5420
  enumerable: true,
6143
- get: function () { return chunkOU2QLIKS_cjs.TableHeader; }
5421
+ get: function () { return chunkORKGCXG3_cjs.TableHeader; }
6144
5422
  });
6145
5423
  Object.defineProperty(exports, "TableRow", {
6146
5424
  enumerable: true,
6147
- get: function () { return chunkOU2QLIKS_cjs.TableRow; }
5425
+ get: function () { return chunkORKGCXG3_cjs.TableRow; }
6148
5426
  });
6149
5427
  Object.defineProperty(exports, "Tabs", {
6150
5428
  enumerable: true,
6151
- get: function () { return chunkOU2QLIKS_cjs.Tabs; }
5429
+ get: function () { return chunkORKGCXG3_cjs.Tabs; }
6152
5430
  });
6153
5431
  Object.defineProperty(exports, "TabsContent", {
6154
5432
  enumerable: true,
6155
- get: function () { return chunkOU2QLIKS_cjs.TabsContent; }
5433
+ get: function () { return chunkORKGCXG3_cjs.TabsContent; }
6156
5434
  });
6157
5435
  Object.defineProperty(exports, "TabsList", {
6158
5436
  enumerable: true,
6159
- get: function () { return chunkOU2QLIKS_cjs.TabsList; }
5437
+ get: function () { return chunkORKGCXG3_cjs.TabsList; }
6160
5438
  });
6161
5439
  Object.defineProperty(exports, "TabsTrigger", {
6162
5440
  enumerable: true,
6163
- get: function () { return chunkOU2QLIKS_cjs.TabsTrigger; }
5441
+ get: function () { return chunkORKGCXG3_cjs.TabsTrigger; }
6164
5442
  });
6165
5443
  Object.defineProperty(exports, "TagEntity", {
6166
5444
  enumerable: true,
6167
- get: function () { return chunkOU2QLIKS_cjs.TagEntity; }
5445
+ get: function () { return chunkORKGCXG3_cjs.TagEntity; }
6168
5446
  });
6169
5447
  Object.defineProperty(exports, "Textarea", {
6170
5448
  enumerable: true,
6171
- get: function () { return chunkOU2QLIKS_cjs.Textarea; }
5449
+ get: function () { return chunkORKGCXG3_cjs.Textarea; }
6172
5450
  });
6173
5451
  Object.defineProperty(exports, "Toggle", {
6174
5452
  enumerable: true,
6175
- get: function () { return chunkOU2QLIKS_cjs.Toggle; }
5453
+ get: function () { return chunkORKGCXG3_cjs.Toggle; }
6176
5454
  });
6177
5455
  Object.defineProperty(exports, "ToggleGroup", {
6178
5456
  enumerable: true,
6179
- get: function () { return chunkOU2QLIKS_cjs.ToggleGroup; }
5457
+ get: function () { return chunkORKGCXG3_cjs.ToggleGroup; }
6180
5458
  });
6181
5459
  Object.defineProperty(exports, "ToggleGroupItem", {
6182
5460
  enumerable: true,
6183
- get: function () { return chunkOU2QLIKS_cjs.ToggleGroupItem; }
5461
+ get: function () { return chunkORKGCXG3_cjs.ToggleGroupItem; }
6184
5462
  });
6185
5463
  Object.defineProperty(exports, "Tooltip", {
6186
5464
  enumerable: true,
6187
- get: function () { return chunkOU2QLIKS_cjs.Tooltip; }
5465
+ get: function () { return chunkORKGCXG3_cjs.Tooltip; }
6188
5466
  });
6189
5467
  Object.defineProperty(exports, "TooltipContent", {
6190
5468
  enumerable: true,
6191
- get: function () { return chunkOU2QLIKS_cjs.TooltipContent; }
5469
+ get: function () { return chunkORKGCXG3_cjs.TooltipContent; }
6192
5470
  });
6193
5471
  Object.defineProperty(exports, "TooltipProvider", {
6194
5472
  enumerable: true,
6195
- get: function () { return chunkOU2QLIKS_cjs.TooltipProvider; }
5473
+ get: function () { return chunkORKGCXG3_cjs.TooltipProvider; }
6196
5474
  });
6197
5475
  Object.defineProperty(exports, "TooltipTrigger", {
6198
5476
  enumerable: true,
6199
- get: function () { return chunkOU2QLIKS_cjs.TooltipTrigger; }
5477
+ get: function () { return chunkORKGCXG3_cjs.TooltipTrigger; }
6200
5478
  });
6201
5479
  Object.defineProperty(exports, "UserEntity", {
6202
5480
  enumerable: true,
6203
- get: function () { return chunkOU2QLIKS_cjs.UserEntity; }
5481
+ get: function () { return chunkORKGCXG3_cjs.UserEntity; }
6204
5482
  });
6205
5483
  Object.defineProperty(exports, "UserMenu", {
6206
5484
  enumerable: true,
6207
- get: function () { return chunkOU2QLIKS_cjs.UserMenu; }
5485
+ get: function () { return chunkORKGCXG3_cjs.UserMenu; }
6208
5486
  });
6209
5487
  Object.defineProperty(exports, "VISIBILITY_ICONS", {
6210
5488
  enumerable: true,
6211
- get: function () { return chunkOU2QLIKS_cjs.VISIBILITY_ICONS; }
5489
+ get: function () { return chunkORKGCXG3_cjs.VISIBILITY_ICONS; }
6212
5490
  });
6213
5491
  Object.defineProperty(exports, "VidIcon", {
6214
5492
  enumerable: true,
6215
- get: function () { return chunkOU2QLIKS_cjs.VidIcon; }
5493
+ get: function () { return chunkORKGCXG3_cjs.VidIcon; }
6216
5494
  });
6217
5495
  Object.defineProperty(exports, "VisibilityIcon", {
6218
5496
  enumerable: true,
6219
- get: function () { return chunkOU2QLIKS_cjs.VisibilityIcon; }
5497
+ get: function () { return chunkORKGCXG3_cjs.VisibilityIcon; }
6220
5498
  });
6221
5499
  Object.defineProperty(exports, "badgeVariants", {
6222
5500
  enumerable: true,
6223
- get: function () { return chunkOU2QLIKS_cjs.badgeVariants; }
5501
+ get: function () { return chunkORKGCXG3_cjs.badgeVariants; }
6224
5502
  });
6225
5503
  Object.defineProperty(exports, "buttonVariants", {
6226
5504
  enumerable: true,
6227
- get: function () { return chunkOU2QLIKS_cjs.buttonVariants; }
5505
+ get: function () { return chunkORKGCXG3_cjs.buttonVariants; }
6228
5506
  });
6229
5507
  Object.defineProperty(exports, "cardVariants", {
6230
5508
  enumerable: true,
6231
- get: function () { return chunkOU2QLIKS_cjs.cardVariants; }
5509
+ get: function () { return chunkORKGCXG3_cjs.cardVariants; }
6232
5510
  });
6233
5511
  Object.defineProperty(exports, "configureEntityRegistry", {
6234
5512
  enumerable: true,
6235
- get: function () { return chunkOU2QLIKS_cjs.configureEntityRegistry; }
5513
+ get: function () { return chunkORKGCXG3_cjs.configureEntityRegistry; }
6236
5514
  });
6237
5515
  Object.defineProperty(exports, "configureRagLabels", {
6238
5516
  enumerable: true,
6239
- get: function () { return chunkOU2QLIKS_cjs.configureRagLabels; }
5517
+ get: function () { return chunkORKGCXG3_cjs.configureRagLabels; }
6240
5518
  });
6241
5519
  Object.defineProperty(exports, "configureStatusRegistry", {
6242
5520
  enumerable: true,
6243
- get: function () { return chunkOU2QLIKS_cjs.configureStatusRegistry; }
5521
+ get: function () { return chunkORKGCXG3_cjs.configureStatusRegistry; }
6244
5522
  });
6245
5523
  Object.defineProperty(exports, "formatElapsed", {
6246
5524
  enumerable: true,
6247
- get: function () { return chunkOU2QLIKS_cjs.formatElapsed; }
5525
+ get: function () { return chunkORKGCXG3_cjs.formatElapsed; }
6248
5526
  });
6249
5527
  Object.defineProperty(exports, "getDocIcon", {
6250
5528
  enumerable: true,
6251
- get: function () { return chunkOU2QLIKS_cjs.getDocIcon; }
5529
+ get: function () { return chunkORKGCXG3_cjs.getDocIcon; }
6252
5530
  });
6253
5531
  Object.defineProperty(exports, "getEntityColor", {
6254
5532
  enumerable: true,
6255
- get: function () { return chunkOU2QLIKS_cjs.getEntityColor; }
5533
+ get: function () { return chunkORKGCXG3_cjs.getEntityColor; }
6256
5534
  });
6257
5535
  Object.defineProperty(exports, "getEntityColorStyles", {
6258
5536
  enumerable: true,
6259
- get: function () { return chunkOU2QLIKS_cjs.getEntityColorStyles; }
5537
+ get: function () { return chunkORKGCXG3_cjs.getEntityColorStyles; }
6260
5538
  });
6261
5539
  Object.defineProperty(exports, "getEntityIcon", {
6262
5540
  enumerable: true,
6263
- get: function () { return chunkOU2QLIKS_cjs.getEntityIcon; }
5541
+ get: function () { return chunkORKGCXG3_cjs.getEntityIcon; }
6264
5542
  });
6265
5543
  Object.defineProperty(exports, "getEntityLabel", {
6266
5544
  enumerable: true,
6267
- get: function () { return chunkOU2QLIKS_cjs.getEntityLabel; }
5545
+ get: function () { return chunkORKGCXG3_cjs.getEntityLabel; }
6268
5546
  });
6269
5547
  Object.defineProperty(exports, "getStatusVariant", {
6270
5548
  enumerable: true,
6271
- get: function () { return chunkOU2QLIKS_cjs.getStatusVariant; }
5549
+ get: function () { return chunkORKGCXG3_cjs.getStatusVariant; }
6272
5550
  });
6273
5551
  Object.defineProperty(exports, "getTagTypeIcon", {
6274
5552
  enumerable: true,
6275
- get: function () { return chunkOU2QLIKS_cjs.getTagTypeIcon; }
5553
+ get: function () { return chunkORKGCXG3_cjs.getTagTypeIcon; }
6276
5554
  });
6277
5555
  Object.defineProperty(exports, "getTagTypeLabel", {
6278
5556
  enumerable: true,
6279
- get: function () { return chunkOU2QLIKS_cjs.getTagTypeLabel; }
5557
+ get: function () { return chunkORKGCXG3_cjs.getTagTypeLabel; }
6280
5558
  });
6281
5559
  Object.defineProperty(exports, "getWorkspaceColor", {
6282
5560
  enumerable: true,
6283
- get: function () { return chunkOU2QLIKS_cjs.getWorkspaceColor; }
5561
+ get: function () { return chunkORKGCXG3_cjs.getWorkspaceColor; }
6284
5562
  });
6285
5563
  Object.defineProperty(exports, "markdownBaseComponents", {
6286
5564
  enumerable: true,
6287
- get: function () { return chunkOU2QLIKS_cjs.markdownBaseComponents; }
5565
+ get: function () { return chunkORKGCXG3_cjs.markdownBaseComponents; }
5566
+ });
5567
+ Object.defineProperty(exports, "normalizeCitationMarkup", {
5568
+ enumerable: true,
5569
+ get: function () { return chunkORKGCXG3_cjs.normalizeCitationMarkup; }
6288
5570
  });
6289
5571
  Object.defineProperty(exports, "splitMarkdownBlocks", {
6290
5572
  enumerable: true,
6291
- get: function () { return chunkOU2QLIKS_cjs.splitMarkdownBlocks; }
5573
+ get: function () { return chunkORKGCXG3_cjs.splitMarkdownBlocks; }
6292
5574
  });
6293
5575
  Object.defineProperty(exports, "toggleVariants", {
6294
5576
  enumerable: true,
6295
- get: function () { return chunkOU2QLIKS_cjs.toggleVariants; }
5577
+ get: function () { return chunkORKGCXG3_cjs.toggleVariants; }
6296
5578
  });
6297
5579
  Object.defineProperty(exports, "useAudioRecorder", {
6298
5580
  enumerable: true,
6299
- get: function () { return chunkOU2QLIKS_cjs.useAudioRecorder; }
5581
+ get: function () { return chunkORKGCXG3_cjs.useAudioRecorder; }
6300
5582
  });
6301
5583
  Object.defineProperty(exports, "DropdownMenu", {
6302
5584
  enumerable: true,
@@ -6395,8 +5677,6 @@ exports.AiActionCard = AiActionCard;
6395
5677
  exports.AiAnswer = AiAnswer;
6396
5678
  exports.AppleIcon = AppleIcon;
6397
5679
  exports.ArbiBotIcon = ArbiBotIcon;
6398
- exports.ArbiChat = ArbiChat;
6399
- exports.ArbiChatPanel = ArbiChatPanel;
6400
5680
  exports.ArbiIcon = ArbiIcon;
6401
5681
  exports.ArbiWebSocketProvider = ArbiWebSocketProvider;
6402
5682
  exports.ArtifactCanvas = ArtifactCanvas;
@@ -6429,7 +5709,7 @@ exports.ImageCropModal = ImageCropModal;
6429
5709
  exports.ImageCropper = ImageCropper;
6430
5710
  exports.LinkedInIcon = LinkedInIcon;
6431
5711
  exports.MessageArtifactCard = MessageArtifactCard;
6432
- exports.MessageBubble = MessageBubble2;
5712
+ exports.MessageBubble = MessageBubble;
6433
5713
  exports.MessageThread = MessageThread;
6434
5714
  exports.OpenAIIcon = OpenAIIcon;
6435
5715
  exports.PhotoCapture = PhotoCapture;
@@ -6449,18 +5729,25 @@ exports.dayKey = dayKey;
6449
5729
  exports.describeActivity = describeActivity;
6450
5730
  exports.getNotificationTypeMeta = getNotificationTypeMeta;
6451
5731
  exports.getWorkspaceActionText = getWorkspaceActionText;
5732
+ exports.getWorkspaceKind = getWorkspaceKind;
6452
5733
  exports.getWorkspaceSentPhrase = getWorkspaceSentPhrase;
6453
5734
  exports.hasVideoTrack = hasVideoTrack;
6454
5735
  exports.isWorkspaceNotificationType = isWorkspaceNotificationType;
6455
5736
  exports.parseActivityContent = parseActivityContent;
5737
+ exports.pickRecentWorkspaces = pickRecentWorkspaces;
6456
5738
  exports.redlineStats = redlineStats;
5739
+ exports.resolveActiveWorkspace = resolveActiveWorkspace;
6457
5740
  exports.textToArtifact = textToArtifact;
5741
+ exports.titleFromQuestion = titleFromQuestion;
6458
5742
  exports.toRedlineMarkdown = toRedlineMarkdown;
5743
+ exports.toShellWorkspace = toShellWorkspace;
6459
5744
  exports.useActivity = useActivity;
6460
5745
  exports.useAgents = useAgents;
6461
5746
  exports.useAiTask = useAiTask;
5747
+ exports.useArbiChat = useArbiChat;
6462
5748
  exports.useArbiConnected = useArbiConnected;
6463
5749
  exports.useArbiDocumentSync = useArbiDocumentSync;
5750
+ exports.useArbiShellWorkspaces = useArbiShellWorkspaces;
6464
5751
  exports.useArbiUiStore = useArbiUiStore;
6465
5752
  exports.useArbiWebSocket = useArbiWebSocket;
6466
5753
  exports.useArbiWsContext = useArbiWsContext;
@@ -6486,6 +5773,7 @@ exports.useProjects = useProjects;
6486
5773
  exports.useProjectsUsage = useProjectsUsage;
6487
5774
  exports.useSemanticSearch = useSemanticSearch;
6488
5775
  exports.useSessions = useSessions;
5776
+ exports.useShellWorkspaces = useShellWorkspaces;
6489
5777
  exports.useTags = useTags;
6490
5778
  exports.useTasks = useTasks;
6491
5779
  exports.useThumbnails = useThumbnails;