@arbidocs/react 0.3.183 → 0.3.185

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,8 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkFIPS3VPH_cjs = require('./chunk-FIPS3VPH.cjs');
3
+ var chunk3MLQUKT4_cjs = require('./chunk-3MLQUKT4.cjs');
4
+ var chunkIZPXHVPJ_cjs = require('./chunk-IZPXHVPJ.cjs');
4
5
  var chunk7IOCMCC5_cjs = require('./chunk-7IOCMCC5.cjs');
5
- var React2 = require('react');
6
+ var React = require('react');
6
7
  var reactQuery = require('@tanstack/react-query');
7
8
  var jsxRuntime = require('react/jsx-runtime');
8
9
  var browser = require('@arbidocs/sdk/browser');
@@ -12,14 +13,13 @@ var zustand = require('zustand');
12
13
  var diff = require('diff');
13
14
  var framerMotion = require('framer-motion');
14
15
  var ReactMarkdown = require('react-markdown');
15
- var sonner = require('sonner');
16
16
  var Cropper = require('react-easy-crop');
17
17
  var agGridReact = require('ag-grid-react');
18
18
  var agGridCommunity = require('ag-grid-community');
19
19
 
20
20
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
21
21
 
22
- var React2__default = /*#__PURE__*/_interopDefault(React2);
22
+ var React__default = /*#__PURE__*/_interopDefault(React);
23
23
  var ReactMarkdown__default = /*#__PURE__*/_interopDefault(ReactMarkdown);
24
24
  var Cropper__default = /*#__PURE__*/_interopDefault(Cropper);
25
25
 
@@ -347,16 +347,16 @@ function agentStatusStyle(theme) {
347
347
  }
348
348
  function AuthScreen({ theme, labels, onLogin }) {
349
349
  const arbi = chunk7IOCMCC5_cjs.useArbi();
350
- const [mode, setMode] = React2.useState("login");
351
- const [step, setStep] = React2.useState("email");
352
- const [email, setEmail] = React2.useState("");
353
- const [password, setPassword] = React2.useState("");
354
- const [confirmPw, setConfirmPw] = React2.useState("");
355
- const [code, setCode] = React2.useState("");
356
- const [firstName, setFirstName] = React2.useState("");
357
- const [lastName, setLastName] = React2.useState("");
358
- const [loading, setLoading] = React2.useState(false);
359
- const [error, setError] = React2.useState("");
350
+ const [mode, setMode] = React.useState("login");
351
+ const [step, setStep] = React.useState("email");
352
+ const [email, setEmail] = React.useState("");
353
+ const [password, setPassword] = React.useState("");
354
+ const [confirmPw, setConfirmPw] = React.useState("");
355
+ const [code, setCode] = React.useState("");
356
+ const [firstName, setFirstName] = React.useState("");
357
+ const [lastName, setLastName] = React.useState("");
358
+ const [loading, setLoading] = React.useState(false);
359
+ const [error, setError] = React.useState("");
360
360
  const resetForm = () => {
361
361
  setPassword("");
362
362
  setConfirmPw("");
@@ -746,7 +746,7 @@ function useProjectsUsage(projectExtIds, monthsBack = 0, options) {
746
746
  }))
747
747
  });
748
748
  const signature = results.map((r) => `${r.status}:${r.dataUpdatedAt ?? 0}`).join("|");
