@arbidocs/blocks 0.4.147 → 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 (337) 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-VUR63NMQ.js → chunk-3E2F4AHD.js} +8 -8
  33. package/dist/{chunk-VUR63NMQ.js.map → chunk-3E2F4AHD.js.map} +1 -1
  34. package/dist/{chunk-U37AYUPI.cjs → chunk-3FSXWVHW.cjs} +47 -234
  35. package/dist/chunk-3FSXWVHW.cjs.map +1 -0
  36. package/dist/{chunk-IL3WB3YX.cjs → chunk-4JNKXOFZ.cjs} +3 -3
  37. package/dist/{chunk-IL3WB3YX.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-LZRMXJIE.js → chunk-COA3S3CZ.js} +3 -3
  49. package/dist/{chunk-LZRMXJIE.js.map → chunk-COA3S3CZ.js.map} +1 -1
  50. package/dist/{chunk-SUUPR735.js → chunk-CQPFW64W.js} +5 -5
  51. package/dist/{chunk-SUUPR735.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-AINU3EJ6.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-H74HEPKT.js → chunk-HGLC566X.js} +598 -13
  71. package/dist/chunk-HGLC566X.js.map +1 -0
  72. package/dist/{chunk-AO7SK6WP.cjs → chunk-ILM42LE6.cjs} +33 -33
  73. package/dist/{chunk-AO7SK6WP.cjs.map → chunk-ILM42LE6.cjs.map} +1 -1
  74. package/dist/{chunk-LTU35TQN.cjs → chunk-IPQ5MJ4Z.cjs} +636 -31
  75. package/dist/chunk-IPQ5MJ4Z.cjs.map +1 -0
  76. package/dist/{chunk-NRFAWUVD.js → chunk-JAANWQGB.js} +157 -157
  77. package/dist/chunk-JAANWQGB.js.map +1 -0
  78. package/dist/{chunk-7RJTEWYM.js → chunk-JGOST4IL.js} +350 -64
  79. package/dist/chunk-JGOST4IL.js.map +1 -0
  80. package/dist/chunk-KHXEIEXN.js +41 -0
  81. package/dist/chunk-KHXEIEXN.js.map +1 -0
  82. package/dist/chunk-KLPRAQCE.cjs +22 -0
  83. package/dist/chunk-KLPRAQCE.cjs.map +1 -0
  84. package/dist/chunk-KQYPP72K.js +644 -0
  85. package/dist/chunk-KQYPP72K.js.map +1 -0
  86. package/dist/chunk-KUT2Y7JF.cjs +43 -0
  87. package/dist/chunk-KUT2Y7JF.cjs.map +1 -0
  88. package/dist/{chunk-6YTHQ73P.cjs → chunk-LLYZGH3L.cjs} +3 -56
  89. package/dist/chunk-LLYZGH3L.cjs.map +1 -0
  90. package/dist/{chunk-YSHIC4NJ.cjs → chunk-LXTOOUEN.cjs} +159 -154
  91. package/dist/chunk-LXTOOUEN.cjs.map +1 -0
  92. package/dist/{chunk-EVUEIBNU.js → chunk-M4S75AEJ.js} +44 -5
  93. package/dist/chunk-M4S75AEJ.js.map +1 -0
  94. package/dist/{chunk-V5OAXIBN.cjs → chunk-NPR5BGFF.cjs} +11 -11
  95. package/dist/{chunk-V5OAXIBN.cjs.map → chunk-NPR5BGFF.cjs.map} +1 -1
  96. package/dist/{chunk-PLJ7PHWU.cjs → chunk-NS7NVX4E.cjs} +3 -3
  97. package/dist/{chunk-PLJ7PHWU.cjs.map → chunk-NS7NVX4E.cjs.map} +1 -1
  98. package/dist/{chunk-T5I4NRFP.cjs → chunk-NWNAYXC7.cjs} +9 -9
  99. package/dist/{chunk-T5I4NRFP.cjs.map → chunk-NWNAYXC7.cjs.map} +1 -1
  100. package/dist/{chunk-WIZ7Z7FN.js → chunk-Q6N6MZKO.js} +47 -222
  101. package/dist/chunk-Q6N6MZKO.js.map +1 -0
  102. package/dist/{chunk-I2QSDQQV.cjs → chunk-QT3A4PFC.cjs} +21 -2
  103. package/dist/chunk-QT3A4PFC.cjs.map +1 -0
  104. package/dist/{chunk-ZM26YEOT.js → chunk-RY2SODRN.js} +3 -3
  105. package/dist/{chunk-ZM26YEOT.js.map → chunk-RY2SODRN.js.map} +1 -1
  106. package/dist/chunk-SDOEHEJP.js +208 -0
  107. package/dist/chunk-SDOEHEJP.js.map +1 -0
  108. package/dist/{chunk-DETZZBG2.cjs → chunk-SIB6C7P7.cjs} +43 -2
  109. package/dist/chunk-SIB6C7P7.cjs.map +1 -0
  110. package/dist/{chunk-MFY2ZNP6.cjs → chunk-SMN32BQ3.cjs} +4 -4
  111. package/dist/chunk-SMN32BQ3.cjs.map +1 -0
  112. package/dist/chunk-TAWPVD6C.cjs +1956 -0
  113. package/dist/chunk-TAWPVD6C.cjs.map +1 -0
  114. package/dist/chunk-TC25LGIM.js +6584 -0
  115. package/dist/chunk-TC25LGIM.js.map +1 -0
  116. package/dist/{chunk-DAHCRVPM.js → chunk-TL45OJQE.js} +85 -83
  117. package/dist/chunk-TL45OJQE.js.map +1 -0
  118. package/dist/{chunk-AOSUHWIL.js → chunk-TZOQKV64.js} +4 -37
  119. package/dist/chunk-TZOQKV64.js.map +1 -0
  120. package/dist/chunk-UTVY63DG.js +16 -0
  121. package/dist/chunk-UTVY63DG.js.map +1 -0
  122. package/dist/chunk-V4YZXGXR.cjs +6751 -0
  123. package/dist/chunk-V4YZXGXR.cjs.map +1 -0
  124. package/dist/chunk-XRWHFMHK.js +19 -0
  125. package/dist/chunk-XRWHFMHK.js.map +1 -0
  126. package/dist/{chunk-O4YPVYPO.cjs → chunk-YAEXSCUW.cjs} +364 -60
  127. package/dist/chunk-YAEXSCUW.cjs.map +1 -0
  128. package/dist/chunk-YIFCLNII.cjs +18 -0
  129. package/dist/chunk-YIFCLNII.cjs.map +1 -0
  130. package/dist/chunk-Z27QMJ6S.cjs +25 -0
  131. package/dist/chunk-Z27QMJ6S.cjs.map +1 -0
  132. package/dist/{chunk-CSI2B2H5.js → chunk-Z4NQ3TED.js} +4 -4
  133. package/dist/chunk-Z4NQ3TED.js.map +1 -0
  134. package/dist/{chunk-DWZXSPMB.cjs → chunk-ZAVEMQ37.cjs} +3 -3
  135. package/dist/{chunk-DWZXSPMB.cjs.map → chunk-ZAVEMQ37.cjs.map} +1 -1
  136. package/dist/{chunk-DGV7HQA7.js → chunk-ZLEYLCE4.js} +4 -4
  137. package/dist/chunk-ZLEYLCE4.js.map +1 -0
  138. package/dist/chunk-ZNLTEZEF.js +170 -0
  139. package/dist/chunk-ZNLTEZEF.js.map +1 -0
  140. package/dist/chunk-ZO7PJMCO.js +1907 -0
  141. package/dist/chunk-ZO7PJMCO.js.map +1 -0
  142. package/dist/citations/index.cjs +14 -14
  143. package/dist/citations/index.js +2 -2
  144. package/dist/collaboration/index.cjs +36 -36
  145. package/dist/collaboration/index.js +2 -2
  146. package/dist/connect/docx.cjs +23 -28
  147. package/dist/connect/docx.cjs.map +1 -1
  148. package/dist/connect/docx.js +12 -28
  149. package/dist/connect/docx.js.map +1 -1
  150. package/dist/connect/index.cjs +8661 -2823
  151. package/dist/connect/index.cjs.map +1 -1
  152. package/dist/connect/index.d.ts +10 -2
  153. package/dist/connect/index.js +8468 -2671
  154. package/dist/connect/index.js.map +1 -1
  155. package/dist/connect/viewer.cjs +1229 -0
  156. package/dist/connect/viewer.cjs.map +1 -0
  157. package/dist/connect/viewer.d.ts +8 -0
  158. package/dist/connect/viewer.js +1226 -0
  159. package/dist/connect/viewer.js.map +1 -0
  160. package/dist/connection/ConnectedWorkflowsTable.d.ts +2 -12
  161. package/dist/connection/ai.d.ts +2 -9
  162. package/dist/connection/billing/AddAddonDialog.d.ts +24 -0
  163. package/dist/connection/billing/BillingCard.d.ts +18 -0
  164. package/dist/connection/billing/BillingProjectEntity.d.ts +9 -0
  165. package/dist/connection/billing/ChangePlanDialog.d.ts +20 -0
  166. package/dist/connection/billing/ChangeProPlan.d.ts +20 -0
  167. package/dist/connection/billing/CheckoutTotal.d.ts +12 -0
  168. package/dist/connection/billing/DailyCapEditor.d.ts +4 -0
  169. package/dist/connection/billing/InvoicesModal.d.ts +6 -0
  170. package/dist/connection/billing/NewProjectFlow.d.ts +14 -0
  171. package/dist/connection/billing/PlanChangeLines.d.ts +13 -0
  172. package/dist/connection/billing/PlanSelector.d.ts +50 -0
  173. package/dist/connection/billing/ProjectBilling.d.ts +24 -0
  174. package/dist/connection/billing/ProjectDetail.d.ts +16 -0
  175. package/dist/connection/billing/ProjectUsageCard.d.ts +21 -0
  176. package/dist/connection/billing/ProjectUsageContent.d.ts +18 -0
  177. package/dist/connection/billing/ProjectsTable.d.ts +13 -0
  178. package/dist/connection/billing/ReduceAddonDialog.d.ts +18 -0
  179. package/dist/connection/billing/ReferralReward.d.ts +32 -0
  180. package/dist/connection/billing/SharedProjects.d.ts +13 -0
  181. package/dist/connection/billing/StripeCheckoutModal.d.ts +32 -0
  182. package/dist/connection/billing/SubscriptionPlans.d.ts +15 -0
  183. package/dist/connection/billing/SubscriptionStatus.d.ts +10 -0
  184. package/dist/connection/billing/addon-pricing.d.ts +97 -0
  185. package/dist/connection/billing/api-error.d.ts +6 -0
  186. package/dist/connection/billing/billing-country.d.ts +14 -0
  187. package/dist/connection/billing/billing-focus.d.ts +11 -0
  188. package/dist/connection/billing/index.d.ts +22 -0
  189. package/dist/connection/billing/plan-badge.d.ts +15 -0
  190. package/dist/connection/billing/plan-change-outcome.d.ts +15 -0
  191. package/dist/connection/billing/plan-constants.d.ts +29 -0
  192. package/dist/connection/billing/plan-pricing.d.ts +67 -0
  193. package/dist/connection/billing/quota-items.d.ts +33 -0
  194. package/dist/connection/billing/referral-reward.d.ts +28 -0
  195. package/dist/connection/billing/refusal-copy.d.ts +5 -0
  196. package/dist/connection/billing/reward-balance.d.ts +19 -0
  197. package/dist/connection/billing/support.d.ts +35 -0
  198. package/dist/connection/billing/tax-quote.d.ts +36 -0
  199. package/dist/connection/billing/useAddonPurchase.d.ts +32 -0
  200. package/dist/connection/billing/useAutoRefreshPendingProjects.d.ts +11 -0
  201. package/dist/connection/billing/useCheckoutQuote.d.ts +30 -0
  202. package/dist/connection/billing/useOpenBillingPortal.d.ts +12 -0
  203. package/dist/connection/calendar/CalendarSettingsDialog.d.ts +1 -1
  204. package/dist/connection/facts/ConnectedFactsPage.d.ts +50 -0
  205. package/dist/connection/facts/FactMarkdownEditor.d.ts +57 -0
  206. package/dist/connection/facts/FactSourcesPopover.d.ts +38 -0
  207. package/dist/connection/facts/FactTextEditor.d.ts +2 -0
  208. package/dist/connection/facts/factNouns.d.ts +4 -0
  209. package/dist/connection/facts/factPageColumns.d.ts +37 -0
  210. package/dist/connection/facts/types.d.ts +127 -0
  211. package/dist/connection/facts/useFactActions.d.ts +10 -0
  212. package/dist/connection/facts/useFactComposer.d.ts +54 -0
  213. package/dist/connection/facts/useFactFilters.d.ts +101 -0
  214. package/dist/connection/facts/useFactSelection.d.ts +82 -0
  215. package/dist/connection/facts/useFactsGrid.d.ts +87 -0
  216. package/dist/connection/facts/useFactsPageView.d.ts +4 -0
  217. package/dist/connection/mail/ConnectedMailComposer.d.ts +3 -1
  218. package/dist/connection/mail/ConnectedMailbox.d.ts +4 -2
  219. package/dist/connection/mail/MailComposerForm.d.ts +4 -2
  220. package/dist/connection/mail/MailRecipientInput.d.ts +14 -0
  221. package/dist/connection/mail/index.d.ts +1 -1
  222. package/dist/connection/mail/types.d.ts +10 -0
  223. package/dist/connection/search/ConnectedSearchPage.d.ts +64 -0
  224. package/dist/connection/search/SearchResultRows.d.ts +38 -0
  225. package/dist/connection/search/index.d.ts +2 -0
  226. package/dist/connection/tags/ConnectedTagTable.d.ts +108 -0
  227. package/dist/connection/tags/ConnectedTagsPage.d.ts +55 -0
  228. package/dist/connection/tags/DocTagPassages.d.ts +25 -0
  229. package/dist/connection/tags/GlossaryExport.d.ts +7 -0
  230. package/dist/connection/tags/TagCombineFilter.d.ts +14 -0
  231. package/dist/connection/tags/TagPlacement.d.ts +16 -0
  232. package/dist/connection/tags/TagsPageSections.d.ts +36 -0
  233. package/dist/connection/tags/tagCombine.d.ts +55 -0
  234. package/dist/connection/useConnectedWorkNotifications.d.ts +7 -24
  235. package/dist/connection/viewer/ConnectedDocumentToolsProvider.d.ts +11 -0
  236. package/dist/connection/viewer/ConnectedDocumentViewer.d.ts +21 -0
  237. package/dist/connection/viewer/FinaliseTranslationButton.d.ts +15 -0
  238. package/dist/connection/viewer/ViewerPdfPane.d.ts +46 -0
  239. package/dist/connection/viewer/support.d.ts +79 -0
  240. package/dist/connection/viewer/useImageCrop.d.ts +13 -0
  241. package/dist/connection/viewer/useViewedDocument.d.ts +70 -0
  242. package/dist/connection/viewer/useViewerBlobs.d.ts +15 -0
  243. package/dist/connection/viewer/useViewerTabs.d.ts +18 -0
  244. package/dist/connection/viewer/useViewerVersions.d.ts +11 -0
  245. package/dist/connection/workspace-settings/useConnectedWorkspaceSettings.d.ts +6 -0
  246. package/dist/document-tools/index.cjs +59 -652
  247. package/dist/document-tools/index.cjs.map +1 -1
  248. package/dist/document-tools/index.js +2 -641
  249. package/dist/document-tools/index.js.map +1 -1
  250. package/dist/docx/index.cjs +48 -47
  251. package/dist/docx/index.js +4 -3
  252. package/dist/facts/FactsBulkBar.d.ts +6 -3
  253. package/dist/facts/cited-version-ref.d.ts +1 -0
  254. package/dist/facts/index.cjs +206 -1942
  255. package/dist/facts/index.cjs.map +1 -1
  256. package/dist/facts/index.d.ts +1 -0
  257. package/dist/facts/index.js +15 -1897
  258. package/dist/facts/index.js.map +1 -1
  259. package/dist/files/ViewerChrome.d.ts +5 -4
  260. package/dist/files/ViewerControlBar.d.ts +12 -0
  261. package/dist/files/doc-labels.d.ts +35 -0
  262. package/dist/files/grid/FilterButton.d.ts +12 -0
  263. package/dist/files/grid/RowDensityControl.d.ts +18 -0
  264. package/dist/files/grid/row-density.d.ts +27 -0
  265. package/dist/files/index.cjs +779 -7100
  266. package/dist/files/index.cjs.map +1 -1
  267. package/dist/files/index.d.ts +5 -0
  268. package/dist/files/index.js +14 -6919
  269. package/dist/files/index.js.map +1 -1
  270. package/dist/home/index.cjs +2 -2
  271. package/dist/home/index.js +2 -2
  272. package/dist/index.cjs +1041 -1257
  273. package/dist/index.cjs.map +1 -1
  274. package/dist/index.js +24 -357
  275. package/dist/index.js.map +1 -1
  276. package/dist/retrieval/SearchSnippet.d.ts +6 -0
  277. package/dist/retrieval/index.cjs +75 -42
  278. package/dist/retrieval/index.d.ts +2 -0
  279. package/dist/retrieval/index.js +3 -2
  280. package/dist/retrieval/search-results.d.ts +46 -0
  281. package/dist/settings/Billing.d.ts +0 -66
  282. package/dist/settings/SubscriptionParts.d.ts +1 -50
  283. package/dist/settings/index.cjs +170 -218
  284. package/dist/settings/index.d.ts +3 -2
  285. package/dist/settings/index.js +3 -3
  286. package/dist/settings/inverted-index-filter.d.ts +26 -0
  287. package/dist/shell/index.cjs +2 -2
  288. package/dist/shell/index.js +2 -2
  289. package/dist/studio/index.cjs +5 -5
  290. package/dist/studio/index.js +4 -4
  291. package/dist/tags/definitions.d.ts +10 -0
  292. package/dist/tags/index.d.ts +4 -1
  293. package/dist/tags/page/ExtractEntitiesDialog.d.ts +24 -0
  294. package/dist/tags/page/TagPicker.d.ts +16 -0
  295. package/dist/tags/page/tagsPageLabels.d.ts +36 -0
  296. package/dist/workflow-canvas/index.cjs +21 -22
  297. package/dist/workflow-canvas/index.cjs.map +1 -1
  298. package/dist/workflow-canvas/index.js +8 -9
  299. package/dist/workflow-canvas/index.js.map +1 -1
  300. package/node_modules/@arbidocs/coedit/package.json +1 -1
  301. package/package.json +13 -4
  302. package/dist/calendar/access-setup.d.ts +0 -8
  303. package/dist/chunk-2MJWWPHY.js.map +0 -1
  304. package/dist/chunk-3AFWGEDJ.cjs +0 -53
  305. package/dist/chunk-3AFWGEDJ.cjs.map +0 -1
  306. package/dist/chunk-6YTHQ73P.cjs.map +0 -1
  307. package/dist/chunk-7RJTEWYM.js.map +0 -1
  308. package/dist/chunk-AINU3EJ6.cjs.map +0 -1
  309. package/dist/chunk-AOSUHWIL.js.map +0 -1
  310. package/dist/chunk-B3AHCIV5.js.map +0 -1
  311. package/dist/chunk-CSI2B2H5.js.map +0 -1
  312. package/dist/chunk-DAHCRVPM.js.map +0 -1
  313. package/dist/chunk-DETZZBG2.cjs.map +0 -1
  314. package/dist/chunk-DGV7HQA7.js.map +0 -1
  315. package/dist/chunk-EVUEIBNU.js.map +0 -1
  316. package/dist/chunk-H74HEPKT.js.map +0 -1
  317. package/dist/chunk-I2QSDQQV.cjs.map +0 -1
  318. package/dist/chunk-J5CWKFSC.js +0 -170
  319. package/dist/chunk-J5CWKFSC.js.map +0 -1
  320. package/dist/chunk-LTU35TQN.cjs.map +0 -1
  321. package/dist/chunk-MFY2ZNP6.cjs.map +0 -1
  322. package/dist/chunk-MHFF5N65.cjs.map +0 -1
  323. package/dist/chunk-NRFAWUVD.js.map +0 -1
  324. package/dist/chunk-O4YPVYPO.cjs.map +0 -1
  325. package/dist/chunk-ODRHHWHY.cjs.map +0 -1
  326. package/dist/chunk-QI6AIHWP.cjs.map +0 -1
  327. package/dist/chunk-QXMR5YHC.js.map +0 -1
  328. package/dist/chunk-RFXJYIDV.js +0 -50
  329. package/dist/chunk-RFXJYIDV.js.map +0 -1
  330. package/dist/chunk-U37AYUPI.cjs.map +0 -1
  331. package/dist/chunk-WIZ7Z7FN.js.map +0 -1
  332. package/dist/chunk-XVUOMWMD.cjs +0 -177
  333. package/dist/chunk-XVUOMWMD.cjs.map +0 -1
  334. package/dist/chunk-YSHIC4NJ.cjs.map +0 -1
  335. package/dist/connection/ConnectedTagTable.d.ts +0 -32
  336. package/dist/connection/calendar/CopyField.d.ts +0 -9
  337. package/dist/connection/calendar/OpenAccessPanel.d.ts +0 -7
