@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
@@ -0,0 +1,208 @@
1
+ "use client";
2
+ import { CellHoverIcon } from './chunk-M4S75AEJ.js';
3
+ import { memo, useState, useRef, useEffect, useMemo } from 'react';
4
+ import { Check, Minus, PencilLine } from 'lucide-react';
5
+ import { Popover, PopoverTrigger, PopoverContent, Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from '@arbidocs/react/ui';
6
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
7
+
8
+ var CHIP_ROW_H = 24;
9
+ var CHIP_GAP = 4;
10
+ function labelChipClampHeight(rowHeight) {
11
+ const rows = Math.max(1, Math.floor((rowHeight + CHIP_GAP) / (CHIP_ROW_H + CHIP_GAP)));
12
+ return CHIP_ROW_H * rows + CHIP_GAP * (rows - 1);
13
+ }
14
+ var DEFAULT_LABEL_MULTI_SELECT_LABELS = {
15
+ searchPlaceholder: "Search or create...",
16
+ noLabels: "No labels yet",
17
+ create: (name) => `Create \u201C${name}\u201D`,
18
+ editLabel: "Edit field"
19
+ };
20
+ var CHECK_BOX = "flex shrink-0 items-center justify-center rounded border-2";
21
+ function LabelPickerList({
22
+ options,
23
+ appliedIds,
24
+ mixedIds,
25
+ onToggle,
26
+ onCreate,
27
+ moreCreates,
28
+ onEditLabels,
29
+ labels
30
+ }) {
31
+ const l = useMemo(() => ({ ...DEFAULT_LABEL_MULTI_SELECT_LABELS, ...labels }), [labels]);
32
+ const [search, setSearch] = useState("");
33
+ const trimmed = search.trim();
34
+ const matchesExisting = options.some((o) => o.name.toLowerCase() === trimmed.toLowerCase());
35
+ const create = () => {
36
+ onCreate?.(trimmed);
37
+ setSearch("");
38
+ };
39
+ return /* @__PURE__ */ jsxs(Command, { shouldFilter: true, children: [
40
+ /* @__PURE__ */ jsx(
41
+ CommandInput,
42
+ {
43
+ placeholder: l.searchPlaceholder,
44
+ value: search,
45
+ onValueChange: setSearch,
46
+ onKeyDown: (e) => {
47
+ if (e.key === "Enter" && onCreate && trimmed && !matchesExisting) {
48
+ e.preventDefault();
49
+ create();
50
+ }
51
+ }
52
+ }
53
+ ),
54
+ /* @__PURE__ */ jsxs(CommandList, { children: [
55
+ !(trimmed && onCreate) && /* @__PURE__ */ jsx(CommandEmpty, { children: /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: l.noLabels }) }),
56
+ /* @__PURE__ */ jsx(CommandGroup, { children: options.map((o) => {
57
+ const isApplied = appliedIds.has(o.id);
58
+ const isMixed = mixedIds?.has(o.id);
59
+ return /* @__PURE__ */ jsxs(
60
+ CommandItem,
61
+ {
62
+ value: o.name,
63
+ onSelect: () => onToggle(o.id),
64
+ onPointerDown: (e) => e.preventDefault(),
65
+ className: "group/label cursor-pointer",
66
+ "data-testid": `label-select-${o.id}`,
67
+ children: [
68
+ /* @__PURE__ */ jsxs(
69
+ "span",
70
+ {
71
+ className: `mr-2 size-4 ${CHECK_BOX} ${isApplied ? "" : "bg-background"}`,
72
+ style: {
73
+ borderColor: o.color,
74
+ backgroundColor: isApplied ? o.color : void 0
75
+ },
76
+ children: [
77
+ isApplied && /* @__PURE__ */ jsx(Check, { className: "size-3 text-white", strokeWidth: 3 }),
78
+ isMixed && /* @__PURE__ */ jsx(Minus, { className: "size-3", style: { color: o.color } })
79
+ ]
80
+ }
81
+ ),
82
+ /* @__PURE__ */ jsx("span", { className: "flex-1 text-sm", children: o.name }),
83
+ onEditLabels && /* @__PURE__ */ jsx(
84
+ "button",
85
+ {
86
+ type: "button",
87
+ onClick: (e) => {
88
+ e.stopPropagation();
89
+ onEditLabels();
90
+ },
91
+ onPointerDown: (e) => e.preventDefault(),
92
+ className: "shrink-0 rounded p-0.5 opacity-0 hover:bg-muted focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring group-hover/label:opacity-100 group-data-[selected=true]/label:opacity-100 pointer-coarse:flex pointer-coarse:size-11 pointer-coarse:items-center pointer-coarse:justify-center pointer-coarse:opacity-100",
93
+ title: l.editLabel,
94
+ "aria-label": l.editLabel,
95
+ children: /* @__PURE__ */ jsx(PencilLine, { className: "size-3 text-muted-foreground" })
96
+ }
97
+ )
98
+ ]
99
+ },
100
+ o.id
101
+ );
102
+ }) })
103
+ ] }),
104
+ trimmed && onCreate && !matchesExisting && /* @__PURE__ */ jsx("div", { className: "border-t border-border p-1", "data-slot": "label-picker-create", children: [{ label: l.create, onCreate }, ...moreCreates ?? []].map((c, i) => /* @__PURE__ */ jsx(
105
+ "button",
106
+ {
107
+ type: "button",
108
+ onClick: () => {
109
+ c.onCreate(trimmed);
110
+ setSearch("");
111
+ },
112
+ onPointerDown: (e) => e.preventDefault(),
113
+ className: "w-full cursor-pointer rounded px-2 py-1.5 text-left text-sm text-primary hover:bg-accent pointer-coarse:min-h-11",
114
+ children: c.label(trimmed)
115
+ },
116
+ i
117
+ )) })
118
+ ] });
119
+ }
120
+ var LabelMultiSelectView = memo(function LabelMultiSelectView2({
121
+ options,
122
+ appliedIds,
123
+ onToggle,
124
+ onCreate,
125
+ onEditLabels,
126
+ rowHeight = 52,
127
+ labels
128
+ }) {
129
+ const [open, setOpen] = useState(false);
130
+ const applied = options.filter((o) => appliedIds.has(o.id));
131
+ const maxHeight = labelChipClampHeight(rowHeight);
132
+ const chipsRef = useRef(null);
133
+ const [hasOverflow, setHasOverflow] = useState(false);
134
+ useEffect(() => {
135
+ const el = chipsRef.current;
136
+ if (!el) return;
137
+ const measure = () => setHasOverflow(el.scrollHeight > el.clientHeight + 1);
138
+ measure();
139
+ const ro = new ResizeObserver(measure);
140
+ ro.observe(el);
141
+ return () => ro.disconnect();
142
+ }, [appliedIds, maxHeight, options]);
143
+ return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, children: [
144
+ /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
145
+ "button",
146
+ {
147
+ type: "button",
148
+ "data-slot": "label-multi-select",
149
+ className: "group relative flex h-full w-full min-w-0 cursor-pointer items-center gap-1 pr-4 text-left hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",
150
+ children: applied.length === 0 ? /* @__PURE__ */ jsx("span", { className: "flex-1", children: /* @__PURE__ */ jsx(CellHoverIcon, {}) }) : /* @__PURE__ */ jsxs(Fragment, { children: [
151
+ /* @__PURE__ */ jsx(
152
+ "div",
153
+ {
154
+ ref: chipsRef,
155
+ className: "flex min-w-0 flex-1 flex-wrap content-start gap-1 overflow-hidden",
156
+ style: { maxHeight },
157
+ "data-testid": "label-multi-select-chips",
158
+ children: applied.map((o) => /* @__PURE__ */ jsxs(
159
+ "span",
160
+ {
161
+ className: "inline-flex shrink-0 items-center gap-1 rounded border px-1.5 py-0.5 text-xs font-medium",
162
+ title: o.name,
163
+ style: { borderColor: o.color },
164
+ children: [
165
+ /* @__PURE__ */ jsx(
166
+ "span",
167
+ {
168
+ className: "flex size-3.5 shrink-0 items-center justify-center rounded",
169
+ style: { backgroundColor: o.color },
170
+ children: /* @__PURE__ */ jsx(Check, { className: "size-2.5 text-white", strokeWidth: 3 })
171
+ }
172
+ ),
173
+ /* @__PURE__ */ jsx("span", { className: "max-w-[80px] truncate", children: o.name })
174
+ ]
175
+ },
176
+ o.id
177
+ ))
178
+ }
179
+ ),
180
+ hasOverflow && /* @__PURE__ */ jsx(
181
+ "span",
182
+ {
183
+ className: "pointer-events-none absolute bottom-0.5 right-0.5 text-xs font-semibold leading-none text-muted-foreground",
184
+ "aria-hidden": true,
185
+ "data-testid": "label-multi-select-overflow",
186
+ children: "\u2026"
187
+ }
188
+ )
189
+ ] })
190
+ }
191
+ ) }),
192
+ open && /* @__PURE__ */ jsx(PopoverContent, { className: "w-[360px] p-0", align: "start", side: "bottom", sideOffset: 4, children: /* @__PURE__ */ jsx(
193
+ LabelPickerList,
194
+ {
195
+ options,
196
+ appliedIds,
197
+ onToggle,
198
+ onCreate,
199
+ onEditLabels,
200
+ labels
201
+ }
202
+ ) })
203
+ ] });
204
+ });
205
+
206
+ export { DEFAULT_LABEL_MULTI_SELECT_LABELS, LabelMultiSelectView, LabelPickerList, labelChipClampHeight };
207
+ //# sourceMappingURL=chunk-SDOEHEJP.js.map
208
+ //# sourceMappingURL=chunk-SDOEHEJP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/files/cells/LabelMultiSelect.tsx"],"names":["LabelMultiSelectView"],"mappings":"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","file":"chunk-SDOEHEJP.js","sourcesContent":["import { memo, useEffect, useMemo, useRef, useState } from 'react'\nimport { Check, Minus, PencilLine } from 'lucide-react'\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '@arbidocs/react/ui'\nimport { CellHoverIcon } from './HoverIconCell'\n\n/** Chip row metrics (px): a chip is 24px tall with a 4px gap, as in the Facts labels cell. */\nconst CHIP_ROW_H = 24\nconst CHIP_GAP = 4\n\n/** Max height of the chip container: whole chip rows that fit `rowHeight`, never half a row. */\nexport function labelChipClampHeight(rowHeight: number): number {\n const rows = Math.max(1, Math.floor((rowHeight + CHIP_GAP) / (CHIP_ROW_H + CHIP_GAP)))\n return CHIP_ROW_H * rows + CHIP_GAP * (rows - 1)\n}\n\n/** One label a document can carry. `color` is any CSS colour (the host derives it from the id). */\nexport interface LabelOption {\n id: string\n name: string\n color: string\n}\n\n/** Every fixed string of the label picker. */\nexport interface LabelMultiSelectLabels {\n searchPlaceholder: string\n noLabels: string\n create: (name: string) => string\n editLabel: string\n}\n\nexport const DEFAULT_LABEL_MULTI_SELECT_LABELS: LabelMultiSelectLabels = {\n searchPlaceholder: 'Search or create...',\n noLabels: 'No labels yet',\n create: (name) => `Create “${name}”`,\n editLabel: 'Edit field',\n}\n\nexport interface LabelMultiSelectViewProps {\n options: LabelOption[]\n /** Ids of the labels applied to the row. */\n appliedIds: ReadonlySet<string>\n onToggle: (id: string) => void\n /** Create a label named `name` and apply it (the host decides what a non-member may do). */\n onCreate: (name: string) => void\n /** Opens the label editor; omit to hide the per-option edit button. */\n onEditLabels?: () => void\n /** The grid row height: clamps the chips to the rows that fully fit, with an ellipsis. */\n rowHeight?: number\n labels?: Partial<LabelMultiSelectLabels>\n}\n\nconst CHECK_BOX = 'flex shrink-0 items-center justify-center rounded border-2'\n\nexport interface LabelPickerListProps {\n options: LabelOption[]\n appliedIds: ReadonlySet<string>\n mixedIds?: ReadonlySet<string>\n onToggle: (id: string) => void\n /** Create a label named `name`; omit to hide \"Create ...\" (the picker only toggles). */\n onCreate?: (name: string) => void\n /**\n * Further ways to create from the typed name, each its own row under \"Create ...\" (e.g. one per\n * kind of tag). Enter still runs `onCreate`.\n */\n moreCreates?: { label: (name: string) => string; onCreate: (name: string) => void }[]\n /** Opens the label editor; omit to hide the per-option edit button. */\n onEditLabels?: () => void\n labels?: Partial<LabelMultiSelectLabels>\n}\n\n/**\n * Searchable list of labels with check boxes: type to filter, Enter (or the \"Create ...\" row, shown\n * whenever the typed name is not a label yet, below any labels that partly match it) creates it. Used by the grid cell and the document form field.\n */\nexport function LabelPickerList({\n options,\n appliedIds,\n mixedIds,\n onToggle,\n onCreate,\n moreCreates,\n onEditLabels,\n labels,\n}: LabelPickerListProps) {\n const l = useMemo(() => ({ ...DEFAULT_LABEL_MULTI_SELECT_LABELS, ...labels }), [labels])\n const [search, setSearch] = useState('')\n const trimmed = search.trim()\n const matchesExisting = options.some((o) => o.name.toLowerCase() === trimmed.toLowerCase())\n\n const create = () => {\n onCreate?.(trimmed)\n setSearch('')\n }\n\n return (\n <Command shouldFilter>\n <CommandInput\n placeholder={l.searchPlaceholder}\n value={search}\n onValueChange={setSearch}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && onCreate && trimmed && !matchesExisting) {\n e.preventDefault()\n create()\n }\n }}\n />\n <CommandList>\n {/* Nothing matches and nothing to create: say so. A new name is offered below instead. */}\n {!(trimmed && onCreate) && (\n <CommandEmpty>\n <span className=\"text-muted-foreground\">{l.noLabels}</span>\n </CommandEmpty>\n )}\n <CommandGroup>\n {options.map((o) => {\n const isApplied = appliedIds.has(o.id)\n const isMixed = mixedIds?.has(o.id)\n return (\n <CommandItem\n key={o.id}\n value={o.name}\n onSelect={() => onToggle(o.id)}\n onPointerDown={(e) => e.preventDefault()}\n className=\"group/label cursor-pointer\"\n data-testid={`label-select-${o.id}`}\n >\n <span\n className={`mr-2 size-4 ${CHECK_BOX} ${isApplied ? '' : 'bg-background'}`}\n style={{\n borderColor: o.color,\n backgroundColor: isApplied ? o.color : undefined,\n }}\n >\n {isApplied && <Check className=\"size-3 text-white\" strokeWidth={3} />}\n {isMixed && <Minus className=\"size-3\" style={{ color: o.color }} />}\n </span>\n <span className=\"flex-1 text-sm\">{o.name}</span>\n {onEditLabels && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onEditLabels()\n }}\n onPointerDown={(e) => e.preventDefault()}\n className=\"shrink-0 rounded p-0.5 opacity-0 hover:bg-muted focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring group-hover/label:opacity-100 group-data-[selected=true]/label:opacity-100 pointer-coarse:flex pointer-coarse:size-11 pointer-coarse:items-center pointer-coarse:justify-center pointer-coarse:opacity-100\"\n title={l.editLabel}\n aria-label={l.editLabel}\n >\n <PencilLine className=\"size-3 text-muted-foreground\" />\n </button>\n )}\n </CommandItem>\n )\n })}\n </CommandGroup>\n </CommandList>\n {trimmed && onCreate && !matchesExisting && (\n <div className=\"border-t border-border p-1\" data-slot=\"label-picker-create\">\n {[{ label: l.create, onCreate }, ...(moreCreates ?? [])].map((c, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={() => {\n c.onCreate(trimmed)\n setSearch('')\n }}\n onPointerDown={(e) => e.preventDefault()}\n className=\"w-full cursor-pointer rounded px-2 py-1.5 text-left text-sm text-primary hover:bg-accent pointer-coarse:min-h-11\"\n >\n {c.label(trimmed)}\n </button>\n ))}\n </div>\n )}\n </Command>\n )\n}\n\n/**\n * Labels column cell: applied labels as bordered chips; click (or Enter) opens a popover to\n * toggle labels or type a new name and press Enter to create it. Empty cells show a pencil on\n * hover, keyboard focus and touch.\n */\nexport const LabelMultiSelectView = memo(function LabelMultiSelectView({\n options,\n appliedIds,\n onToggle,\n onCreate,\n onEditLabels,\n rowHeight = 52,\n labels,\n}: LabelMultiSelectViewProps) {\n const [open, setOpen] = useState(false)\n\n const applied = options.filter((o) => appliedIds.has(o.id))\n const maxHeight = labelChipClampHeight(rowHeight)\n const chipsRef = useRef<HTMLDivElement>(null)\n const [hasOverflow, setHasOverflow] = useState(false)\n useEffect(() => {\n const el = chipsRef.current\n if (!el) return\n const measure = () => setHasOverflow(el.scrollHeight > el.clientHeight + 1)\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(el)\n return () => ro.disconnect()\n }, [appliedIds, maxHeight, options])\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n data-slot=\"label-multi-select\"\n // No vertical clip/padding: at the minimum row height an `overflow-hidden` button would\n // crop the pills. The chip container is clamped to whole chip rows instead.\n className=\"group relative flex h-full w-full min-w-0 cursor-pointer items-center gap-1 pr-4 text-left hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring\"\n >\n {applied.length === 0 ? (\n <span className=\"flex-1\">\n <CellHoverIcon />\n </span>\n ) : (\n <>\n <div\n ref={chipsRef}\n className=\"flex min-w-0 flex-1 flex-wrap content-start gap-1 overflow-hidden\"\n style={{ maxHeight }}\n data-testid=\"label-multi-select-chips\"\n >\n {applied.map((o) => (\n <span\n key={o.id}\n className=\"inline-flex shrink-0 items-center gap-1 rounded border px-1.5 py-0.5 text-xs font-medium\"\n title={o.name}\n style={{ borderColor: o.color }}\n >\n <span\n className=\"flex size-3.5 shrink-0 items-center justify-center rounded\"\n style={{ backgroundColor: o.color }}\n >\n <Check className=\"size-2.5 text-white\" strokeWidth={3} />\n </span>\n <span className=\"max-w-[80px] truncate\">{o.name}</span>\n </span>\n ))}\n </div>\n {hasOverflow && (\n <span\n className=\"pointer-events-none absolute bottom-0.5 right-0.5 text-xs font-semibold leading-none text-muted-foreground\"\n aria-hidden\n data-testid=\"label-multi-select-overflow\"\n >\n …\n </span>\n )}\n </>\n )}\n </button>\n </PopoverTrigger>\n {open && (\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 onEditLabels={onEditLabels}\n labels={labels}\n />\n </PopoverContent>\n )}\n </Popover>\n )\n})\n"]}
@@ -85,7 +85,48 @@ function UploadDropzone({
85
85
  }
86
86
  );
