@pyric/ui 0.1.0-alpha.7

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 (594) hide show
  1. package/README.md +79 -0
  2. package/dist/agents/ContextWindowUsage.d.ts +67 -0
  3. package/dist/agents/ContextWindowUsage.d.ts.map +1 -0
  4. package/dist/agents/ContextWindowUsage.js +115 -0
  5. package/dist/agents/ContextWindowUsage.js.map +1 -0
  6. package/dist/agents/EmptyState.d.ts +18 -0
  7. package/dist/agents/EmptyState.d.ts.map +1 -0
  8. package/dist/agents/EmptyState.js +11 -0
  9. package/dist/agents/EmptyState.js.map +1 -0
  10. package/dist/agents/Fold.d.ts +37 -0
  11. package/dist/agents/Fold.d.ts.map +1 -0
  12. package/dist/agents/Fold.js +18 -0
  13. package/dist/agents/Fold.js.map +1 -0
  14. package/dist/agents/Modal.d.ts +25 -0
  15. package/dist/agents/Modal.d.ts.map +1 -0
  16. package/dist/agents/Modal.js +28 -0
  17. package/dist/agents/Modal.js.map +1 -0
  18. package/dist/agents/PulsingDot.d.ts +21 -0
  19. package/dist/agents/PulsingDot.d.ts.map +1 -0
  20. package/dist/agents/PulsingDot.js +18 -0
  21. package/dist/agents/PulsingDot.js.map +1 -0
  22. package/dist/agents/index.d.ts +15 -0
  23. package/dist/agents/index.d.ts.map +1 -0
  24. package/dist/agents/index.js +15 -0
  25. package/dist/agents/index.js.map +1 -0
  26. package/dist/auth/authApi.d.ts +32 -0
  27. package/dist/auth/authApi.d.ts.map +1 -0
  28. package/dist/auth/authApi.js +27 -0
  29. package/dist/auth/authApi.js.map +1 -0
  30. package/dist/auth/claims.d.ts +27 -0
  31. package/dist/auth/claims.d.ts.map +1 -0
  32. package/dist/auth/claims.js +58 -0
  33. package/dist/auth/claims.js.map +1 -0
  34. package/dist/auth/components/AuthProviderToggles.d.ts +31 -0
  35. package/dist/auth/components/AuthProviderToggles.d.ts.map +1 -0
  36. package/dist/auth/components/AuthProviderToggles.js +48 -0
  37. package/dist/auth/components/AuthProviderToggles.js.map +1 -0
  38. package/dist/auth/components/AuthSignInHelper.d.ts +57 -0
  39. package/dist/auth/components/AuthSignInHelper.d.ts.map +1 -0
  40. package/dist/auth/components/AuthSignInHelper.js +69 -0
  41. package/dist/auth/components/AuthSignInHelper.js.map +1 -0
  42. package/dist/auth/components/AuthUserForm.d.ts +84 -0
  43. package/dist/auth/components/AuthUserForm.d.ts.map +1 -0
  44. package/dist/auth/components/AuthUserForm.js +89 -0
  45. package/dist/auth/components/AuthUserForm.js.map +1 -0
  46. package/dist/auth/components/AuthUserList.d.ts +51 -0
  47. package/dist/auth/components/AuthUserList.d.ts.map +1 -0
  48. package/dist/auth/components/AuthUserList.js +46 -0
  49. package/dist/auth/components/AuthUserList.js.map +1 -0
  50. package/dist/auth/components/ClaimsField.d.ts +22 -0
  51. package/dist/auth/components/ClaimsField.d.ts.map +1 -0
  52. package/dist/auth/components/ClaimsField.js +11 -0
  53. package/dist/auth/components/ClaimsField.js.map +1 -0
  54. package/dist/auth/components/confirmActions.d.ts +40 -0
  55. package/dist/auth/components/confirmActions.d.ts.map +1 -0
  56. package/dist/auth/components/confirmActions.js +49 -0
  57. package/dist/auth/components/confirmActions.js.map +1 -0
  58. package/dist/auth/controller.d.ts +73 -0
  59. package/dist/auth/controller.d.ts.map +1 -0
  60. package/dist/auth/controller.js +139 -0
  61. package/dist/auth/controller.js.map +1 -0
  62. package/dist/auth/hooks/index.d.ts +7 -0
  63. package/dist/auth/hooks/index.d.ts.map +1 -0
  64. package/dist/auth/hooks/index.js +7 -0
  65. package/dist/auth/hooks/index.js.map +1 -0
  66. package/dist/auth/hooks/useAuthFlowHelper.d.ts +30 -0
  67. package/dist/auth/hooks/useAuthFlowHelper.d.ts.map +1 -0
  68. package/dist/auth/hooks/useAuthFlowHelper.js +30 -0
  69. package/dist/auth/hooks/useAuthFlowHelper.js.map +1 -0
  70. package/dist/auth/hooks/useAuthProviderConfig.d.ts +37 -0
  71. package/dist/auth/hooks/useAuthProviderConfig.d.ts.map +1 -0
  72. package/dist/auth/hooks/useAuthProviderConfig.js +98 -0
  73. package/dist/auth/hooks/useAuthProviderConfig.js.map +1 -0
  74. package/dist/auth/hooks/useAuthUserEditor.d.ts +30 -0
  75. package/dist/auth/hooks/useAuthUserEditor.d.ts.map +1 -0
  76. package/dist/auth/hooks/useAuthUserEditor.js +27 -0
  77. package/dist/auth/hooks/useAuthUserEditor.js.map +1 -0
  78. package/dist/auth/hooks/useAuthUsers.d.ts +38 -0
  79. package/dist/auth/hooks/useAuthUsers.d.ts.map +1 -0
  80. package/dist/auth/hooks/useAuthUsers.js +111 -0
  81. package/dist/auth/hooks/useAuthUsers.js.map +1 -0
  82. package/dist/auth/index.d.ts +11 -0
  83. package/dist/auth/index.d.ts.map +1 -0
  84. package/dist/auth/index.js +13 -0
  85. package/dist/auth/index.js.map +1 -0
  86. package/dist/auth/providers.d.ts +11 -0
  87. package/dist/auth/providers.d.ts.map +1 -0
  88. package/dist/auth/providers.js +28 -0
  89. package/dist/auth/providers.js.map +1 -0
  90. package/dist/auth/reducers/userEditor.d.ts +55 -0
  91. package/dist/auth/reducers/userEditor.d.ts.map +1 -0
  92. package/dist/auth/reducers/userEditor.js +136 -0
  93. package/dist/auth/reducers/userEditor.js.map +1 -0
  94. package/dist/events/components/ActivityActionItems.d.ts +45 -0
  95. package/dist/events/components/ActivityActionItems.d.ts.map +1 -0
  96. package/dist/events/components/ActivityActionItems.js +68 -0
  97. package/dist/events/components/ActivityActionItems.js.map +1 -0
  98. package/dist/events/components/ActivityGrid.d.ts +65 -0
  99. package/dist/events/components/ActivityGrid.d.ts.map +1 -0
  100. package/dist/events/components/ActivityGrid.js +61 -0
  101. package/dist/events/components/ActivityGrid.js.map +1 -0
  102. package/dist/events/components/ActivityGridRow.d.ts +31 -0
  103. package/dist/events/components/ActivityGridRow.d.ts.map +1 -0
  104. package/dist/events/components/ActivityGridRow.js +23 -0
  105. package/dist/events/components/ActivityGridRow.js.map +1 -0
  106. package/dist/events/components/ProposedChangeDiff.d.ts +46 -0
  107. package/dist/events/components/ProposedChangeDiff.d.ts.map +1 -0
  108. package/dist/events/components/ProposedChangeDiff.js +60 -0
  109. package/dist/events/components/ProposedChangeDiff.js.map +1 -0
  110. package/dist/events/components/format.d.ts +11 -0
  111. package/dist/events/components/format.d.ts.map +1 -0
  112. package/dist/events/components/format.js +26 -0
  113. package/dist/events/components/format.js.map +1 -0
  114. package/dist/events/components/index.d.ts +6 -0
  115. package/dist/events/components/index.d.ts.map +1 -0
  116. package/dist/events/components/index.js +6 -0
  117. package/dist/events/components/index.js.map +1 -0
  118. package/dist/events/digest.d.ts +167 -0
  119. package/dist/events/digest.d.ts.map +1 -0
  120. package/dist/events/digest.js +426 -0
  121. package/dist/events/digest.js.map +1 -0
  122. package/dist/events/hooks/index.d.ts +3 -0
  123. package/dist/events/hooks/index.d.ts.map +1 -0
  124. package/dist/events/hooks/index.js +3 -0
  125. package/dist/events/hooks/index.js.map +1 -0
  126. package/dist/events/hooks/useActivityDigest.d.ts +27 -0
  127. package/dist/events/hooks/useActivityDigest.d.ts.map +1 -0
  128. package/dist/events/hooks/useActivityDigest.js +18 -0
  129. package/dist/events/hooks/useActivityDigest.js.map +1 -0
  130. package/dist/events/hooks/useActivityStream.d.ts +44 -0
  131. package/dist/events/hooks/useActivityStream.d.ts.map +1 -0
  132. package/dist/events/hooks/useActivityStream.js +38 -0
  133. package/dist/events/hooks/useActivityStream.js.map +1 -0
  134. package/dist/events/index.d.ts +15 -0
  135. package/dist/events/index.d.ts.map +1 -0
  136. package/dist/events/index.js +14 -0
  137. package/dist/events/index.js.map +1 -0
  138. package/dist/events/types.d.ts +160 -0
  139. package/dist/events/types.d.ts.map +1 -0
  140. package/dist/events/types.js +21 -0
  141. package/dist/events/types.js.map +1 -0
  142. package/dist/firestore/components/CollectionList.d.ts +22 -0
  143. package/dist/firestore/components/CollectionList.d.ts.map +1 -0
  144. package/dist/firestore/components/CollectionList.js +21 -0
  145. package/dist/firestore/components/CollectionList.js.map +1 -0
  146. package/dist/firestore/components/DeleteWithConfirm.d.ts +38 -0
  147. package/dist/firestore/components/DeleteWithConfirm.d.ts.map +1 -0
  148. package/dist/firestore/components/DeleteWithConfirm.js +33 -0
  149. package/dist/firestore/components/DeleteWithConfirm.js.map +1 -0
  150. package/dist/firestore/components/DocumentEditor.d.ts +47 -0
  151. package/dist/firestore/components/DocumentEditor.d.ts.map +1 -0
  152. package/dist/firestore/components/DocumentEditor.js +176 -0
  153. package/dist/firestore/components/DocumentEditor.js.map +1 -0
  154. package/dist/firestore/components/DocumentList.d.ts +60 -0
  155. package/dist/firestore/components/DocumentList.d.ts.map +1 -0
  156. package/dist/firestore/components/DocumentList.js +39 -0
  157. package/dist/firestore/components/DocumentList.js.map +1 -0
  158. package/dist/firestore/components/DocumentPreview.d.ts +68 -0
  159. package/dist/firestore/components/DocumentPreview.d.ts.map +1 -0
  160. package/dist/firestore/components/DocumentPreview.js +76 -0
  161. package/dist/firestore/components/DocumentPreview.js.map +1 -0
  162. package/dist/firestore/components/FieldRenderer.d.ts +17 -0
  163. package/dist/firestore/components/FieldRenderer.d.ts.map +1 -0
  164. package/dist/firestore/components/FieldRenderer.js +16 -0
  165. package/dist/firestore/components/FieldRenderer.js.map +1 -0
  166. package/dist/firestore/components/QueryBuilder.d.ts +25 -0
  167. package/dist/firestore/components/QueryBuilder.d.ts.map +1 -0
  168. package/dist/firestore/components/QueryBuilder.js +78 -0
  169. package/dist/firestore/components/QueryBuilder.js.map +1 -0
  170. package/dist/firestore/components/ReferencePicker.d.ts +33 -0
  171. package/dist/firestore/components/ReferencePicker.d.ts.map +1 -0
  172. package/dist/firestore/components/ReferencePicker.js +42 -0
  173. package/dist/firestore/components/ReferencePicker.js.map +1 -0
  174. package/dist/firestore/components/TreeEntry.d.ts +15 -0
  175. package/dist/firestore/components/TreeEntry.d.ts.map +1 -0
  176. package/dist/firestore/components/TreeEntry.js +23 -0
  177. package/dist/firestore/components/TreeEntry.js.map +1 -0
  178. package/dist/firestore/components/context.d.ts +18 -0
  179. package/dist/firestore/components/context.d.ts.map +1 -0
  180. package/dist/firestore/components/context.js +7 -0
  181. package/dist/firestore/components/context.js.map +1 -0
  182. package/dist/firestore/fieldEditors/array.d.ts +3 -0
  183. package/dist/firestore/fieldEditors/array.d.ts.map +1 -0
  184. package/dist/firestore/fieldEditors/array.js +16 -0
  185. package/dist/firestore/fieldEditors/array.js.map +1 -0
  186. package/dist/firestore/fieldEditors/boolean.d.ts +3 -0
  187. package/dist/firestore/fieldEditors/boolean.d.ts.map +1 -0
  188. package/dist/firestore/fieldEditors/boolean.js +13 -0
  189. package/dist/firestore/fieldEditors/boolean.js.map +1 -0
  190. package/dist/firestore/fieldEditors/bytes.d.ts +4 -0
  191. package/dist/firestore/fieldEditors/bytes.d.ts.map +1 -0
  192. package/dist/firestore/fieldEditors/bytes.js +31 -0
  193. package/dist/firestore/fieldEditors/bytes.js.map +1 -0
  194. package/dist/firestore/fieldEditors/geopoint.d.ts +4 -0
  195. package/dist/firestore/fieldEditors/geopoint.d.ts.map +1 -0
  196. package/dist/firestore/fieldEditors/geopoint.js +32 -0
  197. package/dist/firestore/fieldEditors/geopoint.js.map +1 -0
  198. package/dist/firestore/fieldEditors/map.d.ts +3 -0
  199. package/dist/firestore/fieldEditors/map.d.ts.map +1 -0
  200. package/dist/firestore/fieldEditors/map.js +19 -0
  201. package/dist/firestore/fieldEditors/map.js.map +1 -0
  202. package/dist/firestore/fieldEditors/null.d.ts +3 -0
  203. package/dist/firestore/fieldEditors/null.d.ts.map +1 -0
  204. package/dist/firestore/fieldEditors/null.js +17 -0
  205. package/dist/firestore/fieldEditors/null.js.map +1 -0
  206. package/dist/firestore/fieldEditors/number.d.ts +3 -0
  207. package/dist/firestore/fieldEditors/number.d.ts.map +1 -0
  208. package/dist/firestore/fieldEditors/number.js +24 -0
  209. package/dist/firestore/fieldEditors/number.js.map +1 -0
  210. package/dist/firestore/fieldEditors/reference.d.ts +4 -0
  211. package/dist/firestore/fieldEditors/reference.d.ts.map +1 -0
  212. package/dist/firestore/fieldEditors/reference.js +49 -0
  213. package/dist/firestore/fieldEditors/reference.js.map +1 -0
  214. package/dist/firestore/fieldEditors/registry.d.ts +16 -0
  215. package/dist/firestore/fieldEditors/registry.d.ts.map +1 -0
  216. package/dist/firestore/fieldEditors/registry.js +42 -0
  217. package/dist/firestore/fieldEditors/registry.js.map +1 -0
  218. package/dist/firestore/fieldEditors/string.d.ts +3 -0
  219. package/dist/firestore/fieldEditors/string.d.ts.map +1 -0
  220. package/dist/firestore/fieldEditors/string.js +13 -0
  221. package/dist/firestore/fieldEditors/string.js.map +1 -0
  222. package/dist/firestore/fieldEditors/timestamp.d.ts +4 -0
  223. package/dist/firestore/fieldEditors/timestamp.d.ts.map +1 -0
  224. package/dist/firestore/fieldEditors/timestamp.js +52 -0
  225. package/dist/firestore/fieldEditors/timestamp.js.map +1 -0
  226. package/dist/firestore/fieldEditors/types.d.ts +64 -0
  227. package/dist/firestore/fieldEditors/types.d.ts.map +1 -0
  228. package/dist/firestore/fieldEditors/types.js +2 -0
  229. package/dist/firestore/fieldEditors/types.js.map +1 -0
  230. package/dist/firestore/fieldEditors/vector.d.ts +29 -0
  231. package/dist/firestore/fieldEditors/vector.d.ts.map +1 -0
  232. package/dist/firestore/fieldEditors/vector.js +93 -0
  233. package/dist/firestore/fieldEditors/vector.js.map +1 -0
  234. package/dist/firestore/firestoreApi.d.ts +35 -0
  235. package/dist/firestore/firestoreApi.d.ts.map +1 -0
  236. package/dist/firestore/firestoreApi.js +28 -0
  237. package/dist/firestore/firestoreApi.js.map +1 -0
  238. package/dist/firestore/hooks/coerceError.d.ts +17 -0
  239. package/dist/firestore/hooks/coerceError.d.ts.map +1 -0
  240. package/dist/firestore/hooks/coerceError.js +41 -0
  241. package/dist/firestore/hooks/coerceError.js.map +1 -0
  242. package/dist/firestore/hooks/index.d.ts +10 -0
  243. package/dist/firestore/hooks/index.d.ts.map +1 -0
  244. package/dist/firestore/hooks/index.js +10 -0
  245. package/dist/firestore/hooks/index.js.map +1 -0
  246. package/dist/firestore/hooks/useCollectionList.d.ts +37 -0
  247. package/dist/firestore/hooks/useCollectionList.d.ts.map +1 -0
  248. package/dist/firestore/hooks/useCollectionList.js +51 -0
  249. package/dist/firestore/hooks/useCollectionList.js.map +1 -0
  250. package/dist/firestore/hooks/useDocumentEditor.d.ts +58 -0
  251. package/dist/firestore/hooks/useDocumentEditor.d.ts.map +1 -0
  252. package/dist/firestore/hooks/useDocumentEditor.js +68 -0
  253. package/dist/firestore/hooks/useDocumentEditor.js.map +1 -0
  254. package/dist/firestore/hooks/useDocumentList.d.ts +45 -0
  255. package/dist/firestore/hooks/useDocumentList.d.ts.map +1 -0
  256. package/dist/firestore/hooks/useDocumentList.js +112 -0
  257. package/dist/firestore/hooks/useDocumentList.js.map +1 -0
  258. package/dist/firestore/hooks/useDocumentSubcollections.d.ts +29 -0
  259. package/dist/firestore/hooks/useDocumentSubcollections.d.ts.map +1 -0
  260. package/dist/firestore/hooks/useDocumentSubcollections.js +48 -0
  261. package/dist/firestore/hooks/useDocumentSubcollections.js.map +1 -0
  262. package/dist/firestore/hooks/useFirestoreCollection.d.ts +14 -0
  263. package/dist/firestore/hooks/useFirestoreCollection.d.ts.map +1 -0
  264. package/dist/firestore/hooks/useFirestoreCollection.js +35 -0
  265. package/dist/firestore/hooks/useFirestoreCollection.js.map +1 -0
  266. package/dist/firestore/hooks/useFirestoreDoc.d.ts +17 -0
  267. package/dist/firestore/hooks/useFirestoreDoc.d.ts.map +1 -0
  268. package/dist/firestore/hooks/useFirestoreDoc.js +34 -0
  269. package/dist/firestore/hooks/useFirestoreDoc.js.map +1 -0
  270. package/dist/firestore/hooks/useQueryBuilder.d.ts +51 -0
  271. package/dist/firestore/hooks/useQueryBuilder.d.ts.map +1 -0
  272. package/dist/firestore/hooks/useQueryBuilder.js +110 -0
  273. package/dist/firestore/hooks/useQueryBuilder.js.map +1 -0
  274. package/dist/firestore/hooks/useRecursiveDelete.d.ts +40 -0
  275. package/dist/firestore/hooks/useRecursiveDelete.d.ts.map +1 -0
  276. package/dist/firestore/hooks/useRecursiveDelete.js +44 -0
  277. package/dist/firestore/hooks/useRecursiveDelete.js.map +1 -0
  278. package/dist/firestore/hooks/useReferencePicker.d.ts +70 -0
  279. package/dist/firestore/hooks/useReferencePicker.d.ts.map +1 -0
  280. package/dist/firestore/hooks/useReferencePicker.js +140 -0
  281. package/dist/firestore/hooks/useReferencePicker.js.map +1 -0
  282. package/dist/firestore/import/parseImport.d.ts +55 -0
  283. package/dist/firestore/import/parseImport.d.ts.map +1 -0
  284. package/dist/firestore/import/parseImport.js +101 -0
  285. package/dist/firestore/import/parseImport.js.map +1 -0
  286. package/dist/firestore/index.d.ts +20 -0
  287. package/dist/firestore/index.d.ts.map +1 -0
  288. package/dist/firestore/index.js +28 -0
  289. package/dist/firestore/index.js.map +1 -0
  290. package/dist/firestore/reducers/defaults.d.ts +10 -0
  291. package/dist/firestore/reducers/defaults.d.ts.map +1 -0
  292. package/dist/firestore/reducers/defaults.js +37 -0
  293. package/dist/firestore/reducers/defaults.js.map +1 -0
  294. package/dist/firestore/reducers/documentEditor.d.ts +23 -0
  295. package/dist/firestore/reducers/documentEditor.d.ts.map +1 -0
  296. package/dist/firestore/reducers/documentEditor.js +199 -0
  297. package/dist/firestore/reducers/documentEditor.js.map +1 -0
  298. package/dist/firestore/reducers/tree.d.ts +28 -0
  299. package/dist/firestore/reducers/tree.d.ts.map +1 -0
  300. package/dist/firestore/reducers/tree.js +129 -0
  301. package/dist/firestore/reducers/tree.js.map +1 -0
  302. package/dist/firestore/reducers/types.d.ts +112 -0
  303. package/dist/firestore/reducers/types.d.ts.map +1 -0
  304. package/dist/firestore/reducers/types.js +2 -0
  305. package/dist/firestore/reducers/types.js.map +1 -0
  306. package/dist/firestore/reducers/validation.d.ts +25 -0
  307. package/dist/firestore/reducers/validation.d.ts.map +1 -0
  308. package/dist/firestore/reducers/validation.js +121 -0
  309. package/dist/firestore/reducers/validation.js.map +1 -0
  310. package/dist/firestore/types.d.ts +77 -0
  311. package/dist/firestore/types.d.ts.map +1 -0
  312. package/dist/firestore/types.js +196 -0
  313. package/dist/firestore/types.js.map +1 -0
  314. package/dist/firestore/validation/ids.d.ts +23 -0
  315. package/dist/firestore/validation/ids.d.ts.map +1 -0
  316. package/dist/firestore/validation/ids.js +46 -0
  317. package/dist/firestore/validation/ids.js.map +1 -0
  318. package/dist/index.d.ts +2 -0
  319. package/dist/index.d.ts.map +1 -0
  320. package/dist/index.js +2 -0
  321. package/dist/index.js.map +1 -0
  322. package/dist/primitives/Badge.d.ts +28 -0
  323. package/dist/primitives/Badge.d.ts.map +1 -0
  324. package/dist/primitives/Badge.js +11 -0
  325. package/dist/primitives/Badge.js.map +1 -0
  326. package/dist/primitives/ConfirmDialog.d.ts +42 -0
  327. package/dist/primitives/ConfirmDialog.d.ts.map +1 -0
  328. package/dist/primitives/ConfirmDialog.js +61 -0
  329. package/dist/primitives/ConfirmDialog.js.map +1 -0
  330. package/dist/primitives/CopyButton.d.ts +28 -0
  331. package/dist/primitives/CopyButton.d.ts.map +1 -0
  332. package/dist/primitives/CopyButton.js +27 -0
  333. package/dist/primitives/CopyButton.js.map +1 -0
  334. package/dist/primitives/JsonView.d.ts +29 -0
  335. package/dist/primitives/JsonView.d.ts.map +1 -0
  336. package/dist/primitives/JsonView.js +56 -0
  337. package/dist/primitives/JsonView.js.map +1 -0
  338. package/dist/primitives/SegmentedControl.d.ts +37 -0
  339. package/dist/primitives/SegmentedControl.d.ts.map +1 -0
  340. package/dist/primitives/SegmentedControl.js +18 -0
  341. package/dist/primitives/SegmentedControl.js.map +1 -0
  342. package/dist/primitives/Toast.d.ts +48 -0
  343. package/dist/primitives/Toast.d.ts.map +1 -0
  344. package/dist/primitives/Toast.js +60 -0
  345. package/dist/primitives/Toast.js.map +1 -0
  346. package/dist/primitives/VirtualList.d.ts +37 -0
  347. package/dist/primitives/VirtualList.d.ts.map +1 -0
  348. package/dist/primitives/VirtualList.js +47 -0
  349. package/dist/primitives/VirtualList.js.map +1 -0
  350. package/dist/primitives/hooks/useContainerSize.d.ts +29 -0
  351. package/dist/primitives/hooks/useContainerSize.d.ts.map +1 -0
  352. package/dist/primitives/hooks/useContainerSize.js +45 -0
  353. package/dist/primitives/hooks/useContainerSize.js.map +1 -0
  354. package/dist/primitives/index.d.ts +10 -0
  355. package/dist/primitives/index.d.ts.map +1 -0
  356. package/dist/primitives/index.js +10 -0
  357. package/dist/primitives/index.js.map +1 -0
  358. package/dist/primitives/useConfirm.d.ts +34 -0
  359. package/dist/primitives/useConfirm.d.ts.map +1 -0
  360. package/dist/primitives/useConfirm.js +63 -0
  361. package/dist/primitives/useConfirm.js.map +1 -0
  362. package/dist/rtdb/components/RtdbPathBar.d.ts +31 -0
  363. package/dist/rtdb/components/RtdbPathBar.d.ts.map +1 -0
  364. package/dist/rtdb/components/RtdbPathBar.js +47 -0
  365. package/dist/rtdb/components/RtdbPathBar.js.map +1 -0
  366. package/dist/rtdb/components/RtdbTree.d.ts +38 -0
  367. package/dist/rtdb/components/RtdbTree.d.ts.map +1 -0
  368. package/dist/rtdb/components/RtdbTree.js +103 -0
  369. package/dist/rtdb/components/RtdbTree.js.map +1 -0
  370. package/dist/rtdb/editor.d.ts +25 -0
  371. package/dist/rtdb/editor.d.ts.map +1 -0
  372. package/dist/rtdb/editor.js +79 -0
  373. package/dist/rtdb/editor.js.map +1 -0
  374. package/dist/rtdb/hooks/useRtdbTree.d.ts +31 -0
  375. package/dist/rtdb/hooks/useRtdbTree.d.ts.map +1 -0
  376. package/dist/rtdb/hooks/useRtdbTree.js +49 -0
  377. package/dist/rtdb/hooks/useRtdbTree.js.map +1 -0
  378. package/dist/rtdb/index.d.ts +17 -0
  379. package/dist/rtdb/index.d.ts.map +1 -0
  380. package/dist/rtdb/index.js +21 -0
  381. package/dist/rtdb/index.js.map +1 -0
  382. package/dist/rtdb/pathInput.d.ts +28 -0
  383. package/dist/rtdb/pathInput.d.ts.map +1 -0
  384. package/dist/rtdb/pathInput.js +40 -0
  385. package/dist/rtdb/pathInput.js.map +1 -0
  386. package/dist/rtdb/reducers/tree.d.ts +86 -0
  387. package/dist/rtdb/reducers/tree.d.ts.map +1 -0
  388. package/dist/rtdb/reducers/tree.js +131 -0
  389. package/dist/rtdb/reducers/tree.js.map +1 -0
  390. package/dist/rtdb/rtdbApi.d.ts +20 -0
  391. package/dist/rtdb/rtdbApi.d.ts.map +1 -0
  392. package/dist/rtdb/rtdbApi.js +2 -0
  393. package/dist/rtdb/rtdbApi.js.map +1 -0
  394. package/dist/rtdb/values.d.ts +44 -0
  395. package/dist/rtdb/values.d.ts.map +1 -0
  396. package/dist/rtdb/values.js +143 -0
  397. package/dist/rtdb/values.js.map +1 -0
  398. package/dist/rules/components/DenialInspector.d.ts +18 -0
  399. package/dist/rules/components/DenialInspector.d.ts.map +1 -0
  400. package/dist/rules/components/DenialInspector.js +58 -0
  401. package/dist/rules/components/DenialInspector.js.map +1 -0
  402. package/dist/rules/components/format.d.ts +56 -0
  403. package/dist/rules/components/format.d.ts.map +1 -0
  404. package/dist/rules/components/format.js +137 -0
  405. package/dist/rules/components/format.js.map +1 -0
  406. package/dist/rules/components/index.d.ts +4 -0
  407. package/dist/rules/components/index.d.ts.map +1 -0
  408. package/dist/rules/components/index.js +4 -0
  409. package/dist/rules/components/index.js.map +1 -0
  410. package/dist/rules/components/scope.d.ts +10 -0
  411. package/dist/rules/components/scope.d.ts.map +1 -0
  412. package/dist/rules/components/scope.js +72 -0
  413. package/dist/rules/components/scope.js.map +1 -0
  414. package/dist/rules/hooks/index.d.ts +2 -0
  415. package/dist/rules/hooks/index.d.ts.map +1 -0
  416. package/dist/rules/hooks/index.js +2 -0
  417. package/dist/rules/hooks/index.js.map +1 -0
  418. package/dist/rules/hooks/useDenialTrace.d.ts +51 -0
  419. package/dist/rules/hooks/useDenialTrace.d.ts.map +1 -0
  420. package/dist/rules/hooks/useDenialTrace.js +58 -0
  421. package/dist/rules/hooks/useDenialTrace.js.map +1 -0
  422. package/dist/rules/index.d.ts +14 -0
  423. package/dist/rules/index.d.ts.map +1 -0
  424. package/dist/rules/index.js +13 -0
  425. package/dist/rules/index.js.map +1 -0
  426. package/dist/rules/types.d.ts +75 -0
  427. package/dist/rules/types.d.ts.map +1 -0
  428. package/dist/rules/types.js +2 -0
  429. package/dist/rules/types.js.map +1 -0
  430. package/dist/storage/collisionRename.d.ts +73 -0
  431. package/dist/storage/collisionRename.d.ts.map +1 -0
  432. package/dist/storage/collisionRename.js +113 -0
  433. package/dist/storage/collisionRename.js.map +1 -0
  434. package/dist/storage/components/DeleteSelectionWithConfirm.d.ts +68 -0
  435. package/dist/storage/components/DeleteSelectionWithConfirm.d.ts.map +1 -0
  436. package/dist/storage/components/DeleteSelectionWithConfirm.js +82 -0
  437. package/dist/storage/components/DeleteSelectionWithConfirm.js.map +1 -0
  438. package/dist/storage/components/ObjectBrowser.d.ts +75 -0
  439. package/dist/storage/components/ObjectBrowser.d.ts.map +1 -0
  440. package/dist/storage/components/ObjectBrowser.js +59 -0
  441. package/dist/storage/components/ObjectBrowser.js.map +1 -0
  442. package/dist/storage/components/ObjectInspector.d.ts +43 -0
  443. package/dist/storage/components/ObjectInspector.d.ts.map +1 -0
  444. package/dist/storage/components/ObjectInspector.js +92 -0
  445. package/dist/storage/components/ObjectInspector.js.map +1 -0
  446. package/dist/storage/components/PathBreadcrumb.d.ts +30 -0
  447. package/dist/storage/components/PathBreadcrumb.d.ts.map +1 -0
  448. package/dist/storage/components/PathBreadcrumb.js +26 -0
  449. package/dist/storage/components/PathBreadcrumb.js.map +1 -0
  450. package/dist/storage/components/UploadDropzone.d.ts +50 -0
  451. package/dist/storage/components/UploadDropzone.d.ts.map +1 -0
  452. package/dist/storage/components/UploadDropzone.js +109 -0
  453. package/dist/storage/components/UploadDropzone.js.map +1 -0
  454. package/dist/storage/folderPlaceholder.d.ts +14 -0
  455. package/dist/storage/folderPlaceholder.d.ts.map +1 -0
  456. package/dist/storage/folderPlaceholder.js +27 -0
  457. package/dist/storage/folderPlaceholder.js.map +1 -0
  458. package/dist/storage/hooks/index.d.ts +9 -0
  459. package/dist/storage/hooks/index.d.ts.map +1 -0
  460. package/dist/storage/hooks/index.js +9 -0
  461. package/dist/storage/hooks/index.js.map +1 -0
  462. package/dist/storage/hooks/useMetadataEditor.d.ts +114 -0
  463. package/dist/storage/hooks/useMetadataEditor.d.ts.map +1 -0
  464. package/dist/storage/hooks/useMetadataEditor.js +193 -0
  465. package/dist/storage/hooks/useMetadataEditor.js.map +1 -0
  466. package/dist/storage/hooks/useObjectUpload.d.ts +109 -0
  467. package/dist/storage/hooks/useObjectUpload.d.ts.map +1 -0
  468. package/dist/storage/hooks/useObjectUpload.js +134 -0
  469. package/dist/storage/hooks/useObjectUpload.js.map +1 -0
  470. package/dist/storage/hooks/usePathState.d.ts +43 -0
  471. package/dist/storage/hooks/usePathState.d.ts.map +1 -0
  472. package/dist/storage/hooks/usePathState.js +42 -0
  473. package/dist/storage/hooks/usePathState.js.map +1 -0
  474. package/dist/storage/hooks/useStorageDelete.d.ts +73 -0
  475. package/dist/storage/hooks/useStorageDelete.d.ts.map +1 -0
  476. package/dist/storage/hooks/useStorageDelete.js +114 -0
  477. package/dist/storage/hooks/useStorageDelete.js.map +1 -0
  478. package/dist/storage/hooks/useStorageList.d.ts +74 -0
  479. package/dist/storage/hooks/useStorageList.d.ts.map +1 -0
  480. package/dist/storage/hooks/useStorageList.js +167 -0
  481. package/dist/storage/hooks/useStorageList.js.map +1 -0
  482. package/dist/storage/hooks/useStorageObject.d.ts +34 -0
  483. package/dist/storage/hooks/useStorageObject.d.ts.map +1 -0
  484. package/dist/storage/hooks/useStorageObject.js +114 -0
  485. package/dist/storage/hooks/useStorageObject.js.map +1 -0
  486. package/dist/storage/hooks/useStorageRulesGate.d.ts +128 -0
  487. package/dist/storage/hooks/useStorageRulesGate.d.ts.map +1 -0
  488. package/dist/storage/hooks/useStorageRulesGate.js +158 -0
  489. package/dist/storage/hooks/useStorageRulesGate.js.map +1 -0
  490. package/dist/storage/hooks/useStorageSelection.d.ts +32 -0
  491. package/dist/storage/hooks/useStorageSelection.d.ts.map +1 -0
  492. package/dist/storage/hooks/useStorageSelection.js +55 -0
  493. package/dist/storage/hooks/useStorageSelection.js.map +1 -0
  494. package/dist/storage/index.d.ts +11 -0
  495. package/dist/storage/index.d.ts.map +1 -0
  496. package/dist/storage/index.js +17 -0
  497. package/dist/storage/index.js.map +1 -0
  498. package/dist/storage/pendingPrefixes.d.ts +73 -0
  499. package/dist/storage/pendingPrefixes.d.ts.map +1 -0
  500. package/dist/storage/pendingPrefixes.js +98 -0
  501. package/dist/storage/pendingPrefixes.js.map +1 -0
  502. package/dist/storage/previews.d.ts +51 -0
  503. package/dist/storage/previews.d.ts.map +1 -0
  504. package/dist/storage/previews.js +73 -0
  505. package/dist/storage/previews.js.map +1 -0
  506. package/dist/storage/storageApi.d.ts +30 -0
  507. package/dist/storage/storageApi.d.ts.map +1 -0
  508. package/dist/storage/storageApi.js +13 -0
  509. package/dist/storage/storageApi.js.map +1 -0
  510. package/dist/traffic/components/RuleHeatmap.d.ts +34 -0
  511. package/dist/traffic/components/RuleHeatmap.d.ts.map +1 -0
  512. package/dist/traffic/components/RuleHeatmap.js +40 -0
  513. package/dist/traffic/components/RuleHeatmap.js.map +1 -0
  514. package/dist/traffic/components/TrafficDetail.d.ts +33 -0
  515. package/dist/traffic/components/TrafficDetail.d.ts.map +1 -0
  516. package/dist/traffic/components/TrafficDetail.js +28 -0
  517. package/dist/traffic/components/TrafficDetail.js.map +1 -0
  518. package/dist/traffic/components/TrafficGroupRow.d.ts +28 -0
  519. package/dist/traffic/components/TrafficGroupRow.d.ts.map +1 -0
  520. package/dist/traffic/components/TrafficGroupRow.js +18 -0
  521. package/dist/traffic/components/TrafficGroupRow.js.map +1 -0
  522. package/dist/traffic/components/TrafficLineChart.d.ts +34 -0
  523. package/dist/traffic/components/TrafficLineChart.d.ts.map +1 -0
  524. package/dist/traffic/components/TrafficLineChart.js +49 -0
  525. package/dist/traffic/components/TrafficLineChart.js.map +1 -0
  526. package/dist/traffic/components/TrafficLog.d.ts +52 -0
  527. package/dist/traffic/components/TrafficLog.d.ts.map +1 -0
  528. package/dist/traffic/components/TrafficLog.js +34 -0
  529. package/dist/traffic/components/TrafficLog.js.map +1 -0
  530. package/dist/traffic/components/TrafficMetricCards.d.ts +26 -0
  531. package/dist/traffic/components/TrafficMetricCards.d.ts.map +1 -0
  532. package/dist/traffic/components/TrafficMetricCards.js +24 -0
  533. package/dist/traffic/components/TrafficMetricCards.js.map +1 -0
  534. package/dist/traffic/components/TrafficRow.d.ts +40 -0
  535. package/dist/traffic/components/TrafficRow.d.ts.map +1 -0
  536. package/dist/traffic/components/TrafficRow.js +27 -0
  537. package/dist/traffic/components/TrafficRow.js.map +1 -0
  538. package/dist/traffic/components/TrafficStats.d.ts +18 -0
  539. package/dist/traffic/components/TrafficStats.d.ts.map +1 -0
  540. package/dist/traffic/components/TrafficStats.js +19 -0
  541. package/dist/traffic/components/TrafficStats.js.map +1 -0
  542. package/dist/traffic/components/TrafficTimeline.d.ts +81 -0
  543. package/dist/traffic/components/TrafficTimeline.d.ts.map +1 -0
  544. package/dist/traffic/components/TrafficTimeline.js +72 -0
  545. package/dist/traffic/components/TrafficTimeline.js.map +1 -0
  546. package/dist/traffic/components/format.d.ts +13 -0
  547. package/dist/traffic/components/format.d.ts.map +1 -0
  548. package/dist/traffic/components/format.js +24 -0
  549. package/dist/traffic/components/format.js.map +1 -0
  550. package/dist/traffic/components/index.d.ts +11 -0
  551. package/dist/traffic/components/index.d.ts.map +1 -0
  552. package/dist/traffic/components/index.js +11 -0
  553. package/dist/traffic/components/index.js.map +1 -0
  554. package/dist/traffic/hooks/index.d.ts +8 -0
  555. package/dist/traffic/hooks/index.d.ts.map +1 -0
  556. package/dist/traffic/hooks/index.js +8 -0
  557. package/dist/traffic/hooks/index.js.map +1 -0
  558. package/dist/traffic/hooks/useRuleHeatmap.d.ts +33 -0
  559. package/dist/traffic/hooks/useRuleHeatmap.d.ts.map +1 -0
  560. package/dist/traffic/hooks/useRuleHeatmap.js +54 -0
  561. package/dist/traffic/hooks/useRuleHeatmap.js.map +1 -0
  562. package/dist/traffic/hooks/useTrafficBuckets.d.ts +71 -0
  563. package/dist/traffic/hooks/useTrafficBuckets.d.ts.map +1 -0
  564. package/dist/traffic/hooks/useTrafficBuckets.js +74 -0
  565. package/dist/traffic/hooks/useTrafficBuckets.js.map +1 -0
  566. package/dist/traffic/hooks/useTrafficFilter.d.ts +40 -0
  567. package/dist/traffic/hooks/useTrafficFilter.d.ts.map +1 -0
  568. package/dist/traffic/hooks/useTrafficFilter.js +33 -0
  569. package/dist/traffic/hooks/useTrafficFilter.js.map +1 -0
  570. package/dist/traffic/hooks/useTrafficGroups.d.ts +47 -0
  571. package/dist/traffic/hooks/useTrafficGroups.d.ts.map +1 -0
  572. package/dist/traffic/hooks/useTrafficGroups.js +73 -0
  573. package/dist/traffic/hooks/useTrafficGroups.js.map +1 -0
  574. package/dist/traffic/hooks/useTrafficMetrics.d.ts +66 -0
  575. package/dist/traffic/hooks/useTrafficMetrics.d.ts.map +1 -0
  576. package/dist/traffic/hooks/useTrafficMetrics.js +156 -0
  577. package/dist/traffic/hooks/useTrafficMetrics.js.map +1 -0
  578. package/dist/traffic/hooks/useTrafficMonitor.d.ts +56 -0
  579. package/dist/traffic/hooks/useTrafficMonitor.d.ts.map +1 -0
  580. package/dist/traffic/hooks/useTrafficMonitor.js +58 -0
  581. package/dist/traffic/hooks/useTrafficMonitor.js.map +1 -0
  582. package/dist/traffic/hooks/useTrafficStats.d.ts +32 -0
  583. package/dist/traffic/hooks/useTrafficStats.d.ts.map +1 -0
  584. package/dist/traffic/hooks/useTrafficStats.js +45 -0
  585. package/dist/traffic/hooks/useTrafficStats.js.map +1 -0
  586. package/dist/traffic/index.d.ts +4 -0
  587. package/dist/traffic/index.d.ts.map +1 -0
  588. package/dist/traffic/index.js +3 -0
  589. package/dist/traffic/index.js.map +1 -0
  590. package/dist/traffic/types.d.ts +72 -0
  591. package/dist/traffic/types.d.ts.map +1 -0
  592. package/dist/traffic/types.js +10 -0
  593. package/dist/traffic/types.js.map +1 -0
  594. package/package.json +116 -0