@@ -0,0 +1,19 @@
1
+ "use client";
2
+ import { createContext, useContext } from 'react';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ // src/connection/viewer/support.tsx
6
+ var DocumentViewerSupportContext = createContext({});
7
+ function DocumentViewerSupportProvider({
8
+ value,
9
+ children
10
+ }) {
11
+ return /* @__PURE__ */ jsx(DocumentViewerSupportContext.Provider, { value, children });
12
+ }
13
+ function useDocumentViewerSupport() {
14
+ return useContext(DocumentViewerSupportContext);
15
+ }
16
+
17
+ export { DocumentViewerSupportProvider, useDocumentViewerSupport };
18
+ //# sourceMappingURL=chunk-XRWHFMHK.js.map
19
+ //# sourceMappingURL=chunk-XRWHFMHK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/connection/viewer/support.tsx"],"names":[],"mappings":";;;;AA6EA,IAAM,4BAAA,GAA+B,aAAA,CAAqC,EAAE,CAAA;AAErE,SAAS,6BAAA,CAA8B;AAAA,EAC5C,KAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,uBACE,GAAA,CAAC,4BAAA,CAA6B,QAAA,EAA7B,EAAsC,OACpC,QAAA,EACH,CAAA;AAEJ;AAEO,SAAS,wBAAA,GAAkD;AAChE,EAAA,OAAO,WAAW,4BAA4B,CAAA;AAChD","file":"chunk-XRWHFMHK.js","sourcesContent":["/**\n * What a host adds to the connected document viewer. The viewer reads documents, versions, PDFs,\n * markup and signatures on the signed-in session by itself; these are the host's own things it\n * cannot know: documents the host makes on the client (an artifact streaming in from a chat, an\n * unsaved draft), the host's dialogs and workflows a document action opens, and how the host lays\n * the viewer out. Every field is optional: without one the viewer offers less (no Translate button,\n * no draft controls), never something that does nothing.\n */\n\nimport { createContext, useContext, type ReactNode } from 'react'\nimport type { components } from '@arbidocs/client'\n\n/** A document's record, as the viewer reads it. */\nexport type ViewerDocumentRecord = components['schemas']['DocResponse']\n\n/** An artifact being generated in a chat, shown in the viewer as it streams. */\nexport interface ViewerStreamingDocument {\n title?: string | null\n /** The content so far (Markdown, or the html/react source of a live artifact). */\n content: string\n /** How it is carried: a document draft, a live `html` / `react` artifact, an `image`. */\n mode?: string | null\n isComplete: boolean\n}\n\n/** A document the user started on the client, with no backend record until it is saved. */\nexport interface ViewerDraftDocument {\n kind: 'text' | 'audio' | 'photo' | 'video'\n title?: string | null\n /** A text draft's starting content. */\n content?: string | null\n}\n\nexport interface DocumentViewerSupport {\n /** Artifacts streaming in, by document id. */\n streamingDocuments?: Readonly<Record<string, ViewerStreamingDocument>>\n /** Unsaved drafts, by their client id. */\n draftDocuments?: Readonly<Record<string, ViewerDraftDocument>>\n /** A draft's kind (text, photo, audio, video), in place of the tabs. */\n renderDraftKind?: (draftId: string) => ReactNode\n /** A draft's name (editable), in place of the title. */\n renderDraftTitle?: (draftId: string) => ReactNode\n /** The recorder of a photo, audio or video draft: the whole body of the viewer. */\n renderCaptureDraft?: (draftId: string) => ReactNode\n /** A text draft was saved as `documentId`; the viewer shows it next. */\n onDraftSaved?: (draftId: string, documentId: string) => void\n /** The copy of a document kept on this device, for when the network is down. */\n loadOfflineCopy?: (document: ViewerDocumentRecord) => Promise<Blob | undefined>\n /** Documents related to the one open (near duplicates), beside its name. */\n renderRelated?: (document: ViewerDocumentRecord) => ReactNode\n /** A document as a pill (the comparison's other side). Default: its name. */\n renderDocumentPill?: (documentId: string) => ReactNode\n /** Open the host's share dialog for the document. Default: share it with the workspace. */\n share?: (document: { id: string; name: string | undefined; isPrivate: boolean }) => void\n /** Ask the assistant about a version (`doc-…@v2`) open read-only. Absent: not offered. */\n askAboutVersion?: (versionRef: string) => void\n /** Translate the document (or the version) on screen. Absent: not offered. */\n translate?: (documentRef: string) => void\n /** Start an image generation from the image on screen. Absent: not offered. */\n useImageAsReference?: (documentId: string) => void\n /** The text (parsed) view of the document; the viewer gives it the page and zoom. */\n renderParsedView?: (props: ParsedViewProps) => ReactNode\n /** How dates read (versions, signatures). Default: `fmtDate`. */\n formatDate?: (iso: string) => string\n /** The viewer is shown in another window: PDF pages render without the page's web fonts. */\n isDetached?: boolean\n}\n\n/** What the viewer hands the text view. */\nexport interface ParsedViewProps {\n documentId: string\n onLoadSuccess: (totalPages: number) => void\n scrollTrigger: number\n zoom: number\n onZoomChange: (zoom: number) => void\n}\n\nconst DocumentViewerSupportContext = createContext<DocumentViewerSupport>({})\n\nexport function DocumentViewerSupportProvider({\n value,\n children,\n}: {\n value: DocumentViewerSupport\n children: ReactNode\n}) {\n return (\n <DocumentViewerSupportContext.Provider value={value}>\n {children}\n </DocumentViewerSupportContext.Provider>\n )\n}\n\nexport function useDocumentViewerSupport(): DocumentViewerSupport {\n return useContext(DocumentViewerSupportContext)\n}\n"]}
@@ -1,12 +1,353 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
+ var chunkFAXXN7KI_cjs = require('./chunk-FAXXN7KI.cjs');
4
5
  var chunkMHVNT4J3_cjs = require('./chunk-MHVNT4J3.cjs');
