@arbidocs/blocks 0.5.48 → 0.5.50

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.
Files changed (81) hide show
  1. package/dist/DocumentReviewCard-DLR4XOIZ.cjs +516 -0
  2. package/dist/DocumentReviewCard-DLR4XOIZ.cjs.map +1 -0
  3. package/dist/DocumentReviewCard-Y67FFRPC.js +514 -0
  4. package/dist/DocumentReviewCard-Y67FFRPC.js.map +1 -0
  5. package/dist/calls/connected/ConnectedCallPage.d.ts +23 -0
  6. package/dist/calls/connected/index.d.ts +1 -0
  7. package/dist/calls/index.cjs +172 -0
  8. package/dist/calls/index.cjs.map +1 -1
  9. package/dist/calls/index.js +175 -4
  10. package/dist/calls/index.js.map +1 -1
  11. package/dist/chunk-3Y4UTPCD.js +1521 -0
  12. package/dist/chunk-3Y4UTPCD.js.map +1 -0
  13. package/dist/chunk-5TDGVOR5.js +142 -0
  14. package/dist/chunk-5TDGVOR5.js.map +1 -0
  15. package/dist/{chunk-QKOFQMAY.cjs → chunk-5YX3R6CK.cjs} +5 -4
  16. package/dist/chunk-5YX3R6CK.cjs.map +1 -0
  17. package/dist/chunk-63IH7V5F.js +13 -0
  18. package/dist/chunk-63IH7V5F.js.map +1 -0
  19. package/dist/chunk-C3VTWM74.js +123 -0
  20. package/dist/chunk-C3VTWM74.js.map +1 -0
  21. package/dist/chunk-DVE6NNZ2.cjs +15 -0
  22. package/dist/chunk-DVE6NNZ2.cjs.map +1 -0
  23. package/dist/{chunk-XBITXJZU.js → chunk-EQ433QPZ.js} +4 -3
  24. package/dist/chunk-EQ433QPZ.js.map +1 -0
  25. package/dist/{chunk-UAEYU2NN.cjs → chunk-H32DV7XS.cjs} +2 -136
  26. package/dist/chunk-H32DV7XS.cjs.map +1 -0
  27. package/dist/{chunk-EARQ2CUX.js → chunk-IQ3VDTR7.js} +6 -119
  28. package/dist/chunk-IQ3VDTR7.js.map +1 -0
  29. package/dist/chunk-NUQ3RY7M.cjs +130 -0
  30. package/dist/chunk-NUQ3RY7M.cjs.map +1 -0
  31. package/dist/{chunk-V2UQR7P6.cjs → chunk-QLY22ZZW.cjs} +9 -8
  32. package/dist/chunk-QLY22ZZW.cjs.map +1 -0
  33. package/dist/chunk-REH7PX3N.cjs +145 -0
  34. package/dist/chunk-REH7PX3N.cjs.map +1 -0
  35. package/dist/{chunk-VQHXVY26.cjs → chunk-RTS3B2W7.cjs} +2 -121
  36. package/dist/chunk-RTS3B2W7.cjs.map +1 -0
  37. package/dist/chunk-S7B5E3RU.cjs +1553 -0
  38. package/dist/chunk-S7B5E3RU.cjs.map +1 -0
  39. package/dist/{chunk-WZ63HE2C.js → chunk-XRL4R2TT.js} +4 -136
  40. package/dist/chunk-XRL4R2TT.js.map +1 -0
  41. package/dist/{chunk-E6EYRQC2.js → chunk-YYZH6VRP.js} +6 -5
  42. package/dist/chunk-YYZH6VRP.js.map +1 -0
  43. package/dist/connect/index.cjs +464 -1861
  44. package/dist/connect/index.cjs.map +1 -1
  45. package/dist/connect/index.js +55 -1538
  46. package/dist/connect/index.js.map +1 -1
  47. package/dist/connect/viewer.cjs +39 -39
  48. package/dist/connect/viewer.js +1 -1
  49. package/dist/connection/config/useDeveloperConfig.d.ts +1 -1
  50. package/dist/connection/files/fields/DocumentFieldParts.d.ts +2 -1
  51. package/dist/connection/files/fields/documentField.d.ts +1 -0
  52. package/dist/connection/files/grid/cells.d.ts +1 -0
  53. package/dist/connection/files/page/ConnectedFilesPage.d.ts +5 -2
  54. package/dist/connection/files/review/DocumentReviewCard.d.ts +32 -0
  55. package/dist/connection/files/review/useDocumentValueWrites.d.ts +15 -0
  56. package/dist/connection/files/review/useReviewColumns.d.ts +33 -0
  57. package/dist/files/cells/RelatedDocsCell.d.ts +3 -1
  58. package/dist/files/index.cjs +221 -221
  59. package/dist/files/index.js +1 -1
  60. package/dist/home/index.cjs +7 -6
  61. package/dist/home/index.cjs.map +1 -1
  62. package/dist/home/index.js +2 -1
  63. package/dist/home/index.js.map +1 -1
  64. package/dist/index.cjs +82 -82
  65. package/dist/index.cjs.map +1 -1
  66. package/dist/index.js +5 -8
  67. package/dist/index.js.map +1 -1
  68. package/dist/workspaces/index.cjs +29 -28
  69. package/dist/workspaces/index.cjs.map +1 -1
  70. package/dist/workspaces/index.js +4 -3
  71. package/dist/workspaces/index.js.map +1 -1
  72. package/node_modules/@arbidocs/coedit/package.json +1 -1
  73. package/package.json +5 -5
  74. package/dist/chunk-E6EYRQC2.js.map +0 -1
  75. package/dist/chunk-EARQ2CUX.js.map +0 -1
  76. package/dist/chunk-QKOFQMAY.cjs.map +0 -1
  77. package/dist/chunk-UAEYU2NN.cjs.map +0 -1
  78. package/dist/chunk-V2UQR7P6.cjs.map +0 -1
  79. package/dist/chunk-VQHXVY26.cjs.map +0 -1
  80. package/dist/chunk-WZ63HE2C.js.map +0 -1
  81. package/dist/chunk-XBITXJZU.js.map +0 -1
@@ -2,18 +2,20 @@
2
2
  'use strict';
3
3
 
4
4
  var chunkV7JDMKNQ_cjs = require('../chunk-V7JDMKNQ.cjs');
5
- var chunkV2UQR7P6_cjs = require('../chunk-V2UQR7P6.cjs');
5
+ var chunkS7B5E3RU_cjs = require('../chunk-S7B5E3RU.cjs');
6
+ var chunkQLY22ZZW_cjs = require('../chunk-QLY22ZZW.cjs');
6
7
  var chunkKWJW5TMH_cjs = require('../chunk-KWJW5TMH.cjs');
7
8
  var chunkPSIKUQYM_cjs = require('../chunk-PSIKUQYM.cjs');
8
9
  var chunkYD3RN2FY_cjs = require('../chunk-YD3RN2FY.cjs');
9
10
  var chunk7KIM64LQ_cjs = require('../chunk-7KIM64LQ.cjs');
10
11
  var chunkOU3RGQFX_cjs = require('../chunk-OU3RGQFX.cjs');
11
- require('../chunk-UAEYU2NN.cjs');
12
+ require('../chunk-REH7PX3N.cjs');
13
+ require('../chunk-H32DV7XS.cjs');
12
14
  var chunkFEVJA4BP_cjs = require('../chunk-FEVJA4BP.cjs');
13
15
  var chunkMBGV6JHG_cjs = require('../chunk-MBGV6JHG.cjs');
14
16
  var chunkFYL7IGK2_cjs = require('../chunk-FYL7IGK2.cjs');
15
17
  var chunkBB4PMCU6_cjs = require('../chunk-BB4PMCU6.cjs');
16
- var chunkQKOFQMAY_cjs = require('../chunk-QKOFQMAY.cjs');
18
+ var chunk5YX3R6CK_cjs = require('../chunk-5YX3R6CK.cjs');
17
19
  var chunk2WLXQGWC_cjs = require('../chunk-2WLXQGWC.cjs');
18
20
  var chunk223D4727_cjs = require('../chunk-223D4727.cjs');
19
21
  var chunkTQSU3I4C_cjs = require('../chunk-TQSU3I4C.cjs');
@@ -24,7 +26,8 @@ require('../chunk-464YPRAE.cjs');
24
26
  require('../chunk-PICGTGEB.cjs');
25
27
  var chunk5FYU7ZIU_cjs = require('../chunk-5FYU7ZIU.cjs');
26
28
  require('../chunk-ZESMRGDV.cjs');
27
- var chunkVQHXVY26_cjs = require('../chunk-VQHXVY26.cjs');
29
+ var chunkRTS3B2W7_cjs = require('../chunk-RTS3B2W7.cjs');
30
+ var chunkNUQ3RY7M_cjs = require('../chunk-NUQ3RY7M.cjs');
28
31
  var chunkC2ECYOPP_cjs = require('../chunk-C2ECYOPP.cjs');
29
32
  var chunkGOWXP5KT_cjs = require('../chunk-GOWXP5KT.cjs');
30
33
  var chunk6R5Q65PB_cjs = require('../chunk-6R5Q65PB.cjs');
@@ -98,11 +101,10 @@ var ui = require('@arbidocs/react/ui');
98
101
  var jsxRuntime = require('react/jsx-runtime');
99
102
  var shell = require('@arbidocs/react/shell');
100
103
  var documentTools = require('@arbidocs/react/document-tools');
101
- var zustand = require('zustand');
102
104
  var artifacts = require('@arbidocs/react/artifacts');
105
+ var zustand = require('zustand');
103
106
  var core = require('@dnd-kit/core');
104
107
  var reactVirtual = require('@tanstack/react-virtual');
105
- var middleware = require('zustand/middleware');
106
108
  var reactDom = require('react-dom');
107
109
 
