@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,51 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { FullMetadata } from 'pyric/storage';
3
+ /** What a preview's `render` receives. `blob`/`blobUrl` are only
4
+ * populated for previews that declared `needsBlob`. */
5
+ export interface StoragePreviewContext {
6
+ metadata: FullMetadata;
7
+ blob: Blob | undefined;
8
+ blobUrl: string | undefined;
9
+ }
10
+ /**
11
+ * One entry in the content-type preview registry — the storage
12
+ * counterpart of the Firestore field-editor registry, keyed by a
13
+ * `match` predicate instead of a type name because content types are
14
+ * open-ended. First match wins; consumer previews run BEFORE the
15
+ * built-ins, so overriding `image/*` is just shipping your own
16
+ * matcher.
17
+ */
18
+ export interface StoragePreview {
19
+ /** Diagnostic id — also stamped on the preview container as
20
+ * `data-pyric-preview="<id>"`. */
21
+ id: string;
22
+ match: (metadata: FullMetadata) => boolean;
23
+ /** Ask the inspector to `loadBlob()` before rendering. Default
24
+ * `false` (metadata-only previews render immediately). */
25
+ needsBlob?: boolean;
26
+ /**
27
+ * Skip the preview (and the blob download) for objects larger than
28
+ * this — the inspector renders its `data-pyric-preview-too-large`
29
+ * fallback instead. `undefined` = no cap.
30
+ */
31
+ maxBytes?: number;
32
+ render: (ctx: StoragePreviewContext) => ReactNode;
33
+ }
34
+ /** 256KB — the section 3 default cap for the text-family preview. */
35
+ export declare const TEXT_PREVIEW_MAX_BYTES: number;
36
+ /** `image/*` → blob-URL `<img>`. */
37
+ export declare const imagePreview: StoragePreview;
38
+ /** `text/*` + `application/json` → text panel, 256KB cap (bigger
39
+ * objects fall through to the too-large fallback). JSON is
40
+ * pretty-printed when parseable. */
41
+ export declare const textPreview: StoragePreview;
42
+ /** The section 3 defaults: image, text/json; everything else is
43
+ * metadata-only (the inspector's `data-pyric-preview-none` state). */
44
+ export declare const defaultStoragePreviews: ReadonlyArray<StoragePreview>;
45
+ /**
46
+ * Pick the preview for `metadata`: consumer previews first (override
47
+ * channel), then the built-ins, first `match` wins. `undefined`
48
+ * means metadata-only.
49
+ */
50
+ export declare function selectStoragePreview(metadata: FullMetadata, consumerPreviews: ReadonlyArray<StoragePreview> | undefined): StoragePreview | undefined;
51
+ //# sourceMappingURL=previews.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"previews.d.ts","sourceRoot":"","sources":["../../src/storage/previews.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD;wDACwD;AACxD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B;uCACmC;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,OAAO,CAAC;IAC3C;+DAC2D;IAC3D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,CAAC,GAAG,EAAE,qBAAqB,KAAK,SAAS,CAAC;CACnD;AAED,qEAAqE;AACrE,eAAO,MAAM,sBAAsB,QAAa,CAAC;AAOjD,oCAAoC;AACpC,eAAO,MAAM,YAAY,EAAE,cAQ1B,CAAC;AA0BF;;qCAEqC;AACrC,eAAO,MAAM,WAAW,EAAE,cAezB,CAAC;AAEF;uEACuE;AACvE,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,cAAc,CAGhE,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,YAAY,EACtB,gBAAgB,EAAE,aAAa,CAAC,cAAc,CAAC,GAAG,SAAS,GAC1D,cAAc,GAAG,SAAS,CAK5B"}
@@ -0,0 +1,73 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ /** 256KB — the section 3 default cap for the text-family preview. */
4
+ export const TEXT_PREVIEW_MAX_BYTES = 256 * 1024;
5
+ function contentTypeOf(metadata) {
6
+ // `text/plain;charset=utf-8` → `text/plain`.
7
+ return (metadata.contentType ?? '').split(';')[0].trim().toLowerCase();
8
+ }
9
+ /** `image/*` → blob-URL `<img>`. */
10
+ export const imagePreview = {
11
+ id: 'image',
12
+ match: (md) => contentTypeOf(md).startsWith('image/'),
13
+ needsBlob: true,
14
+ render: ({ metadata, blobUrl }) => blobUrl ? (_jsx("img", { "data-pyric-preview-image": true, src: blobUrl, alt: metadata.name })) : null,
15
+ };
16
+ function TextPreviewBody({ blob, isJson }) {
17
+ const [text, setText] = useState(undefined);
18
+ useEffect(() => {
19
+ let cancelled = false;
20
+ blob.text().then((raw) => {
21
+ if (cancelled)
22
+ return;
23
+ if (isJson) {
24
+ try {
25
+ setText(JSON.stringify(JSON.parse(raw), null, 2));
26
+ return;
27
+ }
28
+ catch {
29
+ // Unparseable JSON falls through to the raw text.
30
+ }
31
+ }
32
+ setText(raw);
33
+ });
34
+ return () => {
35
+ cancelled = true;
36
+ };
37
+ }, [blob, isJson]);
38
+ if (text === undefined)
39
+ return null;
40
+ return _jsx("pre", { "data-pyric-preview-text": true, children: text });
41
+ }
42
+ /** `text/*` + `application/json` → text panel, 256KB cap (bigger
43
+ * objects fall through to the too-large fallback). JSON is
44
+ * pretty-printed when parseable. */
45
+ export const textPreview = {
46
+ id: 'text',
47
+ match: (md) => {
48
+ const ct = contentTypeOf(md);
49
+ return ct.startsWith('text/') || ct === 'application/json';
50
+ },
51
+ needsBlob: true,
52
+ maxBytes: TEXT_PREVIEW_MAX_BYTES,
53
+ render: ({ metadata, blob }) => blob ? (_jsx(TextPreviewBody, { blob: blob, isJson: contentTypeOf(metadata) === 'application/json' })) : null,
54
+ };
55
+ /** The section 3 defaults: image, text/json; everything else is
56
+ * metadata-only (the inspector's `data-pyric-preview-none` state). */
57
+ export const defaultStoragePreviews = [
58
+ imagePreview,
59
+ textPreview,
60
+ ];
61
+ /**
62
+ * Pick the preview for `metadata`: consumer previews first (override
63
+ * channel), then the built-ins, first `match` wins. `undefined`
64
+ * means metadata-only.
65
+ */
66
+ export function selectStoragePreview(metadata, consumerPreviews) {
67
+ for (const preview of [...(consumerPreviews ?? []), ...defaultStoragePreviews]) {
68
+ if (preview.match(metadata))
69
+ return preview;
70
+ }
71
+ return undefined;
72
+ }
73
+ //# sourceMappingURL=previews.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"previews.js","sourceRoot":"","sources":["../../src/storage/previews.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { type ReactNode } from 'react';
2
+ /**
3
+ * The modular Storage fns the browse/inspect hooks call, as an INJECTABLE
4
+ * bundle (same pattern as `@pyric/ui`'s FirestoreApi / AuthApi).
5
+ *
6
+ * Default = in-process `pyric/storage`, so existing consumers are unchanged.
7
+ * Pyric Studio served mode injects the SharedWorker client bundle so the Storage
8
+ * surface browses the live worker object store. These ops are already async, so
9
+ * no sync/async wrinkle (unlike auth `listUsers`); the worker handles/refs are
10
+ * runtime-compatible at the surface the hooks use (`.fullPath` / `.name`).
11
+ *
12
+ * `uploadBytes` rides the same seam so `useObjectUpload` follows the injected
13
+ * backend: in-process writes are uncapped; the worker client's `uploadBytes`
14
+ * (base64 `storage.putBytes` over the MessagePort) enforces an 8 MiB payload
15
+ * cap on both ends — an over-cap upload fails that file's task with the typed
16
+ * `storage/...` too-large error and the rest of the batch proceeds.
17
+ *
18
+ * NOTE the rules gate (`useStorageRulesGate`) is NOT here: it reads in-process
19
+ * rules internals and no-ops on a handle without them (worker handles), which is
20
+ * the correct degrade (the worker enforces read rules on `listAll` server-side).
21
+ */
22
+ export type StorageApi = Pick<typeof import('pyric/storage'), 'ref' | 'listAll' | 'getMetadata' | 'getBlob' | 'uploadBytes'>;
23
+ /** Read the active Storage API bundle (defaults to in-process `pyric/storage`). */
24
+ export declare function useStorageApi(): StorageApi;
25
+ /** Provide a Storage API bundle to the subtree (Studio's worker client). */
26
+ export declare function StorageApiProvider({ value, children, }: {
27
+ value: StorageApi;
28
+ children: ReactNode;
29
+ }): import("react").FunctionComponentElement<import("react").ProviderProps<StorageApi>>;
30
+ //# sourceMappingURL=storageApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storageApi.d.ts","sourceRoot":"","sources":["../../src/storage/storageApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGjF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,CAC3B,cAAc,eAAe,CAAC,EAC9B,KAAK,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,aAAa,CAC9D,CAAC;AAMF,mFAAmF;AACnF,wBAAgB,aAAa,IAAI,UAAU,CAE1C;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;CACrB,uFAEA"}
@@ -0,0 +1,13 @@
1
+ import { createContext, createElement, useContext } from 'react';
2
+ import { ref, listAll, getMetadata, getBlob, uploadBytes } from 'pyric/storage';
3
+ const inProcessStorageApi = { ref, listAll, getMetadata, getBlob, uploadBytes };
4
+ const StorageApiContext = createContext(inProcessStorageApi);
5
+ /** Read the active Storage API bundle (defaults to in-process `pyric/storage`). */
6
+ export function useStorageApi() {
7
+ return useContext(StorageApiContext);
8
+ }
9
+ /** Provide a Storage API bundle to the subtree (Studio's worker client). */
10
+ export function StorageApiProvider({ value, children, }) {
11
+ return createElement(StorageApiContext.Provider, { value }, children);
12
+ }
13
+ //# sourceMappingURL=storageApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storageApi.js","sourceRoot":"","sources":["../../src/storage/storageApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAkB,MAAM,OAAO,CAAC;AACjF,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AA2BhF,MAAM,mBAAmB,GAAe,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAE5F,MAAM,iBAAiB,GAAG,aAAa,CAAa,mBAAmB,CAAC,CAAC;AAEzE,mFAAmF;AACnF,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACvC,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,kBAAkB,CAAC,EACjC,KAAK,EACL,QAAQ,GAIT;IACC,OAAO,aAAa,CAAC,iBAAiB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC;AACxE,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { RuleHeatmapEntry } from '../hooks/useRuleHeatmap.js';
3
+ export interface RuleHeatmapProps {
4
+ /** Per-rule rollup from `useRuleHeatmap`. */
5
+ entries: RuleHeatmapEntry[];
6
+ /** Marks one rule row as the active selection. */
7
+ selectedRuleIndex?: number;
8
+ /**
9
+ * Fired when a rule row is clicked — wire this to the log filter
10
+ * for the cross-view "click a rule, see its traffic" interaction.
11
+ */
12
+ onSelectRule?: (ruleIndex: number) => void;
13
+ emptyState?: ReactNode;
14
+ className?: string;
15
+ }
16
+ /**
17
+ * Headless rule heatmap — one row per rule, busiest first. Each row
18
+ * exposes two styling channels:
19
+ *
20
+ * - `data-pyric-rule-heat` — a discrete bucket (`none`/`low`/
21
+ * `medium`/`high`) by deny ratio, for threshold-based coloring.
22
+ * - `--pyric-deny-ratio` — the raw 0–1 ratio as a CSS custom
23
+ * property, for a proportional bar / gradient.
24
+ *
25
+ * Counts render as separate elements (`data-pyric-rule-total`,
26
+ * `-allows`, `-denies`) so the consumer can show numbers, bars, or
27
+ * both.
28
+ *
29
+ * Styling hooks: `[data-pyric-ui="rule-heatmap"]`,
30
+ * `[data-pyric-rule-row]` (with `data-pyric-rule-index`,
31
+ * `data-pyric-rule-heat`, `data-pyric-selected`).
32
+ */
33
+ export declare function RuleHeatmap({ entries, selectedRuleIndex, onSelectRule, emptyState, className, }: RuleHeatmapProps): import("react").JSX.Element;
34
+ //# sourceMappingURL=RuleHeatmap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuleHeatmap.d.ts","sourceRoot":"","sources":["../../../src/traffic/components/RuleHeatmap.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,SAAS,GACV,EAAE,gBAAgB,+BAgDlB"}
@@ -0,0 +1,40 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /** Buckets the deny ratio into discrete heat levels for CSS. */
3
+ function heatBucket(denyRatio) {
4
+ if (denyRatio === 0)
5
+ return 'none';
6
+ if (denyRatio <= 0.33)
7
+ return 'low';
8
+ if (denyRatio <= 0.66)
9
+ return 'medium';
10
+ return 'high';
11
+ }
12
+ /**
13
+ * Headless rule heatmap — one row per rule, busiest first. Each row
14
+ * exposes two styling channels:
15
+ *
16
+ * - `data-pyric-rule-heat` — a discrete bucket (`none`/`low`/
17
+ * `medium`/`high`) by deny ratio, for threshold-based coloring.
18
+ * - `--pyric-deny-ratio` — the raw 0–1 ratio as a CSS custom
19
+ * property, for a proportional bar / gradient.
20
+ *
21
+ * Counts render as separate elements (`data-pyric-rule-total`,
22
+ * `-allows`, `-denies`) so the consumer can show numbers, bars, or
23
+ * both.
24
+ *
25
+ * Styling hooks: `[data-pyric-ui="rule-heatmap"]`,
26
+ * `[data-pyric-rule-row]` (with `data-pyric-rule-index`,
27
+ * `data-pyric-rule-heat`, `data-pyric-selected`).
28
+ */
29
+ export function RuleHeatmap({ entries, selectedRuleIndex, onSelectRule, emptyState, className, }) {
30
+ if (entries.length === 0) {
31
+ return (_jsx("div", { className: className, "data-pyric-ui": "rule-heatmap", "data-pyric-empty": "", children: emptyState }));
32
+ }
33
+ return (_jsx("div", { className: className, "data-pyric-ui": "rule-heatmap", children: _jsx("ul", { "data-pyric-rule-heatmap-items": "", children: entries.map((entry) => {
34
+ const selected = entry.ruleIndex === selectedRuleIndex;
35
+ return (_jsx("li", { "data-pyric-rule-entry": "", children: _jsxs("button", { type: "button", onClick: () => onSelectRule?.(entry.ruleIndex), "data-pyric-rule-row": "", "data-pyric-rule-index": entry.ruleIndex, "data-pyric-rule-heat": heatBucket(entry.denyRatio), "data-pyric-selected": selected ? '' : undefined, style: {
36
+ '--pyric-deny-ratio': entry.denyRatio,
37
+ }, children: [_jsxs("span", { "data-pyric-rule-label": "", children: ["#", entry.ruleIndex] }), _jsx("span", { "data-pyric-rule-operations": "", children: entry.operations.join(', ') }), _jsx("span", { "data-pyric-rule-total": "", children: entry.total }), _jsx("span", { "data-pyric-rule-allows": "", children: entry.allows }), _jsx("span", { "data-pyric-rule-denies": "", children: entry.denies }), _jsx("span", { "data-pyric-rule-bar": "", "aria-hidden": "true" })] }) }, entry.ruleIndex));
38
+ }) }) }));
39
+ }
40
+ //# sourceMappingURL=RuleHeatmap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuleHeatmap.js","sourceRoot":"","sources":["../../../src/traffic/components/RuleHeatmap.tsx"],"names":[],"mappings":";AAiBA,gEAAgE;AAChE,SAAS,UAAU,CAAC,SAAiB;IACnC,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACnC,IAAI,SAAS,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,SAAS,IAAI,IAAI;QAAE,OAAO,QAAQ,CAAC;IACvC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,OAAO,EACP,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,SAAS,GACQ;IACjB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CACL,cACE,SAAS,EAAE,SAAS,mBACN,cAAc,sBACX,EAAE,YAElB,UAAU,GACP,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,cAAK,SAAS,EAAE,SAAS,mBAAgB,cAAc,YACrD,8CAAkC,EAAE,YACjC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACrB,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,KAAK,iBAAiB,CAAC;gBACvD,OAAO,CACL,sCAAgD,EAAE,YAChD,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,yBAC1B,EAAE,2BACC,KAAK,CAAC,SAAS,0BAChB,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,yBAC5B,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAC9C,KAAK,EACH;4BACE,oBAAoB,EAAE,KAAK,CAAC,SAAS;yBACf,aAG1B,yCAA4B,EAAE,kBAAG,KAAK,CAAC,SAAS,IAAQ,EACxD,6CAAiC,EAAE,YAChC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GACvB,EACP,wCAA4B,EAAE,YAAE,KAAK,CAAC,KAAK,GAAQ,EACnD,yCAA6B,EAAE,YAAE,KAAK,CAAC,MAAM,GAAQ,EACrD,yCAA6B,EAAE,YAAE,KAAK,CAAC,MAAM,GAAQ,EACrD,sCAA0B,EAAE,iBAAa,MAAM,GAAG,IAC3C,IAtBF,KAAK,CAAC,SAAS,CAuBnB,CACN,CAAC;YACJ,CAAC,CAAC,GACC,GACD,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { TrafficEvent } from '../types.js';
3
+ export interface TrafficDetailProps {
4
+ event: TrafficEvent;
5
+ /** Fired by the back affordance. When absent, no back button. */
6
+ onBack?: () => void;
7
+ /**
8
+ * Render-prop slot below the header — the playground drops its
9
+ * denial overlay (classification + LLM analysis) here. The library
10
+ * doesn't own that analysis.
11
+ */
12
+ renderClassification?: (event: TrafficEvent) => ReactNode;
13
+ /** Override the timestamp rendering. Default is `HH:MM:SS`. */
14
+ formatTime?: (at: number) => string;
15
+ className?: string;
16
+ }
17
+ /**
18
+ * Headless drill-in panel for a single traffic event. Renders the
19
+ * header (result + origin + timestamp + method/path + matched rule),
20
+ * a consumer classification slot, then JSON sections for auth,
21
+ * request payload, and resource before/after via `<JsonView>`, plus
22
+ * the reasons list, `triggeredBy`, and `groupId`.
23
+ *
24
+ * `evalMs` appears here as a minor header field only — it is not a
25
+ * log column (local simulator; latency is de-featured per
26
+ * the design rationale).
27
+ *
28
+ * Styling hooks: `[data-pyric-ui="traffic-detail"]`,
29
+ * `[data-pyric-traffic-section]` (with `data-pyric-section-label`),
30
+ * `[data-pyric-traffic-reason]` (with `data-pyric-reason-verdict`).
31
+ */
32
+ export declare function TrafficDetail({ event, onBack, renderClassification, formatTime, className, }: TrafficDetailProps): import("react").JSX.Element;
33
+ //# sourceMappingURL=TrafficDetail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrafficDetail.d.ts","sourceRoot":"","sources":["../../../src/traffic/components/TrafficDetail.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,YAAY,CAAC;IACpB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,SAAS,CAAC;IAC1D,+DAA+D;IAC/D,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAiBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,MAAM,EACN,oBAAoB,EACpB,UAA8B,EAC9B,SAAS,GACV,EAAE,kBAAkB,+BAsGpB"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Badge } from '../../primitives/Badge.js';
3
+ import { JsonView } from '../../primitives/JsonView.js';
4
+ import { defaultFormatTime, reasonVerdict } from './format.js';
5
+ function Section({ label, children, }) {
6
+ return (_jsxs("section", { "data-pyric-traffic-section": "", "data-pyric-section-label": label, children: [_jsx("h3", { "data-pyric-section-heading": "", children: label }), children] }));
7
+ }
8
+ /**
9
+ * Headless drill-in panel for a single traffic event. Renders the
10
+ * header (result + origin + timestamp + method/path + matched rule),
11
+ * a consumer classification slot, then JSON sections for auth,
12
+ * request payload, and resource before/after via `<JsonView>`, plus
13
+ * the reasons list, `triggeredBy`, and `groupId`.
14
+ *
15
+ * `evalMs` appears here as a minor header field only — it is not a
16
+ * log column (local simulator; latency is de-featured per
17
+ * the design rationale).
18
+ *
19
+ * Styling hooks: `[data-pyric-ui="traffic-detail"]`,
20
+ * `[data-pyric-traffic-section]` (with `data-pyric-section-label`),
21
+ * `[data-pyric-traffic-reason]` (with `data-pyric-reason-verdict`).
22
+ */
23
+ export function TrafficDetail({ event, onBack, renderClassification, formatTime = defaultFormatTime, className, }) {
24
+ const requestData = event.request?.resourceData ?? event.request?.data;
25
+ const durationMs = event.evalMs ?? event.durationMs ?? 0;
26
+ return (_jsxs("div", { className: className, "data-pyric-ui": "traffic-detail", children: [_jsxs("header", { "data-pyric-traffic-detail-header": "", children: [onBack ? (_jsx("button", { type: "button", onClick: onBack, "data-pyric-traffic-back": "", "aria-label": "Back to traffic log", children: "Back" })) : null, _jsxs("div", { "data-pyric-traffic-detail-meta": "", children: [_jsx(Badge, { kind: event.result, children: event.result }), _jsx("span", { "data-pyric-traffic-origin": "", children: event.origin }), event.service ? _jsx("span", { "data-pyric-traffic-service": "", children: event.service }) : null, _jsx("span", { "data-pyric-traffic-time": "", children: formatTime(event.at) }), _jsxs("span", { "data-pyric-traffic-eval-ms": "", children: [durationMs.toFixed(1), "ms"] })] }), _jsxs("p", { "data-pyric-traffic-detail-title": "", children: [_jsx("span", { "data-pyric-traffic-method": "", children: event.method }), _jsx("span", { "data-pyric-traffic-path": "", children: event.path })] }), event.matchedRule ? (_jsxs("p", { "data-pyric-traffic-matched-rule": "", children: ["matched rule #", event.matchedRule.ruleIndex, " \u00B7", ' ', event.matchedRule.operations.join(', ')] })) : null] }), renderClassification ? renderClassification(event) : null, _jsx(Section, { label: "AUTH", children: _jsx(JsonView, { value: event.auth }) }), requestData !== undefined ? (_jsx(Section, { label: "REQUEST \u00B7 resource.data", children: _jsx(JsonView, { value: requestData }) })) : null, event.resourceBefore !== undefined ? (_jsx(Section, { label: "RESOURCE BEFORE", children: _jsx(JsonView, { value: event.resourceBefore.exists ? event.resourceBefore.data : null }) })) : null, event.resourceAfter !== undefined ? (_jsx(Section, { label: "RESOURCE AFTER", children: _jsx(JsonView, { value: event.resourceAfter.exists ? event.resourceAfter.data : null }) })) : null, event.reasons.length > 0 ? (_jsx(Section, { label: "REASONS", children: _jsx("ul", { "data-pyric-traffic-reasons": "", children: event.reasons.map((reason, i) => (_jsx("li", { "data-pyric-traffic-reason": "", "data-pyric-reason-verdict": reasonVerdict(reason), children: reason }, i))) }) })) : null, event.triggeredBy ? (_jsx(Section, { label: "TRIGGERED BY", children: _jsxs("p", { "data-pyric-traffic-triggered-by": "", children: [_jsx("span", { "data-pyric-traffic-method": "", children: event.triggeredBy.method }), _jsx("span", { "data-pyric-traffic-path": "", children: event.triggeredBy.path })] }) })) : null, event.groupId ? (_jsx(Section, { label: "GROUP", children: _jsx("p", { "data-pyric-traffic-group": "", children: event.groupId }) })) : null] }));
27
+ }
28
+ //# sourceMappingURL=TrafficDetail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrafficDetail.js","sourceRoot":"","sources":["../../../src/traffic/components/TrafficDetail.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { TrafficEvent } from '../types.js';
3
+ import type { TrafficGroup } from '../hooks/useTrafficGroups.js';
4
+ export interface TrafficGroupRowProps {
5
+ group: TrafficGroup;
6
+ /** Whether the group starts expanded. Default false — grouping
7
+ * exists to collapse volume, so collapsed is the useful default. */
8
+ defaultExpanded?: boolean;
9
+ onSelect?: (event: TrafficEvent) => void;
10
+ selectedId?: string;
11
+ /** Passed through to each member `<TrafficRow>`. */
12
+ renderClassification?: (event: TrafficEvent) => ReactNode;
13
+ /** Passed through to each member `<TrafficRow>`. */
14
+ formatTime?: (at: number) => string;
15
+ className?: string;
16
+ }
17
+ /**
18
+ * A collapsible group row — one header summarizing a batch,
19
+ * transaction, or listener-run, expanding to the member rows. The
20
+ * header carries `data-pyric-group-kind` and a `data-pyric-group-*`
21
+ * count/deny rollup; expansion state is `data-pyric-expanded`.
22
+ *
23
+ * Styling hooks: `[data-pyric-traffic-group]`,
24
+ * `[data-pyric-traffic-group-header]` (with `data-pyric-group-kind`),
25
+ * `[data-pyric-traffic-group-members]`.
26
+ */
27
+ export declare function TrafficGroupRow({ group, defaultExpanded, onSelect, selectedId, renderClassification, formatTime, className, }: TrafficGroupRowProps): import("react").JSX.Element;
28
+ //# sourceMappingURL=TrafficGroupRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrafficGroupRow.d.ts","sourceRoot":"","sources":["../../../src/traffic/components/TrafficGroupRow.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAGjE,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,YAAY,CAAC;IACpB;yEACqE;IACrE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,SAAS,CAAC;IAC1D,oDAAoD;IACpD,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,eAAuB,EACvB,QAAQ,EACR,UAAU,EACV,oBAAoB,EACpB,UAAU,EACV,SAAS,GACV,EAAE,oBAAoB,+BA4CtB"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { TrafficRow } from './TrafficRow.js';
4
+ /**
5
+ * A collapsible group row — one header summarizing a batch,
6
+ * transaction, or listener-run, expanding to the member rows. The
7
+ * header carries `data-pyric-group-kind` and a `data-pyric-group-*`
8
+ * count/deny rollup; expansion state is `data-pyric-expanded`.
9
+ *
10
+ * Styling hooks: `[data-pyric-traffic-group]`,
11
+ * `[data-pyric-traffic-group-header]` (with `data-pyric-group-kind`),
12
+ * `[data-pyric-traffic-group-members]`.
13
+ */
14
+ export function TrafficGroupRow({ group, defaultExpanded = false, onSelect, selectedId, renderClassification, formatTime, className, }) {
15
+ const [expanded, setExpanded] = useState(defaultExpanded);
16
+ return (_jsxs("div", { className: className, "data-pyric-traffic-group": "", "data-pyric-group-kind": group.kind, "data-pyric-expanded": expanded ? '' : undefined, children: [_jsxs("button", { type: "button", onClick: () => setExpanded((e) => !e), "data-pyric-traffic-group-header": "", "data-pyric-group-kind": group.kind, "aria-expanded": expanded, children: [_jsx("span", { "data-pyric-group-kind-label": "", children: group.kind }), _jsx("span", { "data-pyric-group-count": "", children: group.count }), group.denies > 0 ? (_jsx("span", { "data-pyric-group-denies": "", children: group.denies })) : null] }), expanded ? (_jsx("ul", { "data-pyric-traffic-group-members": "", children: group.events.map((event) => (_jsx("li", { "data-pyric-traffic-entry": "", "data-pyric-traffic-id": event.id, children: _jsx(TrafficRow, { event: event, selected: event.id === selectedId, onSelect: onSelect, renderClassification: renderClassification, formatTime: formatTime }) }, event.id))) })) : null] }));
17
+ }
18
+ //# sourceMappingURL=TrafficGroupRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrafficGroupRow.js","sourceRoot":"","sources":["../../../src/traffic/components/TrafficGroupRow.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAGjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAgB7C;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,eAAe,GAAG,KAAK,EACvB,QAAQ,EACR,UAAU,EACV,oBAAoB,EACpB,UAAU,EACV,SAAS,GACY;IACrB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;IAE1D,OAAO,CACL,eACE,SAAS,EAAE,SAAS,8BACK,EAAE,2BACJ,KAAK,CAAC,IAAI,yBACZ,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,aAE9C,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,qCACL,EAAE,2BACX,KAAK,CAAC,IAAI,mBAClB,QAAQ,aAEvB,8CAAkC,EAAE,YAAE,KAAK,CAAC,IAAI,GAAQ,EACxD,yCAA6B,EAAE,YAAE,KAAK,CAAC,KAAK,GAAQ,EACnD,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAClB,0CAA8B,EAAE,YAAE,KAAK,CAAC,MAAM,GAAQ,CACvD,CAAC,CAAC,CAAC,IAAI,IACD,EACR,QAAQ,CAAC,CAAC,CAAC,CACV,iDAAqC,EAAE,YACpC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC3B,yCAE2B,EAAE,2BACJ,KAAK,CAAC,EAAE,YAE/B,KAAC,UAAU,IACT,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,KAAK,CAAC,EAAE,KAAK,UAAU,EACjC,QAAQ,EAAE,QAAQ,EAClB,oBAAoB,EAAE,oBAAoB,EAC1C,UAAU,EAAE,UAAU,GACtB,IAVG,KAAK,CAAC,EAAE,CAWV,CACN,CAAC,GACC,CACN,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { MetricPoint, MetricSeries } from '../hooks/useTrafficMetrics.js';
2
+ export interface TrafficLineChartProps {
3
+ points: readonly MetricPoint[];
4
+ series: readonly MetricSeries[];
5
+ /** Series keys currently drawn. Omit to draw every series. Pair with
6
+ * {@link TrafficMetricCards}' `visible`/`onToggle` so the legend cards
7
+ * and the chart's lines toggle in lockstep. */
8
+ visible?: ReadonlySet<string>;
9
+ formatValue?: (n: number) => string;
10
+ formatTime?: (t: number) => string;
11
+ emptyState?: React.ReactNode;
12
+ className?: string;
13
+ }
14
+ /** Hand-rolled SVG line chart, no charting dependency — plain lines over
15
+ * a 0..100 viewBox so CSS drives the actual size (intrinsic layout, no
16
+ * fixed pixel chart). Each series draws only when `visible` includes
17
+ * its key (or `visible` is omitted). The y-scale is the max value
18
+ * across the currently VISIBLE series only, so toggling a tall series
19
+ * off rescales the rest up — matching the Console reference.
20
+ *
21
+ * Interaction: hovering (or focusing, via the invisible per-bucket hit
22
+ * targets) shows a tooltip with the bucket's time range and each visible
23
+ * series' value at that bucket — `[data-pyric-chart-tooltip]`, positioned
24
+ * via `--pyric-hover-x`.
25
+ *
26
+ * Styling hooks: `[data-pyric-ui="traffic-line-chart"]`,
27
+ * `[data-pyric-chart-svg]`, `[data-pyric-chart-line]` (with
28
+ * `data-pyric-series-key`, `data-pyric-series-index` — the same index a
29
+ * `TrafficMetricCards` card carries, so line + card colors line up),
30
+ * `[data-pyric-chart-hit]` (with `data-pyric-point-index`),
31
+ * `[data-pyric-chart-tooltip]`, `[data-pyric-tooltip-row]`.
32
+ */
33
+ export declare function TrafficLineChart({ points, series, visible, formatValue, formatTime, emptyState, className, }: TrafficLineChartProps): import("react").JSX.Element;
34
+ //# sourceMappingURL=TrafficLineChart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrafficLineChart.d.ts","sourceRoot":"","sources":["../../../src/traffic/components/TrafficLineChart.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE/E,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IAC/B,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IAChC;;oDAEgD;IAChD,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,MAAM,EACN,OAAO,EACP,WAAgC,EAChC,UAA8B,EAC9B,UAAU,EACV,SAAS,GACV,EAAE,qBAAqB,+BAqFvB"}
@@ -0,0 +1,49 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ const defaultFormatValue = (n) => String(n);
4
+ const defaultFormatTime = (t) => new Date(t).toLocaleTimeString();
5
+ /** Hand-rolled SVG line chart, no charting dependency — plain lines over
6
+ * a 0..100 viewBox so CSS drives the actual size (intrinsic layout, no
7
+ * fixed pixel chart). Each series draws only when `visible` includes
8
+ * its key (or `visible` is omitted). The y-scale is the max value
9
+ * across the currently VISIBLE series only, so toggling a tall series
10
+ * off rescales the rest up — matching the Console reference.
11
+ *
12
+ * Interaction: hovering (or focusing, via the invisible per-bucket hit
13
+ * targets) shows a tooltip with the bucket's time range and each visible
14
+ * series' value at that bucket — `[data-pyric-chart-tooltip]`, positioned
15
+ * via `--pyric-hover-x`.
16
+ *
17
+ * Styling hooks: `[data-pyric-ui="traffic-line-chart"]`,
18
+ * `[data-pyric-chart-svg]`, `[data-pyric-chart-line]` (with
19
+ * `data-pyric-series-key`, `data-pyric-series-index` — the same index a
20
+ * `TrafficMetricCards` card carries, so line + card colors line up),
21
+ * `[data-pyric-chart-hit]` (with `data-pyric-point-index`),
22
+ * `[data-pyric-chart-tooltip]`, `[data-pyric-tooltip-row]`.
23
+ */
24
+ export function TrafficLineChart({ points, series, visible, formatValue = defaultFormatValue, formatTime = defaultFormatTime, emptyState, className, }) {
25
+ const [hovered, setHovered] = useState(null);
26
+ if (points.length === 0) {
27
+ return (_jsx("div", { className: className, "data-pyric-ui": "traffic-line-chart", "data-pyric-empty": "", children: emptyState }));
28
+ }
29
+ const visibleSeries = series.filter((s) => !visible || visible.has(s.key));
30
+ let maxValue = 0;
31
+ for (const s of visibleSeries)
32
+ for (const v of s.values)
33
+ if (v > maxValue)
34
+ maxValue = v;
35
+ const scale = maxValue === 0 ? 1 : maxValue;
36
+ const n = points.length;
37
+ const xAt = (i) => (n === 1 ? 50 : (i / (n - 1)) * 100);
38
+ const yAt = (v) => 100 - (v / scale) * 100;
39
+ const hoveredPoint = hovered != null ? points[hovered] : null;
40
+ return (_jsx("div", { className: className, "data-pyric-ui": "traffic-line-chart", children: _jsxs("div", { "data-pyric-chart-svg": "", children: [_jsx("svg", { viewBox: "0 0 100 100", preserveAspectRatio: "none", role: "img", "aria-label": "metrics over time", children: series.map((s) => {
41
+ const seriesIndex = series.indexOf(s);
42
+ const isVisible = !visible || visible.has(s.key);
43
+ if (!isVisible)
44
+ return null;
45
+ const d = s.values.map((v, i) => `${i === 0 ? 'M' : 'L'}${xAt(i)},${yAt(v)}`).join(' ');
46
+ return (_jsx("path", { "data-pyric-chart-line": "", "data-pyric-series-key": s.key, "data-pyric-series-index": seriesIndex, d: d, fill: "none", vectorEffect: "non-scaling-stroke" }, s.key));
47
+ }) }), _jsx("div", { "data-pyric-chart-hits": "", children: points.map((point, i) => (_jsx("button", { type: "button", "data-pyric-chart-hit": "", "data-pyric-point-index": i, onMouseEnter: () => setHovered(i), onFocus: () => setHovered(i), onMouseLeave: () => setHovered((cur) => (cur === i ? null : cur)), onBlur: () => setHovered((cur) => (cur === i ? null : cur)), "aria-label": `${formatTime(point.start)} to ${formatTime(point.end)}` }, point.index))) }), hoveredPoint && (_jsxs("div", { "data-pyric-chart-tooltip": "", style: { '--pyric-hover-x': xAt(hoveredPoint.index) }, children: [_jsxs("div", { "data-pyric-tooltip-time": "", children: [formatTime(hoveredPoint.start), " \u2013 ", formatTime(hoveredPoint.end)] }), visibleSeries.map((s) => (_jsxs("div", { "data-pyric-tooltip-row": "", "data-pyric-series-key": s.key, "data-pyric-series-index": series.indexOf(s), children: [_jsx("span", { "data-pyric-tooltip-label": "", children: s.label }), _jsx("span", { "data-pyric-tooltip-value": "", children: formatValue(s.values[hoveredPoint.index]) })] }, s.key)))] }))] }) }));
48
+ }
49
+ //# sourceMappingURL=TrafficLineChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrafficLineChart.js","sourceRoot":"","sources":["../../../src/traffic/components/TrafficLineChart.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { TrafficEvent } from '../types.js';
3
+ import type { TrafficLogItem } from '../hooks/useTrafficGroups.js';
4
+ export interface TrafficLogProps {
5
+ /** Events to render, in display order. The hook layer decides the
6
+ * order — `<TrafficLog>` renders the array as given. */
7
+ events: TrafficEvent[];
8
+ /**
9
+ * Grouped items from `useTrafficGroups`. When provided, the log
10
+ * renders singles + collapsible group rows and does NOT
11
+ * virtualize — grouping is itself the volume reducer (a 250-event
12
+ * listener storm becomes one group row). `events` is ignored.
13
+ */
14
+ items?: TrafficLogItem[];
15
+ /** The selected event's id, marked with `data-pyric-selected`. */
16
+ selectedId?: string;
17
+ onSelect?: (event: TrafficEvent) => void;
18
+ /** Passed through to each `<TrafficRow>`. */
19
+ renderClassification?: (event: TrafficEvent) => ReactNode;
20
+ /** Passed through to each `<TrafficRow>`. */
21
+ formatTime?: (at: number) => string;
22
+ /**
23
+ * Full escape hatch — render a row yourself instead of the default
24
+ * `<TrafficRow>`. Receives the event and its selected state.
25
+ * Applies to the flat (`events`) path only.
26
+ */
27
+ renderRow?: (event: TrafficEvent, selected: boolean) => ReactNode;
28
+ emptyState?: ReactNode;
29
+ className?: string;
30
+ /**
31
+ * Above this row count, the list virtualizes via `<VirtualList>`.
32
+ * Default 100 — a `load-test`-shaped session can emit 100k+ events,
33
+ * so virtualization is load-bearing, not polish.
34
+ */
35
+ virtualizeThreshold?: number;
36
+ /** Estimated row height when virtualizing. Default 28. */
37
+ rowHeight?: number | ((index: number) => number);
38
+ /** Pixel height the virtualized scroll container fills. Default
39
+ * `'60vh'`. */
40
+ virtualizedHeight?: number | string;
41
+ }
42
+ /**
43
+ * Headless traffic log — a Chrome DevTools Network-panel-style event
44
+ * stream. Below `virtualizeThreshold` it renders a plain `<ul>`;
45
+ * above it, TanStack-Virtual via `<VirtualList>`.
46
+ *
47
+ * Styling hooks: `[data-pyric-ui="traffic-log"]`,
48
+ * `[data-pyric-traffic-entry]` (the list item wrapper), plus the
49
+ * `<TrafficRow>` hooks.
50
+ */
51
+ export declare function TrafficLog({ events, items, selectedId, onSelect, renderClassification, formatTime, renderRow, emptyState, className, virtualizeThreshold, rowHeight, virtualizedHeight, }: TrafficLogProps): import("react").JSX.Element;
52
+ //# sourceMappingURL=TrafficLog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrafficLog.d.ts","sourceRoot":"","sources":["../../../src/traffic/components/TrafficLog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAInE,MAAM,WAAW,eAAe;IAC9B;6DACyD;IACzD,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACzC,6CAA6C;IAC7C,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,SAAS,CAAC;IAC1D,6CAA6C;IAC7C,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,KAAK,SAAS,CAAC;IAClE,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IACjD;oBACgB;IAChB,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACrC;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,KAAK,EACL,UAAU,EACV,QAAQ,EACR,oBAAoB,EACpB,UAAU,EACV,SAAS,EACT,UAAU,EACV,SAAS,EACT,mBAAyB,EACzB,SAAc,EACd,iBAA0B,GAC3B,EAAE,eAAe,+BA0GjB"}
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { VirtualList } from '../../primitives/VirtualList.js';
3
+ import { TrafficRow } from './TrafficRow.js';
4
+ import { TrafficGroupRow } from './TrafficGroupRow.js';
5
+ /**
6
+ * Headless traffic log — a Chrome DevTools Network-panel-style event
7
+ * stream. Below `virtualizeThreshold` it renders a plain `<ul>`;
8
+ * above it, TanStack-Virtual via `<VirtualList>`.
9
+ *
10
+ * Styling hooks: `[data-pyric-ui="traffic-log"]`,
11
+ * `[data-pyric-traffic-entry]` (the list item wrapper), plus the
12
+ * `<TrafficRow>` hooks.
13
+ */
14
+ export function TrafficLog({ events, items, selectedId, onSelect, renderClassification, formatTime, renderRow, emptyState, className, virtualizeThreshold = 100, rowHeight = 28, virtualizedHeight = '60vh', }) {
15
+ // Grouped mode — singles + collapsible group rows, no virtualization.
16
+ if (items !== undefined) {
17
+ if (items.length === 0) {
18
+ return (_jsx("div", { className: className, "data-pyric-ui": "traffic-log", "data-pyric-empty": "", children: emptyState }));
19
+ }
20
+ return (_jsx("div", { className: className, "data-pyric-ui": "traffic-log", "data-pyric-grouped": "", children: _jsx("ul", { "data-pyric-traffic-log-items": "", children: items.map((item) => item.type === 'group' ? (_jsx("li", { "data-pyric-traffic-group-entry": "", children: _jsx(TrafficGroupRow, { group: item, onSelect: onSelect, selectedId: selectedId, renderClassification: renderClassification, formatTime: formatTime }) }, item.key)) : (_jsx("li", { "data-pyric-traffic-entry": "", "data-pyric-traffic-id": item.event.id, children: _jsx(TrafficRow, { event: item.event, selected: item.event.id === selectedId, onSelect: onSelect, renderClassification: renderClassification, formatTime: formatTime }) }, item.event.id))) }) }));
21
+ }
22
+ if (events.length === 0) {
23
+ return (_jsx("div", { className: className, "data-pyric-ui": "traffic-log", "data-pyric-empty": "", children: emptyState }));
24
+ }
25
+ const row = (event) => {
26
+ const selected = event.id === selectedId;
27
+ if (renderRow)
28
+ return renderRow(event, selected);
29
+ return (_jsx(TrafficRow, { event: event, selected: selected, onSelect: onSelect, renderClassification: renderClassification, formatTime: formatTime }));
30
+ };
31
+ const virtualized = events.length > virtualizeThreshold;
32
+ return (_jsx("div", { className: className, "data-pyric-ui": "traffic-log", "data-pyric-virtualized": virtualized ? '' : undefined, children: virtualized ? (_jsx(VirtualList, { items: events, estimateSize: rowHeight, height: virtualizedHeight, getItemKey: (event) => event.id, renderItem: (event) => (_jsx("div", { "data-pyric-traffic-entry": "", "data-pyric-traffic-id": event.id, children: row(event) })) })) : (_jsx("ul", { "data-pyric-traffic-log-items": "", children: events.map((event) => (_jsx("li", { "data-pyric-traffic-entry": "", "data-pyric-traffic-id": event.id, children: row(event) }, event.id))) })) }));
33
+ }
34
+ //# sourceMappingURL=TrafficLog.js.map