@pyric/ui 0.1.0-alpha.10

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 (603) hide show
  1. package/LICENSE +216 -0
  2. package/README.md +79 -0
  3. package/dist/agents/ContextWindowUsage.d.ts +67 -0
  4. package/dist/agents/ContextWindowUsage.d.ts.map +1 -0
  5. package/dist/agents/ContextWindowUsage.js +115 -0
  6. package/dist/agents/ContextWindowUsage.js.map +1 -0
  7. package/dist/agents/EmptyState.d.ts +18 -0
  8. package/dist/agents/EmptyState.d.ts.map +1 -0
  9. package/dist/agents/EmptyState.js +11 -0
  10. package/dist/agents/EmptyState.js.map +1 -0
  11. package/dist/agents/Fold.d.ts +37 -0
  12. package/dist/agents/Fold.d.ts.map +1 -0
  13. package/dist/agents/Fold.js +18 -0
  14. package/dist/agents/Fold.js.map +1 -0
  15. package/dist/agents/Modal.d.ts +25 -0
  16. package/dist/agents/Modal.d.ts.map +1 -0
  17. package/dist/agents/Modal.js +28 -0
  18. package/dist/agents/Modal.js.map +1 -0
  19. package/dist/agents/PulsingDot.d.ts +21 -0
  20. package/dist/agents/PulsingDot.d.ts.map +1 -0
  21. package/dist/agents/PulsingDot.js +18 -0
  22. package/dist/agents/PulsingDot.js.map +1 -0
  23. package/dist/agents/index.d.ts +15 -0
  24. package/dist/agents/index.d.ts.map +1 -0
  25. package/dist/agents/index.js +15 -0
  26. package/dist/agents/index.js.map +1 -0
  27. package/dist/auth/authApi.d.ts +32 -0
  28. package/dist/auth/authApi.d.ts.map +1 -0
  29. package/dist/auth/authApi.js +27 -0
  30. package/dist/auth/authApi.js.map +1 -0
  31. package/dist/auth/claims.d.ts +27 -0
  32. package/dist/auth/claims.d.ts.map +1 -0
  33. package/dist/auth/claims.js +58 -0
  34. package/dist/auth/claims.js.map +1 -0
  35. package/dist/auth/components/AuthProviderToggles.d.ts +31 -0
  36. package/dist/auth/components/AuthProviderToggles.d.ts.map +1 -0
  37. package/dist/auth/components/AuthProviderToggles.js +48 -0
  38. package/dist/auth/components/AuthProviderToggles.js.map +1 -0
  39. package/dist/auth/components/AuthSignInHelper.d.ts +57 -0
  40. package/dist/auth/components/AuthSignInHelper.d.ts.map +1 -0
  41. package/dist/auth/components/AuthSignInHelper.js +69 -0
  42. package/dist/auth/components/AuthSignInHelper.js.map +1 -0
  43. package/dist/auth/components/AuthUserForm.d.ts +84 -0
  44. package/dist/auth/components/AuthUserForm.d.ts.map +1 -0
  45. package/dist/auth/components/AuthUserForm.js +89 -0
  46. package/dist/auth/components/AuthUserForm.js.map +1 -0
  47. package/dist/auth/components/AuthUserList.d.ts +62 -0
  48. package/dist/auth/components/AuthUserList.d.ts.map +1 -0
  49. package/dist/auth/components/AuthUserList.js +46 -0
  50. package/dist/auth/components/AuthUserList.js.map +1 -0
  51. package/dist/auth/components/ClaimsField.d.ts +22 -0
  52. package/dist/auth/components/ClaimsField.d.ts.map +1 -0
  53. package/dist/auth/components/ClaimsField.js +11 -0
  54. package/dist/auth/components/ClaimsField.js.map +1 -0
  55. package/dist/auth/components/confirmActions.d.ts +40 -0
  56. package/dist/auth/components/confirmActions.d.ts.map +1 -0
  57. package/dist/auth/components/confirmActions.js +49 -0
  58. package/dist/auth/components/confirmActions.js.map +1 -0
  59. package/dist/auth/controller.d.ts +73 -0
  60. package/dist/auth/controller.d.ts.map +1 -0
  61. package/dist/auth/controller.js +139 -0
  62. package/dist/auth/controller.js.map +1 -0
  63. package/dist/auth/hooks/index.d.ts +7 -0
  64. package/dist/auth/hooks/index.d.ts.map +1 -0
  65. package/dist/auth/hooks/index.js +7 -0
  66. package/dist/auth/hooks/index.js.map +1 -0
  67. package/dist/auth/hooks/useAuthFlowHelper.d.ts +30 -0
  68. package/dist/auth/hooks/useAuthFlowHelper.d.ts.map +1 -0
  69. package/dist/auth/hooks/useAuthFlowHelper.js +30 -0
  70. package/dist/auth/hooks/useAuthFlowHelper.js.map +1 -0
  71. package/dist/auth/hooks/useAuthProviderConfig.d.ts +37 -0
  72. package/dist/auth/hooks/useAuthProviderConfig.d.ts.map +1 -0
  73. package/dist/auth/hooks/useAuthProviderConfig.js +98 -0
  74. package/dist/auth/hooks/useAuthProviderConfig.js.map +1 -0
  75. package/dist/auth/hooks/useAuthUserEditor.d.ts +30 -0
  76. package/dist/auth/hooks/useAuthUserEditor.d.ts.map +1 -0
  77. package/dist/auth/hooks/useAuthUserEditor.js +27 -0
  78. package/dist/auth/hooks/useAuthUserEditor.js.map +1 -0
  79. package/dist/auth/hooks/useAuthUsers.d.ts +38 -0
  80. package/dist/auth/hooks/useAuthUsers.d.ts.map +1 -0
  81. package/dist/auth/hooks/useAuthUsers.js +111 -0
  82. package/dist/auth/hooks/useAuthUsers.js.map +1 -0
  83. package/dist/auth/index.d.ts +11 -0
  84. package/dist/auth/index.d.ts.map +1 -0
  85. package/dist/auth/index.js +13 -0
  86. package/dist/auth/index.js.map +1 -0
  87. package/dist/auth/providers.d.ts +11 -0
  88. package/dist/auth/providers.d.ts.map +1 -0
  89. package/dist/auth/providers.js +28 -0
  90. package/dist/auth/providers.js.map +1 -0
  91. package/dist/auth/reducers/userEditor.d.ts +55 -0
  92. package/dist/auth/reducers/userEditor.d.ts.map +1 -0
  93. package/dist/auth/reducers/userEditor.js +136 -0
  94. package/dist/auth/reducers/userEditor.js.map +1 -0
  95. package/dist/events/components/ActivityActionItems.d.ts +45 -0
  96. package/dist/events/components/ActivityActionItems.d.ts.map +1 -0
  97. package/dist/events/components/ActivityActionItems.js +68 -0
  98. package/dist/events/components/ActivityActionItems.js.map +1 -0
  99. package/dist/events/components/ActivityGrid.d.ts +65 -0
  100. package/dist/events/components/ActivityGrid.d.ts.map +1 -0
  101. package/dist/events/components/ActivityGrid.js +61 -0
  102. package/dist/events/components/ActivityGrid.js.map +1 -0
  103. package/dist/events/components/ActivityGridRow.d.ts +31 -0
  104. package/dist/events/components/ActivityGridRow.d.ts.map +1 -0
  105. package/dist/events/components/ActivityGridRow.js +23 -0
  106. package/dist/events/components/ActivityGridRow.js.map +1 -0
  107. package/dist/events/components/ProposedChangeDiff.d.ts +46 -0
  108. package/dist/events/components/ProposedChangeDiff.d.ts.map +1 -0
  109. package/dist/events/components/ProposedChangeDiff.js +60 -0
  110. package/dist/events/components/ProposedChangeDiff.js.map +1 -0
  111. package/dist/events/components/format.d.ts +11 -0
  112. package/dist/events/components/format.d.ts.map +1 -0
  113. package/dist/events/components/format.js +26 -0
  114. package/dist/events/components/format.js.map +1 -0
  115. package/dist/events/components/index.d.ts +6 -0
  116. package/dist/events/components/index.d.ts.map +1 -0
  117. package/dist/events/components/index.js +6 -0
  118. package/dist/events/components/index.js.map +1 -0
  119. package/dist/events/digest.d.ts +167 -0
  120. package/dist/events/digest.d.ts.map +1 -0
  121. package/dist/events/digest.js +426 -0
  122. package/dist/events/digest.js.map +1 -0
  123. package/dist/events/hooks/index.d.ts +3 -0
  124. package/dist/events/hooks/index.d.ts.map +1 -0
  125. package/dist/events/hooks/index.js +3 -0
  126. package/dist/events/hooks/index.js.map +1 -0
  127. package/dist/events/hooks/useActivityDigest.d.ts +27 -0
  128. package/dist/events/hooks/useActivityDigest.d.ts.map +1 -0
  129. package/dist/events/hooks/useActivityDigest.js +18 -0
  130. package/dist/events/hooks/useActivityDigest.js.map +1 -0
  131. package/dist/events/hooks/useActivityStream.d.ts +44 -0
  132. package/dist/events/hooks/useActivityStream.d.ts.map +1 -0
  133. package/dist/events/hooks/useActivityStream.js +38 -0
  134. package/dist/events/hooks/useActivityStream.js.map +1 -0
  135. package/dist/events/index.d.ts +15 -0
  136. package/dist/events/index.d.ts.map +1 -0
  137. package/dist/events/index.js +14 -0
  138. package/dist/events/index.js.map +1 -0
  139. package/dist/events/types.d.ts +160 -0
  140. package/dist/events/types.d.ts.map +1 -0
  141. package/dist/events/types.js +21 -0
  142. package/dist/events/types.js.map +1 -0
  143. package/dist/firestore/components/CollectionList.d.ts +22 -0
  144. package/dist/firestore/components/CollectionList.d.ts.map +1 -0
  145. package/dist/firestore/components/CollectionList.js +21 -0
  146. package/dist/firestore/components/CollectionList.js.map +1 -0
  147. package/dist/firestore/components/DeleteWithConfirm.d.ts +38 -0
  148. package/dist/firestore/components/DeleteWithConfirm.d.ts.map +1 -0
  149. package/dist/firestore/components/DeleteWithConfirm.js +33 -0
  150. package/dist/firestore/components/DeleteWithConfirm.js.map +1 -0
  151. package/dist/firestore/components/DocumentEditor.d.ts +47 -0
  152. package/dist/firestore/components/DocumentEditor.d.ts.map +1 -0
  153. package/dist/firestore/components/DocumentEditor.js +176 -0
  154. package/dist/firestore/components/DocumentEditor.js.map +1 -0
  155. package/dist/firestore/components/DocumentList.d.ts +63 -0
  156. package/dist/firestore/components/DocumentList.d.ts.map +1 -0
  157. package/dist/firestore/components/DocumentList.js +53 -0
  158. package/dist/firestore/components/DocumentList.js.map +1 -0
  159. package/dist/firestore/components/DocumentPreview.d.ts +68 -0
  160. package/dist/firestore/components/DocumentPreview.d.ts.map +1 -0
  161. package/dist/firestore/components/DocumentPreview.js +76 -0
  162. package/dist/firestore/components/DocumentPreview.js.map +1 -0
  163. package/dist/firestore/components/FieldRenderer.d.ts +17 -0
  164. package/dist/firestore/components/FieldRenderer.d.ts.map +1 -0
  165. package/dist/firestore/components/FieldRenderer.js +16 -0
  166. package/dist/firestore/components/FieldRenderer.js.map +1 -0
  167. package/dist/firestore/components/QueryBuilder.d.ts +25 -0
  168. package/dist/firestore/components/QueryBuilder.d.ts.map +1 -0
  169. package/dist/firestore/components/QueryBuilder.js +78 -0
  170. package/dist/firestore/components/QueryBuilder.js.map +1 -0
  171. package/dist/firestore/components/ReferencePicker.d.ts +33 -0
  172. package/dist/firestore/components/ReferencePicker.d.ts.map +1 -0
  173. package/dist/firestore/components/ReferencePicker.js +42 -0
  174. package/dist/firestore/components/ReferencePicker.js.map +1 -0
  175. package/dist/firestore/components/TreeEntry.d.ts +15 -0
  176. package/dist/firestore/components/TreeEntry.d.ts.map +1 -0
  177. package/dist/firestore/components/TreeEntry.js +23 -0
  178. package/dist/firestore/components/TreeEntry.js.map +1 -0
  179. package/dist/firestore/components/context.d.ts +18 -0
  180. package/dist/firestore/components/context.d.ts.map +1 -0
  181. package/dist/firestore/components/context.js +7 -0
  182. package/dist/firestore/components/context.js.map +1 -0
  183. package/dist/firestore/fieldEditors/array.d.ts +3 -0
  184. package/dist/firestore/fieldEditors/array.d.ts.map +1 -0
  185. package/dist/firestore/fieldEditors/array.js +16 -0
  186. package/dist/firestore/fieldEditors/array.js.map +1 -0
  187. package/dist/firestore/fieldEditors/boolean.d.ts +3 -0
  188. package/dist/firestore/fieldEditors/boolean.d.ts.map +1 -0
  189. package/dist/firestore/fieldEditors/boolean.js +13 -0
  190. package/dist/firestore/fieldEditors/boolean.js.map +1 -0
  191. package/dist/firestore/fieldEditors/bytes.d.ts +4 -0
  192. package/dist/firestore/fieldEditors/bytes.d.ts.map +1 -0
  193. package/dist/firestore/fieldEditors/bytes.js +31 -0
  194. package/dist/firestore/fieldEditors/bytes.js.map +1 -0
  195. package/dist/firestore/fieldEditors/geopoint.d.ts +4 -0
  196. package/dist/firestore/fieldEditors/geopoint.d.ts.map +1 -0
  197. package/dist/firestore/fieldEditors/geopoint.js +32 -0
  198. package/dist/firestore/fieldEditors/geopoint.js.map +1 -0
  199. package/dist/firestore/fieldEditors/map.d.ts +3 -0
  200. package/dist/firestore/fieldEditors/map.d.ts.map +1 -0
  201. package/dist/firestore/fieldEditors/map.js +19 -0
  202. package/dist/firestore/fieldEditors/map.js.map +1 -0
  203. package/dist/firestore/fieldEditors/null.d.ts +3 -0
  204. package/dist/firestore/fieldEditors/null.d.ts.map +1 -0
  205. package/dist/firestore/fieldEditors/null.js +17 -0
  206. package/dist/firestore/fieldEditors/null.js.map +1 -0
  207. package/dist/firestore/fieldEditors/number.d.ts +3 -0
  208. package/dist/firestore/fieldEditors/number.d.ts.map +1 -0
  209. package/dist/firestore/fieldEditors/number.js +24 -0
  210. package/dist/firestore/fieldEditors/number.js.map +1 -0
  211. package/dist/firestore/fieldEditors/reference.d.ts +4 -0
  212. package/dist/firestore/fieldEditors/reference.d.ts.map +1 -0
  213. package/dist/firestore/fieldEditors/reference.js +49 -0
  214. package/dist/firestore/fieldEditors/reference.js.map +1 -0
  215. package/dist/firestore/fieldEditors/registry.d.ts +16 -0
  216. package/dist/firestore/fieldEditors/registry.d.ts.map +1 -0
  217. package/dist/firestore/fieldEditors/registry.js +42 -0
  218. package/dist/firestore/fieldEditors/registry.js.map +1 -0
  219. package/dist/firestore/fieldEditors/string.d.ts +3 -0
  220. package/dist/firestore/fieldEditors/string.d.ts.map +1 -0
  221. package/dist/firestore/fieldEditors/string.js +13 -0
  222. package/dist/firestore/fieldEditors/string.js.map +1 -0
  223. package/dist/firestore/fieldEditors/timestamp.d.ts +4 -0
  224. package/dist/firestore/fieldEditors/timestamp.d.ts.map +1 -0
  225. package/dist/firestore/fieldEditors/timestamp.js +52 -0
  226. package/dist/firestore/fieldEditors/timestamp.js.map +1 -0
  227. package/dist/firestore/fieldEditors/types.d.ts +64 -0
  228. package/dist/firestore/fieldEditors/types.d.ts.map +1 -0
  229. package/dist/firestore/fieldEditors/types.js +2 -0
  230. package/dist/firestore/fieldEditors/types.js.map +1 -0
  231. package/dist/firestore/fieldEditors/vector.d.ts +29 -0
  232. package/dist/firestore/fieldEditors/vector.d.ts.map +1 -0
  233. package/dist/firestore/fieldEditors/vector.js +93 -0
  234. package/dist/firestore/fieldEditors/vector.js.map +1 -0
  235. package/dist/firestore/firestoreApi.d.ts +35 -0
  236. package/dist/firestore/firestoreApi.d.ts.map +1 -0
  237. package/dist/firestore/firestoreApi.js +29 -0
  238. package/dist/firestore/firestoreApi.js.map +1 -0
  239. package/dist/firestore/hooks/coerceError.d.ts +17 -0
  240. package/dist/firestore/hooks/coerceError.d.ts.map +1 -0
  241. package/dist/firestore/hooks/coerceError.js +41 -0
  242. package/dist/firestore/hooks/coerceError.js.map +1 -0
  243. package/dist/firestore/hooks/index.d.ts +10 -0
  244. package/dist/firestore/hooks/index.d.ts.map +1 -0
  245. package/dist/firestore/hooks/index.js +10 -0
  246. package/dist/firestore/hooks/index.js.map +1 -0
  247. package/dist/firestore/hooks/useCollectionList.d.ts +37 -0
  248. package/dist/firestore/hooks/useCollectionList.d.ts.map +1 -0
  249. package/dist/firestore/hooks/useCollectionList.js +51 -0
  250. package/dist/firestore/hooks/useCollectionList.js.map +1 -0
  251. package/dist/firestore/hooks/useDocumentEditor.d.ts +61 -0
  252. package/dist/firestore/hooks/useDocumentEditor.d.ts.map +1 -0
  253. package/dist/firestore/hooks/useDocumentEditor.js +71 -0
  254. package/dist/firestore/hooks/useDocumentEditor.js.map +1 -0
  255. package/dist/firestore/hooks/useDocumentList.d.ts +50 -0
  256. package/dist/firestore/hooks/useDocumentList.d.ts.map +1 -0
  257. package/dist/firestore/hooks/useDocumentList.js +162 -0
  258. package/dist/firestore/hooks/useDocumentList.js.map +1 -0
  259. package/dist/firestore/hooks/useDocumentSubcollections.d.ts +29 -0
  260. package/dist/firestore/hooks/useDocumentSubcollections.d.ts.map +1 -0
  261. package/dist/firestore/hooks/useDocumentSubcollections.js +48 -0
  262. package/dist/firestore/hooks/useDocumentSubcollections.js.map +1 -0
  263. package/dist/firestore/hooks/useFirestoreCollection.d.ts +14 -0
  264. package/dist/firestore/hooks/useFirestoreCollection.d.ts.map +1 -0
  265. package/dist/firestore/hooks/useFirestoreCollection.js +36 -0
  266. package/dist/firestore/hooks/useFirestoreCollection.js.map +1 -0
  267. package/dist/firestore/hooks/useFirestoreDoc.d.ts +17 -0
  268. package/dist/firestore/hooks/useFirestoreDoc.d.ts.map +1 -0
  269. package/dist/firestore/hooks/useFirestoreDoc.js +35 -0
  270. package/dist/firestore/hooks/useFirestoreDoc.js.map +1 -0
  271. package/dist/firestore/hooks/useQueryBuilder.d.ts +51 -0
  272. package/dist/firestore/hooks/useQueryBuilder.d.ts.map +1 -0
  273. package/dist/firestore/hooks/useQueryBuilder.js +110 -0
  274. package/dist/firestore/hooks/useQueryBuilder.js.map +1 -0
  275. package/dist/firestore/hooks/useRecursiveDelete.d.ts +40 -0
  276. package/dist/firestore/hooks/useRecursiveDelete.d.ts.map +1 -0
  277. package/dist/firestore/hooks/useRecursiveDelete.js +44 -0
  278. package/dist/firestore/hooks/useRecursiveDelete.js.map +1 -0
  279. package/dist/firestore/hooks/useReferencePicker.d.ts +70 -0
  280. package/dist/firestore/hooks/useReferencePicker.d.ts.map +1 -0
  281. package/dist/firestore/hooks/useReferencePicker.js +140 -0
  282. package/dist/firestore/hooks/useReferencePicker.js.map +1 -0
  283. package/dist/firestore/import/parseImport.d.ts +55 -0
  284. package/dist/firestore/import/parseImport.d.ts.map +1 -0
  285. package/dist/firestore/import/parseImport.js +101 -0
  286. package/dist/firestore/import/parseImport.js.map +1 -0
  287. package/dist/firestore/index.d.ts +21 -0
  288. package/dist/firestore/index.d.ts.map +1 -0
  289. package/dist/firestore/index.js +29 -0
  290. package/dist/firestore/index.js.map +1 -0
  291. package/dist/firestore/reducers/defaults.d.ts +10 -0
  292. package/dist/firestore/reducers/defaults.d.ts.map +1 -0
  293. package/dist/firestore/reducers/defaults.js +37 -0
  294. package/dist/firestore/reducers/defaults.js.map +1 -0
  295. package/dist/firestore/reducers/documentEditor.d.ts +23 -0
  296. package/dist/firestore/reducers/documentEditor.d.ts.map +1 -0
  297. package/dist/firestore/reducers/documentEditor.js +201 -0
  298. package/dist/firestore/reducers/documentEditor.js.map +1 -0
  299. package/dist/firestore/reducers/tree.d.ts +28 -0
  300. package/dist/firestore/reducers/tree.d.ts.map +1 -0
  301. package/dist/firestore/reducers/tree.js +129 -0
  302. package/dist/firestore/reducers/tree.js.map +1 -0
  303. package/dist/firestore/reducers/types.d.ts +115 -0
  304. package/dist/firestore/reducers/types.d.ts.map +1 -0
  305. package/dist/firestore/reducers/types.js +2 -0
  306. package/dist/firestore/reducers/types.js.map +1 -0
  307. package/dist/firestore/reducers/validation.d.ts +25 -0
  308. package/dist/firestore/reducers/validation.d.ts.map +1 -0
  309. package/dist/firestore/reducers/validation.js +121 -0
  310. package/dist/firestore/reducers/validation.js.map +1 -0
  311. package/dist/firestore/types.d.ts +77 -0
  312. package/dist/firestore/types.d.ts.map +1 -0
  313. package/dist/firestore/types.js +196 -0
  314. package/dist/firestore/types.js.map +1 -0
  315. package/dist/firestore/validation/ids.d.ts +23 -0
  316. package/dist/firestore/validation/ids.d.ts.map +1 -0
  317. package/dist/firestore/validation/ids.js +46 -0
  318. package/dist/firestore/validation/ids.js.map +1 -0
  319. package/dist/firestore/valueEquality.d.ts +4 -0
  320. package/dist/firestore/valueEquality.d.ts.map +1 -0
  321. package/dist/firestore/valueEquality.js +44 -0
  322. package/dist/firestore/valueEquality.js.map +1 -0
  323. package/dist/index.d.ts +2 -0
  324. package/dist/index.d.ts.map +1 -0
  325. package/dist/index.js +2 -0
  326. package/dist/index.js.map +1 -0
  327. package/dist/primitives/Badge.d.ts +28 -0
  328. package/dist/primitives/Badge.d.ts.map +1 -0
  329. package/dist/primitives/Badge.js +11 -0
  330. package/dist/primitives/Badge.js.map +1 -0
  331. package/dist/primitives/ConfirmDialog.d.ts +42 -0
  332. package/dist/primitives/ConfirmDialog.d.ts.map +1 -0
  333. package/dist/primitives/ConfirmDialog.js +61 -0
  334. package/dist/primitives/ConfirmDialog.js.map +1 -0
  335. package/dist/primitives/CopyButton.d.ts +28 -0
  336. package/dist/primitives/CopyButton.d.ts.map +1 -0
  337. package/dist/primitives/CopyButton.js +27 -0
  338. package/dist/primitives/CopyButton.js.map +1 -0
  339. package/dist/primitives/JsonView.d.ts +29 -0
  340. package/dist/primitives/JsonView.d.ts.map +1 -0
  341. package/dist/primitives/JsonView.js +56 -0
  342. package/dist/primitives/JsonView.js.map +1 -0
  343. package/dist/primitives/SegmentedControl.d.ts +37 -0
  344. package/dist/primitives/SegmentedControl.d.ts.map +1 -0
  345. package/dist/primitives/SegmentedControl.js +18 -0
  346. package/dist/primitives/SegmentedControl.js.map +1 -0
  347. package/dist/primitives/Toast.d.ts +48 -0
  348. package/dist/primitives/Toast.d.ts.map +1 -0
  349. package/dist/primitives/Toast.js +60 -0
  350. package/dist/primitives/Toast.js.map +1 -0
  351. package/dist/primitives/VirtualList.d.ts +37 -0
  352. package/dist/primitives/VirtualList.d.ts.map +1 -0
  353. package/dist/primitives/VirtualList.js +47 -0
  354. package/dist/primitives/VirtualList.js.map +1 -0
  355. package/dist/primitives/hooks/useContainerSize.d.ts +29 -0
  356. package/dist/primitives/hooks/useContainerSize.d.ts.map +1 -0
  357. package/dist/primitives/hooks/useContainerSize.js +45 -0
  358. package/dist/primitives/hooks/useContainerSize.js.map +1 -0
  359. package/dist/primitives/hooks/useUpdateHighlights.d.ts +18 -0
  360. package/dist/primitives/hooks/useUpdateHighlights.d.ts.map +1 -0
  361. package/dist/primitives/hooks/useUpdateHighlights.js +84 -0
  362. package/dist/primitives/hooks/useUpdateHighlights.js.map +1 -0
  363. package/dist/primitives/index.d.ts +11 -0
  364. package/dist/primitives/index.d.ts.map +1 -0
  365. package/dist/primitives/index.js +11 -0
  366. package/dist/primitives/index.js.map +1 -0
  367. package/dist/primitives/useConfirm.d.ts +34 -0
  368. package/dist/primitives/useConfirm.d.ts.map +1 -0
  369. package/dist/primitives/useConfirm.js +63 -0
  370. package/dist/primitives/useConfirm.js.map +1 -0
  371. package/dist/rtdb/components/RtdbPathBar.d.ts +31 -0
  372. package/dist/rtdb/components/RtdbPathBar.d.ts.map +1 -0
  373. package/dist/rtdb/components/RtdbPathBar.js +47 -0
  374. package/dist/rtdb/components/RtdbPathBar.js.map +1 -0
  375. package/dist/rtdb/components/RtdbTree.d.ts +38 -0
  376. package/dist/rtdb/components/RtdbTree.d.ts.map +1 -0
  377. package/dist/rtdb/components/RtdbTree.js +104 -0
  378. package/dist/rtdb/components/RtdbTree.js.map +1 -0
  379. package/dist/rtdb/editor.d.ts +25 -0
  380. package/dist/rtdb/editor.d.ts.map +1 -0
  381. package/dist/rtdb/editor.js +79 -0
  382. package/dist/rtdb/editor.js.map +1 -0
  383. package/dist/rtdb/hooks/useRtdbTree.d.ts +33 -0
  384. package/dist/rtdb/hooks/useRtdbTree.d.ts.map +1 -0
  385. package/dist/rtdb/hooks/useRtdbTree.js +67 -0
  386. package/dist/rtdb/hooks/useRtdbTree.js.map +1 -0
  387. package/dist/rtdb/index.d.ts +17 -0
  388. package/dist/rtdb/index.d.ts.map +1 -0
  389. package/dist/rtdb/index.js +21 -0
  390. package/dist/rtdb/index.js.map +1 -0
  391. package/dist/rtdb/pathInput.d.ts +28 -0
  392. package/dist/rtdb/pathInput.d.ts.map +1 -0
  393. package/dist/rtdb/pathInput.js +40 -0
  394. package/dist/rtdb/pathInput.js.map +1 -0
  395. package/dist/rtdb/reducers/tree.d.ts +86 -0
  396. package/dist/rtdb/reducers/tree.d.ts.map +1 -0
  397. package/dist/rtdb/reducers/tree.js +131 -0
  398. package/dist/rtdb/reducers/tree.js.map +1 -0
  399. package/dist/rtdb/rtdbApi.d.ts +20 -0
  400. package/dist/rtdb/rtdbApi.d.ts.map +1 -0
  401. package/dist/rtdb/rtdbApi.js +2 -0
  402. package/dist/rtdb/rtdbApi.js.map +1 -0
  403. package/dist/rtdb/values.d.ts +50 -0
  404. package/dist/rtdb/values.d.ts.map +1 -0
  405. package/dist/rtdb/values.js +186 -0
  406. package/dist/rtdb/values.js.map +1 -0
  407. package/dist/rules/components/DenialInspector.d.ts +18 -0
  408. package/dist/rules/components/DenialInspector.d.ts.map +1 -0
  409. package/dist/rules/components/DenialInspector.js +58 -0
  410. package/dist/rules/components/DenialInspector.js.map +1 -0
  411. package/dist/rules/components/format.d.ts +56 -0
  412. package/dist/rules/components/format.d.ts.map +1 -0
  413. package/dist/rules/components/format.js +137 -0
  414. package/dist/rules/components/format.js.map +1 -0
  415. package/dist/rules/components/index.d.ts +4 -0
  416. package/dist/rules/components/index.d.ts.map +1 -0
  417. package/dist/rules/components/index.js +4 -0
  418. package/dist/rules/components/index.js.map +1 -0
  419. package/dist/rules/components/scope.d.ts +10 -0
  420. package/dist/rules/components/scope.d.ts.map +1 -0
  421. package/dist/rules/components/scope.js +72 -0
  422. package/dist/rules/components/scope.js.map +1 -0
  423. package/dist/rules/hooks/index.d.ts +2 -0
  424. package/dist/rules/hooks/index.d.ts.map +1 -0
  425. package/dist/rules/hooks/index.js +2 -0
  426. package/dist/rules/hooks/index.js.map +1 -0
  427. package/dist/rules/hooks/useDenialTrace.d.ts +51 -0
  428. package/dist/rules/hooks/useDenialTrace.d.ts.map +1 -0
  429. package/dist/rules/hooks/useDenialTrace.js +58 -0
  430. package/dist/rules/hooks/useDenialTrace.js.map +1 -0
  431. package/dist/rules/index.d.ts +14 -0
  432. package/dist/rules/index.d.ts.map +1 -0
  433. package/dist/rules/index.js +13 -0
  434. package/dist/rules/index.js.map +1 -0
  435. package/dist/rules/types.d.ts +75 -0
  436. package/dist/rules/types.d.ts.map +1 -0
  437. package/dist/rules/types.js +2 -0
  438. package/dist/rules/types.js.map +1 -0
  439. package/dist/storage/collisionRename.d.ts +73 -0
  440. package/dist/storage/collisionRename.d.ts.map +1 -0
  441. package/dist/storage/collisionRename.js +113 -0
  442. package/dist/storage/collisionRename.js.map +1 -0
  443. package/dist/storage/components/DeleteSelectionWithConfirm.d.ts +66 -0
  444. package/dist/storage/components/DeleteSelectionWithConfirm.d.ts.map +1 -0
  445. package/dist/storage/components/DeleteSelectionWithConfirm.js +82 -0
  446. package/dist/storage/components/DeleteSelectionWithConfirm.js.map +1 -0
  447. package/dist/storage/components/ObjectBrowser.d.ts +78 -0
  448. package/dist/storage/components/ObjectBrowser.d.ts.map +1 -0
  449. package/dist/storage/components/ObjectBrowser.js +60 -0
  450. package/dist/storage/components/ObjectBrowser.js.map +1 -0
  451. package/dist/storage/components/ObjectInspector.d.ts +43 -0
  452. package/dist/storage/components/ObjectInspector.d.ts.map +1 -0
  453. package/dist/storage/components/ObjectInspector.js +92 -0
  454. package/dist/storage/components/ObjectInspector.js.map +1 -0
  455. package/dist/storage/components/PathBreadcrumb.d.ts +30 -0
  456. package/dist/storage/components/PathBreadcrumb.d.ts.map +1 -0
  457. package/dist/storage/components/PathBreadcrumb.js +26 -0
  458. package/dist/storage/components/PathBreadcrumb.js.map +1 -0
  459. package/dist/storage/components/UploadDropzone.d.ts +50 -0
  460. package/dist/storage/components/UploadDropzone.d.ts.map +1 -0
  461. package/dist/storage/components/UploadDropzone.js +109 -0
  462. package/dist/storage/components/UploadDropzone.js.map +1 -0
  463. package/dist/storage/folderPlaceholder.d.ts +20 -0
  464. package/dist/storage/folderPlaceholder.d.ts.map +1 -0
  465. package/dist/storage/folderPlaceholder.js +34 -0
  466. package/dist/storage/folderPlaceholder.js.map +1 -0
  467. package/dist/storage/hooks/index.d.ts +9 -0
  468. package/dist/storage/hooks/index.d.ts.map +1 -0
  469. package/dist/storage/hooks/index.js +9 -0
  470. package/dist/storage/hooks/index.js.map +1 -0
  471. package/dist/storage/hooks/useMetadataEditor.d.ts +114 -0
  472. package/dist/storage/hooks/useMetadataEditor.d.ts.map +1 -0
  473. package/dist/storage/hooks/useMetadataEditor.js +193 -0
  474. package/dist/storage/hooks/useMetadataEditor.js.map +1 -0
  475. package/dist/storage/hooks/useObjectUpload.d.ts +105 -0
  476. package/dist/storage/hooks/useObjectUpload.d.ts.map +1 -0
  477. package/dist/storage/hooks/useObjectUpload.js +134 -0
  478. package/dist/storage/hooks/useObjectUpload.js.map +1 -0
  479. package/dist/storage/hooks/usePathState.d.ts +43 -0
  480. package/dist/storage/hooks/usePathState.d.ts.map +1 -0
  481. package/dist/storage/hooks/usePathState.js +42 -0
  482. package/dist/storage/hooks/usePathState.js.map +1 -0
  483. package/dist/storage/hooks/useStorageDelete.d.ts +74 -0
  484. package/dist/storage/hooks/useStorageDelete.d.ts.map +1 -0
  485. package/dist/storage/hooks/useStorageDelete.js +120 -0
  486. package/dist/storage/hooks/useStorageDelete.js.map +1 -0
  487. package/dist/storage/hooks/useStorageList.d.ts +72 -0
  488. package/dist/storage/hooks/useStorageList.d.ts.map +1 -0
  489. package/dist/storage/hooks/useStorageList.js +164 -0
  490. package/dist/storage/hooks/useStorageList.js.map +1 -0
  491. package/dist/storage/hooks/useStorageObject.d.ts +33 -0
  492. package/dist/storage/hooks/useStorageObject.d.ts.map +1 -0
  493. package/dist/storage/hooks/useStorageObject.js +114 -0
  494. package/dist/storage/hooks/useStorageObject.js.map +1 -0
  495. package/dist/storage/hooks/useStorageRulesGate.d.ts +116 -0
  496. package/dist/storage/hooks/useStorageRulesGate.d.ts.map +1 -0
  497. package/dist/storage/hooks/useStorageRulesGate.js +150 -0
  498. package/dist/storage/hooks/useStorageRulesGate.js.map +1 -0
  499. package/dist/storage/hooks/useStorageSelection.d.ts +32 -0
  500. package/dist/storage/hooks/useStorageSelection.d.ts.map +1 -0
  501. package/dist/storage/hooks/useStorageSelection.js +55 -0
  502. package/dist/storage/hooks/useStorageSelection.js.map +1 -0
  503. package/dist/storage/index.d.ts +11 -0
  504. package/dist/storage/index.d.ts.map +1 -0
  505. package/dist/storage/index.js +17 -0
  506. package/dist/storage/index.js.map +1 -0
  507. package/dist/storage/pendingPrefixes.d.ts +77 -0
  508. package/dist/storage/pendingPrefixes.d.ts.map +1 -0
  509. package/dist/storage/pendingPrefixes.js +104 -0
  510. package/dist/storage/pendingPrefixes.js.map +1 -0
  511. package/dist/storage/previews.d.ts +51 -0
  512. package/dist/storage/previews.d.ts.map +1 -0
  513. package/dist/storage/previews.js +73 -0
  514. package/dist/storage/previews.js.map +1 -0
  515. package/dist/storage/storageApi.d.ts +30 -0
  516. package/dist/storage/storageApi.d.ts.map +1 -0
  517. package/dist/storage/storageApi.js +20 -0
  518. package/dist/storage/storageApi.js.map +1 -0
  519. package/dist/traffic/components/RuleHeatmap.d.ts +34 -0
  520. package/dist/traffic/components/RuleHeatmap.d.ts.map +1 -0
  521. package/dist/traffic/components/RuleHeatmap.js +40 -0
  522. package/dist/traffic/components/RuleHeatmap.js.map +1 -0
  523. package/dist/traffic/components/TrafficDetail.d.ts +33 -0
  524. package/dist/traffic/components/TrafficDetail.d.ts.map +1 -0
  525. package/dist/traffic/components/TrafficDetail.js +28 -0
  526. package/dist/traffic/components/TrafficDetail.js.map +1 -0
  527. package/dist/traffic/components/TrafficGroupRow.d.ts +28 -0
  528. package/dist/traffic/components/TrafficGroupRow.d.ts.map +1 -0
  529. package/dist/traffic/components/TrafficGroupRow.js +25 -0
  530. package/dist/traffic/components/TrafficGroupRow.js.map +1 -0
  531. package/dist/traffic/components/TrafficLineChart.d.ts +37 -0
  532. package/dist/traffic/components/TrafficLineChart.d.ts.map +1 -0
  533. package/dist/traffic/components/TrafficLineChart.js +49 -0
  534. package/dist/traffic/components/TrafficLineChart.js.map +1 -0
  535. package/dist/traffic/components/TrafficLog.d.ts +52 -0
  536. package/dist/traffic/components/TrafficLog.d.ts.map +1 -0
  537. package/dist/traffic/components/TrafficLog.js +34 -0
  538. package/dist/traffic/components/TrafficLog.js.map +1 -0
  539. package/dist/traffic/components/TrafficMetricCards.d.ts +26 -0
  540. package/dist/traffic/components/TrafficMetricCards.d.ts.map +1 -0
  541. package/dist/traffic/components/TrafficMetricCards.js +24 -0
  542. package/dist/traffic/components/TrafficMetricCards.js.map +1 -0
  543. package/dist/traffic/components/TrafficRow.d.ts +40 -0
  544. package/dist/traffic/components/TrafficRow.d.ts.map +1 -0
  545. package/dist/traffic/components/TrafficRow.js +27 -0
  546. package/dist/traffic/components/TrafficRow.js.map +1 -0
  547. package/dist/traffic/components/TrafficStats.d.ts +18 -0
  548. package/dist/traffic/components/TrafficStats.d.ts.map +1 -0
  549. package/dist/traffic/components/TrafficStats.js +19 -0
  550. package/dist/traffic/components/TrafficStats.js.map +1 -0
  551. package/dist/traffic/components/TrafficTimeline.d.ts +88 -0
  552. package/dist/traffic/components/TrafficTimeline.d.ts.map +1 -0
  553. package/dist/traffic/components/TrafficTimeline.js +86 -0
  554. package/dist/traffic/components/TrafficTimeline.js.map +1 -0
  555. package/dist/traffic/components/format.d.ts +13 -0
  556. package/dist/traffic/components/format.d.ts.map +1 -0
  557. package/dist/traffic/components/format.js +24 -0
  558. package/dist/traffic/components/format.js.map +1 -0
  559. package/dist/traffic/components/index.d.ts +11 -0
  560. package/dist/traffic/components/index.d.ts.map +1 -0
  561. package/dist/traffic/components/index.js +11 -0
  562. package/dist/traffic/components/index.js.map +1 -0
  563. package/dist/traffic/hooks/index.d.ts +8 -0
  564. package/dist/traffic/hooks/index.d.ts.map +1 -0
  565. package/dist/traffic/hooks/index.js +8 -0
  566. package/dist/traffic/hooks/index.js.map +1 -0
  567. package/dist/traffic/hooks/useRuleHeatmap.d.ts +33 -0
  568. package/dist/traffic/hooks/useRuleHeatmap.d.ts.map +1 -0
  569. package/dist/traffic/hooks/useRuleHeatmap.js +54 -0
  570. package/dist/traffic/hooks/useRuleHeatmap.js.map +1 -0
  571. package/dist/traffic/hooks/useTrafficBuckets.d.ts +71 -0
  572. package/dist/traffic/hooks/useTrafficBuckets.d.ts.map +1 -0
  573. package/dist/traffic/hooks/useTrafficBuckets.js +74 -0
  574. package/dist/traffic/hooks/useTrafficBuckets.js.map +1 -0
  575. package/dist/traffic/hooks/useTrafficFilter.d.ts +40 -0
  576. package/dist/traffic/hooks/useTrafficFilter.d.ts.map +1 -0
  577. package/dist/traffic/hooks/useTrafficFilter.js +33 -0
  578. package/dist/traffic/hooks/useTrafficFilter.js.map +1 -0
  579. package/dist/traffic/hooks/useTrafficGroups.d.ts +47 -0
  580. package/dist/traffic/hooks/useTrafficGroups.d.ts.map +1 -0
  581. package/dist/traffic/hooks/useTrafficGroups.js +73 -0
  582. package/dist/traffic/hooks/useTrafficGroups.js.map +1 -0
  583. package/dist/traffic/hooks/useTrafficMetrics.d.ts +66 -0
  584. package/dist/traffic/hooks/useTrafficMetrics.d.ts.map +1 -0
  585. package/dist/traffic/hooks/useTrafficMetrics.js +156 -0
  586. package/dist/traffic/hooks/useTrafficMetrics.js.map +1 -0
  587. package/dist/traffic/hooks/useTrafficMonitor.d.ts +56 -0
  588. package/dist/traffic/hooks/useTrafficMonitor.d.ts.map +1 -0
  589. package/dist/traffic/hooks/useTrafficMonitor.js +58 -0
  590. package/dist/traffic/hooks/useTrafficMonitor.js.map +1 -0
  591. package/dist/traffic/hooks/useTrafficStats.d.ts +32 -0
  592. package/dist/traffic/hooks/useTrafficStats.d.ts.map +1 -0
  593. package/dist/traffic/hooks/useTrafficStats.js +45 -0
  594. package/dist/traffic/hooks/useTrafficStats.js.map +1 -0
  595. package/dist/traffic/index.d.ts +4 -0
  596. package/dist/traffic/index.d.ts.map +1 -0
  597. package/dist/traffic/index.js +3 -0
  598. package/dist/traffic/index.js.map +1 -0
  599. package/dist/traffic/types.d.ts +72 -0
  600. package/dist/traffic/types.d.ts.map +1 -0
  601. package/dist/traffic/types.js +10 -0
  602. package/dist/traffic/types.js.map +1 -0
  603. package/package.json +127 -0
