@arbidocs/blocks 0.5.48 → 0.5.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DocumentReviewCard-DLR4XOIZ.cjs +516 -0
- package/dist/DocumentReviewCard-DLR4XOIZ.cjs.map +1 -0
- package/dist/DocumentReviewCard-Y67FFRPC.js +514 -0
- package/dist/DocumentReviewCard-Y67FFRPC.js.map +1 -0
- package/dist/calls/connected/ConnectedCallPage.d.ts +23 -0
- package/dist/calls/connected/index.d.ts +1 -0
- package/dist/calls/index.cjs +172 -0
- package/dist/calls/index.cjs.map +1 -1
- package/dist/calls/index.js +175 -4
- package/dist/calls/index.js.map +1 -1
- package/dist/chunk-3Y4UTPCD.js +1521 -0
- package/dist/chunk-3Y4UTPCD.js.map +1 -0
- package/dist/chunk-5TDGVOR5.js +142 -0
- package/dist/chunk-5TDGVOR5.js.map +1 -0
- package/dist/{chunk-QKOFQMAY.cjs → chunk-5YX3R6CK.cjs} +5 -4
- package/dist/chunk-5YX3R6CK.cjs.map +1 -0
- package/dist/chunk-63IH7V5F.js +13 -0
- package/dist/chunk-63IH7V5F.js.map +1 -0
- package/dist/chunk-C3VTWM74.js +123 -0
- package/dist/chunk-C3VTWM74.js.map +1 -0
- package/dist/chunk-DVE6NNZ2.cjs +15 -0
- package/dist/chunk-DVE6NNZ2.cjs.map +1 -0
- package/dist/{chunk-XBITXJZU.js → chunk-EQ433QPZ.js} +4 -3
- package/dist/chunk-EQ433QPZ.js.map +1 -0
- package/dist/{chunk-UAEYU2NN.cjs → chunk-H32DV7XS.cjs} +2 -136
- package/dist/chunk-H32DV7XS.cjs.map +1 -0
- package/dist/{chunk-EARQ2CUX.js → chunk-IQ3VDTR7.js} +6 -119
- package/dist/chunk-IQ3VDTR7.js.map +1 -0
- package/dist/chunk-NUQ3RY7M.cjs +130 -0
- package/dist/chunk-NUQ3RY7M.cjs.map +1 -0
- package/dist/{chunk-V2UQR7P6.cjs → chunk-QLY22ZZW.cjs} +9 -8
- package/dist/chunk-QLY22ZZW.cjs.map +1 -0
- package/dist/chunk-REH7PX3N.cjs +145 -0
- package/dist/chunk-REH7PX3N.cjs.map +1 -0
- package/dist/{chunk-VQHXVY26.cjs → chunk-RTS3B2W7.cjs} +2 -121
- package/dist/chunk-RTS3B2W7.cjs.map +1 -0
- package/dist/chunk-S7B5E3RU.cjs +1553 -0
- package/dist/chunk-S7B5E3RU.cjs.map +1 -0
- package/dist/{chunk-WZ63HE2C.js → chunk-XRL4R2TT.js} +4 -136
- package/dist/chunk-XRL4R2TT.js.map +1 -0
- package/dist/{chunk-E6EYRQC2.js → chunk-YYZH6VRP.js} +6 -5
- package/dist/chunk-YYZH6VRP.js.map +1 -0
- package/dist/connect/index.cjs +464 -1861
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +55 -1538
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +39 -39
- package/dist/connect/viewer.js +1 -1
- package/dist/connection/config/useDeveloperConfig.d.ts +1 -1
- package/dist/connection/files/fields/DocumentFieldParts.d.ts +2 -1
- package/dist/connection/files/fields/documentField.d.ts +1 -0
- package/dist/connection/files/grid/cells.d.ts +1 -0
- package/dist/connection/files/page/ConnectedFilesPage.d.ts +5 -2
- package/dist/connection/files/review/DocumentReviewCard.d.ts +32 -0
- package/dist/connection/files/review/useDocumentValueWrites.d.ts +15 -0
- package/dist/connection/files/review/useReviewColumns.d.ts +33 -0
- package/dist/files/cells/RelatedDocsCell.d.ts +3 -1
- package/dist/files/index.cjs +221 -221
- package/dist/files/index.js +1 -1
- package/dist/home/index.cjs +7 -6
- package/dist/home/index.cjs.map +1 -1
- package/dist/home/index.js +2 -1
- package/dist/home/index.js.map +1 -1
- package/dist/index.cjs +82 -82
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +5 -8
- package/dist/index.js.map +1 -1
- package/dist/workspaces/index.cjs +29 -28
- package/dist/workspaces/index.cjs.map +1 -1
- package/dist/workspaces/index.js +4 -3
- package/dist/workspaces/index.js.map +1 -1
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/chunk-E6EYRQC2.js.map +0 -1
- package/dist/chunk-EARQ2CUX.js.map +0 -1
- package/dist/chunk-QKOFQMAY.cjs.map +0 -1
- package/dist/chunk-UAEYU2NN.cjs.map +0 -1
- package/dist/chunk-V2UQR7P6.cjs.map +0 -1
- package/dist/chunk-VQHXVY26.cjs.map +0 -1
- package/dist/chunk-WZ63HE2C.js.map +0 -1
- package/dist/chunk-XBITXJZU.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/connection/offline/ConnectedPendingSyncDialog.tsx","../src/connection/files/DocumentSyncGlyph.tsx","../src/connection/files/explorer/FileTiles.tsx","../src/connection/files/grid/documentStatus.tsx","../src/connection/files/grid/cells.tsx","../src/connection/files/fields/DocumentUser.tsx","../src/connection/files/fields/useMemberLookup.ts","../src/connection/files/store.ts","../src/connection/files/grid/ConnectedTagEntity.tsx","../src/connection/files/fields/DocumentFieldParts.tsx","../src/connection/files/fields/documentField.tsx"],"names":["create","jsx","useIsOnline","usePendingSyncItems","useCancelManyPendingSync","useState","useMemo","formatRelativeTime","Dialog","jsxs","DialogContent","DialogHeader","DialogTitle","RefreshCw","WifiOff","DialogDescription","ModalSection","CircleCheck","GridView","DialogFooter","Button","RotateCcw","useOfflineDocumentIds","cn","ArrowDownToLine","IN_FLIGHT_DOCUMENT_STATUSES","FINISHED_DOCUMENT_STATUSES","resolveDocumentStatus","useProcessingTask","CheckCircle","FailedStageIcon","SkipForward","FileX","AlertTriangle","StatusPill","VisibilityIcon","getEntityLabel","visibilityAudience","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","formatFolderSegment","hasFolderProviderIcon","FolderProviderIcon","ExplorerFolderTile","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","useDocumentsSupport","useDocumentHostActions","Fragment","useWorkspaceUsers","persist","createJSONStorage","DOCUMENTS_ROW_HEIGHT_INITIAL","getTagTypeIcon","EntityTooltip","EntityTooltipHeader","Badge","VisibilityToggle","SharedTagEntity","FieldAttribution","FieldLabelsSelect","formatDocDate","getDocumentDate","FieldValue","friendlyFileType","DebouncedInput","value","FieldFolderSelect","FieldFolderValue","isLabelTag","tag","isAnnotationTag","FieldNativeSelect","Textarea","FieldWithAttribution"],"mappings":"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","file":"chunk-S7B5E3RU.cjs","sourcesContent":["/**\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'\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 className={`inline-flex items-center gap-1.5 text-sm font-medium ${meta.tone}`}>\n <span className={`h-1.5 w-1.5 rounded-full ${meta.dot}`} />\n {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 * 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 * 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). */\nexport function 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'\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=\"base\"\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","/**\n * A person by a document or a field (who made a document, a field, a value): the host's own\n * rendering when it has one (`DocumentsSupport.renderUser`: presence, their card), else the kit's\n * avatar, which opens them when the host can.\n */\n\nimport { useDocumentHostActions, useDocumentsSupport, type DocumentPerson } from '@arbidocs/react'\nimport { UserEntity, getUserDisplayName } from '@arbidocs/react/ui'\nimport { UserAvatar } from '../grid/cells'\n\nexport function DocumentUser({\n user,\n tooltip = true,\n variant = 'icon',\n}: {\n user: DocumentPerson | undefined\n /** Whether hovering shows their card (the host's rendering). */\n tooltip?: boolean\n /** Their face alone (`icon`) or their face and name (`pill`). */\n variant?: 'icon' | 'pill'\n}) {\n const { renderUser } = useDocumentsSupport()\n const { openUser } = useDocumentHostActions()\n if (user && renderUser) return <>{renderUser(user, { tooltip, variant })}</>\n if (user && variant === 'pill')\n return (\n <UserEntity\n size=\"sm\"\n variant=\"pill\"\n displayName={getUserDisplayName(user)}\n picture={user.picture}\n initials={`${user.given_name?.charAt(0) ?? ''}${user.family_name?.charAt(0) ?? ''}`}\n />\n )\n return <UserAvatar user={user} onOpen={openUser} />\n}\n","import { useCallback } from 'react'\nimport { useWorkspaceUsers, type DocumentPerson } from '@arbidocs/react'\n\n/** Finds a workspace member by id (undefined for anyone else, or no id). */\nexport function useMemberLookup(): (\n userId: string | null | undefined\n) => DocumentPerson | undefined {\n const { data: members = [] } = useWorkspaceUsers()\n return useCallback(\n (userId) => (userId ? members.find((m) => m.user.external_id === userId)?.user : undefined),\n [members]\n )\n}\n","/**\n * The Files kits' own state: empty folders the user created (a folder exists only through its\n * documents, so a new one is a placeholder until something is moved into it), per workspace, for\n * the session (kept in `sessionStorage`, so a reload keeps them).\n */\n\nimport type { GridState } from 'ag-grid-community'\nimport { create } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\nimport { DOCUMENTS_ROW_HEIGHT_INITIAL } from '../../files/documentColumns'\nimport type { ExplorerFolder } from '../../files/folders/folderPaths'\n\ninterface FilesState {\n /** Placeholder folder paths per workspace. */\n pendingFolders: Readonly<Record<string, readonly string[]>>\n addPendingFolder: (workspaceId: string, path: string) => void\n removePendingFolder: (workspaceId: string, path: string) => void\n}\n\nexport const useFilesStore = create<FilesState>()(\n persist(\n (set) => ({\n pendingFolders: {},\n addPendingFolder: (workspaceId, path) =>\n set((state) => {\n const current = state.pendingFolders[workspaceId] ?? []\n if (current.includes(path)) return state\n return { pendingFolders: { ...state.pendingFolders, [workspaceId]: [...current, path] } }\n }),\n removePendingFolder: (workspaceId, path) =>\n set((state) => {\n const current = state.pendingFolders[workspaceId] ?? []\n if (!current.includes(path)) return state\n return {\n pendingFolders: {\n ...state.pendingFolders,\n [workspaceId]: current.filter((p) => p !== path),\n },\n }\n }),\n }),\n {\n name: 'arbi_explorer_pending_folders',\n storage: createJSONStorage(() => sessionStorage),\n partialize: (state) => ({ pendingFolders: state.pendingFolders }),\n }\n )\n)\n\nconst NONE: readonly string[] = []\n\n/** A workspace's placeholder folders. */\nexport function usePendingFolders(workspaceId: string | null | undefined): readonly string[] {\n return useFilesStore(\n (state) => (workspaceId ? state.pendingFolders[workspaceId] : undefined) ?? NONE\n )\n}\n\n/** How the files page shows the documents: a table, the explorer, review one by one, or search. */\nexport type FilesViewMode = 'grid' | 'explorer' | 'navigator' | 'search'\n\n/** The files page's own preferences key (`ConnectedFilesPage` `prefsKey`). */\nexport const FILES_PREFS_KEY = 'files'\nconst DEFAULT_VIEW_MODE: FilesViewMode = 'explorer'\n\ninterface FilesPrefsState {\n /** The documents list's tri-state filters (filter id → include / exclude / off). */\n documentFilters: Readonly<Record<string, 'include' | 'exclude' | null>>\n setDocumentFilters: (filters: Record<string, 'include' | 'exclude' | null>) => void\n /**\n * Each files page's view, by its `prefsKey` (a page that is the same kit in another role, e.g.\n * a tabular review in the table view, keeps its own). Absent: that page's default.\n */\n viewModes: Readonly<Record<string, FilesViewMode>>\n /** Set a page's view (default: the files page's). */\n setViewMode: (mode: FilesViewMode, prefsKey?: string) => void\n /** The table's row height (density). */\n rowHeight: number\n setRowHeight: (height: number) => void\n}\n\n/** The Files kits' preferences, kept on this device (`localStorage`) across sessions. */\nexport const useFilesPrefs = create<FilesPrefsState>()(\n persist(\n (set) => ({\n documentFilters: {},\n setDocumentFilters: (documentFilters) => set({ documentFilters }),\n viewModes: {},\n setViewMode: (viewMode, prefsKey = FILES_PREFS_KEY) =>\n set((state) =>\n state.viewModes[prefsKey] === viewMode\n ? state\n : { viewModes: { ...state.viewModes, [prefsKey]: viewMode } }\n ),\n // New users start at the compact minimum (more rows at once).\n rowHeight: DOCUMENTS_ROW_HEIGHT_INITIAL,\n setRowHeight: (rowHeight) => set({ rowHeight }),\n }),\n {\n name: 'arbi_files_prefs',\n storage: createJSONStorage(() => localStorage),\n version: 1,\n // Version 0 kept one view for every files page: it becomes the files page's own.\n migrate: (persisted, version) => {\n const state = (persisted ?? {}) as Record<string, unknown>\n if (version >= 1) return state as Partial<FilesPrefsState>\n const { viewMode, ...rest } = state\n return {\n ...rest,\n viewModes: viewMode ? { [FILES_PREFS_KEY]: viewMode as FilesViewMode } : {},\n } as Partial<FilesPrefsState>\n },\n partialize: (state) => ({\n documentFilters: state.documentFilters,\n viewModes: state.viewModes,\n rowHeight: state.rowHeight,\n }),\n }\n )\n)\n\n/** A files page's view (`prefsKey`, default the files page's), else its `defaultViewMode`. */\nexport function filesViewMode(\n state: Pick<FilesPrefsState, 'viewModes'>,\n prefsKey: string = FILES_PREFS_KEY,\n defaultViewMode: FilesViewMode = DEFAULT_VIEW_MODE\n): FilesViewMode {\n return state.viewModes[prefsKey] ?? defaultViewMode\n}\n\n/** An AI review run: the fields, the documents, and which of them the server finished. */\nexport interface AiReviewRun {\n tags: { id: string; name: string }[]\n docIds: string[]\n /** The documents the server finished (a finished cell with no value will not fill). */\n finishedDocIds?: string[]\n /** It replaces values already there: a cell shows its new value only once finished. */\n replacing?: boolean\n}\n\ninterface AiReviewState {\n /** The AI review dialog is open. */\n open: boolean\n /** The run on screen, kept after closing so \"View results\" can bring the answers back. */\n run: AiReviewRun | null\n setOpen: (open: boolean) => void\n setRun: (run: AiReviewRun | null) => void\n /** The server finished these documents of the run (with or without a value). */\n markFinished: (docIds: string[]) => void\n}\n\n/** The AI review dialog and its run, reachable from outside React (a finished-run notice). */\nexport const useAiReviewStore = create<AiReviewState>()((set) => ({\n open: false,\n run: null,\n setOpen: (open) => set({ open }),\n setRun: (run) => set({ run }),\n markFinished: (docIds) =>\n set((state) => {\n const run = state.run\n if (!run) return state\n const finished = new Set(run.finishedDocIds ?? [])\n const added = docIds.filter((id) => run.docIds.includes(id) && !finished.has(id))\n if (added.length === 0) return state\n return { run: { ...run, finishedDocIds: [...finished, ...added] } }\n }),\n}))\n\ninterface GridStatesState {\n /** AG Grid's saved state (columns, widths, sort) per grid id. */\n gridStates: Readonly<Record<string, GridState>>\n setGridState: (gridId: string, state: GridState) => void\n}\n\n/** The Files grids' saved state, kept on this device, for hosts that keep none of their own. */\nexport const useFilesGridStates = create<GridStatesState>()(\n persist(\n (set) => ({\n gridStates: {},\n setGridState: (gridId, state) =>\n set((current) => ({ gridStates: { ...current.gridStates, [gridId]: state } })),\n }),\n { name: 'arbi_files_grids', storage: createJSONStorage(() => localStorage) }\n )\n)\n\n/** A document the Delete confirmation asks about. */\nexport interface DeleteRequestDocument {\n external_id: string\n file_name?: string | null\n doc_metadata?: { title?: string | null } | null\n}\n\ninterface FilesDialogsState {\n /** Move the selection (or `folder`) to a folder. */\n move: { folder: ExplorerFolder | null } | null\n openMove: (folder?: ExplorerFolder | null) => void\n closeMove: () => void\n /** Edit the selection's labels and fields. */\n bulkTagsOpen: boolean\n setBulkTagsOpen: (open: boolean) => void\n /** Confirm deleting one document. */\n deleteRequest: DeleteRequestDocument | null\n requestDelete: (doc: DeleteRequestDocument | null) => void\n /** Export, copy or move the selection (the page's own dialog, when the host has none). */\n exportOpen: boolean\n setExportOpen: (open: boolean) => void\n}\n\n/** The files page's dialogs, also opened from outside it (commands, the viewer's related files). */\nexport const useFilesDialogs = create<FilesDialogsState>()((set) => ({\n move: null,\n openMove: (folder = null) => set({ move: { folder } }),\n closeMove: () => set({ move: null }),\n bulkTagsOpen: false,\n setBulkTagsOpen: (bulkTagsOpen) => set({ bulkTagsOpen }),\n deleteRequest: null,\n requestDelete: (deleteRequest) => set({ deleteRequest }),\n exportOpen: false,\n setExportOpen: (exportOpen) => set({ exportOpen }),\n}))\n","/**\n * A label or field as a pill, with the rich hover card: its type, how many documents carry it, who\n * can see it (a toggle for its owner), and who created and last changed it. The pill itself is the\n * shared `TagEntity` of `@arbidocs/react/ui`; this adds what it reads from the session.\n */\n\nimport { useMemo } from 'react'\nimport { useTags, useWorkspaceUsers } from '@arbidocs/react'\nimport type { TagResponse } from '@arbidocs/sdk/browser'\nimport {\n Badge,\n formatFriendlyDate,\n getEntityColor,\n getTagTypeIcon,\n getTagTypeLabel,\n TagEntity as SharedTagEntity,\n VisibilityToggle,\n} from '@arbidocs/react/ui'\nimport { EntityTooltip, EntityTooltipHeader } from '../../../components/EntityTooltip'\nimport { UserAvatar } from './cells'\n\nexport interface ConnectedTagEntityProps {\n tag: TagResponse\n size?: 'sm' | 'md' | 'lg'\n className?: string\n onClick?: (e: React.MouseEvent) => void\n /** Whether to show the detailed tooltip (default: true) */\n showTooltip?: boolean\n /** Whether current user can edit this tag (owner) */\n canEdit?: boolean\n /** Callback when edit is requested (clicking visibility toggle as owner) */\n onEditClick?: () => void\n}\n\nexport function ConnectedTagEntity({\n tag,\n size = 'md',\n className = '',\n onClick,\n showTooltip = true,\n canEdit = false,\n onEditClick,\n}: ConnectedTagEntityProps) {\n // Get fresh tag data from React Query cache for accurate doctag_count\n const { data: workspaceTags } = useTags()\n\n // The workspace's members: who created and last changed it.\n const { data: members = [] } = useWorkspaceUsers()\n const byId = (id: string | null | undefined) =>\n id ? members.find((m) => m.user.external_id === id)?.user : undefined\n\n // Look up fresh tag from query cache, fall back to prop if not found\n const freshTag = useMemo(() => {\n if (!workspaceTags) return tag\n const found = workspaceTags.find((t) => t.external_id === tag.external_id)\n return found || tag\n }, [workspaceTags, tag])\n\n // Look up creator and updater from the people you know\n const creator = byId(tag.created_by_ext_id) ?? null\n const updater = byId(tag.updated_by_ext_id) ?? null\n\n const Icon = getTagTypeIcon(tag.tag_type.type)\n const tagColor = getEntityColor(tag.external_id, 'medium')\n\n // Handle visibility toggle click for owner\n const handleVisibilityToggle = () => {\n if (canEdit && onEditClick) {\n onEditClick()\n }\n }\n\n // Rich, store-coupled tooltip — injected into the shared pill.\n const tooltipContent = showTooltip ? (\n <EntityTooltip>\n <EntityTooltipHeader\n lead={\n <span\n className=\"inline-flex items-center justify-center rounded-md text-white p-1\"\n style={{ backgroundColor: tagColor }}\n >\n <Icon size={16} />\n </span>\n }\n title={tag.name}\n />\n\n <div className=\"flex flex-col gap-1.5 text-sm\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Type:</span>\n <span>{getTagTypeLabel(tag.tag_type.type)}</span>\n </div>\n\n {/* Files count - use freshTag for accurate count */}\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Documents:</span>\n <Badge variant=\"secondary\" className=\"h-5 min-w-[20px] justify-center\">\n {freshTag.doctag_count ?? 0}\n </Badge>\n </div>\n\n {/* Visibility with toggle */}\n <div className=\"flex items-center gap-2\">\n <VisibilityToggle\n items={freshTag}\n onToggle={handleVisibilityToggle}\n disabled={!canEdit}\n showLabel={false}\n showTooltip={canEdit}\n tooltipActive=\"Click to edit\"\n tooltipInactive=\"Click to edit\"\n />\n <span className=\"text-muted-foreground\">{freshTag.shared ? 'Shared' : 'Private'}</span>\n </div>\n\n {/* Created at/by */}\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Created:</span>\n <span>{formatFriendlyDate(tag.created_at)}</span>\n <span className=\"text-muted-foreground\">by</span>\n <UserAvatar user={creator ?? undefined} />\n </div>\n\n {/* Updated at/by */}\n {tag.updated_at && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Updated:</span>\n <span>{formatFriendlyDate(tag.updated_at)}</span>\n {updater && (\n <>\n <span className=\"text-muted-foreground\">by</span>\n <UserAvatar user={updater} />\n </>\n )}\n </div>\n )}\n </div>\n </EntityTooltip>\n ) : undefined\n\n return (\n <SharedTagEntity\n tag={{ ...tag, color: tagColor }}\n size={size}\n className={className}\n onClick={onClick}\n showTooltip={showTooltip}\n tooltipContent={tooltipContent}\n />\n )\n}\n","/**\n * The parts of the review form's fields: the folder picker, the related documents, who last set a\n * value, and the labels picker.\n */\n\nimport { useMemo } from 'react'\nimport type { TagResponse } from '@arbidocs/sdk/browser'\nimport { useOpenViewerDocumentId, type RelatedDocs, type WorkspaceDocument } from '@arbidocs/react'\nimport { formatFriendlyDate, getEntityColor } from '@arbidocs/react/ui'\nimport { FieldAttribution, FieldLabelsSelect } from '../../../files/FieldParts'\nimport type { LabelOption } from '../../../files/cells/LabelMultiSelect'\nimport { FolderCommandList } from '../../../files/FolderPicker'\nimport { RelatedDocumentsCell, useDocumentFolders } from '../grid/cells'\nimport { DocumentUser } from './DocumentUser'\nimport { useMemberLookup } from './useMemberLookup'\n\ntype DocTag = NonNullable<WorkspaceDocument['doctags']>[number]\n\n/** The workspace's folders to move the document to. */\nexport function FolderPicker({\n documents,\n value,\n onSelect,\n}: {\n documents: WorkspaceDocument[]\n value: string | null | undefined\n onSelect: (folder: string | null) => void\n}) {\n const folders = useDocumentFolders(documents, value)\n return (\n <FolderCommandList folders={folders} value={value} onSelect={onSelect} showRemove={!!value} />\n )\n}\n\n/** The related documents, the one open in the viewer marked. */\nexport function RelatedDocuments({\n doc,\n related,\n onOpen,\n onDelete,\n canDelete,\n onCompare,\n}: {\n doc: WorkspaceDocument\n related: RelatedDocs<WorkspaceDocument>\n onOpen?: (docId: string) => void\n onDelete?: (docId: string) => void\n canDelete?: (doc: WorkspaceDocument) => boolean\n onCompare?: (docId: string, otherDocId: string) => void\n}) {\n const viewingDocumentId = useOpenViewerDocumentId()\n return (\n <RelatedDocumentsCell\n currentDoc={doc}\n related={related}\n viewingDocumentId={viewingDocumentId}\n onDocumentClick={(id) => onOpen?.(id)}\n onDelete={(other) => onDelete?.(other.external_id)}\n canDelete={canDelete}\n onCompare={onCompare}\n />\n )\n}\n\n/** Who last set a value, and when: shown on hover. */\nexport function DocTagAttribution({ doctag }: { doctag: DocTag }) {\n const memberById = useMemberLookup()\n const creator = memberById(doctag.created_by_ext_id)\n const updater =\n doctag.updated_by_ext_id && doctag.updated_by_ext_id !== doctag.created_by_ext_id\n ? memberById(doctag.updated_by_ext_id)\n : undefined\n const lastUser = updater || creator\n if (!lastUser) return null\n const lines = [\n creator &&\n `Created ${formatFriendlyDate(doctag.created_at)} by ${creator.given_name || creator.email}`,\n updater &&\n `Updated ${formatFriendlyDate(doctag.updated_at)} by ${updater.given_name || updater.email}`,\n ].filter((line): line is string => !!line)\n return (\n <FieldAttribution\n avatar={<DocumentUser user={lastUser} tooltip={false} />}\n date={formatFriendlyDate(updater ? doctag.updated_at : doctag.created_at)}\n lines={lines}\n />\n )\n}\n\n/** The labels as a picker: toggle one, or create one by name and apply it. */\nexport function LabelsCombobox({\n labelTags,\n appliedTagIds,\n onToggle,\n onCreateAndApply,\n}: {\n labelTags: TagResponse[]\n appliedTagIds: ReadonlySet<string>\n onToggle: (tag: TagResponse) => void\n onCreateAndApply?: (name: string) => void\n}) {\n const options: LabelOption[] = useMemo(\n () =>\n labelTags.map((t) => ({\n id: t.external_id,\n name: t.name,\n color: getEntityColor(t.external_id, 'medium'),\n })),\n [labelTags]\n )\n\n // An existing label of that name (any case) is applied rather than made again.\n const handleCreate = (name: string) => {\n const trimmed = name.trim()\n if (!trimmed) return\n const existing = labelTags.find((t) => t.name.toLowerCase() === trimmed.toLowerCase())\n if (!existing) onCreateAndApply?.(trimmed)\n else if (!appliedTagIds.has(existing.external_id)) onToggle(existing)\n }\n\n return (\n <FieldLabelsSelect\n options={options}\n appliedIds={appliedTagIds}\n onToggle={(id) => {\n const tag = labelTags.find((t) => t.external_id === id)\n if (tag) onToggle(tag)\n }}\n onCreate={onCreateAndApply ? handleCreate : undefined}\n />\n )\n}\n","/**\n * One field of a document as the review form shows it (a column of the documents table, one per\n * row): its label, icon and the value, editable where the table's column is. Standard fields,\n * metadata, the folder, related documents, the labels and each annotation (with who last set it).\n */\n\nimport type { ElementType, ReactNode } from 'react'\nimport { isAnnotationTag, isLabelTag, type TagResponse } from '@arbidocs/sdk/browser'\nimport type { DocumentPerson, RelatedDocs, WorkspaceDocument } from '@arbidocs/react'\nimport {\n DebouncedInput,\n formatFriendlyDate,\n friendlyFileType,\n Textarea,\n formatDocDate,\n getDocumentDate,\n getDocumentTitle,\n} from '@arbidocs/react/ui'\nimport {\n FieldFolderSelect,\n FieldFolderValue,\n FieldNativeSelect,\n FieldValue,\n FieldWithAttribution,\n} from '../../../files/FieldParts'\nimport { DocumentUser } from './DocumentUser'\nimport {\n DocTagAttribution,\n FolderPicker,\n LabelsCombobox,\n RelatedDocuments,\n} from './DocumentFieldParts'\n\ntype DocTag = NonNullable<WorkspaceDocument['doctags']>[number]\nexport type DocTagCitations = NonNullable<DocTag['citations']> | null\n\n/** A field as the form lays it out. */\nexport interface DocumentFieldContent {\n label: string\n icon?: ReactNode\n /** The annotation the field is (its pill is shown as the label). */\n tag?: TagResponse\n children: ReactNode\n}\n\nexport interface DocumentFieldOptions {\n /** The column (a standard field's id, or an annotation's tag id). */\n columnId: string\n doc: WorkspaceDocument\n canEdit: boolean\n workspaceTags: TagResponse[]\n /** The workspace's documents (the folders to pick from). */\n allDocuments?: WorkspaceDocument[]\n /** Who uploaded the document. */\n creator?: DocumentPerson\n getColumnLabel: (colId: string) => string\n getColumnIcon: (colId: string) => ElementType | undefined\n isColumnEditable: (colId: string) => boolean\n onUpdateDocumentField: (field: string, value: unknown) => void\n onUpdateTagValue: (tag: TagResponse, value: string | boolean) => void\n onUpdateTagWithCitations: (tag: TagResponse, note: string, citations: DocTagCitations) => void\n /** Create a label and apply it (the labels picker). Absent: the picker only toggles. */\n onCreateAndApplyLabel?: (name: string) => void\n /** The document's related documents (email family, copies, duplicates, similar). */\n relatedDocs?: RelatedDocs<WorkspaceDocument>\n /** Open a related document. */\n onOpenDocument?: (docId: string) => void\n /** Delete a related document (asks first). */\n onDeleteDocument?: (docId: string) => void\n canDeleteRelatedDocument?: (doc: WorkspaceDocument) => boolean\n /** Compare with a similar document. Absent: not offered. */\n onCompareDocuments?: (docId: string, otherDocId: string) => void\n}\n\n/** The document metadata a field edits as text. */\nconst METADATA_FIELDS: Record<string, (doc: WorkspaceDocument) => string> = {\n title: (doc) => getDocumentTitle(doc),\n doc_nature: (doc) => doc.doc_metadata?.doc_nature || '',\n doc_author: (doc) => doc.doc_metadata?.doc_author || '',\n doc_subject: (doc) => doc.doc_metadata?.doc_subject || '',\n // As the table shows it: with the time when the value has one (emails).\n doc_date: (doc) => formatDocDate(getDocumentDate(doc)),\n}\n\nconst INPUT_CLASS = 'text-sm bg-muted/40 focus:bg-background transition-colors'\n\n/** A read-only standard field: its value (muted unless said otherwise). */\nconst READ_ONLY_FIELDS: Record<string, (doc: WorkspaceDocument) => ReactNode> = {\n file_name: (doc) => <FieldValue tone=\"strong\">{doc.file_name || 'N/A'}</FieldValue>,\n status: (doc) => <FieldValue tone=\"muted\">{doc.status || 'N/A'}</FieldValue>,\n n_pages: (doc) => <FieldValue tone=\"muted\">{doc.n_pages || 'N/A'}</FieldValue>,\n created_at: (doc) => (\n <FieldValue tone=\"muted\">\n {doc.created_at ? formatFriendlyDate(doc.created_at) : 'N/A'}\n </FieldValue>\n ),\n updated_at: (doc) => (\n <FieldValue tone=\"muted\">\n {doc.updated_at ? formatFriendlyDate(doc.updated_at) : 'N/A'}\n </FieldValue>\n ),\n file_type: (doc) => (\n <FieldValue tone=\"muted\">{friendlyFileType(doc.file_type, doc.file_name)}</FieldValue>\n ),\n file_size: (doc) => (\n <FieldValue tone=\"muted\">\n {doc.file_size ? `${Math.round(doc.file_size / 1024)} KB` : 'N/A'}\n </FieldValue>\n ),\n doc_id: (doc) => (\n <FieldValue tone=\"muted\" isMono>\n {doc.external_id || 'N/A'}\n </FieldValue>\n ),\n content_hash: (doc) => (\n <FieldValue tone=\"muted\" isMono isTruncated>\n {doc.content_hash || 'N/A'}\n </FieldValue>\n ),\n}\n\n/** The field of `columnId`, or null when the document has none to show there. */\nexport function documentFieldContent(options: DocumentFieldOptions): DocumentFieldContent | null {\n const { columnId, doc, canEdit, workspaceTags, getColumnLabel, getColumnIcon } = options\n const Icon = getColumnIcon(columnId)\n const standard = (children: ReactNode): DocumentFieldContent => ({\n label: getColumnLabel(columnId),\n icon: Icon ? <Icon size={14} /> : undefined,\n children,\n })\n\n const metadata = METADATA_FIELDS[columnId]\n if (metadata) {\n const editable = options.isColumnEditable(columnId) && canEdit\n return standard(\n editable ? (\n <DebouncedInput\n value={metadata(doc)}\n onChange={(value) => options.onUpdateDocumentField(columnId, value)}\n multiline={true}\n placeholder={`Add ${getColumnLabel(columnId).toLowerCase()}…`}\n className={INPUT_CLASS}\n />\n ) : (\n <FieldValue>{metadata(doc) || 'N/A'}</FieldValue>\n )\n )\n }\n\n const readOnly = READ_ONLY_FIELDS[columnId]\n if (readOnly) return standard(readOnly(doc))\n\n if (columnId === 'created_by') return standard(<DocumentUser user={options.creator} />)\n\n if (columnId === 'folder') {\n return standard(\n canEdit ? (\n <FieldFolderSelect\n folder={doc.folder}\n picker={\n <FolderPicker\n documents={options.allDocuments ?? []}\n value={doc.folder}\n onSelect={(folder) => options.onUpdateDocumentField('folder', folder)}\n />\n }\n />\n ) : (\n <FieldFolderValue folder={doc.folder} />\n )\n )\n }\n\n if (columnId === 'related') {\n const related = options.relatedDocs\n if (!related) return null\n return standard(\n <RelatedDocuments\n doc={doc}\n related={related}\n onOpen={options.onOpenDocument}\n onDelete={options.onDeleteDocument}\n canDelete={options.canDeleteRelatedDocument}\n onCompare={options.onCompareDocuments}\n />\n )\n }\n\n if (columnId === 'all_tags') {\n // The labels (and issues), toggled in place.\n const labelTags = workspaceTags.filter(isLabelTag)\n const appliedIds = new Set(\n (doc.doctags ?? [])\n .filter((dt) => labelTags.some((t) => t.external_id === dt.tag_ext_id))\n .map((dt) => dt.tag_ext_id)\n )\n return standard(\n <LabelsCombobox\n labelTags={labelTags}\n appliedTagIds={appliedIds}\n onToggle={(tag) => options.onUpdateTagValue(tag, !appliedIds.has(tag.external_id))}\n onCreateAndApply={options.onCreateAndApplyLabel}\n />\n )\n }\n\n // An annotation (a label is a value of the Labels field, not a field of its own).\n const tag = workspaceTags.find((t) => t.external_id === columnId)\n if (!tag || !isAnnotationTag(tag)) return null\n const doctag = doc.doctags?.find((dt) => dt.tag_ext_id === tag.external_id)\n\n let value: ReactNode\n if (tag.tag_type.type === 'select') {\n value = (\n <FieldNativeSelect\n value={doctag?.note || ''}\n options={tag.tag_type.options}\n onChange={(next) => options.onUpdateTagValue(tag, next)}\n ariaLabel={tag.name}\n />\n )\n } else if (tag.tag_type.type === 'number') {\n value = (\n <DebouncedInput\n type=\"number\"\n value={doctag?.note || ''}\n onChange={(next) => options.onUpdateTagValue(tag, next)}\n placeholder={`Add ${tag.name.toLowerCase()}…`}\n className={INPUT_CLASS}\n />\n )\n } else {\n // A plain note: a value's citations come from generation and are kept as they are.\n value = (\n <Textarea\n value={doctag?.note || ''}\n onChange={(e) =>\n options.onUpdateTagWithCitations(tag, e.target.value, doctag?.citations ?? null)\n }\n placeholder=\"Add a note...\"\n rows={2}\n className={INPUT_CLASS}\n />\n )\n }\n\n return {\n label: tag.name,\n tag,\n children: doctag ? (\n <FieldWithAttribution attribution={<DocTagAttribution doctag={doctag} />}>\n {value}\n </FieldWithAttribution>\n ) : (\n value\n ),\n }\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useSortable } from '@dnd-kit/sortable';
|
|
3
3
|
import { CSS } from '@dnd-kit/utilities';
|
|
4
|
-
import {
|
|
4
|
+
import { GripVertical, ArrowDownFromLine, ArrowUpFromLine } from 'lucide-react';
|
|
5
5
|
import { cn, Tooltip, TooltipTrigger, TooltipContent } from '@arbidocs/react/ui';
|
|
6
6
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
7
7
|
|
|
@@ -203,139 +203,7 @@ function KeyValueRow({
|
|
|
203
203
|
}
|
|
204
204
|
);
|
|
205
205
|
}
|
|
206
|
-
var DEFAULT_COLLAPSIBLE_SECTION_LABELS = {
|
|
207
|
-
collapseSection: "Collapse section",
|
|
208
|
-
expandSection: "Expand section"
|
|
209
|
-
};
|
|
210
|
-
function CollapsibleSection({
|
|
211
|
-
title,
|
|
212
|
-
icon,
|
|
213
|
-
isExpanded,
|
|
214
|
-
onToggle,
|
|
215
|
-
children,
|
|
216
|
-
count,
|
|
217
|
-
hasActiveFilters = false,
|
|
218
|
-
expandWhenEmpty = false,
|
|
219
|
-
childrenClassName,
|
|
220
|
-
headerClassName,
|
|
221
|
-
className,
|
|
222
|
-
rightContent,
|
|
223
|
-
collapsible = true,
|
|
224
|
-
onHeaderClick,
|
|
225
|
-
labels
|
|
226
|
-
}) {
|
|
227
|
-
const l = { ...DEFAULT_COLLAPSIBLE_SECTION_LABELS, ...labels };
|
|
228
|
-
const hasCount = count !== void 0;
|
|
229
|
-
const shouldBeExpanded = !collapsible ? true : hasCount ? count > 0 ? isExpanded : expandWhenEmpty && isExpanded : isExpanded;
|
|
230
|
-
const hasContent = hasCount ? count > 0 || expandWhenEmpty : true;
|
|
231
|
-
const chevron = /* @__PURE__ */ jsx(
|
|
232
|
-
ChevronRight,
|
|
233
|
-
{
|
|
234
|
-
className: cn("size-4 shrink-0 transition-transform", shouldBeExpanded && "rotate-90")
|
|
235
|
-
}
|
|
236
|
-
);
|
|
237
|
-
const titleBlock = /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
238
|
-
icon,
|
|
239
|
-
typeof title === "string" ? title && /* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", children: title }) : title,
|
|
240
|
-
hasCount && /* @__PURE__ */ jsx(
|
|
241
|
-
"span",
|
|
242
|
-
{
|
|
243
|
-
className: cn(
|
|
244
|
-
"ml-1 text-xs tabular-nums",
|
|
245
|
-
hasActiveFilters ? "rounded-full bg-primary px-1.5 font-medium text-primary-foreground" : "font-normal text-muted-foreground"
|
|
246
|
-
),
|
|
247
|
-
children: count
|
|
248
|
-
}
|
|
249
|
-
)
|
|
250
|
-
] });
|
|
251
|
-
return /* @__PURE__ */ jsxs("div", { className: cn("w-full", className), "data-slot": "collapsible-section", children: [
|
|
252
|
-
onHeaderClick ? /* @__PURE__ */ jsxs(
|
|
253
|
-
"div",
|
|
254
|
-
{
|
|
255
|
-
role: "button",
|
|
256
|
-
tabIndex: 0,
|
|
257
|
-
onClick: onHeaderClick,
|
|
258
|
-
onKeyDown: (e) => {
|
|
259
|
-
if (e.key === "Enter" || e.key === " ") {
|
|
260
|
-
e.preventDefault();
|
|
261
|
-
onHeaderClick();
|
|
262
|
-
}
|
|
263
|
-
},
|
|
264
|
-
className: cn(
|
|
265
|
-
"mb-4 flex cursor-pointer items-center justify-between gap-2 font-semibold pointer-coarse:min-h-11 transition-colors hover:bg-muted/60 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
266
|
-
headerClassName
|
|
267
|
-
),
|
|
268
|
-
"data-slot": "collapsible-section-header",
|
|
269
|
-
children: [
|
|
270
|
-
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2 text-left", children: [
|
|
271
|
-
/* @__PURE__ */ jsx(
|
|
272
|
-
"button",
|
|
273
|
-
{
|
|
274
|
-
type: "button",
|
|
275
|
-
"aria-expanded": shouldBeExpanded,
|
|
276
|
-
"aria-label": shouldBeExpanded ? l.collapseSection : l.expandSection,
|
|
277
|
-
disabled: !hasContent,
|
|
278
|
-
onClick: (e) => {
|
|
279
|
-
e.stopPropagation();
|
|
280
|
-
if (hasContent) onToggle();
|
|
281
|
-
},
|
|
282
|
-
className: "-ml-0.5 shrink-0 rounded-md p-0.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-40 pointer-coarse:p-3.5",
|
|
283
|
-
children: chevron
|
|
284
|
-
}
|
|
285
|
-
),
|
|
286
|
-
titleBlock
|
|
287
|
-
] }),
|
|
288
|
-
rightContent && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center", children: rightContent })
|
|
289
|
-
]
|
|
290
|
-
}
|
|
291
|
-
) : !collapsible ? /* @__PURE__ */ jsxs(
|
|
292
|
-
"div",
|
|
293
|
-
{
|
|
294
|
-
className: cn("mb-4 flex items-center justify-between", headerClassName),
|
|
295
|
-
"data-slot": "collapsible-section-header",
|
|
296
|
-
children: [
|
|
297
|
-
/* @__PURE__ */ jsx("div", { className: "flex min-w-0 items-center gap-2 text-left font-medium", children: titleBlock }),
|
|
298
|
-
rightContent && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center", children: rightContent })
|
|
299
|
-
]
|
|
300
|
-
}
|
|
301
|
-
) : /* @__PURE__ */ jsxs(
|
|
302
|
-
"div",
|
|
303
|
-
{
|
|
304
|
-
className: cn("mb-4 flex items-center justify-between", headerClassName),
|
|
305
|
-
"data-slot": "collapsible-section-header",
|
|
306
|
-
children: [
|
|
307
|
-
/* @__PURE__ */ jsxs(
|
|
308
|
-
"div",
|
|
309
|
-
{
|
|
310
|
-
role: "button",
|
|
311
|
-
tabIndex: hasContent ? 0 : -1,
|
|
312
|
-
"aria-expanded": shouldBeExpanded,
|
|
313
|
-
"aria-disabled": !hasContent,
|
|
314
|
-
onClick: hasContent ? onToggle : void 0,
|
|
315
|
-
onKeyDown: hasContent ? (e) => {
|
|
316
|
-
if (e.key === "Enter" || e.key === " ") {
|
|
317
|
-
e.preventDefault();
|
|
318
|
-
onToggle();
|
|
319
|
-
}
|
|
320
|
-
} : void 0,
|
|
321
|
-
className: cn(
|
|
322
|
-
"touch-hit flex min-w-0 items-center gap-2 rounded-md text-left font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
323
|
-
hasContent ? "cursor-pointer hover:text-muted-foreground" : "cursor-default opacity-60"
|
|
324
|
-
),
|
|
325
|
-
children: [
|
|
326
|
-
chevron,
|
|
327
|
-
titleBlock
|
|
328
|
-
]
|
|
329
|
-
}
|
|
330
|
-
),
|
|
331
|
-
rightContent && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center", children: rightContent })
|
|
332
|
-
]
|
|
333
|
-
}
|
|
334
|
-
),
|
|
335
|
-
shouldBeExpanded && /* @__PURE__ */ jsx("div", { className: childrenClassName ?? "mb-8 flex flex-wrap justify-start gap-6", children })
|
|
336
|
-
] });
|
|
337
|
-
}
|
|
338
206
|
|
|
339
|
-
export {
|
|
340
|
-
//# sourceMappingURL=chunk-
|
|
341
|
-
//# sourceMappingURL=chunk-
|
|
207
|
+
export { DEFAULT_KEY_VALUE_ROW_LABELS, KeyValueContainer, KeyValueRow };
|
|
208
|
+
//# sourceMappingURL=chunk-XRL4R2TT.js.map
|
|
209
|
+
//# sourceMappingURL=chunk-XRL4R2TT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/home/KeyValueRow.tsx"],"names":[],"mappings":";;;;;;;AAaO,IAAM,4BAAA,GAAkD;AAAA,EAC7D,SAAA,EAAW,iBAAA;AAAA,EACX,SAAA,EAAW,iBAAA;AAAA,EACX,aAAA,EAAe;AACjB;AA6BO,SAAS,iBAAA,CAAkB;AAAA,EAChC,QAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,2BAAQ,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,YAAA,EAAc,SAAS,GAAI,QAAA,EAAS,CAAA;AAChE;AAGA,SAAS,gBAAA,CAAiB;AAAA,EACxB,OAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,4BACG,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,SAAO,IAAA,EACrB,QAAA,kBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA;AAAA,QACA,YAAA,EAAY,KAAA;AAAA,QACZ,SAAA,EAAU,yOAAA;AAAA,QAET,QAAA,EAAA;AAAA;AAAA,KACH,EACF,CAAA;AAAA,wBACC,cAAA,EAAA,EAAe,IAAA,EAAK,OACnB,QAAA,kBAAA,GAAA,CAAC,GAAA,EAAA,EAAG,iBAAM,CAAA,EACZ;AAAA,GAAA,EACF,CAAA;AAEJ;AAmBA,SAAS,OAAA,CAAQ;AAAA,EACf,IAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAiB;AACf,EAAA,MAAM,SAAA,GAAY,UAAU,OAAA,GAAU,MAAA;AACtC,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iGAAA,EACb,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,qEAAA;AAAA,QACV,WAAA,EAAU,iBAAA;AAAA,QAET,QAAA,EAAA;AAAA,UAAA,IAAA;AAAA,UACA,MAAA,oBACC,GAAA;AAAA,YAAC,gBAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,MAAA;AAAA,cACT,OAAO,MAAA,CAAO,SAAA;AAAA,cACd,IAAA,kBAAM,GAAA,CAAC,iBAAA,EAAA,EAAkB,SAAA,EAAU,UAAA,EAAW;AAAA;AAAA,WAChD;AAAA,UAED,MAAA,oBACC,GAAA;AAAA,YAAC,gBAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,MAAA;AAAA,cACT,OAAO,MAAA,CAAO,SAAA;AAAA,cACd,IAAA,kBAAM,GAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,uBAAA,EAAwB;AAAA;AAAA,WAC3D;AAAA,UAED,SAAA,oBACC,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0CAAA,EACb,QAAA,EAAA;AAAA,YAAA,IAAA,oBACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2EAAA,EACb,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,4BAEF,GAAA;AAAA,cAAC,SAAA;AAAA,cAAA;AAAA,gBACE,GAAI,OAAA,GAAU,EAAE,OAAA,EAAQ,GAAI,IAAA;AAAA,gBAC7B,SAAA,EAAU,oDAAA;AAAA,gBAET,QAAA,EAAA;AAAA;AAAA;AACH,WAAA,EACF;AAAA;AAAA;AAAA,KAEJ;AAAA,wBACC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAAiB,WAAA,EAAU,mBACvC,QAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,IAAM,SAAA,GACJ,mFAAA;AAQF,SAAS,mBAAA,CAAoB;AAAA,EAC3B,UAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,EAAE,YAAY,SAAA,EAAW,UAAA,EAAY,WAAW,UAAA,EAAY,UAAA,KAAe,WAAA,CAAY;AAAA,IAC3F,EAAA,EAAI;AAAA,GACL,CAAA;AAED,EAAA,MAAM,IAAA,wBACH,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,SAAO,IAAA,EACrB,QAAA,kBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,cAAY,MAAA,CAAO,aAAA;AAAA,QACnB,SAAA,EAAU,0RAAA;AAAA,QACT,GAAG,UAAA;AAAA,QACH,GAAG,SAAA;AAAA,QAEJ,QAAA,kBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,UAAA,EAAW;AAAA;AAAA,KACrC,EACF,CAAA;AAAA,oBACA,GAAA,CAAC,kBAAe,IAAA,EAAK,KAAA,EACnB,8BAAC,GAAA,EAAA,EAAG,QAAA,EAAA,MAAA,CAAO,eAAc,CAAA,EAC3B;AAAA,GAAA,EACF,CAAA;AAGF,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,UAAA;AAAA,MACL,KAAA,EAAO;AAAA,QACL,SAAA,EAAW,GAAA,CAAI,SAAA,CAAU,QAAA,CAAS,SAAS,CAAA;AAAA,QAC3C,UAAA;AAAA,QACA,OAAA,EAAS,aAAa,CAAA,GAAI;AAAA,OAC5B;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,WAAA,EAAU,eAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MAEb,QAAA,kBAAA,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA;AAAA,UACA,IAAA;AAAA,UACA,OAAA;AAAA,UACA,SAAA;AAAA,UACA,KAAA;AAAA,UACA,MAAA;AAAA,UACA,MAAA;AAAA,UACA,MAAA;AAAA,UAEC;AAAA;AAAA;AACH;AAAA,GACF;AAEJ;AAMO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA,EAAe,MAAA;AAAA,EACf,UAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,YAAA,GAAe,EAAE,GAAG,4BAAA,EAA8B,GAAG,MAAA,EAAO;AAClE,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,uBACE,GAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,UAAA;AAAA,QACA,KAAA;AAAA,QACA,IAAA;AAAA,QACA,OAAA;AAAA,QACA,SAAA;AAAA,QACA,SAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA,EAAQ,YAAA;AAAA,QAEP;AAAA;AAAA,KACH;AAAA,EAEJ;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,MAAA,IAAU,cAAc,SAAS,CAAA;AAAA,MAC1D,WAAA,EAAU,eAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MAEb,QAAA,kBAAA,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM,IAAA;AAAA,UACN,IAAA;AAAA,UACA,OAAA;AAAA,UACA,SAAA;AAAA,UACA,KAAA;AAAA,UACA,MAAA;AAAA,UACA,MAAA,EAAQ,YAAA;AAAA,UAEP;AAAA;AAAA;AACH;AAAA,GACF;AAEJ","file":"chunk-XRL4R2TT.js","sourcesContent":["import type { ReactNode } from 'react'\nimport { useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport { ArrowDownFromLine, ArrowUpFromLine, GripVertical } from 'lucide-react'\nimport { Tooltip, TooltipContent, TooltipTrigger, cn } from '@arbidocs/react/ui'\n\n/** Fixed strings of the row controls. */\nexport interface KeyValueRowLabels {\n hideField: string\n showField: string\n dragToReorder: string\n}\n\nexport const DEFAULT_KEY_VALUE_ROW_LABELS: KeyValueRowLabels = {\n hideField: 'Hide this field',\n showField: 'Show this field',\n dragToReorder: 'Drag to reorder',\n}\n\nexport interface KeyValueRowProps {\n /** Label text; also the accessible name when `labelSlot` replaces it visually. */\n label: string\n /** Glyph before the label. */\n icon?: ReactNode\n /** Id of the control in the value: renders the label as a real `<label for>`. */\n htmlFor?: string\n /** Replaces the icon + label (e.g. a tag pill that is itself the label). */\n labelSlot?: ReactNode\n /** The value, on the right (or below the label when the container is narrow). */\n children: ReactNode\n className?: string\n 'data-testid'?: string\n /** Enables drag reordering; requires a parent `DndContext` + `SortableContext`. */\n sortableId?: string\n /** Shows a \"hide this field\" control on the label line. */\n onHide?: () => void\n /** Shows a \"show this field\" control (for hidden rows, rendered dimmed). */\n onShow?: () => void\n labels?: Partial<KeyValueRowLabels>\n}\n\n/**\n * Wrap rows in this to switch on container-query responsiveness: a row stacks\n * its label above its value in a narrow container and goes side by side when\n * wider, by the container's width and not the viewport's.\n */\nexport function KeyValueContainer({\n children,\n className,\n}: {\n children: ReactNode\n className?: string\n}) {\n return <div className={cn('@container', className)}>{children}</div>\n}\n\n/** Small square control, sized to sit on the label line (44px on touch). */\nfunction RowControlButton({\n onClick,\n label,\n icon,\n}: {\n onClick: () => void\n label: string\n icon: ReactNode\n}) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={onClick}\n aria-label={label}\n className=\"flex size-5 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:size-11\"\n >\n {icon}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n <p>{label}</p>\n </TooltipContent>\n </Tooltip>\n )\n}\n\ninterface RowBodyProps {\n grip: ReactNode\n icon?: ReactNode\n htmlFor?: string\n labelSlot?: ReactNode\n label: string\n children: ReactNode\n onHide?: () => void\n onShow?: () => void\n labels: KeyValueRowLabels\n}\n\n/**\n * The shared row body: a label line (grip + hide/show + icon/label) beside the\n * value. Controls sit on the label's line so they align with the label even\n * when the value is a tall multi-line field.\n */\nfunction RowBody({\n grip,\n icon,\n htmlFor,\n labelSlot,\n label,\n children,\n onHide,\n onShow,\n labels,\n}: RowBodyProps) {\n const LabelText = htmlFor ? 'label' : 'span'\n return (\n <div className=\"flex min-w-0 flex-1 flex-col gap-1 py-1.5 @[400px]:flex-row @[400px]:items-start @[400px]:gap-4\">\n <div\n className=\"flex w-full shrink-0 items-center gap-1 @[400px]:w-44 @[400px]:pt-2\"\n data-slot=\"key-value-label\"\n >\n {grip}\n {onHide && (\n <RowControlButton\n onClick={onHide}\n label={labels.hideField}\n icon={<ArrowDownFromLine className=\"size-3.5\" />}\n />\n )}\n {onShow && (\n <RowControlButton\n onClick={onShow}\n label={labels.showField}\n icon={<ArrowUpFromLine className=\"size-3.5 text-primary\" />}\n />\n )}\n {labelSlot ?? (\n <span className=\"inline-flex min-w-0 items-center gap-1.5\">\n {icon && (\n <span className=\"inline-flex shrink-0 items-center justify-center text-muted-foreground/60\">\n {icon}\n </span>\n )}\n <LabelText\n {...(htmlFor ? { htmlFor } : null)}\n className=\"truncate text-sm font-medium text-muted-foreground\"\n >\n {label}\n </LabelText>\n </span>\n )}\n </div>\n <div className=\"min-w-0 flex-1\" data-slot=\"key-value-value\">\n {children}\n </div>\n </div>\n )\n}\n\nconst ROW_CLASS =\n 'group flex items-start rounded-md pl-1 pr-1.5 transition-colors hover:bg-muted/50'\n\ntype SortableRowProps = Omit<KeyValueRowProps, 'data-testid' | 'labels'> & {\n labels: KeyValueRowLabels\n sortableId: string\n testId?: string\n}\n\nfunction SortableKeyValueRow({\n sortableId,\n label,\n icon,\n htmlFor,\n labelSlot,\n children,\n className,\n testId,\n onHide,\n onShow,\n labels,\n}: SortableRowProps) {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: sortableId,\n })\n\n const grip = (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n aria-label={labels.dragToReorder}\n className=\"flex size-5 shrink-0 cursor-grab touch-none items-center justify-center rounded-md text-muted-foreground/60 transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring active:cursor-grabbing pointer-coarse:size-11\"\n {...attributes}\n {...listeners}\n >\n <GripVertical className=\"size-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n <p>{labels.dragToReorder}</p>\n </TooltipContent>\n </Tooltip>\n )\n\n return (\n <div\n ref={setNodeRef}\n style={{\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0 : 1,\n }}\n className={cn(ROW_CLASS, className)}\n data-slot=\"key-value-row\"\n data-testid={testId}\n >\n <RowBody\n grip={grip}\n icon={icon}\n htmlFor={htmlFor}\n labelSlot={labelSlot}\n label={label}\n onHide={onHide}\n onShow={onShow}\n labels={labels}\n >\n {children}\n </RowBody>\n </div>\n )\n}\n\n/**\n * A label/value row for forms, settings and detail views. Optionally sortable\n * (drag handle) and hideable (hide/show controls), all visible without hover.\n */\nexport function KeyValueRow({\n label,\n icon,\n htmlFor,\n labelSlot,\n children,\n className,\n 'data-testid': testId,\n sortableId,\n onHide,\n onShow,\n labels,\n}: KeyValueRowProps) {\n const mergedLabels = { ...DEFAULT_KEY_VALUE_ROW_LABELS, ...labels }\n if (sortableId) {\n return (\n <SortableKeyValueRow\n sortableId={sortableId}\n label={label}\n icon={icon}\n htmlFor={htmlFor}\n labelSlot={labelSlot}\n className={className}\n testId={testId}\n onHide={onHide}\n onShow={onShow}\n labels={mergedLabels}\n >\n {children}\n </SortableKeyValueRow>\n )\n }\n\n return (\n <div\n className={cn(ROW_CLASS, onShow && 'opacity-60', className)}\n data-slot=\"key-value-row\"\n data-testid={testId}\n >\n <RowBody\n grip={null}\n icon={icon}\n htmlFor={htmlFor}\n labelSlot={labelSlot}\n label={label}\n onShow={onShow}\n labels={mergedLabels}\n >\n {children}\n </RowBody>\n </div>\n )\n}\n"]}
|
|
@@ -15,7 +15,7 @@ import { cva } from 'class-variance-authority';
|
|
|
15
15
|
import { cn, Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandSeparator, Tooltip, TooltipTrigger, TooltipContent, Button, Progress, Badge, RadioGroup, RadioGroupItem, Label, ScrollArea, Checkbox, getEntityColor, Dialog, DialogContent, DialogTitle, DialogDescription, TooltipProvider, IconToggle, Textarea, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuSeparator, DropdownMenuItem, DialogTrigger, Input, Popover, PopoverTrigger, PopoverContent, DialogHeader, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, getTagTypeIcon, Slider, getDocumentTitle, getFileExtension, extensionFromMime, buildFolderTree, getEntityLabel, isAgent, getUserDisplayName, getFileTypeIcon, VisibilityToggle, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, Switch } from '@arbidocs/react/ui';
|
|
16
16
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
17
17
|
import { memo, useState, useRef, useEffect, forwardRef, useMemo, useCallback } from 'react';
|
|
18
|
-
import { Check, AlertCircle, CircleSlash, BrainCircuit, LockKeyholeOpen, DatabaseZap, FileX, Folder, LoaderCircle, Sparkles, X, FolderOpen, Loader2, Upload, FileText, FolderPlus, Globe, Download, Copy, FolderInput, Users, XCircle, AlertTriangle, CheckCircle2, Info, RotateCcw, Share2, ImagePlus, Crop, ChevronLeft, ChevronRight, ZoomIn, Tags, StickyNote, CopyX, Minus, Plus, ChevronDown, BookMarked, ExternalLink, Square, RefreshCw, Settings, Unplug, CheckCircle, Hourglass, Mail, CornerDownRight, CornerRightDown, GitFork, Blend, MoreVertical, SquarePen, BookOpen, MessagesSquare, Pencil, FileDown,
|
|
18
|
+
import { Check, AlertCircle, CircleSlash, BrainCircuit, LockKeyholeOpen, DatabaseZap, FileX, Folder, LoaderCircle, Sparkles, X, FolderOpen, Loader2, Upload, FileText, FolderPlus, Globe, Download, Copy, FolderInput, Users, XCircle, AlertTriangle, CheckCircle2, Info, RotateCcw, Share2, ImagePlus, Crop, ChevronLeft, ChevronRight, ZoomIn, Tags, StickyNote, CopyX, Minus, Plus, ChevronDown, BookMarked, ExternalLink, Square, RefreshCw, Settings, Unplug, CheckCircle, Hourglass, Mail, CornerDownRight, CornerRightDown, GitFork, Blend, Trash2, MoreVertical, SquarePen, BookOpen, MessagesSquare, Pencil, FileDown, SquareCheckBig, NotebookPen, MoreHorizontal, ArrowRightFromLine, Hash, ArrowDownToLine, Columns3, Save, Undo2, CheckIcon, Search, ArrowUpDown, PencilLine, FolderUp, ChevronsUpDown, UploadCloud, ListChevronsUpDown, Link, ShieldCheck, KeyRound, Eye, FunnelX, Table2, ArrowRightLeft } from 'lucide-react';
|
|
19
19
|
|
|
20
20
|
var pill = cva(
|
|
21
21
|
"inline-flex max-w-full items-center justify-center gap-1 rounded-full text-xs font-medium leading-none",
|
|
@@ -3842,6 +3842,7 @@ function RelatedDocsCell({
|
|
|
3842
3842
|
getKey,
|
|
3843
3843
|
onSwitchTo,
|
|
3844
3844
|
onDelete,
|
|
3845
|
+
canDelete = () => true,
|
|
3845
3846
|
onCompare,
|
|
3846
3847
|
className
|
|
3847
3848
|
}) {
|
|
@@ -3918,7 +3919,7 @@ function RelatedDocsCell({
|
|
|
3918
3919
|
dupeCount > 0 && /* @__PURE__ */ jsx(RelatedGroup, { icon: CopyX, title: "Duplicates", count: dupeCount, children: duplicates.map(
|
|
3919
3920
|
(doc) => row(
|
|
3920
3921
|
doc,
|
|
3921
|
-
/* @__PURE__ */ jsx(
|
|
3922
|
+
canDelete(doc) ? /* @__PURE__ */ jsx(
|
|
3922
3923
|
ActionButton,
|
|
3923
3924
|
{
|
|
3924
3925
|
icon: Trash2,
|
|
@@ -3929,7 +3930,7 @@ function RelatedDocsCell({
|
|
|
3929
3930
|
setOpen(false);
|
|
3930
3931
|
}
|
|
3931
3932
|
}
|
|
3932
|
-
)
|
|
3933
|
+
) : null
|
|
3933
3934
|
)
|
|
3934
3935
|
) }),
|
|
3935
3936
|
simCount > 0 && /* @__PURE__ */ jsx(RelatedGroup, { icon: Blend, title: "Similar", count: simCount, children: similar.map(
|
|
@@ -7883,5 +7884,5 @@ function ExplorerFileNavigator({
|
|
|
7883
7884
|
}
|
|
7884
7885
|
|
|
7885
7886
|
export { AiReviewDialogView, BulkActionsBar, BulkLabelSelectView, BulkReplaceDialog, BulkTagEditorDialog, CHROME, CheckboxCell, CitedRunNav, DEFAULT_AI_REVIEW_DIALOG_LABELS, DEFAULT_BULK_ACTIONS_LABELS, DEFAULT_BULK_REPLACE_LABELS, DEFAULT_BULK_TAG_EDITOR_LABELS, DEFAULT_DOCUMENT_COLUMNS, DEFAULT_EXPLORER_LABELS, DEFAULT_EXPORT_LABELS, DEFAULT_FIELDS_EDITOR_LABELS, DEFAULT_FILES_SEARCH_LABELS, DEFAULT_FOLDER_FILTER_LABELS, DEFAULT_FOLDER_PICKER_LABELS, DEFAULT_HTML_VIEWER_LABELS, DEFAULT_IMPORT_LABELS, DEFAULT_MOVE_TO_FOLDER_LABELS, DEFAULT_TAG_PASSAGE_PANEL_LABELS, DEFAULT_TRANSFER_LABELS, DEFAULT_UPLOAD_FOOTER_LABELS, DEFAULT_UPLOAD_PARTS_LABELS, DEFAULT_UPLOAD_SOURCES_LABELS, DEFAULT_URL_INPUT_DIALOG_LABELS, DEFAULT_VIEWER_LABELS, DEFAULT_VIEW_SELECTOR_LABELS, DOCUMENTS_ROW_HEIGHT_DEFAULT, DOCUMENTS_ROW_HEIGHT_INITIAL, DOCUMENT_TYPE_OPTIONS, DocStatusIcon, DocTagBar, DocumentGrid, DocumentLabelBar, DocumentNameCellFrame, DocumentRowMenu, DocumentSearchList, DocumentsFolderButton, EMAIL_VIEW_COLUMNS, ExplorerDragPreview, ExplorerDropOverlay, ExplorerEmpty, ExplorerFileNavigator, ExplorerFileTile, ExplorerFileTooltip, ExplorerFolderTile, ExplorerFrame, ExplorerLoadingTiles, ExplorerMarquee, ExplorerScroller, ExplorerStage, ExportFooter, ExportMethodChooser, ExportModalTitle, ExportResultsReport, ExportWorkspacePicker, FailedStageIcon, FieldAttribution, FieldFolderSelect, FieldFolderValue, FieldLabelsSelect, FieldNativeSelect, FieldRow, FieldValue, FieldWithAttribution, FieldsApplyBar, FieldsEditorList, FieldsEditorRoot, FieldsEditorToolbar, FieldsEmptyState, FieldsManagerBody, FieldsManagerDefinition, FieldsManagerTitle, FilesAddMenu, FilesFilterBar, FilesModalFooter, FilesPage, FilesPageHeader, FilesPageMain, FilesPageTitle, FilesSearchInput, FilesTagsButton, FilesToolbar, FilesViewCenter, FilterButton, FolderBreadcrumb2 as FolderBreadcrumb, FolderCell, FolderCommandList, FolderFilterButton, FolderPickerRow, FolderProviderIcon, FolderSummary, FolderTree, FolderTreePicker, HtmlPage, HtmlPassage, HtmlViewerEmpty, HtmlViewerRoot, HtmlViewerSurface, ImportActionButton, ImportAside, ImportFamilySection, ImportHint, ImportList, ImportPanel, ImportProgress, ImportRow, ImportRunActions, ImportSummary, LINE_PX, MAX_LINES, MIN_LINES, MediaPreviewView, MoveToFolderDialog, MultiSelectCellEditor, NavDocumentPicker, NavigatorPickerBar, PassageStepper, PdfPageNav, PrivacyExplainerModal, RECENTLY_DELETED_HINT, RECENTLY_DELETED_HINT_PLURAL, ROW_MIN, RejectedFilesList, RelatedDocsCell, RowDensityControl, SELECTION_COL_ID, SelectedFilesList, ShareToggle, StatusPill, TagColumnHeader, TagFormField, TagFormFooter, TagFormInstructionField, TagFormMeta, TagFormNameField, TagFormNote, TagFormOptionsEditor, TagFormRoot, TagFormSelectField, TagFormSharedToggle, TagPassagePanel, TaskSection, TransferConflictChooser, TransferKindsPicker, TransferPlanSummary, TransferProgressView, TransferReferencesChooser, TransferResumeBanner, TransferScopeChooser, UploadBrowseButtons, UploadContainer, UploadDropArea, UploadErrorMessage, UploadFooterBar, UploadFrame, UploadProgress, UploadShareNote, UploadSourcePicker, UploadSourceSection, UploadUrlButton, UrlDialogTitle, UrlInputDialog, UrlInputDialogView, VendorLogo, ViewSelectorMenu, ViewerControlBar, ViewerFrame, ViewerImageActions, ViewerLoadError, ViewerMessage, ViewerPageCounter, ViewerPreviewUnavailable, ViewerTabBar, ViewerTitle, ViewerZoomControl, applyColumnLayout, applyViewColumns, buildExplorerEntries, canChangeVisibility, canDeleteDocument, canEditDocumentFields, captureColumnWidths, collectFolderDocs, columnItems, columnsMatch, confirmHideFromMembers, documentGridLayoutProps, fieldsApplyBarCopy, fieldsEmptyText, filterFieldsByName, formatFolderSegment, getExplorerDisplayName, getMediaPreview, hasFolderProviderIcon, isDocumentLabel, isExplorerDocument, isMediaUrl, joinFolderPath, linesForRowHeight, parseFolderSegments, pinnedLeftColumns, resolveDocumentGridLayout, rowHeightForLines, searchExplorerDocuments, shareStateOf, shareTooltipFor, sortExplorerFiles, sortFields, summariseDocTags, toggleColumn, upsertView, useGridViews, visibilityAudience, visibilityToggleTooltip, visibleColumns, widthsMatch };
|
|
7886
|
-
//# sourceMappingURL=chunk-
|
|
7887
|
-
//# sourceMappingURL=chunk-
|
|
7887
|
+
//# sourceMappingURL=chunk-YYZH6VRP.js.map
|
|
7888
|
+
//# sourceMappingURL=chunk-YYZH6VRP.js.map
|