108
110
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
@@ -164,9 +166,9 @@ var ConnectedUserEntity = React9.memo(function ConnectedUserEntity2({
164
166
  if (isMe) openSettings();
165
167
  else openDirectChat?.(user.external_id);
166
168
  };
167
- const tooltipContent = /* @__PURE__ */ jsxRuntime.jsxs(chunkVQHXVY26_cjs.EntityTooltip, { children: [
169
+ const tooltipContent = /* @__PURE__ */ jsxRuntime.jsxs(chunkNUQ3RY7M_cjs.EntityTooltip, { children: [
168
170
  /* @__PURE__ */ jsxRuntime.jsx(
169
- chunkVQHXVY26_cjs.EntityTooltipHeader,
171
+ chunkNUQ3RY7M_cjs.EntityTooltipHeader,
170
172
  {
171
173
  lead: /* @__PURE__ */ jsxRuntime.jsxs(
172
174
  ui.Avatar,
@@ -197,13 +199,13 @@ var ConnectedUserEntity = React9.memo(function ConnectedUserEntity2({
197
199
  subtitle: user.email
198
200
  }
199
201
  ),
200
- userIsAgent && agentOwner && /* @__PURE__ */ jsxRuntime.jsx(chunkVQHXVY26_cjs.EntityTooltipSection, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkVQHXVY26_cjs.EntityTooltipHint, { icon: /* @__PURE__ */ jsxRuntime.jsx(react.ArbiBotHeadIcon, { className: "w-3.5 h-3.5 flex-shrink-0" }), children: [
202
+ userIsAgent && agentOwner && /* @__PURE__ */ jsxRuntime.jsx(chunkNUQ3RY7M_cjs.EntityTooltipSection, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkNUQ3RY7M_cjs.EntityTooltipHint, { icon: /* @__PURE__ */ jsxRuntime.jsx(react.ArbiBotHeadIcon, { className: "w-3.5 h-3.5 flex-shrink-0" }), children: [
201
203
  "Agent of",
202
204
  " ",
203
205
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-foreground", children: ui.getUserDisplayName(agentOwner) })
204
206
  ] }) }),
205
207
  sharedWorkspaces.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
206
- chunkVQHXVY26_cjs.EntityTooltipSection,
208
+ chunkNUQ3RY7M_cjs.EntityTooltipSection,
207
209
  {
208
210
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Users, { className: "w-3.5 h-3.5 flex-shrink-0" }),
209
211
  heading: "Shared Workspaces",
@@ -234,7 +236,7 @@ var ConnectedUserEntity = React9.memo(function ConnectedUserEntity2({
234
236
  ] })
235
237
  }
236
238
  ),
237
- interactive && variant === "pill" && canChat && /* @__PURE__ */ jsxRuntime.jsx(chunkVQHXVY26_cjs.EntityTooltipHint, { isRuled: true, icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageCircleMore, { className: "w-3 h-3" }), children: "Click to send message" })
239
+ interactive && variant === "pill" && canChat && /* @__PURE__ */ jsxRuntime.jsx(chunkNUQ3RY7M_cjs.EntityTooltipHint, { isRuled: true, icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageCircleMore, { className: "w-3 h-3" }), children: "Click to send message" })
238
240
  ] });
239
241
  return /* @__PURE__ */ jsxRuntime.jsx(
240
242
  ui.UserEntity,
@@ -388,7 +390,7 @@ function ConnectedWorkspaceActivity({
388
390
  [feed.data]
389
391
  );
390
392
  return /* @__PURE__ */ jsxRuntime.jsx(
391
- chunkVQHXVY26_cjs.WorkspaceActivityList,
393
+ chunkRTS3B2W7_cjs.WorkspaceActivityList,
392
394
  {
393
395
  ...listProps,
394
396
  items,
@@ -1417,126 +1419,6 @@ function useNotificationToasts(options2 = {}) {
1417
1419
  });
1418
1420
  });
1419
1421
  }
1420
- var usePendingSyncDialog = zustand.create((set) => ({
1421
- open: false,
1422
- setOpen: (open) => set({ open })
1423
- }));
1424
- function openPendingSyncDialog() {
1425
- usePendingSyncDialog.getState().setOpen(true);
1426
- }
1427
- var STATUS_META = {
1428
- queued: { dot: "bg-yellow-text", text: "Waiting to sync", tone: "text-yellow-text" },
1429
- syncing: { dot: "bg-blue-text", text: "Syncing\u2026", tone: "text-blue-text" },
1430
- error: { dot: "bg-red-text", text: "Failed", tone: "text-red-text" }
1431
- };
1432
- function StatusCell({ data }) {
1433
- if (!data) return null;
1434
- const meta = STATUS_META[data.status];
1435
- return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `inline-flex items-center gap-1.5 text-sm font-medium ${meta.tone}`, children: [
1436
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: `h-1.5 w-1.5 rounded-full ${meta.dot}` }),
1437
- meta.text
1438
- ] });
1439
- }
1440
- function ConnectedPendingSyncDialog() {
1441
- const isOpen = usePendingSyncDialog((s) => s.open);
1442
- const setOpen = usePendingSyncDialog((s) => s.setOpen);
1443
- const isOnline = documentTools.useIsOnline();
1444
- const items = react.usePendingSyncItems();
1445
- const cancelMany = react.useCancelManyPendingSync();
1446
- const [selected, setSelected] = React9.useState([]);
1447
- const undoableIds = React9.useMemo(
1448
- () => items.filter((i) => i.status !== "syncing").map((i) => i.mutationId),
1449
- [items]
1450
- );
1451
- const selectedUndoableIds = React9.useMemo(
1452
- () => selected.filter((i) => i.status !== "syncing").map((i) => i.mutationId),
1453
- [selected]
1454
- );
1455
- const columnDefs = React9.useMemo(
1456
- () => [
1457
- {
1458
- colId: "document",
1459
- headerName: "Document",
1460
- field: "document",
1461
- flex: 1,
1462
- minWidth: 140,
1463
- tooltipField: "document"
1464
- },
1465
- {
1466
- colId: "change",
1467
- headerName: "Change",
1468
- field: "change",
1469
- flex: 1.4,
1470
- minWidth: 160,
1471
- tooltipField: "change"
1472
- },
1473
- {
1474
- colId: "when",
1475
- headerName: "When",
1476
- width: 120,
1477
- // Sort by the raw timestamp; display the friendly relative string.
1478
- valueGetter: (p) => p.data?.at ?? 0,
1479
- valueFormatter: (p) => p.value ? ui.formatRelativeTime(new Date(Number(p.value)).toISOString(), { style: "short" }) : ""
1480
- },
1481
- {
1482
- colId: "status",
1483
- headerName: "Status",
1484
- width: 150,
1485
- valueGetter: (p) => p.data?.status ?? "",
1486
- cellRenderer: StatusCell
1487
- }
1488
- ],
1489
- []
1490
- );
1491
- const hasFailed = items.some((i) => i.status === "error");
1492
- const title = !isOnline ? "Offline changes" : hasFailed ? "Some changes didn\u2019t sync" : items.length > 0 ? "Syncing your changes" : "No changes waiting";
1493
- const description = !isOnline ? "These edits are saved on this device and will sync automatically when you reconnect." : hasFailed ? "These edits didn\u2019t reach the server, so they\u2019re only saved on this device. Undo to discard them." : "Edits you made offline are syncing to the server.";
1494
- const undoSelected = () => {
1495
- cancelMany(selectedUndoableIds);
1496
- setSelected([]);
1497
- };
1498
- const undoAll = () => {
1499
- cancelMany(undoableIds);
1500
- setSelected([]);
1501
- };
1502
- return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open: isOpen, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogContent, { presentation: "sheet", className: "sm:max-w-2xl", "data-testid": "pending-sync-modal", children: [
1503
- /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { children: [
1504
- /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogTitle, { className: "flex items-center gap-2", children: [
1505
- isOnline ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { className: "h-5 w-5 text-primary" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.WifiOff, { className: "h-5 w-5 text-yellow-text" }),
1506
- title
1507
- ] }),
1508
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { children: description })
1509
- ] }),
1510
- items.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalSection, { className: "flex flex-col items-center gap-2 py-10 text-center text-muted-foreground", children: [
1511
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CircleCheck, { className: "h-6 w-6 text-green-text opacity-70" }),
1512
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm", children: "Everything is up to date." })
1513
- ] }) : /* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalSection, { children: /* @__PURE__ */ jsxRuntime.jsx(
1514
- chunkLKK52DEY_cjs.GridView,
1515
- {
1516
- items,
1517
- columnDefs,
1518
- getItemId: (item) => String(item.mutationId),
1519
- selection: { mode: "multiple", selected, onSelectionChange: setSelected },
1520
- height: "320px",
1521
- gridId: "pending-sync-grid-v1"
1522
- }
1523
- ) }),
1524
- undoableIds.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(ui.DialogFooter, { children: /* @__PURE__ */ jsxRuntime.jsxs(
1525
- ui.Button,
1526
- {
1527
- variant: "outline",
1528
- className: "gap-1.5",
1529
- "data-testid": "pending-sync-undo",
1530
- disabled: selected.length > 0 && selectedUndoableIds.length === 0,
1531
- onClick: selected.length > 0 ? undoSelected : undoAll,
1532
- children: [
1533
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RotateCcw, { className: "h-4 w-4" }),
1534
- selected.length > 0 ? `Undo selected (${selectedUndoableIds.length})` : `Undo all (${undoableIds.length})`
1535
- ]
1536
- }
1537
- ) })
1538
- ] }) });
1539
- }
1540
1422
  function ConnectedWorkspaceNotificationMenu({
1541
1423
  workspaceId: workspaceProp,
1542
1424
  ...menuProps
@@ -1553,7 +1435,7 @@ function ConnectedWorkspaceNotificationMenu({
1553
1435
  }, [error, notify18]);
1554
1436
  if (!workspaceId) return null;
1555
1437
  return /* @__PURE__ */ jsxRuntime.jsx(
1556
- chunkVQHXVY26_cjs.WorkspaceNotificationMenu,
1438
+ chunkRTS3B2W7_cjs.WorkspaceNotificationMenu,
1557
1439
  {
1558
1440
  ...menuProps,
1559
1441
  level,
@@ -1572,7 +1454,7 @@ function ConnectedThreadFollow({
1572
1454
  enabled: live
1573
1455
  });
1574
1456
  if (!conversationId) return null;
1575
- const Control = as === "menu-item" ? chunkVQHXVY26_cjs.ThreadFollowMenuItem : chunkVQHXVY26_cjs.ThreadFollowButton;
1457
+ const Control = as === "menu-item" ? chunkRTS3B2W7_cjs.ThreadFollowMenuItem : chunkRTS3B2W7_cjs.ThreadFollowButton;
1576
1458
  return /* @__PURE__ */ jsxRuntime.jsx(
1577
1459
  Control,
1578
1460
  {
@@ -2309,7 +2191,7 @@ function useConnectedAgentManagement({
2309
2191
  const onEditorOpenChange = (open) => {
2310
2192
  setEditorOpen(open);
2311
2193
  };
2312
- const create4 = () => {
2194
+ const create2 = () => {
2313
2195
  setEditing(null);
2314
2196
  setEditorOpen(true);
2315
2197
  };
@@ -2343,7 +2225,7 @@ function useConnectedAgentManagement({
2343
2225
  return {
2344
2226
  agents,
2345
2227
  isLoading,
2346
- create: create4,
2228
+ create: create2,
2347
2229
  edit,
2348
2230
  assign,
2349
2231
  remove,
@@ -3559,7 +3441,7 @@ function ConnectedTagTable({
3559
3441
  const fail2 = (fallback) => (e) => notify18(browser.refusalReason(e, fallback), "error");
3560
3442
  const snapshot2 = (data) => {
3561
3443
  const title = exportTitle ?? ui.tagKindTitle(kind, { plural: true });
3562
- const bytes = chunkVQHXVY26_cjs.tagTableDocx(data, {
3444
+ const bytes = chunkRTS3B2W7_cjs.tagTableDocx(data, {
3563
3445
  title,
3564
3446
  nameOf: (id) => people.find((p) => p.value === id)?.label
3565
3447
  });
@@ -3568,7 +3450,7 @@ function ConnectedTagTable({
3568
3450
  return { blob: new Blob([bytes], { type: chunkJIOHDVWH_cjs.DOCX_MIME_TYPE }), name };
3569
3451
  };
3570
3452
  return /* @__PURE__ */ jsxRuntime.jsx(
3571
- chunkVQHXVY26_cjs.TagTable,
3453
+ chunkRTS3B2W7_cjs.TagTable,
3572
3454
  {
3573
3455
  ...props,
3574
3456
  table,
@@ -3706,9 +3588,9 @@ function GlossaryExport({ labelId, nameOf }) {
3706
3588
  const narrowed = agreements.find((a) => a.id === narrowTo);
3707
3589
  const title = narrowed ? `Glossary - ${narrowed.name}` : "Glossary";
3708
3590
  const download = (format) => {
3709
- const entries = chunkVQHXVY26_cjs.glossaryEntries(sources, { labelId: narrowed?.id });
3710
- const blob = format === "docx" ? new Blob([chunkVQHXVY26_cjs.glossaryDocx(entries, { title })], { type: chunkJIOHDVWH_cjs.DOCX_MIME_TYPE }) : new Blob([chunkVQHXVY26_cjs.glossaryMarkdown(entries, { title })], { type: "text/markdown" });
3711
- documentTools.downloadBlob(blob, chunkVQHXVY26_cjs.glossaryFileName(title, format));
3591
+ const entries = chunkRTS3B2W7_cjs.glossaryEntries(sources, { labelId: narrowed?.id });
3592
+ const blob = format === "docx" ? new Blob([chunkRTS3B2W7_cjs.glossaryDocx(entries, { title })], { type: chunkJIOHDVWH_cjs.DOCX_MIME_TYPE }) : new Blob([chunkRTS3B2W7_cjs.glossaryMarkdown(entries, { title })], { type: "text/markdown" });
3593
+ documentTools.downloadBlob(blob, chunkRTS3B2W7_cjs.glossaryFileName(title, format));
3712
3594
  };
3713
3595
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", "data-testid": "tags-glossary", children: [
3714
3596
  agreements.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(
@@ -3747,958 +3629,6 @@ function GlossaryExport({ labelId, nameOf }) {
3747
3629
  ] })
3748
3630
  ] });
3749
3631
  }
3750
- function DocumentSyncGlyph({
3751
- docExtId,
3752
- size = 13,
3753
- className,
3754
- bgClassName = "bg-muted-foreground"
3755
- }) {
3756
- const isAvailableOffline = react.useOfflineDocumentIds().has(docExtId);
3757
- if (!isAvailableOffline) return null;
3758
- return /* @__PURE__ */ jsxRuntime.jsx(
3759
- "span",
3760
- {
3761
- title: "Available offline (saved on this device)",
3762
- "aria-label": "Available offline",
3763
- "data-testid": `offline-available-badge-${docExtId}`,
3764
- className: ui.cn(
3765
- "inline-flex items-center justify-center rounded-full text-white ring-1 ring-white",
3766
- bgClassName,
3767
- className
3768
- ),
3769
- style: { width: size, height: size },
3770
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowDownToLine, { size: Math.round(size * 0.7), strokeWidth: 2.75 })
3771
- }
3772
- );
3773
- }
3774
- var NO_ACTIONS = {};
3775
- var ACTIVE_STATUSES = react.IN_FLIGHT_DOCUMENT_STATUSES;
3776
- var TERMINAL_STATUSES = react.FINISHED_DOCUMENT_STATUSES;
3777
- var STATUS_LABEL = {
3778
- uploading: "Uploading",
3779
- queued: "Queued",
3780
- parsing: "Parsing",
3781
- encrypting: "Encrypting",
3782
- indexing: "Indexing",
3783
- analysing: "Analysing"
3784
- };
3785
- function isActiveDocumentStatus(status) {
3786
- return ACTIVE_STATUSES.has(status.toLowerCase());
3787
- }
3788
- function useDocStatus(doc) {
3789
- return react.resolveDocumentStatus(doc, react.useProcessingTask(doc.external_id));
3790
- }
3791
- function TileStatusBadge({ doc, status }) {
3792
- let tone = "neutral";
3793
- let icon2 = null;
3794
- let title = "";
3795
- switch (status) {
3796
- case "completed":
3797
- tone = "success";
3798
- icon2 = /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckCircle, { className: "size-4 text-green-text", strokeWidth: 2.75 });
3799
- title = "Ready";
3800
- break;
3801
- case "failed":
3802
- tone = "danger";
3803
- icon2 = /* @__PURE__ */ jsxRuntime.jsx(
3804
- chunkQKOFQMAY_cjs.FailedStageIcon,
3805
- {
3806
- stage: doc.failed_stage ?? null,
3807
- errorMessage: doc.error_message,
3808
- className: "size-4 text-red-text"
3809
- }
3810
- );
3811
- title = "Failed";
3812
- break;
3813
- case "skipped":
3814
- icon2 = /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SkipForward, { className: "size-4 text-muted-foreground", strokeWidth: 2.75 });
3815
- title = "Skipped";
3816
- break;
3817
- case "empty":
3818
- tone = "warning";
3819
- icon2 = /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileX, { className: "size-4 text-yellow-text", strokeWidth: 2.75 });
3820
- title = "Empty \u2014 no extractable content";
3821
- break;
3822
- case "low-content":
3823
- tone = "warning";
3824
- icon2 = /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { className: "size-4 text-yellow-text", strokeWidth: 2.75 });
3825
- title = "Low content \u2014 minimal extractable content";
3826
- break;
3827
- default:
3828
- return null;
3829
- }
3830
- return /* @__PURE__ */ jsxRuntime.jsx(
3831
- chunkQKOFQMAY_cjs.StatusPill,
3832
- {
3833
- tone,
3834
- icon: icon2,
3835
- title,
3836
- testId: `explorer-file-status-${doc.external_id}`
3837
- }
3838
- );
3839
- }
3840
- function TileVisibilityBadge({ doc }) {
3841
- const shared = !!doc.shared;
3842
- return /* @__PURE__ */ jsxRuntime.jsx(
3843
- chunkQKOFQMAY_cjs.StatusPill,
3844
- {
3845
- icon: /* @__PURE__ */ jsxRuntime.jsx(ui.VisibilityIcon, { isShared: shared, className: "size-3.5", "aria-hidden": true }),
3846
- label: shared ? ui.getEntityLabel("WORKSPACE") : "Only you",
3847
- title: chunkQKOFQMAY_cjs.visibilityAudience(shared),
3848
- testId: `explorer-file-visibility-${doc.external_id}`
3849
- }
3850
- );
3851
- }
3852
- function MiniUserAvatar({ user }) {
3853
- return /* @__PURE__ */ jsxRuntime.jsxs(ui.Avatar, { className: "h-4 w-4 border border-white", children: [
3854
- user.picture && /* @__PURE__ */ jsxRuntime.jsx(ui.AvatarImage, { src: user.picture, alt: ui.getUserDisplayName(user) }),
3855
- /* @__PURE__ */ jsxRuntime.jsx(
3856
- ui.AvatarFallback,
3857
- {
3858
- className: ui.cn(
3859
- "text-xs font-semibold leading-none text-white",
3860
- ui.getUserAvatarColor(user.external_id)
3861
- ),
3862
- children: ui.getUserInitials(user)
3863
- }
3864
- )
3865
- ] });
3866
- }
3867
- function FileTooltipContent({
3868
- doc,
3869
- modifiedBy,
3870
- tagNameById
3871
- }) {
3872
- const labels = (doc.doctags ?? []).map((dt) => tagNameById.get(dt.tag_ext_id)).filter((name) => !!name);
3873
- return /* @__PURE__ */ jsxRuntime.jsx(
3874
- chunkQKOFQMAY_cjs.ExplorerFileTooltip,
3875
- {
3876
- title: ui.getDocumentTitle(doc, doc.file_name ?? ""),
3877
- summary: ui.getDocumentSubject(doc),
3878
- modifiedLabel: doc.updated_at ? ui.formatFriendlyDate(doc.updated_at, false) : null,
3879
- modifiedByAvatar: modifiedBy && /* @__PURE__ */ jsxRuntime.jsx(MiniUserAvatar, { user: modifiedBy }),
3880
- shared: !!doc.shared,
3881
- visibilityIcon: /* @__PURE__ */ jsxRuntime.jsx(ui.VisibilityIcon, { isShared: !!doc.shared, className: "h-3 w-3" }),
3882
- labels,
3883
- uiLabels: { shared: chunkQKOFQMAY_cjs.visibilityAudience(true), private: chunkQKOFQMAY_cjs.visibilityAudience(false) }
3884
- }
3885
- );
3886
- }
3887
- function startMenuItem(items) {
3888
- if (items.length === 0) return [];
3889
- return [
3890
- {
3891
- id: "start",
3892
- label: "Start\u2026",
3893
- icon: lucideReact.Sparkles,
3894
- testId: "explorer-start-menu",
3895
- onSelect: () => {
3896
- },
3897
- submenu: items.map((item) => ({
3898
- id: item.id,
3899
- label: item.title,
3900
- icon: lucideReact.Play,
3901
- onSelect: item.run,
3902
- testId: `explorer-start-${item.id}`
3903
- }))
3904
- }
3905
- ];
3906
- }
3907
- var FileTile = React9.memo(function FileTile2({
3908
- doc,
3909
- density,
3910
- selected,
3911
- dragging,
3912
- dndActive,
3913
- renaming,
3914
- canDelete,
3915
- thumbnailUrl,
3916
- modifiedBy,
3917
- tagNameById,
3918
- onSelect,
3919
- onToggle,
3920
- onOpen,
3921
- onReview,
3922
- onStartRename,
3923
- onCommitRename,
3924
- onCancelRename,
3925
- onDownload,
3926
- onMove,
3927
- onDelete,
3928
- actions = NO_ACTIONS
3929
- }) {
3930
- const { attributes, listeners: listeners2, setNodeRef } = core.useDraggable({
3931
- id: `doc:${doc.external_id}`,
3932
- data: { type: "doc", docId: doc.external_id }
3933
- });
3934
- const { notify: notify18 } = chunkI72IYIO2_cjs.useBlocksEnvironment();
3935
- const { startItemsForFile, openDocumentChat, emailDocument } = actions;
3936
- const status = useDocStatus(doc);
3937
- const isProcessing = ACTIVE_STATUSES.has(status);
3938
- const isOffline = react.useOfflineDocumentIds().has(doc.external_id);
3939
- const isViewing = react.useOpenViewerDocumentId() === doc.external_id;
3940
- const showStatusMarker = !isProcessing && TERMINAL_STATUSES.has(status);
3941
- const Icon = ui.getFileTypeIcon(doc.file_name, { mime: doc.file_type });
3942
- const { data: mailPolicy } = react.useMailPolicy();
3943
- const shareAsEmail = async () => {
3944
- try {
3945
- await emailDocument?.(doc);
3946
- } catch (error) {
3947
- notify18(error instanceof Error ? error.message : "Could not attach document", "error");
3948
- }
3949
- };
3950
- const startItems = startItemsForFile?.(doc);
3951
- const menuItems = [
3952
- { id: "open", label: "Open", icon: lucideReact.SquarePen, onSelect: () => onOpen(doc) },
3953
- ...onReview ? [{ id: "review", label: "Open in Review", icon: lucideReact.BookOpen, onSelect: () => onReview(doc) }] : [],
3954
- ...openDocumentChat ? [
3955
- {
3956
- id: "chat",
3957
- label: "Document chat",
3958
- icon: lucideReact.MessagesSquare,
3959
- onSelect: () => openDocumentChat(doc.external_id)
3960
- }
3961
- ] : [],
3962
- ...startMenuItem(startItems ?? []),
3963
- {
3964
- id: "rename",
3965
- label: "Rename",
3966
- icon: lucideReact.Pencil,
3967
- onSelect: () => onStartRename(doc),
3968
- separatorBefore: true
3969
- },
3970
- { id: "download", label: "Download", icon: lucideReact.Download, onSelect: () => onDownload(doc) },
3971
- ...emailDocument && mailPolicy?.enabled ? [
3972
- {
3973
- id: "email",
3974
- label: "Send as email attachment",
3975
- icon: lucideReact.Mail,
3976
- onSelect: () => {
3977
- void shareAsEmail();
3978
- }
3979
- }
3980
- ] : [],
3981
- ...onMove ? [{ id: "move", label: "Move to\u2026", icon: lucideReact.FolderInput, onSelect: () => onMove(doc) }] : [],
3982
- ...canDelete ? [
3983
- {
3984
- id: "delete",
3985
- label: "Delete",
3986
- icon: lucideReact.Trash2,
3987
- onSelect: () => onDelete(doc),
3988
- destructive: true,
3989
- separatorBefore: true
3990
- }
3991
- ] : []
3992
- ];
3993
- const tooltip = renaming || dndActive ? void 0 : /* @__PURE__ */ jsxRuntime.jsx(FileTooltipContent, { doc, modifiedBy, tagNameById });
3994
- return /* @__PURE__ */ jsxRuntime.jsx(
3995
- chunkQKOFQMAY_cjs.ExplorerFileTile,
3996
- {
3997
- id: doc.external_id,
3998
- title: ui.getDocumentTitle(doc, doc.file_name ?? ""),
3999
- density,
4000
- selected,
4001
- dragging,
4002
- renaming,
4003
- thumbnailUrl,
4004
- renderFileIcon: (size) => /* @__PURE__ */ jsxRuntime.jsx(Icon, { size, className: "drop-shadow-sm" }),
4005
- progress: isProcessing ? { label: STATUS_LABEL[status] ?? status, queued: status === "queued" } : void 0,
4006
- statusMarker: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
4007
- /* @__PURE__ */ jsxRuntime.jsx(TileVisibilityBadge, { doc }),
4008
- showStatusMarker && /* @__PURE__ */ jsxRuntime.jsx(TileStatusBadge, { doc, status })
4009
- ] }),
4010
- offlineMarker: isOffline ? /* @__PURE__ */ jsxRuntime.jsx(DocumentSyncGlyph, { docExtId: doc.external_id, size: 24, bgClassName: "bg-primary" }) : void 0,
4011
- entity: /* @__PURE__ */ jsxRuntime.jsx(
4012
- ui.DocumentEntity,
4013
- {
4014
- doc,
4015
- labelMaxWidth: "max-w-full",
4016
- noClamp: true,
4017
- labelClassName: "whitespace-normal line-clamp-2 break-words",
4018
- viewing: isViewing,
4019
- tooltipContent: /* @__PURE__ */ jsxRuntime.jsx(FileTooltipContent, { doc, modifiedBy, tagNameById }),
4020
- className: ui.cn(
4021
- "w-full min-w-0 max-w-full bg-background/90 backdrop-blur-sm",
4022
- density === "list" ? "text-xs" : void 0
4023
- ),
4024
- onClick: (e) => {
4025
- e.stopPropagation();
4026
- onOpen(doc);
4027
- }
4028
- }
4029
- ),
4030
- tooltip,
4031
- menuItems,
4032
- rootRef: setNodeRef,
4033
- rootProps: { ...listeners2, ...attributes },
4034
- onOpen: () => onOpen(doc),
4035
- onSelect: (e) => onSelect(doc, e),
4036
- onToggle: (e) => onToggle(doc, e),
4037
- onCommitRename: (name) => onCommitRename(doc, name),
4038
- onCancelRename
4039
- }
4040
- );
4041
- });
4042
- var FolderTile = React9.memo(function FolderTile2({
4043
- folder,
4044
- density,
4045
- editing,
4046
- selected,
4047
- partiallySelected,
4048
- documents,
4049
- onOpen,
4050
- onToggleSelect,
4051
- onCommitName,
4052
- onCancelName,
4053
- onStartRename,
4054
- onDownload,
4055
- onMove,
4056
- onDelete,
4057
- actions = NO_ACTIONS
4058
- }) {
4059
- const { setNodeRef, isOver } = core.useDroppable({
4060
- id: `folder:${folder.path.join("/")}`,
4061
- data: { type: "folder", path: folder.path }
4062
- });
4063
- const { startItemsForFolder } = actions;
4064
- const tasks = react.useProcessingTasks();
4065
- const processingCount = React9.useMemo(
4066
- () => documents.filter(
4067
- (doc) => isActiveDocumentStatus(react.resolveDocumentStatus(doc, tasks[doc.external_id]))
4068
- ).length,
4069
- [documents, tasks]
4070
- );
4071
- const isEmpty = folder.count === 0;
4072
- const iconSize = density === "list" ? 34 : 48;
4073
- const menuItems = [
4074
- ...onStartRename ? [{ id: "rename", label: "Rename", icon: lucideReact.Pencil, onSelect: () => onStartRename(folder) }] : [],
4075
- ...!isEmpty ? startMenuItem(startItemsForFolder?.(folder.path.join("/")) ?? []) : [],
4076
- ...onDownload && !isEmpty ? [{ id: "download", label: "Download", icon: lucideReact.Download, onSelect: () => onDownload(folder) }] : [],
4077
- ...onMove && !isEmpty ? [{ id: "move", label: "Move to\u2026", icon: lucideReact.FolderInput, onSelect: () => onMove(folder) }] : [],
4078
- ...onDelete ? [
4079
- {
4080
- id: "delete",
4081
- label: "Delete",
4082
- icon: lucideReact.Trash2,
4083
- onSelect: () => onDelete(folder),
4084
- destructive: true,
4085
- separatorBefore: true
4086
- }
4087
- ] : []
4088
- ];
4089
- const displayName = folder.path.length === 1 ? chunkQKOFQMAY_cjs.formatFolderSegment(folder.name) : folder.name;
4090
- const providerIcon = folder.path.length === 1 && chunkQKOFQMAY_cjs.hasFolderProviderIcon(folder.name) ? /* @__PURE__ */ jsxRuntime.jsx(
4091
- "span",
4092
- {
4093
- className: "flex items-center justify-center drop-shadow-sm",
4094
- style: { width: iconSize, height: iconSize },
4095
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FolderProviderIcon, { folderPath: folder.name, className: "h-full w-full" })
4096
- }
4097
- ) : void 0;
4098
- return /* @__PURE__ */ jsxRuntime.jsx(
4099
- chunkQKOFQMAY_cjs.ExplorerFolderTile,
4100
- {
4101
- name: folder.name,
4102
- displayName: displayName === "" ? null : displayName,
4103
- path: folder.path,
4104
- count: folder.count,
4105
- density,
4106
- editing,
4107
- selected,
4108
- partiallySelected,
4109
- processingCount,
4110
- isOver,
4111
- icon: providerIcon,
4112
- menuItems,
4113
- rootRef: setNodeRef,
4114
- onOpen: () => onOpen(folder),
4115
- onToggleSelect: onToggleSelect ? (e) => onToggleSelect(folder, e) : void 0,
4116
- onCommitName: (name) => onCommitName?.(folder, name),
4117
- onCancelName
4118
- }
4119
- );
4120
- });
4121
- var PROCESSING_LABELS = {
4122
- parsing: "Parsing",
4123
- encrypting: "Encrypting",
4124
- indexing: "Indexing",
4125
- analysing: "Analysing"
4126
- };
4127
- var QUOTA_PREFIX = "QUOTA_EXCEEDED:";
4128
- function parseQuotaError(errorMessage2) {
4129
- if (!errorMessage2 || !errorMessage2.startsWith(QUOTA_PREFIX)) return null;
4130
- const body = errorMessage2.slice(QUOTA_PREFIX.length);
4131
- const spend = body.match(/spend=([0-9.]+)/)?.[1];
4132
- const budget = body.match(/budget=([0-9.]+)/)?.[1];
4133
- const projectExtId = body.match(/project_ext_id=([^\s,]+)/)?.[1] ?? null;
4134
- if (spend === void 0 || budget === void 0) return null;
4135
- return { spend: Number(spend), budget: Number(budget), projectExtId };
4136
- }
4137
- function useResolvedDocStatus(doc) {
4138
- const task = react.useProcessingTask(doc?.external_id ?? "");
4139
- const isPendingSync = react.useDocumentPendingSync(doc?.external_id);
4140
- if (!doc || !doc.status) return null;
4141
- const status = react.resolveDocumentStatus(doc, doc.external_id ? task : void 0);
4142
- return { status, isPendingSync, failedStage: task?.failed_stage ?? doc.failed_stage ?? null };
4143
- }
4144
- var GLYPH = "size-3.5 shrink-0";
4145
- function describeGlyph(resolved, doc) {
4146
- if (resolved.isPendingSync) {
4147
- return {
4148
- node: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { className: `${GLYPH} text-yellow-text` }),
4149
- title: "Changes saved on this device, waiting to sync"
4150
- };
4151
- }
4152
- switch (resolved.status) {
4153
- case "queued": {
4154
- const isDocx = doc.file_name?.toLowerCase().endsWith(".docx");
4155
- return {
4156
- node: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { className: `${GLYPH} text-muted-foreground` }),
4157
- title: isDocx ? "The document is available to edit. PDF and search indexing are processing." : "Queued, waiting to start"
4158
- };
4159
- }
4160
- case "parsing":
4161
- case "encrypting":
4162
- case "indexing":
4163
- case "analysing":
4164
- return {
4165
- node: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: `${GLYPH} animate-spin text-ai-ink` }),
4166
- title: PROCESSING_LABELS[resolved.status]
4167
- };
4168
- case "skipped":
4169
- return {
4170
- node: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SkipForward, { className: `${GLYPH} text-muted-foreground` }),
4171
- title: "Skipped"
4172
- };
4173
- case "empty":
4174
- return {
4175
- node: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileX, { className: `${GLYPH} text-yellow-text` }),
4176
- title: "Empty, no extractable content"
4177
- };
4178
- case "low-content":
4179
- return {
4180
- node: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { className: `${GLYPH} text-yellow-text` }),
4181
- title: "Low content, minimal extractable content"
4182
- };
4183
- case "failed":
4184
- if (doc.error_message?.startsWith(QUOTA_PREFIX)) {
4185
- return { node: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Zap, { className: `${GLYPH} text-yellow-text` }), title: "AI usage used up" };
4186
- }
4187
- return {
4188
- node: /* @__PURE__ */ jsxRuntime.jsx(
4189
- chunkQKOFQMAY_cjs.FailedStageIcon,
4190
- {
4191
- stage: resolved.failedStage,
4192
- errorMessage: doc.error_message,
4193
- className: `${GLYPH} text-red-text`
4194
- }
4195
- ),
4196
- title: "Failed"
4197
- };
4198
- default:
4199
- return null;
4200
- }
4201
- }
4202
- var DocumentStatusGlyph = React9.memo(function DocumentStatusGlyph2({
4203
- doc
4204
- }) {
4205
- const resolved = useResolvedDocStatus(doc);
4206
- const shown = resolved ? describeGlyph(resolved, doc) : null;
4207
- if (!resolved || !shown) return null;
4208
- return /* @__PURE__ */ jsxRuntime.jsx(
4209
- "span",
4210
- {
4211
- role: "img",
4212
- "aria-label": shown.title,
4213
- title: shown.title,
4214
- "data-slot": "document-status-glyph",
4215
- "data-status": resolved.status,
4216
- className: "inline-flex items-center",
4217
- children: shown.node
4218
- }
4219
- );
4220
- });
4221
- var StatusCell2 = React9.memo(function StatusCell3({
4222
- doc,
4223
- onStatusClick,
4224
- actions
4225
- }) {
4226
- const resolved = useResolvedDocStatus(doc);
4227
- if (!doc || !resolved) return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "\u2014" });
4228
- const { status, isPendingSync, failedStage } = resolved;
4229
- const cell = (pill) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full w-full items-center justify-center overflow-hidden", children: pill });
4230
- const click = () => onStatusClick?.();
4231
- if (isPendingSync) {
4232
- return cell(
4233
- /* @__PURE__ */ jsxRuntime.jsx(
4234
- chunkQKOFQMAY_cjs.StatusPill,
4235
- {
4236
- tone: "warning",
4237
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { className: "size-3.5" }),
4238
- label: "Pending",
4239
- title: "Changes saved on this device \u2014 waiting to sync",
4240
- onClick: openPendingSyncDialog
4241
- }
4242
- )
4243
- );
4244
- }
4245
- switch (status) {
4246
- case "completed":
4247
- return cell(
4248
- /* @__PURE__ */ jsxRuntime.jsx(
4249
- chunkQKOFQMAY_cjs.StatusPill,
4250
- {
4251
- tone: "success",
4252
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckCircle, { className: "size-3.5" }),
4253
- label: "Ready",
4254
- title: "Ready",
4255
- onClick: click
4256
- }
4257
- )
4258
- );
4259
- case "skipped":
4260
- return cell(
4261
- /* @__PURE__ */ jsxRuntime.jsx(
4262
- chunkQKOFQMAY_cjs.StatusPill,
4263
- {
4264
- tone: "neutral",
4265
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SkipForward, { className: "size-3.5" }),
4266
- label: "Skipped",
4267
- title: "Skipped",
4268
- onClick: click
4269
- }
4270
- )
4271
- );
4272
- case "empty":
4273
- return cell(
4274
- /* @__PURE__ */ jsxRuntime.jsx(
4275
- chunkQKOFQMAY_cjs.StatusPill,
4276
- {
4277
- tone: "warning",
4278
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileX, { className: "size-3.5" }),
4279
- label: "Empty",
4280
- title: "Empty - no extractable content",
4281
- onClick: click
4282
- }
4283
- )
4284
- );
4285
- case "low-content":
4286
- return cell(
4287
- /* @__PURE__ */ jsxRuntime.jsx(
4288
- chunkQKOFQMAY_cjs.StatusPill,
4289
- {
4290
- tone: "warning",
4291
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { className: "size-3.5" }),
4292
- label: "Low content",
4293
- title: "Low content - minimal extractable content",
4294
- onClick: click
4295
- }
4296
- )
4297
- );
4298
- case "failed": {
4299
- const quota = parseQuotaError(doc.error_message);
4300
- if (quota) {
4301
- return cell(
4302
- /* @__PURE__ */ jsxRuntime.jsx(
4303
- chunkQKOFQMAY_cjs.StatusPill,
4304
- {
4305
- tone: "warning",
4306
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Zap, { className: "size-3.5" }),
4307
- label: "Quota",
4308
- title: "AI usage used up \u2014 click for options",
4309
- onClick: () => actions?.openQuota?.(quota)
4310
- }
4311
- )
4312
- );
4313
- }
4314
- return cell(
4315
- /* @__PURE__ */ jsxRuntime.jsx(
4316
- chunkQKOFQMAY_cjs.StatusPill,
4317
- {
4318
- tone: "danger",
4319
- icon: /* @__PURE__ */ jsxRuntime.jsx(
4320
- chunkQKOFQMAY_cjs.FailedStageIcon,
4321
- {
4322
- stage: failedStage,
4323
- errorMessage: doc.error_message,
4324
- className: "size-3.5"
4325
- }
4326
- ),
4327
- label: "Failed",
4328
- onClick: click
4329
- }
4330
- )
4331
- );
4332
- }
4333
- case "queued": {
4334
- const isDocx = doc.file_name?.toLowerCase().endsWith(".docx");
4335
- return cell(
4336
- /* @__PURE__ */ jsxRuntime.jsx(
4337
- chunkQKOFQMAY_cjs.StatusPill,
4338
- {
4339
- tone: "neutral",
4340
- label: isDocx ? "Uploaded" : "Queued",
4341
- progress: "queued",
4342
- title: isDocx ? "The document is available to edit. PDF and search indexing are processing." : "Queued - waiting to start",
4343
- onClick: click
4344
- }
4345
- )
4346
- );
4347
- }
4348
- case "parsing":
4349
- case "encrypting":
4350
- case "indexing":
4351
- case "analysing":
4352
- return cell(
4353
- /* @__PURE__ */ jsxRuntime.jsx(
4354
- chunkQKOFQMAY_cjs.StatusPill,
4355
- {
4356
- tone: "info",
4357
- label: PROCESSING_LABELS[status],
4358
- progress: "processing",
4359
- title: PROCESSING_LABELS[status],
4360
- onClick: click
4361
- }
4362
- )
4363
- );
4364
- default:
4365
- return cell(/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: status }));
4366
- }
4367
- });
4368
- var UserAvatar = React9.memo(function UserAvatar2({
4369
- user,
4370
- isMe = false,
4371
- onOpen
4372
- }) {
4373
- if (!user) return /* @__PURE__ */ jsxRuntime.jsx(ui.UserEntity, { empty: true, size: "xs" });
4374
- const colorClass = ui.getUserAvatarColor(user.external_id);
4375
- const agent = ui.isAgent(user);
4376
- return /* @__PURE__ */ jsxRuntime.jsx(
4377
- ui.UserEntity,
4378
- {
4379
- size: "xs",
4380
- variant: "icon",
4381
- showTooltip: false,
4382
- interactive: !!onOpen,
4383
- initials: ui.getUserInitials(user),
4384
- displayName: isMe ? "You" : ui.getUserDisplayName(user),
4385
- picture: user.picture,
4386
- colorClass,
4387
- isAgent: agent,
4388
- isVerified: user.is_identity_verified === true,
4389
- agentStyle: agent ? ui.agentAvatarColors(colorClass) : void 0,
4390
- isMe,
4391
- onClick: onOpen ? (e) => {
4392
- e.stopPropagation();
4393
- onOpen(user.external_id);
4394
- } : void 0
4395
- }
4396
- );
4397
- });
4398
- function DocumentSummaryTooltip({
4399
- doc,
4400
- users
4401
- }) {
4402
- const { data: tags } = react.useTags();
4403
- const modifiedBy = users.find(
4404
- (u) => u.external_id === (doc.updated_by_ext_id ?? doc.created_by_ext_id)
4405
- );
4406
- const tagNameById = /* @__PURE__ */ new Map();
4407
- for (const tag of tags ?? []) tagNameById.set(tag.external_id, tag.name);
4408
- return /* @__PURE__ */ jsxRuntime.jsx(FileTooltipContent, { doc, modifiedBy, tagNameById });
4409
- }
4410
- var OPEN_AFTER_DOUBLE_CLICK_WINDOW_MS = 300;
4411
- var DocumentNameCell = React9.memo(function DocumentNameCell2({
4412
- doc,
4413
- canEdit,
4414
- users,
4415
- onOpen,
4416
- onReview,
4417
- onDocumentChat,
4418
- onRename,
4419
- onDownload,
4420
- onMove,
4421
- onDelete
4422
- }) {
4423
- const arbi = react.useArbi();
4424
- const { notify: notify18 } = chunkI72IYIO2_cjs.useBlocksEnvironment();
4425
- const isViewing = react.useOpenViewerDocumentId() === doc.external_id;
4426
- const openTimerRef = React9.useRef(void 0);
4427
- React9.useEffect(() => () => window.clearTimeout(openTimerRef.current), []);
4428
- const downloadMarkup = async () => {
4429
- try {
4430
- const { blob, fileName } = await documentTools.fetchMarkupPdf(arbi.getClient().fetch, doc.external_id);
4431
- documentTools.downloadBlob(blob, fileName);
4432
- } catch (e) {
4433
- notify18(e instanceof Error ? e.message : "The markup could not be downloaded", "error");
4434
- }
4435
- };
4436
- return /* @__PURE__ */ jsxRuntime.jsx(
4437
- chunkQKOFQMAY_cjs.DocumentNameCellFrame,
4438
- {
4439
- testId: `open-document-viewer-button-${doc.external_id}`,
4440
- isViewing,
4441
- subtitle: [doc.created_at?.slice(0, 10), doc.folder ? ui.formatFolderLabel(doc.folder) : null].filter(Boolean).join(" \xB7 "),
4442
- children: /* @__PURE__ */ jsxRuntime.jsx(
4443
- ui.DocumentEntity,
4444
- {
4445
- doc,
4446
- size: "base",
4447
- labelMaxWidth: "max-w-full",
4448
- fullWidth: true,
4449
- status: /* @__PURE__ */ jsxRuntime.jsx(DocumentStatusGlyph, { doc }),
4450
- tooltipContent: /* @__PURE__ */ jsxRuntime.jsx(DocumentSummaryTooltip, { doc, users }),
4451
- iconBadge: /* @__PURE__ */ jsxRuntime.jsx(
4452
- DocumentSyncGlyph,
4453
- {
4454
- docExtId: doc.external_id,
4455
- size: 10,
4456
- className: "absolute -bottom-1 -right-1"
4457
- }
4458
- ),
4459
- onClick: (e) => {
4460
- e.stopPropagation();
4461
- window.clearTimeout(openTimerRef.current);
4462
- if (e.detail > 1) return;
4463
- openTimerRef.current = window.setTimeout(onOpen, OPEN_AFTER_DOUBLE_CLICK_WINDOW_MS);
4464
- },
4465
- actions: /* @__PURE__ */ jsxRuntime.jsx(
4466
- chunkQKOFQMAY_cjs.DocumentRowMenu,
4467
- {
4468
- canEdit,
4469
- onOpen,
4470
- onReview,
4471
- onDocumentChat,
4472
- onRename,
4473
- onDownload,
4474
- onDownloadMarkup: documentTools.currentHasMarkup(doc) ? () => void downloadMarkup() : void 0,
4475
- downloadMarkupDisabledReason: documentTools.isSignedVersion(doc) ? documentTools.SIGNED_LOCKED_REASON : void 0,
4476
- onMove,
4477
- onDelete
4478
- }
4479
- ),
4480
- className: "min-w-0 max-w-full border-transparent bg-transparent hover:bg-foreground/5"
4481
- }
4482
- )
4483
- }
4484
- );
4485
- });
4486
- var DocumentSharedCell = React9.memo(function DocumentSharedCell2({
4487
- document: document2,
4488
- disabled = false,
4489
- disabledTooltip,
4490
- onToggle
4491
- }) {
4492
- const handleToggle = React9.useCallback(
4493
- (shouldShare) => onToggle(document2.external_id, shouldShare),
4494
- [document2.external_id, onToggle]
4495
- );
4496
- return /* @__PURE__ */ jsxRuntime.jsx(
4497
- chunkVQHXVY26_cjs.SharedCell,
4498
- {
4499
- item: document2,
4500
- onToggle: handleToggle,
4501
- disabled,
4502
- disabledTooltip,
4503
- tooltipActive: chunkQKOFQMAY_cjs.visibilityToggleTooltip(true),
4504
- tooltipInactive: chunkQKOFQMAY_cjs.visibilityToggleTooltip(false),
4505
- workspaceLabel: ui.getEntityLabel("WORKSPACE")
4506
- }
4507
- );
4508
- });
4509
- function useDocumentFolders(documents, value) {
4510
- return React9.useMemo(() => {
4511
- const paths = /* @__PURE__ */ new Set();
4512
- for (const doc of documents) if (doc.folder) paths.add(doc.folder);
4513
- if (value) paths.add(value);
4514
- return [...paths].sort((a, b) => a.localeCompare(b));
4515
- }, [documents, value]);
4516
- }
4517
- function folderSegments(folder) {
4518
- return folder.split("/").map((part, i) => i === 0 ? chunkQKOFQMAY_cjs.formatFolderSegment(part) : part).filter((part, i) => i > 0 || part !== "");
4519
- }
4520
- var DocumentFolderCell = React9.memo(
4521
- function DocumentFolderCell2({
4522
- document: document2,
4523
- isEditable,
4524
- allDocuments,
4525
- onUpdateFolder
4526
- }) {
4527
- const folder = document2.folder;
4528
- const folders = useDocumentFolders(allDocuments, folder);
4529
- return /* @__PURE__ */ jsxRuntime.jsx(
4530
- chunkQKOFQMAY_cjs.FolderCell,
4531
- {
4532
- folder,
4533
- segments: folder ? folderSegments(folder) : [],
4534
- icon: folder && chunkQKOFQMAY_cjs.hasFolderProviderIcon(folder) ? /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FolderProviderIcon, { folderPath: folder, className: "h-3.5 w-3.5 flex-none shrink-0" }) : void 0,
4535
- isEditable,
4536
- picker: /* @__PURE__ */ jsxRuntime.jsx(
4537
- chunkQKOFQMAY_cjs.FolderCommandList,
4538
- {
4539
- folders,
4540
- value: folder,
4541
- onSelect: (next) => onUpdateFolder(document2.external_id, next),
4542
- showRemove: !!folder
4543
- }
4544
- )
4545
- }
4546
- );
4547
- },
4548
- (prev, next) => prev.document.external_id === next.document.external_id && prev.document.folder === next.document.folder && prev.isEditable === next.isEditable && prev.allDocuments === next.allDocuments && prev.onUpdateFolder === next.onUpdateFolder
4549
- );
4550
- var RELATION_LABELS = {
4551
- redaction: "Redacted copy",
4552
- annotated: "Annotated copy",
4553
- production: "Production",
4554
- crop: "Crop",
4555
- redline_base: "Redline",
4556
- redline_revised: "Redline",
4557
- translation: "Translation"
4558
- };
4559
- var relationLabel = (role, version) => {
4560
- const label = role ? RELATION_LABELS[role] : void 0;
4561
- return version ? `${label ?? "Made"} from v${version}` : label;
4562
- };
4563
- var RelatedDocumentsCell = React9.memo(function RelatedDocumentsCell2({
4564
- currentDoc,
4565
- related,
4566
- viewingDocumentId,
4567
- onDocumentClick,
4568
- onDelete,
4569
- onCompare
4570
- }) {
4571
- return /* @__PURE__ */ jsxRuntime.jsx(
4572
- chunkQKOFQMAY_cjs.RelatedDocsCell,
4573
- {
4574
- parent: related.parent,
4575
- attachments: related.children,
4576
- madeFrom: related.madeFrom,
4577
- copies: related.copies,
4578
- getRelation: (doc) => relationLabel(related.roles[doc.external_id], related.versions?.[doc.external_id]),
4579
- duplicates: related.duplicates,
4580
- similar: related.similar.map(({ doc }) => doc),
4581
- renderDoc: (doc) => /* @__PURE__ */ jsxRuntime.jsx(
4582
- ui.DocumentEntity,
4583
- {
4584
- doc,
4585
- icon: viewingDocumentId === doc.external_id ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Eye, { className: "h-3.5 w-3.5 flex-shrink-0 text-primary" }) : void 0,
4586
- onClick: () => onDocumentClick(doc.external_id)
4587
- }
4588
- ),
4589
- getKey: (doc) => doc.external_id,
4590
- onSwitchTo: (doc) => {
4591
- const version = related.versions?.[doc.external_id];
4592
- onDocumentClick(version ? `${doc.external_id}@v${version}` : doc.external_id);
4593
- },
4594
- onDelete,
4595
- onCompare: onCompare ? (doc) => onCompare(currentDoc.external_id, doc.external_id) : void 0
4596
- }
4597
- );
4598
- });
4599
- var NOT_A_MEMBER_MESSAGE = "Join this workspace as a collaborator or owner to create or apply labels.";
4600
- var DocumentLabelsCell = React9.memo(function DocumentLabelsCell2({
4601
- doc,
4602
- labels,
4603
- createDocTag,
4604
- deleteDocTag,
4605
- createTag,
4606
- isMember,
4607
- rowHeight,
4608
- actions
4609
- }) {
4610
- const isCreatingTag = react.useIsCreatingTag();
4611
- const { notify: notify18 } = chunkI72IYIO2_cjs.useBlocksEnvironment();
4612
- const options2 = React9.useMemo(
4613
- () => labels.map((t) => ({
4614
- id: t.external_id,
4615
- name: t.name,
4616
- color: ui.getEntityColor(t.external_id, "medium")
4617
- })),
4618
- [labels]
4619
- );
4620
- const appliedIds = React9.useMemo(
4621
- () => new Set(
4622
- (doc.doctags || []).filter((dt) => labels.some((t) => t.external_id === dt.tag_ext_id)).map((dt) => dt.tag_ext_id)
4623
- ),
4624
- [doc.doctags, labels]
4625
- );
4626
- const applyTag = React9.useCallback(
4627
- (tagId) => createDocTag.mutateAsync({ tagId, docIds: [doc.external_id] }),
4628
- [createDocTag, doc.external_id]
4629
- );
4630
- const handleToggle = React9.useCallback(
4631
- async (tagId) => {
4632
- if (!isMember) return notify18(NOT_A_MEMBER_MESSAGE, "info");
4633
- if (appliedIds.has(tagId)) {
4634
- await deleteDocTag.mutateAsync({ tagId, docIds: [doc.external_id] });
4635
- } else {
4636
- await applyTag(tagId);
4637
- }
4638
- },
4639
- [isMember, appliedIds, deleteDocTag, applyTag, doc.external_id, notify18]
4640
- );
4641
- const handleCreate = React9.useCallback(
4642
- async (name) => {
4643
- const trimmed = name.trim();
4644
- if (!trimmed) return;
4645
- if (!isMember) return notify18(NOT_A_MEMBER_MESSAGE, "info");
4646
- const existing = labels.find((t) => t.name.toLowerCase() === trimmed.toLowerCase());
4647
- if (existing) {
4648
- if (!appliedIds.has(existing.external_id)) await applyTag(existing.external_id);
4649
- return;
4650
- }
4651
- if (isCreatingTag(trimmed)) return;
4652
- const created = await createTag.mutateAsync({
4653
- name: trimmed,
4654
- tagType: { type: "checkbox", options: [] },
4655
- shared: false
4656
- });
4657
- if (created?.external_id) await applyTag(created.external_id);
4658
- },
4659
- [isMember, labels, appliedIds, createTag, applyTag, isCreatingTag, notify18]
4660
- );
4661
- const openFieldsManager = actions?.openFieldsManager;
4662
- return /* @__PURE__ */ jsxRuntime.jsx(
4663
- chunk5Y6V7F6W_cjs.LabelMultiSelectView,
4664
- {
4665
- options: options2,
4666
- appliedIds,
4667
- onToggle: handleToggle,
4668
- onCreate: handleCreate,
4669
- onEditLabels: openFieldsManager ? () => openFieldsManager() : void 0,
4670
- rowHeight
4671
- }
4672
- );
4673
- });
4674
- function DocumentUser({
4675
- user,
4676
- tooltip = true,
4677
- variant = "icon"
4678
- }) {
4679
- const { renderUser: renderUser2 } = react.useDocumentsSupport();
4680
- const { openUser } = react.useDocumentHostActions();
4681
- if (user && renderUser2) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: renderUser2(user, { tooltip, variant }) });
4682
- if (user && variant === "pill")
4683
- return /* @__PURE__ */ jsxRuntime.jsx(
4684
- ui.UserEntity,
4685
- {
4686
- size: "sm",
4687
- variant: "pill",
4688
- displayName: ui.getUserDisplayName(user),
4689
- picture: user.picture,
4690
- initials: `${user.given_name?.charAt(0) ?? ""}${user.family_name?.charAt(0) ?? ""}`
4691
- }
4692
- );
4693
- return /* @__PURE__ */ jsxRuntime.jsx(UserAvatar, { user, onOpen: openUser });
4694
- }
4695
- function useMemberLookup() {
4696
- const { data: members = [] } = react.useWorkspaceUsers();
4697
- return React9.useCallback(
4698
- (userId) => userId ? members.find((m) => m.user.external_id === userId)?.user : void 0,
4699
- [members]
4700
- );
4701
- }
4702
3632
  var ANNOTATION_FORMATS = ["text", "select", "number", "date"];
4703
3633
  var isAnnotationFormat = (type) => ANNOTATION_FORMATS.includes(type ?? "");