5
- var react = require('react');
6
6
  var lucideReact = require('lucide-react');
7
7
  var ui = require('@arbidocs/react/ui');
8
8
  var jsxRuntime = require('react/jsx-runtime');
9
+ var react = require('react');
10
+
11
+ function FilesFilterBar({ className, ...props }) {
12
+ return /* @__PURE__ */ jsxRuntime.jsx(
13
+ "div",
14
+ {
15
+ "data-slot": "files-filter-bar",
16
+ className: ui.cn("flex min-w-0 flex-1 flex-nowrap items-center gap-2", className),
17
+ ...props
18
+ }
19
+ );
20
+ }
21
+ function FilesTagsButton({
22
+ onClick,
23
+ label = "Tags",
24
+ className,
25
+ testId
26
+ }) {
27
+ return /* @__PURE__ */ jsxRuntime.jsxs(
28
+ ui.Button,
29
+ {
30
+ variant: "ghost",
31
+ size: "sm",
32
+ className: ui.cn("h-8 shrink-0 gap-1.5 px-2 font-normal pointer-coarse:h-11", className),
33
+ onClick,
34
+ "data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "filter-bar-tags-button" }),
35
+ children: [
36
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.BookMarked, { className: "h-3.5 w-3.5" }),
37
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm max-[480px]:sr-only", children: label })
38
+ ]
39
+ }
40
+ );
41
+ }
42
+ function FilesViewCenter({ className, ...props }) {
43
+ return /* @__PURE__ */ jsxRuntime.jsx(
44
+ "div",
45
+ {
46
+ "data-slot": "files-view-center",
47
+ className: ui.cn("@container flex min-w-[9.5rem] flex-1 items-center gap-2", className),
48
+ ...props
49
+ }
50
+ );
51
+ }
52
+ function FilesModalFooter({ children, className }) {
53
+ return /* @__PURE__ */ jsxRuntime.jsx(
54
+ "div",
55
+ {
56
+ "data-slot": "files-modal-footer",
57
+ className: ui.cn(
58
+ // Sticks to the bottom of the modal's scrolling body so Close is always reachable.
59
+ "sticky bottom-0 z-40 flex justify-end gap-2 border-t border-border bg-background px-4 py-3 sm:px-6",
60
+ className
61
+ ),
62
+ children
63
+ }
64
+ );
65
+ }
9
66
 