@@ -0,0 +1,43 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { FirebaseStorage, FullMetadata } from 'pyric/storage';
3
+ import { type StoragePreview } from '../previews.js';
4
+ export interface ObjectInspectorProps {
5
+ /** The package's single Storage handle prop (sandbox or prod). */
6
+ storage: FirebaseStorage | null | undefined;
7
+ /** Object path to inspect. `null` renders the idle shell — keep
8
+ * the inspector mounted and swap paths as the user selects rows. */
9
+ path: string | null;
10
+ /** Consumer previews, tried BEFORE the built-ins (first match
11
+ * wins) — the extension channel of the preview registry. */
12
+ previews?: StoragePreview[];
13
+ /** Metadata-section slot. Default renders the standard field list.
14
+ * The header, preview, and state wiring stay with the component. */
15
+ renderMetadata?: (metadata: FullMetadata) => ReactNode;
16
+ /** Extra content below the preview (metadata editor, delete
17
+ * button, …). */
18
+ children?: ReactNode;
19
+ className?: string;
20
+ }
21
+ /**
22
+ * Headless inspector for one storage object: metadata + a
23
+ * content-type-driven preview. Previews come from the registry
24
+ * (`image/*` and `text/* + application/json` built in; extend via
25
+ * `previews`). Blob bytes load lazily and ONLY when the matched
26
+ * preview asks (`needsBlob`) and the object is within the preview's
27
+ * `maxBytes` cap; the blob URL is revoked on unmount/path change
28
+ * (see `useStorageObject`).
29
+ *
30
+ * Ships no visual styling. Consumers style via:
31
+ * - `[data-pyric-ui="object-inspector"]` — root (stamps `data-size`)
32
+ * - `…[data-pyric-idle]` / `[data-pyric-loading]` / `[data-pyric-error]`
33
+ * - `[data-pyric-object-name]` / `[data-pyric-object-metadata]`
34
+ * - `[data-pyric-metadata-field="<field>"]` — each metadata row
35
+ * - `[data-pyric-object-preview]` — the preview container, stamping
36
+ * `data-pyric-preview="<id>"` for the matched registry entry
37
+ * - `…[data-pyric-preview-loading]` — blob in flight
38
+ * - `…[data-pyric-preview-error]` — blob load failed
39
+ * - `…[data-pyric-preview-too-large]` — over the preview's cap
40
+ * - `…[data-pyric-preview-none]` — no registry match (metadata-only)
41
+ */
42
+ export declare function ObjectInspector({ storage, path, previews, renderMetadata, children, className, }: ObjectInspectorProps): import("react").JSX.Element;
43
+ //# sourceMappingURL=ObjectInspector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObjectInspector.d.ts","sourceRoot":"","sources":["../../../src/storage/components/ObjectInspector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGnE,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE3E,MAAM,WAAW,oBAAoB;IACnC,kEAAkE;IAClE,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C;yEACqE;IACrE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB;iEAC6D;IAC7D,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B;yEACqE;IACrE,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,SAAS,CAAC;IACvD;sBACkB;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAsCD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,SAAS,GACV,EAAE,oBAAoB,+BAgFtB"}
@@ -0,0 +1,92 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect } from 'react';
3
+ import { useContainerSize } from '../../primitives/hooks/useContainerSize.js';
4
+ import { useStorageObject } from '../hooks/useStorageObject.js';
5
+ import { selectStoragePreview } from '../previews.js';
6
+ const METADATA_FIELDS = [
7
+ { key: 'fullPath', label: 'Path', value: (md) => md.fullPath },
8
+ { key: 'size', label: 'Size', value: (md) => `${md.size}` },
9
+ { key: 'contentType', label: 'Content type', value: (md) => md.contentType },
10
+ { key: 'cacheControl', label: 'Cache control', value: (md) => md.cacheControl },
11
+ { key: 'timeCreated', label: 'Created', value: (md) => md.timeCreated },
12
+ { key: 'updated', label: 'Updated', value: (md) => md.updated },
13
+ ];
14
+ function DefaultMetadata({ metadata }) {
15
+ return (_jsxs("dl", { "data-pyric-object-metadata": true, children: [METADATA_FIELDS.map(({ key, label, value }) => {
16
+ const v = value(metadata);
17
+ if (v === undefined)
18
+ return null;
19
+ return (_jsxs("div", { "data-pyric-metadata-field": key, children: [_jsx("dt", { children: label }), _jsx("dd", { children: v })] }, key));
20
+ }), Object.entries(metadata.customMetadata ?? {}).map(([k, v]) => (_jsxs("div", { "data-pyric-metadata-field": "customMetadata", "data-pyric-metadata-key": k, children: [_jsx("dt", { children: k }), _jsx("dd", { children: v })] }, `custom:${k}`)))] }));
21
+ }
22
+ /**
23
+ * Headless inspector for one storage object: metadata + a
24
+ * content-type-driven preview. Previews come from the registry
25
+ * (`image/*` and `text/* + application/json` built in; extend via
26
+ * `previews`). Blob bytes load lazily and ONLY when the matched
27
+ * preview asks (`needsBlob`) and the object is within the preview's
28
+ * `maxBytes` cap; the blob URL is revoked on unmount/path change
29
+ * (see `useStorageObject`).
30
+ *
31
+ * Ships no visual styling. Consumers style via:
32
+ * - `[data-pyric-ui="object-inspector"]` — root (stamps `data-size`)
33
+ * - `…[data-pyric-idle]` / `[data-pyric-loading]` / `[data-pyric-error]`
34
+ * - `[data-pyric-object-name]` / `[data-pyric-object-metadata]`
35
+ * - `[data-pyric-metadata-field="<field>"]` — each metadata row
36
+ * - `[data-pyric-object-preview]` — the preview container, stamping
37
+ * `data-pyric-preview="<id>"` for the matched registry entry
38
+ * - `…[data-pyric-preview-loading]` — blob in flight
39
+ * - `…[data-pyric-preview-error]` — blob load failed
40
+ * - `…[data-pyric-preview-too-large]` — over the preview's cap
41
+ * - `…[data-pyric-preview-none]` — no registry match (metadata-only)
42
+ */
43
+ export function ObjectInspector({ storage, path, previews, renderMetadata, children, className, }) {
44
+ const { ref: rootRef, size } = useContainerSize();
45
+ const object = useStorageObject(storage, path);
46
+ const { metadata, blobStatus, loadBlob } = object;
47
+ const preview = metadata ? selectStoragePreview(metadata, previews) : undefined;
48
+ const tooLarge = preview?.maxBytes !== undefined &&
49
+ metadata !== undefined &&
50
+ metadata.size > preview.maxBytes;
51
+ const wantsBlob = preview?.needsBlob === true && !tooLarge;
52
+ // Auto-load the bytes when (and only when) the matched preview
53
+ // needs them. `blobStatus` resets to 'idle' on path change, which
54
+ // re-arms this effect for the next object.
55
+ useEffect(() => {
56
+ if (wantsBlob && blobStatus === 'idle')
57
+ loadBlob();
58
+ }, [wantsBlob, blobStatus, loadBlob]);
59
+ if (object.status === 'idle') {
60
+ return (_jsx("div", { className: className, "data-pyric-ui": "object-inspector", "data-pyric-idle": "" }));
61
+ }
62
+ if (object.status === 'loading') {
63
+ return (_jsx("div", { className: className, "data-pyric-ui": "object-inspector", "data-pyric-loading": "" }));
64
+ }
65
+ if (object.status === 'error' || metadata === undefined) {
66
+ return (_jsx("div", { className: className, "data-pyric-ui": "object-inspector", "data-pyric-error": "", role: "alert", children: object.error?.message }));
67
+ }
68
+ let previewContent;
69
+ let previewState = {};
70
+ if (preview === undefined) {
71
+ previewState = { 'data-pyric-preview-none': '' };
72
+ }
73
+ else if (tooLarge) {
74
+ previewState = { 'data-pyric-preview-too-large': '' };
75
+ }
76
+ else if (wantsBlob && blobStatus === 'loading') {
77
+ previewState = { 'data-pyric-preview-loading': '' };
78
+ }
79
+ else if (wantsBlob && blobStatus === 'error') {
80
+ previewState = { 'data-pyric-preview-error': '' };
81
+ previewContent = object.blobError?.message;
82
+ }
83
+ else if (!wantsBlob || blobStatus === 'success') {
84
+ previewContent = preview.render({
85
+ metadata,
86
+ blob: object.blob,
87
+ blobUrl: object.blobUrl,
88
+ });
89
+ }
90
+ return (_jsxs("div", { ref: rootRef, className: className, "data-pyric-ui": "object-inspector", "data-size": size, children: [_jsx("div", { "data-pyric-object-name": true, children: metadata.name }), renderMetadata ? renderMetadata(metadata) : _jsx(DefaultMetadata, { metadata: metadata }), _jsx("div", { "data-pyric-object-preview": true, "data-pyric-preview": preview?.id, ...previewState, children: previewContent }), children] }));
91
+ }
92
+ //# sourceMappingURL=ObjectInspector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObjectInspector.js","sourceRoot":"","sources":["../../../src/storage/components/ObjectInspector.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface PathBreadcrumbProps {
3
+ /** Current path. `''` renders just the root crumb. */
4
+ path: string;
5
+ /** Fired with the absolute path of the clicked crumb (`''` for
6
+ * root). Wire to `usePathState.setPath`. */
7
+ onNavigate?: (path: string) => void;
8
+ /** Label for the root crumb. Default `'/'` — pass the bucket name
9
+ * for a `gs://bucket` feel. */
10
+ rootLabel?: ReactNode;
11
+ /** Rendered between crumbs. Default `'/'`. */
12
+ separator?: ReactNode;
13
+ className?: string;
14
+ }
15
+ /**
16
+ * Headless breadcrumb for storage paths. Every crumb (including the
17
+ * current one) is a real `<button>` — clicking the current crumb is
18
+ * a cheap "refresh this level" affordance for consumers that wire
19
+ * `onNavigate` to a path-keyed loader.
20
+ *
21
+ * Ships no visual styling. Consumers style via:
22
+ * - `[data-pyric-ui="path-breadcrumb"]` — the `<nav>` root
23
+ * - `[data-pyric-breadcrumb-item]` — each `<li>`
24
+ * - `[data-pyric-breadcrumb-link]` — each crumb button
25
+ * - `[data-pyric-breadcrumb-link][data-pyric-current]` — the current level
26
+ * - `[data-pyric-breadcrumb-root]` — the root crumb's button
27
+ * - `[data-pyric-breadcrumb-separator]` — the separators
28
+ */
29
+ export declare function PathBreadcrumb({ path, onNavigate, rootLabel, separator, className, }: PathBreadcrumbProps): import("react").JSX.Element;
30
+ //# sourceMappingURL=PathBreadcrumb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PathBreadcrumb.d.ts","sourceRoot":"","sources":["../../../src/storage/components/PathBreadcrumb.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb;iDAC6C;IAC7C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;oCACgC;IAChC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,UAAU,EACV,SAAe,EACf,SAAe,EACf,SAAS,GACV,EAAE,mBAAmB,+BA8CrB"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { normalizeStoragePath } from '../hooks/usePathState.js';
3
+ /**
4
+ * Headless breadcrumb for storage paths. Every crumb (including the
5
+ * current one) is a real `<button>` — clicking the current crumb is
6
+ * a cheap "refresh this level" affordance for consumers that wire
7
+ * `onNavigate` to a path-keyed loader.
8
+ *
9
+ * Ships no visual styling. Consumers style via:
10
+ * - `[data-pyric-ui="path-breadcrumb"]` — the `<nav>` root
11
+ * - `[data-pyric-breadcrumb-item]` — each `<li>`
12
+ * - `[data-pyric-breadcrumb-link]` — each crumb button
13
+ * - `[data-pyric-breadcrumb-link][data-pyric-current]` — the current level
14
+ * - `[data-pyric-breadcrumb-root]` — the root crumb's button
15
+ * - `[data-pyric-breadcrumb-separator]` — the separators
16
+ */
17
+ export function PathBreadcrumb({ path, onNavigate, rootLabel = '/', separator = '/', className, }) {
18
+ const normalized = normalizeStoragePath(path);
19
+ const segments = normalized === '' ? [] : normalized.split('/');
20
+ return (_jsx("nav", { className: className, "data-pyric-ui": "path-breadcrumb", "aria-label": "Storage path", children: _jsxs("ol", { "data-pyric-breadcrumb-list": true, children: [_jsx("li", { "data-pyric-breadcrumb-item": true, children: _jsx("button", { type: "button", onClick: () => onNavigate?.(''), "data-pyric-breadcrumb-link": true, "data-pyric-breadcrumb-root": true, "data-pyric-current": segments.length === 0 ? '' : undefined, "aria-current": segments.length === 0 ? 'page' : undefined, children: rootLabel }) }), segments.map((segment, i) => {
21
+ const isCurrent = i === segments.length - 1;
22
+ const target = segments.slice(0, i + 1).join('/');
23
+ return (_jsxs("li", { "data-pyric-breadcrumb-item": true, children: [_jsx("span", { "aria-hidden": true, "data-pyric-breadcrumb-separator": true, children: separator }), _jsx("button", { type: "button", onClick: () => onNavigate?.(target), "data-pyric-breadcrumb-link": true, "data-pyric-current": isCurrent ? '' : undefined, "aria-current": isCurrent ? 'page' : undefined, children: segment })] }, target));
24
+ })] }) }));
25
+ }
26
+ //# sourceMappingURL=PathBreadcrumb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PathBreadcrumb.js","sourceRoot":"","sources":["../../../src/storage/components/PathBreadcrumb.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAgBhE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,cAAc,CAAC,EAC7B,IAAI,EACJ,UAAU,EACV,SAAS,GAAG,GAAG,EACf,SAAS,GAAG,GAAG,EACf,SAAS,GACW;IACpB,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEhE,OAAO,CACL,cACE,SAAS,EAAE,SAAS,mBACN,iBAAiB,gBACpB,cAAc,YAEzB,6DACE,2DACE,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,gGAGX,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,kBAC5C,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YAEvD,SAAS,GACH,GACN,EACJ,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;oBAC3B,MAAM,SAAS,GAAG,CAAC,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAClD,OAAO,CACL,6DACE,uFACG,SAAS,GACL,EACP,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,4DAEf,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,kBAChC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YAE3C,OAAO,GACD,KAZF,MAAM,CAaV,CACN,CAAC;gBACJ,CAAC,CAAC,IACC,GACD,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { type ReactNode } from 'react';
2
+ /** One dropped file, flattened from the drop's file/folder tree. */
3
+ export interface DroppedFile {
4
+ file: File;
5
+ /**
6
+ * Path relative to the drop — `'a.txt'` for a plain file drop,
7
+ * `'photos/cat.png'` for a file inside a dropped folder. Feed
8
+ * straight into `useObjectUpload`:
9
+ * `upload(files.map((f) => ({ path: f.relativePath, data: f.file })))`.
10
+ */
11
+ relativePath: string;
12
+ }
13
+ export interface UploadDropzoneProps {
14
+ /**
15
+ * Fired once per drop with the flattened file list (folder drops
16
+ * are traversed recursively via `webkitGetAsEntry`; empty folders
17
+ * yield nothing — wire `useObjectUpload.createFolder` to your own
18
+ * "new folder" affordance instead). Not fired for empty drops.
19
+ */
20
+ onFiles: (files: DroppedFile[]) => void;
21
+ /** Slot — the dropzone chrome ("Drop files here…", a browse
22
+ * `<input type="file">`, anything). The component owns only the
23
+ * drag wiring + `data-*` states. */
24
+ children?: ReactNode;
25
+ /** Ignore drops + suppress the dragging state. */
26
+ disabled?: boolean;
27
+ /**
28
+ * Why the dropzone is disabled — stamped on
29
+ * `data-disabled-reason` (and only while `disabled`) so the
30
+ * chrome/styling can surface it. The canonical source is the rules
31
+ * gate: `disabled={!gate.verdictFor(path).upload}` +
32
+ * `disabledReason={gate.verdictFor(path).reasons.write.join('; ')}`.
33
+ */
34
+ disabledReason?: string;
35
+ className?: string;
36
+ }
37
+ /**
38
+ * Headless drop target for file + folder uploads. Slot-based: the
39
+ * children render the chrome; the component owns drag wiring and
40
+ * stamps `data-dragging` while a drag hovers (a counter tracks
41
+ * enter/leave pairs so crossing child elements doesn't flicker).
42
+ *
43
+ * Ships no visual styling. Consumers style via:
44
+ * - `[data-pyric-ui="upload-dropzone"]` — the root
45
+ * - `…[data-dragging]` — a drag is hovering
46
+ * - `…[data-disabled]`
47
+ * - `…[data-disabled-reason="…"]` — why (e.g. a denied write verdict)
48
+ */
49
+ export declare function UploadDropzone({ onFiles, children, disabled, disabledReason, className, }: UploadDropzoneProps): import("react").JSX.Element;
50
+ //# sourceMappingURL=UploadDropzone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploadDropzone.d.ts","sourceRoot":"","sources":["../../../src/storage/components/UploadDropzone.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtF,oEAAoE;AACpE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IACxC;;yCAEqC;IACrC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,SAAS,GACV,EAAE,mBAAmB,+BA8DrB"}
@@ -0,0 +1,109 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useCallback, useRef, useState } from 'react';
3
+ /**
4
+ * Walk a `FileSystemEntry` tree depth-first, accumulating files with
5
+ * folder-relative paths. `readEntries` is batched per spec (Chrome
6
+ * caps a batch at 100) — loop until an empty batch.
7
+ */
8
+ async function walkEntry(entry, prefix, out) {
9
+ const path = prefix === '' ? entry.name : `${prefix}/${entry.name}`;
10
+ if (entry.isFile) {
11
+ const file = await new Promise((resolve, reject) => entry.file(resolve, reject));
12
+ out.push({ file, relativePath: path });
13
+ return;
14
+ }
15
+ if (entry.isDirectory) {
16
+ const reader = entry.createReader();
17
+ for (;;) {
18
+ const batch = await new Promise((resolve, reject) => reader.readEntries(resolve, reject));
19
+ if (batch.length === 0)
20
+ break;
21
+ for (const child of batch) {
22
+ await walkEntry(child, path, out);
23
+ }
24
+ }
25
+ }
26
+ }
27
+ /**
28
+ * Flatten a drop's `DataTransfer` into files. Prefers the
29
+ * `webkitGetAsEntry` tree (the only channel that exposes folder
30
+ * structure); items without it fall back to `getAsFile`, and a
31
+ * `DataTransfer` with no usable `items` falls back to `files`.
32
+ */
33
+ async function collectDroppedFiles(dt) {
34
+ const out = [];
35
+ const items = dt.items ? Array.from(dt.items) : [];
36
+ for (const item of items) {
37
+ if (item.kind !== 'file')
38
+ continue;
39
+ const getEntry = item.webkitGetAsEntry;
40
+ const entry = typeof getEntry === 'function' ? getEntry.call(item) : null;
41
+ if (entry) {
42
+ await walkEntry(entry, '', out);
43
+ }
44
+ else {
45
+ const file = item.getAsFile?.();
46
+ if (file)
47
+ out.push({ file, relativePath: file.name });
48
+ }
49
+ }
50
+ if (out.length === 0) {
51
+ for (const file of Array.from(dt.files ?? [])) {
52
+ out.push({ file, relativePath: file.name });
53
+ }
54
+ }
55
+ return out;
56
+ }
57
+ /**
58
+ * Headless drop target for file + folder uploads. Slot-based: the
59
+ * children render the chrome; the component owns drag wiring and
60
+ * stamps `data-dragging` while a drag hovers (a counter tracks
61
+ * enter/leave pairs so crossing child elements doesn't flicker).
62
+ *
63
+ * Ships no visual styling. Consumers style via:
64
+ * - `[data-pyric-ui="upload-dropzone"]` — the root
65
+ * - `…[data-dragging]` — a drag is hovering
66
+ * - `…[data-disabled]`
67
+ * - `…[data-disabled-reason="…"]` — why (e.g. a denied write verdict)
68
+ */
69
+ export function UploadDropzone({ onFiles, children, disabled, disabledReason, className, }) {
70
+ const [dragging, setDragging] = useState(false);
71
+ // dragenter/dragleave fire for every child crossing — count the
72
+ // pairs and only clear at depth 0.
73
+ const depthRef = useRef(0);
74
+ const handleDragEnter = useCallback((e) => {
75
+ e.preventDefault();
76
+ if (disabled)
77
+ return;
78
+ depthRef.current += 1;
79
+ setDragging(true);
80
+ }, [disabled]);
81
+ const handleDragOver = useCallback((e) => {
82
+ // Required — without preventDefault the browser refuses the drop.
83
+ e.preventDefault();
84
+ }, []);
85
+ const handleDragLeave = useCallback((e) => {
86
+ e.preventDefault();
87
+ if (disabled)
88
+ return;
89
+ depthRef.current = Math.max(0, depthRef.current - 1);
90
+ if (depthRef.current === 0)
91
+ setDragging(false);
92
+ }, [disabled]);
93
+ const handleDrop = useCallback((e) => {
94
+ e.preventDefault();
95
+ depthRef.current = 0;
96
+ setDragging(false);
97
+ if (disabled)
98
+ return;
99
+ const dt = e.dataTransfer;
100
+ if (!dt)
101
+ return;
102
+ void collectDroppedFiles(dt).then((files) => {
103
+ if (files.length > 0)
104
+ onFiles(files);
105
+ });
106
+ }, [disabled, onFiles]);
107
+ return (_jsx("div", { className: className, "data-pyric-ui": "upload-dropzone", "data-dragging": dragging ? '' : undefined, "data-disabled": disabled ? '' : undefined, "data-disabled-reason": disabled ? disabledReason : undefined, "aria-disabled": disabled || undefined, onDragEnter: handleDragEnter, onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, children: children }));
108
+ }
109
+ //# sourceMappingURL=UploadDropzone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploadDropzone.js","sourceRoot":"","sources":["../../../src/storage/components/UploadDropzone.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type FirebaseStorage, type StorageReference } from 'pyric/storage';
2
+ /**
3
+ * Internal — build a reference to the trailing-slash folder
4
+ * placeholder (`<path>/`, the GCS create-folder convention).
5
+ *
6
+ * `StorageReference` is a documented structural value object (two
7
+ * refs with the same `(storage, fullPath)` are equal), so a plain
8
+ * object is a legal reference — the only way to express a `<path>/`
9
+ * name past `ref()`'s slash normalization. Sandbox targets accept
10
+ * it; prod targets throw (the `pyric/storage` follow-up routes prod
11
+ * through the REST `name=<path>/` channel — see the P2 step-00 doc).
12
+ */
13
+ export declare function folderPlaceholderRef(storage: FirebaseStorage, folderPath: string): StorageReference;
14
+ //# sourceMappingURL=folderPlaceholder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folderPlaceholder.d.ts","sourceRoot":"","sources":["../../src/storage/folderPlaceholder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE1F;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,MAAM,GACjB,gBAAgB,CAalB"}
@@ -0,0 +1,27 @@
1
+ import { ref as refFn } from 'pyric/storage';
2
+ /**
3
+ * Internal — build a reference to the trailing-slash folder
4
+ * placeholder (`<path>/`, the GCS create-folder convention).
5
+ *
6
+ * `StorageReference` is a documented structural value object (two
7
+ * refs with the same `(storage, fullPath)` are equal), so a plain
8
+ * object is a legal reference — the only way to express a `<path>/`
9
+ * name past `ref()`'s slash normalization. Sandbox targets accept
10
+ * it; prod targets throw (the `pyric/storage` follow-up routes prod
11
+ * through the REST `name=<path>/` channel — see the P2 step-00 doc).
12
+ */
13
+ export function folderPlaceholderRef(storage, folderPath) {
14
+ const folder = refFn(storage, folderPath);
15
+ return {
16
+ storage,
17
+ bucket: folder.bucket,
18
+ fullPath: `${folder.fullPath}/`,
19
+ // GCS semantics: the segment after the final slash — empty for a
20
+ // placeholder.
21
+ name: '',
22
+ parent: folder,
23
+ root: folder.root,
24
+ toString: () => `${folder.toString()}/`,
25
+ };
26
+ }
27
+ //# sourceMappingURL=folderPlaceholder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folderPlaceholder.js","sourceRoot":"","sources":["../../src/storage/folderPlaceholder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,KAAK,EAA+C,MAAM,eAAe,CAAC;AAE1F;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAwB,EACxB,UAAkB;IAElB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC1C,OAAO;QACL,OAAO;QACP,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,GAAG,MAAM,CAAC,QAAQ,GAAG;QAC/B,iEAAiE;QACjE,eAAe;QACf,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG;KACxC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { useStorageList, type StorageListStatus, type StorageListEntry, type UseStorageListResult, } from './useStorageList.js';
2
+ export { usePathState, normalizeStoragePath, type UsePathStateOptions, type UsePathStateResult, } from './usePathState.js';
3
+ export { useStorageObject, type StorageObjectStatus, type UseStorageObjectResult, } from './useStorageObject.js';
4
+ export { useMetadataEditor, metadataEditorReducer, initMetadataEditorState, type CustomMetadataEntry, type MetadataEditorState, type MetadataEditorAction, type UseMetadataEditorOptions, type UseMetadataEditorResult, } from './useMetadataEditor.js';
5
+ export { useStorageSelection, type StorageSelectionEntry, type UseStorageSelectionResult, } from './useStorageSelection.js';
6
+ export { useStorageDelete, createListAllDeleteImpl, type StorageDeleteProgress, type StorageRecursiveDeleteImpl, type StorageDeleteFailure, type StorageDeleteOutcome, type UseStorageDeleteOptions, type UseStorageDeleteResult, } from './useStorageDelete.js';
7
+ export { useStorageRulesGate, type StorageRulesGateStatus, type StorageRulesSource, type StorageGateVerdict, type UseStorageRulesGateOptions, type UseStorageRulesGateResult, } from './useStorageRulesGate.js';
8
+ export { useObjectUpload, type UploadTask, type UploadTaskStatus, type UploadEntry, type UploadInput, type UseObjectUploadOptions, type UseObjectUploadResult, } from './useObjectUpload.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAChB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,mBAAmB,EACnB,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,GAC/B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,GAC/B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,eAAe,EACf,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { useStorageList, } from './useStorageList.js';
2
+ export { usePathState, normalizeStoragePath, } from './usePathState.js';
3
+ export { useStorageObject, } from './useStorageObject.js';
4
+ export { useMetadataEditor, metadataEditorReducer, initMetadataEditorState, } from './useMetadataEditor.js';
5
+ export { useStorageSelection, } from './useStorageSelection.js';
6
+ export { useStorageDelete, createListAllDeleteImpl, } from './useStorageDelete.js';
7
+ export { useStorageRulesGate, } from './useStorageRulesGate.js';
8
+ export { useObjectUpload, } from './useObjectUpload.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAIf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,YAAY,EACZ,oBAAoB,GAGrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gBAAgB,GAGjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,GAMxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,mBAAmB,GAGpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GAOxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,GAMpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,eAAe,GAOhB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,114 @@
1
+ import { type FirebaseStorage, type FullMetadata, type SettableMetadata } from 'pyric/storage';
2
+ /** One `customMetadata` row. `id` is a stable render key — keys are
3
+ * user-editable, so they can't key the rows themselves. */
4
+ export interface CustomMetadataEntry {
5
+ id: string;
6
+ key: string;
7
+ value: string;
8
+ /** Validation error (`'Key is required'` / `'Duplicate key'`). */
9
+ error?: string;
10
+ }
11
+ interface MetadataDraft {
12
+ contentType: string;
13
+ cacheControl: string;
14
+ custom: CustomMetadataEntry[];
15
+ }
16
+ export interface MetadataEditorState {
17
+ draft: MetadataDraft;
18
+ /** Snapshot for `isDirty` / `reset` — same reference-compare
19
+ * semantics as the document editor's `tree !== initial`. */
20
+ initial: MetadataDraft;
21
+ errorCount: number;
22
+ }
23
+ export type MetadataEditorAction = {
24
+ type: 'setContentType';
25
+ value: string;
26
+ } | {
27
+ type: 'setCacheControl';
28
+ value: string;
29
+ } | {
30
+ type: 'setCustomKey';
31
+ id: string;
32
+ key: string;
33
+ } | {
34
+ type: 'setCustomValue';
35
+ id: string;
36
+ value: string;
37
+ } | {
38
+ type: 'addCustomEntry';
39
+ key?: string;
40
+ value?: string;
41
+ } | {
42
+ type: 'removeCustomEntry';
43
+ id: string;
44
+ } | {
45
+ type: 'reset';
46
+ }
47
+ /** Internal — a successful save makes the draft the new baseline. */
48
+ | {
49
+ type: 'commit';
50
+ };
51
+ /** Pure reducer — exported (with {@link initMetadataEditorState}) so
52
+ * the edit state is testable without React, mirroring the document
53
+ * editor's reducer/hook split. */
54
+ export declare function metadataEditorReducer(state: MetadataEditorState, action: MetadataEditorAction): MetadataEditorState;
55
+ /** Build the edit state from the metadata a `getMetadata` /
56
+ * `useStorageObject` read returned. */
57
+ export declare function initMetadataEditorState(initial: SettableMetadata | undefined): MetadataEditorState;
58
+ export interface UseMetadataEditorOptions {
59
+ /** The metadata being edited — the same shape `useStorageObject`'s
60
+ * `metadata` carries. Read once on mount (the editor is a
61
+ * stateful workspace, like the document editor); `reset()` +
62
+ * remount to re-initialize. */
63
+ initial?: SettableMetadata;
64
+ }
65
+ export interface UseMetadataEditorResult {
66
+ contentType: string;
67
+ cacheControl: string;
68
+ custom: CustomMetadataEntry[];
69
+ /** Convenience: `errorCount === 0`. */
70
+ isValid: boolean;
71
+ /** `true` once any modifying action fired since the last
72
+ * `reset`/successful `save`. Reference-compare semantics — manual
73
+ * re-entry of the original values does NOT clear it. */
74
+ isDirty: boolean;
75
+ errorCount: number;
76
+ /** Raw dispatch — prefer the named helpers. */
77
+ dispatch: (action: MetadataEditorAction) => void;
78
+ setContentType: (value: string) => void;
79
+ setCacheControl: (value: string) => void;
80
+ setCustomKey: (id: string, key: string) => void;
81
+ setCustomValue: (id: string, value: string) => void;
82
+ addCustomEntry: (key?: string, value?: string) => void;
83
+ removeCustomEntry: (id: string) => void;
84
+ /** Restore the initial values. Clears `isDirty`. */
85
+ reset: () => void;
86
+ /**
87
+ * Serialize the draft to an `updateMetadata` patch. Empty
88
+ * `contentType`/`cacheControl` become `undefined` — which LEAVES
89
+ * the previous value (the sandbox doesn't model null-clears; see
90
+ * `pyric/storage`'s `updateMetadata` doc). `customMetadata` is
91
+ * always included and replaces wholesale, so row removal works.
92
+ */
93
+ toPatch: () => SettableMetadata;
94
+ /**
95
+ * `updateMetadata(ref(storage, path), toPatch())`. Errors surface
96
+ * via `saveError` (typed `StorageError`), not throws — resolves
97
+ * `undefined` on failure or when the draft is invalid. On success
98
+ * the draft becomes the new baseline (`isDirty` clears) and the
99
+ * fresh `FullMetadata` is returned.
100
+ */
101
+ save: () => Promise<FullMetadata | undefined>;
102
+ isSaving: boolean;
103
+ saveError: Error | undefined;
104
+ }
105
+ /**
106
+ * Headless metadata editor — the `useDocumentEditor` reducer pattern
107
+ * over `updateMetadata`: a pure reducer owns the draft (contentType,
108
+ * cacheControl, customMetadata k/v rows with stable ids +
109
+ * empty/duplicate-key validation); the hook adds named dispatch
110
+ * helpers and the save half.
111
+ */
112
+ export declare function useMetadataEditor(storage: FirebaseStorage | null | undefined, path: string | null | undefined, options?: UseMetadataEditorOptions): UseMetadataEditorResult;
113
+ export {};
114
+ //# sourceMappingURL=useMetadataEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMetadataEditor.d.ts","sourceRoot":"","sources":["../../../src/storage/hooks/useMetadataEditor.ts"],"names":[],"mappings":"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"}