4704
3634
  function kindOptions(group, tag) {
@@ -4719,7 +3649,7 @@ function ConnectedTagForm({
4719
3649
  nameByKind = false
4720
3650
  }) {
4721
3651
  const isCreate = !tag;
4722
- const memberById = useMemberLookup();
3652
+ const memberById = chunkS7B5E3RU_cjs.useMemberLookup();
4723
3653
  const creator = memberById(tag?.created_by_ext_id);
4724
3654
  const updater = memberById(tag?.updated_by_ext_id);
4725
3655
  const fieldLabel = ui.getEntityLabel("TAG", "SINGULAR");
@@ -4799,19 +3729,19 @@ function ConnectedTagForm({
4799
3729
  metaLines.push({
4800
3730
  text: `Created ${ui.formatFriendlyDate(tag.created_at)}`,
4801
3731
  byLabel: "by",
4802
- by: creator ? /* @__PURE__ */ jsxRuntime.jsx(DocumentUser, { user: creator }) : void 0
3732
+ by: creator ? /* @__PURE__ */ jsxRuntime.jsx(chunkS7B5E3RU_cjs.DocumentUser, { user: creator }) : void 0
4803
3733
  });
4804
3734
  if (tag.updated_at && tag.updated_at !== tag.created_at) {
4805
3735
  metaLines.push({
4806
3736
  text: `Updated ${ui.formatFriendlyDate(tag.updated_at)}`,
4807
3737
  byLabel: "by",
4808
- by: updater ? /* @__PURE__ */ jsxRuntime.jsx(DocumentUser, { user: updater }) : void 0
3738
+ by: updater ? /* @__PURE__ */ jsxRuntime.jsx(chunkS7B5E3RU_cjs.DocumentUser, { user: updater }) : void 0
4809
3739
  });
4810
3740
  }
4811
3741
  }
4812
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkQKOFQMAY_cjs.TagFormRoot, { children: [
3742
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunk5YX3R6CK_cjs.TagFormRoot, { children: [
4813
3743
  !nameOnRow && /* @__PURE__ */ jsxRuntime.jsx(
4814
- chunkQKOFQMAY_cjs.TagFormNameField,
3744
+ chunk5YX3R6CK_cjs.TagFormNameField,
4815
3745
  {
4816
3746
  label: group || nameByKind ? `${ui.tagKindTitle(kind)} Name` : `${columnLabel} Name`,
4817
3747
  placeholder: `Enter ${kindNoun ?? columnLabel.toLowerCase()} name...`,
@@ -4821,7 +3751,7 @@ function ConnectedTagForm({
4821
3751
  }
4822
3752
  ),
4823
3753
  kinds.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(
4824
- chunkQKOFQMAY_cjs.TagFormSelectField,
3754
+ chunk5YX3R6CK_cjs.TagFormSelectField,
4825
3755
  {
4826
3756
  label: "Kind",
4827
3757
  testId: "inline-tag-form-kind-field",
@@ -4836,7 +3766,7 @@ function ConnectedTagForm({
4836
3766
  }
4837
3767
  ),
4838
3768
  kind === "annotation" && /* @__PURE__ */ jsxRuntime.jsx(
4839
- chunkQKOFQMAY_cjs.TagFormSelectField,
3769
+ chunk5YX3R6CK_cjs.TagFormSelectField,
4840
3770
  {
4841
3771
  label: group === "annotation" ? "Value type" : "Field Type",
4842
3772
  testId: "inline-tag-form-type-field",
@@ -4848,7 +3778,7 @@ function ConnectedTagForm({
4848
3778
  }
4849
3779
  ),
4850
3780
  showParentPicker && /* @__PURE__ */ jsxRuntime.jsx(
4851
- chunkQKOFQMAY_cjs.TagFormSelectField,
3781
+ chunk5YX3R6CK_cjs.TagFormSelectField,
4852
3782
  {
4853
3783
  label: "Nested Under",
4854
3784
  value: parentId,
@@ -4872,14 +3802,14 @@ function ConnectedTagForm({
4872
3802
  hint: !canClearParent ? "This field can move to a different parent, but the API has no way to move it back to the top level." : void 0
4873
3803
  }
4874
3804
  ),
4875
- nestingEnabled && hasChildren && /* @__PURE__ */ jsxRuntime.jsxs(chunkQKOFQMAY_cjs.TagFormNote, { testId: "inline-tag-form-parent-locked", children: [
3805
+ nestingEnabled && hasChildren && /* @__PURE__ */ jsxRuntime.jsxs(chunk5YX3R6CK_cjs.TagFormNote, { testId: "inline-tag-form-parent-locked", children: [
4876
3806
  "Other fields are nested under this one, so it cannot itself be nested \u2014 fields nest",
4877
3807
  " ",
4878
3808
  browser.TAG_NESTING_MAX_DEPTH,
4879
3809
  " levels deep."
4880
3810
  ] }),
4881
3811
  tagType === "select" && /* @__PURE__ */ jsxRuntime.jsx(
4882
- chunkQKOFQMAY_cjs.TagFormOptionsEditor,
3812
+ chunk5YX3R6CK_cjs.TagFormOptionsEditor,
4883
3813
  {
4884
3814
  label: "Options",
4885
3815
  options: options2,
@@ -4892,7 +3822,7 @@ function ConnectedTagForm({
4892
3822
  }
4893
3823
  ),
4894
3824
  tagType === "text" && /* @__PURE__ */ jsxRuntime.jsx(
4895
- chunkQKOFQMAY_cjs.TagFormInstructionField,
3825
+ chunk5YX3R6CK_cjs.TagFormInstructionField,
4896
3826
  {
4897
3827
  label: "AI Instruction",
4898
3828
  optionalLabel: "(optional)",
@@ -4902,12 +3832,12 @@ function ConnectedTagForm({
4902
3832
  onChange: setInstruction
4903
3833
  }
4904
3834
  ),
4905
- metaLines.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.TagFormMeta, { lines: metaLines }),
3835
+ metaLines.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.TagFormMeta, { lines: metaLines }),
4906
3836
  /* @__PURE__ */ jsxRuntime.jsx(
4907
- chunkQKOFQMAY_cjs.TagFormFooter,
3837
+ chunk5YX3R6CK_cjs.TagFormFooter,
4908
3838
  {
4909
3839
  sharedToggle: isCreate ? /* @__PURE__ */ jsxRuntime.jsx(
4910
- chunkQKOFQMAY_cjs.TagFormSharedToggle,
3840
+ chunk5YX3R6CK_cjs.TagFormSharedToggle,
4911
3841
  {
4912
3842
  label: "Shared with workspace",
4913
3843
  toggle: /* @__PURE__ */ jsxRuntime.jsx(
@@ -5205,7 +4135,7 @@ function KindSection({
5205
4135
  {
5206
4136
  testId: `tags-kind-${kind}`,
5207
4137
  title: ui.tagKindTitle(kind, { plural: true }),
5208
- description: chunkVQHXVY26_cjs.tagKindDescription(kind),
4138
+ description: chunkRTS3B2W7_cjs.tagKindDescription(kind),
5209
4139
  actions: picker,
5210
4140
  children: [
5211
4141
  browser.isEntityTag({ kind }) && extractingCount > 0 && /* @__PURE__ */ jsxRuntime.jsxs(
@@ -5216,9 +4146,9 @@ function KindSection({
5216
4146
  children: [
5217
4147
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-4 animate-spin" }),
5218
4148
  "Extracting ",
5219
- chunkVQHXVY26_cjs.entitiesPhrase().toLowerCase(),
4149
+ chunkRTS3B2W7_cjs.entitiesPhrase().toLowerCase(),
5220
4150
  " from ",
5221
- chunkVQHXVY26_cjs.documentCount(extractingCount),
4151
+ chunkRTS3B2W7_cjs.documentCount(extractingCount),
5222
4152
  "\u2026"
5223
4153
  ]
5224
4154
  }
@@ -5236,7 +4166,7 @@ function KindSection({
5236
4166
  onOpenDocument: (id) => openDocument(id),
5237
4167
  onOpenFact: ctx.onOpenFact,
5238
4168
  onOpenThread: (id) => openConversation(id),
5239
- labels: chunkVQHXVY26_cjs.tagTableLabels(kind),
4169
+ labels: chunkRTS3B2W7_cjs.tagTableLabels(kind),
5240
4170
  testId: `tags-table-${kind}`
5241
4171
  }
5242
4172
  )
@@ -5338,12 +4268,12 @@ function TagSection({
5338
4268
  onOpenDocument: (id) => openDocument(id),
5339
4269
  onOpenFact: ctx.onOpenFact,
5340
4270
  onOpenThread: (id) => openConversation(id),
5341
- labels: chunkVQHXVY26_cjs.tagTableLabels(tag.kind),
4271
+ labels: chunkRTS3B2W7_cjs.tagTableLabels(tag.kind),
5342
4272
  testId: "tags-rows"
5343
4273
  }
5344
4274
  ),
5345
4275
  /* @__PURE__ */ jsxRuntime.jsx(
5346
- chunkVQHXVY26_cjs.TagDetail,
4276
+ chunkRTS3B2W7_cjs.TagDetail,
5347
4277
  {
5348
4278
  row: detailRow && narrowTagRow(detailRow, ctx.filter.matches),
5349
4279
  fields: schema.data?.fields ?? [],
@@ -5355,10 +4285,10 @@ function TagSection({
5355
4285
  onOpenDocument: (id) => openDocument(id),
5356
4286
  onOpenFact: ctx.onOpenFact,
5357
4287
  onOpenThread: (id) => openConversation(id),
5358
- noteLabel: chunkVQHXVY26_cjs.tagNoteLabel(tag.kind),
4288
+ noteLabel: chunkRTS3B2W7_cjs.tagNoteLabel(tag.kind),
5359
4289
  noteIsValue: tag.kind === "annotation",
5360
4290
  renderPassages: (d, label) => renderPassages(d.doc_ext_id, label),
5361
- labels: chunkVQHXVY26_cjs.tagDetailLabels(),
4291
+ labels: chunkRTS3B2W7_cjs.tagDetailLabels(),
5362
4292
  testId: "tags-detail"
5363
4293
  }
5364
4294
  )
@@ -5446,7 +4376,7 @@ function ConnectedTagsPage({
5446
4376
  const onDelete = async (t) => {
5447
4377
  const nested = browser.getChildTags([...tags], t.external_id);
5448
4378
  const uses = browser.tagUseCount(t);
5449
- const n2 = chunkVQHXVY26_cjs.tagsPageNouns();
4379
+ const n2 = chunkRTS3B2W7_cjs.tagsPageNouns();
5450
4380
  const tagNoun = (count2) => (count2 === 1 ? n2.tag : n2.tags).toLowerCase();
5451
4381
  const carriers = uses === 1 ? `${n2.document}, ${n2.fact} or ${n2.thread}` : `${n2.documents}, ${n2.facts} and ${n2.threads}`;
5452
4382
  const message = `Delete ${ui.tagKindNouns(t.kind).singular} "${t.name}"?` + (uses > 0 ? `
@@ -5467,16 +4397,16 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
5467
4397
  try {
5468
4398
  await extract.mutateAsync(docIds);
5469
4399
  notify18(
5470
- `Extracting ${chunkVQHXVY26_cjs.entitiesPhrase().toLowerCase()} from ${chunkVQHXVY26_cjs.documentCount(docIds.length)}. You will be notified when it is done.`,
4400
+ `Extracting ${chunkRTS3B2W7_cjs.entitiesPhrase().toLowerCase()} from ${chunkRTS3B2W7_cjs.documentCount(docIds.length)}. You will be notified when it is done.`,
5471
4401
  "info"
5472
4402
  );
5473
4403
  } catch (error) {
5474
- notify18(browser.refusalReason(error, `Could not extract ${chunkVQHXVY26_cjs.entitiesPhrase().toLowerCase()}`), "error");
4404
+ notify18(browser.refusalReason(error, `Could not extract ${chunkRTS3B2W7_cjs.entitiesPhrase().toLowerCase()}`), "error");
5475
4405
  throw error;
5476
4406
  }
5477
4407
  };
5478
4408
  const picker = /* @__PURE__ */ jsxRuntime.jsx(
5479
- chunkVQHXVY26_cjs.TagPicker,
4409
+ chunkRTS3B2W7_cjs.TagPicker,
5480
4410
  {
5481
4411
  tags: viewTags,
5482
4412
  selectedId: tag?.external_id,
@@ -5490,10 +4420,10 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
5490
4420
  onOpenTag: openTag,
5491
4421
  onOpenFact
5492
4422
  };
5493
- const n = chunkVQHXVY26_cjs.tagsPageNouns();
4423
+ const n = chunkRTS3B2W7_cjs.tagsPageNouns();
5494
4424
  const action = view === "person" || view === "organisation" ? {
5495
4425
  label: "Extract",
5496
- title: `Extract ${chunkVQHXVY26_cjs.entitiesPhrase().toLowerCase()} from ${n.documents.toLowerCase()}`,
4426
+ title: `Extract ${chunkRTS3B2W7_cjs.entitiesPhrase().toLowerCase()} from ${n.documents.toLowerCase()}`,
5497
4427
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "h-4 w-4" }),
5498
4428
  run: () => setExtracting(true),
5499
4429
  testId: "tags-extract-entities"
@@ -5533,7 +4463,7 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
5533
4463
  onTabChange: () => {
5534
4464
  },
5535
4465
  variant: "underline",
5536
- firstTabContent: /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FilesFilterBar, { className: "flex-none", "data-testid": "tags-header-actions", children: /* @__PURE__ */ jsxRuntime.jsx(
4466
+ firstTabContent: /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.FilesFilterBar, { className: "flex-none", "data-testid": "tags-header-actions", children: /* @__PURE__ */ jsxRuntime.jsx(
5537
4467
  chunk2EI7NCUA_cjs.FilterInput,
5538
4468
  {
5539
4469
  value: filterText,
@@ -5561,7 +4491,7 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
5561
4491
  )
5562
4492
  }
5563
4493
  ) }),
5564
- centerContent: /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FilesViewCenter, { children: /* @__PURE__ */ jsxRuntime.jsx(
4494
+ centerContent: /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.FilesViewCenter, { children: /* @__PURE__ */ jsxRuntime.jsx(
5565
4495
  chunk2WLXQGWC_cjs.ViewToggle,
5566
4496
  {
5567
4497
  options: browser.TAG_KINDS.map((k) => ({
@@ -5643,7 +4573,7 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
5643
4573
  }
5644
4574
  ),
5645
4575
  /* @__PURE__ */ jsxRuntime.jsx(
5646
- chunkVQHXVY26_cjs.ExtractEntitiesDialog,
4576
+ chunkRTS3B2W7_cjs.ExtractEntitiesDialog,
5647
4577
  {
5648
4578
  open: extracting,
5649
4579
  onOpenChange: setExtracting,
@@ -6422,7 +5352,7 @@ function useFactFilters(notes, view, chat) {
6422
5352
  (selected, setSelected, opts) => {
6423
5353
  const applied = new Set(selected);
6424
5354
  return /* @__PURE__ */ jsxRuntime.jsx(chunkYD3RN2FY_cjs.FactFieldRow, { label: "Labels", children: /* @__PURE__ */ jsxRuntime.jsx(
6425
- chunkQKOFQMAY_cjs.FieldLabelsSelect,
5355
+ chunk5YX3R6CK_cjs.FieldLabelsSelect,
6426
5356
  {
6427
5357
  options: labelOptions,
6428
5358
  appliedIds: applied,
@@ -6648,7 +5578,7 @@ var FactHeader = React9.memo(function FactHeader2({
6648
5578
  if (params.enableSorting) params.progressSort(e.shiftKey);
6649
5579
  },
6650
5580
  children: [
6651
- /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FilterButton, { params, colId }),
5581
+ /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.FilterButton, { params, colId }),
6652
5582
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "order-2 min-w-0 flex-1 truncate", children: params.displayName }),
6653
5583
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ag-sort-indicator-container order-2 flex-shrink-0", "aria-hidden": "true", children: [
6654
5584
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -6912,7 +5842,7 @@ function useFactsGrid({
6912
5842
  var DEFAULT_TIMELINE_LABEL_WIDTH = 240;
6913
5843
  function useFactsPageView() {
6914
5844
  const [view, setView] = React9.useState("table");
6915
- const [rowHeight, setRowHeight] = React9.useState(chunkQKOFQMAY_cjs.ROW_MIN);
5845
+ const [rowHeight, setRowHeight] = React9.useState(chunk5YX3R6CK_cjs.ROW_MIN);
6916
5846
  const [labelWidth, setLabelWidth] = React9.useState(DEFAULT_TIMELINE_LABEL_WIDTH);
6917
5847
  const [zoom, setZoom] = React9.useState(1);
6918
5848
  const [filterText, setFilterText] = React9.useState("");
@@ -7276,7 +6206,7 @@ function ConnectedExportPanel({
7276
6206
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col h-full", "data-testid": "export-documents", children: [
7277
6207
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 overflow-auto space-y-6 p-6", children: [
7278
6208
  jobRunning && job && /* @__PURE__ */ jsxRuntime.jsx(
7279
- chunkQKOFQMAY_cjs.TransferProgressView,
6209
+ chunk5YX3R6CK_cjs.TransferProgressView,
7280
6210
  {
7281
6211
  title: `${job.mode === "move" ? "Moving" : "Copying"} to ${targetName(job.target_workspace_ext_id)}`,
7282
6212
  processed: job.processed ?? 0,
@@ -7289,7 +6219,7 @@ function ConnectedExportPanel({
7289
6219
  ),
7290
6220
  jobDone && job && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7291
6221
  react.isTransferResumable(job) && /* @__PURE__ */ jsxRuntime.jsx(
7292
- chunkQKOFQMAY_cjs.TransferResumeBanner,
6222
+ chunk5YX3R6CK_cjs.TransferResumeBanner,
7293
6223
  {
7294
6224
  message: `Stopped at ${job.processed} of ${job.total}. Resume to finish \u2014 nothing is copied twice.`,
7295
6225
  onResume: () => handleResume(job),
@@ -7297,7 +6227,7 @@ function ConnectedExportPanel({
7297
6227
  }
7298
6228
  ),
7299
6229
  /* @__PURE__ */ jsxRuntime.jsx(
7300
- chunkQKOFQMAY_cjs.ExportResultsReport,
6230
+ chunk5YX3R6CK_cjs.ExportResultsReport,
7301
6231
  {
7302
6232
  summary: `${job.mode === "move" ? "Moved" : "Copied"} ${plural(
7303
6233
  Number(job.counts?.copied ?? 0) + Number(job.counts?.removed ?? 0),
@@ -7310,7 +6240,7 @@ function ConnectedExportPanel({
7310
6240
  ] }),
7311
6241
  !jobId && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7312
6242
  resumable && /* @__PURE__ */ jsxRuntime.jsx(
7313
- chunkQKOFQMAY_cjs.TransferResumeBanner,
6243
+ chunk5YX3R6CK_cjs.TransferResumeBanner,
7314
6244
  {
7315
6245
  message: `A ${resumable.mode} to ${targetName(resumable.target_workspace_ext_id)} stopped at ${resumable.processed} of ${resumable.total}.`,
7316
6246
  onResume: () => handleResume(resumable),
@@ -7318,7 +6248,7 @@ function ConnectedExportPanel({
7318
6248
  }
7319
6249
  ),
7320
6250
  /* @__PURE__ */ jsxRuntime.jsx(
7321
- chunkQKOFQMAY_cjs.TransferScopeChooser,
6251
+ chunk5YX3R6CK_cjs.TransferScopeChooser,
7322
6252
  {
7323
6253
  scope: scopeChoice,
7324
6254
  onScopeChange: setScopeChoice,
@@ -7329,7 +6259,7 @@ function ConnectedExportPanel({
7329
6259
  }
7330
6260
  ),
7331
6261
  /* @__PURE__ */ jsxRuntime.jsx(
7332
- chunkQKOFQMAY_cjs.TransferKindsPicker,
6262
+ chunk5YX3R6CK_cjs.TransferKindsPicker,
7333
6263
  {
7334
6264
  options: ALL_KINDS.map((kind) => ({
7335
6265
  kind,
@@ -7342,9 +6272,9 @@ function ConnectedExportPanel({
7342
6272
  )
7343
6273
  }
7344
6274
  ),
7345
- /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.TransferReferencesChooser, { value: references, onChange: setReferences }),
6275
+ /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.TransferReferencesChooser, { value: references, onChange: setReferences }),
7346
6276
  /* @__PURE__ */ jsxRuntime.jsx(
7347
- chunkQKOFQMAY_cjs.ExportMethodChooser,
6277
+ chunk5YX3R6CK_cjs.ExportMethodChooser,
7348
6278
  {
7349
6279
  mode,
7350
6280
  onModeChange: setMode,
@@ -7356,17 +6286,17 @@ function ConnectedExportPanel({
7356
6286
  ),
7357
6287
  mode !== "download" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7358
6288
  /* @__PURE__ */ jsxRuntime.jsx(
7359
- chunkQKOFQMAY_cjs.ExportWorkspacePicker,
6289
+ chunk5YX3R6CK_cjs.ExportWorkspacePicker,
7360
6290
  {
7361
6291
  workspaces: workspaceOptions,
7362
6292
  selectedId: targetId,
7363
6293
  onSelect: setTargetId
7364
6294
  }
7365
6295
  ),
7366
- /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.TransferConflictChooser, { value: conflict, onChange: setConflict })
6296
+ /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.TransferConflictChooser, { value: conflict, onChange: setConflict })
7367
6297
  ] }),
7368
6298
  /* @__PURE__ */ jsxRuntime.jsx(
7369
- chunkQKOFQMAY_cjs.TransferPlanSummary,
6299
+ chunk5YX3R6CK_cjs.TransferPlanSummary,
7370
6300
  {
7371
6301
  lines: summary.lines,
7372
6302
  warnings: summary.warnings,
@@ -7383,7 +6313,7 @@ function ConnectedExportPanel({
7383
6313
  ] })
7384
6314
  ] }),
7385
6315
  !jobId && /* @__PURE__ */ jsxRuntime.jsx(
7386
- chunkQKOFQMAY_cjs.ExportFooter,
6316
+ chunk5YX3R6CK_cjs.ExportFooter,
7387
6317
  {
7388
6318
  onCancel: onClose,
7389
6319
  onSubmit: handleSubmit,
@@ -7424,7 +6354,7 @@ function OpenExportDialog({
7424
6354
  children: [
7425
6355
  /* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalHeader, { children: [
7426
6356
  /* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: /* @__PURE__ */ jsxRuntime.jsx(
7427
- chunkQKOFQMAY_cjs.ExportModalTitle,
6357
+ chunk5YX3R6CK_cjs.ExportModalTitle,
7428
6358
  {
7429
6359
  workspace: workspace ? {
7430
6360
  icon: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "touch-hit inline-flex", children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -7592,7 +6522,7 @@ function ConnectedFactsPage({
7592
6522
  setView(request.view === "list" ? "table" : request.view);
7593
6523
  onRequestHandled?.("view");
7594
6524
  }, [request?.view]);
7595
- const factsRowHeight = pageView.rowHeight === chunkQKOFQMAY_cjs.ROW_MIN ? chunkQKOFQMAY_cjs.ROW_MIN : chunkQKOFQMAY_cjs.rowHeightForLines(chunkQKOFQMAY_cjs.linesForRowHeight(pageView.rowHeight));
6525
+ const factsRowHeight = pageView.rowHeight === chunk5YX3R6CK_cjs.ROW_MIN ? chunk5YX3R6CK_cjs.ROW_MIN : chunk5YX3R6CK_cjs.rowHeightForLines(chunk5YX3R6CK_cjs.linesForRowHeight(pageView.rowHeight));
7596
6526
  const [isExportOpen, setIsExportOpen] = React9.useState(false);
7597
6527
  const [filterOpen, setFilterOpen] = React9.useState(false);
7598
6528
  const [factSection, setFactSection] = React9.useState(null);
@@ -7646,7 +6576,7 @@ function ConnectedFactsPage({
7646
6576
  onNewFact: composing && !editingId ? () => void 0 : composer.startNewFact,
7647
6577
  navSlotRef: setNavSlot,
7648
6578
  navigator: view === "table" ? /* @__PURE__ */ jsxRuntime.jsx(
7649
- chunkVQHXVY26_cjs.GridRowNavigator,
6579
+ chunkRTS3B2W7_cjs.GridRowNavigator,
7650
6580
  {
7651
6581
  gridApi,
7652
6582
  selectedId: editingId,
@@ -7659,7 +6589,7 @@ function ConnectedFactsPage({
7659
6589
  tools: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7660
6590
  view === "table" && /* @__PURE__ */ jsxRuntime.jsx(chunkYD3RN2FY_cjs.FactsFieldsButton, { getGridApi: () => gridApiRef.current }),
7661
6591
  view === "table" && /* @__PURE__ */ jsxRuntime.jsx(
7662
- chunkQKOFQMAY_cjs.RowDensityControl,
6592
+ chunk5YX3R6CK_cjs.RowDensityControl,
7663
6593
  {
7664
6594
  rowHeight: factsRowHeight,
7665
6595
  onRowHeightChange: pageView.setRowHeight,
@@ -10574,7 +9504,7 @@ You will lose access to all content in this ${workspaceWord()}.`,
10574
9504
  };
10575
9505
  }
10576
9506
  var memberName = (user) => user.family_name ? `${user.given_name} ${user.family_name}` : user.given_name;
10577
- var ALL_ROLES = ["owner", "collaborator", "guest"].map((value) => ({ value, label: chunkV2UQR7P6_cjs.formatRole(value), badgeClass: chunkV2UQR7P6_cjs.getRoleBadgeClass(value) }));
9507
+ var ALL_ROLES = ["owner", "collaborator", "guest"].map((value) => ({ value, label: chunkQLY22ZZW_cjs.formatRole(value), badgeClass: chunkQLY22ZZW_cjs.getRoleBadgeClass(value) }));
10578
9508
  var BULK_ROLES = ALL_ROLES.filter((r) => r.value !== "owner");
10579
9509
  var ROLE_ORDER = { owner: 0, collaborator: 1, guest: 2 };
10580
9510
  function roleLock(targetId, selfId, isOwner) {
@@ -10621,7 +9551,7 @@ function ConnectedWorkspaceMembers({
10621
9551
  try {
10622
9552
  await updateRoles.mutateAsync({ userIds: rows2.map((r) => r.user.external_id), role });
10623
9553
  notify18(
10624
- single ? `${single}'s role updated to ${chunkV2UQR7P6_cjs.formatRole(role)} in "${workspace.name}"` : `Updated ${rows2.length} users to ${chunkV2UQR7P6_cjs.formatRole(role)} in "${workspace.name}"`,
9554
+ single ? `${single}'s role updated to ${chunkQLY22ZZW_cjs.formatRole(role)} in "${workspace.name}"` : `Updated ${rows2.length} users to ${chunkQLY22ZZW_cjs.formatRole(role)} in "${workspace.name}"`,
10625
9555
  "success"
10626
9556
  );
10627
9557
  return true;
@@ -10678,7 +9608,7 @@ function ConnectedWorkspaceMembers({
10678
9608
  {
10679
9609
  role: row2.role,
10680
9610
  roles: ALL_ROLES,
10681
- tooltip: lock ?? chunkV2UQR7P6_cjs.getRoleDescription(row2.role),
9611
+ tooltip: lock ?? chunkQLY22ZZW_cjs.getRoleDescription(row2.role),
10682
9612
  canChange: !lock,
10683
9613
  isPending: updateRoles.isPending,
10684
9614
  onChange: (value) => void setRoles([row2], value),
@@ -10829,13 +9759,13 @@ function ConnectedWorkspaceSettings({
10829
9759
  const [membersExpanded, setMembersExpanded] = React9.useState(false);
10830
9760
  const [shareOpen, setShareOpen] = React9.useState(false);
10831
9761
  if (!workspace) {
10832
- return /* @__PURE__ */ jsxRuntime.jsx(chunkV2UQR7P6_cjs.PageLoading, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkVQHXVY26_cjs.LoadingIndicator, { message: "Loading workspace..." }) });
9762
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkQLY22ZZW_cjs.PageLoading, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkRTS3B2W7_cjs.LoadingIndicator, { message: "Loading workspace..." }) });
10833
9763
  }
10834
9764
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
10835
- /* @__PURE__ */ jsxRuntime.jsxs(chunkV2UQR7P6_cjs.WorkspacePageFrame, { testId, children: [
10836
- /* @__PURE__ */ jsxRuntime.jsxs(chunkV2UQR7P6_cjs.WorkspaceIdentityPanel, { children: [
9765
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkQLY22ZZW_cjs.WorkspacePageFrame, { testId, children: [
9766
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkQLY22ZZW_cjs.WorkspaceIdentityPanel, { children: [
10837
9767
  /* @__PURE__ */ jsxRuntime.jsx(
10838
- chunkVQHXVY26_cjs.EntityIdentityBar,
9768
+ chunkRTS3B2W7_cjs.EntityIdentityBar,
10839
9769
  {
10840
9770
  testId: "workspace-identity-bar",
10841
9771
  canEdit: isOwner,
@@ -10852,7 +9782,7 @@ function ConnectedWorkspaceSettings({
10852
9782
  label: "Name",
10853
9783
  value: workspace.name,
10854
9784
  placeholder: "Untitled",
10855
- maxLength: chunkVQHXVY26_cjs.IDENTITY_NAME_MAX_LENGTH,
9785
+ maxLength: chunkRTS3B2W7_cjs.IDENTITY_NAME_MAX_LENGTH,
10856
9786
  valueClassName: "truncate text-base font-semibold",
10857
9787
  testId: "workspace-home-title",
10858
9788
  hideLabel: true,
@@ -10867,7 +9797,7 @@ function ConnectedWorkspaceSettings({
10867
9797
  }
10868
9798
  ),
10869
9799
  trailing: project && /* @__PURE__ */ jsxRuntime.jsx(
10870
- chunkV2UQR7P6_cjs.WorkspaceProjectSlot,
9800
+ chunkQLY22ZZW_cjs.WorkspaceProjectSlot,
10871
9801
  {
10872
9802
  testId: "workspace-home-project",
10873
9803
  caption: `${ui.getEntityLabel("PROJECT")}:`,
@@ -10886,13 +9816,13 @@ function ConnectedWorkspaceSettings({
10886
9816
  testId: "workspace-home-description",
10887
9817
  hideLabel: true,
10888
9818
  trailing: /* @__PURE__ */ jsxRuntime.jsx(
10889
- chunkV2UQR7P6_cjs.WorkspaceAudienceLine,
9819
+ chunkQLY22ZZW_cjs.WorkspaceAudienceLine,
10890
9820
  {
10891
9821
  visibility: {
10892
9822
  testId: "workspace-home-visibility",
10893
9823
  caption: "Visibility:",
10894
9824
  toggle: isOwner && isDeveloper ? /* @__PURE__ */ jsxRuntime.jsx(
10895
- chunkV2UQR7P6_cjs.CommonWorkspaceToggle,
9825
+ chunkQLY22ZZW_cjs.CommonWorkspaceToggle,
10896
9826
  {
10897
9827
  isCommon: workspace.is_public ?? false,
10898
9828
  onToggle: (value) => void settings.setPublic(value),
@@ -10928,7 +9858,7 @@ function ConnectedWorkspaceSettings({
10928
9858
  }
10929
9859
  ),
10930
9860
  isMember && /* @__PURE__ */ jsxRuntime.jsx(
10931
- chunkV2UQR7P6_cjs.ExpandableSection,
9861
+ chunkQLY22ZZW_cjs.ExpandableSection,
10932
9862
  {
10933
9863
  expanded: membersExpanded,
10934
9864
  testId: "workspace-settings-members-section",
@@ -10965,7 +9895,7 @@ function ConnectedWorkspaceSettings({
10965
9895
  )
10966
9896
  ] }),
10967
9897
  !isOwner && /* @__PURE__ */ jsxRuntime.jsx(
10968
- chunkV2UQR7P6_cjs.LeaveFooter,
9898
+ chunkQLY22ZZW_cjs.LeaveFooter,
10969
9899
  {
10970
9900
  testId: "workspace-settings-footer",
10971
9901
  leave: {
@@ -11758,9 +10688,9 @@ function ConnectedWorkspaceEntity({
11758
10688
  );
11759
10689
  const documentCount2 = (workspace.shared_document_count ?? 0) + (workspace.private_document_count ?? 0);
11760
10690
  const conversationCount = (workspace.shared_conversation_count ?? 0) + (workspace.private_conversation_count ?? 0);
11761
- const tooltipContent = /* @__PURE__ */ jsxRuntime.jsxs(chunkVQHXVY26_cjs.EntityTooltip, { children: [
10691
+ const tooltipContent = /* @__PURE__ */ jsxRuntime.jsxs(chunkNUQ3RY7M_cjs.EntityTooltip, { children: [
11762
10692
  /* @__PURE__ */ jsxRuntime.jsx(
11763
- chunkVQHXVY26_cjs.EntityTooltipHeader,
10693
+ chunkNUQ3RY7M_cjs.EntityTooltipHeader,
11764
10694
  {
11765
10695
  lead: /* @__PURE__ */ jsxRuntime.jsx(
11766
10696
  ui.ShieldIcon,
@@ -11773,11 +10703,11 @@ function ConnectedWorkspaceEntity({
11773
10703
  ),
11774
10704
  title: name,
11775
10705
  subtitle: workspace.description,
11776
- trailing: /* @__PURE__ */ jsxRuntime.jsx(chunkV2UQR7P6_cjs.WorkspaceTypeBadge, { workspace, size: "sm" })
10706
+ trailing: /* @__PURE__ */ jsxRuntime.jsx(chunkQLY22ZZW_cjs.WorkspaceTypeBadge, { workspace, size: "sm" })
11777
10707
  }
11778
10708
  ),
11779
10709
  /* @__PURE__ */ jsxRuntime.jsx(
11780
- chunkVQHXVY26_cjs.EntityTooltipStats,
10710
+ chunkNUQ3RY7M_cjs.EntityTooltipStats,
11781
10711
  {
11782
10712
  stats: [
11783
10713
  {
@@ -11801,11 +10731,11 @@ function ConnectedWorkspaceEntity({
11801
10731
  ]
11802
10732
  }
11803
10733
  ),
11804
- workspace.updated_at && /* @__PURE__ */ jsxRuntime.jsxs(chunkVQHXVY26_cjs.EntityTooltipHint, { children: [
10734
+ workspace.updated_at && /* @__PURE__ */ jsxRuntime.jsxs(chunkNUQ3RY7M_cjs.EntityTooltipHint, { children: [
11805
10735
  "Updated ",
11806
10736
  ui.formatFriendlyDate(workspace.updated_at)
11807
10737
  ] }),
11808
- interactive && variant !== "icon" && /* @__PURE__ */ jsxRuntime.jsxs(chunkVQHXVY26_cjs.EntityTooltipHint, { icon: /* @__PURE__ */ jsxRuntime.jsx(ui.EntityIcon, { entityType: "WORKSPACE", className: "w-3 h-3" }), children: [
10738
+ interactive && variant !== "icon" && /* @__PURE__ */ jsxRuntime.jsxs(chunkNUQ3RY7M_cjs.EntityTooltipHint, { icon: /* @__PURE__ */ jsxRuntime.jsx(ui.EntityIcon, { entityType: "WORKSPACE", className: "w-3 h-3" }), children: [
11809
10739
  "Click to open ",
11810
10740
  ui.getEntityLabel("WORKSPACE").toLowerCase(),
11811
10741
  " settings"
@@ -11900,13 +10830,13 @@ function ConnectedProjectSelector({
11900
10830
  }) {
11901
10831
  const { stripeEnabled } = chunkV7JDMKNQ_cjs.useBillingSupport();
11902
10832
  return /* @__PURE__ */ jsxRuntime.jsx(
11903
- chunkV2UQR7P6_cjs.ProjectPicker,
10833
+ chunkQLY22ZZW_cjs.ProjectPicker,
11904
10834
  {
11905
10835
  value: projectExtId ?? void 0,
11906
10836
  options: projectOptions.map((proj) => ({
11907
10837
  id: proj.external_id,
11908
10838
  content: /* @__PURE__ */ jsxRuntime.jsx(
11909
- chunkV2UQR7P6_cjs.ProjectOptionRow,
10839
+ chunkQLY22ZZW_cjs.ProjectOptionRow,
11910
10840
  {
11911
10841
  identity: /* @__PURE__ */ jsxRuntime.jsx(
11912
10842
  ConnectedProjectEntity,
@@ -11973,8 +10903,8 @@ function WorkspaceCreateForm({
11973
10903
  );
11974
10904
  return;
11975
10905
  }
11976
- const create4 = seed?.create ?? createWorkspaceMutation.mutateAsync;
11977
- const response = await create4({
10906
+ const create2 = seed?.create ?? createWorkspaceMutation.mutateAsync;
10907
+ const response = await create2({
11978
10908
  name: localWorkspaceName.trim(),
11979
10909
  description: localWorkspaceDescription,
11980
10910
  projectId: projectExtId
@@ -12000,10 +10930,10 @@ function WorkspaceCreateForm({
12000
10930
  }
12001
10931
  };
12002
10932
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-5", "data-testid": "create-workspace-form", children: [
12003
- errorMessage2 && /* @__PURE__ */ jsxRuntime.jsx(chunkV2UQR7P6_cjs.FormErrorBanner, { message: errorMessage2 }),
10933
+ errorMessage2 && /* @__PURE__ */ jsxRuntime.jsx(chunkQLY22ZZW_cjs.FormErrorBanner, { message: errorMessage2 }),
12004
10934
  /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: handleSubmit, className: "flex flex-col gap-5", children: [
12005
10935
  /* @__PURE__ */ jsxRuntime.jsx(
12006
- chunkV2UQR7P6_cjs.WorkspaceFieldsView,
10936
+ chunkQLY22ZZW_cjs.WorkspaceFieldsView,
12007
10937
  {
12008
10938
  name: localWorkspaceName,
12009
10939
  description: localWorkspaceDescription,
@@ -12043,7 +10973,7 @@ function WorkspaceCreateForm({
12043
10973
  ] }) : void 0
12044
10974
  }
12045
10975
  ),
12046
- /* @__PURE__ */ jsxRuntime.jsxs(chunkV2UQR7P6_cjs.FormActions, { children: [
10976
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkQLY22ZZW_cjs.FormActions, { children: [
12047
10977
  onCancel && /* @__PURE__ */ jsxRuntime.jsx(
12048
10978
  ui.Button,
12049
10979
  {
@@ -12093,7 +11023,7 @@ function ConnectedWorkspaceFormModal({
12093
11023
  const canCreate = demoSeed ? true : allowed;
12094
11024
  const workspaceLabel = ui.getEntityLabel("WORKSPACE");
12095
11025
  return /* @__PURE__ */ jsxRuntime.jsx(
12096
- chunkV2UQR7P6_cjs.WorkspaceFormModal,
11026
+ chunkQLY22ZZW_cjs.WorkspaceFormModal,
12097
11027
  {
12098
11028
  ...frame,
12099
11029
  ...canCreate === false ? {
@@ -12753,7 +11683,7 @@ function ConnectedSharePointAdminConsentPage({
12753
11683
  /* @__PURE__ */ jsxRuntime.jsx(
12754
11684
  chunkJYR55F3P_cjs.ConsentHeader,
12755
11685
  {
12756
- icon: /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.VendorLogo, { vendorKey: "microsoft_sharepoint", product: "sharepoint" }),
11686
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.VendorLogo, { vendorKey: "microsoft_sharepoint", product: "sharepoint" }),
12757
11687
  title: "Approve ARBI for SharePoint access",
12758
11688
  children: "A member of your organization uses ARBI and wants to sync documents from SharePoint. Your Microsoft 365 organization requires an administrator to approve this once for the whole organization."
12759
11689
  }
@@ -15032,7 +13962,7 @@ function ConnectedWelcomeDialog({
15032
13962
  firstName: firstName2,
15033
13963
  hasReward: hasBalance,
15034
13964
  projectPicker: /* @__PURE__ */ jsxRuntime.jsx(
15035
- chunkV2UQR7P6_cjs.ProjectPicker,
13965
+ chunkQLY22ZZW_cjs.ProjectPicker,
15036
13966
  {
15037
13967
  variant: "welcome",
15038
13968
  value: selectedProject.external_id,
@@ -15095,7 +14025,7 @@ function WorkspaceCardsView({
15095
14025
  const projectLabel = ui.getEntityLabel("PROJECT").toLowerCase();
15096
14026
  const { groups, projects, selfId } = list;
15097
14027
  if (groups.length === 0) {
15098
- return /* @__PURE__ */ jsxRuntime.jsx(chunkV2UQR7P6_cjs.WorkspaceList, { testId: "workspace-cards-list", className: "gap-0", children: /* @__PURE__ */ jsxRuntime.jsx(
14028
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkQLY22ZZW_cjs.WorkspaceList, { testId: "workspace-cards-list", className: "gap-0", children: /* @__PURE__ */ jsxRuntime.jsx(
15099
14029
  chunk7KIM64LQ_cjs.CreateTile,
15100
14030
  {
15101
14031
  label: `New ${workspaceLabel.toLowerCase()}`,
@@ -15107,7 +14037,7 @@ function WorkspaceCardsView({
15107
14037
  }
15108
14038
  ) });
15109
14039
  }
15110
- return /* @__PURE__ */ jsxRuntime.jsx(chunkV2UQR7P6_cjs.WorkspaceList, { testId: "workspace-cards-list", children: groups.map((group) => {
14040
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkQLY22ZZW_cjs.WorkspaceList, { testId: "workspace-cards-list", children: groups.map((group) => {
15111
14041
  const project = projects.find((p) => p.external_id === group.projectExtId);
15112
14042
  const { breakdown, readout } = chunkV7JDMKNQ_cjs.projectGroupBilling(project, {
15113
14043
  isOwned: group.isOwned,
@@ -15115,7 +14045,7 @@ function WorkspaceCardsView({
15115
14045
  });
15116
14046
  const count2 = group.workspaces.length;
15117
14047
  return /* @__PURE__ */ jsxRuntime.jsxs(
15118
- chunkV2UQR7P6_cjs.WorkspaceGroup,
14048
+ chunkQLY22ZZW_cjs.WorkspaceGroup,
15119
14049
  {
15120
14050
  title: group.projectExtId ? /* @__PURE__ */ jsxRuntime.jsx(
15121
14051
  chunkOU3RGQFX_cjs.ProjectBandTitle,
@@ -15155,7 +14085,7 @@ function WorkspaceCardsView({
15155
14085
  const state = workspaceState?.(workspace);
15156
14086
  const selectLabel = state?.selectLabel;
15157
14087
  return /* @__PURE__ */ jsxRuntime.jsx(
15158
- chunkV2UQR7P6_cjs.WorkspaceCard,
14088
+ chunkQLY22ZZW_cjs.WorkspaceCard,
15159
14089
  {
15160
14090
  workspace: {
15161
14091
  ...toWorkspaceSummary(workspace, selfId),
@@ -15391,7 +14321,7 @@ function ConnectedWorkspaceList({
15391
14321
  else void openWorkspace(workspace.external_id, { name: workspace.name });
15392
14322
  };
15393
14323
  const createDisabledReason = list.canCreateProjects === false ? react.PROJECT_CREATION_DENIED_REASON : void 0;
15394
- if (list.isLoading) return /* @__PURE__ */ jsxRuntime.jsx(chunkVQHXVY26_cjs.LoadingIndicator, { message: "Loading workspaces..." });
14324
+ if (list.isLoading) return /* @__PURE__ */ jsxRuntime.jsx(chunkRTS3B2W7_cjs.LoadingIndicator, { message: "Loading workspaces..." });
15395
14325
  if (list.error) {
15396
14326
  return /* @__PURE__ */ jsxRuntime.jsx(
15397
14327
  chunk7KIM64LQ_cjs.HomeLoadError,
@@ -15464,7 +14394,7 @@ function ConnectedWorkspaceList({
15464
14394
  workspaceState
15465
14395
  }
15466
14396
  ) })
15467
- ) : /* @__PURE__ */ jsxRuntime.jsx(React9.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(chunkVQHXVY26_cjs.LoadingIndicator, { message: "Loading grid..." }), children: /* @__PURE__ */ jsxRuntime.jsx(chunk7KIM64LQ_cjs.HomeCenteredColumn, { children: /* @__PURE__ */ jsxRuntime.jsx(
14397
+ ) : /* @__PURE__ */ jsxRuntime.jsx(React9.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(chunkRTS3B2W7_cjs.LoadingIndicator, { message: "Loading grid..." }), children: /* @__PURE__ */ jsxRuntime.jsx(chunk7KIM64LQ_cjs.HomeCenteredColumn, { children: /* @__PURE__ */ jsxRuntime.jsx(
15468
14398
  WorkspaceTableView,
15469
14399
  {
15470
14400
  list,
@@ -15706,7 +14636,7 @@ function ProjectsListPage({
15706
14636
  }
15707
14637
  ),
15708
14638
  /* @__PURE__ */ jsxRuntime.jsx(
15709
- chunkVQHXVY26_cjs.Toolbar,
14639
+ chunkRTS3B2W7_cjs.Toolbar,
15710
14640
  {
15711
14641
  search,
15712
14642
  onSearch: setSearch,
@@ -16009,113 +14939,6 @@ function ProjectDetailsForm({
16009
14939
  ] })
16010
14940
  ] });
16011
14941
  }
16012
- var useFilesStore = zustand.create()(
16013
- middleware.persist(
16014
- (set) => ({
16015
- pendingFolders: {},
16016
- addPendingFolder: (workspaceId, path) => set((state) => {
16017
- const current = state.pendingFolders[workspaceId] ?? [];
16018
- if (current.includes(path)) return state;
16019
- return { pendingFolders: { ...state.pendingFolders, [workspaceId]: [...current, path] } };
16020
- }),
16021
- removePendingFolder: (workspaceId, path) => set((state) => {
16022
- const current = state.pendingFolders[workspaceId] ?? [];
16023
- if (!current.includes(path)) return state;
16024
- return {
16025
- pendingFolders: {
16026
- ...state.pendingFolders,
16027
- [workspaceId]: current.filter((p) => p !== path)
16028
- }
16029
- };
16030
- })
16031
- }),
16032
- {
16033
- name: "arbi_explorer_pending_folders",
16034
- storage: middleware.createJSONStorage(() => sessionStorage),
16035
- partialize: (state) => ({ pendingFolders: state.pendingFolders })
16036
- }
16037
- )
16038
- );
16039
- var NONE = [];
16040
- function usePendingFolders(workspaceId) {
16041
- return useFilesStore(
16042
- (state) => (workspaceId ? state.pendingFolders[workspaceId] : void 0) ?? NONE
16043
- );
16044
- }
16045
- var FILES_PREFS_KEY = "files";
16046
- var DEFAULT_VIEW_MODE = "explorer";
16047
- var useFilesPrefs = zustand.create()(
16048
- middleware.persist(
16049
- (set) => ({
16050
- documentFilters: {},
16051
- setDocumentFilters: (documentFilters) => set({ documentFilters }),
16052
- viewModes: {},
16053
- setViewMode: (viewMode, prefsKey = FILES_PREFS_KEY) => set(
16054
- (state) => state.viewModes[prefsKey] === viewMode ? state : { viewModes: { ...state.viewModes, [prefsKey]: viewMode } }
16055
- ),
16056
- // New users start at the compact minimum (more rows at once).
16057
- rowHeight: chunkQKOFQMAY_cjs.DOCUMENTS_ROW_HEIGHT_INITIAL,
16058
- setRowHeight: (rowHeight) => set({ rowHeight })
16059
- }),
16060
- {
16061
- name: "arbi_files_prefs",
16062
- storage: middleware.createJSONStorage(() => localStorage),
16063
- version: 1,
16064
- // Version 0 kept one view for every files page: it becomes the files page's own.
16065
- migrate: (persisted, version) => {
16066
- const state = persisted ?? {};
16067
- if (version >= 1) return state;
16068
- const { viewMode, ...rest } = state;
16069
- return {
16070
- ...rest,
16071
- viewModes: viewMode ? { [FILES_PREFS_KEY]: viewMode } : {}
16072
- };
16073
- },
16074
- partialize: (state) => ({
16075
- documentFilters: state.documentFilters,
16076
- viewModes: state.viewModes,
16077
- rowHeight: state.rowHeight
16078
- })
16079
- }
16080
- )
16081
- );
16082
- function filesViewMode(state, prefsKey = FILES_PREFS_KEY, defaultViewMode = DEFAULT_VIEW_MODE) {
16083
- return state.viewModes[prefsKey] ?? defaultViewMode;
16084
- }
16085
- var useAiReviewStore = zustand.create()((set) => ({
16086
- open: false,
16087
- run: null,
16088
- setOpen: (open) => set({ open }),
16089
- setRun: (run) => set({ run }),
16090
- markFinished: (docIds) => set((state) => {
16091
- const run = state.run;
16092
- if (!run) return state;
16093
- const finished = new Set(run.finishedDocIds ?? []);
16094
- const added = docIds.filter((id) => run.docIds.includes(id) && !finished.has(id));
16095
- if (added.length === 0) return state;
16096
- return { run: { ...run, finishedDocIds: [...finished, ...added] } };
16097
- })
16098
- }));
16099
- var useFilesGridStates = zustand.create()(
16100
- middleware.persist(
16101
- (set) => ({
16102
- gridStates: {},
16103
- setGridState: (gridId, state) => set((current) => ({ gridStates: { ...current.gridStates, [gridId]: state } }))
16104
- }),
16105
- { name: "arbi_files_grids", storage: middleware.createJSONStorage(() => localStorage) }
16106
- )
16107
- );
16108
- var useFilesDialogs = zustand.create()((set) => ({
16109
- move: null,
16110
- openMove: (folder = null) => set({ move: { folder } }),
16111
- closeMove: () => set({ move: null }),
16112
- bulkTagsOpen: false,
16113
- setBulkTagsOpen: (bulkTagsOpen) => set({ bulkTagsOpen }),
16114
- deleteRequest: null,
16115
- requestDelete: (deleteRequest) => set({ deleteRequest }),
16116
- exportOpen: false,
16117
- setExportOpen: (exportOpen) => set({ exportOpen })
16118
- }));
16119
14942
  var GRID_GAP = 12;
16120
14943
  var SCROLL_PADDING_X = 32;
16121
14944
  var PAGE_ASPECT = 1.3;
@@ -16190,9 +15013,9 @@ var ConnectedFilesExplorer = React9.forwardRef(function ConnectedFilesExplorer2(
16190
15013
  for (const tag of workspaceTags ?? []) map.set(tag.external_id, tag.name);
16191
15014
  return map;
16192
15015
  }, [workspaceTags]);
16193
- const pendingFolders = usePendingFolders(wsId);
16194
- const addPendingFolder = useFilesStore((state) => state.addPendingFolder);
16195
- const removePendingFolder = useFilesStore((state) => state.removePendingFolder);
15016
+ const pendingFolders = chunkS7B5E3RU_cjs.usePendingFolders(wsId);
15017
+ const addPendingFolder = chunkS7B5E3RU_cjs.useFilesStore((state) => state.addPendingFolder);
15018
+ const removePendingFolder = chunkS7B5E3RU_cjs.useFilesStore((state) => state.removePendingFolder);
16196
15019
  const [editingFolderPath, setEditingFolderPath] = React9.useState(null);
16197
15020
  const isSearching = search.trim().length > 0;
16198
15021
  const selectedSet = React9.useMemo(() => new Set(selectedIds), [selectedIds]);
@@ -16201,8 +15024,8 @@ var ConnectedFilesExplorer = React9.forwardRef(function ConnectedFilesExplorer2(
16201
15024
  const { folders, files } = React9.useMemo(() => {
16202
15025
  const result = isSearching ? {
16203
15026
  folders: [],
16204
- files: chunkQKOFQMAY_cjs.searchExplorerDocuments(documents, search, sort)
16205
- } : chunkQKOFQMAY_cjs.buildExplorerEntries(documents, currentPath, sort, [...pendingFolders]);
15027
+ files: chunk5YX3R6CK_cjs.searchExplorerDocuments(documents, search, sort)
15028
+ } : chunk5YX3R6CK_cjs.buildExplorerEntries(documents, currentPath, sort, [...pendingFolders]);
16206
15029
  if (sortReversed) result.files = [...result.files].reverse();
16207
15030
  return result;
16208
15031
  }, [documents, currentPath, sort, isSearching, search, sortReversed, pendingFolders]);
@@ -16213,7 +15036,7 @@ var ConnectedFilesExplorer = React9.forwardRef(function ConnectedFilesExplorer2(
16213
15036
  const orderedFileIds = React9.useMemo(() => files.map((d) => d.external_id), [files]);
16214
15037
  const folderDocs = React9.useMemo(() => {
16215
15038
  const map = /* @__PURE__ */ new Map();
16216
- for (const f of folders) map.set(f.path.join("/"), chunkQKOFQMAY_cjs.collectFolderDocs(documents, f.path));
15039
+ for (const f of folders) map.set(f.path.join("/"), chunk5YX3R6CK_cjs.collectFolderDocs(documents, f.path));
16217
15040
  return map;
16218
15041
  }, [folders, documents]);
16219
15042
  const folderSelection = React9.useMemo(() => {
@@ -16361,7 +15184,7 @@ var ConnectedFilesExplorer = React9.forwardRef(function ConnectedFilesExplorer2(
16361
15184
  let name = base;
16362
15185
  let i = 2;
16363
15186
  while (siblings.has(name.toLowerCase())) name = `${base} ${i++}`;
16364
- const path = chunkQKOFQMAY_cjs.joinFolderPath([...currentPath, name]);
15187
+ const path = chunk5YX3R6CK_cjs.joinFolderPath([...currentPath, name]);
16365
15188
  if (!path) return;
16366
15189
  addPendingFolder(wsId, path);
16367
15190
  setEditingFolderPath(path);
@@ -16397,10 +15220,10 @@ var ConnectedFilesExplorer = React9.forwardRef(function ConnectedFilesExplorer2(
16397
15220
  notify18(`A folder named "${name}" already exists here.`, "error");
16398
15221
  return;
16399
15222
  }
16400
- const oldPath = chunkQKOFQMAY_cjs.joinFolderPath(folder.path);
15223
+ const oldPath = chunk5YX3R6CK_cjs.joinFolderPath(folder.path);
16401
15224
  const newPrefix = [...folder.path.slice(0, -1), name];
16402
- const newPath = chunkQKOFQMAY_cjs.joinFolderPath(newPrefix);
16403
- const docs = chunkQKOFQMAY_cjs.collectFolderDocs(documents, folder.path);
15225
+ const newPath = chunk5YX3R6CK_cjs.joinFolderPath(newPrefix);
15226
+ const docs = chunk5YX3R6CK_cjs.collectFolderDocs(documents, folder.path);
16404
15227
  try {
16405
15228
  if (await renameFolder(docs, folder.path, newPrefix) > 0) {
16406
15229
  notify18(`Renamed folder to "${name}"`, "success");
@@ -16459,7 +15282,7 @@ var ConnectedFilesExplorer = React9.forwardRef(function ConnectedFilesExplorer2(
16459
15282
  const handleToggleFolder = React9.useCallback(
16460
15283
  (folder, e) => {
16461
15284
  e.stopPropagation();
16462
- const ids = chunkQKOFQMAY_cjs.collectFolderDocs(documents, folder.path).map((d) => d.external_id);
15285
+ const ids = chunk5YX3R6CK_cjs.collectFolderDocs(documents, folder.path).map((d) => d.external_id);
16463
15286
  if (ids.length === 0) return;
16464
15287
  if (ids.every((id) => selectedSet.has(id))) {
16465
15288
  const remove = new Set(ids);
@@ -16520,9 +15343,9 @@ var ConnectedFilesExplorer = React9.forwardRef(function ConnectedFilesExplorer2(
16520
15343
  );
16521
15344
  const handleDelete = React9.useCallback(
16522
15345
  async (doc) => {
16523
- const name = chunkQKOFQMAY_cjs.getExplorerDisplayName(doc);
15346
+ const name = chunk5YX3R6CK_cjs.getExplorerDisplayName(doc);
16524
15347
  const confirmed = await confirm({
16525
- message: `Delete "${name}"? ${chunkQKOFQMAY_cjs.RECENTLY_DELETED_HINT}`,
15348
+ message: `Delete "${name}"? ${chunk5YX3R6CK_cjs.RECENTLY_DELETED_HINT}`,
16526
15349
  title: "Delete file"
16527
15350
  });
16528
15351
  if (!confirmed) return;
@@ -16542,7 +15365,7 @@ var ConnectedFilesExplorer = React9.forwardRef(function ConnectedFilesExplorer2(
16542
15365
  );
16543
15366
  const handleFolderDownload = React9.useCallback(
16544
15367
  (folder) => {
16545
- const docs = chunkQKOFQMAY_cjs.collectFolderDocs(documents, folder.path);
15368
+ const docs = chunk5YX3R6CK_cjs.collectFolderDocs(documents, folder.path);
16546
15369
  if (docs.length > 0) void downloadDocuments(docs);
16547
15370
  },
16548
15371
  [documents, downloadDocuments]
@@ -16551,7 +15374,7 @@ var ConnectedFilesExplorer = React9.forwardRef(function ConnectedFilesExplorer2(
16551
15374
  if (onFolderMove) return onFolderMove;
16552
15375
  if (!onMoveSelected) return void 0;
16553
15376
  return (folder) => {
16554
- const ids = chunkQKOFQMAY_cjs.collectFolderDocs(documents, folder.path).map((d) => d.external_id);
15377
+ const ids = chunk5YX3R6CK_cjs.collectFolderDocs(documents, folder.path).map((d) => d.external_id);
16555
15378
  if (ids.length === 0) return;
16556
15379
  onSelectionChange(ids);
16557
15380
  onMoveSelected();
@@ -16559,14 +15382,14 @@ var ConnectedFilesExplorer = React9.forwardRef(function ConnectedFilesExplorer2(
16559
15382
  }, [documents, onFolderMove, onMoveSelected, onSelectionChange]);
16560
15383
  const handleFolderDelete = React9.useCallback(
16561
15384
  async (folder) => {
16562
- const docs = chunkQKOFQMAY_cjs.collectFolderDocs(documents, folder.path);
15385
+ const docs = chunk5YX3R6CK_cjs.collectFolderDocs(documents, folder.path);
16563
15386
  if (docs.length === 0) {
16564
- const path = chunkQKOFQMAY_cjs.joinFolderPath(folder.path);
15387
+ const path = chunk5YX3R6CK_cjs.joinFolderPath(folder.path);
16565
15388
  if (wsId && path) removePendingFolder(wsId, path);
16566
15389
  return;
16567
15390
  }
16568
15391
  const confirmed = await confirm({
16569
- message: `Delete folder "${folder.name}" and its ${docs.length} item${docs.length === 1 ? "" : "s"}? ${chunkQKOFQMAY_cjs.RECENTLY_DELETED_HINT_PLURAL}`,
15392
+ message: `Delete folder "${folder.name}" and its ${docs.length} item${docs.length === 1 ? "" : "s"}? ${chunk5YX3R6CK_cjs.RECENTLY_DELETED_HINT_PLURAL}`,
16570
15393
  title: "Delete folder"
16571
15394
  });
16572
15395
  if (!confirmed) return;
@@ -16583,8 +15406,8 @@ var ConnectedFilesExplorer = React9.forwardRef(function ConnectedFilesExplorer2(
16583
15406
  [confirm, documents, deleteDocuments, onSelectionChange, removePendingFolder, wsId, notify18]
16584
15407
  );
16585
15408
  const canDeleteFolder = React9.useCallback(
16586
- (folder) => canUpload && chunkQKOFQMAY_cjs.collectFolderDocs(documents, folder.path).every(
16587
- (doc) => chunkQKOFQMAY_cjs.canDeleteDocument(doc, userId, role)
15409
+ (folder) => canUpload && chunk5YX3R6CK_cjs.collectFolderDocs(documents, folder.path).every(
15410
+ (doc) => chunk5YX3R6CK_cjs.canDeleteDocument(doc, userId, role)
16588
15411
  ),
16589
15412
  [canUpload, documents, userId, role]
16590
15413
  );
@@ -16643,7 +15466,7 @@ var ConnectedFilesExplorer = React9.forwardRef(function ConnectedFilesExplorer2(
16643
15466
  setActiveDragId(null);
16644
15467
  const data = event.over?.data.current;
16645
15468
  if (data?.type === "folder" && data.path) {
16646
- const targetFolder = chunkQKOFQMAY_cjs.joinFolderPath(data.path);
15469
+ const targetFolder = chunk5YX3R6CK_cjs.joinFolderPath(data.path);
16647
15470
  const moving = dragIdsRef.current.filter((id) => {
16648
15471
  const doc = documents.find((d) => d.external_id === id);
16649
15472
  return doc && (doc.folder ?? null) !== targetFolder;
@@ -16683,7 +15506,7 @@ var ConnectedFilesExplorer = React9.forwardRef(function ConnectedFilesExplorer2(
16683
15506
  const dropped = Array.from(e.dataTransfer.files ?? []);
16684
15507
  if (dropped.length > 0) {
16685
15508
  e.preventDefault();
16686
- onUploadFiles(dropped, chunkQKOFQMAY_cjs.joinFolderPath(currentPath));
15509
+ onUploadFiles(dropped, chunk5YX3R6CK_cjs.joinFolderPath(currentPath));
16687
15510
  }
16688
15511
  },
16689
15512
  [canUpload, currentPath, onUploadFiles]
@@ -16700,9 +15523,9 @@ var ConnectedFilesExplorer = React9.forwardRef(function ConnectedFilesExplorer2(
16700
15523
  onDragEnd: handleDragEnd,
16701
15524
  onDragCancel: () => setActiveDragId(null),
16702
15525
  children: [
16703
- /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.ExplorerFrame, { "data-testid": "documents-explorer", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkQKOFQMAY_cjs.ExplorerStage, { children: [
15526
+ /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.ExplorerFrame, { "data-testid": "documents-explorer", children: /* @__PURE__ */ jsxRuntime.jsxs(chunk5YX3R6CK_cjs.ExplorerStage, { children: [
16704
15527
  /* @__PURE__ */ jsxRuntime.jsx(
16705
- chunkQKOFQMAY_cjs.ExplorerScroller,
15528
+ chunk5YX3R6CK_cjs.ExplorerScroller,
16706
15529
  {
16707
15530
  ref: scrollRef,
16708
15531
  onClick: handleBackgroundClick,
@@ -16712,15 +15535,15 @@ var ConnectedFilesExplorer = React9.forwardRef(function ConnectedFilesExplorer2(
16712
15535
  onDragLeave: handleNativeDragLeave,
16713
15536
  onDrop: handleNativeDrop,
16714
15537
  "data-testid": "explorer-scroll",
16715
- children: isLoading && documents.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.ExplorerLoadingTiles, {}) : entries.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(
16716
- chunkQKOFQMAY_cjs.ExplorerEmpty,
15538
+ children: isLoading && documents.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.ExplorerLoadingTiles, {}) : entries.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(
15539
+ chunk5YX3R6CK_cjs.ExplorerEmpty,
16717
15540
  {
16718
15541
  title: isSearching ? `No files match "${search.trim()}"` : "This folder is empty",
16719
15542
  description: isSearching ? "Try a different search." : canUpload ? "Drop files here or use Upload to add documents." : "No documents here yet."
16720
15543
  }
16721
15544
  ) : containerWidth === 0 ? (
16722
15545
  // Not measured yet: rendering now would flash one stretched column.
16723
- /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.ExplorerLoadingTiles, {})
15546
+ /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.ExplorerLoadingTiles, {})
16724
15547
  ) : /* @__PURE__ */ jsxRuntime.jsx(
16725
15548
  "div",
16726
15549
  {
@@ -16750,7 +15573,7 @@ var ConnectedFilesExplorer = React9.forwardRef(function ConnectedFilesExplorer2(
16750
15573
  if (entry.kind === "folder") {
16751
15574
  const key = entry.path.join("/");
16752
15575
  return /* @__PURE__ */ jsxRuntime.jsx(
16753
- FolderTile,
15576
+ chunkS7B5E3RU_cjs.FolderTile,
16754
15577
  {
16755
15578
  folder: entry,
16756
15579
  density,
@@ -16773,7 +15596,7 @@ var ConnectedFilesExplorer = React9.forwardRef(function ConnectedFilesExplorer2(
16773
15596
  }
16774
15597
  const doc = entry.doc;
16775
15598
  return /* @__PURE__ */ jsxRuntime.jsx(
16776
- FileTile,
15599
+ chunkS7B5E3RU_cjs.FileTile,
16777
15600
  {
16778
15601
  doc,
16779
15602
  density,
@@ -16781,7 +15604,7 @@ var ConnectedFilesExplorer = React9.forwardRef(function ConnectedFilesExplorer2(
16781
15604
  dragging: activeDragId === doc.external_id,
16782
15605
  dndActive: activeDragId !== null,
16783
15606
  renaming: renamingId === doc.external_id,
16784
- canDelete: chunkQKOFQMAY_cjs.canDeleteDocument(doc, userId, role),
15607
+ canDelete: chunk5YX3R6CK_cjs.canDeleteDocument(doc, userId, role),
16785
15608
  thumbnailUrl: thumbnailsById.get(doc.external_id),
16786
15609
  modifiedBy: userById.get(
16787
15610
  doc.updated_by_ext_id ?? doc.created_by_ext_id
@@ -16810,9 +15633,9 @@ var ConnectedFilesExplorer = React9.forwardRef(function ConnectedFilesExplorer2(
16810
15633
  )
16811
15634
  }
16812
15635
  ),
16813
- /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.ExplorerMarquee, { ref: marqueeOverlayRef, "data-testid": "explorer-marquee" }),
15636
+ /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.ExplorerMarquee, { ref: marqueeOverlayRef, "data-testid": "explorer-marquee" }),
16814
15637
  isFileDragOver && /* @__PURE__ */ jsxRuntime.jsx(
16815
- chunkQKOFQMAY_cjs.ExplorerDropOverlay,
15638
+ chunk5YX3R6CK_cjs.ExplorerDropOverlay,
16816
15639
  {
16817
15640
  label: `Drop to upload${currentPath.length > 0 ? ` to "${currentPath[currentPath.length - 1]}"` : ""}`
16818
15641
  }
@@ -16826,7 +15649,7 @@ var ConnectedFilesExplorer = React9.forwardRef(function ConnectedFilesExplorer2(
16826
15649
  function DragPreview({ doc, count: count2 }) {
16827
15650
  const Icon = ui.getFileTypeIcon(doc.file_name, { mime: doc.file_type });
16828
15651
  return /* @__PURE__ */ jsxRuntime.jsx(
16829
- chunkQKOFQMAY_cjs.ExplorerDragPreview,
15652
+ chunk5YX3R6CK_cjs.ExplorerDragPreview,
16830
15653
  {
16831
15654
  icon: /* @__PURE__ */ jsxRuntime.jsx(Icon, { size: 20 }),
16832
15655
  title: ui.getDocumentTitle(doc, doc.file_name ?? "Untitled"),
@@ -17336,10 +16159,10 @@ function ConnectedContactCardForm({
17336
16159
  const [errors, setErrors] = React9.useState({});
17337
16160
  const [serverError, setServerError] = React9.useState(null);
17338
16161
  const [duplicateOf, setDuplicateOf] = React9.useState(null);
17339
- const create4 = react.useCreateContact();
16162
+ const create2 = react.useCreateContact();
17340
16163
  const update = react.useUpdateContact();
17341
16164
  const link = react.useLinkContact();
17342
- const saving = create4.isPending || update.isPending || link.isPending;
16165
+ const saving = create2.isPending || update.isPending || link.isPending;
17343
16166
  const linked = !!contact?.email;
17344
16167
  const locked = !!contact && !contact.card;
17345
16168
  const set = (key, value) => setForm((f) => ({ ...f, [key]: value }));
@@ -17367,7 +16190,7 @@ function ConnectedContactCardForm({
17367
16190
  };
17368
16191
  if (invite && email) {
17369
16192
  if (contact) link.mutate({ contact, email, card }, { onSuccess: onInvited, onError });
17370
- else create4.mutate({ email, card, invite: true }, { onSuccess: onInvited, onError });
16193
+ else create2.mutate({ email, card, invite: true }, { onSuccess: onInvited, onError });
17371
16194
  return;
17372
16195
  }
17373
16196
  const onSuccess = () => {
@@ -17376,7 +16199,7 @@ function ConnectedContactCardForm({
17376
16199
  };
17377
16200
  if (contact?.external_id)
17378
16201
  update.mutate({ id: contact.external_id, card }, { onSuccess, onError });
17379
- else create4.mutate({ card, invite: false }, { onSuccess, onError });
16202
+ else create2.mutate({ card, invite: false }, { onSuccess, onError });
17380
16203
  };
17381
16204
  if (locked)
17382
16205
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-3", "data-testid": "contact-card-locked", children: [
@@ -17897,7 +16720,7 @@ function ConnectedContactMenu({
17897
16720
  const updateUserSettings = react.useUpdateUserSettings();
17898
16721
  const deleteContact = react.useDeleteContact();
17899
16722
  const name = ui.getUserDisplayName(peer);
17900
- const isAgent9 = peer.external_id.startsWith("agt-");
16723
+ const isAgent8 = peer.external_id.startsWith("agt-");
17901
16724
  const isMuted = React9.useMemo(
17902
16725
  () => (userSettings?.muted_users || []).includes(peer.external_id),
17903
16726
  [userSettings, peer.external_id]
@@ -17972,7 +16795,7 @@ Your conversation is not deleted \u2014 you can add them again.`,
17972
16795
  },
17973
16796
  // An agent is not a contact you can remove — it belongs to your account, and is managed from
17974
16797
  // the agents panel.
17975
- ...!isAgent9 && contactId ? [
16798
+ ...!isAgent8 && contactId ? [
17976
16799
  {
17977
16800
  id: "remove",
17978
16801
  label: "Remove contact",
@@ -19993,7 +18816,7 @@ function ConnectedMailbox({
19993
18816
  onTabChange: () => {
19994
18817
  },
19995
18818
  compactBreakpoint: 360,
19996
- firstTabContent: account ? /* @__PURE__ */ jsxRuntime.jsxs(chunkQKOFQMAY_cjs.FilesFilterBar, { children: [
18819
+ firstTabContent: account ? /* @__PURE__ */ jsxRuntime.jsxs(chunk5YX3R6CK_cjs.FilesFilterBar, { children: [
19997
18820
  /* @__PURE__ */ jsxRuntime.jsx(
19998
18821
  chunk2EI7NCUA_cjs.FilterInput,
19999
18822
  {
@@ -20028,7 +18851,7 @@ function ConnectedMailbox({
20028
18851
  }
20029
18852
  ),
20030
18853
  folderList && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex shrink-0 items-center gap-2", children: /* @__PURE__ */ jsxRuntime.jsx(
20031
- chunkQKOFQMAY_cjs.FolderFilterButton,
18854
+ chunk5YX3R6CK_cjs.FolderFilterButton,
20032
18855
  {
20033
18856
  label: folderList.find((f) => f.id === folderId)?.name ?? "Folders",
20034
18857
  isActive: false,
@@ -20036,7 +18859,7 @@ function ConnectedMailbox({
20036
18859
  onOpenChange: setFolderMenuOpen,
20037
18860
  testId: "mail-folder-button",
20038
18861
  children: folderList.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
20039
- chunkQKOFQMAY_cjs.FolderPickerRow,
18862
+ chunk5YX3R6CK_cjs.FolderPickerRow,
20040
18863
  {
20041
18864
  label: item.name,
20042
18865
  count: item.unread > 0 ? item.unread : void 0,
@@ -21243,7 +20066,7 @@ function BookingPagesPanel({ defaultTimeZone, className }) {
21243
20066
  var selectClass4 = "h-9 w-full rounded-md border border-input bg-background px-2 text-sm text-foreground shadow-sm";
21244
20067
  function CreateRoomForm({ zone, onDone }) {
21245
20068
  const { notify: notify18 } = chunkI72IYIO2_cjs.useBlocksEnvironment();
21246
- const create4 = react.useCreateRoom();
20069
+ const create2 = react.useCreateRoom();
21247
20070
  const [name, setName] = React9.useState("");
21248
20071
  const [type, setType] = React9.useState("room");
21249
20072
  const [capacity, setCapacity] = React9.useState("");
@@ -21263,7 +20086,7 @@ function CreateRoomForm({ zone, onDone }) {
21263
20086
  const cap = capacity.trim() ? Number(capacity) : null;
21264
20087
  if (cap !== null && (!Number.isInteger(cap) || cap < 1))
21265
20088
  return setError("Capacity must be a whole number");
21266
- create4.mutate(
20089
+ create2.mutate(
21267
20090
  {
21268
20091
  name: name.trim(),
21269
20092
  type,
@@ -21354,8 +20177,8 @@ function CreateRoomForm({ zone, onDone }) {
21354
20177
  error && /* @__PURE__ */ jsxRuntime.jsx("p", { role: "alert", className: "text-sm text-destructive", children: error }),
21355
20178
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-end gap-2", children: [
21356
20179
  /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { type: "button", variant: "ghost", onClick: onDone, children: "Cancel" }),
21357
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Button, { type: "submit", disabled: create4.isPending, children: [
21358
- create4.isPending && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "mr-1 size-4 animate-spin" }),
20180
+ /* @__PURE__ */ jsxRuntime.jsxs(ui.Button, { type: "submit", disabled: create2.isPending, children: [
20181
+ create2.isPending && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "mr-1 size-4 animate-spin" }),
21359
20182
  "Create"
21360
20183
  ] })
21361
20184
  ] })
@@ -23786,7 +22609,7 @@ function ConnectedUploadDropzone({
23786
22609
  const onFiles = browse(fileInputRef);
23787
22610
  const onFolder = browse(folderInputRef);
23788
22611
  const dropTarget = /* @__PURE__ */ jsxRuntime.jsx(
23789
- chunkQKOFQMAY_cjs.UploadDropArea,
22612
+ chunk5YX3R6CK_cjs.UploadDropArea,
23790
22613
  {
23791
22614
  isActive: dragActive,
23792
22615
  isDisabled: disabled,
@@ -23800,11 +22623,11 @@ function ConnectedUploadDropzone({
23800
22623
  onClick: (e) => {
23801
22624
  if (e.target === e.currentTarget) onFiles();
23802
22625
  },
23803
- actions: compact ? /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.UploadBrowseButtons, { onFiles, onFolder, isDisabled: disabled }) : void 0
22626
+ actions: compact ? /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.UploadBrowseButtons, { onFiles, onFolder, isDisabled: disabled }) : void 0
23804
22627
  }
23805
22628
  );
23806
22629
  const urlDialog = (trigger) => onUrlsSubmit ? /* @__PURE__ */ jsxRuntime.jsx(
23807
- chunkQKOFQMAY_cjs.UrlInputDialog,
22630
+ chunk5YX3R6CK_cjs.UrlInputDialog,
23808
22631
  {
23809
22632
  onUrlsSubmit,
23810
22633
  processing: disabled,
@@ -23817,12 +22640,12 @@ function ConnectedUploadDropzone({
23817
22640
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
23818
22641
  dropTarget,
23819
22642
  compactLeadingAction,
23820
- onUrlsSubmit && /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.UploadSourceSection, { isIsolated: true, className: "flex flex-wrap justify-center gap-2", children: urlDialog(/* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.UploadUrlButton, { isDisabled: disabled, isCompact: true })) })
22643
+ onUrlsSubmit && /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.UploadSourceSection, { isIsolated: true, className: "flex flex-wrap justify-center gap-2", children: urlDialog(/* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.UploadUrlButton, { isDisabled: disabled, isCompact: true })) })
23821
22644
  ] });
23822
22645
  }
23823
22646
  if (!source) {
23824
22647
  return /* @__PURE__ */ jsxRuntime.jsx(
23825
- chunkQKOFQMAY_cjs.UploadSourcePicker,
22648
+ chunk5YX3R6CK_cjs.UploadSourcePicker,
23826
22649
  {
23827
22650
  isDisabled: disabled,
23828
22651
  options: [
@@ -23858,14 +22681,14 @@ function ConnectedUploadDropzone({
23858
22681
  }
23859
22682
  if (source === "computer") {
23860
22683
  return /* @__PURE__ */ jsxRuntime.jsxs(
23861
- chunkQKOFQMAY_cjs.UploadSourceSection,
22684
+ chunk5YX3R6CK_cjs.UploadSourceSection,
23862
22685
  {
23863
22686
  testId: "upload-source-computer",
23864
22687
  className: "flex w-full flex-col gap-3 pointer-coarse:flex-col-reverse",
23865
22688
  children: [
23866
22689
  dropTarget,
23867
22690
  /* @__PURE__ */ jsxRuntime.jsx(
23868
- chunkQKOFQMAY_cjs.UploadBrowseButtons,
22691
+ chunk5YX3R6CK_cjs.UploadBrowseButtons,
23869
22692
  {
23870
22693
  layout: "grid",
23871
22694
  onFiles,
@@ -23878,15 +22701,15 @@ function ConnectedUploadDropzone({
23878
22701
  );
23879
22702
  }
23880
22703
  if (source === "internet" && onUrlsSubmit) {
23881
- return /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.UploadSourceSection, { testId: "upload-source-internet", className: "flex flex-wrap gap-2", children: /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.UploadSourceSection, { isIsolated: true, children: urlDialog(/* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.UploadUrlButton, { isDisabled: disabled })) }) });
22704
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.UploadSourceSection, { testId: "upload-source-internet", className: "flex flex-wrap gap-2", children: /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.UploadSourceSection, { isIsolated: true, children: urlDialog(/* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.UploadUrlButton, { isDisabled: disabled })) }) });
23882
22705
  }
23883
22706
  if (source === "email" && accounts) {
23884
- return /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.UploadSourceSection, { testId: "upload-source-email", isIsolated: true, children: accounts });
22707
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.UploadSourceSection, { testId: "upload-source-email", isIsolated: true, children: accounts });
23885
22708
  }
23886
22709
  return null;
23887
22710
  })();
23888
22711
  return /* @__PURE__ */ jsxRuntime.jsxs(
23889
- chunkQKOFQMAY_cjs.UploadFrame,
22712
+ chunk5YX3R6CK_cjs.UploadFrame,
23890
22713
  {
23891
22714
  isCompact: compact,
23892
22715
  isDimmed: disabled || processingMessage !== null,
@@ -23993,7 +22816,7 @@ function plural3(count2) {
23993
22816
  function DefaultFooter({ submit, shared, onSharedChange }) {
23994
22817
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center justify-end gap-4 border-t border-border px-4 py-3 sm:px-6", children: [
23995
22818
  /* @__PURE__ */ jsxRuntime.jsx(
23996
- chunkQKOFQMAY_cjs.ShareToggle,
22819
+ chunk5YX3R6CK_cjs.ShareToggle,
23997
22820
  {
23998
22821
  isVisible: shared,
23999
22822
  onToggle: onSharedChange,
@@ -24158,7 +22981,7 @@ ${summary}`,
24158
22981
  }
24159
22982
  );
24160
22983
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-0 flex-1 flex-col", "data-testid": "upload-documents", children: [
24161
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-y-auto pb-2", children: uploading === null ? /* @__PURE__ */ jsxRuntime.jsxs(chunkQKOFQMAY_cjs.UploadContainer, { className: "w-full px-4 pb-4 pt-2 sm:px-6", children: [
22984
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-y-auto pb-2", children: uploading === null ? /* @__PURE__ */ jsxRuntime.jsxs(chunk5YX3R6CK_cjs.UploadContainer, { className: "w-full px-4 pb-4 pt-2 sm:px-6", children: [
24162
22985
  files.length === 0 && /* @__PURE__ */ jsxRuntime.jsx(
24163
22986
  ConnectedUploadDropzone,
24164
22987
  {
@@ -24174,7 +22997,7 @@ ${summary}`,
24174
22997
  }
24175
22998
  ),
24176
22999
  /* @__PURE__ */ jsxRuntime.jsx(
24177
- chunkQKOFQMAY_cjs.SelectedFilesList,
23000
+ chunk5YX3R6CK_cjs.SelectedFilesList,
24178
23001
  {
24179
23002
  renderFileIcon,
24180
23003
  files,
@@ -24183,10 +23006,10 @@ ${summary}`,
24183
23006
  formatFileSize: formatFileSize3
24184
23007
  }
24185
23008
  ),
24186
- /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.RejectedFilesList, { files: refused, onClear: () => setRefused([]) }),
24187
- error && /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.UploadErrorMessage, { message: error })
24188
- ] }) : /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.UploadContainer, { className: "w-full p-4 sm:p-6", children: /* @__PURE__ */ jsxRuntime.jsx(
24189
- chunkQKOFQMAY_cjs.UploadProgress,
23009
+ /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.RejectedFilesList, { files: refused, onClear: () => setRefused([]) }),
23010
+ error && /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.UploadErrorMessage, { message: error })
23011
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.UploadContainer, { className: "w-full p-4 sm:p-6", children: /* @__PURE__ */ jsxRuntime.jsx(
23012
+ chunk5YX3R6CK_cjs.UploadProgress,
24190
23013
  {
24191
23014
  fileCount: count2,
24192
23015
  entityLabel: plural3(count2),
@@ -24228,7 +23051,7 @@ function AddFromAccountsButton({
24228
23051
  className: "gap-2",
24229
23052
  "data-testid": dataTestId,
24230
23053
  children: [
24231
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center gap-1", children: marks.map((m) => /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.VendorLogo, { vendorKey: m.vendorKey, product: m.product, className: "h-4 w-4" }, m.key)) }),
23054
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center gap-1", children: marks.map((m) => /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.VendorLogo, { vendorKey: m.vendorKey, product: m.product, className: "h-4 w-4" }, m.key)) }),
24232
23055
  "Add from accounts"
24233
23056
  ]
24234
23057
  }
@@ -24258,104 +23081,11 @@ function EmptyWorkspaceUpload({
24258
23081
  compactLeadingAction: onImportFromEmail && /* @__PURE__ */ jsxRuntime.jsx(AddFromAccountsButton, { onImportFromEmail })
24259
23082
  }
24260
23083
  ),
24261
- /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.PrivacyExplainerModal, {})
23084
+ /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.PrivacyExplainerModal, {})
24262
23085
  ] })
24263
23086
  }
24264
23087
  );
24265
23088
  }
24266
- function ConnectedTagEntity({
24267
- tag,
24268
- size = "md",
24269
- className = "",
24270
- onClick,
24271
- showTooltip = true,
24272
- canEdit = false,
24273
- onEditClick
24274
- }) {
24275
- const { data: workspaceTags } = react.useTags();
24276
- const { data: members = [] } = react.useWorkspaceUsers();
24277
- const byId = (id) => id ? members.find((m) => m.user.external_id === id)?.user : void 0;
24278
- const freshTag = React9.useMemo(() => {
24279
- if (!workspaceTags) return tag;
24280
- const found = workspaceTags.find((t) => t.external_id === tag.external_id);
24281
- return found || tag;
24282
- }, [workspaceTags, tag]);
24283
- const creator = byId(tag.created_by_ext_id) ?? null;
24284
- const updater = byId(tag.updated_by_ext_id) ?? null;
24285
- const Icon = ui.getTagTypeIcon(tag.tag_type.type);
24286
- const tagColor = ui.getEntityColor(tag.external_id, "medium");
24287
- const handleVisibilityToggle = () => {
24288
- if (canEdit && onEditClick) {
24289
- onEditClick();
24290
- }
24291
- };
24292
- const tooltipContent = showTooltip ? /* @__PURE__ */ jsxRuntime.jsxs(chunkVQHXVY26_cjs.EntityTooltip, { children: [
24293
- /* @__PURE__ */ jsxRuntime.jsx(
24294
- chunkVQHXVY26_cjs.EntityTooltipHeader,
24295
- {
24296
- lead: /* @__PURE__ */ jsxRuntime.jsx(
24297
- "span",
24298
- {
24299
- className: "inline-flex items-center justify-center rounded-md text-white p-1",
24300
- style: { backgroundColor: tagColor },
24301
- children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { size: 16 })
24302
- }
24303
- ),
24304
- title: tag.name
24305
- }
24306
- ),
24307
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5 text-sm", children: [
24308
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
24309
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "Type:" }),
24310
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: ui.getTagTypeLabel(tag.tag_type.type) })
24311
- ] }),
24312
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
24313
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "Documents:" }),
24314
- /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { variant: "secondary", className: "h-5 min-w-[20px] justify-center", children: freshTag.doctag_count ?? 0 })
24315
- ] }),
24316
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
24317
- /* @__PURE__ */ jsxRuntime.jsx(
24318
- ui.VisibilityToggle,
24319
- {
24320
- items: freshTag,
24321
- onToggle: handleVisibilityToggle,
24322
- disabled: !canEdit,
24323
- showLabel: false,
24324
- showTooltip: canEdit,
24325
- tooltipActive: "Click to edit",
24326
- tooltipInactive: "Click to edit"
24327
- }
24328
- ),
24329
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: freshTag.shared ? "Shared" : "Private" })
24330
- ] }),
24331
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
24332
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "Created:" }),
24333
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: ui.formatFriendlyDate(tag.created_at) }),
24334
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "by" }),
24335
- /* @__PURE__ */ jsxRuntime.jsx(UserAvatar, { user: creator ?? void 0 })
24336
- ] }),
24337
- tag.updated_at && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
24338
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "Updated:" }),
24339
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: ui.formatFriendlyDate(tag.updated_at) }),
24340
- updater && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
24341
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "by" }),
24342
- /* @__PURE__ */ jsxRuntime.jsx(UserAvatar, { user: updater })
24343
- ] })
24344
- ] })
24345
- ] })
24346
- ] }) : void 0;
24347
- return /* @__PURE__ */ jsxRuntime.jsx(
24348
- ui.TagEntity,
24349
- {
24350
- tag: { ...tag, color: tagColor },
24351
- size,
24352
- className,
24353
- onClick,
24354
- showTooltip,
24355
- tooltipContent
24356
- }
24357
- );
24358
- }
24359
23089
  var CheckboxCellRenderer = React9.memo(function CheckboxCellRenderer2({
24360
23090
  params,
24361
23091
  tagId,
@@ -24366,7 +23096,7 @@ var CheckboxCellRenderer = React9.memo(function CheckboxCellRenderer2({
24366
23096
  if (!params.data) return null;
24367
23097
  const isChecked = params.value === true;
24368
23098
  return /* @__PURE__ */ jsxRuntime.jsx(
24369
- chunkQKOFQMAY_cjs.CheckboxCell,
23099
+ chunk5YX3R6CK_cjs.CheckboxCell,
24370
23100
  {
24371
23101
  isChecked,
24372
23102
  color: tagColor,
@@ -24389,13 +23119,13 @@ var TagHeaderComponent = React9.memo(function TagHeaderComponent2({
24389
23119
  return () => params.column.removeEventListener("sortChanged", updateSort);
24390
23120
  }, [params.column]);
24391
23121
  return /* @__PURE__ */ jsxRuntime.jsx(
24392
- chunkQKOFQMAY_cjs.TagColumnHeader,
23122
+ chunk5YX3R6CK_cjs.TagColumnHeader,
24393
23123
  {
24394
23124
  isCentered: isCheckbox,
24395
23125
  sort,
24396
23126
  onSort: params.enableSorting ? (additive) => params.progressSort(additive) : void 0,
24397
- filter: /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FilterButton, { params, colId: tag.external_id }),
24398
- label: /* @__PURE__ */ jsxRuntime.jsx(ConnectedTagEntity, { tag, size: "sm" })
23127
+ filter: /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.FilterButton, { params, colId: tag.external_id }),
23128
+ label: /* @__PURE__ */ jsxRuntime.jsx(chunkS7B5E3RU_cjs.ConnectedTagEntity, { tag, size: "sm" })
24399
23129
  }
24400
23130
  );
24401
23131
  });
@@ -24483,7 +23213,7 @@ function createTagColumn({
24483
23213
  }
24484
23214
  ) : void 0,
24485
23215
  // Use default rendering for text/number/select - shows value with truncation
24486
- cellEditor: isSelect ? chunkQKOFQMAY_cjs.MultiSelectCellEditor : isText ? "agLargeTextCellEditor" : void 0,
23216
+ cellEditor: isSelect ? chunk5YX3R6CK_cjs.MultiSelectCellEditor : isText ? "agLargeTextCellEditor" : void 0,
24487
23217
  cellEditorParams: isSelect ? createMultiSelectCellEditorParams(tag.tag_type.options || []) : isText ? { rows: 8, cols: 50 } : void 0,
24488
23218
  cellEditorPopup: isText || isSelect,
24489
23219
  // Text and Select tags use popup editor for better UX
@@ -24600,14 +23330,14 @@ function createDocumentColumns({
24600
23330
  onToggleShared,
24601
23331
  notify: notify18
24602
23332
  }) {
24603
- const isRowEditableByOwner = (params) => chunkQKOFQMAY_cjs.canChangeVisibility(params.data, currentUserExtId);
24604
- const isRowEditableByMember = (params) => chunkQKOFQMAY_cjs.canEditDocumentFields(params.data, currentUserExtId, workspaceRole);
23333
+ const isRowEditableByOwner = (params) => chunk5YX3R6CK_cjs.canChangeVisibility(params.data, currentUserExtId);
23334
+ const isRowEditableByMember = (params) => chunk5YX3R6CK_cjs.canEditDocumentFields(params.data, currentUserExtId, workspaceRole);
24605
23335
  const documentNameCellRenderer = (params) => {
24606
23336
  const doc = params.data;
24607
23337
  if (!doc) return null;
24608
23338
  const context = params.context;
24609
23339
  return /* @__PURE__ */ jsxRuntime.jsx(
24610
- DocumentNameCell,
23340
+ chunkS7B5E3RU_cjs.DocumentNameCell,
24611
23341
  {
24612
23342
  doc,
24613
23343
  canEdit: isRowEditableByMember(params),
@@ -24626,7 +23356,7 @@ function createDocumentColumns({
24626
23356
  if (!params.data) return null;
24627
23357
  const isOwner = isRowEditableByOwner(params);
24628
23358
  return /* @__PURE__ */ jsxRuntime.jsx(
24629
- DocumentSharedCell,
23359
+ chunkS7B5E3RU_cjs.DocumentSharedCell,
24630
23360
  {
24631
23361
  document: params.data,
24632
23362
  disabled: !isOwner,
@@ -24639,7 +23369,7 @@ function createDocumentColumns({
24639
23369
  if (!params.data) return null;
24640
23370
  const context = params.context;
24641
23371
  return /* @__PURE__ */ jsxRuntime.jsx(
24642
- StatusCell2,
23372
+ chunkS7B5E3RU_cjs.StatusCell,
24643
23373
  {
24644
23374
  doc: params.data,
24645
23375
  onStatusClick,
@@ -24652,7 +23382,7 @@ function createDocumentColumns({
24652
23382
  if (!params.data) return null;
24653
23383
  const context = params.context;
24654
23384
  return /* @__PURE__ */ jsxRuntime.jsx(
24655
- DocumentLabelsCell,
23385
+ chunkS7B5E3RU_cjs.DocumentLabelsCell,
24656
23386
  {
24657
23387
  doc: params.data,
24658
23388
  labels: checkboxTags,
@@ -24671,7 +23401,7 @@ function createDocumentColumns({
24671
23401
  const related = context?.getRelatedDocs?.().get(params.data.external_id);
24672
23402
  if (!related || react.getRelatedTotal(related) === 0) return null;
24673
23403
  return /* @__PURE__ */ jsxRuntime.jsx(
24674
- RelatedDocumentsCell,
23404
+ chunkS7B5E3RU_cjs.RelatedDocumentsCell,
24675
23405
  {
24676
23406
  currentDoc: params.data,
24677
23407
  related,
@@ -24686,7 +23416,7 @@ function createDocumentColumns({
24686
23416
  if (!params.data) return null;
24687
23417
  const context = params.context;
24688
23418
  return /* @__PURE__ */ jsxRuntime.jsx(
24689
- DocumentFolderCell,
23419
+ chunkS7B5E3RU_cjs.DocumentFolderCell,
24690
23420
  {
24691
23421
  document: params.data,
24692
23422
  isEditable: isRowEditableByMember(params),
@@ -24806,7 +23536,7 @@ function createDocumentColumns({
24806
23536
  singleClickEdit: true,
24807
23537
  cellEditor: "agSelectCellEditor",
24808
23538
  cellEditorParams: {
24809
- values: [...chunkQKOFQMAY_cjs.DOCUMENT_TYPE_OPTIONS]
23539
+ values: [...chunk5YX3R6CK_cjs.DOCUMENT_TYPE_OPTIONS]
24810
23540
  },
24811
23541
  context: { icon: lucideReact.Sparkles },
24812
23542
  valueGetter: (params) => ui.getDocumentNature(params.data) || "",
@@ -25112,7 +23842,7 @@ function createDocumentColumns({
25112
23842
  const context = params.context;
25113
23843
  const creator = context?.getWorkspaceUsers?.().find((u) => u.external_id === params.data.created_by_ext_id);
25114
23844
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center h-full", children: /* @__PURE__ */ jsxRuntime.jsx(
25115
- UserAvatar,
23845
+ chunkS7B5E3RU_cjs.UserAvatar,
25116
23846
  {
25117
23847
  user: creator,
25118
23848
  isMe: !!creator && creator.external_id === context?.getCurrentUserId?.(),
@@ -25344,7 +24074,7 @@ function useDocumentTable({
25344
24074
  }
25345
24075
  const stabilizedTagIds = prevTagIdsRef.current;
25346
24076
  const stabilizedTagNames = prevTagNamesRef.current;
25347
- const defaultVisibleColumns = React9.useMemo(() => [...chunkQKOFQMAY_cjs.DEFAULT_DOCUMENT_COLUMNS], []);
24077
+ const defaultVisibleColumns = React9.useMemo(() => [...chunk5YX3R6CK_cjs.DEFAULT_DOCUMENT_COLUMNS], []);
25348
24078
  const toggleShared = React9.useCallback((docId, shared) => {
25349
24079
  updateDocRef.current.mutate({ documents: [{ external_id: docId, shared }] });
25350
24080
  }, []);
@@ -25609,10 +24339,10 @@ function ConnectedFilesBulkActions({
25609
24339
  const bulk = useDocumentBulkActions(selectedDocuments);
25610
24340
  const count2 = selectedDocuments.length;
25611
24341
  const noun = ui.getEntityLabel("DOCUMENT", count2 === 1 ? "SINGULAR" : "PLURAL");
25612
- const shareState = chunkQKOFQMAY_cjs.shareStateOf(bulk.freshSelectedDocuments);
24342
+ const shareState = chunk5YX3R6CK_cjs.shareStateOf(bulk.freshSelectedDocuments);
25613
24343
  const handleToggleShare = async (shouldShare) => {
25614
24344
  if (shouldShare) return bulk.share();
25615
- const confirmed = await chunkQKOFQMAY_cjs.confirmHideFromMembers(
24345
+ const confirmed = await chunk5YX3R6CK_cjs.confirmHideFromMembers(
25616
24346
  confirm,
25617
24347
  bulk.freshSelectedDocuments.length,
25618
24348
  members
@@ -25629,7 +24359,7 @@ function ConnectedFilesBulkActions({
25629
24359
  const { openDocumentsChat, openFieldsManager } = actions;
25630
24360
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
25631
24361
  /* @__PURE__ */ jsxRuntime.jsx(
25632
- chunkQKOFQMAY_cjs.BulkActionsBar,
24362
+ chunk5YX3R6CK_cjs.BulkActionsBar,
25633
24363
  {
25634
24364
  count: count2,
25635
24365
  onClear: onClearSelection,
@@ -25655,7 +24385,7 @@ function ConnectedFilesBulkActions({
25655
24385
  onDelete: () => setConfirming("delete"),
25656
24386
  shareState,
25657
24387
  shareLabels: shareState === "shared" ? { share: "Make private" } : void 0,
25658
- shareTooltip: chunkQKOFQMAY_cjs.shareTooltipFor(shareState, bulk.freshSelectedDocuments.length === 1),
24388
+ shareTooltip: chunk5YX3R6CK_cjs.shareTooltipFor(shareState, bulk.freshSelectedDocuments.length === 1),
25659
24389
  onToggleShare: (shouldShare) => void handleToggleShare(shouldShare)
25660
24390
  }
25661
24391
  ),
@@ -25670,7 +24400,7 @@ function ConnectedFilesBulkActions({
25670
24400
  onClearSelection();
25671
24401
  },
25672
24402
  title: `Delete ${count2} ${noun}`,
25673
- description: `Delete ${namedTargets(selectedDocuments)}? ${count2 === 1 ? chunkQKOFQMAY_cjs.RECENTLY_DELETED_HINT : chunkQKOFQMAY_cjs.RECENTLY_DELETED_HINT_PLURAL}`,
24403
+ description: `Delete ${namedTargets(selectedDocuments)}? ${count2 === 1 ? chunk5YX3R6CK_cjs.RECENTLY_DELETED_HINT : chunk5YX3R6CK_cjs.RECENTLY_DELETED_HINT_PLURAL}`,
25674
24404
  confirmText: "Delete",
25675
24405
  variant: "destructive"
25676
24406
  }
@@ -26016,9 +24746,9 @@ function useDocumentFilters({
26016
24746
  const { data: members = [] } = react.useWorkspaceUsers();
26017
24747
  const user = members.find((m) => m.user.external_id === currentUserId)?.user;
26018
24748
  const offlineIds = react.useOfflineDocumentIds();
26019
- const pendingFolders = usePendingFolders(selectedWorkspaceId);
26020
- const persistedDocumentFilters = useFilesPrefs((state) => state.documentFilters);
26021
- const setPersistedDocumentFilters = useFilesPrefs((state) => state.setDocumentFilters);
24749
+ const pendingFolders = chunkS7B5E3RU_cjs.usePendingFolders(selectedWorkspaceId);
24750
+ const persistedDocumentFilters = chunkS7B5E3RU_cjs.useFilesPrefs((state) => state.documentFilters);
24751
+ const setPersistedDocumentFilters = chunkS7B5E3RU_cjs.useFilesPrefs((state) => state.setDocumentFilters);
26022
24752
  const folderTree = React9.useMemo(() => {
26023
24753
  const allPaths = /* @__PURE__ */ new Set();
26024
24754
  let hasUnfiled = false;
@@ -26239,7 +24969,7 @@ function useDocumentFilters({
26239
24969
  {
26240
24970
  id: "uploaded_by_me",
26241
24971
  label: "Uploaded by me",
26242
- icon: user ? /* @__PURE__ */ jsxRuntime.jsx(UserAvatar, { user, isMe: true }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.User, { className: "h-4 w-4" }),
24972
+ icon: user ? /* @__PURE__ */ jsxRuntime.jsx(chunkS7B5E3RU_cjs.UserAvatar, { user, isMe: true }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.User, { className: "h-4 w-4" }),
26243
24973
  count: docs.filter((doc) => doc.created_by_ext_id === currentUserId).length
26244
24974
  },
26245
24975
  {
@@ -26367,7 +25097,7 @@ function useDocumentFilters({
26367
25097
  const folderPath = React9.useMemo(() => {
26368
25098
  for (const [key, state] of documentFilters) {
26369
25099
  if (key.startsWith("folder:") && key !== "folder:none" && state === "include") {
26370
- return chunkQKOFQMAY_cjs.parseFolderSegments(key.slice("folder:".length));
25100
+ return chunk5YX3R6CK_cjs.parseFolderSegments(key.slice("folder:".length));
26371
25101
  }
26372
25102
  }
26373
25103
  return [];
@@ -26376,7 +25106,7 @@ function useDocumentFilters({
26376
25106
  (path) => {
26377
25107
  const next = new Map(documentFilters);
26378
25108
  for (const key of next.keys()) if (key.startsWith("folder:")) next.set(key, null);
26379
- const joined = chunkQKOFQMAY_cjs.joinFolderPath(path);
25109
+ const joined = chunk5YX3R6CK_cjs.joinFolderPath(path);
26380
25110
  if (joined) next.set(`folder:${joined}`, "include");
26381
25111
  setDocumentFilters(next);
26382
25112
  },
@@ -26441,8 +25171,8 @@ function ConnectedAiReview({
26441
25171
  const generate = react.useGenerateDocTags();
26442
25172
  const { data: liveDocs = [] } = react.useDocuments();
26443
25173
  const { data: tags = [] } = react.useTags();
26444
- const result = useAiReviewStore((s) => s.run);
26445
- const setResult = useAiReviewStore((s) => s.setRun);
25174
+ const result = chunkS7B5E3RU_cjs.useAiReviewStore((s) => s.run);
25175
+ const setResult = chunkS7B5E3RU_cjs.useAiReviewStore((s) => s.setRun);
26446
25176
  const phase = result ? "review" : "ask";
26447
25177
  const docCount = documents.length;
26448
25178
  const scope = allDocuments ? "processed" : "selected";
@@ -26668,7 +25398,7 @@ function ConnectedAiReview({
26668
25398
  }, [kind]);
26669
25399
  const description = phase === "ask" ? `Ask one question \u2014 ARBI answers it for each of the ${docCount} ${scope} document${plural5(docCount)}.` : aiCellsTotal > 0 ? reviewProgress(aiCellsDone, aiCellsEmpty, aiCellsTotal) : `Applied to ${rows.length} document${plural5(rows.length)}`;
26670
25400
  return /* @__PURE__ */ jsxRuntime.jsx(
26671
- chunkQKOFQMAY_cjs.AiReviewDialogView,
25401
+ chunk5YX3R6CK_cjs.AiReviewDialogView,
26672
25402
  {
26673
25403
  open,
26674
25404
  onOpenChange: handleOpenChange,
@@ -26714,7 +25444,7 @@ function useAiReviewLiveUpdates() {
26714
25444
  if (message.batch_type !== "doctag_generate") return;
26715
25445
  const docIds = message.doc_ext_ids ?? [];
26716
25446
  if (!docIds.length) return;
26717
- void refreshDocuments(docIds).then(() => useAiReviewStore.getState().markFinished(docIds));
25447
+ void refreshDocuments(docIds).then(() => chunkS7B5E3RU_cjs.useAiReviewStore.getState().markFinished(docIds));
26718
25448
  const { clearTask } = react.useArbiWsStore.getState();
26719
25449
  for (const id of docIds) clearTask(id);
26720
25450
  });
@@ -26749,7 +25479,7 @@ function useBatchCompleteToasts() {
26749
25479
  timer.current = null;
26750
25480
  const runs = pending.current;
26751
25481
  pending.current = /* @__PURE__ */ new Map();
26752
- const hasReview = !!useAiReviewStore.getState().run;
25482
+ const hasReview = !!chunkS7B5E3RU_cjs.useAiReviewStore.getState().run;
26753
25483
  for (const [id, entry] of runs) {
26754
25484
  const n = entry.docIds.size;
26755
25485
  notify18(
@@ -26762,7 +25492,7 @@ function useBatchCompleteToasts() {
26762
25492
  ...hasReview && {
26763
25493
  action: {
26764
25494
  label: "View results",
26765
- onClick: () => useAiReviewStore.getState().setOpen(true)
25495
+ onClick: () => chunkS7B5E3RU_cjs.useAiReviewStore.getState().setOpen(true)
26766
25496
  }
26767
25497
  }
26768
25498
  }
@@ -26770,7 +25500,7 @@ function useBatchCompleteToasts() {
26770
25500
  }
26771
25501
  }, AI_FIELDS_NOTICE_WINDOW_MS);
26772
25502
  } else if (message.batch_type === "entity_extract") {
26773
- say(`${chunkVQHXVY26_cjs.entitiesPhrase()} extracted from ${chunkVQHXVY26_cjs.documentCount(docIds.length)}`, "success", {
25503
+ say(`${chunkRTS3B2W7_cjs.entitiesPhrase()} extracted from ${chunkRTS3B2W7_cjs.documentCount(docIds.length)}`, "success", {
26774
25504
  ...openTags && { action: { label: "View", onClick: openTags } }
26775
25505
  });
26776
25506
  } else if (message.batch_type === "upload") {
@@ -26809,12 +25539,12 @@ function ConnectedMoveToFolder({
26809
25539
  setIsSubmitting(true);
26810
25540
  try {
26811
25541
  if (folderToMove) {
26812
- const docsInFolder = chunkQKOFQMAY_cjs.collectFolderDocs(allDocs, folderToMove.path);
25542
+ const docsInFolder = chunk5YX3R6CK_cjs.collectFolderDocs(allDocs, folderToMove.path);
26813
25543
  if (docsInFolder.length === 0) {
26814
25544
  onClose();
26815
25545
  return;
26816
25546
  }
26817
- const newPrefixSegments = targetFolder ? [...chunkQKOFQMAY_cjs.parseFolderSegments(targetFolder), folderToMove.name] : [folderToMove.name];
25547
+ const newPrefixSegments = targetFolder ? [...chunk5YX3R6CK_cjs.parseFolderSegments(targetFolder), folderToMove.name] : [folderToMove.name];
26818
25548
  await renameFolder(docsInFolder, folderToMove.path, newPrefixSegments);
26819
25549
  const dest = targetFolder ? `"${targetFolder}/${folderToMove.name}"` : `"${folderToMove.name}" (root)`;
26820
25550
  notify18(`Moved folder to ${dest}`, "success");
@@ -26839,9 +25569,9 @@ function ConnectedMoveToFolder({
26839
25569
  }
26840
25570
  };
26841
25571
  const isFolderMode = !!folderToMove;
26842
- const folders = useDocumentFolders(allDocs, targetFolder);
25572
+ const folders = chunkS7B5E3RU_cjs.useDocumentFolders(allDocs, targetFolder);
26843
25573
  return /* @__PURE__ */ jsxRuntime.jsx(
26844
- chunkQKOFQMAY_cjs.MoveToFolderDialog,
25574
+ chunk5YX3R6CK_cjs.MoveToFolderDialog,
26845
25575
  {
26846
25576
  open: isOpen,
26847
25577
  onClose,
@@ -26851,7 +25581,7 @@ function ConnectedMoveToFolder({
26851
25581
  isSubmitting,
26852
25582
  onConfirm: handleMove,
26853
25583
  children: /* @__PURE__ */ jsxRuntime.jsx(
26854
- chunkQKOFQMAY_cjs.FolderCommandList,
25584
+ chunk5YX3R6CK_cjs.FolderCommandList,
26855
25585
  {
26856
25586
  folders,
26857
25587
  value: targetFolder,
@@ -27047,7 +25777,7 @@ function useFieldWrites({
27047
25777
  const createTag = react.useCreateTag();
27048
25778
  const updateTag = react.useUpdateTag();
27049
25779
  const deleteTag = react.useDeleteTag();
27050
- const create4 = React9.useCallback(
25780
+ const create2 = React9.useCallback(
27051
25781
  async (data) => {
27052
25782
  let created;
27053
25783
  try {
@@ -27153,7 +25883,7 @@ ${nested.length} nested ${nested.length === 1 ? "field moves" : "fields move"} t
27153
25883
  },
27154
25884
  [confirm, notify18, deleteTag, tags, workspaceTags, nouns]
27155
25885
  );
27156
- return { create: create4, update, rename, toggleShared, removeMany };
25886
+ return { create: create2, update, rename, toggleShared, removeMany };
27157
25887
  }
27158
25888
  var ownFieldsExport = (props) => /* @__PURE__ */ jsxRuntime.jsx(ConnectedExportDialog, { ...props, entityType: "TAG", testId: "export-fields-modal" });
27159
25889
  function ConnectedFieldsEditor({
@@ -27247,7 +25977,7 @@ function ConnectedFieldsEditor({
27247
25977
  const [sortBy, setSortBy] = React9.useState("name-asc");
27248
25978
  const [filterText, setFilterText] = React9.useState("");
27249
25979
  const fieldRows = React9.useMemo(
27250
- () => browser.flattenTagTree(chunkQKOFQMAY_cjs.sortFields(chunkQKOFQMAY_cjs.filterFieldsByName(tags, filterText), sortBy)),
25980
+ () => browser.flattenTagTree(chunk5YX3R6CK_cjs.sortFields(chunk5YX3R6CK_cjs.filterFieldsByName(tags, filterText), sortBy)),
27251
25981
  [tags, filterText, sortBy]
27252
25982
  );
27253
25983
  const exportItems = React9.useMemo(
@@ -27267,7 +25997,7 @@ function ConnectedFieldsEditor({
27267
25997
  setIsDeleting(false);
27268
25998
  }
27269
25999
  };
27270
- const copy = chunkQKOFQMAY_cjs.fieldsApplyBarCopy({
26000
+ const copy = chunk5YX3R6CK_cjs.fieldsApplyBarCopy({
27271
26001
  nouns,
27272
26002
  targetNoun,
27273
26003
  fieldCount,
@@ -27276,9 +26006,9 @@ function ConnectedFieldsEditor({
27276
26006
  isApplying,
27277
26007
  isClearing
27278
26008
  });
27279
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkQKOFQMAY_cjs.FieldsEditorRoot, { children: [
26009
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunk5YX3R6CK_cjs.FieldsEditorRoot, { children: [
27280
26010
  /* @__PURE__ */ jsxRuntime.jsx(
27281
- chunkQKOFQMAY_cjs.FieldsEditorToolbar,
26011
+ chunk5YX3R6CK_cjs.FieldsEditorToolbar,
27282
26012
  {
27283
26013
  nouns,
27284
26014
  onNew: () => {
@@ -27306,11 +26036,11 @@ function ConnectedFieldsEditor({
27306
26036
  onSortByChange: setSortBy
27307
26037
  }
27308
26038
  ),
27309
- /* @__PURE__ */ jsxRuntime.jsxs(chunkQKOFQMAY_cjs.FieldsEditorList, { children: [
26039
+ /* @__PURE__ */ jsxRuntime.jsxs(chunk5YX3R6CK_cjs.FieldsEditorList, { children: [
27310
26040
  fieldRows.map(({ tag, depth, childCount }) => {
27311
26041
  const isEditingThis = editingTagId === tag.external_id;
27312
26042
  return /* @__PURE__ */ jsxRuntime.jsx(
27313
- chunkQKOFQMAY_cjs.FieldRow,
26043
+ chunk5YX3R6CK_cjs.FieldRow,
27314
26044
  {
27315
26045
  tagId: tag.external_id,
27316
26046
  name: tag.name,
@@ -27363,10 +26093,10 @@ function ConnectedFieldsEditor({
27363
26093
  tag.external_id
27364
26094
  );
27365
26095
  }),
27366
- fieldRows.length === 0 && !isCreatingTag && /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FieldsEmptyState, { children: chunkQKOFQMAY_cjs.fieldsEmptyText({ nouns, filterText, hasKind: !!kind }) })
26096
+ fieldRows.length === 0 && !isCreatingTag && /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.FieldsEmptyState, { children: chunk5YX3R6CK_cjs.fieldsEmptyText({ nouns, filterText, hasKind: !!kind }) })
27367
26097
  ] }),
27368
26098
  /* @__PURE__ */ jsxRuntime.jsx(
27369
- chunkQKOFQMAY_cjs.FieldsApplyBar,
26099
+ chunk5YX3R6CK_cjs.FieldsApplyBar,
27370
26100
  {
27371
26101
  hint: copy.hint,
27372
26102
  applyLabel: copy.applyLabel,
@@ -27443,8 +26173,8 @@ function ConnectedFieldsManager({
27443
26173
  }
27444
26174
  );
27445
26175
  const body = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
27446
- /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FieldsManagerDefinition, { children: DEFINITIONS[activeKind] }),
27447
- /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FieldsManagerBody, { children: /* @__PURE__ */ jsxRuntime.jsx(
26176
+ /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.FieldsManagerDefinition, { children: DEFINITIONS[activeKind] }),
26177
+ /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.FieldsManagerBody, { children: /* @__PURE__ */ jsxRuntime.jsx(
27448
26178
  ConnectedFieldsEditor,
27449
26179
  {
27450
26180
  group: activeKind,
@@ -27463,7 +26193,7 @@ function ConnectedFieldsManager({
27463
26193
  "data-testid": "fields-manager-dialog",
27464
26194
  children: [
27465
26195
  /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { className: "px-4 py-3 border-b", children: [
27466
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FieldsManagerTitle, { title }) }),
26196
+ /* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.FieldsManagerTitle, { title }) }),
27467
26197
  /* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: "sr-only", children: "Create, edit, and delete labels and annotations for your workspace documents." })
27468
26198
  ] }),
27469
26199
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 py-2 border-b", children: tabHeader }),
@@ -27474,7 +26204,7 @@ function ConnectedFieldsManager({
27474
26204
  }
27475
26205
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col h-full", children: [
27476
26206
  /* @__PURE__ */ jsxRuntime.jsxs(chunkFEVJA4BP_cjs.DraggableHeader, { children: [
27477
- /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FieldsManagerTitle, { title, className: "px-4 pt-3.5 pb-2" }),
26207
+ /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.FieldsManagerTitle, { title, className: "px-4 pt-3.5 pb-2" }),
27478
26208
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-3", children: tabHeader })
27479
26209
  ] }),
27480
26210
  body
@@ -27695,7 +26425,7 @@ function ConnectedBulkTagEditor({
27695
26425
  const isClearing = change?.action === "remove";
27696
26426
  return {
27697
26427
  id: tag.external_id,
27698
- badge: /* @__PURE__ */ jsxRuntime.jsx(ConnectedTagEntity, { tag, size: "md" }),
26428
+ badge: /* @__PURE__ */ jsxRuntime.jsx(chunkS7B5E3RU_cjs.ConnectedTagEntity, { tag, size: "md" }),
27699
26429
  type: tag.tag_type.type,
27700
26430
  color: ui.getEntityColor(tag.external_id, "medium"),
27701
26431
  options: tag.tag_type.type === "select" ? tag.tag_type.options : void 0,
@@ -27727,7 +26457,7 @@ function ConnectedBulkTagEditor({
27727
26457
  const documentsLabel = ui.getEntityLabel("DOCUMENT", "PLURAL").toLowerCase();
27728
26458
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
27729
26459
  /* @__PURE__ */ jsxRuntime.jsx(
27730
- chunkQKOFQMAY_cjs.BulkTagEditorDialog,
26460
+ chunk5YX3R6CK_cjs.BulkTagEditorDialog,
27731
26461
  {
27732
26462
  open,
27733
26463
  onClose,
@@ -27785,7 +26515,7 @@ function ConnectedBulkTagEditor({
27785
26515
  }
27786
26516
  ),
27787
26517
  /* @__PURE__ */ jsxRuntime.jsx(
27788
- chunkQKOFQMAY_cjs.BulkReplaceDialog,
26518
+ chunk5YX3R6CK_cjs.BulkReplaceDialog,
27789
26519
  {
27790
26520
  open: showGenerateConfirmation,
27791
26521
  onClose: () => setShowGenerateConfirmation(false),
@@ -27809,228 +26539,6 @@ function ConnectedBulkTagEditor({
27809
26539
  )
27810
26540
  ] });
27811
26541
  }
27812
- function FolderPicker({
27813
- documents,
27814
- value,
27815
- onSelect
27816
- }) {
27817
- const folders = useDocumentFolders(documents, value);
27818
- return /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FolderCommandList, { folders, value, onSelect, showRemove: !!value });
27819
- }
27820
- function RelatedDocuments({
27821
- doc,
27822
- related,
27823
- onOpen,
27824
- onDelete,
27825
- onCompare
27826
- }) {
27827
- const viewingDocumentId = react.useOpenViewerDocumentId();
27828
- return /* @__PURE__ */ jsxRuntime.jsx(
27829
- RelatedDocumentsCell,
27830
- {
27831
- currentDoc: doc,
27832
- related,
27833
- viewingDocumentId,
27834
- onDocumentClick: (id) => onOpen?.(id),
27835
- onDelete: (other) => onDelete?.(other.external_id),
27836
- onCompare
27837
- }
27838
- );
27839
- }
27840
- function DocTagAttribution({ doctag }) {
27841
- const memberById = useMemberLookup();
27842
- const creator = memberById(doctag.created_by_ext_id);
27843
- const updater = doctag.updated_by_ext_id && doctag.updated_by_ext_id !== doctag.created_by_ext_id ? memberById(doctag.updated_by_ext_id) : void 0;
27844
- const lastUser = updater || creator;
27845
- if (!lastUser) return null;
27846
- const lines = [
27847
- creator && `Created ${ui.formatFriendlyDate(doctag.created_at)} by ${creator.given_name || creator.email}`,
27848
- updater && `Updated ${ui.formatFriendlyDate(doctag.updated_at)} by ${updater.given_name || updater.email}`
27849
- ].filter((line) => !!line);
27850
- return /* @__PURE__ */ jsxRuntime.jsx(
27851
- chunkQKOFQMAY_cjs.FieldAttribution,
27852
- {
27853
- avatar: /* @__PURE__ */ jsxRuntime.jsx(DocumentUser, { user: lastUser, tooltip: false }),
27854
- date: ui.formatFriendlyDate(updater ? doctag.updated_at : doctag.created_at),
27855
- lines
27856
- }
27857
- );
27858
- }
27859
- function LabelsCombobox({
27860
- labelTags,
27861
- appliedTagIds,
27862
- onToggle,
27863
- onCreateAndApply
27864
- }) {
27865
- const options2 = React9.useMemo(
27866
- () => labelTags.map((t) => ({
27867
- id: t.external_id,
27868
- name: t.name,
27869
- color: ui.getEntityColor(t.external_id, "medium")
27870
- })),
27871
- [labelTags]
27872
- );
27873
- const handleCreate = (name) => {
27874
- const trimmed = name.trim();
27875
- if (!trimmed) return;
27876
- const existing = labelTags.find((t) => t.name.toLowerCase() === trimmed.toLowerCase());
27877
- if (!existing) onCreateAndApply?.(trimmed);
27878
- else if (!appliedTagIds.has(existing.external_id)) onToggle(existing);
27879
- };
27880
- return /* @__PURE__ */ jsxRuntime.jsx(
27881
- chunkQKOFQMAY_cjs.FieldLabelsSelect,
27882
- {
27883
- options: options2,
27884
- appliedIds: appliedTagIds,
27885
- onToggle: (id) => {
27886
- const tag = labelTags.find((t) => t.external_id === id);
27887
- if (tag) onToggle(tag);
27888
- },
27889
- onCreate: onCreateAndApply ? handleCreate : void 0
27890
- }
27891
- );
27892
- }
27893
- var METADATA_FIELDS = {
27894
- title: (doc) => ui.getDocumentTitle(doc),
27895
- doc_nature: (doc) => doc.doc_metadata?.doc_nature || "",
27896
- doc_author: (doc) => doc.doc_metadata?.doc_author || "",
27897
- doc_subject: (doc) => doc.doc_metadata?.doc_subject || "",
27898
- // As the table shows it: with the time when the value has one (emails).
27899
- doc_date: (doc) => ui.formatDocDate(ui.getDocumentDate(doc))
27900
- };
27901
- var INPUT_CLASS = "text-sm bg-muted/40 focus:bg-background transition-colors";
27902
- var READ_ONLY_FIELDS = {
27903
- file_name: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FieldValue, { tone: "strong", children: doc.file_name || "N/A" }),
27904
- status: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FieldValue, { tone: "muted", children: doc.status || "N/A" }),
27905
- n_pages: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FieldValue, { tone: "muted", children: doc.n_pages || "N/A" }),
27906
- created_at: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FieldValue, { tone: "muted", children: doc.created_at ? ui.formatFriendlyDate(doc.created_at) : "N/A" }),
27907
- updated_at: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FieldValue, { tone: "muted", children: doc.updated_at ? ui.formatFriendlyDate(doc.updated_at) : "N/A" }),
27908
- file_type: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FieldValue, { tone: "muted", children: ui.friendlyFileType(doc.file_type, doc.file_name) }),
27909
- file_size: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FieldValue, { tone: "muted", children: doc.file_size ? `${Math.round(doc.file_size / 1024)} KB` : "N/A" }),
27910
- doc_id: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FieldValue, { tone: "muted", isMono: true, children: doc.external_id || "N/A" }),
27911
- content_hash: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FieldValue, { tone: "muted", isMono: true, isTruncated: true, children: doc.content_hash || "N/A" })
27912
- };
27913
- function documentFieldContent(options2) {
27914
- const { columnId, doc, canEdit, workspaceTags, getColumnLabel, getColumnIcon } = options2;
27915
- const Icon = getColumnIcon(columnId);
27916
- const standard = (children) => ({
27917
- label: getColumnLabel(columnId),
27918
- icon: Icon ? /* @__PURE__ */ jsxRuntime.jsx(Icon, { size: 14 }) : void 0,
27919
- children
27920
- });
27921
- const metadata = METADATA_FIELDS[columnId];
27922
- if (metadata) {
27923
- const editable = options2.isColumnEditable(columnId) && canEdit;
27924
- return standard(
27925
- editable ? /* @__PURE__ */ jsxRuntime.jsx(
27926
- ui.DebouncedInput,
27927
- {
27928
- value: metadata(doc),
27929
- onChange: (value2) => options2.onUpdateDocumentField(columnId, value2),
27930
- multiline: true,
27931
- placeholder: `Add ${getColumnLabel(columnId).toLowerCase()}\u2026`,
27932
- className: INPUT_CLASS
27933
- }
27934
- ) : /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FieldValue, { children: metadata(doc) || "N/A" })
27935
- );
27936
- }
27937
- const readOnly = READ_ONLY_FIELDS[columnId];
27938
- if (readOnly) return standard(readOnly(doc));
27939
- if (columnId === "created_by") return standard(/* @__PURE__ */ jsxRuntime.jsx(DocumentUser, { user: options2.creator }));
27940
- if (columnId === "folder") {
27941
- return standard(
27942
- canEdit ? /* @__PURE__ */ jsxRuntime.jsx(
27943
- chunkQKOFQMAY_cjs.FieldFolderSelect,
27944
- {
27945
- folder: doc.folder,
27946
- picker: /* @__PURE__ */ jsxRuntime.jsx(
27947
- FolderPicker,
27948
- {
27949
- documents: options2.allDocuments ?? [],
27950
- value: doc.folder,
27951
- onSelect: (folder) => options2.onUpdateDocumentField("folder", folder)
27952
- }
27953
- )
27954
- }
27955
- ) : /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FieldFolderValue, { folder: doc.folder })
27956
- );
27957
- }
27958
- if (columnId === "related") {
27959
- const related = options2.relatedDocs;
27960
- if (!related) return null;
27961
- return standard(
27962
- /* @__PURE__ */ jsxRuntime.jsx(
27963
- RelatedDocuments,
27964
- {
27965
- doc,
27966
- related,
27967
- onOpen: options2.onOpenDocument,
27968
- onDelete: options2.onDeleteDocument,
27969
- onCompare: options2.onCompareDocuments
27970
- }
27971
- )
27972
- );
27973
- }
27974
- if (columnId === "all_tags") {
27975
- const labelTags = workspaceTags.filter(browser.isLabelTag);
27976
- const appliedIds = new Set(
27977
- (doc.doctags ?? []).filter((dt) => labelTags.some((t) => t.external_id === dt.tag_ext_id)).map((dt) => dt.tag_ext_id)
27978
- );
27979
- return standard(
27980
- /* @__PURE__ */ jsxRuntime.jsx(
27981
- LabelsCombobox,
27982
- {
27983
- labelTags,
27984
- appliedTagIds: appliedIds,
27985
- onToggle: (tag2) => options2.onUpdateTagValue(tag2, !appliedIds.has(tag2.external_id)),
27986
- onCreateAndApply: options2.onCreateAndApplyLabel
27987
- }
27988
- )
27989
- );
27990
- }
27991
- const tag = workspaceTags.find((t) => t.external_id === columnId);
27992
- if (!tag || !browser.isAnnotationTag(tag)) return null;
27993
- const doctag = doc.doctags?.find((dt) => dt.tag_ext_id === tag.external_id);
27994
- let value;
27995
- if (tag.tag_type.type === "select") {
27996
- value = /* @__PURE__ */ jsxRuntime.jsx(
27997
- chunkQKOFQMAY_cjs.FieldNativeSelect,
27998
- {
27999
- value: doctag?.note || "",
28000
- options: tag.tag_type.options,
28001
- onChange: (next) => options2.onUpdateTagValue(tag, next),
28002
- ariaLabel: tag.name
28003
- }
28004
- );
28005
- } else if (tag.tag_type.type === "number") {
28006
- value = /* @__PURE__ */ jsxRuntime.jsx(
28007
- ui.DebouncedInput,
28008
- {
28009
- type: "number",
28010
- value: doctag?.note || "",
28011
- onChange: (next) => options2.onUpdateTagValue(tag, next),
28012
- placeholder: `Add ${tag.name.toLowerCase()}\u2026`,
28013
- className: INPUT_CLASS
28014
- }
28015
- );
28016
- } else {
28017
- value = /* @__PURE__ */ jsxRuntime.jsx(
28018
- ui.Textarea,
28019
- {
28020
- value: doctag?.note || "",
28021
- onChange: (e) => options2.onUpdateTagWithCitations(tag, e.target.value, doctag?.citations ?? null),
28022
- placeholder: "Add a note...",
28023
- rows: 2,
28024
- className: INPUT_CLASS
28025
- }
28026
- );
28027
- }
28028
- return {
28029
- label: tag.name,
28030
- tag,
28031
- children: doctag ? /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FieldWithAttribution, { attribution: /* @__PURE__ */ jsxRuntime.jsx(DocTagAttribution, { doctag }), children: value }) : value
28032
- };
28033
- }
28034
26542
 
28035
26543
  // src/connection/files/views/tableViews.ts
28036
26544
  var belongsTo = (view, workspaceId, table) => view.workspace === workspaceId && (view.table ?? null) === table;
@@ -28131,7 +26639,7 @@ function ViewSelector({
28131
26639
  columns: defaultColumns,
28132
26640
  icon: lucideReact.Table,
28133
26641
  // Both built-ins load at the minimal (compact) row height.
28134
- rowHeight: chunkQKOFQMAY_cjs.DOCUMENTS_ROW_HEIGHT_INITIAL,
26642
+ rowHeight: chunk5YX3R6CK_cjs.DOCUMENTS_ROW_HEIGHT_INITIAL,
28135
26643
  // [] = loading this view unpins everything.
28136
26644
  pinnedLeft: []
28137
26645
  },
@@ -28142,15 +26650,15 @@ function ViewSelector({
28142
26650
  // batch-select checkbox and Title stay fixed left while scrolling.
28143
26651
  columns: defaultColumns,
28144
26652
  icon: lucideReact.Columns3,
28145
- rowHeight: chunkQKOFQMAY_cjs.DOCUMENTS_ROW_HEIGHT_INITIAL,
26653
+ rowHeight: chunk5YX3R6CK_cjs.DOCUMENTS_ROW_HEIGHT_INITIAL,
28146
26654
  pinnedLeft: DOCUMENT_VIEW_PINNED
28147
26655
  },
28148
26656
  {
28149
26657
  key: "email-default",
28150
26658
  label: "Email view",
28151
- columns: [...chunkQKOFQMAY_cjs.EMAIL_VIEW_COLUMNS],
26659
+ columns: [...chunk5YX3R6CK_cjs.EMAIL_VIEW_COLUMNS],
28152
26660
  icon: lucideReact.Mail,
28153
- rowHeight: chunkQKOFQMAY_cjs.DOCUMENTS_ROW_HEIGHT_INITIAL,
26661
+ rowHeight: chunk5YX3R6CK_cjs.DOCUMENTS_ROW_HEIGHT_INITIAL,
28154
26662
  pinnedLeft: []
28155
26663
  }
28156
26664
  ],
@@ -28174,7 +26682,7 @@ function ViewSelector({
28174
26682
  },
28175
26683
  [confirm, workspaceId, deleteView, notify18]
28176
26684
  );
28177
- const menu = chunkQKOFQMAY_cjs.useGridViews({
26685
+ const menu = chunk5YX3R6CK_cjs.useGridViews({
28178
26686
  getGridApi,
28179
26687
  defaultColumns,
28180
26688
  builtins,
@@ -28189,7 +26697,7 @@ function ViewSelector({
28189
26697
  onDeleteView,
28190
26698
  isSaving
28191
26699
  });
28192
- return /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.ViewSelectorMenu, { ...menu });
26700
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.ViewSelectorMenu, { ...menu });
28193
26701
  }
28194
26702
  function DocumentsFilterBarActions({
28195
26703
  isModal,
@@ -28229,7 +26737,7 @@ function DocumentsFilterBarActions({
28229
26737
  ),
28230
26738
  documentsViewMode === "grid" && // The phone list is a fixed two-line layout, so row density only applies from sm up.
28231
26739
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "hidden sm:block", children: /* @__PURE__ */ jsxRuntime.jsx(
28232
- chunkQKOFQMAY_cjs.RowDensityControl,
26740
+ chunk5YX3R6CK_cjs.RowDensityControl,
28233
26741
  {
28234
26742
  rowHeight: documentsRowHeight,
28235
26743
  onRowHeightChange: onDocumentsRowHeightChange
@@ -28397,7 +26905,7 @@ function DocumentsUploadButton({
28397
26905
  [hasAccountProviders, onSelectSource, onEmailWorkspace, onCreateNew, onTakePhoto]
28398
26906
  );
28399
26907
  return /* @__PURE__ */ jsxRuntime.jsx(
28400
- chunkQKOFQMAY_cjs.FilesAddMenu,
26908
+ chunk5YX3R6CK_cjs.FilesAddMenu,
28401
26909
  {
28402
26910
  items,
28403
26911
  isCompact,
@@ -28410,8 +26918,8 @@ function DocumentsUploadButton({
28410
26918
  }
28411
26919
  function PersistedGridView(props) {
28412
26920
  const { persistState, gridId } = props;
28413
- const setGridState = useFilesGridStates((state) => state.setGridState);
28414
- const gridState = persistState && gridId ? useFilesGridStates.getState().gridStates[gridId] : void 0;
26921
+ const setGridState = chunkS7B5E3RU_cjs.useFilesGridStates((state) => state.setGridState);
26922
+ const gridState = persistState && gridId ? chunkS7B5E3RU_cjs.useFilesGridStates.getState().gridStates[gridId] : void 0;
28415
26923
  const onGridStateChange = React9.useCallback(
28416
26924
  (state) => {
28417
26925
  if (persistState && gridId) setGridState(gridId, state);
@@ -28478,10 +26986,17 @@ var TABLET_VISIBLE_COLUMNS = ["title", "doc_subject"];
28478
26986
  var TABLET_TABLE_BELOW = 860;
28479
26987
  var TABLET_VIEWPORT_BELOW = 1100;
28480
26988
  var NO_CONVERSATION_DOCUMENTS = [];
26989
+ var DocumentReviewCard = React9.lazy(
26990
+ () => import('../DocumentReviewCard-DLR4XOIZ.cjs').then((module) => ({ default: module.DocumentReviewCard }))
26991
+ );
26992
+ function defaultReviewCard(props) {
26993
+ return /* @__PURE__ */ jsxRuntime.jsx(React9.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(chunkRTS3B2W7_cjs.LoadingIndicator, { message: "Loading document viewer..." }), children: /* @__PURE__ */ jsxRuntime.jsx(DocumentReviewCard, { ...props }, `navigator-${props.currentDocument.external_id}`) });
26994
+ }
28481
26995
  function ConnectedFilesPage({
28482
26996
  isModal = false,
28483
26997
  onClose,
28484
26998
  onToggleDocument,
26999
+ onCompareDocuments,
28485
27000
  onUpload,
28486
27001
  onStatusClick,
28487
27002
  onOpenTags,
@@ -28494,7 +27009,7 @@ function ConnectedFilesPage({
28494
27009
  workspaceIcon,
28495
27010
  externalSearchQuery = "",
28496
27011
  renderSearch,
28497
- renderReviewCard,
27012
+ renderReviewCard = defaultReviewCard,
28498
27013
  renderFieldsManager,
28499
27014
  bulkTagBreadcrumb,
28500
27015
  dialogs,
@@ -28502,7 +27017,7 @@ function ConnectedFilesPage({
28502
27017
  gridStateVersion,
28503
27018
  onGridApi,
28504
27019
  onRelatedDocsChange,
28505
- prefsKey = FILES_PREFS_KEY,
27020
+ prefsKey = chunkS7B5E3RU_cjs.FILES_PREFS_KEY,
28506
27021
  defaultViewMode
28507
27022
  }) {
28508
27023
  const { openDocument } = chunkI72IYIO2_cjs.useBlocksEnvironment();
@@ -28534,15 +27049,15 @@ function ConnectedFilesPage({
28534
27049
  const inConversationDocuments = react.useArbiSessionState(
28535
27050
  (s) => s.conversationDocuments[s.conversationId ?? "new"] ?? NO_CONVERSATION_DOCUMENTS
28536
27051
  );
28537
- const viewMode = useFilesPrefs((s) => filesViewMode(s, prefsKey, defaultViewMode));
28538
- const setPrefsViewMode = useFilesPrefs((s) => s.setViewMode);
27052
+ const viewMode = chunkS7B5E3RU_cjs.useFilesPrefs((s) => chunkS7B5E3RU_cjs.filesViewMode(s, prefsKey, defaultViewMode));
27053
+ const setPrefsViewMode = chunkS7B5E3RU_cjs.useFilesPrefs((s) => s.setViewMode);
28539
27054
  const setViewMode = React9.useCallback(
28540
27055
  (mode) => setPrefsViewMode(mode, prefsKey),
28541
27056
  [setPrefsViewMode, prefsKey]
28542
27057
  );
28543
- const rowHeight = useFilesPrefs((s) => s.rowHeight);
28544
- const setRowHeight = useFilesPrefs((s) => s.setRowHeight);
28545
- const ownGridStates = useFilesGridStates((s) => s.gridStates);
27058
+ const rowHeight = chunkS7B5E3RU_cjs.useFilesPrefs((s) => s.rowHeight);
27059
+ const setRowHeight = chunkS7B5E3RU_cjs.useFilesPrefs((s) => s.setRowHeight);
27060
+ const ownGridStates = chunkS7B5E3RU_cjs.useFilesGridStates((s) => s.gridStates);
28546
27061
  const stateVersion = gridStateVersion ?? ownGridStates;
28547
27062
  const [pageEl, setPageEl] = React9.useState(null);
28548
27063
  const [isTabletWidth, setIsTabletWidth] = React9.useState(false);
@@ -28572,15 +27087,15 @@ function ConnectedFilesPage({
28572
27087
  const [explorerSortReversed, setExplorerSortReversed] = React9.useState(false);
28573
27088
  const [explorerTileSize, setExplorerTileSize] = React9.useState(TILE_DEFAULT);
28574
27089
  const [urlDialogOpen, setUrlDialogOpen] = React9.useState(false);
28575
- const move = useFilesDialogs((s) => s.move);
28576
- const openMove = useFilesDialogs((s) => s.openMove);
28577
- const closeMove = useFilesDialogs((s) => s.closeMove);
28578
- const bulkTagsOpen = useFilesDialogs((s) => s.bulkTagsOpen);
28579
- const setBulkTagsOpen = useFilesDialogs((s) => s.setBulkTagsOpen);
28580
- const deleteRequest = useFilesDialogs((s) => s.deleteRequest);
28581
- const requestDelete = useFilesDialogs((s) => s.requestDelete);
28582
- const exportOpen = useFilesDialogs((s) => s.exportOpen);
28583
- const setExportOpen = useFilesDialogs((s) => s.setExportOpen);
27090
+ const move = chunkS7B5E3RU_cjs.useFilesDialogs((s) => s.move);
27091
+ const openMove = chunkS7B5E3RU_cjs.useFilesDialogs((s) => s.openMove);
27092
+ const closeMove = chunkS7B5E3RU_cjs.useFilesDialogs((s) => s.closeMove);
27093
+ const bulkTagsOpen = chunkS7B5E3RU_cjs.useFilesDialogs((s) => s.bulkTagsOpen);
27094
+ const setBulkTagsOpen = chunkS7B5E3RU_cjs.useFilesDialogs((s) => s.setBulkTagsOpen);
27095
+ const deleteRequest = chunkS7B5E3RU_cjs.useFilesDialogs((s) => s.deleteRequest);
27096
+ const requestDelete = chunkS7B5E3RU_cjs.useFilesDialogs((s) => s.requestDelete);
27097
+ const exportOpen = chunkS7B5E3RU_cjs.useFilesDialogs((s) => s.exportOpen);
27098
+ const setExportOpen = chunkS7B5E3RU_cjs.useFilesDialogs((s) => s.setExportOpen);
28584
27099
  const openOwnExport = React9.useCallback(() => setExportOpen(true), [setExportOpen]);
28585
27100
  const exportItems = React9.useMemo(
28586
27101
  () => selectedDocuments.map((doc) => ({
@@ -28626,17 +27141,17 @@ function ConnectedFilesPage({
28626
27141
  }, [relatedDocsMap, onRelatedDocsChange]);
28627
27142
  const defaultVisibleColumns = React9.useMemo(
28628
27143
  () => [
28629
- ...chunkQKOFQMAY_cjs.DEFAULT_DOCUMENT_COLUMNS,
27144
+ ...chunk5YX3R6CK_cjs.DEFAULT_DOCUMENT_COLUMNS,
28630
27145
  ...allTags.filter(browser.isAnnotationTag).map((tag) => tag.external_id)
28631
27146
  ],
28632
27147
  [allTags]
28633
27148
  );
28634
27149
  const handleReorderColumns = React9.useCallback((ids, gridApi2) => {
28635
- if (gridApi2) chunkQKOFQMAY_cjs.applyColumnLayout(gridApi2, ids);
27150
+ if (gridApi2) chunk5YX3R6CK_cjs.applyColumnLayout(gridApi2, ids);
28636
27151
  }, []);
28637
27152
  const handleLoadView = React9.useCallback(
28638
27153
  (view, gridApi2) => {
28639
- chunkQKOFQMAY_cjs.applyViewColumns(gridApi2, view, handleReorderColumns);
27154
+ chunk5YX3R6CK_cjs.applyViewColumns(gridApi2, view, handleReorderColumns);
28640
27155
  if (typeof view.tile_size === "number") setExplorerTileSize(view.tile_size);
28641
27156
  if (typeof view.row_height === "number") setRowHeight(view.row_height);
28642
27157
  },
@@ -28729,7 +27244,7 @@ function ConnectedFilesPage({
28729
27244
  );
28730
27245
  const currentDocument = viewingDocumentId ? filteredDocuments.find((d) => d.external_id === viewingDocumentId) ?? documents.find((d) => d.external_id === viewingDocumentId) ?? null : null;
28731
27246
  const navigatorDocuments = React9.useMemo(
28732
- () => chunkQKOFQMAY_cjs.sortExplorerFiles(filteredDocuments, explorerSort, explorerSortReversed),
27247
+ () => chunk5YX3R6CK_cjs.sortExplorerFiles(filteredDocuments, explorerSort, explorerSortReversed),
28733
27248
  [filteredDocuments, explorerSort, explorerSortReversed]
28734
27249
  );
28735
27250
  const navigatorOnNavigate = React9.useCallback(
@@ -28796,7 +27311,7 @@ function ConnectedFilesPage({
28796
27311
  },
28797
27312
  rowHeight
28798
27313
  };
28799
- const documentsTabActions = /* @__PURE__ */ jsxRuntime.jsxs(chunkQKOFQMAY_cjs.FilesFilterBar, { children: [
27314
+ const documentsTabActions = /* @__PURE__ */ jsxRuntime.jsxs(chunk5YX3R6CK_cjs.FilesFilterBar, { children: [
28800
27315
  /* @__PURE__ */ jsxRuntime.jsx(
28801
27316
  chunk2EI7NCUA_cjs.FilterInput,
28802
27317
  {
@@ -28831,7 +27346,7 @@ function ConnectedFilesPage({
28831
27346
  ),
28832
27347
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [
28833
27348
  /* @__PURE__ */ jsxRuntime.jsx(
28834
- chunkQKOFQMAY_cjs.DocumentsFolderButton,
27349
+ chunk5YX3R6CK_cjs.DocumentsFolderButton,
28835
27350
  {
28836
27351
  documents,
28837
27352
  documentFilters,
@@ -28839,7 +27354,7 @@ function ConnectedFilesPage({
28839
27354
  onNewFolder: canUpload ? handleNewFolder : void 0
28840
27355
  }
28841
27356
  ),
28842
- onOpenTags && /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FilesTagsButton, { onClick: onOpenTags }),
27357
+ onOpenTags && /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.FilesTagsButton, { onClick: onOpenTags }),
28843
27358
  headerExtras
28844
27359
  ] })
28845
27360
  ] });
@@ -28862,9 +27377,9 @@ function ConnectedFilesPage({
28862
27377
  );
28863
27378
  const reviewGridId = isModal ? "documents-modal-grid-v6" : "documents-main-grid-v6";
28864
27379
  const showBulkBar = (viewMode === "grid" || viewMode === "explorer" || viewMode === "navigator") && documents.length > 0;
28865
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkQKOFQMAY_cjs.FilesPage, { isModal, ref: setPageEl, children: [
27380
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunk5YX3R6CK_cjs.FilesPage, { isModal, ref: setPageEl, children: [
28866
27381
  /* @__PURE__ */ jsxRuntime.jsx(
28867
- chunkQKOFQMAY_cjs.UrlInputDialog,
27382
+ chunk5YX3R6CK_cjs.UrlInputDialog,
28868
27383
  {
28869
27384
  open: urlDialogOpen,
28870
27385
  onOpenChange: setUrlDialogOpen,
@@ -28873,7 +27388,7 @@ function ConnectedFilesPage({
28873
27388
  titleIcon: workspaceIcon
28874
27389
  }
28875
27390
  ),
28876
- /* @__PURE__ */ jsxRuntime.jsxs(chunkQKOFQMAY_cjs.FilesPageHeader, { children: [
27391
+ /* @__PURE__ */ jsxRuntime.jsxs(chunk5YX3R6CK_cjs.FilesPageHeader, { children: [
28877
27392
  /* @__PURE__ */ jsxRuntime.jsx(
28878
27393
  chunkMEMWZ72Y_cjs.TabHeader,
28879
27394
  {
@@ -28894,7 +27409,7 @@ function ConnectedFilesPage({
28894
27409
  activeTabId: "documents",
28895
27410
  onTabChange: () => handleViewModeChange(lastDocsViewRef.current),
28896
27411
  firstTabContent: isNarrowFilterRow ? null : documentsTabActions,
28897
- centerContent: /* @__PURE__ */ jsxRuntime.jsxs(chunkQKOFQMAY_cjs.FilesViewCenter, { className: isNarrowFilterRow ? "min-w-0" : void 0, children: [
27412
+ centerContent: /* @__PURE__ */ jsxRuntime.jsxs(chunk5YX3R6CK_cjs.FilesViewCenter, { className: isNarrowFilterRow ? "min-w-0" : void 0, children: [
28898
27413
  !isNarrowFilterRow && viewToggle,
28899
27414
  /* @__PURE__ */ jsxRuntime.jsx(ProgressiveLoadingChip, {})
28900
27415
  ] }),
@@ -28924,14 +27439,14 @@ function ConnectedFilesPage({
28924
27439
  }
28925
27440
  ),
28926
27441
  /* @__PURE__ */ jsxRuntime.jsx(
28927
- chunkQKOFQMAY_cjs.FilesToolbar,
27442
+ chunk5YX3R6CK_cjs.FilesToolbar,
28928
27443
  {
28929
27444
  className: "px-3 pb-2",
28930
27445
  rightActions: viewMode === "grid" || viewMode === "explorer" || viewMode === "navigator" ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
28931
27446
  viewMode === "grid" ? (
28932
27447
  // ‹ n / N › over the table's displayed rows; a step opens the document.
28933
27448
  /* @__PURE__ */ jsxRuntime.jsx(
28934
- chunkVQHXVY26_cjs.GridRowNavigator,
27449
+ chunkRTS3B2W7_cjs.GridRowNavigator,
28935
27450
  {
28936
27451
  gridApi,
28937
27452
  selectedId: viewingDocumentId ?? selectedDocumentIds[0] ?? null,
@@ -28946,7 +27461,7 @@ function ConnectedFilesPage({
28946
27461
  ) : viewMode === "explorer" ? (
28947
27462
  // The same over the explorer's tiles.
28948
27463
  /* @__PURE__ */ jsxRuntime.jsx(
28949
- chunkQKOFQMAY_cjs.ExplorerFileNavigator,
27464
+ chunk5YX3R6CK_cjs.ExplorerFileNavigator,
28950
27465
  {
28951
27466
  fileIds: explorerFileIds,
28952
27467
  selectedId: viewingDocumentId ?? selectedDocumentIds[0] ?? null,
@@ -28985,7 +27500,7 @@ function ConnectedFilesPage({
28985
27500
  }
28986
27501
  ),
28987
27502
  viewMode === "navigator" && currentDocument && /* @__PURE__ */ jsxRuntime.jsx(
28988
- chunkQKOFQMAY_cjs.NavigatorPickerBar,
27503
+ chunk5YX3R6CK_cjs.NavigatorPickerBar,
28989
27504
  {
28990
27505
  currentDocument,
28991
27506
  documents: navigatorDocuments,
@@ -28997,11 +27512,11 @@ function ConnectedFilesPage({
28997
27512
  }
28998
27513
  )
28999
27514
  ] }),
29000
- /* @__PURE__ */ jsxRuntime.jsxs(chunkQKOFQMAY_cjs.FilesPageMain, { children: [
27515
+ /* @__PURE__ */ jsxRuntime.jsxs(chunk5YX3R6CK_cjs.FilesPageMain, { children: [
29001
27516
  viewMode === "grid" && /* @__PURE__ */ jsxRuntime.jsx(
29002
- chunkQKOFQMAY_cjs.DocumentGrid,
27517
+ chunk5YX3R6CK_cjs.DocumentGrid,
29003
27518
  {
29004
- layout: chunkQKOFQMAY_cjs.resolveDocumentGridLayout(isNarrowFilterRow, isModal, isTabletWidth),
27519
+ layout: chunk5YX3R6CK_cjs.resolveDocumentGridLayout(isNarrowFilterRow, isModal, isTabletWidth),
29005
27520
  presets: gridPresets,
29006
27521
  GridComponent,
29007
27522
  showEmptyWorkspace: documents.length === 0 && !isLoading && isMember,
@@ -29047,6 +27562,7 @@ function ConnectedFilesPage({
29047
27562
  gridApi: gridApiRef.current,
29048
27563
  onNavigate: navigatorOnNavigate,
29049
27564
  onOpenDocumentViewer: onToggleDocument,
27565
+ onCompareDocuments,
29050
27566
  onDeleteDocument: requestDeleteDocument,
29051
27567
  isDocumentViewerEnabled,
29052
27568
  onReorderColumns: (ids) => handleReorderColumns(ids, gridApiRef.current ?? void 0),
@@ -29094,7 +27610,7 @@ function ConnectedFilesPage({
29094
27610
  onProduce
29095
27611
  }
29096
27612
  ),
29097
- isModal && onClose && /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.FilesModalFooter, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "outline", onClick: onClose, children: "Close" }) }),
27613
+ isModal && onClose && /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.FilesModalFooter, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "outline", onClick: onClose, children: "Close" }) }),
29098
27614
  /* @__PURE__ */ jsxRuntime.jsx(
29099
27615
  chunkGMM3RBIB_cjs.ConfirmDialog,
29100
27616
  {
@@ -29105,7 +27621,7 @@ function ConnectedFilesPage({
29105
27621
  requestDelete(null);
29106
27622
  },
29107
27623
  title: "Delete Document",
29108
- description: deleteRequest ? `Delete "${ui.getDocumentTitle(deleteRequest, "this document")}"? ${chunkQKOFQMAY_cjs.RECENTLY_DELETED_HINT}` : "",
27624
+ description: deleteRequest ? `Delete "${ui.getDocumentTitle(deleteRequest, "this document")}"? ${chunk5YX3R6CK_cjs.RECENTLY_DELETED_HINT}` : "",
29109
27625
  confirmText: "Delete",
29110
27626
  variant: "destructive"
29111
27627
  }
@@ -29158,8 +27674,8 @@ function ConnectedFilesPage({
29158
27674
  }
29159
27675
  var NO_DOCUMENTS3 = [];
29160
27676
  function ConnectedAiReviewHost(props) {
29161
- const open = useAiReviewStore((s) => s.open);
29162
- const setOpen = useAiReviewStore((s) => s.setOpen);
27677
+ const open = chunkS7B5E3RU_cjs.useAiReviewStore((s) => s.open);
27678
+ const setOpen = chunkS7B5E3RU_cjs.useAiReviewStore((s) => s.setOpen);
29163
27679
  return /* @__PURE__ */ jsxRuntime.jsx(ConnectedAiReview, { open, onOpenChange: setOpen, ...props });
29164
27680
  }
29165
27681
  function ConnectedGridView(props) {
@@ -29296,7 +27812,7 @@ var PROVIDER_FAMILIES = [
29296
27812
  { key: "google", label: "Google", vendors: ["gmail"] }
29297
27813
  ];
29298
27814
  function VendorGlyph({ catalog }) {
29299
- return /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.VendorLogo, { vendorKey: catalog.vendor_key, className: "h-7 w-7" });
27815
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.VendorLogo, { vendorKey: catalog.vendor_key, className: "h-7 w-7" });
29300
27816
  }
29301
27817
  function mailboxProductName(catalog) {
29302
27818
  if (catalog.vendor_key === "microsoft") return "Outlook";
@@ -29363,7 +27879,7 @@ function EmailProviderRow({
29363
27879
  const emailNoun = (n) => n === 1 ? "email" : "emails";
29364
27880
  const syncedCount = thisSync?.synced_count ?? 0;
29365
27881
  return /* @__PURE__ */ jsxRuntime.jsxs(
29366
- chunkQKOFQMAY_cjs.ImportRow,
27882
+ chunk5YX3R6CK_cjs.ImportRow,
29367
27883
  {
29368
27884
  testId: `email-provider-row-${catalog.vendor_key}`,
29369
27885
  logo: /* @__PURE__ */ jsxRuntime.jsx(VendorGlyph, { catalog }),
@@ -29372,7 +27888,7 @@ function EmailProviderRow({
29372
27888
  // Connecting AND reconnecting are owned by the family header, so a
29373
27889
  // not-connected or needs-reconnect row shows no button of its own.
29374
27890
  !isConnected || needsReconnect ? null : /* @__PURE__ */ jsxRuntime.jsx(
29375
- chunkQKOFQMAY_cjs.ImportRunActions,
27891
+ chunk5YX3R6CK_cjs.ImportRunActions,
29376
27892
  {
29377
27893
  isRunning: running,
29378
27894
  isStopping: cancelSync.isPending,
@@ -29387,10 +27903,10 @@ function EmailProviderRow({
29387
27903
  ),
29388
27904
  children: [
29389
27905
  isConnected && !needsReconnect && !running && /* @__PURE__ */ jsxRuntime.jsxs(
29390
- chunkQKOFQMAY_cjs.ImportSummary,
27906
+ chunk5YX3R6CK_cjs.ImportSummary,
29391
27907
  {
29392
- aside: /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.ImportAside, { children: thisSync && thisSync.folders.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
29393
- chunkQKOFQMAY_cjs.FolderSummary,
27908
+ aside: /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.ImportAside, { children: thisSync && thisSync.folders.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
27909
+ chunk5YX3R6CK_cjs.FolderSummary,
29394
27910
  {
29395
27911
  names: thisSync.folders.map(
29396
27912
  (id) => mailboxFolders?.find((f) => f.id === id)?.name
@@ -29413,7 +27929,7 @@ function EmailProviderRow({
29413
27929
  }
29414
27930
  ),
29415
27931
  running && /* @__PURE__ */ jsxRuntime.jsx(
29416
- chunkQKOFQMAY_cjs.ImportProgress,
27932
+ chunk5YX3R6CK_cjs.ImportProgress,
29417
27933
  {
29418
27934
  processed: progress?.processed ?? 0,
29419
27935
  total: progress?.total,
@@ -29530,9 +28046,9 @@ function EmailImportPanel({
29530
28046
  return { family, entries, extra, identity, connectVendor, connected, needsReconnect };
29531
28047
  }).filter((g) => g.entries.length > 0 || g.extra);
29532
28048
  if (groups.length === 0) return null;
29533
- return /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.ImportPanel, { "data-testid": "email-import-panel", children: groups.map(
28049
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.ImportPanel, { "data-testid": "email-import-panel", children: groups.map(
29534
28050
  ({ family, entries, extra, identity, connectVendor, connected, needsReconnect }) => /* @__PURE__ */ jsxRuntime.jsx(
29535
- chunkQKOFQMAY_cjs.ImportFamilySection,
28051
+ chunk5YX3R6CK_cjs.ImportFamilySection,
29536
28052
  {
29537
28053
  label: family.label,
29538
28054
  identity,
@@ -29541,7 +28057,7 @@ function EmailImportPanel({
29541
28057
  onAction: () => void (!connected ? connectFamily(connectVendor) : needsReconnect ? reconnectFamily(connectVendor) : disconnectFamily(family, connectVendor, identity)),
29542
28058
  testId: `import-family-${family.key}`,
29543
28059
  actionButton: !connected ? { testId: `import-family-connect-${family.key}` } : needsReconnect ? { testId: `import-family-reconnect-${family.key}` } : { testId: `import-family-disconnect-${family.key}` },
29544
- children: /* @__PURE__ */ jsxRuntime.jsxs(chunkQKOFQMAY_cjs.ImportList, { children: [
28060
+ children: /* @__PURE__ */ jsxRuntime.jsxs(chunk5YX3R6CK_cjs.ImportList, { children: [
29545
28061
  entries.map((entry) => /* @__PURE__ */ jsxRuntime.jsx(
29546
28062
  EmailProviderRow,
29547
28063
  {
@@ -29625,7 +28141,7 @@ function driveProduct(vendorKey) {
29625
28141
  }
29626
28142
  function VendorGlyph2({ catalog }) {
29627
28143
  return /* @__PURE__ */ jsxRuntime.jsx(
29628
- chunkQKOFQMAY_cjs.VendorLogo,
28144
+ chunk5YX3R6CK_cjs.VendorLogo,
29629
28145
  {
29630
28146
  vendorKey: catalog.vendor_key,
29631
28147
  product: driveProduct(catalog.vendor_key).glyph,
@@ -29748,7 +28264,7 @@ function OneDriveProviderRow({
29748
28264
  const driveNoun = (n) => n === 1 ? "document" : "documents";
29749
28265
  const showRunActions = isConnected && !needsReconnect;
29750
28266
  const reconnectAction = ownsAuth && needsReconnect ? /* @__PURE__ */ jsxRuntime.jsx(
29751
- chunkQKOFQMAY_cjs.ImportActionButton,
28267
+ chunk5YX3R6CK_cjs.ImportActionButton,
29752
28268
  {
29753
28269
  onClick: () => void reconnectSelf(),
29754
28270
  disabled: reauthPending,
@@ -29757,7 +28273,7 @@ function OneDriveProviderRow({
29757
28273
  }
29758
28274
  ) : null;
29759
28275
  return /* @__PURE__ */ jsxRuntime.jsxs(
29760
- chunkQKOFQMAY_cjs.ImportRow,
28276
+ chunk5YX3R6CK_cjs.ImportRow,
29761
28277
  {
29762
28278
  testId: `onedrive-provider-row-${catalog.vendor_key}`,
29763
28279
  logo: /* @__PURE__ */ jsxRuntime.jsx(VendorGlyph2, { catalog }),
@@ -29769,7 +28285,7 @@ function OneDriveProviderRow({
29769
28285
  // Until folders are configured here (or when nothing new is pending), Import now
29770
28286
  // stays disabled; the gear opens the folder picker.
29771
28287
  /* @__PURE__ */ jsxRuntime.jsx(
29772
- chunkQKOFQMAY_cjs.ImportRunActions,
28288
+ chunk5YX3R6CK_cjs.ImportRunActions,
29773
28289
  {
29774
28290
  isRunning: running,
29775
28291
  isStopping: cancelSync.isPending,
@@ -29788,16 +28304,16 @@ function OneDriveProviderRow({
29788
28304
  ) : reconnectAction
29789
28305
  ),
29790
28306
  children: [
29791
- ownsAuth && needsReconnect && /* @__PURE__ */ jsxRuntime.jsxs(chunkQKOFQMAY_cjs.ImportHint, { "data-testid": `onedrive-reconnect-hint-${catalog.vendor_key}`, children: [
28307
+ ownsAuth && needsReconnect && /* @__PURE__ */ jsxRuntime.jsxs(chunk5YX3R6CK_cjs.ImportHint, { "data-testid": `onedrive-reconnect-hint-${catalog.vendor_key}`, children: [
29792
28308
  "Couldn\u2019t reach SharePoint. Click ",
29793
28309
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: "Reconnect" }),
29794
28310
  " \u2014 if it keeps happening, log out and back in to refresh the connection."
29795
28311
  ] }),
29796
28312
  configuredHere && !needsReconnect && !running && /* @__PURE__ */ jsxRuntime.jsxs(
29797
- chunkQKOFQMAY_cjs.ImportSummary,
28313
+ chunk5YX3R6CK_cjs.ImportSummary,
29798
28314
  {
29799
28315
  className: "mt-2",
29800
- aside: typeof pendingCount === "number" ? /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.ImportAside, { className: "max-w-none shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx("span", { "data-testid": `drive-pending-${catalog.vendor_key}`, children: pendingCount > 0 ? `${pendingCount.toLocaleString()} new ${driveNoun(pendingCount)} to sync` : "No new documents to sync" }) }) : void 0,
28316
+ aside: typeof pendingCount === "number" ? /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.ImportAside, { className: "max-w-none shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx("span", { "data-testid": `drive-pending-${catalog.vendor_key}`, children: pendingCount > 0 ? `${pendingCount.toLocaleString()} new ${driveNoun(pendingCount)} to sync` : "No new documents to sync" }) }) : void 0,
29801
28317
  children: [
29802
28318
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
29803
28319
  "Syncing ",
@@ -29825,7 +28341,7 @@ function OneDriveProviderRow({
29825
28341
  }
29826
28342
  ),
29827
28343
  running && /* @__PURE__ */ jsxRuntime.jsx(
29828
- chunkQKOFQMAY_cjs.ImportProgress,
28344
+ chunk5YX3R6CK_cjs.ImportProgress,
29829
28345
  {
29830
28346
  processed: progress?.processed ?? 0,
29831
28347
  total: progress?.total,
@@ -29889,13 +28405,13 @@ function SharePointEnableRow({
29889
28405
  }
29890
28406
  };
29891
28407
  return /* @__PURE__ */ jsxRuntime.jsx(
29892
- chunkQKOFQMAY_cjs.ImportRow,
28408
+ chunk5YX3R6CK_cjs.ImportRow,
29893
28409
  {
29894
28410
  testId: `onedrive-provider-row-${catalog.vendor_key}`,
29895
- logo: /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.VendorLogo, { vendorKey: catalog.vendor_key, product: product.glyph, className: "h-7 w-7" }),
28411
+ logo: /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.VendorLogo, { vendorKey: catalog.vendor_key, product: product.glyph, className: "h-7 w-7" }),
29896
28412
  name: product.name,
29897
28413
  actions: /* @__PURE__ */ jsxRuntime.jsx(
29898
- chunkQKOFQMAY_cjs.ImportActionButton,
28414
+ chunk5YX3R6CK_cjs.ImportActionButton,
29899
28415
  {
29900
28416
  onClick: () => void enable(),
29901
28417
  disabled: pending,
@@ -29903,7 +28419,7 @@ function SharePointEnableRow({
29903
28419
  children: pending ? "Enabling\u2026" : `Enable ${product.name}`
29904
28420
  }
29905
28421
  ),
29906
- children: sharePointAdminUrl && /* @__PURE__ */ jsxRuntime.jsxs(chunkQKOFQMAY_cjs.ImportHint, { children: [
28422
+ children: sharePointAdminUrl && /* @__PURE__ */ jsxRuntime.jsxs(chunk5YX3R6CK_cjs.ImportHint, { children: [
29907
28423
  "Does your organization require admin approval?",
29908
28424
  " ",
29909
28425
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -29952,11 +28468,11 @@ function DriveImportPanel({
29952
28468
  }
29953
28469
  const product = driveProduct(entry.vendor_key);
29954
28470
  return /* @__PURE__ */ jsxRuntime.jsx(
29955
- chunkQKOFQMAY_cjs.ImportRow,
28471
+ chunk5YX3R6CK_cjs.ImportRow,
29956
28472
  {
29957
28473
  testId: `onedrive-provider-row-${entry.vendor_key}`,
29958
28474
  logo: /* @__PURE__ */ jsxRuntime.jsx(
29959
- chunkQKOFQMAY_cjs.VendorLogo,
28475
+ chunk5YX3R6CK_cjs.VendorLogo,
29960
28476
  {
29961
28477
  vendorKey: entry.vendor_key,
29962
28478
  product: product.glyph,
@@ -29981,7 +28497,7 @@ function DriveImportPanel({
29981
28497
  );
29982
28498
  }).filter(Boolean);
29983
28499
  if (rows.length === 0) return null;
29984
- return /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.ImportList, { "data-testid": "onedrive-import-panel", children: rows });
28500
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.ImportList, { "data-testid": "onedrive-import-panel", children: rows });
29985
28501
  }
29986
28502
  function useHasAccountsImport() {
29987
28503
  const isVendorVisible = react.useConnectorVendorVisibility();
@@ -30059,7 +28575,7 @@ function ProcessingSection({
30059
28575
  tasks,
30060
28576
  onDelete
30061
28577
  }) {
30062
- return /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.TaskSection, { title, count: count2, status, tooltip: SECTION_TOOLTIPS[status], children: /* @__PURE__ */ jsxRuntime.jsx(
28578
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.TaskSection, { title, count: count2, status, tooltip: SECTION_TOOLTIPS[status], children: /* @__PURE__ */ jsxRuntime.jsx(
30063
28579
  chunkJYR55F3P_cjs.UploadTaskList,
30064
28580
  {
30065
28581
  tasks,
@@ -30314,7 +28830,7 @@ var MENU_LABELS = {
30314
28830
  };
30315
28831
  function applyDatabaseColumns(columns, api) {
30316
28832
  const kept = (id) => api.getColumn(id) ? [id] : [];
30317
- chunkQKOFQMAY_cjs.applyColumnLayout(api, [...kept(chunkTQSU3I4C_cjs.OPEN_ROW_COL_ID), ...columns, ...kept(chunkTQSU3I4C_cjs.ADD_COLUMN_COL_ID)]);
28833
+ chunk5YX3R6CK_cjs.applyColumnLayout(api, [...kept(chunkTQSU3I4C_cjs.OPEN_ROW_COL_ID), ...columns, ...kept(chunkTQSU3I4C_cjs.ADD_COLUMN_COL_ID)]);
30318
28834
  }
30319
28835
  function DatabaseViewsMenu({
30320
28836
  databaseId,
@@ -30333,7 +28849,7 @@ function DatabaseViewsMenu({
30333
28849
  [defaultColumns]
30334
28850
  );
30335
28851
  const onLoadView = React9.useCallback(
30336
- (view, api) => chunkQKOFQMAY_cjs.applyViewColumns(api, view, applyDatabaseColumns),
28852
+ (view, api) => chunk5YX3R6CK_cjs.applyViewColumns(api, view, applyDatabaseColumns),
30337
28853
  []
30338
28854
  );
30339
28855
  const onSaveView = React9.useCallback(
@@ -30353,7 +28869,7 @@ function DatabaseViewsMenu({
30353
28869
  },
30354
28870
  [confirm, deleteView, notify18]
30355
28871
  );
30356
- const menu = chunkQKOFQMAY_cjs.useGridViews({
28872
+ const menu = chunk5YX3R6CK_cjs.useGridViews({
30357
28873
  getGridApi,
30358
28874
  defaultColumns,
30359
28875
  builtins,
@@ -30366,7 +28882,7 @@ function DatabaseViewsMenu({
30366
28882
  onDeleteView,
30367
28883
  isSaving
30368
28884
  });
30369
- return /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.ViewSelectorMenu, { ...menu, labels: MENU_LABELS });
28885
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.ViewSelectorMenu, { ...menu, labels: MENU_LABELS });
30370
28886
  }
30371
28887
  function useMoveLocalViews(gridId, ready, importViews) {
30372
28888
  const localViews = react.useArbiSessionState((state) => state.grid.savedViews[gridId]);
@@ -31500,7 +30016,7 @@ function MeetingAvatar() {
31500
30016
  );
31501
30017
  }
31502
30018
  var isGroupChat = (chat) => !!chat && chat.kind !== "direct";
31503
- var isAgent7 = (user) => browser.chats.isAgentExtId(user.external_id);
30019
+ var isAgent6 = (user) => browser.chats.isAgentExtId(user.external_id);
31504
30020
  function ConnectedMessenger({
31505
30021
  activeId,
31506
30022
  onOpen,
@@ -31537,7 +30053,7 @@ function ConnectedMessenger({
31537
30053
  // Presence rides on the row's avatar.
31538
30054
  avatar(c.peer)
31539
30055
  ),
31540
- badge: !isGroupChat(c.chat) && isAgent7(c.peer) ? /* @__PURE__ */ jsxRuntime.jsx(ui.AgentBadge, {}) : void 0
30056
+ badge: !isGroupChat(c.chat) && isAgent6(c.peer) ? /* @__PURE__ */ jsxRuntime.jsx(ui.AgentBadge, {}) : void 0
31541
30057
  }));
31542
30058
  const all = [...decorated, ...extraRows];
31543
30059
  if (!filters?.size) return all;
@@ -31545,7 +30061,7 @@ function ConnectedMessenger({
31545
30061
  unread: (row2) => row2.unreadCount > 0,
31546
30062
  // A person is muted, not a group that happens to list them first.
31547
30063
  muted: (row2) => !isGroupChat(row2.chat) && mutedUsers.has(row2.peer.external_id),
31548
- agents: (row2) => !isGroupChat(row2.chat) && isAgent7(row2.peer),
30064
+ agents: (row2) => !isGroupChat(row2.chat) && isAgent6(row2.peer),
31549
30065
  meetings: (row2) => row2.chat?.kind === "meeting",
31550
30066
  ...rowFilters
31551
30067
  };
@@ -31676,12 +30192,12 @@ function ConnectedMessenger({
31676
30192
  {
31677
30193
  avatar: activePeer ? avatar(activePeer) : void 0,
31678
30194
  name: activePeer ? react.userDisplayName(activePeer) : "Conversation",
31679
- badge: activePeer && isAgent7(activePeer) ? /* @__PURE__ */ jsxRuntime.jsx(ui.AgentBadge, {}) : void 0,
30195
+ badge: activePeer && isAgent6(activePeer) ? /* @__PURE__ */ jsxRuntime.jsx(ui.AgentBadge, {}) : void 0,
31680
30196
  presence: presence ? /* @__PURE__ */ jsxRuntime.jsx(ui.PresenceLabel, { status: presence }) : void 0,
31681
30197
  email: activePeer?.email,
31682
30198
  menu: activePeer ? directActions?.(activePeer, {
31683
30199
  // A personal agent never carries over into a group, and a self-chat has no peer.
31684
- addPeople: isAgent7(activePeer) || activeIsSelf || !PeoplePicker ? void 0 : () => setPicker({ mode: "from-direct", fixed: [activePeer] })
30200
+ addPeople: isAgent6(activePeer) || activeIsSelf || !PeoplePicker ? void 0 : () => setPicker({ mode: "from-direct", fixed: [activePeer] })
31685
30201
  }) : void 0
31686
30202
  }
31687
30203
  ),
@@ -32717,7 +31233,7 @@ function ConnectedGrantWorkspaceAccessDialog({
32717
31233
  ...isExternal ? { access_duration_seconds: Number(accessHours) * 3600 } : {}
32718
31234
  });
32719
31235
  const wsName = workspaces.find((w) => w.external_id === wsId)?.name ?? "the workspace";
32720
- const roleLabel = chunkV2UQR7P6_cjs.formatRole(selectedRole).toLowerCase();
31236
+ const roleLabel = chunkQLY22ZZW_cjs.formatRole(selectedRole).toLowerCase();
32721
31237
  const expiresAt = Array.isArray(grantedMembers) ? grantedMembers.find((member) => member.user?.email === requester.email)?.access_expires_at : void 0;
32722
31238
  const expiryIso = expiresAt && !/(?:Z|[+-]\d{2}:\d{2})$/i.test(expiresAt) ? `${expiresAt}Z` : expiresAt;
32723
31239
  const expiryZone = expiryIso ? new Intl.DateTimeFormat(void 0, { timeZoneName: "short" }).formatToParts(new Date(expiryIso)).find((part) => part.type === "timeZoneName")?.value : void 0;
@@ -32820,17 +31336,17 @@ function ConnectedGrantWorkspaceAccessDialog({
32820
31336
  onValueChange: (v) => setSelectedRole(v),
32821
31337
  disabled: busy,
32822
31338
  children: [
32823
- /* @__PURE__ */ jsxRuntime.jsx(ui.SelectTrigger, { "data-testid": "grant-role-select", children: /* @__PURE__ */ jsxRuntime.jsx(ui.SelectValue, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { variant: "default", className: chunkV2UQR7P6_cjs.getRoleBadgeClass(selectedRole), children: chunkV2UQR7P6_cjs.formatRole(selectedRole) }) }) }),
31339
+ /* @__PURE__ */ jsxRuntime.jsx(ui.SelectTrigger, { "data-testid": "grant-role-select", children: /* @__PURE__ */ jsxRuntime.jsx(ui.SelectValue, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { variant: "default", className: chunkQLY22ZZW_cjs.getRoleBadgeClass(selectedRole), children: chunkQLY22ZZW_cjs.formatRole(selectedRole) }) }) }),
32824
31340
  /* @__PURE__ */ jsxRuntime.jsx(ui.SelectContent, { children: GRANTABLE_ROLES.filter((role) => !isExternal || role.value !== "owner").map(
32825
31341
  (role) => /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: role.value, children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
32826
- /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { variant: "default", className: chunkV2UQR7P6_cjs.getRoleBadgeClass(role.value), children: role.label }),
31342
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { variant: "default", className: chunkQLY22ZZW_cjs.getRoleBadgeClass(role.value), children: role.label }),
32827
31343
  role.value === "guest" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: "Read-only" })
32828
31344
  ] }) }, role.value)
32829
31345
  ) })
32830
31346
  ]
32831
31347
  }
32832
31348
  ),
32833
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1.5 text-xs text-muted-foreground", children: chunkV2UQR7P6_cjs.getRoleDescription(selectedRole) }),
31349
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1.5 text-xs text-muted-foreground", children: chunkQLY22ZZW_cjs.getRoleDescription(selectedRole) }),
32834
31350
  !canGrant(primaryKind) && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs text-yellow-text", "data-testid": "owner-temporary-warning", children: "Temporary access can\u2019t be owner \u2014 pick another role or grant permanent." })
32835
31351
  ] })
32836
31352
  ] }),
@@ -33980,7 +32496,7 @@ function useWorkflowTasks() {
33980
32496
  () => Object.fromEntries(documents.map((d) => [d.external_id, ui.getDocumentTitle(d, d.external_id)])),
33981
32497
  [documents]
33982
32498
  );
33983
- const create4 = React9.useCallback(
32499
+ const create2 = React9.useCallback(
33984
32500
  async (ctx, forceWorkflow = false) => {
33985
32501
  const request = chunkJYR55F3P_cjs.taskComposerToCreateRequest(
33986
32502
  { ...ctx, documentTitles, plan: ctx.plan ?? null },
@@ -34047,7 +32563,7 @@ function useWorkflowTasks() {
34047
32563
  [activeWorkspaceId, documentTitles, grantAgentAccess, updateWorkflowMutation]
34048
32564
  );
34049
32565
  return {
34050
- create: create4,
32566
+ create: create2,
34051
32567
  update,
34052
32568
  updateWorkflow,
34053
32569
  isPending: createWork.isPending || startQuery.isPending || createWorkflow.isPending || updateConversation.isPending || updateWorkflowMutation.isPending
@@ -34732,7 +33248,7 @@ function ResourceShareForm({
34732
33248
  const memberRole = memberRoleByEmail.get(lower);
34733
33249
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 shrink-0", children: [
34734
33250
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: "Member" }),
34735
- /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { variant: "default", className: chunkV2UQR7P6_cjs.getRoleBadgeClass(memberRole), children: chunkV2UQR7P6_cjs.formatRole(memberRole) })
33251
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { variant: "default", className: chunkQLY22ZZW_cjs.getRoleBadgeClass(memberRole), children: chunkQLY22ZZW_cjs.formatRole(memberRole) })
34736
33252
  ] });
34737
33253
  }
34738
33254
  const role = rolesByEmail[selected.email] ?? "collaborator";
@@ -34743,12 +33259,12 @@ function ResourceShareForm({
34743
33259
  value: role,
34744
33260
  onValueChange: (value) => setRolesByEmail((prev) => ({ ...prev, [selected.email]: value })),
34745
33261
  children: [
34746
- /* @__PURE__ */ jsxRuntime.jsx(ui.SelectTrigger, { className: "h-7 w-[120px]", children: /* @__PURE__ */ jsxRuntime.jsx(ui.SelectValue, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { variant: "default", className: chunkV2UQR7P6_cjs.getRoleBadgeClass(role), children: chunkV2UQR7P6_cjs.formatRole(role) }) }) }),
34747
- /* @__PURE__ */ jsxRuntime.jsx(ui.SelectContent, { children: ALL_ROLES2.map((r) => /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: r.value, children: /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { variant: "default", className: chunkV2UQR7P6_cjs.getRoleBadgeClass(r.value), children: r.label }) }, r.value)) })
33262
+ /* @__PURE__ */ jsxRuntime.jsx(ui.SelectTrigger, { className: "h-7 w-[120px]", children: /* @__PURE__ */ jsxRuntime.jsx(ui.SelectValue, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { variant: "default", className: chunkQLY22ZZW_cjs.getRoleBadgeClass(role), children: chunkQLY22ZZW_cjs.formatRole(role) }) }) }),
33263
+ /* @__PURE__ */ jsxRuntime.jsx(ui.SelectContent, { children: ALL_ROLES2.map((r) => /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: r.value, children: /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { variant: "default", className: chunkQLY22ZZW_cjs.getRoleBadgeClass(r.value), children: r.label }) }, r.value)) })
34748
33264
  ]
34749
33265
  }
34750
33266
  ) }) }),
34751
- /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipContent, { side: "left", className: "max-w-[300px]", children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: chunkV2UQR7P6_cjs.getRoleDescription(role) }) })
33267
+ /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipContent, { side: "left", className: "max-w-[300px]", children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: chunkQLY22ZZW_cjs.getRoleDescription(role) }) })
34752
33268
  ] }) });
34753
33269
  };
34754
33270
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
@@ -35216,7 +33732,7 @@ function useThreadLabels(canEditShared) {
35216
33732
  if (failed)
35217
33733
  notify18(`Could not update labels on ${failed} thread${failed === 1 ? "" : "s"}.`, "error");
35218
33734
  };
35219
- const create4 = async (rows, name) => {
33735
+ const create2 = async (rows, name) => {
35220
33736
  if (!canEdit(rows) || !name.trim()) return;
35221
33737
  try {
35222
33738
  const existing = labels.find((tag) => tag.name.toLowerCase() === name.trim().toLowerCase());
@@ -35238,7 +33754,7 @@ function useThreadLabels(canEditShared) {
35238
33754
  options: options2,
35239
33755
  appliedIds: new Set(row2.label_ext_ids ?? []),
35240
33756
  onToggle: (id) => void apply([row2], id, Boolean(row2.label_ext_ids?.includes(id))),
35241
- onCreate: (name) => void create4([row2], name),
33757
+ onCreate: (name) => void create2([row2], name),
35242
33758
  rowHeight: 40
35243
33759
  }
35244
33760
  ),
@@ -35252,7 +33768,7 @@ function useThreadLabels(canEditShared) {
35252
33768
  ).map((label) => label.id)
35253
33769
  );
35254
33770
  return /* @__PURE__ */ jsxRuntime.jsx(
35255
- chunkQKOFQMAY_cjs.BulkLabelSelectView,
33771
+ chunk5YX3R6CK_cjs.BulkLabelSelectView,
35256
33772
  {
35257
33773
  options: options2,
35258
33774
  appliedIds: all,
@@ -35260,7 +33776,7 @@ function useThreadLabels(canEditShared) {
35260
33776
  disabled: !canEdit(rows) || update.isPending || createTag.isPending,
35261
33777
  isCompact,
35262
33778
  onToggle: (id) => void apply(rows, id, all.has(id)),
35263
- onCreate: (name) => void create4(rows, name)
33779
+ onCreate: (name) => void create2(rows, name)
35264
33780
  }
35265
33781
  );
35266
33782
  }
@@ -35378,7 +33894,7 @@ function useConnectedThreadActivity(conversationId) {
35378
33894
  stepChip: eventStep ? stepChipOf(eventStep, event.kind, stepDocument) : void 0,
35379
33895
  // No avatar tooltip: the entry is already a button (or titled row) that carries the same
35380
33896
  // details, and a tooltip trigger inside it would be a nested <button>.
35381
- avatar: assistant ? /* @__PURE__ */ jsxRuntime.jsx(chunkJYR55F3P_cjs.AssistantEntity, { variant: "icon", size: 20, showTooltip: false }) : member ? /* @__PURE__ */ jsxRuntime.jsx(DocumentUser, { user: member, tooltip: false }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { className: "size-4 text-muted-foreground" }),
33897
+ avatar: assistant ? /* @__PURE__ */ jsxRuntime.jsx(chunkJYR55F3P_cjs.AssistantEntity, { variant: "icon", size: 20, showTooltip: false }) : member ? /* @__PURE__ */ jsxRuntime.jsx(chunkS7B5E3RU_cjs.DocumentUser, { user: member, tooltip: false }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { className: "size-4 text-muted-foreground" }),
35382
33898
  time: ui.formatRelativeTime(event.created_at, { style: "short" }),
35383
33899
  exactTime: ui.formatFriendlyDate(event.created_at),
35384
33900
  onOpenDocument: docId && doc ? () => openDocument(docId) : void 0,
@@ -35584,7 +34100,7 @@ function ConnectedThreadTaskBar({
35584
34100
  ) }),
35585
34101
  /* @__PURE__ */ jsxRuntime.jsxs(ui.DropdownMenuContent, { align: "end", children: [
35586
34102
  /* @__PURE__ */ jsxRuntime.jsx(
35587
- chunkVQHXVY26_cjs.ThreadFollowMenuItem,
34103
+ chunkRTS3B2W7_cjs.ThreadFollowMenuItem,
35588
34104
  {
35589
34105
  following: follow.following,
35590
34106
  onFollowingChange: (on) => (
@@ -35748,7 +34264,7 @@ function ConnectedTaskComposer({
35748
34264
  const planWork = react.usePlanWork();
35749
34265
  const { tasks: allTasks } = react.useWorkItems();
35750
34266
  const { data: documents = [] } = react.useDocuments();
35751
- const { create: create4, update, updateWorkflow, isPending } = useWorkflowTasks();
34267
+ const { create: create2, update, updateWorkflow, isPending } = useWorkflowTasks();
35752
34268
  const scopeSource = chunkFYL7IGK2_cjs.useConnectedWorkflowScopeSource();
35753
34269
  const activeWorkspaceId = react.useArbiSessionState((s) => s.workspaceId);
35754
34270
  const activeWorkspace = React9.useMemo(
@@ -35878,7 +34394,7 @@ function ConnectedTaskComposer({
35878
34394
  await update(task, ctx);
35879
34395
  notify18(`Updated \u201C${task.title ?? "task"}\u201D`, "success");
35880
34396
  } else {
35881
- const created = await create4(ctx, saveOnly && !options2?.runOnce);
34397
+ const created = await create2(ctx, saveOnly && !options2?.runOnce);
35882
34398
  if (created.kind === "workflow") {
35883
34399
  notify18(`Saved \u201C${created.workflow.name}\u201D.`, "success");
35884
34400
  openWorkflow?.();
@@ -36352,7 +34868,7 @@ function useRenderTaskPerson() {
36352
34868
  return React9.useCallback(
36353
34869
  (person) => {
36354
34870
  const user = person.id ? byId.get(person.id) : void 0;
36355
- return user ? /* @__PURE__ */ jsxRuntime.jsx(DocumentUser, { user, variant: "pill" }) : /* @__PURE__ */ jsxRuntime.jsx(chunkZXHGPTAZ_cjs.PersonPill, { person });
34871
+ return user ? /* @__PURE__ */ jsxRuntime.jsx(chunkS7B5E3RU_cjs.DocumentUser, { user, variant: "pill" }) : /* @__PURE__ */ jsxRuntime.jsx(chunkZXHGPTAZ_cjs.PersonPill, { person });
36356
34872
  },
36357
34873
  [byId]
36358
34874
  );
@@ -38317,7 +36833,7 @@ var MessageComponent = ({
38317
36833
  revealActionsOnHover: true,
38318
36834
  leading: isUser ? (
38319
36835
  // Someone else's author is the pill above their run; only mine is marked here.
38320
- !isOtherPerson && messageAuthorUser && /* @__PURE__ */ jsxRuntime.jsx(DocumentUser, { user: messageAuthorUser })
36836
+ !isOtherPerson && messageAuthorUser && /* @__PURE__ */ jsxRuntime.jsx(chunkS7B5E3RU_cjs.DocumentUser, { user: messageAuthorUser })
38321
36837
  ) : /* @__PURE__ */ jsxRuntime.jsx(
38322
36838
  "span",
38323
36839
  {
@@ -38422,7 +36938,7 @@ var MessageComponent = ({
38422
36938
  messageId,
38423
36939
  align: isOtherPerson ? "start" : "end",
38424
36940
  children: [
38425
- startsAuthorRun && messageAuthorUser && /* @__PURE__ */ jsxRuntime.jsx(chunk226ILMHW_cjs.MessageAuthor, { children: /* @__PURE__ */ jsxRuntime.jsx(DocumentUser, { user: messageAuthorUser, variant: "pill" }) }),
36941
+ startsAuthorRun && messageAuthorUser && /* @__PURE__ */ jsxRuntime.jsx(chunk226ILMHW_cjs.MessageAuthor, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkS7B5E3RU_cjs.DocumentUser, { user: messageAuthorUser, variant: "pill" }) }),
38426
36942
  /* @__PURE__ */ jsxRuntime.jsxs(
38427
36943
  chunk226ILMHW_cjs.MessageBubble,
38428
36944
  {
@@ -39704,7 +38220,7 @@ function ConnectedConversationPage({
39704
38220
  !isInChat && /* @__PURE__ */ jsxRuntime.jsx(chunkQK3SHV3F_cjs.ConversationHistoryPane, { children: searchEnabled && semanticSearchOpen ? /* @__PURE__ */ jsxRuntime.jsx(ConnectedThreadsPage, { showHeader: false, search: true, ResultsBoundary }) : /* @__PURE__ */ jsxRuntime.jsx(ConnectedThreadsPage, { showHeader: false, focusLauncher }) })
39705
38221
  ] }),
39706
38222
  /* @__PURE__ */ jsxRuntime.jsx(
39707
- chunkQKOFQMAY_cjs.UrlInputDialog,
38223
+ chunk5YX3R6CK_cjs.UrlInputDialog,
39708
38224
  {
39709
38225
  open: urlDialogOpen,
39710
38226
  onOpenChange: setUrlDialogOpen,
@@ -39765,7 +38281,7 @@ function ConnectedConversationEmpty({
39765
38281
  compactLeadingAction: onImportFromEmail && /* @__PURE__ */ jsxRuntime.jsx(AddFromAccountsButton, { onImportFromEmail })
39766
38282
  }
39767
38283
  ),
39768
- /* @__PURE__ */ jsxRuntime.jsx(chunkQKOFQMAY_cjs.PrivacyExplainerModal, {})
38284
+ /* @__PURE__ */ jsxRuntime.jsx(chunk5YX3R6CK_cjs.PrivacyExplainerModal, {})
39769
38285
  ] })
39770
38286
  }
39771
38287
  );
@@ -42520,7 +41036,7 @@ function SsoResendVerificationButton({
42520
41036
  onClick: async () => handleResendEmailVerification(),
42521
41037
  disabled: loading || disabled,
42522
41038
  "aria-label": "Resend verification email",
42523
- children: loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkVQHXVY26_cjs.LoadingIndicator, {}) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
41039
+ children: loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkRTS3B2W7_cjs.LoadingIndicator, {}) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
42524
41040
  "Didn't get a verification email? ",
42525
41041
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold", children: "Resend" })
42526
41042
  ] })
@@ -43749,10 +42265,10 @@ function useContextualHints() {
43749
42265
  const session = react.useArbiSessionStore();
43750
42266
  const { data: userSettings } = react.useUserSettings();
43751
42267
  const updateUserSettings = react.useUpdateUserSettings();
43752
- const [sessionOverride] = react.useTransientView(chunkVQHXVY26_cjs.TIPS_VISIBILITY_OVERRIDE, null);
43753
- const setShowHints = (value) => chunkVQHXVY26_cjs.setHintsSessionOverride(session, value);
42268
+ const [sessionOverride] = react.useTransientView(chunkRTS3B2W7_cjs.TIPS_VISIBILITY_OVERRIDE, null);
42269
+ const setShowHints = (value) => chunkRTS3B2W7_cjs.setHintsSessionOverride(session, value);
43754
42270
  const setShowHintsPersisted = (value) => {
43755
- chunkVQHXVY26_cjs.setHintsSessionOverride(session, null);
42271
+ chunkRTS3B2W7_cjs.setHintsSessionOverride(session, null);
43756
42272
  updateUserSettings.mutate({ show_hints: value });
43757
42273
  };
43758
42274
  return {
@@ -43817,6 +42333,122 @@ Object.defineProperty(exports, "useRewardBalance", {
43817
42333
  enumerable: true,
43818
42334
  get: function () { return chunkV7JDMKNQ_cjs.useRewardBalance; }
43819
42335
  });
42336
+ Object.defineProperty(exports, "ConnectedPendingSyncDialog", {
42337
+ enumerable: true,
42338
+ get: function () { return chunkS7B5E3RU_cjs.ConnectedPendingSyncDialog; }
42339
+ });
42340
+ Object.defineProperty(exports, "ConnectedTagEntity", {
42341
+ enumerable: true,
42342
+ get: function () { return chunkS7B5E3RU_cjs.ConnectedTagEntity; }
42343
+ });
42344
+ Object.defineProperty(exports, "DocumentFolderCell", {
42345
+ enumerable: true,
42346
+ get: function () { return chunkS7B5E3RU_cjs.DocumentFolderCell; }
42347
+ });
42348
+ Object.defineProperty(exports, "DocumentLabelsCell", {
42349
+ enumerable: true,
42350
+ get: function () { return chunkS7B5E3RU_cjs.DocumentLabelsCell; }
42351
+ });
42352
+ Object.defineProperty(exports, "DocumentNameCell", {
42353
+ enumerable: true,
42354
+ get: function () { return chunkS7B5E3RU_cjs.DocumentNameCell; }
42355
+ });
42356
+ Object.defineProperty(exports, "DocumentSharedCell", {
42357
+ enumerable: true,
42358
+ get: function () { return chunkS7B5E3RU_cjs.DocumentSharedCell; }
42359
+ });
42360
+ Object.defineProperty(exports, "DocumentStatusGlyph", {
42361
+ enumerable: true,
42362
+ get: function () { return chunkS7B5E3RU_cjs.DocumentStatusGlyph; }
42363
+ });
42364
+ Object.defineProperty(exports, "DocumentSyncGlyph", {
42365
+ enumerable: true,
42366
+ get: function () { return chunkS7B5E3RU_cjs.DocumentSyncGlyph; }
42367
+ });
42368
+ Object.defineProperty(exports, "DocumentUser", {
42369
+ enumerable: true,
42370
+ get: function () { return chunkS7B5E3RU_cjs.DocumentUser; }
42371
+ });
42372
+ Object.defineProperty(exports, "FILES_PREFS_KEY", {
42373
+ enumerable: true,
42374
+ get: function () { return chunkS7B5E3RU_cjs.FILES_PREFS_KEY; }
42375
+ });
42376
+ Object.defineProperty(exports, "FileTooltipContent", {
42377
+ enumerable: true,
42378
+ get: function () { return chunkS7B5E3RU_cjs.FileTooltipContent; }
42379
+ });
42380
+ Object.defineProperty(exports, "RelatedDocumentsCell", {
42381
+ enumerable: true,
42382
+ get: function () { return chunkS7B5E3RU_cjs.RelatedDocumentsCell; }
42383
+ });
42384
+ Object.defineProperty(exports, "StatusCell", {
42385
+ enumerable: true,
42386
+ get: function () { return chunkS7B5E3RU_cjs.StatusCell; }
42387
+ });
42388
+ Object.defineProperty(exports, "UserAvatar", {
42389
+ enumerable: true,
42390
+ get: function () { return chunkS7B5E3RU_cjs.UserAvatar; }
42391
+ });
42392
+ Object.defineProperty(exports, "documentFieldContent", {
42393
+ enumerable: true,
42394
+ get: function () { return chunkS7B5E3RU_cjs.documentFieldContent; }
42395
+ });
42396
+ Object.defineProperty(exports, "filesViewMode", {
42397
+ enumerable: true,
42398
+ get: function () { return chunkS7B5E3RU_cjs.filesViewMode; }
42399
+ });
42400
+ Object.defineProperty(exports, "isActiveDocumentStatus", {
42401
+ enumerable: true,
42402
+ get: function () { return chunkS7B5E3RU_cjs.isActiveDocumentStatus; }
42403
+ });
42404
+ Object.defineProperty(exports, "openPendingSyncDialog", {
42405
+ enumerable: true,
42406
+ get: function () { return chunkS7B5E3RU_cjs.openPendingSyncDialog; }
42407
+ });
42408
+ Object.defineProperty(exports, "parseQuotaError", {
42409
+ enumerable: true,
42410
+ get: function () { return chunkS7B5E3RU_cjs.parseQuotaError; }
42411
+ });
42412
+ Object.defineProperty(exports, "startMenuItem", {
42413
+ enumerable: true,
42414
+ get: function () { return chunkS7B5E3RU_cjs.startMenuItem; }
42415
+ });
42416
+ Object.defineProperty(exports, "useAiReviewStore", {
42417
+ enumerable: true,
42418
+ get: function () { return chunkS7B5E3RU_cjs.useAiReviewStore; }
42419
+ });
42420
+ Object.defineProperty(exports, "useDocumentFolders", {
42421
+ enumerable: true,
42422
+ get: function () { return chunkS7B5E3RU_cjs.useDocumentFolders; }
42423
+ });
42424
+ Object.defineProperty(exports, "useFilesDialogs", {
42425
+ enumerable: true,
42426
+ get: function () { return chunkS7B5E3RU_cjs.useFilesDialogs; }
42427
+ });
42428
+ Object.defineProperty(exports, "useFilesGridStates", {
42429
+ enumerable: true,
42430
+ get: function () { return chunkS7B5E3RU_cjs.useFilesGridStates; }
42431
+ });
42432
+ Object.defineProperty(exports, "useFilesPrefs", {
42433
+ enumerable: true,
42434
+ get: function () { return chunkS7B5E3RU_cjs.useFilesPrefs; }
42435
+ });
42436
+ Object.defineProperty(exports, "useFilesStore", {
42437
+ enumerable: true,
42438
+ get: function () { return chunkS7B5E3RU_cjs.useFilesStore; }
42439
+ });
42440
+ Object.defineProperty(exports, "useMemberLookup", {
42441
+ enumerable: true,
42442
+ get: function () { return chunkS7B5E3RU_cjs.useMemberLookup; }
42443
+ });
42444
+ Object.defineProperty(exports, "usePendingFolders", {
42445
+ enumerable: true,
42446
+ get: function () { return chunkS7B5E3RU_cjs.usePendingFolders; }
42447
+ });
42448
+ Object.defineProperty(exports, "useResolvedDocStatus", {
42449
+ enumerable: true,
42450
+ get: function () { return chunkS7B5E3RU_cjs.useResolvedDocStatus; }
42451
+ });
43820
42452
  Object.defineProperty(exports, "ConnectedAssistantDock", {
43821
42453
  enumerable: true,
43822
42454
  get: function () { return chunkMBGV6JHG_cjs.ConnectedAssistantDock; }
@@ -44091,7 +42723,6 @@ exports.ConnectedNotificationPreferences = ConnectedNotificationPreferences;
44091
42723
  exports.ConnectedOAuthConsentPage = ConnectedOAuthConsentPage;
44092
42724
  exports.ConnectedPanelHost = ConnectedPanelHost;
44093
42725
  exports.ConnectedPasswordChangeDialog = ConnectedPasswordChangeDialog;
44094
- exports.ConnectedPendingSyncDialog = ConnectedPendingSyncDialog;
44095
42726
  exports.ConnectedPeopleMultiSelect = ConnectedPeopleMultiSelect;
44096
42727
  exports.ConnectedPremiumModels = ConnectedPremiumModels;
44097
42728
  exports.ConnectedPrivacySettings = ConnectedPrivacySettings;
@@ -44122,7 +42753,6 @@ exports.ConnectedSsoCallback = ConnectedSsoCallback;
44122
42753
  exports.ConnectedStorageProjectCard = ConnectedStorageProjectCard;
44123
42754
  exports.ConnectedStorageSettings = ConnectedStorageSettings;
44124
42755
  exports.ConnectedTagEditorDialog = ConnectedTagEditorDialog;
44125
- exports.ConnectedTagEntity = ConnectedTagEntity;
44126
42756
  exports.ConnectedTagForm = ConnectedTagForm;
44127
42757
  exports.ConnectedTagTable = ConnectedTagTable;
44128
42758
  exports.ConnectedTagsPage = ConnectedTagsPage;
@@ -44174,19 +42804,10 @@ exports.DEFAULT_SETTINGS_SECTIONS = DEFAULT_SETTINGS_SECTIONS;
44174
42804
  exports.DEFAULT_TIMELINE_LABEL_WIDTH = DEFAULT_TIMELINE_LABEL_WIDTH;
44175
42805
  exports.DEFAULT_WORKSPACE_LIST_LABELS = DEFAULT_WORKSPACE_LIST_LABELS;
44176
42806
  exports.DeveloperFooter = DeveloperFooter;
44177
- exports.DocumentFolderCell = DocumentFolderCell;
44178
- exports.DocumentLabelsCell = DocumentLabelsCell;
44179
- exports.DocumentNameCell = DocumentNameCell;
44180
- exports.DocumentSharedCell = DocumentSharedCell;
44181
- exports.DocumentStatusGlyph = DocumentStatusGlyph;
44182
- exports.DocumentSyncGlyph = DocumentSyncGlyph;
44183
- exports.DocumentUser = DocumentUser;
44184
42807
  exports.DocumentsFilterBarActions = DocumentsFilterBarActions;
44185
42808
  exports.DocumentsUploadButton = DocumentsUploadButton;
44186
42809
  exports.EmptyWorkspaceUpload = EmptyWorkspaceUpload;
44187
42810
  exports.FACTS_GRID_ID = FACTS_GRID_ID;
44188
- exports.FILES_PREFS_KEY = FILES_PREFS_KEY;
44189
- exports.FileTooltipContent = FileTooltipContent;
44190
42811
  exports.ImportVcfButton = ImportVcfButton;
44191
42812
  exports.ImportVcfSummary = ImportVcfSummary;
44192
42813
  exports.InvoicesModal = InvoicesModal;
@@ -44210,7 +42831,6 @@ exports.ProjectUsageContent = ProjectUsageContent;
44210
42831
  exports.ProjectsTable = ProjectsTable;
44211
42832
  exports.REFERRAL_OFFER = REFERRAL_OFFER;
44212
42833
  exports.RecoveryKeyDownload = RecoveryKeyDownload;
44213
- exports.RelatedDocumentsCell = RelatedDocumentsCell;
44214
42834
  exports.ReportProblemDialog = ReportProblemDialog;
44215
42835
  exports.RunStatsBadges = RunStatsBadges;
44216
42836
  exports.RunningSubagents = RunningSubagents;
@@ -44221,7 +42841,6 @@ exports.SessionStatusIcon = SessionStatusIcon;
44221
42841
  exports.SharedProjects = SharedProjects;
44222
42842
  exports.SourceChips = SourceChips;
44223
42843
  exports.SsoResendVerificationButton = SsoResendVerificationButton;
44224
- exports.StatusCell = StatusCell2;
44225
42844
  exports.StorageBreakdown = StorageBreakdown;
44226
42845
  exports.StorageItemsTable = StorageItemsTable;
44227
42846
  exports.StorageTiers = StorageTiers;
@@ -44230,7 +42849,6 @@ exports.TILE_DEFAULT = TILE_DEFAULT;
44230
42849
  exports.TILE_MAX = TILE_MAX;
44231
42850
  exports.TILE_MIN = TILE_MIN;
44232
42851
  exports.ThreadSwitcher = ThreadSwitcher;
44233
- exports.UserAvatar = UserAvatar;
44234
42852
  exports.ViewSelector = ViewSelector;
44235
42853
  exports.WORKSPACES_TAB_ID = WORKSPACES_TAB_ID;
44236
42854
  exports.WorkflowLaunchHost = WorkflowLaunchHost;
@@ -44257,23 +42875,18 @@ exports.defaultHost = defaultHost;
44257
42875
  exports.describePlan = describePlan;
44258
42876
  exports.distinctPeers = distinctPeers;
44259
42877
  exports.documentFamilyMeta = documentFamilyMeta;
44260
- exports.documentFieldContent = documentFieldContent;
44261
- exports.filesViewMode = filesViewMode;
44262
42878
  exports.filterNotificationCenterItems = filterNotificationCenterItems;
44263
42879
  exports.formatStorageGb = formatStorageGb;
44264
42880
  exports.groupFallbackName = groupFallbackName;
44265
42881
  exports.identifyOAuthClient = identifyOAuthClient;
44266
- exports.isActiveDocumentStatus = isActiveDocumentStatus;
44267
42882
  exports.joinEventMeeting = joinEventMeeting;
44268
42883
  exports.loadEventWebinar = loadEventWebinar;
44269
42884
  exports.mailSettingsSection = mailSettingsSection;
44270
42885
  exports.openMeetingLink = openMeetingLink;
44271
- exports.openPendingSyncDialog = openPendingSyncDialog;
44272
42886
  exports.openSsoPopup = openSsoPopup;
44273
42887
  exports.organisationSettingsSection = organisationSettingsSection;
44274
42888
  exports.parseArbiCallUrl = parseArbiCallUrl;
44275
42889
  exports.parseOAuthConsentRequest = parseOAuthConsentRequest;
44276
- exports.parseQuotaError = parseQuotaError;
44277
42890
  exports.parseTypedSkill = parseTypedSkill;
44278
42891
  exports.primaryProjectWorkspace = primaryProjectWorkspace;
44279
42892
  exports.privacySettingsSection = privacySettingsSection;
@@ -44290,7 +42903,6 @@ exports.resolveSsoName = resolveSsoName;
44290
42903
  exports.reviewAccessRequest = reviewAccessRequest;
44291
42904
  exports.reviewProgress = reviewProgress;
44292
42905
  exports.shareEventCall = shareEventCall;
44293
- exports.startMenuItem = startMenuItem;
44294
42906
  exports.storageSettingsSection = storageSettingsSection;
44295
42907
  exports.suppliedKinds = suppliedKinds;
44296
42908
  exports.threadStateOf = threadStateOf;
@@ -44301,7 +42913,6 @@ exports.usageSettingsSection = usageSettingsSection;
44301
42913
  exports.useAccessRequestUnderReview = useAccessRequestUnderReview;
44302
42914
  exports.useAddFromUrls = useAddFromUrls;
44303
42915
  exports.useAiReviewLiveUpdates = useAiReviewLiveUpdates;
44304
- exports.useAiReviewStore = useAiReviewStore;
44305
42916
  exports.useAppShell = useAppShell;
44306
42917
  exports.useAuthPages = useAuthPages;
44307
42918
  exports.useAutoRefreshPendingProjects = useAutoRefreshPendingProjects;
@@ -44317,18 +42928,12 @@ exports.useConnectedWorkspaceSettings = useConnectedWorkspaceSettings;
44317
42928
  exports.useContextualHints = useContextualHints;
44318
42929
  exports.useDocumentBulkActions = useDocumentBulkActions;
44319
42930
  exports.useDocumentFilters = useDocumentFilters;
44320
- exports.useDocumentFolders = useDocumentFolders;
44321
42931
  exports.useDocumentGridSync = useDocumentGridSync;
44322
42932
  exports.useDocumentNavigation = useDocumentNavigation;
44323
42933
  exports.useDocumentTable = useDocumentTable;
44324
42934
  exports.useExportStore = useExportStore;
44325
- exports.useFilesDialogs = useFilesDialogs;
44326
- exports.useFilesGridStates = useFilesGridStates;
44327
- exports.useFilesPrefs = useFilesPrefs;
44328
- exports.useFilesStore = useFilesStore;
44329
42935
  exports.useHasAccountsImport = useHasAccountsImport;
44330
42936
  exports.useLaunchWorkflow = useLaunchWorkflow;
44331
- exports.useMemberLookup = useMemberLookup;
44332
42937
  exports.useMessengerRows = useMessengerRows;
44333
42938
  exports.useModelPicker = useModelPicker;
44334
42939
  exports.useNotificationBellEntry = useNotificationBellEntry;
@@ -44338,7 +42943,6 @@ exports.useOpenChunk = useOpenChunk;
44338
42943
  exports.useOpenNotificationTarget = useOpenNotificationTarget;
44339
42944
  exports.useOpenWorkspaceActivityTarget = useOpenWorkspaceActivityTarget;
44340
42945
  exports.useOpenWorkspaceIcon = useOpenWorkspaceIcon;
44341
- exports.usePendingFolders = usePendingFolders;
44342
42946
  exports.usePendingTaskThread = usePendingTaskThread;
44343
42947
  exports.useProjectBillingFocus = useProjectBillingFocus;
44344
42948
  exports.useProjectSummaries = useProjectSummaries;
@@ -44346,7 +42950,6 @@ exports.useProjectSummary = useProjectSummary;
44346
42950
  exports.useReferralReward = useReferralReward;
44347
42951
  exports.useRenderTaskPerson = useRenderTaskPerson;
44348
42952
  exports.useReportProblem = useReportProblem;
44349
- exports.useResolvedDocStatus = useResolvedDocStatus;
44350
42953
  exports.useSessionPanelMode = useSessionPanelMode;
44351
42954
  exports.useSessionSidebar = useSessionSidebar;
44352
42955
  exports.useSkillsEnabled = useSkillsEnabled;