@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
@@ -0,0 +1,251 @@
1
+ import type { TriState } from '../../settings/TriStateFilterMenu';
2
+ /** The persisted form of the filters: filter id → include / exclude (absent or null: off). */
3
+ export type WorkspaceListFilters = Record<string, TriState>;
4
+ export interface WorkspaceListLabels {
5
+ /** After a delete: where deleted workspaces can be restored from. */
6
+ recentlyDeletedHint: (count: number) => string;
7
+ }
8
+ export declare const DEFAULT_WORKSPACE_LIST_LABELS: WorkspaceListLabels;
9
+ export interface UseConnectedWorkspaceListOptions {
10
+ /** Controlled filters (a host that keeps them across visits); local state otherwise. */
11
+ filters?: WorkspaceListFilters;
12
+ onFiltersChange?: (filters: WorkspaceListFilters) => void;
13
+ labels?: Partial<WorkspaceListLabels>;
14
+ }
15
+ export declare function useConnectedWorkspaceList({ filters: controlledFilters, onFiltersChange, labels, }?: UseConnectedWorkspaceListOptions): {
16
+ selfId: string | undefined;
17
+ /** Every listed workspace (unfiltered): the filter menu's counts. */
18
+ workspaces: {
19
+ external_id: string;
20
+ name: string;
21
+ description: string | null;
22
+ is_public: boolean;
23
+ workspace_type: import("@arbidocs/client").components["schemas"]["WorkspaceType"];
24
+ created_by_ext_id: string;
25
+ updated_by_ext_id?: string | null | undefined;
26
+ created_at: string;
27
+ updated_at: string;
28
+ wrapped_key?: string | null | undefined;
29
+ is_member: boolean;
30
+ shared_conversation_count: number;
31
+ private_conversation_count: number;
32
+ shared_document_count: number;
33
+ private_document_count: number;
34
+ user_files_mb: number;
35
+ users: {
36
+ user: {
37
+ external_id: string;
38
+ parent_ext_id?: string | null | undefined;
39
+ email: string;
40
+ given_name: string;
41
+ family_name?: string | null | undefined;
42
+ picture?: string | null | undefined;
43
+ encryption_public_key: string;
44
+ is_sso: boolean;
45
+ is_identity_verified: boolean;
46
+ };
47
+ role: import("@arbidocs/client").components["schemas"]["WorkspaceRole"];
48
+ joined_at: string;
49
+ conversation_count: number;
50
+ document_count: number;
51
+ files_mb: number;
52
+ agent_ext_id?: string | null | undefined;
53
+ is_temporary: boolean;
54
+ }[];
55
+ project_ext_id?: string | null | undefined;
56
+ project_name?: string | null | undefined;
57
+ project_subscription?: string | null | undefined;
58
+ project_owner_ext_id?: string | null | undefined;
59
+ house_template_ext_id?: string | null | undefined;
60
+ archive?: {
61
+ status: "archiving" | "archived" | "restoring";
62
+ archived_at: string;
63
+ documents_done: number;
64
+ documents_total: number;
65
+ } | null | undefined;
66
+ }[];
67
+ projects: NoInfer<{
68
+ external_id: string;
69
+ name: string;
70
+ created_by: string;
71
+ subscription: string;
72
+ created_at: string;
73
+ quotas: {
74
+ storage_gb: {
75
+ used: number;
76
+ limit: number;
77
+ };
78
+ ai_usage: {
79
+ used: number;
80
+ limit: number;
81
+ };
82
+ collaborators: {
83
+ used: number;
84
+ limit: number;
85
+ };
86
+ budget_reset_at?: number | null | undefined;
87
+ };
88
+ daily_cap_per_user?: number | null | undefined;
89
+ budget?: {
90
+ amount: number;
91
+ currency: string;
92
+ } | null | undefined;
93
+ client?: string | null | undefined;
94
+ client_ref?: string | null | undefined;
95
+ stage?: string | null | undefined;
96
+ stage_changed_at?: string | null | undefined;
97
+ lead_user?: string | null | undefined;
98
+ fields?: {
99
+ [x: string]: unknown;
100
+ } | undefined;
101
+ field_schema?: {
102
+ key: string;
103
+ label?: string | null | undefined;
104
+ type: "text" | "number" | "date" | "checkbox" | "select" | "person" | "document" | "relation" | "lookup" | "rollup" | "tag";
105
+ options?: string[] | null | undefined;
106
+ }[] | null | undefined;
107
+ plan_interval?: ("month" | "year") | null | undefined;
108
+ packs: number;
109
+ plan_change?: {
110
+ result: "upgraded" | "scheduled" | "unchanged" | "requires_action";
111
+ charged_pence: number;
112
+ charged_ex_vat_pence: number;
113
+ confirm_url?: string | null | undefined;
114
+ } | null | undefined;
115
+ addons?: {
116
+ packs: number;
117
+ packs_next?: number | null | undefined;
118
+ plan_name: string;
119
+ plan_ai_gbp: number;
120
+ plan_storage_gb: number;
121
+ block_ai_gbp: number;
122
+ block_storage_gb: number;
123
+ ai_blocks: number;
124
+ storage_blocks: number;
125
+ legacy_ai_blocks: number;
126
+ legacy_storage_blocks: number;
127
+ legacy_block_ai_gbp: number;
128
+ legacy_block_storage_gb: number;
129
+ blocks_ai_gbp: number;
130
+ blocks_storage_gb: number;
131
+ ai_blocks_next?: number | null | undefined;
132
+ storage_blocks_next?: number | null | undefined;
133
+ storage_blocks_min: number;
134
+ auto_topup_threshold_gbp: number;
135
+ min_auto_topup_threshold_gbp: number;
136
+ spend_cap_pence?: number | null | undefined;
137
+ addon_spend_pence: number;
138
+ auto_spent_pence: number;
139
+ addon_spend_window_end?: number | null | undefined;
140
+ manual_spent_pence: number;
141
+ cap_left_pence?: number | null | undefined;
142
+ ai_used_gbp: number;
143
+ ai_allowance_gbp: number;
144
+ ai_allowance_next_gbp: number;
145
+ storage_used_gb: number;
146
+ storage_allowance_gb: number;
147
+ storage_allowance_next_gb: number;
148
+ ai_block_monthly_pence: number;
149
+ ai_block_monthly_ex_vat_pence: number;
150
+ storage_block_monthly_pence: number;
151
+ storage_block_monthly_ex_vat_pence: number;
152
+ ai_block_period_pence: number;
153
+ ai_block_period_ex_vat_pence: number;
154
+ storage_block_period_pence: number;
155
+ storage_block_period_ex_vat_pence: number;
156
+ ai_block_price_pence: number;
157
+ ai_block_price_ex_vat_pence: number;
158
+ storage_block_price_pence: number;
159
+ storage_block_price_ex_vat_pence: number;
160
+ cap_reached: boolean;
161
+ period_end?: number | null | undefined;
162
+ ai_usage_reset_at?: number | null | undefined;
163
+ pending_interval?: ("month" | "year") | null | undefined;
164
+ billing_error?: string | null | undefined;
165
+ confirm_url?: string | null | undefined;
166
+ payment?: {
167
+ status: "pending" | "paid";
168
+ kind?: ("ai_usage" | "storage") | null | undefined;
169
+ amount_pence?: number | null | undefined;
170
+ amount_ex_vat_pence?: number | null | undefined;
171
+ tax_pence?: number | null | undefined;
172
+ at?: number | null | undefined;
173
+ confirm_url?: string | null | undefined;
174
+ } | null | undefined;
175
+ } | null | undefined;
176
+ price_id?: string | null | undefined;
177
+ plan?: string | null | undefined;
178
+ amount?: number | null | undefined;
179
+ amount_ex_vat?: number | null | undefined;
180
+ currency?: string | null | undefined;
181
+ current_period_end?: number | null | undefined;
182
+ cancel_at_period_end?: boolean | null | undefined;
183
+ portal_url?: string | null | undefined;
184
+ }[]>;
185
+ pinned: Set<string>;
186
+ /** The filtered workspaces grouped by project, in list order. */
187
+ groups: import("../../workspaces").WorkspaceProjectGroup[];
188
+ /** How many workspaces the filters let through. */
189
+ shownCount: number;
190
+ isLoading: boolean;
191
+ error: Error | null;
192
+ canCreateProjects: boolean | undefined;
193
+ filters: Map<string, TriState>;
194
+ setFilters: (next: Map<string, TriState>) => void;
195
+ isCollapsed: (key: string) => boolean;
196
+ toggleGroup: (key: string) => void;
197
+ selected: {
198
+ external_id: string;
199
+ name: string;
200
+ description: string | null;
201
+ is_public: boolean;
202
+ workspace_type: import("@arbidocs/client").components["schemas"]["WorkspaceType"];
203
+ created_by_ext_id: string;
204
+ updated_by_ext_id?: string | null;
205
+ created_at: string;
206
+ updated_at: string;
207
+ wrapped_key?: string | null;
208
+ is_member: boolean;
209
+ shared_conversation_count: number;
210
+ private_conversation_count: number;
211
+ shared_document_count: number;
212
+ private_document_count: number;
213
+ user_files_mb: number;
214
+ users: import("@arbidocs/client").components["schemas"]["WorkspaceUserResponse"][];
215
+ project_ext_id?: string | null;
216
+ project_name?: string | null;
217
+ project_subscription?: string | null;
218
+ project_owner_ext_id?: string | null;
219
+ house_template_ext_id?: string | null;
220
+ archive?: import("@arbidocs/client").components["schemas"]["WorkspaceArchiveState"] | null;
221
+ }[];
222
+ setSelected: import("react").Dispatch<import("react").SetStateAction<{
223
+ external_id: string;
224
+ name: string;
225
+ description: string | null;
226
+ is_public: boolean;
227
+ workspace_type: import("@arbidocs/client").components["schemas"]["WorkspaceType"];
228
+ created_by_ext_id: string;
229
+ updated_by_ext_id?: string | null;
230
+ created_at: string;
231
+ updated_at: string;
232
+ wrapped_key?: string | null;
233
+ is_member: boolean;
234
+ shared_conversation_count: number;
235
+ private_conversation_count: number;
236
+ shared_document_count: number;
237
+ private_document_count: number;
238
+ user_files_mb: number;
239
+ users: import("@arbidocs/client").components["schemas"]["WorkspaceUserResponse"][];
240
+ project_ext_id?: string | null;
241
+ project_name?: string | null;
242
+ project_subscription?: string | null;
243
+ project_owner_ext_id?: string | null;
244
+ house_template_ext_id?: string | null;
245
+ archive?: import("@arbidocs/client").components["schemas"]["WorkspaceArchiveState"] | null;
246
+ }[]>>;
247
+ canDeleteSelected: boolean;
248
+ deleteSelected: () => Promise<void>;
249
+ isDeleting: boolean;
250
+ };
251
+ export type ConnectedWorkspaceListState = ReturnType<typeof useConnectedWorkspaceList>;
@@ -0,0 +1,58 @@
1
+ /**
2
+ * The workspace list as a table: each project is a heading row with its workspaces underneath.
3
+ *
4
+ * A project is a container, not a workspace: its heading is presentation only. It cannot be
5
+ * selected, does not sort as data (it is regrouped back above its workspaces after a sort), and
6
+ * shows the project's own facts (name, billing) under Name and its group's totals in the count
7
+ * columns, lined up with the workspace rows they sum. AG Grid Community has no row grouping, so the
8
+ * rows are a flat union and `postSortRows` keeps each group together.
9
+ */
10
+ import { type ReactNode } from 'react';
11
+ import type { ColDef } from 'ag-grid-community';
12
+ import { type GroupedWorkspace, type WorkspaceGroupStats, type WorkspaceProjectGroup } from '../../workspaces/workspace-groups';
13
+ type WorkspaceMemberUser = GroupedWorkspace['users'][number]['user'];
14
+ /** How a person shows in the Members column (the host's own user chip, say). */
15
+ export type RenderWorkspaceMember = (user: WorkspaceMemberUser, size: 'xs' | 'sm') => ReactNode;
16
+ export interface WorkspaceTableHeadingRow {
17
+ kind: 'heading';
18
+ key: string;
19
+ /** Section order: the groups' order. */
20
+ groupIndex: number;
21
+ group: WorkspaceProjectGroup;
22
+ stats: WorkspaceGroupStats;
23
+ }
24
+ export interface WorkspaceTableItemRow {
25
+ kind: 'workspace';
26
+ key: string;
27
+ groupIndex: number;
28
+ workspace: GroupedWorkspace;
29
+ }
30
+ export type WorkspaceTableRow = WorkspaceTableHeadingRow | WorkspaceTableItemRow;
31
+ export declare const isWorkspaceRow: (row: WorkspaceTableRow) => row is WorkspaceTableItemRow;
32
+ /**
33
+ * One heading per group with workspaces, followed by them unless the group is collapsed. (An own
34
+ * project with no workspace yet has a band among the cards, but no heading here.)
35
+ */
36
+ export declare function buildWorkspaceTableRows(groups: readonly WorkspaceProjectGroup[], isCollapsed?: (key: string) => boolean): WorkspaceTableRow[];
37
+ /** What a project heading needs beyond its row: its billing and the group's actions. */
38
+ export interface ProjectHeadingContext {
39
+ isCollapsed: (key: string) => boolean;
40
+ onToggle: (key: string) => void;
41
+ onOpenProject: (projectId: string) => void;
42
+ /** The heading's billing line and breakdown (`projectGroupBilling`). */
43
+ billing: (group: WorkspaceProjectGroup) => {
44
+ readout?: ReactNode;
45
+ breakdown?: ReactNode;
46
+ createdAt?: string;
47
+ };
48
+ }
49
+ /**
50
+ * The table's columns. There is no Project column (the project is the heading above each group),
51
+ * and no column filters (they cannot mix with heading rows): the filter sits above the table.
52
+ */
53
+ export declare function workspaceTableColumns({ selfId, renderMember, heading, }: {
54
+ selfId: string | undefined;
55
+ renderMember: RenderWorkspaceMember;
56
+ heading: ProjectHeadingContext;
57
+ }): ColDef<WorkspaceTableRow>[];
58
+ export {};
@@ -0,0 +1,26 @@
1
+ /**
2
+ * A workspace's member table: name, email, role (an owner changes it inline, or for a selection),
3
+ * when they joined, their threads, documents and storage. You come first, then by role. An owner
4
+ * removes a selection (never an owner or themselves) after one confirmation.
5
+ */
6
+ import { type ReactNode } from 'react';
7
+ import type { GridState } from 'ag-grid-community';
8
+ import type { components } from '@arbidocs/client';
9
+ type Workspace = components['schemas']['WorkspaceResponse'];
10
+ export type WorkspaceMemberRow = Workspace['users'][number];
11
+ export interface ConnectedWorkspaceMembersProps {
12
+ workspace: Workspace;
13
+ members: WorkspaceMemberRow[];
14
+ /** The viewer (`usr-…`). */
15
+ selfId: string | undefined;
16
+ isOwner: boolean;
17
+ isLoading?: boolean;
18
+ /** No edits (role changes, removal), whoever looks. */
19
+ readOnly?: boolean;
20
+ /** A person in the Name column. Default: a plain pill. */
21
+ renderMember?: (member: WorkspaceMemberRow) => ReactNode;
22
+ gridState?: GridState;
23
+ onGridStateChange?: (state: GridState) => void;
24
+ }
25
+ export declare function ConnectedWorkspaceMembers({ workspace, members, selfId, isOwner: isOwnerRaw, isLoading, readOnly, renderMember, gridState, onGridStateChange, }: ConnectedWorkspaceMembersProps): import("react").JSX.Element;
26
+ export {};
@@ -10,14 +10,9 @@ import { type ReactNode } from 'react';
10
10
  import { type WorkspaceRole } from '@arbidocs/react';