87
87
  }
88
+ var ICONS = { pencil: lucideReact.Pencil, plus: lucideReact.Plus, blocked: lucideReact.Ban };
89
+ function CellHoverIcon({
90
+ kind = "pencil",
91
+ className
92
+ }) {
93
+ const Icon = ICONS[kind];
94
+ return /* @__PURE__ */ jsxRuntime.jsx(
95
+ "span",
96
+ {
97
+ "data-slot": "cell-hover-icon",
98
+ "data-kind": kind,
99
+ "aria-hidden": true,
100
+ className: ui.cn(
101
+ "inline-flex shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-70 group-focus-within:opacity-70 pointer-coarse:opacity-70",
102
+ className
103
+ ),
104
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "size-3.5" })
105
+ }
106
+ );
107
+ }
108
+ var HoverIconCell = react.memo(function HoverIconCell2({
109
+ content,
110
+ isEditable,
111
+ showIcon = true,
112
+ icon = "pencil",
113
+ className
114
+ }) {
115
+ return /* @__PURE__ */ jsxRuntime.jsxs(
116
+ "div",
117
+ {
118
+ "data-slot": "hover-icon-cell",
119
+ className: ui.cn("group flex h-full w-full items-center gap-2 pr-2", className),
120
+ children: [
121
+ content,
122
+ showIcon && /* @__PURE__ */ jsxRuntime.jsx(CellHoverIcon, { kind: isEditable ? icon : "blocked" })
123
+ ]
124
+ }
125
+ );
126
+ });
88
127
 
