@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.
Files changed (357) hide show
  1. package/dist/ConnectedNativeDocxComparison-3XQSINPQ.cjs +44 -0
  2. package/dist/ConnectedNativeDocxComparison-3XQSINPQ.cjs.map +1 -0
  3. package/dist/ConnectedNativeDocxComparison-XQSXVGHR.js +35 -0
  4. package/dist/ConnectedNativeDocxComparison-XQSXVGHR.js.map +1 -0
  5. package/dist/ConnectedNativeDocxEditor-IPEZDERL.js +33 -0
  6. package/dist/ConnectedNativeDocxEditor-IPEZDERL.js.map +1 -0
  7. package/dist/ConnectedNativeDocxEditor-OUWFMIPH.cjs +46 -0
  8. package/dist/ConnectedNativeDocxEditor-OUWFMIPH.cjs.map +1 -0
  9. package/dist/ConnectedStreamedWordArtifact-D5LSMDO4.cjs +44 -0
  10. package/dist/ConnectedStreamedWordArtifact-D5LSMDO4.cjs.map +1 -0
  11. package/dist/ConnectedStreamedWordArtifact-UZVNBKQB.js +35 -0
  12. package/dist/ConnectedStreamedWordArtifact-UZVNBKQB.js.map +1 -0
  13. package/dist/FactTextEditor-YESAU2IJ.js +25 -0
  14. package/dist/FactTextEditor-YESAU2IJ.js.map +1 -0
  15. package/dist/FactTextEditor-YUPBCTXK.cjs +27 -0
  16. package/dist/FactTextEditor-YUPBCTXK.cjs.map +1 -0
  17. package/dist/{NativeDocxEditor-BE2OEOTJ.cjs → NativeDocxEditor-5VBNM5I7.cjs} +8 -8
  18. package/dist/{NativeDocxEditor-BE2OEOTJ.cjs.map → NativeDocxEditor-5VBNM5I7.cjs.map} +1 -1
  19. package/dist/{NativeDocxEditor-KOPFMRYW.js → NativeDocxEditor-XT5ZLFGU.js} +4 -4
  20. package/dist/{NativeDocxEditor-KOPFMRYW.js.map → NativeDocxEditor-XT5ZLFGU.js.map} +1 -1
  21. package/dist/agents/index.cjs +265 -266
  22. package/dist/agents/index.js +8 -9
  23. package/dist/calendar/index.cjs +117 -125
  24. package/dist/calendar/index.d.ts +0 -1
  25. package/dist/calendar/index.js +1 -1
  26. package/dist/calls/index.cjs +3 -3
  27. package/dist/calls/index.js +2 -2
  28. package/dist/chat/index.cjs +78 -78
  29. package/dist/chat/index.js +3 -3
  30. package/dist/{chunk-2FL7QJKJ.js → chunk-265GOG4W.js} +3 -3
  31. package/dist/{chunk-2FL7QJKJ.js.map → chunk-265GOG4W.js.map} +1 -1
  32. package/dist/{chunk-IJST4EBM.js → chunk-3E2F4AHD.js} +8 -8
  33. package/dist/{chunk-IJST4EBM.js.map → chunk-3E2F4AHD.js.map} +1 -1
  34. package/dist/chunk-3FSXWVHW.cjs +5184 -0
  35. package/dist/chunk-3FSXWVHW.cjs.map +1 -0
  36. package/dist/{chunk-LPYEUD2D.cjs → chunk-4JNKXOFZ.cjs} +3 -3
  37. package/dist/{chunk-LPYEUD2D.cjs.map → chunk-4JNKXOFZ.cjs.map} +1 -1
  38. package/dist/{chunk-ODRHHWHY.cjs → chunk-4KMLM3GY.cjs} +4 -4
  39. package/dist/chunk-4KMLM3GY.cjs.map +1 -0
  40. package/dist/{chunk-MHFF5N65.cjs → chunk-757OYF6G.cjs} +4 -38
  41. package/dist/chunk-757OYF6G.cjs.map +1 -0
  42. package/dist/chunk-AXTDDWMR.js +16 -0
  43. package/dist/chunk-AXTDDWMR.js.map +1 -0
  44. package/dist/{chunk-B3AHCIV5.js → chunk-BJ24VPOA.js} +4 -55
  45. package/dist/chunk-BJ24VPOA.js.map +1 -0
  46. package/dist/chunk-C7PTF6BQ.cjs +172 -0
  47. package/dist/chunk-C7PTF6BQ.cjs.map +1 -0
  48. package/dist/{chunk-T5B7FM7S.js → chunk-COA3S3CZ.js} +3 -3
  49. package/dist/{chunk-T5B7FM7S.js.map → chunk-COA3S3CZ.js.map} +1 -1
  50. package/dist/{chunk-C44TDH54.js → chunk-CQPFW64W.js} +5 -5
  51. package/dist/{chunk-C44TDH54.js.map → chunk-CQPFW64W.js.map} +1 -1
  52. package/dist/chunk-D3WFIFRY.cjs +659 -0
  53. package/dist/chunk-D3WFIFRY.cjs.map +1 -0
  54. package/dist/{chunk-QXMR5YHC.js → chunk-DIB4JYUY.js} +19 -3
  55. package/dist/chunk-DIB4JYUY.js.map +1 -0
  56. package/dist/chunk-DVB5ZKOF.js +22 -0
  57. package/dist/chunk-DVB5ZKOF.js.map +1 -0
  58. package/dist/{chunk-VHJHY7TT.js → chunk-ECERC6TI.js} +3 -3
  59. package/dist/{chunk-VHJHY7TT.js.map → chunk-ECERC6TI.js.map} +1 -1
  60. package/dist/chunk-EDV7CYG6.cjs +18 -0
  61. package/dist/chunk-EDV7CYG6.cjs.map +1 -0
  62. package/dist/chunk-FAXXN7KI.cjs +213 -0
  63. package/dist/chunk-FAXXN7KI.cjs.map +1 -0
  64. package/dist/{chunk-2MJWWPHY.js → chunk-G4IYES7G.js} +140 -15
  65. package/dist/chunk-G4IYES7G.js.map +1 -0
  66. package/dist/{chunk-MFMASSEO.cjs → chunk-GGTUMLCT.cjs} +93 -91
  67. package/dist/chunk-GGTUMLCT.cjs.map +1 -0
  68. package/dist/{chunk-QI6AIHWP.cjs → chunk-GOWXP5KT.cjs} +145 -14
  69. package/dist/chunk-GOWXP5KT.cjs.map +1 -0
  70. package/dist/{chunk-O6IEZDRC.cjs → chunk-GRGS5M6O.cjs} +181 -3
  71. package/dist/chunk-GRGS5M6O.cjs.map +1 -0
  72. package/dist/{chunk-A6IU4GIW.js → chunk-HGLC566X.js} +598 -13
  73. package/dist/chunk-HGLC566X.js.map +1 -0
  74. package/dist/{chunk-O2GW5IY6.cjs → chunk-ILM42LE6.cjs} +33 -33
  75. package/dist/{chunk-O2GW5IY6.cjs.map → chunk-ILM42LE6.cjs.map} +1 -1
  76. package/dist/{chunk-C3CGJK7A.cjs → chunk-IPQ5MJ4Z.cjs} +636 -31
  77. package/dist/chunk-IPQ5MJ4Z.cjs.map +1 -0
  78. package/dist/{chunk-NRFAWUVD.js → chunk-JAANWQGB.js} +157 -157
  79. package/dist/chunk-JAANWQGB.js.map +1 -0
  80. package/dist/{chunk-7RJTEWYM.js → chunk-JGOST4IL.js} +350 -64
  81. package/dist/chunk-JGOST4IL.js.map +1 -0
  82. package/dist/chunk-KHXEIEXN.js +41 -0
  83. package/dist/chunk-KHXEIEXN.js.map +1 -0
  84. package/dist/chunk-KLPRAQCE.cjs +22 -0
  85. package/dist/chunk-KLPRAQCE.cjs.map +1 -0
  86. package/dist/chunk-KQYPP72K.js +644 -0
  87. package/dist/chunk-KQYPP72K.js.map +1 -0
  88. package/dist/chunk-KUT2Y7JF.cjs +43 -0
  89. package/dist/chunk-KUT2Y7JF.cjs.map +1 -0
  90. package/dist/{chunk-6YTHQ73P.cjs → chunk-LLYZGH3L.cjs} +3 -56
  91. package/dist/chunk-LLYZGH3L.cjs.map +1 -0
  92. package/dist/{chunk-YSHIC4NJ.cjs → chunk-LXTOOUEN.cjs} +159 -154
  93. package/dist/chunk-LXTOOUEN.cjs.map +1 -0
  94. package/dist/{chunk-EVUEIBNU.js → chunk-M4S75AEJ.js} +44 -5
  95. package/dist/chunk-M4S75AEJ.js.map +1 -0
  96. package/dist/{chunk-V5OAXIBN.cjs → chunk-NPR5BGFF.cjs} +11 -11
  97. package/dist/{chunk-V5OAXIBN.cjs.map → chunk-NPR5BGFF.cjs.map} +1 -1
  98. package/dist/{chunk-PLJ7PHWU.cjs → chunk-NS7NVX4E.cjs} +3 -3
  99. package/dist/{chunk-PLJ7PHWU.cjs.map → chunk-NS7NVX4E.cjs.map} +1 -1
  100. package/dist/{chunk-RB7GX2VT.cjs → chunk-NWNAYXC7.cjs} +9 -9
  101. package/dist/{chunk-RB7GX2VT.cjs.map → chunk-NWNAYXC7.cjs.map} +1 -1
  102. package/dist/chunk-Q6N6MZKO.js +5004 -0
  103. package/dist/chunk-Q6N6MZKO.js.map +1 -0
  104. package/dist/{chunk-I2QSDQQV.cjs → chunk-QT3A4PFC.cjs} +21 -2
  105. package/dist/chunk-QT3A4PFC.cjs.map +1 -0
  106. package/dist/{chunk-6HCJ3ZEU.js → chunk-R6VCPDPF.js} +178 -6
  107. package/dist/chunk-R6VCPDPF.js.map +1 -0
  108. package/dist/{chunk-ZM26YEOT.js → chunk-RY2SODRN.js} +3 -3
  109. package/dist/{chunk-ZM26YEOT.js.map → chunk-RY2SODRN.js.map} +1 -1
  110. package/dist/chunk-SDOEHEJP.js +208 -0
  111. package/dist/chunk-SDOEHEJP.js.map +1 -0
  112. package/dist/{chunk-DETZZBG2.cjs → chunk-SIB6C7P7.cjs} +43 -2
  113. package/dist/chunk-SIB6C7P7.cjs.map +1 -0
  114. package/dist/{chunk-OPTBQSCV.cjs → chunk-SMN32BQ3.cjs} +4 -183
  115. package/dist/chunk-SMN32BQ3.cjs.map +1 -0
  116. package/dist/chunk-TAWPVD6C.cjs +1956 -0
  117. package/dist/chunk-TAWPVD6C.cjs.map +1 -0
  118. package/dist/chunk-TC25LGIM.js +6584 -0
  119. package/dist/chunk-TC25LGIM.js.map +1 -0
  120. package/dist/{chunk-OBWYM25Y.js → chunk-TL45OJQE.js} +85 -83
  121. package/dist/chunk-TL45OJQE.js.map +1 -0
  122. package/dist/{chunk-AOSUHWIL.js → chunk-TZOQKV64.js} +4 -37
  123. package/dist/chunk-TZOQKV64.js.map +1 -0
  124. package/dist/chunk-UTVY63DG.js +16 -0
  125. package/dist/chunk-UTVY63DG.js.map +1 -0
  126. package/dist/chunk-V4YZXGXR.cjs +6751 -0
  127. package/dist/chunk-V4YZXGXR.cjs.map +1 -0
  128. package/dist/chunk-XRWHFMHK.js +19 -0
  129. package/dist/chunk-XRWHFMHK.js.map +1 -0
  130. package/dist/{chunk-O4YPVYPO.cjs → chunk-YAEXSCUW.cjs} +364 -60
  131. package/dist/chunk-YAEXSCUW.cjs.map +1 -0
  132. package/dist/chunk-YIFCLNII.cjs +18 -0
  133. package/dist/chunk-YIFCLNII.cjs.map +1 -0
  134. package/dist/chunk-Z27QMJ6S.cjs +25 -0
  135. package/dist/chunk-Z27QMJ6S.cjs.map +1 -0
  136. package/dist/{chunk-CSI2B2H5.js → chunk-Z4NQ3TED.js} +4 -4
  137. package/dist/chunk-Z4NQ3TED.js.map +1 -0
  138. package/dist/{chunk-DWZXSPMB.cjs → chunk-ZAVEMQ37.cjs} +3 -3
  139. package/dist/{chunk-DWZXSPMB.cjs.map → chunk-ZAVEMQ37.cjs.map} +1 -1
  140. package/dist/{chunk-FUTMU4FR.js → chunk-ZLEYLCE4.js} +8 -181
  141. package/dist/chunk-ZLEYLCE4.js.map +1 -0
  142. package/dist/chunk-ZNLTEZEF.js +170 -0
  143. package/dist/chunk-ZNLTEZEF.js.map +1 -0
  144. package/dist/chunk-ZO7PJMCO.js +1907 -0
  145. package/dist/chunk-ZO7PJMCO.js.map +1 -0
  146. package/dist/citations/index.cjs +14 -14
  147. package/dist/citations/index.js +2 -2
  148. package/dist/collaboration/index.cjs +74 -74
  149. package/dist/collaboration/index.js +3 -3
  150. package/dist/connect/docx.cjs +23 -28
  151. package/dist/connect/docx.cjs.map +1 -1
  152. package/dist/connect/docx.js +12 -28
  153. package/dist/connect/docx.js.map +1 -1
  154. package/dist/connect/index.cjs +8799 -2057
  155. package/dist/connect/index.cjs.map +1 -1
  156. package/dist/connect/index.d.ts +11 -2
  157. package/dist/connect/index.js +8578 -1884
  158. package/dist/connect/index.js.map +1 -1
  159. package/dist/connect/viewer.cjs +1229 -0
  160. package/dist/connect/viewer.cjs.map +1 -0
  161. package/dist/connect/viewer.d.ts +8 -0
  162. package/dist/connect/viewer.js +1226 -0
  163. package/dist/connect/viewer.js.map +1 -0
  164. package/dist/connection/ConnectedWorkflowsTable.d.ts +2 -12
  165. package/dist/connection/ai.d.ts +2 -9
  166. package/dist/connection/billing/AddAddonDialog.d.ts +24 -0
  167. package/dist/connection/billing/BillingCard.d.ts +18 -0
  168. package/dist/connection/billing/BillingProjectEntity.d.ts +9 -0
  169. package/dist/connection/billing/ChangePlanDialog.d.ts +20 -0
  170. package/dist/connection/billing/ChangeProPlan.d.ts +20 -0
  171. package/dist/connection/billing/CheckoutTotal.d.ts +12 -0
  172. package/dist/connection/billing/DailyCapEditor.d.ts +4 -0
  173. package/dist/connection/billing/InvoicesModal.d.ts +6 -0
  174. package/dist/connection/billing/NewProjectFlow.d.ts +14 -0
  175. package/dist/connection/billing/PlanChangeLines.d.ts +13 -0
  176. package/dist/connection/billing/PlanSelector.d.ts +50 -0
  177. package/dist/connection/billing/ProjectBilling.d.ts +24 -0
  178. package/dist/connection/billing/ProjectDetail.d.ts +16 -0
  179. package/dist/connection/billing/ProjectUsageCard.d.ts +21 -0
  180. package/dist/connection/billing/ProjectUsageContent.d.ts +18 -0
  181. package/dist/connection/billing/ProjectsTable.d.ts +13 -0
  182. package/dist/connection/billing/ReduceAddonDialog.d.ts +18 -0
  183. package/dist/connection/billing/ReferralReward.d.ts +32 -0
  184. package/dist/connection/billing/SharedProjects.d.ts +13 -0
  185. package/dist/connection/billing/StripeCheckoutModal.d.ts +32 -0
  186. package/dist/connection/billing/SubscriptionPlans.d.ts +15 -0
  187. package/dist/connection/billing/SubscriptionStatus.d.ts +10 -0
  188. package/dist/connection/billing/addon-pricing.d.ts +97 -0
  189. package/dist/connection/billing/api-error.d.ts +6 -0
  190. package/dist/connection/billing/billing-country.d.ts +14 -0
  191. package/dist/connection/billing/billing-focus.d.ts +11 -0
  192. package/dist/connection/billing/index.d.ts +22 -0
  193. package/dist/connection/billing/plan-badge.d.ts +15 -0
  194. package/dist/connection/billing/plan-change-outcome.d.ts +15 -0
  195. package/dist/connection/billing/plan-constants.d.ts +29 -0
  196. package/dist/connection/billing/plan-pricing.d.ts +67 -0
  197. package/dist/connection/billing/quota-items.d.ts +33 -0
  198. package/dist/connection/billing/referral-reward.d.ts +28 -0
  199. package/dist/connection/billing/refusal-copy.d.ts +5 -0
  200. package/dist/connection/billing/reward-balance.d.ts +19 -0
  201. package/dist/connection/billing/support.d.ts +35 -0
  202. package/dist/connection/billing/tax-quote.d.ts +36 -0
  203. package/dist/connection/billing/useAddonPurchase.d.ts +32 -0
  204. package/dist/connection/billing/useAutoRefreshPendingProjects.d.ts +11 -0
  205. package/dist/connection/billing/useCheckoutQuote.d.ts +30 -0
  206. package/dist/connection/billing/useOpenBillingPortal.d.ts +12 -0
  207. package/dist/connection/calendar/CalendarSettingsDialog.d.ts +1 -1
  208. package/dist/connection/connectors/ConnectedAppsSettings.d.ts +24 -0
  209. package/dist/connection/connectors/ConnectedDriveSyncDialog.d.ts +12 -0
  210. package/dist/connection/connectors/ConnectedMailboxSyncDialog.d.ts +12 -0
  211. package/dist/connection/connectors/index.d.ts +4 -0
  212. package/dist/connection/connectors/sync-labels.d.ts +21 -0
  213. package/dist/connection/facts/ConnectedFactsPage.d.ts +50 -0
  214. package/dist/connection/facts/FactMarkdownEditor.d.ts +57 -0
  215. package/dist/connection/facts/FactSourcesPopover.d.ts +38 -0
  216. package/dist/connection/facts/FactTextEditor.d.ts +2 -0
  217. package/dist/connection/facts/factNouns.d.ts +4 -0
  218. package/dist/connection/facts/factPageColumns.d.ts +37 -0
  219. package/dist/connection/facts/types.d.ts +127 -0
  220. package/dist/connection/facts/useFactActions.d.ts +10 -0
  221. package/dist/connection/facts/useFactComposer.d.ts +54 -0
  222. package/dist/connection/facts/useFactFilters.d.ts +101 -0
  223. package/dist/connection/facts/useFactSelection.d.ts +82 -0
  224. package/dist/connection/facts/useFactsGrid.d.ts +87 -0
  225. package/dist/connection/facts/useFactsPageView.d.ts +4 -0
  226. package/dist/connection/mail/ConnectedMailComposer.d.ts +3 -1
  227. package/dist/connection/mail/ConnectedMailbox.d.ts +4 -2
  228. package/dist/connection/mail/MailComposerForm.d.ts +4 -2
  229. package/dist/connection/mail/MailRecipientInput.d.ts +14 -0
  230. package/dist/connection/mail/index.d.ts +1 -1
  231. package/dist/connection/mail/types.d.ts +10 -0
  232. package/dist/connection/search/ConnectedSearchPage.d.ts +64 -0
  233. package/dist/connection/search/SearchResultRows.d.ts +38 -0
  234. package/dist/connection/search/index.d.ts +2 -0
  235. package/dist/connection/settings-page/ConnectedSettingsPage.d.ts +4 -0
  236. package/dist/connection/settings-page/index.d.ts +1 -1
  237. package/dist/connection/tags/ConnectedTagTable.d.ts +108 -0
  238. package/dist/connection/tags/ConnectedTagsPage.d.ts +55 -0
  239. package/dist/connection/tags/DocTagPassages.d.ts +25 -0
  240. package/dist/connection/tags/GlossaryExport.d.ts +7 -0
  241. package/dist/connection/tags/TagCombineFilter.d.ts +14 -0
  242. package/dist/connection/tags/TagPlacement.d.ts +16 -0
  243. package/dist/connection/tags/TagsPageSections.d.ts +36 -0
  244. package/dist/connection/tags/tagCombine.d.ts +55 -0
  245. package/dist/connection/useConnectedWorkNotifications.d.ts +7 -24
  246. package/dist/connection/viewer/ConnectedDocumentToolsProvider.d.ts +11 -0
  247. package/dist/connection/viewer/ConnectedDocumentViewer.d.ts +21 -0
  248. package/dist/connection/viewer/FinaliseTranslationButton.d.ts +15 -0
  249. package/dist/connection/viewer/ViewerPdfPane.d.ts +46 -0
  250. package/dist/connection/viewer/support.d.ts +79 -0
  251. package/dist/connection/viewer/useImageCrop.d.ts +13 -0
  252. package/dist/connection/viewer/useViewedDocument.d.ts +70 -0
  253. package/dist/connection/viewer/useViewerBlobs.d.ts +15 -0
  254. package/dist/connection/viewer/useViewerTabs.d.ts +18 -0
  255. package/dist/connection/viewer/useViewerVersions.d.ts +11 -0
  256. package/dist/connection/workspace-settings/useConnectedWorkspaceSettings.d.ts +6 -0
  257. package/dist/document-tools/index.cjs +59 -652
  258. package/dist/document-tools/index.cjs.map +1 -1
  259. package/dist/document-tools/index.js +2 -641
  260. package/dist/document-tools/index.js.map +1 -1
  261. package/dist/docx/index.cjs +48 -47
  262. package/dist/docx/index.js +4 -3
  263. package/dist/facts/FactsBulkBar.d.ts +6 -3
  264. package/dist/facts/cited-version-ref.d.ts +1 -0
  265. package/dist/facts/index.cjs +206 -1942
  266. package/dist/facts/index.cjs.map +1 -1
  267. package/dist/facts/index.d.ts +1 -0
  268. package/dist/facts/index.js +15 -1897
  269. package/dist/facts/index.js.map +1 -1
  270. package/dist/files/ViewerChrome.d.ts +5 -4
  271. package/dist/files/ViewerControlBar.d.ts +12 -0
  272. package/dist/files/doc-labels.d.ts +35 -0
  273. package/dist/files/grid/FilterButton.d.ts +12 -0
  274. package/dist/files/grid/RowDensityControl.d.ts +18 -0
  275. package/dist/files/grid/row-density.d.ts +27 -0
  276. package/dist/files/index.cjs +779 -7100
  277. package/dist/files/index.cjs.map +1 -1
  278. package/dist/files/index.d.ts +5 -0
  279. package/dist/files/index.js +14 -6919
  280. package/dist/files/index.js.map +1 -1
  281. package/dist/home/index.cjs +2 -2
  282. package/dist/home/index.js +2 -2
  283. package/dist/index.cjs +1043 -1259
  284. package/dist/index.cjs.map +1 -1
  285. package/dist/index.js +27 -360
  286. package/dist/index.js.map +1 -1
  287. package/dist/retrieval/SearchSnippet.d.ts +6 -0
  288. package/dist/retrieval/index.cjs +75 -42
  289. package/dist/retrieval/index.d.ts +2 -0
  290. package/dist/retrieval/index.js +3 -2
  291. package/dist/retrieval/search-results.d.ts +46 -0
  292. package/dist/settings/Billing.d.ts +0 -66
  293. package/dist/settings/PlanBadge.d.ts +1 -1
  294. package/dist/settings/SubscriptionParts.d.ts +1 -50
  295. package/dist/settings/index.cjs +501 -3714
  296. package/dist/settings/index.cjs.map +1 -1
  297. package/dist/settings/index.d.ts +3 -2
  298. package/dist/settings/index.js +10 -3527
  299. package/dist/settings/index.js.map +1 -1
  300. package/dist/settings/inverted-index-filter.d.ts +26 -0
  301. package/dist/shell/index.cjs +2 -2
  302. package/dist/shell/index.js +2 -2
  303. package/dist/site/index.cjs +5 -5
  304. package/dist/site/index.js +1 -1
  305. package/dist/studio/index.cjs +6 -6
  306. package/dist/studio/index.js +5 -5
  307. package/dist/tags/definitions.d.ts +10 -0
  308. package/dist/tags/index.d.ts +4 -1
  309. package/dist/tags/page/ExtractEntitiesDialog.d.ts +24 -0
  310. package/dist/tags/page/TagPicker.d.ts +16 -0
  311. package/dist/tags/page/tagsPageLabels.d.ts +36 -0
  312. package/dist/workflow-canvas/index.cjs +21 -22
  313. package/dist/workflow-canvas/index.cjs.map +1 -1
  314. package/dist/workflow-canvas/index.js +8 -9
  315. package/dist/workflow-canvas/index.js.map +1 -1
  316. package/node_modules/@arbidocs/coedit/package.json +1 -1
  317. package/package.json +13 -4
  318. package/dist/calendar/access-setup.d.ts +0 -8
  319. package/dist/chunk-2MJWWPHY.js.map +0 -1
  320. package/dist/chunk-3AFWGEDJ.cjs +0 -53
  321. package/dist/chunk-3AFWGEDJ.cjs.map +0 -1
  322. package/dist/chunk-5YHEHEJT.js +0 -1667
  323. package/dist/chunk-5YHEHEJT.js.map +0 -1
  324. package/dist/chunk-6HCJ3ZEU.js.map +0 -1
  325. package/dist/chunk-6YTHQ73P.cjs.map +0 -1
  326. package/dist/chunk-7RJTEWYM.js.map +0 -1
  327. package/dist/chunk-A6IU4GIW.js.map +0 -1
  328. package/dist/chunk-AOSUHWIL.js.map +0 -1
  329. package/dist/chunk-B3AHCIV5.js.map +0 -1
  330. package/dist/chunk-C3CGJK7A.cjs.map +0 -1
  331. package/dist/chunk-CSI2B2H5.js.map +0 -1
  332. package/dist/chunk-DETZZBG2.cjs.map +0 -1
  333. package/dist/chunk-EVUEIBNU.js.map +0 -1
  334. package/dist/chunk-FUTMU4FR.js.map +0 -1
  335. package/dist/chunk-I2QSDQQV.cjs.map +0 -1
  336. package/dist/chunk-J5CWKFSC.js +0 -170
  337. package/dist/chunk-J5CWKFSC.js.map +0 -1
  338. package/dist/chunk-MFMASSEO.cjs.map +0 -1
  339. package/dist/chunk-MHFF5N65.cjs.map +0 -1
  340. package/dist/chunk-NRFAWUVD.js.map +0 -1
  341. package/dist/chunk-O4YPVYPO.cjs.map +0 -1
  342. package/dist/chunk-O6IEZDRC.cjs.map +0 -1
  343. package/dist/chunk-OBWYM25Y.js.map +0 -1
  344. package/dist/chunk-ODRHHWHY.cjs.map +0 -1
  345. package/dist/chunk-OPTBQSCV.cjs.map +0 -1
  346. package/dist/chunk-QI6AIHWP.cjs.map +0 -1
  347. package/dist/chunk-QXMR5YHC.js.map +0 -1
  348. package/dist/chunk-RFXJYIDV.js +0 -50
  349. package/dist/chunk-RFXJYIDV.js.map +0 -1
  350. package/dist/chunk-U73KPFYH.cjs +0 -1717
  351. package/dist/chunk-U73KPFYH.cjs.map +0 -1
  352. package/dist/chunk-XVUOMWMD.cjs +0 -177
  353. package/dist/chunk-XVUOMWMD.cjs.map +0 -1
  354. package/dist/chunk-YSHIC4NJ.cjs.map +0 -1
  355. package/dist/connection/ConnectedTagTable.d.ts +0 -32
  356. package/dist/connection/calendar/CopyField.d.ts +0 -9
  357. package/dist/connection/calendar/OpenAccessPanel.d.ts +0 -7
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { testIdOr, prefixedTestId } from './chunk-7F6CBP3Z.js';
3
- import { memo, useMemo, useRef, useCallback, useLayoutEffect, Fragment as Fragment$1 } from 'react';
3
+ import { memo, useMemo, useRef, useCallback, useLayoutEffect } from 'react';
4
4
  import { ChevronLeft, ChevronRight, FileUp, Plus, Search, Blend, Quote, X, Loader2, AlertCircle, TagIcon } from 'lucide-react';
