@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,78 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { StorageReference } from 'pyric/storage';
3
+ import type { StorageListEntry, StorageListStatus } from '../hooks/useStorageList.js';
4
+ import type { UseStorageRulesGateResult } from '../hooks/useStorageRulesGate.js';
5
+ export interface ObjectBrowserProps {
6
+ /** The folders-first row model from `useStorageList`. */
7
+ entries: StorageListEntry[];
8
+ /** Drives the loading state (`'loading'` with no rows yet) and the
9
+ * idle short-circuit. Default `'success'` for static usage. */
10
+ status?: StorageListStatus;
11
+ /** Renders a `role="alert"` container with the message. Pair with
12
+ * the hook's typed `StorageError` for code-driven copy. */
13
+ error?: Error;
14
+ /** Folder row click — fired with the prefix's `fullPath`. Wire to
15
+ * `usePathState.enter` (or `setPath`). */
16
+ onNavigate?: (path: string) => void;
17
+ /** Object row click — fired with the object's reference. */
18
+ onSelect?: (ref: StorageReference) => void;
19
+ /** Marks the matching object row `data-pyric-selected` +
20
+ * `aria-selected`. */
21
+ selectedPath?: string;
22
+ /**
23
+ * Rules-aware affordances — pass `useStorageRulesGate(storage)`.
24
+ * Rows whose READ verdict denies are stamped `data-pyric-denied`
25
+ * (with the evaluator's reason trace on
26
+ * `data-pyric-denied-reason`). A denied folder row would throw
27
+ * `storage/unauthorized` on `listAll`; the stamp warns BEFORE the
28
+ * click. Rows stay clickable — the affordance is advisory and the
29
+ * sandbox enforcement layer remains authoritative.
30
+ */
31
+ gate?: Pick<UseStorageRulesGateResult, 'verdictFor'>;
32
+ /**
33
+ * Row-label slot. Default renders the entry name. The row button,
34
+ * its click wiring, and the `data-*` states stay with the
35
+ * component — the slot only owns the label content.
36
+ */
37
+ renderEntry?: (entry: StorageListEntry) => ReactNode;
38
+ /** Optional per-row action rendered as a sibling of the navigation/select
39
+ * button. Use this for independent controls such as selection checkboxes. */
40
+ renderRowAction?: (entry: StorageListEntry) => ReactNode;
41
+ emptyState?: ReactNode;
42
+ className?: string;
43
+ /**
44
+ * Above this row count, the list switches to virtualization via
45
+ * `<VirtualList>` — `listAll` has no pagination, so a big prefix
46
+ * arrives as one flat result and virtualization is the only
47
+ * defense. Default 100 (same as `<DocumentList>`). `Infinity`
48
+ * disables.
49
+ */
50
+ virtualizeThreshold?: number;
51
+ /** Estimated row height when virtualizing. Default 36. */
52
+ rowHeight?: number | ((index: number) => number);
53
+ /** Scroll-container height when virtualized. Default `'60vh'`. */
54
+ virtualizedHeight?: number | string;
55
+ }
56
+ /**
57
+ * Headless storage browser shell — renders `useStorageList`'s merged
58
+ * folder/object rows. Folder rows navigate (`onNavigate` with the
59
+ * prefix path), object rows select (`onSelect` with the ref). Below
60
+ * `virtualizeThreshold` renders a plain `<ul>`; above it, composes
61
+ * the package's `<VirtualList>`.
62
+ *
63
+ * Ships no visual styling. Consumers style via:
64
+ * - `[data-pyric-ui="object-browser"]` — the root (stamps `data-size`)
65
+ * - `…[data-pyric-loading]` / `[data-pyric-empty]` / `[data-pyric-error]`
66
+ * - `…[data-pyric-virtualized]` — virtualized mode
67
+ * - `[data-pyric-object-browser-items]` — the `<ul>` in plain mode
68
+ * - `[data-pyric-storage-entry]` — each row
69
+ * - `[data-pyric-storage-entry][data-pyric-entry-kind="folder"|"object"]`
70
+ * - `[data-pyric-storage-entry][data-pyric-entry-path="docs/a.txt"]`
71
+ * - `[data-pyric-storage-entry][data-pyric-denied]` — read-denied row
72
+ * (rules gate; reason on `data-pyric-denied-reason`)
73
+ * - `[data-pyric-entry-select]` — the row button
74
+ * - `[data-pyric-entry-select][data-pyric-selected]` — the selected object
75
+ * - `[data-pyric-storage-action]` — optional sibling row action
76
+ */
77
+ export declare function ObjectBrowser({ entries, status, error, onNavigate, onSelect, selectedPath, gate, renderEntry, renderRowAction, emptyState, className, virtualizeThreshold, rowHeight, virtualizedHeight, }: ObjectBrowserProps): import("react").JSX.Element;
78
+ //# sourceMappingURL=ObjectBrowser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObjectBrowser.d.ts","sourceRoot":"","sources":["../../../src/storage/components/ObjectBrowser.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAEjF,MAAM,WAAW,kBAAkB;IACjC,yDAAyD;IACzD,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B;oEACgE;IAChE,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B;gEAC4D;IAC5D,KAAK,CAAC,EAAE,KAAK,CAAC;IACd;+CAC2C;IAC3C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC3C;2BACuB;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,IAAI,CAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC;IACrD;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,SAAS,CAAC;IACrD;kFAC8E;IAC9E,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,SAAS,CAAC;IACzD,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IACjD,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,MAAkB,EAClB,KAAK,EACL,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,IAAI,EACJ,WAAW,EACX,eAAe,EACf,UAAU,EACV,SAAS,EACT,mBAAyB,EACzB,SAAc,EACd,iBAA0B,GAC3B,EAAE,kBAAkB,+BAwHpB"}
@@ -0,0 +1,60 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { VirtualList } from '../../primitives/VirtualList.js';
3
+ import { useContainerSize } from '../../primitives/hooks/useContainerSize.js';
4
+ /**
5
+ * Headless storage browser shell — renders `useStorageList`'s merged
6
+ * folder/object rows. Folder rows navigate (`onNavigate` with the
7
+ * prefix path), object rows select (`onSelect` with the ref). Below
8
+ * `virtualizeThreshold` renders a plain `<ul>`; above it, composes
9
+ * the package's `<VirtualList>`.
10
+ *
11
+ * Ships no visual styling. Consumers style via:
12
+ * - `[data-pyric-ui="object-browser"]` — the root (stamps `data-size`)
13
+ * - `…[data-pyric-loading]` / `[data-pyric-empty]` / `[data-pyric-error]`
14
+ * - `…[data-pyric-virtualized]` — virtualized mode
15
+ * - `[data-pyric-object-browser-items]` — the `<ul>` in plain mode
16
+ * - `[data-pyric-storage-entry]` — each row
17
+ * - `[data-pyric-storage-entry][data-pyric-entry-kind="folder"|"object"]`
18
+ * - `[data-pyric-storage-entry][data-pyric-entry-path="docs/a.txt"]`
19
+ * - `[data-pyric-storage-entry][data-pyric-denied]` — read-denied row
20
+ * (rules gate; reason on `data-pyric-denied-reason`)
21
+ * - `[data-pyric-entry-select]` — the row button
22
+ * - `[data-pyric-entry-select][data-pyric-selected]` — the selected object
23
+ * - `[data-pyric-storage-action]` — optional sibling row action
24
+ */
25
+ export function ObjectBrowser({ entries, status = 'success', error, onNavigate, onSelect, selectedPath, gate, renderEntry, renderRowAction, emptyState, className, virtualizeThreshold = 100, rowHeight = 36, virtualizedHeight = '60vh', }) {
26
+ const { ref: rootRef, size } = useContainerSize();
27
+ if (error) {
28
+ return (_jsx("div", { className: className, "data-pyric-ui": "object-browser", "data-pyric-error": "", role: "alert", children: error.message }));
29
+ }
30
+ if ((status === 'loading' || status === 'idle') && entries.length === 0) {
31
+ return (_jsx("div", { className: className, "data-pyric-ui": "object-browser", "data-pyric-loading": status === 'loading' ? '' : undefined, "data-pyric-idle": status === 'idle' ? '' : undefined }));
32
+ }
33
+ if (entries.length === 0) {
34
+ return (_jsx("div", { className: className, "data-pyric-ui": "object-browser", "data-pyric-empty": "", children: emptyState }));
35
+ }
36
+ // Pre-flight read verdict per row (advisory — see the `gate` prop).
37
+ const denialFor = (entry) => {
38
+ if (!gate)
39
+ return { denied: false };
40
+ const verdict = gate.verdictFor(entry.fullPath);
41
+ return verdict.read
42
+ ? { denied: false }
43
+ : { denied: true, reason: verdict.reasons.read.join('; ') };
44
+ };
45
+ const renderRow = (entry) => {
46
+ const selected = entry.kind === 'object' && entry.fullPath === selectedPath;
47
+ return (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: () => entry.kind === 'folder'
48
+ ? onNavigate?.(entry.fullPath)
49
+ : onSelect?.(entry.ref), "data-pyric-entry-select": true, "data-pyric-selected": selected ? '' : undefined, "aria-selected": selected || undefined, children: renderEntry ? renderEntry(entry) : entry.name }), renderRowAction ? (_jsx("span", { "data-pyric-storage-action": true, children: renderRowAction(entry) })) : null] }));
50
+ };
51
+ const virtualized = entries.length > virtualizeThreshold;
52
+ return (_jsx("div", { ref: rootRef, className: className, "data-pyric-ui": "object-browser", "data-size": size, "data-pyric-virtualized": virtualized ? '' : undefined, children: virtualized ? (_jsx(VirtualList, { items: entries, estimateSize: rowHeight, height: virtualizedHeight, getItemKey: (entry) => `${entry.kind}:${entry.fullPath}`, renderItem: (entry) => {
53
+ const denial = denialFor(entry);
54
+ return (_jsx("div", { "data-pyric-storage-entry": true, "data-pyric-entry-kind": entry.kind, "data-pyric-entry-path": entry.fullPath, "data-pyric-denied": denial.denied ? '' : undefined, "data-pyric-denied-reason": denial.reason, children: renderRow(entry) }));
55
+ } })) : (_jsx("ul", { "data-pyric-object-browser-items": true, children: entries.map((entry) => {
56
+ const denial = denialFor(entry);
57
+ return (_jsx("li", { "data-pyric-storage-entry": true, "data-pyric-entry-kind": entry.kind, "data-pyric-entry-path": entry.fullPath, "data-pyric-denied": denial.denied ? '' : undefined, "data-pyric-denied-reason": denial.reason, children: renderRow(entry) }, `${entry.kind}:${entry.fullPath}`));
58
+ }) })) }));
59
+ }
60
+ //# sourceMappingURL=ObjectBrowser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObjectBrowser.js","sourceRoot":"","sources":["../../../src/storage/components/ObjectBrowser.tsx"],"names":[],"mappings":"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"}
@@ -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 sandbox Storage handle. */
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,4CAA4C;IAC5C,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,20 @@
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. This helper is specific to
10
+ * the Pyric sandbox mirror.
11
+ */
12
+ export declare function folderPlaceholderRef(storage: FirebaseStorage, folderPath: string): StorageReference;
13
+ /** Preserve whichever backend identity a reference carries (in-process
14
+ * storage handle or worker MessagePort) while targeting its trailing-slash
15
+ * GCS folder placeholder. */
16
+ export declare function asFolderPlaceholder<T extends {
17
+ fullPath: string;
18
+ name: string;
19
+ }>(folder: T): T;
20
+ //# 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;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,MAAM,GACjB,gBAAgB,CAWlB;AAED;;8BAE8B;AAC9B,wBAAgB,mBAAmB,CAAC,CAAC,SAAS;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC9E,MAAM,EAAE,CAAC,GACR,CAAC,CAMH"}
@@ -0,0 +1,34 @@
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. This helper is specific to
10
+ * the Pyric sandbox mirror.
11
+ */
12
+ export function folderPlaceholderRef(storage, folderPath) {
13
+ const folder = refFn(storage, folderPath);
14
+ return {
15
+ storage,
16
+ bucket: folder.bucket,
17
+ fullPath: `${folder.fullPath}/`,
18
+ name: '',
19
+ parent: folder,
20
+ root: folder.root,
21
+ toString: () => `${folder.toString()}/`,
22
+ };
23
+ }
24
+ /** Preserve whichever backend identity a reference carries (in-process
25
+ * storage handle or worker MessagePort) while targeting its trailing-slash
26
+ * GCS folder placeholder. */
27
+ export function asFolderPlaceholder(folder) {
28
+ return {
29
+ ...folder,
30
+ fullPath: `${folder.fullPath}/`,
31
+ name: '',
32
+ };
33
+ }
34
+ //# 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;;;;;;;;;GASG;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,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;AAED;;8BAE8B;AAC9B,MAAM,UAAU,mBAAmB,CACjC,MAAS;IAET,OAAO;QACL,GAAG,MAAM;QACT,QAAQ,EAAE,GAAG,MAAM,CAAC,QAAQ,GAAG;QAC/B,IAAI,EAAE,EAAE;KACT,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"}