@arbidocs/blocks 0.4.146 → 0.4.150
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/ConnectedNativeDocxComparison-3XQSINPQ.cjs +44 -0
- package/dist/ConnectedNativeDocxComparison-3XQSINPQ.cjs.map +1 -0
- package/dist/ConnectedNativeDocxComparison-XQSXVGHR.js +35 -0
- package/dist/ConnectedNativeDocxComparison-XQSXVGHR.js.map +1 -0
- package/dist/ConnectedNativeDocxEditor-IPEZDERL.js +33 -0
- package/dist/ConnectedNativeDocxEditor-IPEZDERL.js.map +1 -0
- package/dist/ConnectedNativeDocxEditor-OUWFMIPH.cjs +46 -0
- package/dist/ConnectedNativeDocxEditor-OUWFMIPH.cjs.map +1 -0
- package/dist/ConnectedStreamedWordArtifact-D5LSMDO4.cjs +44 -0
- package/dist/ConnectedStreamedWordArtifact-D5LSMDO4.cjs.map +1 -0
- package/dist/ConnectedStreamedWordArtifact-UZVNBKQB.js +35 -0
- package/dist/ConnectedStreamedWordArtifact-UZVNBKQB.js.map +1 -0
- package/dist/FactTextEditor-YESAU2IJ.js +25 -0
- package/dist/FactTextEditor-YESAU2IJ.js.map +1 -0
- package/dist/FactTextEditor-YUPBCTXK.cjs +27 -0
- package/dist/FactTextEditor-YUPBCTXK.cjs.map +1 -0
- package/dist/{NativeDocxEditor-BE2OEOTJ.cjs → NativeDocxEditor-5VBNM5I7.cjs} +8 -8
- package/dist/{NativeDocxEditor-BE2OEOTJ.cjs.map → NativeDocxEditor-5VBNM5I7.cjs.map} +1 -1
- package/dist/{NativeDocxEditor-KOPFMRYW.js → NativeDocxEditor-XT5ZLFGU.js} +4 -4
- package/dist/{NativeDocxEditor-KOPFMRYW.js.map → NativeDocxEditor-XT5ZLFGU.js.map} +1 -1
- package/dist/agents/index.cjs +265 -266
- package/dist/agents/index.js +8 -9
- package/dist/calendar/index.cjs +117 -125
- package/dist/calendar/index.d.ts +0 -1
- package/dist/calendar/index.js +1 -1
- package/dist/calls/index.cjs +3 -3
- package/dist/calls/index.js +2 -2
- package/dist/chat/index.cjs +78 -78
- package/dist/chat/index.js +3 -3
- package/dist/{chunk-2FL7QJKJ.js → chunk-265GOG4W.js} +3 -3
- package/dist/{chunk-2FL7QJKJ.js.map → chunk-265GOG4W.js.map} +1 -1
- package/dist/{chunk-IJST4EBM.js → chunk-3E2F4AHD.js} +8 -8
- package/dist/{chunk-IJST4EBM.js.map → chunk-3E2F4AHD.js.map} +1 -1
- package/dist/chunk-3FSXWVHW.cjs +5184 -0
- package/dist/chunk-3FSXWVHW.cjs.map +1 -0
- package/dist/{chunk-LPYEUD2D.cjs → chunk-4JNKXOFZ.cjs} +3 -3
- package/dist/{chunk-LPYEUD2D.cjs.map → chunk-4JNKXOFZ.cjs.map} +1 -1
- package/dist/{chunk-ODRHHWHY.cjs → chunk-4KMLM3GY.cjs} +4 -4
- package/dist/chunk-4KMLM3GY.cjs.map +1 -0
- package/dist/{chunk-MHFF5N65.cjs → chunk-757OYF6G.cjs} +4 -38
- package/dist/chunk-757OYF6G.cjs.map +1 -0
- package/dist/chunk-AXTDDWMR.js +16 -0
- package/dist/chunk-AXTDDWMR.js.map +1 -0
- package/dist/{chunk-B3AHCIV5.js → chunk-BJ24VPOA.js} +4 -55
- package/dist/chunk-BJ24VPOA.js.map +1 -0
- package/dist/chunk-C7PTF6BQ.cjs +172 -0
- package/dist/chunk-C7PTF6BQ.cjs.map +1 -0
- package/dist/{chunk-T5B7FM7S.js → chunk-COA3S3CZ.js} +3 -3
- package/dist/{chunk-T5B7FM7S.js.map → chunk-COA3S3CZ.js.map} +1 -1
- package/dist/{chunk-C44TDH54.js → chunk-CQPFW64W.js} +5 -5
- package/dist/{chunk-C44TDH54.js.map → chunk-CQPFW64W.js.map} +1 -1
- package/dist/chunk-D3WFIFRY.cjs +659 -0
- package/dist/chunk-D3WFIFRY.cjs.map +1 -0
- package/dist/{chunk-QXMR5YHC.js → chunk-DIB4JYUY.js} +19 -3
- package/dist/chunk-DIB4JYUY.js.map +1 -0
- package/dist/chunk-DVB5ZKOF.js +22 -0
- package/dist/chunk-DVB5ZKOF.js.map +1 -0
- package/dist/{chunk-VHJHY7TT.js → chunk-ECERC6TI.js} +3 -3
- package/dist/{chunk-VHJHY7TT.js.map → chunk-ECERC6TI.js.map} +1 -1
- package/dist/chunk-EDV7CYG6.cjs +18 -0
- package/dist/chunk-EDV7CYG6.cjs.map +1 -0
- package/dist/chunk-FAXXN7KI.cjs +213 -0
- package/dist/chunk-FAXXN7KI.cjs.map +1 -0
- package/dist/{chunk-2MJWWPHY.js → chunk-G4IYES7G.js} +140 -15
- package/dist/chunk-G4IYES7G.js.map +1 -0
- package/dist/{chunk-MFMASSEO.cjs → chunk-GGTUMLCT.cjs} +93 -91
- package/dist/chunk-GGTUMLCT.cjs.map +1 -0
- package/dist/{chunk-QI6AIHWP.cjs → chunk-GOWXP5KT.cjs} +145 -14
- package/dist/chunk-GOWXP5KT.cjs.map +1 -0
- package/dist/{chunk-O6IEZDRC.cjs → chunk-GRGS5M6O.cjs} +181 -3
- package/dist/chunk-GRGS5M6O.cjs.map +1 -0
- package/dist/{chunk-A6IU4GIW.js → chunk-HGLC566X.js} +598 -13
- package/dist/chunk-HGLC566X.js.map +1 -0
- package/dist/{chunk-O2GW5IY6.cjs → chunk-ILM42LE6.cjs} +33 -33
- package/dist/{chunk-O2GW5IY6.cjs.map → chunk-ILM42LE6.cjs.map} +1 -1
- package/dist/{chunk-C3CGJK7A.cjs → chunk-IPQ5MJ4Z.cjs} +636 -31
- package/dist/chunk-IPQ5MJ4Z.cjs.map +1 -0
- package/dist/{chunk-NRFAWUVD.js → chunk-JAANWQGB.js} +157 -157
- package/dist/chunk-JAANWQGB.js.map +1 -0
- package/dist/{chunk-7RJTEWYM.js → chunk-JGOST4IL.js} +350 -64
- package/dist/chunk-JGOST4IL.js.map +1 -0
- package/dist/chunk-KHXEIEXN.js +41 -0
- package/dist/chunk-KHXEIEXN.js.map +1 -0
- package/dist/chunk-KLPRAQCE.cjs +22 -0
- package/dist/chunk-KLPRAQCE.cjs.map +1 -0
- package/dist/chunk-KQYPP72K.js +644 -0
- package/dist/chunk-KQYPP72K.js.map +1 -0
- package/dist/chunk-KUT2Y7JF.cjs +43 -0
- package/dist/chunk-KUT2Y7JF.cjs.map +1 -0
- package/dist/{chunk-6YTHQ73P.cjs → chunk-LLYZGH3L.cjs} +3 -56
- package/dist/chunk-LLYZGH3L.cjs.map +1 -0
- package/dist/{chunk-YSHIC4NJ.cjs → chunk-LXTOOUEN.cjs} +159 -154
- package/dist/chunk-LXTOOUEN.cjs.map +1 -0
- package/dist/{chunk-EVUEIBNU.js → chunk-M4S75AEJ.js} +44 -5
- package/dist/chunk-M4S75AEJ.js.map +1 -0
- package/dist/{chunk-V5OAXIBN.cjs → chunk-NPR5BGFF.cjs} +11 -11
- package/dist/{chunk-V5OAXIBN.cjs.map → chunk-NPR5BGFF.cjs.map} +1 -1
- package/dist/{chunk-PLJ7PHWU.cjs → chunk-NS7NVX4E.cjs} +3 -3
- package/dist/{chunk-PLJ7PHWU.cjs.map → chunk-NS7NVX4E.cjs.map} +1 -1
- package/dist/{chunk-RB7GX2VT.cjs → chunk-NWNAYXC7.cjs} +9 -9
- package/dist/{chunk-RB7GX2VT.cjs.map → chunk-NWNAYXC7.cjs.map} +1 -1
- package/dist/chunk-Q6N6MZKO.js +5004 -0
- package/dist/chunk-Q6N6MZKO.js.map +1 -0
- package/dist/{chunk-I2QSDQQV.cjs → chunk-QT3A4PFC.cjs} +21 -2
- package/dist/chunk-QT3A4PFC.cjs.map +1 -0
- package/dist/{chunk-6HCJ3ZEU.js → chunk-R6VCPDPF.js} +178 -6
- package/dist/chunk-R6VCPDPF.js.map +1 -0
- package/dist/{chunk-ZM26YEOT.js → chunk-RY2SODRN.js} +3 -3
- package/dist/{chunk-ZM26YEOT.js.map → chunk-RY2SODRN.js.map} +1 -1
- package/dist/chunk-SDOEHEJP.js +208 -0
- package/dist/chunk-SDOEHEJP.js.map +1 -0
- package/dist/{chunk-DETZZBG2.cjs → chunk-SIB6C7P7.cjs} +43 -2
- package/dist/chunk-SIB6C7P7.cjs.map +1 -0
- package/dist/{chunk-OPTBQSCV.cjs → chunk-SMN32BQ3.cjs} +4 -183
- package/dist/chunk-SMN32BQ3.cjs.map +1 -0
- package/dist/chunk-TAWPVD6C.cjs +1956 -0
- package/dist/chunk-TAWPVD6C.cjs.map +1 -0
- package/dist/chunk-TC25LGIM.js +6584 -0
- package/dist/chunk-TC25LGIM.js.map +1 -0
- package/dist/{chunk-OBWYM25Y.js → chunk-TL45OJQE.js} +85 -83
- package/dist/chunk-TL45OJQE.js.map +1 -0
- package/dist/{chunk-AOSUHWIL.js → chunk-TZOQKV64.js} +4 -37
- package/dist/chunk-TZOQKV64.js.map +1 -0
- package/dist/chunk-UTVY63DG.js +16 -0
- package/dist/chunk-UTVY63DG.js.map +1 -0
- package/dist/chunk-V4YZXGXR.cjs +6751 -0
- package/dist/chunk-V4YZXGXR.cjs.map +1 -0
- package/dist/chunk-XRWHFMHK.js +19 -0
- package/dist/chunk-XRWHFMHK.js.map +1 -0
- package/dist/{chunk-O4YPVYPO.cjs → chunk-YAEXSCUW.cjs} +364 -60
- package/dist/chunk-YAEXSCUW.cjs.map +1 -0
- package/dist/chunk-YIFCLNII.cjs +18 -0
- package/dist/chunk-YIFCLNII.cjs.map +1 -0
- package/dist/chunk-Z27QMJ6S.cjs +25 -0
- package/dist/chunk-Z27QMJ6S.cjs.map +1 -0
- package/dist/{chunk-CSI2B2H5.js → chunk-Z4NQ3TED.js} +4 -4
- package/dist/chunk-Z4NQ3TED.js.map +1 -0
- package/dist/{chunk-DWZXSPMB.cjs → chunk-ZAVEMQ37.cjs} +3 -3
- package/dist/{chunk-DWZXSPMB.cjs.map → chunk-ZAVEMQ37.cjs.map} +1 -1
- package/dist/{chunk-FUTMU4FR.js → chunk-ZLEYLCE4.js} +8 -181
- package/dist/chunk-ZLEYLCE4.js.map +1 -0
- package/dist/chunk-ZNLTEZEF.js +170 -0
- package/dist/chunk-ZNLTEZEF.js.map +1 -0
- package/dist/chunk-ZO7PJMCO.js +1907 -0
- package/dist/chunk-ZO7PJMCO.js.map +1 -0
- package/dist/citations/index.cjs +14 -14
- package/dist/citations/index.js +2 -2
- package/dist/collaboration/index.cjs +74 -74
- package/dist/collaboration/index.js +3 -3
- package/dist/connect/docx.cjs +23 -28
- package/dist/connect/docx.cjs.map +1 -1
- package/dist/connect/docx.js +12 -28
- package/dist/connect/docx.js.map +1 -1
- package/dist/connect/index.cjs +8799 -2057
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +11 -2
- package/dist/connect/index.js +8578 -1884
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +1229 -0
- package/dist/connect/viewer.cjs.map +1 -0
- package/dist/connect/viewer.d.ts +8 -0
- package/dist/connect/viewer.js +1226 -0
- package/dist/connect/viewer.js.map +1 -0
- package/dist/connection/ConnectedWorkflowsTable.d.ts +2 -12
- package/dist/connection/ai.d.ts +2 -9
- package/dist/connection/billing/AddAddonDialog.d.ts +24 -0
- package/dist/connection/billing/BillingCard.d.ts +18 -0
- package/dist/connection/billing/BillingProjectEntity.d.ts +9 -0
- package/dist/connection/billing/ChangePlanDialog.d.ts +20 -0
- package/dist/connection/billing/ChangeProPlan.d.ts +20 -0
- package/dist/connection/billing/CheckoutTotal.d.ts +12 -0
- package/dist/connection/billing/DailyCapEditor.d.ts +4 -0
- package/dist/connection/billing/InvoicesModal.d.ts +6 -0
- package/dist/connection/billing/NewProjectFlow.d.ts +14 -0
- package/dist/connection/billing/PlanChangeLines.d.ts +13 -0
- package/dist/connection/billing/PlanSelector.d.ts +50 -0
- package/dist/connection/billing/ProjectBilling.d.ts +24 -0
- package/dist/connection/billing/ProjectDetail.d.ts +16 -0
- package/dist/connection/billing/ProjectUsageCard.d.ts +21 -0
- package/dist/connection/billing/ProjectUsageContent.d.ts +18 -0
- package/dist/connection/billing/ProjectsTable.d.ts +13 -0
- package/dist/connection/billing/ReduceAddonDialog.d.ts +18 -0
- package/dist/connection/billing/ReferralReward.d.ts +32 -0
- package/dist/connection/billing/SharedProjects.d.ts +13 -0
- package/dist/connection/billing/StripeCheckoutModal.d.ts +32 -0
- package/dist/connection/billing/SubscriptionPlans.d.ts +15 -0
- package/dist/connection/billing/SubscriptionStatus.d.ts +10 -0
- package/dist/connection/billing/addon-pricing.d.ts +97 -0
- package/dist/connection/billing/api-error.d.ts +6 -0
- package/dist/connection/billing/billing-country.d.ts +14 -0
- package/dist/connection/billing/billing-focus.d.ts +11 -0
- package/dist/connection/billing/index.d.ts +22 -0
- package/dist/connection/billing/plan-badge.d.ts +15 -0
- package/dist/connection/billing/plan-change-outcome.d.ts +15 -0
- package/dist/connection/billing/plan-constants.d.ts +29 -0
- package/dist/connection/billing/plan-pricing.d.ts +67 -0
- package/dist/connection/billing/quota-items.d.ts +33 -0
- package/dist/connection/billing/referral-reward.d.ts +28 -0
- package/dist/connection/billing/refusal-copy.d.ts +5 -0
- package/dist/connection/billing/reward-balance.d.ts +19 -0
- package/dist/connection/billing/support.d.ts +35 -0
- package/dist/connection/billing/tax-quote.d.ts +36 -0
- package/dist/connection/billing/useAddonPurchase.d.ts +32 -0
- package/dist/connection/billing/useAutoRefreshPendingProjects.d.ts +11 -0
- package/dist/connection/billing/useCheckoutQuote.d.ts +30 -0
- package/dist/connection/billing/useOpenBillingPortal.d.ts +12 -0
- package/dist/connection/calendar/CalendarSettingsDialog.d.ts +1 -1
- package/dist/connection/connectors/ConnectedAppsSettings.d.ts +24 -0
- package/dist/connection/connectors/ConnectedDriveSyncDialog.d.ts +12 -0
- package/dist/connection/connectors/ConnectedMailboxSyncDialog.d.ts +12 -0
- package/dist/connection/connectors/index.d.ts +4 -0
- package/dist/connection/connectors/sync-labels.d.ts +21 -0
- package/dist/connection/facts/ConnectedFactsPage.d.ts +50 -0
- package/dist/connection/facts/FactMarkdownEditor.d.ts +57 -0
- package/dist/connection/facts/FactSourcesPopover.d.ts +38 -0
- package/dist/connection/facts/FactTextEditor.d.ts +2 -0
- package/dist/connection/facts/factNouns.d.ts +4 -0
- package/dist/connection/facts/factPageColumns.d.ts +37 -0
- package/dist/connection/facts/types.d.ts +127 -0
- package/dist/connection/facts/useFactActions.d.ts +10 -0
- package/dist/connection/facts/useFactComposer.d.ts +54 -0
- package/dist/connection/facts/useFactFilters.d.ts +101 -0
- package/dist/connection/facts/useFactSelection.d.ts +82 -0
- package/dist/connection/facts/useFactsGrid.d.ts +87 -0
- package/dist/connection/facts/useFactsPageView.d.ts +4 -0
- package/dist/connection/mail/ConnectedMailComposer.d.ts +3 -1
- package/dist/connection/mail/ConnectedMailbox.d.ts +4 -2
- package/dist/connection/mail/MailComposerForm.d.ts +4 -2
- package/dist/connection/mail/MailRecipientInput.d.ts +14 -0
- package/dist/connection/mail/index.d.ts +1 -1
- package/dist/connection/mail/types.d.ts +10 -0
- package/dist/connection/search/ConnectedSearchPage.d.ts +64 -0
- package/dist/connection/search/SearchResultRows.d.ts +38 -0
- package/dist/connection/search/index.d.ts +2 -0
- package/dist/connection/settings-page/ConnectedSettingsPage.d.ts +4 -0
- package/dist/connection/settings-page/index.d.ts +1 -1
- package/dist/connection/tags/ConnectedTagTable.d.ts +108 -0
- package/dist/connection/tags/ConnectedTagsPage.d.ts +55 -0
- package/dist/connection/tags/DocTagPassages.d.ts +25 -0
- package/dist/connection/tags/GlossaryExport.d.ts +7 -0
- package/dist/connection/tags/TagCombineFilter.d.ts +14 -0
- package/dist/connection/tags/TagPlacement.d.ts +16 -0
- package/dist/connection/tags/TagsPageSections.d.ts +36 -0
- package/dist/connection/tags/tagCombine.d.ts +55 -0
- package/dist/connection/useConnectedWorkNotifications.d.ts +7 -24
- package/dist/connection/viewer/ConnectedDocumentToolsProvider.d.ts +11 -0
- package/dist/connection/viewer/ConnectedDocumentViewer.d.ts +21 -0
- package/dist/connection/viewer/FinaliseTranslationButton.d.ts +15 -0
- package/dist/connection/viewer/ViewerPdfPane.d.ts +46 -0
- package/dist/connection/viewer/support.d.ts +79 -0
- package/dist/connection/viewer/useImageCrop.d.ts +13 -0
- package/dist/connection/viewer/useViewedDocument.d.ts +70 -0
- package/dist/connection/viewer/useViewerBlobs.d.ts +15 -0
- package/dist/connection/viewer/useViewerTabs.d.ts +18 -0
- package/dist/connection/viewer/useViewerVersions.d.ts +11 -0
- package/dist/connection/workspace-settings/useConnectedWorkspaceSettings.d.ts +6 -0
- package/dist/document-tools/index.cjs +59 -652
- package/dist/document-tools/index.cjs.map +1 -1
- package/dist/document-tools/index.js +2 -641
- package/dist/document-tools/index.js.map +1 -1
- package/dist/docx/index.cjs +48 -47
- package/dist/docx/index.js +4 -3
- package/dist/facts/FactsBulkBar.d.ts +6 -3
- package/dist/facts/cited-version-ref.d.ts +1 -0
- package/dist/facts/index.cjs +206 -1942
- package/dist/facts/index.cjs.map +1 -1
- package/dist/facts/index.d.ts +1 -0
- package/dist/facts/index.js +15 -1897
- package/dist/facts/index.js.map +1 -1
- package/dist/files/ViewerChrome.d.ts +5 -4
- package/dist/files/ViewerControlBar.d.ts +12 -0
- package/dist/files/doc-labels.d.ts +35 -0
- package/dist/files/grid/FilterButton.d.ts +12 -0
- package/dist/files/grid/RowDensityControl.d.ts +18 -0
- package/dist/files/grid/row-density.d.ts +27 -0
- package/dist/files/index.cjs +779 -7100
- package/dist/files/index.cjs.map +1 -1
- package/dist/files/index.d.ts +5 -0
- package/dist/files/index.js +14 -6919
- package/dist/files/index.js.map +1 -1
- package/dist/home/index.cjs +2 -2
- package/dist/home/index.js +2 -2
- package/dist/index.cjs +1043 -1259
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +27 -360
- package/dist/index.js.map +1 -1
- package/dist/retrieval/SearchSnippet.d.ts +6 -0
- package/dist/retrieval/index.cjs +75 -42
- package/dist/retrieval/index.d.ts +2 -0
- package/dist/retrieval/index.js +3 -2
- package/dist/retrieval/search-results.d.ts +46 -0
- package/dist/settings/Billing.d.ts +0 -66
- package/dist/settings/PlanBadge.d.ts +1 -1
- package/dist/settings/SubscriptionParts.d.ts +1 -50
- package/dist/settings/index.cjs +501 -3714
- package/dist/settings/index.cjs.map +1 -1
- package/dist/settings/index.d.ts +3 -2
- package/dist/settings/index.js +10 -3527
- package/dist/settings/index.js.map +1 -1
- package/dist/settings/inverted-index-filter.d.ts +26 -0
- package/dist/shell/index.cjs +2 -2
- package/dist/shell/index.js +2 -2
- package/dist/site/index.cjs +5 -5
- package/dist/site/index.js +1 -1
- package/dist/studio/index.cjs +6 -6
- package/dist/studio/index.js +5 -5
- package/dist/tags/definitions.d.ts +10 -0
- package/dist/tags/index.d.ts +4 -1
- package/dist/tags/page/ExtractEntitiesDialog.d.ts +24 -0
- package/dist/tags/page/TagPicker.d.ts +16 -0
- package/dist/tags/page/tagsPageLabels.d.ts +36 -0
- package/dist/workflow-canvas/index.cjs +21 -22
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.js +8 -9
- package/dist/workflow-canvas/index.js.map +1 -1
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +13 -4
- package/dist/calendar/access-setup.d.ts +0 -8
- package/dist/chunk-2MJWWPHY.js.map +0 -1
- package/dist/chunk-3AFWGEDJ.cjs +0 -53
- package/dist/chunk-3AFWGEDJ.cjs.map +0 -1
- package/dist/chunk-5YHEHEJT.js +0 -1667
- package/dist/chunk-5YHEHEJT.js.map +0 -1
- package/dist/chunk-6HCJ3ZEU.js.map +0 -1
- package/dist/chunk-6YTHQ73P.cjs.map +0 -1
- package/dist/chunk-7RJTEWYM.js.map +0 -1
- package/dist/chunk-A6IU4GIW.js.map +0 -1
- package/dist/chunk-AOSUHWIL.js.map +0 -1
- package/dist/chunk-B3AHCIV5.js.map +0 -1
- package/dist/chunk-C3CGJK7A.cjs.map +0 -1
- package/dist/chunk-CSI2B2H5.js.map +0 -1
- package/dist/chunk-DETZZBG2.cjs.map +0 -1
- package/dist/chunk-EVUEIBNU.js.map +0 -1
- package/dist/chunk-FUTMU4FR.js.map +0 -1
- package/dist/chunk-I2QSDQQV.cjs.map +0 -1
- package/dist/chunk-J5CWKFSC.js +0 -170
- package/dist/chunk-J5CWKFSC.js.map +0 -1
- package/dist/chunk-MFMASSEO.cjs.map +0 -1
- package/dist/chunk-MHFF5N65.cjs.map +0 -1
- package/dist/chunk-NRFAWUVD.js.map +0 -1
- package/dist/chunk-O4YPVYPO.cjs.map +0 -1
- package/dist/chunk-O6IEZDRC.cjs.map +0 -1
- package/dist/chunk-OBWYM25Y.js.map +0 -1
- package/dist/chunk-ODRHHWHY.cjs.map +0 -1
- package/dist/chunk-OPTBQSCV.cjs.map +0 -1
- package/dist/chunk-QI6AIHWP.cjs.map +0 -1
- package/dist/chunk-QXMR5YHC.js.map +0 -1
- package/dist/chunk-RFXJYIDV.js +0 -50
- package/dist/chunk-RFXJYIDV.js.map +0 -1
- package/dist/chunk-U73KPFYH.cjs +0 -1717
- package/dist/chunk-U73KPFYH.cjs.map +0 -1
- package/dist/chunk-XVUOMWMD.cjs +0 -177
- package/dist/chunk-XVUOMWMD.cjs.map +0 -1
- package/dist/chunk-YSHIC4NJ.cjs.map +0 -1
- package/dist/connection/ConnectedTagTable.d.ts +0 -32
- package/dist/connection/calendar/CopyField.d.ts +0 -9
- package/dist/connection/calendar/OpenAccessPanel.d.ts +0 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/connection/docx/support.tsx","../src/connection/ConnectedWorkflowLauncher.tsx","../src/connection/docx/useConnectedDocxReferences.tsx","../src/connection/ConnectedWorkflowsTable.tsx","../src/connection/docx/useConnectedHouseTemplate.ts","../src/connection/docx/ConnectedNativeDocxEditor.tsx"],"names":["createContext","jsx","useContext","useConnectedDocuments","useConnectedTags","useMemo","buildWorkflowScopeSource","documentScopeLabels","useAgents","useBlocksEnvironment","useConnectedWorkspace","useUploadDocuments","useThumbnails","useRef","useState","useCallback","jsxs","Fragment","WorkflowDocumentsField","WorkflowLauncher","DocumentPicker","useArbi","buildDeepLinkUrl","parseDeepLinkPath","useWorkspaceUsers","workflowTriggerType","fmtDate","useWorkflows","useConnectedConversations","useUpdateWorkflow","useDeleteWorkflow","useRunWorkflow","useEffect","WorkflowsTable","useSetWorkspaceHouseTemplate","useWorkspaces","supportsHouseTemplates","workspaceHouseTemplateId","useHouseTemplateCandidates","contentPath","builtinHouseTemplate","isCandidate","useRegisterOpenDocument","NativeDocxEditor","useQueryClient","useOptionalDocumentTools","loadDocxFonts","refreshDocuments"],"mappings":"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","file":"chunk-GGTUMLCT.cjs","sourcesContent":["/**\n * What a host adds to the connected Word editor that the platform API alone cannot give: the\n * workspace's definitions (facts labelled \"Definitions\"), image generation (an assistant run), the\n * host's leave-page guard, and a comment to open the editor at. Every field is optional; without a\n * provider the editor simply offers less (no Defined term, no Generate image).\n */\n\nimport { createContext, useContext, type ReactNode } from 'react'\nimport type { DefinitionSource } from '../../tags/definitions'\nimport type { DocxImageGeneration } from '../../docx/layout/GenerateImage'\n\nexport interface NativeDocxSupport {\n /** The workspace's definitions. Present: Insert offers Defined term and `@@` the type-ahead. */\n definitions?: () => Promise<DefinitionSource[]>\n /** The platform's image generation. Present: Insert offers Generate image. */\n imageGeneration?: DocxImageGeneration\n /** The open editor has (or no longer has) unsaved changes. */\n onDirtyChange?: (dirty: boolean) => void\n /** A comment thread to open when its document opens (a notification's link). */\n commentTarget?: { documentId: string; commentId: string } | null\n}\n\nconst NativeDocxSupportContext = createContext<NativeDocxSupport>({})\n\nexport function NativeDocxSupportProvider({\n value,\n children,\n}: {\n value: NativeDocxSupport\n children: ReactNode\n}) {\n return (\n <NativeDocxSupportContext.Provider value={value}>{children}</NativeDocxSupportContext.Provider>\n )\n}\n\nexport function useNativeDocxSupport(): NativeDocxSupport {\n return useContext(NativeDocxSupportContext)\n}\n","/**\n * The workflow launcher bound to the connection: the open workspace's folders, labels and files\n * behind its scope and `documents` fields (files can be added right there), and the user's agents\n * behind \"Run as\". The host still says what a launch does (`onLaunch`): open a chat, start a task.\n */\n\nimport { useCallback, useMemo, useRef, useState } from 'react'\nimport { useAgents, useThumbnails, useUploadDocuments } from '@arbidocs/react'\nimport { WorkflowLauncher, type WorkflowLauncherProps } from '../agents/workflows/WorkflowLauncher'\nimport {\n WorkflowDocumentsField,\n type WorkflowDocumentsFieldLabels,\n type WorkflowFieldDocument,\n} from '../agents/workflows/WorkflowDocumentsField'\nimport type { WorkflowScopeSource } from '../agents/workflows/WorkflowConfigDialog'\nimport { buildWorkflowScopeSource, documentScopeLabels } from '../agents/workflows/workspaceScope'\nimport type { AgentOption } from '../agents/workflows/AgentSelect'\nimport type { WorkflowField, WorkflowScope } from '../agents/workflows/types'\nimport { useBlocksEnvironment } from '../provider/BlocksProvider'\nimport { useConnectedWorkspace } from './ConnectionProvider'\nimport { useConnectedDocuments, useConnectedTags, type ConnectedDocument } from './workspaceData'\n\nconst IMAGE_FILE_TYPES = new Set(['png', 'jpg', 'jpeg', 'gif', 'bmp', 'tiff', 'webp'])\n\n/** A workspace document as a `documents` field offers it. */\nexport function toWorkflowFieldDocument(doc: ConnectedDocument): WorkflowFieldDocument {\n // Pages and tokens are a text-parsing concept: never meaningful for an image.\n const isImage = IMAGE_FILE_TYPES.has((doc.file_type ?? '').toLowerCase())\n return {\n id: doc.external_id,\n title: doc.doc_metadata?.title || doc.file_name || doc.external_id,\n fileName: doc.file_name,\n pages: isImage ? null : (doc.n_pages ?? null),\n tokens: isImage ? null : (doc.tokens ?? null),\n status: doc.status,\n isImage,\n }\n}\n\n/** The open workspace's folders and labels for a workflow's scope field. */\nexport function useConnectedWorkflowScopeSource(): WorkflowScopeSource {\n const { data: docs } = useConnectedDocuments()\n const { data: tags } = useConnectedTags()\n return useMemo(() => buildWorkflowScopeSource(docs, documentScopeLabels(tags)), [docs, tags])\n}\n\n/** The user's agents, for \"Run as\". */\nexport function useConnectedAgentOptions(): AgentOption[] {\n const { data: agents } = useAgents()\n return useMemo(\n () => (agents ?? []).map((a) => ({ id: a.external_id, label: a.given_name || a.email })),\n [agents]\n )\n}\n\nexport interface ConnectedWorkflowDocumentsFieldProps {\n field: WorkflowField\n value: WorkflowScope\n onChange: (value: WorkflowScope) => void\n /** Add files the host's way (its upload dialog). Absent: they are uploaded here. */\n onAddFiles?: (files?: File[]) => void\n labels?: Partial<WorkflowDocumentsFieldLabels>\n}\n\n/**\n * A workflow `documents` field over the open workspace's files: pick, add (or drop) files, see the\n * chosen images. A launcher's or a task composer's `renderDocuments`.\n */\nexport function ConnectedWorkflowDocumentsField({\n field,\n value,\n onChange,\n onAddFiles,\n labels,\n}: ConnectedWorkflowDocumentsFieldProps) {\n const { notify } = useBlocksEnvironment()\n const { ensureWorkspaceOpen } = useConnectedWorkspace()\n const { data: docs, loaded } = useConnectedDocuments()\n const uploadDocuments = useUploadDocuments()\n const documents = useMemo(() => docs.map(toWorkflowFieldDocument), [docs])\n const chosen = value.documents ?? []\n const { data: thumbnails } = useThumbnails(chosen, { enabled: (field.max ?? 1) > 1 })\n const input = useRef<HTMLInputElement>(null)\n const [adding, setAdding] = useState(false)\n\n const upload = useCallback(\n async (files: File[]) => {\n setAdding(true)\n try {\n await ensureWorkspaceOpen()\n // Each new document joins the shared list as it lands.\n for (const file of files) await uploadDocuments.mutateAsync({ files: [file] })\n } catch (error) {\n notify(error instanceof Error && error.message ? error.message : String(error), 'error')\n } finally {\n setAdding(false)\n }\n },\n [uploadDocuments, ensureWorkspaceOpen, notify]\n )\n\n return (\n <>\n {!onAddFiles && (\n <input\n ref={input}\n type=\"file\"\n multiple\n className=\"hidden\"\n aria-label=\"Add files\"\n data-testid=\"workflow-add-files-input\"\n onChange={(e) => {\n const files = Array.from(e.target.files ?? [])\n e.target.value = ''\n if (files.length) void upload(files)\n }}\n />\n )}\n <WorkflowDocumentsField\n field={field}\n value={value}\n onChange={onChange}\n documents={documents}\n loaded={loaded}\n thumbnailOf={(id) => thumbnails?.[id]}\n onAddFiles={\n onAddFiles ?? ((files) => (files?.length ? void upload(files) : input.current?.click()))\n }\n adding={adding}\n labels={labels}\n />\n </>\n )\n}\n\nexport interface ConnectedWorkflowLauncherProps extends Omit<\n WorkflowLauncherProps,\n 'scopeSource' | 'renderDocuments' | 'agents'\n> {\n /** Add files from a `documents` field the host's way (its upload dialog). Absent: uploaded here. */\n onAddFiles?: (files?: File[]) => void\n}\n\nexport function ConnectedWorkflowLauncher({\n onAddFiles,\n ...props\n}: ConnectedWorkflowLauncherProps) {\n const scopeSource = useConnectedWorkflowScopeSource()\n const agents = useConnectedAgentOptions()\n return (\n <WorkflowLauncher\n {...props}\n scopeSource={scopeSource}\n agents={agents}\n renderDocuments={(field, value, onChange) => (\n <ConnectedWorkflowDocumentsField\n field={field}\n value={value}\n onChange={onChange}\n onAddFiles={onAddFiles}\n />\n )}\n />\n )\n}\n","/**\n * The Word editor's references to the workspace's other documents: the documents and their\n * passages (the same parsed passages a fact's citations quote), the ARBI address of a passage\n * (`/wrk-…/doc-…/cnk-…`, the deep link that opens a document at a passage, so the link works from\n * Word too), and opening one wherever the host shows documents, highlighted like a citation.\n */\nimport { useMemo, useRef } from 'react'\nimport { useArbi } from '@arbidocs/react'\nimport type { DocxReferencesAdapter } from '../../docx/references/CrossReferences'\nimport { DocumentPicker } from '../../settings/DocumentPicker'\nimport { buildDeepLinkUrl, parseDeepLinkPath } from '../../lib/deep-link'\nimport { useBlocksEnvironment } from '../../provider/BlocksProvider'\nimport { useConnectedWorkspace } from '../ConnectionProvider'\nimport { toWorkflowFieldDocument } from '../ConnectedWorkflowLauncher'\nimport { useConnectedDocuments, type ConnectedDocument } from '../workspaceData'\n\ninterface ParsedChunk {\n content?: string | null\n metadata?: { chunk_ext_id?: string | null; page_number?: number | null } | null\n}\n\n/** Top-level documents only: an attachment opens with its parent. */\nconst isTopLevel = (doc: ConnectedDocument) => !doc.parent_ext_id\n\nfunction ReferencePicker({\n documents,\n selectedId,\n onSelect,\n}: {\n documents: ConnectedDocument[]\n selectedId: string | null\n onSelect: (documentId: string) => void\n}) {\n const groups = useMemo(() => {\n const docs = documents\n .filter(isTopLevel)\n .map(toWorkflowFieldDocument)\n .sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase()))\n return [{ id: 'all', heading: 'In this workspace', docs }]\n }, [documents])\n const selected = groups[0].docs.find((d) => d.id === selectedId)\n return (\n <DocumentPicker\n groups={groups}\n value={selectedId ?? ''}\n onValueChange={onSelect}\n selected={selected}\n labels={{ placeholder: 'Search documents…' }}\n />\n )\n}\n\nexport function useConnectedDocxReferences(): DocxReferencesAdapter {\n const arbi = useArbi()\n const { workspaceId } = useConnectedWorkspace()\n const { openDocument, runtimeConfig } = useBlocksEnvironment()\n const { data: documents } = useConnectedDocuments()\n // Read when called (the picker, a link): the list grows while the editor is open.\n const documentsRef = useRef(documents)\n documentsRef.current = documents\n return useMemo<DocxReferencesAdapter>(\n () => ({\n documents: async () =>\n documentsRef.current\n .filter(isTopLevel)\n .map((d) => ({ id: d.external_id, title: toWorkflowFieldDocument(d).title })),\n passages: async (documentId) => {\n const parsed = await arbi.documents.getParsedContent(documentId, 'final')\n return ((parsed.chunks ?? []) as ParsedChunk[]).flatMap((chunk) =>\n chunk.metadata?.chunk_ext_id && chunk.content?.trim()\n ? [\n {\n chunkId: chunk.metadata.chunk_ext_id,\n page: chunk.metadata.page_number ?? null,\n text: chunk.content,\n },\n ]\n : []\n )\n },\n linkFor: ({ documentId, chunkId, page }) => {\n const url = buildDeepLinkUrl(\n { workspaceId: workspaceId ?? undefined, documentId, chunkId },\n runtimeConfig.deploymentDomain\n )\n return page ? `${url}?page=${page}` : url\n },\n targetOf: (href) => {\n let url: URL\n try {\n url = new URL(href, window.location.origin)\n } catch {\n return null\n }\n const { documentId, chunkId } = parseDeepLinkPath(url.pathname)\n if (!documentId || !chunkId) return null\n const page = Number(url.searchParams.get('page')) || null\n return { documentId, chunkId, page }\n },\n open: ({ documentId, chunkId, page }) =>\n openDocument(documentId, { passageId: chunkId, page: page ?? undefined }),\n renderDocumentPicker: (onSelect, selectedId) => (\n <ReferencePicker\n documents={documentsRef.current}\n selectedId={selectedId}\n onSelect={onSelect}\n />\n ),\n }),\n [arbi, workspaceId, openDocument, runtimeConfig.deploymentDomain]\n )\n}\n","/**\n * The saved workflows bound to the connection: when each starts, its last run (a link to the thread\n * it created) and next run, who runs it, pause and resume, share, run now, delete (one or many), and\n * the workflow's history. The host opens a workflow (its builder) and its history; threads open\n * through the environment's `openConversation`, failures are told through its `notify`.\n */\n\nimport { useEffect, useMemo, useState } from 'react'\nimport {\n useAgents,\n useDeleteWorkflow,\n useRunWorkflow,\n useUpdateWorkflow,\n useWorkflows,\n useWorkspaceUsers,\n type WorkflowResponse,\n} from '@arbidocs/react'\nimport { WorkflowsTable, type WorkflowsTableProps } from '../agents/tasks/WorkflowsTable'\nimport { workflowTriggerType } from '../agents/tasks/workflowRows'\nimport { fmtDate } from '../lib/format'\nimport { useBlocksEnvironment } from '../provider/BlocksProvider'\nimport { useConnectedWorkspace } from './ConnectionProvider'\nimport { useConnectedConversations } from './workspaceData'\n\n/** The viewer's role in the open workspace, and the workspace's members. */\nexport function useConnectedWorkspaceRole() {\n const { workspaceId, live, userId, ensureWorkspaceOpen } = useConnectedWorkspace()\n const { data: members = [] } = useWorkspaceUsers(workspaceId ?? undefined, {\n enabled: live && !!workspaceId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const role = members.find((m) => m.user.external_id === userId)?.role\n return {\n members,\n role,\n /** An owner or a collaborator edits, pauses, resumes and runs what is shared with the workspace. */\n canEditShared: role === 'owner' || role === 'collaborator',\n /** With an item's creator, the only one who deletes it. */\n isWorkspaceOwner: role === 'owner',\n }\n}\n\nexport interface ConnectedWorkflowsTableLabels {\n /** A change (pause, share, delete) that failed without a message. */\n updateFailed: string\n deleteTitle: string\n deleteOne: (name: string) => string\n deleteMany: (count: number) => string\n /** A run that failed: its history has the error report. */\n runFailed: string\n /** A run that created no thread. */\n noThread: string\n /** A document action that started (it has no thread): what is happening. */\n documentAction: (workflow: WorkflowResponse) => string\n untitledTask: string\n}\n\nexport const DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS: ConnectedWorkflowsTableLabels = {\n updateFailed: 'Could not update the workflow',\n deleteTitle: 'Delete workflow',\n deleteOne: (name) => `Delete “${name}”? Threads it already created stay.`,\n deleteMany: (count) => `Delete ${count} workflows? Threads they already created stay.`,\n runFailed: 'The workflow failed. You can send an error report from its history.',\n noThread: 'The workflow did not create a thread.',\n documentAction: (workflow) =>\n workflow.action?.type === 'email_documents'\n ? 'Preparing your document email'\n : 'Reviewing documents',\n untitledTask: 'Untitled thread',\n}\n\ntype TableProps = WorkflowsTableProps<WorkflowResponse>\n\nexport interface ConnectedWorkflowsTableProps extends Omit<\n TableProps,\n | 'workflows'\n | 'isLoading'\n | 'busyId'\n | 'describeTrigger'\n | 'formatDate'\n | 'onToggleActive'\n | 'onToggleShared'\n | 'onDelete'\n | 'onDeleteMany'\n | 'onToggleActiveMany'\n | 'onRun'\n | 'onOpenThread'\n | 'lastRuns'\n | 'agentNames'\n | 'taskNames'\n | 'canEditShared'\n | 'isWorkspaceOwner'\n> {\n /** Which saved workflows to list (e.g. those on a schedule). Default: all. */\n filter?: (workflow: WorkflowResponse) => boolean\n /** When a workflow starts, in the host's words. Default: its trigger type. */\n describeTrigger?: TableProps['describeTrigger']\n formatDate?: TableProps['formatDate']\n connectedLabels?: Partial<ConnectedWorkflowsTableLabels>\n}\n\nconst messageOf = (error: unknown) => (error instanceof Error ? error.message : '')\n\nexport function ConnectedWorkflowsTable({\n filter,\n describeTrigger = (w) => workflowTriggerType(w).replaceAll('_', ' '),\n formatDate = fmtDate,\n onViewRuns,\n connectedLabels,\n ...tableProps\n}: ConnectedWorkflowsTableProps) {\n const l = { ...DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS, ...connectedLabels }\n const { notify, confirm, openConversation } = useBlocksEnvironment()\n const { canEditShared, isWorkspaceOwner } = useConnectedWorkspaceRole()\n const { data: saved = [], isLoading } = useWorkflows({ live: true })\n const { data: conversations, refetch } = useConnectedConversations({ live: true })\n const { data: agents = [] } = useAgents()\n const update = useUpdateWorkflow()\n const remove = useDeleteWorkflow()\n const run = useRunWorkflow()\n const [busyId, setBusyId] = useState<string | null>(null)\n\n const workflows = useMemo(() => (filter ? saved.filter(filter) : saved), [saved, filter])\n // A clock or an event fired a workflow: the thread it created is new to the conversation list.\n const firingStamp = saved.map((w) => `${w.external_id}:${w.last_fired_at ?? ''}`).join('|')\n useEffect(() => {\n void refetch?.()\n }, [firingStamp, refetch])\n\n const lastRuns = useMemo(() => {\n const out: NonNullable<TableProps['lastRuns']> = {}\n for (const c of conversations) {\n const id = c.workflow_ext_id\n if (id && (!out[id] || Date.parse(c.created_at) > Date.parse(out[id].at)))\n out[id] = { conversationId: c.external_id, at: c.created_at, threadStatus: c.status }\n }\n return out\n }, [conversations])\n const agentNames = useMemo(\n () => Object.fromEntries(agents.map((a) => [a.external_id, a.given_name || a.email])),\n [agents]\n )\n const taskNames = useMemo(\n () =>\n Object.fromEntries(\n conversations\n .filter((c) => c.status != null)\n .map((c) => [c.external_id, c.title || l.untitledTask])\n ),\n [conversations, l.untitledTask]\n )\n\n const act = async (workflow: WorkflowResponse, action: () => Promise<unknown>) => {\n setBusyId(workflow.external_id)\n try {\n await action()\n } catch (error) {\n notify(messageOf(error) || l.updateFailed, 'error')\n } finally {\n setBusyId(null)\n }\n }\n const setActive = (workflow: WorkflowResponse, active: boolean) =>\n act(workflow, () => update.mutateAsync({ workflowId: workflow.external_id, patch: { active } }))\n const deleteAll = async (items: WorkflowResponse[]) => {\n if (!items.length) return\n const ok = await confirm({\n title: l.deleteTitle,\n message: items.length === 1 ? l.deleteOne(items[0].name) : l.deleteMany(items.length),\n })\n if (!ok) return\n for (const workflow of items)\n await act(workflow, () => remove.mutateAsync(workflow.external_id))\n }\n\n return (\n <WorkflowsTable\n {...tableProps}\n workflows={workflows}\n isLoading={isLoading}\n busyId={busyId}\n describeTrigger={describeTrigger}\n formatDate={formatDate}\n agentNames={agentNames}\n taskNames={taskNames}\n lastRuns={lastRuns}\n canEditShared={canEditShared}\n isWorkspaceOwner={isWorkspaceOwner}\n onOpenThread={(conversationId) => openConversation(conversationId)}\n onViewRuns={onViewRuns}\n onToggleActive={(workflow, active) => void setActive(workflow, active)}\n onToggleActiveMany={(items, active) => {\n void (async () => {\n for (const workflow of items) await setActive(workflow, active)\n })()\n }}\n onToggleShared={(workflow, shared) =>\n void act(workflow, () =>\n update.mutateAsync({ workflowId: workflow.external_id, patch: { shared } })\n )\n }\n onDelete={(workflow) => void deleteAll([workflow])}\n onDeleteMany={(items) => void deleteAll(items)}\n onRun={(workflow) =>\n void act(workflow, async () => {\n const result = await run.mutateAsync(workflow.external_id)\n if (result.conversation_ext_id) openConversation(result.conversation_ext_id)\n if (result.error) {\n onViewRuns?.(workflow)\n notify(l.runFailed, 'error')\n return\n }\n if (result.execution_id && !result.conversation_ext_id) {\n // A document action runs without a thread: its history shows how it goes.\n onViewRuns?.(workflow)\n notify(l.documentAction(workflow), 'success')\n return\n }\n if (!result.conversation_ext_id) throw new Error(l.noThread)\n })\n }\n />\n )\n}\n","/**\n * The house template for the open workspace: its own (a document of the workspace), else the\n * deployment's default, else ARBI's built-in legal template. A workspace owner can make a document\n * the house template once the server supports it.\n */\nimport { useMemo } from 'react'\nimport {\n supportsHouseTemplates,\n useArbi,\n useHouseTemplateCandidates,\n useSetWorkspaceHouseTemplate,\n useWorkspaces,\n workspaceHouseTemplateId,\n} from '@arbidocs/react'\nimport { contentPath } from '../../docx/NativeDocxEditor'\nimport {\n builtinHouseTemplate,\n type HouseTemplate,\n type HouseTemplateHost,\n} from '../../docx/template/HouseTemplate'\nimport { isCandidate } from '../../docx/template/candidates'\nimport { useConnectedWorkspace } from '../ConnectionProvider'\nimport { useConnectedWorkspaceRole } from '../ConnectedWorkflowsTable'\n\nexport function useConnectedHouseTemplate(): HouseTemplateHost {\n const arbi = useArbi()\n const { mutateAsync: setWorkspaceTemplate } = useSetWorkspaceHouseTemplate()\n const { workspaceId, live, ensureWorkspaceOpen } = useConnectedWorkspace()\n const { data: workspaces } = useWorkspaces({ enabled: live })\n const workspace = workspaces?.find((w) => w.external_id === workspaceId)\n const { isWorkspaceOwner } = useConnectedWorkspaceRole()\n const supported = supportsHouseTemplates(workspace)\n const templateId = workspaceHouseTemplateId(workspace)\n // Only an eligible document (shared, Word, here or in a public workspace) is offered as the template.\n const { data: candidates } = useHouseTemplateCandidates(\n workspaceId,\n supported && isWorkspaceOwner\n )\n return useMemo<HouseTemplateHost>(\n () => ({\n load: async (): Promise<HouseTemplate> => {\n if (templateId) {\n await ensureWorkspaceOpen()\n const response = await arbi.editor.request(contentPath(templateId))\n const [record] = await arbi.documents.get([templateId]).catch(() => [])\n return {\n bytes: new Uint8Array(await response.arrayBuffer()),\n name: record?.file_name ?? 'House template.docx',\n source: 'workspace',\n documentId: templateId,\n }\n }\n if (supported) {\n const deployment = await arbi.houseTemplates.deployment()\n if (deployment) return { ...deployment, source: 'deployment' }\n }\n return builtinHouseTemplate()\n },\n setFromDocument:\n supported && isWorkspaceOwner\n ? async (documentId) => {\n await ensureWorkspaceOpen()\n await setWorkspaceTemplate(documentId)\n }\n : undefined,\n isEligible: (documentId) => isCandidate(candidates, documentId),\n }),\n [\n arbi,\n setWorkspaceTemplate,\n supported,\n templateId,\n isWorkspaceOwner,\n candidates,\n ensureWorkspaceOpen,\n ]\n )\n}\n","import { useMemo, useRef, useState } from 'react'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { refreshDocuments, useArbi, useWorkspaceUsers } from '@arbidocs/react'\nimport { useOptionalDocumentTools } from '@arbidocs/react/document-tools'\nimport {\n NativeDocxEditor,\n type NativeDocxAdapter,\n type NativeDocxEditorProps,\n} from '../../docx/NativeDocxEditor'\nimport { loadDocxFonts } from '../../docx/fonts'\nimport { useRegisterOpenDocument } from '../../chat/open-document'\nimport { useBlocksEnvironment } from '../../provider/BlocksProvider'\nimport { useConnectedWorkspace } from '../ConnectionProvider'\nimport { useNativeDocxSupport } from './support'\nimport { useConnectedDocxReferences } from './useConnectedDocxReferences'\nimport { useConnectedHouseTemplate } from './useConnectedHouseTemplate'\n\nexport type ConnectedNativeDocxEditorProps = Omit<NativeDocxEditorProps, 'adapter'> & {\n fontBaseUrl?: string\n}\n\n/**\n * The native Word editor on the signed-in ARBI session, under any host (a `ConnectionProvider`, or\n * the host's own `ArbiProvider` + session state). Until a live session has opened, a failure to\n * open one falls back to the saved copy, read-only, so the document is still readable; later token\n * refreshes are not guarded (switching modes would drop unsaved edits).\n */\nexport function ConnectedNativeDocxEditor({\n fontBaseUrl = '/native-docx/fonts',\n ...props\n}: ConnectedNativeDocxEditorProps) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n const { workspaceId } = useConnectedWorkspace()\n const { commentTarget } = useNativeDocxSupport()\n const [openFailed, setOpenFailed] = useState(false)\n const hasOpened = useRef(false)\n const guardedAdapter = useMemo<NativeDocxAdapter>(\n () => ({\n ...adapter,\n open: async (documentId) => {\n try {\n const session = await adapter.open(documentId)\n hasOpened.current = true\n return session\n } catch (error) {\n if (!hasOpened.current) setOpenFailed(true)\n throw error\n }\n },\n }),\n [adapter]\n )\n // Drafting mode: the saved Word document being edited is what the chat is about. A history\n // snapshot, a streamed preview, an unsaved draft and an embedded body field are not.\n const live = !props.snapshot && !props.stream && !props.draftContent && !props.compact\n useRegisterOpenDocument({ documentId: live ? props.documentId : null, workspaceId })\n const initialCommentId =\n props.initialCommentId ??\n (commentTarget?.documentId === props.documentId ? commentTarget.commentId : undefined)\n return (\n <div className=\"flex h-full min-h-0 flex-col\">\n {openFailed && (\n <p role=\"status\" className=\"text-muted-foreground border-b px-3 py-2 text-xs\">\n Co-editing isn't available for this document right now, so this is a read-only copy\n of the last saved version.\n </p>\n )}\n <div className=\"min-h-0 flex-1\">\n <NativeDocxEditor\n {...props}\n snapshot={props.snapshot || openFailed}\n initialCommentId={initialCommentId}\n adapter={guardedAdapter}\n />\n </div>\n </div>\n )\n}\n\n/** The access token changed (a refresh): the live room is told the new one. */\nfunction tokenChanges(arbi: ReturnType<typeof useArbi>) {\n return (listener: () => void) => {\n if (!arbi.isLoggedIn) return () => {}\n const session = arbi.getClient().session\n let token = session.getState().accessToken\n return session.subscribe((state) => {\n if (state.accessToken === token) return\n token = state.accessToken\n listener()\n })\n }\n}\n\n/**\n * The native Word adapter on the signed-in session: the editor transport, the people to mention,\n * cross-references, the house template, and the host's extras (`NativeDocxSupportProvider`).\n */\nexport function useConnectedNativeDocxAdapter(fontBaseUrl = '/native-docx/fonts') {\n const arbi = useArbi()\n const { workspaceId, live, user, ensureWorkspaceOpen } = useConnectedWorkspace()\n const queries = useQueryClient()\n const { notify } = useBlocksEnvironment()\n const tools = useOptionalDocumentTools()\n const support = useNativeDocxSupport()\n const references = useConnectedDocxReferences()\n const houseTemplate = useConnectedHouseTemplate()\n const { data: members } = useWorkspaceUsers(workspaceId ?? undefined, {\n enabled: live && !!workspaceId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const onDocumentsChanged = tools?.onDocumentsChanged\n // Tracked changes and comments are authored by the user's first name.\n const author = (live && arbi.user.profile()?.givenName) || user?.name || 'You'\n const adapter = useMemo<NativeDocxAdapter>(\n () => ({\n request: async (path, options) => {\n await ensureWorkspaceOpen()\n return arbi.editor.request(path, options)\n },\n open: async (id) => {\n await ensureWorkspaceOpen()\n return (\n await arbi.editor.request(`/${encodeURIComponent(id)}/session`, { method: 'POST' })\n ).json()\n },\n save: async (id, state) =>\n (\n await arbi.editor.request(`/${encodeURIComponent(id)}/save`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ state }),\n })\n ).json(),\n loadFonts: () => loadDocxFonts(fontBaseUrl),\n baseUrl: arbi.getConnectionInfo()?.baseUrl || window.location.origin,\n author,\n subscribeTokenChanges: tokenChanges(arbi),\n onDirtyChange: support.onDirtyChange,\n // The document's row moves to the saved version in place: through the host when it keeps\n // the lists (its document tools refresh them), else here.\n onVersionSaved: async (id) => {\n await (onDocumentsChanged\n ? onDocumentsChanged([id], 'version')\n : refreshDocuments(queries, arbi, [id]))\n },\n notify,\n mentions: members?.map(({ user: member }) => ({\n id: member.external_id,\n name: [member.given_name, member.family_name].filter(Boolean).join(' '),\n kind: member.external_id.startsWith('agt-') ? 'agent' : 'human',\n })),\n requestAgent: async (id, request) => {\n const response = await arbi.editor.request(`/${encodeURIComponent(id)}/mentions`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n comment_id: request.commentId,\n instruction: request.instruction,\n request_id: request.requestId,\n recipient_ids: request.recipientIds,\n }),\n })\n const delivery = (await response.json()) as { response_ids: string[] }\n notify('Mention delivered.', 'success')\n return { responseIds: delivery.response_ids || [] }\n },\n getAgentStatus: async (responseId) => (await arbi.assistant.getResponse(responseId)).status,\n definitions: support.definitions,\n references,\n imageGeneration: support.imageGeneration,\n houseTemplate,\n }),\n [\n arbi,\n author,\n members,\n ensureWorkspaceOpen,\n fontBaseUrl,\n queries,\n notify,\n onDocumentsChanged,\n support,\n references,\n houseTemplate,\n ]\n )\n return adapter\n}\n"]}
|
|
@@ -746,17 +746,142 @@ function ApplyLabelButton({
|
|
|
746
746
|
}
|
|
747
747
|
);
|
|
748
748
|
}
|
|
749
|
-
function
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
return
|
|
749
|
+
var SearchSnippet = react.memo(function SearchSnippet2({
|
|
750
|
+
content,
|
|
751
|
+
terms
|
|
752
|
+
}) {
|
|
753
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ui.MarkdownRenderer, { children: highlightTerms(content, terms) });
|
|
754
|
+
});
|
|
755
|
+
var renderSearchSnippet = (content, terms) => /* @__PURE__ */ jsxRuntime.jsx(SearchSnippet, { content, terms });
|
|
756
|
+
|
|
757
|
+
// src/retrieval/search-results.ts
|
|
758
|
+
function extractQuotedTerms(query) {
|
|
759
|
+
const doubleQuoted = query.match(/"([^"]+)"/g) || [];
|
|
760
|
+
const singleQuoted = query.match(/'([^']+)'/g) || [];
|
|
761
|
+
const allMatches = [...doubleQuoted, ...singleQuoted];
|
|
762
|
+
if (allMatches.length === 0) return [];
|
|
763
|
+
return allMatches.map((m) => m.slice(1, -1).toLowerCase()).filter((t) => t.length > 0);
|
|
754
764
|
}
|
|
755
|
-
function
|
|
756
|
-
const
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
765
|
+
function getSearchMatchHint(query) {
|
|
766
|
+
const thresholdHint = "Low shows all matches; High keeps the strongest and any passage with your words.";
|
|
767
|
+
if (extractQuotedTerms(query).length > 0) {
|
|
768
|
+
return `Showing exact matches for the quoted text. Remove the quotes to also include passages that match by meaning. ${thresholdHint}`;
|
|
769
|
+
}
|
|
770
|
+
return `Matches keywords and meaning, so some hits won't contain the word. Quote a phrase for exact matches only. ${thresholdHint}`;
|
|
771
|
+
}
|
|
772
|
+
var HIGHLIGHT_STOPWORDS = /* @__PURE__ */ new Set([
|
|
773
|
+
"the",
|
|
774
|
+
"a",
|
|
775
|
+
"an",
|
|
776
|
+
"and",
|
|
777
|
+
"or",
|
|
778
|
+
"but",
|
|
779
|
+
"of",
|
|
780
|
+
"to",
|
|
781
|
+
"in",
|
|
782
|
+
"on",
|
|
783
|
+
"for",
|
|
784
|
+
"with",
|
|
785
|
+
"as",
|
|
786
|
+
"at",
|
|
787
|
+
"by",
|
|
788
|
+
"from",
|
|
789
|
+
"is",
|
|
790
|
+
"are",
|
|
791
|
+
"was",
|
|
792
|
+
"were",
|
|
793
|
+
"be",
|
|
794
|
+
"been",
|
|
795
|
+
"being",
|
|
796
|
+
"what",
|
|
797
|
+
"which",
|
|
798
|
+
"who",
|
|
799
|
+
"whom",
|
|
800
|
+
"whose",
|
|
801
|
+
"how",
|
|
802
|
+
"when",
|
|
803
|
+
"where",
|
|
804
|
+
"why",
|
|
805
|
+
"did",
|
|
806
|
+
"do",
|
|
807
|
+
"does",
|
|
808
|
+
"his",
|
|
809
|
+
"her",
|
|
810
|
+
"their",
|
|
811
|
+
"its",
|
|
812
|
+
"this",
|
|
813
|
+
"that",
|
|
814
|
+
"these",
|
|
815
|
+
"those",
|
|
816
|
+
"it",
|
|
817
|
+
"he",
|
|
818
|
+
"she",
|
|
819
|
+
"they",
|
|
820
|
+
"we",
|
|
821
|
+
"you",
|
|
822
|
+
"about",
|
|
823
|
+
"into",
|
|
824
|
+
"over",
|
|
825
|
+
"than",
|
|
826
|
+
"then",
|
|
827
|
+
"them",
|
|
828
|
+
"have",
|
|
829
|
+
"has",
|
|
830
|
+
"had",
|
|
831
|
+
"will",
|
|
832
|
+
"would",
|
|
833
|
+
"can",
|
|
834
|
+
"could",
|
|
835
|
+
"should",
|
|
836
|
+
"may",
|
|
837
|
+
"might"
|
|
838
|
+
]);
|
|
839
|
+
function extractHighlightTerms(query) {
|
|
840
|
+
const quoted = extractQuotedTerms(query);
|
|
841
|
+
const withoutQuoted = query.replace(/"[^"]+"|'[^']+'/g, " ");
|
|
842
|
+
const words = withoutQuoted.toLowerCase().split(/[^\p{L}\p{N}]+/u).filter((w) => w.length > 2 && !HIGHLIGHT_STOPWORDS.has(w));
|
|
843
|
+
return Array.from(/* @__PURE__ */ new Set([...quoted, ...words]));
|
|
844
|
+
}
|
|
845
|
+
function isMeaningMatch(content, terms) {
|
|
846
|
+
if (terms.length === 0) return false;
|
|
847
|
+
const lowered = content.toLowerCase();
|
|
848
|
+
return !terms.some((term) => lowered.includes(term));
|
|
849
|
+
}
|
|
850
|
+
function passesRelevanceCutoff(hit, cutoff, terms) {
|
|
851
|
+
if (hit.score >= cutoff) return true;
|
|
852
|
+
return terms.length > 0 && !isMeaningMatch(hit.content, terms);
|
|
853
|
+
}
|
|
854
|
+
function groupSearchResults(hits, terms = []) {
|
|
855
|
+
const groups = /* @__PURE__ */ new Map();
|
|
856
|
+
const docIds = [];
|
|
857
|
+
for (const hit of hits) {
|
|
858
|
+
let group = groups.get(hit.docId);
|
|
859
|
+
if (!group) {
|
|
860
|
+
group = { docId: hit.docId, docTitle: hit.docTitle, maxScore: hit.score, results: [] };
|
|
861
|
+
groups.set(hit.docId, group);
|
|
862
|
+
docIds.push(hit.docId);
|
|
863
|
+
}
|
|
864
|
+
group.results.push(hit);
|
|
865
|
+
if (hit.score > group.maxScore) group.maxScore = hit.score;
|
|
866
|
+
}
|
|
867
|
+
const tierOf = (hit) => isMeaningMatch(hit.content, terms) ? 1 : 0;
|
|
868
|
+
const groupTier = /* @__PURE__ */ new Map();
|
|
869
|
+
for (const group of groups.values()) {
|
|
870
|
+
group.results.sort((a, b) => {
|
|
871
|
+
const pageA = a.page || 0;
|
|
872
|
+
const pageB = b.page || 0;
|
|
873
|
+
if (pageA !== pageB) return pageA - pageB;
|
|
874
|
+
return a.index - b.index;
|
|
875
|
+
});
|
|
876
|
+
if (terms.length > 0) {
|
|
877
|
+
group.results.sort((a, b) => tierOf(a) - tierOf(b));
|
|
878
|
+
groupTier.set(group, tierOf(group.results[0]));
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
const sorted = Array.from(groups.values()).sort(
|
|
882
|
+
(a, b) => (groupTier.get(a) ?? 0) - (groupTier.get(b) ?? 0) || b.maxScore - a.maxScore
|
|
883
|
+
);
|
|
884
|
+
return { groups: sorted, docIds };
|
|
760
885
|
}
|
|
761
886
|
|
|
762
887
|
exports.ApplyLabelButton = ApplyLabelButton;
|
|
@@ -770,7 +895,6 @@ exports.DEFAULT_SEARCH_NO_RESULTS_LABELS = DEFAULT_SEARCH_NO_RESULTS_LABELS;
|
|
|
770
895
|
exports.DEFAULT_SEARCH_PAGINATION_LABELS = DEFAULT_SEARCH_PAGINATION_LABELS;
|
|
771
896
|
exports.DEFAULT_SEARCH_TOTALS_LABELS = DEFAULT_SEARCH_TOTALS_LABELS;
|
|
772
897
|
exports.DOCUMENT_SEARCH_NOUNS = DOCUMENT_SEARCH_NOUNS;
|
|
773
|
-
exports.Highlight = Highlight;
|
|
774
898
|
exports.RelevanceThreshold = RelevanceThreshold;
|
|
775
899
|
exports.SearchBar = SearchBar;
|
|
776
900
|
exports.SearchControlsBar = SearchControlsBar;
|
|
@@ -787,12 +911,19 @@ exports.SearchPillToggle = SearchPillToggle;
|
|
|
787
911
|
exports.SearchResultList = SearchResultList;
|
|
788
912
|
exports.SearchResultsInner = SearchResultsInner;
|
|
789
913
|
exports.SearchResultsMain = SearchResultsMain;
|
|
914
|
+
exports.SearchSnippet = SearchSnippet;
|
|
790
915
|
exports.SearchToolbarRow = SearchToolbarRow;
|
|
791
916
|
exports.SearchTotalsHeadline = SearchTotalsHeadline;
|
|
917
|
+
exports.extractHighlightTerms = extractHighlightTerms;
|
|
918
|
+
exports.extractQuotedTerms = extractQuotedTerms;
|
|
792
919
|
exports.getPageNumbers = getPageNumbers;
|
|
920
|
+
exports.getSearchMatchHint = getSearchMatchHint;
|
|
921
|
+
exports.groupSearchResults = groupSearchResults;
|
|
793
922
|
exports.highlightTerms = highlightTerms;
|
|
923
|
+
exports.isMeaningMatch = isMeaningMatch;
|
|
924
|
+
exports.passesRelevanceCutoff = passesRelevanceCutoff;
|
|
925
|
+
exports.renderSearchSnippet = renderSearchSnippet;
|
|
794
926
|
exports.searchNouns = searchNouns;
|
|
795
|
-
exports.splitByTerms = splitByTerms;
|
|
796
927
|
exports.stripMarkdownLinks = stripMarkdownLinks;
|
|
797
|
-
//# sourceMappingURL=chunk-
|
|
798
|
-
//# sourceMappingURL=chunk-
|
|
928
|
+
//# sourceMappingURL=chunk-GOWXP5KT.cjs.map
|
|
929
|
+
//# sourceMappingURL=chunk-GOWXP5KT.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/retrieval/highlight.ts","../src/retrieval/SearchPagination.tsx","../src/retrieval/SearchGroupHeader.tsx","../src/retrieval/SearchEmptyState.tsx","../src/retrieval/SearchPage.tsx","../src/retrieval/SearchSnippet.tsx","../src/retrieval/search-results.ts"],"names":["memo","SearchPagination","jsxs","cn","testIdOr","jsx","Button","ChevronLeft","ChevronRight","SearchGroupHeader","Fragment","FileUp","Plus","Search","Blend","Quote","useMemo","useRef","useCallback","useLayoutEffect","X","Loader2","prefixedTestId","AlertCircle","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","Input","DialogFooter","TagIcon","SearchSnippet","MarkdownRenderer"],"mappings":"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","file":"chunk-GOWXP5KT.cjs","sourcesContent":["/**\n * Flatten inline markdown links to their visible label: `[label](url)` -> `label`\n * (and image `` -> `alt`).\n *\n * Search snippets must not navigate away when clicked, and highlighting wraps matches in\n * `<mark>`: doing that over raw markdown would inject `<mark>` inside link URLs that contain a\n * query word, corrupting both the href and the text. Removing the URLs first makes it safe.\n */\nexport function stripMarkdownLinks(text: string): string {\n return text.replace(/!?\\[([^\\]]+)\\]\\([^)]*\\)/g, '$1')\n}\n\n/**\n * Prepare a snippet for markdown rendering: links flattened, and every (case-insensitive)\n * occurrence of a query term wrapped in `<mark>`. The renderer must allow `mark` through its\n * sanitizer.\n */\nexport function highlightTerms(content: string, terms: string[]): string {\n const plain = stripMarkdownLinks(content)\n if (terms.length === 0) return plain\n const escaped = terms.map((t) => t.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\n return plain.replace(new RegExp(`(${escaped.join('|')})`, 'gi'), '<mark>$1</mark>')\n}\n\n/**\n * Page numbers for a pagination control: first + last + a window around the current page.\n * getPageNumbers(1, 3) -> [1, 2, 3]\n * getPageNumbers(7, 50) -> [1, 'ellipsis', 6, 7, 8, 'ellipsis', 50]\n */\nexport function getPageNumbers(current: number, total: number): (number | 'ellipsis')[] {\n if (total <= 7) return Array.from({ length: total }, (_, i) => i + 1)\n\n const pages: (number | 'ellipsis')[] = [1]\n const windowStart = Math.max(2, current - 1)\n const windowEnd = Math.min(total - 1, current + 1)\n\n if (windowStart > 2) pages.push('ellipsis')\n for (let p = windowStart; p <= windowEnd; p++) pages.push(p)\n if (windowEnd < total - 1) pages.push('ellipsis')\n\n pages.push(total)\n return pages\n}\n","import { memo } from 'react'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\nimport { getPageNumbers } from './highlight'\n\nexport interface SearchPaginationLabels {\n navigation: string\n previous: string\n next: string\n page: (page: number) => string\n}\n\nexport const DEFAULT_SEARCH_PAGINATION_LABELS: SearchPaginationLabels = {\n navigation: 'Search results pagination',\n previous: 'Previous page',\n next: 'Next page',\n page: (page) => `Page ${page}`,\n}\n\nexport interface SearchPaginationTestIds {\n root: string\n /** Builds the id of a page button from its number. */\n page: (page: number) => string\n}\n\nexport interface SearchPaginationProps {\n currentPage: number\n totalPages: number\n onPageChange: (page: number) => void\n labels?: Partial<SearchPaginationLabels>\n testIds?: Partial<SearchPaginationTestIds>\n className?: string\n}\n\nexport const SearchPagination = memo(function SearchPagination({\n currentPage,\n totalPages,\n onPageChange,\n labels,\n testIds,\n className,\n}: SearchPaginationProps) {\n const l = { ...DEFAULT_SEARCH_PAGINATION_LABELS, ...labels }\n if (totalPages <= 1) return null\n const pages = getPageNumbers(currentPage, totalPages)\n return (\n <nav\n className={cn('mt-6 mb-2 flex items-center justify-center gap-1', className)}\n aria-label={l.navigation}\n data-testid={testIdOr(testIds?.root, { testId: 'smart-search-pagination' })}\n data-slot=\"search-pagination\"\n >\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 px-2 pointer-coarse:h-11 pointer-coarse:min-w-11\"\n onClick={() => onPageChange(currentPage - 1)}\n disabled={currentPage <= 1}\n aria-label={l.previous}\n >\n <ChevronLeft className=\"size-4\" />\n </Button>\n {pages.map((p, i) =>\n p === 'ellipsis' ? (\n <span\n key={`ellipsis-${i}`}\n className=\"select-none px-2 text-sm text-muted-foreground\"\n aria-hidden\n >\n …\n </span>\n ) : (\n <Button\n key={p}\n variant={p === currentPage ? 'default' : 'ghost'}\n size=\"sm\"\n className=\"h-8 min-w-8 px-2 pointer-coarse:h-11 pointer-coarse:min-w-11\"\n onClick={() => onPageChange(p)}\n aria-current={p === currentPage ? 'page' : undefined}\n aria-label={l.page(p)}\n data-testid={testIdOr(testIds?.page?.(p), { testId: `smart-search-page-${p}` })}\n >\n {p}\n </Button>\n )\n )}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 px-2 pointer-coarse:h-11 pointer-coarse:min-w-11\"\n onClick={() => onPageChange(currentPage + 1)}\n disabled={currentPage >= totalPages}\n aria-label={l.next}\n >\n <ChevronRight className=\"size-4\" />\n </Button>\n </nav>\n )\n})\n","import { memo, type ReactNode } from 'react'\nimport { ChevronRight } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\n\nexport interface SearchGroupHeaderLabels {\n hit: string\n hits: string\n}\n\nexport const DEFAULT_SEARCH_GROUP_HEADER_LABELS: SearchGroupHeaderLabels = {\n hit: 'hit',\n hits: 'hits',\n}\n\nexport interface SearchGroupHeaderProps {\n /** Group key, handed back to `onToggle`. */\n groupId: string\n hitCount: number\n isExpanded: boolean\n onToggle: (groupId: string) => void\n /** The source pill; clicks on it do not toggle the group. */\n source: ReactNode\n labels?: Partial<SearchGroupHeaderLabels>\n /** Defaults to `search-result-group-toggle-${groupId}`. */\n testId?: string\n className?: string\n}\n\n/** Collapsible group row: chevron + source + hit count. The whole row toggles. */\nexport const SearchGroupHeader = memo(function SearchGroupHeader({\n groupId,\n hitCount,\n isExpanded,\n onToggle,\n source,\n labels,\n testId,\n className,\n}: SearchGroupHeaderProps) {\n const l = { ...DEFAULT_SEARCH_GROUP_HEADER_LABELS, ...labels }\n const toggle = () => onToggle(groupId)\n return (\n <div\n role=\"button\"\n tabIndex={0}\n onClick={toggle}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n toggle()\n }\n }}\n aria-expanded={isExpanded}\n className={cn(\n 'flex cursor-pointer items-center gap-2 px-3 py-1.5 pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n isExpanded && 'border-b border-border',\n className\n )}\n data-testid={testIdOr(testId, { testId: `search-result-group-toggle-${groupId}` })}\n data-slot=\"search-group-header\"\n >\n <ChevronRight\n className={cn(\n 'size-4 shrink-0 text-muted-foreground transition-transform',\n isExpanded && 'rotate-90'\n )}\n />\n <span className=\"min-w-0\" onClick={(e) => e.stopPropagation()}>\n {source}\n </span>\n <span className=\"shrink-0 text-sm text-muted-foreground\">\n {hitCount} {hitCount === 1 ? l.hit : l.hits}\n </span>\n </div>\n )\n})\n","import type { ReactNode } from 'react'\nimport { Blend, FileUp, Plus, Quote, Search, type LucideIcon } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\n\nexport interface SearchEmptyNouns {\n singular: string\n plural: string\n /** The unit a hit returns (passage / fact). */\n hit: string\n hits: string\n emptyTitle: string\n emptyHint: ReactNode\n EmptyIcon: LucideIcon\n}\n\nexport const DOCUMENT_SEARCH_NOUNS: SearchEmptyNouns = {\n singular: 'document',\n plural: 'documents',\n hit: 'passage',\n hits: 'passages',\n emptyTitle: 'No documents to search yet',\n emptyHint: (\n <>\n Add files under <span className=\"font-medium text-foreground/80\">“Files”</span>, then come\n back to search their full text by keyword or meaning.\n </>\n ),\n EmptyIcon: FileUp,\n}\n\n/** Nouns for searching a custom collection (e.g. facts). `singular`/`plural` are lower case. */\nexport function searchNouns(\n singular: string,\n plural: string,\n addHint: ReactNode,\n EmptyIcon: LucideIcon = Plus\n): SearchEmptyNouns {\n return {\n singular,\n plural,\n hit: singular,\n hits: plural,\n emptyTitle: `No ${plural} to search yet`,\n emptyHint: addHint,\n EmptyIcon,\n }\n}\n\nexport interface SearchEmptyStateLabels {\n /** Title when there are items. */\n title: (nouns: SearchEmptyNouns) => string\n /** Intro sentence; receives the count and the nouns. */\n intro: (count: number, nouns: SearchEmptyNouns) => ReactNode\n hybridTitle: string\n hybridBody: (nouns: SearchEmptyNouns) => string\n phraseTitle: string\n phraseBefore: string\n phraseExample: string\n phraseAfter: (nouns: SearchEmptyNouns) => string\n}\n\nexport const DEFAULT_SEARCH_EMPTY_STATE_LABELS: SearchEmptyStateLabels = {\n title: (n) => `Search across your ${n.plural}`,\n intro: (count, n) => (\n <>\n Find any {n.hit} across{' '}\n <span className=\"font-medium text-foreground/80\">\n {count.toLocaleString()} {count === 1 ? n.singular : n.plural}\n </span>{' '}\n — by keyword, by meaning, or both.\n </>\n ),\n hybridTitle: 'Words and meaning, together',\n hybridBody: (n) =>\n `Every search matches exact words and meaning, so ${n.hits} worded differently are still found.`,\n phraseTitle: 'Quote an exact phrase',\n phraseBefore: 'Wrap a phrase in double quotes, like ',\n phraseExample: '\"force majeure\"',\n phraseAfter: (n) => `, to return only ${n.hits} containing it.`,\n}\n\nexport interface SearchEmptyStateProps {\n /** Number of searchable items in the workspace. */\n count: number\n /** Defaults to documents. */\n nouns?: SearchEmptyNouns\n labels?: Partial<SearchEmptyStateLabels>\n testId?: string\n className?: string\n}\n\n/** Shown before the first search: explains hybrid matching and quoted phrases. */\nexport function SearchEmptyState({\n count,\n nouns = DOCUMENT_SEARCH_NOUNS,\n labels,\n testId,\n className,\n}: SearchEmptyStateProps) {\n const l = { ...DEFAULT_SEARCH_EMPTY_STATE_LABELS, ...labels }\n const hasItems = count > 0\n const Icon = hasItems ? Search : nouns.EmptyIcon\n\n return (\n <div\n className={cn('flex justify-center px-10 pb-10 pt-6', className)}\n data-testid={testIdOr(testId, { testId: 'smart-search-empty-state' })}\n data-slot=\"search-empty-state\"\n >\n <div className=\"w-full max-w-xl text-center\">\n <div\n className={cn(\n 'mx-auto mb-4 flex size-12 items-center justify-center rounded-lg',\n hasItems ? 'bg-ai-soft text-ai-ink' : 'bg-muted text-muted-foreground'\n )}\n >\n <Icon className=\"size-6\" />\n </div>\n\n {hasItems ? (\n <>\n <h2 className=\"mt-2 text-xl font-semibold text-foreground\">{l.title(nouns)}</h2>\n <p className=\"mt-2 text-sm text-muted-foreground\">{l.intro(count, nouns)}</p>\n\n <div className=\"mt-7 grid gap-3 text-left @xl:grid-cols-2\">\n <div className=\"rounded-lg bg-muted p-3\">\n <div className=\"flex items-center gap-1.5 text-sm font-medium text-foreground\">\n <Blend className=\"size-4 text-ai-ink\" />\n {l.hybridTitle}\n </div>\n <p className=\"mt-1 text-sm leading-snug text-muted-foreground\">\n {l.hybridBody(nouns)}\n </p>\n </div>\n <div className=\"rounded-lg bg-muted p-3\">\n <div className=\"flex items-center gap-1.5 text-sm font-medium text-foreground\">\n <Quote className=\"size-4 text-ai-ink\" />\n {l.phraseTitle}\n </div>\n <p className=\"mt-1 text-sm leading-snug text-muted-foreground\">\n {l.phraseBefore}\n <code className=\"rounded bg-background px-1 py-0.5 font-mono text-sm text-foreground/90\">\n {l.phraseExample}\n </code>\n {l.phraseAfter(nouns)}\n </p>\n </div>\n </div>\n </>\n ) : (\n <>\n <h2 className=\"text-xl font-semibold text-foreground\">{nouns.emptyTitle}</h2>\n <p className=\"mx-auto mt-1.5 max-w-sm text-sm text-muted-foreground\">\n {nouns.emptyHint}\n </p>\n </>\n )}\n </div>\n </div>\n )\n}\n","import { useCallback, useLayoutEffect, useMemo, useRef, type ReactNode, type Ref } from 'react'\nimport { AlertCircle, Loader2, Search, TagIcon, X } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Input,\n cn,\n} from '@arbidocs/react/ui'\nimport { prefixedTestId, testIdOr } from '../chat/test-id'\n\n/* -------------------------------------------------------------------------- */\n/* Page frame */\n/* -------------------------------------------------------------------------- */\n\n/** Column that fills the Smart Search page (padded when standalone, flush when embedded). */\nexport function SearchPageFrame({\n isEmbedded,\n testId = 'smart-search',\n children,\n}: {\n isEmbedded?: boolean\n testId?: string\n children: ReactNode\n}) {\n return (\n <div\n data-slot=\"search-page\"\n data-testid={testId}\n className={cn('flex h-full flex-col', !isEmbedded && 'px-4')}\n >\n {children}\n </div>\n )\n}\n\n/** Sticky header slot; `-mx-4` cancels the frame's padding so the tab sits at the page inset. */\nexport function SearchPageHeader({ children }: { children: ReactNode }) {\n return (\n <div data-slot=\"search-page-header\" className=\"sticky top-0 z-10 -mx-4 bg-background\">\n {children}\n </div>\n )\n}\n\n/** Everything under the header. */\nexport function SearchPageBody({ children }: { children: ReactNode }) {\n return (\n <div data-slot=\"search-page-body\" className=\"flex min-h-0 flex-1 flex-col\">\n {children}\n </div>\n )\n}\n\n/** Thin row above the search bar (the embedded view puts the grouping toggle here). */\nexport function SearchToolbarRow({ children }: { children: ReactNode }) {\n return (\n <div\n data-slot=\"search-toolbar-row\"\n className=\"group flex h-8 items-center gap-2 border-b border-border/60 bg-background pl-5 pr-3\"\n >\n <div className=\"ml-auto flex shrink-0 items-center\">{children}</div>\n </div>\n )\n}\n\n/** Scrolling results area with its inner padding. */\nexport function SearchResultsMain({ children }: { children: ReactNode }) {\n return (\n <main data-slot=\"search-results-main\" className=\"flex-1 overflow-auto\">\n {children}\n </main>\n )\n}\n\n/** Padded wrapper of the hits. */\nexport function SearchResultsInner({ children }: { children: ReactNode }) {\n return <div className=\"w-full px-6 pb-6 pt-1\">{children}</div>\n}\n\n/** Vertical list of result rows or group cards. */\nexport function SearchResultList({ testId, children }: { testId?: string; children: ReactNode }) {\n return (\n <div className=\"space-y-3\" data-testid={testId}>\n {children}\n </div>\n )\n}\n\n/** One document's collapsible group: header (the toggle) plus the expanded hits. */\nexport function SearchGroupCard({\n testId,\n header,\n isExpanded,\n children,\n}: {\n testId?: string\n header: ReactNode\n isExpanded: boolean\n children: ReactNode\n}) {\n return (\n <div\n data-slot=\"search-group-card\"\n className=\"rounded border border-border transition-colors\"\n data-testid={testId}\n >\n {header}\n {isExpanded && <div className=\"space-y-3 p-3\">{children}</div>}\n </div>\n )\n}\n\n/* -------------------------------------------------------------------------- */\n/* Search bar */\n/* -------------------------------------------------------------------------- */\n\nexport interface SearchBarLabels {\n search: string\n clear: string\n submit: string\n}\n\nexport const DEFAULT_SEARCH_BAR_LABELS: SearchBarLabels = {\n search: 'Search:',\n clear: 'Clear search',\n submit: 'Search',\n}\n\nexport interface SearchBarProps {\n query: string\n onQueryChange: (query: string) => void\n /** Enter (without Shift) or the submit button. */\n onSubmit: () => void\n onClear: () => void\n canSubmit: boolean\n isSearching: boolean\n placeholder?: string\n /** Tooltip of the submit button (e.g. why it is disabled). */\n submitTitle?: string\n /** Message under the box (e.g. \"too many documents selected\"). */\n notice?: ReactNode\n noticeTestId?: string\n inputId?: string\n testIds?: { input?: string; clear?: string; submit?: string }\n /** Lets the host refocus the box and reset its height after a clear. */\n inputRef?: Ref<HTMLTextAreaElement>\n isEmbedded?: boolean\n labels?: Partial<SearchBarLabels>\n}\n\n/** The bordered, auto-growing query box with an inline clear and submit. */\nexport function SearchBar({\n query,\n onQueryChange,\n onSubmit,\n onClear,\n canSubmit,\n isSearching,\n placeholder,\n submitTitle,\n notice,\n noticeTestId,\n inputId = 'smart-search-input',\n testIds,\n inputRef,\n isEmbedded,\n labels,\n}: SearchBarProps) {\n const l = useMemo(() => ({ ...DEFAULT_SEARCH_BAR_LABELS, ...labels }), [labels])\n // The field grows with its content, and an empty field with its (possibly wrapping) placeholder:\n // a fixed single row cut the second line of a long placeholder on phones.\n const fieldRef = useRef<HTMLTextAreaElement | null>(null)\n const setRefs = useCallback(\n (el: HTMLTextAreaElement | null) => {\n fieldRef.current = el\n if (typeof inputRef === 'function') inputRef(el)\n else if (inputRef) (inputRef as { current: HTMLTextAreaElement | null }).current = el\n },\n [inputRef]\n )\n useLayoutEffect(() => {\n const el = fieldRef.current\n if (!el) return\n const resize = () => {\n el.style.height = 'auto'\n el.style.height = `${el.scrollHeight}px`\n }\n resize()\n if (typeof ResizeObserver === 'undefined') return\n let lastWidth = el.clientWidth\n const observer = new ResizeObserver(() => {\n if (el.clientWidth === lastWidth) return\n lastWidth = el.clientWidth\n resize()\n })\n observer.observe(el)\n return () => observer.disconnect()\n }, [query, placeholder])\n return (\n <div data-slot=\"search-bar\" className={cn('pl-6 pr-4', isEmbedded ? 'pb-4 pt-6' : 'py-4')}>\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 htmlFor={inputId} className=\"sr-only\">\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={inputId}\n ref={setRefs}\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}\n className=\"flex-1 resize-none overflow-hidden border-0 bg-transparent p-0 pointer-coarse:min-h-11 pointer-coarse:py-2.5 text-base leading-relaxed text-foreground outline-none placeholder:text-muted-foreground\"\n data-testid={testIdOr(testIds?.input, { testId: 'smart-search-input' })}\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: 'smart-search-clear-button' })}\n >\n <X className=\"size-4\" />\n </Button>\n )}\n <Button\n type=\"submit\"\n size=\"sm\"\n disabled={!canSubmit}\n className=\"h-8 gap-1.5 px-3 text-sm pointer-coarse:h-11\"\n data-testid={testIdOr(testIds?.submit, { testId: 'smart-search-submit-button' })}\n title={submitTitle ?? l.submit}\n aria-label={l.submit}\n >\n {isSearching ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Search className=\"size-4\" />\n )}\n {l.submit}\n </Button>\n </div>\n {notice && (\n <p\n className=\"mt-2 text-sm text-destructive\"\n data-testid={testIdOr(noticeTestId, { testId: 'smart-search-selection-too-large' })}\n >\n {notice}\n </p>\n )}\n </div>\n </form>\n </div>\n )\n}\n\n/* -------------------------------------------------------------------------- */\n/* Controls: grouping toggle, relevance threshold, totals */\n/* -------------------------------------------------------------------------- */\n\nexport interface SearchPillOption {\n value: string\n /** Visible content (icon + text). */\n content: ReactNode\n /** Tooltip. */\n title: string\n}\n\nexport interface SearchPillToggleProps {\n options: SearchPillOption[]\n value: string\n onChange: (value: string) => void\n ariaLabel: string\n /** Prefix of the option buttons' test ids (`<prefix>-<value>-button`); default `smart-search-view`. */\n testIdPrefix?: string\n}\n\n/** Pill-shaped segmented toggle of `aria-pressed` buttons. */\nexport function SearchPillToggle({\n options,\n value,\n onChange,\n ariaLabel,\n testIdPrefix,\n}: SearchPillToggleProps) {\n return (\n <div\n className=\"inline-flex items-center rounded-full bg-muted p-0.5\"\n role=\"group\"\n aria-label={ariaLabel}\n data-slot=\"search-pill-toggle\"\n >\n {options.map((o) => {\n const active = o.value === value\n return (\n <button\n key={o.value}\n type=\"button\"\n onClick={() => onChange(o.value)}\n aria-pressed={active}\n title={o.title}\n data-testid={prefixedTestId(\n testIdPrefix,\n o.value,\n { testId: `smart-search-view-${o.value}-button` },\n '-button'\n )}\n className={cn(\n 'flex min-h-8 items-center gap-1.5 rounded-full px-3 py-1 text-xs font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11',\n active\n ? 'bg-background text-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n {o.content}\n </button>\n )\n })}\n </div>\n )\n}\n\nexport interface RelevanceStep {\n /** Minimum score kept at this step. */\n value: number\n label: string\n}\n\nexport const DEFAULT_RELEVANCE_STEPS: RelevanceStep[] = [\n { value: 0, label: 'Low' },\n { value: 0.7, label: 'High' },\n]\n\n// Accents match the relevance colours used for chunk borders and score pills elsewhere.\nconst STEP_DOT_CLASS = ['bg-muted-foreground/40', 'bg-primary']\nconst STEP_LABEL_CLASS = ['text-foreground', 'text-primary']\n\nexport interface RelevanceThresholdProps {\n value: number\n onChange: (value: number) => void\n steps?: RelevanceStep[]\n title?: string\n ariaLabel?: string\n}\n\n/** Compact segmented control (Low / High) with a colour-coded dot on the active step. */\nexport function RelevanceThreshold({\n value,\n onChange,\n steps = DEFAULT_RELEVANCE_STEPS,\n title = 'Relevance Threshold',\n ariaLabel = 'Search relevance threshold',\n}: RelevanceThresholdProps) {\n const active = steps.reduce((best, s, i) => (value >= s.value ? i : best), 0)\n return (\n <div className=\"flex items-center gap-1.5\" data-slot=\"relevance-threshold\">\n <span className=\"whitespace-nowrap text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {title}\n </span>\n <div\n className=\"inline-flex items-center rounded-full bg-muted p-0.5\"\n role=\"group\"\n aria-label={ariaLabel}\n >\n {steps.map((step, i) => {\n const isActive = i === active\n return (\n <button\n key={step.label}\n type=\"button\"\n onClick={() => onChange(step.value)}\n aria-pressed={isActive}\n data-testid={`smart-search-threshold-${step.label.toLowerCase()}`}\n className={cn(\n 'flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11 pointer-coarse:px-3',\n isActive\n ? cn('bg-background', STEP_LABEL_CLASS[i] ?? STEP_LABEL_CLASS[0])\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <span\n className={cn(\n 'size-1.5 rounded-full transition-colors',\n isActive ? (STEP_DOT_CLASS[i] ?? STEP_DOT_CLASS[0]) : 'bg-muted-foreground/30'\n )}\n />\n {step.label}\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n\n/** Result controls pinned between the search bar and the scrolling results. */\nexport function SearchControlsBar({\n start,\n end,\n children,\n}: {\n /** Left side: the totals headline. */\n start: ReactNode\n /** Right side: threshold and toggle. */\n end: ReactNode\n children?: ReactNode\n}) {\n return (\n <div\n data-slot=\"search-controls-bar\"\n className=\"flex flex-wrap items-center justify-between gap-x-4 gap-y-2 pb-3 pl-6 pr-4\"\n >\n <div className=\"flex flex-wrap items-center gap-x-3 gap-y-2\">{start}</div>\n <div className=\"flex items-center gap-3\">{end}</div>\n {children}\n </div>\n )\n}\n\nexport interface SearchTotalsHeadlineLabels {\n hit: string\n hits: string\n document: string\n documents: string\n passages: string\n}\n\nexport const DEFAULT_SEARCH_TOTALS_LABELS: SearchTotalsHeadlineLabels = {\n hit: 'hit',\n hits: 'hits',\n document: 'document',\n documents: 'documents',\n passages: 'passages',\n}\n\nexport interface SearchTotalsHeadlineProps {\n /** Hits passing the relevance threshold. */\n shownHits: number\n totalHits: number\n /** Documents among the shown hits. */\n shownDocuments: number\n totalDocuments: number\n /** Shown hits whose passage contains none of the query words (matched by meaning). */\n meaningHits?: number\n /** Paging range, shown when there is more than one page. */\n range?: { start: number; end: number; total: number; unit: 'passages' | 'documents' } | null\n /** Inline action after the sentence (e.g. Apply label). */\n action?: ReactNode\n testId?: string\n labels?: Partial<SearchTotalsHeadlineLabels>\n}\n\nconst fmt = (n: number) => n.toLocaleString()\n\n/** \"N hits (M total) across K documents\", plus optional keyword/meaning split, action and range. */\nexport function SearchTotalsHeadline({\n shownHits,\n totalHits,\n shownDocuments,\n totalDocuments,\n meaningHits = 0,\n range,\n action,\n testId = 'smart-search-totals',\n labels,\n}: SearchTotalsHeadlineProps) {\n const l = useMemo(() => ({ ...DEFAULT_SEARCH_TOTALS_LABELS, ...labels }), [labels])\n const hitWord = (n: number) => (n === 1 ? l.hit : l.hits)\n const docWord = (n: number) => (n === 1 ? l.document : l.documents)\n return (\n <p\n className=\"flex flex-wrap items-baseline gap-x-2 font-sans text-base font-semibold tabular-nums text-foreground\"\n data-testid={testId}\n >\n <span>\n {shownHits < totalHits ? (\n <>\n {fmt(shownHits)} {hitWord(shownHits)}{' '}\n <span className=\"font-normal text-muted-foreground\">({fmt(totalHits)} total)</span>{' '}\n across {fmt(shownDocuments)} {docWord(shownDocuments)}\n </>\n ) : (\n <>\n {fmt(totalHits)} {hitWord(totalHits)} across {fmt(totalDocuments)}{' '}\n {docWord(totalDocuments)}\n </>\n )}\n </span>\n {meaningHits > 0 && (\n <>\n {' '}\n <span className=\"text-sm font-normal text-muted-foreground\">\n · {fmt(shownHits - meaningHits)} contain your words, {fmt(meaningHits)} matched by\n meaning\n </span>\n </>\n )}\n {action && (\n <span className=\"inline-flex items-center gap-2 text-sm font-normal text-muted-foreground\">\n –{action}\n </span>\n )}\n {range && range.total > 0 && (\n <span className=\"text-sm font-normal text-muted-foreground\">\n · showing {fmt(range.start)}–{fmt(range.end)} of {fmt(range.total)}{' '}\n {range.unit === 'passages' ? l.passages : l.documents}\n </span>\n )}\n </p>\n )\n}\n\n/* -------------------------------------------------------------------------- */\n/* States */\n/* -------------------------------------------------------------------------- */\n\n/** Inline error of a failed search. */\nexport function SearchErrorBanner({ message }: { message: string }) {\n return (\n <div\n role=\"alert\"\n className=\"flex items-center gap-2 rounded-md bg-destructive/10 p-4 text-destructive\"\n >\n <AlertCircle className=\"size-5 flex-shrink-0\" />\n <p>{message}</p>\n </div>\n )\n}\n\nexport interface SearchNoResultsProps {\n /** Hits that exist but fall below the threshold; 0 when the search found nothing. */\n hiddenHits: number\n onLowerThreshold: () => void\n labels?: Partial<SearchNoResultsLabels>\n testId?: string\n}\n\nexport interface SearchNoResultsLabels {\n none: string\n hidden: (count: number) => string\n lower: string\n}\n\nexport const DEFAULT_SEARCH_NO_RESULTS_LABELS: SearchNoResultsLabels = {\n none: 'No results found for your search query.',\n hidden: (n) =>\n `All ${fmt(n)} ${n === 1 ? 'hit is' : 'hits are'} below the current relevance threshold.`,\n lower: 'Lower threshold to Low',\n}\n\n/** Nothing to list: either no hits, or all hits are under the relevance threshold. */\nexport function SearchNoResults({\n hiddenHits,\n onLowerThreshold,\n labels,\n testId = 'smart-search-no-results',\n}: SearchNoResultsProps) {\n const l = useMemo(() => ({ ...DEFAULT_SEARCH_NO_RESULTS_LABELS, ...labels }), [labels])\n return (\n <div className=\"py-12 text-center\" data-testid={testId}>\n <Search className=\"mx-auto mb-4 size-12 text-muted-foreground\" />\n {hiddenHits > 0 ? (\n <>\n <p className=\"text-muted-foreground\">{l.hidden(hiddenHits)}</p>\n <Button variant=\"link\" size=\"sm\" className=\"mt-2\" onClick={onLowerThreshold}>\n {l.lower}\n </Button>\n </>\n ) : (\n <p className=\"text-muted-foreground\">{l.none}</p>\n )}\n </div>\n )\n}\n\n/* -------------------------------------------------------------------------- */\n/* Apply label dialog */\n/* -------------------------------------------------------------------------- */\n\nexport interface ApplyLabelDialogLabels {\n title: string\n description: (documents: number, passages: number) => string\n placeholder: string\n cancel: string\n apply: string\n}\n\nexport const DEFAULT_APPLY_LABEL_DIALOG_LABELS: ApplyLabelDialogLabels = {\n title: 'Apply label',\n description: (documents, passages) =>\n `Labels ${documents} ${documents === 1 ? 'document' : 'documents'} with ${passages} passage ${passages === 1 ? 'reference' : 'references'}.`,\n placeholder: 'Label name',\n cancel: 'Cancel',\n apply: 'Apply label',\n}\n\nexport interface ApplyLabelDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n name: string\n onNameChange: (name: string) => void\n onApply: (name: string) => void\n isApplying: boolean\n documentCount: number\n passageCount: number\n labels?: Partial<ApplyLabelDialogLabels>\n}\n\n/** Name a label and apply it to every document in the results. */\nexport function ApplyLabelDialog({\n open,\n onOpenChange,\n name,\n onNameChange,\n onApply,\n isApplying,\n documentCount,\n passageCount,\n labels,\n}: ApplyLabelDialogProps) {\n const l = useMemo(() => ({ ...DEFAULT_APPLY_LABEL_DIALOG_LABELS, ...labels }), [labels])\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{l.title}</DialogTitle>\n <DialogDescription>{l.description(documentCount, passageCount)}</DialogDescription>\n </DialogHeader>\n <div className=\"py-2\">\n <Input\n value={name}\n onChange={(e) => onNameChange(e.target.value)}\n placeholder={l.placeholder}\n aria-label={l.placeholder}\n autoFocus\n onKeyDown={(e) => {\n if (e.key === 'Enter' && name.trim()) onApply(name)\n }}\n />\n </div>\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n {l.cancel}\n </Button>\n <Button onClick={() => onApply(name)} disabled={isApplying || !name.trim()}>\n {isApplying && <Loader2 className=\"mr-2 size-4 animate-spin\" />}\n {l.apply}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n\n/** Small outlined \"Apply label\" button used inside the totals sentence. */\nexport function ApplyLabelButton({\n onClick,\n label = 'Apply label',\n testId = 'smart-search-apply-label-button',\n}: {\n onClick: () => void\n label?: string\n testId?: string\n}) {\n return (\n <Button\n onClick={onClick}\n size=\"sm\"\n variant=\"outline\"\n className=\"h-6 px-2 text-sm font-normal pointer-coarse:h-11\"\n data-testid={testId}\n >\n <TagIcon className=\"mr-1 size-3\" />\n {label}\n </Button>\n )\n}\n","/**\n * A search hit's text as markdown, with the query's terms marked (`<mark>`, which the kit's\n * sanitizer lets through). One snippet for every search list: documents' and facts'.\n */\nimport { memo } from 'react'\nimport { MarkdownRenderer } from '@arbidocs/react/ui'\nimport { highlightTerms } from './highlight'\n\nexport const SearchSnippet = memo(function SearchSnippet({\n content,\n terms,\n}: {\n content: string\n terms: string[]\n}) {\n return <MarkdownRenderer>{highlightTerms(content, terms)}</MarkdownRenderer>\n})\n\n/** `SearchHit`'s `renderSnippet`. */\nexport const renderSearchSnippet = (content: string, terms: string[]) => (\n <SearchSnippet content={content} terms={terms} />\n)\n","/**\n * What a search page does with the passages a search found: the terms to highlight, which hits\n * survive the relevance threshold, and the hits grouped by document. Pure; the page binds them.\n */\n\nimport type { SearchChunk } from '@arbidocs/react'\n\nexport interface SearchDocumentGroup {\n docId: string\n docTitle: string\n maxScore: number\n results: SearchChunk[]\n}\n\n/** Quoted phrases in a query (\"double\" or 'single'), lower-cased. */\nexport function extractQuotedTerms(query: string): string[] {\n const doubleQuoted = query.match(/\"([^\"]+)\"/g) || []\n const singleQuoted = query.match(/'([^']+)'/g) || []\n const allMatches = [...doubleQuoted, ...singleQuoted]\n if (allMatches.length === 0) return []\n return allMatches.map((m) => m.slice(1, -1).toLowerCase()).filter((t) => t.length > 0)\n}\n\n/**\n * One-line explainer shown above the results: what quotes change and what the relevance\n * threshold does. Unquoted queries also match by meaning, so some hits will not contain the word.\n */\nexport function getSearchMatchHint(query: string): string {\n const thresholdHint =\n 'Low shows all matches; High keeps the strongest and any passage with your words.'\n if (extractQuotedTerms(query).length > 0) {\n return `Showing exact matches for the quoted text. Remove the quotes to also include passages that match by meaning. ${thresholdHint}`\n }\n return `Matches keywords and meaning, so some hits won't contain the word. Quote a phrase for exact matches only. ${thresholdHint}`\n}\n\n// Common words we never want to highlight — they'd light up most of a passage\n// and drown out the meaningful matches.\nconst HIGHLIGHT_STOPWORDS = new Set([\n 'the',\n 'a',\n 'an',\n 'and',\n 'or',\n 'but',\n 'of',\n 'to',\n 'in',\n 'on',\n 'for',\n 'with',\n 'as',\n 'at',\n 'by',\n 'from',\n 'is',\n 'are',\n 'was',\n 'were',\n 'be',\n 'been',\n 'being',\n 'what',\n 'which',\n 'who',\n 'whom',\n 'whose',\n 'how',\n 'when',\n 'where',\n 'why',\n 'did',\n 'do',\n 'does',\n 'his',\n 'her',\n 'their',\n 'its',\n 'this',\n 'that',\n 'these',\n 'those',\n 'it',\n 'he',\n 'she',\n 'they',\n 'we',\n 'you',\n 'about',\n 'into',\n 'over',\n 'than',\n 'then',\n 'them',\n 'have',\n 'has',\n 'had',\n 'will',\n 'would',\n 'can',\n 'could',\n 'should',\n 'may',\n 'might',\n])\n\n/**\n * Terms to highlight in snippets: quoted phrases verbatim, and the significant words (longer than\n * two letters, not a stopword) of the rest, so a plain question still shows why a passage matched.\n */\nexport function extractHighlightTerms(query: string): string[] {\n const quoted = extractQuotedTerms(query)\n const withoutQuoted = query.replace(/\"[^\"]+\"|'[^']+'/g, ' ')\n const words = withoutQuoted\n .toLowerCase()\n .split(/[^\\p{L}\\p{N}]+/u)\n .filter((w) => w.length > 2 && !HIGHLIGHT_STOPWORDS.has(w))\n return Array.from(new Set([...quoted, ...words]))\n}\n\n/**\n * True when a passage contains none of the query's terms: the hybrid search returned it for its\n * meaning rather than for a visible word. A query with no terms can't tell, so never.\n */\nexport function isMeaningMatch(content: string, terms: string[]): boolean {\n if (terms.length === 0) return false\n const lowered = content.toLowerCase()\n return !terms.some((term) => lowered.includes(term))\n}\n\n/**\n * Whether a hit survives the relevance threshold. Exact keyword hits often score below the High\n * cutoff, so when the query has terms a passage containing one is kept at any threshold; only\n * meaning-only matches are cut by the score.\n */\nexport function passesRelevanceCutoff(hit: SearchChunk, cutoff: number, terms: string[]): boolean {\n if (hit.score >= cutoff) return true\n return terms.length > 0 && !isMeaningMatch(hit.content, terms)\n}\n\nexport interface SearchAggregation {\n groups: SearchDocumentGroup[]\n /** The documents listed, in first-hit order. */\n docIds: string[]\n}\n\n/**\n * The hits grouped by document in one pass. With `terms`, passages containing a term rank above\n * meaning-only ones inside each group, and groups with a keyword hit come before groups that only\n * matched by meaning. Both sorts are stable, so page order inside a group and relevance across\n * groups hold within each tier.\n */\nexport function groupSearchResults(hits: SearchChunk[], terms: string[] = []): SearchAggregation {\n const groups = new Map<string, SearchDocumentGroup>()\n const docIds: string[] = []\n\n for (const hit of hits) {\n let group = groups.get(hit.docId)\n if (!group) {\n group = { docId: hit.docId, docTitle: hit.docTitle, maxScore: hit.score, results: [] }\n groups.set(hit.docId, group)\n docIds.push(hit.docId)\n }\n group.results.push(hit)\n if (hit.score > group.maxScore) group.maxScore = hit.score\n }\n\n // 0 = contains a query term, 1 = matched by meaning only.\n const tierOf = (hit: SearchChunk) => (isMeaningMatch(hit.content, terms) ? 1 : 0)\n const groupTier = new Map<SearchDocumentGroup, number>()\n\n for (const group of groups.values()) {\n group.results.sort((a, b) => {\n const pageA = a.page || 0\n const pageB = b.page || 0\n if (pageA !== pageB) return pageA - pageB\n return a.index - b.index\n })\n if (terms.length > 0) {\n group.results.sort((a, b) => tierOf(a) - tierOf(b))\n groupTier.set(group, tierOf(group.results[0]))\n }\n }\n\n const sorted = Array.from(groups.values()).sort(\n (a, b) => (groupTier.get(a) ?? 0) - (groupTier.get(b) ?? 0) || b.maxScore - a.maxScore\n )\n return { groups: sorted, docIds }\n}\n"]}
|