11
11
  import type { components } from '@arbidocs/client';
12
12
  import { type ShareOutcome } from './useConnectedWorkspaceSettings';
13
+ import type { GridState } from 'ag-grid-community';
13
14
  type Workspace = components['schemas']['WorkspaceResponse'];
14
15
  type WorkspaceMember = Workspace['users'][number];
15
- export interface WorkspaceMembersSlot {
16
- workspace: Workspace;
17
- members: WorkspaceMember[];
18
- onRemove: (userExtId: string, email: string, name: string) => Promise<void>;
19
- isRemoving: boolean;
20
- }
21
16
  export interface WorkspaceShareSlot {
22
17
  open: boolean;
23
18
  onOpenChange: (open: boolean) => void;
@@ -35,8 +30,11 @@ export interface ConnectedWorkspaceSettingsProps {
35
30
  }) => ReactNode;
36
31
  /** The project line under the workspace mark. */
37
32
  projectLine?: (workspace: Workspace) => ReactNode;
38
- /** The full member table, shown when the member avatars are opened. */
39
- membersTable?: (ctx: WorkspaceMembersSlot) => ReactNode;
33
+ /** A person in the member table (opened from the member avatars). Default: a plain pill. */
34
+ renderMember?: (member: WorkspaceMember) => ReactNode;
35
+ /** The member table's column state. */
36
+ membersGridState?: GridState;
37
+ onMembersGridStateChange?: (state: GridState) => void;
40
38
  /** The dialog behind Share (owners only). */