128
+ exports.CellHoverIcon = CellHoverIcon;
129
+ exports.HoverIconCell = HoverIconCell;
89
130
  exports.UploadDropzone = UploadDropzone;
90
- //# sourceMappingURL=chunk-DETZZBG2.cjs.map
91
- //# sourceMappingURL=chunk-DETZZBG2.cjs.map
131
+ //# sourceMappingURL=chunk-SIB6C7P7.cjs.map
132
+ //# sourceMappingURL=chunk-SIB6C7P7.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/files/UploadDropzone.tsx","../src/files/cells/HoverIconCell.tsx"],"names":["UploadCloud","useRef","useState","jsxs","cn","jsx","Loader2","Pencil","Plus","Ban","memo","HoverIconCell"],"mappings":";;;;;;;;AAsCO,SAAS,cAAA,CAAe;AAAA,EAC7B,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,QAAA,GAAW,KAAA;AAAA,EACX,SAAA,GAAY,KAAA;AAAA,EACZ,KAAA,GAAQ,iBAAA;AAAA,EACR,WAAA,GAAc,oBAAA;AAAA,EACd,IAAA;AAAA,EACA,cAAA,GAAiB,iBAAA;AAAA,EACjB,MAAM,IAAA,GAAOA,uBAAA;AAAA,EACb,MAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,QAAA,GAAWC,aAAyB,IAAI,CAAA;AAC9C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,eAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,QAAQ,QAAA,IAAY,SAAA;AAE1B,EAAA,MAAM,IAAA,GAAO,CAAC,KAAA,KAA2B;AACvC,IAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AACpB,IAAA,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,EAC3B,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,CAAC,CAAA,KAAoC;AAClD,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,WAAA,CAAY,KAAK,CAAA;AACjB,IAAA,IAAI,KAAA,EAAO;AACX,IAAA,IAAA,CAAK,CAAA,CAAE,aAAa,KAAK,CAAA;AAAA,EAC3B,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAoC;AACtD,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,IAAI,CAAC,KAAA,EAAO,WAAA,CAAY,IAAI,CAAA;AAAA,EAC9B,CAAA;AAEA,EAAA,uBACEC,eAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,SAAS,MAAM,CAAC,KAAA,IAAS,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,MACjD,MAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA,EAAa,MAAM,WAAA,CAAY,KAAK,CAAA;AAAA,MACpC,QAAA,EAAU,KAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MACb,SAAA,EAAWC,KAAA;AAAA,QACT,qHAAA;AAAA,QACA,oBAAA;AAAA,QACA,qGAAA;AAAA,QACA,QAAA,IAAY,+BAAA;AAAA,QACZ,KAAA,IAAS,8CAAA;AAAA,QACT;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAC,cAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,QAAA;AAAA,YACL,IAAA,EAAK,MAAA;AAAA,YACL,MAAA;AAAA,YACA,QAAA;AAAA,YACA,SAAA,EAAU,QAAA;AAAA,YACV,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,cAAA,IAAA,CAAK,CAAA,CAAE,OAAO,KAAK,CAAA;AACnB,cAAA,IAAI,QAAA,CAAS,OAAA,EAAS,QAAA,CAAS,OAAA,CAAQ,KAAA,GAAQ,EAAA;AAAA,YACjD,CAAA;AAAA,YACA,aAAA,EAAa,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,MAAA,CAAA,GAAW;AAAA;AAAA,SAC5C;AAAA,wBACAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kFAAA,EACZ,sCAAYA,cAAA,CAACC,mBAAA,EAAA,EAAQ,SAAA,EAAU,qBAAA,EAAsB,CAAA,mBAAKD,cAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,UAAS,CAAA,EACtF,CAAA;AAAA,QACC,SAAA,mBACCA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qCAAA,EAAuC,0BAAe,CAAA,mBAEnEF,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAA,CAAC,GAAA,EAAA,EAAE,WAAU,qCAAA,EACV,QAAA,EAAA;AAAA,YAAA,KAAA;AAAA,YAAM,GAAA;AAAA,4BAACE,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,WAAA,EAAY;AAAA,WAAA,EAC/D,CAAA;AAAA,UACC,IAAA,oBAAQA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAiC,QAAA,EAAA,IAAA,EAAK;AAAA,SAAA,EAC9D;AAAA;AAAA;AAAA,GAEJ;AAEJ;AChHA,IAAM,QAAQ,EAAE,MAAA,EAAQE,oBAAQ,IAAA,EAAMC,gBAAA,EAAM,SAASC,eAAA,EAAI;AAOlD,SAAS,aAAA,CAAc;AAAA,EAC5B,IAAA,GAAO,QAAA;AAAA,EACP;AACF,CAAA,EAGG;AACD,EAAA,MAAM,IAAA,GAAO,MAAM,IAAI,CAAA;AACvB,EAAA,uBACEJ,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,aAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAWD,KAAAA;AAAA,QACT,wJAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,kBAAAC,cAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAW;AAAA;AAAA,GAC7B;AAEJ;AAYO,IAAM,aAAA,GAAgBK,UAAA,CAAK,SAASC,cAAAA,CAAc;AAAA,EACvD,OAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,IAAA,GAAO,QAAA;AAAA,EACP;AACF,CAAA,EAAuB;AACrB,EAAA,uBACER,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAWC,KAAAA,CAAG,kDAAA,EAAoD,SAAS,CAAA;AAAA,MAE1E,QAAA,EAAA;AAAA,QAAA,OAAA;AAAA,QACA,4BAAYC,cAAAA,CAAC,iBAAc,IAAA,EAAM,UAAA,GAAa,OAAO,SAAA,EAAW;AAAA;AAAA;AAAA,GACnE;AAEJ,CAAC","file":"chunk-SIB6C7P7.cjs","sourcesContent":["import { useRef, useState } from 'react'\nimport type { DragEvent } from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { Loader2, UploadCloud } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport interface UploadDropzoneProps {\n /** Called with the chosen/dropped files. */\n onFiles: (files: File[]) => void\n /** `accept` attribute for the file picker (e.g. `.pdf,.docx`). */\n accept?: string\n /** Allow selecting more than one file. Defaults to true. */\n multiple?: boolean\n /** Disables picking/dropping (e.g. no active workspace yet). */\n disabled?: boolean\n /** Shows a spinner + busy copy while an upload is in flight. */\n uploading?: boolean\n /** Primary line, e.g. \"Drag files here\". */\n title?: string\n /** Secondary line under the title. */\n description?: string\n /** Small muted hint, e.g. \"PDF, DOCX, images — up to 50MB\". */\n hint?: string\n /** Copy shown next to the spinner while uploading. */\n uploadingLabel?: string\n /** Glyph in the tile. Defaults to an upload-cloud icon. */\n icon?: LucideIcon\n testId?: string\n className?: string\n}\n\n/**\n * A themeable drag-and-drop upload target. Source-agnostic: it just surfaces\n * chosen files via `onFiles` — the host owns the actual upload. Handles its own\n * drag-over state, click-to-browse, and a busy state, styled with the kit's\n * SEMANTIC tokens only (border, muted, primary, foreground) so it renders in\n * each host's colours.\n */\nexport function UploadDropzone({\n onFiles,\n accept,\n multiple = true,\n disabled = false,\n uploading = false,\n title = 'Drag files here',\n description = 'or click to browse',\n hint,\n uploadingLabel = 'Uploading…',\n icon: Icon = UploadCloud,\n testId,\n className,\n}: UploadDropzoneProps) {\n const inputRef = useRef<HTMLInputElement>(null)\n const [dragOver, setDragOver] = useState(false)\n const inert = disabled || uploading\n\n const pick = (files: FileList | null) => {\n if (!files?.length) return\n onFiles(Array.from(files))\n }\n\n const onDrop = (e: DragEvent<HTMLButtonElement>) => {\n e.preventDefault()\n setDragOver(false)\n if (inert) return\n pick(e.dataTransfer.files)\n }\n\n const onDragOver = (e: DragEvent<HTMLButtonElement>) => {\n e.preventDefault()\n if (!inert) setDragOver(true)\n }\n\n return (\n <button\n type=\"button\"\n onClick={() => !inert && inputRef.current?.click()}\n onDrop={onDrop}\n onDragOver={onDragOver}\n onDragLeave={() => setDragOver(false)}\n disabled={inert}\n data-testid={testId}\n className={cn(\n 'flex w-full flex-col items-center justify-center gap-3 rounded-lg bg-muted px-6 py-12 text-center transition-colors',\n 'hover:bg-accent/60',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n dragOver && 'bg-accent ring-2 ring-primary',\n inert && 'cursor-not-allowed opacity-60 hover:bg-muted',\n className\n )}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n className=\"hidden\"\n onChange={(e) => {\n pick(e.target.files)\n if (inputRef.current) inputRef.current.value = ''\n }}\n data-testid={testId ? `${testId}-input` : undefined}\n />\n <div className=\"flex size-12 items-center justify-center rounded-full bg-primary/10 text-primary\">\n {uploading ? <Loader2 className=\"size-6 animate-spin\" /> : <Icon className=\"size-6\" />}\n </div>\n {uploading ? (\n <p className=\"text-sm font-medium text-foreground\">{uploadingLabel}</p>\n ) : (\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-foreground\">\n {title} <span className=\"text-muted-foreground\">{description}</span>\n </p>\n {hint && <p className=\"text-xs text-muted-foreground\">{hint}</p>}\n </div>\n )}\n </button>\n )\n}\n","import { memo, type ReactNode } from 'react'\nimport { Ban, Pencil, Plus } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport type CellHoverIconKind = 'pencil' | 'plus' | 'blocked'\n\nconst ICONS = { pencil: Pencil, plus: Plus, blocked: Ban } as const\n\n/**\n * Edit hint of a grid cell. It appears on pointer hover, on keyboard focus anywhere inside the\n * cell and always on touch devices (coarse pointer), where there is no hover to reveal it.\n * Place it inside an element carrying the `group` class.\n */\nexport function CellHoverIcon({\n kind = 'pencil',\n className,\n}: {\n kind?: CellHoverIconKind\n className?: string\n}) {\n const Icon = ICONS[kind]\n return (\n <span\n data-slot=\"cell-hover-icon\"\n data-kind={kind}\n aria-hidden\n className={cn(\n 'inline-flex shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-70 group-focus-within:opacity-70 pointer-coarse:opacity-70',\n className\n )}\n >\n <Icon className=\"size-3.5\" />\n </span>\n )\n}\n\nexport interface HoverIconCellProps {\n content: ReactNode\n /** Non-members get a \"blocked\" hint instead of the edit hint. */\n isEditable: boolean\n showIcon?: boolean\n icon?: Exclude<CellHoverIconKind, 'blocked'>\n className?: string\n}\n\n/** A cell's content with the edit hint after it (pure CSS reveal: no re-render on mouse move). */\nexport const HoverIconCell = memo(function HoverIconCell({\n content,\n isEditable,\n showIcon = true,\n icon = 'pencil',\n className,\n}: HoverIconCellProps) {\n return (\n <div\n data-slot=\"hover-icon-cell\"\n className={cn('group flex h-full w-full items-center gap-2 pr-2', className)}\n >\n {content}\n {showIcon && <CellHoverIcon kind={isEditable ? icon : 'blocked'} />}\n </div>\n )\n})\n"]}
@@ -2,7 +2,6 @@
2
2
  'use strict';