67
+ // src/files/grid/row-density.ts
68
+ var LINE_PX = 14 * 1.35;
69
+ var CHROME = 18;
70
+ var MIN_LINES = 1;
71
+ var MAX_LINES = 10;
72
+ var rowHeightForLines = (lines) => Math.ceil(lines * LINE_PX + CHROME);
73
+ var linesForRowHeight = (height) => Math.max(MIN_LINES, Math.min(MAX_LINES, Math.floor((height - CHROME) / LINE_PX)));
74
+ var ROW_MIN = rowHeightForLines(MIN_LINES);
75
+ function RowDensityControl({
76
+ rowHeight,
77
+ onRowHeightChange,
78
+ testId = "documents-density"
79
+ }) {
80
+ const lines = linesForRowHeight(rowHeight);
81
+ const setLines = (next) => onRowHeightChange(rowHeightForLines(Math.max(MIN_LINES, Math.min(MAX_LINES, next))));
82
+ return /* @__PURE__ */ jsxRuntime.jsxs(ui.Tooltip, { delayDuration: 300, children: [
83
+ /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-7 items-center gap-1.5 rounded-md border border-input px-2 pointer-coarse:h-11", children: [
84
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "hidden text-xs text-muted-foreground md:inline", children: "Rows" }),
85
+ /* @__PURE__ */ jsxRuntime.jsx(
86
+ "button",
87
+ {
88
+ type: "button",
89
+ "aria-label": "Shorter rows",
90
+ "data-testid": `${testId}-out`,
91
+ onClick: () => setLines(lines - 1),
92
+ disabled: lines <= MIN_LINES,
93
+ className: "flex items-center justify-center text-muted-foreground hover:text-foreground disabled:opacity-40 pointer-coarse:size-11",
94
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ListChevronsUpDown, { className: "h-4 w-4" })
95
+ }
96
+ ),
97
+ /* @__PURE__ */ jsxRuntime.jsx(
98
+ ui.Slider,
99
+ {
100
+ value: [lines],
101
+ min: MIN_LINES,
102
+ max: MAX_LINES,
103
+ step: 1,
104
+ onValueChange: ([value]) => setLines(value),
105
+ "aria-label": "Row height",
106
+ "data-testid": testId,
107
+ className: "w-20"
108
+ }
109
+ )
110
+ ] }) }),
111
+ /* @__PURE__ */ jsxRuntime.jsxs(ui.TooltipContent, { children: [
112
+ "Row height: ",
113
+ lines,
114
+ " line",
115
+ lines === 1 ? "" : "s"
116
+ ] })
117
+ ] });
118
+ }
119
+ function FolderBreadcrumb({
120
+ segments,
121
+ size = "xs"
122
+ }) {
123
+ const text = size === "sm" ? "text-sm" : "text-xs";
124
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { "data-slot": "folder-breadcrumb", className: "min-w-0 truncate", children: segments.map((part, i, arr) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-0.5", children: [
125
+ i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `mx-0.5 ${text} text-muted-foreground/50`, children: "/" }),
126
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: i < arr.length - 1 ? `${text} text-muted-foreground` : "", children: part })
127
+ ] }, i)) });
128
+ }
129
+ function FolderCell({
130
+ folder,
131
+ segments,
132
+ icon,
133
+ isEditable,
134
+ picker,
135
+ className
136
+ }) {
137
+ const display = folder ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
138
+ icon ?? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FolderOpen, { className: "h-3.5 w-3.5 flex-none shrink-0 text-muted-foreground" }),
139
+ /* @__PURE__ */ jsxRuntime.jsx(FolderBreadcrumb, { segments })
140
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "\u2014" });
141
+ const title = folder || void 0;
142
+ if (!isEditable) {
143
+ return /* @__PURE__ */ jsxRuntime.jsx(
144
+ "div",
145
+ {
146
+ "data-slot": "folder-cell",
147
+ title,
148
+ className: ui.cn("flex h-full w-full min-w-0 items-center gap-1.5 text-sm", className),
149
+ children: display
150
+ }
151
+ );
152
+ }
153
+ return /* @__PURE__ */ jsxRuntime.jsxs(ui.Popover, { children: [
154
+ /* @__PURE__ */ jsxRuntime.jsx(ui.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
155
+ "button",
156
+ {
157
+ type: "button",
158
+ "data-slot": "folder-cell",
159
+ title,
160
+ className: ui.cn(
161
+ "flex h-full w-full min-w-0 cursor-pointer items-center gap-1.5 text-left text-sm hover:text-primary",
162
+ className
163
+ ),
164
+ children: display
165
+ }
166
+ ) }),
167
+ /* @__PURE__ */ jsxRuntime.jsx(
168
+ ui.PopoverContent,
169
+ {
170
+ className: "w-max min-w-[220px] max-w-[min(640px,92vw)] p-0",
171
+ align: "start",
172
+ side: "bottom",
173
+ sideOffset: 4,
174
+ children: picker
175
+ }
176
+ )
177
+ ] });
178
+ }
179
+ var FIELD_SURFACE = "rounded-md border border-input bg-muted/40 text-sm transition-colors hover:bg-background";
180
+ function FieldValue({ tone = "default", isMono, isTruncated, children }) {
181
+ return /* @__PURE__ */ jsxRuntime.jsx(
182
+ "span",
183
+ {
184
+ "data-slot": "field-value",
185
+ className: ui.cn(
186
+ "text-sm",
187
+ tone === "strong" && "font-semibold",
188
+ tone === "muted" && "text-muted-foreground",
189
+ isMono && "font-mono",
190
+ isTruncated && "truncate"
191
+ ),
192
+ children
193
+ }
194
+ );
195
+ }
196
+ function FieldFolderSelect({ folder, picker }) {
197
+ return /* @__PURE__ */ jsxRuntime.jsxs(ui.Popover, { children: [
198
+ /* @__PURE__ */ jsxRuntime.jsx(ui.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
199
+ "button",
200
+ {
201
+ type: "button",
202
+ "data-slot": "field-folder-select",
203
+ className: ui.cn(
204
+ FIELD_SURFACE,
205
+ "flex h-9 w-full min-w-0 items-center gap-1.5 px-3 text-left hover:text-primary pointer-coarse:h-11"
206
+ ),
207
+ children: [
208
+ folder ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
209
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FolderOpen, { className: "size-3.5 flex-none shrink-0 text-yellow-600" }),
210
+ /* @__PURE__ */ jsxRuntime.jsx(FolderBreadcrumb, { segments: folder.split("/"), size: "sm" })
211
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "\u2014" }),
212
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronsUpDown, { className: "ml-auto size-3.5 shrink-0 opacity-50" })
213
+ ]
214
+ }
215
+ ) }),
216
+ /* @__PURE__ */ jsxRuntime.jsx(
217
+ ui.PopoverContent,
218
+ {
219
+ className: "w-max min-w-[var(--radix-popover-trigger-width)] max-w-[min(640px,92vw)] p-0",
220
+ align: "start",
221
+ side: "bottom",
222
+ sideOffset: 4,
223
+ children: picker
224
+ }
225
+ )
226
+ ] });
227
+ }
228
+ function FieldFolderValue({ folder }) {
229
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1.5 text-sm", children: folder ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
230
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FolderOpen, { className: "size-3.5 shrink-0 text-yellow-600" }),
231
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: folder })
232
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "\u2014" }) });
233
+ }
234
+ function FieldLabelsSelect({
235
+ options,
236
+ appliedIds,
237
+ displayedIds = appliedIds,
238
+ onToggle,
239
+ onCreate,
240
+ emptyText = "Click to add",
241
+ labels
242
+ }) {
243
+ const applied = react.useMemo(
244
+ () => options.filter((o) => displayedIds.has(o.id)),
245
+ [options, displayedIds]
246
+ );
247
+ return /* @__PURE__ */ jsxRuntime.jsxs(ui.Popover, { children: [
248
+ /* @__PURE__ */ jsxRuntime.jsx(ui.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
249
+ "button",
250
+ {
251
+ type: "button",
252
+ "data-slot": "field-labels-select",
253
+ className: ui.cn(
254
+ FIELD_SURFACE,
255
+ "flex min-h-9 w-full cursor-pointer items-center px-3 py-1.5 text-left pointer-coarse:min-h-11"
256
+ ),
257
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-[28px] flex-wrap items-center gap-1.5", children: [
258
+ applied.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm italic text-muted-foreground", children: emptyText }),
259
+ applied.map((o) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-1 text-sm font-medium", children: [
260
+ /* @__PURE__ */ jsxRuntime.jsx(
261
+ "span",
262
+ {
263
+ className: "flex size-4 shrink-0 items-center justify-center rounded border-2",
264
+ style: { borderColor: o.color, backgroundColor: o.color },
265
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "size-3 text-white", strokeWidth: 3 })
266
+ }
267
+ ),
268
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "max-w-[280px] truncate", children: o.name })
269
+ ] }, o.id))
270
+ ] })
271
+ }
272
+ ) }),
273
+ /* @__PURE__ */ jsxRuntime.jsx(ui.PopoverContent, { className: "w-[360px] p-0", align: "start", side: "bottom", sideOffset: 4, children: /* @__PURE__ */ jsxRuntime.jsx(
274
+ chunkFAXXN7KI_cjs.LabelPickerList,
275
+ {
276
+ options,
277
+ appliedIds,
278
+ onToggle,
279
+ onCreate,
280
+ labels: { ...chunkFAXXN7KI_cjs.DEFAULT_LABEL_MULTI_SELECT_LABELS, ...labels }
281
+ }
282
+ ) })
283
+ ] });
284
+ }
285
+ function FieldNativeSelect({
286
+ value,
287
+ options,
288
+ onChange,
289
+ emptyLabel = "--",
290
+ ariaLabel
291
+ }) {
292
+ return /* @__PURE__ */ jsxRuntime.jsxs(
293
+ "select",
294
+ {
295
+ value,
296
+ "aria-label": ariaLabel,
297
+ onChange: (e) => onChange(e.target.value),
298
+ className: "h-9 w-full rounded-md border border-input bg-muted/40 px-3 text-sm transition-colors focus:bg-background focus:outline-none focus:ring-1 focus:ring-ring pointer-coarse:h-11",
299
+ children: [
300
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: emptyLabel }),
301
+ options.map((opt) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: opt, children: opt }, opt))
302
+ ]
303
+ }
304
+ );
305
+ }
306
+ function FieldAttribution({ avatar, date, lines }) {
307
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1", "data-slot": "field-attribution", children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Tooltip, { children: [
308
+ /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
309
+ avatar,
310
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: date })
311
+ ] }) }),
312
+ /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipContent, { side: "bottom", children: lines.map((line, i) => /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm", children: line }, i)) })
313
+ ] }) });
314
+ }
315
+ function FieldWithAttribution({
316
+ attribution,
317
+ children
318
+ }) {
319
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "group/doctag relative", "data-slot": "field-with-attribution", children: [
320
+ children,
321
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute right-0 top-0 bg-background/90 pl-2 opacity-0 transition-opacity group-focus-within/doctag:opacity-100 group-hover/doctag:opacity-100 pointer-coarse:opacity-100", children: attribution })
322
+ ] });
323
+ }
324
+ var FilterButton = ({ params, colId }) => {
325
+ const [isFilterActive, setIsFilterActive] = react.useState(false);
326
+ const btnRef = react.useRef(null);
327
+ react.useEffect(() => {
328
+ const check = () => setIsFilterActive(!!params.api.getFilterModel()[colId]);
329
+ check();
330
+ params.api.addEventListener("filterChanged", check);
331
+ return () => {
332
+ if (!params.api.isDestroyed()) params.api.removeEventListener("filterChanged", check);
333
+ };
334
+ }, [params.api, colId]);
335
+ return /* @__PURE__ */ jsxRuntime.jsx(
336
+ "span",
337
+ {
338
+ ref: btnRef,
339
+ role: "button",
340
+ "aria-label": "Filter",
341
+ onClick: (e) => {
342
+ e.stopPropagation();
343
+ if (btnRef.current) params.showFilter(btnRef.current);
344
+ },
345
+ className: `ag-header-icon ag-header-cell-filter-button ag-header-label-icon ${isFilterActive ? "ag-filter-active" : ""}`,
346
+ "aria-hidden": "false",
347
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ag-icon ag-icon-filter" })
348
+ }
349
+ );
350
+ };
10
351
  var DEFAULT_FOLDER_PICKER_LABELS = {
11
352
  none: "None",
12
353
  removeFromFolder: "Remove from folder",
@@ -99,7 +440,7 @@ function FolderTree({
99
440
  ] })
