@arbidocs/blocks 0.4.153 → 0.4.155

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 (248) hide show
  1. package/dist/{ConnectedNativeDocxComparison-OFPIXNJB.js → ConnectedNativeDocxComparison-OLWRQSRS.js} +11 -11
  2. package/dist/{ConnectedNativeDocxComparison-OFPIXNJB.js.map → ConnectedNativeDocxComparison-OLWRQSRS.js.map} +1 -1
  3. package/dist/{ConnectedNativeDocxComparison-Y5BNLNH6.cjs → ConnectedNativeDocxComparison-YORMOPPN.cjs} +12 -12
  4. package/dist/{ConnectedNativeDocxComparison-Y5BNLNH6.cjs.map → ConnectedNativeDocxComparison-YORMOPPN.cjs.map} +1 -1
  5. package/dist/{ConnectedNativeDocxEditor-LRYU5HPA.js → ConnectedNativeDocxEditor-34EBIIFS.js} +10 -10
  6. package/dist/{ConnectedNativeDocxEditor-LRYU5HPA.js.map → ConnectedNativeDocxEditor-34EBIIFS.js.map} +1 -1
  7. package/dist/{ConnectedNativeDocxEditor-HTEW5JAH.cjs → ConnectedNativeDocxEditor-EHTWGGX3.cjs} +12 -12
  8. package/dist/{ConnectedNativeDocxEditor-HTEW5JAH.cjs.map → ConnectedNativeDocxEditor-EHTWGGX3.cjs.map} +1 -1
  9. package/dist/{ConnectedStreamedWordArtifact-QW74LKHN.cjs → ConnectedStreamedWordArtifact-5DK6QGYN.cjs} +12 -12
  10. package/dist/ConnectedStreamedWordArtifact-5DK6QGYN.cjs.map +1 -0
  11. package/dist/{ConnectedStreamedWordArtifact-QAUVUCSX.js → ConnectedStreamedWordArtifact-GLIDLSAS.js} +11 -11
  12. package/dist/{ConnectedStreamedWordArtifact-QAUVUCSX.js.map → ConnectedStreamedWordArtifact-GLIDLSAS.js.map} +1 -1
  13. package/dist/WorkspaceTableView-5OWX53R5.js +376 -0
  14. package/dist/WorkspaceTableView-5OWX53R5.js.map +1 -0
  15. package/dist/WorkspaceTableView-ZFMAYHUD.cjs +378 -0
  16. package/dist/WorkspaceTableView-ZFMAYHUD.cjs.map +1 -0
  17. package/dist/agents/index.cjs +282 -282
  18. package/dist/agents/index.js +7 -7
  19. package/dist/{chunk-RQ2Y7USX.cjs → chunk-2VHYOTWW.cjs} +3 -3
  20. package/dist/chunk-2VHYOTWW.cjs.map +1 -0
  21. package/dist/{chunk-DTROMMDX.cjs → chunk-3VULDTNL.cjs} +4 -4
  22. package/dist/{chunk-DTROMMDX.cjs.map → chunk-3VULDTNL.cjs.map} +1 -1
  23. package/dist/{chunk-UTTTJSQU.cjs → chunk-4RPBUMHB.cjs} +4 -4
  24. package/dist/{chunk-UTTTJSQU.cjs.map → chunk-4RPBUMHB.cjs.map} +1 -1
  25. package/dist/chunk-53RCZPMR.cjs +496 -0
  26. package/dist/chunk-53RCZPMR.cjs.map +1 -0
  27. package/dist/chunk-5TDGVOR5.js +142 -0
  28. package/dist/chunk-5TDGVOR5.js.map +1 -0
  29. package/dist/chunk-6HMCF4AJ.js +1720 -0
  30. package/dist/chunk-6HMCF4AJ.js.map +1 -0
  31. package/dist/{chunk-CU2O32Z4.cjs → chunk-6QAAIDQQ.cjs} +62 -99
  32. package/dist/chunk-6QAAIDQQ.cjs.map +1 -0
  33. package/dist/chunk-7HHYMDPE.js +431 -0
  34. package/dist/chunk-7HHYMDPE.js.map +1 -0
  35. package/dist/{chunk-SMN32BQ3.cjs → chunk-7NL6WJER.cjs} +3 -160
  36. package/dist/chunk-7NL6WJER.cjs.map +1 -0
  37. package/dist/{chunk-IXWJGOM2.js → chunk-BQ77KSXU.js} +3 -3
  38. package/dist/{chunk-IXWJGOM2.js.map → chunk-BQ77KSXU.js.map} +1 -1
  39. package/dist/chunk-BTF4AZMG.js +148 -0
  40. package/dist/chunk-BTF4AZMG.js.map +1 -0
  41. package/dist/{chunk-HALD6ZB5.cjs → chunk-C3SMTA3C.cjs} +4 -4
  42. package/dist/{chunk-HALD6ZB5.cjs.map → chunk-C3SMTA3C.cjs.map} +1 -1
  43. package/dist/{chunk-GAYMJWTC.cjs → chunk-CB4TIDEX.cjs} +6 -6
  44. package/dist/{chunk-GAYMJWTC.cjs.map → chunk-CB4TIDEX.cjs.map} +1 -1
  45. package/dist/{chunk-KPZZ5FHE.cjs → chunk-CNHUJRQ4.cjs} +10 -6
  46. package/dist/chunk-CNHUJRQ4.cjs.map +1 -0
  47. package/dist/{chunk-Q4BY2CQQ.cjs → chunk-CQCNU5KT.cjs} +28 -28
  48. package/dist/{chunk-Q4BY2CQQ.cjs.map → chunk-CQCNU5KT.cjs.map} +1 -1
  49. package/dist/{chunk-GRGS5M6O.cjs → chunk-CROGFB46.cjs} +160 -3
  50. package/dist/chunk-CROGFB46.cjs.map +1 -0
  51. package/dist/{chunk-QN47Q4N7.js → chunk-CU6LDQ57.js} +3 -3
  52. package/dist/{chunk-QN47Q4N7.js.map → chunk-CU6LDQ57.js.map} +1 -1
  53. package/dist/{chunk-EF4ZLKRM.js → chunk-DEPF5LQI.js} +3 -3
  54. package/dist/{chunk-EF4ZLKRM.js.map → chunk-DEPF5LQI.js.map} +1 -1
  55. package/dist/{chunk-JAANWQGB.js → chunk-ETZ5A3GU.js} +3 -3
  56. package/dist/{chunk-JAANWQGB.js.map → chunk-ETZ5A3GU.js.map} +1 -1
  57. package/dist/{chunk-TBEVGWY3.js → chunk-F57LNUSZ.js} +10 -6
  58. package/dist/chunk-F57LNUSZ.js.map +1 -0
  59. package/dist/{chunk-GFNELPDP.cjs → chunk-FM3IRQJW.cjs} +10 -5
  60. package/dist/chunk-FM3IRQJW.cjs.map +1 -0
  61. package/dist/chunk-FPHTSNOE.js +465 -0
  62. package/dist/chunk-FPHTSNOE.js.map +1 -0
  63. package/dist/{chunk-OVR3XMYL.js → chunk-FYZXDZM7.js} +3 -3
  64. package/dist/{chunk-OVR3XMYL.js.map → chunk-FYZXDZM7.js.map} +1 -1
  65. package/dist/{chunk-2FLWPM3B.cjs → chunk-GC2FSPSQ.cjs} +7 -7
  66. package/dist/{chunk-2FLWPM3B.cjs.map → chunk-GC2FSPSQ.cjs.map} +1 -1
  67. package/dist/{chunk-DB2OXRQC.js → chunk-GO3BN76C.js} +7 -7
  68. package/dist/{chunk-DB2OXRQC.js.map → chunk-GO3BN76C.js.map} +1 -1
  69. package/dist/{chunk-XZIYRKLW.cjs → chunk-H32DV7XS.cjs} +5 -139
  70. package/dist/chunk-H32DV7XS.cjs.map +1 -0
  71. package/dist/{chunk-4236BRZK.js → chunk-HP2C4MD3.js} +29 -3
  72. package/dist/chunk-HP2C4MD3.js.map +1 -0
  73. package/dist/{chunk-ZP6Q3KXU.cjs → chunk-HUATKA3M.cjs} +4 -4
  74. package/dist/{chunk-ZP6Q3KXU.cjs.map → chunk-HUATKA3M.cjs.map} +1 -1
  75. package/dist/chunk-ISHFVKVU.js +304 -0
  76. package/dist/chunk-ISHFVKVU.js.map +1 -0
  77. package/dist/chunk-JUUOJP7I.cjs +164 -0
  78. package/dist/chunk-JUUOJP7I.cjs.map +1 -0
  79. package/dist/{chunk-4KMLM3GY.cjs → chunk-KBO75NLM.cjs} +7 -7
  80. package/dist/{chunk-4KMLM3GY.cjs.map → chunk-KBO75NLM.cjs.map} +1 -1
  81. package/dist/{chunk-Z4NQ3TED.js → chunk-KCSIX7CY.js} +3 -3
  82. package/dist/{chunk-Z4NQ3TED.js.map → chunk-KCSIX7CY.js.map} +1 -1
  83. package/dist/{chunk-DN2KI4BU.js → chunk-KDLX5AA7.js} +3 -3
  84. package/dist/{chunk-DN2KI4BU.js.map → chunk-KDLX5AA7.js.map} +1 -1
  85. package/dist/{chunk-WFA2GVZJ.js → chunk-MF5KQ4PS.js} +3 -3
  86. package/dist/{chunk-WFA2GVZJ.js.map → chunk-MF5KQ4PS.js.map} +1 -1
  87. package/dist/{chunk-YXNNNP57.js → chunk-MNG7N6M2.js} +4 -4
  88. package/dist/{chunk-YXNNNP57.js.map → chunk-MNG7N6M2.js.map} +1 -1
  89. package/dist/chunk-MSFQDELO.cjs +482 -0
  90. package/dist/chunk-MSFQDELO.cjs.map +1 -0
  91. package/dist/{chunk-T74Q3MCZ.cjs → chunk-MUDEL7UL.cjs} +25 -884
  92. package/dist/chunk-MUDEL7UL.cjs.map +1 -0
  93. package/dist/{chunk-KSHKTOY2.js → chunk-NUSBINUM.js} +3 -3
  94. package/dist/chunk-NUSBINUM.js.map +1 -0
  95. package/dist/{chunk-EYKISBDO.cjs → chunk-OALEDG67.cjs} +5 -5
  96. package/dist/{chunk-EYKISBDO.cjs.map → chunk-OALEDG67.cjs.map} +1 -1
  97. package/dist/{chunk-COCGRJLA.cjs → chunk-OFV3PRF2.cjs} +7 -7
  98. package/dist/{chunk-COCGRJLA.cjs.map → chunk-OFV3PRF2.cjs.map} +1 -1
  99. package/dist/chunk-OOU4QLRK.cjs +319 -0
  100. package/dist/chunk-OOU4QLRK.cjs.map +1 -0
  101. package/dist/chunk-OU3RGQFX.cjs +136 -0
  102. package/dist/chunk-OU3RGQFX.cjs.map +1 -0
  103. package/dist/{chunk-3PCBYOIZ.js → chunk-P6RIBIVN.js} +38 -7
  104. package/dist/chunk-P6RIBIVN.js.map +1 -0
  105. package/dist/{chunk-LXTOOUEN.cjs → chunk-Q7CQYYZW.cjs} +5 -5
  106. package/dist/{chunk-LXTOOUEN.cjs.map → chunk-Q7CQYYZW.cjs.map} +1 -1
  107. package/dist/{chunk-CROTH2BS.js → chunk-QKR5LWDO.js} +9 -40
  108. package/dist/{chunk-CROTH2BS.js.map → chunk-QKR5LWDO.js.map} +1 -1
  109. package/dist/chunk-REH7PX3N.cjs +145 -0
  110. package/dist/chunk-REH7PX3N.cjs.map +1 -0
  111. package/dist/chunk-RQKWYKZY.js +127 -0
  112. package/dist/chunk-RQKWYKZY.js.map +1 -0
  113. package/dist/{chunk-U6JQ4KMX.cjs → chunk-SN2GZ4ZM.cjs} +29 -2
  114. package/dist/chunk-SN2GZ4ZM.cjs.map +1 -0
  115. package/dist/{chunk-R6VCPDPF.js → chunk-SZSJGZSO.js} +156 -6
  116. package/dist/chunk-SZSJGZSO.js.map +1 -0
  117. package/dist/{chunk-US3S4DCB.js → chunk-TF7HN5EU.js} +10 -5
  118. package/dist/chunk-TF7HN5EU.js.map +1 -0
  119. package/dist/{chunk-YKQ2DPIP.js → chunk-VF5EUAIV.js} +3 -3
  120. package/dist/{chunk-YKQ2DPIP.js.map → chunk-VF5EUAIV.js.map} +1 -1
  121. package/dist/{chunk-KMZWKSKO.cjs → chunk-VZPFYZZU.cjs} +4 -4
  122. package/dist/{chunk-KMZWKSKO.cjs.map → chunk-VZPFYZZU.cjs.map} +1 -1
  123. package/dist/{chunk-HUJF2XM2.js → chunk-W7CWGURO.js} +28 -873
  124. package/dist/chunk-W7CWGURO.js.map +1 -0
  125. package/dist/{chunk-ZLEYLCE4.js → chunk-WK6FVIF7.js} +6 -156
  126. package/dist/chunk-WK6FVIF7.js.map +1 -0
  127. package/dist/chunk-WV4TD2HZ.cjs +1785 -0
  128. package/dist/chunk-WV4TD2HZ.cjs.map +1 -0
  129. package/dist/{chunk-COA3S3CZ.js → chunk-XI37A7HH.js} +4 -4
  130. package/dist/{chunk-COA3S3CZ.js.map → chunk-XI37A7HH.js.map} +1 -1
  131. package/dist/{chunk-LGBAZD37.js → chunk-XRL4R2TT.js} +7 -139
  132. package/dist/chunk-XRL4R2TT.js.map +1 -0
  133. package/dist/{chunk-4JNKXOFZ.cjs → chunk-YBJ4QGNH.cjs} +11 -11
  134. package/dist/{chunk-4JNKXOFZ.cjs.map → chunk-YBJ4QGNH.cjs.map} +1 -1
  135. package/dist/{chunk-GFOEWPAP.cjs → chunk-YF3QUHKN.cjs} +49 -12
  136. package/dist/chunk-YF3QUHKN.cjs.map +1 -0
  137. package/dist/{chunk-H4D7WKDY.js → chunk-YNMO3DSR.js} +3 -3
  138. package/dist/{chunk-H4D7WKDY.js.map → chunk-YNMO3DSR.js.map} +1 -1
  139. package/dist/citations/index.cjs +10 -10
  140. package/dist/citations/index.js +2 -2
  141. package/dist/collaboration/index.cjs +77 -77
  142. package/dist/collaboration/index.js +2 -2
  143. package/dist/connect/docx.cjs +14 -14
  144. package/dist/connect/docx.js +10 -10
  145. package/dist/connect/index.cjs +2820 -1043
  146. package/dist/connect/index.cjs.map +1 -1
  147. package/dist/connect/index.d.ts +4 -0
  148. package/dist/connect/index.js +2216 -504
  149. package/dist/connect/index.js.map +1 -1
  150. package/dist/connect/viewer.cjs +68 -72
  151. package/dist/connect/viewer.cjs.map +1 -1
  152. package/dist/connect/viewer.js +11 -15
  153. package/dist/connect/viewer.js.map +1 -1
  154. package/dist/connection/ConnectionProvider.d.ts +7 -0
  155. package/dist/connection/files/DocumentSyncGlyph.d.ts +28 -0
  156. package/dist/connection/files/explorer/ConnectedFilesExplorer.d.ts +56 -0
  157. package/dist/connection/files/explorer/FileTiles.d.ts +87 -0
  158. package/dist/connection/files/index.d.ts +5 -0
  159. package/dist/connection/files/store.d.ts +27 -0
  160. package/dist/connection/files/support.d.ts +38 -0
  161. package/dist/connection/projects/ConnectedProjectsPanel.d.ts +34 -0
  162. package/dist/connection/projects/index.d.ts +1 -0
  163. package/dist/connection/workspace-dashboard/ConnectedWorkspaceDashboard.d.ts +37 -0
  164. package/dist/connection/workspace-dashboard/dashboard-rows.d.ts +42 -0
  165. package/dist/connection/workspace-dashboard/index.d.ts +1 -0
  166. package/dist/connection/workspace-list/ConnectedWorkspaceList.d.ts +37 -0
  167. package/dist/connection/workspace-list/WorkspaceCardsView.d.ts +15 -0
  168. package/dist/connection/workspace-list/WorkspaceFilterMenu.d.ts +4 -0
  169. package/dist/connection/workspace-list/WorkspaceTableView.d.ts +13 -0
  170. package/dist/connection/workspace-list/index.d.ts +5 -0
  171. package/dist/connection/workspace-list/projectBilling.d.ts +21 -0
  172. package/dist/connection/workspace-list/useConnectedWorkspaceList.d.ts +251 -0
  173. package/dist/connection/workspace-list/workspaceTable.d.ts +58 -0
  174. package/dist/connection/workspace-settings/ConnectedWorkspaceMembers.d.ts +26 -0
  175. package/dist/connection/workspace-settings/ConnectedWorkspaceSettings.d.ts +7 -9
  176. package/dist/connection/workspace-settings/index.d.ts +2 -1
  177. package/dist/connection/workspace-settings/useConnectedWorkspaceSettings.d.ts +0 -1
  178. package/dist/facts/index.cjs +3 -3
  179. package/dist/facts/index.js +2 -2
  180. package/dist/files/DocStatusIcon.d.ts +5 -4
  181. package/dist/files/FailedStageIcon.d.ts +26 -0
  182. package/dist/files/folders/FolderProviderIcon.d.ts +29 -0
  183. package/dist/files/folders/folderPaths.d.ts +86 -0
  184. package/dist/files/folders/index.d.ts +2 -0
  185. package/dist/files/index.cjs +328 -240
  186. package/dist/files/index.d.ts +5 -0
  187. package/dist/files/index.js +4 -4
  188. package/dist/files/permissions.d.ts +28 -0
  189. package/dist/files/recently-deleted.d.ts +7 -0
  190. package/dist/files/visibility.d.ts +31 -0
  191. package/dist/home/index.cjs +119 -459
  192. package/dist/home/index.cjs.map +1 -1
  193. package/dist/home/index.js +13 -419
  194. package/dist/home/index.js.map +1 -1
  195. package/dist/index.cjs +480 -480
  196. package/dist/index.js +16 -16
  197. package/dist/provider/BlocksProvider.d.ts +9 -1
  198. package/dist/retrieval/index.cjs +4 -4
  199. package/dist/retrieval/index.js +2 -2
  200. package/dist/settings/index.cjs +169 -165
  201. package/dist/settings/index.d.ts +1 -0
  202. package/dist/settings/index.js +2 -2
  203. package/dist/settings/tri-state-filters.d.ts +13 -0
  204. package/dist/shell/index.cjs +44 -44
  205. package/dist/shell/index.js +3 -3
  206. package/dist/site/index.cjs +5 -5
  207. package/dist/site/index.js +1 -1
  208. package/dist/studio/index.cjs +14 -14
  209. package/dist/studio/index.js +6 -6
  210. package/dist/workflow-canvas/index.cjs +27 -27
  211. package/dist/workflow-canvas/index.js +9 -9
  212. package/dist/workspaces/index.cjs +110 -369
  213. package/dist/workspaces/index.cjs.map +1 -1
  214. package/dist/workspaces/index.d.ts +2 -0
  215. package/dist/workspaces/index.js +12 -350
  216. package/dist/workspaces/index.js.map +1 -1
  217. package/dist/workspaces/workspace-groups.d.ts +90 -0
  218. package/dist/workspaces/workspace-roles.d.ts +11 -0
  219. package/node_modules/@arbidocs/coedit/package.json +1 -1
  220. package/package.json +6 -5
  221. package/dist/ConnectedStreamedWordArtifact-QW74LKHN.cjs.map +0 -1
  222. package/dist/chunk-3PCBYOIZ.js.map +0 -1
  223. package/dist/chunk-4236BRZK.js.map +0 -1
  224. package/dist/chunk-CU2O32Z4.cjs.map +0 -1
  225. package/dist/chunk-EV7W64B6.js +0 -134
  226. package/dist/chunk-EV7W64B6.js.map +0 -1
  227. package/dist/chunk-GFNELPDP.cjs.map +0 -1
  228. package/dist/chunk-GFOEWPAP.cjs.map +0 -1
  229. package/dist/chunk-GRGS5M6O.cjs.map +0 -1
  230. package/dist/chunk-HUJF2XM2.js.map +0 -1
  231. package/dist/chunk-JGOST4IL.js +0 -648
  232. package/dist/chunk-JGOST4IL.js.map +0 -1
  233. package/dist/chunk-KPZZ5FHE.cjs.map +0 -1
  234. package/dist/chunk-KSHKTOY2.js.map +0 -1
  235. package/dist/chunk-LGBAZD37.js.map +0 -1
  236. package/dist/chunk-R6VCPDPF.js.map +0 -1
  237. package/dist/chunk-RQ2Y7USX.cjs.map +0 -1
  238. package/dist/chunk-RXK3XP62.cjs +0 -144
  239. package/dist/chunk-RXK3XP62.cjs.map +0 -1
  240. package/dist/chunk-SMN32BQ3.cjs.map +0 -1
  241. package/dist/chunk-T74Q3MCZ.cjs.map +0 -1
  242. package/dist/chunk-TBEVGWY3.js.map +0 -1
  243. package/dist/chunk-U6JQ4KMX.cjs.map +0 -1
  244. package/dist/chunk-US3S4DCB.js.map +0 -1
  245. package/dist/chunk-XZIYRKLW.cjs.map +0 -1
  246. package/dist/chunk-YAEXSCUW.cjs +0 -677
  247. package/dist/chunk-YAEXSCUW.cjs.map +0 -1
  248. package/dist/chunk-ZLEYLCE4.js.map +0 -1