3
3
 
4
4
  var chunk7G2LJMUG_cjs = require('./chunk-7G2LJMUG.cjs');
5
- var chunkMHVNT4J3_cjs = require('./chunk-MHVNT4J3.cjs');
6
5
  var chunkULWRNGGE_cjs = require('./chunk-ULWRNGGE.cjs');
7
6
  var lucideReact = require('lucide-react');
8
7
  var ui = require('@arbidocs/react/ui');
@@ -750,7 +749,7 @@ function RecipientPicker({
750
749
  {
751
750
  variant: "outline",
752
751
  size: "sm",
753
- disabled: candidates.length === 0,
752
+ disabled: hasNoKnownUsers,
754
753
  className: "w-full justify-start text-muted-foreground",
755
754
  children: [
756
755
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronsUpDown, { className: "mr-2 h-4 w-4" }),
@@ -762,7 +761,7 @@ function RecipientPicker({
762
761
  {
763
762
  variant: "ghost",
764
763
  size: "icon",
765
- disabled: candidates.length === 0,
764
+ disabled: hasNoKnownUsers,
766
765
  className: "h-7 w-7 rounded-full",
767
766
  title: l.addRecipient,
768
767
  "aria-label": l.addRecipient,
@@ -802,178 +801,6 @@ function RecipientPicker({
802
801
  ] }) });
803
802
  }
804
803
 
805
- // src/collaboration/mail/mailFolders.ts
806
- var isInboxFolder = (f) => f.id === "INBOX" || /^inbox$/i.test(f.name);
807
- function buildMailFolderTree(folders) {
808
- const root = { key: "", label: "", folder: null, children: [] };
809
- const byPath = /* @__PURE__ */ new Map([["", root]]);
810
- const sorted = [...folders].sort((a, b) => a.name.split("/").length - b.name.split("/").length);
811
- for (const f of sorted) {
812
- const parts = f.name.split("/");
813
- let path = "";
814
- let parent = root;
815
- parts.forEach((part, i) => {
816
- path = path ? `${path}/${part}` : part;
817
- let node = byPath.get(path);
818
- if (!node) {
819
- node = { key: path, label: part, folder: null, children: [] };
820
- byPath.set(path, node);
821
- parent.children.push(node);
822
- }
823
- if (i === parts.length - 1 && !node.folder) node.folder = f;
824
- parent = node;
825
- });
826
- }
827
- const order = (nodes) => {
828
- nodes.sort((a, b) => {
829
- const ai = a.folder ? isInboxFolder(a.folder) : false;
830
- const bi = b.folder ? isInboxFolder(b.folder) : false;
831
- if (ai !== bi) return ai ? -1 : 1;
832
- return a.label.localeCompare(b.label);
833
- });
834
- nodes.forEach((n) => order(n.children));
835
- };
836
- order(root.children);
837
- return root.children;
838
- }
839
- function descendantFolderIds(node) {
840
- return node.children.flatMap((c) => [
841
- ...c.folder ? [c.folder.id] : [],
842
- ...descendantFolderIds(c)
843
- ]);
844
- }
845
- function toggleMailFolder(selected, node, cascade) {
846
- const id = node.folder?.id;
847
- if (!id) return selected;
848
- if (selected.includes(id)) return selected.filter((s) => s !== id);
849
- const covered = cascade ? new Set(descendantFolderIds(node)) : /* @__PURE__ */ new Set();
850
- return [...selected.filter((s) => !covered.has(s)), id];
851
- }
852
- function hasSelectedDescendant(node, selected) {
853
- return node.children.some(
854
- (c) => c.folder && selected.includes(c.folder.id) || hasSelectedDescendant(c, selected)
855
- );
856
- }
857
- var DEFAULT_MAIL_FOLDER_TREE_LABELS = {
858
- collapse: "Collapse folder",
859
- expand: "Expand folder",
860
- recommended: "Recommended"
861
- };
862
- function MailFolderRow({
863
- labels,
864
- testIds,
865
- node,
866
- depth,
867
- selected,
868
- onToggle,
869
- ancestorSelected,
870
- cascade,
871
- expandAllNonce,
872
- collapseAllNonce
873
- }) {
874
- const f = node.folder;
875
- const [expanded, setExpanded] = react.useState(
876
- () => !!f && selected.includes(f.id) || hasSelectedDescendant(node, selected) || expandAllNonce > collapseAllNonce
877
- );
878
- const applied = react.useRef({ expand: expandAllNonce, collapse: collapseAllNonce });
879
- react.useEffect(() => {
880
- if (expandAllNonce > applied.current.expand) setExpanded(true);
881
- if (collapseAllNonce > applied.current.collapse) setExpanded(false);
882
- applied.current = { expand: expandAllNonce, collapse: collapseAllNonce };
883
- }, [expandAllNonce, collapseAllNonce]);
884
- const isSelected = ancestorSelected || !!f && selected.includes(f.id);
885
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
886
- /* @__PURE__ */ jsxRuntime.jsxs(
887
- "div",
888
- {
889
- className: "flex items-center gap-1.5 rounded px-1 py-1 text-sm hover:bg-muted/50 pointer-coarse:min-h-11",
890
- style: { paddingLeft: depth * 18 + 4 },
891
- children: [
892
- node.children.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
893
- "button",
894
- {
895
- type: "button",
896
- className: "flex size-4 shrink-0 items-center justify-center text-muted-foreground pointer-coarse:size-8",
897
- onClick: () => setExpanded((e) => !e),
898
- "aria-label": expanded ? labels.collapse : labels.expand,
899
- "aria-expanded": expanded,
900
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.toggle?.(node.key), {
901
- testId: `mail-folder-toggle-${node.key}`
902
- }),
903
- children: expanded ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "size-3.5" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "size-3.5" })
904
- }
905
- ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-4 shrink-0" }),
906
- f ? /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex min-w-0 flex-1 cursor-pointer items-center gap-2", children: [
907
- /* @__PURE__ */ jsxRuntime.jsx(
908
- ui.Checkbox,
909
- {
910
- checked: isSelected,
911
- disabled: ancestorSelected,
912
- onCheckedChange: () => onToggle(node),
913
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.checkbox?.(f.id), {
914
- testId: `mail-folder-checkbox-${f.id}`
915
- })
916
- }
917
- ),
918
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", title: f.name, children: node.label }),
919
- typeof f.count === "number" && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "shrink-0 text-xs text-muted-foreground", children: [
920
- "(",
921
- f.count.toLocaleString(),
922
- ")"
923
- ] }),
924
- isInboxFolder(f) && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-auto shrink-0 rounded bg-muted px-1.5 py-0.5 text-xs text-muted-foreground", children: labels.recommended })
925
- ] }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate font-medium text-muted-foreground", children: node.label })
926
- ]
927
- }
928
- ),
929
- expanded && node.children.map((c) => /* @__PURE__ */ jsxRuntime.jsx(
930
- MailFolderRow,
931
- {
932
- labels,
933
- testIds,
934
- node: c,
935
- depth: depth + 1,
936
- selected,
937
- onToggle,
938
- ancestorSelected: cascade && isSelected,
939
- cascade,
940
- expandAllNonce,
941
- collapseAllNonce
942
- },
943
- c.key
944
- ))
945
- ] });
946
- }
947
- function MailFolderTree({
948
- nodes,
949
- selected,
950
- onChange,
951
- cascade = true,
952
- expandAllNonce = 0,
953
- collapseAllNonce = 0,
954
- labels,
955
- testIds,
956
- className
957
- }) {
958
- const l = { ...DEFAULT_MAIL_FOLDER_TREE_LABELS, ...labels };
959
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cn("space-y-0.5", className), "data-slot": "mail-folder-tree", children: nodes.map((n) => /* @__PURE__ */ jsxRuntime.jsx(
960
- MailFolderRow,
961
- {
962
- labels: l,
963
- testIds,
964
- node: n,
965
- depth: 0,
966
- selected,
967
- onToggle: (node) => onChange(toggleMailFolder(selected, node, cascade)),
968
- ancestorSelected: false,
969
- cascade,
970
- expandAllNonce,
971
- collapseAllNonce
972
- },
973
- n.key
974
- )) });
975
- }
976
-
977
804
  exports.ActionMenu = ActionMenu;
