@arbidocs/blocks 0.5.16 → 0.5.18
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-PNF46ZCD.js → ConnectedCallDock-2NBGBWY5.js} +6 -6
- package/dist/{ConnectedCallDock-PNF46ZCD.js.map → ConnectedCallDock-2NBGBWY5.js.map} +1 -1
- package/dist/{ConnectedCallDock-AN7H7EA5.cjs → ConnectedCallDock-W5WIPP3F.cjs} +15 -15
- package/dist/{ConnectedCallDock-AN7H7EA5.cjs.map → ConnectedCallDock-W5WIPP3F.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-BCBK3JOH.js → ConnectedCallRoom-5AZH33AJ.js} +6 -6
- package/dist/{ConnectedCallRoom-BCBK3JOH.js.map → ConnectedCallRoom-5AZH33AJ.js.map} +1 -1
- package/dist/{ConnectedCallRoom-CISDTK4R.cjs → ConnectedCallRoom-XR25N6PN.cjs} +7 -7
- package/dist/{ConnectedCallRoom-CISDTK4R.cjs.map → ConnectedCallRoom-XR25N6PN.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-FCAICKSW.js → ConnectedNativeDocxComparison-FZNRXKCH.js} +12 -11
- package/dist/{ConnectedNativeDocxComparison-FCAICKSW.js.map → ConnectedNativeDocxComparison-FZNRXKCH.js.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-M2YD5ZIU.cjs → ConnectedNativeDocxComparison-KEDY65GN.cjs} +13 -12
- package/dist/{ConnectedNativeDocxComparison-M2YD5ZIU.cjs.map → ConnectedNativeDocxComparison-KEDY65GN.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-WCVJ7UTP.js → ConnectedNativeDocxEditor-E3ZGVJZJ.js} +11 -10
- package/dist/{ConnectedNativeDocxEditor-WCVJ7UTP.js.map → ConnectedNativeDocxEditor-E3ZGVJZJ.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-USWYSQTI.cjs → ConnectedNativeDocxEditor-WDIX32SH.cjs} +13 -12
- package/dist/{ConnectedNativeDocxEditor-USWYSQTI.cjs.map → ConnectedNativeDocxEditor-WDIX32SH.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-4VXP44AG.cjs → ConnectedStreamedWordArtifact-AALQYJ5H.cjs} +13 -12
- package/dist/ConnectedStreamedWordArtifact-AALQYJ5H.cjs.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-EWTERIGT.js → ConnectedStreamedWordArtifact-HTUZ2KK2.js} +12 -11
- package/dist/ConnectedStreamedWordArtifact-HTUZ2KK2.js.map +1 -0
- package/dist/{WorkspaceTableView-V236NDPK.js → WorkspaceTableView-4VMLQOQ5.js} +4 -4
- package/dist/{WorkspaceTableView-V236NDPK.js.map → WorkspaceTableView-4VMLQOQ5.js.map} +1 -1
- package/dist/{WorkspaceTableView-P4PCXHZ6.cjs → WorkspaceTableView-S2ZHZ64L.cjs} +5 -5
- package/dist/{WorkspaceTableView-P4PCXHZ6.cjs.map → WorkspaceTableView-S2ZHZ64L.cjs.map} +1 -1
- package/dist/agents/index.cjs +330 -329
- package/dist/agents/index.js +8 -7
- package/dist/calls/index.cjs +142 -142
- package/dist/calls/index.js +10 -10
- package/dist/{chunk-5QJDDEYV.js → chunk-2AWDMU6T.js} +3 -3
- package/dist/{chunk-5QJDDEYV.js.map → chunk-2AWDMU6T.js.map} +1 -1
- package/dist/{chunk-ATNQD3AE.js → chunk-2EYAJAKT.js} +3 -3
- package/dist/{chunk-ATNQD3AE.js.map → chunk-2EYAJAKT.js.map} +1 -1
- package/dist/{chunk-PBM6BFFH.cjs → chunk-3L5MXUBZ.cjs} +4 -4
- package/dist/{chunk-PBM6BFFH.cjs.map → chunk-3L5MXUBZ.cjs.map} +1 -1
- package/dist/{chunk-4IMTH6Z4.js → chunk-5RHNGSVP.js} +3 -3
- package/dist/{chunk-4IMTH6Z4.js.map → chunk-5RHNGSVP.js.map} +1 -1
- package/dist/{chunk-TRHAIU6U.js → chunk-5S424MAG.js} +4 -4
- package/dist/{chunk-TRHAIU6U.js.map → chunk-5S424MAG.js.map} +1 -1
- package/dist/{chunk-TDIC7IXS.cjs → chunk-63VQD4R7.cjs} +7 -7
- package/dist/{chunk-TDIC7IXS.cjs.map → chunk-63VQD4R7.cjs.map} +1 -1
- package/dist/{chunk-LFBT3XTK.cjs → chunk-6MHGFCIW.cjs} +14 -14
- package/dist/{chunk-LFBT3XTK.cjs.map → chunk-6MHGFCIW.cjs.map} +1 -1
- package/dist/{chunk-N5YEF3LC.js → chunk-7F5Z4K5W.js} +18 -20
- package/dist/chunk-7F5Z4K5W.js.map +1 -0
- package/dist/{chunk-5DRKMFRL.cjs → chunk-APZFUKR4.cjs} +55 -55
- package/dist/{chunk-5DRKMFRL.cjs.map → chunk-APZFUKR4.cjs.map} +1 -1
- package/dist/{chunk-ZJX7RUQ3.js → chunk-B5BJH76B.js} +4 -4
- package/dist/{chunk-ZJX7RUQ3.js.map → chunk-B5BJH76B.js.map} +1 -1
- package/dist/{chunk-4AAM6UQG.js → chunk-BIZDGRNM.js} +3 -3
- package/dist/{chunk-4AAM6UQG.js.map → chunk-BIZDGRNM.js.map} +1 -1
- package/dist/{chunk-5NFQCGGO.cjs → chunk-BLESTVHK.cjs} +5 -5
- package/dist/{chunk-5NFQCGGO.cjs.map → chunk-BLESTVHK.cjs.map} +1 -1
- package/dist/{chunk-5TALCIRH.js → chunk-CH4FHZSR.js} +4 -91
- package/dist/chunk-CH4FHZSR.js.map +1 -0
- package/dist/{chunk-UCVCYHAC.js → chunk-CTCF4I22.js} +3 -3
- package/dist/{chunk-UCVCYHAC.js.map → chunk-CTCF4I22.js.map} +1 -1
- package/dist/{chunk-AAWF27UG.js → chunk-D3OGQ5ZW.js} +3 -3
- package/dist/{chunk-AAWF27UG.js.map → chunk-D3OGQ5ZW.js.map} +1 -1
- package/dist/{chunk-DJ4BTWMA.cjs → chunk-DAL6B556.cjs} +4 -4
- package/dist/{chunk-DJ4BTWMA.cjs.map → chunk-DAL6B556.cjs.map} +1 -1
- package/dist/{chunk-RAPIHS52.js → chunk-E3H7Q3ZO.js} +3 -3
- package/dist/{chunk-RAPIHS52.js.map → chunk-E3H7Q3ZO.js.map} +1 -1
- package/dist/{chunk-XUWZMZP5.cjs → chunk-F4UYC2M2.cjs} +5 -5
- package/dist/{chunk-XUWZMZP5.cjs.map → chunk-F4UYC2M2.cjs.map} +1 -1
- package/dist/{chunk-WINJF2AK.js → chunk-F6UJUUFK.js} +3 -3
- package/dist/{chunk-WINJF2AK.js.map → chunk-F6UJUUFK.js.map} +1 -1
- package/dist/{chunk-I5KTRLKB.cjs → chunk-G6GUMZOZ.cjs} +10 -10
- package/dist/{chunk-I5KTRLKB.cjs.map → chunk-G6GUMZOZ.cjs.map} +1 -1
- package/dist/{chunk-RG4SLXZG.js → chunk-G7PAZQHJ.js} +3 -3
- package/dist/{chunk-RG4SLXZG.js.map → chunk-G7PAZQHJ.js.map} +1 -1
- package/dist/{chunk-CJFJNR2V.js → chunk-GTO65EQQ.js} +3 -3
- package/dist/{chunk-CJFJNR2V.js.map → chunk-GTO65EQQ.js.map} +1 -1
- package/dist/{chunk-IFE4MZXD.js → chunk-H7L43DIE.js} +3 -3
- package/dist/{chunk-IFE4MZXD.js.map → chunk-H7L43DIE.js.map} +1 -1
- package/dist/{chunk-VPUGVNGV.cjs → chunk-HVEDOBLY.cjs} +4 -4
- package/dist/{chunk-VPUGVNGV.cjs.map → chunk-HVEDOBLY.cjs.map} +1 -1
- package/dist/{chunk-LHLBMP24.js → chunk-HVXNEOOU.js} +6 -6
- package/dist/{chunk-LHLBMP24.js.map → chunk-HVXNEOOU.js.map} +1 -1
- package/dist/{chunk-PSWTOD7E.js → chunk-HXYYH4OB.js} +3 -3
- package/dist/{chunk-PSWTOD7E.js.map → chunk-HXYYH4OB.js.map} +1 -1
- package/dist/{chunk-4MADJGGF.cjs → chunk-JYYJGYUP.cjs} +4 -4
- package/dist/{chunk-4MADJGGF.cjs.map → chunk-JYYJGYUP.cjs.map} +1 -1
- package/dist/{chunk-AUDT4L2H.cjs → chunk-KNQQFJNE.cjs} +4 -4
- package/dist/{chunk-AUDT4L2H.cjs.map → chunk-KNQQFJNE.cjs.map} +1 -1
- package/dist/{chunk-TSD3GFOH.js → chunk-L5UHXBJK.js} +3 -3
- package/dist/{chunk-TSD3GFOH.js.map → chunk-L5UHXBJK.js.map} +1 -1
- package/dist/{chunk-ITOQYYTG.cjs → chunk-LFVD3CS5.cjs} +5 -5
- package/dist/{chunk-ITOQYYTG.cjs.map → chunk-LFVD3CS5.cjs.map} +1 -1
- package/dist/{chunk-C2CWWEHO.cjs → chunk-LKK52DEY.cjs} +18 -20
- package/dist/chunk-LKK52DEY.cjs.map +1 -0
- package/dist/{chunk-52BZME74.cjs → chunk-LNLAD7XW.cjs} +4 -4
- package/dist/{chunk-52BZME74.cjs.map → chunk-LNLAD7XW.cjs.map} +1 -1
- package/dist/{chunk-SWBD76UN.cjs → chunk-M36FYCOE.cjs} +9 -9
- package/dist/{chunk-SWBD76UN.cjs.map → chunk-M36FYCOE.cjs.map} +1 -1
- package/dist/{chunk-RPWNNTJJ.js → chunk-M3AADQ4Y.js} +7 -7
- package/dist/{chunk-RPWNNTJJ.js.map → chunk-M3AADQ4Y.js.map} +1 -1
- package/dist/{chunk-NEODSOVW.js → chunk-MYJJ3RPH.js} +3 -3
- package/dist/{chunk-NEODSOVW.js.map → chunk-MYJJ3RPH.js.map} +1 -1
- package/dist/{chunk-3NTC4UZV.js → chunk-NUHWRBSL.js} +3 -3
- package/dist/{chunk-3NTC4UZV.js.map → chunk-NUHWRBSL.js.map} +1 -1
- package/dist/{chunk-VP7VAE2M.cjs → chunk-P4NS4LV7.cjs} +6 -6
- package/dist/{chunk-VP7VAE2M.cjs.map → chunk-P4NS4LV7.cjs.map} +1 -1
- package/dist/{chunk-MRG4OUL3.js → chunk-PJYE6AJS.js} +6 -6
- package/dist/{chunk-MRG4OUL3.js.map → chunk-PJYE6AJS.js.map} +1 -1
- package/dist/{chunk-JWNCZ6UP.cjs → chunk-QVMQMPBZ.cjs} +4 -4
- package/dist/{chunk-JWNCZ6UP.cjs.map → chunk-QVMQMPBZ.cjs.map} +1 -1
- package/dist/{chunk-3GT6GPTM.cjs → chunk-RZ3EBN7G.cjs} +26 -26
- package/dist/{chunk-3GT6GPTM.cjs.map → chunk-RZ3EBN7G.cjs.map} +1 -1
- package/dist/{chunk-CPLRUC7D.cjs → chunk-SHRNXL2Q.cjs} +76 -76
- package/dist/{chunk-CPLRUC7D.cjs.map → chunk-SHRNXL2Q.cjs.map} +1 -1
- package/dist/chunk-SI222Z3A.cjs +185 -0
- package/dist/chunk-SI222Z3A.cjs.map +1 -0
- package/dist/{chunk-DCQGJNZQ.js → chunk-SX2RX5DT.js} +3 -3
- package/dist/{chunk-DCQGJNZQ.js.map → chunk-SX2RX5DT.js.map} +1 -1
- package/dist/{chunk-3EVLRDXP.cjs → chunk-SZGUU2TS.cjs} +7 -7
- package/dist/{chunk-3EVLRDXP.cjs.map → chunk-SZGUU2TS.cjs.map} +1 -1
- package/dist/{chunk-A6MGGHHN.cjs → chunk-T55BHIB7.cjs} +4 -4
- package/dist/{chunk-A6MGGHHN.cjs.map → chunk-T55BHIB7.cjs.map} +1 -1
- package/dist/{chunk-35AUFGD7.js → chunk-T5ZFFHC6.js} +4 -4
- package/dist/{chunk-35AUFGD7.js.map → chunk-T5ZFFHC6.js.map} +1 -1
- package/dist/{chunk-ML27HIMM.cjs → chunk-TCT2VS72.cjs} +6 -6
- package/dist/{chunk-ML27HIMM.cjs.map → chunk-TCT2VS72.cjs.map} +1 -1
- package/dist/{chunk-OKYALUAN.js → chunk-TXLMCQOH.js} +4 -4
- package/dist/{chunk-OKYALUAN.js.map → chunk-TXLMCQOH.js.map} +1 -1
- package/dist/chunk-U4HWVCRN.js +180 -0
- package/dist/chunk-U4HWVCRN.js.map +1 -0
- package/dist/{chunk-IUPZMPXP.cjs → chunk-UR6DWL4L.cjs} +20 -20
- package/dist/{chunk-IUPZMPXP.cjs.map → chunk-UR6DWL4L.cjs.map} +1 -1
- package/dist/{chunk-AE3M3RTH.js → chunk-VNWWK44S.js} +6 -6
- package/dist/{chunk-AE3M3RTH.js.map → chunk-VNWWK44S.js.map} +1 -1
- package/dist/{chunk-HJQLVCIK.cjs → chunk-WUG24K7P.cjs} +4 -4
- package/dist/{chunk-HJQLVCIK.cjs.map → chunk-WUG24K7P.cjs.map} +1 -1
- package/dist/{chunk-U7ZBIU4S.cjs → chunk-XZ2IUJQV.cjs} +4 -4
- package/dist/{chunk-U7ZBIU4S.cjs.map → chunk-XZ2IUJQV.cjs.map} +1 -1
- package/dist/{chunk-5RIPA5DV.js → chunk-YFLARXLW.js} +5 -5
- package/dist/{chunk-5RIPA5DV.js.map → chunk-YFLARXLW.js.map} +1 -1
- package/dist/{chunk-OTV7TUKD.cjs → chunk-Z3IB6UMJ.cjs} +29 -29
- package/dist/{chunk-OTV7TUKD.cjs.map → chunk-Z3IB6UMJ.cjs.map} +1 -1
- package/dist/{chunk-BZF6E46W.cjs → chunk-ZLSMS6OK.cjs} +5 -92
- package/dist/chunk-ZLSMS6OK.cjs.map +1 -0
- package/dist/citations/index.cjs +12 -10
- package/dist/citations/index.js +4 -2
- package/dist/collaboration/index.cjs +68 -68
- package/dist/collaboration/index.js +2 -2
- package/dist/connect/docx.cjs +15 -14
- package/dist/connect/docx.js +11 -10
- package/dist/connect/index.cjs +774 -775
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +34 -35
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +95 -95
- package/dist/connect/viewer.js +18 -18
- package/dist/connection/billing/{ReferralReward.d.ts → ConnectedReferralReward.d.ts} +7 -7
- package/dist/connection/billing/referral-reward.d.ts +1 -1
- package/dist/databases/index.cjs +2 -2
- package/dist/databases/index.js +1 -1
- package/dist/document-tools/index.cjs +16 -16
- package/dist/document-tools/index.js +2 -2
- package/dist/facts/index.cjs +6 -5
- package/dist/facts/index.cjs.map +1 -1
- package/dist/facts/index.js +4 -3
- package/dist/facts/index.js.map +1 -1
- package/dist/files/index.cjs +226 -225
- package/dist/files/index.js +5 -4
- package/dist/home/index.cjs +31 -30
- package/dist/home/index.cjs.map +1 -1
- package/dist/home/index.js +6 -5
- package/dist/home/index.js.map +1 -1
- package/dist/index.cjs +521 -520
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +16 -15
- package/dist/index.js.map +1 -1
- package/dist/provider/dialogs.d.ts +43 -0
- package/dist/retrieval/index.cjs +5 -4
- package/dist/retrieval/index.js +3 -2
- package/dist/settings/index.cjs +3 -3
- package/dist/settings/index.d.ts +1 -1
- package/dist/settings/index.js +1 -1
- package/dist/shell/index.cjs +47 -46
- package/dist/shell/index.js +4 -3
- package/dist/studio/index.cjs +14 -13
- package/dist/studio/index.cjs.map +1 -1
- package/dist/studio/index.js +6 -5
- package/dist/studio/index.js.map +1 -1
- package/dist/workflow-canvas/index.cjs +28 -27
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.js +10 -9
- package/dist/workflow-canvas/index.js.map +1 -1
- package/dist/workspaces/index.cjs +22 -20
- package/dist/workspaces/index.cjs.map +1 -1
- package/dist/workspaces/index.js +6 -4
- package/dist/workspaces/index.js.map +1 -1
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-4VXP44AG.cjs.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-EWTERIGT.js.map +0 -1
- package/dist/chunk-5TALCIRH.js.map +0 -1
- package/dist/chunk-BZF6E46W.cjs.map +0 -1
- package/dist/chunk-C2CWWEHO.cjs.map +0 -1
- package/dist/chunk-ECERC6TI.js +0 -77
- package/dist/chunk-ECERC6TI.js.map +0 -1
- package/dist/chunk-N5YEF3LC.js.map +0 -1
- package/dist/chunk-ZAVEMQ37.cjs +0 -80
- package/dist/chunk-ZAVEMQ37.cjs.map +0 -1
- package/dist/settings/ConfirmDialog.d.ts +0 -31
package/dist/connect/viewer.js
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { ConnectedMarkdown, ConnectedDocumentToolsProvider, useDocumentViewerSupport, useViewerStreamingDocument, useViewerDraftDocument, useViewerIsDetached, useViewerPassageCitation } from '../chunk-
|
|
3
|
-
export { ConnectedDocumentToolsProvider } from '../chunk-
|
|
4
|
-
import { HtmlPassage, ViewerTitle, ViewerTabBar, ViewerImageActions, canChangeVisibility, ViewerFrame, ViewerMessage, DocumentLabelBar, ViewerControlBar, ViewerZoomControl, PdfPageNav, ViewerPageCounter, summariseDocTags, isDocumentLabel, ViewerPreviewUnavailable, ViewerLoadError, HtmlViewerRoot, CitedRunNav, HtmlViewerSurface, HtmlPage, HtmlViewerEmpty, TagPassagePanel } from '../chunk-
|
|
2
|
+
import { ConnectedMarkdown, ConnectedDocumentToolsProvider, useDocumentViewerSupport, useViewerStreamingDocument, useViewerDraftDocument, useViewerIsDetached, useViewerPassageCitation } from '../chunk-YFLARXLW.js';
|
|
3
|
+
export { ConnectedDocumentToolsProvider } from '../chunk-YFLARXLW.js';
|
|
4
|
+
import { HtmlPassage, ViewerTitle, ViewerTabBar, ViewerImageActions, canChangeVisibility, ViewerFrame, ViewerMessage, DocumentLabelBar, ViewerControlBar, ViewerZoomControl, PdfPageNav, ViewerPageCounter, summariseDocTags, isDocumentLabel, ViewerPreviewUnavailable, ViewerLoadError, HtmlViewerRoot, CitedRunNav, HtmlViewerSurface, HtmlPage, HtmlViewerEmpty, TagPassagePanel } from '../chunk-T5ZFFHC6.js';
|
|
5
5
|
import '../chunk-JJA6GQKH.js';
|
|
6
6
|
import '../chunk-RC6VTY2H.js';
|
|
7
|
-
import { MarkupViewNote, AnnotateButton, ShowOriginalButton, DownloadMarkupButton, SignButton, PlaceMySignatureButton, RequestSignaturesButton, MarkupNotices, SignedEditNote, VersionSnapshotBar, SignatureRequestBanner } from '../chunk-
|
|
7
|
+
import { MarkupViewNote, AnnotateButton, ShowOriginalButton, DownloadMarkupButton, SignButton, PlaceMySignatureButton, RequestSignaturesButton, MarkupNotices, SignedEditNote, VersionSnapshotBar, SignatureRequestBanner } from '../chunk-2EYAJAKT.js';
|
|
8
8
|
import { SignatureStatus, SignDocumentDialog } from '../chunk-PQU6LE7U.js';
|
|
9
9
|
import { ViewerStatusNote, ViewerHeaderStart, ViewerHeaderEnd, ViewerPane } from '../chunk-6HKLTYNN.js';
|
|
10
10
|
import '../chunk-2R3GGNPA.js';
|
|
11
11
|
import '../chunk-TBNXJHTP.js';
|
|
12
|
-
import '../chunk-
|
|
12
|
+
import '../chunk-F6UJUUFK.js';
|
|
13
13
|
import { ErrorBoundary } from '../chunk-EQ3WRY2N.js';
|
|
14
14
|
import '../chunk-JMQLTMJ7.js';
|
|
15
15
|
import '../chunk-6MMYWBYS.js';
|
|
16
|
-
import { PassageMark, NoteMark, LabelMark, PassagePill } from '../chunk-
|
|
16
|
+
import { PassageMark, NoteMark, LabelMark, PassagePill } from '../chunk-L5UHXBJK.js';
|
|
17
17
|
import { ShareControl } from '../chunk-K4BGOPGG.js';
|
|
18
|
+
import { ArtifactCompareBar, ArtifactPreview, ArtifactCodeView, VersionTimeline } from '../chunk-65S53MZK.js';
|
|
19
|
+
import '../chunk-NS4JD2VR.js';
|
|
20
|
+
import '../chunk-LOJVUGBJ.js';
|
|
18
21
|
import '../chunk-M4S75AEJ.js';
|
|
19
22
|
import '../chunk-5LXQPP2K.js';
|
|
20
23
|
import '../chunk-NUNKSZKU.js';
|
|
21
24
|
import '../chunk-RLWIUUQ5.js';
|
|
22
25
|
import '../chunk-YU2KUMGE.js';
|
|
23
|
-
import '../chunk-
|
|
24
|
-
import '../chunk-
|
|
25
|
-
import {
|
|
26
|
-
import '../chunk-
|
|
27
|
-
import '../chunk-LOJVUGBJ.js';
|
|
28
|
-
import { useConnectedConversations, useConnectedDocuments, useConnectedTags } from '../chunk-RG4SLXZG.js';
|
|
29
|
-
import { useConnectedWorkspace } from '../chunk-4AAM6UQG.js';
|
|
30
|
-
import '../chunk-ECERC6TI.js';
|
|
26
|
+
import '../chunk-SX2RX5DT.js';
|
|
27
|
+
import '../chunk-7F5Z4K5W.js';
|
|
28
|
+
import { useConnectedConversations, useConnectedDocuments, useConnectedTags } from '../chunk-G7PAZQHJ.js';
|
|
29
|
+
import { useConnectedWorkspace } from '../chunk-BIZDGRNM.js';
|
|
31
30
|
import '../chunk-T4P237N6.js';
|
|
32
31
|
import { TabHeader } from '../chunk-ABEKUV6L.js';
|
|
33
32
|
import '../chunk-P6GHJSLR.js';
|
|
34
|
-
import { useBlocksEnvironment } from '../chunk-
|
|
33
|
+
import { useBlocksEnvironment } from '../chunk-CH4FHZSR.js';
|
|
34
|
+
import '../chunk-U4HWVCRN.js';
|
|
35
35
|
import '../chunk-TX2ZICS7.js';
|
|
36
36
|
import '../chunk-OKERRHLH.js';
|
|
37
37
|
import '../chunk-DDCMLHXF.js';
|
|
@@ -1713,17 +1713,17 @@ function ViewerPdfPane({
|
|
|
1713
1713
|
return /* @__PURE__ */ jsx(SessionPdfViewer, { ...viewerProps, file: pdfBlob });
|
|
1714
1714
|
}
|
|
1715
1715
|
var NativeDocxEditor = lazy(
|
|
1716
|
-
() => import('../ConnectedNativeDocxEditor-
|
|
1716
|
+
() => import('../ConnectedNativeDocxEditor-E3ZGVJZJ.js').then((m) => ({
|
|
1717
1717
|
default: m.ConnectedNativeDocxEditor
|
|
1718
1718
|
}))
|
|
1719
1719
|
);
|
|
1720
1720
|
var StreamedWordArtifact = lazy(
|
|
1721
|
-
() => import('../ConnectedStreamedWordArtifact-
|
|
1721
|
+
() => import('../ConnectedStreamedWordArtifact-HTUZ2KK2.js').then((m) => ({
|
|
1722
1722
|
default: m.ConnectedStreamedWordArtifact
|
|
1723
1723
|
}))
|
|
1724
1724
|
);
|
|
1725
1725
|
var NativeDocxComparison = lazy(
|
|
1726
|
-
() => import('../ConnectedNativeDocxComparison-
|
|
1726
|
+
() => import('../ConnectedNativeDocxComparison-FZNRXKCH.js').then((m) => ({
|
|
1727
1727
|
default: m.ConnectedNativeDocxComparison
|
|
1728
1728
|
}))
|
|
1729
1729
|
);
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* ConnectedReferralReward — binds the user's referral reward to the reward views.
|
|
3
3
|
*
|
|
4
4
|
* The reward is a single GLOBAL per-user Stripe account balance (mirrored read-only
|
|
5
5
|
* into `settings.extra_discount`) that auto-applies to the user's NEXT invoice. Surfaced as:
|
|
6
|
-
* - `
|
|
7
|
-
* - `
|
|
6
|
+
* - `ConnectedReferralRewardBadge` — standing indicator in the Projects tab header.
|
|
7
|
+
* - `ConnectedReferralRewardSummary` — "subtotal / −reward / you pay now" where the charge is known
|
|
8
8
|
* exactly (new-project first invoice == the shown total).
|
|
9
|
-
* - `
|
|
9
|
+
* - `ConnectedReferralRewardNote` — a one-line note where the exact charge is a proration we
|
|
10
10
|
* can't compute client-side (switching an existing Pro plan).
|
|
11
11
|
*
|
|
12
12
|
* Logic + the `useReferralReward` hook live in `./referral-reward`; the presentation in
|
|
13
13
|
* `@arbidocs/blocks`.
|
|
14
14
|
*/
|
|
15
15
|
/** Standing pill for the Projects tab header — the global available reward. */
|
|
16
|
-
export declare function
|
|
16
|
+
export declare function ConnectedReferralRewardBadge(): import("react").JSX.Element | null;
|
|
17
17
|
/**
|
|
18
18
|
* Available referral reward shown alongside a new-project purchase. When the exact charge is
|
|
19
19
|
* known (`totalCents` + `currency`), we do the math and show subtotal / −reward / you pay now;
|
|
20
20
|
* otherwise we fall back to a one-line note. Renders nothing when there's no reward.
|
|
21
21
|
*/
|
|
22
|
-
export declare function
|
|
22
|
+
export declare function ConnectedReferralRewardSummary({ totalCents, currency, }: {
|
|
23
23
|
/** The known charge for this purchase, in minor units (e.g. pennies). */
|
|
24
24
|
totalCents?: number;
|
|
25
25
|
/** Currency of the charge — must match the reward's currency to apply. */
|
|
@@ -29,4 +29,4 @@ export declare function ReferralRewardSummary({ totalCents, currency, }: {
|
|
|
29
29
|
* One-line note for charges whose exact amount is a proration we don't compute client-side
|
|
30
30
|
* (switching an existing Pro subscription). Stripe applies the reward at charge time.
|
|
31
31
|
*/
|
|
32
|
-
export declare function
|
|
32
|
+
export declare function ConnectedReferralRewardNote(): import("react").JSX.Element | null;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* The reward is a single GLOBAL per-user number — a Stripe account balance mirrored
|
|
5
5
|
* read-only into `settings.extra_discount`. It auto-applies to the user's NEXT invoice.
|
|
6
6
|
* `applyReferralReward` mirrors Stripe's customer-balance logic: applied to the charge,
|
|
7
|
-
* clamped at zero, remainder rolls forward. Components live in `./
|
|
7
|
+
* clamped at zero, remainder rolls forward. Components live in `./ConnectedReferralReward`.
|
|
8
8
|
*/
|
|
9
9
|
export { formatMoney } from './reward-balance';
|
|
10
10
|
export interface ReferralReward {
|
package/dist/databases/index.cjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunkD54JXTPG_cjs = require('../chunk-D54JXTPG.cjs');
|
|
5
|
-
var
|
|
5
|
+
var chunkLKK52DEY_cjs = require('../chunk-LKK52DEY.cjs');
|
|
6
6
|
require('../chunk-FX3K6LNZ.cjs');
|
|
7
7
|
var chunkMHVNT4J3_cjs = require('../chunk-MHVNT4J3.cjs');
|
|
8
8
|
require('../chunk-DES3K4SD.cjs');
|
|
@@ -1378,7 +1378,7 @@ function DatabaseTable({
|
|
|
1378
1378
|
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "database-table" }),
|
|
1379
1379
|
children: [
|
|
1380
1380
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1381
|
-
|
|
1381
|
+
chunkLKK52DEY_cjs.GridView,
|
|
1382
1382
|
{
|
|
1383
1383
|
testId: "database-grid",
|
|
1384
1384
|
items: rows,
|
package/dist/databases/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { DetailPanel, DetailSection, DetailFields, DetailField, DetailLinkList, DetailLinkItem, DetailEmpty } from '../chunk-ZCOVDK2E.js';
|
|
3
|
-
import { GridView } from '../chunk-
|
|
3
|
+
import { GridView } from '../chunk-7F5Z4K5W.js';
|
|
4
4
|
import '../chunk-SLSBJRWW.js';
|
|
5
5
|
import { testIdOr } from '../chunk-7F6CBP3Z.js';
|
|
6
6
|
import '../chunk-VUNV25KB.js';
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkXZ2IUJQV_cjs = require('../chunk-XZ2IUJQV.cjs');
|
|
5
5
|
var chunk2XLVE2XD_cjs = require('../chunk-2XLVE2XD.cjs');
|
|
6
6
|
require('../chunk-UWIILWDI.cjs');
|
|
7
7
|
require('../chunk-NMZI3K6R.cjs');
|
|
8
8
|
var chunkRAYCOBF7_cjs = require('../chunk-RAYCOBF7.cjs');
|
|
9
|
-
require('../chunk-
|
|
9
|
+
require('../chunk-SI222Z3A.cjs');
|
|
10
10
|
require('../chunk-ULWRNGGE.cjs');
|
|
11
11
|
require('../chunk-MHVNT4J3.cjs');
|
|
12
12
|
require('../chunk-DES3K4SD.cjs');
|
|
@@ -15,59 +15,59 @@ require('../chunk-DES3K4SD.cjs');
|
|
|
15
15
|
|
|
16
16
|
Object.defineProperty(exports, "AnnotateButton", {
|
|
17
17
|
enumerable: true,
|
|
18
|
-
get: function () { return
|
|
18
|
+
get: function () { return chunkXZ2IUJQV_cjs.AnnotateButton; }
|
|
19
19
|
});
|
|
20
20
|
Object.defineProperty(exports, "DEFAULT_VERSION_SNAPSHOT_BAR_LABELS", {
|
|
21
21
|
enumerable: true,
|
|
22
|
-
get: function () { return
|
|
22
|
+
get: function () { return chunkXZ2IUJQV_cjs.DEFAULT_VERSION_SNAPSHOT_BAR_LABELS; }
|
|
23
23
|
});
|
|
24
24
|
Object.defineProperty(exports, "DELETE_SAVED_SIGNATURE_TEXT", {
|
|
25
25
|
enumerable: true,
|
|
26
|
-
get: function () { return
|
|
26
|
+
get: function () { return chunkXZ2IUJQV_cjs.DELETE_SAVED_SIGNATURE_TEXT; }
|
|
27
27
|
});
|
|
28
28
|
Object.defineProperty(exports, "DownloadMarkupButton", {
|
|
29
29
|
enumerable: true,
|
|
30
|
-
get: function () { return
|
|
30
|
+
get: function () { return chunkXZ2IUJQV_cjs.DownloadMarkupButton; }
|
|
31
31
|
});
|
|
32
32
|
Object.defineProperty(exports, "MarkupNotices", {
|
|
33
33
|
enumerable: true,
|
|
34
|
-
get: function () { return
|
|
34
|
+
get: function () { return chunkXZ2IUJQV_cjs.MarkupNotices; }
|
|
35
35
|
});
|
|
36
36
|
Object.defineProperty(exports, "MarkupViewNote", {
|
|
37
37
|
enumerable: true,
|
|
38
|
-
get: function () { return
|
|
38
|
+
get: function () { return chunkXZ2IUJQV_cjs.MarkupViewNote; }
|
|
39
39
|
});
|
|
40
40
|
Object.defineProperty(exports, "PlaceMySignatureButton", {
|
|
41
41
|
enumerable: true,
|
|
42
|
-
get: function () { return
|
|
42
|
+
get: function () { return chunkXZ2IUJQV_cjs.PlaceMySignatureButton; }
|
|
43
43
|
});
|
|
44
44
|
Object.defineProperty(exports, "RequestSignaturesButton", {
|
|
45
45
|
enumerable: true,
|
|
46
|
-
get: function () { return
|
|
46
|
+
get: function () { return chunkXZ2IUJQV_cjs.RequestSignaturesButton; }
|
|
47
47
|
});
|
|
48
48
|
Object.defineProperty(exports, "SavedSignatureSettings", {
|
|
49
49
|
enumerable: true,
|
|
50
|
-
get: function () { return
|
|
50
|
+
get: function () { return chunkXZ2IUJQV_cjs.SavedSignatureSettings; }
|
|
51
51
|
});
|
|
52
52
|
Object.defineProperty(exports, "ShowOriginalButton", {
|
|
53
53
|
enumerable: true,
|
|
54
|
-
get: function () { return
|
|
54
|
+
get: function () { return chunkXZ2IUJQV_cjs.ShowOriginalButton; }
|
|
55
55
|
});
|
|
56
56
|
Object.defineProperty(exports, "SignButton", {
|
|
57
57
|
enumerable: true,
|
|
58
|
-
get: function () { return
|
|
58
|
+
get: function () { return chunkXZ2IUJQV_cjs.SignButton; }
|
|
59
59
|
});
|
|
60
60
|
Object.defineProperty(exports, "SignatureRequestBanner", {
|
|
61
61
|
enumerable: true,
|
|
62
|
-
get: function () { return
|
|
62
|
+
get: function () { return chunkXZ2IUJQV_cjs.SignatureRequestBanner; }
|
|
63
63
|
});
|
|
64
64
|
Object.defineProperty(exports, "SignedEditNote", {
|
|
65
65
|
enumerable: true,
|
|
66
|
-
get: function () { return
|
|
66
|
+
get: function () { return chunkXZ2IUJQV_cjs.SignedEditNote; }
|
|
67
67
|
});
|
|
68
68
|
Object.defineProperty(exports, "VersionSnapshotBar", {
|
|
69
69
|
enumerable: true,
|
|
70
|
-
get: function () { return
|
|
70
|
+
get: function () { return chunkXZ2IUJQV_cjs.VersionSnapshotBar; }
|
|
71
71
|
});
|
|
72
72
|
Object.defineProperty(exports, "SignDocumentDialog", {
|
|
73
73
|
enumerable: true,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export { AnnotateButton, DEFAULT_VERSION_SNAPSHOT_BAR_LABELS, DELETE_SAVED_SIGNATURE_TEXT, DownloadMarkupButton, MarkupNotices, MarkupViewNote, PlaceMySignatureButton, RequestSignaturesButton, SavedSignatureSettings, ShowOriginalButton, SignButton, SignatureRequestBanner, SignedEditNote, VersionSnapshotBar } from '../chunk-
|
|
2
|
+
export { AnnotateButton, DEFAULT_VERSION_SNAPSHOT_BAR_LABELS, DELETE_SAVED_SIGNATURE_TEXT, DownloadMarkupButton, MarkupNotices, MarkupViewNote, PlaceMySignatureButton, RequestSignaturesButton, SavedSignatureSettings, ShowOriginalButton, SignButton, SignatureRequestBanner, SignedEditNote, VersionSnapshotBar } from '../chunk-2EYAJAKT.js';
|
|
3
3
|
export { SignDocumentDialog, SignatureCertificate, SignatureStatus, formatSignedAt } from '../chunk-PQU6LE7U.js';
|
|
4
4
|
import '../chunk-6HKLTYNN.js';
|
|
5
5
|
import '../chunk-2R3GGNPA.js';
|
|
6
6
|
export { AdoptSignatureDialog, TYPED_SIGNATURE_STYLE } from '../chunk-TBNXJHTP.js';
|
|
7
|
-
import '../chunk-
|
|
7
|
+
import '../chunk-U4HWVCRN.js';
|
|
8
8
|
import '../chunk-TX2ZICS7.js';
|
|
9
9
|
import '../chunk-7F6CBP3Z.js';
|
|
10
10
|
import '../chunk-VUNV25KB.js';
|
package/dist/facts/index.cjs
CHANGED
|
@@ -4,15 +4,16 @@
|
|
|
4
4
|
var chunkYD3RN2FY_cjs = require('../chunk-YD3RN2FY.cjs');
|
|
5
5
|
require('../chunk-2WLXQGWC.cjs');
|
|
6
6
|
var chunk5FYU7ZIU_cjs = require('../chunk-5FYU7ZIU.cjs');
|
|
7
|
-
var
|
|
7
|
+
var chunkJYYJGYUP_cjs = require('../chunk-JYYJGYUP.cjs');
|
|
8
8
|
require('../chunk-VPPX5XUF.cjs');
|
|
9
9
|
var chunkRC25WMVB_cjs = require('../chunk-RC25WMVB.cjs');
|
|
10
10
|
require('../chunk-V4ISCZJ7.cjs');
|
|
11
11
|
var chunk2EI7NCUA_cjs = require('../chunk-2EI7NCUA.cjs');
|
|
12
|
-
var
|
|
12
|
+
var chunkLKK52DEY_cjs = require('../chunk-LKK52DEY.cjs');
|
|
13
13
|
require('../chunk-QUMUAJ2P.cjs');
|
|
14
14
|
require('../chunk-MEMWZ72Y.cjs');
|
|
15
|
-
require('../chunk-
|
|
15
|
+
require('../chunk-ZLSMS6OK.cjs');
|
|
16
|
+
require('../chunk-SI222Z3A.cjs');
|
|
16
17
|
require('../chunk-ULWRNGGE.cjs');
|
|
17
18
|
require('../chunk-FX3K6LNZ.cjs');
|
|
18
19
|
require('../chunk-PPCATBOY.cjs');
|
|
@@ -139,7 +140,7 @@ function FactsTable({
|
|
|
139
140
|
]
|
|
140
141
|
);
|
|
141
142
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
142
|
-
|
|
143
|
+
chunkLKK52DEY_cjs.GridView,
|
|
143
144
|
{
|
|
144
145
|
testId,
|
|
145
146
|
items: facts,
|
|
@@ -331,7 +332,7 @@ function FactSearchResult({
|
|
|
331
332
|
}
|
|
332
333
|
),
|
|
333
334
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
334
|
-
|
|
335
|
+
chunkJYYJGYUP_cjs.SearchHit,
|
|
335
336
|
{
|
|
336
337
|
className: "min-w-0 flex-1",
|
|
337
338
|
testId: chunkMHVNT4J3_cjs.testIdOr(testIds?.hit?.(id), { testId: `facts-smart-search-hit-${id}` }),
|
package/dist/facts/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/facts/FactsTable.tsx","../../src/facts/fact-row.ts","../../src/facts/FactSearchParts.tsx"],"names":["jsx","cn","DEFAULT_FACT_COLUMN_LABELS","useMemo","createFactColumns","FactRowActions","GridView","jsxs","testIdOr","Button","X","Loader2","Search","SearchHit","Paperclip","Check","CheckCircle2","CornerDownLeft"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * FactsTable: the default facts grid. `createFactColumns` wired to `GridView` with ready-made\n * cells (in-chat, verified and shared switches, label chips, creator initials, row menu), so a host\n * only supplies rows and handlers. Hosts that need custom cells call `createFactColumns` with\n * their own slots and render `GridView` themselves.\n */\nimport { useMemo, type ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport { cn } from '@arbidocs/react/ui'\nimport { GridView, type GridViewProps } from '../files/GridView'\nimport { initials } from '../lib/format'\nimport { FactRowActions } from './FactRowActions'\nimport {\n DEFAULT_FACT_COLUMN_LABELS,\n createFactColumns,\n type FactColumnLabels,\n type FactRowView,\n} from './factColumns'\n\nexport interface FactsTableProps<T extends FactRowView> {\n facts: T[]\n /** With `onToggleInChat`, shows the In chat column (whether a fact is in the host's chat). */\n isInChat?: (fact: T) => boolean\n onToggleInChat?: (fact: T) => void\n onToggleConfirmed: (fact: T) => void\n onToggleShared: (fact: T) => void\n /** The row menu appears when both `onEdit` and `onDelete` are provided. */\n onEdit?: (fact: T) => void\n onDelete?: (fact: T) => void\n /** Row click (opens the fact). */\n onOpen?: (fact: T) => void\n /** Display name of the fact's creator (sorting, filtering and the initials chip). */\n getCreatorName?: (fact: T) => string\n /** Friendly display of an ISO timestamp. Defaults to the locale date. */\n formatDate?: (iso: string) => string\n columnLabels?: Partial<FactColumnLabels>\n isLoading?: boolean\n /** Saved column state key (AG Grid persists by it). */\n gridId?: string\n height?: GridViewProps<T>['height']\n rowHeight?: number\n /** Escape hatch for any other `GridView` prop. */\n gridProps?: Partial<Omit<GridViewProps<T>, 'items' | 'columnDefs' | 'getItemId'>>\n testId?: string\n}\n\ninterface FactSwitchProps {\n checked: boolean\n label: string\n onToggle: () => void\n testId: string\n}\n\nfunction FactSwitch({ checked, label, onToggle, testId }: FactSwitchProps) {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-label={label}\n onClick={onToggle}\n data-testid={testId}\n className={cn(\n 'inline-flex h-5 w-9 items-center rounded-full p-0.5 transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n checked ? 'bg-green-solid' : 'bg-muted-foreground/30'\n )}\n >\n <span\n className={cn(\n 'size-4 rounded-full bg-background transition-transform',\n checked && 'translate-x-4'\n )}\n />\n </button>\n )\n}\n\nconst defaultFormatDate = (iso: string): string => {\n const d = new Date(iso)\n return Number.isNaN(d.getTime()) ? iso : d.toLocaleDateString()\n}\n\nconst EMPTY_STATE = { title: 'No facts yet' }\n\n/** The default facts table: columns, cells and the grid in one component. */\nexport function FactsTable<T extends FactRowView>({\n facts,\n isInChat,\n onToggleInChat,\n onToggleConfirmed,\n onToggleShared,\n onEdit,\n onDelete,\n onOpen,\n getCreatorName,\n formatDate = defaultFormatDate,\n columnLabels,\n isLoading,\n gridId = 'facts-table-v1',\n height = '100%',\n rowHeight = 52,\n gridProps,\n testId = 'facts-table',\n}: FactsTableProps<T>) {\n const l = { ...DEFAULT_FACT_COLUMN_LABELS, ...columnLabels }\n\n const columnDefs = useMemo<ColDef<T>[]>(\n () =>\n createFactColumns<T>({\n isInChat,\n onToggleInChat,\n renderHeader: (params) => (\n <span className=\"text-[12.5px] font-medium\">{params.displayName}</span>\n ),\n renderRowActions: (fact) =>\n onEdit && onDelete ? (\n <FactRowActions onEdit={() => onEdit(fact)} onDelete={() => onDelete(fact)} />\n ) : null,\n renderLabels: (fact): ReactNode => (\n <span className=\"flex flex-wrap items-center gap-1\">\n {(fact.tags ?? []).map((tag) => (\n <span\n key={tag.name}\n className=\"rounded-full bg-muted px-2 py-px text-xs text-muted-foreground\"\n >\n {tag.name}\n </span>\n ))}\n </span>\n ),\n renderVerified: (fact) => (\n <FactSwitch\n checked={fact.confirmed}\n label={l.verified}\n onToggle={() => onToggleConfirmed(fact)}\n testId={`facts-grid-confirmed-${fact.external_id}`}\n />\n ),\n renderShared: (fact) => (\n <FactSwitch\n checked={fact.shared}\n label={l.shared}\n onToggle={() => onToggleShared(fact)}\n testId={`facts-grid-shared-${fact.external_id}`}\n />\n ),\n renderCreator: (fact, _params: ICellRendererParams<T>) => {\n const name = getCreatorName?.(fact) ?? ''\n return name ? (\n <span\n title={name}\n className=\"inline-flex size-6 items-center justify-center rounded-full bg-muted text-[10px] font-medium text-muted-foreground\"\n >\n {initials(name)}\n </span>\n ) : null\n },\n getCreatorName: (params) => (params.data ? (getCreatorName?.(params.data) ?? '') : ''),\n formatDate,\n labels: columnLabels,\n }),\n [\n isInChat,\n onToggleInChat,\n onToggleConfirmed,\n onToggleShared,\n onEdit,\n onDelete,\n getCreatorName,\n formatDate,\n columnLabels,\n l.verified,\n l.shared,\n ]\n )\n\n return (\n <GridView<T>\n testId={testId}\n items={facts}\n columnDefs={columnDefs}\n getItemId={(fact) => fact.external_id}\n onRowClick={onOpen}\n isLoading={isLoading}\n emptyState={EMPTY_STATE}\n gridId={gridId}\n height={height}\n rowHeight={rowHeight}\n {...gridProps}\n gridOptions={{ suppressClickEdit: true, ...gridProps?.gridOptions }}\n />\n )\n}\n","import type { FactRowView } from './factColumns'\n\n/**\n * A fact as a host with plain records usually holds it: camelCase, optional flags, tags as\n * strings. `toFactRow` maps it to the `FactRowView` that `FactsTable` and `createFactColumns`\n * read, so a host without the SDK type needs no adapter of its own.\n */\nexport interface PlainFactRecord {\n id: string\n text: string\n confirmed?: boolean\n shared?: boolean\n /** ISO date (or date-time) the fact starts. */\n dateStart?: string | null\n dateEnd?: string | null\n timezone?: string | null\n tags?: Array<string | { name: string }> | null\n /** Passages that support the fact; only their count is shown. */\n citations?: unknown[] | null\n createdBy?: string | null\n createdAt?: string | null\n updatedAt?: string | null\n}\n\n/** The row plus the record it came from, so callbacks can hand the host its own object back. */\nexport type PlainFactRow<T extends PlainFactRecord> = FactRowView & { record: T }\n\n/** Map one plain record to a grid row. Missing flags are `false`, missing lists are empty. */\nexport function toFactRow<T extends PlainFactRecord>(record: T): PlainFactRow<T> {\n return {\n external_id: record.id,\n text: record.text,\n confirmed: record.confirmed ?? false,\n shared: record.shared ?? false,\n date_start: record.dateStart ?? null,\n date_end: record.dateEnd ?? null,\n timezone: record.timezone ?? null,\n tags: (record.tags ?? []).map((t) => (typeof t === 'string' ? { name: t } : t)),\n citations: record.citations ?? [],\n created_by_ext_id: record.createdBy ?? null,\n created_at: record.createdAt ?? null,\n updated_at: record.updatedAt ?? null,\n record,\n }\n}\n\nexport function toFactRows<T extends PlainFactRecord>(records: T[]): PlainFactRow<T>[] {\n return records.map(toFactRow)\n}\n","import type { ReactNode } from 'react'\nimport { Check, CheckCircle2, CornerDownLeft, Loader2, Paperclip, Search, X } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { SearchHit } from '../retrieval/SearchHit'\nimport { testIdOr } from '../chat/test-id'\n\nexport interface FactSearchBarLabels {\n search: string\n placeholder: string\n clear: string\n submit: string\n}\n\nexport const DEFAULT_FACT_SEARCH_BAR_LABELS: FactSearchBarLabels = {\n search: 'Search:',\n // An example query rather than an instruction: shows the quoted-phrase syntax.\n placeholder: 'e.g. \"board meeting\" decision on the budget',\n clear: 'Clear search',\n submit: 'Search',\n}\n\nexport interface FactSearchBarTestIds {\n input: string\n clear: string\n submit: string\n}\n\nexport interface FactSearchResultLabels {\n inChat: string\n verified: string\n open: string\n}\n\nexport const DEFAULT_FACT_SEARCH_RESULT_LABELS: FactSearchResultLabels = {\n inChat: 'In this chat',\n verified: 'Verified',\n open: 'Open',\n}\n\nexport interface FactSearchResultTestIds {\n hit: (id: string) => string\n labels: (id: string) => string\n verified: (id: string) => string\n}\n\nexport interface FactSearchBarProps {\n query: string\n onQueryChange: (query: string) => void\n onSubmit: () => void\n onClear: () => void\n isSearching: boolean\n /** Wins over `labels.placeholder`. */\n placeholder?: string\n labels?: Partial<FactSearchBarLabels>\n testIds?: Partial<FactSearchBarTestIds>\n}\n\n/**\n * The facts Smart Search bar: the same bordered, auto-growing box as the Files Smart Search.\n * Enter searches; Shift+Enter breaks a line.\n */\nexport function FactSearchBar({\n query,\n onQueryChange,\n onSubmit,\n onClear,\n isSearching,\n placeholder,\n labels,\n testIds,\n}: FactSearchBarProps) {\n const l = { ...DEFAULT_FACT_SEARCH_BAR_LABELS, ...labels }\n return (\n <div className=\"border-t border-border px-6 pb-4 pt-6\" data-slot=\"fact-search-bar\">\n <form\n onSubmit={(e) => {\n e.preventDefault()\n onSubmit()\n }}\n className=\"mx-auto flex w-full max-w-2xl items-center gap-3\"\n >\n <label\n htmlFor=\"facts-smart-search-input\"\n className=\"shrink-0 text-base font-medium text-foreground\"\n >\n {l.search}\n </label>\n <div className=\"flex min-w-0 flex-1 items-start gap-2 rounded-lg border border-border bg-background px-3.5 py-2.5 transition-colors focus-within:border-ring focus-within:ring-2 focus-within:ring-ring\">\n <textarea\n id=\"facts-smart-search-input\"\n rows={1}\n value={query}\n onChange={(e) => {\n onQueryChange(e.target.value)\n e.target.style.height = 'auto'\n e.target.style.height = `${e.target.scrollHeight}px`\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n onSubmit()\n }\n }}\n placeholder={placeholder ?? l.placeholder}\n className=\"flex-1 resize-none overflow-hidden border-0 bg-transparent p-0 text-base leading-relaxed text-foreground outline-none placeholder:text-muted-foreground\"\n data-testid={testIdOr(testIds?.input, { testId: 'facts-smart-search-input' })}\n autoFocus\n />\n <div className=\"flex shrink-0 items-center gap-1\">\n {query && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 text-muted-foreground hover:text-foreground pointer-coarse:size-11\"\n onClick={onClear}\n aria-label={l.clear}\n title={l.clear}\n data-testid={testIdOr(testIds?.clear, { testId: 'facts-smart-search-clear' })}\n >\n <X className=\"size-4\" />\n </Button>\n )}\n <Button\n type=\"submit\"\n size=\"icon\"\n disabled={!query.trim() || isSearching}\n className=\"size-7 pointer-coarse:size-11\"\n data-testid={testIdOr(testIds?.submit, { testId: 'facts-smart-search-submit' })}\n title={l.submit}\n >\n {isSearching ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Search className=\"size-4\" />\n )}\n </Button>\n </div>\n </div>\n </form>\n </div>\n )\n}\n\n/** Totals headline pinned between the search bar and the scrolling results. */\nexport function FactSearchTotals({ children, testId }: { children: ReactNode; testId?: string }) {\n return (\n <div className=\"px-4 pb-3\">\n <p\n className=\"font-sans text-base font-semibold tabular-nums text-foreground\"\n data-testid={testIdOr(testId, { testId: 'facts-smart-search-totals' })}\n >\n {children}\n </p>\n </div>\n )\n}\n\n/** \"Searching facts…\" line. */\nexport function FactSearchPending({ children }: { children: ReactNode }) {\n return (\n <div className=\"flex items-center justify-center gap-2 py-16 text-sm text-muted-foreground\">\n <Loader2 className=\"size-4 animate-spin\" /> {children}\n </div>\n )\n}\n\n/** No-matches message. */\nexport function FactSearchNoMatches({\n children,\n testId,\n}: {\n children: ReactNode\n testId?: string\n}) {\n return (\n <div\n className=\"py-16 text-center text-sm text-muted-foreground\"\n data-testid={testIdOr(testId, { testId: 'facts-smart-search-empty' })}\n >\n {children}\n </div>\n )\n}\n\nexport interface FactSearchResultLabel {\n id: string\n name: string\n color: string\n}\n\nexport interface FactSearchResultProps {\n /** Fact id: keys the test ids. */\n id: string\n /** 1-based rank, shown outside the card (it numbers the results, it is not part of the hit). */\n rank: number\n text: string\n terms: string[]\n renderSnippet: (content: string, terms: string[]) => ReactNode\n labels: FactSearchResultLabel[]\n /** The fact is in the host's current chat. */\n isInChat?: boolean\n isVerified?: boolean\n /** The fact open in the composer. */\n isSelected?: boolean\n onOpen: () => void\n uiLabels?: Partial<FactSearchResultLabels>\n testIds?: Partial<FactSearchResultTestIds>\n /** Destination of the fact; the card stays a click target (see SearchHit `href`). */\n href?: string\n}\n\n/** One facts search result: rank, highlighted text, labels (and In this chat) and the Verified mark. */\nexport function FactSearchResult({\n id,\n rank,\n text,\n terms,\n renderSnippet,\n labels,\n isInChat,\n isVerified,\n isSelected,\n onOpen,\n uiLabels: labelOverrides,\n testIds,\n href,\n}: FactSearchResultProps) {\n const l = { ...DEFAULT_FACT_SEARCH_RESULT_LABELS, ...labelOverrides }\n return (\n <div className=\"flex items-start gap-2\" data-slot=\"fact-search-hit\">\n <span\n className=\"w-5 shrink-0 pt-3 text-right text-xs tabular-nums text-muted-foreground\"\n aria-hidden=\"true\"\n >\n {rank}\n </span>\n <SearchHit\n className=\"min-w-0 flex-1\"\n testId={testIdOr(testIds?.hit?.(id), { testId: `facts-smart-search-hit-${id}` })}\n href={href}\n selected={isSelected}\n onClick={onOpen}\n content={text}\n terms={terms}\n renderSnippet={renderSnippet}\n header={\n <div\n className=\"flex min-w-0 flex-1 flex-wrap items-center gap-1 text-xs text-muted-foreground\"\n data-testid={testIdOr(testIds?.labels?.(id), {\n testId: `facts-smart-search-hit-labels-${id}`,\n })}\n >\n {isInChat && (\n <span\n className=\"inline-flex items-center gap-1 pr-1\"\n data-testid={`facts-smart-search-hit-in-chat-${id}`}\n >\n <Paperclip className=\"size-3\" /> {l.inChat}\n </span>\n )}\n {labels.map((tag) => (\n <span\n key={tag.id}\n className=\"inline-flex shrink-0 items-center gap-1 rounded border px-1.5 py-0.5 text-xs font-medium text-foreground\"\n title={tag.name}\n style={{ borderColor: tag.color }}\n >\n <span\n className=\"flex size-3.5 shrink-0 items-center justify-center rounded\"\n style={{ backgroundColor: tag.color }}\n >\n <Check className=\"size-2.5 text-white\" strokeWidth={3} />\n </span>\n <span className=\"max-w-[120px] truncate\">{tag.name}</span>\n </span>\n ))}\n </div>\n }\n headerRight={\n <span className=\"flex items-center gap-3 text-xs text-muted-foreground\">\n {isVerified && (\n <span\n className=\"inline-flex shrink-0 items-center gap-1 text-green-text\"\n data-testid={testIdOr(testIds?.verified?.(id), {\n testId: `facts-smart-search-hit-verified-${id}`,\n })}\n >\n <CheckCircle2 className=\"size-3\" /> {l.verified}\n </span>\n )}\n <span className=\"inline-flex items-center gap-1\">\n {l.open} <CornerDownLeft className=\"size-3\" />\n </span>\n </span>\n }\n />\n </div>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/facts/FactsTable.tsx","../../src/facts/fact-row.ts","../../src/facts/FactSearchParts.tsx"],"names":["jsx","cn","DEFAULT_FACT_COLUMN_LABELS","useMemo","createFactColumns","FactRowActions","GridView","jsxs","testIdOr","Button","X","Loader2","Search","SearchHit","Paperclip","Check","CheckCircle2","CornerDownLeft"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * FactsTable: the default facts grid. `createFactColumns` wired to `GridView` with ready-made\n * cells (in-chat, verified and shared switches, label chips, creator initials, row menu), so a host\n * only supplies rows and handlers. Hosts that need custom cells call `createFactColumns` with\n * their own slots and render `GridView` themselves.\n */\nimport { useMemo, type ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport { cn } from '@arbidocs/react/ui'\nimport { GridView, type GridViewProps } from '../files/GridView'\nimport { initials } from '../lib/format'\nimport { FactRowActions } from './FactRowActions'\nimport {\n DEFAULT_FACT_COLUMN_LABELS,\n createFactColumns,\n type FactColumnLabels,\n type FactRowView,\n} from './factColumns'\n\nexport interface FactsTableProps<T extends FactRowView> {\n facts: T[]\n /** With `onToggleInChat`, shows the In chat column (whether a fact is in the host's chat). */\n isInChat?: (fact: T) => boolean\n onToggleInChat?: (fact: T) => void\n onToggleConfirmed: (fact: T) => void\n onToggleShared: (fact: T) => void\n /** The row menu appears when both `onEdit` and `onDelete` are provided. */\n onEdit?: (fact: T) => void\n onDelete?: (fact: T) => void\n /** Row click (opens the fact). */\n onOpen?: (fact: T) => void\n /** Display name of the fact's creator (sorting, filtering and the initials chip). */\n getCreatorName?: (fact: T) => string\n /** Friendly display of an ISO timestamp. Defaults to the locale date. */\n formatDate?: (iso: string) => string\n columnLabels?: Partial<FactColumnLabels>\n isLoading?: boolean\n /** Saved column state key (AG Grid persists by it). */\n gridId?: string\n height?: GridViewProps<T>['height']\n rowHeight?: number\n /** Escape hatch for any other `GridView` prop. */\n gridProps?: Partial<Omit<GridViewProps<T>, 'items' | 'columnDefs' | 'getItemId'>>\n testId?: string\n}\n\ninterface FactSwitchProps {\n checked: boolean\n label: string\n onToggle: () => void\n testId: string\n}\n\nfunction FactSwitch({ checked, label, onToggle, testId }: FactSwitchProps) {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-label={label}\n onClick={onToggle}\n data-testid={testId}\n className={cn(\n 'inline-flex h-5 w-9 items-center rounded-full p-0.5 transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n checked ? 'bg-green-solid' : 'bg-muted-foreground/30'\n )}\n >\n <span\n className={cn(\n 'size-4 rounded-full bg-background transition-transform',\n checked && 'translate-x-4'\n )}\n />\n </button>\n )\n}\n\nconst defaultFormatDate = (iso: string): string => {\n const d = new Date(iso)\n return Number.isNaN(d.getTime()) ? iso : d.toLocaleDateString()\n}\n\nconst EMPTY_STATE = { title: 'No facts yet' }\n\n/** The default facts table: columns, cells and the grid in one component. */\nexport function FactsTable<T extends FactRowView>({\n facts,\n isInChat,\n onToggleInChat,\n onToggleConfirmed,\n onToggleShared,\n onEdit,\n onDelete,\n onOpen,\n getCreatorName,\n formatDate = defaultFormatDate,\n columnLabels,\n isLoading,\n gridId = 'facts-table-v1',\n height = '100%',\n rowHeight = 52,\n gridProps,\n testId = 'facts-table',\n}: FactsTableProps<T>) {\n const l = { ...DEFAULT_FACT_COLUMN_LABELS, ...columnLabels }\n\n const columnDefs = useMemo<ColDef<T>[]>(\n () =>\n createFactColumns<T>({\n isInChat,\n onToggleInChat,\n renderHeader: (params) => (\n <span className=\"text-[12.5px] font-medium\">{params.displayName}</span>\n ),\n renderRowActions: (fact) =>\n onEdit && onDelete ? (\n <FactRowActions onEdit={() => onEdit(fact)} onDelete={() => onDelete(fact)} />\n ) : null,\n renderLabels: (fact): ReactNode => (\n <span className=\"flex flex-wrap items-center gap-1\">\n {(fact.tags ?? []).map((tag) => (\n <span\n key={tag.name}\n className=\"rounded-full bg-muted px-2 py-px text-xs text-muted-foreground\"\n >\n {tag.name}\n </span>\n ))}\n </span>\n ),\n renderVerified: (fact) => (\n <FactSwitch\n checked={fact.confirmed}\n label={l.verified}\n onToggle={() => onToggleConfirmed(fact)}\n testId={`facts-grid-confirmed-${fact.external_id}`}\n />\n ),\n renderShared: (fact) => (\n <FactSwitch\n checked={fact.shared}\n label={l.shared}\n onToggle={() => onToggleShared(fact)}\n testId={`facts-grid-shared-${fact.external_id}`}\n />\n ),\n renderCreator: (fact, _params: ICellRendererParams<T>) => {\n const name = getCreatorName?.(fact) ?? ''\n return name ? (\n <span\n title={name}\n className=\"inline-flex size-6 items-center justify-center rounded-full bg-muted text-[10px] font-medium text-muted-foreground\"\n >\n {initials(name)}\n </span>\n ) : null\n },\n getCreatorName: (params) => (params.data ? (getCreatorName?.(params.data) ?? '') : ''),\n formatDate,\n labels: columnLabels,\n }),\n [\n isInChat,\n onToggleInChat,\n onToggleConfirmed,\n onToggleShared,\n onEdit,\n onDelete,\n getCreatorName,\n formatDate,\n columnLabels,\n l.verified,\n l.shared,\n ]\n )\n\n return (\n <GridView<T>\n testId={testId}\n items={facts}\n columnDefs={columnDefs}\n getItemId={(fact) => fact.external_id}\n onRowClick={onOpen}\n isLoading={isLoading}\n emptyState={EMPTY_STATE}\n gridId={gridId}\n height={height}\n rowHeight={rowHeight}\n {...gridProps}\n gridOptions={{ suppressClickEdit: true, ...gridProps?.gridOptions }}\n />\n )\n}\n","import type { FactRowView } from './factColumns'\n\n/**\n * A fact as a host with plain records usually holds it: camelCase, optional flags, tags as\n * strings. `toFactRow` maps it to the `FactRowView` that `FactsTable` and `createFactColumns`\n * read, so a host without the SDK type needs no adapter of its own.\n */\nexport interface PlainFactRecord {\n id: string\n text: string\n confirmed?: boolean\n shared?: boolean\n /** ISO date (or date-time) the fact starts. */\n dateStart?: string | null\n dateEnd?: string | null\n timezone?: string | null\n tags?: Array<string | { name: string }> | null\n /** Passages that support the fact; only their count is shown. */\n citations?: unknown[] | null\n createdBy?: string | null\n createdAt?: string | null\n updatedAt?: string | null\n}\n\n/** The row plus the record it came from, so callbacks can hand the host its own object back. */\nexport type PlainFactRow<T extends PlainFactRecord> = FactRowView & { record: T }\n\n/** Map one plain record to a grid row. Missing flags are `false`, missing lists are empty. */\nexport function toFactRow<T extends PlainFactRecord>(record: T): PlainFactRow<T> {\n return {\n external_id: record.id,\n text: record.text,\n confirmed: record.confirmed ?? false,\n shared: record.shared ?? false,\n date_start: record.dateStart ?? null,\n date_end: record.dateEnd ?? null,\n timezone: record.timezone ?? null,\n tags: (record.tags ?? []).map((t) => (typeof t === 'string' ? { name: t } : t)),\n citations: record.citations ?? [],\n created_by_ext_id: record.createdBy ?? null,\n created_at: record.createdAt ?? null,\n updated_at: record.updatedAt ?? null,\n record,\n }\n}\n\nexport function toFactRows<T extends PlainFactRecord>(records: T[]): PlainFactRow<T>[] {\n return records.map(toFactRow)\n}\n","import type { ReactNode } from 'react'\nimport { Check, CheckCircle2, CornerDownLeft, Loader2, Paperclip, Search, X } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { SearchHit } from '../retrieval/SearchHit'\nimport { testIdOr } from '../chat/test-id'\n\nexport interface FactSearchBarLabels {\n search: string\n placeholder: string\n clear: string\n submit: string\n}\n\nexport const DEFAULT_FACT_SEARCH_BAR_LABELS: FactSearchBarLabels = {\n search: 'Search:',\n // An example query rather than an instruction: shows the quoted-phrase syntax.\n placeholder: 'e.g. \"board meeting\" decision on the budget',\n clear: 'Clear search',\n submit: 'Search',\n}\n\nexport interface FactSearchBarTestIds {\n input: string\n clear: string\n submit: string\n}\n\nexport interface FactSearchResultLabels {\n inChat: string\n verified: string\n open: string\n}\n\nexport const DEFAULT_FACT_SEARCH_RESULT_LABELS: FactSearchResultLabels = {\n inChat: 'In this chat',\n verified: 'Verified',\n open: 'Open',\n}\n\nexport interface FactSearchResultTestIds {\n hit: (id: string) => string\n labels: (id: string) => string\n verified: (id: string) => string\n}\n\nexport interface FactSearchBarProps {\n query: string\n onQueryChange: (query: string) => void\n onSubmit: () => void\n onClear: () => void\n isSearching: boolean\n /** Wins over `labels.placeholder`. */\n placeholder?: string\n labels?: Partial<FactSearchBarLabels>\n testIds?: Partial<FactSearchBarTestIds>\n}\n\n/**\n * The facts Smart Search bar: the same bordered, auto-growing box as the Files Smart Search.\n * Enter searches; Shift+Enter breaks a line.\n */\nexport function FactSearchBar({\n query,\n onQueryChange,\n onSubmit,\n onClear,\n isSearching,\n placeholder,\n labels,\n testIds,\n}: FactSearchBarProps) {\n const l = { ...DEFAULT_FACT_SEARCH_BAR_LABELS, ...labels }\n return (\n <div className=\"border-t border-border px-6 pb-4 pt-6\" data-slot=\"fact-search-bar\">\n <form\n onSubmit={(e) => {\n e.preventDefault()\n onSubmit()\n }}\n className=\"mx-auto flex w-full max-w-2xl items-center gap-3\"\n >\n <label\n htmlFor=\"facts-smart-search-input\"\n className=\"shrink-0 text-base font-medium text-foreground\"\n >\n {l.search}\n </label>\n <div className=\"flex min-w-0 flex-1 items-start gap-2 rounded-lg border border-border bg-background px-3.5 py-2.5 transition-colors focus-within:border-ring focus-within:ring-2 focus-within:ring-ring\">\n <textarea\n id=\"facts-smart-search-input\"\n rows={1}\n value={query}\n onChange={(e) => {\n onQueryChange(e.target.value)\n e.target.style.height = 'auto'\n e.target.style.height = `${e.target.scrollHeight}px`\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n onSubmit()\n }\n }}\n placeholder={placeholder ?? l.placeholder}\n className=\"flex-1 resize-none overflow-hidden border-0 bg-transparent p-0 text-base leading-relaxed text-foreground outline-none placeholder:text-muted-foreground\"\n data-testid={testIdOr(testIds?.input, { testId: 'facts-smart-search-input' })}\n autoFocus\n />\n <div className=\"flex shrink-0 items-center gap-1\">\n {query && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 text-muted-foreground hover:text-foreground pointer-coarse:size-11\"\n onClick={onClear}\n aria-label={l.clear}\n title={l.clear}\n data-testid={testIdOr(testIds?.clear, { testId: 'facts-smart-search-clear' })}\n >\n <X className=\"size-4\" />\n </Button>\n )}\n <Button\n type=\"submit\"\n size=\"icon\"\n disabled={!query.trim() || isSearching}\n className=\"size-7 pointer-coarse:size-11\"\n data-testid={testIdOr(testIds?.submit, { testId: 'facts-smart-search-submit' })}\n title={l.submit}\n >\n {isSearching ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Search className=\"size-4\" />\n )}\n </Button>\n </div>\n </div>\n </form>\n </div>\n )\n}\n\n/** Totals headline pinned between the search bar and the scrolling results. */\nexport function FactSearchTotals({ children, testId }: { children: ReactNode; testId?: string }) {\n return (\n <div className=\"px-4 pb-3\">\n <p\n className=\"font-sans text-base font-semibold tabular-nums text-foreground\"\n data-testid={testIdOr(testId, { testId: 'facts-smart-search-totals' })}\n >\n {children}\n </p>\n </div>\n )\n}\n\n/** \"Searching facts…\" line. */\nexport function FactSearchPending({ children }: { children: ReactNode }) {\n return (\n <div className=\"flex items-center justify-center gap-2 py-16 text-sm text-muted-foreground\">\n <Loader2 className=\"size-4 animate-spin\" /> {children}\n </div>\n )\n}\n\n/** No-matches message. */\nexport function FactSearchNoMatches({\n children,\n testId,\n}: {\n children: ReactNode\n testId?: string\n}) {\n return (\n <div\n className=\"py-16 text-center text-sm text-muted-foreground\"\n data-testid={testIdOr(testId, { testId: 'facts-smart-search-empty' })}\n >\n {children}\n </div>\n )\n}\n\nexport interface FactSearchResultLabel {\n id: string\n name: string\n color: string\n}\n\nexport interface FactSearchResultProps {\n /** Fact id: keys the test ids. */\n id: string\n /** 1-based rank, shown outside the card (it numbers the results, it is not part of the hit). */\n rank: number\n text: string\n terms: string[]\n renderSnippet: (content: string, terms: string[]) => ReactNode\n labels: FactSearchResultLabel[]\n /** The fact is in the host's current chat. */\n isInChat?: boolean\n isVerified?: boolean\n /** The fact open in the composer. */\n isSelected?: boolean\n onOpen: () => void\n uiLabels?: Partial<FactSearchResultLabels>\n testIds?: Partial<FactSearchResultTestIds>\n /** Destination of the fact; the card stays a click target (see SearchHit `href`). */\n href?: string\n}\n\n/** One facts search result: rank, highlighted text, labels (and In this chat) and the Verified mark. */\nexport function FactSearchResult({\n id,\n rank,\n text,\n terms,\n renderSnippet,\n labels,\n isInChat,\n isVerified,\n isSelected,\n onOpen,\n uiLabels: labelOverrides,\n testIds,\n href,\n}: FactSearchResultProps) {\n const l = { ...DEFAULT_FACT_SEARCH_RESULT_LABELS, ...labelOverrides }\n return (\n <div className=\"flex items-start gap-2\" data-slot=\"fact-search-hit\">\n <span\n className=\"w-5 shrink-0 pt-3 text-right text-xs tabular-nums text-muted-foreground\"\n aria-hidden=\"true\"\n >\n {rank}\n </span>\n <SearchHit\n className=\"min-w-0 flex-1\"\n testId={testIdOr(testIds?.hit?.(id), { testId: `facts-smart-search-hit-${id}` })}\n href={href}\n selected={isSelected}\n onClick={onOpen}\n content={text}\n terms={terms}\n renderSnippet={renderSnippet}\n header={\n <div\n className=\"flex min-w-0 flex-1 flex-wrap items-center gap-1 text-xs text-muted-foreground\"\n data-testid={testIdOr(testIds?.labels?.(id), {\n testId: `facts-smart-search-hit-labels-${id}`,\n })}\n >\n {isInChat && (\n <span\n className=\"inline-flex items-center gap-1 pr-1\"\n data-testid={`facts-smart-search-hit-in-chat-${id}`}\n >\n <Paperclip className=\"size-3\" /> {l.inChat}\n </span>\n )}\n {labels.map((tag) => (\n <span\n key={tag.id}\n className=\"inline-flex shrink-0 items-center gap-1 rounded border px-1.5 py-0.5 text-xs font-medium text-foreground\"\n title={tag.name}\n style={{ borderColor: tag.color }}\n >\n <span\n className=\"flex size-3.5 shrink-0 items-center justify-center rounded\"\n style={{ backgroundColor: tag.color }}\n >\n <Check className=\"size-2.5 text-white\" strokeWidth={3} />\n </span>\n <span className=\"max-w-[120px] truncate\">{tag.name}</span>\n </span>\n ))}\n </div>\n }\n headerRight={\n <span className=\"flex items-center gap-3 text-xs text-muted-foreground\">\n {isVerified && (\n <span\n className=\"inline-flex shrink-0 items-center gap-1 text-green-text\"\n data-testid={testIdOr(testIds?.verified?.(id), {\n testId: `facts-smart-search-hit-verified-${id}`,\n })}\n >\n <CheckCircle2 className=\"size-3\" /> {l.verified}\n </span>\n )}\n <span className=\"inline-flex items-center gap-1\">\n {l.open} <CornerDownLeft className=\"size-3\" />\n </span>\n </span>\n }\n />\n </div>\n )\n}\n"]}
|
package/dist/facts/index.js
CHANGED
|
@@ -3,15 +3,16 @@ import { DEFAULT_FACT_COLUMN_LABELS, createFactColumns, FactRowActions } from '.
|
|
|
3
3
|
export { DEFAULT_FACTS_BULK_BAR_LABELS, DEFAULT_FACTS_EMPTY_STATE_LABELS, DEFAULT_FACTS_FIELDS_BUTTON_LABELS, DEFAULT_FACTS_TOOLBAR_LABELS, DEFAULT_FACTS_VIEW_TOGGLE_LABELS, DEFAULT_FACT_COLUMN_LABELS, DEFAULT_FACT_COLUMN_ORDER, DEFAULT_FACT_COMPOSER_LABELS, DEFAULT_FACT_DATE_INPUT_LABELS, DEFAULT_FACT_LABELS_CELL_LABELS, DEFAULT_FACT_ROW_ACTIONS_LABELS, DEFAULT_FACT_SOURCES_ROW_LABELS, DEFAULT_FACT_SOURCE_GROUP_LABELS, DEFAULT_FACT_TIMELINE_LABELS, EMPTY_FACT_DATE_FIELDS, FactComposer, FactDateInput, FactFieldRow, FactLabelsCell, FactRowActions, FactSourceGroup, FactSourcesRow, FactsBulkBar, FactsCalendar, FactsEmptyState, FactsFieldsButton, FactsGanttPane, FactsLoadError, FactsLoading, FactsToolbar, FactsViewToggle, ISO_DATE_FILTER_PARAMS, buildFactCitations, chronologyFactBodies, chunkIdsOf, citedVersionRef, createFactColumns, docIdsOf, enableFactTableColumnResize, factDateFieldsToSpan, factDateSpanToFields, hasChunk, isWholeDoc, parseChronologyDate, sourceDocCount, toFactCitations, withChunk, withDoc, withoutChunk, withoutDoc } from '../chunk-75Z5AUMM.js';
|
|
4
4
|
import '../chunk-JJA6GQKH.js';
|
|
5
5
|
export { DEFAULT_FACT_PASSAGES_LABELS, FactPassageItem, FactSourcesPanel, renderPreviewInline, toPreviewLine } from '../chunk-HFZ45FD3.js';
|
|
6
|
-
import { SearchHit } from '../chunk-
|
|
6
|
+
import { SearchHit } from '../chunk-5RHNGSVP.js';
|
|
7
7
|
import '../chunk-4EZVCGRL.js';
|
|
8
8
|
export { decodeWhitespaceEntities } from '../chunk-AF6RDAJF.js';
|
|
9
9
|
import '../chunk-NUNKSZKU.js';
|
|
10
10
|
export { DEFAULT_FILTER_INPUT_LABELS as DEFAULT_FACTS_FILTER_INPUT_LABELS, DEFAULT_FILTER_FIELDS as FACTS_SEARCH_FIELD_OPTIONS, FilterInput as FactsFilterInput } from '../chunk-YU2KUMGE.js';
|
|
11
|
-
import { GridView } from '../chunk-
|
|
11
|
+
import { GridView } from '../chunk-7F5Z4K5W.js';
|
|
12
12
|
import '../chunk-OJIX5NBN.js';
|
|
13
13
|
import '../chunk-ABEKUV6L.js';
|
|
14
|
-
import '../chunk-
|
|
14
|
+
import '../chunk-CH4FHZSR.js';
|
|
15
|
+
import '../chunk-U4HWVCRN.js';
|
|
15
16
|
import '../chunk-TX2ZICS7.js';
|
|
16
17
|
import '../chunk-SLSBJRWW.js';
|
|
17
18
|
import '../chunk-NPLYHR2E.js';
|
package/dist/facts/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/facts/FactsTable.tsx","../../src/facts/fact-row.ts","../../src/facts/FactSearchParts.tsx"],"names":["jsx"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * FactsTable: the default facts grid. `createFactColumns` wired to `GridView` with ready-made\n * cells (in-chat, verified and shared switches, label chips, creator initials, row menu), so a host\n * only supplies rows and handlers. Hosts that need custom cells call `createFactColumns` with\n * their own slots and render `GridView` themselves.\n */\nimport { useMemo, type ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport { cn } from '@arbidocs/react/ui'\nimport { GridView, type GridViewProps } from '../files/GridView'\nimport { initials } from '../lib/format'\nimport { FactRowActions } from './FactRowActions'\nimport {\n DEFAULT_FACT_COLUMN_LABELS,\n createFactColumns,\n type FactColumnLabels,\n type FactRowView,\n} from './factColumns'\n\nexport interface FactsTableProps<T extends FactRowView> {\n facts: T[]\n /** With `onToggleInChat`, shows the In chat column (whether a fact is in the host's chat). */\n isInChat?: (fact: T) => boolean\n onToggleInChat?: (fact: T) => void\n onToggleConfirmed: (fact: T) => void\n onToggleShared: (fact: T) => void\n /** The row menu appears when both `onEdit` and `onDelete` are provided. */\n onEdit?: (fact: T) => void\n onDelete?: (fact: T) => void\n /** Row click (opens the fact). */\n onOpen?: (fact: T) => void\n /** Display name of the fact's creator (sorting, filtering and the initials chip). */\n getCreatorName?: (fact: T) => string\n /** Friendly display of an ISO timestamp. Defaults to the locale date. */\n formatDate?: (iso: string) => string\n columnLabels?: Partial<FactColumnLabels>\n isLoading?: boolean\n /** Saved column state key (AG Grid persists by it). */\n gridId?: string\n height?: GridViewProps<T>['height']\n rowHeight?: number\n /** Escape hatch for any other `GridView` prop. */\n gridProps?: Partial<Omit<GridViewProps<T>, 'items' | 'columnDefs' | 'getItemId'>>\n testId?: string\n}\n\ninterface FactSwitchProps {\n checked: boolean\n label: string\n onToggle: () => void\n testId: string\n}\n\nfunction FactSwitch({ checked, label, onToggle, testId }: FactSwitchProps) {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-label={label}\n onClick={onToggle}\n data-testid={testId}\n className={cn(\n 'inline-flex h-5 w-9 items-center rounded-full p-0.5 transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n checked ? 'bg-green-solid' : 'bg-muted-foreground/30'\n )}\n >\n <span\n className={cn(\n 'size-4 rounded-full bg-background transition-transform',\n checked && 'translate-x-4'\n )}\n />\n </button>\n )\n}\n\nconst defaultFormatDate = (iso: string): string => {\n const d = new Date(iso)\n return Number.isNaN(d.getTime()) ? iso : d.toLocaleDateString()\n}\n\nconst EMPTY_STATE = { title: 'No facts yet' }\n\n/** The default facts table: columns, cells and the grid in one component. */\nexport function FactsTable<T extends FactRowView>({\n facts,\n isInChat,\n onToggleInChat,\n onToggleConfirmed,\n onToggleShared,\n onEdit,\n onDelete,\n onOpen,\n getCreatorName,\n formatDate = defaultFormatDate,\n columnLabels,\n isLoading,\n gridId = 'facts-table-v1',\n height = '100%',\n rowHeight = 52,\n gridProps,\n testId = 'facts-table',\n}: FactsTableProps<T>) {\n const l = { ...DEFAULT_FACT_COLUMN_LABELS, ...columnLabels }\n\n const columnDefs = useMemo<ColDef<T>[]>(\n () =>\n createFactColumns<T>({\n isInChat,\n onToggleInChat,\n renderHeader: (params) => (\n <span className=\"text-[12.5px] font-medium\">{params.displayName}</span>\n ),\n renderRowActions: (fact) =>\n onEdit && onDelete ? (\n <FactRowActions onEdit={() => onEdit(fact)} onDelete={() => onDelete(fact)} />\n ) : null,\n renderLabels: (fact): ReactNode => (\n <span className=\"flex flex-wrap items-center gap-1\">\n {(fact.tags ?? []).map((tag) => (\n <span\n key={tag.name}\n className=\"rounded-full bg-muted px-2 py-px text-xs text-muted-foreground\"\n >\n {tag.name}\n </span>\n ))}\n </span>\n ),\n renderVerified: (fact) => (\n <FactSwitch\n checked={fact.confirmed}\n label={l.verified}\n onToggle={() => onToggleConfirmed(fact)}\n testId={`facts-grid-confirmed-${fact.external_id}`}\n />\n ),\n renderShared: (fact) => (\n <FactSwitch\n checked={fact.shared}\n label={l.shared}\n onToggle={() => onToggleShared(fact)}\n testId={`facts-grid-shared-${fact.external_id}`}\n />\n ),\n renderCreator: (fact, _params: ICellRendererParams<T>) => {\n const name = getCreatorName?.(fact) ?? ''\n return name ? (\n <span\n title={name}\n className=\"inline-flex size-6 items-center justify-center rounded-full bg-muted text-[10px] font-medium text-muted-foreground\"\n >\n {initials(name)}\n </span>\n ) : null\n },\n getCreatorName: (params) => (params.data ? (getCreatorName?.(params.data) ?? '') : ''),\n formatDate,\n labels: columnLabels,\n }),\n [\n isInChat,\n onToggleInChat,\n onToggleConfirmed,\n onToggleShared,\n onEdit,\n onDelete,\n getCreatorName,\n formatDate,\n columnLabels,\n l.verified,\n l.shared,\n ]\n )\n\n return (\n <GridView<T>\n testId={testId}\n items={facts}\n columnDefs={columnDefs}\n getItemId={(fact) => fact.external_id}\n onRowClick={onOpen}\n isLoading={isLoading}\n emptyState={EMPTY_STATE}\n gridId={gridId}\n height={height}\n rowHeight={rowHeight}\n {...gridProps}\n gridOptions={{ suppressClickEdit: true, ...gridProps?.gridOptions }}\n />\n )\n}\n","import type { FactRowView } from './factColumns'\n\n/**\n * A fact as a host with plain records usually holds it: camelCase, optional flags, tags as\n * strings. `toFactRow` maps it to the `FactRowView` that `FactsTable` and `createFactColumns`\n * read, so a host without the SDK type needs no adapter of its own.\n */\nexport interface PlainFactRecord {\n id: string\n text: string\n confirmed?: boolean\n shared?: boolean\n /** ISO date (or date-time) the fact starts. */\n dateStart?: string | null\n dateEnd?: string | null\n timezone?: string | null\n tags?: Array<string | { name: string }> | null\n /** Passages that support the fact; only their count is shown. */\n citations?: unknown[] | null\n createdBy?: string | null\n createdAt?: string | null\n updatedAt?: string | null\n}\n\n/** The row plus the record it came from, so callbacks can hand the host its own object back. */\nexport type PlainFactRow<T extends PlainFactRecord> = FactRowView & { record: T }\n\n/** Map one plain record to a grid row. Missing flags are `false`, missing lists are empty. */\nexport function toFactRow<T extends PlainFactRecord>(record: T): PlainFactRow<T> {\n return {\n external_id: record.id,\n text: record.text,\n confirmed: record.confirmed ?? false,\n shared: record.shared ?? false,\n date_start: record.dateStart ?? null,\n date_end: record.dateEnd ?? null,\n timezone: record.timezone ?? null,\n tags: (record.tags ?? []).map((t) => (typeof t === 'string' ? { name: t } : t)),\n citations: record.citations ?? [],\n created_by_ext_id: record.createdBy ?? null,\n created_at: record.createdAt ?? null,\n updated_at: record.updatedAt ?? null,\n record,\n }\n}\n\nexport function toFactRows<T extends PlainFactRecord>(records: T[]): PlainFactRow<T>[] {\n return records.map(toFactRow)\n}\n","import type { ReactNode } from 'react'\nimport { Check, CheckCircle2, CornerDownLeft, Loader2, Paperclip, Search, X } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { SearchHit } from '../retrieval/SearchHit'\nimport { testIdOr } from '../chat/test-id'\n\nexport interface FactSearchBarLabels {\n search: string\n placeholder: string\n clear: string\n submit: string\n}\n\nexport const DEFAULT_FACT_SEARCH_BAR_LABELS: FactSearchBarLabels = {\n search: 'Search:',\n // An example query rather than an instruction: shows the quoted-phrase syntax.\n placeholder: 'e.g. \"board meeting\" decision on the budget',\n clear: 'Clear search',\n submit: 'Search',\n}\n\nexport interface FactSearchBarTestIds {\n input: string\n clear: string\n submit: string\n}\n\nexport interface FactSearchResultLabels {\n inChat: string\n verified: string\n open: string\n}\n\nexport const DEFAULT_FACT_SEARCH_RESULT_LABELS: FactSearchResultLabels = {\n inChat: 'In this chat',\n verified: 'Verified',\n open: 'Open',\n}\n\nexport interface FactSearchResultTestIds {\n hit: (id: string) => string\n labels: (id: string) => string\n verified: (id: string) => string\n}\n\nexport interface FactSearchBarProps {\n query: string\n onQueryChange: (query: string) => void\n onSubmit: () => void\n onClear: () => void\n isSearching: boolean\n /** Wins over `labels.placeholder`. */\n placeholder?: string\n labels?: Partial<FactSearchBarLabels>\n testIds?: Partial<FactSearchBarTestIds>\n}\n\n/**\n * The facts Smart Search bar: the same bordered, auto-growing box as the Files Smart Search.\n * Enter searches; Shift+Enter breaks a line.\n */\nexport function FactSearchBar({\n query,\n onQueryChange,\n onSubmit,\n onClear,\n isSearching,\n placeholder,\n labels,\n testIds,\n}: FactSearchBarProps) {\n const l = { ...DEFAULT_FACT_SEARCH_BAR_LABELS, ...labels }\n return (\n <div className=\"border-t border-border px-6 pb-4 pt-6\" data-slot=\"fact-search-bar\">\n <form\n onSubmit={(e) => {\n e.preventDefault()\n onSubmit()\n }}\n className=\"mx-auto flex w-full max-w-2xl items-center gap-3\"\n >\n <label\n htmlFor=\"facts-smart-search-input\"\n className=\"shrink-0 text-base font-medium text-foreground\"\n >\n {l.search}\n </label>\n <div className=\"flex min-w-0 flex-1 items-start gap-2 rounded-lg border border-border bg-background px-3.5 py-2.5 transition-colors focus-within:border-ring focus-within:ring-2 focus-within:ring-ring\">\n <textarea\n id=\"facts-smart-search-input\"\n rows={1}\n value={query}\n onChange={(e) => {\n onQueryChange(e.target.value)\n e.target.style.height = 'auto'\n e.target.style.height = `${e.target.scrollHeight}px`\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n onSubmit()\n }\n }}\n placeholder={placeholder ?? l.placeholder}\n className=\"flex-1 resize-none overflow-hidden border-0 bg-transparent p-0 text-base leading-relaxed text-foreground outline-none placeholder:text-muted-foreground\"\n data-testid={testIdOr(testIds?.input, { testId: 'facts-smart-search-input' })}\n autoFocus\n />\n <div className=\"flex shrink-0 items-center gap-1\">\n {query && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 text-muted-foreground hover:text-foreground pointer-coarse:size-11\"\n onClick={onClear}\n aria-label={l.clear}\n title={l.clear}\n data-testid={testIdOr(testIds?.clear, { testId: 'facts-smart-search-clear' })}\n >\n <X className=\"size-4\" />\n </Button>\n )}\n <Button\n type=\"submit\"\n size=\"icon\"\n disabled={!query.trim() || isSearching}\n className=\"size-7 pointer-coarse:size-11\"\n data-testid={testIdOr(testIds?.submit, { testId: 'facts-smart-search-submit' })}\n title={l.submit}\n >\n {isSearching ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Search className=\"size-4\" />\n )}\n </Button>\n </div>\n </div>\n </form>\n </div>\n )\n}\n\n/** Totals headline pinned between the search bar and the scrolling results. */\nexport function FactSearchTotals({ children, testId }: { children: ReactNode; testId?: string }) {\n return (\n <div className=\"px-4 pb-3\">\n <p\n className=\"font-sans text-base font-semibold tabular-nums text-foreground\"\n data-testid={testIdOr(testId, { testId: 'facts-smart-search-totals' })}\n >\n {children}\n </p>\n </div>\n )\n}\n\n/** \"Searching facts…\" line. */\nexport function FactSearchPending({ children }: { children: ReactNode }) {\n return (\n <div className=\"flex items-center justify-center gap-2 py-16 text-sm text-muted-foreground\">\n <Loader2 className=\"size-4 animate-spin\" /> {children}\n </div>\n )\n}\n\n/** No-matches message. */\nexport function FactSearchNoMatches({\n children,\n testId,\n}: {\n children: ReactNode\n testId?: string\n}) {\n return (\n <div\n className=\"py-16 text-center text-sm text-muted-foreground\"\n data-testid={testIdOr(testId, { testId: 'facts-smart-search-empty' })}\n >\n {children}\n </div>\n )\n}\n\nexport interface FactSearchResultLabel {\n id: string\n name: string\n color: string\n}\n\nexport interface FactSearchResultProps {\n /** Fact id: keys the test ids. */\n id: string\n /** 1-based rank, shown outside the card (it numbers the results, it is not part of the hit). */\n rank: number\n text: string\n terms: string[]\n renderSnippet: (content: string, terms: string[]) => ReactNode\n labels: FactSearchResultLabel[]\n /** The fact is in the host's current chat. */\n isInChat?: boolean\n isVerified?: boolean\n /** The fact open in the composer. */\n isSelected?: boolean\n onOpen: () => void\n uiLabels?: Partial<FactSearchResultLabels>\n testIds?: Partial<FactSearchResultTestIds>\n /** Destination of the fact; the card stays a click target (see SearchHit `href`). */\n href?: string\n}\n\n/** One facts search result: rank, highlighted text, labels (and In this chat) and the Verified mark. */\nexport function FactSearchResult({\n id,\n rank,\n text,\n terms,\n renderSnippet,\n labels,\n isInChat,\n isVerified,\n isSelected,\n onOpen,\n uiLabels: labelOverrides,\n testIds,\n href,\n}: FactSearchResultProps) {\n const l = { ...DEFAULT_FACT_SEARCH_RESULT_LABELS, ...labelOverrides }\n return (\n <div className=\"flex items-start gap-2\" data-slot=\"fact-search-hit\">\n <span\n className=\"w-5 shrink-0 pt-3 text-right text-xs tabular-nums text-muted-foreground\"\n aria-hidden=\"true\"\n >\n {rank}\n </span>\n <SearchHit\n className=\"min-w-0 flex-1\"\n testId={testIdOr(testIds?.hit?.(id), { testId: `facts-smart-search-hit-${id}` })}\n href={href}\n selected={isSelected}\n onClick={onOpen}\n content={text}\n terms={terms}\n renderSnippet={renderSnippet}\n header={\n <div\n className=\"flex min-w-0 flex-1 flex-wrap items-center gap-1 text-xs text-muted-foreground\"\n data-testid={testIdOr(testIds?.labels?.(id), {\n testId: `facts-smart-search-hit-labels-${id}`,\n })}\n >\n {isInChat && (\n <span\n className=\"inline-flex items-center gap-1 pr-1\"\n data-testid={`facts-smart-search-hit-in-chat-${id}`}\n >\n <Paperclip className=\"size-3\" /> {l.inChat}\n </span>\n )}\n {labels.map((tag) => (\n <span\n key={tag.id}\n className=\"inline-flex shrink-0 items-center gap-1 rounded border px-1.5 py-0.5 text-xs font-medium text-foreground\"\n title={tag.name}\n style={{ borderColor: tag.color }}\n >\n <span\n className=\"flex size-3.5 shrink-0 items-center justify-center rounded\"\n style={{ backgroundColor: tag.color }}\n >\n <Check className=\"size-2.5 text-white\" strokeWidth={3} />\n </span>\n <span className=\"max-w-[120px] truncate\">{tag.name}</span>\n </span>\n ))}\n </div>\n }\n headerRight={\n <span className=\"flex items-center gap-3 text-xs text-muted-foreground\">\n {isVerified && (\n <span\n className=\"inline-flex shrink-0 items-center gap-1 text-green-text\"\n data-testid={testIdOr(testIds?.verified?.(id), {\n testId: `facts-smart-search-hit-verified-${id}`,\n })}\n >\n <CheckCircle2 className=\"size-3\" /> {l.verified}\n </span>\n )}\n <span className=\"inline-flex items-center gap-1\">\n {l.open} <CornerDownLeft className=\"size-3\" />\n </span>\n </span>\n }\n />\n </div>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/facts/FactsTable.tsx","../../src/facts/fact-row.ts","../../src/facts/FactSearchParts.tsx"],"names":["jsx"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * FactsTable: the default facts grid. `createFactColumns` wired to `GridView` with ready-made\n * cells (in-chat, verified and shared switches, label chips, creator initials, row menu), so a host\n * only supplies rows and handlers. Hosts that need custom cells call `createFactColumns` with\n * their own slots and render `GridView` themselves.\n */\nimport { useMemo, type ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport { cn } from '@arbidocs/react/ui'\nimport { GridView, type GridViewProps } from '../files/GridView'\nimport { initials } from '../lib/format'\nimport { FactRowActions } from './FactRowActions'\nimport {\n DEFAULT_FACT_COLUMN_LABELS,\n createFactColumns,\n type FactColumnLabels,\n type FactRowView,\n} from './factColumns'\n\nexport interface FactsTableProps<T extends FactRowView> {\n facts: T[]\n /** With `onToggleInChat`, shows the In chat column (whether a fact is in the host's chat). */\n isInChat?: (fact: T) => boolean\n onToggleInChat?: (fact: T) => void\n onToggleConfirmed: (fact: T) => void\n onToggleShared: (fact: T) => void\n /** The row menu appears when both `onEdit` and `onDelete` are provided. */\n onEdit?: (fact: T) => void\n onDelete?: (fact: T) => void\n /** Row click (opens the fact). */\n onOpen?: (fact: T) => void\n /** Display name of the fact's creator (sorting, filtering and the initials chip). */\n getCreatorName?: (fact: T) => string\n /** Friendly display of an ISO timestamp. Defaults to the locale date. */\n formatDate?: (iso: string) => string\n columnLabels?: Partial<FactColumnLabels>\n isLoading?: boolean\n /** Saved column state key (AG Grid persists by it). */\n gridId?: string\n height?: GridViewProps<T>['height']\n rowHeight?: number\n /** Escape hatch for any other `GridView` prop. */\n gridProps?: Partial<Omit<GridViewProps<T>, 'items' | 'columnDefs' | 'getItemId'>>\n testId?: string\n}\n\ninterface FactSwitchProps {\n checked: boolean\n label: string\n onToggle: () => void\n testId: string\n}\n\nfunction FactSwitch({ checked, label, onToggle, testId }: FactSwitchProps) {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-label={label}\n onClick={onToggle}\n data-testid={testId}\n className={cn(\n 'inline-flex h-5 w-9 items-center rounded-full p-0.5 transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n checked ? 'bg-green-solid' : 'bg-muted-foreground/30'\n )}\n >\n <span\n className={cn(\n 'size-4 rounded-full bg-background transition-transform',\n checked && 'translate-x-4'\n )}\n />\n </button>\n )\n}\n\nconst defaultFormatDate = (iso: string): string => {\n const d = new Date(iso)\n return Number.isNaN(d.getTime()) ? iso : d.toLocaleDateString()\n}\n\nconst EMPTY_STATE = { title: 'No facts yet' }\n\n/** The default facts table: columns, cells and the grid in one component. */\nexport function FactsTable<T extends FactRowView>({\n facts,\n isInChat,\n onToggleInChat,\n onToggleConfirmed,\n onToggleShared,\n onEdit,\n onDelete,\n onOpen,\n getCreatorName,\n formatDate = defaultFormatDate,\n columnLabels,\n isLoading,\n gridId = 'facts-table-v1',\n height = '100%',\n rowHeight = 52,\n gridProps,\n testId = 'facts-table',\n}: FactsTableProps<T>) {\n const l = { ...DEFAULT_FACT_COLUMN_LABELS, ...columnLabels }\n\n const columnDefs = useMemo<ColDef<T>[]>(\n () =>\n createFactColumns<T>({\n isInChat,\n onToggleInChat,\n renderHeader: (params) => (\n <span className=\"text-[12.5px] font-medium\">{params.displayName}</span>\n ),\n renderRowActions: (fact) =>\n onEdit && onDelete ? (\n <FactRowActions onEdit={() => onEdit(fact)} onDelete={() => onDelete(fact)} />\n ) : null,\n renderLabels: (fact): ReactNode => (\n <span className=\"flex flex-wrap items-center gap-1\">\n {(fact.tags ?? []).map((tag) => (\n <span\n key={tag.name}\n className=\"rounded-full bg-muted px-2 py-px text-xs text-muted-foreground\"\n >\n {tag.name}\n </span>\n ))}\n </span>\n ),\n renderVerified: (fact) => (\n <FactSwitch\n checked={fact.confirmed}\n label={l.verified}\n onToggle={() => onToggleConfirmed(fact)}\n testId={`facts-grid-confirmed-${fact.external_id}`}\n />\n ),\n renderShared: (fact) => (\n <FactSwitch\n checked={fact.shared}\n label={l.shared}\n onToggle={() => onToggleShared(fact)}\n testId={`facts-grid-shared-${fact.external_id}`}\n />\n ),\n renderCreator: (fact, _params: ICellRendererParams<T>) => {\n const name = getCreatorName?.(fact) ?? ''\n return name ? (\n <span\n title={name}\n className=\"inline-flex size-6 items-center justify-center rounded-full bg-muted text-[10px] font-medium text-muted-foreground\"\n >\n {initials(name)}\n </span>\n ) : null\n },\n getCreatorName: (params) => (params.data ? (getCreatorName?.(params.data) ?? '') : ''),\n formatDate,\n labels: columnLabels,\n }),\n [\n isInChat,\n onToggleInChat,\n onToggleConfirmed,\n onToggleShared,\n onEdit,\n onDelete,\n getCreatorName,\n formatDate,\n columnLabels,\n l.verified,\n l.shared,\n ]\n )\n\n return (\n <GridView<T>\n testId={testId}\n items={facts}\n columnDefs={columnDefs}\n getItemId={(fact) => fact.external_id}\n onRowClick={onOpen}\n isLoading={isLoading}\n emptyState={EMPTY_STATE}\n gridId={gridId}\n height={height}\n rowHeight={rowHeight}\n {...gridProps}\n gridOptions={{ suppressClickEdit: true, ...gridProps?.gridOptions }}\n />\n )\n}\n","import type { FactRowView } from './factColumns'\n\n/**\n * A fact as a host with plain records usually holds it: camelCase, optional flags, tags as\n * strings. `toFactRow` maps it to the `FactRowView` that `FactsTable` and `createFactColumns`\n * read, so a host without the SDK type needs no adapter of its own.\n */\nexport interface PlainFactRecord {\n id: string\n text: string\n confirmed?: boolean\n shared?: boolean\n /** ISO date (or date-time) the fact starts. */\n dateStart?: string | null\n dateEnd?: string | null\n timezone?: string | null\n tags?: Array<string | { name: string }> | null\n /** Passages that support the fact; only their count is shown. */\n citations?: unknown[] | null\n createdBy?: string | null\n createdAt?: string | null\n updatedAt?: string | null\n}\n\n/** The row plus the record it came from, so callbacks can hand the host its own object back. */\nexport type PlainFactRow<T extends PlainFactRecord> = FactRowView & { record: T }\n\n/** Map one plain record to a grid row. Missing flags are `false`, missing lists are empty. */\nexport function toFactRow<T extends PlainFactRecord>(record: T): PlainFactRow<T> {\n return {\n external_id: record.id,\n text: record.text,\n confirmed: record.confirmed ?? false,\n shared: record.shared ?? false,\n date_start: record.dateStart ?? null,\n date_end: record.dateEnd ?? null,\n timezone: record.timezone ?? null,\n tags: (record.tags ?? []).map((t) => (typeof t === 'string' ? { name: t } : t)),\n citations: record.citations ?? [],\n created_by_ext_id: record.createdBy ?? null,\n created_at: record.createdAt ?? null,\n updated_at: record.updatedAt ?? null,\n record,\n }\n}\n\nexport function toFactRows<T extends PlainFactRecord>(records: T[]): PlainFactRow<T>[] {\n return records.map(toFactRow)\n}\n","import type { ReactNode } from 'react'\nimport { Check, CheckCircle2, CornerDownLeft, Loader2, Paperclip, Search, X } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { SearchHit } from '../retrieval/SearchHit'\nimport { testIdOr } from '../chat/test-id'\n\nexport interface FactSearchBarLabels {\n search: string\n placeholder: string\n clear: string\n submit: string\n}\n\nexport const DEFAULT_FACT_SEARCH_BAR_LABELS: FactSearchBarLabels = {\n search: 'Search:',\n // An example query rather than an instruction: shows the quoted-phrase syntax.\n placeholder: 'e.g. \"board meeting\" decision on the budget',\n clear: 'Clear search',\n submit: 'Search',\n}\n\nexport interface FactSearchBarTestIds {\n input: string\n clear: string\n submit: string\n}\n\nexport interface FactSearchResultLabels {\n inChat: string\n verified: string\n open: string\n}\n\nexport const DEFAULT_FACT_SEARCH_RESULT_LABELS: FactSearchResultLabels = {\n inChat: 'In this chat',\n verified: 'Verified',\n open: 'Open',\n}\n\nexport interface FactSearchResultTestIds {\n hit: (id: string) => string\n labels: (id: string) => string\n verified: (id: string) => string\n}\n\nexport interface FactSearchBarProps {\n query: string\n onQueryChange: (query: string) => void\n onSubmit: () => void\n onClear: () => void\n isSearching: boolean\n /** Wins over `labels.placeholder`. */\n placeholder?: string\n labels?: Partial<FactSearchBarLabels>\n testIds?: Partial<FactSearchBarTestIds>\n}\n\n/**\n * The facts Smart Search bar: the same bordered, auto-growing box as the Files Smart Search.\n * Enter searches; Shift+Enter breaks a line.\n */\nexport function FactSearchBar({\n query,\n onQueryChange,\n onSubmit,\n onClear,\n isSearching,\n placeholder,\n labels,\n testIds,\n}: FactSearchBarProps) {\n const l = { ...DEFAULT_FACT_SEARCH_BAR_LABELS, ...labels }\n return (\n <div className=\"border-t border-border px-6 pb-4 pt-6\" data-slot=\"fact-search-bar\">\n <form\n onSubmit={(e) => {\n e.preventDefault()\n onSubmit()\n }}\n className=\"mx-auto flex w-full max-w-2xl items-center gap-3\"\n >\n <label\n htmlFor=\"facts-smart-search-input\"\n className=\"shrink-0 text-base font-medium text-foreground\"\n >\n {l.search}\n </label>\n <div className=\"flex min-w-0 flex-1 items-start gap-2 rounded-lg border border-border bg-background px-3.5 py-2.5 transition-colors focus-within:border-ring focus-within:ring-2 focus-within:ring-ring\">\n <textarea\n id=\"facts-smart-search-input\"\n rows={1}\n value={query}\n onChange={(e) => {\n onQueryChange(e.target.value)\n e.target.style.height = 'auto'\n e.target.style.height = `${e.target.scrollHeight}px`\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n onSubmit()\n }\n }}\n placeholder={placeholder ?? l.placeholder}\n className=\"flex-1 resize-none overflow-hidden border-0 bg-transparent p-0 text-base leading-relaxed text-foreground outline-none placeholder:text-muted-foreground\"\n data-testid={testIdOr(testIds?.input, { testId: 'facts-smart-search-input' })}\n autoFocus\n />\n <div className=\"flex shrink-0 items-center gap-1\">\n {query && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 text-muted-foreground hover:text-foreground pointer-coarse:size-11\"\n onClick={onClear}\n aria-label={l.clear}\n title={l.clear}\n data-testid={testIdOr(testIds?.clear, { testId: 'facts-smart-search-clear' })}\n >\n <X className=\"size-4\" />\n </Button>\n )}\n <Button\n type=\"submit\"\n size=\"icon\"\n disabled={!query.trim() || isSearching}\n className=\"size-7 pointer-coarse:size-11\"\n data-testid={testIdOr(testIds?.submit, { testId: 'facts-smart-search-submit' })}\n title={l.submit}\n >\n {isSearching ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Search className=\"size-4\" />\n )}\n </Button>\n </div>\n </div>\n </form>\n </div>\n )\n}\n\n/** Totals headline pinned between the search bar and the scrolling results. */\nexport function FactSearchTotals({ children, testId }: { children: ReactNode; testId?: string }) {\n return (\n <div className=\"px-4 pb-3\">\n <p\n className=\"font-sans text-base font-semibold tabular-nums text-foreground\"\n data-testid={testIdOr(testId, { testId: 'facts-smart-search-totals' })}\n >\n {children}\n </p>\n </div>\n )\n}\n\n/** \"Searching facts…\" line. */\nexport function FactSearchPending({ children }: { children: ReactNode }) {\n return (\n <div className=\"flex items-center justify-center gap-2 py-16 text-sm text-muted-foreground\">\n <Loader2 className=\"size-4 animate-spin\" /> {children}\n </div>\n )\n}\n\n/** No-matches message. */\nexport function FactSearchNoMatches({\n children,\n testId,\n}: {\n children: ReactNode\n testId?: string\n}) {\n return (\n <div\n className=\"py-16 text-center text-sm text-muted-foreground\"\n data-testid={testIdOr(testId, { testId: 'facts-smart-search-empty' })}\n >\n {children}\n </div>\n )\n}\n\nexport interface FactSearchResultLabel {\n id: string\n name: string\n color: string\n}\n\nexport interface FactSearchResultProps {\n /** Fact id: keys the test ids. */\n id: string\n /** 1-based rank, shown outside the card (it numbers the results, it is not part of the hit). */\n rank: number\n text: string\n terms: string[]\n renderSnippet: (content: string, terms: string[]) => ReactNode\n labels: FactSearchResultLabel[]\n /** The fact is in the host's current chat. */\n isInChat?: boolean\n isVerified?: boolean\n /** The fact open in the composer. */\n isSelected?: boolean\n onOpen: () => void\n uiLabels?: Partial<FactSearchResultLabels>\n testIds?: Partial<FactSearchResultTestIds>\n /** Destination of the fact; the card stays a click target (see SearchHit `href`). */\n href?: string\n}\n\n/** One facts search result: rank, highlighted text, labels (and In this chat) and the Verified mark. */\nexport function FactSearchResult({\n id,\n rank,\n text,\n terms,\n renderSnippet,\n labels,\n isInChat,\n isVerified,\n isSelected,\n onOpen,\n uiLabels: labelOverrides,\n testIds,\n href,\n}: FactSearchResultProps) {\n const l = { ...DEFAULT_FACT_SEARCH_RESULT_LABELS, ...labelOverrides }\n return (\n <div className=\"flex items-start gap-2\" data-slot=\"fact-search-hit\">\n <span\n className=\"w-5 shrink-0 pt-3 text-right text-xs tabular-nums text-muted-foreground\"\n aria-hidden=\"true\"\n >\n {rank}\n </span>\n <SearchHit\n className=\"min-w-0 flex-1\"\n testId={testIdOr(testIds?.hit?.(id), { testId: `facts-smart-search-hit-${id}` })}\n href={href}\n selected={isSelected}\n onClick={onOpen}\n content={text}\n terms={terms}\n renderSnippet={renderSnippet}\n header={\n <div\n className=\"flex min-w-0 flex-1 flex-wrap items-center gap-1 text-xs text-muted-foreground\"\n data-testid={testIdOr(testIds?.labels?.(id), {\n testId: `facts-smart-search-hit-labels-${id}`,\n })}\n >\n {isInChat && (\n <span\n className=\"inline-flex items-center gap-1 pr-1\"\n data-testid={`facts-smart-search-hit-in-chat-${id}`}\n >\n <Paperclip className=\"size-3\" /> {l.inChat}\n </span>\n )}\n {labels.map((tag) => (\n <span\n key={tag.id}\n className=\"inline-flex shrink-0 items-center gap-1 rounded border px-1.5 py-0.5 text-xs font-medium text-foreground\"\n title={tag.name}\n style={{ borderColor: tag.color }}\n >\n <span\n className=\"flex size-3.5 shrink-0 items-center justify-center rounded\"\n style={{ backgroundColor: tag.color }}\n >\n <Check className=\"size-2.5 text-white\" strokeWidth={3} />\n </span>\n <span className=\"max-w-[120px] truncate\">{tag.name}</span>\n </span>\n ))}\n </div>\n }\n headerRight={\n <span className=\"flex items-center gap-3 text-xs text-muted-foreground\">\n {isVerified && (\n <span\n className=\"inline-flex shrink-0 items-center gap-1 text-green-text\"\n data-testid={testIdOr(testIds?.verified?.(id), {\n testId: `facts-smart-search-hit-verified-${id}`,\n })}\n >\n <CheckCircle2 className=\"size-3\" /> {l.verified}\n </span>\n )}\n <span className=\"inline-flex items-center gap-1\">\n {l.open} <CornerDownLeft className=\"size-3\" />\n </span>\n </span>\n }\n />\n </div>\n )\n}\n"]}
|