41
39
  shareDialog?: (ctx: WorkspaceShareSlot) => ReactNode;
42
40
  /** The workspace's dashboard, between the identity and the page foot. */
@@ -49,5 +47,5 @@ export interface ConnectedWorkspaceSettingsProps {
49
47
  onLeft?: () => void;
50
48
  testId?: string;
51
49
  }
52
- export declare function ConnectedWorkspaceSettings({ workspaceId, project, projectLine, membersTable, shareDialog, children, onExport, onOpenActivity, onLeft, testId, }: ConnectedWorkspaceSettingsProps): import("react").JSX.Element;
50
+ export declare function ConnectedWorkspaceSettings({ workspaceId, project, projectLine, renderMember, membersGridState, onMembersGridStateChange, shareDialog, children, onExport, onOpenActivity, onLeft, testId, }: ConnectedWorkspaceSettingsProps): import("react").JSX.Element;
53
51
  export {};
@@ -1,2 +1,3 @@
1
- export { ConnectedWorkspaceSettings, type ConnectedWorkspaceSettingsProps, type WorkspaceMembersSlot, type WorkspaceShareSlot, } from './ConnectedWorkspaceSettings';
1
+ export { ConnectedWorkspaceSettings, type ConnectedWorkspaceSettingsProps, type WorkspaceShareSlot, } from './ConnectedWorkspaceSettings';
2
2
  export { useConnectedWorkspaceSettings, type ShareOutcome, type UseConnectedWorkspaceSettingsOptions, } from './useConnectedWorkspaceSettings';