978
805
  exports.AddContactsForm = AddContactsForm;
979
806
  exports.AddContactsResults = AddContactsResults;
@@ -985,7 +812,6 @@ exports.DEFAULT_DM_ACCESS_REQUEST_BANNER_LABELS = DEFAULT_DM_ACCESS_REQUEST_BANN
985
812
  exports.DEFAULT_DM_GRANT_ACCESS_DIALOG_LABELS = DEFAULT_DM_GRANT_ACCESS_DIALOG_LABELS;
986
813
  exports.DEFAULT_DM_INVITE_CHIP_LABELS = DEFAULT_DM_INVITE_CHIP_LABELS;
987
814
  exports.DEFAULT_DM_THREAD_FRAME_LABELS = DEFAULT_DM_THREAD_FRAME_LABELS;
988
- exports.DEFAULT_MAIL_FOLDER_TREE_LABELS = DEFAULT_MAIL_FOLDER_TREE_LABELS;
989
815
  exports.DEFAULT_RECIPIENT_PICKER_LABELS = DEFAULT_RECIPIENT_PICKER_LABELS;
990
816
  exports.DmAccessRequestBanner = DmAccessRequestBanner;
991
817
  exports.DmGrantAccessDialogView = DmGrantAccessDialogView;
@@ -995,7 +821,6 @@ exports.DmNewTabIcon = DmNewTabIcon;
995
821
  exports.DmThreadFrame = DmThreadFrame;