@@ -0,0 +1,42 @@
1
+ import { useCallback, useMemo, useState } from 'react';
2
+ /** Strip leading/trailing slashes and collapse repeats — mirrors
3
+ * `pyric/storage`'s reference normalization so `usePathState` and
4
+ * `useStorageList` always agree on what a path is. */
5
+ export function normalizeStoragePath(path) {
6
+ return path.split('/').filter(Boolean).join('/');
7
+ }
8
+ /**
9
+ * Path navigation state for the storage browser. Controlled when
10
+ * `path` is provided (the owner re-renders with the next value),
11
+ * uncontrolled otherwise — standard React value/defaultValue
12
+ * semantics. All emitted paths are normalized (`normalizeStoragePath`).
13
+ */
14
+ export function usePathState(options = {}) {
15
+ const { path: controlled, onPathChange, defaultPath = '' } = options;
16
+ const isControlled = controlled !== undefined;
17
+ const [internal, setInternal] = useState(() => normalizeStoragePath(defaultPath));
18
+ const path = isControlled ? normalizeStoragePath(controlled) : internal;
19
+ const setPath = useCallback((next) => {
20
+ const normalized = normalizeStoragePath(next);
21
+ if (!isControlled)
22
+ setInternal(normalized);
23
+ onPathChange?.(normalized);
24
+ }, [isControlled, onPathChange]);
25
+ const segments = useMemo(() => (path === '' ? [] : path.split('/')), [path]);
26
+ const enter = useCallback((nameOrPath) => {
27
+ const target = normalizeStoragePath(nameOrPath);
28
+ // An absolute descendant path (a prefix ref's fullPath) is used
29
+ // as-is; a bare name appends to the current path.
30
+ setPath(target.includes('/') || path === '' ? target : `${path}/${target}`);
31
+ }, [path, setPath]);
32
+ const up = useCallback(() => {
33
+ if (segments.length === 0)
34
+ return;
35
+ setPath(segments.slice(0, -1).join('/'));
36
+ }, [segments, setPath]);
37
+ const navigateToIndex = useCallback((index) => {
38
+ setPath(index < 0 ? '' : segments.slice(0, index + 1).join('/'));
39
+ }, [segments, setPath]);
40
+ return { path, segments, setPath, enter, up, navigateToIndex };
41
+ }
42
+ //# sourceMappingURL=usePathState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePathState.js","sourceRoot":"","sources":["../../../src/storage/hooks/usePathState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEvD;;uDAEuD;AACvD,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnD,CAAC;AAmCD;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC1B,UAA+B,EAAE;IAEjC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IACrE,MAAM,YAAY,GAAG,UAAU,KAAK,SAAS,CAAC;IAC9C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;IAClF,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAExE,MAAM,OAAO,GAAG,WAAW,CACzB,CAAC,IAAY,EAAE,EAAE;QACf,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,YAAY;YAAE,WAAW,CAAC,UAAU,CAAC,CAAC;QAC3C,YAAY,EAAE,CAAC,UAAU,CAAC,CAAC;IAC7B,CAAC,EACD,CAAC,YAAY,EAAE,YAAY,CAAC,CAC7B,CAAC;IAEF,MAAM,QAAQ,GAAG,OAAO,CACtB,GAAG,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAC1C,CAAC,IAAI,CAAC,CACP,CAAC;IAEF,MAAM,KAAK,GAAG,WAAW,CACvB,CAAC,UAAkB,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAChD,gEAAgE;QAChE,kDAAkD;QAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;IAC9E,CAAC,EACD,CAAC,IAAI,EAAE,OAAO,CAAC,CAChB,CAAC;IAEF,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;QAC1B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAExB,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,KAAa,EAAE,EAAE;QAChB,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACnE,CAAC,EACD,CAAC,QAAQ,EAAE,OAAO,CAAC,CACpB,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC;AACjE,CAAC"}
@@ -0,0 +1,74 @@
1
+ import { type FirebaseStorage, type StorageReference } from 'pyric/storage';
2
+ import type { StorageSelectionEntry } from './useStorageSelection.js';
3
+ import type { UseStorageListResult } from './useStorageList.js';
4
+ import { type StorageApi } from '../storageApi.js';
5
+ export interface StorageDeleteProgress {
6
+ /** Objects deleted so far in this folder walk. */
7
+ deletedCount: number;
8
+ /** True for the final emission. */
9
+ done: boolean;
10
+ }
11
+ /**
12
+ * Recursive folder delete implementation — the same injection seam
13
+ * as the Firestore half's `RecursiveDeleteImpl`. Unlike Firestore
14
+ * (where tree-walking needs sandbox introspection or a Cloud
15
+ * Function), the public storage surface CAN walk a prefix, so the
16
+ * package ships {@link createListAllDeleteImpl} as the default;
17
+ * inject your own for server-driven deletes.
18
+ */
19
+ export interface StorageRecursiveDeleteImpl {
20
+ start: (target: StorageReference) => AsyncIterableIterator<StorageDeleteProgress>;
21
+ }
22
+ /**
23
+ * The default, `listAll`-driven impl: walks the prefix tree,
24
+ * `deleteObject`s every item (yielding progress per object), then
25
+ * sweeps each visited folder's `<path>/` placeholder so emptied
26
+ * create-folder folders disappear too (`listAll` hides placeholders,
27
+ * so the walk alone would leave ghost folders). Placeholder sweeps
28
+ * are best-effort — `deletedCount` counts listed objects only.
29
+ */
30
+ export declare function createListAllDeleteImpl(api?: Pick<StorageApi, 'listAll' | 'deleteObject'>): StorageRecursiveDeleteImpl;
31
+ /** One entry's failure in a bulk run. `error` is the typed
32
+ * `StorageError` (`.code` e.g. `storage/unauthorized`). */
33
+ export interface StorageDeleteFailure {
34
+ fullPath: string;
35
+ error: Error;
36
+ }
37
+ export interface StorageDeleteOutcome {
38
+ /** fullPaths of entries fully deleted. */
39
+ deleted: string[];
40
+ failed: StorageDeleteFailure[];
41
+ }
42
+ export interface UseStorageDeleteOptions {
43
+ /** Folder-walk implementation. Default {@link createListAllDeleteImpl}. */
44
+ impl?: StorageRecursiveDeleteImpl;
45
+ /**
46
+ * Optimistic seam from `useStorageList`: entries vanish from the
47
+ * local list immediately and roll back (object → item, folder →
48
+ * trailing-slash prefix insert) on failure.
49
+ */
50
+ list?: Pick<UseStorageListResult, 'insertItem' | 'removeItem'>;
51
+ }
52
+ export interface UseStorageDeleteResult {
53
+ /**
54
+ * Delete a mixed object/folder selection (objects via
55
+ * `deleteObject`, folders via the recursive impl), sequentially in
56
+ * selection order. Resolves with the outcome and never rejects —
57
+ * per-entry failures land in `outcome.failed` (and `error` keeps
58
+ * the first one for simple renders).
59
+ */
60
+ deleteEntries: (entries: StorageSelectionEntry[]) => Promise<StorageDeleteOutcome>;
61
+ /** Objects deleted in the current/last run (folder walks included). */
62
+ progress: number;
63
+ isRunning: boolean;
64
+ /** First failure of the current/last run. Cleared on the next call. */
65
+ error: Error | undefined;
66
+ }
67
+ /**
68
+ * Drive bulk + recursive deletes from a React component — the
69
+ * storage counterpart of `useRecursiveDelete` (same progress /
70
+ * isRunning / error shape, same stale-run generation token), bulk
71
+ * because storage selections are flat multi-row affairs.
72
+ */
73
+ export declare function useStorageDelete(storage: FirebaseStorage | null | undefined, options?: UseStorageDeleteOptions): UseStorageDeleteResult;
74
+ //# sourceMappingURL=useStorageDelete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStorageDelete.d.ts","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageDelete.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGlE,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,CACL,MAAM,EAAE,gBAAgB,KACrB,qBAAqB,CAAC,qBAAqB,CAAC,CAAC;CACnD;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,cAAc,CAAC,GACjD,0BAA0B,CAiC5B;AAED;4DAC4D;AAC5D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,0CAA0C;IAC1C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,uBAAuB;IACtC,2EAA2E;IAC3E,IAAI,CAAC,EAAE,0BAA0B,CAAC;IAClC;;;;OAIG;IACH,IAAI,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,YAAY,GAAG,YAAY,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,sBAAsB;IACrC;;;;;;OAMG;IACH,aAAa,EAAE,CACb,OAAO,EAAE,qBAAqB,EAAE,KAC7B,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACnC,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EAC3C,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CAiExB"}
@@ -0,0 +1,120 @@
1
+ import { useCallback, useRef, useState } from 'react';
2
+ import { deleteObject as defaultDeleteObject, listAll as defaultListAll, } from 'pyric/storage';
3
+ import { useStorageApi } from '../storageApi.js';
4
+ import { asFolderPlaceholder } from '../folderPlaceholder.js';
5
+ /**
6
+ * The default, `listAll`-driven impl: walks the prefix tree,
7
+ * `deleteObject`s every item (yielding progress per object), then
8
+ * sweeps each visited folder's `<path>/` placeholder so emptied
9
+ * create-folder folders disappear too (`listAll` hides placeholders,
10
+ * so the walk alone would leave ghost folders). Placeholder sweeps
11
+ * are best-effort — `deletedCount` counts listed objects only.
12
+ */
13
+ export function createListAllDeleteImpl(api) {
14
+ return {
15
+ async *start(target) {
16
+ const operations = api ?? {
17
+ listAll: defaultListAll,
18
+ deleteObject: defaultDeleteObject,
19
+ };
20
+ let deletedCount = 0;
21
+ const stack = [target];
22
+ const visited = [];
23
+ while (stack.length > 0) {
24
+ const folder = stack.pop();
25
+ visited.push(folder);
26
+ const result = await operations.listAll(folder);
27
+ stack.push(...result.prefixes);
28
+ for (const item of result.items) {
29
+ await operations.deleteObject(item);
30
+ deletedCount++;
31
+ yield { deletedCount, done: false };
32
+ }
33
+ }
34
+ for (const folder of visited) {
35
+ try {
36
+ await operations.deleteObject(asFolderPlaceholder(folder));
37
+ }
38
+ catch {
39
+ // Best-effort: a strict backend may reject the structural
40
+ // placeholder or throw not-found. Neither should fail the
41
+ // recursive delete that already succeeded.
42
+ }
43
+ }
44
+ yield { deletedCount, done: true };
45
+ },
46
+ };
47
+ }
48
+ /**
49
+ * Drive bulk + recursive deletes from a React component — the
50
+ * storage counterpart of `useRecursiveDelete` (same progress /
51
+ * isRunning / error shape, same stale-run generation token), bulk
52
+ * because storage selections are flat multi-row affairs.
53
+ */
54
+ export function useStorageDelete(storage, options = {}) {
55
+ const api = useStorageApi();
56
+ const [progress, setProgress] = useState(0);
57
+ const [isRunning, setIsRunning] = useState(false);
58
+ const [error, setError] = useState(undefined);
59
+ const generationRef = useRef(0);
60
+ // Latest-value ref so `deleteEntries` stays stable across option
61
+ // identity changes (house pattern).
62
+ const optionsRef = useRef(options);
63
+ optionsRef.current = options;
64
+ const deleteEntries = useCallback(async (entries) => {
65
+ const myGen = ++generationRef.current;
66
+ setProgress(0);
67
+ setError(undefined);
68
+ const outcome = { deleted: [], failed: [] };
69
+ if (storage == null || entries.length === 0)
70
+ return outcome;
71
+ setIsRunning(true);
72
+ const impl = optionsRef.current.impl ?? createListAllDeleteImpl(api);
73
+ let count = 0;
74
+ try {
75
+ for (const entry of entries) {
76
+ // Optimistic removal — the row vanishes immediately.
77
+ optionsRef.current.list?.removeItem(entry.fullPath);
78
+ try {
79
+ if (entry.kind === 'object') {
80
+ await api.deleteObject(api.ref(storage, entry.fullPath));
81
+ count++;
82
+ }
83
+ else {
84
+ for await (const evt of impl.start(api.ref(storage, entry.fullPath))) {
85
+ if (myGen !== generationRef.current)
86
+ return outcome;
87
+ // The impl reports counts local to its walk; add the
88
+ // objects already deleted by earlier entries.
89
+ setProgress(count + evt.deletedCount);
90
+ if (evt.done) {
91
+ count += evt.deletedCount;
92
+ break;
93
+ }
94
+ }
95
+ }
96
+ outcome.deleted.push(entry.fullPath);
97
+ if (myGen === generationRef.current)
98
+ setProgress(count);
99
+ }
100
+ catch (e) {
101
+ const err = e instanceof Error ? e : new Error(String(e));
102
+ outcome.failed.push({ fullPath: entry.fullPath, error: err });
103
+ // Roll the optimistic removal back: objects re-insert as
104
+ // items, folders as trailing-slash prefixes.
105
+ optionsRef.current.list?.insertItem(entry.kind === 'folder' ? `${entry.fullPath}/` : entry.fullPath);
106
+ if (myGen === generationRef.current && outcome.failed.length === 1) {
107
+ setError(err);
108
+ }
109
+ }
110
+ }
111
+ return outcome;
112
+ }
113
+ finally {
114
+ if (myGen === generationRef.current)
115
+ setIsRunning(false);
116
+ }
117
+ }, [api, storage]);
118
+ return { deleteEntries, progress, isRunning, error };
119
+ }
120
+ //# sourceMappingURL=useStorageDelete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStorageDelete.js","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageDelete.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import type { FirebaseStorage, StorageReference } from 'pyric/storage';
2
+ export type StorageListStatus = 'idle' | 'loading' | 'success' | 'error';
3
+ /**
4
+ * One row of the merged folder/object model, the prefix→folder
5
+ * synthesis ported (as an idea, not code) from the emulator UI's
6
+ * `useStorageFiles`: `listAll`'s `prefixes` become `kind: 'folder'`
7
+ * rows, its `items` become `kind: 'object'` rows, folders first.
8
+ */
9
+ export interface StorageListEntry {
10
+ kind: 'folder' | 'object';
11
+ /** Last path segment, display name. */
12
+ name: string;
13
+ /** Bucket-rooted path (no trailing slash, even for folders). */
14
+ fullPath: string;
15
+ ref: StorageReference;
16
+ }
17
+ export interface UseStorageListResult {
18
+ /** `'idle'` only when `storage` is null/undefined. */
19
+ status: StorageListStatus;
20
+ /** Direct child objects under `path`. Sorted by `fullPath`. */
21
+ items: StorageReference[];
22
+ /** Synthetic folder prefixes under `path`. Sorted by `fullPath`. */
23
+ prefixes: StorageReference[];
24
+ /** Folders-first merged row model. Derived from `prefixes` + `items`. */
25
+ entries: StorageListEntry[];
26
+ /**
27
+ * `StorageError` (with a typed `storage/<code>` on `.code`) from the
28
+ * sandbox. A denied list is `error.code === 'storage/unauthorized'`
29
+ * (ST-B2).
30
+ */
31
+ error: Error | undefined;
32
+ /** Re-run `listAll` for the current path. */
33
+ refresh: () => void;
34
+ /**
35
+ * Optimistic seam (consumed by M3 upload / M6 bulk ops, exposed
36
+ * now so those hooks layer on without reshaping this one). Inserts
37
+ * `fullPath` into the local list immediately, applying the same
38
+ * prefix→folder synthesis `listAll` would: a direct child becomes
39
+ * an item, a deeper descendant surfaces as its first-segment
40
+ * folder. A trailing slash declares a folder (the GCS placeholder
41
+ * convention `useObjectUpload.createFolder` writes): a direct
42
+ * trailing-slash child inserts a prefix, not an item. No-op for
43
+ * paths outside the listed path, duplicates, or when `status` is
44
+ * `'idle'`. What each call ACTUALLY inserted is recorded (keyed by
45
+ * the given `fullPath`) so `removeItem` can reverse it precisely.
46
+ * Rollback = `removeItem` or `refresh`.
47
+ */
48
+ insertItem: (fullPath: string) => void;
49
+ /**
50
+ * Optimistic counterpart. When `fullPath` was previously given to
51
+ * `insertItem`, this reverses EXACTLY what that call inserted: a
52
+ * deep upload that synthesized a first-segment folder row removes
53
+ * that folder row, and an insert that was a no-op (the row already
54
+ * existed — e.g. a real, listed folder) removes NOTHING, so a
55
+ * failed upload can never delete server-truth rows. For paths never
56
+ * seen by `insertItem` it removes the matching item/folder row
57
+ * directly (the optimistic-delete use). Rollback = `refresh`.
58
+ */
59
+ removeItem: (fullPath: string) => void;
60
+ }
61
+ /**
62
+ * List the objects + synthetic folders directly under `path` :
63
+ * `listAll` over the package's sandbox Storage handle. Read-via-get,
64
+ * not realtime: the list updates on `refresh`, path change, or the
65
+ * optimistic seam. Pass `''` (or the result of `usePathState`) for
66
+ * the bucket root.
67
+ *
68
+ * `listAll` has no pagination; a very large prefix arrives as one flat
69
+ * result (virtualize the rendering, which `<ObjectBrowser>` does).
70
+ */
71
+ export declare function useStorageList(storage: FirebaseStorage | null | undefined, path: string): UseStorageListResult;
72
+ //# sourceMappingURL=useStorageList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStorageList.d.ts","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageList.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAGvB,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,gBAAgB,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,+DAA+D;IAC/D,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,yEAAyE;IACzE,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B;;;;OAIG;IACH,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;;;;;;;;;;;;OAaG;IACH,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC;;;;;;;;;OASG;IACH,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AA0BD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EAC3C,IAAI,EAAE,MAAM,GACX,oBAAoB,CA0JtB"}
@@ -0,0 +1,164 @@
1
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
2
+ import { useStorageApi } from '../storageApi.js';
3
+ /** Strip leading/trailing slashes so `'a/b/'`, `'/a/b'`, `'a/b'` agree. */
4
+ function normalizePath(path) {
5
+ return path.replace(/^\/+|\/+$/g, '');
6
+ }
7
+ function byFullPath(a, b) {
8
+ return a.fullPath < b.fullPath ? -1 : a.fullPath > b.fullPath ? 1 : 0;
9
+ }
10
+ function insertSorted(list, next) {
11
+ if (list.some((r) => r.fullPath === next.fullPath))
12
+ return list;
13
+ return [...list, next].sort(byFullPath);
14
+ }
15
+ /**
16
+ * List the objects + synthetic folders directly under `path` :
17
+ * `listAll` over the package's sandbox Storage handle. Read-via-get,
18
+ * not realtime: the list updates on `refresh`, path change, or the
19
+ * optimistic seam. Pass `''` (or the result of `usePathState`) for
20
+ * the bucket root.
21
+ *
22
+ * `listAll` has no pagination; a very large prefix arrives as one flat
23
+ * result (virtualize the rendering, which `<ObjectBrowser>` does).
24
+ */
25
+ export function useStorageList(storage, path) {
26
+ // Injected: in-process `pyric/storage` by default, or the SharedWorker client
27
+ // bundle in Studio served mode (via StorageApiProvider).
28
+ const { listAll, ref: refFn } = useStorageApi();
29
+ const normalized = normalizePath(path);
30
+ const [state, setState] = useState(() => ({
31
+ status: storage == null ? 'idle' : 'loading',
32
+ items: [],
33
+ prefixes: [],
34
+ error: undefined,
35
+ }));
36
+ const [tick, setTick] = useState(0);
37
+ // What each `insertItem(fullPath)` call ACTUALLY inserted, keyed by the
38
+ // normalized argument: the inserted row's fullPath, or null when the call
39
+ // was a no-op (row already present). `removeItem` consults this to reverse
40
+ // precisely; a fresh listing (server truth) clears the ledger.
41
+ const optimisticInserts = useRef(new Map());
42
+ useEffect(() => {
43
+ optimisticInserts.current.clear();
44
+ if (storage == null) {
45
+ setState({ status: 'idle', items: [], prefixes: [], error: undefined });
46
+ return;
47
+ }
48
+ let cancelled = false;
49
+ setState({ status: 'loading', items: [], prefixes: [], error: undefined });
50
+ listAll(refFn(storage, normalized))
51
+ .then((result) => {
52
+ if (cancelled)
53
+ return;
54
+ setState({
55
+ status: 'success',
56
+ // Defensive copy + sort pins the invariant the optimistic seam
57
+ // relies on even if the backing implementation changes.
58
+ items: [...result.items].sort(byFullPath),
59
+ prefixes: [...result.prefixes].sort(byFullPath),
60
+ error: undefined,
61
+ });
62
+ })
63
+ .catch((e) => {
64
+ if (cancelled)
65
+ return;
66
+ setState({
67
+ status: 'error',
68
+ items: [],
69
+ prefixes: [],
70
+ error: e instanceof Error ? e : new Error(String(e)),
71
+ });
72
+ });
73
+ return () => {
74
+ cancelled = true;
75
+ };
76
+ }, [storage, normalized, tick]);
77
+ const refresh = useCallback(() => setTick((n) => n + 1), []);
78
+ const insertItem = useCallback((fullPath) => {
79
+ if (storage == null)
80
+ return;
81
+ // Trailing slash = folder declaration (a `<path>/` placeholder
82
+ // object surfaces as a prefix, never an item, same synthesis
83
+ // `listAll` applies).
84
+ const isFolder = fullPath.endsWith('/');
85
+ const target = normalizePath(fullPath);
86
+ const scanPrefix = normalized === '' ? '' : `${normalized}/`;
87
+ if (!target.startsWith(scanPrefix) || target === normalized)
88
+ return;
89
+ const relative = target.slice(scanPrefix.length);
90
+ const slashIdx = relative.indexOf('/');
91
+ setState((prev) => {
92
+ if (prev.status === 'idle')
93
+ return prev;
94
+ // Record what this call really adds (null = no-op) so removeItem can
95
+ // reverse it precisely. Idempotent under StrictMode's double-invoke:
96
+ // the same prev yields the same record.
97
+ if (slashIdx === -1) {
98
+ if (isFolder) {
99
+ // Direct child folder.
100
+ optimisticInserts.current.set(target, prev.prefixes.some((r) => r.fullPath === target) ? null : target);
101
+ return {
102
+ ...prev,
103
+ prefixes: insertSorted(prev.prefixes, refFn(storage, target)),
104
+ };
105
+ }
106
+ // Direct child object.
107
+ optimisticInserts.current.set(target, prev.items.some((r) => r.fullPath === target) ? null : target);
108
+ return { ...prev, items: insertSorted(prev.items, refFn(storage, target)) };
109
+ }
110
+ // Deeper descendant, surface its first segment as a folder,
111
+ // exactly like listAll's synthesis.
112
+ const folderPath = `${scanPrefix}${relative.slice(0, slashIdx)}`;
113
+ optimisticInserts.current.set(target, prev.prefixes.some((r) => r.fullPath === folderPath) ? null : folderPath);
114
+ return {
115
+ ...prev,
116
+ prefixes: insertSorted(prev.prefixes, refFn(storage, folderPath)),
117
+ };
118
+ });
119
+ }, [storage, normalized]);
120
+ const removeItem = useCallback((fullPath) => {
121
+ const target = normalizePath(fullPath);
122
+ const record = optimisticInserts.current.get(target);
123
+ optimisticInserts.current.delete(target);
124
+ // This path was optimistically inserted and the insert added nothing
125
+ // (the row pre-existed) — there is nothing of ours to remove, and
126
+ // removing by path would delete a server-truth row.
127
+ if (record === null)
128
+ return;
129
+ // Reverse the exact row the insert created (a deep upload's synthesized
130
+ // first-segment folder differs from the upload's own fullPath); fall
131
+ // back to the path itself for plain optimistic deletes.
132
+ const rowPath = record ?? target;
133
+ setState((prev) => ({
134
+ ...prev,
135
+ items: prev.items.filter((r) => r.fullPath !== rowPath),
136
+ prefixes: prev.prefixes.filter((r) => r.fullPath !== rowPath),
137
+ }));
138
+ }, []);
139
+ const entries = useMemo(() => [
140
+ ...state.prefixes.map((p) => ({
141
+ kind: 'folder',
142
+ name: p.name,
143
+ fullPath: p.fullPath,
144
+ ref: p,
145
+ })),
146
+ ...state.items.map((i) => ({
147
+ kind: 'object',
148
+ name: i.name,
149
+ fullPath: i.fullPath,
150
+ ref: i,
151
+ })),
152
+ ], [state.prefixes, state.items]);
153
+ return {
154
+ status: state.status,
155
+ items: state.items,
156
+ prefixes: state.prefixes,
157
+ entries,
158
+ error: state.error,
159
+ refresh,
160
+ insertItem,
161
+ removeItem,
162
+ };
163
+ }
164
+ //# sourceMappingURL=useStorageList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStorageList.js","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAK1E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAuEjD,2EAA2E;AAC3E,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,UAAU,CAAC,CAAmB,EAAE,CAAmB;IAC1D,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,YAAY,CACnB,IAAwB,EACxB,IAAsB;IAEtB,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAChE,OAAO,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAC5B,OAA2C,EAC3C,IAAY;IAEZ,8EAA8E;IAC9E,yDAAyD;IACzD,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,CAAC;IAChD,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAY,GAAG,EAAE,CAAC,CAAC;QACnD,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QAC5C,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC,CAAC;IACJ,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEpC,wEAAwE;IACxE,0EAA0E;IAC1E,2EAA2E;IAC3E,+DAA+D;IAC/D,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,GAAG,EAAyB,CAAC,CAAC;IAEnE,SAAS,CAAC,GAAG,EAAE;QACb,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YACxE,OAAO;QACT,CAAC;QACD,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3E,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;aAChC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,SAAS;gBAAE,OAAO;YACtB,QAAQ,CAAC;gBACP,MAAM,EAAE,SAAS;gBACjB,+DAA+D;gBAC/D,wDAAwD;gBACxD,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;gBACzC,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC/C,KAAK,EAAE,SAAS;aACjB,CAAC,CAAC;QACL,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACX,IAAI,SAAS;gBAAE,OAAO;YACtB,QAAQ,CAAC;gBACP,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aACrD,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;IAEhC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE7D,MAAM,UAAU,GAAG,WAAW,CAC5B,CAAC,QAAgB,EAAE,EAAE;QACnB,IAAI,OAAO,IAAI,IAAI;YAAE,OAAO;QAC5B,+DAA+D;QAC/D,6DAA6D;QAC7D,sBAAsB;QACtB,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,MAAM,KAAK,UAAU;YAAE,OAAO;QACpE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACvC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE;YAChB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAC;YACxC,qEAAqE;YACrE,qEAAqE;YACrE,wCAAwC;YACxC,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;gBACpB,IAAI,QAAQ,EAAE,CAAC;oBACb,uBAAuB;oBACvB,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAC3B,MAAM,EACN,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CACjE,CAAC;oBACF,OAAO;wBACL,GAAG,IAAI;wBACP,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;qBAC9D,CAAC;gBACJ,CAAC;gBACD,uBAAuB;gBACvB,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAC3B,MAAM,EACN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAC9D,CAAC;gBACF,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;YAC9E,CAAC;YACD,4DAA4D;YAC5D,oCAAoC;YACpC,MAAM,UAAU,GAAG,GAAG,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;YACjE,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAC3B,MAAM,EACN,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CACzE,CAAC;YACF,OAAO;gBACL,GAAG,IAAI;gBACP,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;aAClE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,EACD,CAAC,OAAO,EAAE,UAAU,CAAC,CACtB,CAAC;IAEF,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,QAAgB,EAAE,EAAE;QAClD,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrD,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,qEAAqE;QACrE,kEAAkE;QAClE,oDAAoD;QACpD,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO;QAC5B,wEAAwE;QACxE,qEAAqE;QACrE,wDAAwD;QACxD,MAAM,OAAO,GAAG,MAAM,IAAI,MAAM,CAAC;QACjC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClB,GAAG,IAAI;YACP,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC;YACvD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC;SAC9D,CAAC,CAAC,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,OAAO,CACrB,GAAG,EAAE,CAAC;QACJ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5B,IAAI,EAAE,QAAiB;YACvB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,GAAG,EAAE,CAAC;SACP,CAAC,CAAC;QACH,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzB,IAAI,EAAE,QAAiB;YACvB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,GAAG,EAAE,CAAC;SACP,CAAC,CAAC;KACJ,EACD,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAC9B,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO;QACP,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO;QACP,UAAU;QACV,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { FirebaseStorage, FullMetadata } from 'pyric/storage';
2
+ export type StorageObjectStatus = 'idle' | 'loading' | 'success' | 'error';
3
+ export interface UseStorageObjectResult {
4
+ /** Metadata read state. `'idle'` when `storage` or `path` is null. */
5
+ status: StorageObjectStatus;
6
+ metadata: FullMetadata | undefined;
7
+ /** Typed `StorageError` (`storage/object-not-found`,
8
+ * `storage/unauthorized`, …). */
9
+ error: Error | undefined;
10
+ /** Re-read the metadata (also resets the blob, the object may
11
+ * have been overwritten). */
12
+ refresh: () => void;
13
+ /** Blob read state. Stays `'idle'` until `loadBlob()`, the blob
14
+ * is LAZY; metadata alone never downloads bytes. */
15
+ blobStatus: StorageObjectStatus;
16
+ blob: Blob | undefined;
17
+ /**
18
+ * `URL.createObjectURL` handle for the loaded blob, used as the local
19
+ * preview channel. Revoked automatically when the blob is replaced,
20
+ * the path changes, or the hook unmounts.
21
+ */
22
+ blobUrl: string | undefined;
23
+ blobError: Error | undefined;
24
+ /** Fetch the bytes via `getBlob`. Subsequent calls re-fetch. */
25
+ loadBlob: () => void;
26
+ }
27
+ /**
28
+ * One object's metadata + lazily-loaded bytes, the data source for
29
+ * `<ObjectInspector>`. Read-via-get like the rest of the storage
30
+ * half: updates on `refresh`, `path` change, or `loadBlob`.
31
+ */
32
+ export declare function useStorageObject(storage: FirebaseStorage | null | undefined, path: string | null | undefined): UseStorageObjectResult;
33
+ //# sourceMappingURL=useStorageObject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStorageObject.d.ts","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageObject.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACb,MAAM,eAAe,CAAC;AAIvB,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE3E,MAAM,WAAW,sBAAsB;IACrC,sEAAsE;IACtE,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAC;IACnC;sCACkC;IAClC,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB;kCAC8B;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;yDACqD;IACrD,UAAU,EAAE,mBAAmB,CAAC;IAChC,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IACvB;;;;OAIG;IACH,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,SAAS,EAAE,KAAK,GAAG,SAAS,CAAC;IAC7B,gEAAgE;IAChE,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAsBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EAC3C,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,sBAAsB,CAkGxB"}