3
+ export { ConnectedWorkspaceMembers, type ConnectedWorkspaceMembersProps, type WorkspaceMemberRow, } from './ConnectedWorkspaceMembers';
@@ -84,7 +84,6 @@ export declare function useConnectedWorkspaceSettings(workspaceId: string, { onL
84
84
  }) => Promise<void>;
85
85
  setPublic: (isPublic: boolean) => Promise<void>;
86
86
  share: (emails: string[], memberRole?: WorkspaceRole) => Promise<ShareOutcome>;
87
- removeMember: (userExtId: string, email: string, name: string) => Promise<void>;
88
87
  leave: () => Promise<void>;
89
88
  isSharing: boolean;
90
89
  isRemoving: boolean;
@@ -4,7 +4,7 @@
4
4
  var chunkB3FMUFAW_cjs = require('../chunk-B3FMUFAW.cjs');
5
5
  require('../chunk-2WLXQGWC.cjs');
6
6
  var chunk5FYU7ZIU_cjs = require('../chunk-5FYU7ZIU.cjs');
7
- var chunkUTTTJSQU_cjs = require('../chunk-UTTTJSQU.cjs');
7
+ var chunk4RPBUMHB_cjs = require('../chunk-4RPBUMHB.cjs');
8
8
  require('../chunk-VPPX5XUF.cjs');