996
822
  exports.DmThreadHeader = DmThreadHeader;
997
823
  exports.MAX_INVITE_EMAILS = MAX_INVITE_EMAILS;
998
- exports.MailFolderTree = MailFolderTree;
999
824
  exports.MemberBulkActions = MemberBulkActions;
1000
825
  exports.MemberListLoading = MemberListLoading;
1001
826
  exports.MemberMutedText = MemberMutedText;
@@ -1004,15 +829,11 @@ exports.MemberRoleCell = MemberRoleCell;
1004
829
  exports.RecipientPicker = RecipientPicker;
1005
830
  exports.RoleSelect = RoleSelect;
1006
831
  exports.WorkspaceDeleteButton = WorkspaceDeleteButton;
1007
- exports.buildMailFolderTree = buildMailFolderTree;
1008
832
  exports.contactToVCard = contactToVCard;
1009
- exports.descendantFolderIds = descendantFolderIds;
1010
833
  exports.downloadVCard = downloadVCard;
1011
- exports.isInboxFolder = isInboxFolder;
1012
834
  exports.parseEmails = parseEmails;
1013
835
  exports.toAddContactsRow = toAddContactsRow;
1014
836
  exports.toAddContactsRows = toAddContactsRows;
1015
- exports.toggleMailFolder = toggleMailFolder;
1016
837
  exports.vCardFilename = vCardFilename;
1017
- //# sourceMappingURL=chunk-OPTBQSCV.cjs.map
1018
- //# sourceMappingURL=chunk-OPTBQSCV.cjs.map
838
+ //# sourceMappingURL=chunk-SMN32BQ3.cjs.map
839
+ //# sourceMappingURL=chunk-SMN32BQ3.cjs.map