@@ -71,6 +71,13 @@ export interface ConnectedWorkspace {
71
71
  userId: string | undefined;
72
72
  /** Re-assert the workspace on the server session before a workspace-scoped write. */
73
73
  ensureWorkspaceOpen: () => Promise<void>;
74
+ /**
75
+ * Go into a workspace: select it (with a connection) and show it (`BlocksEnvironment.
76
+ * openWorkspace`, where a host without a connection also switches its session).
77
+ */
78
+ openWorkspace: (workspaceId: string, options?: {
79
+ name?: string;
80
+ }) => Promise<void>;
74
81
  }
75
82
  /**
76
83
  * The workspace for a connected kit: the `ConnectionProvider`'s when there is one, else the host's
@@ -0,0 +1,28 @@
1
+ /**
2
+ * DocumentSyncGlyph
3
+ *
4
+ * Marks a document that's saved on THIS device for offline use — the
5
+ * OneDrive/Drive "available offline" convention: a small badge on the file icon.
6
+ * A down-arrow-to-line (the universal "downloaded / saved locally" glyph) so it
7
+ * reads instantly as "kept on my device" — clearer than a hard-drive icon and
8
+ * never confused with the "ready" checkmark. A neutral grey badge: ambient
9
+ * metadata, not a status to draw the eye (the document "ready" status owns the
10
+ * coloured cyan/navy treatment).
11
+ *
12
+ * Pending offline edits are shown separately, as a "changes pending" document
13
+ * status in the Status column — not here — so the file icon stays quiet and only
14
+ * the genuinely-useful "you can open this offline" signal lives on it.
15
+ *
16
+ * Self-subscribing to the offline set so it updates even inside a memoized grid
17
+ * cell. Renders nothing for cloud-only docs (the common case).
18
+ */
19
+ interface DocumentSyncGlyphProps {
20
+ docExtId: string;
21
+ size?: number;
22
+ className?: string;
23
+ /** Badge fill — neutral grey by default; pass e.g. `bg-green-600` for a
24
+ * prominent "downloaded" badge. */
25
+ bgClassName?: string;
26
+ }
27
+ export declare function DocumentSyncGlyph({ docExtId, size, className, bgClassName, }: DocumentSyncGlyphProps): import("react").JSX.Element | null;
28
+ export {};
@@ -0,0 +1,56 @@
1
+ /**
2
+ * The workspace's files as a file explorer (OneDrive / Drive style), bound to the session: folders
3
+ * come from each document's `folder` path; renames, moves and deletes are written through
4
+ * `@arbidocs/react`.
5
+ *
6
+ * - Breadcrumb navigation is the host's (`folderPath` / `onFolderPathChange`): it may keep the
7
+ * folder in a filter, the URL or state.
8
+ * - A virtualised tile grid that scales to thousands of documents, sized by `tileSize`.
9
+ * - OS-style selection: click, ⌘/Ctrl-click, shift-range, the hover checkbox and a marquee.
10
+ * - Drag files onto a folder tile to move them; drop OS files on the view to upload.
11
+ *
12
+ * Selection is the host's (`selectedIds` / `onSelectionChange`), so its bulk actions act on it.
13
+ */
14
+ import { type ReactNode } from 'react';
15
+ import { type ExplorerFolder, type ExplorerSort } from '../../../files/folders';
16
+ import { type FileTileDocument } from './FileTiles';
17
+ /** The zoom slider's bounds: the target tile width in px (smaller: more tiles per row). */
18
+ export declare const TILE_MIN = 88;
19
+ export declare const TILE_MAX = 232;
20
+ export declare const TILE_DEFAULT = 200;
21
+ export interface ConnectedFilesExplorerHandle {
22
+ /** Add a placeholder folder here and start naming it. */
23
+ triggerNewFolder: () => void;
24
+ /** Scroll the tile of `docId` into view, when it is displayed. */
25
+ scrollToDocument: (docId: string) => void;
26
+ }
27
+ export interface ConnectedFilesExplorerProps {
28
+ documents: FileTileDocument[];
29
+ isLoading: boolean;
30
+ /** The viewer may add, rename and move files here. */
31
+ canUpload: boolean;
32
+ selectedIds: string[];
33
+ onSelectionChange: (ids: string[]) => void;
34
+ onOpenDocument: (docId: string) => void;
35
+ onUploadFiles: (files: File[], folder?: string | null) => void;
36
+ /** The open folder (empty: the workspace root). */
37
+ folderPath: readonly string[];
38
+ onFolderPathChange: (path: string[]) => void;
39
+ /** A search across every folder (absent or empty: the open folder is listed). */
40
+ search?: string;
41
+ sort: ExplorerSort;
42
+ sortReversed: boolean;
43
+ /** The target tile width in px (`TILE_MIN`..`TILE_MAX`). */
44
+ tileSize: number;
45
+ /** The ids of the files displayed, in display order (a navigator steps the same list). */
46
+ onOrderedFilesChange?: (docIds: string[]) => void;
47
+ /** Move the selected files: the host opens its folder picker. Absent: not offered. */
48
+ onMoveSelected?: () => void;
49
+ /** Move a folder with its structure: the host opens its folder picker. */
50
+ onFolderMove?: (folder: ExplorerFolder) => void;
51
+ /** Open a document in the host's review view. Absent: not offered. */
52
+ onOpenInReview?: (docId: string) => void;
53
+ /** Shown instead of the explorer while the workspace has no documents and the viewer may add. */
54
+ emptyWorkspace?: ReactNode;
55
+ }
56
+ export declare const ConnectedFilesExplorer: import("react").ForwardRefExoticComponent<ConnectedFilesExplorerProps & import("react").RefAttributes<ConnectedFilesExplorerHandle>>;
@@ -0,0 +1,87 @@
1
+ /**
2
+ * The explorer's one tile binding. The presentation (`ExplorerFileTile`, `ExplorerFolderTile`,
3
+ * `ExplorerFileTooltip`) is in `files/`; this binds it to the session: @dnd-kit draggable and
4
+ * droppable, the document's live processing status, the copies kept offline, the open viewer, the
5
+ * document pill, the mail handoff and the member / label lookups. `FileTile` is a draggable
6
+ * document, `FolderTile` a droppable folder (separate components so the dnd hooks always run).
7
+ */
8
+ import { type WorkspaceDocument } from '@arbidocs/react';
9
+ import { type ExplorerDensity, type ExplorerMenuItem } from '../../../files/ExplorerTile';
10
+ import { type ExplorerFolder } from '../../../files/folders';
11
+ import { type FilesStartItem } from '../support';
12
+ export type { ExplorerDensity };
13
+ /** A workspace member as a tile shows them (avatar and name). */
14
+ export interface FileTileUser {
15
+ external_id: string;
16
+ given_name: string;
17
+ family_name?: string | null;
18
+ email: string;
19
+ picture?: string | null;
20
+ }
21
+ /** A document row as the tiles read it (the session's rows carry these). */
22
+ export type FileTileDocument = WorkspaceDocument & {
23
+ failed_stage?: string | null;
24
+ };
25
+ /** Whether a status is still being worked on. */
26
+ export declare function isActiveDocumentStatus(status: string): boolean;
27
+ /** The hover card of a document: the same in the explorer tiles and the table's name cell. */
28
+ export declare function FileTooltipContent({ doc, modifiedBy, tagNameById, }: {
29
+ doc: FileTileDocument;
30
+ modifiedBy?: FileTileUser;
31
+ tagNameById: ReadonlyMap<string, string>;
32
+ }): import("react").JSX.Element;
33
+ /** The "Start…" submenu: one entry per thing the host can start on the file or folder. */
34
+ export declare function startMenuItem(items: readonly FilesStartItem[]): ExplorerMenuItem[];
35
+ interface FileTileProps {
36
+ doc: FileTileDocument;
37
+ density: ExplorerDensity;
38
+ selected: boolean;
39
+ /** Part of an in-flight drag (dimmed). */
40
+ dragging: boolean;
41
+ /** Any tile is being dragged: no hover card, so it cannot swallow the moves dnd-kit tracks. */
42
+ dndActive: boolean;
43
+ /** Being renamed inline. */
44
+ renaming: boolean;
45
+ /** The viewer may delete this document. */
46
+ canDelete: boolean;
47
+ /** The first-page thumbnail (absent: the file-type icon). */
48
+ thumbnailUrl?: string;
49
+ /** Who last changed the document (the hover card's avatar line). */
50
+ modifiedBy?: FileTileUser;
51
+ /** Label id → name, for the document's labels on the hover card. */
52
+ tagNameById: ReadonlyMap<string, string>;
53
+ onSelect: (doc: FileTileDocument, e: React.MouseEvent) => void;
54
+ onToggle: (doc: FileTileDocument, e: React.MouseEvent) => void;
55
+ onOpen: (doc: FileTileDocument) => void;
56
+ /** Open the document in the review view. Absent: not offered. */
57
+ onReview?: (doc: FileTileDocument) => void;
58
+ onStartRename: (doc: FileTileDocument) => void;
59
+ onCommitRename: (doc: FileTileDocument, name: string) => void;
60
+ onCancelRename: () => void;
61
+ onDownload: (doc: FileTileDocument) => void;
62
+ onMove?: (doc: FileTileDocument) => void;
63
+ onDelete: (doc: FileTileDocument) => void;
64
+ }
65
+ export declare const FileTile: import("react").NamedExoticComponent<FileTileProps>;
66
+ interface FolderTileProps {
67
+ folder: ExplorerFolder;
68
+ density: ExplorerDensity;
69
+ /** Being renamed inline. */
70
+ editing?: boolean;
71
+ /** Every document beneath the folder is selected. */
72
+ selected?: boolean;
73
+ /** Some (not all) documents beneath the folder are selected. */
74
+ partiallySelected?: boolean;
75
+ /** Every document beneath the folder (its count of files still processing). */
76
+ documents: readonly FileTileDocument[];
77
+ onOpen: (folder: ExplorerFolder) => void;
78
+ /** Toggle the whole folder (all its documents). */
79
+ onToggleSelect?: (folder: ExplorerFolder, e: React.MouseEvent) => void;
80
+ onCommitName?: (folder: ExplorerFolder, name: string) => void;
81
+ onCancelName?: () => void;
82
+ onStartRename?: (folder: ExplorerFolder) => void;
83
+ onDownload?: (folder: ExplorerFolder) => void;
84
+ onMove?: (folder: ExplorerFolder) => void;
85
+ onDelete?: (folder: ExplorerFolder) => void;
86
+ }
87
+ export declare const FolderTile: import("react").NamedExoticComponent<FolderTileProps>;
@@ -0,0 +1,5 @@
1
+ export { ConnectedFilesExplorer, TILE_DEFAULT, TILE_MAX, TILE_MIN, type ConnectedFilesExplorerHandle, type ConnectedFilesExplorerProps, } from './explorer/ConnectedFilesExplorer';
2
+ export { FileTooltipContent, isActiveDocumentStatus, startMenuItem, type FileTileDocument, type FileTileUser, } from './explorer/FileTiles';
3
+ export { DocumentSyncGlyph } from './DocumentSyncGlyph';
4
+ export { FilesSupportProvider, useFilesSupport, useOfflineDocumentIds, useViewingDocumentId, type FilesStartItem, type FilesSupport, } from './support';
5
+ export { useFilesStore, usePendingFolders } from './store';
@@ -0,0 +1,27 @@
1
+ /**
2
+ * The Files kits' own state: empty folders the user created (a folder exists only through its
3
+ * documents, so a new one is a placeholder until something is moved into it), per workspace, for
4
+ * the session (kept in `sessionStorage`, so a reload keeps them).
5
+ */
6
+ interface FilesState {
7
+ /** Placeholder folder paths per workspace. */
8
+ pendingFolders: Readonly<Record<string, readonly string[]>>;
9
+ addPendingFolder: (workspaceId: string, path: string) => void;
10
+ removePendingFolder: (workspaceId: string, path: string) => void;
11
+ }
12
+ export declare const useFilesStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<FilesState>, "setState" | "persist"> & {
13
+ setState(partial: FilesState | Partial<FilesState> | ((state: FilesState) => FilesState | Partial<FilesState>), replace?: false | undefined): unknown;
14
+ setState(state: FilesState | ((state: FilesState) => FilesState), replace: true): unknown;
15
+ persist: {
16
+ setOptions: (options: Partial<import("zustand/middleware").PersistOptions<FilesState, unknown, unknown>>) => void;
17
+ clearStorage: () => void;
18
+ rehydrate: () => Promise<void> | void;
19
+ hasHydrated: () => boolean;
20
+ onHydrate: (fn: (state: FilesState) => void) => () => void;
21
+ onFinishHydration: (fn: (state: FilesState) => void) => () => void;
22
+ getOptions: () => Partial<import("zustand/middleware").PersistOptions<FilesState, unknown, unknown>>;
23
+ };
24
+ }>;
25
+ /** A workspace's placeholder folders. */
26
+ export declare function usePendingFolders(workspaceId: string | null | undefined): readonly string[];
27
+ export {};
@@ -0,0 +1,38 @@
1
+ /**
2
+ * What a host adds to the connected Files kits (explorer, table, page). The kits read and write the
3
+ * documents on the signed-in session by themselves (`@arbidocs/react`); these are the host's own
4
+ * things they cannot know: its workflows ("Start…"), its chat, its mail, the copies it keeps
5
+ * offline, its viewer. Every field is optional: without one a kit offers less, never something
6
+ * that does nothing.
7
+ */
8
+ import { type ReactNode } from 'react';
9
+ import type { WorkspaceDocument } from '@arbidocs/react';
10
+ /** Something the host can start on documents or a folder (a workflow, a skill). */
11
+ export interface FilesStartItem {
12
+ id: string;
13
+ title: string;
14
+ run: () => void;
15
+ }
16
+ export interface FilesSupport {
17
+ /** What can be started on one file. */
18
+ startItemsForFile?: (document: WorkspaceDocument) => FilesStartItem[];
19
+ /** What can be started on everything in a folder (workflows that take a set of files). */
20
+ startItemsForFolder?: (folderPath: string) => FilesStartItem[];
21
+ /** Start a chat about one document. Absent: not offered. */
22
+ openDocumentChat?: (docId: string) => void;
23
+ /** Hand a document to the host's mail composer as an attachment (offered while mail is on). */
24
+ emailDocument?: (document: WorkspaceDocument) => Promise<void>;
25
+ /** The documents kept on this device for offline use, as a hook. */
26
+ useOfflineDocumentIds?: () => ReadonlySet<string>;
27
+ /** The document open in the host's viewer, as a hook (its tile is marked); null when closed. */
28
+ useViewingDocumentId?: () => string | null;
29
+ }
30
+ export declare function FilesSupportProvider({ value, children, }: {
31
+ value: FilesSupport;
32
+ children: ReactNode;
33
+ }): import("react").JSX.Element;
34
+ export declare function useFilesSupport(): FilesSupport;
35
+ /** The documents kept offline (none without host support). */
36
+ export declare function useOfflineDocumentIds(): ReadonlySet<string>;
37
+ /** The document open in the host's viewer (none without host support). */
38
+ export declare function useViewingDocumentId(): string | null;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * The Projects panel ("Plan & Usage"): the base tab lists the user's projects (plan, usage,
3
+ * collaborators), the billing portal, the projects shared with them and the host's footer; each
4
+ * project the user opens gets a closeable tab with its detail. "New project" sits after the tabs.
5
+ *
6
+ * Opening a project anywhere goes through `BlocksEnvironment.openProject`. A host that opens
7
+ * project tabs from elsewhere (a workspace's project band, a quota warning) keeps the tabs itself
8
+ * (`tabs`); without it the panel keeps them and opens its own projects' tabs.
9
+ */
10
+ import { type ReactNode } from 'react';
11
+ /** The base tab's id. */
12
+ export declare const PROJECTS_BASE_TAB_ID = "projects";
13
+ /** The panel's project tabs, kept by a host. */
14
+ export interface ProjectPanelTabs {
15
+ /** The open project tabs, in order. */
16
+ openProjectIds: string[];
17
+ /** The project shown, or `null` for the base list. */
18
+ activeProjectId: string | null;
19
+ /** Show a project's tab (`null`: the base list). */
20
+ onSelect: (projectId: string | null) => void;
21
+ onClose: (projectId: string) => void;
22
+ }
23
+ export interface ConnectedProjectsPanelProps {
24
+ /** Host-kept tabs; the panel keeps its own without. */
25
+ tabs?: ProjectPanelTabs;
26
+ /** A project's storage section, at the foot of its detail. */
27
+ projectStorage?: (projectId: string) => ReactNode;
28
+ /** After the lists on the base tab (e.g. the deployment's storage, for its admins). */
29
+ footer?: ReactNode;
30
+ /** At the right of the tab header (e.g. the panel's mode switcher). */
31
+ headerRight?: ReactNode;
32
+ className?: string;
33
+ }
34
+ export declare function ConnectedProjectsPanel({ tabs: hostTabs, projectStorage, footer, headerRight, className, }: ConnectedProjectsPanelProps): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export { ConnectedProjectsPanel, PROJECTS_BASE_TAB_ID, type ConnectedProjectsPanelProps, type ProjectPanelTabs, } from './ConnectedProjectsPanel';
@@ -0,0 +1,37 @@
1
+ /**
2
+ * The open workspace's home: what a returning person needs, in order. What they can start (the
3
+ * host's Start band), then what is recent (the last files and threads, each a way back in), then
4
+ * its facts (upcoming dated ones, the newest others) beside the host's agenda.
5
+ *
6
+ * Every section always shows, each with its own empty state, so a new workspace has the same
7
+ * layout as a busy one. A row opens its thing (`BlocksEnvironment.openDocument` /
8
+ * `openConversation`); the sections, a fact, "New" and the empty states go through `actions`, the
9
+ * host's pages and dialogs.
10
+ */
11
+ import { type ReactNode } from 'react';
12
+ /** What a dashboard hands back to its host: its pages and dialogs. */
13
+ export interface WorkspaceDashboardActions {
14
+ /** A section's header: the Files, Threads or Facts page. */
15
+ openSection: (section: 'documents' | 'threads' | 'facts') => void;
16
+ /** A fact itself (the Facts page, at that fact). */
17
+ openFact: (factId: string) => void;
18
+ /** "New fact": the Facts page with its composer open. */
19
+ newFact: () => void;
20
+ /** "New" on Threads: the new-thread dialog. */
21
+ newThread: () => void;
22
+ /** The empty Threads card: a new, blank thread. */
23
+ ask: () => void;
24
+ /** The empty Files card: add files. */
25
+ addFiles: () => void;
26
+ }
27
+ export interface ConnectedWorkspaceDashboardProps {
28
+ actions: WorkspaceDashboardActions;
29
+ /** The Start band: what the workspace can do, each one click from underway. */
30
+ start?: ReactNode;
31
+ /** The Files section's add control (a source menu, say). */
32
+ addFilesAction?: ReactNode;
33
+ /** Beside the facts: what is coming up (the calendar's agenda, say). */
34
+ aside?: ReactNode;
35
+ testId?: string;
36
+ }
37
+ export declare function ConnectedWorkspaceDashboard({ actions, start, addFilesAction, aside, testId, }: ConnectedWorkspaceDashboardProps): import("react").JSX.Element;
@@ -0,0 +1,42 @@
1
+ import type { ConnectedConversation, ConnectedDocument } from '../workspaceData';
2
+ /**
3
+ * Rows per card: as far back as "recent" usefully reaches, and what lets the whole dashboard land
4
+ * on one 900px-tall screen.
5
+ */
6
+ export declare const RECENT_ROWS = 5;
7
+ /** Rows per facts group: a glanceable band, not a third list. */
8
+ export declare const FACT_ROWS = 3;
9
+ /** "30 Jun": an upcoming date shows as the date, not an age. */
10
+ export declare function shortDate(iso: string): string;
11
+ /** "14:30 · 4 Jan": the exact time (24h) before the date. */
12
+ export declare function timeAndDate(iso: string | null | undefined): string;
13
+ /** "low-content" → "Low content": a processing state in words. */
14
+ export declare function humanizeStatus(status: string): string;
15
+ export interface DashboardRowData {
16
+ id: string;
17
+ title: string;
18
+ subtitle: string;
19
+ time: string;
20
+ }
21
+ /** A task says where it stands (and when it is due); a plain thread says how long it is. */
22
+ export declare function recentConversations(conversations: ConnectedConversation[]): DashboardRowData[];
23
+ /** A file still processing says so; otherwise its length. */
24
+ export declare function recentDocuments(documents: ConnectedDocument[]): Array<DashboardRowData & {
25
+ fileName: string | null | undefined;
26
+ }>;
27
+ export type DashboardFactRow = Omit<DashboardRowData, 'subtitle'>;
28
+ interface DashboardFact {
29
+ external_id: string;
30
+ text: string;
31
+ date_start?: string | null;
32
+ created_at?: string | null;
33
+ }
34
+ /**
35
+ * Upcoming: dated facts from today on, soonest first (what you plan around). Recent: the newest of
36
+ * the rest (what the work just learned), stamped like the other rows.
37
+ */
38
+ export declare function splitFacts(facts: DashboardFact[], now?: Date): {
39
+ upcoming: DashboardFactRow[];
40
+ recent: DashboardFactRow[];
41
+ };
42
+ export {};
@@ -0,0 +1 @@
1
+ export { ConnectedWorkspaceDashboard, type ConnectedWorkspaceDashboardProps, type WorkspaceDashboardActions, } from './ConnectedWorkspaceDashboard';
@@ -0,0 +1,37 @@
1
+ /**
2
+ * The user's workspaces, grouped by project, as cards or as a table: the page a user picks a
3
+ * workspace from. A filter over projects and workspace kinds, "New" (the host's create dialog), a
4
+ * project's name opens the project (`BlocksEnvironment.openProject`), a workspace opens it
5
+ * (`useConnectedWorkspace().openWorkspace`), and the table deletes a selection.
6
+ *
7
+ * A host may keep the view, the filters and the table's column state across visits (controlled
8
+ * props), and add tabs of its own beside "Workspaces" (`extraTabs`, with `children` as their body).
9
+ */
10
+ import { type ReactNode } from 'react';
11
+ import type { GridState } from 'ag-grid-community';
12
+ import { type Tab } from '../../shell/TabHeader';
13
+ import { type WorkspaceListFilters, type WorkspaceListLabels } from './useConnectedWorkspaceList';
14
+ import type { RenderWorkspaceMember } from './workspaceTable';
15
+ export type WorkspaceListView = 'cards' | 'table';
16
+ /** The base tab's id. */
17
+ export declare const WORKSPACES_TAB_ID = "workspaces";
18
+ export interface ConnectedWorkspaceListProps {
19
+ /** Open the host's new-workspace dialog, in a project when given. */
20
+ onCreateWorkspace: (projectId?: string) => void;
21
+ view?: WorkspaceListView;
22
+ onViewChange?: (view: WorkspaceListView) => void;
23
+ filters?: WorkspaceListFilters;
24
+ onFiltersChange?: (filters: WorkspaceListFilters) => void;
25
+ /** The table's column state (widths, order, sort). */
26
+ gridState?: GridState;
27
+ onGridStateChange?: (state: GridState) => void;
28
+ /** A person in the table's Members column. Default: a plain avatar. */
29
+ renderMember?: RenderWorkspaceMember;
30
+ /** The host's tabs after "Workspaces"; `children` is the body while one of them is active. */
31
+ extraTabs?: Tab[];
32
+ activeTab?: string;
33
+ onTabChange?: (tabId: string) => void;
34
+ children?: ReactNode;
35
+ labels?: Partial<WorkspaceListLabels>;
36
+ }
37
+ export declare function ConnectedWorkspaceList({ onCreateWorkspace, view: controlledView, onViewChange, filters, onFiltersChange, gridState, onGridStateChange, renderMember, extraTabs, activeTab, onTabChange, children, labels, }: ConnectedWorkspaceListProps): import("react").JSX.Element;
@@ -0,0 +1,15 @@
1
+ import { type WorkspaceSummary } from '../../workspaces/WorkspaceCard';
2
+ import { type GroupedWorkspace } from '../../workspaces/workspace-groups';
3
+ import type { ConnectedWorkspaceListState } from './useConnectedWorkspaceList';
4
+ /** A workspace as its card shows it: summed counts, people only (owners first). */
5
+ export declare function toWorkspaceSummary(workspace: GroupedWorkspace, selfId: string | undefined): WorkspaceSummary;
6
+ export interface WorkspaceCardsViewProps {
7
+ list: ConnectedWorkspaceListState;
8
+ /** The open workspace (its card is marked current). */
9
+ currentWorkspaceId: string | null;
10
+ onOpenWorkspace: (workspace: GroupedWorkspace) => void;
11
+ onOpenProject: (projectId: string) => void;
12
+ onCreateWorkspace: (projectId?: string) => void;
13
+ createDisabledReason?: string;
14
+ }
15
+ export declare function WorkspaceCardsView({ list, currentWorkspaceId, onOpenWorkspace, onOpenProject, onCreateWorkspace, createDisabledReason, }: WorkspaceCardsViewProps): import("react").JSX.Element;
@@ -0,0 +1,4 @@
1
+ import type { ConnectedWorkspaceListState } from './useConnectedWorkspaceList';
2
+ export declare function WorkspaceFilterMenu({ list }: {
3
+ list: ConnectedWorkspaceListState;
4
+ }): import("react").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import type { GridState } from 'ag-grid-community';
2
+ import type { GroupedWorkspace } from '../../workspaces/workspace-groups';
3
+ import type { ConnectedWorkspaceListState } from './useConnectedWorkspaceList';
4
+ import { type RenderWorkspaceMember } from './workspaceTable';
5
+ export interface WorkspaceTableViewProps {
6
+ list: ConnectedWorkspaceListState;
7
+ onOpenWorkspace: (workspace: GroupedWorkspace) => void;
8
+ onOpenProject: (projectId: string) => void;
9
+ renderMember: RenderWorkspaceMember;
10
+ gridState?: GridState;
11
+ onGridStateChange?: (state: GridState) => void;
12
+ }
13
+ export declare function WorkspaceTableView({ list, onOpenWorkspace, onOpenProject, renderMember, gridState, onGridStateChange, }: WorkspaceTableViewProps): import("react").JSX.Element;
@@ -0,0 +1,5 @@
1
+ export { ConnectedWorkspaceList, WORKSPACES_TAB_ID, type ConnectedWorkspaceListProps, type WorkspaceListView, } from './ConnectedWorkspaceList';
2
+ export { useConnectedWorkspaceList, DEFAULT_WORKSPACE_LIST_LABELS, type ConnectedWorkspaceListState, type UseConnectedWorkspaceListOptions, type WorkspaceListFilters, type WorkspaceListLabels, } from './useConnectedWorkspaceList';
3
+ export { toWorkspaceSummary } from './WorkspaceCardsView';
4
+ export type { RenderWorkspaceMember } from './workspaceTable';
5
+ export { projectGroupBilling, type ProjectGroupBilling } from './projectBilling';
@@ -0,0 +1,21 @@
1
+ /**
2
+ * What a project's group in the workspace list says about the project itself: its plan badge (own
3
+ * projects, where plans are sold), the usage readout beside its name, and the plan and limits
4
+ * breakdown behind the name. One source for the cards' bands and the table's headings.
5
+ */
6
+ import type { ReactNode } from 'react';
7
+ import type { components } from '@arbidocs/client';
8
+ type Project = components['schemas']['ProjectResponse'];
9
+ export interface ProjectGroupBilling {
10
+ /** The plan badge: own projects only, where plans are sold. */
11
+ planBadge?: ReactNode;
12
+ /** Plan and usage, right after the name (projects with quotas). */
13
+ readout?: ReactNode;
14
+ /** The plan and limits panel behind the name; meters for own projects only. */
15
+ breakdown?: ReactNode;
16
+ }
17
+ export declare function projectGroupBilling(project: Project | undefined, { isOwned, stripeEnabled }: {
18
+ isOwned: boolean;
19
+ stripeEnabled: boolean;
20
+ }): ProjectGroupBilling;
21
+ export {};