@arbidocs/blocks 0.5.80 → 0.5.81
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/ConnectedCallDock-DIGOWCS7.js +2 -2
- package/dist/ConnectedCallDock-P42M6OVR.cjs +2 -2
- package/dist/ConnectedCallRoom-AYNCZVWL.js +2 -2
- package/dist/ConnectedCallRoom-VFGV4X7I.cjs +2 -2
- package/dist/{ConnectedDocumentViewer-H7W6XQNJ.js → ConnectedDocumentViewer-ATLFYABV.js} +14 -14
- package/dist/{ConnectedDocumentViewer-H7W6XQNJ.js.map → ConnectedDocumentViewer-ATLFYABV.js.map} +1 -1
- package/dist/{ConnectedDocumentViewer-EXR4XDRW.cjs → ConnectedDocumentViewer-EHPY2LSI.cjs} +15 -15
- package/dist/{ConnectedDocumentViewer-EXR4XDRW.cjs.map → ConnectedDocumentViewer-EHPY2LSI.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-2W3NNA5C.js → ConnectedNativeDocxComparison-G6VWHP4A.js} +10 -10
- package/dist/{ConnectedNativeDocxComparison-2W3NNA5C.js.map → ConnectedNativeDocxComparison-G6VWHP4A.js.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-UJWBGYOF.cjs → ConnectedNativeDocxComparison-OYZ2HZ7G.cjs} +11 -11
- package/dist/{ConnectedNativeDocxComparison-UJWBGYOF.cjs.map → ConnectedNativeDocxComparison-OYZ2HZ7G.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-QHVE5IR5.js → ConnectedNativeDocxEditor-2LGWJ4HT.js} +9 -9
- package/dist/{ConnectedNativeDocxEditor-QHVE5IR5.js.map → ConnectedNativeDocxEditor-2LGWJ4HT.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-672BRHOT.cjs → ConnectedNativeDocxEditor-7EZYSH57.cjs} +11 -11
- package/dist/{ConnectedNativeDocxEditor-672BRHOT.cjs.map → ConnectedNativeDocxEditor-7EZYSH57.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-3MNE42NH.cjs → ConnectedStreamedWordArtifact-ROPG2O4H.cjs} +11 -11
- package/dist/ConnectedStreamedWordArtifact-ROPG2O4H.cjs.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-VI3S2YIG.js → ConnectedStreamedWordArtifact-TRRA55JN.js} +10 -10
- package/dist/ConnectedStreamedWordArtifact-TRRA55JN.js.map +1 -0
- package/dist/{DocumentReviewCard-XK77D3O4.cjs → DocumentReviewCard-3EM6GHJC.cjs} +12 -12
- package/dist/{DocumentReviewCard-XK77D3O4.cjs.map → DocumentReviewCard-3EM6GHJC.cjs.map} +1 -1
- package/dist/{DocumentReviewCard-F26AXBYZ.js → DocumentReviewCard-JC3JCRR7.js} +7 -7
- package/dist/{DocumentReviewCard-F26AXBYZ.js.map → DocumentReviewCard-JC3JCRR7.js.map} +1 -1
- package/dist/{WorkspaceTableView-III5TFER.cjs → WorkspaceTableView-JVHIJP6L.cjs} +3 -3
- package/dist/{WorkspaceTableView-III5TFER.cjs.map → WorkspaceTableView-JVHIJP6L.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-JUQWTLXI.js → WorkspaceTableView-OICIO5HZ.js} +3 -3
- package/dist/{WorkspaceTableView-JUQWTLXI.js.map → WorkspaceTableView-OICIO5HZ.js.map} +1 -1
- package/dist/agents/index.cjs +377 -377
- package/dist/agents/index.js +11 -11
- package/dist/calls/index.cjs +2 -2
- package/dist/calls/index.js +2 -2
- package/dist/chat/index.cjs +2 -2
- package/dist/chat/index.js +2 -2
- package/dist/{chunk-7KQMDGML.js → chunk-2HRFMBJH.js} +3 -3
- package/dist/{chunk-7KQMDGML.js.map → chunk-2HRFMBJH.js.map} +1 -1
- package/dist/{chunk-3FKRE4BL.cjs → chunk-32ZOKBNT.cjs} +3 -3
- package/dist/{chunk-3FKRE4BL.cjs.map → chunk-32ZOKBNT.cjs.map} +1 -1
- package/dist/{chunk-XAZUII52.js → chunk-3SWH4NNT.js} +3 -3
- package/dist/{chunk-XAZUII52.js.map → chunk-3SWH4NNT.js.map} +1 -1
- package/dist/{chunk-AEHV2DHR.js → chunk-3TKRCYFN.js} +3 -3
- package/dist/{chunk-AEHV2DHR.js.map → chunk-3TKRCYFN.js.map} +1 -1
- package/dist/{chunk-UHP6AP6C.cjs → chunk-3YMV2F5F.cjs} +7 -7
- package/dist/{chunk-UHP6AP6C.cjs.map → chunk-3YMV2F5F.cjs.map} +1 -1
- package/dist/{chunk-HJHLQPT2.js → chunk-4BWFKTQD.js} +4 -4
- package/dist/{chunk-HJHLQPT2.js.map → chunk-4BWFKTQD.js.map} +1 -1
- package/dist/{chunk-MEDTT4EK.js → chunk-4LAR3X3L.js} +9 -9
- package/dist/{chunk-MEDTT4EK.js.map → chunk-4LAR3X3L.js.map} +1 -1
- package/dist/{chunk-LCMHUW3K.js → chunk-7S7ZAJT7.js} +4 -4
- package/dist/{chunk-LCMHUW3K.js.map → chunk-7S7ZAJT7.js.map} +1 -1
- package/dist/{chunk-WWME52XL.js → chunk-AU6R6ZKJ.js} +3 -3
- package/dist/{chunk-WWME52XL.js.map → chunk-AU6R6ZKJ.js.map} +1 -1
- package/dist/{chunk-JDGJV7VW.js → chunk-B4PNELIT.js} +3 -3
- package/dist/{chunk-JDGJV7VW.js.map → chunk-B4PNELIT.js.map} +1 -1
- package/dist/{chunk-VGMK4F2E.cjs → chunk-C2UKBYTD.cjs} +44 -44
- package/dist/{chunk-VGMK4F2E.cjs.map → chunk-C2UKBYTD.cjs.map} +1 -1
- package/dist/{chunk-OAEJME5Q.cjs → chunk-DBGTR7OK.cjs} +33 -33
- package/dist/{chunk-OAEJME5Q.cjs.map → chunk-DBGTR7OK.cjs.map} +1 -1
- package/dist/{chunk-DL3XYTKI.cjs → chunk-E2UHMMSQ.cjs} +13 -13
- package/dist/{chunk-DL3XYTKI.cjs.map → chunk-E2UHMMSQ.cjs.map} +1 -1
- package/dist/{chunk-R5KLIQXI.cjs → chunk-F34I67NI.cjs} +34 -34
- package/dist/{chunk-R5KLIQXI.cjs.map → chunk-F34I67NI.cjs.map} +1 -1
- package/dist/{chunk-5V7JWZQ4.cjs → chunk-GQJQ75NA.cjs} +57 -57
- package/dist/{chunk-5V7JWZQ4.cjs.map → chunk-GQJQ75NA.cjs.map} +1 -1
- package/dist/{chunk-DF7ZATID.cjs → chunk-GUMGUNMW.cjs} +4 -4
- package/dist/{chunk-DF7ZATID.cjs.map → chunk-GUMGUNMW.cjs.map} +1 -1
- package/dist/{chunk-QYILQJOD.js → chunk-I3KSLONI.js} +7 -7
- package/dist/{chunk-QYILQJOD.js.map → chunk-I3KSLONI.js.map} +1 -1
- package/dist/{chunk-IGMZN37B.cjs → chunk-JDXHA2J4.cjs} +4 -4
- package/dist/{chunk-IGMZN37B.cjs.map → chunk-JDXHA2J4.cjs.map} +1 -1
- package/dist/{chunk-CGVWWTEZ.js → chunk-MSHBJR7U.js} +3 -3
- package/dist/{chunk-CGVWWTEZ.js.map → chunk-MSHBJR7U.js.map} +1 -1
- package/dist/{chunk-KFXOZXZD.cjs → chunk-NIUX77EN.cjs} +4 -4
- package/dist/{chunk-KFXOZXZD.cjs.map → chunk-NIUX77EN.cjs.map} +1 -1
- package/dist/{chunk-UFGC77KR.cjs → chunk-NOLUVCAJ.cjs} +5 -5
- package/dist/{chunk-UFGC77KR.cjs.map → chunk-NOLUVCAJ.cjs.map} +1 -1
- package/dist/{chunk-KEWX6KFN.js → chunk-NPGILGZQ.js} +4 -4
- package/dist/{chunk-KEWX6KFN.js.map → chunk-NPGILGZQ.js.map} +1 -1
- package/dist/{chunk-B7UCQEPD.js → chunk-OJCWHCSP.js} +3 -3
- package/dist/{chunk-B7UCQEPD.js.map → chunk-OJCWHCSP.js.map} +1 -1
- package/dist/{chunk-LC7HFDCV.cjs → chunk-OTXCPTFE.cjs} +24 -24
- package/dist/{chunk-LC7HFDCV.cjs.map → chunk-OTXCPTFE.cjs.map} +1 -1
- package/dist/{chunk-LHQHK6MB.cjs → chunk-R5FOAHQN.cjs} +5 -5
- package/dist/{chunk-LHQHK6MB.cjs.map → chunk-R5FOAHQN.cjs.map} +1 -1
- package/dist/{chunk-2L4YFJ6U.js → chunk-RC2PRQVC.js} +6 -6
- package/dist/{chunk-2L4YFJ6U.js.map → chunk-RC2PRQVC.js.map} +1 -1
- package/dist/{chunk-7IHMM6TG.js → chunk-RREPFWJI.js} +3 -3
- package/dist/{chunk-7IHMM6TG.js.map → chunk-RREPFWJI.js.map} +1 -1
- package/dist/{chunk-6JDUM4R2.js → chunk-S2BA5F6F.js} +9 -9
- package/dist/{chunk-6JDUM4R2.js.map → chunk-S2BA5F6F.js.map} +1 -1
- package/dist/{chunk-ZF3OKP2R.js → chunk-SAACQJ4X.js} +3 -3
- package/dist/{chunk-ZF3OKP2R.js.map → chunk-SAACQJ4X.js.map} +1 -1
- package/dist/{chunk-CRSEWNDP.cjs → chunk-SLBHYIVZ.cjs} +27 -27
- package/dist/{chunk-CRSEWNDP.cjs.map → chunk-SLBHYIVZ.cjs.map} +1 -1
- package/dist/{chunk-2JJISEQW.js → chunk-SSNJALVA.js} +3 -3
- package/dist/{chunk-2JJISEQW.js.map → chunk-SSNJALVA.js.map} +1 -1
- package/dist/{chunk-Y37HQ4M2.cjs → chunk-UICJN7O2.cjs} +3 -3
- package/dist/{chunk-Y37HQ4M2.cjs.map → chunk-UICJN7O2.cjs.map} +1 -1
- package/dist/{chunk-XD3M6ACK.cjs → chunk-W3MWEZYI.cjs} +3 -3
- package/dist/{chunk-XD3M6ACK.cjs.map → chunk-W3MWEZYI.cjs.map} +1 -1
- package/dist/{chunk-ICHTDJYH.cjs → chunk-WXFPG2GS.cjs} +3 -3
- package/dist/{chunk-ICHTDJYH.cjs.map → chunk-WXFPG2GS.cjs.map} +1 -1
- package/dist/{chunk-2MYWB55Z.cjs → chunk-YEAWEUTR.cjs} +19 -19
- package/dist/{chunk-2MYWB55Z.cjs.map → chunk-YEAWEUTR.cjs.map} +1 -1
- package/dist/{chunk-3TI4EVXB.js → chunk-ZLS55KLF.js} +5 -5
- package/dist/{chunk-3TI4EVXB.js.map → chunk-ZLS55KLF.js.map} +1 -1
- package/dist/connect/docx.cjs +13 -13
- package/dist/connect/docx.js +9 -9
- package/dist/connect/index.cjs +645 -628
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +80 -63
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +13 -13
- package/dist/connect/viewer.js +12 -12
- package/dist/dashboards/index.cjs +1 -1
- package/dist/dashboards/index.js +1 -1
- package/dist/embed/index.cjs +22 -22
- package/dist/embed/index.js +16 -16
- package/dist/facts/index.cjs +46 -46
- package/dist/facts/index.js +3 -3
- package/dist/files/index.cjs +222 -222
- package/dist/files/index.js +2 -2
- package/dist/index.cjs +1160 -1160
- package/dist/index.js +36 -36
- package/dist/shell/index.cjs +44 -44
- package/dist/shell/index.js +2 -2
- package/dist/studio/index.cjs +10 -10
- package/dist/studio/index.js +10 -10
- package/dist/workflow-canvas/index.cjs +47 -47
- package/dist/workflow-canvas/index.js +23 -23
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-3MNE42NH.cjs.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-VI3S2YIG.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { UserAvatar, DocumentUser, useDocumentFolders, RelatedDocumentsCell } from './chunk-
|
|
3
|
-
import { FieldValue, FieldFolderSelect, FieldFolderValue, FieldNativeSelect, FieldWithAttribution, FolderCommandList, FieldLabelsSelect, FieldAttribution } from './chunk-
|
|
2
|
+
import { UserAvatar, DocumentUser, useDocumentFolders, RelatedDocumentsCell } from './chunk-SSNJALVA.js';
|
|
3
|
+
import { FieldValue, FieldFolderSelect, FieldFolderValue, FieldNativeSelect, FieldWithAttribution, FolderCommandList, FieldLabelsSelect, FieldAttribution } from './chunk-2HRFMBJH.js';
|
|
4
4
|
import { EntityTooltip, EntityTooltipHeader } from './chunk-3UIJLUXN.js';
|
|
5
5
|
import { useCallback, useMemo } from 'react';
|
|
6
6
|
import { useWorkspaceUsers, useTags, useOpenViewerDocumentId } from '@arbidocs/react';
|
|
@@ -335,5 +335,5 @@ function documentFieldContent(options) {
|
|
|
335
335
|
}
|
|
336
336
|
|
|
337
337
|
export { ConnectedTagEntity, documentFieldContent, useMemberLookup };
|
|
338
|
-
//# sourceMappingURL=chunk-
|
|
339
|
-
//# sourceMappingURL=chunk-
|
|
338
|
+
//# sourceMappingURL=chunk-7S7ZAJT7.js.map
|
|
339
|
+
//# sourceMappingURL=chunk-7S7ZAJT7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/files/fields/useMemberLookup.ts","../src/connection/files/grid/ConnectedTagEntity.tsx","../src/connection/files/fields/DocumentFieldParts.tsx","../src/connection/files/fields/documentField.tsx"],"names":["useWorkspaceUsers","SharedTagEntity","jsx","formatFriendlyDate","useMemo","getEntityColor","value","tag"],"mappings":"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","file":"chunk-LCMHUW3K.js","sourcesContent":["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 * 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
|
+
{"version":3,"sources":["../src/connection/files/fields/useMemberLookup.ts","../src/connection/files/grid/ConnectedTagEntity.tsx","../src/connection/files/fields/DocumentFieldParts.tsx","../src/connection/files/fields/documentField.tsx"],"names":["useWorkspaceUsers","SharedTagEntity","jsx","formatFriendlyDate","useMemo","getEntityColor","value","tag"],"mappings":"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","file":"chunk-7S7ZAJT7.js","sourcesContent":["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 * 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,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { StreamedWordArtifact } from './chunk-7CX4QFPM.js';
|
|
3
|
-
import { useConnectedNativeDocxAdapter } from './chunk-
|
|
3
|
+
import { useConnectedNativeDocxAdapter } from './chunk-OJCWHCSP.js';
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
6
6
|
function ConnectedStreamedWordArtifact({
|
|
@@ -12,5 +12,5 @@ function ConnectedStreamedWordArtifact({
|
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
export { ConnectedStreamedWordArtifact };
|
|
15
|
-
//# sourceMappingURL=chunk-
|
|
16
|
-
//# sourceMappingURL=chunk-
|
|
15
|
+
//# sourceMappingURL=chunk-AU6R6ZKJ.js.map
|
|
16
|
+
//# sourceMappingURL=chunk-AU6R6ZKJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/docx/ConnectedStreamedWordArtifact.tsx"],"names":[],"mappings":";;;;AAMO,SAAS,6BAAA,CAA8B;AAAA,EAC5C,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0E;AACxE,EAAA,MAAM,OAAA,GAAU,8BAA8B,WAAW,CAAA;AACzD,EAAA,uBAAO,GAAA,CAAC,oBAAA,EAAA,EAAsB,GAAG,KAAA,EAAO,OAAA,EAAkB,CAAA;AAC5D","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/connection/docx/ConnectedStreamedWordArtifact.tsx"],"names":[],"mappings":";;;;AAMO,SAAS,6BAAA,CAA8B;AAAA,EAC5C,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0E;AACxE,EAAA,MAAM,OAAA,GAAU,8BAA8B,WAAW,CAAA;AACzD,EAAA,uBAAO,GAAA,CAAC,oBAAA,EAAA,EAAsB,GAAG,KAAA,EAAO,OAAA,EAAkB,CAAA;AAC5D","file":"chunk-AU6R6ZKJ.js","sourcesContent":["import { useConnectedNativeDocxAdapter } from './ConnectedNativeDocxEditor'\nimport {\n StreamedWordArtifact,\n type StreamedWordArtifactProps,\n} from '../../docx/StreamedWordArtifact'\n\nexport function ConnectedStreamedWordArtifact({\n fontBaseUrl,\n ...props\n}: Omit<StreamedWordArtifactProps, 'adapter'> & { fontBaseUrl?: string }) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n return <StreamedWordArtifact {...props} adapter={adapter} />\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { DOCUMENTS_ROW_HEIGHT_INITIAL } from './chunk-
|
|
2
|
+
import { DOCUMENTS_ROW_HEIGHT_INITIAL } from './chunk-2HRFMBJH.js';
|
|
3
3
|
import { create } from 'zustand';
|
|
4
4
|
import { persist, createJSONStorage } from 'zustand/middleware';
|
|
5
5
|
|
|
@@ -112,5 +112,5 @@ var useFilesDialogs = create()((set) => ({
|
|
|
112
112
|
}));
|
|
113
113
|
|
|
114
114
|
export { FILES_PREFS_KEY, filesViewMode, useAiReviewStore, useFilesDialogs, useFilesGridStates, useFilesPrefs, useFilesStore, usePendingFolders };
|
|
115
|
-
//# sourceMappingURL=chunk-
|
|
116
|
-
//# sourceMappingURL=chunk-
|
|
115
|
+
//# sourceMappingURL=chunk-B4PNELIT.js.map
|
|
116
|
+
//# sourceMappingURL=chunk-B4PNELIT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/files/store.ts"],"names":[],"mappings":"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","file":"chunk-JDGJV7VW.js","sourcesContent":["/**\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/connection/files/store.ts"],"names":[],"mappings":"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","file":"chunk-B4PNELIT.js","sourcesContent":["/**\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"]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
var chunkDC5LNUIN_cjs = require('./chunk-DC5LNUIN.cjs');
|
|
5
5
|
var chunkQYRPFPQ7_cjs = require('./chunk-QYRPFPQ7.cjs');
|
|
6
|
-
var
|
|
6
|
+
var chunkWXFPG2GS_cjs = require('./chunk-WXFPG2GS.cjs');
|
|
7
7
|
var chunk324RBHCF_cjs = require('./chunk-324RBHCF.cjs');
|
|
8
8
|
var chunkKB3VXPJ7_cjs = require('./chunk-KB3VXPJ7.cjs');
|
|
9
9
|
var chunkMISPPQBP_cjs = require('./chunk-MISPPQBP.cjs');
|
|
@@ -156,7 +156,7 @@ function useViewedDocument(documentId) {
|
|
|
156
156
|
const documentData = record?.external_id === documentId ? record : void 0;
|
|
157
157
|
const { data: tags } = chunkLUBZHVZK_cjs.useConnectedTags();
|
|
158
158
|
const labelSummaries = React.useMemo(
|
|
159
|
-
() =>
|
|
159
|
+
() => chunkWXFPG2GS_cjs.summariseDocTags(documentData?.doctags ?? [], tags.filter(chunkWXFPG2GS_cjs.isDocumentLabel)),
|
|
160
160
|
[documentData, tags]
|
|
161
161
|
);
|
|
162
162
|
const fileName = documentData?.file_name;
|
|
@@ -661,7 +661,7 @@ function PassageTagPanel({
|
|
|
661
661
|
[workspaceTags]
|
|
662
662
|
);
|
|
663
663
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
664
|
-
|
|
664
|
+
chunkWXFPG2GS_cjs.TagPassagePanel,
|
|
665
665
|
{
|
|
666
666
|
pageNumber,
|
|
667
667
|
preview,
|
|
@@ -786,7 +786,7 @@ var ParsedPassage = React.memo(function ParsedPassage2({
|
|
|
786
786
|
];
|
|
787
787
|
}) : [];
|
|
788
788
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
789
|
-
|
|
789
|
+
chunkWXFPG2GS_cjs.HtmlPassage,
|
|
790
790
|
{
|
|
791
791
|
chunkId,
|
|
792
792
|
highlight: isStrong ? "strong" : isLight ? "light" : void 0,
|
|
@@ -962,11 +962,11 @@ function useDocumentLabels(documentId, doctags, orderedChunkIds) {
|
|
|
962
962
|
const workspaceTags = React.useMemo(() => allTags.filter(isDocumentTag), [allTags]);
|
|
963
963
|
const documentDoctags = React.useMemo(() => doctags ?? [], [doctags]);
|
|
964
964
|
const tagSummaries = React.useMemo(
|
|
965
|
-
() =>
|
|
965
|
+
() => chunkWXFPG2GS_cjs.summariseDocTags(documentDoctags, workspaceTags),
|
|
966
966
|
[documentDoctags, workspaceTags]
|
|
967
967
|
);
|
|
968
968
|
const labelSummaries = React.useMemo(
|
|
969
|
-
() =>
|
|
969
|
+
() => chunkWXFPG2GS_cjs.summariseDocTags(documentDoctags, workspaceTags.filter(chunkWXFPG2GS_cjs.isDocumentLabel)),
|
|
970
970
|
[documentDoctags, workspaceTags]
|
|
971
971
|
);
|
|
972
972
|
const labelsByChunk = React.useMemo(() => {
|
|
@@ -1474,14 +1474,14 @@ function ParsedTextView({
|
|
|
1474
1474
|
}
|
|
1475
1475
|
}
|
|
1476
1476
|
}, [maxPageNumber, onLoadSuccess]);
|
|
1477
|
-
if (isLoading) return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1477
|
+
if (isLoading) return /* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.ViewerMessage, { children: "Loading parsed document..." });
|
|
1478
1478
|
if (error) {
|
|
1479
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1479
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.ViewerMessage, { children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-red-text", children: "Failed to load parsed document" }) });
|
|
1480
1480
|
}
|
|
1481
1481
|
const taggingChunk = labels.taggingChunkId ? processedChunks.flatMap((page) => page.chunks).find((c) => c.chunkExtId === labels.taggingChunkId) : void 0;
|
|
1482
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1482
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(chunkWXFPG2GS_cjs.HtmlViewerRoot, { children: [
|
|
1483
1483
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1484
|
-
|
|
1484
|
+
chunkWXFPG2GS_cjs.DocumentLabelBar,
|
|
1485
1485
|
{
|
|
1486
1486
|
summaries: labels.labelSummaries,
|
|
1487
1487
|
activeTagExtId: labels.activeTagExtId,
|
|
@@ -1506,15 +1506,15 @@ function ParsedTextView({
|
|
|
1506
1506
|
}
|
|
1507
1507
|
),
|
|
1508
1508
|
!citation.factCitationActive && citation.runStartIds.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1509
|
-
|
|
1509
|
+
chunkWXFPG2GS_cjs.CitedRunNav,
|
|
1510
1510
|
{
|
|
1511
1511
|
position: citation.runCursor + 1,
|
|
1512
1512
|
total: citation.runStartIds.length,
|
|
1513
1513
|
onStep: citation.gotoRun
|
|
1514
1514
|
}
|
|
1515
1515
|
),
|
|
1516
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1517
|
-
|
|
1516
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.HtmlViewerSurface, { surfaceRef: containerRef, onMouseUp: citation.handleSelectionEnd, children: processedChunks.length > 0 ? processedChunks.map((page, pageIndex) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1517
|
+
chunkWXFPG2GS_cjs.HtmlPage,
|
|
1518
1518
|
{
|
|
1519
1519
|
pageNumber: page.pageNumber,
|
|
1520
1520
|
totalPages,
|
|
@@ -1555,7 +1555,7 @@ function ParsedTextView({
|
|
|
1555
1555
|
})
|
|
1556
1556
|
},
|
|
1557
1557
|
pageIndex
|
|
1558
|
-
)) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1558
|
+
)) : /* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.HtmlViewerEmpty, {}) })
|
|
1559
1559
|
] });
|
|
1560
1560
|
}
|
|
1561
1561
|
var AnnotatedPdfViewer = React.lazy(
|
|
@@ -1605,7 +1605,7 @@ function ViewerPdfPane({
|
|
|
1605
1605
|
const showMarkup = markup.hasMarkup && !markup.showOriginal;
|
|
1606
1606
|
if (isDownloadOnly) {
|
|
1607
1607
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1608
|
-
|
|
1608
|
+
chunkWXFPG2GS_cjs.ViewerPreviewUnavailable,
|
|
1609
1609
|
{
|
|
1610
1610
|
extension: fileExtension(documentData?.file_name),
|
|
1611
1611
|
onDownload
|
|
@@ -1615,26 +1615,26 @@ function ViewerPdfPane({
|
|
|
1615
1615
|
const loadingLabel = isVideo ? "Loading video..." : isAudio ? "Loading audio..." : isImage ? "Loading image..." : !documentData ? "Loading document..." : ui.friendlyFileType(documentData.file_type, documentData.file_name) === "Text" ? "Loading text..." : "Loading PDF...";
|
|
1616
1616
|
const errorLabel = isVideo ? "Failed to load video" : isAudio ? "Failed to load audio" : isImage ? "Failed to load image" : "Failed to load PDF";
|
|
1617
1617
|
if (isDocx && documentData && !["completed", "low-content", "failed"].includes(documentData.status || "")) {
|
|
1618
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1618
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.ViewerMessage, { children: "PDF and search indexing are processing. Open the DOCX tab to edit now." });
|
|
1619
1619
|
}
|
|
1620
|
-
if (isPdfLoading) return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1620
|
+
if (isPdfLoading) return /* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.ViewerMessage, { children: loadingLabel });
|
|
1621
1621
|
if (pdfError) {
|
|
1622
1622
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1623
|
-
|
|
1623
|
+
chunkWXFPG2GS_cjs.ViewerLoadError,
|
|
1624
1624
|
{
|
|
1625
1625
|
message: isVideo || isAudio || isImage ? `${errorLabel} \u2014 download it instead.` : "Couldn't display the PDF \u2014 download it instead.",
|
|
1626
1626
|
onDownload
|
|
1627
1627
|
}
|
|
1628
1628
|
);
|
|
1629
1629
|
}
|
|
1630
|
-
if (!pdfBlob) return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1630
|
+
if (!pdfBlob) return /* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.ViewerMessage, { children: loadingLabel });
|
|
1631
1631
|
if (isVideo) return /* @__PURE__ */ jsxRuntime.jsx(viewers.VideoViewer, { blob: pdfBlob, title: documentData?.file_name || "Video" });
|
|
1632
1632
|
if (isAudio) return /* @__PURE__ */ jsxRuntime.jsx(viewers.AudioViewer, { blob: pdfBlob, title: documentData?.file_name || "Audio" });
|
|
1633
1633
|
if (isImage) {
|
|
1634
1634
|
return /* @__PURE__ */ jsxRuntime.jsx(viewers.ImageViewer, { blob: pdfBlob, alt: documentData?.file_name || "Document image" });
|
|
1635
1635
|
}
|
|
1636
1636
|
if (signatureFlow?.kind === "prepare") {
|
|
1637
|
-
return /* @__PURE__ */ jsxRuntime.jsx(React.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1637
|
+
return /* @__PURE__ */ jsxRuntime.jsx(React.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.ViewerMessage, { children: "Loading\u2026" }), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1638
1638
|
SignatureRequestEditor,
|
|
1639
1639
|
{
|
|
1640
1640
|
...viewerProps,
|
|
@@ -1652,7 +1652,7 @@ function ViewerPdfPane({
|
|
|
1652
1652
|
}
|
|
1653
1653
|
if (signatureFlow?.kind === "sign" && currentUserId) {
|
|
1654
1654
|
const { currentPage: _page, scrollTrigger: _trigger, ...guidedProps } = viewerProps;
|
|
1655
|
-
return /* @__PURE__ */ jsxRuntime.jsx(React.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1655
|
+
return /* @__PURE__ */ jsxRuntime.jsx(React.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.ViewerMessage, { children: "Loading\u2026" }), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1656
1656
|
GuidedSigningViewer,
|
|
1657
1657
|
{
|
|
1658
1658
|
...guidedProps,
|
|
@@ -1666,7 +1666,7 @@ function ViewerPdfPane({
|
|
|
1666
1666
|
) });
|
|
1667
1667
|
}
|
|
1668
1668
|
if (placingSignature) {
|
|
1669
|
-
return /* @__PURE__ */ jsxRuntime.jsx(React.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1669
|
+
return /* @__PURE__ */ jsxRuntime.jsx(React.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.ViewerMessage, { children: "Loading\u2026" }), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1670
1670
|
SignaturePlacementViewer,
|
|
1671
1671
|
{
|
|
1672
1672
|
...viewerProps,
|
|
@@ -1682,7 +1682,7 @@ function ViewerPdfPane({
|
|
|
1682
1682
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1683
1683
|
React.Suspense,
|
|
1684
1684
|
{
|
|
1685
|
-
fallback: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1685
|
+
fallback: /* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.ViewerMessage, { children: annotating ? "Loading annotation tools\u2026" : "Loading markup\u2026" }),
|
|
1686
1686
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1687
1687
|
AnnotatedPdfViewer,
|
|
1688
1688
|
{
|
|
@@ -1805,17 +1805,17 @@ function DocumentViewerDialog({
|
|
|
1805
1805
|
) });
|
|
1806
1806
|
}
|
|
1807
1807
|
var NativeDocxEditor = React.lazy(
|
|
1808
|
-
() => import('./ConnectedNativeDocxEditor-
|
|
1808
|
+
() => import('./ConnectedNativeDocxEditor-7EZYSH57.cjs').then((m) => ({
|
|
1809
1809
|
default: m.ConnectedNativeDocxEditor
|
|
1810
1810
|
}))
|
|
1811
1811
|
);
|
|
1812
1812
|
var StreamedWordArtifact = React.lazy(
|
|
1813
|
-
() => import('./ConnectedStreamedWordArtifact-
|
|
1813
|
+
() => import('./ConnectedStreamedWordArtifact-ROPG2O4H.cjs').then((m) => ({
|
|
1814
1814
|
default: m.ConnectedStreamedWordArtifact
|
|
1815
1815
|
}))
|
|
1816
1816
|
);
|
|
1817
1817
|
var NativeDocxComparison = React.lazy(
|
|
1818
|
-
() => import('./ConnectedNativeDocxComparison-
|
|
1818
|
+
() => import('./ConnectedNativeDocxComparison-OYZ2HZ7G.cjs').then((m) => ({
|
|
1819
1819
|
default: m.ConnectedNativeDocxComparison
|
|
1820
1820
|
}))
|
|
1821
1821
|
);
|
|
@@ -1992,15 +1992,15 @@ function DocumentViewerContent({
|
|
|
1992
1992
|
};
|
|
1993
1993
|
const documentTitle = streamingDoc?.title || draftDoc?.title || documentData?.doc_metadata?.title || documentData?.file_name || "Document";
|
|
1994
1994
|
const pageNav = totalPages > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1995
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1995
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.ViewerZoomControl, { zoom, onCycle: () => setZoom(viewers.cycleZoom(zoom)) }),
|
|
1996
1996
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1997
|
-
|
|
1997
|
+
chunkWXFPG2GS_cjs.PdfPageNav,
|
|
1998
1998
|
{
|
|
1999
1999
|
canPrev: (viewingDocumentPage || 1) > 1,
|
|
2000
2000
|
canNext: (viewingDocumentPage || 1) < totalPages,
|
|
2001
2001
|
onPrev: () => stepPage(-1),
|
|
2002
2002
|
onNext: () => stepPage(1),
|
|
2003
|
-
counter: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2003
|
+
counter: /* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.ViewerPageCounter, { page: viewingDocumentPage || 1, total: totalPages, onGoTo: goToPage })
|
|
2004
2004
|
}
|
|
2005
2005
|
)
|
|
2006
2006
|
] });
|
|
@@ -2024,7 +2024,7 @@ function DocumentViewerContent({
|
|
|
2024
2024
|
);
|
|
2025
2025
|
const titleBlock = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2026
2026
|
isDraft ? support.renderDraftTitle?.(documentId) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
2027
|
-
|
|
2027
|
+
chunkWXFPG2GS_cjs.ViewerTitle,
|
|
2028
2028
|
{
|
|
2029
2029
|
title: documentTitle,
|
|
2030
2030
|
versionLabel: currentVersionLabel,
|
|
@@ -2049,7 +2049,7 @@ function DocumentViewerContent({
|
|
|
2049
2049
|
// A draft's kind replaces the tabs: neither Versions nor the text view means anything
|
|
2050
2050
|
// before the first save.
|
|
2051
2051
|
support.renderDraftKind?.(documentId)
|
|
2052
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
2052
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.ViewerTabBar, { tabs: viewerTabs, activeId: activeTab, onChange: handleTabChange }),
|
|
2053
2053
|
!isCompact && titleBlock
|
|
2054
2054
|
] });
|
|
2055
2055
|
const annotatable = documentTools.canAnnotate({
|
|
@@ -2122,7 +2122,7 @@ function DocumentViewerContent({
|
|
|
2122
2122
|
}
|
|
2123
2123
|
),
|
|
2124
2124
|
activeTab === "pdf" && isImage && pdfBlob && /* @__PURE__ */ jsxRuntime.jsx(
|
|
2125
|
-
|
|
2125
|
+
chunkWXFPG2GS_cjs.ViewerImageActions,
|
|
2126
2126
|
{
|
|
2127
2127
|
compact: isCompact,
|
|
2128
2128
|
onUseAsReference: support.useImageAsReference ? () => support.useImageAsReference(documentId) : void 0,
|
|
@@ -2191,7 +2191,7 @@ function DocumentViewerContent({
|
|
|
2191
2191
|
{
|
|
2192
2192
|
state: documentData?.shared ? "shared" : "private",
|
|
2193
2193
|
onToggle: share,
|
|
2194
|
-
disabled: !
|
|
2194
|
+
disabled: !chunkWXFPG2GS_cjs.canChangeVisibility(documentData, currentUserId),
|
|
2195
2195
|
disabledTooltip: "Only the owner can change visibility",
|
|
2196
2196
|
tooltip: documentData?.shared ? "Shared with the workspace \u2014 click to share with specific people" : "Share with the workspace, then optionally notify specific people by email",
|
|
2197
2197
|
variant: "outline",
|
|
@@ -2336,7 +2336,7 @@ function DocumentViewerContent({
|
|
|
2336
2336
|
onZoomChange: setZoom
|
|
2337
2337
|
};
|
|
2338
2338
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2339
|
-
|
|
2339
|
+
chunkWXFPG2GS_cjs.ViewerFrame,
|
|
2340
2340
|
{
|
|
2341
2341
|
frameRef: containerRef,
|
|
2342
2342
|
contentId: documentId,
|
|
@@ -2381,7 +2381,7 @@ function DocumentViewerContent({
|
|
|
2381
2381
|
)
|
|
2382
2382
|
),
|
|
2383
2383
|
children: [
|
|
2384
|
-
isComparing && /* @__PURE__ */ jsxRuntime.jsx(React.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2384
|
+
isComparing && /* @__PURE__ */ jsxRuntime.jsx(React.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.ViewerMessage, { children: "Loading comparison\u2026" }), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2385
2385
|
NativeDocxComparison,
|
|
2386
2386
|
{
|
|
2387
2387
|
baseId: compareDocumentId,
|
|
@@ -2391,7 +2391,7 @@ function DocumentViewerContent({
|
|
|
2391
2391
|
) }),
|
|
2392
2392
|
isCaptureDraft && support.renderCaptureDraft?.(documentId),
|
|
2393
2393
|
!isCaptureDraft && (activeTab === "pdf" || isMedia && activeTab === "html") && !isArtifact && !isComparing && /* @__PURE__ */ jsxRuntime.jsxs(chunkUWIILWDI_cjs.ViewerPane, { hidden: activeTab !== "pdf", children: [
|
|
2394
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2394
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.DocumentLabelBar, { summaries: labelSummaries }),
|
|
2395
2395
|
!isMedia && !isImage && signatureBanner,
|
|
2396
2396
|
activeTab === "pdf" && !isMedia && !isImage && /* @__PURE__ */ jsxRuntime.jsx(
|
|
2397
2397
|
chunkKB3VXPJ7_cjs.MarkupNotices,
|
|
@@ -2401,7 +2401,7 @@ function DocumentViewerContent({
|
|
|
2401
2401
|
onOpenVersion: (n) => setSnapshotDocumentId(`${documentId}@v${n}`)
|
|
2402
2402
|
}
|
|
2403
2403
|
),
|
|
2404
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2404
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.ViewerControlBar, { controls: activeTab === "pdf" && pageNav, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2405
2405
|
ViewerPdfPane,
|
|
2406
2406
|
{
|
|
2407
2407
|
documentId,
|
|
@@ -2440,7 +2440,7 @@ function DocumentViewerContent({
|
|
|
2440
2440
|
}
|
|
2441
2441
|
),
|
|
2442
2442
|
activeTab === "edit" && isArtifact && liveKind && /* @__PURE__ */ jsxRuntime.jsx(chunk7QN7CERW_cjs.ArtifactCodeView, { source: liveSource, fileName: documentData?.file_name ?? void 0 }),
|
|
2443
|
-
activeTab === "edit" && isArtifact && !liveKind && !isStreaming && !isComparing && /* @__PURE__ */ jsxRuntime.jsxs(React.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2443
|
+
activeTab === "edit" && isArtifact && !liveKind && !isStreaming && !isComparing && /* @__PURE__ */ jsxRuntime.jsxs(React.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.ViewerMessage, { children: "Loading editor\u2026" }), children: [
|
|
2444
2444
|
isSigned && !snapshotDocumentId && /* @__PURE__ */ jsxRuntime.jsx(chunkKB3VXPJ7_cjs.SignedEditNote, {}),
|
|
2445
2445
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2446
2446
|
NativeDocxEditor,
|
|
@@ -2483,8 +2483,8 @@ function DocumentViewerContent({
|
|
|
2483
2483
|
onOpenTranslation: (id) => setViewingDocumentId(id)
|
|
2484
2484
|
}
|
|
2485
2485
|
),
|
|
2486
|
-
activeTab === "xlsx" && isXlsx && (xlsxBlob ? /* @__PURE__ */ jsxRuntime.jsx(viewers.XlsxViewer, { blob: xlsxBlob }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
2487
|
-
activeTab === "docx" && isDocx && !isComparing && /* @__PURE__ */ jsxRuntime.jsxs(React.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2486
|
+
activeTab === "xlsx" && isXlsx && (xlsxBlob ? /* @__PURE__ */ jsxRuntime.jsx(viewers.XlsxViewer, { blob: xlsxBlob }) : /* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.ViewerMessage, { children: xlsxError ? "Failed to load spreadsheet" : "Loading spreadsheet..." })),
|
|
2487
|
+
activeTab === "docx" && isDocx && !isComparing && /* @__PURE__ */ jsxRuntime.jsxs(React.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.ViewerMessage, { children: "Loading editor\u2026" }), children: [
|
|
2488
2488
|
signatureBanner,
|
|
2489
2489
|
isSigned && !snapshotDocumentId && /* @__PURE__ */ jsxRuntime.jsx(chunkKB3VXPJ7_cjs.SignedEditNote, {}),
|
|
2490
2490
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -2497,7 +2497,7 @@ function DocumentViewerContent({
|
|
|
2497
2497
|
`${snapshotDocumentId || documentId}-${snapshotDocumentId ? "snapshot" : "live"}`
|
|
2498
2498
|
)
|
|
2499
2499
|
] }),
|
|
2500
|
-
streamingDoc && isStreaming && isArtifact && !liveKind && !isComparing && (activeTab === "html" || activeTab === "edit") && /* @__PURE__ */ jsxRuntime.jsx(React.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2500
|
+
streamingDoc && isStreaming && isArtifact && !liveKind && !isComparing && (activeTab === "html" || activeTab === "edit") && /* @__PURE__ */ jsxRuntime.jsx(React.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.ViewerMessage, { children: "Opening draft\u2026" }), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2501
2501
|
StreamedWordArtifact,
|
|
2502
2502
|
{
|
|
2503
2503
|
documentId: documentId.startsWith("doc-") ? documentId : void 0,
|
|
@@ -2507,7 +2507,7 @@ function DocumentViewerContent({
|
|
|
2507
2507
|
},
|
|
2508
2508
|
documentId
|
|
2509
2509
|
) }),
|
|
2510
|
-
!isCaptureDraft && !isComparing && activeTab === "html" && !(isStreaming && isArtifact && !liveKind) && /* @__PURE__ */ jsxRuntime.jsx(chunkUWIILWDI_cjs.ViewerPane, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2510
|
+
!isCaptureDraft && !isComparing && activeTab === "html" && !(isStreaming && isArtifact && !liveKind) && /* @__PURE__ */ jsxRuntime.jsx(chunkUWIILWDI_cjs.ViewerPane, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkWXFPG2GS_cjs.ViewerControlBar, { controls: pageNav, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2511
2511
|
ParsedTextView,
|
|
2512
2512
|
{
|
|
2513
2513
|
documentId: pdfSnapshotId || documentId,
|
|
@@ -2523,5 +2523,5 @@ function DocumentViewerContent({
|
|
|
2523
2523
|
}
|
|
2524
2524
|
|
|
2525
2525
|
exports.ConnectedDocumentViewer = ConnectedDocumentViewer;
|
|
2526
|
-
//# sourceMappingURL=chunk-
|
|
2527
|
-
//# sourceMappingURL=chunk-
|
|
2526
|
+
//# sourceMappingURL=chunk-C2UKBYTD.cjs.map
|
|
2527
|
+
//# sourceMappingURL=chunk-C2UKBYTD.cjs.map
|