@arbidocs/blocks 0.5.118 → 0.5.120

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 (145) hide show
  1. package/dist/{ConnectedCallDock-E7RMQMMT.cjs → ConnectedCallDock-WER7R222.cjs} +12 -12
  2. package/dist/{ConnectedCallDock-E7RMQMMT.cjs.map → ConnectedCallDock-WER7R222.cjs.map} +1 -1
  3. package/dist/{ConnectedCallRoom-FF7X6LQ2.cjs → ConnectedCallRoom-T7OBQTYP.cjs} +12 -12
  4. package/dist/{ConnectedCallRoom-FF7X6LQ2.cjs.map → ConnectedCallRoom-T7OBQTYP.cjs.map} +1 -1
  5. package/dist/{ConnectedNativeDocxComparison-PB2LXT5U.cjs → ConnectedNativeDocxComparison-SGE4R3M4.cjs} +11 -11
  6. package/dist/{ConnectedNativeDocxComparison-PB2LXT5U.cjs.map → ConnectedNativeDocxComparison-SGE4R3M4.cjs.map} +1 -1
  7. package/dist/{ConnectedStreamedWordArtifact-S7ICDK5T.cjs → ConnectedStreamedWordArtifact-6MCLJRIT.cjs} +11 -11
  8. package/dist/{ConnectedStreamedWordArtifact-S7ICDK5T.cjs.map → ConnectedStreamedWordArtifact-6MCLJRIT.cjs.map} +1 -1
  9. package/dist/{DocumentReviewCard-L472OMQS.cjs → DocumentReviewCard-BPIAJJED.cjs} +17 -17
  10. package/dist/{DocumentReviewCard-L472OMQS.cjs.map → DocumentReviewCard-BPIAJJED.cjs.map} +1 -1
  11. package/dist/{FilesViewerDialog-JK25HKKF.cjs → FilesViewerDialog-67WK3TZC.cjs} +26 -26
  12. package/dist/{FilesViewerDialog-JK25HKKF.cjs.map → FilesViewerDialog-67WK3TZC.cjs.map} +1 -1
  13. package/dist/{WorkspaceTableView-JCTDEMIL.cjs → WorkspaceTableView-J3C6VH4T.cjs} +8 -8
  14. package/dist/{WorkspaceTableView-JCTDEMIL.cjs.map → WorkspaceTableView-J3C6VH4T.cjs.map} +1 -1
  15. package/dist/agents/index.cjs +187 -187
  16. package/dist/agents/tasks/ConversationListView.js +10 -2
  17. package/dist/agents/tasks/ConversationListView.js.map +2 -2
  18. package/dist/agents/tasks/TaskTable.js +5 -4
  19. package/dist/agents/tasks/TaskTable.js.map +2 -2
  20. package/dist/agents/tasks/WorkflowsTable.js +4 -5
  21. package/dist/agents/tasks/WorkflowsTable.js.map +2 -2
  22. package/dist/agents/tasks/taskColumns.js +1 -1
  23. package/dist/agents/tasks/taskColumns.js.map +1 -1
  24. package/dist/agents/tasks/taskTableLabels.js +1 -1
  25. package/dist/agents/tasks/taskTableLabels.js.map +1 -1
  26. package/dist/agents/tasks/workflowTableLabels.js +1 -1
  27. package/dist/agents/tasks/workflowTableLabels.js.map +1 -1
  28. package/dist/{ai-OBS67QV4.cjs → ai-IM4A23YT.cjs} +16 -16
  29. package/dist/ai-IM4A23YT.cjs.map +1 -0
  30. package/dist/calls/index.cjs +2 -2
  31. package/dist/{chunk-P77YTTJ3.cjs → chunk-3GWWOYGS.cjs} +4 -4
  32. package/dist/{chunk-P77YTTJ3.cjs.map → chunk-3GWWOYGS.cjs.map} +1 -1
  33. package/dist/{chunk-QOXK5O6M.cjs → chunk-557MJ4IH.cjs} +12 -12
  34. package/dist/{chunk-QOXK5O6M.cjs.map → chunk-557MJ4IH.cjs.map} +1 -1
  35. package/dist/{chunk-YDPLSXHB.cjs → chunk-5IZFSAEZ.cjs} +4 -4
  36. package/dist/{chunk-YDPLSXHB.cjs.map → chunk-5IZFSAEZ.cjs.map} +1 -1
  37. package/dist/{chunk-JSQQV23D.cjs → chunk-6UTKM5AB.cjs} +3 -3
  38. package/dist/{chunk-JSQQV23D.cjs.map → chunk-6UTKM5AB.cjs.map} +1 -1
  39. package/dist/{chunk-PVPRVI54.cjs → chunk-775S43W7.cjs} +21 -12
  40. package/dist/chunk-775S43W7.cjs.map +1 -0
  41. package/dist/{chunk-3LNUQYAF.cjs → chunk-B3LZITVF.cjs} +3 -3
  42. package/dist/{chunk-3LNUQYAF.cjs.map → chunk-B3LZITVF.cjs.map} +1 -1
  43. package/dist/{chunk-SUYPXUE6.cjs → chunk-BP3IJ34D.cjs} +6 -6
  44. package/dist/{chunk-SUYPXUE6.cjs.map → chunk-BP3IJ34D.cjs.map} +1 -1
  45. package/dist/{chunk-TT4IF52H.cjs → chunk-BUVIBHFU.cjs} +37 -38
  46. package/dist/chunk-BUVIBHFU.cjs.map +1 -0
  47. package/dist/{chunk-OPH4UZQN.cjs → chunk-CKCG4NDB.cjs} +33 -33
  48. package/dist/{chunk-OPH4UZQN.cjs.map → chunk-CKCG4NDB.cjs.map} +1 -1
  49. package/dist/{chunk-7IPIKMCY.cjs → chunk-CPR6EHG7.cjs} +3 -3
  50. package/dist/{chunk-7IPIKMCY.cjs.map → chunk-CPR6EHG7.cjs.map} +1 -1
  51. package/dist/{chunk-YGXOKB5Z.cjs → chunk-DFBDQKGE.cjs} +4 -4
  52. package/dist/{chunk-YGXOKB5Z.cjs.map → chunk-DFBDQKGE.cjs.map} +1 -1
  53. package/dist/{chunk-K6AUKKUN.cjs → chunk-ECLUFKYR.cjs} +6 -6
  54. package/dist/{chunk-K6AUKKUN.cjs.map → chunk-ECLUFKYR.cjs.map} +1 -1
  55. package/dist/{chunk-CPG7II4E.cjs → chunk-HA66DHW6.cjs} +28 -28
  56. package/dist/{chunk-CPG7II4E.cjs.map → chunk-HA66DHW6.cjs.map} +1 -1
  57. package/dist/{chunk-P2MOLUFO.cjs → chunk-KTQOGT2L.cjs} +6 -6
  58. package/dist/{chunk-P2MOLUFO.cjs.map → chunk-KTQOGT2L.cjs.map} +1 -1
  59. package/dist/{chunk-57NHXEU2.cjs → chunk-MXBXZXXQ.cjs} +5 -5
  60. package/dist/{chunk-57NHXEU2.cjs.map → chunk-MXBXZXXQ.cjs.map} +1 -1
  61. package/dist/{chunk-L6APDO3Y.cjs → chunk-NJCK6V6U.cjs} +3 -3
  62. package/dist/{chunk-L6APDO3Y.cjs.map → chunk-NJCK6V6U.cjs.map} +1 -1
  63. package/dist/{chunk-NNUK5ZM7.cjs → chunk-NLSWDP42.cjs} +9 -17
  64. package/dist/chunk-NLSWDP42.cjs.map +1 -0
  65. package/dist/{chunk-ZCIQBHH5.cjs → chunk-Q6CLWOP2.cjs} +36 -36
  66. package/dist/{chunk-ZCIQBHH5.cjs.map → chunk-Q6CLWOP2.cjs.map} +1 -1
  67. package/dist/{chunk-XZYIS2JZ.cjs → chunk-QQWHG3KF.cjs} +6 -7
  68. package/dist/chunk-QQWHG3KF.cjs.map +1 -0
  69. package/dist/{chunk-KHAO7ZTO.cjs → chunk-T23UTIRI.cjs} +5 -5
  70. package/dist/{chunk-KHAO7ZTO.cjs.map → chunk-T23UTIRI.cjs.map} +1 -1
  71. package/dist/{chunk-O4F77VSO.cjs → chunk-TDO5UWXF.cjs} +5 -5
  72. package/dist/{chunk-O4F77VSO.cjs.map → chunk-TDO5UWXF.cjs.map} +1 -1
  73. package/dist/{chunk-VLCY46K6.cjs → chunk-TG2GM7WJ.cjs} +4 -3
  74. package/dist/chunk-TG2GM7WJ.cjs.map +1 -0
  75. package/dist/{chunk-5XAJ4N2S.cjs → chunk-VZCPMXWC.cjs} +4 -4
  76. package/dist/{chunk-5XAJ4N2S.cjs.map → chunk-VZCPMXWC.cjs.map} +1 -1
  77. package/dist/{chunk-MMVDVHKE.cjs → chunk-W6INT5GS.cjs} +5 -5
  78. package/dist/{chunk-MMVDVHKE.cjs.map → chunk-W6INT5GS.cjs.map} +1 -1
  79. package/dist/{chunk-ZPPMAL5P.cjs → chunk-WQMR3O2D.cjs} +6 -10
  80. package/dist/chunk-WQMR3O2D.cjs.map +1 -0
  81. package/dist/{chunk-CB3YYZAU.cjs → chunk-X36UR4A7.cjs} +175 -58
  82. package/dist/chunk-X36UR4A7.cjs.map +1 -0
  83. package/dist/{chunk-6ULADDBW.cjs → chunk-YYSBWMDJ.cjs} +4 -4
  84. package/dist/{chunk-6ULADDBW.cjs.map → chunk-YYSBWMDJ.cjs.map} +1 -1
  85. package/dist/collaboration/index.cjs +3 -3
  86. package/dist/collaboration/sharing/ShareControl.js +10 -2
  87. package/dist/collaboration/sharing/ShareControl.js.map +2 -2
  88. package/dist/components/SharedCell.d.ts +2 -4
  89. package/dist/components/SharedCell.js +4 -8
  90. package/dist/components/SharedCell.js.map +2 -2
  91. package/dist/connect/docx.cjs +14 -14
  92. package/dist/connect/index.cjs +965 -937
  93. package/dist/connect/index.cjs.map +1 -1
  94. package/dist/connect/viewer.cjs +16 -16
  95. package/dist/connection/facts/factPageColumns.js +3 -9
  96. package/dist/connection/facts/factPageColumns.js.map +2 -2
  97. package/dist/connection/files/grid/cells.js +1 -3
  98. package/dist/connection/files/grid/cells.js.map +2 -2
  99. package/dist/connection/files/grid/documentColumns.js +3 -2
  100. package/dist/connection/files/grid/documentColumns.js.map +2 -2
  101. package/dist/connection/sharing/WorkspaceMembersList.d.ts +4 -0
  102. package/dist/connection/sharing/WorkspaceMembersList.js +34 -0
  103. package/dist/connection/sharing/WorkspaceMembersList.js.map +7 -0
  104. package/dist/connection/shell/ConnectedAppShell.js +4 -0
  105. package/dist/connection/shell/ConnectedAppShell.js.map +2 -2
  106. package/dist/connection/viewer/ConnectedDocumentViewer.js +3 -2
  107. package/dist/connection/viewer/ConnectedDocumentViewer.js.map +2 -2
  108. package/dist/connection/viewer/ViewerPdfPane.js +20 -2
  109. package/dist/connection/viewer/ViewerPdfPane.js.map +2 -2
  110. package/dist/connection/viewer/pdf/PdfPassageHighlights.d.ts +12 -0
  111. package/dist/connection/viewer/pdf/PdfPassageHighlights.js +36 -0
  112. package/dist/connection/viewer/pdf/PdfPassageHighlights.js.map +7 -0
  113. package/dist/connection/viewer/pdf/passageHighlights.d.ts +26 -0
  114. package/dist/connection/viewer/pdf/passageHighlights.js +40 -0
  115. package/dist/connection/viewer/pdf/passageHighlights.js.map +7 -0
  116. package/dist/connection/viewer/pdf/usePdfPassageHighlights.d.ts +9 -0
  117. package/dist/connection/viewer/pdf/usePdfPassageHighlights.js +47 -0
  118. package/dist/connection/viewer/pdf/usePdfPassageHighlights.js.map +7 -0
  119. package/dist/connection/workflows/workflowsPageLabels.js +1 -1
  120. package/dist/connection/workflows/workflowsPageLabels.js.map +1 -1
  121. package/dist/dashboards/index.cjs +1 -1
  122. package/dist/embed/index.cjs +26 -26
  123. package/dist/facts/factColumns.js +3 -3
  124. package/dist/facts/factColumns.js.map +1 -1
  125. package/dist/facts/index.cjs +42 -42
  126. package/dist/files/HtmlViewerParts.js +7 -15
  127. package/dist/files/HtmlViewerParts.js.map +2 -2
  128. package/dist/files/index.cjs +223 -223
  129. package/dist/index.cjs +321 -321
  130. package/dist/settings/index.cjs +147 -147
  131. package/dist/shell/index.cjs +35 -35
  132. package/dist/studio/index.cjs +8 -8
  133. package/dist/styles.css +1 -1
  134. package/dist/workflow-canvas/index.cjs +36 -36
  135. package/dist/workflow-canvas/index.cjs.map +1 -1
  136. package/node_modules/@arbidocs/coedit/package.json +1 -1
  137. package/package.json +5 -5
  138. package/dist/ai-OBS67QV4.cjs.map +0 -1
  139. package/dist/chunk-CB3YYZAU.cjs.map +0 -1
  140. package/dist/chunk-NNUK5ZM7.cjs.map +0 -1
  141. package/dist/chunk-PVPRVI54.cjs.map +0 -1
  142. package/dist/chunk-TT4IF52H.cjs.map +0 -1
  143. package/dist/chunk-VLCY46K6.cjs.map +0 -1
  144. package/dist/chunk-XZYIS2JZ.cjs.map +0 -1
  145. package/dist/chunk-ZPPMAL5P.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/connection/files/DocumentSyncGlyph.tsx","../src/connection/files/explorer/FileTiles.tsx","../src/connection/offline/ConnectedPendingSyncDialog.tsx","../src/connection/files/grid/documentStatus.tsx","../src/connection/files/grid/cells.tsx"],"names":["useOfflineDocumentIds","jsx","cn","ArrowDownToLine","IN_FLIGHT_DOCUMENT_STATUSES","FINISHED_DOCUMENT_STATUSES","resolveDocumentStatus","useProcessingTask","CheckCircle","FailedStageIcon","SkipForward","FileX","AlertTriangle","StatusPill","VisibilityIcon","getEntityLabel","visibilityAudience","jsxs","Avatar","AvatarImage","getUserDisplayName","AvatarFallback","getUserAvatarColor","ExplorerFileTooltip","getDocumentTitle","getDocumentSubject","formatFriendlyDate","Sparkles","Play","memo","FileTile","useDraggable","useBlocksEnvironment","useOpenViewerDocumentId","getFileTypeIcon","useMailPolicy","SquarePen","BookOpen","MessagesSquare","Pencil","Download","Mail","FolderInput","Trash2","ExplorerFileTile","DocumentEntity","FolderTile","useDroppable","useProcessingTasks","useMemo","formatFolderSegment","hasFolderProviderIcon","FolderProviderIcon","ExplorerFolderTile","create","useIsOnline","usePendingSyncItems","useCancelManyPendingSync","useState","formatRelativeTime","Dialog","DialogContent","DialogHeader","DialogTitle","RefreshCw","WifiOff","DialogDescription","ModalSection","CircleCheck","GridView","DialogFooter","Button","RotateCcw","useDocumentPendingSync","Clock","Loader2","Zap","DocumentStatusGlyph","StatusCell","UserAvatar","UserEntity","isAgent","getUserInitials","agentAvatarColors","useTags","DocumentNameCell","useArbi","useRef","useEffect","fetchMarkupPdf","downloadBlob","DocumentNameCellFrame","formatFolderLabel","DocumentRowMenu","currentHasMarkup","isSignedVersion","SIGNED_LOCKED_REASON","DocumentSharedCell","useCallback","SharedCell","visibilityToggleTooltip","DocumentFolderCell","FolderCell","FolderCommandList","RelatedDocumentsCell","RelatedDocsCell","Eye","DocumentLabelsCell","useIsCreatingTag","getEntityColor","LabelMultiSelectView"],"mappings":"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","file":"chunk-TT4IF52H.cjs","sourcesContent":["/**\n * DocumentSyncGlyph\n *\n * Marks a document that's saved on THIS device for offline use — the\n * OneDrive/Drive \"available offline\" convention: a small badge on the file icon.\n * A down-arrow-to-line (the universal \"downloaded / saved locally\" glyph) so it\n * reads instantly as \"kept on my device\" — clearer than a hard-drive icon and\n * never confused with the \"ready\" checkmark. A neutral grey badge: ambient\n * metadata, not a status to draw the eye (the document \"ready\" status owns the\n * coloured cyan/navy treatment).\n *\n * Pending offline edits are shown separately, as a \"changes pending\" document\n * status in the Status column — not here — so the file icon stays quiet and only\n * the genuinely-useful \"you can open this offline\" signal lives on it.\n *\n * Self-subscribing to the offline set so it updates even inside a memoized grid\n * cell. Renders nothing for cloud-only docs (the common case).\n */\n\nimport { ArrowDownToLine } from 'lucide-react'\nimport { useOfflineDocumentIds } from '@arbidocs/react'\nimport { cn } from '@arbidocs/react/ui'\n\ninterface DocumentSyncGlyphProps {\n docExtId: string\n size?: number\n className?: string\n /** Badge fill — neutral grey by default; pass e.g. `bg-green-600` for a\n * prominent \"downloaded\" badge. */\n bgClassName?: string\n}\n\nexport function DocumentSyncGlyph({\n docExtId,\n size = 13,\n className,\n bgClassName = 'bg-muted-foreground',\n}: DocumentSyncGlyphProps) {\n const isAvailableOffline = useOfflineDocumentIds().has(docExtId)\n if (!isAvailableOffline) return null\n\n return (\n <span\n title=\"Available offline (saved on this device)\"\n aria-label=\"Available offline\"\n data-testid={`offline-available-badge-${docExtId}`}\n className={cn(\n 'inline-flex items-center justify-center rounded-full text-white ring-1 ring-white',\n bgClassName,\n className\n )}\n style={{ width: size, height: size }}\n >\n <ArrowDownToLine size={Math.round(size * 0.7)} strokeWidth={2.75} />\n </span>\n )\n}\n","/**\n * The explorer's one tile binding. The presentation (`ExplorerFileTile`, `ExplorerFolderTile`,\n * `ExplorerFileTooltip`) is in `files/`; this binds it to the session: @dnd-kit draggable and\n * droppable, the document's live processing status, the copies kept offline, the open viewer, the\n * document pill, the mail handoff and the member / label lookups. `FileTile` is a draggable\n * document, `FolderTile` a droppable folder (separate components so the dnd hooks always run).\n */\n\nimport { memo, useMemo, type ReactNode } from 'react'\nimport { useDraggable, useDroppable } from '@dnd-kit/core'\nimport {\n AlertTriangle,\n BookOpen,\n CheckCircle,\n Download,\n FileX,\n FolderInput,\n Mail,\n MessagesSquare,\n Pencil,\n Play,\n SkipForward,\n Sparkles,\n SquarePen,\n Trash2,\n} from 'lucide-react'\nimport {\n FINISHED_DOCUMENT_STATUSES,\n IN_FLIGHT_DOCUMENT_STATUSES,\n resolveDocumentStatus,\n useMailPolicy,\n useOfflineDocumentIds,\n useOpenViewerDocumentId,\n useProcessingTask,\n useProcessingTasks,\n type DocumentHostActions,\n type DocumentStartItem,\n type WorkspaceDocument,\n} from '@arbidocs/react'\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n DocumentEntity,\n VisibilityIcon,\n cn,\n formatFriendlyDate,\n getEntityLabel,\n getDocumentTitle,\n getFileTypeIcon,\n getUserAvatarColor,\n getUserDisplayName,\n getUserInitials,\n getDocumentSubject,\n} from '@arbidocs/react/ui'\nimport {\n ExplorerFileTile,\n ExplorerFileTooltip,\n ExplorerFolderTile,\n type ExplorerDensity,\n type ExplorerMenuItem,\n} from '../../../files/ExplorerTile'\nimport { StatusPill, type StatusTone } from '../../../files/StatusPill'\nimport { FailedStageIcon } from '../../../files/FailedStageIcon'\nimport { visibilityAudience } from '../../../files/visibility'\nimport {\n FolderProviderIcon,\n formatFolderSegment,\n hasFolderProviderIcon,\n type ExplorerFolder,\n} from '../../../files/folders'\nimport { useBlocksEnvironment } from '../../../provider/environment'\nimport { DocumentSyncGlyph } from '../DocumentSyncGlyph'\n\nexport type { ExplorerDensity }\n\n/** A workspace member as a tile shows them (avatar and name). */\nexport interface FileTileUser {\n external_id: string\n given_name: string\n family_name?: string | null\n email: string\n picture?: string | null\n}\n\n/** A document row as the tiles read it (the session's rows carry these). */\nexport type FileTileDocument = WorkspaceDocument & {\n failed_stage?: string | null\n}\n\nconst NO_ACTIONS: DocumentHostActions = {}\n\n// In-flight processing statuses (the table's status cell has the same) and the terminal ones.\nconst ACTIVE_STATUSES = IN_FLIGHT_DOCUMENT_STATUSES\nconst TERMINAL_STATUSES = FINISHED_DOCUMENT_STATUSES\nconst STATUS_LABEL: Record<string, string> = {\n uploading: 'Uploading',\n queued: 'Queued',\n parsing: 'Parsing',\n encrypting: 'Encrypting',\n indexing: 'Indexing',\n analysing: 'Analysing',\n}\n\n/** Whether a status is still being worked on. */\nexport function isActiveDocumentStatus(status: string): boolean {\n return ACTIVE_STATUSES.has(status.toLowerCase())\n}\n\n/**\n * The document's effective status: the newer of its row and its live processing\n * (`resolveDocumentStatus`). Reads only this document's live processing, so a tile re-renders only\n * when its own status changes.\n */\nfunction useDocStatus(doc: FileTileDocument): string {\n return resolveDocumentStatus(doc, useProcessingTask(doc.external_id))\n}\n\n/** The finished-state marker in the tile's lower-right corner (in-flight files use the overlay). */\nfunction TileStatusBadge({ doc, status }: { doc: FileTileDocument; status: string }): ReactNode {\n let tone: StatusTone = 'neutral'\n let icon: ReactNode = null\n let title = ''\n switch (status) {\n case 'completed':\n tone = 'success'\n icon = <CheckCircle className=\"size-4 text-green-text\" strokeWidth={2.75} />\n title = 'Ready'\n break\n case 'failed':\n tone = 'danger'\n icon = (\n <FailedStageIcon\n stage={doc.failed_stage ?? null}\n errorMessage={doc.error_message}\n className=\"size-4 text-red-text\"\n />\n )\n title = 'Failed'\n break\n case 'skipped':\n icon = <SkipForward className=\"size-4 text-muted-foreground\" strokeWidth={2.75} />\n title = 'Skipped'\n break\n case 'empty':\n tone = 'warning'\n icon = <FileX className=\"size-4 text-yellow-text\" strokeWidth={2.75} />\n title = 'Empty — no extractable content'\n break\n case 'low-content':\n tone = 'warning'\n icon = <AlertTriangle className=\"size-4 text-yellow-text\" strokeWidth={2.75} />\n title = 'Low content — minimal extractable content'\n break\n default:\n return null\n }\n return (\n <StatusPill\n tone={tone}\n icon={icon}\n title={title}\n testId={`explorer-file-status-${doc.external_id}`}\n />\n )\n}\n\n/**\n * Who can see the file, printed on the tile itself: a bare \"Shared\" does not say with whom, and a\n * hover title never reaches touch and keyboard users. The label is the audience's short name so it\n * fits beside the status check on narrow tiles; the title keeps the full sentence.\n */\nfunction TileVisibilityBadge({ doc }: { doc: FileTileDocument }): ReactNode {\n const shared = !!doc.shared\n return (\n <StatusPill\n icon={<VisibilityIcon isShared={shared} className=\"size-3.5\" aria-hidden />}\n label={shared ? getEntityLabel('WORKSPACE') : 'Only you'}\n title={visibilityAudience(shared)}\n testId={`explorer-file-visibility-${doc.external_id}`}\n />\n )\n}\n\n/** A tiny avatar (initials, or the picture when set) for the \"last modified by\" line. */\nfunction MiniUserAvatar({ user }: { user: FileTileUser }) {\n return (\n <Avatar className=\"h-4 w-4 border border-white\">\n {user.picture && <AvatarImage src={user.picture} alt={getUserDisplayName(user)} />}\n <AvatarFallback\n className={cn(\n 'text-xs font-semibold leading-none text-white',\n getUserAvatarColor(user.external_id)\n )}\n >\n {getUserInitials(user)}\n </AvatarFallback>\n </Avatar>\n )\n}\n\n/** The hover card of a document: the same in the explorer tiles and the table's name cell. */\nexport function FileTooltipContent({\n doc,\n modifiedBy,\n tagNameById,\n}: {\n doc: FileTileDocument\n modifiedBy?: FileTileUser\n tagNameById: ReadonlyMap<string, string>\n}) {\n const labels = (doc.doctags ?? [])\n .map((dt) => tagNameById.get(dt.tag_ext_id))\n .filter((name): name is string => !!name)\n return (\n <ExplorerFileTooltip\n title={getDocumentTitle(doc, doc.file_name ?? '')}\n summary={getDocumentSubject(doc)}\n modifiedLabel={doc.updated_at ? formatFriendlyDate(doc.updated_at, false) : null}\n modifiedByAvatar={modifiedBy && <MiniUserAvatar user={modifiedBy} />}\n shared={!!doc.shared}\n visibilityIcon={<VisibilityIcon isShared={!!doc.shared} className=\"h-3 w-3\" />}\n labels={labels}\n uiLabels={{ shared: visibilityAudience(true), private: visibilityAudience(false) }}\n />\n )\n}\n\n/** The \"Start…\" submenu: one entry per thing the host can start on the file or folder. */\nexport function startMenuItem(items: readonly DocumentStartItem[]): ExplorerMenuItem[] {\n if (items.length === 0) return []\n return [\n {\n id: 'start',\n label: 'Start…',\n icon: Sparkles,\n testId: 'explorer-start-menu',\n onSelect: () => {},\n submenu: items.map((item) => ({\n id: item.id,\n label: item.title,\n icon: Play,\n onSelect: item.run,\n testId: `explorer-start-${item.id}`,\n })),\n },\n ]\n}\n\ninterface FileTileProps {\n doc: FileTileDocument\n density: ExplorerDensity\n selected: boolean\n /** Part of an in-flight drag (dimmed). */\n dragging: boolean\n /** Any tile is being dragged: no hover card, so it cannot swallow the moves dnd-kit tracks. */\n dndActive: boolean\n /** Being renamed inline. */\n renaming: boolean\n /** The viewer may delete this document. */\n canDelete: boolean\n /** The first-page thumbnail (absent: the file-type icon). */\n thumbnailUrl?: string\n /** Who last changed the document (the hover card's avatar line). */\n modifiedBy?: FileTileUser\n /** Label id → name, for the document's labels on the hover card. */\n tagNameById: ReadonlyMap<string, string>\n onSelect: (doc: FileTileDocument, e: React.MouseEvent) => void\n onToggle: (doc: FileTileDocument, e: React.MouseEvent) => void\n onOpen: (doc: FileTileDocument) => void\n /** Open the document in the review view. Absent: not offered. */\n onReview?: (doc: FileTileDocument) => void\n onStartRename: (doc: FileTileDocument) => void\n onCommitRename: (doc: FileTileDocument, name: string) => void\n onCancelRename: () => void\n onDownload: (doc: FileTileDocument) => void\n onMove?: (doc: FileTileDocument) => void\n onDelete: (doc: FileTileDocument) => void\n /** The host's actions on documents (read once by the view). */\n actions?: DocumentHostActions\n}\n\nexport const FileTile = memo(function FileTile({\n doc,\n density,\n selected,\n dragging,\n dndActive,\n renaming,\n canDelete,\n thumbnailUrl,\n modifiedBy,\n tagNameById,\n onSelect,\n onToggle,\n onOpen,\n onReview,\n onStartRename,\n onCommitRename,\n onCancelRename,\n onDownload,\n onMove,\n onDelete,\n actions = NO_ACTIONS,\n}: FileTileProps) {\n const { attributes, listeners, setNodeRef } = useDraggable({\n id: `doc:${doc.external_id}`,\n data: { type: 'doc', docId: doc.external_id },\n })\n const { notify } = useBlocksEnvironment()\n const { startItemsForFile, openDocumentChat, emailDocument } = actions\n const status = useDocStatus(doc)\n const isProcessing = ACTIVE_STATUSES.has(status)\n const isOffline = useOfflineDocumentIds().has(doc.external_id)\n const isViewing = useOpenViewerDocumentId() === doc.external_id\n const showStatusMarker = !isProcessing && TERMINAL_STATUSES.has(status)\n const Icon = getFileTypeIcon(doc.file_name, { mime: doc.file_type })\n const { data: mailPolicy } = useMailPolicy()\n\n const shareAsEmail = async () => {\n try {\n await emailDocument?.(doc)\n } catch (error) {\n notify(error instanceof Error ? error.message : 'Could not attach document', 'error')\n }\n }\n const startItems = startItemsForFile?.(doc)\n const menuItems: ExplorerMenuItem[] = [\n { id: 'open', label: 'Open', icon: SquarePen, onSelect: () => onOpen(doc) },\n ...(onReview\n ? [{ id: 'review', label: 'Open in Review', icon: BookOpen, onSelect: () => onReview(doc) }]\n : []),\n ...(openDocumentChat\n ? [\n {\n id: 'chat',\n label: 'Document chat',\n icon: MessagesSquare,\n onSelect: () => openDocumentChat(doc.external_id),\n },\n ]\n : []),\n ...startMenuItem(startItems ?? []),\n {\n id: 'rename',\n label: 'Rename',\n icon: Pencil,\n onSelect: () => onStartRename(doc),\n separatorBefore: true,\n },\n { id: 'download', label: 'Download', icon: Download, onSelect: () => onDownload(doc) },\n ...(emailDocument && mailPolicy?.enabled\n ? [\n {\n id: 'email',\n label: 'Send as email attachment',\n icon: Mail,\n onSelect: () => {\n void shareAsEmail()\n },\n },\n ]\n : []),\n ...(onMove\n ? [{ id: 'move', label: 'Move to…', icon: FolderInput, onSelect: () => onMove(doc) }]\n : []),\n ...(canDelete\n ? [\n {\n id: 'delete',\n label: 'Delete',\n icon: Trash2,\n onSelect: () => onDelete(doc),\n destructive: true,\n separatorBefore: true,\n },\n ]\n : []),\n ]\n\n // No hover card while renaming (it would cover the input) or while anything is dragged: the\n // tooltip trigger merges pointer handlers onto the draggable node and swallows the move events\n // dnd-kit needs to find the drop target.\n const tooltip =\n renaming || dndActive ? undefined : (\n <FileTooltipContent doc={doc} modifiedBy={modifiedBy} tagNameById={tagNameById} />\n )\n\n return (\n <ExplorerFileTile\n id={doc.external_id}\n title={getDocumentTitle(doc, doc.file_name ?? '')}\n density={density}\n selected={selected}\n dragging={dragging}\n renaming={renaming}\n thumbnailUrl={thumbnailUrl}\n renderFileIcon={(size) => <Icon size={size} className=\"drop-shadow-sm\" />}\n progress={\n isProcessing\n ? { label: STATUS_LABEL[status] ?? status, queued: status === 'queued' }\n : undefined\n }\n statusMarker={\n <div className=\"flex items-center gap-1\">\n <TileVisibilityBadge doc={doc} />\n {showStatusMarker && <TileStatusBadge doc={doc} status={status} />}\n </div>\n }\n offlineMarker={\n isOffline ? (\n <DocumentSyncGlyph docExtId={doc.external_id} size={24} bgClassName=\"bg-primary\" />\n ) : undefined\n }\n entity={\n <DocumentEntity\n doc={doc}\n labelMaxWidth=\"max-w-full\"\n noClamp\n // The full name over two lines: \"(redacted)\" / \"(annotated)\" sit at the end, so a one-line\n // ellipsis hides exactly what tells a frozen copy from its original.\n labelClassName=\"whitespace-normal line-clamp-2 break-words\"\n viewing={isViewing}\n tooltipContent={\n <FileTooltipContent doc={doc} modifiedBy={modifiedBy} tagNameById={tagNameById} />\n }\n className={cn(\n 'w-full min-w-0 max-w-full bg-background/90 backdrop-blur-sm',\n density === 'list' ? 'text-xs' : undefined\n )}\n onClick={(e) => {\n e.stopPropagation()\n onOpen(doc)\n }}\n />\n }\n tooltip={tooltip}\n menuItems={menuItems}\n rootRef={setNodeRef}\n rootProps={{ ...listeners, ...attributes }}\n onOpen={() => onOpen(doc)}\n onSelect={(e) => onSelect(doc, e)}\n onToggle={(e) => onToggle(doc, e)}\n onCommitRename={(name) => onCommitRename(doc, name)}\n onCancelRename={onCancelRename}\n />\n )\n})\n\ninterface FolderTileProps {\n folder: ExplorerFolder\n density: ExplorerDensity\n /** Being renamed inline. */\n editing?: boolean\n /** Every document beneath the folder is selected. */\n selected?: boolean\n /** Some (not all) documents beneath the folder are selected. */\n partiallySelected?: boolean\n /** Every document beneath the folder (its count of files still processing). */\n documents: readonly FileTileDocument[]\n onOpen: (folder: ExplorerFolder) => void\n /** Toggle the whole folder (all its documents). */\n onToggleSelect?: (folder: ExplorerFolder, e: React.MouseEvent) => void\n onCommitName?: (folder: ExplorerFolder, name: string) => void\n onCancelName?: () => void\n onStartRename?: (folder: ExplorerFolder) => void\n onDownload?: (folder: ExplorerFolder) => void\n onMove?: (folder: ExplorerFolder) => void\n onDelete?: (folder: ExplorerFolder) => void\n /** The host's actions on documents (read once by the view). */\n actions?: DocumentHostActions\n}\n\nexport const FolderTile = memo(function FolderTile({\n folder,\n density,\n editing,\n selected,\n partiallySelected,\n documents,\n onOpen,\n onToggleSelect,\n onCommitName,\n onCancelName,\n onStartRename,\n onDownload,\n onMove,\n onDelete,\n actions = NO_ACTIONS,\n}: FolderTileProps) {\n const { setNodeRef, isOver } = useDroppable({\n id: `folder:${folder.path.join('/')}`,\n data: { type: 'folder', path: folder.path },\n })\n const { startItemsForFolder } = actions\n // Live processing is read here, not by the explorer, so an upload burst re-renders folder tiles\n // only.\n const tasks = useProcessingTasks()\n const processingCount = useMemo(\n () =>\n documents.filter((doc) =>\n isActiveDocumentStatus(resolveDocumentStatus(doc, tasks[doc.external_id]))\n ).length,\n [documents, tasks]\n )\n const isEmpty = folder.count === 0\n const iconSize = density === 'list' ? 34 : 48\n\n // A folder is not \"opened in review\"; an item is left out when its handler is absent (an empty\n // folder has nothing to start, download or move).\n const menuItems: ExplorerMenuItem[] = [\n ...(onStartRename\n ? [{ id: 'rename', label: 'Rename', icon: Pencil, onSelect: () => onStartRename(folder) }]\n : []),\n ...(!isEmpty ? startMenuItem(startItemsForFolder?.(folder.path.join('/')) ?? []) : []),\n ...(onDownload && !isEmpty\n ? [{ id: 'download', label: 'Download', icon: Download, onSelect: () => onDownload(folder) }]\n : []),\n ...(onMove && !isEmpty\n ? [{ id: 'move', label: 'Move to…', icon: FolderInput, onSelect: () => onMove(folder) }]\n : []),\n ...(onDelete\n ? [\n {\n id: 'delete',\n label: 'Delete',\n icon: Trash2,\n onSelect: () => onDelete(folder),\n destructive: true,\n separatorBefore: true,\n },\n ]\n : []),\n ]\n\n // A provider root shows shortened (the account; the brand mark carries the provider). Rename and\n // the tooltip keep the full stored name.\n const displayName = folder.path.length === 1 ? formatFolderSegment(folder.name) : folder.name\n const providerIcon =\n folder.path.length === 1 && hasFolderProviderIcon(folder.name) ? (\n <span\n className=\"flex items-center justify-center drop-shadow-sm\"\n style={{ width: iconSize, height: iconSize }}\n >\n <FolderProviderIcon folderPath={folder.name} className=\"h-full w-full\" />\n </span>\n ) : undefined\n\n return (\n <ExplorerFolderTile\n name={folder.name}\n displayName={displayName === '' ? null : displayName}\n path={folder.path}\n count={folder.count}\n density={density}\n editing={editing}\n selected={selected}\n partiallySelected={partiallySelected}\n processingCount={processingCount}\n isOver={isOver}\n icon={providerIcon}\n menuItems={menuItems}\n rootRef={setNodeRef}\n onOpen={() => onOpen(folder)}\n onToggleSelect={onToggleSelect ? (e) => onToggleSelect(folder, e) : undefined}\n onCommitName={(name) => onCommitName?.(folder, name)}\n onCancelName={onCancelName}\n />\n )\n})\n","/**\n * ConnectedPendingSyncDialog — the one place to review the changes made offline that wait to\n * sync: a table (the document, the exact change, when, its sync state) with multi-row selection\n * and Undo for the rows picked (or all of them).\n *\n * Mount it once; anything opens it with `openPendingSyncDialog()` (the offline status, a\n * document's \"changes pending\" badge).\n */\n\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Button,\n formatRelativeTime,\n} from '@arbidocs/react/ui'\nimport { ModalSection } from '../../settings'\nimport { useMemo, useState } from 'react'\nimport type { ColDef, ICellRendererParams, ValueGetterParams } from 'ag-grid-community'\nimport { CircleCheck, RefreshCw, RotateCcw, WifiOff } from 'lucide-react'\nimport { GridView } from '../../files'\nimport { useIsOnline } from '@arbidocs/react/document-tools/core'\nimport {\n usePendingSyncItems,\n useCancelManyPendingSync,\n type PendingSyncItem,\n} from '@arbidocs/react'\nimport { create } from 'zustand'\n\nconst usePendingSyncDialog = create<{ open: boolean; setOpen: (open: boolean) => void }>((set) => ({\n open: false,\n setOpen: (open) => set({ open }),\n}))\n\n/** Open the offline-changes dialog from anywhere (a status pill, a grid cell). */\nexport function openPendingSyncDialog(): void {\n usePendingSyncDialog.getState().setOpen(true)\n}\n\nconst STATUS_META: Record<PendingSyncItem['status'], { dot: string; text: string; tone: string }> =\n {\n queued: { dot: 'bg-yellow-text', text: 'Waiting to sync', tone: 'text-yellow-text' },\n syncing: { dot: 'bg-blue-text', text: 'Syncing…', tone: 'text-blue-text' },\n error: { dot: 'bg-red-text', text: 'Failed', tone: 'text-red-text' },\n }\n\nfunction StatusCell({ data }: ICellRendererParams<PendingSyncItem>) {\n if (!data) return null\n const meta = STATUS_META[data.status]\n return (\n <span\n className={`inline-flex items-center gap-1.5 text-sm font-medium ${meta.tone}`}\n title={data.notice}\n >\n <span className={`h-1.5 w-1.5 rounded-full ${meta.dot}`} />\n {data.notice ? 'Not sent: workspace unavailable' : meta.text}\n </span>\n )\n}\n\nexport function ConnectedPendingSyncDialog() {\n const isOpen = usePendingSyncDialog((s) => s.open)\n const setOpen = usePendingSyncDialog((s) => s.setOpen)\n const isOnline = useIsOnline()\n const items = usePendingSyncItems()\n const cancelMany = useCancelManyPendingSync()\n const [selected, setSelected] = useState<PendingSyncItem[]>([])\n\n const undoableIds = useMemo(\n () => items.filter((i) => i.status !== 'syncing').map((i) => i.mutationId),\n [items]\n )\n const selectedUndoableIds = useMemo(\n () => selected.filter((i) => i.status !== 'syncing').map((i) => i.mutationId),\n [selected]\n )\n\n const columnDefs = useMemo<ColDef<PendingSyncItem>[]>(\n () => [\n {\n colId: 'document',\n headerName: 'Document',\n field: 'document',\n flex: 1,\n minWidth: 140,\n tooltipField: 'document',\n },\n {\n colId: 'change',\n headerName: 'Change',\n field: 'change',\n flex: 1.4,\n minWidth: 160,\n tooltipField: 'change',\n },\n {\n colId: 'when',\n headerName: 'When',\n width: 120,\n // Sort by the raw timestamp; display the friendly relative string.\n valueGetter: (p: ValueGetterParams<PendingSyncItem>) => p.data?.at ?? 0,\n valueFormatter: (p) =>\n p.value\n ? formatRelativeTime(new Date(Number(p.value)).toISOString(), { style: 'short' })\n : '',\n },\n {\n colId: 'status',\n headerName: 'Status',\n width: 150,\n valueGetter: (p: ValueGetterParams<PendingSyncItem>) => p.data?.status ?? '',\n cellRenderer: StatusCell,\n },\n ],\n []\n )\n\n const hasFailed = items.some((i) => i.status === 'error')\n const title = !isOnline\n ? 'Offline changes'\n : hasFailed\n ? 'Some changes didn’t sync'\n : items.length > 0\n ? 'Syncing your changes'\n : 'No changes waiting'\n const description = !isOnline\n ? 'These edits are saved on this device and will sync automatically when you reconnect.'\n : hasFailed\n ? 'These edits didn’t reach the server, so they’re only saved on this device. Undo to discard them.'\n : 'Edits you made offline are syncing to the server.'\n\n const undoSelected = () => {\n cancelMany(selectedUndoableIds)\n setSelected([])\n }\n const undoAll = () => {\n cancelMany(undoableIds)\n setSelected([])\n }\n\n return (\n <Dialog open={isOpen} onOpenChange={setOpen}>\n <DialogContent presentation=\"sheet\" className=\"sm:max-w-2xl\" data-testid=\"pending-sync-modal\">\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\">\n {isOnline ? (\n <RefreshCw className=\"h-5 w-5 text-primary\" />\n ) : (\n <WifiOff className=\"h-5 w-5 text-yellow-text\" />\n )}\n {title}\n </DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n\n {items.length === 0 ? (\n <ModalSection className=\"flex flex-col items-center gap-2 py-10 text-center text-muted-foreground\">\n <CircleCheck className=\"h-6 w-6 text-green-text opacity-70\" />\n <p className=\"text-sm\">Everything is up to date.</p>\n </ModalSection>\n ) : (\n <ModalSection>\n <GridView<PendingSyncItem>\n items={items}\n columnDefs={columnDefs}\n getItemId={(item) => String(item.mutationId)}\n selection={{ mode: 'multiple', selected, onSelectionChange: setSelected }}\n height=\"320px\"\n gridId=\"pending-sync-grid-v1\"\n />\n </ModalSection>\n )}\n\n {undoableIds.length > 0 && (\n <DialogFooter>\n <Button\n variant=\"outline\"\n className=\"gap-1.5\"\n data-testid=\"pending-sync-undo\"\n disabled={selected.length > 0 && selectedUndoableIds.length === 0}\n onClick={selected.length > 0 ? undoSelected : undoAll}\n >\n <RotateCcw className=\"h-4 w-4\" />\n {selected.length > 0\n ? `Undo selected (${selectedUndoableIds.length})`\n : `Undo all (${undoableIds.length})`}\n </Button>\n </DialogFooter>\n )}\n </DialogContent>\n </Dialog>\n )\n}\n","/**\n * A document's status as the table shows it: the live in-flight status the host hears wins over\n * the row's, an offline edit waiting to sync is its own state, and a failure names its stage. One\n * resolution feeds both the Status column's pill and the glyph after the document's name, so they\n * always agree. Each reads only its own document's live processing, so a row re-renders only when\n * its own status changes.\n */\n\nimport { openPendingSyncDialog } from '../../offline/ConnectedPendingSyncDialog'\nimport { memo, type ReactNode } from 'react'\nimport {\n AlertTriangle,\n CheckCircle,\n Clock,\n FileX,\n Loader2,\n RefreshCw,\n SkipForward,\n Zap,\n} from 'lucide-react'\nimport {\n resolveDocumentStatus,\n useDocumentPendingSync,\n useProcessingTask,\n type DocumentHostActions,\n type WorkspaceDocument,\n} from '@arbidocs/react'\nimport { FailedStageIcon } from '../../../files/FailedStageIcon'\nimport { StatusPill } from '../../../files/StatusPill'\n\n/** A row as the status reads it (the session's rows may carry the failed stage). */\nexport type StatusDocument = WorkspaceDocument & { failed_stage?: string | null }\n\nconst PROCESSING_LABELS: Record<string, string> = {\n parsing: 'Parsing',\n encrypting: 'Encrypting',\n indexing: 'Indexing',\n analysing: 'Analysing',\n}\n\n// The server writes \"QUOTA_EXCEEDED: spend=X, budget=Y, project_ext_id=Z\" when the AI step is\n// refused for the plan's budget.\nconst QUOTA_PREFIX = 'QUOTA_EXCEEDED:'\n\n/** The plan's AI budget a failure ran into, read from its error message. */\nexport function parseQuotaError(\n errorMessage: string | null | undefined\n): { spend: number; budget: number; projectExtId: string | null } | null {\n if (!errorMessage || !errorMessage.startsWith(QUOTA_PREFIX)) return null\n const body = errorMessage.slice(QUOTA_PREFIX.length)\n const spend = body.match(/spend=([0-9.]+)/)?.[1]\n const budget = body.match(/budget=([0-9.]+)/)?.[1]\n const projectExtId = body.match(/project_ext_id=([^\\s,]+)/)?.[1] ?? null\n if (spend === undefined || budget === undefined) return null\n return { spend: Number(spend), budget: Number(budget), projectExtId }\n}\n\nexport interface ResolvedDocStatus {\n /** The status to show: a live in-flight status wins over a finished one on the row. */\n status: string\n /** An offline edit is waiting to sync (shown over \"ready\"). */\n isPendingSync: boolean\n /** Where a failure stopped: live, else on the row. */\n failedStage: string | null\n}\n\n/** The status a document shows now (null while it has none). */\nfunction useResolvedDocStatus(doc: StatusDocument | undefined): ResolvedDocStatus | null {\n const task = useProcessingTask(doc?.external_id ?? '')\n const isPendingSync = useDocumentPendingSync(doc?.external_id)\n if (!doc || !doc.status) return null\n // The newer of the row and the live status (their `seq`s): a document processed again (AI fields\n // being filled) shows its progress, one whose final event was lost shows the finished row.\n const status = resolveDocumentStatus(doc, doc.external_id ? task : undefined)\n return { status, isPendingSync, failedStage: task?.failed_stage ?? doc.failed_stage ?? null }\n}\n\nconst GLYPH = 'size-3.5 shrink-0'\n\nfunction describeGlyph(\n resolved: ResolvedDocStatus,\n doc: StatusDocument\n): { node: ReactNode; title: string } | null {\n if (resolved.isPendingSync) {\n return {\n node: <RefreshCw className={`${GLYPH} text-yellow-text`} />,\n title: 'Changes saved on this device, waiting to sync',\n }\n }\n switch (resolved.status) {\n case 'queued': {\n const isDocx = doc.file_name?.toLowerCase().endsWith('.docx')\n return {\n node: <Clock className={`${GLYPH} text-muted-foreground`} />,\n title: isDocx\n ? 'The document is available to edit. PDF and search indexing are processing.'\n : 'Queued, waiting to start',\n }\n }\n case 'parsing':\n case 'encrypting':\n case 'indexing':\n case 'analysing':\n return {\n node: <Loader2 className={`${GLYPH} animate-spin text-ai-ink`} />,\n title: PROCESSING_LABELS[resolved.status],\n }\n case 'skipped':\n return {\n node: <SkipForward className={`${GLYPH} text-muted-foreground`} />,\n title: 'Skipped',\n }\n case 'empty':\n return {\n node: <FileX className={`${GLYPH} text-yellow-text`} />,\n title: 'Empty, no extractable content',\n }\n case 'low-content':\n return {\n node: <AlertTriangle className={`${GLYPH} text-yellow-text`} />,\n title: 'Low content, minimal extractable content',\n }\n case 'failed':\n if (doc.error_message?.startsWith(QUOTA_PREFIX)) {\n return { node: <Zap className={`${GLYPH} text-yellow-text`} />, title: 'AI usage used up' }\n }\n return {\n node: (\n <FailedStageIcon\n stage={resolved.failedStage}\n errorMessage={doc.error_message}\n className={`${GLYPH} text-red-text`}\n />\n ),\n title: 'Failed',\n }\n default:\n // Ready: nothing to say.\n return null\n }\n}\n\n/**\n * The quiet status mark after a document's name, so the table needs no Status column: a ready\n * document shows nothing; work in flight, waiting and problems get a glyph with a title. The spinner\n * is a CSS animation, so a table of processing rows costs no timers.\n */\nexport const DocumentStatusGlyph = memo(function DocumentStatusGlyph({\n doc,\n}: {\n doc: StatusDocument\n}) {\n const resolved = useResolvedDocStatus(doc)\n const shown = resolved ? describeGlyph(resolved, doc) : null\n if (!resolved || !shown) return null\n return (\n <span\n role=\"img\"\n aria-label={shown.title}\n title={shown.title}\n data-slot=\"document-status-glyph\"\n data-status={resolved.status}\n className=\"inline-flex items-center\"\n >\n {shown.node}\n </span>\n )\n})\n\n/** The Status column: a tinted pill per status, with a progress bar while processing. */\nexport const StatusCell = memo(function StatusCell({\n doc,\n onStatusClick,\n actions,\n}: {\n doc: StatusDocument | undefined\n /** Opens the host's processing details. */\n onStatusClick?: () => void\n actions?: DocumentHostActions\n}) {\n const resolved = useResolvedDocStatus(doc)\n if (!doc || !resolved) return <span className=\"text-muted-foreground\">—</span>\n\n const { status, isPendingSync, failedStage } = resolved\n const cell = (pill: ReactNode) => (\n <div className=\"flex h-full w-full items-center justify-center overflow-hidden\">{pill}</div>\n )\n const click = () => onStatusClick?.()\n\n if (isPendingSync) {\n return cell(\n <StatusPill\n tone=\"warning\"\n icon={<RefreshCw className=\"size-3.5\" />}\n label=\"Pending\"\n title=\"Changes saved on this device — waiting to sync\"\n onClick={openPendingSyncDialog}\n />\n )\n }\n\n switch (status) {\n case 'completed':\n return cell(\n <StatusPill\n tone=\"success\"\n icon={<CheckCircle className=\"size-3.5\" />}\n label=\"Ready\"\n title=\"Ready\"\n onClick={click}\n />\n )\n case 'skipped':\n return cell(\n <StatusPill\n tone=\"neutral\"\n icon={<SkipForward className=\"size-3.5\" />}\n label=\"Skipped\"\n title=\"Skipped\"\n onClick={click}\n />\n )\n case 'empty':\n return cell(\n <StatusPill\n tone=\"warning\"\n icon={<FileX className=\"size-3.5\" />}\n label=\"Empty\"\n title=\"Empty - no extractable content\"\n onClick={click}\n />\n )\n case 'low-content':\n return cell(\n <StatusPill\n tone=\"warning\"\n icon={<AlertTriangle className=\"size-3.5\" />}\n label=\"Low content\"\n title=\"Low content - minimal extractable content\"\n onClick={click}\n />\n )\n case 'failed': {\n const quota = parseQuotaError(doc.error_message)\n if (quota) {\n return cell(\n <StatusPill\n tone=\"warning\"\n icon={<Zap className=\"size-3.5\" />}\n label=\"Quota\"\n title=\"AI usage used up — click for options\"\n onClick={() => actions?.openQuota?.(quota)}\n />\n )\n }\n return cell(\n <StatusPill\n tone=\"danger\"\n icon={\n <FailedStageIcon\n stage={failedStage}\n errorMessage={doc.error_message}\n className=\"size-3.5\"\n />\n }\n label=\"Failed\"\n onClick={click}\n />\n )\n }\n case 'queued': {\n const isDocx = doc.file_name?.toLowerCase().endsWith('.docx')\n return cell(\n <StatusPill\n tone=\"neutral\"\n label={isDocx ? 'Uploaded' : 'Queued'}\n progress=\"queued\"\n title={\n isDocx\n ? 'The document is available to edit. PDF and search indexing are processing.'\n : 'Queued - waiting to start'\n }\n onClick={click}\n />\n )\n }\n case 'parsing':\n case 'encrypting':\n case 'indexing':\n case 'analysing':\n return cell(\n <StatusPill\n tone=\"info\"\n label={PROCESSING_LABELS[status]}\n progress=\"processing\"\n title={PROCESSING_LABELS[status]}\n onClick={click}\n />\n )\n default:\n return cell(<span className=\"text-sm text-muted-foreground\">{status}</span>)\n }\n})\n","/**\n * The documents table's cell bindings: the document pill with its row menu, who can see it, its\n * folder, its related documents, its labels and its uploader. The presentation is in `files/`;\n * these bind it to the session. Writes come in through props or the grid's context, never a hook\n * per row, so a large table adds no per-row subscriptions beyond what a cell must show.\n */\n\nimport { memo, useCallback, useEffect, useMemo, useRef } from 'react'\nimport { Eye } from 'lucide-react'\nimport {\n useArbi,\n useIsCreatingTag,\n useOpenViewerDocumentId,\n useTags,\n type DocumentHostActions,\n type RelatedDocs,\n type useAssignDocTags,\n type useCreateTag,\n type useRemoveDocTags,\n} from '@arbidocs/react'\nimport {\n DocumentEntity,\n UserEntity,\n agentAvatarColors,\n formatFolderLabel,\n getEntityColor,\n getEntityLabel,\n getUserAvatarColor,\n getUserDisplayName,\n getUserInitials,\n isAgent,\n} from '@arbidocs/react/ui'\nimport {\n SIGNED_LOCKED_REASON,\n currentHasMarkup,\n downloadBlob,\n fetchMarkupPdf,\n isSignedVersion,\n} from '@arbidocs/react/document-tools/core'\nimport { SharedCell as GenericSharedCell } from '../../../components/SharedCell'\nimport { DocumentNameCellFrame } from '../../../files/cells/DocumentNameCell'\nimport { DocumentRowMenu } from '../../../files/cells/DocumentNameCell'\nimport { FolderCell } from '../../../files/cells/FolderCell'\nimport { RelatedDocsCell } from '../../../files/cells/RelatedDocsCell'\nimport { LabelMultiSelectView, type LabelOption } from '../../../files/cells/LabelMultiSelect'\nimport { FolderCommandList } from '../../../files/FolderPicker'\nimport {\n FolderProviderIcon,\n formatFolderSegment,\n hasFolderProviderIcon,\n} from '../../../files/folders'\nimport { visibilityToggleTooltip } from '../../../files/visibility'\nimport { useBlocksEnvironment } from '../../../provider/environment'\nimport { DocumentSyncGlyph } from '../DocumentSyncGlyph'\nimport { FileTooltipContent, type FileTileDocument, type FileTileUser } from '../explorer/FileTiles'\nimport { DocumentStatusGlyph } from './documentStatus'\n\n/** A person as a table cell shows them. */\nexport type GridUser = FileTileUser & {\n is_identity_verified?: boolean | null\n}\n\n/** A small avatar for a person (initials, or their picture); opens them when the host can. */\nexport const UserAvatar = memo(function UserAvatar({\n user,\n isMe = false,\n onOpen,\n}: {\n user: GridUser | undefined\n isMe?: boolean\n onOpen?: (userId: string) => void\n}) {\n if (!user) return <UserEntity empty size=\"xs\" />\n const colorClass = getUserAvatarColor(user.external_id)\n const agent = isAgent(user)\n return (\n <UserEntity\n size=\"xs\"\n variant=\"icon\"\n showTooltip={false}\n interactive={!!onOpen}\n initials={getUserInitials(user)}\n displayName={isMe ? 'You' : getUserDisplayName(user)}\n picture={user.picture}\n colorClass={colorClass}\n isAgent={agent}\n isVerified={user.is_identity_verified === true}\n agentStyle={agent ? agentAvatarColors(colorClass) : undefined}\n isMe={isMe}\n onClick={\n onOpen\n ? (e) => {\n e.stopPropagation()\n onOpen(user.external_id)\n }\n : undefined\n }\n />\n )\n})\n\n/** The document pill's hover card: rendered only while open, so its lookups run on hover. */\nfunction DocumentSummaryTooltip({\n doc,\n users,\n}: {\n doc: FileTileDocument\n users: readonly GridUser[]\n}) {\n const { data: tags } = useTags()\n const modifiedBy = users.find(\n (u) => u.external_id === (doc.updated_by_ext_id ?? doc.created_by_ext_id)\n )\n const tagNameById = new Map<string, string>()\n for (const tag of tags ?? []) tagNameById.set(tag.external_id, tag.name)\n return <FileTooltipContent doc={doc} modifiedBy={modifiedBy} tagNameById={tagNameById} />\n}\n\n/**\n * How long a click waits before opening: a double-click on the title edits it, so its first click\n * must not open the document before the second one lands.\n */\nconst OPEN_AFTER_DOUBLE_CLICK_WINDOW_MS = 300\n\nexport interface DocumentNameCellProps {\n doc: FileTileDocument\n /** The viewer may rename, move or delete the document. */\n canEdit: boolean\n /** The workspace's members (the hover card's \"last modified by\"). */\n users: readonly GridUser[]\n onOpen: () => void\n /** Open in the review view. Absent: not offered. */\n onReview?: () => void\n /** Start a chat about the document. Absent: not offered. */\n onDocumentChat?: () => void\n onRename: () => void\n onDownload: () => void\n onMove: () => void\n onDelete: () => void\n}\n\n/**\n * The Document column: the document pill (exactly as documents look everywhere), opened by a\n * click, with the offline mark on its icon, its status after the name and the row menu.\n */\nexport const DocumentNameCell = memo(function DocumentNameCell({\n doc,\n canEdit,\n users,\n onOpen,\n onReview,\n onDocumentChat,\n onRename,\n onDownload,\n onMove,\n onDelete,\n}: DocumentNameCellProps) {\n const arbi = useArbi()\n const { notify } = useBlocksEnvironment()\n // The row of the document open in the viewer is marked (the grid styles the row from the cell's\n // `data-viewing`); only the rows whose state flips re-render.\n const isViewing = useOpenViewerDocumentId() === doc.external_id\n const openTimerRef = useRef<number | undefined>(undefined)\n useEffect(() => () => window.clearTimeout(openTimerRef.current), [])\n\n const downloadMarkup = async () => {\n try {\n const { blob, fileName } = await fetchMarkupPdf(arbi.getClient().fetch, doc.external_id)\n downloadBlob(blob, fileName)\n } catch (e) {\n notify(e instanceof Error ? e.message : 'The markup could not be downloaded', 'error')\n }\n }\n\n return (\n <DocumentNameCellFrame\n testId={`open-document-viewer-button-${doc.external_id}`}\n isViewing={isViewing}\n subtitle={[doc.created_at?.slice(0, 10), doc.folder ? formatFolderLabel(doc.folder) : null]\n .filter(Boolean)\n .join(' · ')}\n >\n <DocumentEntity\n doc={doc}\n size=\"md\"\n labelMaxWidth=\"max-w-full\"\n fullWidth\n status={<DocumentStatusGlyph doc={doc} />}\n tooltipContent={<DocumentSummaryTooltip doc={doc} users={users} />}\n iconBadge={\n <DocumentSyncGlyph\n docExtId={doc.external_id}\n size={10}\n className=\"absolute -bottom-1 -right-1\"\n />\n }\n onClick={(e) => {\n // Opens; the row is not selected too. Rename is the menu or a double-click.\n e.stopPropagation()\n window.clearTimeout(openTimerRef.current)\n if (e.detail > 1) return\n openTimerRef.current = window.setTimeout(onOpen, OPEN_AFTER_DOUBLE_CLICK_WINDOW_MS)\n }}\n actions={\n <DocumentRowMenu\n canEdit={canEdit}\n onOpen={onOpen}\n onReview={onReview}\n onDocumentChat={onDocumentChat}\n onRename={onRename}\n onDownload={onDownload}\n onDownloadMarkup={currentHasMarkup(doc) ? () => void downloadMarkup() : undefined}\n // A signed version is locked: its markup is never written into its PDF.\n downloadMarkupDisabledReason={isSignedVersion(doc) ? SIGNED_LOCKED_REASON : undefined}\n onMove={onMove}\n onDelete={onDelete}\n />\n }\n // Transparent, so the row's tint (private, selected, hover) shows through.\n className=\"min-w-0 max-w-full border-transparent bg-transparent hover:bg-foreground/5\"\n />\n </DocumentNameCellFrame>\n )\n})\n\n/** Who can see the document: a toggle for its owner. */\nexport const DocumentSharedCell = memo(function DocumentSharedCell({\n document,\n disabled = false,\n disabledTooltip,\n onToggle,\n}: {\n document: FileTileDocument\n disabled?: boolean\n disabledTooltip?: string\n onToggle: (docId: string, shared: boolean) => void\n}) {\n const handleToggle = useCallback(\n (shouldShare: boolean) => onToggle(document.external_id, shouldShare),\n [document.external_id, onToggle]\n )\n return (\n <GenericSharedCell\n item={document}\n onToggle={handleToggle}\n disabled={disabled}\n disabledTooltip={disabledTooltip}\n tooltipActive={visibilityToggleTooltip(true)}\n tooltipInactive={visibilityToggleTooltip(false)}\n workspaceLabel={getEntityLabel('WORKSPACE')}\n />\n )\n})\n\n/** The folders documents are in (and `value`), for a folder picker. */\nexport function useDocumentFolders(\n documents: readonly { folder?: string | null }[],\n value?: string | null\n): string[] {\n return useMemo(() => {\n const paths = new Set<string>()\n for (const doc of documents) if (doc.folder) paths.add(doc.folder)\n if (value) paths.add(value)\n return [...paths].sort((a, b) => a.localeCompare(b))\n }, [documents, value])\n}\n\n/** A provider root displays shortened (its logo carries the name); a bare root is dropped. */\nfunction folderSegments(folder: string): string[] {\n return folder\n .split('/')\n .map((part, i) => (i === 0 ? formatFolderSegment(part) : part))\n .filter((part, i) => i > 0 || part !== '')\n}\n\n/** The document's folder, changed by a picker of the workspace's folders. */\nexport const DocumentFolderCell = memo(\n function DocumentFolderCell({\n document,\n isEditable,\n allDocuments,\n onUpdateFolder,\n }: {\n document: FileTileDocument\n isEditable: boolean\n allDocuments: readonly FileTileDocument[]\n onUpdateFolder: (docId: string, folder: string | null) => void\n }) {\n const folder = document.folder\n const folders = useDocumentFolders(allDocuments, folder)\n return (\n <FolderCell\n folder={folder}\n segments={folder ? folderSegments(folder) : []}\n icon={\n folder && hasFolderProviderIcon(folder) ? (\n <FolderProviderIcon folderPath={folder} className=\"h-3.5 w-3.5 flex-none shrink-0\" />\n ) : undefined\n }\n isEditable={isEditable}\n picker={\n <FolderCommandList\n folders={folders}\n value={folder}\n onSelect={(next) => onUpdateFolder(document.external_id, next)}\n showRemove={!!folder}\n />\n }\n />\n )\n },\n (prev, next) =>\n prev.document.external_id === next.document.external_id &&\n prev.document.folder === next.document.folder &&\n prev.isEditable === next.isEditable &&\n prev.allDocuments === next.allDocuments &&\n prev.onUpdateFolder === next.onUpdateFolder\n)\n\n/** How a made-from or copy document is related, in words (its `derived_from` role). */\nconst RELATION_LABELS: Record<string, string> = {\n redaction: 'Redacted copy',\n annotated: 'Annotated copy',\n production: 'Production',\n crop: 'Crop',\n redline_base: 'Redline',\n redline_revised: 'Redline',\n translation: 'Translation',\n}\nconst relationLabel = (role: string | undefined, version?: number) => {\n const label = role ? RELATION_LABELS[role] : undefined\n return version ? `${label ?? 'Made'} from v${version}` : label\n}\n\n/** The document's related documents: its email family, copies, duplicates and near-duplicates. */\nexport const RelatedDocumentsCell = memo(function RelatedDocumentsCell({\n currentDoc,\n related,\n viewingDocumentId,\n onDocumentClick,\n onDelete,\n canDelete,\n onCompare,\n}: {\n currentDoc: FileTileDocument\n related: RelatedDocs<FileTileDocument>\n /** The document open in the viewer (its pill is marked). */\n viewingDocumentId: string | null\n onDocumentClick: (docId: string) => void\n onDelete: (doc: FileTileDocument) => void\n canDelete?: (doc: FileTileDocument) => boolean\n /** Compare with a similar document. Absent: not offered. */\n onCompare?: (docId: string, otherDocId: string) => void\n}) {\n return (\n <RelatedDocsCell<FileTileDocument>\n parent={related.parent}\n attachments={related.children}\n madeFrom={related.madeFrom}\n copies={related.copies}\n getRelation={(doc) =>\n relationLabel(related.roles[doc.external_id], related.versions?.[doc.external_id])\n }\n duplicates={related.duplicates}\n similar={related.similar.map(({ doc }) => doc)}\n renderDoc={(doc) => (\n <DocumentEntity\n doc={doc}\n icon={\n viewingDocumentId === doc.external_id ? (\n <Eye className=\"h-3.5 w-3.5 flex-shrink-0 text-primary\" />\n ) : undefined\n }\n onClick={() => onDocumentClick(doc.external_id)}\n />\n )}\n getKey={(doc) => doc.external_id}\n onSwitchTo={(doc) => {\n const version = related.versions?.[doc.external_id]\n onDocumentClick(version ? `${doc.external_id}@v${version}` : doc.external_id)\n }}\n onDelete={onDelete}\n canDelete={canDelete}\n onCompare={\n onCompare ? (doc) => onCompare(currentDoc.external_id, doc.external_id) : undefined\n }\n />\n )\n})\n\nconst NOT_A_MEMBER_MESSAGE =\n 'Join this workspace as a collaborator or owner to create or apply labels.'\n\n/** A label as the Labels column offers it. */\nexport interface GridLabel {\n external_id: string\n name: string\n}\n\n/** The document's labels: toggle one, or create one by name and apply it. */\nexport const DocumentLabelsCell = memo(function DocumentLabelsCell({\n doc,\n labels,\n createDocTag,\n deleteDocTag,\n createTag,\n isMember,\n rowHeight,\n actions,\n}: {\n doc: FileTileDocument\n labels: readonly GridLabel[]\n createDocTag: Pick<ReturnType<typeof useAssignDocTags>, 'mutateAsync'>\n deleteDocTag: Pick<ReturnType<typeof useRemoveDocTags>, 'mutateAsync'>\n createTag: Pick<ReturnType<typeof useCreateTag>, 'mutateAsync'>\n isMember: boolean\n /** The row height: the chips are clamped to the rows that fully fit. */\n rowHeight?: number\n actions?: DocumentHostActions\n}) {\n const isCreatingTag = useIsCreatingTag()\n const { notify } = useBlocksEnvironment()\n\n const options: LabelOption[] = useMemo(\n () =>\n labels.map((t) => ({\n id: t.external_id,\n name: t.name,\n color: getEntityColor(t.external_id, 'medium'),\n })),\n [labels]\n )\n const appliedIds = useMemo(\n () =>\n new Set(\n (doc.doctags || [])\n .filter((dt) => labels.some((t) => t.external_id === dt.tag_ext_id))\n .map((dt) => dt.tag_ext_id)\n ),\n [doc.doctags, labels]\n )\n\n const applyTag = useCallback(\n (tagId: string) => createDocTag.mutateAsync({ tagId, docIds: [doc.external_id] }),\n [createDocTag, doc.external_id]\n )\n\n const handleToggle = useCallback(\n async (tagId: string) => {\n if (!isMember) return notify(NOT_A_MEMBER_MESSAGE, 'info')\n if (appliedIds.has(tagId)) {\n await deleteDocTag.mutateAsync({ tagId, docIds: [doc.external_id] })\n } else {\n await applyTag(tagId)\n }\n },\n [isMember, appliedIds, deleteDocTag, applyTag, doc.external_id, notify]\n )\n\n const handleCreate = useCallback(\n async (name: string) => {\n const trimmed = name.trim()\n if (!trimmed) return\n if (!isMember) return notify(NOT_A_MEMBER_MESSAGE, 'info')\n const existing = labels.find((t) => t.name.toLowerCase() === trimmed.toLowerCase())\n if (existing) {\n if (!appliedIds.has(existing.external_id)) await applyTag(existing.external_id)\n return\n }\n // The same name is already being created (a double Enter): one label, not two.\n if (isCreatingTag(trimmed)) return\n const created = await createTag.mutateAsync({\n name: trimmed,\n tagType: { type: 'checkbox', options: [] },\n shared: false,\n })\n if (created?.external_id) await applyTag(created.external_id)\n },\n [isMember, labels, appliedIds, createTag, applyTag, isCreatingTag, notify]\n )\n\n const openFieldsManager = actions?.openFieldsManager\n return (\n <LabelMultiSelectView\n options={options}\n appliedIds={appliedIds}\n onToggle={handleToggle}\n onCreate={handleCreate}\n onEditLabels={openFieldsManager ? () => openFieldsManager() : undefined}\n rowHeight={rowHeight}\n />\n )\n})\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/collaboration/sharing/ShareControl.tsx"],"names":["jsxs","Button","jsx","Share2","cn","Tooltip","TooltipTrigger","TooltipContent"],"mappings":";;;;;;;AAeO,IAAM,4BAAA,GAAmD;AAAA,EAC9D,KAAA,EAAO,OAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,KAAA,EAAO;AACT;AA8BO,SAAS,YAAA,CAAa;AAAA,EAC3B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,eAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,OAAA,GAAU,KAAA;AAAA,EACV,SAAA,GAAY,IAAA;AAAA,EACZ,SAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAA,GAAI,EAAE,GAAG,4BAAA,EAA8B,GAAG,MAAA,EAAO;AACvD,EAAA,MAAM,UAAA,GAAa,UAAU,QAAA,GAAW,CAAA,CAAE,SAAS,KAAA,KAAU,OAAA,GAAU,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,OAAA;AACnF,EAAA,MAAM,WAAA,GAAc,QAAA,GAAW,eAAA,GAAmB,OAAA,IAAW,CAAA,CAAE,KAAA;AAE/D,EAAA,MAAM,MAAA,mBACJA,eAAA;AAAA,IAACC,SAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA;AAAA,MACA,IAAA,EAAM,UAAU,MAAA,GAAS,IAAA;AAAA,MACzB,QAAA;AAAA,MACA,cAAY,CAAA,CAAE,KAAA;AAAA,MACd,cAAA,EAAc,KAAA,KAAU,OAAA,GAAU,OAAA,GAAU,KAAA,KAAU,QAAA;AAAA,MACtD,WAAA,EAAU,cAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MACb,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,QAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,QAAA,QAAA,CAAS,UAAU,QAAQ,CAAA;AAAA,MAC7B,CAAA;AAAA,MACA,SAAA,EAAU,iDAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAACC,kBAAA,EAAA,EAAO,WAAU,QAAA,EAAS,CAAA;AAAA,QAC1B,CAAC,OAAA,oBAAWD,cAAA,CAAC,MAAA,EAAA,EAAM,YAAE,KAAA,EAAM;AAAA;AAAA;AAAA,GAC9B;AAGF,EAAA,uBACEF,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAWI,KAAA,CAAG,yCAAA,EAA2C,SAAS,CAAA;AAAA,MAEjE,QAAA,EAAA;AAAA,QAAA,WAAA,mCACEC,UAAA,EAAA,EAEC,QAAA,EAAA;AAAA,0BAAAH,cAAA,CAACI,iBAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EAAC,cAAA,EAAgB,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB,EAC/D,QAAA,kBAAAJ,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAe,kBAAO,CAAA,EACxC,CAAA;AAAA,0BACAA,cAAA,CAACK,qBAAgB,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAC/B,CAAA,GAEA,MAAA;AAAA,QAED,SAAA,oBACCL,cAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,aAAA;AAAA,YACV,YAAA,EAAY,KAAA;AAAA,YACZ,aAAA,EAAa,WAAA;AAAA,YACb,SAAA,EAAU,mGAAA;AAAA,YAET,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,GAEJ;AAEJ","file":"chunk-VLCY46K6.cjs","sourcesContent":["import { Share2 } from 'lucide-react'\nimport { Button, Tooltip, TooltipContent, TooltipTrigger, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\n/** Visibility of the selection: every item shared, none shared, or a mix. */\nexport type ShareState = 'shared' | 'private' | 'mixed'\n\n/** Every fixed string of the share control. Pass a partial `labels` to translate or reword. */\nexport interface ShareControlLabels {\n share: string\n shared: string\n private: string\n mixed: string\n}\n\nexport const DEFAULT_SHARE_CONTROL_LABELS: ShareControlLabels = {\n share: 'Share',\n shared: 'Shared',\n private: 'Private',\n mixed: 'Partly shared',\n}\n\nexport interface ShareControlProps {\n state: ShareState\n /** `true` = make visible to the workspace, `false` = make private again. */\n onToggle: (shouldShare: boolean) => void\n disabled?: boolean\n /** Tooltip while disabled (why the user cannot change visibility). */\n disabledTooltip?: string\n /** What a click does in the current state (tooltip). Falls back to the label. */\n tooltip?: string\n /** `outline` for a header, `ghost` inside a floating bar. */\n variant?: 'outline' | 'ghost'\n /** Icon-only button (narrow headers); the accessible name stays \"Share\". */\n compact?: boolean\n /** Show the muted state pill (\"Shared\" / \"Private\") after the button. */\n showState?: boolean\n className?: string\n labels?: Partial<ShareControlLabels>\n /** Test id of the button (the app passes the current id). */\n testId?: string\n /** Test id of the state pill. */\n stateTestId?: string\n}\n\n/**\n * Share control: an outline (or ghost) \"Share\" button that flips visibility, with the current\n * state spelled out in a muted pill. Neutral tones only: sharing is a plain state, not an AI\n * moment, so there is no accent or cyan switch that could read as \"on\" while its label reads \"off\".\n */\nexport function ShareControl({\n state,\n onToggle,\n disabled = false,\n disabledTooltip,\n tooltip,\n variant = 'outline',\n compact = false,\n showState = true,\n className,\n labels,\n testId,\n stateTestId,\n}: ShareControlProps) {\n const l = { ...DEFAULT_SHARE_CONTROL_LABELS, ...labels }\n const stateLabel = state === 'shared' ? l.shared : state === 'mixed' ? l.mixed : l.private\n const tooltipText = disabled ? disabledTooltip : (tooltip ?? l.share)\n\n const button = (\n <Button\n type=\"button\"\n variant={variant}\n size={compact ? 'icon' : 'sm'}\n disabled={disabled}\n aria-label={l.share}\n aria-pressed={state === 'mixed' ? 'mixed' : state === 'shared'}\n data-slot=\"share-button\"\n data-testid={testId}\n onClick={(e) => {\n e.stopPropagation()\n onToggle(state !== 'shared')\n }}\n className=\"pointer-coarse:min-h-11 pointer-coarse:min-w-11\"\n >\n <Share2 className=\"size-4\" />\n {!compact && <span>{l.share}</span>}\n </Button>\n )\n\n return (\n <div\n data-slot=\"share-control\"\n className={cn('inline-flex shrink-0 items-center gap-2', className)}\n >\n {tooltipText ? (\n <Tooltip>\n {/* A disabled button swallows pointer events, so the tooltip hangs off a wrapper. */}\n <TooltipTrigger asChild onFocusCapture={(e) => e.stopPropagation()}>\n <span className=\"inline-flex\">{button}</span>\n </TooltipTrigger>\n <TooltipContent>{tooltipText}</TooltipContent>\n </Tooltip>\n ) : (\n button\n )}\n {showState && (\n <span\n data-slot=\"share-state\"\n data-state={state}\n data-testid={stateTestId}\n className=\"inline-flex h-6 items-center rounded-full bg-muted px-2 text-xs font-medium text-muted-foreground\"\n >\n {stateLabel}\n </span>\n )}\n </div>\n )\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/agents/tasks/PersonPill.tsx","../src/agents/tasks/TaskTriggerChip.tsx","../src/agents/tasks/workflowColumns.tsx","../src/agents/tasks/WorkflowCatalogueSections.tsx","../src/agents/tasks/workflowTableLabels.ts","../src/agents/tasks/WorkflowsTable.tsx"],"names":["jsx","UserEntity","initials","getEntityColorStyles","Link2","MousePointerClick","Clock","Bell","jsxs","testIdOr","workflowStatus","Fragment","Card","Workflow","Badge","Button","PencilRuler","Play","useState","useRef","isSkillRow","isScheduledWorkflow","useMemo","workflowStepCount","cn","workflowTriggerType","Switch","hasTrigger","VisibilityToggle","listedRunStatus","workflowRunStatusLabel","badgeVariants","DropdownMenu","DropdownMenuTrigger","MoreHorizontal","DropdownMenuContent","DropdownMenuItem","History","Pencil","DropdownMenuSeparator","Trash2","useEffect","EmptyState","GridView","FilterInput","TriStateFilterMenu","TabHeader","SelectionBar","SelectionBarAction"],"mappings":"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","file":"chunk-XZYIS2JZ.cjs","sourcesContent":["import { UserEntity, getEntityColorStyles } from '@arbidocs/react/ui'\nimport { initials } from '../../lib/format'\n\n/** A person (or agent) as the table shows them. */\nexport interface TaskPerson {\n /** The user's external id; absent when the person is not known (the pill then reads as their label). */\n id?: string | null\n label: string\n /** The viewer: shown as \"You\" by the host's pill, and as the label here. */\n isMe?: boolean\n isAgent?: boolean\n}\n\nexport interface PersonPillProps {\n person: TaskPerson\n testId?: string\n}\n\n/**\n * A person as the app's own user pill: the same avatar, initials and tint as everywhere else. This is\n * the default; a host that knows more (presence, a direct-message click, the rich tooltip) hands the\n * table its own `renderPerson` instead.\n */\nexport function PersonPill({ person, testId }: PersonPillProps) {\n return (\n <span data-testid={testId} className=\"inline-flex min-w-0\">\n <UserEntity\n variant=\"pill\"\n size=\"sm\"\n interactive={false}\n showTooltip={false}\n initials={initials(person.label)}\n displayName={person.label}\n avatarStyle={person.id ? getEntityColorStyles(person.id) : undefined}\n isAgent={person.isAgent}\n isMe={person.isMe}\n />\n </span>\n )\n}\n","import { Bell, Clock, Link2, MousePointerClick } from 'lucide-react'\nimport { testIdOr } from '../../chat/test-id'\nimport type { WorkflowTriggerType } from './taskLabels'\n\nexport interface TaskTriggerChipLabels {\n /** \"After “X” is done\" — the workflow waits on a task. */\n after: (taskName: string) => string\n /** The workflow waits on a task that is not visible to the viewer. */\n afterUnknown: string\n /** No trigger: it runs when someone presses Run. */\n onDemand: string\n}\n\nexport const DEFAULT_TASK_TRIGGER_CHIP_LABELS: TaskTriggerChipLabels = {\n after: (name) => `After “${name}” is done`,\n afterUnknown: 'After another task is done',\n onDemand: 'Manual',\n}\n\nexport interface TaskTriggerChipProps {\n /** Workflow id: keys the test id (`task-trigger-{id}`). */\n id: string\n triggerType: WorkflowTriggerType\n /** Host-formatted summary for time and event triggers (\"Every weekday at 9:00\", \"On document uploaded\"). */\n summary: string\n /** Set when this workflow waits on a task; the name it shows (or undefined if not visible). */\n afterTaskId?: string | null\n afterTaskName?: string\n testId?: string\n labels?: Partial<TaskTriggerChipLabels>\n}\n\nfunction TriggerIcon({ type, chained }: { type: WorkflowTriggerType; chained: boolean }) {\n const cls = 'size-3.5 shrink-0 text-muted-foreground'\n if (chained) return <Link2 className={cls} aria-hidden />\n switch (type) {\n case 'on_demand':\n return <MousePointerClick className={cls} aria-hidden />\n case 'recurring':\n return <Clock className={cls} aria-hidden />\n case 'event':\n return <Bell className={cls} aria-hidden />\n default:\n return <Clock className={cls} aria-hidden />\n }\n}\n\n/** What starts a workflow, in one line: a time, a repeat, an event, or a task finishing. */\nexport function TaskTriggerChip({\n id,\n triggerType,\n summary,\n afterTaskId,\n afterTaskName,\n testId,\n labels,\n}: TaskTriggerChipProps) {\n const l = { ...DEFAULT_TASK_TRIGGER_CHIP_LABELS, ...labels }\n const chained = Boolean(afterTaskId)\n const text = chained\n ? afterTaskName\n ? l.after(afterTaskName)\n : l.afterUnknown\n : triggerType === 'on_demand'\n ? l.onDemand\n : summary\n return (\n <span\n className=\"inline-flex min-w-0 max-w-full items-center gap-1.5 text-sm font-normal text-foreground\"\n data-testid={testIdOr(testId, { testId: `task-trigger-${id}` })}\n data-trigger={chained ? 'task' : triggerType}\n >\n <TriggerIcon type={triggerType} chained={chained} />\n <span className=\"truncate\">{text}</span>\n </span>\n )\n}\n","/**\n * Column definitions for the Workflows grid. Every column has an explicit `colId` (AG Grid persists\n * column state by id: see CLAUDE.md). The table supplies the cells that need behaviour through slots,\n * which must be stable functions so the definitions are built once.\n */\nimport type { ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport { workflowStatus, type WorkflowListRow } from './workflowRows'\nimport type { WorkflowListLabels } from './workflowTableLabels'\n\nexport const WORKFLOW_COLUMN_ORDER = [\n 'name',\n 'trigger',\n 'last_run',\n 'result',\n 'status',\n 'shared',\n 'actions',\n] as const\n\nexport interface CreateWorkflowColumnsOptions<T extends WorkflowListRow> {\n labels: WorkflowListLabels\n renderName: (workflow: T) => ReactNode\n renderTrigger: (workflow: T) => ReactNode\n renderStatus: (workflow: T) => ReactNode\n renderShared: (workflow: T) => ReactNode\n renderLastRun: (workflow: T) => ReactNode\n renderResult: (workflow: T) => ReactNode\n renderActions: (workflow: T) => ReactNode\n /** Plain text of the trigger cell, for sorting and the clipboard. */\n getTriggerText: (workflow: T) => string\n}\n\nfunction cell<T extends WorkflowListRow>(render: (workflow: T) => ReactNode) {\n return (params: ICellRendererParams<T>): ReactNode => (params.data ? render(params.data) : null)\n}\n\nconst time = (iso?: string | null): number => (iso ? Date.parse(iso) : Number.POSITIVE_INFINITY)\n\nexport function createWorkflowColumns<T extends WorkflowListRow>(\n o: CreateWorkflowColumnsOptions<T>\n): ColDef<T>[] {\n const l = o.labels\n const base: Partial<ColDef<T>> = {\n sortable: false,\n cellStyle: { display: 'flex', alignItems: 'center' },\n }\n return [\n {\n ...base,\n colId: 'name',\n sortable: true,\n headerName: l.colName,\n flex: 3,\n minWidth: 210,\n valueGetter: (p) => p.data?.name.toLowerCase() ?? '',\n cellRenderer: cell(o.renderName),\n },\n {\n ...base,\n colId: 'trigger',\n headerName: l.colTrigger,\n flex: 2.4,\n minWidth: 185,\n valueGetter: (p) => (p.data ? o.getTriggerText(p.data) : ''),\n cellRenderer: cell(o.renderTrigger),\n },\n {\n ...base,\n colId: 'last_run',\n sortable: true,\n headerName: l.colLastRun,\n flex: 1.4,\n minWidth: 140,\n cellStyle: { display: 'flex', alignItems: 'center', padding: 0 },\n valueGetter: (p) => time(p.data?.last_fired_at),\n cellRenderer: cell(o.renderLastRun),\n },\n {\n ...base,\n colId: 'result',\n headerName: 'Result',\n width: 130,\n valueGetter: (p) => p.data?.last_run_status ?? '',\n cellStyle: { display: 'flex', alignItems: 'center', padding: 0 },\n cellRenderer: cell(o.renderResult),\n },\n {\n ...base,\n colId: 'status',\n sortable: true,\n headerName: l.colStatus,\n width: 120,\n valueGetter: (p) => (p.data ? workflowStatus(p.data) : ''),\n cellRenderer: cell(o.renderStatus),\n },\n {\n ...base,\n colId: 'shared',\n headerName: l.colShared,\n headerTooltip: l.shared,\n width: 96,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'center' },\n valueGetter: (p) => p.data?.shared ?? false,\n cellRenderer: cell(o.renderShared),\n },\n {\n ...base,\n colId: 'actions',\n headerName: '',\n width: 180,\n minWidth: 180,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'flex-end' },\n cellRenderer: cell(o.renderActions),\n },\n ]\n}\n","import type { ReactNode } from 'react'\nimport { PencilRuler, Play, Workflow } from 'lucide-react'\nimport { Badge, Button, Card } from '@arbidocs/react/ui'\n\n/** A host catalogue entry as the category view lists it: a workflow to start from or to run. */\nexport interface WorkflowCatalogueRow {\n id: string\n title: string\n description?: string\n /** A key into the host's icon renderer. */\n icon?: string\n /** The section it is listed in: the host's word (a practice, a team, a kind of work). */\n category: string\n /** How many named steps it has. */\n stepCount: number\n /** A short note beside it (e.g. what starts it). */\n note?: string\n /** It can be started from here (a Run button). */\n runnable?: boolean\n}\n\nexport interface WorkflowCatalogueLabels {\n /** Opens the entry in the builder, as a template. */\n openInBuilder: string\n run: string\n /** How many steps an entry has. */\n stepCount: (count: number) => string\n}\n\nexport interface WorkflowCatalogueSectionsProps {\n rows: WorkflowCatalogueRow[]\n /** The order of the sections (and the ones shown). Absent: in order of first appearance. */\n categories?: string[]\n labels: WorkflowCatalogueLabels\n renderIcon?: (icon: string) => ReactNode\n onOpen?: (id: string) => void\n onRun?: (id: string) => void\n}\n\nconst slug = (text: string) => text.toLowerCase().replace(/[^a-z0-9]+/g, '-')\n\n/** The categories in order: the host's, or as the entries first name them. */\nfunction catalogueCategories(rows: WorkflowCatalogueRow[], categories?: string[]) {\n return categories ?? [...new Set(rows.map((row) => row.category))]\n}\n\n/** A host's catalogue in sections, one per category, each entry a card with Builder and Run. */\nexport function WorkflowCatalogueSections({\n rows,\n categories,\n labels,\n renderIcon,\n onOpen,\n onRun,\n}: WorkflowCatalogueSectionsProps) {\n return (\n <>\n {catalogueCategories(rows, categories).map((category) => {\n const entries = rows.filter((row) => row.category === category)\n if (!entries.length) return null\n return (\n <section\n key={category}\n className=\"space-y-3\"\n data-testid={`workflow-category-${slug(category)}`}\n >\n <h2 className=\"text-sm font-semibold text-foreground\">{category}</h2>\n <div className=\"grid gap-3 md:grid-cols-2 xl:grid-cols-3\">\n {entries.map((row) => (\n <Card\n key={row.id}\n className=\"flex flex-col gap-3 p-4\"\n data-testid={`workflow-template-${row.id}`}\n >\n <div className=\"flex items-start gap-3\">\n <span className=\"flex size-8 shrink-0 items-center justify-center rounded-lg bg-primary/10 text-primary [&_svg]:size-4\">\n {(row.icon && renderIcon?.(row.icon)) || <Workflow aria-hidden />}\n </span>\n <div className=\"min-w-0\">\n <p className=\"font-medium text-foreground\">{row.title}</p>\n {row.description && (\n <p className=\"text-xs text-muted-foreground\">{row.description}</p>\n )}\n </div>\n </div>\n <div className=\"mt-auto flex flex-wrap items-center gap-2\">\n <Badge variant=\"secondary\">{labels.stepCount(row.stepCount)}</Badge>\n {row.note && <Badge variant=\"secondary\">{row.note}</Badge>}\n <span className=\"flex-1\" />\n {onOpen && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onOpen(row.id)}\n data-testid={`workflow-template-open-${row.id}`}\n >\n <PencilRuler className=\"size-4\" aria-hidden /> {labels.openInBuilder}\n </Button>\n )}\n {onRun && row.runnable !== false && (\n <Button\n variant=\"accent\"\n size=\"sm\"\n onClick={() => onRun(row.id)}\n data-testid={`workflow-template-run-${row.id}`}\n >\n <Play className=\"size-4\" aria-hidden /> {labels.run}\n </Button>\n )}\n </div>\n </Card>\n ))}\n </div>\n </section>\n )\n })}\n </>\n )\n}\n","import type { WorkflowCatalogueLabels } from './WorkflowCatalogueSections'\n\nexport interface WorkflowListLabels {\n colName: string\n colType: string\n colTrigger: string\n colAction: string\n colAgent: string\n colStatus: string\n colShared: string\n colLastRun: string\n colNextRun: string\n shared: string\n sharedOwnerOnly: string\n deleteOwnerOnly: string\n typeSkill: string\n typeWorkflow: string\n statusActive: string\n statusPaused: string\n statusOnDemand: string\n activeSwitch: (name: string) => string\n agent: string\n myAssistant: string\n me: string\n someone: string\n never: string\n none: string\n reminder: string\n /** What a stepped workflow does: its number of steps. */\n steps: (count: number) => string\n failed: string\n lastRunFailed: string\n openLastRun: string\n editWorkflow: string\n run: string\n runLater: string\n runNow: string\n runs: string\n delete: string\n moreActions: string\n searchLabel: string\n searchPlaceholder: string\n emptyTitle: string\n emptyMessage: string\n firstRun: string\n noMatches: string\n filterAll: string\n filterSkills: string\n filterWorkflows: string\n filterActive: string\n filterPaused: string\n /** Saved workflows that start on a date or a repeat. */\n filterScheduled: string\n /** The category view's heading over the saved workflows. */\n savedWorkflows: string\n makeActive: string\n makePaused: string\n selectAll: string\n selectWorkflow: (name: string) => string\n}\n\nexport const DEFAULT_WORKFLOW_LIST_LABELS: WorkflowListLabels = {\n colName: 'Name',\n colType: 'Type',\n colTrigger: 'When',\n colAction: 'What it does',\n colAgent: 'Agent',\n colStatus: 'Active',\n colShared: 'Shared',\n colLastRun: 'Last run',\n colNextRun: 'Next run',\n shared: 'Shared with the workspace',\n sharedOwnerOnly: 'Only the creator can change who can see this',\n deleteOwnerOnly: 'Only the creator or workspace owner can delete this',\n typeSkill: 'Skill',\n typeWorkflow: 'Workflow',\n statusActive: 'Active',\n statusPaused: 'Inactive',\n statusOnDemand: 'On demand',\n activeSwitch: (name) => `Active: “${name}”`,\n agent: 'Agent',\n myAssistant: 'My assistant',\n me: 'Me',\n someone: 'Someone',\n never: 'Never',\n none: '—',\n reminder: 'Reminder',\n steps: (count) => `Workflow · ${count} ${count === 1 ? 'step' : 'steps'}`,\n failed: 'Failed',\n lastRunFailed: 'Last run failed',\n openLastRun: 'Open the task this run created',\n editWorkflow: 'Edit',\n run: 'Run',\n runLater: 'Run later',\n runNow: 'Run now',\n runs: 'Runs',\n delete: 'Delete',\n moreActions: 'More actions',\n searchLabel: 'Search workflows',\n searchPlaceholder: 'Search workflows and skills…',\n emptyTitle: 'Nothing to run yet',\n emptyMessage: 'Skills and workflows you can run will appear here.',\n firstRun: 'Run a skill now, or choose Run later to save it as a workflow that runs on its own.',\n noMatches: 'Nothing in this view.',\n filterAll: 'All',\n filterSkills: 'Skills',\n filterWorkflows: 'Workflows',\n filterActive: 'Active',\n filterPaused: 'Inactive',\n filterScheduled: 'Scheduled',\n savedWorkflows: 'Saved workflows',\n makeActive: 'Make active',\n makePaused: 'Deactivate',\n selectAll: 'Select all',\n selectWorkflow: (name) => `Select ${name}`,\n}\n\n/** The category view's catalogue cards. */\nexport const DEFAULT_WORKFLOW_CATALOGUE_LABELS: WorkflowCatalogueLabels = {\n openInBuilder: 'Builder',\n run: 'Run',\n stepCount: (count) => `${count} ${count === 1 ? 'step' : 'steps'}`,\n}\n","import { useEffect, useMemo, useRef, useState, type ReactNode } from 'react'\nimport type { GridApi } from 'ag-grid-community'\nimport { History, MoreHorizontal, Pencil, Play, Trash2, Workflow } from 'lucide-react'\nimport {\n Button,\n badgeVariants,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n Switch,\n VisibilityToggle,\n cn,\n} from '@arbidocs/react/ui'\nimport { TabHeader, type Tab } from '../../shell/TabHeader'\nimport { FilterInput } from '../../shell/FilterInput'\nimport { TriStateFilterMenu, type TriState } from '../../settings/TriStateFilterMenu'\nimport { EmptyState } from '../../components/EmptyState'\nimport { GridView } from '../../files/GridView'\nimport { SelectionBar, SelectionBarAction } from '../../files/SelectionBar'\nimport { testIdOr } from '../../chat/test-id'\nimport { PersonPill, type TaskPerson } from './PersonPill'\nimport { TaskTriggerChip, type TaskTriggerChipLabels } from './TaskTriggerChip'\nimport { createWorkflowColumns } from './workflowColumns'\nimport {\n WorkflowCatalogueSections,\n type WorkflowCatalogueLabels,\n type WorkflowCatalogueRow,\n} from './WorkflowCatalogueSections'\nimport {\n hasTrigger,\n isScheduledWorkflow,\n isSkillRow,\n workflowStatus,\n listedRunStatus,\n workflowRunStatusLabel,\n workflowStepCount,\n workflowTriggerType,\n type WorkflowListRow,\n} from './workflowRows'\nimport {\n DEFAULT_WORKFLOW_CATALOGUE_LABELS,\n DEFAULT_WORKFLOW_LIST_LABELS,\n type WorkflowListLabels,\n} from './workflowTableLabels'\n\nexport interface WorkflowsTableProps<T extends WorkflowListRow> {\n /** Everything the viewer can run: saved workflows, and skills as virtual rows (`kind: 'skill'`). */\n workflows: T[]\n isLoading?: boolean\n /** This page contains saved automations only; skills stay in their own library. */\n automationsOnly?: boolean\n /** Human summary of when a workflow starts (\"Every weekday at 9:00\", \"On document uploaded\"). */\n describeTrigger: (workflow: T) => string\n /** Friendly display of an ISO timestamp. */\n formatDate: (iso: string) => string\n /** Pause or resume a workflow that starts by itself (an on-demand one has no switch). */\n onToggleActive: (workflow: T, active: boolean) => void\n /** Share a workflow with the workspace or make it private (the toggle appears with it). */\n onToggleShared?: (workflow: T, shouldShare: boolean) => void\n /** Open the workflow in the composer (workflow-edit mode). */\n onEdit: (workflow: T) => void\n /**\n * Run it. A saved workflow just runs (its inputs are stored); a skill needs its inputs, so the host\n * opens the run dialog with that skill selected.\n */\n onRun: (row: T) => void\n /** Run a skill later: the run dialog, on its schedule view. Offered on skill rows. */\n onRunLater?: (skill: T) => void\n onDelete: (workflow: T) => void\n /** Show the tasks this workflow created. */\n onViewRuns?: (workflow: T) => void\n /** Click on a row (not on one of its controls): a skill's detail, a workflow's editor. */\n onOpenRow?: (row: T) => void\n /** Open the task a workflow's last run created. */\n onOpenThread?: (conversationId: string) => void\n /** Each workflow's latest run: the newest task it created, by workflow id. */\n /** Each automation's latest run thread, with that thread's status (it corrects a lagging result). */\n lastRuns?: Record<string, { conversationId: string; at: string; threadStatus?: string | null }>\n /** Bulk actions on the selected workflows (skills are skipped). */\n onDeleteMany?: (workflows: T[]) => void\n onToggleActiveMany?: (workflows: T[], active: boolean) => void\n /** Agent names by id, for the Agent column (falls back to \"Agent\"). */\n agentNames?: Record<string, string>\n /** Skill names by `skill_ref`, for the action cell (falls back to the reference). */\n skillNames?: Record<string, string>\n /** Task names by id, for an \"after <task>\" trigger. */\n taskNames?: Record<string, string>\n /** How an agent appears in the Agent column; defaults to the app's user pill. */\n renderPerson?: (person: TaskPerson) => ReactNode\n /**\n * The viewer edits the workspace (owner or collaborator): they may then edit, pause, resume and run a\n * workflow shared with it. A guest leaves this off.\n */\n canEditShared?: boolean\n /** The viewer owns the workspace: with the creator, the only one who deletes a workflow. Who can see it stays the creator's alone. */\n isWorkspaceOwner?: boolean\n /** Workflow id with a request in flight: its row disables its controls. */\n busyId?: string | null\n tabs?: Tab[]\n activeTabId?: string\n onTabChange?: (id: string) => void\n content?: ReactNode\n /** Actions at the end of the tab row; a function is told when the row is narrow (a phone). */\n header?: ReactNode | ((isCompact: boolean) => ReactNode)\n gridId?: string\n labels?: Partial<WorkflowListLabels>\n triggerChipLabels?: Partial<TaskTriggerChipLabels>\n testId?: string\n /**\n * The host's catalogue: when it has entries, they are listed in sections by category (each\n * entry opens in the builder or runs), then the saved workflows. Absent or empty: the saved\n * workflows alone.\n */\n catalogue?: WorkflowCatalogueRow[]\n /** The order of the categories (and the ones shown). Absent: as the entries first name them. */\n categories?: string[]\n /** Open a catalogue entry in the builder, as a template. */\n onOpenTemplate?: (id: string) => void\n /** Run a catalogue entry. Absent: no Run on the entries. */\n onRunTemplate?: (id: string) => void\n /** Draws a catalogue entry's icon name. */\n renderIcon?: (icon: string) => ReactNode\n catalogueLabels?: Partial<WorkflowCatalogueLabels>\n}\n\ntype Filter = 'all' | 'skills' | 'workflows' | 'active' | 'paused' | 'scheduled'\n/** Each group narrows on its own: kinds, then states, then how it starts. */\nconst FILTER_GROUPS: Filter[][] = [['skills', 'workflows'], ['active', 'paused'], ['scheduled']]\nconst NO_CATALOGUE: WorkflowCatalogueRow[] = []\nconst ROW_HEIGHT = 40\n\n/**\n * Everything the viewer can run, in one list: skills (they run on demand) and saved workflows (they start\n * on a date, a repeat, an event or after a task, or on demand). Each row has its type, when it starts, what\n * it does, who runs it, its status (Active or Paused with a switch; On demand has none), when it last ran\n * (linking to the task that run created) and runs next, and a visible Run. The same grid as every other\n * list in the app.\n */\nexport function WorkflowsTable<T extends WorkflowListRow>(props: WorkflowsTableProps<T>) {\n const { workflows, isLoading, busyId, header, testId } = props\n const l: WorkflowListLabels = { ...DEFAULT_WORKFLOW_LIST_LABELS, ...props.labels }\n const [filterStates, setFilterStates] = useState<Map<Filter, TriState>>(new Map())\n const [filterOpen, setFilterOpen] = useState(false)\n const [query, setQuery] = useState('')\n const [selected, setSelected] = useState<T[]>([])\n const apiRef = useRef<GridApi<T> | null>(null)\n\n const q = query.trim().toLowerCase()\n const matches = (w: T) =>\n !q ||\n `${w.name} ${w.description ?? ''} ${w.prompt ?? ''} ${w.skill_ref ?? ''}`\n .toLowerCase()\n .includes(q)\n const inFilter = (w: T, f: Filter) =>\n f === 'all' ||\n (f === 'skills' && isSkillRow(w)) ||\n (f === 'workflows' && !isSkillRow(w)) ||\n (f === 'active' && workflowStatus(w) === 'active') ||\n (f === 'paused' && workflowStatus(w) === 'paused') ||\n (f === 'scheduled' && !isSkillRow(w) && isScheduledWorkflow(w))\n const counts = useMemo(() => {\n const out = { all: 0, skills: 0, workflows: 0, active: 0, paused: 0, scheduled: 0 }\n for (const w of workflows) {\n if (!matches(w)) continue\n for (const f of Object.keys(out) as Filter[]) if (inFilter(w, f)) out[f] += 1\n }\n return out\n // matches/inFilter read only `q` and the row.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [workflows, q])\n const shown = useMemo(\n () =>\n workflows.filter((w) => {\n if (!matches(w)) return false\n for (const group of FILTER_GROUPS) {\n const included = group.filter((f) => filterStates.get(f) === 'include')\n if (included.length && !included.some((f) => inFilter(w, f))) return false\n if (group.some((f) => filterStates.get(f) === 'exclude' && inFilter(w, f))) return false\n }\n return true\n }),\n [workflows, filterStates, q]\n )\n\n const renderPerson = props.renderPerson ?? ((p: TaskPerson) => <PersonPill person={p} />)\n const actionText = (w: T): string => {\n if (w.action)\n return w.action.type === 'email_documents' ? 'Email latest documents' : 'AI Review'\n if (isSkillRow(w))\n return w.description || (w.skill_ref && props.skillNames?.[w.skill_ref]) || w.name\n if (w.skill_ref) return props.skillNames?.[w.skill_ref] ?? w.skill_ref\n // A stepped workflow runs its plan: it is no reminder, even with no prompt of its own.\n const steps = workflowStepCount(w)\n if (steps > 0) return w.prompt?.trim() || l.steps(steps)\n return w.prompt?.trim() || w.plan?.goal?.trim() || l.reminder\n }\n\n // The cells read the latest handlers and lookups through this ref, so the column definitions are\n // built once and an interaction never makes the grid rebuild them.\n const latest = useRef({ props, l, renderPerson, actionText })\n latest.current = { props, l, renderPerson, actionText }\n\n const columnDefs = useMemo(\n () =>\n createWorkflowColumns<T>({\n labels: l,\n getTriggerText: (w) =>\n isSkillRow(w) ? l.statusOnDemand : latest.current.props.describeTrigger(w),\n renderName: (w) => {\n const { l: lb } = latest.current\n const skill = isSkillRow(w)\n const text = skill\n ? latest.current.actionText(w)\n : w.description || latest.current.actionText(w)\n // A name made from the instruction is not said again under itself.\n const stem = w.name.replace(/…$/, '').trim()\n const about = text && text.trim() !== w.name.trim() && text.trim() !== stem ? text : ''\n return (\n <div className=\"min-w-0 leading-tight\">\n <span className=\"flex min-w-0 items-center gap-1.5\">\n <span\n className={cn(\n 'truncate text-sm font-normal',\n workflowStatus(w) === 'paused' && 'text-muted-foreground'\n )}\n data-testid={`workflow-name-${w.external_id}`}\n >\n {w.name}\n </span>\n {skill && (\n <span\n className=\"shrink-0 rounded-full border border-border px-1.5 text-[11px] text-muted-foreground\"\n data-testid={`workflow-type-${w.external_id}`}\n >\n {lb.typeSkill}\n </span>\n )}\n </span>\n {about && !latest.current.props.automationsOnly && (\n <p\n className=\"truncate text-xs text-muted-foreground\"\n data-testid={`workflow-action-${w.external_id}`}\n >\n {about}\n </p>\n )}\n </div>\n )\n },\n renderTrigger: (w) => {\n const { props: p } = latest.current\n const after = w.after_conversation_ext_id\n const skill = isSkillRow(w)\n return (\n <div className=\"min-w-0 leading-tight\">\n <TaskTriggerChip\n id={w.external_id}\n testId={`workflow-trigger-${w.external_id}`}\n triggerType={workflowTriggerType(w)}\n summary={skill ? '' : p.describeTrigger(w)}\n afterTaskId={after}\n afterTaskName={after ? p.taskNames?.[after] : undefined}\n labels={p.triggerChipLabels}\n />\n </div>\n )\n },\n renderStatus: (w) => {\n const { props: p, l: lb } = latest.current\n const canEdit = w.is_owner !== false || Boolean(p.canEditShared)\n return (\n <Switch\n checked={hasTrigger(w) && !isSkillRow(w) && Boolean(w.active)}\n disabled={!hasTrigger(w) || isSkillRow(w) || !canEdit || p.busyId === w.external_id}\n onCheckedChange={(next) => p.onToggleActive(w, next)}\n className=\"disabled:data-[state=unchecked]:bg-muted dark:disabled:data-[state=unchecked]:bg-muted\"\n aria-label={lb.activeSwitch(w.name)}\n data-testid={`workflow-active-${w.external_id}`}\n />\n )\n },\n renderShared: (w) => {\n const { props: p, l: lb } = latest.current\n if (!p.onToggleShared || isSkillRow(w)) return null\n // Who can see it is the creator's alone: unsharing hides it from everyone else.\n const isCreator = w.is_owner !== false\n return (\n <VisibilityToggle\n items={{ shared: w.shared ?? false }}\n onToggle={(share) => latest.current.props.onToggleShared?.(w, share)}\n disabled={!isCreator || p.busyId === w.external_id}\n disabledTooltip={lb.sharedOwnerOnly}\n showLabel={false}\n data-testid={`workflow-shared-${w.external_id}`}\n />\n )\n },\n renderLastRun: (w) => {\n const { props: p, l: lb } = latest.current\n const at = w.last_fired_at ?? p.lastRuns?.[w.external_id]?.at\n return (\n <button\n type=\"button\"\n className=\"h-full w-full truncate px-4 text-left text-sm hover:text-primary\"\n onClick={() => p.onViewRuns?.(w)}\n title=\"View run history\"\n data-testid={`workflow-last-run-${w.external_id}`}\n >\n {at ? p.formatDate(at) : lb.never}\n </button>\n )\n },\n renderResult: (w) => {\n const status = listedRunStatus(\n w.last_run_status,\n latest.current.props.lastRuns?.[w.external_id]?.threadStatus\n )\n const label = workflowRunStatusLabel(status)\n return (\n <button\n type=\"button\"\n onClick={() => latest.current.props.onViewRuns?.(w)}\n title=\"View run history\"\n className={cn(\n badgeVariants({ variant: 'outline' }),\n 'mx-4 cursor-pointer text-xs font-medium',\n status === 'failed'\n ? 'border-red-border bg-red-bg text-red-text hover:bg-red-bg/80'\n : status === 'completed' || status === 'success'\n ? 'border-green-border bg-green-bg text-green-text hover:bg-green-bg/80'\n : status\n ? 'border-primary/20 bg-primary/10 text-primary hover:bg-primary/15'\n : 'border-border bg-muted text-muted-foreground hover:bg-muted/80'\n )}\n data-testid={`workflow-result-${w.external_id}`}\n >\n {label}\n </button>\n )\n },\n renderActions: (w) => {\n const { props: p, l: lb } = latest.current\n const id = w.external_id\n const skill = isSkillRow(w)\n const busy = p.busyId === id\n const isOwner = w.is_owner !== false\n const canEdit = isOwner || Boolean(p.canEditShared)\n const canAdmin = isOwner || Boolean(p.isWorkspaceOwner)\n return (\n <div className=\"flex items-center justify-end gap-1\">\n {(skill || canEdit) && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"h-8 gap-1.5 pointer-coarse:h-11\"\n disabled={busy}\n onClick={() => p.onRun(w)}\n data-testid={`workflow-run-btn-${id}`}\n >\n <Play className=\"size-3.5\" aria-hidden />\n {lb.run}\n </Button>\n )}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 pointer-coarse:size-11\"\n aria-label={lb.moreActions}\n data-testid={`workflow-menu-${id}`}\n >\n <MoreHorizontal className=\"size-4\" aria-hidden />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {skill && p.onRunLater && (\n <DropdownMenuItem\n onSelect={() => p.onRunLater?.(w)}\n data-testid={`workflow-run-later-${id}`}\n >\n <History className=\"mr-2 size-4\" aria-hidden />\n {lb.runLater}\n </DropdownMenuItem>\n )}\n {!skill && canEdit && (\n <DropdownMenuItem\n onSelect={() => p.onEdit(w)}\n data-testid={`workflow-edit-${id}`}\n >\n <Pencil className=\"mr-2 size-4\" aria-hidden />\n {lb.editWorkflow}\n </DropdownMenuItem>\n )}\n {!skill && p.onViewRuns && (\n <DropdownMenuItem\n onSelect={() => p.onViewRuns?.(w)}\n data-testid={`workflow-runs-${id}`}\n >\n <History className=\"mr-2 size-4\" aria-hidden />\n {lb.runs}\n </DropdownMenuItem>\n )}\n {!skill && canEdit && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n disabled={busy || !canAdmin}\n onSelect={() => p.onDelete(w)}\n title={canAdmin ? undefined : lb.deleteOwnerOnly}\n className=\"text-destructive focus:text-destructive\"\n data-testid={`workflow-delete-${id}`}\n >\n <Trash2 className=\"mr-2 size-4\" aria-hidden />\n {lb.delete}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n )\n },\n }),\n // Stable on purpose: only the header texts rebuild the columns (see `latest`).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n l.colName,\n l.colType,\n l.colTrigger,\n l.colAction,\n l.colAgent,\n l.colStatus,\n l.colShared,\n l.shared,\n l.colLastRun,\n l.colNextRun,\n ]\n )\n\n // A change in the lookups the cells draw from redraws them once.\n useEffect(() => {\n apiRef.current?.refreshCells({ force: true })\n }, [\n busyId,\n props.agentNames,\n props.skillNames,\n props.taskNames,\n props.lastRuns,\n props.renderPerson,\n props.labels,\n props.canEditShared,\n props.isWorkspaceOwner,\n ])\n\n const mine = selected.filter((w) => !isSkillRow(w))\n const adminSelected = mine.filter((w) => w.is_owner !== false || props.isWorkspaceOwner)\n const editableSelected = mine.filter(\n (w) => hasTrigger(w) && (w.is_owner !== false || props.canEditShared)\n )\n const clearSelection = () => setSelected([])\n\n // The category view: the catalogue (narrowed by the text filter; a state filter is about saved\n // workflows only, so it hides the catalogue), then the saved workflows.\n const byCategory = (props.catalogue?.length ?? 0) > 0\n const stateFiltered = [...filterStates.values()].some((state) => state === 'include')\n const catalogueLabels = { ...DEFAULT_WORKFLOW_CATALOGUE_LABELS, ...props.catalogueLabels }\n const catalogue = useMemo(\n () =>\n (props.catalogue ?? NO_CATALOGUE).filter(\n (row) => !q || `${row.title} ${row.description ?? ''}`.toLowerCase().includes(q)\n ),\n [props.catalogue, q]\n )\n const list =\n workflows.length === 0 && !isLoading ? (\n <EmptyState\n icon={Workflow}\n title={l.emptyTitle}\n description={l.emptyMessage}\n testId=\"workflow-list-empty\"\n />\n ) : (\n <div className=\"min-h-0 flex-1\">\n <GridView<T>\n testId=\"workflow-grid\"\n gridId={props.gridId ?? 'workflows-grid-v2'}\n items={shown}\n columnDefs={columnDefs}\n getItemId={(w) => w.external_id}\n getRowTestId={(w) => `workflow-row-${w.external_id}`}\n isLoading={isLoading}\n showEmpty={shown.length === 0}\n emptyState={{ title: l.noMatches }}\n rowHeight={ROW_HEIGHT}\n height=\"100%\"\n onGridReady={({ api }) => {\n apiRef.current = api\n }}\n onRowClick={(row) => props.onOpenRow?.(row)}\n selection={{ mode: 'multiple', selected, onSelectionChange: setSelected }}\n gridOptions={GRID_OPTIONS as never}\n />\n </div>\n )\n\n // The search box with its state filter: in the tab row, or (narrow) across a row of its own.\n const filterBox = (className?: string) => (\n <FilterInput\n className={className}\n value={query}\n onChange={setQuery}\n fields={['text']}\n onFieldsChange={() => {}}\n hideFieldPicker\n ariaLabel={l.searchLabel}\n testIds={{ input: 'workflow-search' }}\n filter={\n <TriStateFilterMenu\n testId=\"automations-filter-button\"\n open={filterOpen}\n onOpenChange={setFilterOpen}\n filterStates={filterStates}\n onFiltersChange={setFilterStates}\n triggerClassName=\"flex h-5 items-center gap-0.5 rounded px-1 text-muted-foreground hover:text-foreground pointer-coarse:h-11! pointer-coarse:min-w-11 pointer-coarse:justify-center\"\n renderChevron\n disableHoverOpen\n options={[\n ...(!props.automationsOnly\n ? [\n { id: 'skills' as const, label: l.filterSkills, count: counts.skills },\n {\n id: 'workflows' as const,\n label: l.filterWorkflows,\n count: counts.workflows,\n },\n ]\n : []),\n { id: 'active', label: l.filterActive, count: counts.active },\n { id: 'paused', label: l.filterPaused, count: counts.paused },\n { id: 'scheduled', label: l.filterScheduled, count: counts.scheduled },\n ]}\n />\n }\n />\n )\n\n return (\n <div\n className=\"flex min-h-0 flex-1 flex-col\"\n data-testid={testIdOr(testId, { testId: 'workflow-list' })}\n >\n <TabHeader\n testId=\"automations-tab-header\"\n tabs={[\n {\n id: 'automations',\n label: '',\n count: shown.length,\n countIcon: <Workflow className=\"size-3.5\" />,\n countPlacement: 'leading',\n presentation: 'count',\n hasActiveFilters: !!q || [...filterStates.values()].some(Boolean),\n },\n ...(props.tabs ?? []),\n ]}\n activeTabId={props.activeTabId ?? 'automations'}\n onTabChange={props.onTabChange ?? (() => {})}\n // A narrow row (a phone) gives the filter a row of its own under the tabs, so the host's\n // tabs and the actions keep their room in the tab row.\n firstTabContent={(isCompact) => (isCompact ? null : filterBox())}\n belowContent={(isCompact) => (isCompact ? filterBox('w-full') : null)}\n rightContent={header}\n />\n {props.content ? (\n props.content\n ) : byCategory ? (\n <div\n className=\"min-h-0 flex-1 space-y-8 overflow-auto p-4\"\n data-testid=\"workflow-categories\"\n >\n {!stateFiltered && (\n <WorkflowCatalogueSections\n rows={catalogue}\n categories={props.categories}\n labels={catalogueLabels}\n renderIcon={props.renderIcon}\n onOpen={props.onOpenTemplate}\n onRun={props.onRunTemplate}\n />\n )}\n <section className=\"space-y-3\" data-testid=\"workflow-category-saved\">\n <h2 className=\"flex items-center gap-2 text-sm font-semibold text-foreground\">\n <Workflow className=\"size-4 text-primary\" aria-hidden /> {l.savedWorkflows}\n </h2>\n <div className=\"flex h-[min(32rem,70dvh)] min-h-64 flex-col\">{list}</div>\n </section>\n </div>\n ) : (\n list\n )}\n {!props.content && (\n <SelectionBar count={selected.length} onClear={clearSelection}>\n {(isCompact) => (\n <>\n {props.onToggleActiveMany && (\n <>\n <SelectionBarAction\n icon={Play}\n label={l.makeActive}\n onClick={() => {\n props.onToggleActiveMany?.(editableSelected, true)\n clearSelection()\n }}\n disabled={editableSelected.length === 0}\n isCompact={isCompact}\n testId=\"workflow-bulk-activate\"\n />\n <SelectionBarAction\n icon={Workflow}\n label={l.makePaused}\n onClick={() => {\n props.onToggleActiveMany?.(editableSelected, false)\n clearSelection()\n }}\n disabled={editableSelected.length === 0}\n isCompact={isCompact}\n testId=\"workflow-bulk-pause\"\n />\n </>\n )}\n {props.onDeleteMany && (\n <SelectionBarAction\n icon={Trash2}\n label={l.delete}\n onClick={() => {\n props.onDeleteMany?.(adminSelected)\n clearSelection()\n }}\n disabled={adminSelected.length === 0}\n isCompact={isCompact}\n className=\"border-red-border text-red-text hover:bg-red-bg hover:text-red-text\"\n testId=\"workflow-bulk-delete\"\n />\n )}\n </>\n )}\n </SelectionBar>\n )}\n </div>\n )\n}\n\nconst GRID_OPTIONS = { suppressClickEdit: true }\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/SharedCell.tsx"],"names":["jsx","VisibilityToggle","memo"],"mappings":";;;;;;;AA6BA,SAAS,mBAAA,CAA0C;AAAA,EACjD,IAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,eAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,SAAA,IAAa,KAAA;AAElD,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,yCAAA;AAAA,MACV,aAAA,EAAa,CAAA,YAAA,EAAe,IAAA,CAAK,WAAW,CAAA,CAAA;AAAA,MAE5C,QAAA,kBAAAA,cAAA;AAAA,QAACC,mBAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,IAAA;AAAA,UACP,QAAA;AAAA,UACA,QAAA;AAAA,UACA,eAAA;AAAA,UACA,SAAA,EAAW,KAAA;AAAA,UACX,aAAA;AAAA,UACA,eAAA;AAAA,UACA,cAAA;AAAA,UACA,aAAA,EAAa,CAAA,EAAG,QAAA,GAAW,qBAAA,GAAwB,uBAAuB,CAAA;AAAA;AAAA;AAC5E;AAAA,GACF;AAEJ;AAGA,SAAS,aAAA,CACP,WACA,SAAA,EACS;AACT,EAAA,IAAI,UAAU,IAAA,CAAK,WAAA,KAAgB,SAAA,CAAU,IAAA,CAAK,aAAa,OAAO,KAAA;AACtE,EAAA,IAAI,UAAU,IAAA,CAAK,MAAA,KAAW,SAAA,CAAU,IAAA,CAAK,QAAQ,OAAO,KAAA;AAC5D,EAAA,IAAI,UAAU,IAAA,CAAK,SAAA,KAAc,SAAA,CAAU,IAAA,CAAK,WAAW,OAAO,KAAA;AAClE,EAAA,IAAI,SAAA,CAAU,QAAA,KAAa,SAAA,CAAU,QAAA,EAAU,OAAO,KAAA;AACtD,EAAA,IAAI,SAAA,CAAU,eAAA,KAAoB,SAAA,CAAU,eAAA,EAAiB,OAAO,KAAA;AACpE,EAAA,IAAI,SAAA,CAAU,aAAA,KAAkB,SAAA,CAAU,aAAA,EAAe,OAAO,KAAA;AAChE,EAAA,IAAI,SAAA,CAAU,eAAA,KAAoB,SAAA,CAAU,eAAA,EAAiB,OAAO,KAAA;AACpE,EAAA,IAAI,SAAA,CAAU,cAAA,KAAmB,SAAA,CAAU,cAAA,EAAgB,OAAO,KAAA;AAElE,EAAA,OAAO,IAAA;AACT;AAEO,IAAM,UAAA,GAAaC,UAAA,CAAK,mBAAA,EAAqB,aAAa","file":"chunk-ZPPMAL5P.cjs","sourcesContent":["/**\n * SharedCell Component\n *\n * Generic grid cell renderer for shared/private visibility state.\n * Works with any entity that has an external_id and shared/is_shared field.\n * Uses VisibilityToggle for consistent UI.\n */\n\nimport { memo } from 'react'\nimport { VisibilityToggle } from '@arbidocs/react/ui'\n\nexport interface SharedItem {\n external_id: string\n shared?: boolean | null\n is_shared?: boolean | null\n}\n\nexport interface SharedCellProps<T extends SharedItem> {\n item: T\n onToggle: (shouldShare: boolean) => void\n disabled?: boolean\n disabledTooltip?: string\n /** Replaces the default tooltips (e.g. documents say who can see the file). */\n tooltipActive?: string\n tooltipInactive?: string\n /** The host's name for a workspace, used in the default tooltips. */\n workspaceLabel?: string\n}\n\nfunction SharedCellComponent<T extends SharedItem>({\n item,\n onToggle,\n disabled = false,\n disabledTooltip,\n tooltipActive,\n tooltipInactive,\n workspaceLabel,\n}: SharedCellProps<T>) {\n const isShared = item.shared ?? item.is_shared ?? false\n\n return (\n <div\n className=\"flex justify-center items-center h-full\"\n data-testid={`shared-cell-${item.external_id}`}\n >\n <VisibilityToggle\n items={item}\n onToggle={onToggle}\n disabled={disabled}\n disabledTooltip={disabledTooltip}\n showLabel={false}\n tooltipActive={tooltipActive}\n tooltipInactive={tooltipInactive}\n workspaceLabel={workspaceLabel}\n data-testid={`${isShared ? 'active-share-button' : 'inactive-share-button'}`}\n />\n </div>\n )\n}\n\n// Type-safe memo wrapper\nfunction arePropsEqual<T extends SharedItem>(\n prevProps: SharedCellProps<T>,\n nextProps: SharedCellProps<T>\n): boolean {\n if (prevProps.item.external_id !== nextProps.item.external_id) return false\n if (prevProps.item.shared !== nextProps.item.shared) return false\n if (prevProps.item.is_shared !== nextProps.item.is_shared) return false\n if (prevProps.disabled !== nextProps.disabled) return false\n if (prevProps.disabledTooltip !== nextProps.disabledTooltip) return false\n if (prevProps.tooltipActive !== nextProps.tooltipActive) return false\n if (prevProps.tooltipInactive !== nextProps.tooltipInactive) return false\n if (prevProps.workspaceLabel !== nextProps.workspaceLabel) return false\n // Note: onToggle is not compared as it should be stable (useCallback)\n return true\n}\n\nexport const SharedCell = memo(SharedCellComponent, arePropsEqual) as typeof SharedCellComponent\n"]}