100
441
  ] });
101
442
  }
102
- function FolderBreadcrumb({ folder }) {
443
+ function FolderBreadcrumb2({ folder }) {
103
444
  const parts = folder.split("/");
104
445
  return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "whitespace-nowrap", children: parts.map((part, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-0.5", children: [
105
446
  i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mx-0.5 text-sm text-muted-foreground/50", children: "/" }),
@@ -173,7 +514,7 @@ function FolderCommandList({
173
514
  className: "cursor-pointer text-sm",
174
515
  children: [
175
516
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FolderOpen, { className: "mr-1.5 size-3.5 flex-none shrink-0 text-yellow-text" }),
176
- /* @__PURE__ */ jsxRuntime.jsx(FolderBreadcrumb, { folder }),
517
+ /* @__PURE__ */ jsxRuntime.jsx(FolderBreadcrumb2, { folder }),
177
518
  value === folder && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-auto flex-none text-sm text-primary", children: "\u2713" })
178
519
  ]
179
520
  },
@@ -303,71 +644,34 @@ function FolderFilterButton({
303
644
  )
304
645
  ] });
305
646
  }
306
- function FilesFilterBar({ className, ...props }) {
307
- return /* @__PURE__ */ jsxRuntime.jsx(
308
- "div",
309
- {
310
- "data-slot": "files-filter-bar",
311
- className: ui.cn("flex min-w-0 flex-1 flex-nowrap items-center gap-2", className),
312
- ...props
313
- }
314
- );
315
- }
316
- function FilesTagsButton({
317
- onClick,
318
- label = "Tags",
319
- className,
320
- testId
321
- }) {
322
- return /* @__PURE__ */ jsxRuntime.jsxs(
323
- ui.Button,
324
- {
325
- variant: "ghost",
326
- size: "sm",
327
- className: ui.cn("h-8 shrink-0 gap-1.5 px-2 font-normal pointer-coarse:h-11", className),
328
- onClick,
329
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "filter-bar-tags-button" }),
330
- children: [
331
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.BookMarked, { className: "h-3.5 w-3.5" }),
332
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm max-[480px]:sr-only", children: label })
333
- ]
334
- }
335
- );
336
- }
337
- function FilesViewCenter({ className, ...props }) {
338
- return /* @__PURE__ */ jsxRuntime.jsx(
339
- "div",
340
- {
341
- "data-slot": "files-view-center",
342
- className: ui.cn("@container flex min-w-[9.5rem] flex-1 items-center gap-2", className),
343
- ...props
344
- }
345
- );
346
- }
347
- function FilesModalFooter({ children, className }) {
348
- return /* @__PURE__ */ jsxRuntime.jsx(
349
- "div",
350
- {
351
- "data-slot": "files-modal-footer",
352
- className: ui.cn(
353
- // Sticks to the bottom of the modal's scrolling body so Close is always reachable.
354
- "sticky bottom-0 z-40 flex justify-end gap-2 border-t border-border bg-background px-4 py-3 sm:px-6",
355
- className
356
- ),
357
- children
358
- }
359
- );
360
- }
361
647
 
648
+ exports.CHROME = CHROME;
362
649
  exports.DEFAULT_FOLDER_FILTER_LABELS = DEFAULT_FOLDER_FILTER_LABELS;
363
650
  exports.DEFAULT_FOLDER_PICKER_LABELS = DEFAULT_FOLDER_PICKER_LABELS;
651
+ exports.FieldAttribution = FieldAttribution;
652
+ exports.FieldFolderSelect = FieldFolderSelect;
653
+ exports.FieldFolderValue = FieldFolderValue;
654
+ exports.FieldLabelsSelect = FieldLabelsSelect;
655
+ exports.FieldNativeSelect = FieldNativeSelect;
656
+ exports.FieldValue = FieldValue;
657
+ exports.FieldWithAttribution = FieldWithAttribution;
364
658
  exports.FilesFilterBar = FilesFilterBar;
365
659
  exports.FilesModalFooter = FilesModalFooter;
366
660
  exports.FilesTagsButton = FilesTagsButton;
367
661
  exports.FilesViewCenter = FilesViewCenter;
662
+ exports.FilterButton = FilterButton;
663
+ exports.FolderBreadcrumb = FolderBreadcrumb;
664
+ exports.FolderCell = FolderCell;
368
665
  exports.FolderCommandList = FolderCommandList;
369
666
  exports.FolderFilterButton = FolderFilterButton;
370
667
  exports.FolderPickerRow = FolderPickerRow;
371
668
  exports.FolderTree = FolderTree;
