@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.
- package/README.md +79 -0
- package/dist/agents/ContextWindowUsage.d.ts +67 -0
- package/dist/agents/ContextWindowUsage.d.ts.map +1 -0
- package/dist/agents/ContextWindowUsage.js +115 -0
- package/dist/agents/ContextWindowUsage.js.map +1 -0
- package/dist/agents/EmptyState.d.ts +18 -0
- package/dist/agents/EmptyState.d.ts.map +1 -0
- package/dist/agents/EmptyState.js +11 -0
- package/dist/agents/EmptyState.js.map +1 -0
- package/dist/agents/Fold.d.ts +37 -0
- package/dist/agents/Fold.d.ts.map +1 -0
- package/dist/agents/Fold.js +18 -0
- package/dist/agents/Fold.js.map +1 -0
- package/dist/agents/Modal.d.ts +25 -0
- package/dist/agents/Modal.d.ts.map +1 -0
- package/dist/agents/Modal.js +28 -0
- package/dist/agents/Modal.js.map +1 -0
- package/dist/agents/PulsingDot.d.ts +21 -0
- package/dist/agents/PulsingDot.d.ts.map +1 -0
- package/dist/agents/PulsingDot.js +18 -0
- package/dist/agents/PulsingDot.js.map +1 -0
- package/dist/agents/index.d.ts +15 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +15 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/auth/authApi.d.ts +32 -0
- package/dist/auth/authApi.d.ts.map +1 -0
- package/dist/auth/authApi.js +27 -0
- package/dist/auth/authApi.js.map +1 -0
- package/dist/auth/claims.d.ts +27 -0
- package/dist/auth/claims.d.ts.map +1 -0
- package/dist/auth/claims.js +58 -0
- package/dist/auth/claims.js.map +1 -0
- package/dist/auth/components/AuthProviderToggles.d.ts +31 -0
- package/dist/auth/components/AuthProviderToggles.d.ts.map +1 -0
- package/dist/auth/components/AuthProviderToggles.js +48 -0
- package/dist/auth/components/AuthProviderToggles.js.map +1 -0
- package/dist/auth/components/AuthSignInHelper.d.ts +57 -0
- package/dist/auth/components/AuthSignInHelper.d.ts.map +1 -0
- package/dist/auth/components/AuthSignInHelper.js +69 -0
- package/dist/auth/components/AuthSignInHelper.js.map +1 -0
- package/dist/auth/components/AuthUserForm.d.ts +84 -0
- package/dist/auth/components/AuthUserForm.d.ts.map +1 -0
- package/dist/auth/components/AuthUserForm.js +89 -0
- package/dist/auth/components/AuthUserForm.js.map +1 -0
- package/dist/auth/components/AuthUserList.d.ts +51 -0
- package/dist/auth/components/AuthUserList.d.ts.map +1 -0
- package/dist/auth/components/AuthUserList.js +46 -0
- package/dist/auth/components/AuthUserList.js.map +1 -0
- package/dist/auth/components/ClaimsField.d.ts +22 -0
- package/dist/auth/components/ClaimsField.d.ts.map +1 -0
- package/dist/auth/components/ClaimsField.js +11 -0
- package/dist/auth/components/ClaimsField.js.map +1 -0
- package/dist/auth/components/confirmActions.d.ts +40 -0
- package/dist/auth/components/confirmActions.d.ts.map +1 -0
- package/dist/auth/components/confirmActions.js +49 -0
- package/dist/auth/components/confirmActions.js.map +1 -0
- package/dist/auth/controller.d.ts +73 -0
- package/dist/auth/controller.d.ts.map +1 -0
- package/dist/auth/controller.js +139 -0
- package/dist/auth/controller.js.map +1 -0
- package/dist/auth/hooks/index.d.ts +7 -0
- package/dist/auth/hooks/index.d.ts.map +1 -0
- package/dist/auth/hooks/index.js +7 -0
- package/dist/auth/hooks/index.js.map +1 -0
- package/dist/auth/hooks/useAuthFlowHelper.d.ts +30 -0
- package/dist/auth/hooks/useAuthFlowHelper.d.ts.map +1 -0
- package/dist/auth/hooks/useAuthFlowHelper.js +30 -0
- package/dist/auth/hooks/useAuthFlowHelper.js.map +1 -0
- package/dist/auth/hooks/useAuthProviderConfig.d.ts +37 -0
- package/dist/auth/hooks/useAuthProviderConfig.d.ts.map +1 -0
- package/dist/auth/hooks/useAuthProviderConfig.js +98 -0
- package/dist/auth/hooks/useAuthProviderConfig.js.map +1 -0
- package/dist/auth/hooks/useAuthUserEditor.d.ts +30 -0
- package/dist/auth/hooks/useAuthUserEditor.d.ts.map +1 -0
- package/dist/auth/hooks/useAuthUserEditor.js +27 -0
- package/dist/auth/hooks/useAuthUserEditor.js.map +1 -0
- package/dist/auth/hooks/useAuthUsers.d.ts +38 -0
- package/dist/auth/hooks/useAuthUsers.d.ts.map +1 -0
- package/dist/auth/hooks/useAuthUsers.js +111 -0
- package/dist/auth/hooks/useAuthUsers.js.map +1 -0
- package/dist/auth/index.d.ts +11 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +13 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/providers.d.ts +11 -0
- package/dist/auth/providers.d.ts.map +1 -0
- package/dist/auth/providers.js +28 -0
- package/dist/auth/providers.js.map +1 -0
- package/dist/auth/reducers/userEditor.d.ts +55 -0
- package/dist/auth/reducers/userEditor.d.ts.map +1 -0
- package/dist/auth/reducers/userEditor.js +136 -0
- package/dist/auth/reducers/userEditor.js.map +1 -0
- package/dist/events/components/ActivityActionItems.d.ts +45 -0
- package/dist/events/components/ActivityActionItems.d.ts.map +1 -0
- package/dist/events/components/ActivityActionItems.js +68 -0
- package/dist/events/components/ActivityActionItems.js.map +1 -0
- package/dist/events/components/ActivityGrid.d.ts +65 -0
- package/dist/events/components/ActivityGrid.d.ts.map +1 -0
- package/dist/events/components/ActivityGrid.js +61 -0
- package/dist/events/components/ActivityGrid.js.map +1 -0
- package/dist/events/components/ActivityGridRow.d.ts +31 -0
- package/dist/events/components/ActivityGridRow.d.ts.map +1 -0
- package/dist/events/components/ActivityGridRow.js +23 -0
- package/dist/events/components/ActivityGridRow.js.map +1 -0
- package/dist/events/components/ProposedChangeDiff.d.ts +46 -0
- package/dist/events/components/ProposedChangeDiff.d.ts.map +1 -0
- package/dist/events/components/ProposedChangeDiff.js +60 -0
- package/dist/events/components/ProposedChangeDiff.js.map +1 -0
- package/dist/events/components/format.d.ts +11 -0
- package/dist/events/components/format.d.ts.map +1 -0
- package/dist/events/components/format.js +26 -0
- package/dist/events/components/format.js.map +1 -0
- package/dist/events/components/index.d.ts +6 -0
- package/dist/events/components/index.d.ts.map +1 -0
- package/dist/events/components/index.js +6 -0
- package/dist/events/components/index.js.map +1 -0
- package/dist/events/digest.d.ts +167 -0
- package/dist/events/digest.d.ts.map +1 -0
- package/dist/events/digest.js +426 -0
- package/dist/events/digest.js.map +1 -0
- package/dist/events/hooks/index.d.ts +3 -0
- package/dist/events/hooks/index.d.ts.map +1 -0
- package/dist/events/hooks/index.js +3 -0
- package/dist/events/hooks/index.js.map +1 -0
- package/dist/events/hooks/useActivityDigest.d.ts +27 -0
- package/dist/events/hooks/useActivityDigest.d.ts.map +1 -0
- package/dist/events/hooks/useActivityDigest.js +18 -0
- package/dist/events/hooks/useActivityDigest.js.map +1 -0
- package/dist/events/hooks/useActivityStream.d.ts +44 -0
- package/dist/events/hooks/useActivityStream.d.ts.map +1 -0
- package/dist/events/hooks/useActivityStream.js +38 -0
- package/dist/events/hooks/useActivityStream.js.map +1 -0
- package/dist/events/index.d.ts +15 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +14 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/types.d.ts +160 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +21 -0
- package/dist/events/types.js.map +1 -0
- package/dist/firestore/components/CollectionList.d.ts +22 -0
- package/dist/firestore/components/CollectionList.d.ts.map +1 -0
- package/dist/firestore/components/CollectionList.js +21 -0
- package/dist/firestore/components/CollectionList.js.map +1 -0
- package/dist/firestore/components/DeleteWithConfirm.d.ts +38 -0
- package/dist/firestore/components/DeleteWithConfirm.d.ts.map +1 -0
- package/dist/firestore/components/DeleteWithConfirm.js +33 -0
- package/dist/firestore/components/DeleteWithConfirm.js.map +1 -0
- package/dist/firestore/components/DocumentEditor.d.ts +47 -0
- package/dist/firestore/components/DocumentEditor.d.ts.map +1 -0
- package/dist/firestore/components/DocumentEditor.js +176 -0
- package/dist/firestore/components/DocumentEditor.js.map +1 -0
- package/dist/firestore/components/DocumentList.d.ts +60 -0
- package/dist/firestore/components/DocumentList.d.ts.map +1 -0
- package/dist/firestore/components/DocumentList.js +39 -0
- package/dist/firestore/components/DocumentList.js.map +1 -0
- package/dist/firestore/components/DocumentPreview.d.ts +68 -0
- package/dist/firestore/components/DocumentPreview.d.ts.map +1 -0
- package/dist/firestore/components/DocumentPreview.js +76 -0
- package/dist/firestore/components/DocumentPreview.js.map +1 -0
- package/dist/firestore/components/FieldRenderer.d.ts +17 -0
- package/dist/firestore/components/FieldRenderer.d.ts.map +1 -0
- package/dist/firestore/components/FieldRenderer.js +16 -0
- package/dist/firestore/components/FieldRenderer.js.map +1 -0
- package/dist/firestore/components/QueryBuilder.d.ts +25 -0
- package/dist/firestore/components/QueryBuilder.d.ts.map +1 -0
- package/dist/firestore/components/QueryBuilder.js +78 -0
- package/dist/firestore/components/QueryBuilder.js.map +1 -0
- package/dist/firestore/components/ReferencePicker.d.ts +33 -0
- package/dist/firestore/components/ReferencePicker.d.ts.map +1 -0
- package/dist/firestore/components/ReferencePicker.js +42 -0
- package/dist/firestore/components/ReferencePicker.js.map +1 -0
- package/dist/firestore/components/TreeEntry.d.ts +15 -0
- package/dist/firestore/components/TreeEntry.d.ts.map +1 -0
- package/dist/firestore/components/TreeEntry.js +23 -0
- package/dist/firestore/components/TreeEntry.js.map +1 -0
- package/dist/firestore/components/context.d.ts +18 -0
- package/dist/firestore/components/context.d.ts.map +1 -0
- package/dist/firestore/components/context.js +7 -0
- package/dist/firestore/components/context.js.map +1 -0
- package/dist/firestore/fieldEditors/array.d.ts +3 -0
- package/dist/firestore/fieldEditors/array.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/array.js +16 -0
- package/dist/firestore/fieldEditors/array.js.map +1 -0
- package/dist/firestore/fieldEditors/boolean.d.ts +3 -0
- package/dist/firestore/fieldEditors/boolean.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/boolean.js +13 -0
- package/dist/firestore/fieldEditors/boolean.js.map +1 -0
- package/dist/firestore/fieldEditors/bytes.d.ts +4 -0
- package/dist/firestore/fieldEditors/bytes.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/bytes.js +31 -0
- package/dist/firestore/fieldEditors/bytes.js.map +1 -0
- package/dist/firestore/fieldEditors/geopoint.d.ts +4 -0
- package/dist/firestore/fieldEditors/geopoint.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/geopoint.js +32 -0
- package/dist/firestore/fieldEditors/geopoint.js.map +1 -0
- package/dist/firestore/fieldEditors/map.d.ts +3 -0
- package/dist/firestore/fieldEditors/map.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/map.js +19 -0
- package/dist/firestore/fieldEditors/map.js.map +1 -0
- package/dist/firestore/fieldEditors/null.d.ts +3 -0
- package/dist/firestore/fieldEditors/null.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/null.js +17 -0
- package/dist/firestore/fieldEditors/null.js.map +1 -0
- package/dist/firestore/fieldEditors/number.d.ts +3 -0
- package/dist/firestore/fieldEditors/number.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/number.js +24 -0
- package/dist/firestore/fieldEditors/number.js.map +1 -0
- package/dist/firestore/fieldEditors/reference.d.ts +4 -0
- package/dist/firestore/fieldEditors/reference.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/reference.js +49 -0
- package/dist/firestore/fieldEditors/reference.js.map +1 -0
- package/dist/firestore/fieldEditors/registry.d.ts +16 -0
- package/dist/firestore/fieldEditors/registry.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/registry.js +42 -0
- package/dist/firestore/fieldEditors/registry.js.map +1 -0
- package/dist/firestore/fieldEditors/string.d.ts +3 -0
- package/dist/firestore/fieldEditors/string.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/string.js +13 -0
- package/dist/firestore/fieldEditors/string.js.map +1 -0
- package/dist/firestore/fieldEditors/timestamp.d.ts +4 -0
- package/dist/firestore/fieldEditors/timestamp.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/timestamp.js +52 -0
- package/dist/firestore/fieldEditors/timestamp.js.map +1 -0
- package/dist/firestore/fieldEditors/types.d.ts +64 -0
- package/dist/firestore/fieldEditors/types.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/types.js +2 -0
- package/dist/firestore/fieldEditors/types.js.map +1 -0
- package/dist/firestore/fieldEditors/vector.d.ts +29 -0
- package/dist/firestore/fieldEditors/vector.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/vector.js +93 -0
- package/dist/firestore/fieldEditors/vector.js.map +1 -0
- package/dist/firestore/firestoreApi.d.ts +35 -0
- package/dist/firestore/firestoreApi.d.ts.map +1 -0
- package/dist/firestore/firestoreApi.js +28 -0
- package/dist/firestore/firestoreApi.js.map +1 -0
- package/dist/firestore/hooks/coerceError.d.ts +17 -0
- package/dist/firestore/hooks/coerceError.d.ts.map +1 -0
- package/dist/firestore/hooks/coerceError.js +41 -0
- package/dist/firestore/hooks/coerceError.js.map +1 -0
- package/dist/firestore/hooks/index.d.ts +10 -0
- package/dist/firestore/hooks/index.d.ts.map +1 -0
- package/dist/firestore/hooks/index.js +10 -0
- package/dist/firestore/hooks/index.js.map +1 -0
- package/dist/firestore/hooks/useCollectionList.d.ts +37 -0
- package/dist/firestore/hooks/useCollectionList.d.ts.map +1 -0
- package/dist/firestore/hooks/useCollectionList.js +51 -0
- package/dist/firestore/hooks/useCollectionList.js.map +1 -0
- package/dist/firestore/hooks/useDocumentEditor.d.ts +58 -0
- package/dist/firestore/hooks/useDocumentEditor.d.ts.map +1 -0
- package/dist/firestore/hooks/useDocumentEditor.js +68 -0
- package/dist/firestore/hooks/useDocumentEditor.js.map +1 -0
- package/dist/firestore/hooks/useDocumentList.d.ts +45 -0
- package/dist/firestore/hooks/useDocumentList.d.ts.map +1 -0
- package/dist/firestore/hooks/useDocumentList.js +112 -0
- package/dist/firestore/hooks/useDocumentList.js.map +1 -0
- package/dist/firestore/hooks/useDocumentSubcollections.d.ts +29 -0
- package/dist/firestore/hooks/useDocumentSubcollections.d.ts.map +1 -0
- package/dist/firestore/hooks/useDocumentSubcollections.js +48 -0
- package/dist/firestore/hooks/useDocumentSubcollections.js.map +1 -0
- package/dist/firestore/hooks/useFirestoreCollection.d.ts +14 -0
- package/dist/firestore/hooks/useFirestoreCollection.d.ts.map +1 -0
- package/dist/firestore/hooks/useFirestoreCollection.js +35 -0
- package/dist/firestore/hooks/useFirestoreCollection.js.map +1 -0
- package/dist/firestore/hooks/useFirestoreDoc.d.ts +17 -0
- package/dist/firestore/hooks/useFirestoreDoc.d.ts.map +1 -0
- package/dist/firestore/hooks/useFirestoreDoc.js +34 -0
- package/dist/firestore/hooks/useFirestoreDoc.js.map +1 -0
- package/dist/firestore/hooks/useQueryBuilder.d.ts +51 -0
- package/dist/firestore/hooks/useQueryBuilder.d.ts.map +1 -0
- package/dist/firestore/hooks/useQueryBuilder.js +110 -0
- package/dist/firestore/hooks/useQueryBuilder.js.map +1 -0
- package/dist/firestore/hooks/useRecursiveDelete.d.ts +40 -0
- package/dist/firestore/hooks/useRecursiveDelete.d.ts.map +1 -0
- package/dist/firestore/hooks/useRecursiveDelete.js +44 -0
- package/dist/firestore/hooks/useRecursiveDelete.js.map +1 -0
- package/dist/firestore/hooks/useReferencePicker.d.ts +70 -0
- package/dist/firestore/hooks/useReferencePicker.d.ts.map +1 -0
- package/dist/firestore/hooks/useReferencePicker.js +140 -0
- package/dist/firestore/hooks/useReferencePicker.js.map +1 -0
- package/dist/firestore/import/parseImport.d.ts +55 -0
- package/dist/firestore/import/parseImport.d.ts.map +1 -0
- package/dist/firestore/import/parseImport.js +101 -0
- package/dist/firestore/import/parseImport.js.map +1 -0
- package/dist/firestore/index.d.ts +20 -0
- package/dist/firestore/index.d.ts.map +1 -0
- package/dist/firestore/index.js +28 -0
- package/dist/firestore/index.js.map +1 -0
- package/dist/firestore/reducers/defaults.d.ts +10 -0
- package/dist/firestore/reducers/defaults.d.ts.map +1 -0
- package/dist/firestore/reducers/defaults.js +37 -0
- package/dist/firestore/reducers/defaults.js.map +1 -0
- package/dist/firestore/reducers/documentEditor.d.ts +23 -0
- package/dist/firestore/reducers/documentEditor.d.ts.map +1 -0
- package/dist/firestore/reducers/documentEditor.js +199 -0
- package/dist/firestore/reducers/documentEditor.js.map +1 -0
- package/dist/firestore/reducers/tree.d.ts +28 -0
- package/dist/firestore/reducers/tree.d.ts.map +1 -0
- package/dist/firestore/reducers/tree.js +129 -0
- package/dist/firestore/reducers/tree.js.map +1 -0
- package/dist/firestore/reducers/types.d.ts +112 -0
- package/dist/firestore/reducers/types.d.ts.map +1 -0
- package/dist/firestore/reducers/types.js +2 -0
- package/dist/firestore/reducers/types.js.map +1 -0
- package/dist/firestore/reducers/validation.d.ts +25 -0
- package/dist/firestore/reducers/validation.d.ts.map +1 -0
- package/dist/firestore/reducers/validation.js +121 -0
- package/dist/firestore/reducers/validation.js.map +1 -0
- package/dist/firestore/types.d.ts +77 -0
- package/dist/firestore/types.d.ts.map +1 -0
- package/dist/firestore/types.js +196 -0
- package/dist/firestore/types.js.map +1 -0
- package/dist/firestore/validation/ids.d.ts +23 -0
- package/dist/firestore/validation/ids.d.ts.map +1 -0
- package/dist/firestore/validation/ids.js +46 -0
- package/dist/firestore/validation/ids.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/primitives/Badge.d.ts +28 -0
- package/dist/primitives/Badge.d.ts.map +1 -0
- package/dist/primitives/Badge.js +11 -0
- package/dist/primitives/Badge.js.map +1 -0
- package/dist/primitives/ConfirmDialog.d.ts +42 -0
- package/dist/primitives/ConfirmDialog.d.ts.map +1 -0
- package/dist/primitives/ConfirmDialog.js +61 -0
- package/dist/primitives/ConfirmDialog.js.map +1 -0
- package/dist/primitives/CopyButton.d.ts +28 -0
- package/dist/primitives/CopyButton.d.ts.map +1 -0
- package/dist/primitives/CopyButton.js +27 -0
- package/dist/primitives/CopyButton.js.map +1 -0
- package/dist/primitives/JsonView.d.ts +29 -0
- package/dist/primitives/JsonView.d.ts.map +1 -0
- package/dist/primitives/JsonView.js +56 -0
- package/dist/primitives/JsonView.js.map +1 -0
- package/dist/primitives/SegmentedControl.d.ts +37 -0
- package/dist/primitives/SegmentedControl.d.ts.map +1 -0
- package/dist/primitives/SegmentedControl.js +18 -0
- package/dist/primitives/SegmentedControl.js.map +1 -0
- package/dist/primitives/Toast.d.ts +48 -0
- package/dist/primitives/Toast.d.ts.map +1 -0
- package/dist/primitives/Toast.js +60 -0
- package/dist/primitives/Toast.js.map +1 -0
- package/dist/primitives/VirtualList.d.ts +37 -0
- package/dist/primitives/VirtualList.d.ts.map +1 -0
- package/dist/primitives/VirtualList.js +47 -0
- package/dist/primitives/VirtualList.js.map +1 -0
- package/dist/primitives/hooks/useContainerSize.d.ts +29 -0
- package/dist/primitives/hooks/useContainerSize.d.ts.map +1 -0
- package/dist/primitives/hooks/useContainerSize.js +45 -0
- package/dist/primitives/hooks/useContainerSize.js.map +1 -0
- package/dist/primitives/index.d.ts +10 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +10 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/primitives/useConfirm.d.ts +34 -0
- package/dist/primitives/useConfirm.d.ts.map +1 -0
- package/dist/primitives/useConfirm.js +63 -0
- package/dist/primitives/useConfirm.js.map +1 -0
- package/dist/rtdb/components/RtdbPathBar.d.ts +31 -0
- package/dist/rtdb/components/RtdbPathBar.d.ts.map +1 -0
- package/dist/rtdb/components/RtdbPathBar.js +47 -0
- package/dist/rtdb/components/RtdbPathBar.js.map +1 -0
- package/dist/rtdb/components/RtdbTree.d.ts +38 -0
- package/dist/rtdb/components/RtdbTree.d.ts.map +1 -0
- package/dist/rtdb/components/RtdbTree.js +103 -0
- package/dist/rtdb/components/RtdbTree.js.map +1 -0
- package/dist/rtdb/editor.d.ts +25 -0
- package/dist/rtdb/editor.d.ts.map +1 -0
- package/dist/rtdb/editor.js +79 -0
- package/dist/rtdb/editor.js.map +1 -0
- package/dist/rtdb/hooks/useRtdbTree.d.ts +31 -0
- package/dist/rtdb/hooks/useRtdbTree.d.ts.map +1 -0
- package/dist/rtdb/hooks/useRtdbTree.js +49 -0
- package/dist/rtdb/hooks/useRtdbTree.js.map +1 -0
- package/dist/rtdb/index.d.ts +17 -0
- package/dist/rtdb/index.d.ts.map +1 -0
- package/dist/rtdb/index.js +21 -0
- package/dist/rtdb/index.js.map +1 -0
- package/dist/rtdb/pathInput.d.ts +28 -0
- package/dist/rtdb/pathInput.d.ts.map +1 -0
- package/dist/rtdb/pathInput.js +40 -0
- package/dist/rtdb/pathInput.js.map +1 -0
- package/dist/rtdb/reducers/tree.d.ts +86 -0
- package/dist/rtdb/reducers/tree.d.ts.map +1 -0
- package/dist/rtdb/reducers/tree.js +131 -0
- package/dist/rtdb/reducers/tree.js.map +1 -0
- package/dist/rtdb/rtdbApi.d.ts +20 -0
- package/dist/rtdb/rtdbApi.d.ts.map +1 -0
- package/dist/rtdb/rtdbApi.js +2 -0
- package/dist/rtdb/rtdbApi.js.map +1 -0
- package/dist/rtdb/values.d.ts +44 -0
- package/dist/rtdb/values.d.ts.map +1 -0
- package/dist/rtdb/values.js +143 -0
- package/dist/rtdb/values.js.map +1 -0
- package/dist/rules/components/DenialInspector.d.ts +18 -0
- package/dist/rules/components/DenialInspector.d.ts.map +1 -0
- package/dist/rules/components/DenialInspector.js +58 -0
- package/dist/rules/components/DenialInspector.js.map +1 -0
- package/dist/rules/components/format.d.ts +56 -0
- package/dist/rules/components/format.d.ts.map +1 -0
- package/dist/rules/components/format.js +137 -0
- package/dist/rules/components/format.js.map +1 -0
- package/dist/rules/components/index.d.ts +4 -0
- package/dist/rules/components/index.d.ts.map +1 -0
- package/dist/rules/components/index.js +4 -0
- package/dist/rules/components/index.js.map +1 -0
- package/dist/rules/components/scope.d.ts +10 -0
- package/dist/rules/components/scope.d.ts.map +1 -0
- package/dist/rules/components/scope.js +72 -0
- package/dist/rules/components/scope.js.map +1 -0
- package/dist/rules/hooks/index.d.ts +2 -0
- package/dist/rules/hooks/index.d.ts.map +1 -0
- package/dist/rules/hooks/index.js +2 -0
- package/dist/rules/hooks/index.js.map +1 -0
- package/dist/rules/hooks/useDenialTrace.d.ts +51 -0
- package/dist/rules/hooks/useDenialTrace.d.ts.map +1 -0
- package/dist/rules/hooks/useDenialTrace.js +58 -0
- package/dist/rules/hooks/useDenialTrace.js.map +1 -0
- package/dist/rules/index.d.ts +14 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +13 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/types.d.ts +75 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +2 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/storage/collisionRename.d.ts +73 -0
- package/dist/storage/collisionRename.d.ts.map +1 -0
- package/dist/storage/collisionRename.js +113 -0
- package/dist/storage/collisionRename.js.map +1 -0
- package/dist/storage/components/DeleteSelectionWithConfirm.d.ts +68 -0
- package/dist/storage/components/DeleteSelectionWithConfirm.d.ts.map +1 -0
- package/dist/storage/components/DeleteSelectionWithConfirm.js +82 -0
- package/dist/storage/components/DeleteSelectionWithConfirm.js.map +1 -0
- package/dist/storage/components/ObjectBrowser.d.ts +75 -0
- package/dist/storage/components/ObjectBrowser.d.ts.map +1 -0
- package/dist/storage/components/ObjectBrowser.js +59 -0
- package/dist/storage/components/ObjectBrowser.js.map +1 -0
- package/dist/storage/components/ObjectInspector.d.ts +43 -0
- package/dist/storage/components/ObjectInspector.d.ts.map +1 -0
- package/dist/storage/components/ObjectInspector.js +92 -0
- package/dist/storage/components/ObjectInspector.js.map +1 -0
- package/dist/storage/components/PathBreadcrumb.d.ts +30 -0
- package/dist/storage/components/PathBreadcrumb.d.ts.map +1 -0
- package/dist/storage/components/PathBreadcrumb.js +26 -0
- package/dist/storage/components/PathBreadcrumb.js.map +1 -0
- package/dist/storage/components/UploadDropzone.d.ts +50 -0
- package/dist/storage/components/UploadDropzone.d.ts.map +1 -0
- package/dist/storage/components/UploadDropzone.js +109 -0
- package/dist/storage/components/UploadDropzone.js.map +1 -0
- package/dist/storage/folderPlaceholder.d.ts +14 -0
- package/dist/storage/folderPlaceholder.d.ts.map +1 -0
- package/dist/storage/folderPlaceholder.js +27 -0
- package/dist/storage/folderPlaceholder.js.map +1 -0
- package/dist/storage/hooks/index.d.ts +9 -0
- package/dist/storage/hooks/index.d.ts.map +1 -0
- package/dist/storage/hooks/index.js +9 -0
- package/dist/storage/hooks/index.js.map +1 -0
- package/dist/storage/hooks/useMetadataEditor.d.ts +114 -0
- package/dist/storage/hooks/useMetadataEditor.d.ts.map +1 -0
- package/dist/storage/hooks/useMetadataEditor.js +193 -0
- package/dist/storage/hooks/useMetadataEditor.js.map +1 -0
- package/dist/storage/hooks/useObjectUpload.d.ts +109 -0
- package/dist/storage/hooks/useObjectUpload.d.ts.map +1 -0
- package/dist/storage/hooks/useObjectUpload.js +134 -0
- package/dist/storage/hooks/useObjectUpload.js.map +1 -0
- package/dist/storage/hooks/usePathState.d.ts +43 -0
- package/dist/storage/hooks/usePathState.d.ts.map +1 -0
- package/dist/storage/hooks/usePathState.js +42 -0
- package/dist/storage/hooks/usePathState.js.map +1 -0
- package/dist/storage/hooks/useStorageDelete.d.ts +73 -0
- package/dist/storage/hooks/useStorageDelete.d.ts.map +1 -0
- package/dist/storage/hooks/useStorageDelete.js +114 -0
- package/dist/storage/hooks/useStorageDelete.js.map +1 -0
- package/dist/storage/hooks/useStorageList.d.ts +74 -0
- package/dist/storage/hooks/useStorageList.d.ts.map +1 -0
- package/dist/storage/hooks/useStorageList.js +167 -0
- package/dist/storage/hooks/useStorageList.js.map +1 -0
- package/dist/storage/hooks/useStorageObject.d.ts +34 -0
- package/dist/storage/hooks/useStorageObject.d.ts.map +1 -0
- package/dist/storage/hooks/useStorageObject.js +114 -0
- package/dist/storage/hooks/useStorageObject.js.map +1 -0
- package/dist/storage/hooks/useStorageRulesGate.d.ts +128 -0
- package/dist/storage/hooks/useStorageRulesGate.d.ts.map +1 -0
- package/dist/storage/hooks/useStorageRulesGate.js +158 -0
- package/dist/storage/hooks/useStorageRulesGate.js.map +1 -0
- package/dist/storage/hooks/useStorageSelection.d.ts +32 -0
- package/dist/storage/hooks/useStorageSelection.d.ts.map +1 -0
- package/dist/storage/hooks/useStorageSelection.js +55 -0
- package/dist/storage/hooks/useStorageSelection.js.map +1 -0
- package/dist/storage/index.d.ts +11 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +17 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/pendingPrefixes.d.ts +73 -0
- package/dist/storage/pendingPrefixes.d.ts.map +1 -0
- package/dist/storage/pendingPrefixes.js +98 -0
- package/dist/storage/pendingPrefixes.js.map +1 -0
- package/dist/storage/previews.d.ts +51 -0
- package/dist/storage/previews.d.ts.map +1 -0
- package/dist/storage/previews.js +73 -0
- package/dist/storage/previews.js.map +1 -0
- package/dist/storage/storageApi.d.ts +30 -0
- package/dist/storage/storageApi.d.ts.map +1 -0
- package/dist/storage/storageApi.js +13 -0
- package/dist/storage/storageApi.js.map +1 -0
- package/dist/traffic/components/RuleHeatmap.d.ts +34 -0
- package/dist/traffic/components/RuleHeatmap.d.ts.map +1 -0
- package/dist/traffic/components/RuleHeatmap.js +40 -0
- package/dist/traffic/components/RuleHeatmap.js.map +1 -0
- package/dist/traffic/components/TrafficDetail.d.ts +33 -0
- package/dist/traffic/components/TrafficDetail.d.ts.map +1 -0
- package/dist/traffic/components/TrafficDetail.js +28 -0
- package/dist/traffic/components/TrafficDetail.js.map +1 -0
- package/dist/traffic/components/TrafficGroupRow.d.ts +28 -0
- package/dist/traffic/components/TrafficGroupRow.d.ts.map +1 -0
- package/dist/traffic/components/TrafficGroupRow.js +18 -0
- package/dist/traffic/components/TrafficGroupRow.js.map +1 -0
- package/dist/traffic/components/TrafficLineChart.d.ts +34 -0
- package/dist/traffic/components/TrafficLineChart.d.ts.map +1 -0
- package/dist/traffic/components/TrafficLineChart.js +49 -0
- package/dist/traffic/components/TrafficLineChart.js.map +1 -0
- package/dist/traffic/components/TrafficLog.d.ts +52 -0
- package/dist/traffic/components/TrafficLog.d.ts.map +1 -0
- package/dist/traffic/components/TrafficLog.js +34 -0
- package/dist/traffic/components/TrafficLog.js.map +1 -0
- package/dist/traffic/components/TrafficMetricCards.d.ts +26 -0
- package/dist/traffic/components/TrafficMetricCards.d.ts.map +1 -0
- package/dist/traffic/components/TrafficMetricCards.js +24 -0
- package/dist/traffic/components/TrafficMetricCards.js.map +1 -0
- package/dist/traffic/components/TrafficRow.d.ts +40 -0
- package/dist/traffic/components/TrafficRow.d.ts.map +1 -0
- package/dist/traffic/components/TrafficRow.js +27 -0
- package/dist/traffic/components/TrafficRow.js.map +1 -0
- package/dist/traffic/components/TrafficStats.d.ts +18 -0
- package/dist/traffic/components/TrafficStats.d.ts.map +1 -0
- package/dist/traffic/components/TrafficStats.js +19 -0
- package/dist/traffic/components/TrafficStats.js.map +1 -0
- package/dist/traffic/components/TrafficTimeline.d.ts +81 -0
- package/dist/traffic/components/TrafficTimeline.d.ts.map +1 -0
- package/dist/traffic/components/TrafficTimeline.js +72 -0
- package/dist/traffic/components/TrafficTimeline.js.map +1 -0
- package/dist/traffic/components/format.d.ts +13 -0
- package/dist/traffic/components/format.d.ts.map +1 -0
- package/dist/traffic/components/format.js +24 -0
- package/dist/traffic/components/format.js.map +1 -0
- package/dist/traffic/components/index.d.ts +11 -0
- package/dist/traffic/components/index.d.ts.map +1 -0
- package/dist/traffic/components/index.js +11 -0
- package/dist/traffic/components/index.js.map +1 -0
- package/dist/traffic/hooks/index.d.ts +8 -0
- package/dist/traffic/hooks/index.d.ts.map +1 -0
- package/dist/traffic/hooks/index.js +8 -0
- package/dist/traffic/hooks/index.js.map +1 -0
- package/dist/traffic/hooks/useRuleHeatmap.d.ts +33 -0
- package/dist/traffic/hooks/useRuleHeatmap.d.ts.map +1 -0
- package/dist/traffic/hooks/useRuleHeatmap.js +54 -0
- package/dist/traffic/hooks/useRuleHeatmap.js.map +1 -0
- package/dist/traffic/hooks/useTrafficBuckets.d.ts +71 -0
- package/dist/traffic/hooks/useTrafficBuckets.d.ts.map +1 -0
- package/dist/traffic/hooks/useTrafficBuckets.js +74 -0
- package/dist/traffic/hooks/useTrafficBuckets.js.map +1 -0
- package/dist/traffic/hooks/useTrafficFilter.d.ts +40 -0
- package/dist/traffic/hooks/useTrafficFilter.d.ts.map +1 -0
- package/dist/traffic/hooks/useTrafficFilter.js +33 -0
- package/dist/traffic/hooks/useTrafficFilter.js.map +1 -0
- package/dist/traffic/hooks/useTrafficGroups.d.ts +47 -0
- package/dist/traffic/hooks/useTrafficGroups.d.ts.map +1 -0
- package/dist/traffic/hooks/useTrafficGroups.js +73 -0
- package/dist/traffic/hooks/useTrafficGroups.js.map +1 -0
- package/dist/traffic/hooks/useTrafficMetrics.d.ts +66 -0
- package/dist/traffic/hooks/useTrafficMetrics.d.ts.map +1 -0
- package/dist/traffic/hooks/useTrafficMetrics.js +156 -0
- package/dist/traffic/hooks/useTrafficMetrics.js.map +1 -0
- package/dist/traffic/hooks/useTrafficMonitor.d.ts +56 -0
- package/dist/traffic/hooks/useTrafficMonitor.d.ts.map +1 -0
- package/dist/traffic/hooks/useTrafficMonitor.js +58 -0
- package/dist/traffic/hooks/useTrafficMonitor.js.map +1 -0
- package/dist/traffic/hooks/useTrafficStats.d.ts +32 -0
- package/dist/traffic/hooks/useTrafficStats.d.ts.map +1 -0
- package/dist/traffic/hooks/useTrafficStats.js +45 -0
- package/dist/traffic/hooks/useTrafficStats.js.map +1 -0
- package/dist/traffic/index.d.ts +4 -0
- package/dist/traffic/index.d.ts.map +1 -0
- package/dist/traffic/index.js +3 -0
- package/dist/traffic/index.js.map +1 -0
- package/dist/traffic/types.d.ts +72 -0
- package/dist/traffic/types.d.ts.map +1 -0
- package/dist/traffic/types.js +10 -0
- package/dist/traffic/types.js.map +1 -0
- 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
|