749
- return React2.useMemo(() => {
749
+ return React.useMemo(() => {
750
750
  const dailyMap = /* @__PURE__ */ new Map();
751
751
  const modelMap = /* @__PURE__ */ new Map();
752
752
  let totalSpend = 0;
@@ -819,11 +819,11 @@ function useUserUsageToday(options) {
819
819
  function WorkspaceScreen({ theme, labels, onSelect }) {
820
820
  const arbi = chunk7IOCMCC5_cjs.useArbi();
821
821
  const { data: workspaces, isLoading } = useWorkspaces();
822
- const [mode, setMode] = React2.useState("select");
823
- const [selected, setSelected] = React2.useState("");
824
- const [newName, setNewName] = React2.useState("");
825
- const [loading, setLoading] = React2.useState(false);
826
- const [error, setError] = React2.useState("");
822
+ const [mode, setMode] = React.useState("select");
823
+ const [selected, setSelected] = React.useState("");
824
+ const [newName, setNewName] = React.useState("");
825
+ const [loading, setLoading] = React.useState(false);
826
+ const [error, setError] = React.useState("");
827
827
  if (isLoading) {
828
828
  return /* @__PURE__ */ jsxRuntime.jsx("div", { style: loadingContainerStyle(), children: "Loading workspaces..." });
829
829
  }
@@ -944,7 +944,7 @@ function WorkspaceScreen({ theme, labels, onSelect }) {
944
944
  }
945
945
  var CITE_RE = /\[([^\]]+)\]\(#cite-(\d+)\)/g;
946
946
  function MessageBubble({ message, theme }) {
947
- const [expandedCite, setExpandedCite] = React2.useState(null);
947
+ const [expandedCite, setExpandedCite] = React.useState(null);
948
948
  const hasCitations = message.role === "assistant" && message.metadata && CITE_RE.test(message.text);
949
949
  CITE_RE.lastIndex = 0;
950
950
  const resolved = hasCitations ? browser.resolveCitations(message.metadata) : [];
@@ -952,7 +952,7 @@ function MessageBubble({ message, theme }) {
952
952
  const summaryMap = new Map(summaries.map((s) => [s.citationNum, s]));
953
953
  const activeSummary = expandedCite ? summaryMap.get(expandedCite) : null;
954
954
  const activeResolved = expandedCite ? resolved.find((r) => r.citationNum === expandedCite) : null;
955
- const markdownComponents = React2.useMemo(
955
+ const markdownComponents = React.useMemo(
956
956
  () => ({
957
957
  a: ({ href, children, ...props }) => {
958
958
  if (href?.startsWith("#cite-")) {
@@ -989,7 +989,7 @@ function MessageBubble({ message, theme }) {
989
989
  [theme]
990
990
  );
991
991
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
992
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: messageBubbleStyle(theme, message.role), children: /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.MarkdownRenderer, { components: markdownComponents, children: message.text }) }),
992
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: messageBubbleStyle(theme, message.role), children: /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.MarkdownRenderer, { components: markdownComponents, children: message.text }) }),
993
993
  activeSummary && activeResolved && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: citePanelStyle(theme), children: [
994
994
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: citePanelHeaderStyle(theme), children: [
995
995
  /* @__PURE__ */ jsxRuntime.jsxs("strong", { children: [
@@ -1057,22 +1057,22 @@ function ChatView({ workspaceId, theme, labels }) {
1057
1057
  const arbi = chunk7IOCMCC5_cjs.useArbi();
1058
1058
  const { data: docs, refetch: refetchDocs } = useDocuments(workspaceId);
1059
1059
  const mutation = useAssistantQuery();
1060
- const [messages, setMessages] = React2.useState([]);
1061
- const [input, setInput] = React2.useState("");
1062
- const [streaming, setStreaming] = React2.useState("");
1063
- const [agentStatus, setAgentStatus] = React2.useState("");
1064
- const [selectedDocs, setSelectedDocs] = React2.useState([]);
1065
- const [docsExpanded, setDocsExpanded] = React2.useState(false);
1066
- const [previousResponseId, setPreviousResponseId] = React2.useState(null);
1067
- const [uploading, setUploading] = React2.useState(false);
1068
- const messagesEndRef = React2.useRef(null);
1069
- const fileInputRef = React2.useRef(null);
1070
- React2.useEffect(() => {
1060
+ const [messages, setMessages] = React.useState([]);
1061
+ const [input, setInput] = React.useState("");
1062
+ const [streaming, setStreaming] = React.useState("");
1063
+ const [agentStatus, setAgentStatus] = React.useState("");
1064
+ const [selectedDocs, setSelectedDocs] = React.useState([]);
1065
+ const [docsExpanded, setDocsExpanded] = React.useState(false);
1066
+ const [previousResponseId, setPreviousResponseId] = React.useState(null);
1067
+ const [uploading, setUploading] = React.useState(false);
1068
+ const messagesEndRef = React.useRef(null);
1069
+ const fileInputRef = React.useRef(null);
1070
+ React.useEffect(() => {
1071
1071
  if (docs && docs.length > 0 && selectedDocs.length === 0) {
1072
1072
  setSelectedDocs(docs.map((d) => d.external_id));
1073
1073
  }
1074
1074
  }, [docs, selectedDocs.length]);
1075
- React2.useEffect(() => {
1075
+ React.useEffect(() => {
1076
1076
  messagesEndRef.current?.scrollIntoView({ behavior: "smooth" });
1077
1077
  }, [messages, streaming, agentStatus]);
1078
1078
  const toggleDoc = (docId) => {
@@ -1080,7 +1080,7 @@ function ChatView({ workspaceId, theme, labels }) {
1080
1080
  (prev) => prev.includes(docId) ? prev.filter((id) => id !== docId) : [...prev, docId]
1081
1081
  );
1082
1082
  };
1083
- const handleUpload = React2.useCallback(
1083
+ const handleUpload = React.useCallback(
1084
1084
  async (e) => {
1085
1085
  const files = e.target.files;
1086
1086
  if (!files || files.length === 0) return;
@@ -1101,7 +1101,7 @@ function ChatView({ workspaceId, theme, labels }) {
1101
1101
  },
1102
1102
  [arbi, refetchDocs]
1103
1103
  );
1104
- const handleSubmit = React2.useCallback(
1104
+ const handleSubmit = React.useCallback(
1105
1105
  (e) => {
1106
1106
  e.preventDefault();
1107
1107
  const question = input.trim();
@@ -1235,9 +1235,9 @@ function ChatView({ workspaceId, theme, labels }) {
1235
1235
  }
1236
1236
  function ChatWidget({ theme, labels, initialWorkspaceId, width, height }) {
1237
1237
  const arbi = chunk7IOCMCC5_cjs.useArbi();
1238
- const [screen, setScreen] = React2.useState("auth");
1239
- const [workspaceId, setWorkspaceId] = React2.useState(initialWorkspaceId);
1240
- const resolveWorkspace = React2.useCallback(async () => {
1238
+ const [screen, setScreen] = React.useState("auth");
1239
+ const [workspaceId, setWorkspaceId] = React.useState(initialWorkspaceId);
1240
+ const resolveWorkspace = React.useCallback(async () => {
1241
1241
  if (initialWorkspaceId) {
1242
1242
  try {
1243
1243
  await arbi.selectWorkspace(initialWorkspaceId);
@@ -1250,15 +1250,15 @@ function ChatWidget({ theme, labels, initialWorkspaceId, width, height }) {
1250
1250
  }
1251
1251
  setScreen("workspace");
1252
1252
  }, [arbi, initialWorkspaceId]);
1253
- const handleLogin = React2.useCallback(() => resolveWorkspace(), [resolveWorkspace]);
1254
- React2.useEffect(() => {
1253
+ const handleLogin = React.useCallback(() => resolveWorkspace(), [resolveWorkspace]);
1254
+ React.useEffect(() => {
1255
1255
  if (arbi.isLoggedIn) void resolveWorkspace();
1256
1256
  }, [arbi, resolveWorkspace]);
1257
- const handleWorkspaceSelect = React2.useCallback((id) => {
1257
+ const handleWorkspaceSelect = React.useCallback((id) => {
1258
1258
  setWorkspaceId(id);
1259
1259
  setScreen("chat");
1260
1260
  }, []);
1261
- const handleChangeWorkspace = React2.useCallback(() => {
1261
+ const handleChangeWorkspace = React.useCallback(() => {
1262
1262
  setScreen("workspace");
1263
1263
  }, []);
1264
1264
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: containerStyle(theme, width, height), children: [
@@ -1294,8 +1294,8 @@ function ArbiChatPanel({
1294
1294
  width = "100%",
1295
1295
  height = "100%"
1296
1296
  }) {
1297
- const theme = React2.useMemo(() => getTheme(themeOverrides), [themeOverrides]);
1298
- const labels = React2.useMemo(() => getLabels(labelOverrides), [labelOverrides]);
1297
+ const theme = React.useMemo(() => getTheme(themeOverrides), [themeOverrides]);
1298
+ const labels = React.useMemo(() => getLabels(labelOverrides), [labelOverrides]);
1299
1299
  return /* @__PURE__ */ jsxRuntime.jsx(
1300
1300
  ChatWidget,
1301
1301
  {
@@ -1315,7 +1315,7 @@ function ArbiChat({
1315
1315
  width = "400px",
1316
1316
  height = "600px"
1317
1317
  }) {
1318
- const queryClient = React2.useMemo(
1318
+ const queryClient = React.useMemo(
1319
1319
  () => new reactQuery.QueryClient({
1320
1320
  defaultOptions: {
1321
1321
  queries: { retry: 1, refetchOnWindowFocus: false },
@@ -1335,14 +1335,14 @@ function ArbiChat({
1335
1335
  }
1336
1336
  ) }) });
1337
1337
  }
1338
- var TypingIndicator = React2.memo(function TypingIndicator2() {
1338
+ var TypingIndicator = React.memo(function TypingIndicator2() {
1339
1339
  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: [
1340
1340
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-muted-foreground animate-bounce [animation-delay:0ms]" }),
1341
1341
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-muted-foreground animate-bounce [animation-delay:150ms]" }),
1342
1342
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-muted-foreground animate-bounce [animation-delay:300ms]" })
1343
1343
  ] }) }) });
1344
1344
  });
1345
- var ChatBubble = React2.memo(function ChatBubble2({
1345
+ var ChatBubble = React.memo(function ChatBubble2({
1346
1346
  message,
1347
1347
  timestamp,
1348
1348
  isSent,
@@ -1359,8 +1359,8 @@ var ChatBubble = React2.memo(function ChatBubble2({
1359
1359
  formatTimestamp = (t) => t,
1360
1360
  "data-testid": testId
1361
1361
  }) {
1362
- const [isHovered, setIsHovered] = React2.useState(false);
1363
- const [isFocused, setIsFocused] = React2.useState(false);
1362
+ const [isHovered, setIsHovered] = React.useState(false);
1363
+ const [isFocused, setIsFocused] = React.useState(false);
1364
1364
  const showActions = isHovered || isFocused;
1365
1365
  if (deleted) {
1366
1366
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -1373,12 +1373,12 @@ var ChatBubble = React2.memo(function ChatBubble2({
1373
1373
  }
1374
1374
  );
1375
1375
  }
1376
- const bubbleRadius = chunkFIPS3VPH_cjs.cn(
1376
+ const bubbleRadius = chunkIZPXHVPJ_cjs.cn(
1377
1377
  "rounded-2xl",
1378
1378
  isSent && isLastOfRun && "rounded-br-sm",
1379
1379
  !isSent && isLastOfRun && "rounded-bl-sm"
1380
1380
  );
1381
- const bubbleSurface = isSent ? chunkFIPS3VPH_cjs.cn("bg-ai-accent-soft text-foreground chat-bubble-sent", classNames?.ownBubble) : chunkFIPS3VPH_cjs.cn("border border-border bg-card text-card-foreground", classNames?.peerBubble);
1381
+ const bubbleSurface = isSent ? chunkIZPXHVPJ_cjs.cn("bg-ai-accent-soft text-foreground chat-bubble-sent", classNames?.ownBubble) : chunkIZPXHVPJ_cjs.cn("border border-border bg-card text-card-foreground", classNames?.peerBubble);
1382
1382
  const highlightClass = highlighted && "ring-2 ring-blue-400 dark:ring-blue-600";
1383
1383
  const copyLinkButton = onCopyLink && /* @__PURE__ */ jsxRuntime.jsx(
1384
1384
  "button",
@@ -1386,7 +1386,7 @@ var ChatBubble = React2.memo(function ChatBubble2({
1386
1386
  onClick: onCopyLink,
1387
1387
  onFocus: () => setIsFocused(true),
1388
1388
  onBlur: () => setIsFocused(false),
1389
- className: chunkFIPS3VPH_cjs.cn(
1389
+ className: chunkIZPXHVPJ_cjs.cn(
1390
1390
  "self-end p-1 transition-opacity focus:outline-none focus-visible:ring-1 focus-visible:ring-ring rounded",
1391
1391
  showActions ? "opacity-100 text-foreground" : "opacity-0 text-muted-foreground"
1392
1392
  ),
@@ -1399,7 +1399,7 @@ var ChatBubble = React2.memo(function ChatBubble2({
1399
1399
  {
1400
1400
  id,
1401
1401
  "data-testid": testId,
1402
- className: chunkFIPS3VPH_cjs.cn(
1402
+ className: chunkIZPXHVPJ_cjs.cn(
1403
1403
  "flex w-full items-end",
1404
1404
  isLastOfRun ? "mb-2" : "mb-0.5",
1405
1405
  isSent ? "justify-end" : "justify-start"
@@ -1415,7 +1415,7 @@ var ChatBubble = React2.memo(function ChatBubble2({
1415
1415
  onClick: onDelete,
1416
1416
  onFocus: () => setIsFocused(true),
1417
1417
  onBlur: () => setIsFocused(false),
1418
- className: chunkFIPS3VPH_cjs.cn(
1418
+ className: chunkIZPXHVPJ_cjs.cn(
1419
1419
  "self-end p-1 transition-opacity focus:outline-none focus-visible:ring-1 focus-visible:ring-ring rounded",
1420
1420
  showActions ? "opacity-100 text-destructive" : "opacity-0 text-muted-foreground"
1421
1421
  ),
@@ -1427,7 +1427,7 @@ var ChatBubble = React2.memo(function ChatBubble2({
1427
1427
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col max-w-[80%] md:max-w-[60%]", children: /* @__PURE__ */ jsxRuntime.jsxs(
1428
1428
  "div",
1429
1429
  {
1430
- className: chunkFIPS3VPH_cjs.cn(
1430
+ className: chunkIZPXHVPJ_cjs.cn(
1431
1431
  "px-3.5 py-2 break-words shadow-sm transition-shadow",
1432
1432
  bubbleRadius,
1433
1433
  bubbleSurface,
@@ -1438,7 +1438,7 @@ var ChatBubble = React2.memo(function ChatBubble2({
1438
1438
  isLastOfRun && /* @__PURE__ */ jsxRuntime.jsxs(
1439
1439
  "div",
1440
1440
  {
1441
- className: chunkFIPS3VPH_cjs.cn(
1441
+ className: chunkIZPXHVPJ_cjs.cn(
1442
1442
  "flex items-center gap-1.5 mt-0.5",
1443
1443
  isSent ? "justify-end" : "justify-start"
1444
1444
  ),
@@ -1459,7 +1459,7 @@ var ChatBubble = React2.memo(function ChatBubble2({
1459
1459
  onClick: onDelete,
1460
1460
  onFocus: () => setIsFocused(true),
1461
1461
  onBlur: () => setIsFocused(false),
1462
- className: chunkFIPS3VPH_cjs.cn(
1462
+ className: chunkIZPXHVPJ_cjs.cn(
1463
1463
  "self-end p-1 transition-opacity focus:outline-none focus-visible:ring-1 focus-visible:ring-ring rounded",
1464
1464
  showActions ? "opacity-100 text-destructive" : "opacity-0 text-muted-foreground"
1465
1465
  ),
@@ -1483,9 +1483,9 @@ var useArbiWsStore = zustand.create((set) => ({
1483
1483
  applyPresence: (msg) => set((s) => ({ presence: { ...s.presence, [msg.user_id]: msg.status } })),
1484
1484
  reset: () => set({ status: "disconnected", tasks: {}, lastTaskUpdate: null, presence: {} })
1485
1485
  }));
1486
- var ArbiWsContext = React2.createContext(null);
1486
+ var ArbiWsContext = React.createContext(null);
1487
1487
  function useArbiWsContext() {
1488
- const ctx = React2.useContext(ArbiWsContext);
1488
+ const ctx = React.useContext(ArbiWsContext);
1489
1489
  if (!ctx) {
1490
1490
  throw new Error("useArbiWebSocket hooks must be used within an <ArbiWebSocketProvider>");
1491
1491
  }
@@ -1493,12 +1493,12 @@ function useArbiWsContext() {
1493
1493
  }
1494
1494
  function ArbiWebSocketProvider({ enabled = true, children }) {
1495
1495
  const arbi = chunk7IOCMCC5_cjs.useArbi();
1496
- const subscribersRef = React2.useRef(/* @__PURE__ */ new Set());
1496
+ const subscribersRef = React.useRef(/* @__PURE__ */ new Set());
1497
1497
  const setStatus = useArbiWsStore((s) => s.setStatus);
1498
1498
  const applyTaskUpdate = useArbiWsStore((s) => s.applyTaskUpdate);
1499
1499
  const applyPresence = useArbiWsStore((s) => s.applyPresence);
1500
1500
  const reset = useArbiWsStore((s) => s.reset);
1501
- const context = React2.useMemo(
1501
+ const context = React.useMemo(
1502
1502
  () => ({
1503
1503
  subscribe: (fn) => {
1504
1504
  subscribersRef.current.add(fn);
@@ -1509,7 +1509,7 @@ function ArbiWebSocketProvider({ enabled = true, children }) {
1509
1509
  }),
1510
1510
  []
1511
1511
  );
1512
- React2.useEffect(() => {
1512
+ React.useEffect(() => {
1513
1513
  if (!enabled) {
1514
1514
  reset();
1515
1515
  return;
@@ -1564,15 +1564,15 @@ function ArbiWebSocketProvider({ enabled = true, children }) {
1564
1564
  }
1565
1565
  function useArbiWebSocket(onMessage) {
1566
1566
  const { subscribe } = useArbiWsContext();
1567
- const handlerRef = React2.useRef(onMessage);
1567
+ const handlerRef = React.useRef(onMessage);
1568
1568
  handlerRef.current = onMessage;
1569
- React2.useEffect(() => subscribe((msg) => handlerRef.current(msg)), [subscribe]);
1569
+ React.useEffect(() => subscribe((msg) => handlerRef.current(msg)), [subscribe]);
1570
1570
  }
1571
1571
  function useArbiWsMessage(type, handler) {
1572
1572
  const { subscribe } = useArbiWsContext();
1573
- const handlerRef = React2.useRef(handler);
1573
+ const handlerRef = React.useRef(handler);
1574
1574
  handlerRef.current = handler;
1575
- React2.useEffect(
1575
+ React.useEffect(
1576
1576
  () => subscribe((msg) => {
1577
1577
  if (client.isMessageType(msg, type)) handlerRef.current(msg);
1578
1578
  }),
@@ -1618,7 +1618,7 @@ function useArbiDocumentSync(workspaceId) {
1618
1618
  }
1619
1619
  function useWorkspaceDocs(workspaceId) {
1620
1620
  const { data: docs = [], isLoading, isError } = useDocuments(workspaceId);
1621
- const docIds = React2.useMemo(
1621
+ const docIds = React.useMemo(
1622
1622
  () => docs.map((d) => d.external_id).filter((id) => !!id),
1623
1623
  [docs]
1624
1624
  );
@@ -1626,15 +1626,15 @@ function useWorkspaceDocs(workspaceId) {
1626
1626
  }
1627
1627
  function useAiTask() {
1628
1628
  const mutation = useAssistantQuery();
1629
- const [status, setStatus] = React2.useState("idle");
1630
- const [text, setText] = React2.useState("");
1631
- const [stepCount, setStepCount] = React2.useState(0);
1632
- const [error, setError] = React2.useState(null);
1633
- const [responseId, setResponseId] = React2.useState(null);
1634
- const [artifacts, setArtifacts] = React2.useState([]);
1635
- const bufferRef = React2.useRef("");
1636
- const artifactsRef = React2.useRef(/* @__PURE__ */ new Map());
1637
- const reset = React2.useCallback(() => {
1629
+ const [status, setStatus] = React.useState("idle");
1630
+ const [text, setText] = React.useState("");
1631
+ const [stepCount, setStepCount] = React.useState(0);
1632
+ const [error, setError] = React.useState(null);
1633
+ const [responseId, setResponseId] = React.useState(null);
1634
+ const [artifacts, setArtifacts] = React.useState([]);
1635
+ const bufferRef = React.useRef("");
1636
+ const artifactsRef = React.useRef(/* @__PURE__ */ new Map());
1637
+ const reset = React.useCallback(() => {
1638
1638
  setStatus("idle");
1639
1639
  setText("");
1640
1640
  setStepCount(0);
@@ -1644,7 +1644,7 @@ function useAiTask() {
1644
1644
  artifactsRef.current = /* @__PURE__ */ new Map();
1645
1645
  bufferRef.current = "";
1646
1646
  }, []);
1647
- const run = React2.useCallback(
1647
+ const run = React.useCallback(
1648
1648
  async (question, docIds, opts) => {
1649
1649
  setStatus("running");
1650
1650
  setText("");
@@ -1715,7 +1715,7 @@ function useAiTask() {
1715
1715
  }
1716
1716
  function useSemanticSearch(docIds) {
1717
1717
  const arbi = chunk7IOCMCC5_cjs.useArbi();
1718
- const [query, setQuery] = React2.useState("");
1718
+ const [query, setQuery] = React.useState("");
1719
1719
  const mutation = reactQuery.useMutation({
1720
1720
  mutationFn: async ({ query: q, mode }) => {
1721
1721
  const res = await arbi.assistant.retrieve(q, docIds, { searchMode: mode });
@@ -1733,7 +1733,7 @@ function useSemanticSearch(docIds) {
1733
1733
  }
1734
1734
  });
1735
1735
  const { mutateAsync, reset } = mutation;
1736
- const search = React2.useCallback(
1736
+ const search = React.useCallback(
1737
1737
  async (q, mode = "hybrid") => {
1738
1738
  const trimmed = q.trim();
1739
1739
  setQuery(trimmed);
@@ -1803,7 +1803,7 @@ function AiAnswer({
1803
1803
  runningHint = "Reading the documents\u2026",
1804
1804
  testId = "ai-answer"
1805
1805
  }) {
1806
- const [copied, setCopied] = React2.useState(false);
1806
+ const [copied, setCopied] = React.useState(false);
1807
1807
  const running = status === "running";
1808
1808
  const hasText = text.trim().length > 0;
1809
1809
  const copy = async () => {
@@ -1812,9 +1812,9 @@ function AiAnswer({
1812
1812
  setTimeout(() => setCopied(false), 1600);
1813
1813
  };
1814
1814
  if (status === "idle" && !hasText) {
1815
- return emptyHint ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkFIPS3VPH_cjs.cn("text-sm text-muted-foreground", className), "data-testid": `${testId}-empty`, children: emptyHint }) : null;
1815
+ return emptyHint ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunkIZPXHVPJ_cjs.cn("text-sm text-muted-foreground", className), "data-testid": `${testId}-empty`, children: emptyHint }) : null;
1816
1816
  }
1817
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkFIPS3VPH_cjs.cn("space-y-3", className), "data-testid": testId, "data-status": status, children: [
1817
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkIZPXHVPJ_cjs.cn("space-y-3", className), "data-testid": testId, "data-status": status, children: [
1818
1818
  running && /* @__PURE__ */ jsxRuntime.jsxs(
1819
1819
  "div",
1820
1820
  {
@@ -1838,7 +1838,7 @@ function AiAnswer({
1838
1838
  }
1839
1839
  ),
1840
1840
  hasText && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1841
- /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.AiMarkdown, { isStreaming: running, children: text }),
1841
+ /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.AiMarkdown, { isStreaming: running, children: text }),
1842
1842
  !running && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-t border-border pt-2.5", children: [
1843
1843
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-1.5 text-xs text-muted-foreground", children: [
1844
1844
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ShieldCheck, { className: "size-3.5 text-ai-accent" }),
@@ -1883,7 +1883,7 @@ function AiActionCard({
1883
1883
  const p = typeof prompt === "function" ? prompt() : prompt;
1884
1884
  void task.run(p, docIds);
1885
1885
  };
1886
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.Card, { variant: "elevated", className: "rounded-xl p-5", "data-testid": testId, children: [
1886
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkIZPXHVPJ_cjs.Card, { variant: "elevated", className: "rounded-xl p-5", "data-testid": testId, children: [
1887
1887
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-4", children: [
1888
1888
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [
1889
1889
  /* @__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" }) }),
@@ -1893,7 +1893,7 @@ function AiActionCard({
1893
1893
  ] })
1894
1894
  ] }),
1895
1895
  /* @__PURE__ */ jsxRuntime.jsxs(
1896
- chunkFIPS3VPH_cjs.Button,
1896
+ chunkIZPXHVPJ_cjs.Button,
1897
1897
  {
1898
1898
  variant: task.isDone ? "outline" : "accent",
1899
1899
  size: "sm",
@@ -1928,9 +1928,9 @@ function ArtifactCanvas({
1928
1928
  stepCount,
1929
1929
  error = null
1930
1930
  }) {
1931
- const [activeId, setActiveId] = React2.useState(null);
1932
- const [copied, setCopied] = React2.useState(false);
1933
- React2.useEffect(() => {
1931
+ const [activeId, setActiveId] = React.useState(null);
1932
+ const [copied, setCopied] = React.useState(false);
1933
+ React.useEffect(() => {
1934
1934
  if (artifacts.length && (!activeId || !artifacts.some((a) => a.doc_ext_id === activeId))) {
1935
1935
  setActiveId(artifacts[artifacts.length - 1].doc_ext_id);
1936
1936
  }
@@ -1940,7 +1940,7 @@ function ArtifactCanvas({
1940
1940
  return /* @__PURE__ */ jsxRuntime.jsxs(
1941
1941
  "div",
1942
1942
  {
1943
- className: chunkFIPS3VPH_cjs.cn(
1943
+ className: chunkIZPXHVPJ_cjs.cn(
1944
1944
  "flex h-full min-h-[280px] flex-col items-center justify-center rounded-xl border border-destructive/30 bg-destructive/5 p-8 text-center",
1945
1945
  className
1946
1946
  ),
@@ -1956,7 +1956,7 @@ function ArtifactCanvas({
1956
1956
  return /* @__PURE__ */ jsxRuntime.jsxs(
1957
1957
  "div",
1958
1958
  {
1959
- className: chunkFIPS3VPH_cjs.cn(
1959
+ className: chunkIZPXHVPJ_cjs.cn(
1960
1960
  "flex h-full min-h-[280px] flex-col items-center justify-center rounded-xl border border-border bg-ai-surface/40 p-8 text-center",
1961
1961
  className
1962
1962
  ),
@@ -1977,7 +1977,7 @@ function ArtifactCanvas({
1977
1977
  return /* @__PURE__ */ jsxRuntime.jsxs(
1978
1978
  "div",
1979
1979
  {
1980
- className: chunkFIPS3VPH_cjs.cn(
1980
+ className: chunkIZPXHVPJ_cjs.cn(
1981
1981
  "flex h-full min-h-[280px] flex-col items-center justify-center rounded-xl border border-dashed border-border bg-secondary/30 p-8 text-center",
1982
1982
  className
1983
1983
  ),
@@ -2009,7 +2009,7 @@ function ArtifactCanvas({
2009
2009
  return /* @__PURE__ */ jsxRuntime.jsxs(
2010
2010
  "div",
2011
2011
  {
2012
- className: chunkFIPS3VPH_cjs.cn(
2012
+ className: chunkIZPXHVPJ_cjs.cn(
2013
2013
  "flex h-full flex-col overflow-hidden rounded-xl border border-border bg-card",
2014
2014
  className
2015
2015
  ),
@@ -2025,11 +2025,11 @@ function ArtifactCanvas({
2025
2025
  children: active.title
2026
2026
  }
2027
2027
  ),
2028
- isRedline && /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.Badge, { variant: "accent", className: "gap-1", children: [
2028
+ isRedline && /* @__PURE__ */ jsxRuntime.jsxs(chunkIZPXHVPJ_cjs.Badge, { variant: "accent", className: "gap-1", children: [
2029
2029
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.GitCompareArrows, { className: "size-3" }),
2030
2030
  " Redline"
2031
2031
  ] }),
2032
- /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.Badge, { variant: "secondary", children: [
2032
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkIZPXHVPJ_cjs.Badge, { variant: "secondary", children: [
2033
2033
  "v",
2034
2034
  active.version
2035
2035
  ] }),
@@ -2070,7 +2070,7 @@ function ArtifactCanvas({
2070
2070
  "button",
2071
2071
  {
2072
2072
  onClick: () => setActiveId(a.doc_ext_id),
2073
- className: chunkFIPS3VPH_cjs.cn(
2073
+ className: chunkIZPXHVPJ_cjs.cn(
2074
2074
  "shrink-0 rounded-md px-2.5 py-1 text-xs font-medium",
2075
2075
  a.doc_ext_id === active.doc_ext_id ? "bg-ai-accent-soft text-ai-accent" : "text-muted-foreground hover:bg-accent"
2076
2076
  ),
@@ -2085,7 +2085,7 @@ function ArtifactCanvas({
2085
2085
  animate: { opacity: 1, y: 0 },
2086
2086
  transition: { duration: 0.2 },
2087
2087
  className: "mx-auto max-w-2xl rounded-lg bg-card p-8 shadow-sm ring-1 ring-border",
2088
- 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(chunkFIPS3VPH_cjs.AiMarkdown, { children: active.content })
2088
+ 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(chunkIZPXHVPJ_cjs.AiMarkdown, { children: active.content })
2089
2089
  },
2090
2090
  active.doc_ext_id
2091
2091
  ) }) })
@@ -2102,7 +2102,7 @@ function MessageArtifactCard({
2102
2102
  const Icon = isImage ? lucideReact.Image : lucideReact.FileText;
2103
2103
  const statusText = isImage ? isComplete ? "Image ready" : "Generating\u2026" : isComplete ? "Draft ready" : "Drafting\u2026";
2104
2104
  return /* @__PURE__ */ jsxRuntime.jsxs(
2105
- chunkFIPS3VPH_cjs.Card,
2105
+ chunkIZPXHVPJ_cjs.Card,
2106
2106
  {
2107
2107
  variant: "outline",
2108
2108
  className: "mt-3 flex items-center gap-3 px-3 py-2.5",
@@ -2141,11 +2141,11 @@ function DocSearch({
2141
2141
  className
2142
2142
  }) {
2143
2143
  const { results, status, error, search, isRunning, query } = useSemanticSearch(docIds);
2144
- const [value, setValue] = React2.useState("");
2144
+ const [value, setValue] = React.useState("");
2145
2145
  const submit = () => {
2146
2146
  if (value.trim()) void search(value, "hybrid");
2147
2147
  };
2148
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkFIPS3VPH_cjs.cn("space-y-3", className), "data-testid": "doc-search", children: [
2148
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkIZPXHVPJ_cjs.cn("space-y-3", className), "data-testid": "doc-search", children: [
2149
2149
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
2150
2150
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: "pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground" }),
2151
2151
  isRunning && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "absolute right-3 top-1/2 size-4 -translate-y-1/2 animate-spin text-ai-accent" }),
@@ -2178,10 +2178,10 @@ function DocSearch({
2178
2178
  status === "done" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", "data-testid": "doc-search-results", children: [
2179
2179
  /* @__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` }),
2180
2180
  results.slice(0, 8).map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs(
2181
- chunkFIPS3VPH_cjs.Card,
2181
+ chunkIZPXHVPJ_cjs.Card,
2182
2182
  {
2183
2183
  variant: "elevated",
2184
- className: chunkFIPS3VPH_cjs.cn(
2184
+ className: chunkIZPXHVPJ_cjs.cn(
2185
2185
  "rounded-xl p-3",
2186
2186
  onOpenDoc && r.docId && "cursor-pointer transition-colors hover:border-ai-accent/40"
2187
2187
  ),
@@ -2191,7 +2191,7 @@ function DocSearch({
2191
2191
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-1 flex items-center gap-2", children: [
2192
2192
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: "size-3.5 text-ai-accent" }),
2193
2193
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-xs font-medium text-foreground", children: r.docTitle ?? "Document" }),
2194
- r.page != null && /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.Badge, { variant: "secondary", children: [
2194
+ r.page != null && /* @__PURE__ */ jsxRuntime.jsxs(chunkIZPXHVPJ_cjs.Badge, { variant: "secondary", children: [
2195
2195
  "p.",
2196
2196
  r.page
2197
2197
  ] }),
@@ -2208,350 +2208,6 @@ function DocSearch({
2208
2208
  ] })
2209
2209
  ] });
2210
2210
  }
2211
- var EntityPill = React2.forwardRef(function EntityPill2({
2212
- icon,
2213
- label,
2214
- secondaryText,
2215
- size = "sm",
2216
- shape = "rounded",
2217
- className,
2218
- labelMaxWidth = "max-w-[320px]",
2219
- labelClassName,
2220
- fullWidth = false,
2221
- highlight = false,
2222
- onClick,
2223
- onIconClick,
2224
- onMoreClick,
2225
- moreContent,
2226
- href,
2227
- disabled = false,
2228
- tooltipContent,
2229
- tooltipSide = "bottom",
2230
- "data-testid": testId
2231
- }, ref) {
2232
- const shapeClass = shape === "pill" ? "rounded-full" : "rounded-md";
2233
- const sizeClasses2 = size === "base" ? "gap-1.5 px-1.5 py-0.5" : "gap-1 px-1";
2234
- const textSizeClass = size === "base" ? "text-base" : "text-sm";
2235
- const baseClasses = chunkFIPS3VPH_cjs.cn(
2236
- "group/pill items-center",
2237
- fullWidth ? "flex w-full" : "inline-flex",
2238
- sizeClasses2,
2239
- shapeClass,
2240
- "bg-muted",
2241
- "border border-border",
2242
- "transition-all",
2243
- className
2244
- );
2245
- const interactiveClasses = "cursor-pointer hover:bg-muted/80";
2246
- const disabledClasses = "cursor-default opacity-60";
2247
- const highlightClasses = "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground";
2248
- const mainContent = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2249
- onIconClick ? /* @__PURE__ */ jsxRuntime.jsx(
2250
- "span",
2251
- {
2252
- role: "button",
2253
- tabIndex: 0,
2254
- className: "flex-shrink-0 cursor-pointer hover:opacity-70 transition-opacity",
2255
- onClick: (e) => {
2256
- e.stopPropagation();
2257
- onIconClick(e);
2258
- },
2259
- children: icon
2260
- }
2261
- ) : icon,
2262
- /* @__PURE__ */ jsxRuntime.jsx(
2263
- "span",
2264
- {
2265
- className: chunkFIPS3VPH_cjs.cn(
2266
- textSizeClass,
2267
- "font-medium truncate leading-tight min-w-0",
2268
- labelMaxWidth,
2269
- labelClassName
2270
- ),
2271
- children: label
2272
- }
2273
- ),
2274
- secondaryText && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground flex-shrink-0 leading-none", children: secondaryText })
2275
- ] });
2276
- const tooltipWrap = (content, tip, side = tooltipSide, triggerClassName, triggerProps) => /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.Tooltip, { children: [
2277
- /* @__PURE__ */ jsxRuntime.jsx(
2278
- chunkFIPS3VPH_cjs.TooltipTrigger,
2279
- {
2280
- onFocusCapture: (e) => e.stopPropagation(),
2281
- className: triggerClassName,
2282
- ...triggerProps,
2283
- children: content
2284
- }
2285
- ),
2286
- /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.TooltipContent, { side, className: "p-2", children: tip })
2287
- ] });
2288
- const mainAreaClass = chunkFIPS3VPH_cjs.cn("inline-flex items-center gap-1", fullWidth && "min-w-0 flex-1");
2289
- if (onMoreClick || moreContent) {
2290
- let mainArea;
2291
- if (tooltipContent) {
2292
- mainArea = tooltipWrap(
2293
- mainContent,
2294
- tooltipContent,
2295
- tooltipSide,
2296
- chunkFIPS3VPH_cjs.cn(mainAreaClass, disabled && "opacity-60"),
2297
- {
2298
- type: "button",
2299
- onClick: href ? onClick : disabled ? void 0 : onClick,
2300
- disabled: disabled || void 0
2301
- }
2302
- );
2303
- } else if (href) {
2304
- mainArea = /* @__PURE__ */ jsxRuntime.jsx(
2305
- "a",
2306
- {
2307
- href,
2308
- target: "_blank",
2309
- rel: "noopener noreferrer",
2310
- className: mainAreaClass,
2311
- onClick,
2312
- children: mainContent
2313
- }
2314
- );
2315
- } else if (onClick) {
2316
- mainArea = /* @__PURE__ */ jsxRuntime.jsx(
2317
- "button",
2318
- {
2319
- type: "button",
2320
- onClick: disabled ? void 0 : onClick,
2321
- disabled,
2322
- className: chunkFIPS3VPH_cjs.cn("inline-flex items-center gap-1", disabled && "opacity-60"),
2323
- children: mainContent
2324
- }
2325
- );
2326
- } else {
2327
- mainArea = /* @__PURE__ */ jsxRuntime.jsx("span", { className: mainAreaClass, children: mainContent });
2328
- }
2329
- const moreArea = moreContent ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0 leading-none", children: moreContent }) : tooltipWrap(
2330
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MoreVertical, { className: "w-3.5 h-3.5" }),
2331
- "Click for more",
2332
- tooltipSide,
2333
- "flex-shrink-0 leading-none text-muted-foreground hover:text-foreground",
2334
- {
2335
- type: "button",
2336
- onClick: (e) => {
2337
- e.stopPropagation();
2338
- onMoreClick?.(e);
2339
- }
2340
- }
2341
- );
2342
- return /* @__PURE__ */ jsxRuntime.jsxs(
2343
- "span",
2344
- {
2345
- ref,
2346
- className: chunkFIPS3VPH_cjs.cn(
2347
- baseClasses,
2348
- (onClick || href) && !disabled && interactiveClasses,
2349
- highlight && highlightClasses
2350
- ),
2351
- "data-testid": testId,
2352
- children: [
2353
- mainArea,
2354
- moreArea
2355
- ]
2356
- }
2357
- );
2358
- }
2359
- if (tooltipContent) {
2360
- if (href) {
2361
- return tooltipWrap(
2362
- /* @__PURE__ */ jsxRuntime.jsx(
2363
- "a",
2364
- {
2365
- href,
2366
- target: "_blank",
2367
- rel: "noopener noreferrer",
2368
- className: mainAreaClass,
2369
- onClick,
2370
- children: mainContent
2371
- }
2372
- ),
2373
- tooltipContent,
2374
- tooltipSide,
2375
- chunkFIPS3VPH_cjs.cn(baseClasses, interactiveClasses),
2376
- { "data-testid": testId }
2377
- );
2378
- }
2379
- return tooltipWrap(
2380
- mainContent,
2381
- tooltipContent,
2382
- tooltipSide,
2383
- chunkFIPS3VPH_cjs.cn(
2384
- baseClasses,
2385
- onClick && !disabled ? interactiveClasses : "",
2386
- disabled ? disabledClasses : "",
2387
- highlight && highlightClasses
2388
- ),
2389
- {
2390
- type: "button",
2391
- ref,
2392
- onClick: onClick && !disabled ? onClick : void 0,
2393
- disabled: disabled || void 0,
2394
- "data-testid": testId
2395
- }
2396
- );
2397
- }
2398
- if (href) {
2399
- return /* @__PURE__ */ jsxRuntime.jsx(
2400
- "a",
2401
- {
2402
- ref,
2403
- href,
2404
- target: "_blank",
2405
- rel: "noopener noreferrer",
2406
- className: chunkFIPS3VPH_cjs.cn(baseClasses, interactiveClasses),
2407
- "data-testid": testId,
2408
- onClick,
2409
- children: mainContent
2410
- }
2411
- );
2412
- }
2413
- if (onClick) {
2414
- return /* @__PURE__ */ jsxRuntime.jsx(
2415
- "button",
2416
- {
2417
- ref,
2418
- type: "button",
2419
- onClick: disabled ? void 0 : onClick,
2420
- disabled,
2421
- className: chunkFIPS3VPH_cjs.cn(
2422
- baseClasses,
2423
- disabled ? disabledClasses : interactiveClasses,
2424
- highlight && highlightClasses
2425
- ),
2426
- "data-testid": testId,
2427
- children: mainContent
2428
- }
2429
- );
2430
- }
2431
- return /* @__PURE__ */ jsxRuntime.jsx(
2432
- "span",
2433
- {
2434
- ref,
2435
- className: chunkFIPS3VPH_cjs.cn(baseClasses, highlight && highlightClasses),
2436
- "data-testid": testId,
2437
- children: mainContent
2438
- }
2439
- );
2440
- });
2441
- var TAG_TYPE_LABELS = {
2442
- checkbox: "Checkbox",
2443
- select: "Select",
2444
- number: "Number",
2445
- text: "Text",
2446
- folder: "Folder",
2447
- search: "Saved Search",
2448
- date: "Date",
2449
- assistant: "AI Assistant"
2450
- };
2451
- var TAG_TYPE_ICONS = {
2452
- checkbox: lucideReact.SquareCheckBig,
2453
- select: lucideReact.List,
2454
- number: lucideReact.Hash,
2455
- text: lucideReact.NotebookPen,
2456
- folder: lucideReact.Folder,
2457
- search: lucideReact.Search,
2458
- date: lucideReact.Calendar,
2459
- assistant: lucideReact.Bot
2460
- };
2461
- function getTagTypeIcon(type) {
2462
- return TAG_TYPE_ICONS[type ?? "text"] || lucideReact.NotebookPen;
2463
- }
2464
- function getTagTypeLabel(type) {
2465
- const t = type ?? "text";
2466
- return TAG_TYPE_LABELS[t] || t;
2467
- }
2468
- var BASE_COLORS = {
2469
- "0": "#10b981",
2470
- "1": "#3b82f6",
2471
- "2": "#8b5cf6",
2472
- "3": "#f43f5e",
2473
- "4": "#f59e0b",
2474
- "5": "#84cc16",
2475
- "6": "#a855f7",
2476
- "7": "#06b6d4",
2477
- "8": "#f97316",
2478
- "9": "#14b8a6",
2479
- a: "#ef4444",
2480
- b: "#6366f1",
2481
- c: "#ec4899",
2482
- d: "#22c55e",
2483
- e: "#eab308",
2484
- f: "#0ea5e9"
2485
- };
2486
- function getEntityColor(entityId) {
2487
- return BASE_COLORS[entityId[4]] || BASE_COLORS["0"];
2488
- }
2489
- function TagEntity({
2490
- tag,
2491
- size = "md",
2492
- className = "",
2493
- onClick,
2494
- showTooltip = true,
2495
- tooltipContent
2496
- }) {
2497
- const tagType = tag.tag_type?.type ?? "text";
2498
- const iconSize = size === "sm" ? 12 : size === "md" ? 14 : 16;
2499
- const Icon = getTagTypeIcon(tagType);
2500
- const sizeClasses2 = {
2501
- sm: "p-0.5",
2502
- md: "p-1",
2503
- lg: "p-1.5"
2504
- };
2505
- const tagColor = tag.color ?? getEntityColor(tag.external_id);
2506
- const iconElement = /* @__PURE__ */ jsxRuntime.jsx(
2507
- "span",
2508
- {
2509
- className: `inline-flex items-center justify-center rounded-md text-white flex-shrink-0 ${sizeClasses2[size]}`,
2510
- style: { backgroundColor: tagColor },
2511
- children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { size: iconSize, className: "flex-shrink-0" })
2512
- }
2513
- );
2514
- const pillSize = size === "lg" ? "base" : "sm";
2515
- const defaultTooltip = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
2516
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
2517
- /* @__PURE__ */ jsxRuntime.jsx(
2518
- "span",
2519
- {
2520
- className: "inline-flex items-center justify-center rounded-md text-white p-1",
2521
- style: { backgroundColor: tagColor },
2522
- children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { size: 16 })
2523
- }
2524
- ),
2525
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-sm", children: tag.name })
2526
- ] }),
2527
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5 text-sm", children: [
2528
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
2529
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "Type:" }),
2530
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: getTagTypeLabel(tagType) })
2531
- ] }),
2532
- tag.doctag_count != null && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
2533
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "Documents:" }),
2534
- /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.Badge, { variant: "secondary", className: "h-5 min-w-[20px] justify-center", children: tag.doctag_count ?? 0 })
2535
- ] }),
2536
- tag.shared != null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: tag.shared ? "Shared" : "Private" }) })
2537
- ] })
2538
- ] });
2539
- const resolvedTooltip = showTooltip ? tooltipContent ?? defaultTooltip : void 0;
2540
- return /* @__PURE__ */ jsxRuntime.jsx(
2541
- EntityPill,
2542
- {
2543
- icon: iconElement,
2544
- label: tag.name,
2545
- size: pillSize,
2546
- shape: "rounded",
2547
- labelMaxWidth: "max-w-[180px]",
2548
- tooltipContent: resolvedTooltip,
2549
- onClick,
2550
- className,
2551
- "data-testid": `tag-entity-${tag.external_id}`
2552
- }
2553
- );
2554
- }
2555
2211
  function DocumentReview({
2556
2212
  docId,
2557
2213
  doc,
@@ -2563,7 +2219,7 @@ function DocumentReview({
2563
2219
  }) {
2564
2220
  const parsedQuery = useParsedDocument(docId, stage);
2565
2221
  const tagsQuery = useTags(workspaceId);
2566
- const tagNameById = React2__default.default.useMemo(() => {
2222
+ const tagNameById = React__default.default.useMemo(() => {
2567
2223
  const map = /* @__PURE__ */ new Map();
2568
2224
  for (const t of tagsQuery.data ?? []) {
2569
2225
  if (t.external_id) map.set(t.external_id, t.name ?? t.external_id.slice(0, 8));
@@ -2571,7 +2227,7 @@ function DocumentReview({
2571
2227
  return map;
2572
2228
  }, [tagsQuery.data]);
2573
2229
  const title = doc?.doc_metadata?.title || doc?.file_name || "Document";
2574
- const { findings, chunkToTag } = React2__default.default.useMemo(() => {
2230
+ const { findings, chunkToTag } = React__default.default.useMemo(() => {
2575
2231
  const list = [];
2576
2232
  const chunkTag = /* @__PURE__ */ new Map();
2577
2233
  for (const dt of doc?.doctags ?? []) {
@@ -2587,7 +2243,7 @@ function DocumentReview({
2587
2243
  }
2588
2244
  return { findings: list, chunkToTag: chunkTag };
2589
2245
  }, [doc?.doctags]);
2590
- const pages = React2__default.default.useMemo(() => {
2246
+ const pages = React__default.default.useMemo(() => {
2591
2247
  const chunks = parsedQuery.data?.chunks ?? [];
2592
2248
  const byPage = /* @__PURE__ */ new Map();
2593
2249
  for (const c of chunks) {
@@ -2597,9 +2253,9 @@ function DocumentReview({
2597
2253
  }
2598
2254
  return [...byPage.entries()].sort((a, b) => a[0] - b[0]);
2599
2255
  }, [parsedQuery.data]);
2600
- const scrollRef = React2__default.default.useRef(null);
2601
- const [flash, setFlash] = React2__default.default.useState(null);
2602
- const jumpToChunk = React2__default.default.useCallback((chunkId) => {
2256
+ const scrollRef = React__default.default.useRef(null);
2257
+ const [flash, setFlash] = React__default.default.useState(null);
2258
+ const jumpToChunk = React__default.default.useCallback((chunkId) => {
2603
2259
  const el = scrollRef.current?.querySelector(`[data-chunk-id="${chunkId}"]`);
2604
2260
  if (!el) return;
2605
2261
  el.scrollIntoView({ behavior: "smooth", block: "center" });
@@ -2607,7 +2263,7 @@ function DocumentReview({
2607
2263
  window.setTimeout(() => setFlash((c) => c === chunkId ? null : c), 1600);
2608
2264
  }, []);
2609
2265
  const parsedReady = !parsedQuery.isLoading && !!parsedQuery.data;
2610
- React2__default.default.useEffect(() => {
2266
+ React__default.default.useEffect(() => {
2611
2267
  if (!activeChunkId || !parsedReady) return;
2612
2268
  const raf = window.requestAnimationFrame(() => jumpToChunk(activeChunkId));
2613
2269
  return () => window.cancelAnimationFrame(raf);
@@ -2616,7 +2272,7 @@ function DocumentReview({
2616
2272
  "div",
2617
2273
  {
2618
2274
  "data-testid": "document-review",
2619
- className: chunkFIPS3VPH_cjs.cn(
2275
+ className: chunkIZPXHVPJ_cjs.cn(
2620
2276
  "flex h-full min-h-0 flex-col overflow-hidden rounded-lg border bg-card",
2621
2277
  className
2622
2278
  ),
@@ -2629,7 +2285,7 @@ function DocumentReview({
2629
2285
  findings.length ? ` \xB7 ${findings.length} findings` : ""
2630
2286
  ] })
2631
2287
  ] }),
2632
- doc?.status ? /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.Badge, { variant: "secondary", children: doc.status }) : null,
2288
+ doc?.status ? /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.Badge, { variant: "secondary", children: doc.status }) : null,
2633
2289
  onClose ? /* @__PURE__ */ jsxRuntime.jsx(
2634
2290
  "button",
2635
2291
  {
@@ -2666,7 +2322,7 @@ function DocumentReview({
2666
2322
  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",
2667
2323
  children: [
2668
2324
  /* @__PURE__ */ jsxRuntime.jsx(
2669
- TagEntity,
2325
+ chunkIZPXHVPJ_cjs.TagEntity,
2670
2326
  {
2671
2327
  size: "sm",
2672
2328
  tag: {
@@ -2700,7 +2356,7 @@ function DocumentReview({
2700
2356
  {
2701
2357
  "data-chunk-id": cid,
2702
2358
  "data-testid": isActive ? "review-chunk-active" : highlighted ? "review-chunk-cited" : "review-chunk",
2703
- className: chunkFIPS3VPH_cjs.cn(
2359
+ className: chunkIZPXHVPJ_cjs.cn(
2704
2360
  "scroll-mt-4 rounded-md px-2 py-1 transition-colors",
2705
2361
  highlighted && "bg-[var(--color-ai-accent-soft,theme(colors.amber.100))] ring-1 ring-inset ring-border",
2706
2362
  // The externally-selected search passage wins the
@@ -2711,7 +2367,7 @@ function DocumentReview({
2711
2367
  ),
2712
2368
  children: [
2713
2369
  highlighted ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-1", children: /* @__PURE__ */ jsxRuntime.jsx(
2714
- TagEntity,
2370
+ chunkIZPXHVPJ_cjs.TagEntity,
2715
2371
  {
2716
2372
  size: "sm",
2717
2373
  tag: {
@@ -2720,7 +2376,7 @@ function DocumentReview({
2720
2376
  }
2721
2377
  }
2722
2378
  ) }) : null,
2723
- /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.MarkdownRenderer, { className: "prose prose-sm max-w-none dark:prose-invert", children: c.content })
2379
+ /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.MarkdownRenderer, { className: "prose prose-sm max-w-none dark:prose-invert", children: c.content })
2724
2380
  ]
2725
2381
  },
2726
2382
  cid ?? i
@@ -2746,7 +2402,7 @@ function RelevanceDot({ score }) {
2746
2402
  role: "img",
2747
2403
  "aria-label": tier.label,
2748
2404
  title: `${tier.label} (${score.toFixed(2)})`,
2749
- className: chunkFIPS3VPH_cjs.cn("size-1.5 shrink-0 rounded-full", tier.tone),
2405
+ className: chunkIZPXHVPJ_cjs.cn("size-1.5 shrink-0 rounded-full", tier.tone),
2750
2406
  "data-testid": "passage-relevance"
2751
2407
  }
2752
2408
  );
@@ -2775,7 +2431,7 @@ function PassageCard({
2775
2431
  return /* @__PURE__ */ jsxRuntime.jsxs(
2776
2432
  "div",
2777
2433
  {
2778
- className: chunkFIPS3VPH_cjs.cn(
2434
+ className: chunkIZPXHVPJ_cjs.cn(
2779
2435
  "group rounded-lg border border-border bg-card p-3 text-left transition-colors",
2780
2436
  onClick && "hover:border-ai-accent/40 focus-within:ring-2 focus-within:ring-ai-accent/40",
2781
2437
  active && "border-ai-accent/60 ring-1 ring-ai-accent/30",
@@ -2817,7 +2473,7 @@ function queryTerms(query) {
2817
2473
  return [...terms];
2818
2474
  }
2819
2475
  function HighlightedSnippet({ text, terms }) {
2820
- const nodes = React2.useMemo(() => {
2476
+ const nodes = React.useMemo(() => {
2821
2477
  if (terms.length === 0) return [text];
2822
2478
  const escaped = terms.map((t) => t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
2823
2479
  const re = new RegExp(`(${escaped.join("|")})`, "gi");
@@ -2842,7 +2498,7 @@ function ResultRow({
2842
2498
  header: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2843
2499
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: "size-3.5 shrink-0 text-ai-accent" }),
2844
2500
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-xs font-medium text-foreground", children: result.docTitle ?? "Document" }),
2845
- result.page != null && /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.Badge, { variant: "secondary", children: [
2501
+ result.page != null && /* @__PURE__ */ jsxRuntime.jsxs(chunkIZPXHVPJ_cjs.Badge, { variant: "secondary", children: [
2846
2502
  "p.",
2847
2503
  result.page
2848
2504
  ] })
@@ -2864,16 +2520,16 @@ function SemanticSearch({
2864
2520
  "data-testid": testId = "arbi-semantic-search"
2865
2521
  }) {
2866
2522
  const { results, status, error, search, isRunning, query } = useSemanticSearch(docIds);
2867
- const [value, setValue] = React2.useState("");
2868
- const [selected, setSelected] = React2.useState(null);
2523
+ const [value, setValue] = React.useState("");
2524
+ const [selected, setSelected] = React.useState(null);
2869
2525
  const { data: docs = [] } = useDocuments(workspaceId, { enabled: !!workspaceId });
2870
- const docMap = React2.useMemo(() => {
2526
+ const docMap = React.useMemo(() => {
2871
2527
  const map = /* @__PURE__ */ new Map();
2872
2528
  for (const d of docs) if (d.external_id) map.set(d.external_id, d);
2873
2529
  return map;
2874
2530
  }, [docs]);
2875
- const terms = React2.useMemo(() => queryTerms(query), [query]);
2876
- const submit = React2.useCallback(() => {
2531
+ const terms = React.useMemo(() => queryTerms(query), [query]);
2532
+ const submit = React.useCallback(() => {
2877
2533
  const q = value.trim();
2878
2534
  if (!q) return;
2879
2535
  setSelected(null);
@@ -2881,11 +2537,11 @@ function SemanticSearch({
2881
2537
  }, [value, search, searchMode]);
2882
2538
  const selectedDoc = selected?.docId ? docMap.get(selected.docId) : void 0;
2883
2539
  const hasResults = status === "done" && results.length > 0;
2884
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": testId, className: chunkFIPS3VPH_cjs.cn("flex min-h-0 flex-col gap-4 md:flex-row", className), children: [
2540
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": testId, className: chunkIZPXHVPJ_cjs.cn("flex min-h-0 flex-col gap-4 md:flex-row", className), children: [
2885
2541
  /* @__PURE__ */ jsxRuntime.jsxs(
2886
2542
  "div",
2887
2543
  {
2888
- className: chunkFIPS3VPH_cjs.cn(
2544
+ className: chunkIZPXHVPJ_cjs.cn(
2889
2545
  "flex min-h-0 flex-col gap-3 md:w-[22rem] md:shrink-0",
2890
2546
  selected && "hidden md:flex"
2891
2547
  ),
@@ -2948,11 +2604,11 @@ function SemanticSearch({
2948
2604
  /* @__PURE__ */ jsxRuntime.jsx(
2949
2605
  "div",
2950
2606
  {
2951
- className: chunkFIPS3VPH_cjs.cn("min-h-0 min-w-0 flex-1", !selected && "hidden md:block"),
2607
+ className: chunkIZPXHVPJ_cjs.cn("min-h-0 min-w-0 flex-1", !selected && "hidden md:block"),
2952
2608
  "data-testid": "arbi-semantic-search-viewer",
2953
2609
  children: selected && selected.docId ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full min-h-0 flex-col gap-2", children: [
2954
2610
  /* @__PURE__ */ jsxRuntime.jsxs(
2955
- chunkFIPS3VPH_cjs.Button,
2611
+ chunkIZPXHVPJ_cjs.Button,
2956
2612
  {
2957
2613
  variant: "ghost",
2958
2614
  size: "sm",
@@ -2993,7 +2649,7 @@ function SemanticSearch({
2993
2649
  }
2994
2650
  function DocQaPanel({ docId, docName }) {
2995
2651
  const task = useAiTask();
2996
- const [q, setQ] = React2.useState("");
2652
+ const [q, setQ] = React.useState("");
2997
2653
  const ask = () => {
2998
2654
  const question = q.trim();
2999
2655
  if (!question || task.isRunning) return;
@@ -3011,7 +2667,7 @@ Question: ${question}`,
3011
2667
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 space-y-3", "data-testid": "doc-qa", children: [
3012
2668
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
3013
2669
  /* @__PURE__ */ jsxRuntime.jsx(
3014
- chunkFIPS3VPH_cjs.Input,
2670
+ chunkIZPXHVPJ_cjs.Input,
3015
2671
  {
3016
2672
  value: q,
3017
2673
  onChange: (e) => setQ(e.target.value),
@@ -3022,7 +2678,7 @@ Question: ${question}`,
3022
2678
  }
3023
2679
  ),
3024
2680
  /* @__PURE__ */ jsxRuntime.jsx(
3025
- chunkFIPS3VPH_cjs.Button,
2681
+ chunkIZPXHVPJ_cjs.Button,
3026
2682
  {
3027
2683
  variant: "accent",
3028
2684
  size: "icon",
@@ -3034,7 +2690,7 @@ Question: ${question}`,
3034
2690
  }
3035
2691
  ),
3036
2692
  /* @__PURE__ */ jsxRuntime.jsxs(
3037
- chunkFIPS3VPH_cjs.Button,
2693
+ chunkIZPXHVPJ_cjs.Button,
3038
2694
  {
3039
2695
  variant: "outline",
3040
2696
  size: "sm",
@@ -3098,7 +2754,7 @@ var CitationRendererComponent = ({
3098
2754
  onCloseCitation,
3099
2755
  onDismissCitation
3100
2756
  }) => {
3101
- const chunkMap = React2.useMemo(() => {
2757
+ const chunkMap = React.useMemo(() => {
3102
2758
  const map = /* @__PURE__ */ new Map();
3103
2759
  if (citationData) {
3104
2760
  Object.entries(citationData).forEach(([, docChunks]) => {
@@ -3113,17 +2769,17 @@ var CitationRendererComponent = ({
3113
2769
  }
3114
2770
  return map;
3115
2771
  }, [citationData]);
3116
- const getChunkDetails = React2.useCallback(
2772
+ const getChunkDetails = React.useCallback(
3117
2773
  (chunkIds) => [...new Set(chunkIds)].map((id) => chunkMap.get(id)).filter((c) => c !== void 0),
3118
2774
  [chunkMap]
3119
2775
  );
3120
- const handleChunkClick = React2.useCallback(
2776
+ const handleChunkClick = React.useCallback(
3121
2777
  (citationNum, chunkIds, chunk) => {
3122
2778
  onActivateChunk({ messageId, citationNum, chunkIds, chunk, citationData });
3123
2779
  },
3124
2780
  [messageId, citationData, onActivateChunk]
3125
2781
  );
3126
- const markdownComponents = React2.useMemo(() => {
2782
+ const markdownComponents = React.useMemo(() => {
3127
2783
  const components = {
3128
2784
  a: ({ href, children, ...props }) => {
3129
2785
  if (!href?.startsWith("#cite-")) {
@@ -3167,7 +2823,7 @@ var CitationRendererComponent = ({
3167
2823
  onCloseCitation,
3168
2824
  onDismissCitation
3169
2825
  ]);
3170
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkFIPS3VPH_cjs.cn("citation-container", className), "data-testid": "citation-renderer", children: renderMarkdown({ components: markdownComponents, isStreaming, children: content }) });
2826
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkIZPXHVPJ_cjs.cn("citation-container", className), "data-testid": "citation-renderer", children: renderMarkdown({ components: markdownComponents, isStreaming, children: content }) });
3171
2827
  };
3172
2828
  var CitationPopover = ({
3173
2829
  citationNum,
@@ -3184,13 +2840,13 @@ var CitationPopover = ({
3184
2840
  const { activeCitationKey, viewingPassageId, isOnConversationPage } = useCitationState();
3185
2841
  const isActive = activeCitationKey === `${messageId}-${citationNum}`;
3186
2842
  const open = isActive && isOnConversationPage;
3187
- const chatContainer = React2.useMemo(
2843
+ const chatContainer = React.useMemo(
3188
2844
  () => document.querySelector('main[data-testid^="conversation-"]'),
3189
2845
  []
3190
2846
  );
3191
- const triggerRef = React2.useRef(null);
3192
- const [alignOffset, setAlignOffset] = React2.useState(0);
3193
- const handleOpen = React2.useCallback(() => {
2847
+ const triggerRef = React.useRef(null);
2848
+ const [alignOffset, setAlignOffset] = React.useState(0);
2849
+ const handleOpen = React.useCallback(() => {
3194
2850
  if (triggerRef.current && chatContainer) {
3195
2851
  const triggerLeft = triggerRef.current.getBoundingClientRect().left;
3196
2852
  const chatLeft = chatContainer.getBoundingClientRect().left;
@@ -3201,7 +2857,7 @@ var CitationPopover = ({
3201
2857
  onChunkClick(chunks[0]);
3202
2858
  }
3203
2859
  }, [onOpen, onChunkClick, chunks, chatContainer]);
3204
- const byDoc = React2.useMemo(() => {
2860
+ const byDoc = React.useMemo(() => {
3205
2861
  const map = /* @__PURE__ */ new Map();
3206
2862
  chunks.forEach((chunk) => {
3207
2863
  const docId = chunk.metadata.doc_ext_id ?? "unknown";
@@ -3212,7 +2868,7 @@ var CitationPopover = ({
3212
2868
  return Array.from(map.entries()).map(([docId, val]) => ({ docId, ...val }));
3213
2869
  }, [chunks]);
3214
2870
  return /* @__PURE__ */ jsxRuntime.jsxs(
3215
- chunkFIPS3VPH_cjs.Popover,
2871
+ chunkIZPXHVPJ_cjs.Popover,
3216
2872
  {
3217
2873
  open,
3218
2874
  onOpenChange: (next) => {
@@ -3224,7 +2880,7 @@ var CitationPopover = ({
3224
2880
  }
3225
2881
  },
3226
2882
  children: [
3227
- /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
2883
+ /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
3228
2884
  CitationLink,
3229
2885
  {
3230
2886
  ref: triggerRef,
@@ -3235,7 +2891,7 @@ var CitationPopover = ({
3235
2891
  }
3236
2892
  ) }),
3237
2893
  /* @__PURE__ */ jsxRuntime.jsxs(
3238
- chunkFIPS3VPH_cjs.PopoverContent,
2894
+ chunkIZPXHVPJ_cjs.PopoverContent,
3239
2895
  {
3240
2896
  className: "z-[42] w-[min(var(--radix-popover-content-available-width),48rem)] min-w-0 p-0 max-h-[75vh] overflow-y-auto border-2 border-border shadow-xl",
3241
2897
  align: "start",
@@ -3302,7 +2958,7 @@ var CitationPopover = ({
3302
2958
  {
3303
2959
  "data-testid": `citation-chunk-${chunk.metadata.chunk_ext_id}`,
3304
2960
  onClick: () => onChunkClick(chunk),
3305
- className: chunkFIPS3VPH_cjs.cn(
2961
+ className: chunkIZPXHVPJ_cjs.cn(
3306
2962
  "w-full text-left text-xs rounded px-2 py-1.5 transition-colors flex items-start gap-2 mb-1 last:mb-0",
3307
2963
  isSelected ? "bg-yellow-100 dark:bg-yellow-900/30 text-yellow-900 dark:text-yellow-100" : "text-muted-foreground hover:text-primary hover:bg-muted"
3308
2964
  ),
@@ -3336,12 +2992,12 @@ var CitationPopover = ({
3336
2992
  }
3337
2993
  );
3338
2994
  };
3339
- var CitationLink = React2__default.default.forwardRef(
2995
+ var CitationLink = React__default.default.forwardRef(
3340
2996
  ({ citationNum, isActive, isStreaming, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
3341
2997
  "span",
3342
2998
  {
3343
2999
  ref,
3344
- className: chunkFIPS3VPH_cjs.cn(
3000
+ className: chunkIZPXHVPJ_cjs.cn(
3345
3001
  "cited-text transition-colors px-0.5 rounded inline-block",
3346
3002
  isStreaming ? "cursor-default" : "cursor-pointer",
3347
3003
  isActive ? "bg-yellow-100 dark:bg-yellow-900/30 hover:bg-yellow-200 dark:hover:bg-yellow-900/40" : "hover:bg-yellow-50 dark:hover:bg-yellow-900/20"
@@ -3356,86 +3012,7 @@ var CitationLink = React2__default.default.forwardRef(
3356
3012
  )
3357
3013
  );
3358
3014
  CitationLink.displayName = "CitationLink";
3359
- var CitationRenderer = React2__default.default.memo(CitationRendererComponent);
3360
-
3361
- // src/icons/colors.ts
3362
- var NEUTRAL_GRAY = "#64748b";
3363
- var FILE_TYPE_COLORS = {
3364
- pdf: "#ef4444",
3365
- // red
3366
- doc: "#3b82f6",
3367
- // blue (Word docs)
3368
- docx: "#3b82f6",
3369
- // blue
3370
- html: "#0284c7",
3371
- // sky-600 (web files)
3372
- img: "#8b5cf6",
3373
- // violet-500 (images)
3374
- vid: "#10b981",
3375
- // emerald-500 (video)
3376
- aud: "#f59e0b",
3377
- // amber-500 (audio)
3378
- xls: "#16a34a",
3379
- // green-600 (Excel)
3380
- eml: "#0d9488",
3381
- // teal-600 (email)
3382
- txt: NEUTRAL_GRAY,
3383
- // gray (plain text)
3384
- generic: NEUTRAL_GRAY,
3385
- // gray (unknown)
3386
- white: "#ffffff"
3387
- // for strokes/text on colored backgrounds
3388
- };
3389
- var PdfIcon = ({ size = 16, className = "" }) => {
3390
- return /* @__PURE__ */ jsxRuntime.jsxs(
3391
- "svg",
3392
- {
3393
- width: size,
3394
- height: size,
3395
- viewBox: "0 0 24 24",
3396
- fill: "none",
3397
- xmlns: "http://www.w3.org/2000/svg",
3398
- className,
3399
- children: [
3400
- /* @__PURE__ */ jsxRuntime.jsx(
3401
- "path",
3402
- {
3403
- d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
3404
- fill: FILE_TYPE_COLORS.pdf,
3405
- stroke: FILE_TYPE_COLORS.pdf,
3406
- strokeWidth: "1",
3407
- strokeLinecap: "round",
3408
- strokeLinejoin: "round"
3409
- }
3410
- ),
3411
- /* @__PURE__ */ jsxRuntime.jsx(
3412
- "path",
3413
- {
3414
- d: "M14 2v6h6",
3415
- fill: "none",
3416
- stroke: FILE_TYPE_COLORS.white,
3417
- strokeWidth: "1",
3418
- strokeLinecap: "round",
3419
- strokeLinejoin: "round"
3420
- }
3421
- ),
3422
- /* @__PURE__ */ jsxRuntime.jsx(
3423
- "text",
3424
- {
3425
- x: "12",
3426
- y: "16",
3427
- fontSize: "6",
3428
- fill: "white",
3429
- textAnchor: "middle",
3430
- fontWeight: "bold",
3431
- fontFamily: "Arial, sans-serif",
3432
- children: "PDF"
3433
- }
3434
- )
3435
- ]
3436
- }
3437
- );
3438
- };
3015
+ var CitationRenderer = React__default.default.memo(CitationRendererComponent);
3439
3016
  var DocIcon = ({ size = 16, className = "" }) => {
3440
3017
  return /* @__PURE__ */ jsxRuntime.jsxs(
3441
3018
  "svg",
@@ -3451,8 +3028,8 @@ var DocIcon = ({ size = 16, className = "" }) => {
3451
3028
  "path",
3452
3029
  {
3453
3030
  d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
3454
- fill: FILE_TYPE_COLORS.doc,
3455
- stroke: FILE_TYPE_COLORS.doc,
3031
+ fill: chunkIZPXHVPJ_cjs.FILE_TYPE_COLORS.doc,
3032
+ stroke: chunkIZPXHVPJ_cjs.FILE_TYPE_COLORS.doc,
3456
3033
  strokeWidth: "1",
3457
3034
  strokeLinecap: "round",
3458
3035
  strokeLinejoin: "round"
@@ -3463,7 +3040,7 @@ var DocIcon = ({ size = 16, className = "" }) => {
3463
3040
  {
3464
3041
  d: "M14 2v6h6",
3465
3042
  fill: "none",
3466
- stroke: FILE_TYPE_COLORS.white,
3043
+ stroke: chunkIZPXHVPJ_cjs.FILE_TYPE_COLORS.white,
3467
3044
  strokeWidth: "1",
3468
3045
  strokeLinecap: "round",
3469
3046
  strokeLinejoin: "round"
@@ -3501,8 +3078,8 @@ var HtmlIcon = ({ size = 16, className = "" }) => {
3501
3078
  "path",
3502
3079
  {
3503
3080
  d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
3504
- fill: FILE_TYPE_COLORS.html,
3505
- stroke: FILE_TYPE_COLORS.html,
3081
+ fill: chunkIZPXHVPJ_cjs.FILE_TYPE_COLORS.html,
3082
+ stroke: chunkIZPXHVPJ_cjs.FILE_TYPE_COLORS.html,
3506
3083
  strokeWidth: "1",
3507
3084
  strokeLinecap: "round",
3508
3085
  strokeLinejoin: "round"
@@ -3513,7 +3090,7 @@ var HtmlIcon = ({ size = 16, className = "" }) => {
3513
3090
  {
3514
3091
  d: "M14 2v6h6",
3515
3092
  fill: "none",
3516
- stroke: FILE_TYPE_COLORS.white,
3093
+ stroke: chunkIZPXHVPJ_cjs.FILE_TYPE_COLORS.white,
3517
3094
  strokeWidth: "1",
3518
3095
  strokeLinecap: "round",
3519
3096
  strokeLinejoin: "round"
@@ -3551,8 +3128,8 @@ var TxtIcon = ({ size = 16, className = "" }) => {
3551
3128
  "path",
3552
3129
  {
3553
3130
  d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
3554
- fill: FILE_TYPE_COLORS.txt,
3555
- stroke: FILE_TYPE_COLORS.txt,
3131
+ fill: chunkIZPXHVPJ_cjs.FILE_TYPE_COLORS.txt,
3132
+ stroke: chunkIZPXHVPJ_cjs.FILE_TYPE_COLORS.txt,
3556
3133
  strokeWidth: "1",
3557
3134
  strokeLinecap: "round",
3558
3135
  strokeLinejoin: "round"
@@ -3563,7 +3140,7 @@ var TxtIcon = ({ size = 16, className = "" }) => {
3563
3140
  {
3564
3141
  d: "M14 2v6h6",
3565
3142
  fill: "none",
3566
- stroke: FILE_TYPE_COLORS.white,
3143
+ stroke: chunkIZPXHVPJ_cjs.FILE_TYPE_COLORS.white,
3567
3144
  strokeWidth: "1",
3568
3145
  strokeLinecap: "round",
3569
3146
  strokeLinejoin: "round"
@@ -3601,8 +3178,8 @@ var XlsIcon = ({ size = 16, className = "" }) => {
3601
3178
  "path",
3602
3179
  {
3603
3180
  d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
3604
- fill: FILE_TYPE_COLORS.xls,
3605
- stroke: FILE_TYPE_COLORS.xls,
3181
+ fill: chunkIZPXHVPJ_cjs.FILE_TYPE_COLORS.xls,
3182
+ stroke: chunkIZPXHVPJ_cjs.FILE_TYPE_COLORS.xls,
3606
3183
  strokeWidth: "1",
3607
3184
  strokeLinecap: "round",
3608
3185
  strokeLinejoin: "round"
@@ -3613,7 +3190,7 @@ var XlsIcon = ({ size = 16, className = "" }) => {
3613
3190
  {
3614
3191
  d: "M14 2v6h6",
3615
3192
  fill: "none",
3616
- stroke: FILE_TYPE_COLORS.white,
3193
+ stroke: chunkIZPXHVPJ_cjs.FILE_TYPE_COLORS.white,
3617
3194
  strokeWidth: "1",
3618
3195
  strokeLinecap: "round",
3619
3196
  strokeLinejoin: "round"
@@ -3636,7 +3213,7 @@ var XlsIcon = ({ size = 16, className = "" }) => {
3636
3213
  }
3637
3214
  );
3638
3215
  };
3639
- var AudIcon = ({ size = 16, className = "" }) => {
3216
+ var FileIcon = ({ size = 16, className = "" }) => {
3640
3217
  return /* @__PURE__ */ jsxRuntime.jsxs(
3641
3218
  "svg",
3642
3219
  {
@@ -3651,8 +3228,8 @@ var AudIcon = ({ size = 16, className = "" }) => {
3651
3228
  "path",
3652
3229
  {
3653
3230
  d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
3654
- fill: FILE_TYPE_COLORS.aud,
3655
- stroke: FILE_TYPE_COLORS.aud,
3231
+ fill: chunkIZPXHVPJ_cjs.FILE_TYPE_COLORS.generic,
3232
+ stroke: chunkIZPXHVPJ_cjs.FILE_TYPE_COLORS.generic,
3656
3233
  strokeWidth: "1",
3657
3234
  strokeLinecap: "round",
3658
3235
  strokeLinejoin: "round"
@@ -3663,7 +3240,7 @@ var AudIcon = ({ size = 16, className = "" }) => {
3663
3240
  {
3664
3241
  d: "M14 2v6h6",
3665
3242
  fill: "none",
3666
- stroke: FILE_TYPE_COLORS.white,
3243
+ stroke: chunkIZPXHVPJ_cjs.FILE_TYPE_COLORS.white,
3667
3244
  strokeWidth: "1",
3668
3245
  strokeLinecap: "round",
3669
3246
  strokeLinejoin: "round"
@@ -3673,298 +3250,97 @@ var AudIcon = ({ size = 16, className = "" }) => {
3673
3250
  "text",
3674
3251
  {
3675
3252
  x: "12",
3676
- y: "16",
3677
- fontSize: "6",
3253
+ y: "17",
3254
+ fontSize: "10",
3678
3255
  fill: "white",
3679
3256
  textAnchor: "middle",
3680
3257
  fontWeight: "bold",
3681
3258
  fontFamily: "Arial, sans-serif",
3682
- children: "AUD"
3259
+ children: "?"
3683
3260
  }
3684
3261
  )
3685
3262
  ]
3686
3263
  }
3687
3264
  );
3688
3265
  };
3689
- var ImgIcon = ({ size = 16, className = "" }) => {
3690
- return /* @__PURE__ */ jsxRuntime.jsxs(
3266
+ var AppleIcon = ({
3267
+ size = 20,
3268
+ className = "",
3269
+ "aria-label": ariaLabel,
3270
+ "aria-hidden": ariaHidden = true
3271
+ }) => {
3272
+ return /* @__PURE__ */ jsxRuntime.jsx(
3691
3273
  "svg",
3692
3274
  {
3275
+ className,
3693
3276
  width: size,
3694
3277
  height: size,
3695
3278
  viewBox: "0 0 24 24",
3696
- fill: "none",
3697
- xmlns: "http://www.w3.org/2000/svg",
3279
+ fill: "currentColor",
3280
+ "aria-label": ariaLabel,
3281
+ "aria-hidden": ariaHidden,
3282
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17.05 20.28c-.98.95-2.05.8-3.08.35-1.09-.46-2.09-.48-3.24 0-1.44.62-2.2.44-3.06-.35C2.79 15.25 3.51 7.59 9.05 7.31c1.35.07 2.29.74 3.08.8 1.18-.24 2.31-.93 3.57-.84 1.51.12 2.65.72 3.4 1.8-3.12 1.87-2.38 5.98.48 7.13-.57 1.5-1.31 2.99-2.54 4.09l.01-.01zM12.03 7.25c-.15-2.23 1.66-4.07 3.74-4.25.29 2.58-2.34 4.5-3.74 4.25z" })
3283
+ }
3284
+ );
3285
+ };
3286
+ var GoogleIcon = ({
3287
+ size = 20,
3288
+ className = "",
3289
+ "aria-label": ariaLabel,
3290
+ "aria-hidden": ariaHidden = true
3291
+ }) => {
3292
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3293
+ "svg",
3294
+ {
3698
3295
  className,
3296
+ width: size,
3297
+ height: size,
3298
+ viewBox: "0 0 24 24",
3299
+ "aria-label": ariaLabel,
3300
+ "aria-hidden": ariaHidden,
3699
3301
  children: [
3700
3302
  /* @__PURE__ */ jsxRuntime.jsx(
3701
3303
  "path",
3702
3304
  {
3703
- d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
3704
- fill: FILE_TYPE_COLORS.img,
3705
- stroke: FILE_TYPE_COLORS.img,
3706
- strokeWidth: "1",
3707
- strokeLinecap: "round",
3708
- strokeLinejoin: "round"
3305
+ fill: "#4285F4",
3306
+ d: "M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"
3709
3307
  }
3710
3308
  ),
3711
3309
  /* @__PURE__ */ jsxRuntime.jsx(
3712
3310
  "path",
3713
3311
  {
3714
- d: "M14 2v6h6",
3715
- fill: "none",
3716
- stroke: FILE_TYPE_COLORS.white,
3717
- strokeWidth: "1",
3718
- strokeLinecap: "round",
3719
- strokeLinejoin: "round"
3312
+ fill: "#34A853",
3313
+ d: "M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"
3720
3314
  }
3721
3315
  ),
3722
3316
  /* @__PURE__ */ jsxRuntime.jsx(
3723
- "text",
3317
+ "path",
3724
3318
  {
3725
- x: "12",
3726
- y: "16",
3727
- fontSize: "6",
3728
- fill: "white",
3729
- textAnchor: "middle",
3730
- fontWeight: "bold",
3731
- fontFamily: "Arial, sans-serif",
3732
- children: "IMG"
3319
+ fill: "#FBBC05",
3320
+ d: "M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"
3321
+ }
3322
+ ),
3323
+ /* @__PURE__ */ jsxRuntime.jsx(
3324
+ "path",
3325
+ {
3326
+ fill: "#EA4335",
3327
+ d: "M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"
3733
3328
  }
3734
3329
  )
3735
3330
  ]
3736
3331
  }
3737
3332
  );
3738
3333
  };
3739
- var VidIcon = ({ size = 16, className = "" }) => {
3740
- return /* @__PURE__ */ jsxRuntime.jsxs(
3334
+ var GitHubIcon = ({
3335
+ size = 20,
3336
+ className = "",
3337
+ "aria-label": ariaLabel,
3338
+ "aria-hidden": ariaHidden = true
3339
+ }) => {
3340
+ return /* @__PURE__ */ jsxRuntime.jsx(
3741
3341
  "svg",
3742
3342
  {
3743
- width: size,
3744
- height: size,
3745
- viewBox: "0 0 24 24",
3746
- fill: "none",
3747
- xmlns: "http://www.w3.org/2000/svg",
3748
- className,
3749
- children: [
3750
- /* @__PURE__ */ jsxRuntime.jsx(
3751
- "path",
3752
- {
3753
- d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
3754
- fill: FILE_TYPE_COLORS.vid,
3755
- stroke: FILE_TYPE_COLORS.vid,
3756
- strokeWidth: "1",
3757
- strokeLinecap: "round",
3758
- strokeLinejoin: "round"
3759
- }
3760
- ),
3761
- /* @__PURE__ */ jsxRuntime.jsx(
3762
- "path",
3763
- {
3764
- d: "M14 2v6h6",
3765
- fill: "none",
3766
- stroke: FILE_TYPE_COLORS.white,
3767
- strokeWidth: "1",
3768
- strokeLinecap: "round",
3769
- strokeLinejoin: "round"
3770
- }
3771
- ),
3772
- /* @__PURE__ */ jsxRuntime.jsx(
3773
- "text",
3774
- {
3775
- x: "12",
3776
- y: "16",
3777
- fontSize: "6",
3778
- fill: "white",
3779
- textAnchor: "middle",
3780
- fontWeight: "bold",
3781
- fontFamily: "Arial, sans-serif",
3782
- children: "VID"
3783
- }
3784
- )
3785
- ]
3786
- }
3787
- );
3788
- };
3789
- var EmlIcon = ({ size = 16, className = "" }) => {
3790
- return /* @__PURE__ */ jsxRuntime.jsxs(
3791
- "svg",
3792
- {
3793
- width: size,
3794
- height: size,
3795
- viewBox: "0 0 24 24",
3796
- fill: "none",
3797
- xmlns: "http://www.w3.org/2000/svg",
3798
- className,
3799
- children: [
3800
- /* @__PURE__ */ jsxRuntime.jsx(
3801
- "path",
3802
- {
3803
- d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
3804
- fill: FILE_TYPE_COLORS.eml,
3805
- stroke: FILE_TYPE_COLORS.eml,
3806
- strokeWidth: "1",
3807
- strokeLinecap: "round",
3808
- strokeLinejoin: "round"
3809
- }
3810
- ),
3811
- /* @__PURE__ */ jsxRuntime.jsx(
3812
- "path",
3813
- {
3814
- d: "M14 2v6h6",
3815
- fill: "none",
3816
- stroke: FILE_TYPE_COLORS.white,
3817
- strokeWidth: "1",
3818
- strokeLinecap: "round",
3819
- strokeLinejoin: "round"
3820
- }
3821
- ),
3822
- /* @__PURE__ */ jsxRuntime.jsx(
3823
- "rect",
3824
- {
3825
- x: "7",
3826
- y: "12",
3827
- width: "10",
3828
- height: "7",
3829
- rx: "1",
3830
- fill: "none",
3831
- stroke: "white",
3832
- strokeWidth: "1.2"
3833
- }
3834
- ),
3835
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 13l5 3 5-3", fill: "none", stroke: "white", strokeWidth: "1.2", strokeLinejoin: "round" })
3836
- ]
3837
- }
3838
- );
3839
- };
3840
- var FileIcon = ({ size = 16, className = "" }) => {
3841
- return /* @__PURE__ */ jsxRuntime.jsxs(
3842
- "svg",
3843
- {
3844
- width: size,
3845
- height: size,
3846
- viewBox: "0 0 24 24",
3847
- fill: "none",
3848
- xmlns: "http://www.w3.org/2000/svg",
3849
- className,
3850
- children: [
3851
- /* @__PURE__ */ jsxRuntime.jsx(
3852
- "path",
3853
- {
3854
- d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
3855
- fill: FILE_TYPE_COLORS.generic,
3856
- stroke: FILE_TYPE_COLORS.generic,
3857
- strokeWidth: "1",
3858
- strokeLinecap: "round",
3859
- strokeLinejoin: "round"
3860
- }
3861
- ),
3862
- /* @__PURE__ */ jsxRuntime.jsx(
3863
- "path",
3864
- {
3865
- d: "M14 2v6h6",
3866
- fill: "none",
3867
- stroke: FILE_TYPE_COLORS.white,
3868
- strokeWidth: "1",
3869
- strokeLinecap: "round",
3870
- strokeLinejoin: "round"
3871
- }
3872
- ),
3873
- /* @__PURE__ */ jsxRuntime.jsx(
3874
- "text",
3875
- {
3876
- x: "12",
3877
- y: "17",
3878
- fontSize: "10",
3879
- fill: "white",
3880
- textAnchor: "middle",
3881
- fontWeight: "bold",
3882
- fontFamily: "Arial, sans-serif",
3883
- children: "?"
3884
- }
3885
- )
3886
- ]
3887
- }
3888
- );
3889
- };
3890
- var AppleIcon = ({
3891
- size = 20,
3892
- className = "",
3893
- "aria-label": ariaLabel,
3894
- "aria-hidden": ariaHidden = true
3895
- }) => {
3896
- return /* @__PURE__ */ jsxRuntime.jsx(
3897
- "svg",
3898
- {
3899
- className,
3900
- width: size,
3901
- height: size,
3902
- viewBox: "0 0 24 24",
3903
- fill: "currentColor",
3904
- "aria-label": ariaLabel,
3905
- "aria-hidden": ariaHidden,
3906
- children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17.05 20.28c-.98.95-2.05.8-3.08.35-1.09-.46-2.09-.48-3.24 0-1.44.62-2.2.44-3.06-.35C2.79 15.25 3.51 7.59 9.05 7.31c1.35.07 2.29.74 3.08.8 1.18-.24 2.31-.93 3.57-.84 1.51.12 2.65.72 3.4 1.8-3.12 1.87-2.38 5.98.48 7.13-.57 1.5-1.31 2.99-2.54 4.09l.01-.01zM12.03 7.25c-.15-2.23 1.66-4.07 3.74-4.25.29 2.58-2.34 4.5-3.74 4.25z" })
3907
- }
3908
- );
3909
- };
3910
- var GoogleIcon = ({
3911
- size = 20,
3912
- className = "",
3913
- "aria-label": ariaLabel,
3914
- "aria-hidden": ariaHidden = true
3915
- }) => {
3916
- return /* @__PURE__ */ jsxRuntime.jsxs(
3917
- "svg",
3918
- {
3919
- className,
3920
- width: size,
3921
- height: size,
3922
- viewBox: "0 0 24 24",
3923
- "aria-label": ariaLabel,
3924
- "aria-hidden": ariaHidden,
3925
- children: [
3926
- /* @__PURE__ */ jsxRuntime.jsx(
3927
- "path",
3928
- {
3929
- fill: "#4285F4",
3930
- d: "M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"
3931
- }
3932
- ),
3933
- /* @__PURE__ */ jsxRuntime.jsx(
3934
- "path",
3935
- {
3936
- fill: "#34A853",
3937
- d: "M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"
3938
- }
3939
- ),
3940
- /* @__PURE__ */ jsxRuntime.jsx(
3941
- "path",
3942
- {
3943
- fill: "#FBBC05",
3944
- d: "M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"
3945
- }
3946
- ),
3947
- /* @__PURE__ */ jsxRuntime.jsx(
3948
- "path",
3949
- {
3950
- fill: "#EA4335",
3951
- d: "M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"
3952
- }
3953
- )
3954
- ]
3955
- }
3956
- );
3957
- };
3958
- var GitHubIcon = ({
3959
- size = 20,
3960
- className = "",
3961
- "aria-label": ariaLabel,
3962
- "aria-hidden": ariaHidden = true
3963
- }) => {
3964
- return /* @__PURE__ */ jsxRuntime.jsx(
3965
- "svg",
3966
- {
3967
- className,
3343
+ className,
3968
3344
  width: size,
3969
3345
  height: size,
3970
3346
  viewBox: "0 0 24 24",
@@ -4146,869 +3522,81 @@ function ProviderIcon({
4146
3522
  return /* @__PURE__ */ jsxRuntime.jsx(FireworksIcon, { size, className });
4147
3523
  }
4148
3524
  return /* @__PURE__ */ jsxRuntime.jsx(
4149
- lucideReact.Crown,
4150
- {
4151
- className,
4152
- style: { width: size, height: size, color: "#EAB308", fill: "#EAB308" }
4153
- }
4154
- );
4155
- }
4156
- var ArbiIcon = ({
4157
- size = 20,
4158
- className = "",
4159
- "aria-label": ariaLabel = "ARBI Docs",
4160
- "aria-hidden": ariaHidden = false
4161
- }) => {
4162
- return /* @__PURE__ */ jsxRuntime.jsx(
4163
- "img",
4164
- {
4165
- src: "/favicon.svg",
4166
- alt: ariaLabel,
4167
- className: `rounded object-contain ${className}`,
4168
- style: { width: size, height: size },
4169
- "aria-label": ariaLabel,
4170
- "aria-hidden": ariaHidden
4171
- }
4172
- );
4173
- };
4174
- var ArbiBotHeadIcon = ({ size = 24, className = "" }) => {
4175
- const maskId = React2.useId();
4176
- return /* @__PURE__ */ jsxRuntime.jsxs(
4177
- "svg",
4178
- {
4179
- xmlns: "http://www.w3.org/2000/svg",
4180
- width: size,
4181
- height: size,
4182
- viewBox: "30 -5 190 190",
4183
- preserveAspectRatio: "xMidYMid meet",
4184
- className,
4185
- children: [
4186
- /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsx("mask", { id: maskId, children: /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: "translate(0,250) scale(0.1,-0.1)", children: [
4187
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "0", width: "2500", height: "2500", fill: "white" }),
4188
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "855", cy: "1715", r: "190", fill: "black" }),
4189
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "855", cy: "1715", r: "50", fill: "white" }),
4190
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "1665", cy: "1700", r: "190", fill: "black" }),
4191
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "1665", cy: "1700", r: "50", fill: "white" })
4192
- ] }) }) }),
4193
- /* @__PURE__ */ jsxRuntime.jsxs("g", { mask: `url(#${maskId})`, children: [
4194
- /* @__PURE__ */ jsxRuntime.jsx(
4195
- "g",
4196
- {
4197
- transform: "translate(0,250) scale(0.1,-0.1)",
4198
- fill: "currentColor",
4199
- stroke: "currentColor",
4200
- strokeWidth: "100",
4201
- children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M1038 2434 c-217 -39 -406 -154 -522 -318 -121 -170 -176 -376 -103 -384 l27 -3 0 -106 c0 -88 -3 -108 -17 -118 -15 -11 -16 -18 -5 -66 44 -188 209 -369 420 -459 l65 -28 -74 -7 c-283 -26 -444 -152 -535 -418 -70 -204 -73 -507 -5 -507 4 0 12 75 19 168 18 263 68 419 167 530 78 87 224 162 263 134 9 -6 43 -26 76 -43 224 -117 802 -95 948 38 38 34 165 -22 253 -111 117 -119 168 -268 187 -549 6 -92 15 -167 19 -167 89 0 53 415 -54 627 -88 173 -238 270 -458 295 l-99 11 75 32 c201 88 367 274 406 454 10 47 9 56 -5 66 -13 10 -16 32 -16 118 l0 106 28 3 c91 10 -12 297 -165 459 -202 214 -544 307 -895 243z m472 -84 c170 -43 323 -140 416 -264 47 -61 117 -197 128 -248 l6 -28 -65 0 c-64 0 -65 1 -78 33 -43 102 -109 136 -262 137 l-110 0 -38 -40 c-25 -27 -46 -40 -65 -41 -134 -5 -394 1 -410 10 -11 6 -30 24 -42 41 l-21 30 -112 0 c-156 -1 -219 -33 -262 -136 -14 -34 -14 -34 -80 -34 -76 0 -74 -7 -30 103 96 243 311 406 595 452 118 20 319 13 430 -15z m-561 -505 c97 -50 126 -174 61 -263 -118 -163 -380 -23 -309 165 35 93 162 143 248 98z m799 -15 c129 -96 69 -304 -92 -318 -189 -16 -265 218 -106 326 48 33 149 29 198 -8z m272 -389 c0 -23 -45 -110 -86 -168 -245 -343 -856 -408 -1231 -130 -90 67 -213 236 -213 294 0 11 132 13 765 13 457 0 765 -4 765 -9z" })
4202
- }
4203
- ),
4204
- /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: "translate(0,250) scale(0.1,-0.1)", fill: "currentColor", stroke: "none", children: [
4205
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M785 1777 c-60 -60 -59 -134 1 -186 92 -82 236 9 204 128 -25 93 -138 125 -205 58z m161 -29 c7 -22 -19 -52 -40 -45 -21 7 -30 35 -17 51 19 23 48 20 57 -6z" }),
4206
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M1591 1803 c-128 -67 -85 -243 60 -243 83 0 141 99 105 178 -32 69 -103 97 -165 65z m127 -59 c4 -25 -19 -47 -41 -38 -22 8 -30 34 -16 51 17 20 53 12 57 -13z" }),
4207
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M843 1347 c-9 -15 9 -63 41 -108 148 -202 565 -209 730 -12 37 44 60 103 47 116 -13 13 -810 17 -818 4z" })
4208
- ] })
4209
- ] })
4210
- ]
4211
- }
4212
- );
4213
- };
4214
- var ArbiBotIcon = ({ size = 24, className = "" }) => {
4215
- const maskId = React2.useId();
4216
- return /* @__PURE__ */ jsxRuntime.jsxs(
4217
- "svg",
4218
- {
4219
- xmlns: "http://www.w3.org/2000/svg",
4220
- width: size,
4221
- height: size,
4222
- viewBox: "0 0 250 250",
4223
- preserveAspectRatio: "xMidYMid meet",
4224
- className,
4225
- children: [
4226
- /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsx("mask", { id: maskId, children: /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: "translate(0,250) scale(0.1,-0.1)", children: [
4227
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "0", width: "2500", height: "2500", fill: "white" }),
4228
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "855", cy: "1715", r: "190", fill: "black" }),
4229
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "855", cy: "1715", r: "50", fill: "white" }),
4230
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "1665", cy: "1700", r: "190", fill: "black" }),
4231
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "1665", cy: "1700", r: "50", fill: "white" })
4232
- ] }) }) }),
4233
- /* @__PURE__ */ jsxRuntime.jsxs("g", { mask: `url(#${maskId})`, children: [
4234
- /* @__PURE__ */ jsxRuntime.jsx(
4235
- "g",
4236
- {
4237
- transform: "translate(0,250) scale(0.1,-0.1)",
4238
- fill: "currentColor",
4239
- stroke: "currentColor",
4240
- strokeWidth: "100",
4241
- children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M1038 2434 c-217 -39 -406 -154 -522 -318 -121 -170 -176 -376 -103 -384 l27 -3 0 -106 c0 -88 -3 -108 -17 -118 -15 -11 -16 -18 -5 -66 44 -188 209 -369 420 -459 l65 -28 -74 -7 c-283 -26 -444 -152 -535 -418 -70 -204 -73 -507 -5 -507 4 0 12 75 19 168 18 263 68 419 167 530 78 87 224 162 263 134 9 -6 43 -26 76 -43 224 -117 802 -95 948 38 38 34 165 -22 253 -111 117 -119 168 -268 187 -549 6 -92 15 -167 19 -167 89 0 53 415 -54 627 -88 173 -238 270 -458 295 l-99 11 75 32 c201 88 367 274 406 454 10 47 9 56 -5 66 -13 10 -16 32 -16 118 l0 106 28 3 c91 10 -12 297 -165 459 -202 214 -544 307 -895 243z m472 -84 c170 -43 323 -140 416 -264 47 -61 117 -197 128 -248 l6 -28 -65 0 c-64 0 -65 1 -78 33 -43 102 -109 136 -262 137 l-110 0 -38 -40 c-25 -27 -46 -40 -65 -41 -134 -5 -394 1 -410 10 -11 6 -30 24 -42 41 l-21 30 -112 0 c-156 -1 -219 -33 -262 -136 -14 -34 -14 -34 -80 -34 -76 0 -74 -7 -30 103 96 243 311 406 595 452 118 20 319 13 430 -15z m-561 -505 c97 -50 126 -174 61 -263 -118 -163 -380 -23 -309 165 35 93 162 143 248 98z m799 -15 c129 -96 69 -304 -92 -318 -189 -16 -265 218 -106 326 48 33 149 29 198 -8z m272 -389 c0 -23 -45 -110 -86 -168 -245 -343 -856 -408 -1231 -130 -90 67 -213 236 -213 294 0 11 132 13 765 13 457 0 765 -4 765 -9z" })
4242
- }
4243
- ),
4244
- /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: "translate(0,250) scale(0.1,-0.1)", fill: "currentColor", stroke: "none", children: [
4245
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M785 1777 c-60 -60 -59 -134 1 -186 92 -82 236 9 204 128 -25 93 -138 125 -205 58z m161 -29 c7 -22 -19 -52 -40 -45 -21 7 -30 35 -17 51 19 23 48 20 57 -6z" }),
4246
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M1591 1803 c-128 -67 -85 -243 60 -243 83 0 141 99 105 178 -32 69 -103 97 -165 65z m127 -59 c4 -25 -19 -47 -41 -38 -22 8 -30 34 -16 51 17 20 53 12 57 -13z" }),
4247
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M843 1347 c-9 -15 9 -63 41 -108 148 -202 565 -209 730 -12 37 44 60 103 47 116 -13 13 -810 17 -818 4z" }),
4248
- /* @__PURE__ */ jsxRuntime.jsx("g", { transform: "translate(564,0)", children: /* @__PURE__ */ jsxRuntime.jsx(
4249
- "path",
4250
- {
4251
- d: "M515 353 c-49 -136 -91 -253 -93 -261 -3 -10 11 -12 60 -10 l63 3 19 53 19 52 91 0 92 0 18 -55 17 -56 62 3 c76 4 79 -24 -30 275 l-88 243 -70 0 -70 0 -90 -247z m215 -55 c0 -4 -27 -8 -59 -8 l-60 0 31 92 31 93 29 -85 c15 -46 28 -88 28 -92z",
4252
- stroke: "currentColor",
4253
- strokeWidth: "30"
4254
- }
4255
- ) })
4256
- ] })
4257
- ] })
4258
- ]
4259
- }
4260
- );
4261
- };
4262
- function getDocumentTitle(document2, defaultValue = "") {
4263
- if (!document2) return defaultValue;
4264
- return document2.doc_metadata?.title || document2.file_name || defaultValue;
4265
- }
4266
- var MAX_LABEL_CHARS = 30;
4267
- function clampLabel(text) {
4268
- return text.length > MAX_LABEL_CHARS ? `${text.slice(0, MAX_LABEL_CHARS).trimEnd()}\u2026` : text;
4269
- }
4270
- var IMAGE_EXTENSIONS = /* @__PURE__ */ new Set(["jpg", "jpeg", "png", "gif", "bmp", "tiff", "tif", "webp"]);
4271
- var VIDEO_EXTENSIONS = /* @__PURE__ */ new Set(["mp4", "mpeg", "mpg", "webm", "mov", "avi", "mkv"]);
4272
- var AUDIO_EXTENSIONS = /* @__PURE__ */ new Set(["mp3", "wav", "m4a", "aac", "ogg", "flac"]);
4273
- var EMAIL_EXTENSIONS = /* @__PURE__ */ new Set(["eml", "msg"]);
4274
- function getDocIcon(fileName, iconSize = 14) {
4275
- const ext = fileName?.split(".").pop()?.toLowerCase();
4276
- if (ext && VIDEO_EXTENSIONS.has(ext)) return /* @__PURE__ */ jsxRuntime.jsx(VidIcon, { size: iconSize, className: "flex-shrink-0" });
4277
- if (ext && AUDIO_EXTENSIONS.has(ext)) return /* @__PURE__ */ jsxRuntime.jsx(AudIcon, { size: iconSize, className: "flex-shrink-0" });
4278
- if (ext && IMAGE_EXTENSIONS.has(ext)) return /* @__PURE__ */ jsxRuntime.jsx(ImgIcon, { size: iconSize, className: "flex-shrink-0" });
4279
- if (ext && EMAIL_EXTENSIONS.has(ext)) return /* @__PURE__ */ jsxRuntime.jsx(EmlIcon, { size: iconSize, className: "flex-shrink-0" });
4280
- return /* @__PURE__ */ jsxRuntime.jsx(PdfIcon, { size: iconSize, className: "flex-shrink-0" });
4281
- }
4282
- function DocumentEntity({
4283
- doc,
4284
- icon,
4285
- size = "sm",
4286
- labelMaxWidth,
4287
- labelClassName,
4288
- onClick,
4289
- onIconClick,
4290
- viewing,
4291
- iconBadge,
4292
- actions,
4293
- tooltipContent,
4294
- className,
4295
- fullWidth,
4296
- noClamp
4297
- }) {
4298
- const title = getDocumentTitle(doc);
4299
- const ext = doc.file_name?.split(".").pop()?.toLowerCase();
4300
- const iconSize = size === "base" ? 16 : 14;
4301
- const eyeSizeClass = size === "base" ? "h-4 w-4" : "h-3.5 w-3.5";
4302
- const baseIcon = icon ?? getDocIcon(doc.file_name, iconSize);
4303
- const displayIcon = viewing || iconBadge ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative inline-flex flex-shrink-0 items-center justify-center", children: [
4304
- viewing ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Eye, { className: chunkFIPS3VPH_cjs.cn("text-primary-foreground", eyeSizeClass) }) : baseIcon,
4305
- iconBadge
4306
- ] }) : baseIcon;
4307
- const defaultTooltip = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1 text-xs max-w-[440px]", children: [
4308
- doc.folder && // `flex-wrap` so a deep folder path wraps WITHIN the balloon instead of
4309
- // spilling out of it (each path segment is atomic and wraps as a unit;
4310
- // `min-w-0` + `break-all` lets a single over-long segment break too).
4311
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex flex-wrap items-center gap-0.5 text-muted-foreground", children: [
4312
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FolderOpen, { className: "h-3 w-3 text-yellow-600 shrink-0" }),
4313
- doc.folder.split("/").map((part, i, arr) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 items-center gap-0.5", children: [
4314
- i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground/50 mx-0.5", children: "/" }),
4315
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: `break-all ${i < arr.length - 1 ? "text-muted-foreground/70" : ""}`, children: part })
4316
- ] }, i))
4317
- ] }),
4318
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-medium break-words", children: [
4319
- title,
4320
- ext ? `.${ext}` : ""
4321
- ] })
4322
- ] });
4323
- return /* @__PURE__ */ jsxRuntime.jsx(
4324
- EntityPill,
4325
- {
4326
- icon: displayIcon,
4327
- size,
4328
- label: fullWidth || noClamp ? title : clampLabel(title),
4329
- labelMaxWidth: labelMaxWidth ?? "max-w-[140px]",
4330
- labelClassName,
4331
- fullWidth,
4332
- onClick,
4333
- onIconClick,
4334
- moreContent: actions,
4335
- className,
4336
- highlight: viewing,
4337
- tooltipContent: tooltipContent ?? defaultTooltip
4338
- }
4339
- );
4340
- }
4341
- var VARIANT_STYLES = {
4342
- "mine-paid": {
4343
- pill: "bg-primary/10 text-primary border-border/60",
4344
- icon: "text-primary"
4345
- },
4346
- other: {
4347
- pill: "bg-secondary/10 text-secondary border-border/60",
4348
- icon: "text-secondary"
4349
- },
4350
- "mine-free": {
4351
- pill: "bg-muted-foreground/10 text-muted-foreground border-border/60",
4352
- icon: "text-muted-foreground"
4353
- },
4354
- common: {
4355
- pill: "",
4356
- icon: "text-muted-foreground"
4357
- }
4358
- };
4359
- function resolveVariant(relation, paid, hasCollaborators) {
4360
- if (relation === "common") return "common";
4361
- if (relation === "other") return "other";
4362
- if (relation === "mine") return paid ? "mine-paid" : "mine-free";
4363
- if (paid) return hasCollaborators ? "other" : "mine-paid";
4364
- return "mine-free";
4365
- }
4366
- function ProjectEntity({
4367
- name,
4368
- label,
4369
- icon,
4370
- subscription = "none",
4371
- hasCollaborators = false,
4372
- size = "sm",
4373
- className,
4374
- onClick,
4375
- relation,
4376
- isPaid,
4377
- tooltipContent
4378
- }) {
4379
- const paid = isPaid ?? (subscription === "active" || subscription === "past_due" || subscription === "dev");
4380
- const variant = resolveVariant(relation, paid, hasCollaborators);
4381
- const { pill, icon: iconClass } = VARIANT_STYLES[variant];
4382
- const iconSizeClass = size === "base" ? "h-4 w-4" : "h-3.5 w-3.5";
4383
- const iconNode = icon ?? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CreditCard, { className: chunkFIPS3VPH_cjs.cn(iconSizeClass, iconClass) });
4384
- return /* @__PURE__ */ jsxRuntime.jsx(
4385
- EntityPill,
4386
- {
4387
- icon: iconNode,
4388
- label: label ?? name,
4389
- size,
4390
- shape: "rounded",
4391
- className: chunkFIPS3VPH_cjs.cn(pill, className),
4392
- onClick,
4393
- tooltipContent
4394
- }
4395
- );
4396
- }
4397
- var sizeClasses = {
4398
- xs: "h-5 w-5",
4399
- sm: "h-6 w-6",
4400
- md: "h-8 w-8",
4401
- lg: "h-10 w-10"
4402
- };
4403
- var textSizeClasses = {
4404
- xs: "text-xs",
4405
- sm: "text-xs",
4406
- md: "text-xs",
4407
- lg: "text-sm"
4408
- };
4409
- var presenceDotClasses = {
4410
- xs: "w-2 h-2 border",
4411
- sm: "w-2.5 h-2.5 border",
4412
- md: "w-3 h-3 border-2",
4413
- lg: "w-3.5 h-3.5 border-2"
4414
- };
4415
- var presencePositionClasses = {
4416
- xs: "-right-1 bottom-0",
4417
- sm: "-right-1 bottom-0",
4418
- md: "-right-1.5 -bottom-0.5",
4419
- lg: "-right-1.5 -bottom-0.5"
4420
- };
4421
- var PRESENCE_LABELS = {
4422
- connected: "Online",
4423
- connecting: "Connecting",
4424
- disconnected: "Offline",
4425
- error: "Connection problem",
4426
- hidden: "Status hidden"
4427
- };
4428
- var presenceColorClasses = {
4429
- connected: "bg-status-online",
4430
- connecting: "bg-status-connecting",
4431
- disconnected: "bg-status-away",
4432
- error: "bg-status-busy",
4433
- hidden: "bg-status-offline"
4434
- };
4435
- var UserEntity = React2.memo(function UserEntity2({
4436
- size = "md",
4437
- variant = "pill",
4438
- className,
4439
- showTooltip = true,
4440
- interactive = true,
4441
- hasUnreadMessages = false,
4442
- initials = "",
4443
- displayName = "",
4444
- picture,
4445
- colorClass = "",
4446
- isAgent = false,
4447
- agentStyle,
4448
- avatarStyle,
4449
- isMe = false,
4450
- displayStatus,
4451
- onClick,
4452
- tooltipContent,
4453
- empty = false
4454
- }) {
4455
- if (empty) {
4456
- return /* @__PURE__ */ jsxRuntime.jsx(
4457
- chunkFIPS3VPH_cjs.Avatar,
4458
- {
4459
- className: chunkFIPS3VPH_cjs.cn(sizeClasses[size], "border border-border", className),
4460
- "data-testid": "user-entity",
4461
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.AvatarFallback, { className: "bg-status-empty text-muted-foreground text-xs font-semibold", children: "?" })
4462
- }
4463
- );
4464
- }
4465
- const agentBadge = isAgent ? /* @__PURE__ */ jsxRuntime.jsx(ArbiBotHeadIcon, { className: "w-3.5 h-3.5 text-muted-foreground" }) : void 0;
4466
- const canMessage = interactive && !isMe && !isAgent;
4467
- const showUnread = hasUnreadMessages && !isMe && !isAgent;
4468
- const surfaceStyle = avatarStyle ?? agentStyle;
4469
- const avatarCore = /* @__PURE__ */ jsxRuntime.jsxs(
4470
- chunkFIPS3VPH_cjs.Avatar,
4471
- {
4472
- className: chunkFIPS3VPH_cjs.cn(
4473
- sizeClasses[size],
4474
- isAgent ? "rounded-full border-2 border-dashed" : "border border-white"
4475
- ),
4476
- style: surfaceStyle,
4477
- "data-testid": "user-entity",
4478
- children: [
4479
- picture && /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.AvatarImage, { src: picture, alt: initials }),
4480
- /* @__PURE__ */ jsxRuntime.jsx(
4481
- chunkFIPS3VPH_cjs.AvatarFallback,
4482
- {
4483
- className: chunkFIPS3VPH_cjs.cn(
4484
- textSizeClasses[size],
4485
- "font-semibold leading-none",
4486
- isAgent ? "rounded-full bg-transparent" : `text-white ${colorClass}`
4487
- ),
4488
- style: surfaceStyle,
4489
- children: initials
4490
- }
4491
- )
4492
- ]
4493
- }
4494
- );
4495
- const statusDot = showUnread || displayStatus ? /* @__PURE__ */ jsxRuntime.jsx(
4496
- "span",
4497
- {
4498
- className: chunkFIPS3VPH_cjs.cn(
4499
- "absolute rounded-full border-white",
4500
- presenceDotClasses[size],
4501
- presencePositionClasses[size],
4502
- !showUnread && displayStatus ? presenceColorClasses[displayStatus] : ""
4503
- ),
4504
- style: showUnread ? { backgroundColor: "#00adef" } : void 0,
4505
- "data-testid": "user-entity-presence",
4506
- role: "img",
4507
- "aria-label": showUnread ? "Unread messages" : PRESENCE_LABELS[displayStatus],
4508
- title: showUnread ? "Unread messages" : PRESENCE_LABELS[displayStatus]
4509
- }
4510
- ) : null;
4511
- const avatarElement = statusDot ? /* @__PURE__ */ jsxRuntime.jsxs(
4512
- "div",
4513
- {
4514
- className: chunkFIPS3VPH_cjs.cn(
4515
- "relative inline-block",
4516
- sizeClasses[size],
4517
- variant === "pill" ? "" : className
4518
- ),
4519
- children: [
4520
- avatarCore,
4521
- statusDot
4522
- ]
4523
- }
4524
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkFIPS3VPH_cjs.cn("inline-block", variant === "pill" ? "" : className), children: avatarCore });
4525
- const pillAvatar = (
4526
- // shrink-0: when the pill is squeezed the NAME truncates away — the avatar
4527
- // must never collapse under it and overflow onto neighbouring text.
4528
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: chunkFIPS3VPH_cjs.cn("relative inline-block shrink-0", sizeClasses[size]), children: [
4529
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkFIPS3VPH_cjs.cn("block transition-opacity", canMessage && "group-hover/pill:opacity-0"), children: avatarCore }),
4530
- canMessage && /* @__PURE__ */ jsxRuntime.jsx(
4531
- "span",
4532
- {
4533
- "aria-hidden": true,
4534
- className: "absolute inset-0 flex items-center justify-center rounded-full bg-muted text-foreground opacity-0 transition-opacity group-hover/pill:opacity-100",
4535
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageCircleMore, { className: size === "xs" ? "h-3 w-3" : "h-4 w-4" })
4536
- }
4537
- ),
4538
- statusDot
4539
- ] })
4540
- );
4541
- const resolvedTooltip = showTooltip ? tooltipContent : void 0;
4542
- if (variant === "pill") {
4543
- const row = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
4544
- pillAvatar,
4545
- displayName && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 max-w-[320px] truncate text-sm leading-tight", children: displayName }),
4546
- agentBadge
4547
- ] });
4548
- const rowClass = "group/pill inline-flex min-w-0 items-center gap-2";
4549
- const clickable = interactive && !!onClick;
4550
- const clickableClass = "cursor-pointer rounded-md px-1 py-0.5 -mx-1 transition-colors hover:bg-muted/60";
4551
- if (resolvedTooltip) {
4552
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.Tooltip, { children: [
4553
- /* @__PURE__ */ jsxRuntime.jsx(
4554
- chunkFIPS3VPH_cjs.TooltipTrigger,
4555
- {
4556
- type: "button",
4557
- onClick: clickable ? onClick : void 0,
4558
- onFocusCapture: (e) => e.stopPropagation(),
4559
- className: chunkFIPS3VPH_cjs.cn(rowClass, clickable && clickableClass, className),
4560
- "data-testid": "user-entity-pill",
4561
- children: row
4562
- }
4563
- ),
4564
- /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.TooltipContent, { className: "p-2", children: resolvedTooltip })
4565
- ] });
4566
- }
4567
- if (clickable) {
4568
- return /* @__PURE__ */ jsxRuntime.jsx(
4569
- "button",
4570
- {
4571
- type: "button",
4572
- onClick,
4573
- className: chunkFIPS3VPH_cjs.cn(rowClass, clickableClass, className),
4574
- "data-testid": "user-entity-pill",
4575
- children: row
4576
- }
4577
- );
4578
- }
4579
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkFIPS3VPH_cjs.cn(rowClass, className), "data-testid": "user-entity-pill", children: row });
4580
- }
4581
- if (showTooltip) {
4582
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.Tooltip, { children: [
4583
- /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.TooltipTrigger, { onFocusCapture: (e) => e.stopPropagation(), className: "inline-flex", children: avatarElement }),
4584
- /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.TooltipContent, { className: "p-2", children: tooltipContent })
4585
- ] });
4586
- }
4587
- return avatarElement;
4588
- });
4589
- function AgentBadge({ className }) {
4590
- return /* @__PURE__ */ jsxRuntime.jsxs(
4591
- "span",
4592
- {
4593
- "data-testid": "agent-badge",
4594
- className: chunkFIPS3VPH_cjs.cn(
4595
- "inline-flex shrink-0 items-center gap-1 rounded-full border border-ai-accent/50",
4596
- "bg-ai-accent-soft px-2 py-0.5 text-[11px] font-bold uppercase tracking-wider text-ai-accent",
4597
- className
4598
- ),
4599
- children: [
4600
- /* @__PURE__ */ jsxRuntime.jsx(ArbiBotHeadIcon, { size: 14, className: "text-ai-accent" }),
4601
- "Agent"
4602
- ]
3525
+ lucideReact.Crown,
3526
+ {
3527
+ className,
3528
+ style: { width: size, height: size, color: "#EAB308", fill: "#EAB308" }
4603
3529
  }
4604
3530
  );
4605
3531
  }
4606
- var PRESENCE_WORDS = {
4607
- connected: "Online",
4608
- connecting: "Connecting",
4609
- disconnected: "Offline",
4610
- error: "Connection problem",
4611
- hidden: null
3532
+ var ArbiIcon = ({
3533
+ size = 20,
3534
+ className = "",
3535
+ "aria-label": ariaLabel = "ARBI Docs",
3536
+ "aria-hidden": ariaHidden = false
3537
+ }) => {
3538
+ return /* @__PURE__ */ jsxRuntime.jsx(
3539
+ "img",
3540
+ {
3541
+ src: "/favicon.svg",
3542
+ alt: ariaLabel,
3543
+ className: `rounded object-contain ${className}`,
3544
+ style: { width: size, height: size },
3545
+ "aria-label": ariaLabel,
3546
+ "aria-hidden": ariaHidden
3547
+ }
3548
+ );
4612
3549
  };
4613
- function PresenceLabel({
4614
- status,
4615
- className
4616
- }) {
4617
- if (!status) return null;
4618
- const word = PRESENCE_WORDS[status];
4619
- if (!word) return null;
4620
- const online = status === "connected";
3550
+ var ArbiBotIcon = ({ size = 24, className = "" }) => {
3551
+ const maskId = React.useId();
4621
3552
  return /* @__PURE__ */ jsxRuntime.jsxs(
4622
- "span",
3553
+ "svg",
4623
3554
  {
4624
- "data-testid": "presence-label",
4625
- className: chunkFIPS3VPH_cjs.cn("inline-flex shrink-0 items-center gap-1 text-xs", className),
3555
+ xmlns: "http://www.w3.org/2000/svg",
3556
+ width: size,
3557
+ height: size,
3558
+ viewBox: "0 0 250 250",
3559
+ preserveAspectRatio: "xMidYMid meet",
3560
+ className,
4626
3561
  children: [
4627
- /* @__PURE__ */ jsxRuntime.jsx(
4628
- "span",
4629
- {
4630
- className: chunkFIPS3VPH_cjs.cn(
4631
- "size-1.5 rounded-full",
4632
- online ? "bg-status-online" : "bg-muted-foreground/50"
4633
- ),
4634
- "aria-hidden": "true"
4635
- }
4636
- ),
4637
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: online ? "font-medium text-status-online" : "text-muted-foreground", children: word })
3562
+ /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsx("mask", { id: maskId, children: /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: "translate(0,250) scale(0.1,-0.1)", children: [
3563
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "0", width: "2500", height: "2500", fill: "white" }),
3564
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "855", cy: "1715", r: "190", fill: "black" }),
3565
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "855", cy: "1715", r: "50", fill: "white" }),
3566
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "1665", cy: "1700", r: "190", fill: "black" }),
3567
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "1665", cy: "1700", r: "50", fill: "white" })
3568
+ ] }) }) }),
3569
+ /* @__PURE__ */ jsxRuntime.jsxs("g", { mask: `url(#${maskId})`, children: [
3570
+ /* @__PURE__ */ jsxRuntime.jsx(
3571
+ "g",
3572
+ {
3573
+ transform: "translate(0,250) scale(0.1,-0.1)",
3574
+ fill: "currentColor",
3575
+ stroke: "currentColor",
3576
+ strokeWidth: "100",
3577
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M1038 2434 c-217 -39 -406 -154 -522 -318 -121 -170 -176 -376 -103 -384 l27 -3 0 -106 c0 -88 -3 -108 -17 -118 -15 -11 -16 -18 -5 -66 44 -188 209 -369 420 -459 l65 -28 -74 -7 c-283 -26 -444 -152 -535 -418 -70 -204 -73 -507 -5 -507 4 0 12 75 19 168 18 263 68 419 167 530 78 87 224 162 263 134 9 -6 43 -26 76 -43 224 -117 802 -95 948 38 38 34 165 -22 253 -111 117 -119 168 -268 187 -549 6 -92 15 -167 19 -167 89 0 53 415 -54 627 -88 173 -238 270 -458 295 l-99 11 75 32 c201 88 367 274 406 454 10 47 9 56 -5 66 -13 10 -16 32 -16 118 l0 106 28 3 c91 10 -12 297 -165 459 -202 214 -544 307 -895 243z m472 -84 c170 -43 323 -140 416 -264 47 -61 117 -197 128 -248 l6 -28 -65 0 c-64 0 -65 1 -78 33 -43 102 -109 136 -262 137 l-110 0 -38 -40 c-25 -27 -46 -40 -65 -41 -134 -5 -394 1 -410 10 -11 6 -30 24 -42 41 l-21 30 -112 0 c-156 -1 -219 -33 -262 -136 -14 -34 -14 -34 -80 -34 -76 0 -74 -7 -30 103 96 243 311 406 595 452 118 20 319 13 430 -15z m-561 -505 c97 -50 126 -174 61 -263 -118 -163 -380 -23 -309 165 35 93 162 143 248 98z m799 -15 c129 -96 69 -304 -92 -318 -189 -16 -265 218 -106 326 48 33 149 29 198 -8z m272 -389 c0 -23 -45 -110 -86 -168 -245 -343 -856 -408 -1231 -130 -90 67 -213 236 -213 294 0 11 132 13 765 13 457 0 765 -4 765 -9z" })
3578
+ }
3579
+ ),
3580
+ /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: "translate(0,250) scale(0.1,-0.1)", fill: "currentColor", stroke: "none", children: [
3581
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M785 1777 c-60 -60 -59 -134 1 -186 92 -82 236 9 204 128 -25 93 -138 125 -205 58z m161 -29 c7 -22 -19 -52 -40 -45 -21 7 -30 35 -17 51 19 23 48 20 57 -6z" }),
3582
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M1591 1803 c-128 -67 -85 -243 60 -243 83 0 141 99 105 178 -32 69 -103 97 -165 65z m127 -59 c4 -25 -19 -47 -41 -38 -22 8 -30 34 -16 51 17 20 53 12 57 -13z" }),
3583
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M843 1347 c-9 -15 9 -63 41 -108 148 -202 565 -209 730 -12 37 44 60 103 47 116 -13 13 -810 17 -818 4z" }),
3584
+ /* @__PURE__ */ jsxRuntime.jsx("g", { transform: "translate(564,0)", children: /* @__PURE__ */ jsxRuntime.jsx(
3585
+ "path",
3586
+ {
3587
+ d: "M515 353 c-49 -136 -91 -253 -93 -261 -3 -10 11 -12 60 -10 l63 3 19 53 19 52 91 0 92 0 18 -55 17 -56 62 3 c76 4 79 -24 -30 275 l-88 243 -70 0 -70 0 -90 -247z m215 -55 c0 -4 -27 -8 -59 -8 l-60 0 31 92 31 93 29 -85 c15 -46 28 -88 28 -92z",
3588
+ stroke: "currentColor",
3589
+ strokeWidth: "30"
3590
+ }
3591
+ ) })
3592
+ ] })
3593
+ ] })
4638
3594
  ]
4639
3595
  }
4640
3596
  );
4641
- }
4642
- var PACKAGE_BADGE_VARIANTS = [
4643
- "default",
4644
- "accent",
4645
- "secondary",
4646
- "destructive",
4647
- "outline"
4648
- ];
4649
- function isPackageBadgeVariant(v) {
4650
- return PACKAGE_BADGE_VARIANTS.some((known) => known === v);
4651
- }
4652
- function PackageStatusBadge({ variant, ...rest }) {
4653
- return /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.Badge, { variant: isPackageBadgeVariant(variant) ? variant : "outline", ...rest });
4654
- }
4655
- var registry = {
4656
- variants: {},
4657
- fallback: "outline",
4658
- Badge: PackageStatusBadge
4659
- };
4660
- function configureStatusRegistry(map, opts) {
4661
- Object.assign(registry.variants, map);
4662
- if (opts?.fallback) registry.fallback = opts.fallback;
4663
- if (opts?.Badge) registry.Badge = opts.Badge;
4664
- }
4665
- function getStatusVariant(status) {
4666
- return registry.variants[status] ?? registry.fallback;
4667
- }
4668
- function StatusPill({ status, label, variant, className, testId }) {
4669
- const Badge2 = registry.Badge;
4670
- return /* @__PURE__ */ jsxRuntime.jsx(Badge2, { variant: variant ?? getStatusVariant(status), className, "data-testid": testId, children: label ?? status });
4671
- }
4672
- var RAG_LABELS = { red: "At risk", amber: "Attention", green: "On track" };
4673
- function configureRagLabels(labels) {
4674
- RAG_LABELS = { ...RAG_LABELS, ...labels };
4675
- }
4676
- function RagDot({
4677
- rag,
4678
- withLabel,
4679
- className
4680
- }) {
4681
- const color = rag === "red" ? "bg-destructive" : rag === "amber" ? "bg-warning" : "bg-success";
4682
- return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: chunkFIPS3VPH_cjs.cn("inline-flex items-center gap-1.5", className), "data-testid": `rag-${rag}`, children: [
4683
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkFIPS3VPH_cjs.cn("size-2 rounded-full", color) }),
4684
- withLabel && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: RAG_LABELS[rag] })
4685
- ] });
4686
- }
4687
- var ENTITY_MAPPINGS = {
4688
- PRODUCT: {
4689
- NAMES: {
4690
- SINGULAR: "ARBI Docs"
4691
- },
4692
- ICONS: {
4693
- DEFAULT: lucideReact.MessageSquareLock
4694
- }
4695
- },
4696
- SECTION: {
4697
- NAMES: {
4698
- SINGULAR: "Section"
4699
- },
4700
- ICONS: {
4701
- DEFAULT: lucideReact.ChevronsDown
4702
- }
4703
- },
4704
- WORKSPACE: {
4705
- NAMES: {
4706
- SINGULAR: "Workspace",
4707
- PLURAL: "Workspaces"
4708
- },
4709
- ICONS: {
4710
- DEFAULT: lucideReact.SquareM,
4711
- NEW: lucideReact.SquarePlus,
4712
- LIST: lucideReact.LayoutGrid,
4713
- SETTINGS: lucideReact.Columns3Cog
4714
- }
4715
- },
4716
- CONVERSATION: {
4717
- NAMES: {
4718
- SINGULAR: "Chat",
4719
- PLURAL: "Chats",
4720
- NEW: "New ARBI Chat"
4721
- },
4722
- ICONS: {
4723
- DEFAULT: lucideReact.MessagesSquare,
4724
- OFF: lucideReact.MessageSquareOff,
4725
- ACTIVE: lucideReact.MessageSquareText,
4726
- NEW: lucideReact.MessageSquarePlus,
4727
- LIST: lucideReact.MessageSquareMore
4728
- }
4729
- },
4730
- DOCUMENT: {
4731
- NAMES: {
4732
- SINGULAR: "File",
4733
- PLURAL: "Files"
4734
- },
4735
- ICONS: {
4736
- DEFAULT: lucideReact.FolderOpen,
4737
- OFF: lucideReact.CaptionsOff
4738
- }
4739
- },
4740
- VIEWER: {
4741
- NAMES: {
4742
- SINGULAR: "Viewer",
4743
- PLURAL: "Viewers"
4744
- },
4745
- ICONS: {
4746
- DEFAULT: lucideReact.Eye,
4747
- OFF: lucideReact.EyeOff
4748
- }
4749
- },
4750
- TAG: {
4751
- NAMES: {
4752
- SINGULAR: "Field",
4753
- PLURAL: "Fields"
4754
- },
4755
- ICONS: {
4756
- DEFAULT: lucideReact.Hash,
4757
- NEW: lucideReact.FolderPlus
4758
- }
4759
- },
4760
- ANNOTATION: {
4761
- NAMES: {
4762
- SINGULAR: "Annotation",
4763
- PLURAL: "Annotations"
4764
- },
4765
- ICONS: {
4766
- DEFAULT: lucideReact.StickyNote,
4767
- NEW: lucideReact.StickyNote
4768
- }
4769
- },
4770
- // Workspace knowledge the assistant retains and recalls — durable free text,
4771
- // optionally grounded in source passages. Distinct from ANNOTATION, which is
4772
- // attached TO a document field; a NOTE is workspace-scoped and stands alone.
4773
- // Stored server-side as `memories` (mem-*); "Note" is the user-facing name.
4774
- NOTE: {
4775
- NAMES: {
4776
- SINGULAR: "Note",
4777
- PLURAL: "Notes"
4778
- },
4779
- ICONS: {
4780
- DEFAULT: lucideReact.NotebookText,
4781
- NEW: lucideReact.NotebookPen
4782
- }
4783
- },
4784
- USER: {
4785
- NAMES: {
4786
- SINGULAR: "User",
4787
- PLURAL: "Users"
4788
- },
4789
- ICONS: {
4790
- DEFAULT: lucideReact.User,
4791
- NEW: lucideReact.UserPlus,
4792
- SETTINGS: lucideReact.Settings2
4793
- }
4794
- },
4795
- WORKSPACEUSER: {
4796
- NAMES: {
4797
- SINGULAR: "Member",
4798
- PLURAL: "Members"
4799
- },
4800
- ICONS: {
4801
- DEFAULT: lucideReact.User,
4802
- PLURAL: lucideReact.Users,
4803
- NEW: lucideReact.UserPlus,
4804
- SETTINGS: lucideReact.Settings2
4805
- }
4806
- },
4807
- CONTACT: {
4808
- NAMES: {
4809
- SINGULAR: "Contact",
4810
- PLURAL: "Contacts"
4811
- },
4812
- ICONS: {
4813
- // A starred person, not an address-book card: contacts here are the
4814
- // people you talk to, and the star reads as "your people".
4815
- DEFAULT: lucideReact.UserStar,
4816
- NEW: lucideReact.UserPlus
4817
- }
4818
- },
4819
- TASK: {
4820
- NAMES: {
4821
- SINGULAR: "Job",
4822
- PLURAL: "Jobs"
4823
- },
4824
- ICONS: {
4825
- DEFAULT: lucideReact.ClipboardList
4826
- }
4827
- },
4828
- PROJECT: {
4829
- NAMES: {
4830
- SINGULAR: "Project",
4831
- PLURAL: "Projects"
4832
- },
4833
- ICONS: {
4834
- DEFAULT: lucideReact.CreditCard
4835
- }
4836
- },
4837
- SKILL: {
4838
- NAMES: {
4839
- SINGULAR: "Skill",
4840
- PLURAL: "Skills"
4841
- },
4842
- ICONS: {
4843
- DEFAULT: lucideReact.Wrench
4844
- }
4845
- },
4846
- ACCOUNT: {
4847
- NAMES: {
4848
- SINGULAR: "Account"
4849
- },
4850
- ICONS: {
4851
- DEFAULT: lucideReact.CircleUserRound
4852
- }
4853
- },
4854
- NOTIFICATIONS: {
4855
- NAMES: {
4856
- SINGULAR: "Activity",
4857
- PLURAL: "Activities"
4858
- },
4859
- ICONS: {
4860
- DEFAULT: lucideReact.Bell
4861
- }
4862
- },
4863
- MESSAGE: {
4864
- NAMES: {
4865
- SINGULAR: "Message",
4866
- PLURAL: "Messages"
4867
- },
4868
- ICONS: {
4869
- DEFAULT: lucideReact.MessageSquare
4870
- }
4871
- },
4872
- NOTIFICATION: {
4873
- NAMES: {
4874
- SINGULAR: "Notification",
4875
- PLURAL: "Notifications"
4876
- },
4877
- ICONS: {
4878
- DEFAULT: lucideReact.Bell
4879
- }
4880
- },
4881
- APP: {
4882
- NAMES: {
4883
- SINGULAR: "Application",
4884
- PLURAL: "Applications"
4885
- },
4886
- ICONS: {
4887
- DEFAULT: lucideReact.LayoutGrid,
4888
- HOME: lucideReact.LayoutGrid,
4889
- LOGOUT: lucideReact.LogOut,
4890
- UPLOAD: lucideReact.Upload
4891
- }
4892
- },
4893
- HELP: {
4894
- NAMES: {
4895
- SINGULAR: "Help",
4896
- PLURAL: "Help"
4897
- },
4898
- ICONS: {
4899
- DEFAULT: lucideReact.MessageSquareLock,
4900
- DOCS: lucideReact.BookOpen,
4901
- FAQ: lucideReact.FileQuestion,
4902
- ABOUT: lucideReact.Info
4903
- }
4904
- },
4905
- USERSHIELD: {
4906
- NAMES: {
4907
- SINGULAR: "User Shield",
4908
- PLURAL: "User Shields"
4909
- },
4910
- ICONS: {
4911
- DEFAULT: lucideReact.MessageSquareLock
4912
- }
4913
- }
4914
- };
4915
- function configureEntityRegistry(overrides) {
4916
- for (const [type, def] of Object.entries(overrides)) {
4917
- const target = ENTITY_MAPPINGS[type];
4918
- if (!target) continue;
4919
- if (def?.NAMES) Object.assign(target.NAMES, def.NAMES);
4920
- if (def?.ICONS) Object.assign(target.ICONS, def.ICONS);
4921
- }
4922
- }
4923
- var getEntityIcon = (entityType, variant = "DEFAULT") => {
4924
- const icons = ENTITY_MAPPINGS[entityType]?.ICONS;
4925
- return icons?.[variant] || icons?.DEFAULT;
4926
- };
4927
- var getEntityLabel = (entityType, form = "SINGULAR") => {
4928
- const entityMapping = ENTITY_MAPPINGS[entityType];
4929
- if (!entityMapping) return "";
4930
- const names = entityMapping.NAMES;
4931
- const singularName = names.SINGULAR || "";
4932
- if (form === "NEW") return names.NEW !== void 0 ? names.NEW : "New " + singularName;
4933
- if (form === "SHORT")
4934
- return names.SHORT !== void 0 ? names.SHORT : singularName.substring(0, 3) + ".";
4935
- if (form === "PLURAL") return names.PLURAL !== void 0 ? names.PLURAL : singularName + "s";
4936
- return singularName;
4937
- };
4938
- var EntityIcon = ({ entityType, variant = "DEFAULT", ...props }) => {
4939
- const IconComponent = getEntityIcon(entityType, variant);
4940
- return IconComponent ? React2__default.default.createElement(IconComponent, props) : null;
4941
- };
4942
- var VISIBILITY_ICONS = {
4943
- PRIVATE: lucideReact.MessageSquareLock,
4944
- SHARED: lucideReact.Users
4945
- };
4946
- var VisibilityIcon = ({
4947
- isShared,
4948
- ...props
4949
- }) => {
4950
- const IconComponent = isShared ? VISIBILITY_ICONS.SHARED : VISIBILITY_ICONS.PRIVATE;
4951
- return React2__default.default.createElement(IconComponent, props);
4952
- };
4953
-
4954
- // src/entities/colors.ts
4955
- var OPACITY_LIGHT = 0.15;
4956
- var OPACITY_MEDIUM = 1;
4957
- var OPACITY_BORDER = 0.3;
4958
- var PLACEHOLDER_COLOR = "#9ca3af";
4959
- var NEUTRAL_GRAY2 = "#64748b";
4960
- var BASE_COLORS2 = {
4961
- "0": "#10b981",
4962
- "1": "#3b82f6",
4963
- "2": "#8b5cf6",
4964
- "3": "#f43f5e",
4965
- "4": "#f59e0b",
4966
- "5": "#84cc16",
4967
- "6": "#a855f7",
4968
- "7": "#06b6d4",
4969
- "8": "#f97316",
4970
- "9": "#14b8a6",
4971
- a: "#ef4444",
4972
- b: "#6366f1",
4973
- c: "#ec4899",
4974
- d: "#22c55e",
4975
- e: "#eab308",
4976
- f: "#0ea5e9"
4977
- };
4978
- function hexToRgba(hex, opacity) {
4979
- const r = parseInt(hex.slice(1, 3), 16);
4980
- const g = parseInt(hex.slice(3, 5), 16);
4981
- const b = parseInt(hex.slice(5, 7), 16);
4982
- return `rgba(${r}, ${g}, ${b}, ${opacity})`;
4983
- }
4984
- function getEntityColor2(entityId, variant = "medium") {
4985
- const baseColor = BASE_COLORS2[entityId[4]] || BASE_COLORS2["0"];
4986
- switch (variant) {
4987
- case "light":
4988
- return hexToRgba(baseColor, OPACITY_LIGHT);
4989
- case "medium":
4990
- return hexToRgba(baseColor, OPACITY_MEDIUM);
4991
- case "text":
4992
- return baseColor;
4993
- }
4994
- }
4995
- function getEntityColorStyles(entityId) {
4996
- const baseColor = BASE_COLORS2[entityId[4]] || BASE_COLORS2["0"];
4997
- return {
4998
- backgroundColor: getEntityColor2(entityId, "light"),
4999
- color: baseColor,
5000
- borderColor: hexToRgba(baseColor, OPACITY_BORDER)
5001
- };
5002
- }
5003
- var getWorkspaceColor = (workspaceId, useWorkspaceColors) => {
5004
- const shouldUseWorkspaceColors = useWorkspaceColors !== void 0 ? useWorkspaceColors : true;
5005
- if (!shouldUseWorkspaceColors) return "hsl(var(--primary))";
5006
- const isValidId = workspaceId && workspaceId.startsWith("wrk-") && workspaceId.length >= 5;
5007
- if (!isValidId) return "hsl(var(--primary))";
5008
- return getEntityColor2(workspaceId, "medium");
5009
3597
  };
5010
3598
  function getNotificationTypeMeta(type) {
5011
- const WorkspaceIcon = getEntityIcon("WORKSPACE");
3599
+ const WorkspaceIcon = chunkIZPXHVPJ_cjs.getEntityIcon("WORKSPACE");
5012
3600
  switch (type) {
5013
3601
  case "user_message":
5014
3602
  return { Icon: lucideReact.MessageCircleMore, iconClassName: "text-primary", label: "Message" };
@@ -5123,7 +3711,7 @@ function describeActivity(content) {
5123
3711
  }
5124
3712
  default:
5125
3713
  return {
5126
- Icon: parsed.workspace_ext_id ? getEntityIcon("WORKSPACE") : lucideReact.Activity,
3714
+ Icon: parsed.workspace_ext_id ? chunkIZPXHVPJ_cjs.getEntityIcon("WORKSPACE") : lucideReact.Activity,
5127
3715
  iconClassName: "text-muted-foreground",
5128
3716
  title: humaniseEvent(parsed.event)
5129
3717
  };
@@ -5155,20 +3743,20 @@ function ActivityFeed({
5155
3743
  }) {
5156
3744
  const { data, isLoading, isError } = useActivity({ limit, enabled });
5157
3745
  if (isLoading) {
5158
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkFIPS3VPH_cjs.cn("space-y-2", className), "data-testid": testId, "aria-busy": "true", children: Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 py-1.5", children: [
3746
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkIZPXHVPJ_cjs.cn("space-y-2", className), "data-testid": testId, "aria-busy": "true", children: Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 py-1.5", children: [
5159
3747
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-4 shrink-0 animate-pulse rounded-full bg-muted" }),
5160
3748
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-3 flex-1 animate-pulse rounded bg-muted" })
5161
3749
  ] }, i)) });
5162
3750
  }
5163
3751
  if (isError) {
5164
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkFIPS3VPH_cjs.cn("text-sm text-muted-foreground", className), "data-testid": testId, children: "Couldn\u2019t load activity." });
3752
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkIZPXHVPJ_cjs.cn("text-sm text-muted-foreground", className), "data-testid": testId, children: "Couldn\u2019t load activity." });
5165
3753
  }
5166
3754
  const items = data ?? [];
5167
3755
  if (items.length === 0) {
5168
3756
  return /* @__PURE__ */ jsxRuntime.jsxs(
5169
3757
  "div",
5170
3758
  {
5171
- className: chunkFIPS3VPH_cjs.cn("flex items-center gap-2 text-sm text-muted-foreground", className),
3759
+ className: chunkIZPXHVPJ_cjs.cn("flex items-center gap-2 text-sm text-muted-foreground", className),
5172
3760
  "data-testid": testId,
5173
3761
  children: [
5174
3762
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Activity, { className: "h-4 w-4 shrink-0" }),
@@ -5177,7 +3765,7 @@ function ActivityFeed({
5177
3765
  }
5178
3766
  );
5179
3767
  }
5180
- return /* @__PURE__ */ jsxRuntime.jsx("ul", { className: chunkFIPS3VPH_cjs.cn("divide-y divide-border", className), "data-testid": testId, children: items.map((item) => {
3768
+ return /* @__PURE__ */ jsxRuntime.jsx("ul", { className: chunkIZPXHVPJ_cjs.cn("divide-y divide-border", className), "data-testid": testId, children: items.map((item) => {
5181
3769
  const desc = describeActivity(item.content);
5182
3770
  return /* @__PURE__ */ jsxRuntime.jsxs(
5183
3771
  "li",
@@ -5185,7 +3773,7 @@ function ActivityFeed({
5185
3773
  className: "flex items-center gap-3 py-2",
5186
3774
  "data-testid": "activity-feed-item",
5187
3775
  children: [
5188
- /* @__PURE__ */ jsxRuntime.jsx(desc.Icon, { className: chunkFIPS3VPH_cjs.cn("h-4 w-4 shrink-0", desc.iconClassName) }),
3776
+ /* @__PURE__ */ jsxRuntime.jsx(desc.Icon, { className: chunkIZPXHVPJ_cjs.cn("h-4 w-4 shrink-0", desc.iconClassName) }),
5189
3777
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate text-sm text-foreground", children: desc.title }),
5190
3778
  /* @__PURE__ */ jsxRuntime.jsx("time", { className: "shrink-0 text-xs tabular-nums text-muted-foreground", children: formatRelative(item.created_at) })
5191
3779
  ]
@@ -5194,65 +3782,6 @@ function ActivityFeed({
5194
3782
  );
5195
3783
  }) });
5196
3784
  }
5197
- var seq = 0;
5198
- var uid = () => `n${Date.now().toString(36)}${(seq++).toString(36)}`;
5199
- var useNotify = zustand.create((set) => ({
5200
- notifications: [],
5201
- markRead: (id) => set((s) => ({
5202
- notifications: s.notifications.map((n) => n.id === id ? { ...n, read: true } : n)
5203
- })),
5204
- markAllRead: () => set((s) => ({ notifications: s.notifications.map((n) => ({ ...n, read: true })) })),
5205
- removeNotification: (id) => set((s) => ({ notifications: s.notifications.filter((n) => n.id !== id) })),
5206
- clearNotifications: () => set({ notifications: [] }),
5207
- seed: (items) => set({ notifications: items }),
5208
- record: (note) => set((s) => ({ notifications: [note, ...s.notifications].slice(0, 50) })),
5209
- syncSource: (source, items) => set((s) => ({
5210
- notifications: [
5211
- ...items.map((n) => ({ ...n, source })),
5212
- ...s.notifications.filter((n) => n.source !== source)
5213
- ].sort((a, b) => b.ts - a.ts).slice(0, 100)
5214
- }))
5215
- }));
5216
- function make(variant) {
5217
- return (title, opts = {}) => {
5218
- sonner.toast[variant](title, {
5219
- description: opts.description,
5220
- duration: opts.duration,
5221
- action: opts.action,
5222
- icon: opts.icon
5223
- });
5224
- const id = uid();
5225
- if (opts.record !== false) {
5226
- useNotify.getState().record({
5227
- id,
5228
- title,
5229
- description: opts.description,
5230
- variant,
5231
- ts: Date.now(),
5232
- read: false,
5233
- href: opts.href,
5234
- ambient: opts.ambient
5235
- });
5236
- }
5237
- return id;
5238
- };
5239
- }
5240
- var notify = {
5241
- success: make("success"),
5242
- error: make("error"),
5243
- info: make("info"),
5244
- warning: make("warning")
5245
- };
5246
- function seedNotifications(items) {
5247
- useNotify.getState().seed(items);
5248
- }
5249
- var selectUnread = (s) => s.notifications.filter((n) => !n.read && !n.ambient).length;
5250
- var DEFAULT_NOTIFY_TONE = {
5251
- success: "text-green-600",
5252
- error: "text-destructive",
5253
- warning: "text-amber-500",
5254
- info: "text-blue-500"
5255
- };
5256
3785
 
5257
3786
  // src/directmessages/utils.ts
5258
3787
  function userInitials(user) {
@@ -5311,14 +3840,14 @@ function NotificationBell({
5311
3840
  viewAllLabel = "View all",
5312
3841
  testId = "notifications"
5313
3842
  }) {
5314
- const notifications = useNotify((s) => s.notifications);
5315
- const unread = useNotify(selectUnread);
5316
- const markAllRead = useNotify((s) => s.markAllRead);
5317
- const markRead = useNotify((s) => s.markRead);
5318
- const tone = (v) => toneClassNames?.[v] ?? DEFAULT_NOTIFY_TONE[v];
3843
+ const notifications = chunk3MLQUKT4_cjs.useNotify((s) => s.notifications);
3844
+ const unread = chunk3MLQUKT4_cjs.useNotify(chunk3MLQUKT4_cjs.selectUnread);
3845
+ const markAllRead = chunk3MLQUKT4_cjs.useNotify((s) => s.markAllRead);
3846
+ const markRead = chunk3MLQUKT4_cjs.useNotify((s) => s.markRead);
3847
+ const tone = (v) => toneClassNames?.[v] ?? chunk3MLQUKT4_cjs.DEFAULT_NOTIFY_TONE[v];
5319
3848
  const visible = notifications.filter((n) => !n.ambient);
5320
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.DropdownMenu, { children: [
5321
- /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
3849
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkIZPXHVPJ_cjs.DropdownMenu, { children: [
3850
+ /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
5322
3851
  "button",
5323
3852
  {
5324
3853
  className: "relative flex size-9 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
@@ -5338,7 +3867,7 @@ function NotificationBell({
5338
3867
  }
5339
3868
  ) }),
5340
3869
  /* @__PURE__ */ jsxRuntime.jsxs(
5341
- chunkFIPS3VPH_cjs.DropdownMenuContent,
3870
+ chunkIZPXHVPJ_cjs.DropdownMenuContent,
5342
3871
  {
5343
3872
  align: "end",
5344
3873
  sideOffset: 8,
@@ -5371,7 +3900,7 @@ function NotificationBell({
5371
3900
  "aria-pressed": muted,
5372
3901
  title: muted ? "Unmute notifications" : "Mute notifications",
5373
3902
  "aria-label": muted ? "Unmute notifications" : "Mute notifications",
5374
- className: chunkFIPS3VPH_cjs.cn(
3903
+ className: chunkIZPXHVPJ_cjs.cn(
5375
3904
  "flex size-6 items-center justify-center rounded-md transition-colors hover:bg-accent",
5376
3905
  muted ? "text-foreground" : "text-muted-foreground hover:text-foreground"
5377
3906
  ),
@@ -5380,7 +3909,7 @@ function NotificationBell({
5380
3909
  }
5381
3910
  ),
5382
3911
  /* @__PURE__ */ jsxRuntime.jsx(
5383
- chunkFIPS3VPH_cjs.DropdownMenuItem,
3912
+ chunkIZPXHVPJ_cjs.DropdownMenuItem,
5384
3913
  {
5385
3914
  className: "flex size-6 items-center justify-center rounded-md p-0 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus:bg-accent",
5386
3915
  "aria-label": "Close notifications",
@@ -5398,7 +3927,7 @@ function NotificationBell({
5398
3927
  children: "Toasts are muted \u2014 everything still lands here."
5399
3928
  }
5400
3929
  ),
5401
- visible.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-3.5 py-10 text-center text-sm text-muted-foreground", children: emptyText }) : /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.ScrollArea, { className: "max-h-[380px]", children: /* @__PURE__ */ jsxRuntime.jsx("ul", { "data-testid": `${testId}-list`, children: visible.map((n) => {
3930
+ visible.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-3.5 py-10 text-center text-sm text-muted-foreground", children: emptyText }) : /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.ScrollArea, { className: "max-h-[380px]", children: /* @__PURE__ */ jsxRuntime.jsx("ul", { "data-testid": `${testId}-list`, children: visible.map((n) => {
5402
3931
  const Glyph = GLYPH[n.variant];
5403
3932
  return /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(
5404
3933
  "button",
@@ -5409,13 +3938,13 @@ function NotificationBell({
5409
3938
  if (n.onSelect) n.onSelect();
5410
3939
  else if (n.href) onNavigate?.(n.href);
5411
3940
  },
5412
- className: chunkFIPS3VPH_cjs.cn(
3941
+ className: chunkIZPXHVPJ_cjs.cn(
5413
3942
  "flex w-full items-start gap-3 border-b border-border/60 px-3.5 py-3 text-left transition-colors hover:bg-accent",
5414
3943
  !n.read && "bg-accent/40"
5415
3944
  ),
5416
3945
  "data-testid": `${testId}-item`,
5417
3946
  children: [
5418
- /* @__PURE__ */ jsxRuntime.jsx(Glyph, { className: chunkFIPS3VPH_cjs.cn("mt-0.5 size-4 shrink-0", tone(n.variant)) }),
3947
+ /* @__PURE__ */ jsxRuntime.jsx(Glyph, { className: chunkIZPXHVPJ_cjs.cn("mt-0.5 size-4 shrink-0", tone(n.variant)) }),
5419
3948
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
5420
3949
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium leading-snug text-foreground", children: n.title }),
5421
3950
  n.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 line-clamp-2 text-xs leading-relaxed text-muted-foreground", children: n.description }),
@@ -5429,7 +3958,7 @@ function NotificationBell({
5429
3958
  onViewAll && // A real menu item, not a bare button: selecting it must CLOSE the
5430
3959
  // dropdown on its way to the full surface.
5431
3960
  /* @__PURE__ */ jsxRuntime.jsx(
5432
- chunkFIPS3VPH_cjs.DropdownMenuItem,
3961
+ chunkIZPXHVPJ_cjs.DropdownMenuItem,
5433
3962
  {
5434
3963
  onClick: onViewAll,
5435
3964
  className: "justify-center rounded-none border-t border-border px-3.5 py-2.5 text-xs font-medium text-primary focus:text-primary",
@@ -5442,24 +3971,6 @@ function NotificationBell({
5442
3971
  )
5443
3972
  ] });
5444
3973
  }
5445
- var DEFAULT_TOAST_OPTIONS = {
5446
- classNames: {
5447
- toast: "group toast group-[.toaster]:bg-card group-[.toaster]:text-foreground group-[.toaster]:border group-[.toaster]:border-border group-[.toaster]:shadow-lg group-[.toaster]:rounded-lg",
5448
- description: "group-[.toast]:text-muted-foreground",
5449
- actionButton: "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",
5450
- cancelButton: "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"
5451
- }
5452
- };
5453
- function Toaster({ toastOptions, ...props }) {
5454
- return /* @__PURE__ */ jsxRuntime.jsx(
5455
- sonner.Toaster,
5456
- {
5457
- className: "toaster group",
5458
- toastOptions: toastOptions ?? DEFAULT_TOAST_OPTIONS,
5459
- ...props
5460
- }
5461
- );
5462
- }
5463
3974
  var DM_QUERY_KEY = ["arbi", "directMessages"];
5464
3975
  var CONTACTS_QUERY_KEY = ["arbi", "contacts"];
5465
3976
  function mergeContacts(threads, contacts) {
@@ -5540,17 +4051,17 @@ function useDirectMessages(options) {
5540
4051
  } catch {
5541
4052
  myExtId = null;
5542
4053
  }
5543
- const [pendingSent, setPendingSent] = React2.useState([]);
5544
- const serverIds = React2.useMemo(
4054
+ const [pendingSent, setPendingSent] = React.useState([]);
4055
+ const serverIds = React.useMemo(
5545
4056
  () => new Set((query.data ?? []).map((n) => n.external_id)),
5546
4057
  [query.data]
5547
4058
  );
5548
- React2.useEffect(() => {
4059
+ React.useEffect(() => {
5549
4060
  setPendingSent(
5550
4061
  (pending) => pending.some((n) => serverIds.has(n.external_id)) ? pending.filter((n) => !serverIds.has(n.external_id)) : pending
5551
4062
  );
5552
4063
  }, [serverIds]);
5553
- const conversations = React2.useMemo(() => {
4064
+ const conversations = React.useMemo(() => {
5554
4065
  const all = [...pendingSent.filter((n) => !serverIds.has(n.external_id)), ...query.data ?? []];
5555
4066
  return mergeContacts(groupConversations(all, myExtId), contactsQuery.data ?? []);
5556
4067
  }, [query.data, serverIds, pendingSent, contactsQuery.data, myExtId]);
@@ -5589,7 +4100,7 @@ function DmAvatar({ user, className, size = "lg" }) {
5589
4100
  const presence = useArbiWsStore((s) => s.presence[user.external_id]);
5590
4101
  const displayStatus = presence === void 0 ? void 0 : presence === "online" ? "connected" : "disconnected";
5591
4102
  return /* @__PURE__ */ jsxRuntime.jsx(
5592
- UserEntity,
4103
+ chunkIZPXHVPJ_cjs.UserEntity,
5593
4104
  {
5594
4105
  variant: "icon",
5595
4106
  size,
@@ -5599,7 +4110,7 @@ function DmAvatar({ user, className, size = "lg" }) {
5599
4110
  initials: userInitials(user),
5600
4111
  displayName: userDisplayName(user),
5601
4112
  picture: user.picture,
5602
- avatarStyle: getEntityColorStyles(user.external_id),
4113
+ avatarStyle: chunkIZPXHVPJ_cjs.getEntityColorStyles(user.external_id),
5603
4114
  isAgent: isAgentUser(user),
5604
4115
  displayStatus
5605
4116
  }
@@ -5617,7 +4128,7 @@ function ConversationList({
5617
4128
  return /* @__PURE__ */ jsxRuntime.jsxs(
5618
4129
  "aside",
5619
4130
  {
5620
- className: chunkFIPS3VPH_cjs.cn(
4131
+ className: chunkIZPXHVPJ_cjs.cn(
5621
4132
  "flex min-h-0 flex-col border-b border-border md:w-80 md:shrink-0 md:border-b-0 md:border-r",
5622
4133
  className
5623
4134
  ),
@@ -5645,17 +4156,17 @@ function ConversationList({
5645
4156
  /* @__PURE__ */ jsxRuntime.jsx(
5646
4157
  "span",
5647
4158
  {
5648
- className: chunkFIPS3VPH_cjs.cn(
4159
+ className: chunkIZPXHVPJ_cjs.cn(
5649
4160
  "truncate text-sm text-foreground",
5650
4161
  unread ? "font-bold" : "font-semibold"
5651
4162
  ),
5652
4163
  children: userDisplayName(peer)
5653
4164
  }
5654
4165
  ),
5655
- c.badge ?? (isAgentUser(peer) ? /* @__PURE__ */ jsxRuntime.jsx(AgentBadge, {}) : null)
4166
+ c.badge ?? (isAgentUser(peer) ? /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.AgentBadge, {}) : null)
5656
4167
  ] }),
5657
4168
  c.statusLabel ? /* @__PURE__ */ jsxRuntime.jsx(
5658
- chunkFIPS3VPH_cjs.Badge,
4169
+ chunkIZPXHVPJ_cjs.Badge,
5659
4170
  {
5660
4171
  variant: "outline",
5661
4172
  className: "shrink-0 rounded-full px-2 py-0 text-[10px] font-medium text-muted-foreground",
@@ -5666,10 +4177,10 @@ function ConversationList({
5666
4177
  // shouted louder than the message it was counting.
5667
4178
  // Enough to catch the eye scanning the list, no more.
5668
4179
  /* @__PURE__ */ jsxRuntime.jsx(
5669
- chunkFIPS3VPH_cjs.Badge,
4180
+ chunkIZPXHVPJ_cjs.Badge,
5670
4181
  {
5671
4182
  variant: "accent",
5672
- className: chunkFIPS3VPH_cjs.cn(
4183
+ className: chunkIZPXHVPJ_cjs.cn(
5673
4184
  "min-w-[1.125rem] justify-center rounded-full px-1 py-0 text-[10px] font-medium leading-[1.125rem] shadow-none",
5674
4185
  classNames?.unreadBadge
5675
4186
  ),
@@ -5695,7 +4206,7 @@ function ConversationList({
5695
4206
  /* @__PURE__ */ jsxRuntime.jsx(
5696
4207
  "p",
5697
4208
  {
5698
- className: chunkFIPS3VPH_cjs.cn(
4209
+ className: chunkIZPXHVPJ_cjs.cn(
5699
4210
  "min-w-0 flex-1 truncate text-xs",
5700
4211
  unread ? "font-medium text-foreground" : "text-muted-foreground"
5701
4212
  ),
@@ -5706,7 +4217,7 @@ function ConversationList({
5706
4217
  ] })
5707
4218
  ] })
5708
4219
  ] });
5709
- const rowClass = chunkFIPS3VPH_cjs.cn(
4220
+ const rowClass = chunkIZPXHVPJ_cjs.cn(
5710
4221
  // Each row is its own opaque surface. Left transparent it takes
5711
4222
  // the panel's colour, and the chips stop reading as cards at all
5712
4223
  // — which is the whole point of them.
@@ -5809,12 +4320,12 @@ function MessageThread({
5809
4320
  onDeleteMessage,
5810
4321
  deletedIds
5811
4322
  }) {
5812
- const bottomRef = React2.useRef(null);
5813
- const items = React2.useMemo(
4323
+ const bottomRef = React.useRef(null);
4324
+ const items = React.useMemo(
5814
4325
  () => annotateThread(conversation?.messages ?? [], THREAD_ACCESSORS),
5815
4326
  [conversation?.messages]
5816
4327
  );
5817
- React2.useEffect(() => {
4328
+ React.useEffect(() => {
5818
4329
  bottomRef.current?.scrollIntoView({ block: "end" });
5819
4330
  }, [conversation?.peer.external_id, conversation?.messages.length]);
5820
4331
  if (!conversation) {
@@ -5835,8 +4346,8 @@ function MessageThread({
5835
4346
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-xs text-muted-foreground", children: peer.email })
5836
4347
  ] })
5837
4348
  ] }),
5838
- /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.ScrollArea, { className: "min-h-0 flex-1 bg-background", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col px-4 py-4", "data-testid": "arbi-dm-thread", children: [
5839
- items.map(({ message: m, isLastOfRun, isFirstOfDay }) => /* @__PURE__ */ jsxRuntime.jsxs(React2.Fragment, { children: [
4349
+ /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.ScrollArea, { className: "min-h-0 flex-1 bg-background", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col px-4 py-4", "data-testid": "arbi-dm-thread", children: [
4350
+ items.map(({ message: m, isLastOfRun, isFirstOfDay }) => /* @__PURE__ */ jsxRuntime.jsxs(React.Fragment, { children: [
5840
4351
  isFirstOfDay && formatDay && /* @__PURE__ */ jsxRuntime.jsx(DateSeparator, { children: formatDay(m.createdAt) }),
5841
4352
  /* @__PURE__ */ jsxRuntime.jsx(
5842
4353
  MessageBubble2,
@@ -5862,8 +4373,8 @@ function DmComposer({
5862
4373
  children,
5863
4374
  classNames
5864
4375
  }) {
5865
- const [draft, setDraft] = React2.useState("");
5866
- const inputRef = React2.useRef(null);
4376
+ const [draft, setDraft] = React.useState("");
4377
+ const inputRef = React.useRef(null);
5867
4378
  const submit = async () => {
5868
4379
  const text = draft.trim();
5869
4380
  if (!text || disabled || busy) return;
@@ -5885,7 +4396,7 @@ function DmComposer({
5885
4396
  children,
5886
4397
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-end gap-2", children: [
5887
4398
  /* @__PURE__ */ jsxRuntime.jsx(
5888
- chunkFIPS3VPH_cjs.Textarea,
4399
+ chunkIZPXHVPJ_cjs.Textarea,
5889
4400
  {
5890
4401
  ref: inputRef,
5891
4402
  value: draft,
@@ -5899,12 +4410,12 @@ function DmComposer({
5899
4410
  }
5900
4411
  ),
5901
4412
  /* @__PURE__ */ jsxRuntime.jsxs(
5902
- chunkFIPS3VPH_cjs.Button,
4413
+ chunkIZPXHVPJ_cjs.Button,
5903
4414
  {
5904
4415
  type: "button",
5905
4416
  onClick: () => void submit(),
5906
4417
  disabled: disabled || busy || !draft.trim(),
5907
- className: chunkFIPS3VPH_cjs.cn(classNames?.sendButton),
4418
+ className: chunkIZPXHVPJ_cjs.cn(classNames?.sendButton),
5908
4419
  "data-testid": "arbi-dm-send",
5909
4420
  "aria-label": "Send message",
5910
4421
  children: [
@@ -5933,13 +4444,13 @@ function DirectMessages({
5933
4444
  sendError,
5934
4445
  markRead
5935
4446
  } = useDirectMessages();
5936
- const [selectedPeerId, setSelectedPeerId] = React2.useState(null);
4447
+ const [selectedPeerId, setSelectedPeerId] = React.useState(null);
5937
4448
  const loadError = isError ? error instanceof Error ? error.message : "Couldn\u2019t load messages." : null;
5938
- const selected = React2.useMemo(
4449
+ const selected = React.useMemo(
5939
4450
  () => conversations.find((c) => c.peer.external_id === selectedPeerId) ?? null,
5940
4451
  [conversations, selectedPeerId]
5941
4452
  );
5942
- React2.useEffect(() => {
4453
+ React.useEffect(() => {
5943
4454
  if (!selected || selected.unreadCount === 0) return;
5944
4455
  const unreadIds = selected.messages.filter((m) => !m.isMine && !m.read).map((m) => m.externalId);
5945
4456
  if (unreadIds.length) void markRead(unreadIds);
@@ -5957,7 +4468,7 @@ function DirectMessages({
5957
4468
  {
5958
4469
  "data-testid": "arbi-dm",
5959
4470
  style: { height: "calc(100vh - 16rem)", minHeight: "28rem" },
5960
- className: chunkFIPS3VPH_cjs.cn(
4471
+ className: chunkIZPXHVPJ_cjs.cn(
5961
4472
  "relative flex flex-col overflow-hidden rounded-xl border border-border bg-card md:flex-row",
5962
4473
  className
5963
4474
  ),
@@ -6013,19 +4524,19 @@ function ImageCropper({
6013
4524
  className,
6014
4525
  onCropComplete
6015
4526
  }) {
6016
- const [crop, setCrop] = React2.useState({ x: 0, y: 0 });
6017
- const [zoom, setZoom] = React2.useState(1);
6018
- const [activeAspect, setActiveAspect] = React2.useState(aspectOptions?.[0]?.value ?? aspect);
6019
- React2.useEffect(() => {
4527
+ const [crop, setCrop] = React.useState({ x: 0, y: 0 });
4528
+ const [zoom, setZoom] = React.useState(1);
4529
+ const [activeAspect, setActiveAspect] = React.useState(aspectOptions?.[0]?.value ?? aspect);
4530
+ React.useEffect(() => {
6020
4531
  if (!aspectOptions) setActiveAspect(aspect);
6021
4532
  }, [aspect, aspectOptions]);
6022
- const handleComplete = React2.useCallback(
4533
+ const handleComplete = React.useCallback(
6023
4534
  (_, areaPixels) => {
6024
4535
  onCropComplete?.(areaPixels, activeAspect);
6025
4536
  },
6026
4537
  [onCropComplete, activeAspect]
6027
4538
  );
6028
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkFIPS3VPH_cjs.cn("flex flex-col gap-3", className), children: [
4539
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkIZPXHVPJ_cjs.cn("flex flex-col gap-3", className), children: [
6029
4540
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-72 w-full overflow-hidden rounded-md bg-foreground/95", children: /* @__PURE__ */ jsxRuntime.jsx(
6030
4541
  Cropper__default.default,
6031
4542
  {
@@ -6051,7 +4562,7 @@ function ImageCropper({
6051
4562
  type: "button",
6052
4563
  onClick: () => setActiveAspect(opt.value),
6053
4564
  "data-testid": `image-cropper-aspect-${opt.label}`,
6054
- className: chunkFIPS3VPH_cjs.cn(
4565
+ className: chunkIZPXHVPJ_cjs.cn(
6055
4566
  "rounded-md px-2 py-1 text-xs font-medium transition-colors",
6056
4567
  on ? "bg-primary text-primary-foreground" : "text-muted-foreground hover:bg-accent hover:text-foreground"
6057
4568
  ),
@@ -6064,7 +4575,7 @@ function ImageCropper({
6064
4575
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
6065
4576
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-[11px] font-semibold uppercase tracking-wider text-muted-foreground", children: "Zoom" }),
6066
4577
  /* @__PURE__ */ jsxRuntime.jsx(
6067
- chunkFIPS3VPH_cjs.Slider,
4578
+ chunkIZPXHVPJ_cjs.Slider,
6068
4579
  {
6069
4580
  value: [zoom],
6070
4581
  onValueChange: ([v]) => setZoom(v ?? 1),
@@ -6129,8 +4640,8 @@ function ImageCropModal({
6129
4640
  onComplete,
6130
4641
  onCancel
6131
4642
  }) {
6132
- const [area, setArea] = React2.useState(null);
6133
- const [busy, setBusy] = React2.useState(false);
4643
+ const [area, setArea] = React.useState(null);
4644
+ const [busy, setBusy] = React.useState(false);
6134
4645
  const handleSave = async () => {
6135
4646
  if (!image || !area) return;
6136
4647
  setBusy(true);
@@ -6141,8 +4652,8 @@ function ImageCropModal({
6141
4652
  setBusy(false);
6142
4653
  }
6143
4654
  };
6144
- return /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.Dialog, { open, onOpenChange: (next) => !next ? onCancel() : void 0, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.DialogContent, { className: "sm:max-w-md", "data-testid": "image-crop-modal", children: [
6145
- /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.DialogTitle, { children: title }) }),
4655
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.Dialog, { open, onOpenChange: (next) => !next ? onCancel() : void 0, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkIZPXHVPJ_cjs.DialogContent, { className: "sm:max-w-md", "data-testid": "image-crop-modal", children: [
4656
+ /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.DialogTitle, { children: title }) }),
6146
4657
  image ? /* @__PURE__ */ jsxRuntime.jsx(
6147
4658
  ImageCropper,
6148
4659
  {
@@ -6153,9 +4664,9 @@ function ImageCropModal({
6153
4664
  onCropComplete: setArea
6154
4665
  }
6155
4666
  ) : null,
6156
- /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.DialogFooter, { className: "gap-2 sm:gap-2", children: [
6157
- /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.Button, { variant: "ghost", onClick: onCancel, disabled: busy, children: "Cancel" }),
6158
- /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.Button, { onClick: handleSave, disabled: !area || busy, "data-testid": "image-crop-save", children: [
4667
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkIZPXHVPJ_cjs.DialogFooter, { className: "gap-2 sm:gap-2", children: [
4668
+ /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.Button, { variant: "ghost", onClick: onCancel, disabled: busy, children: "Cancel" }),
4669
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkIZPXHVPJ_cjs.Button, { onClick: handleSave, disabled: !area || busy, "data-testid": "image-crop-save", children: [
6159
4670
  busy ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "mr-1 size-4 animate-spin" }) : null,
6160
4671
  saveLabel
6161
4672
  ] })
@@ -6182,9 +4693,9 @@ function CommandPalette({
6182
4693
  const task = useAiTask();
6183
4694
  const searchable = !!searchDocIds && searchDocIds.length > 0;
6184
4695
  const { results, search, status: searchStatus } = useSemanticSearch(searchDocIds ?? []);
6185
- const [query, setQuery] = React2.useState("");
6186
- const inputRef = React2.useRef(null);
6187
- React2.useEffect(() => {
4696
+ const [query, setQuery] = React.useState("");
4697
+ const inputRef = React.useRef(null);
4698
+ React.useEffect(() => {
6188
4699
  if (open) {
6189
4700
  setQuery("");
6190
4701
  task.reset();
@@ -6193,21 +4704,21 @@ function CommandPalette({
6193
4704
  }
6194
4705
  }, [open]);
6195
4706
  const showingAnswer = task.status !== "idle";
6196
- React2.useEffect(() => {
4707
+ React.useEffect(() => {
6197
4708
  if (!searchable || showingAnswer) return;
6198
4709
  const q = query.trim();
6199
4710
  if (q.length < 2) return;
6200
4711
  const t = setTimeout(() => void search(q, "hybrid"), 300);
6201
4712
  return () => clearTimeout(t);
6202
4713
  }, [query, searchable, showingAnswer, search]);
6203
- const navMatches = React2.useMemo(() => {
4714
+ const navMatches = React.useMemo(() => {
6204
4715
  const q = query.trim().toLowerCase();
6205
4716
  if (!q) return navItems.slice(0, MAX_NAV);
6206
4717
  return navItems.filter(
6207
4718
  (i) => i.label.toLowerCase().includes(q) || (i.keywords ? i.keywords.toLowerCase().includes(q) : false)
6208
4719
  ).slice(0, MAX_NAV);
6209
4720
  }, [query, navItems]);
6210
- const docHits = React2.useMemo(() => results.slice(0, MAX_DOCS), [results]);
4721
+ const docHits = React.useMemo(() => results.slice(0, MAX_DOCS), [results]);
6211
4722
  const go = (to) => {
6212
4723
  onOpenChange(false);
6213
4724
  onNavigate(to);
@@ -6221,18 +4732,18 @@ function CommandPalette({
6221
4732
  if (!q || task.isRunning) return;
6222
4733
  void task.run(buildAskPrompt(q), askDocIds, { model });
6223
4734
  };
6224
- return /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(
6225
- chunkFIPS3VPH_cjs.DialogContent,
4735
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(
4736
+ chunkIZPXHVPJ_cjs.DialogContent,
6226
4737
  {
6227
- className: chunkFIPS3VPH_cjs.cn(
4738
+ className: chunkIZPXHVPJ_cjs.cn(
6228
4739
  "top-[12%] max-w-2xl translate-y-0 gap-0 overflow-hidden p-0",
6229
4740
  classNames?.dialog
6230
4741
  ),
6231
4742
  "data-testid": testId,
6232
4743
  children: [
6233
- /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.DialogTitle, { className: "sr-only", children: "Command palette" }),
4744
+ /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.DialogTitle, { className: "sr-only", children: "Command palette" }),
6234
4745
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 border-b border-border px-4", children: [
6235
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: chunkFIPS3VPH_cjs.cn("size-4 shrink-0 text-ai-accent", classNames?.leadingIcon) }),
4746
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: chunkIZPXHVPJ_cjs.cn("size-4 shrink-0 text-ai-accent", classNames?.leadingIcon) }),
6236
4747
  /* @__PURE__ */ jsxRuntime.jsx(
6237
4748
  "input",
6238
4749
  {
@@ -6246,7 +4757,7 @@ function CommandPalette({
6246
4757
  }
6247
4758
  },
6248
4759
  placeholder,
6249
- className: chunkFIPS3VPH_cjs.cn(
4760
+ className: chunkIZPXHVPJ_cjs.cn(
6250
4761
  "h-14 flex-1 bg-transparent text-base outline-none placeholder:text-muted-foreground",
6251
4762
  classNames?.input
6252
4763
  ),
@@ -6261,7 +4772,7 @@ function CommandPalette({
6261
4772
  {
6262
4773
  type: "button",
6263
4774
  onClick: ask,
6264
- className: chunkFIPS3VPH_cjs.cn(
4775
+ className: chunkIZPXHVPJ_cjs.cn(
6265
4776
  "mb-1 flex w-full items-center gap-3 rounded-lg px-3 py-2.5 text-left hover:bg-accent",
6266
4777
  classNames?.askAction
6267
4778
  ),
@@ -6270,7 +4781,7 @@ function CommandPalette({
6270
4781
  /* @__PURE__ */ jsxRuntime.jsx(
6271
4782
  "span",
6272
4783
  {
6273
- className: chunkFIPS3VPH_cjs.cn(
4784
+ className: chunkIZPXHVPJ_cjs.cn(
6274
4785
  "flex size-8 items-center justify-center rounded-md bg-ai-surface text-ai-accent",
6275
4786
  classNames?.askChip
6276
4787
  ),
@@ -6301,7 +4812,7 @@ function CommandPalette({
6301
4812
  }
6302
4813
  ),
6303
4814
  task.isDone && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3 flex justify-end", children: /* @__PURE__ */ jsxRuntime.jsx(
6304
- chunkFIPS3VPH_cjs.Button,
4815
+ chunkIZPXHVPJ_cjs.Button,
6305
4816
  {
6306
4817
  variant: "outline",
6307
4818
  size: "sm",
@@ -6319,7 +4830,7 @@ function CommandPalette({
6319
4830
  {
6320
4831
  type: "button",
6321
4832
  onClick: () => go(item.to),
6322
- className: chunkFIPS3VPH_cjs.cn(
4833
+ className: chunkIZPXHVPJ_cjs.cn(
6323
4834
  "flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left hover:bg-accent",
6324
4835
  classNames?.navItem
6325
4836
  ),
@@ -6365,9 +4876,9 @@ function CommandPalette({
6365
4876
  }
6366
4877
  ) });
6367
4878
  }
6368
- var CommandPaletteCtx = React2.createContext(null);
4879
+ var CommandPaletteCtx = React.createContext(null);
6369
4880
  function useCommandPalette() {
6370
- const v = React2.useContext(CommandPaletteCtx);
4881
+ const v = React.useContext(CommandPaletteCtx);
6371
4882
  if (!v) throw new Error("useCommandPalette must be used within a CommandPaletteProvider");
6372
4883
  return v;
6373
4884
  }
@@ -6376,11 +4887,11 @@ function CommandPaletteProvider({
6376
4887
  hotkey = true,
6377
4888
  ...paletteProps
6378
4889
  }) {
6379
- const [isOpen, setIsOpen] = React2.useState(false);
6380
- const open = React2.useCallback(() => setIsOpen(true), []);
6381
- const close = React2.useCallback(() => setIsOpen(false), []);
6382
- const toggle = React2.useCallback(() => setIsOpen((o) => !o), []);
6383
- React2.useEffect(() => {
4890
+ const [isOpen, setIsOpen] = React.useState(false);
4891
+ const open = React.useCallback(() => setIsOpen(true), []);
4892
+ const close = React.useCallback(() => setIsOpen(false), []);
4893
+ const toggle = React.useCallback(() => setIsOpen((o) => !o), []);
4894
+ React.useEffect(() => {
6384
4895
  if (!hotkey) return;
6385
4896
  const onKey = (e) => {
6386
4897
  if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") {
@@ -6391,7 +4902,7 @@ function CommandPaletteProvider({
6391
4902
  window.addEventListener("keydown", onKey);
6392
4903
  return () => window.removeEventListener("keydown", onKey);
6393
4904
  }, [hotkey, toggle]);
6394
- const value = React2.useMemo(() => ({ open, close, toggle, isOpen }), [open, close, toggle, isOpen]);
4905
+ const value = React.useMemo(() => ({ open, close, toggle, isOpen }), [open, close, toggle, isOpen]);
6395
4906
  return /* @__PURE__ */ jsxRuntime.jsxs(CommandPaletteCtx.Provider, { value, children: [
6396
4907
  children,
6397
4908
  /* @__PURE__ */ jsxRuntime.jsx(CommandPalette, { open: isOpen, onOpenChange: setIsOpen, ...paletteProps })
@@ -6418,23 +4929,23 @@ function UserMenu({
6418
4929
  testId = "user-menu",
6419
4930
  logoutTestId
6420
4931
  }) {
6421
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.DropdownMenu, { children: [
6422
- /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
4932
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkIZPXHVPJ_cjs.DropdownMenu, { children: [
4933
+ /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
6423
4934
  "button",
6424
4935
  {
6425
- className: chunkFIPS3VPH_cjs.cn(
4936
+ className: chunkIZPXHVPJ_cjs.cn(
6426
4937
  "flex items-center gap-2 rounded-md px-1.5 py-1 transition-colors hover:bg-accent",
6427
4938
  classNames?.trigger
6428
4939
  ),
6429
4940
  "data-testid": testId,
6430
4941
  children: [
6431
4942
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative", children: [
6432
- /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.Avatar, { className: "size-8", children: [
6433
- user.picture ? /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.AvatarImage, { src: user.picture, alt: user.name }) : null,
4943
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkIZPXHVPJ_cjs.Avatar, { className: "size-8", children: [
4944
+ user.picture ? /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.AvatarImage, { src: user.picture, alt: user.name }) : null,
6434
4945
  /* @__PURE__ */ jsxRuntime.jsx(
6435
- chunkFIPS3VPH_cjs.AvatarFallback,
4946
+ chunkIZPXHVPJ_cjs.AvatarFallback,
6436
4947
  {
6437
- className: chunkFIPS3VPH_cjs.cn("bg-primary text-primary-foreground", classNames?.fallback),
4948
+ className: chunkIZPXHVPJ_cjs.cn("bg-primary text-primary-foreground", classNames?.fallback),
6438
4949
  children: nameInitials(user.name)
6439
4950
  }
6440
4951
  )
@@ -6442,7 +4953,7 @@ function UserMenu({
6442
4953
  status && /* @__PURE__ */ jsxRuntime.jsx(
6443
4954
  "span",
6444
4955
  {
6445
- className: chunkFIPS3VPH_cjs.cn(
4956
+ className: chunkIZPXHVPJ_cjs.cn(
6446
4957
  "absolute -bottom-0.5 -right-0.5 size-2.5 rounded-full border-2 border-background",
6447
4958
  STATUS_DOT[status.tone]
6448
4959
  ),
@@ -6456,7 +4967,7 @@ function UserMenu({
6456
4967
  }
6457
4968
  ) }),
6458
4969
  /* @__PURE__ */ jsxRuntime.jsxs(
6459
- chunkFIPS3VPH_cjs.DropdownMenuContent,
4970
+ chunkIZPXHVPJ_cjs.DropdownMenuContent,
6460
4971
  {
6461
4972
  align,
6462
4973
  sideOffset: 8,
@@ -6464,9 +4975,9 @@ function UserMenu({
6464
4975
  className: "w-56 rounded-lg border-border/60 shadow-lg",
6465
4976
  "data-testid": "user-menu-panel",
6466
4977
  children: [
6467
- /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.DropdownMenuLabel, { className: "relative pr-8", children: [
4978
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkIZPXHVPJ_cjs.DropdownMenuLabel, { className: "relative pr-8", children: [
6468
4979
  /* @__PURE__ */ jsxRuntime.jsx(
6469
- chunkFIPS3VPH_cjs.DropdownMenuItem,
4980
+ chunkIZPXHVPJ_cjs.DropdownMenuItem,
6470
4981
  {
6471
4982
  className: "absolute right-1 top-1 flex size-6 items-center justify-center rounded-md p-0 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus:bg-accent",
6472
4983
  "aria-label": "Close account menu",
@@ -6483,7 +4994,7 @@ function UserMenu({
6483
4994
  "data-testid": status.testId,
6484
4995
  children: [
6485
4996
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-1.5", children: [
6486
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkFIPS3VPH_cjs.cn("size-2 shrink-0 rounded-full", STATUS_DOT[status.tone]) }),
4997
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkIZPXHVPJ_cjs.cn("size-2 shrink-0 rounded-full", STATUS_DOT[status.tone]) }),
6487
4998
  status.label
6488
4999
  ] }),
6489
5000
  status.detail && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-0.5 truncate pl-3.5 text-[10px] leading-tight text-muted-foreground/70", children: status.detail })
@@ -6491,12 +5002,12 @@ function UserMenu({
6491
5002
  }
6492
5003
  )
6493
5004
  ] }),
6494
- /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.DropdownMenuSeparator, {}),
6495
- items.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.DropdownMenuItem, { onClick: item.onSelect, "data-testid": item.testId, children: [
5005
+ /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.DropdownMenuSeparator, {}),
5006
+ items.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(chunkIZPXHVPJ_cjs.DropdownMenuItem, { onClick: item.onSelect, "data-testid": item.testId, children: [
6496
5007
  item.icon && /* @__PURE__ */ jsxRuntime.jsx(item.icon, { className: "size-4" }),
6497
5008
  item.label
6498
5009
  ] }, item.label)),
6499
- /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.DropdownMenuItem, { onClick: onLogout, "data-testid": logoutTestId ?? `${testId}-logout`, children: [
5010
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkIZPXHVPJ_cjs.DropdownMenuItem, { onClick: onLogout, "data-testid": logoutTestId ?? `${testId}-logout`, children: [
6500
5011
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.LogOut, { className: "size-4" }),
6501
5012
  logoutLabel
6502
5013
  ] })
@@ -6548,7 +5059,7 @@ function DocumentTable({
6548
5059
  const rows = documents ?? query.data ?? [];
6549
5060
  const isLoading = !documents && query.isLoading;
6550
5061
  const tagsQuery = useTags(workspaceId);
6551
- const tagNameById = React2__default.default.useMemo(() => {
5062
+ const tagNameById = React__default.default.useMemo(() => {
6552
5063
  const map = /* @__PURE__ */ new Map();
6553
5064
  for (const t of tagsQuery.data ?? []) {
6554
5065
  if (t.external_id) map.set(t.external_id, t.name ?? t.external_id.slice(0, 8));
@@ -6561,15 +5072,15 @@ function DocumentTable({
6561
5072
  const setViewingDocId = useArbiUiStore((s) => s.setViewingDocId);
6562
5073
  const effectiveSelected = selectedIds ?? storeSelected;
6563
5074
  const emitSelection = onSelectionChange ?? storeSetSelected;
6564
- const gridApiRef = React2__default.default.useRef(null);
6565
- const openDocument = React2__default.default.useCallback(
5075
+ const gridApiRef = React__default.default.useRef(null);
5076
+ const openDocument = React__default.default.useCallback(
6566
5077
  (id) => {
6567
5078
  setViewingDocId(id);
6568
5079
  onOpenDocument?.(id);
6569
5080
  },
6570
5081
  [onOpenDocument, setViewingDocId]
6571
5082
  );
6572
- const applySelection = React2__default.default.useCallback(() => {
5083
+ const applySelection = React__default.default.useCallback(() => {
6573
5084
  const api = gridApiRef.current;
6574
5085
  if (!api) return;
6575
5086
  const wanted = new Set(effectiveSelected);
@@ -6579,10 +5090,10 @@ function DocumentTable({
6579
5090
  if (node.isSelected() !== shouldSelect) node.setSelected(shouldSelect);
6580
5091
  });
6581
5092
  }, [effectiveSelected]);
6582
- React2__default.default.useEffect(() => {
5093
+ React__default.default.useEffect(() => {
6583
5094
  applySelection();
6584
5095
  }, [applySelection]);
6585
- const columnDefs = React2__default.default.useMemo(
5096
+ const columnDefs = React__default.default.useMemo(
6586
5097
  () => [
6587
5098
  {
6588
5099
  colId: "select",
@@ -6607,7 +5118,7 @@ function DocumentTable({
6607
5118
  const doc = p.data;
6608
5119
  if (!doc) return null;
6609
5120
  return /* @__PURE__ */ jsxRuntime.jsx(
6610
- DocumentEntity,
5121
+ chunkIZPXHVPJ_cjs.DocumentEntity,
6611
5122
  {
6612
5123
  doc,
6613
5124
  size: "base",
@@ -6630,7 +5141,7 @@ function DocumentTable({
6630
5141
  cellRenderer: (p) => {
6631
5142
  const status = p.data?.status;
6632
5143
  if (!status) return null;
6633
- return /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.Badge, { variant: STATUS_VARIANTS[status.toLowerCase()] ?? "secondary", children: status });
5144
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.Badge, { variant: STATUS_VARIANTS[status.toLowerCase()] ?? "secondary", children: status });
6634
5145
  }
6635
5146
  },
6636
5147
  {
@@ -6644,7 +5155,7 @@ function DocumentTable({
6644
5155
  const doctags = p.data?.doctags ?? [];
6645
5156
  if (doctags.length === 0) return null;
6646
5157
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap items-center gap-1 py-1", children: doctags.map((dt) => /* @__PURE__ */ jsxRuntime.jsx(
6647
- TagEntity,
5158
+ chunkIZPXHVPJ_cjs.TagEntity,
6648
5159
  {
6649
5160
  size: "sm",
6650
5161
  tag: {
@@ -6690,7 +5201,7 @@ function DocumentTable({
6690
5201
  const id = e.data?.external_id;
6691
5202
  if (id) openDocument(id);
6692
5203
  };
6693
- const getRowId = React2__default.default.useCallback((params) => params.data.external_id, []);
5204
+ const getRowId = React__default.default.useCallback((params) => params.data.external_id, []);
6694
5205
  const autoHeight = height === "auto";
6695
5206
  const style = autoHeight ? {} : { height: typeof height === "number" ? `${height}px` : height, width: "100%" };
6696
5207
  if (isLoading) {
@@ -6732,17 +5243,17 @@ var STATUS_LABEL = {
6732
5243
  indexing: "Indexing",
6733
5244
  analysing: "Analysing"
6734
5245
  };
6735
- var IMAGE_EXTENSIONS2 = /* @__PURE__ */ new Set(["jpg", "jpeg", "png", "gif", "bmp", "tiff", "tif", "webp"]);
6736
- var VIDEO_EXTENSIONS2 = /* @__PURE__ */ new Set(["mp4", "mpeg", "mpg", "webm", "mov", "avi", "mkv"]);
6737
- var AUDIO_EXTENSIONS2 = /* @__PURE__ */ new Set(["mp3", "wav", "m4a", "aac", "ogg", "flac"]);
6738
- var EMAIL_EXTENSIONS2 = /* @__PURE__ */ new Set(["eml", "msg"]);
5246
+ var IMAGE_EXTENSIONS = /* @__PURE__ */ new Set(["jpg", "jpeg", "png", "gif", "bmp", "tiff", "tif", "webp"]);
5247
+ var VIDEO_EXTENSIONS = /* @__PURE__ */ new Set(["mp4", "mpeg", "mpg", "webm", "mov", "avi", "mkv"]);
5248
+ var AUDIO_EXTENSIONS = /* @__PURE__ */ new Set(["mp3", "wav", "m4a", "aac", "ogg", "flac"]);
5249
+ var EMAIL_EXTENSIONS = /* @__PURE__ */ new Set(["eml", "msg"]);
6739
5250
  function fileIcon(fileName, size) {
6740
5251
  const ext = fileName?.split(".").pop()?.toLowerCase();
6741
- if (ext && VIDEO_EXTENSIONS2.has(ext)) return /* @__PURE__ */ jsxRuntime.jsx(VidIcon, { size });
6742
- if (ext && AUDIO_EXTENSIONS2.has(ext)) return /* @__PURE__ */ jsxRuntime.jsx(AudIcon, { size });
6743
- if (ext && IMAGE_EXTENSIONS2.has(ext)) return /* @__PURE__ */ jsxRuntime.jsx(ImgIcon, { size });
6744
- if (ext && EMAIL_EXTENSIONS2.has(ext)) return /* @__PURE__ */ jsxRuntime.jsx(EmlIcon, { size });
6745
- return /* @__PURE__ */ jsxRuntime.jsx(PdfIcon, { size });
5252
+ if (ext && VIDEO_EXTENSIONS.has(ext)) return /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.VidIcon, { size });
5253
+ if (ext && AUDIO_EXTENSIONS.has(ext)) return /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.AudIcon, { size });
5254
+ if (ext && IMAGE_EXTENSIONS.has(ext)) return /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.ImgIcon, { size });
5255
+ if (ext && EMAIL_EXTENSIONS.has(ext)) return /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.EmlIcon, { size });
5256
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.PdfIcon, { size });
6746
5257
  }
6747
5258
  function RenameField({
6748
5259
  seed,
@@ -6750,7 +5261,7 @@ function RenameField({
6750
5261
  onCancel,
6751
5262
  testId
6752
5263
  }) {
6753
- const done = React2__default.default.useRef(false);
5264
+ const done = React__default.default.useRef(false);
6754
5265
  const commit = (value) => {
6755
5266
  if (done.current) return;
6756
5267
  done.current = true;
@@ -6838,14 +5349,14 @@ function DocumentCard({
6838
5349
  const normalised = (status ?? "").toLowerCase();
6839
5350
  const isProcessing = ACTIVE_STATUSES.has(normalised);
6840
5351
  const showStatusMarker = !isProcessing && TERMINAL_STATUSES2.has(normalised);
6841
- const [thumbFailed, setThumbFailed] = React2__default.default.useState(false);
6842
- const [thumbLandscape, setThumbLandscape] = React2__default.default.useState(false);
5352
+ const [thumbFailed, setThumbFailed] = React__default.default.useState(false);
5353
+ const [thumbLandscape, setThumbLandscape] = React__default.default.useState(false);
6843
5354
  const showThumbnail = !!thumbnailUrl && !thumbFailed && !isProcessing;
6844
5355
  return /* @__PURE__ */ jsxRuntime.jsxs(
6845
5356
  "div",
6846
5357
  {
6847
5358
  "data-testid": testId,
6848
- className: chunkFIPS3VPH_cjs.cn(
5359
+ className: chunkIZPXHVPJ_cjs.cn(
6849
5360
  // Square corners and a portrait-page aspect (height = 1.3 × width), so a
6850
5361
  // cover-page thumbnail reads edge-to-edge.
6851
5362
  "group relative aspect-[10/13] select-none overflow-hidden border bg-muted/20 transition",
@@ -6862,7 +5373,7 @@ function DocumentCard({
6862
5373
  draggable: false,
6863
5374
  onError: () => setThumbFailed(true),
6864
5375
  onLoad: (e) => setThumbLandscape(e.currentTarget.naturalWidth > e.currentTarget.naturalHeight),
6865
- className: chunkFIPS3VPH_cjs.cn(
5376
+ className: chunkIZPXHVPJ_cjs.cn(
6866
5377
  "absolute inset-0 size-full bg-white",
6867
5378
  thumbLandscape ? "object-contain" : "object-cover object-top"
6868
5379
  )
@@ -6880,14 +5391,14 @@ function DocumentCard({
6880
5391
  }
6881
5392
  ),
6882
5393
  onToggleSelect && /* @__PURE__ */ jsxRuntime.jsx(
6883
- chunkFIPS3VPH_cjs.Checkbox,
5394
+ chunkIZPXHVPJ_cjs.Checkbox,
6884
5395
  {
6885
5396
  checked: selected,
6886
5397
  onCheckedChange: () => onToggleSelect(),
6887
5398
  onClick: (e) => e.stopPropagation(),
6888
5399
  "aria-label": selected ? "Deselect" : "Select",
6889
5400
  "data-testid": `${testId}-select`,
6890
- className: chunkFIPS3VPH_cjs.cn(
5401
+ className: chunkIZPXHVPJ_cjs.cn(
6891
5402
  "absolute left-1.5 top-1.5 z-20 size-6 rounded-none border-muted-foreground/60 bg-background shadow-sm transition",
6892
5403
  selected ? "opacity-100" : "opacity-40 group-hover:opacity-100"
6893
5404
  )
@@ -6908,7 +5419,7 @@ function DocumentCard({
6908
5419
  testId: `${testId}-rename-input`
6909
5420
  }
6910
5421
  ) : /* @__PURE__ */ jsxRuntime.jsx(
6911
- DocumentEntity,
5422
+ chunkIZPXHVPJ_cjs.DocumentEntity,
6912
5423
  {
6913
5424
  doc,
6914
5425
  fullWidth: true,
@@ -6962,8 +5473,8 @@ function DocumentCardMenu({
6962
5473
  mutationFn: () => arbi.documents.delete([docId]),
6963
5474
  onSuccess: invalidateDocuments
6964
5475
  });
6965
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.DropdownMenu, { children: [
6966
- /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
5476
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkIZPXHVPJ_cjs.DropdownMenu, { children: [
5477
+ /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
6967
5478
  "button",
6968
5479
  {
6969
5480
  type: "button",
@@ -6974,17 +5485,17 @@ function DocumentCardMenu({
6974
5485
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MoreHorizontal, { className: "size-4" })
6975
5486
  }
6976
5487
  ) }),
6977
- /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.DropdownMenuContent, { align: "start", onClick: (e) => e.stopPropagation(), className: "w-44", children: [
6978
- onOpen && /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.DropdownMenuItem, { onSelect: onOpen, "data-testid": `${testId}-open`, children: [
5488
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkIZPXHVPJ_cjs.DropdownMenuContent, { align: "start", onClick: (e) => e.stopPropagation(), className: "w-44", children: [
5489
+ onOpen && /* @__PURE__ */ jsxRuntime.jsxs(chunkIZPXHVPJ_cjs.DropdownMenuItem, { onSelect: onOpen, "data-testid": `${testId}-open`, children: [
6979
5490
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SquarePen, { className: "mr-2 size-4" }),
6980
5491
  "Open"
6981
5492
  ] }),
6982
- onRename && /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.DropdownMenuItem, { onSelect: onRename, "data-testid": `${testId}-rename`, children: [
5493
+ onRename && /* @__PURE__ */ jsxRuntime.jsxs(chunkIZPXHVPJ_cjs.DropdownMenuItem, { onSelect: onRename, "data-testid": `${testId}-rename`, children: [
6983
5494
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pencil, { className: "mr-2 size-4" }),
6984
5495
  "Rename"
6985
5496
  ] }),
6986
5497
  /* @__PURE__ */ jsxRuntime.jsxs(
6987
- chunkFIPS3VPH_cjs.DropdownMenuItem,
5498
+ chunkIZPXHVPJ_cjs.DropdownMenuItem,
6988
5499
  {
6989
5500
  onSelect: () => download.mutate(),
6990
5501
  disabled: download.isPending,
@@ -6996,9 +5507,9 @@ function DocumentCardMenu({
6996
5507
  }
6997
5508
  ),
6998
5509
  canDelete && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
6999
- /* @__PURE__ */ jsxRuntime.jsx(chunkFIPS3VPH_cjs.DropdownMenuSeparator, {}),
5510
+ /* @__PURE__ */ jsxRuntime.jsx(chunkIZPXHVPJ_cjs.DropdownMenuSeparator, {}),
7000
5511
  /* @__PURE__ */ jsxRuntime.jsxs(
7001
- chunkFIPS3VPH_cjs.DropdownMenuItem,
5512
+ chunkIZPXHVPJ_cjs.DropdownMenuItem,
7002
5513
  {
7003
5514
  onSelect: () => remove.mutate(),
7004
5515
  disabled: remove.isPending,
@@ -7043,14 +5554,14 @@ function DocumentGallery({
7043
5554
  const rows = documents ?? query.data ?? [];
7044
5555
  const isLoading = !documents && query.isLoading;
7045
5556
  const tagsQuery = useTags(workspaceId);
7046
- const tagNameById = React2__default.default.useMemo(() => {
5557
+ const tagNameById = React__default.default.useMemo(() => {
7047
5558
  const map = /* @__PURE__ */ new Map();
7048
5559
  for (const t of tagsQuery.data ?? []) {
7049
5560
  if (t.external_id) map.set(t.external_id, t.name ?? t.external_id.slice(0, 8));
7050
5561
  }
7051
5562
  return map;
7052
5563
  }, [tagsQuery.data]);
7053
- const docIds = React2__default.default.useMemo(
5564
+ const docIds = React__default.default.useMemo(
7054
5565
  () => rows.map((d) => d.external_id).filter((id) => !!id),
7055
5566
  [rows]
7056
5567
  );
@@ -7062,8 +5573,8 @@ function DocumentGallery({
7062
5573
  const setViewingDocId = useArbiUiStore((s) => s.setViewingDocId);
7063
5574
  const effectiveSelected = selectedIds ?? storeSelected;
7064
5575
  const emitSelection = onSelectionChange ?? storeSetSelected;
7065
- const selectedSet = React2__default.default.useMemo(() => new Set(effectiveSelected), [effectiveSelected]);
7066
- const toggleSelected = React2__default.default.useCallback(
5576
+ const selectedSet = React__default.default.useMemo(() => new Set(effectiveSelected), [effectiveSelected]);
5577
+ const toggleSelected = React__default.default.useCallback(
7067
5578
  (id) => {
7068
5579
  const next = new Set(effectiveSelected);
7069
5580
  if (next.has(id)) next.delete(id);
@@ -7072,7 +5583,7 @@ function DocumentGallery({
7072
5583
  },
7073
5584
  [effectiveSelected, emitSelection]
7074
5585
  );
7075
- const openDocument = React2__default.default.useCallback(
5586
+ const openDocument = React__default.default.useCallback(
7076
5587
  (id) => {
7077
5588
  setViewingDocId(id);
7078
5589
  onOpenDocument?.(id);
@@ -7081,7 +5592,7 @@ function DocumentGallery({
7081
5592
  );
7082
5593
  const arbi = chunk7IOCMCC5_cjs.useArbi();
7083
5594
  const queryClient = reactQuery.useQueryClient();
7084
- const [renamingId, setRenamingId] = React2__default.default.useState(null);
5595
+ const [renamingId, setRenamingId] = React__default.default.useState(null);
7085
5596
  const rename = reactQuery.useMutation({
7086
5597
  mutationFn: ({ doc, title }) => arbi.documents.update([
7087
5598
  { external_id: doc.external_id, doc_metadata: { ...doc.doc_metadata, title } }
@@ -7098,7 +5609,7 @@ function DocumentGallery({
7098
5609
  return /* @__PURE__ */ jsxRuntime.jsx(
7099
5610
  "div",
7100
5611
  {
7101
- className: chunkFIPS3VPH_cjs.cn(
5612
+ className: chunkIZPXHVPJ_cjs.cn(
7102
5613
  "flex items-center justify-center p-8 text-sm text-muted-foreground",
7103
5614
  className
7104
5615
  ),
@@ -7110,7 +5621,7 @@ function DocumentGallery({
7110
5621
  return /* @__PURE__ */ jsxRuntime.jsx(
7111
5622
  "div",
7112
5623
  {
7113
- className: chunkFIPS3VPH_cjs.cn(
5624
+ className: chunkIZPXHVPJ_cjs.cn(
7114
5625
  "flex items-center justify-center p-8 text-sm text-muted-foreground",
7115
5626
  className
7116
5627
  ),
@@ -7122,7 +5633,7 @@ function DocumentGallery({
7122
5633
  "div",
7123
5634
  {
7124
5635
  "data-testid": "document-gallery",
7125
- className: chunkFIPS3VPH_cjs.cn("grid gap-3", className),
5636
+ className: chunkIZPXHVPJ_cjs.cn("grid gap-3", className),
7126
5637
  style: { gridTemplateColumns: `repeat(auto-fill, minmax(${minTileWidth}px, 1fr))` },
7127
5638
  children: rows.map((doc) => {
7128
5639
  const id = doc.external_id;
@@ -7169,13 +5680,13 @@ function VoiceNoteRecorder({
7169
5680
  isSaving = false,
7170
5681
  transcribe
7171
5682
  }) {
7172
- const recorder = chunkFIPS3VPH_cjs.useAudioRecorder();
7173
- const [transcript, setTranscript] = React2.useState(null);
7174
- const [isTranscribing, setIsTranscribing] = React2.useState(false);
7175
- React2.useEffect(() => {
5683
+ const recorder = chunkIZPXHVPJ_cjs.useAudioRecorder();
5684
+ const [transcript, setTranscript] = React.useState(null);
5685
+ const [isTranscribing, setIsTranscribing] = React.useState(false);
5686
+ React.useEffect(() => {
7176
5687
  if (recorder.error) onError?.(recorder.error);
7177
5688
  }, [recorder.error]);
7178
- React2.useEffect(() => {
5689
+ React.useEffect(() => {
7179
5690
  if (recorder.state !== "stopped" || !recorder.blob) {
7180
5691
  setTranscript(null);
7181
5692
  setIsTranscribing(false);
@@ -7201,7 +5712,7 @@ function VoiceNoteRecorder({
7201
5712
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full flex-col items-center justify-center gap-6 p-8", children: [
7202
5713
  recorder.state === "idle" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7203
5714
  /* @__PURE__ */ jsxRuntime.jsx(
7204
- chunkFIPS3VPH_cjs.Button,
5715
+ chunkIZPXHVPJ_cjs.Button,
7205
5716
  {
7206
5717
  type: "button",
7207
5718
  size: "lg",
@@ -7215,7 +5726,7 @@ function VoiceNoteRecorder({
7215
5726
  ] }),
7216
5727
  (recorder.state === "recording" || recorder.state === "paused") && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7217
5728
  /* @__PURE__ */ jsxRuntime.jsx(
7218
- chunkFIPS3VPH_cjs.MicWaveformIndicator,
5729
+ chunkIZPXHVPJ_cjs.MicWaveformIndicator,
7219
5730
  {
7220
5731
  level: recorder.level,
7221
5732
  elapsedMs: recorder.elapsedMs,
@@ -7224,7 +5735,7 @@ function VoiceNoteRecorder({
7224
5735
  ),
7225
5736
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
7226
5737
  recorder.state === "recording" ? /* @__PURE__ */ jsxRuntime.jsxs(
7227
- chunkFIPS3VPH_cjs.Button,
5738
+ chunkIZPXHVPJ_cjs.Button,
7228
5739
  {
7229
5740
  type: "button",
7230
5741
  variant: "outline",
@@ -7236,7 +5747,7 @@ function VoiceNoteRecorder({
7236
5747
  ]
7237
5748
  }
7238
5749
  ) : /* @__PURE__ */ jsxRuntime.jsxs(
7239
- chunkFIPS3VPH_cjs.Button,
5750
+ chunkIZPXHVPJ_cjs.Button,
7240
5751
  {
7241
5752
  type: "button",
7242
5753
  variant: "outline",
@@ -7248,7 +5759,7 @@ function VoiceNoteRecorder({
7248
5759
  ]
7249
5760
  }
7250
5761
  ),
7251
- /* @__PURE__ */ jsxRuntime.jsxs(chunkFIPS3VPH_cjs.Button, { type: "button", onClick: recorder.stop, "data-testid": "voice-note-stop-button", children: [
5762
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkIZPXHVPJ_cjs.Button, { type: "button", onClick: recorder.stop, "data-testid": "voice-note-stop-button", children: [
7252
5763
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Square, { className: "mr-1.5 h-3.5 w-3.5 fill-current" }),
7253
5764
  "Stop"
7254
5765
  ] })
@@ -7272,7 +5783,7 @@ function VoiceNoteRecorder({
7272
5783
  ),
7273
5784
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
7274
5785
  /* @__PURE__ */ jsxRuntime.jsxs(
7275
- chunkFIPS3VPH_cjs.Button,
5786
+ chunkIZPXHVPJ_cjs.Button,
7276
5787
  {
7277
5788
  type: "button",
7278
5789
  variant: "outline",
@@ -7286,7 +5797,7 @@ function VoiceNoteRecorder({
7286
5797
  }
7287
5798
  ),
7288
5799
  /* @__PURE__ */ jsxRuntime.jsxs(
7289
- chunkFIPS3VPH_cjs.Button,
5800
+ chunkIZPXHVPJ_cjs.Button,
7290
5801
  {
7291
5802
  type: "button",
7292
5803
  variant: "outline",
@@ -7300,7 +5811,7 @@ function VoiceNoteRecorder({
7300
5811
  }
7301
5812
  ),
7302
5813
  /* @__PURE__ */ jsxRuntime.jsxs(
7303
- chunkFIPS3VPH_cjs.Button,
5814
+ chunkIZPXHVPJ_cjs.Button,
7304
5815
  {
7305
5816
  type: "button",
7306
5817
  onClick: handleSave,
@@ -7337,7 +5848,7 @@ function DraftTitleControls({
7337
5848
  }
7338
5849
  ),
7339
5850
  /* @__PURE__ */ jsxRuntime.jsx(
7340
- chunkFIPS3VPH_cjs.IconToggle,
5851
+ chunkIZPXHVPJ_cjs.IconToggle,
7341
5852
  {
7342
5853
  icon: lucideReact.Sparkles,
7343
5854
  isActive: autoRename,
@@ -7351,18 +5862,18 @@ function DraftTitleControls({
7351
5862
  ] });
7352
5863
  }
7353
5864
  function useCameraStream(constraints = { video: true, audio: false }) {
7354
- const [stream, setStream] = React2.useState(null);
7355
- const [isStarting, setIsStarting] = React2.useState(false);
7356
- const [error, setError] = React2.useState(null);
7357
- const streamRef = React2.useRef(null);
7358
- const stop = React2.useCallback(() => {
5865
+ const [stream, setStream] = React.useState(null);
5866
+ const [isStarting, setIsStarting] = React.useState(false);
5867
+ const [error, setError] = React.useState(null);
5868
+ const streamRef = React.useRef(null);
5869
+ const stop = React.useCallback(() => {
7359
5870
  streamRef.current?.getTracks().forEach((t) => t.stop());
7360
5871
  streamRef.current = null;
7361
5872
  setStream(null);
7362
5873
  }, []);
7363
- const constraintsRef = React2.useRef(constraints);
5874
+ const constraintsRef = React.useRef(constraints);
7364
5875
  constraintsRef.current = constraints;
7365
- const start = React2.useCallback(async () => {
5876
+ const start = React.useCallback(async () => {
7366
5877
  if (streamRef.current) return;
7367
5878
  setError(null);
7368
5879
  setIsStarting(true);
@@ -7371,32 +5882,32 @@ function useCameraStream(constraints = { video: true, audio: false }) {
7371
5882
  streamRef.current = media;
7372
5883
  setStream(media);
7373
5884
  } catch (err) {
7374
- setError(chunkFIPS3VPH_cjs.classifyMediaError(err, "camera"));
5885
+ setError(chunkIZPXHVPJ_cjs.classifyMediaError(err, "camera"));
7375
5886
  } finally {
7376
5887
  setIsStarting(false);
7377
5888
  }
7378
5889
  }, []);
7379
- React2.useEffect(() => () => stop(), [stop]);
5890
+ React.useEffect(() => () => stop(), [stop]);
7380
5891
  return { stream, isStarting, error, start, stop };
7381
5892
  }
7382
5893
  var ELAPSED_TICK_MS = 200;
7383
5894
  function useVideoRecorder(stream) {
7384
- const [state, setState] = React2.useState("idle");
7385
- const [elapsedMs, setElapsedMs] = React2.useState(0);
7386
- const [blob, setBlob] = React2.useState(null);
7387
- const [mimeType, setMimeType] = React2.useState(null);
7388
- const mediaRecorderRef = React2.useRef(null);
7389
- const chunksRef = React2.useRef([]);
7390
- const startedAtRef = React2.useRef(0);
7391
- const tickRef = React2.useRef(null);
7392
- const stateRef = React2.useRef("idle");
5895
+ const [state, setState] = React.useState("idle");
5896
+ const [elapsedMs, setElapsedMs] = React.useState(0);
5897
+ const [blob, setBlob] = React.useState(null);
5898
+ const [mimeType, setMimeType] = React.useState(null);
5899
+ const mediaRecorderRef = React.useRef(null);
5900
+ const chunksRef = React.useRef([]);
5901
+ const startedAtRef = React.useRef(0);
5902
+ const tickRef = React.useRef(null);
5903
+ const stateRef = React.useRef("idle");
7393
5904
  stateRef.current = state;
7394
- const stopTicking = React2.useCallback(() => {
5905
+ const stopTicking = React.useCallback(() => {
7395
5906
  if (tickRef.current !== null) clearInterval(tickRef.current);
7396
5907
  tickRef.current = null;
7397
5908
  }, []);
7398
- React2.useEffect(() => stopTicking, [stopTicking]);
7399
- const start = React2.useCallback(() => {
5909
+ React.useEffect(() => stopTicking, [stopTicking]);
5910
+ const start = React.useCallback(() => {
7400
5911
  if (!stream || stateRef.current === "recording") return;
7401
5912
  const mt = MediaRecorder.isTypeSupported("video/webm") ? "video/webm" : "video/mp4";
7402
5913
  const recorder = new MediaRecorder(stream, { mimeType: mt });
@@ -7415,7 +5926,7 @@ function useVideoRecorder(stream) {
7415
5926
  setElapsedMs(performance.now() - startedAtRef.current);
7416
5927
  }, ELAPSED_TICK_MS);
7417
5928
  }, [stream]);
7418
- const stop = React2.useCallback(() => {
5929
+ const stop = React.useCallback(() => {
7419
5930
  const recorder = mediaRecorderRef.current;
7420
5931
  if (!recorder || recorder.state === "inactive") return;
7421
5932
  const finalElapsed = performance.now() - startedAtRef.current;
@@ -7428,7 +5939,7 @@ function useVideoRecorder(stream) {
7428
5939
  };
7429
5940
  recorder.stop();
7430
5941
  }, [stopTicking]);
7431
- const reset = React2.useCallback(() => {
5942
+ const reset = React.useCallback(() => {
7432
5943
  setState("idle");
7433
5944
  setBlob(null);
7434
5945
  setElapsedMs(0);
@@ -7457,16 +5968,16 @@ function captureFrameAsBlob(video, mimeType = "image/png") {
7457
5968
  }
7458
5969
  function PhotoCapture({ onSave, onDiscard, onError, isSaving = false }) {
7459
5970
  const camera = useCameraStream({ video: true, audio: false });
7460
- const videoRef = React2.useRef(null);
7461
- const [capturedBlob, setCapturedBlob] = React2.useState(null);
7462
- const [captureError, setCaptureError] = React2.useState(null);
7463
- React2.useEffect(() => {
5971
+ const videoRef = React.useRef(null);
5972
+ const [capturedBlob, setCapturedBlob] = React.useState(null);
5973
+ const [captureError, setCaptureError] = React.useState(null);
5974
+ React.useEffect(() => {
7464
5975
  void camera.start();
7465
5976
  }, []);
7466
- React2.useEffect(() => {
5977
+ React.useEffect(() => {
7467
5978
  if (camera.error) onError?.(camera.error);
7468
5979
  }, [camera.error]);
7469
- React2.useEffect(() => {
5980
+ React.useEffect(() => {
7470
5981
  const video = videoRef.current;
7471
5982
  if (!video) return;
7472
5983
  video.srcObject = camera.stream;
@@ -7502,7 +6013,7 @@ function PhotoCapture({ onSave, onDiscard, onError, isSaving = false }) {
7502
6013
  }
7503
6014
  ) }),
7504
6015
  /* @__PURE__ */ jsxRuntime.jsx(
7505
- chunkFIPS3VPH_cjs.Button,
6016
+ chunkIZPXHVPJ_cjs.Button,
7506
6017
  {
7507
6018
  type: "button",
7508
6019
  size: "lg",
@@ -7520,7 +6031,7 @@ function PhotoCapture({ onSave, onDiscard, onError, isSaving = false }) {
7520
6031
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full max-w-md", children: /* @__PURE__ */ jsxRuntime.jsx(chunk7IOCMCC5_cjs.ImageViewer, { blob: capturedBlob, alt: "Captured photo" }) }),
7521
6032
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
7522
6033
  /* @__PURE__ */ jsxRuntime.jsxs(
7523
- chunkFIPS3VPH_cjs.Button,
6034
+ chunkIZPXHVPJ_cjs.Button,
7524
6035
  {
7525
6036
  type: "button",
7526
6037
  variant: "outline",
@@ -7534,7 +6045,7 @@ function PhotoCapture({ onSave, onDiscard, onError, isSaving = false }) {
7534
6045
  }
7535
6046
  ),
7536
6047
  /* @__PURE__ */ jsxRuntime.jsxs(
7537
- chunkFIPS3VPH_cjs.Button,
6048
+ chunkIZPXHVPJ_cjs.Button,
7538
6049
  {
7539
6050
  type: "button",
7540
6051
  variant: "outline",
@@ -7548,7 +6059,7 @@ function PhotoCapture({ onSave, onDiscard, onError, isSaving = false }) {
7548
6059
  }
7549
6060
  ),
7550
6061
  /* @__PURE__ */ jsxRuntime.jsxs(
7551
- chunkFIPS3VPH_cjs.Button,
6062
+ chunkIZPXHVPJ_cjs.Button,
7552
6063
  {
7553
6064
  type: "button",
7554
6065
  onClick: handleSave,
@@ -7567,14 +6078,14 @@ function PhotoCapture({ onSave, onDiscard, onError, isSaving = false }) {
7567
6078
  function VideoCapture({ onSave, onDiscard, onError, isSaving = false }) {
7568
6079
  const camera = useCameraStream({ video: true, audio: true });
7569
6080
  const recorder = useVideoRecorder(camera.stream);
7570
- const videoRef = React2.useRef(null);
7571
- React2.useEffect(() => {
6081
+ const videoRef = React.useRef(null);
6082
+ React.useEffect(() => {
7572
6083
  void camera.start();
7573
6084
  }, []);
7574
- React2.useEffect(() => {
6085
+ React.useEffect(() => {
7575
6086
  if (camera.error) onError?.(camera.error);
7576
6087
  }, [camera.error]);
7577
- React2.useEffect(() => {
6088
+ React.useEffect(() => {
7578
6089
  const video = videoRef.current;
7579
6090
  if (!video || recorder.state === "stopped") return;
7580
6091
  video.srcObject = camera.stream;
@@ -7607,10 +6118,10 @@ function VideoCapture({ onSave, onDiscard, onError, isSaving = false }) {
7607
6118
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "relative inline-flex h-2 w-2 rounded-full bg-red-500" })
7608
6119
  ] }),
7609
6120
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-semibold uppercase tracking-wide text-red-500", children: "Rec" }),
7610
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono text-xs tabular-nums text-muted-foreground", children: chunkFIPS3VPH_cjs.formatElapsed(recorder.elapsedMs) })
6121
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono text-xs tabular-nums text-muted-foreground", children: chunkIZPXHVPJ_cjs.formatElapsed(recorder.elapsedMs) })
7611
6122
  ] }),
7612
6123
  recorder.state === "recording" ? /* @__PURE__ */ jsxRuntime.jsx(
7613
- chunkFIPS3VPH_cjs.Button,
6124
+ chunkIZPXHVPJ_cjs.Button,
7614
6125
  {
7615
6126
  type: "button",
7616
6127
  size: "lg",
@@ -7620,7 +6131,7 @@ function VideoCapture({ onSave, onDiscard, onError, isSaving = false }) {
7620
6131
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Square, { className: "h-5 w-5 fill-current" })
7621
6132
  }
7622
6133
  ) : /* @__PURE__ */ jsxRuntime.jsx(
7623
- chunkFIPS3VPH_cjs.Button,
6134
+ chunkIZPXHVPJ_cjs.Button,
7624
6135
  {
7625
6136
  type: "button",
7626
6137
  size: "lg",
@@ -7637,7 +6148,7 @@ function VideoCapture({ onSave, onDiscard, onError, isSaving = false }) {
7637
6148
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full max-w-md", children: /* @__PURE__ */ jsxRuntime.jsx(chunk7IOCMCC5_cjs.VideoViewer, { blob: recorder.blob, title: "Captured video" }) }),
7638
6149
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
7639
6150
  /* @__PURE__ */ jsxRuntime.jsxs(
7640
- chunkFIPS3VPH_cjs.Button,
6151
+ chunkIZPXHVPJ_cjs.Button,
7641
6152
  {
7642
6153
  type: "button",
7643
6154
  variant: "outline",
@@ -7651,7 +6162,7 @@ function VideoCapture({ onSave, onDiscard, onError, isSaving = false }) {
7651
6162
  }
7652
6163
  ),
7653
6164
  /* @__PURE__ */ jsxRuntime.jsxs(
7654
- chunkFIPS3VPH_cjs.Button,
6165
+ chunkIZPXHVPJ_cjs.Button,
7655
6166
  {
7656
6167
  type: "button",
7657
6168
  variant: "outline",
@@ -7665,7 +6176,7 @@ function VideoCapture({ onSave, onDiscard, onError, isSaving = false }) {
7665
6176
  }
7666
6177
  ),
7667
6178
  /* @__PURE__ */ jsxRuntime.jsxs(
7668
- chunkFIPS3VPH_cjs.Button,
6179
+ chunkIZPXHVPJ_cjs.Button,
7669
6180
  {
7670
6181
  type: "button",
7671
6182
  onClick: handleSave,
@@ -7706,457 +6217,633 @@ function hasVideoTrack(blob) {
7706
6217
  });
7707
6218
  }
7708
6219
 
6220
+ Object.defineProperty(exports, "DEFAULT_NOTIFY_TONE", {
6221
+ enumerable: true,
6222
+ get: function () { return chunk3MLQUKT4_cjs.DEFAULT_NOTIFY_TONE; }
6223
+ });
6224
+ Object.defineProperty(exports, "Toaster", {
6225
+ enumerable: true,
6226
+ get: function () { return chunk3MLQUKT4_cjs.Toaster; }
6227
+ });
6228
+ Object.defineProperty(exports, "notify", {
6229
+ enumerable: true,
6230
+ get: function () { return chunk3MLQUKT4_cjs.notify; }
6231
+ });
6232
+ Object.defineProperty(exports, "seedNotifications", {
6233
+ enumerable: true,
6234
+ get: function () { return chunk3MLQUKT4_cjs.seedNotifications; }
6235
+ });
6236
+ Object.defineProperty(exports, "selectUnread", {
6237
+ enumerable: true,
6238
+ get: function () { return chunk3MLQUKT4_cjs.selectUnread; }
6239
+ });
6240
+ Object.defineProperty(exports, "toast", {
6241
+ enumerable: true,
6242
+ get: function () { return chunk3MLQUKT4_cjs.toast; }
6243
+ });
6244
+ Object.defineProperty(exports, "useNotify", {
6245
+ enumerable: true,
6246
+ get: function () { return chunk3MLQUKT4_cjs.useNotify; }
6247
+ });
6248
+ Object.defineProperty(exports, "AgentBadge", {
6249
+ enumerable: true,
6250
+ get: function () { return chunkIZPXHVPJ_cjs.AgentBadge; }
6251
+ });
7709
6252
  Object.defineProperty(exports, "AiMarkdown", {
7710
6253
  enumerable: true,
7711
- get: function () { return chunkFIPS3VPH_cjs.AiMarkdown; }
6254
+ get: function () { return chunkIZPXHVPJ_cjs.AiMarkdown; }
6255
+ });
6256
+ Object.defineProperty(exports, "ArbiBotHeadIcon", {
6257
+ enumerable: true,
6258
+ get: function () { return chunkIZPXHVPJ_cjs.ArbiBotHeadIcon; }
6259
+ });
6260
+ Object.defineProperty(exports, "AudIcon", {
6261
+ enumerable: true,
6262
+ get: function () { return chunkIZPXHVPJ_cjs.AudIcon; }
7712
6263
  });
7713
6264
  Object.defineProperty(exports, "Avatar", {
7714
6265
  enumerable: true,
7715
- get: function () { return chunkFIPS3VPH_cjs.Avatar; }
6266
+ get: function () { return chunkIZPXHVPJ_cjs.Avatar; }
7716
6267
  });
7717
6268
  Object.defineProperty(exports, "AvatarFallback", {
7718
6269
  enumerable: true,
7719
- get: function () { return chunkFIPS3VPH_cjs.AvatarFallback; }
6270
+ get: function () { return chunkIZPXHVPJ_cjs.AvatarFallback; }
7720
6271
  });
7721
6272
  Object.defineProperty(exports, "AvatarImage", {
7722
6273
  enumerable: true,
7723
- get: function () { return chunkFIPS3VPH_cjs.AvatarImage; }
6274
+ get: function () { return chunkIZPXHVPJ_cjs.AvatarImage; }
6275
+ });
6276
+ Object.defineProperty(exports, "BASE_COLORS", {
6277
+ enumerable: true,
6278
+ get: function () { return chunkIZPXHVPJ_cjs.BASE_COLORS; }
7724
6279
  });
7725
6280
  Object.defineProperty(exports, "Badge", {
7726
6281
  enumerable: true,
7727
- get: function () { return chunkFIPS3VPH_cjs.Badge; }
6282
+ get: function () { return chunkIZPXHVPJ_cjs.Badge; }
7728
6283
  });
7729
6284
  Object.defineProperty(exports, "Button", {
7730
6285
  enumerable: true,
7731
- get: function () { return chunkFIPS3VPH_cjs.Button; }
6286
+ get: function () { return chunkIZPXHVPJ_cjs.Button; }
7732
6287
  });
7733
6288
  Object.defineProperty(exports, "Card", {
7734
6289
  enumerable: true,
7735
- get: function () { return chunkFIPS3VPH_cjs.Card; }
6290
+ get: function () { return chunkIZPXHVPJ_cjs.Card; }
7736
6291
  });
7737
6292
  Object.defineProperty(exports, "CardContent", {
7738
6293
  enumerable: true,
7739
- get: function () { return chunkFIPS3VPH_cjs.CardContent; }
6294
+ get: function () { return chunkIZPXHVPJ_cjs.CardContent; }
7740
6295
  });
7741
6296
  Object.defineProperty(exports, "CardDescription", {
7742
6297
  enumerable: true,
7743
- get: function () { return chunkFIPS3VPH_cjs.CardDescription; }
6298
+ get: function () { return chunkIZPXHVPJ_cjs.CardDescription; }
7744
6299
  });
7745
6300
  Object.defineProperty(exports, "CardFooter", {
7746
6301
  enumerable: true,
7747
- get: function () { return chunkFIPS3VPH_cjs.CardFooter; }
6302
+ get: function () { return chunkIZPXHVPJ_cjs.CardFooter; }
7748
6303
  });
7749
6304
  Object.defineProperty(exports, "CardHeader", {
7750
6305
  enumerable: true,
7751
- get: function () { return chunkFIPS3VPH_cjs.CardHeader; }
6306
+ get: function () { return chunkIZPXHVPJ_cjs.CardHeader; }
7752
6307
  });
7753
6308
  Object.defineProperty(exports, "CardTitle", {
7754
6309
  enumerable: true,
7755
- get: function () { return chunkFIPS3VPH_cjs.CardTitle; }
6310
+ get: function () { return chunkIZPXHVPJ_cjs.CardTitle; }
7756
6311
  });
7757
6312
  Object.defineProperty(exports, "Checkbox", {
7758
6313
  enumerable: true,
7759
- get: function () { return chunkFIPS3VPH_cjs.Checkbox; }
6314
+ get: function () { return chunkIZPXHVPJ_cjs.Checkbox; }
7760
6315
  });
7761
6316
  Object.defineProperty(exports, "Collapsible", {
7762
6317
  enumerable: true,
7763
- get: function () { return chunkFIPS3VPH_cjs.Collapsible; }
6318
+ get: function () { return chunkIZPXHVPJ_cjs.Collapsible; }
7764
6319
  });
7765
6320
  Object.defineProperty(exports, "CollapsibleContent", {
7766
6321
  enumerable: true,
7767
- get: function () { return chunkFIPS3VPH_cjs.CollapsibleContent; }
6322
+ get: function () { return chunkIZPXHVPJ_cjs.CollapsibleContent; }
7768
6323
  });
7769
6324
  Object.defineProperty(exports, "CollapsibleTrigger", {
7770
6325
  enumerable: true,
7771
- get: function () { return chunkFIPS3VPH_cjs.CollapsibleTrigger; }
6326
+ get: function () { return chunkIZPXHVPJ_cjs.CollapsibleTrigger; }
7772
6327
  });
7773
6328
  Object.defineProperty(exports, "Command", {
7774
6329
  enumerable: true,
7775
- get: function () { return chunkFIPS3VPH_cjs.Command; }
6330
+ get: function () { return chunkIZPXHVPJ_cjs.Command; }
7776
6331
  });
7777
6332
  Object.defineProperty(exports, "CommandDialog", {
7778
6333
  enumerable: true,
7779
- get: function () { return chunkFIPS3VPH_cjs.CommandDialog; }
6334
+ get: function () { return chunkIZPXHVPJ_cjs.CommandDialog; }
7780
6335
  });
7781
6336
  Object.defineProperty(exports, "CommandEmpty", {
7782
6337
  enumerable: true,
7783
- get: function () { return chunkFIPS3VPH_cjs.CommandEmpty; }
6338
+ get: function () { return chunkIZPXHVPJ_cjs.CommandEmpty; }
7784
6339
  });
7785
6340
  Object.defineProperty(exports, "CommandGroup", {
7786
6341
  enumerable: true,
7787
- get: function () { return chunkFIPS3VPH_cjs.CommandGroup; }
6342
+ get: function () { return chunkIZPXHVPJ_cjs.CommandGroup; }
7788
6343
  });
7789
6344
  Object.defineProperty(exports, "CommandInput", {
7790
6345
  enumerable: true,
7791
- get: function () { return chunkFIPS3VPH_cjs.CommandInput; }
6346
+ get: function () { return chunkIZPXHVPJ_cjs.CommandInput; }
7792
6347
  });
7793
6348
  Object.defineProperty(exports, "CommandItem", {
7794
6349
  enumerable: true,
7795
- get: function () { return chunkFIPS3VPH_cjs.CommandItem; }
6350
+ get: function () { return chunkIZPXHVPJ_cjs.CommandItem; }
7796
6351
  });
7797
6352
  Object.defineProperty(exports, "CommandList", {
7798
6353
  enumerable: true,
7799
- get: function () { return chunkFIPS3VPH_cjs.CommandList; }
6354
+ get: function () { return chunkIZPXHVPJ_cjs.CommandList; }
7800
6355
  });
7801
6356
  Object.defineProperty(exports, "CommandSeparator", {
7802
6357
  enumerable: true,
7803
- get: function () { return chunkFIPS3VPH_cjs.CommandSeparator; }
6358
+ get: function () { return chunkIZPXHVPJ_cjs.CommandSeparator; }
7804
6359
  });
7805
6360
  Object.defineProperty(exports, "CommandShortcut", {
7806
6361
  enumerable: true,
7807
- get: function () { return chunkFIPS3VPH_cjs.CommandShortcut; }
6362
+ get: function () { return chunkIZPXHVPJ_cjs.CommandShortcut; }
7808
6363
  });
7809
6364
  Object.defineProperty(exports, "Dialog", {
7810
6365
  enumerable: true,
7811
- get: function () { return chunkFIPS3VPH_cjs.Dialog; }
6366
+ get: function () { return chunkIZPXHVPJ_cjs.Dialog; }
7812
6367
  });
7813
6368
  Object.defineProperty(exports, "DialogClose", {
7814
6369
  enumerable: true,
7815
- get: function () { return chunkFIPS3VPH_cjs.DialogClose; }
6370
+ get: function () { return chunkIZPXHVPJ_cjs.DialogClose; }
7816
6371
  });
7817
6372
  Object.defineProperty(exports, "DialogContent", {
7818
6373
  enumerable: true,
7819
- get: function () { return chunkFIPS3VPH_cjs.DialogContent; }
6374
+ get: function () { return chunkIZPXHVPJ_cjs.DialogContent; }
7820
6375
  });
7821
6376
  Object.defineProperty(exports, "DialogDescription", {
7822
6377
  enumerable: true,
7823
- get: function () { return chunkFIPS3VPH_cjs.DialogDescription; }
6378
+ get: function () { return chunkIZPXHVPJ_cjs.DialogDescription; }
7824
6379
  });
7825
6380
  Object.defineProperty(exports, "DialogFooter", {
7826
6381
  enumerable: true,
7827
- get: function () { return chunkFIPS3VPH_cjs.DialogFooter; }
6382
+ get: function () { return chunkIZPXHVPJ_cjs.DialogFooter; }
7828
6383
  });
7829
6384
  Object.defineProperty(exports, "DialogHeader", {
7830
6385
  enumerable: true,
7831
- get: function () { return chunkFIPS3VPH_cjs.DialogHeader; }
6386
+ get: function () { return chunkIZPXHVPJ_cjs.DialogHeader; }
7832
6387
  });
7833
6388
  Object.defineProperty(exports, "DialogOverlay", {
7834
6389
  enumerable: true,
7835
- get: function () { return chunkFIPS3VPH_cjs.DialogOverlay; }
6390
+ get: function () { return chunkIZPXHVPJ_cjs.DialogOverlay; }
7836
6391
  });
7837
6392
  Object.defineProperty(exports, "DialogPortal", {
7838
6393
  enumerable: true,
7839
- get: function () { return chunkFIPS3VPH_cjs.DialogPortal; }
6394
+ get: function () { return chunkIZPXHVPJ_cjs.DialogPortal; }
7840
6395
  });
7841
6396
  Object.defineProperty(exports, "DialogTitle", {
7842
6397
  enumerable: true,
7843
- get: function () { return chunkFIPS3VPH_cjs.DialogTitle; }
6398
+ get: function () { return chunkIZPXHVPJ_cjs.DialogTitle; }
7844
6399
  });
7845
6400
  Object.defineProperty(exports, "DialogTrigger", {
7846
6401
  enumerable: true,
7847
- get: function () { return chunkFIPS3VPH_cjs.DialogTrigger; }
6402
+ get: function () { return chunkIZPXHVPJ_cjs.DialogTrigger; }
7848
6403
  });
7849
6404
  Object.defineProperty(exports, "DictateProvider", {
7850
6405
  enumerable: true,
7851
- get: function () { return chunkFIPS3VPH_cjs.DictateProvider; }
6406
+ get: function () { return chunkIZPXHVPJ_cjs.DictateProvider; }
6407
+ });
6408
+ Object.defineProperty(exports, "DocumentEntity", {
6409
+ enumerable: true,
6410
+ get: function () { return chunkIZPXHVPJ_cjs.DocumentEntity; }
7852
6411
  });
7853
6412
  Object.defineProperty(exports, "DropdownMenu", {
7854
6413
  enumerable: true,
7855
- get: function () { return chunkFIPS3VPH_cjs.DropdownMenu; }
6414
+ get: function () { return chunkIZPXHVPJ_cjs.DropdownMenu; }
7856
6415
  });
7857
6416
  Object.defineProperty(exports, "DropdownMenuCheckboxItem", {
7858
6417
  enumerable: true,
7859
- get: function () { return chunkFIPS3VPH_cjs.DropdownMenuCheckboxItem; }
6418
+ get: function () { return chunkIZPXHVPJ_cjs.DropdownMenuCheckboxItem; }
7860
6419
  });
7861
6420
  Object.defineProperty(exports, "DropdownMenuContent", {
7862
6421
  enumerable: true,
7863
- get: function () { return chunkFIPS3VPH_cjs.DropdownMenuContent; }
6422
+ get: function () { return chunkIZPXHVPJ_cjs.DropdownMenuContent; }
7864
6423
  });
7865
6424
  Object.defineProperty(exports, "DropdownMenuGroup", {
7866
6425
  enumerable: true,
7867
- get: function () { return chunkFIPS3VPH_cjs.DropdownMenuGroup; }
6426
+ get: function () { return chunkIZPXHVPJ_cjs.DropdownMenuGroup; }
7868
6427
  });
7869
6428
  Object.defineProperty(exports, "DropdownMenuItem", {
7870
6429
  enumerable: true,
7871
- get: function () { return chunkFIPS3VPH_cjs.DropdownMenuItem; }
6430
+ get: function () { return chunkIZPXHVPJ_cjs.DropdownMenuItem; }
7872
6431
  });
7873
6432
  Object.defineProperty(exports, "DropdownMenuLabel", {
7874
6433
  enumerable: true,
7875
- get: function () { return chunkFIPS3VPH_cjs.DropdownMenuLabel; }
6434
+ get: function () { return chunkIZPXHVPJ_cjs.DropdownMenuLabel; }
7876
6435
  });
7877
6436
  Object.defineProperty(exports, "DropdownMenuPortal", {
7878
6437
  enumerable: true,
7879
- get: function () { return chunkFIPS3VPH_cjs.DropdownMenuPortal; }
6438
+ get: function () { return chunkIZPXHVPJ_cjs.DropdownMenuPortal; }
7880
6439
  });
7881
6440
  Object.defineProperty(exports, "DropdownMenuRadioGroup", {
7882
6441
  enumerable: true,
7883
- get: function () { return chunkFIPS3VPH_cjs.DropdownMenuRadioGroup; }
6442
+ get: function () { return chunkIZPXHVPJ_cjs.DropdownMenuRadioGroup; }
7884
6443
  });
7885
6444
  Object.defineProperty(exports, "DropdownMenuRadioItem", {
7886
6445
  enumerable: true,
7887
- get: function () { return chunkFIPS3VPH_cjs.DropdownMenuRadioItem; }
6446
+ get: function () { return chunkIZPXHVPJ_cjs.DropdownMenuRadioItem; }
7888
6447
  });
7889
6448
  Object.defineProperty(exports, "DropdownMenuSeparator", {
7890
6449
  enumerable: true,
7891
- get: function () { return chunkFIPS3VPH_cjs.DropdownMenuSeparator; }
6450
+ get: function () { return chunkIZPXHVPJ_cjs.DropdownMenuSeparator; }
7892
6451
  });
7893
6452
  Object.defineProperty(exports, "DropdownMenuShortcut", {
7894
6453
  enumerable: true,
7895
- get: function () { return chunkFIPS3VPH_cjs.DropdownMenuShortcut; }
6454
+ get: function () { return chunkIZPXHVPJ_cjs.DropdownMenuShortcut; }
7896
6455
  });
7897
6456
  Object.defineProperty(exports, "DropdownMenuSub", {
7898
6457
  enumerable: true,
7899
- get: function () { return chunkFIPS3VPH_cjs.DropdownMenuSub; }
6458
+ get: function () { return chunkIZPXHVPJ_cjs.DropdownMenuSub; }
7900
6459
  });
7901
6460
  Object.defineProperty(exports, "DropdownMenuSubContent", {
7902
6461
  enumerable: true,
7903
- get: function () { return chunkFIPS3VPH_cjs.DropdownMenuSubContent; }
6462
+ get: function () { return chunkIZPXHVPJ_cjs.DropdownMenuSubContent; }
7904
6463
  });
7905
6464
  Object.defineProperty(exports, "DropdownMenuSubTrigger", {
7906
6465
  enumerable: true,
7907
- get: function () { return chunkFIPS3VPH_cjs.DropdownMenuSubTrigger; }
6466
+ get: function () { return chunkIZPXHVPJ_cjs.DropdownMenuSubTrigger; }
7908
6467
  });
7909
6468
  Object.defineProperty(exports, "DropdownMenuTrigger", {
7910
6469
  enumerable: true,
7911
- get: function () { return chunkFIPS3VPH_cjs.DropdownMenuTrigger; }
6470
+ get: function () { return chunkIZPXHVPJ_cjs.DropdownMenuTrigger; }
6471
+ });
6472
+ Object.defineProperty(exports, "ENTITY_MAPPINGS", {
6473
+ enumerable: true,
6474
+ get: function () { return chunkIZPXHVPJ_cjs.ENTITY_MAPPINGS; }
6475
+ });
6476
+ Object.defineProperty(exports, "EmlIcon", {
6477
+ enumerable: true,
6478
+ get: function () { return chunkIZPXHVPJ_cjs.EmlIcon; }
6479
+ });
6480
+ Object.defineProperty(exports, "EntityIcon", {
6481
+ enumerable: true,
6482
+ get: function () { return chunkIZPXHVPJ_cjs.EntityIcon; }
6483
+ });
6484
+ Object.defineProperty(exports, "EntityPill", {
6485
+ enumerable: true,
6486
+ get: function () { return chunkIZPXHVPJ_cjs.EntityPill; }
6487
+ });
6488
+ Object.defineProperty(exports, "FILE_TYPE_COLORS", {
6489
+ enumerable: true,
6490
+ get: function () { return chunkIZPXHVPJ_cjs.FILE_TYPE_COLORS; }
7912
6491
  });
7913
6492
  Object.defineProperty(exports, "HoverCard", {
7914
6493
  enumerable: true,
7915
- get: function () { return chunkFIPS3VPH_cjs.HoverCard; }
6494
+ get: function () { return chunkIZPXHVPJ_cjs.HoverCard; }
7916
6495
  });
7917
6496
  Object.defineProperty(exports, "HoverCardContent", {
7918
6497
  enumerable: true,
7919
- get: function () { return chunkFIPS3VPH_cjs.HoverCardContent; }
6498
+ get: function () { return chunkIZPXHVPJ_cjs.HoverCardContent; }
7920
6499
  });
7921
6500
  Object.defineProperty(exports, "HoverCardTrigger", {
7922
6501
  enumerable: true,
7923
- get: function () { return chunkFIPS3VPH_cjs.HoverCardTrigger; }
6502
+ get: function () { return chunkIZPXHVPJ_cjs.HoverCardTrigger; }
7924
6503
  });
7925
6504
  Object.defineProperty(exports, "IconToggle", {
7926
6505
  enumerable: true,
7927
- get: function () { return chunkFIPS3VPH_cjs.IconToggle; }
6506
+ get: function () { return chunkIZPXHVPJ_cjs.IconToggle; }
6507
+ });
6508
+ Object.defineProperty(exports, "ImgIcon", {
6509
+ enumerable: true,
6510
+ get: function () { return chunkIZPXHVPJ_cjs.ImgIcon; }
7928
6511
  });
7929
6512
  Object.defineProperty(exports, "InlineMicButton", {
7930
6513
  enumerable: true,
7931
- get: function () { return chunkFIPS3VPH_cjs.InlineMicButton; }
6514
+ get: function () { return chunkIZPXHVPJ_cjs.InlineMicButton; }
7932
6515
  });
7933
6516
  Object.defineProperty(exports, "Input", {
7934
6517
  enumerable: true,
7935
- get: function () { return chunkFIPS3VPH_cjs.Input; }
6518
+ get: function () { return chunkIZPXHVPJ_cjs.Input; }
7936
6519
  });
7937
6520
  Object.defineProperty(exports, "Label", {
7938
6521
  enumerable: true,
7939
- get: function () { return chunkFIPS3VPH_cjs.Label; }
6522
+ get: function () { return chunkIZPXHVPJ_cjs.Label; }
7940
6523
  });
7941
6524
  Object.defineProperty(exports, "MarkdownRenderer", {
7942
6525
  enumerable: true,
7943
- get: function () { return chunkFIPS3VPH_cjs.MarkdownRenderer; }
6526
+ get: function () { return chunkIZPXHVPJ_cjs.MarkdownRenderer; }
7944
6527
  });
7945
6528
  Object.defineProperty(exports, "MarkdownStreamingContext", {
7946
6529
  enumerable: true,
7947
- get: function () { return chunkFIPS3VPH_cjs.MarkdownStreamingContext; }
6530
+ get: function () { return chunkIZPXHVPJ_cjs.MarkdownStreamingContext; }
7948
6531
  });
7949
6532
  Object.defineProperty(exports, "MicRecordingOverlay", {
7950
6533
  enumerable: true,
7951
- get: function () { return chunkFIPS3VPH_cjs.MicRecordingOverlay; }
6534
+ get: function () { return chunkIZPXHVPJ_cjs.MicRecordingOverlay; }
7952
6535
  });
7953
6536
  Object.defineProperty(exports, "MicWaveformIndicator", {
7954
6537
  enumerable: true,
7955
- get: function () { return chunkFIPS3VPH_cjs.MicWaveformIndicator; }
6538
+ get: function () { return chunkIZPXHVPJ_cjs.MicWaveformIndicator; }
6539
+ });
6540
+ Object.defineProperty(exports, "NEUTRAL_GRAY", {
6541
+ enumerable: true,
6542
+ get: function () { return chunkIZPXHVPJ_cjs.NEUTRAL_GRAY; }
6543
+ });
6544
+ Object.defineProperty(exports, "PLACEHOLDER_COLOR", {
6545
+ enumerable: true,
6546
+ get: function () { return chunkIZPXHVPJ_cjs.PLACEHOLDER_COLOR; }
6547
+ });
6548
+ Object.defineProperty(exports, "PdfIcon", {
6549
+ enumerable: true,
6550
+ get: function () { return chunkIZPXHVPJ_cjs.PdfIcon; }
7956
6551
  });
7957
6552
  Object.defineProperty(exports, "Popover", {
7958
6553
  enumerable: true,
7959
- get: function () { return chunkFIPS3VPH_cjs.Popover; }
6554
+ get: function () { return chunkIZPXHVPJ_cjs.Popover; }
7960
6555
  });
7961
6556
  Object.defineProperty(exports, "PopoverAnchor", {
7962
6557
  enumerable: true,
7963
- get: function () { return chunkFIPS3VPH_cjs.PopoverAnchor; }
6558
+ get: function () { return chunkIZPXHVPJ_cjs.PopoverAnchor; }
7964
6559
  });
7965
6560
  Object.defineProperty(exports, "PopoverContent", {
7966
6561
  enumerable: true,
7967
- get: function () { return chunkFIPS3VPH_cjs.PopoverContent; }
6562
+ get: function () { return chunkIZPXHVPJ_cjs.PopoverContent; }
7968
6563
  });
7969
6564
  Object.defineProperty(exports, "PopoverTrigger", {
7970
6565
  enumerable: true,
7971
- get: function () { return chunkFIPS3VPH_cjs.PopoverTrigger; }
6566
+ get: function () { return chunkIZPXHVPJ_cjs.PopoverTrigger; }
6567
+ });
6568
+ Object.defineProperty(exports, "PresenceLabel", {
6569
+ enumerable: true,
6570
+ get: function () { return chunkIZPXHVPJ_cjs.PresenceLabel; }
7972
6571
  });
7973
6572
  Object.defineProperty(exports, "Progress", {
7974
6573
  enumerable: true,
7975
- get: function () { return chunkFIPS3VPH_cjs.Progress; }
6574
+ get: function () { return chunkIZPXHVPJ_cjs.Progress; }
6575
+ });
6576
+ Object.defineProperty(exports, "ProjectEntity", {
6577
+ enumerable: true,
6578
+ get: function () { return chunkIZPXHVPJ_cjs.ProjectEntity; }
7976
6579
  });
7977
6580
  Object.defineProperty(exports, "RadioGroup", {
7978
6581
  enumerable: true,
7979
- get: function () { return chunkFIPS3VPH_cjs.RadioGroup; }
6582
+ get: function () { return chunkIZPXHVPJ_cjs.RadioGroup; }
7980
6583
  });
7981
6584
  Object.defineProperty(exports, "RadioGroupItem", {
7982
6585
  enumerable: true,
7983
- get: function () { return chunkFIPS3VPH_cjs.RadioGroupItem; }
6586
+ get: function () { return chunkIZPXHVPJ_cjs.RadioGroupItem; }
6587
+ });
6588
+ Object.defineProperty(exports, "RagDot", {
6589
+ enumerable: true,
6590
+ get: function () { return chunkIZPXHVPJ_cjs.RagDot; }
7984
6591
  });
7985
6592
  Object.defineProperty(exports, "ScrollArea", {
7986
6593
  enumerable: true,
7987
- get: function () { return chunkFIPS3VPH_cjs.ScrollArea; }
6594
+ get: function () { return chunkIZPXHVPJ_cjs.ScrollArea; }
7988
6595
  });
7989
6596
  Object.defineProperty(exports, "ScrollBar", {
7990
6597
  enumerable: true,
7991
- get: function () { return chunkFIPS3VPH_cjs.ScrollBar; }
6598
+ get: function () { return chunkIZPXHVPJ_cjs.ScrollBar; }
7992
6599
  });
7993
6600
  Object.defineProperty(exports, "Select", {
7994
6601
  enumerable: true,
7995
- get: function () { return chunkFIPS3VPH_cjs.Select; }
6602
+ get: function () { return chunkIZPXHVPJ_cjs.Select; }
7996
6603
  });
7997
6604
  Object.defineProperty(exports, "SelectContent", {
7998
6605
  enumerable: true,
7999
- get: function () { return chunkFIPS3VPH_cjs.SelectContent; }
6606
+ get: function () { return chunkIZPXHVPJ_cjs.SelectContent; }
8000
6607
  });
8001
6608
  Object.defineProperty(exports, "SelectGroup", {
8002
6609
  enumerable: true,
8003
- get: function () { return chunkFIPS3VPH_cjs.SelectGroup; }
6610
+ get: function () { return chunkIZPXHVPJ_cjs.SelectGroup; }
8004
6611
  });
8005
6612
  Object.defineProperty(exports, "SelectItem", {
8006
6613
  enumerable: true,
8007
- get: function () { return chunkFIPS3VPH_cjs.SelectItem; }
6614
+ get: function () { return chunkIZPXHVPJ_cjs.SelectItem; }
8008
6615
  });
8009
6616
  Object.defineProperty(exports, "SelectLabel", {
8010
6617
  enumerable: true,
8011
- get: function () { return chunkFIPS3VPH_cjs.SelectLabel; }
6618
+ get: function () { return chunkIZPXHVPJ_cjs.SelectLabel; }
8012
6619
  });
8013
6620
  Object.defineProperty(exports, "SelectScrollDownButton", {
8014
6621
  enumerable: true,
8015
- get: function () { return chunkFIPS3VPH_cjs.SelectScrollDownButton; }
6622
+ get: function () { return chunkIZPXHVPJ_cjs.SelectScrollDownButton; }
8016
6623
  });
8017
6624
  Object.defineProperty(exports, "SelectScrollUpButton", {
8018
6625
  enumerable: true,
8019
- get: function () { return chunkFIPS3VPH_cjs.SelectScrollUpButton; }
6626
+ get: function () { return chunkIZPXHVPJ_cjs.SelectScrollUpButton; }
8020
6627
  });
8021
6628
  Object.defineProperty(exports, "SelectSeparator", {
8022
6629
  enumerable: true,
8023
- get: function () { return chunkFIPS3VPH_cjs.SelectSeparator; }
6630
+ get: function () { return chunkIZPXHVPJ_cjs.SelectSeparator; }
8024
6631
  });
8025
6632
  Object.defineProperty(exports, "SelectTrigger", {
8026
6633
  enumerable: true,
8027
- get: function () { return chunkFIPS3VPH_cjs.SelectTrigger; }
6634
+ get: function () { return chunkIZPXHVPJ_cjs.SelectTrigger; }
8028
6635
  });
8029
6636
  Object.defineProperty(exports, "SelectValue", {
8030
6637
  enumerable: true,
8031
- get: function () { return chunkFIPS3VPH_cjs.SelectValue; }
6638
+ get: function () { return chunkIZPXHVPJ_cjs.SelectValue; }
8032
6639
  });
8033
6640
  Object.defineProperty(exports, "Separator", {
8034
6641
  enumerable: true,
8035
- get: function () { return chunkFIPS3VPH_cjs.Separator; }
6642
+ get: function () { return chunkIZPXHVPJ_cjs.Separator; }
8036
6643
  });
8037
6644
  Object.defineProperty(exports, "Slider", {
8038
6645
  enumerable: true,
8039
- get: function () { return chunkFIPS3VPH_cjs.Slider; }
6646
+ get: function () { return chunkIZPXHVPJ_cjs.Slider; }
6647
+ });
6648
+ Object.defineProperty(exports, "StatusPill", {
6649
+ enumerable: true,
6650
+ get: function () { return chunkIZPXHVPJ_cjs.StatusPill; }
8040
6651
  });
8041
6652
  Object.defineProperty(exports, "Switch", {
8042
6653
  enumerable: true,
8043
- get: function () { return chunkFIPS3VPH_cjs.Switch; }
6654
+ get: function () { return chunkIZPXHVPJ_cjs.Switch; }
6655
+ });
6656
+ Object.defineProperty(exports, "TAG_TYPE_ICONS", {
6657
+ enumerable: true,
6658
+ get: function () { return chunkIZPXHVPJ_cjs.TAG_TYPE_ICONS; }
6659
+ });
6660
+ Object.defineProperty(exports, "TAG_TYPE_LABELS", {
6661
+ enumerable: true,
6662
+ get: function () { return chunkIZPXHVPJ_cjs.TAG_TYPE_LABELS; }
8044
6663
  });
8045
6664
  Object.defineProperty(exports, "Table", {
8046
6665
  enumerable: true,
8047
- get: function () { return chunkFIPS3VPH_cjs.Table; }
6666
+ get: function () { return chunkIZPXHVPJ_cjs.Table; }
8048
6667
  });
8049
6668
  Object.defineProperty(exports, "TableBody", {
8050
6669
  enumerable: true,
8051
- get: function () { return chunkFIPS3VPH_cjs.TableBody; }
6670
+ get: function () { return chunkIZPXHVPJ_cjs.TableBody; }
8052
6671
  });
8053
6672
  Object.defineProperty(exports, "TableCaption", {
8054
6673
  enumerable: true,
8055
- get: function () { return chunkFIPS3VPH_cjs.TableCaption; }
6674
+ get: function () { return chunkIZPXHVPJ_cjs.TableCaption; }
8056
6675
  });
8057
6676
  Object.defineProperty(exports, "TableCell", {
8058
6677
  enumerable: true,
8059
- get: function () { return chunkFIPS3VPH_cjs.TableCell; }
6678
+ get: function () { return chunkIZPXHVPJ_cjs.TableCell; }
8060
6679
  });
8061
6680
  Object.defineProperty(exports, "TableFooter", {
8062
6681
  enumerable: true,
8063
- get: function () { return chunkFIPS3VPH_cjs.TableFooter; }
6682
+ get: function () { return chunkIZPXHVPJ_cjs.TableFooter; }
8064
6683
  });
8065
6684
  Object.defineProperty(exports, "TableHead", {
8066
6685
  enumerable: true,
8067
- get: function () { return chunkFIPS3VPH_cjs.TableHead; }
6686
+ get: function () { return chunkIZPXHVPJ_cjs.TableHead; }
8068
6687
  });
8069
6688
  Object.defineProperty(exports, "TableHeader", {
8070
6689
  enumerable: true,
8071
- get: function () { return chunkFIPS3VPH_cjs.TableHeader; }
6690
+ get: function () { return chunkIZPXHVPJ_cjs.TableHeader; }
8072
6691
  });
8073
6692
  Object.defineProperty(exports, "TableRow", {
8074
6693
  enumerable: true,
8075
- get: function () { return chunkFIPS3VPH_cjs.TableRow; }
6694
+ get: function () { return chunkIZPXHVPJ_cjs.TableRow; }
8076
6695
  });
8077
6696
  Object.defineProperty(exports, "Tabs", {
8078
6697
  enumerable: true,
8079
- get: function () { return chunkFIPS3VPH_cjs.Tabs; }
6698
+ get: function () { return chunkIZPXHVPJ_cjs.Tabs; }
8080
6699
  });
8081
6700
  Object.defineProperty(exports, "TabsContent", {
8082
6701
  enumerable: true,
8083
- get: function () { return chunkFIPS3VPH_cjs.TabsContent; }
6702
+ get: function () { return chunkIZPXHVPJ_cjs.TabsContent; }
8084
6703
  });
8085
6704
  Object.defineProperty(exports, "TabsList", {
8086
6705
  enumerable: true,
8087
- get: function () { return chunkFIPS3VPH_cjs.TabsList; }
6706
+ get: function () { return chunkIZPXHVPJ_cjs.TabsList; }
8088
6707
  });
8089
6708
  Object.defineProperty(exports, "TabsTrigger", {
8090
6709
  enumerable: true,
8091
- get: function () { return chunkFIPS3VPH_cjs.TabsTrigger; }
6710
+ get: function () { return chunkIZPXHVPJ_cjs.TabsTrigger; }
6711
+ });
6712
+ Object.defineProperty(exports, "TagEntity", {
6713
+ enumerable: true,
6714
+ get: function () { return chunkIZPXHVPJ_cjs.TagEntity; }
8092
6715
  });
8093
6716
  Object.defineProperty(exports, "Textarea", {
8094
6717
  enumerable: true,
8095
- get: function () { return chunkFIPS3VPH_cjs.Textarea; }
6718
+ get: function () { return chunkIZPXHVPJ_cjs.Textarea; }
8096
6719
  });
8097
6720
  Object.defineProperty(exports, "Toggle", {
8098
6721
  enumerable: true,
8099
- get: function () { return chunkFIPS3VPH_cjs.Toggle; }
6722
+ get: function () { return chunkIZPXHVPJ_cjs.Toggle; }
8100
6723
  });
8101
6724
  Object.defineProperty(exports, "ToggleGroup", {
8102
6725
  enumerable: true,
8103
- get: function () { return chunkFIPS3VPH_cjs.ToggleGroup; }
6726
+ get: function () { return chunkIZPXHVPJ_cjs.ToggleGroup; }
8104
6727
  });
8105
6728
  Object.defineProperty(exports, "ToggleGroupItem", {
8106
6729
  enumerable: true,
8107
- get: function () { return chunkFIPS3VPH_cjs.ToggleGroupItem; }
6730
+ get: function () { return chunkIZPXHVPJ_cjs.ToggleGroupItem; }
8108
6731
  });
8109
6732
  Object.defineProperty(exports, "Tooltip", {
8110
6733
  enumerable: true,
8111
- get: function () { return chunkFIPS3VPH_cjs.Tooltip; }
6734
+ get: function () { return chunkIZPXHVPJ_cjs.Tooltip; }
8112
6735
  });
8113
6736
  Object.defineProperty(exports, "TooltipContent", {
8114
6737
  enumerable: true,
8115
- get: function () { return chunkFIPS3VPH_cjs.TooltipContent; }
6738
+ get: function () { return chunkIZPXHVPJ_cjs.TooltipContent; }
8116
6739
  });
8117
6740
  Object.defineProperty(exports, "TooltipProvider", {
8118
6741
  enumerable: true,
8119
- get: function () { return chunkFIPS3VPH_cjs.TooltipProvider; }
6742
+ get: function () { return chunkIZPXHVPJ_cjs.TooltipProvider; }
8120
6743
  });
8121
6744
  Object.defineProperty(exports, "TooltipTrigger", {
8122
6745
  enumerable: true,
8123
- get: function () { return chunkFIPS3VPH_cjs.TooltipTrigger; }
6746
+ get: function () { return chunkIZPXHVPJ_cjs.TooltipTrigger; }
6747
+ });
6748
+ Object.defineProperty(exports, "UserEntity", {
6749
+ enumerable: true,
6750
+ get: function () { return chunkIZPXHVPJ_cjs.UserEntity; }
6751
+ });
6752
+ Object.defineProperty(exports, "VISIBILITY_ICONS", {
6753
+ enumerable: true,
6754
+ get: function () { return chunkIZPXHVPJ_cjs.VISIBILITY_ICONS; }
6755
+ });
6756
+ Object.defineProperty(exports, "VidIcon", {
6757
+ enumerable: true,
6758
+ get: function () { return chunkIZPXHVPJ_cjs.VidIcon; }
6759
+ });
6760
+ Object.defineProperty(exports, "VisibilityIcon", {
6761
+ enumerable: true,
6762
+ get: function () { return chunkIZPXHVPJ_cjs.VisibilityIcon; }
8124
6763
  });
8125
6764
  Object.defineProperty(exports, "badgeVariants", {
8126
6765
  enumerable: true,
8127
- get: function () { return chunkFIPS3VPH_cjs.badgeVariants; }
6766
+ get: function () { return chunkIZPXHVPJ_cjs.badgeVariants; }
8128
6767
  });
8129
6768
  Object.defineProperty(exports, "buttonVariants", {
8130
6769
  enumerable: true,
8131
- get: function () { return chunkFIPS3VPH_cjs.buttonVariants; }
6770
+ get: function () { return chunkIZPXHVPJ_cjs.buttonVariants; }
8132
6771
  });
8133
6772
  Object.defineProperty(exports, "cardVariants", {
8134
6773
  enumerable: true,
8135
- get: function () { return chunkFIPS3VPH_cjs.cardVariants; }
6774
+ get: function () { return chunkIZPXHVPJ_cjs.cardVariants; }
8136
6775
  });
8137
6776
  Object.defineProperty(exports, "cn", {
8138
6777
  enumerable: true,
8139
- get: function () { return chunkFIPS3VPH_cjs.cn; }
6778
+ get: function () { return chunkIZPXHVPJ_cjs.cn; }
6779
+ });
6780
+ Object.defineProperty(exports, "configureEntityRegistry", {
6781
+ enumerable: true,
6782
+ get: function () { return chunkIZPXHVPJ_cjs.configureEntityRegistry; }
6783
+ });
6784
+ Object.defineProperty(exports, "configureRagLabels", {
6785
+ enumerable: true,
6786
+ get: function () { return chunkIZPXHVPJ_cjs.configureRagLabels; }
6787
+ });
6788
+ Object.defineProperty(exports, "configureStatusRegistry", {
6789
+ enumerable: true,
6790
+ get: function () { return chunkIZPXHVPJ_cjs.configureStatusRegistry; }
8140
6791
  });
8141
6792
  Object.defineProperty(exports, "formatElapsed", {
8142
6793
  enumerable: true,
8143
- get: function () { return chunkFIPS3VPH_cjs.formatElapsed; }
6794
+ get: function () { return chunkIZPXHVPJ_cjs.formatElapsed; }
6795
+ });
6796
+ Object.defineProperty(exports, "getDocIcon", {
6797
+ enumerable: true,
6798
+ get: function () { return chunkIZPXHVPJ_cjs.getDocIcon; }
6799
+ });
6800
+ Object.defineProperty(exports, "getEntityColor", {
6801
+ enumerable: true,
6802
+ get: function () { return chunkIZPXHVPJ_cjs.getEntityColor; }
6803
+ });
6804
+ Object.defineProperty(exports, "getEntityColorStyles", {
6805
+ enumerable: true,
6806
+ get: function () { return chunkIZPXHVPJ_cjs.getEntityColorStyles; }
6807
+ });
6808
+ Object.defineProperty(exports, "getEntityIcon", {
6809
+ enumerable: true,
6810
+ get: function () { return chunkIZPXHVPJ_cjs.getEntityIcon; }
6811
+ });
6812
+ Object.defineProperty(exports, "getEntityLabel", {
6813
+ enumerable: true,
6814
+ get: function () { return chunkIZPXHVPJ_cjs.getEntityLabel; }
6815
+ });
6816
+ Object.defineProperty(exports, "getStatusVariant", {
6817
+ enumerable: true,
6818
+ get: function () { return chunkIZPXHVPJ_cjs.getStatusVariant; }
6819
+ });
6820
+ Object.defineProperty(exports, "getTagTypeIcon", {
6821
+ enumerable: true,
6822
+ get: function () { return chunkIZPXHVPJ_cjs.getTagTypeIcon; }
6823
+ });
6824
+ Object.defineProperty(exports, "getTagTypeLabel", {
6825
+ enumerable: true,
6826
+ get: function () { return chunkIZPXHVPJ_cjs.getTagTypeLabel; }
6827
+ });
6828
+ Object.defineProperty(exports, "getWorkspaceColor", {
6829
+ enumerable: true,
6830
+ get: function () { return chunkIZPXHVPJ_cjs.getWorkspaceColor; }
8144
6831
  });
8145
6832
  Object.defineProperty(exports, "markdownBaseComponents", {
8146
6833
  enumerable: true,
8147
- get: function () { return chunkFIPS3VPH_cjs.markdownBaseComponents; }
6834
+ get: function () { return chunkIZPXHVPJ_cjs.markdownBaseComponents; }
8148
6835
  });
8149
6836
  Object.defineProperty(exports, "splitMarkdownBlocks", {
8150
6837
  enumerable: true,
8151
- get: function () { return chunkFIPS3VPH_cjs.splitMarkdownBlocks; }
6838
+ get: function () { return chunkIZPXHVPJ_cjs.splitMarkdownBlocks; }
8152
6839
  });
8153
6840
  Object.defineProperty(exports, "toggleVariants", {
8154
6841
  enumerable: true,
8155
- get: function () { return chunkFIPS3VPH_cjs.toggleVariants; }
6842
+ get: function () { return chunkIZPXHVPJ_cjs.toggleVariants; }
8156
6843
  });
8157
6844
  Object.defineProperty(exports, "useAudioRecorder", {
8158
6845
  enumerable: true,
8159
- get: function () { return chunkFIPS3VPH_cjs.useAudioRecorder; }
6846
+ get: function () { return chunkIZPXHVPJ_cjs.useAudioRecorder; }
8160
6847
  });
8161
6848
  Object.defineProperty(exports, "ArbiProvider", {
8162
6849
  enumerable: true,
@@ -8178,24 +6865,16 @@ Object.defineProperty(exports, "isMessageType", {
8178
6865
  enumerable: true,
8179
6866
  get: function () { return client.isMessageType; }
8180
6867
  });
8181
- Object.defineProperty(exports, "toast", {
8182
- enumerable: true,
8183
- get: function () { return sonner.toast; }
8184
- });
8185
6868
  exports.ActivityFeed = ActivityFeed;
8186
- exports.AgentBadge = AgentBadge;
8187
6869
  exports.AiActionCard = AiActionCard;
8188
6870
  exports.AiAnswer = AiAnswer;
8189
6871
  exports.AppleIcon = AppleIcon;
8190
- exports.ArbiBotHeadIcon = ArbiBotHeadIcon;
8191
6872
  exports.ArbiBotIcon = ArbiBotIcon;
8192
6873
  exports.ArbiChat = ArbiChat;
8193
6874
  exports.ArbiChatPanel = ArbiChatPanel;
8194
6875
  exports.ArbiIcon = ArbiIcon;
8195
6876
  exports.ArbiWebSocketProvider = ArbiWebSocketProvider;
8196
6877
  exports.ArtifactCanvas = ArtifactCanvas;
8197
- exports.AudIcon = AudIcon;
8198
- exports.BASE_COLORS = BASE_COLORS2;
8199
6878
  exports.ChatBubble = ChatBubble;
8200
6879
  exports.CitationRenderer = CitationRenderer;
8201
6880
  exports.ClaudeIcon = ClaudeIcon;
@@ -8203,7 +6882,6 @@ exports.CommandPalette = CommandPalette;
8203
6882
  exports.CommandPaletteProvider = CommandPaletteProvider;
8204
6883
  exports.ConversationList = ConversationList;
8205
6884
  exports.DEFAULT_ASPECT_OPTIONS = DEFAULT_ASPECT_OPTIONS;
8206
- exports.DEFAULT_NOTIFY_TONE = DEFAULT_NOTIFY_TONE;
8207
6885
  exports.DateSeparator = DateSeparator;
8208
6886
  exports.DirectMessages = DirectMessages;
8209
6887
  exports.DmAvatar = DmAvatar;
@@ -8213,16 +6891,10 @@ exports.DocQaPanel = DocQaPanel;
8213
6891
  exports.DocSearch = DocSearch;
8214
6892
  exports.DocumentCard = DocumentCard;
8215
6893
  exports.DocumentCardMenu = DocumentCardMenu;
8216
- exports.DocumentEntity = DocumentEntity;
8217
6894
  exports.DocumentGallery = DocumentGallery;
8218
6895
  exports.DocumentReview = DocumentReview;
8219
6896
  exports.DocumentTable = DocumentTable;
8220
6897
  exports.DraftTitleControls = DraftTitleControls;
8221
- exports.ENTITY_MAPPINGS = ENTITY_MAPPINGS;
8222
- exports.EmlIcon = EmlIcon;
8223
- exports.EntityIcon = EntityIcon;
8224
- exports.EntityPill = EntityPill;
8225
- exports.FILE_TYPE_COLORS = FILE_TYPE_COLORS;
8226
6898
  exports.FileIcon = FileIcon;
8227
6899
  exports.FireworksIcon = FireworksIcon;
8228
6900
  exports.GeminiIcon = GeminiIcon;
@@ -8231,69 +6903,38 @@ exports.GoogleIcon = GoogleIcon;
8231
6903
  exports.HtmlIcon = HtmlIcon;
8232
6904
  exports.ImageCropModal = ImageCropModal;
8233
6905
  exports.ImageCropper = ImageCropper;
8234
- exports.ImgIcon = ImgIcon;
8235
6906
  exports.LinkedInIcon = LinkedInIcon;
8236
6907
  exports.MessageArtifactCard = MessageArtifactCard;
8237
6908
  exports.MessageBubble = MessageBubble2;
8238
6909
  exports.MessageThread = MessageThread;
8239
- exports.NEUTRAL_GRAY = NEUTRAL_GRAY2;
8240
6910
  exports.NotificationBell = NotificationBell;
8241
6911
  exports.OpenAIIcon = OpenAIIcon;
8242
- exports.PLACEHOLDER_COLOR = PLACEHOLDER_COLOR;
8243
6912
  exports.PassageCard = PassageCard;
8244
- exports.PdfIcon = PdfIcon;
8245
6913
  exports.PhotoCapture = PhotoCapture;
8246
- exports.PresenceLabel = PresenceLabel;
8247
- exports.ProjectEntity = ProjectEntity;
8248
6914
  exports.ProviderIcon = ProviderIcon;
8249
6915
  exports.RUN_WINDOW_MS = RUN_WINDOW_MS;
8250
- exports.RagDot = RagDot;
8251
6916
  exports.RelevanceDot = RelevanceDot;
8252
6917
  exports.SemanticSearch = SemanticSearch;
8253
- exports.StatusPill = StatusPill;
8254
- exports.TAG_TYPE_ICONS = TAG_TYPE_ICONS;
8255
- exports.TAG_TYPE_LABELS = TAG_TYPE_LABELS;
8256
- exports.TagEntity = TagEntity;
8257
- exports.Toaster = Toaster;
8258
6918
  exports.TxtIcon = TxtIcon;
8259
6919
  exports.TypingIndicator = TypingIndicator;
8260
- exports.UserEntity = UserEntity;
8261
6920
  exports.UserMenu = UserMenu;
8262
- exports.VISIBILITY_ICONS = VISIBILITY_ICONS;
8263
- exports.VidIcon = VidIcon;
8264
6921
  exports.VideoCapture = VideoCapture;
8265
- exports.VisibilityIcon = VisibilityIcon;
8266
6922
  exports.VoiceNoteRecorder = VoiceNoteRecorder;
8267
6923
  exports.XlsIcon = XlsIcon;
8268
6924
  exports.annotateThread = annotateThread;
8269
6925
  exports.arbiQueryKeys = arbiQueryKeys;
8270
6926
  exports.captureFrameAsBlob = captureFrameAsBlob;
8271
- exports.configureEntityRegistry = configureEntityRegistry;
8272
- exports.configureRagLabels = configureRagLabels;
8273
- exports.configureStatusRegistry = configureStatusRegistry;
8274
6927
  exports.cropImage = cropImage;
8275
6928
  exports.dayKey = dayKey;
8276
6929
  exports.describeActivity = describeActivity;
8277
6930
  exports.formatRelativeTime = formatRelativeTime;
8278
- exports.getDocIcon = getDocIcon;
8279
- exports.getEntityColor = getEntityColor2;
8280
- exports.getEntityColorStyles = getEntityColorStyles;
8281
- exports.getEntityIcon = getEntityIcon;
8282
- exports.getEntityLabel = getEntityLabel;
8283
6931
  exports.getNotificationTypeMeta = getNotificationTypeMeta;
8284
- exports.getStatusVariant = getStatusVariant;
8285
- exports.getTagTypeIcon = getTagTypeIcon;
8286
- exports.getTagTypeLabel = getTagTypeLabel;
8287
6932
  exports.getWorkspaceActionText = getWorkspaceActionText;
8288
- exports.getWorkspaceColor = getWorkspaceColor;
8289
6933
  exports.getWorkspaceSentPhrase = getWorkspaceSentPhrase;
8290
6934
  exports.hasVideoTrack = hasVideoTrack;
8291
6935
  exports.isWorkspaceNotificationType = isWorkspaceNotificationType;
8292
- exports.notify = notify;
8293
6936
  exports.parseActivityContent = parseActivityContent;
8294
6937
  exports.redlineStats = redlineStats;
8295
- exports.seedNotifications = seedNotifications;
8296
- exports.selectUnread = selectUnread;
8297
6938
  exports.textToArtifact = textToArtifact;
8298
6939
  exports.toRedlineMarkdown = toRedlineMarkdown;
8299
6940
  exports.useActivity = useActivity;
@@ -8319,7 +6960,6 @@ exports.useDirectMessages = useDirectMessages;
8319
6960
  exports.useDocuments = useDocuments;
8320
6961
  exports.useFacts = useFacts;
8321
6962
  exports.useHealth = useHealth;
8322
- exports.useNotify = useNotify;
8323
6963
  exports.useParsedDocument = useParsedDocument;
8324
6964
  exports.useProjectInvoices = useProjectInvoices;
8325
6965
  exports.useProjectUsage = useProjectUsage;