5
- import { Button, cn, Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, Input, DialogFooter } from '@arbidocs/react/ui';
5
+ import { Button, cn, MarkdownRenderer, Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, Input, DialogFooter } from '@arbidocs/react/ui';
6
6
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
7
7
 
8
8
  // src/retrieval/highlight.ts
@@ -744,19 +744,144 @@ function ApplyLabelButton({
744
744
  }
745
745
  );
746
746
  }
747
- function splitByTerms(text, terms) {
748
- const escaped = terms.map((t) => t.trim()).filter(Boolean).map((t) => t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
749
- if (escaped.length === 0) return [{ text, match: false }];
750
- const re = new RegExp(`(${escaped.join("|")})`, "gi");
751
- return text.split(re).map((part, i) => ({ text: part, match: i % 2 === 1 })).filter((run) => run.text !== "");
747
+ var SearchSnippet = memo(function SearchSnippet2({
748
+ content,
749
+ terms
750
+ }) {
751
+ return /* @__PURE__ */ jsx(MarkdownRenderer, { children: highlightTerms(content, terms) });
752
+ });
753
+ var renderSearchSnippet = (content, terms) => /* @__PURE__ */ jsx(SearchSnippet, { content, terms });
754
+
755
+ // src/retrieval/search-results.ts
756
+ function extractQuotedTerms(query) {
757
+ const doubleQuoted = query.match(/"([^"]+)"/g) || [];
758
+ const singleQuoted = query.match(/'([^']+)'/g) || [];
759
+ const allMatches = [...doubleQuoted, ...singleQuoted];
760
+ if (allMatches.length === 0) return [];
761
+ return allMatches.map((m) => m.slice(1, -1).toLowerCase()).filter((t) => t.length > 0);
752
762
  }
