@pyric/ui 0.1.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +216 -0
- 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 +62 -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 +63 -0
- package/dist/firestore/components/DocumentList.d.ts.map +1 -0
- package/dist/firestore/components/DocumentList.js +53 -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 +29 -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 +61 -0
- package/dist/firestore/hooks/useDocumentEditor.d.ts.map +1 -0
- package/dist/firestore/hooks/useDocumentEditor.js +71 -0
- package/dist/firestore/hooks/useDocumentEditor.js.map +1 -0
- package/dist/firestore/hooks/useDocumentList.d.ts +50 -0
- package/dist/firestore/hooks/useDocumentList.d.ts.map +1 -0
- package/dist/firestore/hooks/useDocumentList.js +162 -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 +36 -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 +35 -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 +21 -0
- package/dist/firestore/index.d.ts.map +1 -0
- package/dist/firestore/index.js +29 -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 +201 -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 +115 -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/firestore/valueEquality.d.ts +4 -0
- package/dist/firestore/valueEquality.d.ts.map +1 -0
- package/dist/firestore/valueEquality.js +44 -0
- package/dist/firestore/valueEquality.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/hooks/useUpdateHighlights.d.ts +18 -0
- package/dist/primitives/hooks/useUpdateHighlights.d.ts.map +1 -0
- package/dist/primitives/hooks/useUpdateHighlights.js +84 -0
- package/dist/primitives/hooks/useUpdateHighlights.js.map +1 -0
- package/dist/primitives/index.d.ts +11 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +11 -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 +104 -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 +33 -0
- package/dist/rtdb/hooks/useRtdbTree.d.ts.map +1 -0
- package/dist/rtdb/hooks/useRtdbTree.js +67 -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 +50 -0
- package/dist/rtdb/values.d.ts.map +1 -0
- package/dist/rtdb/values.js +186 -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 +66 -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 +78 -0
- package/dist/storage/components/ObjectBrowser.d.ts.map +1 -0
- package/dist/storage/components/ObjectBrowser.js +60 -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 +20 -0
- package/dist/storage/folderPlaceholder.d.ts.map +1 -0
- package/dist/storage/folderPlaceholder.js +34 -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 +105 -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 +74 -0
- package/dist/storage/hooks/useStorageDelete.d.ts.map +1 -0
- package/dist/storage/hooks/useStorageDelete.js +120 -0
- package/dist/storage/hooks/useStorageDelete.js.map +1 -0
- package/dist/storage/hooks/useStorageList.d.ts +72 -0
- package/dist/storage/hooks/useStorageList.d.ts.map +1 -0
- package/dist/storage/hooks/useStorageList.js +164 -0
- package/dist/storage/hooks/useStorageList.js.map +1 -0
- package/dist/storage/hooks/useStorageObject.d.ts +33 -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 +116 -0
- package/dist/storage/hooks/useStorageRulesGate.d.ts.map +1 -0
- package/dist/storage/hooks/useStorageRulesGate.js +150 -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 +77 -0
- package/dist/storage/pendingPrefixes.d.ts.map +1 -0
- package/dist/storage/pendingPrefixes.js +104 -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 +20 -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 +25 -0
- package/dist/traffic/components/TrafficGroupRow.js.map +1 -0
- package/dist/traffic/components/TrafficLineChart.d.ts +37 -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 +88 -0
- package/dist/traffic/components/TrafficTimeline.d.ts.map +1 -0
- package/dist/traffic/components/TrafficTimeline.js +86 -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 +127 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The events/activity domain types. These are a local, structurally-
|
|
3
|
+
* compatible mirror of `pyric`'s unified `SandboxEvent` union (and its
|
|
4
|
+
* `EventProvenance`) — the `@pyric/ui` packages never import `pyric` so
|
|
5
|
+
* the headless layer stays decoupled from the sandbox impl (the same
|
|
6
|
+
* stance the sibling `traffic/` area takes with `RequestEvent`).
|
|
7
|
+
*
|
|
8
|
+
* `sandbox.onEvent` / `sandbox.history()` are assignable as an
|
|
9
|
+
* `ActivitySource` / `ActivityEvent[]` with zero adapter code: every
|
|
10
|
+
* field here is a subset (by name + shape) of the matching field on the
|
|
11
|
+
* sandbox type. A production audit feed satisfying the same shape works
|
|
12
|
+
* too.
|
|
13
|
+
*
|
|
14
|
+
* Unlike `traffic/` (which models only Firestore `request` events, one
|
|
15
|
+
* row per evaluated op), the events area aggregates the FULL stream —
|
|
16
|
+
* Firestore `request`/`write` plus the cross-service `service_mutation`
|
|
17
|
+
* envelope (auth / storage / rtdb) — into category bands. So the local
|
|
18
|
+
* types cover the union members the digest reads, not just one kind.
|
|
19
|
+
*/
|
|
20
|
+
/** Which sandbox service emitted an event. Absent ⇒ `'firestore'`. */
|
|
21
|
+
export type ActivityService = 'firestore' | 'auth' | 'storage' | 'rtdb';
|
|
22
|
+
/** Who initiated the op behind an event. Absent ⇒ the served app. */
|
|
23
|
+
export type ActivityActor = {
|
|
24
|
+
kind: 'app';
|
|
25
|
+
} | {
|
|
26
|
+
kind: 'studio';
|
|
27
|
+
} | {
|
|
28
|
+
kind: 'agent';
|
|
29
|
+
name: string;
|
|
30
|
+
} | {
|
|
31
|
+
kind: 'app-builder';
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* The auth lens an op ran under. `admin` bypasses rules, `as` evaluates
|
|
35
|
+
* rules as a specific uid (impersonation), `app-session` is the app's
|
|
36
|
+
* own signed-in user. Absent ⇒ `app-session`.
|
|
37
|
+
*/
|
|
38
|
+
export type ActivityLens = {
|
|
39
|
+
mode: 'admin';
|
|
40
|
+
} | {
|
|
41
|
+
mode: 'as';
|
|
42
|
+
uid: string;
|
|
43
|
+
} | {
|
|
44
|
+
mode: 'app-session';
|
|
45
|
+
};
|
|
46
|
+
/** Identity in effect for an op. `null` is anonymous / signed out. */
|
|
47
|
+
export interface ActivityAuthState {
|
|
48
|
+
uid: string;
|
|
49
|
+
token?: Record<string, unknown>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Provenance carried by every event. All optional + additive — pre-
|
|
53
|
+
* provenance emitters omit them (read as firestore / app / app-session).
|
|
54
|
+
*/
|
|
55
|
+
export interface ActivityProvenance {
|
|
56
|
+
service?: ActivityService;
|
|
57
|
+
actor?: ActivityActor;
|
|
58
|
+
authLens?: ActivityLens;
|
|
59
|
+
/** Set when the op is part of an agent plan (dry-run / accept). */
|
|
60
|
+
planId?: string;
|
|
61
|
+
}
|
|
62
|
+
/** Firestore op outcome — present on `request` events only. */
|
|
63
|
+
export type ActivityResult = 'allow' | 'deny' | 'unsupported';
|
|
64
|
+
/**
|
|
65
|
+
* A Firestore `request` event — one per evaluated op. The digest reads
|
|
66
|
+
* these for denials (`result === 'deny'`) and, when no `write` event is
|
|
67
|
+
* present, for the allow trail. Structurally a subset of `RequestEvent`.
|
|
68
|
+
*/
|
|
69
|
+
export interface ActivityRequestEvent extends ActivityProvenance {
|
|
70
|
+
kind: 'request';
|
|
71
|
+
id: string;
|
|
72
|
+
at: number;
|
|
73
|
+
method: 'get' | 'list' | 'create' | 'update' | 'set' | 'delete';
|
|
74
|
+
path: string;
|
|
75
|
+
auth: ActivityAuthState | null;
|
|
76
|
+
result: ActivityResult;
|
|
77
|
+
/** Simulator debug trail. Used to surface the deciding rule on denials. */
|
|
78
|
+
reasons: string[];
|
|
79
|
+
request?: {
|
|
80
|
+
resourceData?: Record<string, unknown>;
|
|
81
|
+
};
|
|
82
|
+
resourceBefore?: {
|
|
83
|
+
data: Record<string, unknown> | null;
|
|
84
|
+
exists: boolean;
|
|
85
|
+
};
|
|
86
|
+
resourceAfter?: {
|
|
87
|
+
data: Record<string, unknown> | null;
|
|
88
|
+
exists: boolean;
|
|
89
|
+
};
|
|
90
|
+
matchedRule?: {
|
|
91
|
+
ruleIndex: number;
|
|
92
|
+
operations: string[];
|
|
93
|
+
};
|
|
94
|
+
origin: 'user' | 'listener' | 'transaction' | 'batch';
|
|
95
|
+
groupId?: string;
|
|
96
|
+
triggeredBy?: {
|
|
97
|
+
method: string;
|
|
98
|
+
path: string;
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* A committed Firestore write — `create`/`update`/`set`/`delete` that
|
|
103
|
+
* the rule engine allowed and the keyspace applied. The digest leads
|
|
104
|
+
* with these for the added/updated/removed bands (richer than `request`:
|
|
105
|
+
* carries prior/next state for the change summary). Subset of
|
|
106
|
+
* `WriteSandboxEvent`.
|
|
107
|
+
*/
|
|
108
|
+
export interface ActivityWriteEvent extends ActivityProvenance {
|
|
109
|
+
kind: 'write';
|
|
110
|
+
id: string;
|
|
111
|
+
at: number;
|
|
112
|
+
method: 'create' | 'update' | 'set' | 'delete';
|
|
113
|
+
path: string;
|
|
114
|
+
auth: ActivityAuthState | null;
|
|
115
|
+
data?: Record<string, unknown>;
|
|
116
|
+
priorState: Record<string, unknown> | null;
|
|
117
|
+
nextState: Record<string, unknown> | null;
|
|
118
|
+
groupId?: string;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Cross-service mutation — the unified envelope auth / storage / rtdb
|
|
122
|
+
* emit. The digest maps `service` + `op` to a band (signed-in, added,
|
|
123
|
+
* updated, removed, …). Subset of `ServiceMutationEvent`.
|
|
124
|
+
*/
|
|
125
|
+
export interface ActivityServiceMutationEvent extends ActivityProvenance {
|
|
126
|
+
kind: 'service_mutation';
|
|
127
|
+
id: string;
|
|
128
|
+
at: number;
|
|
129
|
+
service: 'auth' | 'storage' | 'rtdb';
|
|
130
|
+
op: string;
|
|
131
|
+
path?: string;
|
|
132
|
+
auth: ActivityAuthState | null;
|
|
133
|
+
before?: unknown;
|
|
134
|
+
after?: unknown;
|
|
135
|
+
detail?: Record<string, unknown>;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* The union members the activity digest aggregates. This is a SUBSET of
|
|
139
|
+
* `pyric`'s `SandboxEvent` — the listener-lifecycle / snapshot-delivery /
|
|
140
|
+
* session-boundary kinds carry no user-visible mutation, so the digest
|
|
141
|
+
* ignores them. The reducer accepts any object with a `kind` and skips
|
|
142
|
+
* the kinds it doesn't model, so a full `SandboxEvent[]` passes through
|
|
143
|
+
* cleanly (the extra kinds fall into the "unknown ⇒ skipped" branch).
|
|
144
|
+
*/
|
|
145
|
+
export type ActivityEvent = ActivityRequestEvent | ActivityWriteEvent | ActivityServiceMutationEvent;
|
|
146
|
+
/**
|
|
147
|
+
* The widened input the reducer accepts: any `ActivityEvent`, plus a
|
|
148
|
+
* permissive escape for unmodelled `SandboxEvent` kinds carrying a
|
|
149
|
+
* string `kind` (skipped). Lets `sandbox.history()` flow in unfiltered.
|
|
150
|
+
*/
|
|
151
|
+
export type AnyActivityEvent = ActivityEvent | {
|
|
152
|
+
kind: string;
|
|
153
|
+
[k: string]: unknown;
|
|
154
|
+
};
|
|
155
|
+
/**
|
|
156
|
+
* A subscription: register a callback, get an unsubscribe.
|
|
157
|
+
* `sandbox.onEvent` matches this signature.
|
|
158
|
+
*/
|
|
159
|
+
export type ActivitySource = (cb: (event: AnyActivityEvent) => void) => () => void;
|
|
160
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/events/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The events/activity domain types. These are a local, structurally-
|
|
3
|
+
* compatible mirror of `pyric`'s unified `SandboxEvent` union (and its
|
|
4
|
+
* `EventProvenance`) — the `@pyric/ui` packages never import `pyric` so
|
|
5
|
+
* the headless layer stays decoupled from the sandbox impl (the same
|
|
6
|
+
* stance the sibling `traffic/` area takes with `RequestEvent`).
|
|
7
|
+
*
|
|
8
|
+
* `sandbox.onEvent` / `sandbox.history()` are assignable as an
|
|
9
|
+
* `ActivitySource` / `ActivityEvent[]` with zero adapter code: every
|
|
10
|
+
* field here is a subset (by name + shape) of the matching field on the
|
|
11
|
+
* sandbox type. A production audit feed satisfying the same shape works
|
|
12
|
+
* too.
|
|
13
|
+
*
|
|
14
|
+
* Unlike `traffic/` (which models only Firestore `request` events, one
|
|
15
|
+
* row per evaluated op), the events area aggregates the FULL stream —
|
|
16
|
+
* Firestore `request`/`write` plus the cross-service `service_mutation`
|
|
17
|
+
* envelope (auth / storage / rtdb) — into category bands. So the local
|
|
18
|
+
* types cover the union members the digest reads, not just one kind.
|
|
19
|
+
*/
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/events/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { CollectionReference } from 'pyric/firestore';
|
|
3
|
+
export interface CollectionListProps {
|
|
4
|
+
collections: CollectionReference[];
|
|
5
|
+
isLoading?: boolean;
|
|
6
|
+
error?: Error;
|
|
7
|
+
/** Fired when a list item is clicked. Consumer wires navigation. */
|
|
8
|
+
onSelect?: (collection: CollectionReference) => void;
|
|
9
|
+
/** Optional empty-state node. Rendered when `collections.length`
|
|
10
|
+
* is 0 and the list isn't loading. */
|
|
11
|
+
emptyState?: ReactNode;
|
|
12
|
+
className?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Headless collection list. Takes a pre-fetched array of references
|
|
16
|
+
* (from `useCollectionList`) plus a select callback. Renders one
|
|
17
|
+
* row per collection with `data-pyric-collection-id` for styling
|
|
18
|
+
* and testing. The library does not own the data fetch — the hook
|
|
19
|
+
* does — so this component is a thin presentational layer.
|
|
20
|
+
*/
|
|
21
|
+
export declare function CollectionList({ collections, isLoading, error, onSelect, emptyState, className, }: CollectionListProps): import("react").JSX.Element;
|
|
22
|
+
//# sourceMappingURL=CollectionList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollectionList.d.ts","sourceRoot":"","sources":["../../../src/firestore/components/CollectionList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,oEAAoE;IACpE,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACrD;2CACuC;IACvC,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAC7B,WAAW,EACX,SAAS,EACT,KAAK,EACL,QAAQ,EACR,UAAU,EACV,SAAS,GACV,EAAE,mBAAmB,+BAgDrB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Headless collection list. Takes a pre-fetched array of references
|
|
4
|
+
* (from `useCollectionList`) plus a select callback. Renders one
|
|
5
|
+
* row per collection with `data-pyric-collection-id` for styling
|
|
6
|
+
* and testing. The library does not own the data fetch — the hook
|
|
7
|
+
* does — so this component is a thin presentational layer.
|
|
8
|
+
*/
|
|
9
|
+
export function CollectionList({ collections, isLoading, error, onSelect, emptyState, className, }) {
|
|
10
|
+
if (error) {
|
|
11
|
+
return (_jsx("div", { className: className, "data-pyric-ui": "collection-list", "data-pyric-error": "", role: "alert", children: error.message }));
|
|
12
|
+
}
|
|
13
|
+
if (isLoading && collections.length === 0) {
|
|
14
|
+
return (_jsx("div", { className: className, "data-pyric-ui": "collection-list", "data-pyric-loading": "" }));
|
|
15
|
+
}
|
|
16
|
+
if (collections.length === 0) {
|
|
17
|
+
return (_jsx("div", { className: className, "data-pyric-ui": "collection-list", "data-pyric-empty": "", children: emptyState }));
|
|
18
|
+
}
|
|
19
|
+
return (_jsx("ul", { className: className, "data-pyric-ui": "collection-list", children: collections.map((coll) => (_jsx("li", { "data-pyric-collection-entry": true, "data-pyric-collection-id": coll.id, children: _jsx("button", { type: "button", onClick: () => onSelect?.(coll), "data-pyric-collection-select": true, children: coll.id }) }, coll.path))) }));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=CollectionList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollectionList.js","sourceRoot":"","sources":["../../../src/firestore/components/CollectionList.tsx"],"names":[],"mappings":";AAeA;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,EAC7B,WAAW,EACX,SAAS,EACT,KAAK,EACL,QAAQ,EACR,UAAU,EACV,SAAS,GACW;IACpB,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CACL,cACE,SAAS,EAAE,SAAS,mBACN,iBAAiB,sBACd,EAAE,EACnB,IAAI,EAAC,OAAO,YAEX,KAAK,CAAC,OAAO,GACV,CACP,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1C,OAAO,CACL,cACE,SAAS,EAAE,SAAS,mBACN,iBAAiB,wBACZ,EAAE,GACrB,CACH,CAAC;IACJ,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CACL,cAAK,SAAS,EAAE,SAAS,mBAAgB,iBAAiB,sBAAkB,EAAE,YAC3E,UAAU,GACP,CACP,CAAC;IACJ,CAAC;IACD,OAAO,CACL,aAAI,SAAS,EAAE,SAAS,mBAAgB,iBAAiB,YACtD,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACzB,8EAG4B,IAAI,CAAC,EAAE,YAEjC,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,kDAG9B,IAAI,CAAC,EAAE,GACD,IAVJ,IAAI,CAAC,IAAI,CAWX,CACN,CAAC,GACC,CACN,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { CollectionReference, DocumentReference } from 'pyric/firestore';
|
|
3
|
+
import { type RecursiveDeleteImpl } from '../hooks/useRecursiveDelete.js';
|
|
4
|
+
export interface DeleteWithConfirmProps {
|
|
5
|
+
/** The doc / collection to delete. */
|
|
6
|
+
target: DocumentReference | CollectionReference;
|
|
7
|
+
/** Implementation that walks the tree + deletes. Consumer-supplied.
|
|
8
|
+
* Sandbox-backed apps usually wire `pyric/sandbox` introspection;
|
|
9
|
+
* production apps usually call a Cloud Function. */
|
|
10
|
+
impl: RecursiveDeleteImpl;
|
|
11
|
+
/** Confirm-dialog title. Defaults to a sensible derivation from
|
|
12
|
+
* the target's path. */
|
|
13
|
+
title?: string;
|
|
14
|
+
/** Confirm-dialog body. */
|
|
15
|
+
body?: ReactNode;
|
|
16
|
+
/** Label on the destructive button. */
|
|
17
|
+
confirmLabel?: string;
|
|
18
|
+
/** Fired after the delete iterator finishes successfully. */
|
|
19
|
+
onDeleted?: () => void;
|
|
20
|
+
/** Optional render override for the trigger button. */
|
|
21
|
+
renderTrigger?: (props: {
|
|
22
|
+
onClick: () => void;
|
|
23
|
+
isRunning: boolean;
|
|
24
|
+
progress: number;
|
|
25
|
+
}) => ReactNode;
|
|
26
|
+
/** Class forwarded to the default trigger button. */
|
|
27
|
+
className?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Composition that wires `useConfirm` + `useRecursiveDelete`. Requires
|
|
31
|
+
* a `<ConfirmProvider>` ancestor.
|
|
32
|
+
*
|
|
33
|
+
* The default trigger renders a plain `<button>` carrying the
|
|
34
|
+
* destructive intent (the consumer styles via `[data-pyric-destructive]`).
|
|
35
|
+
* Consumers wanting different chrome pass `renderTrigger`.
|
|
36
|
+
*/
|
|
37
|
+
export declare function DeleteWithConfirm({ target, impl, title, body, confirmLabel, onDeleted, renderTrigger, className, }: DeleteWithConfirmProps): import("react").JSX.Element;
|
|
38
|
+
//# sourceMappingURL=DeleteWithConfirm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeleteWithConfirm.d.ts","sourceRoot":"","sources":["../../../src/firestore/components/DeleteWithConfirm.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,gCAAgC,CAAC;AAExC,MAAM,WAAW,sBAAsB;IACrC,sCAAsC;IACtC,MAAM,EAAE,iBAAiB,GAAG,mBAAmB,CAAC;IAChD;;yDAEqD;IACrD,IAAI,EAAE,mBAAmB,CAAC;IAC1B;6BACyB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,uDAAuD;IACvD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QACtB,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,SAAS,EAAE,OAAO,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;KAClB,KAAK,SAAS,CAAC;IAChB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,YAAuB,EACvB,SAAS,EACT,aAAa,EACb,SAAS,GACV,EAAE,sBAAsB,+BAiCxB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useConfirm } from '../../primitives/useConfirm.js';
|
|
3
|
+
import { useRecursiveDelete, } from '../hooks/useRecursiveDelete.js';
|
|
4
|
+
/**
|
|
5
|
+
* Composition that wires `useConfirm` + `useRecursiveDelete`. Requires
|
|
6
|
+
* a `<ConfirmProvider>` ancestor.
|
|
7
|
+
*
|
|
8
|
+
* The default trigger renders a plain `<button>` carrying the
|
|
9
|
+
* destructive intent (the consumer styles via `[data-pyric-destructive]`).
|
|
10
|
+
* Consumers wanting different chrome pass `renderTrigger`.
|
|
11
|
+
*/
|
|
12
|
+
export function DeleteWithConfirm({ target, impl, title, body, confirmLabel = 'Delete', onDeleted, renderTrigger, className, }) {
|
|
13
|
+
const confirm = useConfirm();
|
|
14
|
+
const { delete: runDelete, isRunning, progress, error } = useRecursiveDelete(impl);
|
|
15
|
+
const handleClick = async () => {
|
|
16
|
+
const ok = await confirm({
|
|
17
|
+
title: title ?? `Delete ${target.path}?`,
|
|
18
|
+
body,
|
|
19
|
+
destructive: true,
|
|
20
|
+
confirmLabel,
|
|
21
|
+
});
|
|
22
|
+
if (!ok)
|
|
23
|
+
return;
|
|
24
|
+
await runDelete(target);
|
|
25
|
+
if (!error)
|
|
26
|
+
onDeleted?.();
|
|
27
|
+
};
|
|
28
|
+
if (renderTrigger) {
|
|
29
|
+
return _jsx(_Fragment, { children: renderTrigger({ onClick: handleClick, isRunning, progress }) });
|
|
30
|
+
}
|
|
31
|
+
return (_jsx("button", { type: "button", onClick: handleClick, className: className, disabled: isRunning, "data-pyric-ui": "delete-with-confirm", "data-pyric-destructive": "", "data-pyric-running": isRunning ? '' : undefined, children: isRunning ? `Deleting… (${progress})` : confirmLabel }));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=DeleteWithConfirm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeleteWithConfirm.js","sourceRoot":"","sources":["../../../src/firestore/components/DeleteWithConfirm.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EACL,kBAAkB,GAEnB,MAAM,gCAAgC,CAAC;AA4BxC;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAChC,MAAM,EACN,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,YAAY,GAAG,QAAQ,EACvB,SAAS,EACT,aAAa,EACb,SAAS,GACc;IACvB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEnF,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;QAC7B,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC;YACvB,KAAK,EAAE,KAAK,IAAI,UAAU,MAAM,CAAC,IAAI,GAAG;YACxC,IAAI;YACJ,WAAW,EAAE,IAAI;YACjB,YAAY;SACb,CAAC,CAAC;QACH,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK;YAAE,SAAS,EAAE,EAAE,CAAC;IAC5B,CAAC,CAAC;IAEF,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,4BAAG,aAAa,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAI,CAAC;IAC7E,CAAC;IAED,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,SAAS,mBACL,qBAAqB,4BACZ,EAAE,wBACL,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,YAE7C,SAAS,CAAC,CAAC,CAAC,cAAc,QAAQ,GAAG,CAAC,CAAC,CAAC,YAAY,GAC9C,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import { type UseDocumentEditorResult } from '../hooks/useDocumentEditor.js';
|
|
3
|
+
import type { FieldEditorRegistry } from '../fieldEditors/types.js';
|
|
4
|
+
export interface DocumentEditorRootProps {
|
|
5
|
+
/** Initial document data. Built into the editor's tree on first
|
|
6
|
+
* mount; later changes don't rebuild — call `editor.reset()` to
|
|
7
|
+
* re-initialize from a fresh `initial`. */
|
|
8
|
+
initial?: Record<string, unknown>;
|
|
9
|
+
/** Override or extend the built-in field editors. */
|
|
10
|
+
fieldEditors?: FieldEditorRegistry;
|
|
11
|
+
/** Called on every state change with the latest editor state. The
|
|
12
|
+
* parent typically watches `state.isValid` + `state.isDirty` to
|
|
13
|
+
* enable/disable a Save button. */
|
|
14
|
+
onChange?: (state: UseDocumentEditorResult) => void;
|
|
15
|
+
children: ReactNode;
|
|
16
|
+
className?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Wires the `useDocumentEditor` hook + field-editor registry into a
|
|
20
|
+
* React context so `<DocumentEditor.Fields>` and `<DocumentEditor.AddField>`
|
|
21
|
+
* can render the tree without prop drilling.
|
|
22
|
+
*
|
|
23
|
+
* Pattern: hook + compound component. Consumers wanting full control
|
|
24
|
+
* over the layout call `useDocumentEditor` directly and render their
|
|
25
|
+
* own tree; consumers wanting the default rendering use this.
|
|
26
|
+
*/
|
|
27
|
+
export declare function DocumentEditorRoot({ initial, fieldEditors, onChange, children, className, }: DocumentEditorRootProps): import("react").JSX.Element;
|
|
28
|
+
/** Read access to the underlying editor state from inside a Root. */
|
|
29
|
+
export declare function useDocumentEditorContext(): UseDocumentEditorResult;
|
|
30
|
+
/**
|
|
31
|
+
* Renders the top-level fields of the document. For finer control,
|
|
32
|
+
* a consumer can call `useDocumentEditorContext()` and render the
|
|
33
|
+
* tree themselves.
|
|
34
|
+
*/
|
|
35
|
+
export declare function DocumentEditorFields(): import("react").JSX.Element;
|
|
36
|
+
/**
|
|
37
|
+
* Compound root export. Consumers pattern-match via dot access:
|
|
38
|
+
*
|
|
39
|
+
* <DocumentEditor.Root initial={data} onChange={…}>
|
|
40
|
+
* <DocumentEditor.Fields />
|
|
41
|
+
* </DocumentEditor.Root>
|
|
42
|
+
*/
|
|
43
|
+
export declare const DocumentEditor: {
|
|
44
|
+
Root: typeof DocumentEditorRoot;
|
|
45
|
+
Fields: typeof DocumentEditorFields;
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=DocumentEditor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocumentEditor.d.ts","sourceRoot":"","sources":["../../../src/firestore/components/DocumentEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACrF,OAAO,EAAqB,KAAK,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAEhG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAsBpE,MAAM,WAAW,uBAAuB;IACtC;;gDAE4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,qDAAqD;IACrD,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC;;wCAEoC;IACpC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACpD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,SAAS,GACV,EAAE,uBAAuB,+BA6BzB;AAED,qEAAqE;AACrE,wBAAgB,wBAAwB,IAAI,uBAAuB,CAElE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,gCAiBnC;AAkOD;;;;;;GAMG;AACH,eAAO,MAAM,cAAc;;;CAG1B,CAAC"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext, useEffect, useRef } from 'react';
|
|
3
|
+
import { useDocumentEditor } from '../hooks/useDocumentEditor.js';
|
|
4
|
+
import { mergeFieldEditors } from '../fieldEditors/registry.js';
|
|
5
|
+
import { useContainerSize } from '../../primitives/hooks/useContainerSize.js';
|
|
6
|
+
const Ctx = createContext(null);
|
|
7
|
+
function useEditorContext() {
|
|
8
|
+
const ctx = useContext(Ctx);
|
|
9
|
+
if (!ctx) {
|
|
10
|
+
throw new Error('DocumentEditor.* components must render inside <DocumentEditor.Root>');
|
|
11
|
+
}
|
|
12
|
+
return ctx;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Wires the `useDocumentEditor` hook + field-editor registry into a
|
|
16
|
+
* React context so `<DocumentEditor.Fields>` and `<DocumentEditor.AddField>`
|
|
17
|
+
* can render the tree without prop drilling.
|
|
18
|
+
*
|
|
19
|
+
* Pattern: hook + compound component. Consumers wanting full control
|
|
20
|
+
* over the layout call `useDocumentEditor` directly and render their
|
|
21
|
+
* own tree; consumers wanting the default rendering use this.
|
|
22
|
+
*/
|
|
23
|
+
export function DocumentEditorRoot({ initial, fieldEditors, onChange, children, className, }) {
|
|
24
|
+
const editor = useDocumentEditor({ initial });
|
|
25
|
+
const registry = mergeFieldEditors(fieldEditors);
|
|
26
|
+
// Hold the latest onChange in a ref so the effect's deps don't
|
|
27
|
+
// include the callback — avoids re-firing onChange on every parent
|
|
28
|
+
// re-render that produces a new function identity.
|
|
29
|
+
const onChangeRef = useRef(onChange);
|
|
30
|
+
onChangeRef.current = onChange;
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
onChangeRef.current?.(editor);
|
|
33
|
+
}, [editor]);
|
|
34
|
+
const { ref: rootRef, size } = useContainerSize();
|
|
35
|
+
return (_jsx(Ctx.Provider, { value: { editor, fieldEditors: registry }, children: _jsx("div", { ref: rootRef, className: className, "data-pyric-ui": "document-editor", "data-pyric-is-valid": editor.isValid ? '' : undefined, "data-pyric-is-dirty": editor.isDirty ? '' : undefined, "data-size": size, children: children }) }));
|
|
36
|
+
}
|
|
37
|
+
/** Read access to the underlying editor state from inside a Root. */
|
|
38
|
+
export function useDocumentEditorContext() {
|
|
39
|
+
return useEditorContext().editor;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Renders the top-level fields of the document. For finer control,
|
|
43
|
+
* a consumer can call `useDocumentEditorContext()` and render the
|
|
44
|
+
* tree themselves.
|
|
45
|
+
*/
|
|
46
|
+
export function DocumentEditorFields() {
|
|
47
|
+
const { editor } = useEditorContext();
|
|
48
|
+
// Stable INSERTION order, never re-sorted by the (currently being
|
|
49
|
+
// typed) key — `childIds` already preserves the order fields were
|
|
50
|
+
// added in, which is exactly what must stay stable while a row's
|
|
51
|
+
// name is edited. Sorting here was the cause of rows visibly
|
|
52
|
+
// reordering mid-keystroke.
|
|
53
|
+
const rootChildren = editor.tree.childIds[editor.tree.rootId] ?? [];
|
|
54
|
+
return (_jsxs("div", { "data-pyric-editor-fields": true, children: [rootChildren.map((id) => (_jsx(Field, { nodeId: id, path: fieldPath(editor, id) }, id))), _jsx(AddMapEntry, { parentId: editor.tree.rootId })] }));
|
|
55
|
+
}
|
|
56
|
+
function fieldPath(editor, nodeId) {
|
|
57
|
+
const segments = [];
|
|
58
|
+
let current = editor.tree.nodes[nodeId];
|
|
59
|
+
while (current && current.parentId != null) {
|
|
60
|
+
const parent = editor.tree.nodes[current.parentId];
|
|
61
|
+
if (!parent)
|
|
62
|
+
break;
|
|
63
|
+
if (parent.type === 'array') {
|
|
64
|
+
const idx = (editor.tree.childIds[parent.id] ?? []).indexOf(current.id);
|
|
65
|
+
segments.unshift(`[${idx}]`);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
segments.unshift(current.key ?? '');
|
|
69
|
+
}
|
|
70
|
+
current = parent;
|
|
71
|
+
}
|
|
72
|
+
// Join — array index segments don't take a leading dot.
|
|
73
|
+
return segments.reduce((acc, seg) => {
|
|
74
|
+
if (seg.startsWith('['))
|
|
75
|
+
return `${acc}${seg}`;
|
|
76
|
+
return acc ? `${acc}.${seg}` : seg;
|
|
77
|
+
}, '');
|
|
78
|
+
}
|
|
79
|
+
function Field({ nodeId, path }) {
|
|
80
|
+
const { editor, fieldEditors } = useEditorContext();
|
|
81
|
+
const node = editor.tree.nodes[nodeId];
|
|
82
|
+
if (!node)
|
|
83
|
+
return null;
|
|
84
|
+
if (node.type === 'map') {
|
|
85
|
+
return _jsx(MapField, { node: node, path: path });
|
|
86
|
+
}
|
|
87
|
+
if (node.type === 'array') {
|
|
88
|
+
return _jsx(ArrayField, { node: node, path: path });
|
|
89
|
+
}
|
|
90
|
+
const contract = fieldEditors[node.type];
|
|
91
|
+
const EditComponent = contract?.Edit;
|
|
92
|
+
if (!EditComponent)
|
|
93
|
+
return null;
|
|
94
|
+
// Errors are computed on every keystroke (so Save can gate on
|
|
95
|
+
// `isValid`), but only DISPLAYED once the field has been touched
|
|
96
|
+
// (blurred) or a submit attempt swept the tree — otherwise a
|
|
97
|
+
// freshly-added empty row would show "required" before the user
|
|
98
|
+
// has typed anything.
|
|
99
|
+
const showError = node.touched ? node.error : undefined;
|
|
100
|
+
return (_jsxs("div", { "data-pyric-field-entry": true, "data-field-name": node.key ?? undefined, "data-pyric-error": showError ? '' : undefined, onBlur: () => editor.touch(node.id), children: [_jsx(FieldChrome, { node: node, path: path }), _jsx(EditComponent, { value: node.value, path: path, error: showError, onChange: (v) => editor.setValue(node.id, v) })] }));
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Per-field chrome: the field's key input (for map children), the
|
|
104
|
+
* type selector, and the remove button. Inline at every non-root
|
|
105
|
+
* node so consumers can hide individual pieces via `data-*` CSS.
|
|
106
|
+
*/
|
|
107
|
+
function FieldChrome({ node, path }) {
|
|
108
|
+
const { editor } = useEditorContext();
|
|
109
|
+
const parent = node.parentId != null ? editor.tree.nodes[node.parentId] : null;
|
|
110
|
+
const inMap = parent?.type === 'map';
|
|
111
|
+
const isRoot = node.id === editor.tree.rootId;
|
|
112
|
+
if (isRoot)
|
|
113
|
+
return null;
|
|
114
|
+
return (_jsxs("div", { "data-pyric-field-chrome": true, "data-pyric-field-path": path, children: [inMap ? (_jsx("input", { type: "text", value: node.key ?? '', onChange: (e) => editor.setKey(node.id, e.target.value), "aria-label": "Field name", "data-pyric-field-key-input": true, "aria-invalid": node.touched && node.error ? 'true' : undefined })) : null, _jsx(TypeSelect, { node: node }), _jsx("button", { type: "button", onClick: () => editor.remove(node.id), "data-pyric-remove": true, "aria-label": "Remove field", children: "\u00D7" })] }));
|
|
115
|
+
}
|
|
116
|
+
const ALL_TYPES = [
|
|
117
|
+
'string',
|
|
118
|
+
'number',
|
|
119
|
+
'boolean',
|
|
120
|
+
'null',
|
|
121
|
+
'timestamp',
|
|
122
|
+
'geopoint',
|
|
123
|
+
'reference',
|
|
124
|
+
'bytes',
|
|
125
|
+
'vector',
|
|
126
|
+
'map',
|
|
127
|
+
'array',
|
|
128
|
+
];
|
|
129
|
+
function TypeSelect({ node }) {
|
|
130
|
+
const { editor } = useEditorContext();
|
|
131
|
+
const parent = node.parentId != null ? editor.tree.nodes[node.parentId] : null;
|
|
132
|
+
// Firestore disallows nested arrays — filter that option out
|
|
133
|
+
// when the parent is an array.
|
|
134
|
+
const options = ALL_TYPES.filter((t) => !(parent?.type === 'array' && t === 'array'));
|
|
135
|
+
return (_jsx("select", { value: node.type, onChange: (e) => editor.setType(node.id, e.target.value), "aria-label": "Field type", "data-pyric-field-type-select": true, children: options.map((t) => (_jsx("option", { value: t, children: t }, t))) }));
|
|
136
|
+
}
|
|
137
|
+
function MapField({ node, path }) {
|
|
138
|
+
const { editor } = useEditorContext();
|
|
139
|
+
// Stable insertion order — same rationale as `DocumentEditorFields`.
|
|
140
|
+
const children = editor.tree.childIds[node.id] ?? [];
|
|
141
|
+
return (_jsxs("div", { "data-pyric-field-entry": true, "data-pyric-field-type": "map", "data-field-name": node.key ?? undefined, children: [node.id !== editor.tree.rootId ? _jsx(FieldChrome, { node: node, path: path }) : null, _jsx("div", { "data-pyric-map-children": true, children: children.map((childId) => {
|
|
142
|
+
const child = editor.tree.nodes[childId];
|
|
143
|
+
if (!child)
|
|
144
|
+
return null;
|
|
145
|
+
const childPath = path ? `${path}.${child.key ?? ''}` : child.key ?? '';
|
|
146
|
+
return _jsx(Field, { nodeId: childId, path: childPath }, childId);
|
|
147
|
+
}) }), _jsx(AddMapEntry, { parentId: node.id })] }));
|
|
148
|
+
}
|
|
149
|
+
function ArrayField({ node, path }) {
|
|
150
|
+
const { editor } = useEditorContext();
|
|
151
|
+
const children = editor.tree.childIds[node.id] ?? [];
|
|
152
|
+
return (_jsxs("div", { "data-pyric-field-entry": true, "data-pyric-field-type": "array", "data-field-name": node.key ?? undefined, children: [_jsx(FieldChrome, { node: node, path: path }), _jsx("ol", { "data-pyric-array-children": true, children: children.map((childId, idx) => {
|
|
153
|
+
const childPath = path ? `${path}[${idx}]` : `[${idx}]`;
|
|
154
|
+
return (_jsx("li", { "data-field-index": String(idx), children: _jsx(Field, { nodeId: childId, path: childPath }) }, childId));
|
|
155
|
+
}) }), _jsx(AddArrayEntry, { parentId: node.id })] }));
|
|
156
|
+
}
|
|
157
|
+
function AddMapEntry({ parentId }) {
|
|
158
|
+
const { editor } = useEditorContext();
|
|
159
|
+
return (_jsx("button", { type: "button", "data-pyric-add-map-entry": true, onClick: () => editor.addMapEntry(parentId, '', 'string'), children: "+ Add field" }));
|
|
160
|
+
}
|
|
161
|
+
function AddArrayEntry({ parentId }) {
|
|
162
|
+
const { editor } = useEditorContext();
|
|
163
|
+
return (_jsx("button", { type: "button", "data-pyric-add-array-entry": true, onClick: () => editor.addArrayEntry(parentId, 'string'), children: "+ Add item" }));
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Compound root export. Consumers pattern-match via dot access:
|
|
167
|
+
*
|
|
168
|
+
* <DocumentEditor.Root initial={data} onChange={…}>
|
|
169
|
+
* <DocumentEditor.Fields />
|
|
170
|
+
* </DocumentEditor.Root>
|
|
171
|
+
*/
|
|
172
|
+
export const DocumentEditor = {
|
|
173
|
+
Root: DocumentEditorRoot,
|
|
174
|
+
Fields: DocumentEditorFields,
|
|
175
|
+
};
|
|
176
|
+
//# sourceMappingURL=DocumentEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocumentEditor.js","sourceRoot":"","sources":["../../../src/firestore/components/DocumentEditor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { DocumentReference, QueryDocumentSnapshot } from 'pyric/firestore';
|
|
3
|
+
export interface DocumentListProps {
|
|
4
|
+
documents: QueryDocumentSnapshot[];
|
|
5
|
+
isLoading?: boolean;
|
|
6
|
+
error?: Error;
|
|
7
|
+
hasMore?: boolean;
|
|
8
|
+
onSelect?: (ref: DocumentReference) => void;
|
|
9
|
+
/** Fired when the user requests another page. Wire to the hook's
|
|
10
|
+
* `loadMore`. The component will not render a Load More button
|
|
11
|
+
* when this is undefined. */
|
|
12
|
+
onLoadMore?: () => void;
|
|
13
|
+
/**
|
|
14
|
+
* Optional renderer for the row label. Default renders the doc id.
|
|
15
|
+
* Override to show a field value alongside, an icon, etc.
|
|
16
|
+
*/
|
|
17
|
+
renderLabel?: (doc: QueryDocumentSnapshot) => ReactNode;
|
|
18
|
+
/**
|
|
19
|
+
* Optional per-row action(s), rendered as a SIBLING of the row's
|
|
20
|
+
* select button inside the entry (not nested in it — so the action
|
|
21
|
+
* carries its own click handling without an invalid button-in-button).
|
|
22
|
+
* Used for row-level affordances like delete.
|
|
23
|
+
*/
|
|
24
|
+
renderRowAction?: (doc: QueryDocumentSnapshot) => ReactNode;
|
|
25
|
+
emptyState?: ReactNode;
|
|
26
|
+
className?: string;
|
|
27
|
+
/** Stable collection/query identity used to reset update highlighting when
|
|
28
|
+
* the rendered list changes scope. */
|
|
29
|
+
updateScope?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Above this row count, the list switches to virtualization via
|
|
32
|
+
* `<VirtualList>`. Default 100. Set to `Infinity` to disable
|
|
33
|
+
* (e.g. when measuring layout shifts is more important than
|
|
34
|
+
* scroll perf).
|
|
35
|
+
*/
|
|
36
|
+
virtualizeThreshold?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Estimated row height when virtualizing. Default 36 — matches
|
|
39
|
+
* a single-line text button at 13px font + ~10px padding. Pass
|
|
40
|
+
* a function for variable sizing (TanStack measures the actual
|
|
41
|
+
* height via ResizeObserver after the first paint anyway).
|
|
42
|
+
*/
|
|
43
|
+
rowHeight?: number | ((index: number) => number);
|
|
44
|
+
/**
|
|
45
|
+
* Pixel height the virtualized scroll container fills. Only
|
|
46
|
+
* applies when `documents.length > virtualizeThreshold`. Default
|
|
47
|
+
* `'60vh'` — consumers usually constrain via their layout.
|
|
48
|
+
*/
|
|
49
|
+
virtualizedHeight?: number | string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Headless document list. Below `virtualizeThreshold`, renders a
|
|
53
|
+
* plain `<ul>`; above it, switches to TanStack-Virtual via
|
|
54
|
+
* `<VirtualList>` so 10k-doc collections don't bloat the DOM.
|
|
55
|
+
*
|
|
56
|
+
* The hook owns pagination state; this component just renders. The
|
|
57
|
+
* Load More button only renders when `hasMore` is true AND
|
|
58
|
+
* `onLoadMore` is provided. Consumers wanting infinite scroll
|
|
59
|
+
* trigger `onLoadMore` from a sentinel `IntersectionObserver` in
|
|
60
|
+
* their own code — the component doesn't bake that policy in.
|
|
61
|
+
*/
|
|
62
|
+
export declare function DocumentList({ documents, isLoading, error, hasMore, onSelect, onLoadMore, renderLabel, renderRowAction, emptyState, className, updateScope, virtualizeThreshold, rowHeight, virtualizedHeight, }: DocumentListProps): import("react").JSX.Element;
|
|
63
|
+
//# sourceMappingURL=DocumentList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocumentList.d.ts","sourceRoot":"","sources":["../../../src/firestore/components/DocumentList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAehF,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC5C;;kCAE8B;IAC9B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,qBAAqB,KAAK,SAAS,CAAC;IACxD;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,qBAAqB,KAAK,SAAS,CAAC;IAC5D,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;0CACsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IACjD;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACrC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,SAAS,EACT,KAAK,EACL,OAAO,EACP,QAAQ,EACR,UAAU,EACV,WAAW,EACX,eAAe,EACf,UAAU,EACV,SAAS,EACT,WAA6B,EAC7B,mBAAyB,EACzB,SAAc,EACd,iBAA0B,GAC3B,EAAE,iBAAiB,+BA6HnB"}
|