9
9
  var chunkRC25WMVB_cjs = require('../chunk-RC25WMVB.cjs');
10
10
  require('../chunk-V4ISCZJ7.cjs');
@@ -15,7 +15,7 @@ require('../chunk-7RGLTF76.cjs');
15
15
  require('../chunk-FX3K6LNZ.cjs');
16
16
  require('../chunk-PPCATBOY.cjs');
17
17
  var chunkMHVNT4J3_cjs = require('../chunk-MHVNT4J3.cjs');
18
- require('../chunk-KPZZ5FHE.cjs');
18
+ require('../chunk-CNHUJRQ4.cjs');
19
19
  require('../chunk-ULWRNGGE.cjs');
20
20
  var chunkKDG6FER6_cjs = require('../chunk-KDG6FER6.cjs');
21
21
  require('../chunk-DES3K4SD.cjs');
@@ -330,7 +330,7 @@ function FactSearchResult({
330
330
  }
331
331
  ),
332
332
  /* @__PURE__ */ jsxRuntime.jsx(
333
- chunkUTTTJSQU_cjs.SearchHit,
333
+ chunk4RPBUMHB_cjs.SearchHit,
334
334
  {
335
335
  className: "min-w-0 flex-1",
336
336
  testId: chunkMHVNT4J3_cjs.testIdOr(testIds?.hit?.(id), { testId: `facts-smart-search-hit-${id}` }),
@@ -3,7 +3,7 @@ import { DEFAULT_FACT_COLUMN_LABELS, createFactColumns, FactRowActions } from '.
3
3
  export { DEFAULT_FACTS_BULK_BAR_LABELS, DEFAULT_FACTS_EMPTY_STATE_LABELS, DEFAULT_FACTS_FIELDS_BUTTON_LABELS, DEFAULT_FACTS_TOOLBAR_LABELS, DEFAULT_FACTS_VIEW_TOGGLE_LABELS, DEFAULT_FACT_COLUMN_LABELS, DEFAULT_FACT_COLUMN_ORDER, DEFAULT_FACT_COMPOSER_LABELS, DEFAULT_FACT_DATE_INPUT_LABELS, DEFAULT_FACT_LABELS_CELL_LABELS, DEFAULT_FACT_ROW_ACTIONS_LABELS, DEFAULT_FACT_SOURCES_ROW_LABELS, DEFAULT_FACT_SOURCE_GROUP_LABELS, DEFAULT_FACT_TIMELINE_LABELS, EMPTY_FACT_DATE_FIELDS, FactComposer, FactDateInput, FactFieldRow, FactLabelsCell, FactRowActions, FactSourceGroup, FactSourcesRow, FactsBulkBar, FactsCalendar, FactsEmptyState, FactsFieldsButton, FactsGanttPane, FactsLoadError, FactsLoading, FactsToolbar, FactsViewToggle, ISO_DATE_FILTER_PARAMS, buildFactCitations, chunkIdsOf, citedVersionRef, createFactColumns, docIdsOf, enableFactTableColumnResize, factDateFieldsToSpan, factDateSpanToFields, hasChunk, isWholeDoc, sourceDocCount, toFactCitations, withChunk, withDoc, withoutChunk, withoutDoc } from '../chunk-WU34CHU5.js';
4
4
  import '../chunk-JJA6GQKH.js';
5
5
  export { DEFAULT_FACT_PASSAGES_LABELS, FactPassageItem, FactSourcesPanel, renderPreviewInline, toPreviewLine } from '../chunk-HFZ45FD3.js';
6
- import { SearchHit } from '../chunk-EF4ZLKRM.js';
6
+ import { SearchHit } from '../chunk-DEPF5LQI.js';
7
7
  import '../chunk-4EZVCGRL.js';
8
8
  export { decodeWhitespaceEntities } from '../chunk-AF6RDAJF.js';
9
9
  import '../chunk-NUNKSZKU.js';
@@ -14,7 +14,7 @@ import '../chunk-4WWM3GQ5.js';
14
14
  import '../chunk-SLSBJRWW.js';
15
15
  import '../chunk-NPLYHR2E.js';
16
16
  import { testIdOr } from '../chunk-7F6CBP3Z.js';
17
- import '../chunk-TBEVGWY3.js';
17
+ import '../chunk-F57LNUSZ.js';
18
18
  import '../chunk-TX2ZICS7.js';
19
19
  import { initials } from '../chunk-OXF2IFXG.js';
20
20
  import '../chunk-VUNV25KB.js';
@@ -1,12 +1,13 @@
1
- import type { ReactNode } from 'react';
2
1
  export interface DocStatusIconProps {
3
2
  /** Document processing status (case-insensitive); unknown / empty renders nothing. */
4
3
  status?: string | null;
5
4
  /** Activating the glyph (click, Enter, Space) e.g. opens the status details. */
6
5
  onClick?: () => void;
7
- /** The `failed` glyph is stage-aware and host-supplied. */
8
- failed?: ReactNode;
6
+ /** Where a failed document's processing stopped (the failed glyph differs per stage). */
7
+ failedStage?: string | null;
8
+ /** Why it failed, added to the failed glyph's title. */
9
+ errorMessage?: string | null;
9
10
  className?: string;
10
11
  }
11
12
  /** Compact status glyph of a document row (ready, empty, low content, indexing, queued, failed). */
12
- export declare function DocStatusIcon({ status, onClick, failed, className }: DocStatusIconProps): import("react").JSX.Element | null;
13
+ export declare function DocStatusIcon({ status, onClick, failedStage, errorMessage, className, }: DocStatusIconProps): import("react").JSX.Element | null;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Stage-aware failure icon.
3
+ *
4
+ * All variants share the red color and "alert" weight so the cell still
5
+ * reads as "failure" at a glance, but the glyph differs per pipeline
6
+ * stage so users can tell *where* it died without opening details.
7
+ *
8
+ * Backend taxonomy (mirrors src/models/document.py FAILABLE_STAGES):
9
+ * parsing — parser service: extraction / OCR / marker-subchunk
10
+ * indexing — Qdrant chunk + vector writes
11
+ * encrypting — SecretBox wrap of chunks/metadata
12
+ * analysing — doctagllm metadata extraction
13
+ * queued — failed before processing started
14
+ * unknown — current code couldn't classify (defensive fallback)
15
+ * null — legacy failure predating the failed_stage column;
16
+ * rendered as "Failed (stage unknown)"
17
+ */
18
+ export type FailedStage = 'parsing' | 'indexing' | 'encrypting' | 'analysing' | 'queued' | 'unknown';
19
+ interface FailedStageIconProps {
20
+ stage: string | null | undefined;
21
+ errorMessage?: string | null;
22
+ className?: string;
23
+ onClick?: (e: React.MouseEvent) => void;
24
+ }
25
+ export declare const FailedStageIcon: import("react").NamedExoticComponent<FailedStageIconProps>;
26
+ export {};
@@ -0,0 +1,29 @@
1
+ /**
2
+ * folderProviderIcon
3
+ *
4
+ * Maps a folder path to the brand mark of the connector that imported it, so
5
+ * connector-created folders (e.g. "Outlook (jane@arbi.city)") show their
6
+ * source at a glance. Only the ROOT segment is matched — nested subfolders
7
+ * keep the generic folder icon. Returns null when the root isn't a known
8
+ * provider (including the legacy bare "Email" root), letting call sites fall
9
+ * back to their existing folder glyph.
10
+ */
11
+ /**
12
+ * Provider brand mark for a folder path's root segment, or null when the
13
+ * folder isn't a connector import (call sites render their usual icon).
14
+ */
15
+ export declare function FolderProviderIcon({ folderPath, className, }: {
16
+ folderPath: string;
17
+ className?: string;
18
+ }): import("react").JSX.Element | null;
19
+ /** True when the folder path's root segment belongs to a known connector. */
20
+ export declare function hasFolderProviderIcon(folderPath: string): boolean;
21
+ /**
22
+ * Display text for a single folder path segment. Provider roots drop the
23
+ * provider name — the brand mark already says it — leaving just the account:
24
+ * "Outlook (jane@arbi.city)" → "jane@arbi.city"
25
+ * "Outlook" (legacy bare root) → "" (the logo stands alone)
26
+ * Non-provider segments are returned unchanged. Stored paths are untouched;
27
+ * this is display-only.
28
+ */
29
+ export declare function formatFolderSegment(segment: string): string;
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Pure helpers that turn the flat document list into a navigable folder tree.
3
+ *
4
+ * Folders are not a backend entity — each document carries a slash-separated
5
+ * `folder` path string (e.g. `"Reports/Q1"`, or `null`/`""` for the root).
6
+ * These helpers derive, for a given path, the immediate sub-folders (with
7
+ * descendant counts) and the files that live directly in that folder. Kept
8
+ * pure and side-effect-free so the navigation logic is unit-testable.
9
+ */
10
+ /** The fields of a document the folder view reads. */
11
+ export interface FolderDocument {
12
+ external_id: string;
13
+ file_name?: string | null;
14
+ file_type?: string | null;
15
+ file_size?: number | null;
16
+ folder?: string | null;
17
+ parent_ext_id?: string | null;
18
+ created_at?: string | null;
19
+ doc_metadata?: {
20
+ title?: string | null;
21
+ } | null;
22
+ }
23
+ export interface ExplorerFolder {
24
+ kind: 'folder';
25
+ /** The folder's own name (last path segment). */
26
+ name: string;
27
+ /** Full path segments from the root, including this folder. */
28
+ path: string[];
29
+ /** Number of documents anywhere beneath this folder. */
30
+ count: number;
31
+ }
32
+ export interface ExplorerFile<D extends FolderDocument = FolderDocument> {
33
+ kind: 'file';
34
+ doc: D;
35
+ }
36
+ export type ExplorerEntry<D extends FolderDocument = FolderDocument> = ExplorerFolder | ExplorerFile<D>;
37
+ export type ExplorerSort = 'name' | 'date' | 'size';
38
+ /**
39
+ * Display name for a document in the explorer, with its real file extension —
40
+ * the familiar "Report.pdf" form. Many documents store an AI-generated display
41
+ * title that drops the extension, so we re-attach it from the stored
42
+ * `file_name` or, failing that, the MIME `file_type`.
43
+ */
44
+ export declare function getExplorerDisplayName(doc: FolderDocument): string;
45
+ /** Split a `Doc.folder` value into trimmed, non-empty path segments. */
46
+ export declare function parseFolderSegments(folder?: string | null): string[];
47
+ /** Join path segments back into a canonical `Doc.folder` string (or null at root). */
48
+ export declare function joinFolderPath(segments: string[]): string | null;
49
+ /**
50
+ * A document is shown in the explorer unless it belongs to an email family:
51
+ * attachments and archived messages (`parent_ext_id` set) live "inside" their
52
+ * email / archive and would otherwise clutter the folder view. Versions are not
53
+ * children — the list holds each document's current version only.
54
+ */
55
+ export declare function isExplorerDocument(doc: FolderDocument): boolean;
56
+ /**
57
+ * Every explorer document that lives anywhere beneath `path` (directly in the
58
+ * folder or in a sub-folder). Used to expand a folder into the documents a
59
+ * folder-level action (select / move / download / delete / rename) applies to —
60
+ * "act on a folder" means "act on everything in it".
61
+ */
62
+ export declare function collectFolderDocs<D extends FolderDocument>(documents: D[], path: string[]): D[];
63
+ /**
64
+ * Documents in the order the gallery shows them for a sort choice (and its
65
+ * direction toggle). Review mode steps through this same order.
66
+ */
67
+ export declare function sortExplorerFiles<D extends FolderDocument>(docs: D[], sort: ExplorerSort, reversed?: boolean): D[];
68
+ /**
69
+ * Build the folders and files that live directly under `currentPath`.
70
+ *
71
+ * - Files: documents whose folder path exactly equals `currentPath`.
72
+ * - Folders: the distinct next path segment of any document nested deeper than
73
+ * `currentPath`, with `count` = number of documents beneath it.
74
+ *
75
+ * Folders are always sorted by name; files by the requested sort.
76
+ */
77
+ export declare function buildExplorerEntries<D extends FolderDocument>(documents: D[], currentPath: string[], sort?: ExplorerSort, pendingFolders?: string[]): {
78
+ folders: ExplorerFolder[];
79
+ files: D[];
80
+ };
81
+ /**
82
+ * Flat, cross-folder search over every top-level document by title / file name.
83
+ * Used when the explorer search box is non-empty (mirrors real file explorers,
84
+ * which flatten results and ignore the current folder while searching).
85
+ */
86
+ export declare function searchExplorerDocuments<D extends FolderDocument>(documents: D[], query: string, sort?: ExplorerSort): D[];
@@ -0,0 +1,2 @@
1
+ export { getExplorerDisplayName, parseFolderSegments, joinFolderPath, isExplorerDocument, collectFolderDocs, sortExplorerFiles, buildExplorerEntries, searchExplorerDocuments, type FolderDocument, type ExplorerFolder, type ExplorerFile, type ExplorerEntry, type ExplorerSort, } from './folderPaths';
2
+ export { FolderProviderIcon, hasFolderProviderIcon, formatFolderSegment, } from './FolderProviderIcon';