753
- function Highlight({ text, terms, markClassName, className }) {
754
- const runs = splitByTerms(stripMarkdownLinks(text), terms);
755
- return /* @__PURE__ */ jsx("span", { className, "data-slot": "highlight", children: runs.map(
756
- (run, i) => run.match ? /* @__PURE__ */ jsx("mark", { className: cn("rounded-sm bg-yellow-bg text-inherit", markClassName), children: run.text }, i) : /* @__PURE__ */ jsx(Fragment$1, { children: run.text }, i)
757
- ) });
763
+ function getSearchMatchHint(query) {
764
+ const thresholdHint = "Low shows all matches; High keeps the strongest and any passage with your words.";
765
+ if (extractQuotedTerms(query).length > 0) {
766
+ return `Showing exact matches for the quoted text. Remove the quotes to also include passages that match by meaning. ${thresholdHint}`;
767
+ }
768
+ return `Matches keywords and meaning, so some hits won't contain the word. Quote a phrase for exact matches only. ${thresholdHint}`;
769
+ }
770
+ var HIGHLIGHT_STOPWORDS = /* @__PURE__ */ new Set([
771
+ "the",
772
+ "a",
773
+ "an",
774
+ "and",
775
+ "or",
776
+ "but",
777
+ "of",
778
+ "to",
779
+ "in",
780
+ "on",
781
+ "for",
782
+ "with",
783
+ "as",
784
+ "at",
785
+ "by",
786
+ "from",
787
+ "is",
788
+ "are",
789
+ "was",
790
+ "were",
791
+ "be",
792
+ "been",
793
+ "being",
794
+ "what",
795
+ "which",
796
+ "who",
797
+ "whom",
798
+ "whose",
799
+ "how",
800
+ "when",
801
+ "where",
802
+ "why",
803
+ "did",
804
+ "do",
805
+ "does",
806
+ "his",
807
+ "her",
808
+ "their",
809
+ "its",
810
+ "this",
811
+ "that",
812
+ "these",
813
+ "those",
814
+ "it",
815
+ "he",
816
+ "she",
817
+ "they",
818
+ "we",
819
+ "you",
820
+ "about",
821
+ "into",
822
+ "over",
823
+ "than",
824
+ "then",
825
+ "them",
826
+ "have",
827
+ "has",
828
+ "had",
829
+ "will",
830
+ "would",
831
+ "can",
832
+ "could",
833
+ "should",
834
+ "may",
835
+ "might"
836
+ ]);
837
+ function extractHighlightTerms(query) {
838
+ const quoted = extractQuotedTerms(query);
839
+ const withoutQuoted = query.replace(/"[^"]+"|'[^']+'/g, " ");
840
+ const words = withoutQuoted.toLowerCase().split(/[^\p{L}\p{N}]+/u).filter((w) => w.length > 2 && !HIGHLIGHT_STOPWORDS.has(w));
841
+ return Array.from(/* @__PURE__ */ new Set([...quoted, ...words]));
842
+ }
843
+ function isMeaningMatch(content, terms) {
844
+ if (terms.length === 0) return false;
845
+ const lowered = content.toLowerCase();
846
+ return !terms.some((term) => lowered.includes(term));
847
+ }
848
+ function passesRelevanceCutoff(hit, cutoff, terms) {
849
+ if (hit.score >= cutoff) return true;
850
+ return terms.length > 0 && !isMeaningMatch(hit.content, terms);
851
+ }
852
+ function groupSearchResults(hits, terms = []) {
853
+ const groups = /* @__PURE__ */ new Map();
854
+ const docIds = [];
855
+ for (const hit of hits) {
856
+ let group = groups.get(hit.docId);
857
+ if (!group) {
858
+ group = { docId: hit.docId, docTitle: hit.docTitle, maxScore: hit.score, results: [] };
859
+ groups.set(hit.docId, group);
860
+ docIds.push(hit.docId);
861
+ }
862
+ group.results.push(hit);
863
+ if (hit.score > group.maxScore) group.maxScore = hit.score;
864
+ }
865
+ const tierOf = (hit) => isMeaningMatch(hit.content, terms) ? 1 : 0;
866
+ const groupTier = /* @__PURE__ */ new Map();
867
+ for (const group of groups.values()) {
868
+ group.results.sort((a, b) => {
869
+ const pageA = a.page || 0;
870
+ const pageB = b.page || 0;
871
+ if (pageA !== pageB) return pageA - pageB;
872
+ return a.index - b.index;
873
+ });
874
+ if (terms.length > 0) {
875
+ group.results.sort((a, b) => tierOf(a) - tierOf(b));
876
+ groupTier.set(group, tierOf(group.results[0]));
877
+ }
878
+ }
879
+ const sorted = Array.from(groups.values()).sort(
880
+ (a, b) => (groupTier.get(a) ?? 0) - (groupTier.get(b) ?? 0) || b.maxScore - a.maxScore
881
+ );
882
+ return { groups: sorted, docIds };
758
883
  }
759
884
 
760
- export { ApplyLabelButton, ApplyLabelDialog, DEFAULT_APPLY_LABEL_DIALOG_LABELS, DEFAULT_RELEVANCE_STEPS, DEFAULT_SEARCH_BAR_LABELS, DEFAULT_SEARCH_EMPTY_STATE_LABELS, DEFAULT_SEARCH_GROUP_HEADER_LABELS, DEFAULT_SEARCH_NO_RESULTS_LABELS, DEFAULT_SEARCH_PAGINATION_LABELS, DEFAULT_SEARCH_TOTALS_LABELS, DOCUMENT_SEARCH_NOUNS, Highlight, RelevanceThreshold, SearchBar, SearchControlsBar, SearchEmptyState, SearchErrorBanner, SearchGroupCard, SearchGroupHeader, SearchNoResults, SearchPageBody, SearchPageFrame, SearchPageHeader, SearchPagination, SearchPillToggle, SearchResultList, SearchResultsInner, SearchResultsMain, SearchToolbarRow, SearchTotalsHeadline, getPageNumbers, highlightTerms, searchNouns, splitByTerms, stripMarkdownLinks };
761
- //# sourceMappingURL=chunk-2MJWWPHY.js.map
762
- //# sourceMappingURL=chunk-2MJWWPHY.js.map
885
+ export { ApplyLabelButton, ApplyLabelDialog, DEFAULT_APPLY_LABEL_DIALOG_LABELS, DEFAULT_RELEVANCE_STEPS, DEFAULT_SEARCH_BAR_LABELS, DEFAULT_SEARCH_EMPTY_STATE_LABELS, DEFAULT_SEARCH_GROUP_HEADER_LABELS, DEFAULT_SEARCH_NO_RESULTS_LABELS, DEFAULT_SEARCH_PAGINATION_LABELS, DEFAULT_SEARCH_TOTALS_LABELS, DOCUMENT_SEARCH_NOUNS, RelevanceThreshold, SearchBar, SearchControlsBar, SearchEmptyState, SearchErrorBanner, SearchGroupCard, SearchGroupHeader, SearchNoResults, SearchPageBody, SearchPageFrame, SearchPageHeader, SearchPagination, SearchPillToggle, SearchResultList, SearchResultsInner, SearchResultsMain, SearchSnippet, SearchToolbarRow, SearchTotalsHeadline, extractHighlightTerms, extractQuotedTerms, getPageNumbers, getSearchMatchHint, groupSearchResults, highlightTerms, isMeaningMatch, passesRelevanceCutoff, renderSearchSnippet, searchNouns, stripMarkdownLinks };
886
+ //# sourceMappingURL=chunk-G4IYES7G.js.map
887
+ //# sourceMappingURL=chunk-G4IYES7G.js.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":["SearchPagination","memo","SearchGroupHeader","jsxs","cn","jsx","ChevronRight","Button","Search","Fragment","SearchSnippet"],"mappings":"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","file":"chunk-G4IYES7G.js","sourcesContent":["/**\n * Flatten inline markdown links to their visible label: `[label](url)` -> `label`\n * (and image `![alt](url)` -> `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"]}
@@ -4,18 +4,18 @@
4
4
  var chunkGAYMJWTC_cjs = require('./chunk-GAYMJWTC.cjs');
5
5
  var chunkGFNELPDP_cjs = require('./chunk-GFNELPDP.cjs');
6
6
  var chunk464YPRAE_cjs = require('./chunk-464YPRAE.cjs');
7
- var chunkV5OAXIBN_cjs = require('./chunk-V5OAXIBN.cjs');
7
+ var chunkNPR5BGFF_cjs = require('./chunk-NPR5BGFF.cjs');
8
8
  var chunkLJJJ6CYH_cjs = require('./chunk-LJJJ6CYH.cjs');
9
- var chunkLPYEUD2D_cjs = require('./chunk-LPYEUD2D.cjs');
9
+ var chunk4JNKXOFZ_cjs = require('./chunk-4JNKXOFZ.cjs');
10
10
  var chunkRQ2Y7USX_cjs = require('./chunk-RQ2Y7USX.cjs');
11
- var chunkJKB7WT7L_cjs = require('./chunk-JKB7WT7L.cjs');
12
11
  var chunkKPZZ5FHE_cjs = require('./chunk-KPZZ5FHE.cjs');
12
+ var chunkJKB7WT7L_cjs = require('./chunk-JKB7WT7L.cjs');
13
13
  var chunkKDG6FER6_cjs = require('./chunk-KDG6FER6.cjs');
14
14
  var react = require('react');
15
- var jsxRuntime = require('react/jsx-runtime');
16
- var react$1 = require('@arbidocs/react');
17
15
  var reactQuery = require('@tanstack/react-query');
16
+ var react$1 = require('@arbidocs/react');
18
17
  var documentTools = require('@arbidocs/react/document-tools');
18
+ var jsxRuntime = require('react/jsx-runtime');
19
19
 
20
20
  var NativeDocxSupportContext = react.createContext({});
21
21
  function NativeDocxSupportProvider({
@@ -43,7 +43,7 @@ function toWorkflowFieldDocument(doc) {
43
43
  function useConnectedWorkflowScopeSource() {
44
44
  const { data: docs } = chunkGAYMJWTC_cjs.useConnectedDocuments();
45
45
  const { data: tags } = chunkGAYMJWTC_cjs.useConnectedTags();
46
- return react.useMemo(() => chunkLPYEUD2D_cjs.buildWorkflowScopeSource(docs, chunkLPYEUD2D_cjs.documentScopeLabels(tags)), [docs, tags]);
46
+ return react.useMemo(() => chunk4JNKXOFZ_cjs.buildWorkflowScopeSource(docs, chunk4JNKXOFZ_cjs.documentScopeLabels(tags)), [docs, tags]);
47
47
  }
48
48
  function useConnectedAgentOptions() {
49
49
  const { data: agents } = react$1.useAgents();
@@ -100,7 +100,7 @@ function ConnectedWorkflowDocumentsField({
100
100
  }
101
101
  ),
102
102
  /* @__PURE__ */ jsxRuntime.jsx(
103
- chunkLPYEUD2D_cjs.WorkflowDocumentsField,
103
+ chunk4JNKXOFZ_cjs.WorkflowDocumentsField,
104
104
  {
105
105
  field,
106
106
  value,
@@ -122,7 +122,7 @@ function ConnectedWorkflowLauncher({
122
122
  const scopeSource = useConnectedWorkflowScopeSource();
123
123
  const agents = useConnectedAgentOptions();
124
124
  return /* @__PURE__ */ jsxRuntime.jsx(
125
- chunkLPYEUD2D_cjs.WorkflowLauncher,
125
+ chunk4JNKXOFZ_cjs.WorkflowLauncher,
126
126
  {
127
127
  ...props,
128
128
  scopeSource,
@@ -139,6 +139,82 @@ function ConnectedWorkflowLauncher({
139
139
  }
140
140
  );
141
141
  }
142
+ var isTopLevel = (doc) => !doc.parent_ext_id;
143
+ function ReferencePicker({
144
+ documents,
145
+ selectedId,
146
+ onSelect
147
+ }) {
148
+ const groups = react.useMemo(() => {
149
+ const docs = documents.filter(isTopLevel).map(toWorkflowFieldDocument).sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase()));
150
+ return [{ id: "all", heading: "In this workspace", docs }];
151
+ }, [documents]);
152
+ const selected = groups[0].docs.find((d) => d.id === selectedId);
153
+ return /* @__PURE__ */ jsxRuntime.jsx(
154
+ chunkRQ2Y7USX_cjs.DocumentPicker,
155
+ {
156
+ groups,
157
+ value: selectedId ?? "",
158
+ onValueChange: onSelect,
159
+ selected,
160
+ labels: { placeholder: "Search documents\u2026" }
161
+ }
162
+ );
163
+ }
164
+ function useConnectedDocxReferences() {
165
+ const arbi = react$1.useArbi();
166
+ const { workspaceId } = chunkGFNELPDP_cjs.useConnectedWorkspace();
167
+ const { openDocument, runtimeConfig } = chunkKPZZ5FHE_cjs.useBlocksEnvironment();
168
+ const { data: documents } = chunkGAYMJWTC_cjs.useConnectedDocuments();
169
+ const documentsRef = react.useRef(documents);
170
+ documentsRef.current = documents;
171
+ return react.useMemo(
172
+ () => ({
173
+ documents: async () => documentsRef.current.filter(isTopLevel).map((d) => ({ id: d.external_id, title: toWorkflowFieldDocument(d).title })),
174
+ passages: async (documentId) => {
175
+ const parsed = await arbi.documents.getParsedContent(documentId, "final");
176
+ return (parsed.chunks ?? []).flatMap(
177
+ (chunk) => chunk.metadata?.chunk_ext_id && chunk.content?.trim() ? [
178
+ {
179
+ chunkId: chunk.metadata.chunk_ext_id,
180
+ page: chunk.metadata.page_number ?? null,
181
+ text: chunk.content
182
+ }
183
+ ] : []
184
+ );
185
+ },
186
+ linkFor: ({ documentId, chunkId, page }) => {
187
+ const url = chunkLJJJ6CYH_cjs.buildDeepLinkUrl(
188
+ { workspaceId: workspaceId ?? void 0, documentId, chunkId },
189
+ runtimeConfig.deploymentDomain
190
+ );
191
+ return page ? `${url}?page=${page}` : url;
192
+ },
193
+ targetOf: (href) => {
194
+ let url;
195
+ try {
196
+ url = new URL(href, window.location.origin);
197
+ } catch {
198
+ return null;
199
+ }
200
+ const { documentId, chunkId } = chunkLJJJ6CYH_cjs.parseDeepLinkPath(url.pathname);
201
+ if (!documentId || !chunkId) return null;
202
+ const page = Number(url.searchParams.get("page")) || null;
203
+ return { documentId, chunkId, page };
204
+ },
205
+ open: ({ documentId, chunkId, page }) => openDocument(documentId, { passageId: chunkId, page: page ?? void 0 }),
206
+ renderDocumentPicker: (onSelect, selectedId) => /* @__PURE__ */ jsxRuntime.jsx(
207
+ ReferencePicker,
208
+ {
209
+ documents: documentsRef.current,
210
+ selectedId,
211
+ onSelect
212
+ }
213
+ )
214
+ }),
215
+ [arbi, workspaceId, openDocument, runtimeConfig.deploymentDomain]
216
+ );
217
+ }
142
218
  function useConnectedWorkspaceRole() {
143
219
  const { workspaceId, live, userId, ensureWorkspaceOpen } = chunkGFNELPDP_cjs.useConnectedWorkspace();
144
220
  const { data: members = [] } = react$1.useWorkspaceUsers(workspaceId ?? void 0, {
@@ -168,7 +244,7 @@ var DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS = {
168
244
  var messageOf = (error) => error instanceof Error ? error.message : "";
169
245
  function ConnectedWorkflowsTable({
170
246
  filter,
171
- describeTrigger = (w) => chunkLPYEUD2D_cjs.workflowTriggerType(w).replaceAll("_", " "),
247
+ describeTrigger = (w) => chunk4JNKXOFZ_cjs.workflowTriggerType(w).replaceAll("_", " "),
172
248
  formatDate = chunkKDG6FER6_cjs.fmtDate,
173
249
  onViewRuns,
174
250
  connectedLabels,
@@ -230,7 +306,7 @@ function ConnectedWorkflowsTable({
230
306
  await act(workflow, () => remove.mutateAsync(workflow.external_id));
231
307
  };
232
308
  return /* @__PURE__ */ jsxRuntime.jsx(
233
- chunkLPYEUD2D_cjs.WorkflowsTable,
309
+ chunk4JNKXOFZ_cjs.WorkflowsTable,
234
310
  {
235
311
  ...tableProps,
236
312
  workflows,
@@ -275,82 +351,8 @@ function ConnectedWorkflowsTable({
275
351
  }
276
352
  );
277
353
  }
278
- var isTopLevel = (doc) => !doc.parent_ext_id;
279
- function ReferencePicker({
280
- documents,
281
- selectedId,
282
- onSelect
283
- }) {
284
- const groups = react.useMemo(() => {
285
- const docs = documents.filter(isTopLevel).map(toWorkflowFieldDocument).sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase()));
286
- return [{ id: "all", heading: "In this workspace", docs }];
287
- }, [documents]);
288
- const selected = groups[0].docs.find((d) => d.id === selectedId);
289
- return /* @__PURE__ */ jsxRuntime.jsx(
290
- chunkRQ2Y7USX_cjs.DocumentPicker,
291
- {
292
- groups,
293
- value: selectedId ?? "",
294
- onValueChange: onSelect,
295
- selected,
296
- labels: { placeholder: "Search documents\u2026" }
297
- }
298
- );
299
- }
300
- function useConnectedDocxReferences() {
301
- const arbi = react$1.useArbi();
302
- const { workspaceId } = chunkGFNELPDP_cjs.useConnectedWorkspace();
303
- const { openDocument, runtimeConfig } = chunkKPZZ5FHE_cjs.useBlocksEnvironment();
304
- const { data: documents } = chunkGAYMJWTC_cjs.useConnectedDocuments();
305
- const documentsRef = react.useRef(documents);
306
- documentsRef.current = documents;
307
- return react.useMemo(
308
- () => ({
309
- documents: async () => documentsRef.current.filter(isTopLevel).map((d) => ({ id: d.external_id, title: toWorkflowFieldDocument(d).title })),
310
- passages: async (documentId) => {
311
- const parsed = await arbi.documents.getParsedContent(documentId, "final");
312
- return (parsed.chunks ?? []).flatMap(
313
- (chunk) => chunk.metadata?.chunk_ext_id && chunk.content?.trim() ? [
314
- {
315
- chunkId: chunk.metadata.chunk_ext_id,
316
- page: chunk.metadata.page_number ?? null,
317
- text: chunk.content
318
- }
319
- ] : []
320
- );
321
- },
322
- linkFor: ({ documentId, chunkId, page }) => {
323
- const url = chunkLJJJ6CYH_cjs.buildDeepLinkUrl(
324
- { workspaceId: workspaceId ?? void 0, documentId, chunkId },
325
- runtimeConfig.deploymentDomain
326
- );
327
- return page ? `${url}?page=${page}` : url;
328
- },
329
- targetOf: (href) => {
330
- let url;
331
- try {
332
- url = new URL(href, window.location.origin);
333
- } catch {
334
- return null;
335
- }
336
- const { documentId, chunkId } = chunkLJJJ6CYH_cjs.parseDeepLinkPath(url.pathname);
337
- if (!documentId || !chunkId) return null;
338
- const page = Number(url.searchParams.get("page")) || null;
339
- return { documentId, chunkId, page };
340
- },
341
- open: ({ documentId, chunkId, page }) => openDocument(documentId, { passageId: chunkId, page: page ?? void 0 }),
342
- renderDocumentPicker: (onSelect, selectedId) => /* @__PURE__ */ jsxRuntime.jsx(
343
- ReferencePicker,
344
- {
345
- documents: documentsRef.current,
346
- selectedId,
347
- onSelect
348
- }
349
- )
350
- }),
351
- [arbi, workspaceId, openDocument, runtimeConfig.deploymentDomain]
352
- );
353
- }
354
+
355
+ // src/connection/docx/useConnectedHouseTemplate.ts
354
356
  function useConnectedHouseTemplate() {
355
357
  const arbi = react$1.useArbi();
356
358
  const { mutateAsync: setWorkspaceTemplate } = react$1.useSetWorkspaceHouseTemplate();
@@ -369,7 +371,7 @@ function useConnectedHouseTemplate() {
369
371
  load: async () => {
370
372
  if (templateId) {
371
373
  await ensureWorkspaceOpen();
372
- const response = await arbi.editor.request(chunkV5OAXIBN_cjs.contentPath(templateId));
374
+ const response = await arbi.editor.request(chunkNPR5BGFF_cjs.contentPath(templateId));
373
375
  const [record] = await arbi.documents.get([templateId]).catch(() => []);
374
376
  return {
375
377
  bytes: new Uint8Array(await response.arrayBuffer()),
@@ -382,7 +384,7 @@ function useConnectedHouseTemplate() {
382
384
  const deployment = await arbi.houseTemplates.deployment();
383
385
  if (deployment) return { ...deployment, source: "deployment" };
384
386
  }
385
- return chunkV5OAXIBN_cjs.builtinHouseTemplate();
387
+ return chunkNPR5BGFF_cjs.builtinHouseTemplate();
386
388
  },
387
389
  setFromDocument: supported && isWorkspaceOwner ? async (documentId) => {
388
390
  await ensureWorkspaceOpen();
@@ -432,7 +434,7 @@ function ConnectedNativeDocxEditor({
432
434
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full min-h-0 flex-col", children: [
433
435
  openFailed && /* @__PURE__ */ jsxRuntime.jsx("p", { role: "status", className: "text-muted-foreground border-b px-3 py-2 text-xs", children: "Co-editing isn't available for this document right now, so this is a read-only copy of the last saved version." }),
434
436
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
435
- chunkV5OAXIBN_cjs.NativeDocxEditor,
437
+ chunkNPR5BGFF_cjs.NativeDocxEditor,
436
438
  {
437
439
  ...props,
438
440
  snapshot: props.snapshot || openFailed,
@@ -551,5 +553,5 @@ exports.useConnectedNativeDocxAdapter = useConnectedNativeDocxAdapter;
551
553
  exports.useConnectedWorkflowScopeSource = useConnectedWorkflowScopeSource;
552
554
  exports.useConnectedWorkspaceRole = useConnectedWorkspaceRole;
553
555
  exports.useNativeDocxSupport = useNativeDocxSupport;
554
- //# sourceMappingURL=chunk-MFMASSEO.cjs.map
555
- //# sourceMappingURL=chunk-MFMASSEO.cjs.map
556
+ //# sourceMappingURL=chunk-GGTUMLCT.cjs.map
557
+ //# sourceMappingURL=chunk-GGTUMLCT.cjs.map