372
- //# sourceMappingURL=chunk-O4YPVYPO.cjs.map
373
- //# sourceMappingURL=chunk-O4YPVYPO.cjs.map
669
+ exports.LINE_PX = LINE_PX;
670
+ exports.MAX_LINES = MAX_LINES;
671
+ exports.MIN_LINES = MIN_LINES;
672
+ exports.ROW_MIN = ROW_MIN;
673
+ exports.RowDensityControl = RowDensityControl;
674
+ exports.linesForRowHeight = linesForRowHeight;
675
+ exports.rowHeightForLines = rowHeightForLines;
676
+ //# sourceMappingURL=chunk-YAEXSCUW.cjs.map
677
+ //# sourceMappingURL=chunk-YAEXSCUW.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/files/page/FilesPageParts.tsx","../src/files/grid/row-density.ts","../src/files/grid/RowDensityControl.tsx","../src/files/cells/FolderCell.tsx","../src/files/FieldParts.tsx","../src/files/grid/FilterButton.tsx","../src/files/FolderPicker.tsx","../src/files/bulk/FolderFilterButton.tsx"],"names":["jsx","cn","jsxs","Button","testIdOr","BookMarked","Tooltip","TooltipTrigger","ListChevronsUpDown","Slider","TooltipContent","Fragment","FolderOpen","Popover","PopoverTrigger","PopoverContent","ChevronsUpDown","useMemo","Check","LabelPickerList","DEFAULT_LABEL_MULTI_SELECT_LABELS","useState","useRef","useEffect","Minus","FolderBreadcrumb","useCallback","Command","CommandInput","CommandList","CommandEmpty","Plus","CommandGroup","CommandItem","X","ChevronDown","FolderPlus"],"mappings":"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","file":"chunk-YAEXSCUW.cjs","sourcesContent":["import type { ComponentProps, ReactNode } from 'react'\nimport { BookMarked } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\n/** Row of controls that follows the tab: filter field, folder picker, tags button. */\nexport function FilesFilterBar({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"files-filter-bar\"\n className={cn('flex min-w-0 flex-1 flex-nowrap items-center gap-2', className)}\n {...props}\n />\n )\n}\n\nexport interface FilesTagsButtonProps {\n onClick: () => void\n /** Button text (default \"Tags\"). */\n label?: string\n className?: string\n /** Overrides the test id (default `filter-bar-tags-button`). */\n testId?: string\n}\n\n/** Opens the labels / annotations vocabulary editor. The label collapses to sr-only on phones. */\nexport function FilesTagsButton({\n onClick,\n label = 'Tags',\n className,\n testId,\n}: FilesTagsButtonProps) {\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn('h-8 shrink-0 gap-1.5 px-2 font-normal pointer-coarse:h-11', className)}\n onClick={onClick}\n data-testid={testIdOr(testId, { testId: 'filter-bar-tags-button' })}\n >\n <BookMarked className=\"h-3.5 w-3.5\" />\n <span className=\"text-sm max-[480px]:sr-only\">{label}</span>\n </Button>\n )\n}\n\n/**\n * The view switch beside the page title. Marks a size container so the switch collapses its labels\n * to icons by the room it is given (not the viewport), and shrinks with the row.\n */\nexport function FilesViewCenter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"files-view-center\"\n className={cn('@container flex min-w-[9.5rem] flex-1 items-center gap-2', className)}\n {...props}\n />\n )\n}\n\nexport interface FilesModalFooterProps {\n children?: ReactNode\n className?: string\n}\n\n/** Footer row used when the page is hosted in a modal. */\nexport function FilesModalFooter({ children, className }: FilesModalFooterProps) {\n return (\n <div\n data-slot=\"files-modal-footer\"\n className={cn(\n // Sticks to the bottom of the modal's scrolling body so Close is always reachable.\n 'sticky bottom-0 z-40 flex justify-end gap-2 border-t border-border bg-background px-4 py-3 sm:px-6',\n className\n )}\n >\n {children}\n </div>\n )\n}\n","/**\n * Row-height ⇄ line-count math shared by the documents and facts tables.\n *\n * The grid (packages/arbi-blocks GridView) clamps a multiline cell to\n * `floor((rowHeight - chrome) / lineHeight)` fully-visible lines. Snapping every\n * density value to a line boundary makes each step add exactly one whole line\n * instead of growing the row while clipping the next line in half.\n *\n * The constants MUST match packages/arbi-blocks/src/components/GridView.tsx.\n */\n\n/** One multiline line: grid font-size (14) × its line-height (1.35) = 18.9px. */\nexport const LINE_PX = 14 * 1.35\n/** Fixed per-row chrome: 16px vertical padding + 2px border. */\nexport const CHROME = 18\nexport const MIN_LINES = 1\nexport const MAX_LINES = 10\n\n/**\n * Row height (px) that renders exactly `lines` fully-visible text lines. Uses\n * `ceil` (not `round`) so the value never lands just BELOW a boundary, where the\n * grid's own `floor` would drop back to `lines - 1`.\n */\nexport const rowHeightForLines = (lines: number) => Math.ceil(lines * LINE_PX + CHROME)\n\n/** How many whole lines a given row height renders as — the grid's own formula,\n * so the density slider position matches what's actually on screen. */\nexport const linesForRowHeight = (height: number) =>\n Math.max(MIN_LINES, Math.min(MAX_LINES, Math.floor((height - CHROME) / LINE_PX)))\n\nexport const ROW_MIN = rowHeightForLines(MIN_LINES)\nexport const ROW_MAX = rowHeightForLines(MAX_LINES)\n","/**\n * RowDensityControl\n *\n * Row-height adjuster for the documents AND facts tables. It steps in whole\n * TEXT LINES, not arbitrary pixels: the grid (packages/arbi-blocks GridView)\n * clamps a multiline cell to `floor((rowHeight - chrome) / lineHeight)` lines,\n * so a px-based step smaller than a line would grow the row while revealing only\n * a sliver of the next line (text cut in half). Snapping every value to a line\n * boundary makes each increment add exactly one fully-visible line.\n */\n\nimport { Slider, Tooltip, TooltipTrigger, TooltipContent } from '@arbidocs/react/ui'\nimport { ListChevronsUpDown } from 'lucide-react'\nimport { MIN_LINES, MAX_LINES, linesForRowHeight, rowHeightForLines } from './row-density'\n\ninterface RowDensityControlProps {\n rowHeight: number\n onRowHeightChange: (height: number) => void\n /** Testid stem — \"documents-density\" (default) keeps the original ids. */\n testId?: string\n}\n\nexport function RowDensityControl({\n rowHeight,\n onRowHeightChange,\n testId = 'documents-density',\n}: RowDensityControlProps) {\n const lines = linesForRowHeight(rowHeight)\n const setLines = (next: number) =>\n onRowHeightChange(rowHeightForLines(Math.max(MIN_LINES, Math.min(MAX_LINES, next))))\n\n return (\n <Tooltip delayDuration={300}>\n <TooltipTrigger asChild>\n <div className=\"flex h-7 items-center gap-1.5 rounded-md border border-input px-2 pointer-coarse:h-11\">\n <span className=\"hidden text-xs text-muted-foreground md:inline\">Rows</span>\n <button\n type=\"button\"\n aria-label=\"Shorter rows\"\n data-testid={`${testId}-out`}\n onClick={() => setLines(lines - 1)}\n disabled={lines <= MIN_LINES}\n className=\"flex items-center justify-center text-muted-foreground hover:text-foreground disabled:opacity-40 pointer-coarse:size-11\"\n >\n <ListChevronsUpDown className=\"h-4 w-4\" />\n </button>\n {/* The slider works in LINE units — one notch per line — so it can only\n land on line-boundary heights. */}\n <Slider\n value={[lines]}\n min={MIN_LINES}\n max={MAX_LINES}\n step={1}\n onValueChange={([value]) => setLines(value)}\n aria-label=\"Row height\"\n data-testid={testId}\n className=\"w-20\"\n />\n </div>\n </TooltipTrigger>\n <TooltipContent>\n Row height: {lines} line{lines === 1 ? '' : 's'}\n </TooltipContent>\n </Tooltip>\n )\n}\n","import type { ReactNode } from 'react'\nimport { FolderOpen } from 'lucide-react'\nimport { Popover, PopoverContent, PopoverTrigger, cn } from '@arbidocs/react/ui'\n\nexport interface FolderCellProps {\n /** Stored folder path; empty/null renders an em dash. */\n folder: string | null | undefined\n /** Breadcrumb segments, already formatted for display (provider roots shortened). */\n segments: string[]\n /** Leading glyph for connector folders (brand mark); falls back to a folder icon. */\n icon?: ReactNode\n /** Editable cells open `picker` in a popover on click. */\n isEditable: boolean\n /** Popover body (the searchable folder list); only rendered for editable cells. */\n picker?: ReactNode\n className?: string\n}\n\n/** Breadcrumb \"a / b / c\" where all but the last segment are muted. */\nexport function FolderBreadcrumb({\n segments,\n size = 'xs',\n}: {\n segments: string[]\n /** Text size of the segments: `xs` in grid cells, `sm` in form fields. */\n size?: 'xs' | 'sm'\n}) {\n const text = size === 'sm' ? 'text-sm' : 'text-xs'\n return (\n <span data-slot=\"folder-breadcrumb\" className=\"min-w-0 truncate\">\n {segments.map((part, i, arr) => (\n <span key={i} className=\"inline-flex items-center gap-0.5\">\n {i > 0 && <span className={`mx-0.5 ${text} text-muted-foreground/50`}>/</span>}\n <span className={i < arr.length - 1 ? `${text} text-muted-foreground` : ''}>{part}</span>\n </span>\n ))}\n </span>\n )\n}\n\n/**\n * Grid cell for a document's folder. Uses the native `title` attribute instead of a Tooltip:\n * every visible row renders one, so Radix tooltip instances would sit in the scroll hot path.\n */\nexport function FolderCell({\n folder,\n segments,\n icon,\n isEditable,\n picker,\n className,\n}: FolderCellProps) {\n const display = folder ? (\n <>\n {icon ?? <FolderOpen className=\"h-3.5 w-3.5 flex-none shrink-0 text-muted-foreground\" />}\n <FolderBreadcrumb segments={segments} />\n </>\n ) : (\n <span className=\"text-muted-foreground\">—</span>\n )\n const title = folder || undefined\n\n if (!isEditable) {\n return (\n <div\n data-slot=\"folder-cell\"\n title={title}\n className={cn('flex h-full w-full min-w-0 items-center gap-1.5 text-sm', className)}\n >\n {display}\n </div>\n )\n }\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n data-slot=\"folder-cell\"\n title={title}\n className={cn(\n 'flex h-full w-full min-w-0 cursor-pointer items-center gap-1.5 text-left text-sm hover:text-primary',\n className\n )}\n >\n {display}\n </button>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-max min-w-[220px] max-w-[min(640px,92vw)] p-0\"\n align=\"start\"\n side=\"bottom\"\n sideOffset={4}\n >\n {picker}\n </PopoverContent>\n </Popover>\n )\n}\n","import { useMemo, type ReactNode } from 'react'\nimport { Check, ChevronsUpDown, FolderOpen } from 'lucide-react'\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport { FolderBreadcrumb } from './cells/FolderCell'\nimport {\n LabelPickerList,\n DEFAULT_LABEL_MULTI_SELECT_LABELS,\n type LabelMultiSelectLabels,\n type LabelOption,\n} from './cells/LabelMultiSelect'\n\n/**\n * Parts of the document \"card\" form (one labelled field per column): read-only values, the folder\n * and label pickers, a native select and the hover attribution of who last changed a value.\n */\n\nconst FIELD_SURFACE =\n 'rounded-md border border-input bg-muted/40 text-sm transition-colors hover:bg-background'\n\nexport interface FieldValueProps {\n tone?: 'default' | 'strong' | 'muted'\n isMono?: boolean\n isTruncated?: boolean\n children: ReactNode\n}\n\n/** A read-only value of a field. */\nexport function FieldValue({ tone = 'default', isMono, isTruncated, children }: FieldValueProps) {\n return (\n <span\n data-slot=\"field-value\"\n className={cn(\n 'text-sm',\n tone === 'strong' && 'font-semibold',\n tone === 'muted' && 'text-muted-foreground',\n isMono && 'font-mono',\n isTruncated && 'truncate'\n )}\n >\n {children}\n </span>\n )\n}\n\nexport interface FieldFolderSelectProps {\n /** Current folder path, if any. */\n folder: string | null | undefined\n /** Searchable folder list (host-bound `FolderCommandList`). */\n picker: ReactNode\n}\n\n/** Folder field: a trigger showing the breadcrumb, opening the folder picker in a popover. */\nexport function FieldFolderSelect({ folder, picker }: FieldFolderSelectProps) {\n return (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n data-slot=\"field-folder-select\"\n className={cn(\n FIELD_SURFACE,\n 'flex h-9 w-full min-w-0 items-center gap-1.5 px-3 text-left hover:text-primary pointer-coarse:h-11'\n )}\n >\n {folder ? (\n <>\n <FolderOpen className=\"size-3.5 flex-none shrink-0 text-yellow-600\" />\n <FolderBreadcrumb segments={folder.split('/')} size=\"sm\" />\n </>\n ) : (\n <span className=\"text-muted-foreground\">—</span>\n )}\n <ChevronsUpDown className=\"ml-auto size-3.5 shrink-0 opacity-50\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-max min-w-[var(--radix-popover-trigger-width)] max-w-[min(640px,92vw)] p-0\"\n align=\"start\"\n side=\"bottom\"\n sideOffset={4}\n >\n {picker}\n </PopoverContent>\n </Popover>\n )\n}\n\n/** Read-only folder. */\nexport function FieldFolderValue({ folder }: { folder: string | null | undefined }) {\n return (\n <div className=\"flex items-center gap-1.5 text-sm\">\n {folder ? (\n <>\n <FolderOpen className=\"size-3.5 shrink-0 text-yellow-600\" />\n <span>{folder}</span>\n </>\n ) : (\n <span className=\"text-muted-foreground\">—</span>\n )}\n </div>\n )\n}\n\nexport interface FieldLabelsSelectProps {\n options: LabelOption[]\n appliedIds: ReadonlySet<string>\n /** Labels shown as check marks in the field (defaults to the applied ones). Pass fewer to list\n * the selection elsewhere, e.g. in a dialog that renders it beside the field. */\n displayedIds?: ReadonlySet<string>\n onToggle: (id: string) => void\n /** Create a label and apply it; omit to make the picker toggle-only. */\n onCreate?: (name: string) => void\n emptyText?: string\n labels?: Partial<LabelMultiSelectLabels>\n}\n\n/** Labels field: the applied labels as check marks; click to open the label picker. */\nexport function FieldLabelsSelect({\n options,\n appliedIds,\n displayedIds = appliedIds,\n onToggle,\n onCreate,\n emptyText = 'Click to add',\n labels,\n}: FieldLabelsSelectProps) {\n const applied = useMemo(\n () => options.filter((o) => displayedIds.has(o.id)),\n [options, displayedIds]\n )\n return (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n data-slot=\"field-labels-select\"\n className={cn(\n FIELD_SURFACE,\n 'flex min-h-9 w-full cursor-pointer items-center px-3 py-1.5 text-left pointer-coarse:min-h-11'\n )}\n >\n <div className=\"flex min-h-[28px] flex-wrap items-center gap-1.5\">\n {applied.length === 0 && (\n <span className=\"text-sm italic text-muted-foreground\">{emptyText}</span>\n )}\n {applied.map((o) => (\n <span key={o.id} className=\"inline-flex items-center gap-1 text-sm font-medium\">\n <span\n className=\"flex size-4 shrink-0 items-center justify-center rounded border-2\"\n style={{ borderColor: o.color, backgroundColor: o.color }}\n >\n <Check className=\"size-3 text-white\" strokeWidth={3} />\n </span>\n <span className=\"max-w-[280px] truncate\">{o.name}</span>\n </span>\n ))}\n </div>\n </button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[360px] p-0\" align=\"start\" side=\"bottom\" sideOffset={4}>\n <LabelPickerList\n options={options}\n appliedIds={appliedIds}\n onToggle={onToggle}\n onCreate={onCreate}\n labels={{ ...DEFAULT_LABEL_MULTI_SELECT_LABELS, ...labels }}\n />\n </PopoverContent>\n </Popover>\n )\n}\n\nexport interface FieldNativeSelectProps {\n value: string\n options: string[]\n onChange: (value: string) => void\n /** Text of the empty option. */\n emptyLabel?: string\n ariaLabel?: string\n}\n\n/** A single-choice field (a native `select`: reliable on touch and with assistive tech). */\nexport function FieldNativeSelect({\n value,\n options,\n onChange,\n emptyLabel = '--',\n ariaLabel,\n}: FieldNativeSelectProps) {\n return (\n <select\n value={value}\n aria-label={ariaLabel}\n onChange={(e) => onChange(e.target.value)}\n className=\"h-9 w-full rounded-md border border-input bg-muted/40 px-3 text-sm transition-colors focus:bg-background focus:outline-none focus:ring-1 focus:ring-ring pointer-coarse:h-11\"\n >\n <option value=\"\">{emptyLabel}</option>\n {options.map((opt) => (\n <option key={opt} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n )\n}\n\nexport interface FieldAttributionProps {\n /** Avatar of whoever last changed the value. */\n avatar: ReactNode\n /** Formatted date of that change. */\n date: string\n /** Tooltip lines (\"Created ... by ...\", \"Updated ... by ...\"). */\n lines: string[]\n}\n\n/** Subtle \"who changed this and when\". */\nexport function FieldAttribution({ avatar, date, lines }: FieldAttributionProps) {\n return (\n <div className=\"flex items-center gap-1\" data-slot=\"field-attribution\">\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex items-center gap-1\">\n {avatar}\n <span className=\"text-sm text-muted-foreground\">{date}</span>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {lines.map((line, i) => (\n <p key={i} className=\"text-sm\">\n {line}\n </p>\n ))}\n </TooltipContent>\n </Tooltip>\n </div>\n )\n}\n\n/**\n * Wraps an editable value and reveals `attribution` at its top-right on hover or keyboard focus\n * inside, and always on touch devices (there is no hover there).\n */\nexport function FieldWithAttribution({\n attribution,\n children,\n}: {\n attribution: ReactNode\n children: ReactNode\n}) {\n return (\n <div className=\"group/doctag relative\" data-slot=\"field-with-attribution\">\n {children}\n <div className=\"absolute right-0 top-0 bg-background/90 pl-2 opacity-0 transition-opacity group-focus-within/doctag:opacity-100 group-hover/doctag:opacity-100 pointer-coarse:opacity-100\">\n {attribution}\n </div>\n </div>\n )\n}\n","/**\n * Filter button for custom AG Grid header components.\n * Uses AG Grid's own CSS classes (ag-header-icon, ag-icon-filter) so it is\n * visually identical to the native filter button shown on standard columns.\n */\n\nimport { useState, useEffect, useRef } from 'react'\nimport type { IHeaderParams } from 'ag-grid-community'\n\ninterface FilterButtonProps {\n params: IHeaderParams\n colId: string\n}\n\nexport const FilterButton = ({ params, colId }: FilterButtonProps) => {\n const [isFilterActive, setIsFilterActive] = useState(false)\n const btnRef = useRef<HTMLSpanElement>(null)\n\n useEffect(() => {\n const check = () => setIsFilterActive(!!params.api.getFilterModel()[colId])\n check()\n params.api.addEventListener('filterChanged', check)\n return () => {\n if (!params.api.isDestroyed()) params.api.removeEventListener('filterChanged', check)\n }\n }, [params.api, colId])\n\n return (\n <span\n ref={btnRef}\n role=\"button\"\n aria-label=\"Filter\"\n onClick={(e) => {\n e.stopPropagation()\n if (btnRef.current) params.showFilter(btnRef.current)\n }}\n className={`ag-header-icon ag-header-cell-filter-button ag-header-label-icon ${isFilterActive ? 'ag-filter-active' : ''}`}\n aria-hidden=\"false\"\n >\n <span className=\"ag-icon ag-icon-filter\" />\n </span>\n )\n}\n","import { useCallback, useState } from 'react'\nimport type { ReactNode } from 'react'\nimport { Check, FolderOpen, Minus, Plus, X } from 'lucide-react'\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\n\n/** Every fixed string of the folder pickers. Pass a partial `labels` to translate or reword. */\nexport interface FolderPickerLabels {\n none: string\n removeFromFolder: string\n searchOrCreate: string\n noFolders: string\n create: (name: string) => string\n}\n\nexport const DEFAULT_FOLDER_PICKER_LABELS: FolderPickerLabels = {\n none: 'None',\n removeFromFolder: 'Remove from folder',\n searchOrCreate: 'Search or create...',\n noFolders: 'No folders yet',\n create: (name) => `Create \\u201c${name}\\u201d`,\n}\n\nexport interface FolderCommandListTestIds {\n create: string\n createOption: string\n remove: string\n /** Replaces the whole `folder-picker-option-<folder>` id. */\n option: (folder: string) => string\n}\n\n// ── Tree row ────────────────────────────────────────────────────────────────────────────────\n\nexport interface FolderPickerRowProps {\n label: string\n /** Optional leading glyph (e.g. a connector brand mark for provider roots). */\n icon?: ReactNode\n /** Shown at the right edge; omit for rows with nothing to count (e.g. an empty unread count). */\n count?: number\n depth: number\n isActive: boolean\n muted?: boolean\n /** Test id of the row button (none by default). */\n testId?: string\n /**\n * Draw a checkbox in the leading slot instead of the single-select tick. A list you can pick\n * SEVERAL rows from should look like one: a lone tick reads \"this is the current one\", a box\n * reads \"tick the ones you want\".\n */\n checkbox?: boolean\n /** Checkbox only: some descendants are selected, so show a dash, not a tick. */\n indeterminate?: boolean\n onClick: () => void\n}\n\n/** One folder row: indented by depth, with a count. Whole row is the target (44px on touch). */\nexport function FolderPickerRow({\n label,\n icon,\n count,\n depth,\n isActive,\n muted,\n checkbox,\n indeterminate,\n testId,\n onClick,\n}: FolderPickerRowProps) {\n return (\n <button\n type=\"button\"\n data-testid={testId}\n onClick={onClick}\n // The row IS the checkbox: a real <Checkbox> inside this button would nest one interactive\n // element in another and swallow the click. role + aria-checked carry the same meaning.\n role={checkbox ? 'checkbox' : undefined}\n aria-checked={checkbox ? (indeterminate ? 'mixed' : isActive) : undefined}\n style={{ paddingLeft: `${4 + depth * 14}px` }}\n className={cn(\n // `[&:hover]:`, not `hover:`: the latter compiles behind `@media (hover: hover)`, so on a\n // touchscreen whose PRIMARY pointer reports `hover: none` the row would never highlight\n // even with a real mouse attached. The arbitrary selector has no media gate.\n 'flex w-full items-center gap-1 rounded-sm py-1 pr-2 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring [&:hover]:bg-accent pointer-coarse:min-h-11',\n isActive && 'bg-primary/10',\n muted && !isActive && 'text-muted-foreground'\n )}\n >\n <span className=\"flex w-4 shrink-0 items-center justify-center\">\n {checkbox ? (\n <span\n className={cn(\n 'flex size-3.5 items-center justify-center rounded-[3px] border transition-colors',\n isActive || indeterminate\n ? 'border-primary bg-primary text-primary-foreground'\n : 'border-muted-foreground/40'\n )}\n >\n {indeterminate ? (\n <Minus className=\"size-2.5\" />\n ) : (\n isActive && <Check className=\"size-2.5\" />\n )}\n </span>\n ) : (\n isActive && <Check className=\"size-3.5 text-primary\" />\n )}\n </span>\n {icon}\n {label !== '' && (\n <span className={cn('min-w-0 truncate', isActive && 'font-semibold text-primary')}>\n {label}\n </span>\n )}\n {count !== undefined && (\n <span className=\"ml-auto pl-2 text-sm font-semibold text-muted-foreground\">{count}</span>\n )}\n </button>\n )\n}\n\n// ── Tree ────────────────────────────────────────────────────────────────────────────────────\n\nexport interface FolderTreeNode {\n path: string\n label: string\n depth: number\n count: number\n /** Replaces the label's default look (provider roots show a brand mark). */\n icon?: ReactNode\n}\n\nexport interface FolderTreeProps {\n nodes: FolderTreeNode[]\n unfiledCount: number\n /** string = folder path selected, null = Unfiled selected, undefined = nothing selected. */\n value: string | null | undefined\n onChange: (folder: string | null) => void\n /** Show the Unfiled (\"None\") row even when it is empty. */\n showUnfiledAlways?: boolean\n labels?: Partial<FolderPickerLabels>\n}\n\n/** Folder hierarchy with an Unfiled option at the bottom. No \"All\" row: callers add their own. */\nexport function FolderTree({\n nodes,\n unfiledCount,\n value,\n onChange,\n showUnfiledAlways,\n labels,\n}: FolderTreeProps) {\n const l = { ...DEFAULT_FOLDER_PICKER_LABELS, ...labels }\n return (\n <div className=\"max-h-[240px] overflow-y-auto\">\n {nodes.map((node) => (\n <FolderPickerRow\n key={node.path}\n label={node.label}\n icon={node.icon}\n count={node.count}\n depth={node.depth}\n isActive={value === node.path}\n onClick={() => onChange(node.path)}\n />\n ))}\n {(unfiledCount > 0 || showUnfiledAlways) && (\n <>\n {nodes.length > 0 && <div className=\"my-1 border-t border-border\" />}\n <FolderPickerRow\n label={l.none}\n count={unfiledCount}\n depth={0}\n isActive={value === null}\n muted\n onClick={() => onChange(null)}\n />\n </>\n )}\n </div>\n )\n}\n\n// ── Searchable list ─────────────────────────────────────────────────────────────────────────\n\nfunction FolderBreadcrumb({ folder }: { folder: string }) {\n const parts = folder.split('/')\n return (\n <span className=\"whitespace-nowrap\">\n {parts.map((part, i) => (\n <span key={i} className=\"inline-flex items-center gap-0.5\">\n {i > 0 && <span className=\"mx-0.5 text-sm text-muted-foreground/50\">/</span>}\n <span className={i < parts.length - 1 ? 'text-sm text-muted-foreground' : ''}>\n {part}\n </span>\n </span>\n ))}\n </span>\n )\n}\n\nexport interface FolderCommandListProps {\n /** Existing folder paths (the host derives them from its documents). */\n folders: string[]\n /** Selected folder (null = unfiled, undefined = no selection). */\n value?: string | null\n /** A folder was picked or a new one created. */\n onSelect: (folder: string | null) => void\n /** Show the remove / move-to-root option. */\n showRemove?: boolean\n /** Wins over `labels.removeFromFolder`. */\n removeLabel?: string\n /** Wins over `labels.searchOrCreate`. */\n placeholder?: string\n autoFocus?: boolean\n labels?: Partial<FolderPickerLabels>\n /** Overrides for the test ids (defaults keep the current ids). */\n testIds?: Partial<FolderCommandListTestIds>\n}\n\n/**\n * Searchable folder picker: filter existing folders, create one by typing a new name, optional\n * \"Remove from folder\". Shows hierarchy as breadcrumbs.\n */\nexport function FolderCommandList({\n folders,\n value,\n onSelect,\n showRemove = false,\n removeLabel,\n placeholder,\n autoFocus = true,\n labels,\n testIds,\n}: FolderCommandListProps) {\n const l = { ...DEFAULT_FOLDER_PICKER_LABELS, ...labels }\n const [search, setSearch] = useState('')\n const trimmed = search.trim()\n const matchesExisting = folders.some((f) => f.toLowerCase() === trimmed.toLowerCase())\n\n const handleCreate = useCallback(\n (name: string) => {\n const next = name.trim()\n if (!next) return\n onSelect(next)\n setSearch('')\n },\n [onSelect]\n )\n\n return (\n <Command shouldFilter={true}>\n <CommandInput\n placeholder={placeholder ?? l.searchOrCreate}\n value={search}\n onValueChange={setSearch}\n autoFocus={autoFocus}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && trimmed && !matchesExisting) {\n e.preventDefault()\n handleCreate(search)\n }\n }}\n />\n <CommandList>\n <CommandEmpty>\n {trimmed ? (\n <button\n type=\"button\"\n data-testid={testIdOr(testIds?.create, { testId: 'folder-picker-create' })}\n onClick={() => handleCreate(search)}\n onPointerDown={(e) => e.preventDefault()}\n className=\"flex w-full cursor-pointer items-center gap-1.5 rounded px-2 py-1.5 text-left text-sm text-primary hover:bg-accent pointer-coarse:min-h-11\"\n >\n <Plus className=\"size-3.5 shrink-0\" />\n {l.create(trimmed)}\n </button>\n ) : (\n <span className=\"text-muted-foreground\">{l.noFolders}</span>\n )}\n </CommandEmpty>\n <CommandGroup>\n {folders.map((folder) => (\n <CommandItem\n key={folder}\n value={folder}\n data-testid={testIdOr(testIds?.option?.(folder), {\n testId: `folder-picker-option-${folder}`,\n })}\n onSelect={() => onSelect(folder)}\n onPointerDown={(e) => e.preventDefault()}\n className=\"cursor-pointer text-sm\"\n >\n <FolderOpen className=\"mr-1.5 size-3.5 flex-none shrink-0 text-yellow-text\" />\n <FolderBreadcrumb folder={folder} />\n {value === folder && (\n <span className=\"ml-auto flex-none text-sm text-primary\">✓</span>\n )}\n </CommandItem>\n ))}\n </CommandGroup>\n\n {trimmed && !matchesExisting && folders.length > 0 && (\n <CommandGroup>\n <CommandItem\n value={`__create__${trimmed}`}\n data-testid={testIdOr(testIds?.createOption, {\n testId: 'folder-picker-create-option',\n })}\n onSelect={() => handleCreate(search)}\n onPointerDown={(e) => e.preventDefault()}\n className=\"cursor-pointer text-sm text-primary\"\n >\n <Plus className=\"mr-1.5 size-3.5 shrink-0\" />\n <span>{l.create(trimmed)}</span>\n </CommandItem>\n </CommandGroup>\n )}\n\n {showRemove && (\n <CommandGroup>\n <CommandItem\n value=\"__none__\"\n data-testid={testIdOr(testIds?.remove, { testId: 'folder-picker-remove' })}\n onSelect={() => onSelect(null)}\n onPointerDown={(e) => e.preventDefault()}\n className=\"cursor-pointer text-sm text-muted-foreground\"\n >\n <X className=\"mr-1 size-3.5 shrink-0\" />\n <span>{removeLabel ?? l.removeFromFolder}</span>\n {value === null && <span className=\"ml-auto flex-none text-sm text-primary\">✓</span>}\n </CommandItem>\n </CommandGroup>\n )}\n </CommandList>\n </Command>\n )\n}\n","import type { ReactNode } from 'react'\nimport { ChevronDown, FolderOpen, FolderPlus } from 'lucide-react'\nimport { Button, Popover, PopoverContent, PopoverTrigger, cn } from '@arbidocs/react/ui'\nimport { FolderPickerRow } from '../FolderPicker'\nimport { testIdOr } from '../../chat/test-id'\n\n/** Every fixed string of the folder filter. Pass a partial `labels` to translate or reword. */\nexport interface FolderFilterLabels {\n all: string\n newFolder: string\n}\n\nexport const DEFAULT_FOLDER_FILTER_LABELS: FolderFilterLabels = {\n all: 'All',\n newFolder: 'New folder',\n}\n\nexport interface FolderFilterButtonProps {\n /** Text of the active folder (\"All\", \"None\", or the display path). */\n label: string\n /** Leading glyph for connector folders; falls back to a folder icon. */\n icon?: ReactNode\n /** A folder filter is active: the trigger takes the selection tint. */\n isActive: boolean\n open: boolean\n onOpenChange: (open: boolean) => void\n /** Total documents, shown on the \"All\" row. */\n allCount?: number\n /** When set, the popover starts with an \"All\" row; omit it for lists that have no \"All\". */\n onSelectAll?: () => void\n /** When set, the popover offers a \"New folder\" action. */\n onNewFolder?: () => void\n /** Slot: the folder tree picker. */\n children: ReactNode\n className?: string\n labels?: Partial<FolderFilterLabels>\n /** Test id of the trigger button (none by default). */\n testId?: string\n /** Overrides the \"New folder\" test id (default `explorer-new-folder`). */\n newFolderTestId?: string\n}\n\n/**\n * The folder filter control: a ghost button naming the active folder that opens a popover with\n * an \"All\" row, the folder tree (slot) and an optional \"New folder\" action.\n */\nexport function FolderFilterButton({\n label,\n icon,\n isActive,\n open,\n onOpenChange,\n allCount,\n onSelectAll,\n onNewFolder,\n children,\n className,\n labels,\n testId,\n newFolderTestId,\n}: FolderFilterButtonProps) {\n const l = { ...DEFAULT_FOLDER_FILTER_LABELS, ...labels }\n return (\n <Popover open={open} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n data-slot=\"folder-filter-button\"\n data-testid={testId}\n className={cn(\n 'h-7 shrink-0 gap-1.5 px-2 text-sm font-normal pointer-coarse:h-10',\n isActive && 'bg-accent font-medium text-accent-foreground',\n className\n )}\n >\n {icon ?? (\n <FolderOpen\n className={cn(\n 'h-3.5 w-3.5 shrink-0 text-muted-foreground',\n isActive && 'fill-muted-foreground/30'\n )}\n />\n )}\n <span className=\"max-w-[280px] truncate\">{label}</span>\n <ChevronDown className=\"h-4 w-4 text-foreground\" strokeWidth={2.5} />\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-max min-w-56 max-w-[480px] p-1 shadow-lg\"\n align=\"start\"\n sideOffset={4}\n >\n {onSelectAll && (\n <>\n <FolderPickerRow\n label={l.all}\n count={allCount}\n depth={0}\n isActive={!isActive}\n onClick={onSelectAll}\n />\n <div className=\"my-1 border-t border-border\" />\n </>\n )}\n {children}\n {onNewFolder && (\n <>\n <div className=\"my-1 border-t border-border\" />\n <button\n type=\"button\"\n onClick={onNewFolder}\n data-testid={testIdOr(newFolderTestId, { testId: 'explorer-new-folder' })}\n className=\"flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground pointer-coarse:min-h-11\"\n >\n <FolderPlus className=\"h-3.5 w-3.5\" />\n {l.newFolder}\n </button>\n </>\n )}\n </PopoverContent>\n </Popover>\n )\n}\n"]}
@@ -0,0 +1,18 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunkGGTUMLCT_cjs = require('./chunk-GGTUMLCT.cjs');
5
+ var chunkKUT2Y7JF_cjs = require('./chunk-KUT2Y7JF.cjs');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+
8
+ function ConnectedStreamedWordArtifact({
9
+ fontBaseUrl,
10
+ ...props
11
+ }) {
12
+ const adapter = chunkGGTUMLCT_cjs.useConnectedNativeDocxAdapter(fontBaseUrl);
13
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkKUT2Y7JF_cjs.StreamedWordArtifact, { ...props, adapter });
14
+ }
15
+
16
+ exports.ConnectedStreamedWordArtifact = ConnectedStreamedWordArtifact;
17
+ //# sourceMappingURL=chunk-YIFCLNII.cjs.map
18
+ //# sourceMappingURL=chunk-YIFCLNII.cjs.map