@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,58 @@
|
|
|
1
|
+
import type { FieldType } from '../types.js';
|
|
2
|
+
import type { DocumentEditorAction, DocumentEditorState } from '../reducers/types.js';
|
|
3
|
+
export interface UseDocumentEditorOptions {
|
|
4
|
+
/** Initial document data — the same shape a `DocumentSnapshot.data()`
|
|
5
|
+
* call returns. */
|
|
6
|
+
initial?: Record<string, unknown>;
|
|
7
|
+
}
|
|
8
|
+
export interface UseDocumentEditorResult extends DocumentEditorState {
|
|
9
|
+
/** Convenience: `errorCount === 0`. */
|
|
10
|
+
isValid: boolean;
|
|
11
|
+
/** `true` once any modifying action has fired since the last
|
|
12
|
+
* `reset`. Cleared by `reset`. Does NOT clear when the user
|
|
13
|
+
* manually re-enters the original values — checking that would
|
|
14
|
+
* require a full serialization comparison on every dispatch. */
|
|
15
|
+
isDirty: boolean;
|
|
16
|
+
/** Raw dispatch — drops to the reducer-action surface. Prefer the
|
|
17
|
+
* named helpers below. */
|
|
18
|
+
dispatch: (action: DocumentEditorAction) => void;
|
|
19
|
+
/** Update a leaf value. */
|
|
20
|
+
setValue: (nodeId: string, value: unknown) => void;
|
|
21
|
+
/** Switch a node's type. Map/array nodes drop their children. */
|
|
22
|
+
setType: (nodeId: string, newType: FieldType) => void;
|
|
23
|
+
/** Set a map-child's key. */
|
|
24
|
+
setKey: (nodeId: string, key: string) => void;
|
|
25
|
+
/** Append a child to a map. */
|
|
26
|
+
addMapEntry: (parentId: string, key: string, childType: FieldType) => void;
|
|
27
|
+
/** Append a child to an array. Nested arrays are silently
|
|
28
|
+
* rejected by the reducer (Firestore disallows them). */
|
|
29
|
+
addArrayEntry: (parentId: string, childType: FieldType) => void;
|
|
30
|
+
/** Remove a node (and all its descendants). Removing the root is
|
|
31
|
+
* a no-op. */
|
|
32
|
+
remove: (nodeId: string) => void;
|
|
33
|
+
/** Restore the tree to its initial state. Clears `isDirty`. */
|
|
34
|
+
reset: () => void;
|
|
35
|
+
/** Mark one node touched (dispatch on blur). Gates error display —
|
|
36
|
+
* a freshly-added row stays quiet until the user leaves it. */
|
|
37
|
+
touch: (nodeId: string) => void;
|
|
38
|
+
/** Mark every node touched (dispatch on a submit attempt) so any
|
|
39
|
+
* hidden errors surface at once. */
|
|
40
|
+
touchAll: () => void;
|
|
41
|
+
/** Serialize the tree back to a Firestore-shaped object suitable
|
|
42
|
+
* for `setDoc` / `updateDoc`. */
|
|
43
|
+
toData: () => Record<string, unknown>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Headless document editor. Owns the entire edit state for one
|
|
47
|
+
* document via a pure reducer. Consumers either render the bundled
|
|
48
|
+
* `<DocumentEditor>` compound component over this hook, or render
|
|
49
|
+
* their own tree using the returned state.
|
|
50
|
+
*
|
|
51
|
+
* The hook builds its tree from `initial` on first mount. Changing
|
|
52
|
+
* `initial` later does NOT rebuild the tree — call `reset()` and
|
|
53
|
+
* re-initialize if you need that semantics (or remount the hook).
|
|
54
|
+
* This matches the firebase-tools-ui pattern of treating the
|
|
55
|
+
* editor as a stateful workspace.
|
|
56
|
+
*/
|
|
57
|
+
export declare function useDocumentEditor(options?: UseDocumentEditorOptions): UseDocumentEditorResult;
|
|
58
|
+
//# sourceMappingURL=useDocumentEditor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDocumentEditor.d.ts","sourceRoot":"","sources":["../../../src/firestore/hooks/useDocumentEditor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,wBAAwB;IACvC;wBACoB;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB;;;qEAGiE;IACjE,OAAO,EAAE,OAAO,CAAC;IACjB;+BAC2B;IAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACjD,2BAA2B;IAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,iEAAiE;IACjE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,KAAK,IAAI,CAAC;IACtD,6BAA6B;IAC7B,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,+BAA+B;IAC/B,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IAC3E;8DAC0D;IAC1D,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IAChE;mBACe;IACf,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,+DAA+D;IAC/D,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB;oEACgE;IAChE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC;yCACqC;IACrC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB;sCACkC;IAClC,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,wBAA6B,GACrC,uBAAuB,CAoFzB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { useCallback, useMemo, useReducer, useRef } from 'react';
|
|
2
|
+
import { initState, reducer } from '../reducers/documentEditor.js';
|
|
3
|
+
import { treeToData } from '../reducers/tree.js';
|
|
4
|
+
/**
|
|
5
|
+
* Headless document editor. Owns the entire edit state for one
|
|
6
|
+
* document via a pure reducer. Consumers either render the bundled
|
|
7
|
+
* `<DocumentEditor>` compound component over this hook, or render
|
|
8
|
+
* their own tree using the returned state.
|
|
9
|
+
*
|
|
10
|
+
* The hook builds its tree from `initial` on first mount. Changing
|
|
11
|
+
* `initial` later does NOT rebuild the tree — call `reset()` and
|
|
12
|
+
* re-initialize if you need that semantics (or remount the hook).
|
|
13
|
+
* This matches the firebase-tools-ui pattern of treating the
|
|
14
|
+
* editor as a stateful workspace.
|
|
15
|
+
*/
|
|
16
|
+
export function useDocumentEditor(options = {}) {
|
|
17
|
+
const initial = options.initial ?? {};
|
|
18
|
+
// `useRef` so the initial snapshot is computed once. The reducer
|
|
19
|
+
// owns the live tree from there on.
|
|
20
|
+
const initialRef = useRef(null);
|
|
21
|
+
if (initialRef.current == null) {
|
|
22
|
+
initialRef.current = initState(initial);
|
|
23
|
+
}
|
|
24
|
+
const [state, dispatch] = useReducer(reducer, initialRef.current);
|
|
25
|
+
const setValue = useCallback((nodeId, value) => dispatch({ type: 'setValue', nodeId, value }), []);
|
|
26
|
+
const setType = useCallback((nodeId, newType) => dispatch({ type: 'setType', nodeId, newType }), []);
|
|
27
|
+
const setKey = useCallback((nodeId, key) => dispatch({ type: 'setKey', nodeId, key }), []);
|
|
28
|
+
const addMapEntry = useCallback((parentId, key, childType) => dispatch({ type: 'addMapEntry', parentId, key, childType }), []);
|
|
29
|
+
const addArrayEntry = useCallback((parentId, childType) => dispatch({ type: 'addArrayEntry', parentId, childType }), []);
|
|
30
|
+
const remove = useCallback((nodeId) => dispatch({ type: 'remove', nodeId }), []);
|
|
31
|
+
const reset = useCallback(() => dispatch({ type: 'reset' }), []);
|
|
32
|
+
const touch = useCallback((nodeId) => dispatch({ type: 'touch', nodeId }), []);
|
|
33
|
+
const touchAll = useCallback(() => dispatch({ type: 'touchAll' }), []);
|
|
34
|
+
const toData = useCallback(() => treeToData(state.tree), [state.tree]);
|
|
35
|
+
const isDirty = state.tree !== state.initial;
|
|
36
|
+
const isValid = state.errorCount === 0;
|
|
37
|
+
return useMemo(() => ({
|
|
38
|
+
...state,
|
|
39
|
+
isDirty,
|
|
40
|
+
isValid,
|
|
41
|
+
dispatch,
|
|
42
|
+
setValue,
|
|
43
|
+
setType,
|
|
44
|
+
setKey,
|
|
45
|
+
addMapEntry,
|
|
46
|
+
addArrayEntry,
|
|
47
|
+
remove,
|
|
48
|
+
reset,
|
|
49
|
+
touch,
|
|
50
|
+
touchAll,
|
|
51
|
+
toData,
|
|
52
|
+
}), [
|
|
53
|
+
state,
|
|
54
|
+
isDirty,
|
|
55
|
+
isValid,
|
|
56
|
+
setValue,
|
|
57
|
+
setType,
|
|
58
|
+
setKey,
|
|
59
|
+
addMapEntry,
|
|
60
|
+
addArrayEntry,
|
|
61
|
+
remove,
|
|
62
|
+
reset,
|
|
63
|
+
touch,
|
|
64
|
+
touchAll,
|
|
65
|
+
toData,
|
|
66
|
+
]);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=useDocumentEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDocumentEditor.js","sourceRoot":"","sources":["../../../src/firestore/hooks/useDocumentEditor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { CollectionReference, DocumentReference, Query, QueryDocumentSnapshot } from 'pyric/firestore';
|
|
2
|
+
export interface UseDocumentListOptions {
|
|
3
|
+
collection: CollectionReference;
|
|
4
|
+
/** Optional filter / sort. If omitted, the raw collection is used. */
|
|
5
|
+
query?: Query;
|
|
6
|
+
/** Page size for cursor-based pagination. Default 50. */
|
|
7
|
+
pageSize?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface UseDocumentListResult {
|
|
10
|
+
documents: QueryDocumentSnapshot[];
|
|
11
|
+
isLoading: boolean;
|
|
12
|
+
error: Error | undefined;
|
|
13
|
+
/** True if there might be another page. The hook tracks this via
|
|
14
|
+
* the last fetch's length === pageSize. */
|
|
15
|
+
hasMore: boolean;
|
|
16
|
+
/** Fetch the next page and append. */
|
|
17
|
+
loadMore: () => void;
|
|
18
|
+
/** Create a document. If `id` is null, Firestore generates one
|
|
19
|
+
* via `addDoc`. With `onExisting: 'fail'` (CREATE semantics, the
|
|
20
|
+
* admin `create()` analog) an id that already exists rejects with
|
|
21
|
+
* `code: 'already-exists'` instead of silently overwriting —
|
|
22
|
+
* checked against the BACKEND (a `getDoc` probe), not any loaded
|
|
23
|
+
* page, so it is honest beyond pagination. Default: 'overwrite'
|
|
24
|
+
* (plain `setDoc`, the historical behavior). */
|
|
25
|
+
createDocument: (id: string | null, data: Record<string, unknown>, opts?: {
|
|
26
|
+
onExisting?: 'overwrite' | 'fail';
|
|
27
|
+
}) => Promise<DocumentReference>;
|
|
28
|
+
deleteDocument: (ref: DocumentReference) => Promise<void>;
|
|
29
|
+
/** Reset pagination and re-fetch from the first page. Useful after
|
|
30
|
+
* the consumer mutates data outside this hook. */
|
|
31
|
+
refresh: () => void;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Cursor-based paginated document list. Uses `startAfter` against
|
|
35
|
+
* the last fetched snapshot — the consumer never sees cursor
|
|
36
|
+
* mechanics. `documents` accumulates across pages.
|
|
37
|
+
*
|
|
38
|
+
* Note: this is read-via-get, not realtime. The list updates on
|
|
39
|
+
* `loadMore` / `createDocument` / `deleteDocument` / `refresh`.
|
|
40
|
+
* Realtime subscriptions for a collection live in
|
|
41
|
+
* `useFirestoreCollection`; combining the two (paginated + realtime)
|
|
42
|
+
* is non-trivial and deferred — see design rationale section M6.
|
|
43
|
+
*/
|
|
44
|
+
export declare function useDocumentList({ collection, query, pageSize, }: UseDocumentListOptions): UseDocumentListResult;
|
|
45
|
+
//# sourceMappingURL=useDocumentList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDocumentList.d.ts","sourceRoot":"","sources":["../../../src/firestore/hooks/useDocumentList.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,EACL,qBAAqB,EACtB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,mBAAmB,CAAC;IAChC,sEAAsE;IACtE,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB;gDAC4C;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB;;;;;;qDAMiD;IACjD,cAAc,EAAE,CACd,EAAE,EAAE,MAAM,GAAG,IAAI,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,CAAA;KAAE,KACzC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAChC,cAAc,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D;uDACmD;IACnD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,EAC9B,UAAU,EACV,KAAK,EACL,QAAa,GACd,EAAE,sBAAsB,GAAG,qBAAqB,CAqHhD"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
2
|
+
import { useFirestoreApi } from '../firestoreApi.js';
|
|
3
|
+
/**
|
|
4
|
+
* Cursor-based paginated document list. Uses `startAfter` against
|
|
5
|
+
* the last fetched snapshot — the consumer never sees cursor
|
|
6
|
+
* mechanics. `documents` accumulates across pages.
|
|
7
|
+
*
|
|
8
|
+
* Note: this is read-via-get, not realtime. The list updates on
|
|
9
|
+
* `loadMore` / `createDocument` / `deleteDocument` / `refresh`.
|
|
10
|
+
* Realtime subscriptions for a collection live in
|
|
11
|
+
* `useFirestoreCollection`; combining the two (paginated + realtime)
|
|
12
|
+
* is non-trivial and deferred — see design rationale section M6.
|
|
13
|
+
*/
|
|
14
|
+
export function useDocumentList({ collection, query, pageSize = 50, }) {
|
|
15
|
+
const [documents, setDocuments] = useState([]);
|
|
16
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
17
|
+
const [error, setError] = useState(undefined);
|
|
18
|
+
const [hasMore, setHasMore] = useState(false);
|
|
19
|
+
const [tick, setTick] = useState(0);
|
|
20
|
+
// The modular fns, injected: in-process `pyric/firestore` by default, or the
|
|
21
|
+
// SharedWorker client bundle when a consumer (Pyric Studio served mode) wraps
|
|
22
|
+
// the tree in a `FirestoreApiProvider`. Stable across renders per provider.
|
|
23
|
+
const { addDoc, deleteDoc, doc: docFn, getDoc, getDocs, limit: limitFn, query: queryFn, setDoc, startAfter: startAfterFn, } = useFirestoreApi();
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
let cancelled = false;
|
|
26
|
+
setDocuments([]);
|
|
27
|
+
setHasMore(false);
|
|
28
|
+
setIsLoading(true);
|
|
29
|
+
setError(undefined);
|
|
30
|
+
const baseQuery = query ?? collection;
|
|
31
|
+
const pagedQuery = queryFn(baseQuery, limitFn(pageSize));
|
|
32
|
+
getDocs(pagedQuery)
|
|
33
|
+
.then((snap) => {
|
|
34
|
+
if (cancelled)
|
|
35
|
+
return;
|
|
36
|
+
setDocuments([...snap.docs]);
|
|
37
|
+
setHasMore(snap.docs.length === pageSize);
|
|
38
|
+
setIsLoading(false);
|
|
39
|
+
})
|
|
40
|
+
.catch((e) => {
|
|
41
|
+
if (cancelled)
|
|
42
|
+
return;
|
|
43
|
+
setError(e instanceof Error ? e : new Error(String(e)));
|
|
44
|
+
setIsLoading(false);
|
|
45
|
+
});
|
|
46
|
+
return () => {
|
|
47
|
+
cancelled = true;
|
|
48
|
+
};
|
|
49
|
+
}, [collection, query, pageSize, tick]);
|
|
50
|
+
const loadMore = useCallback(() => {
|
|
51
|
+
if (!hasMore || isLoading)
|
|
52
|
+
return;
|
|
53
|
+
const last = documents[documents.length - 1];
|
|
54
|
+
if (!last)
|
|
55
|
+
return;
|
|
56
|
+
setIsLoading(true);
|
|
57
|
+
const baseQuery = query ?? collection;
|
|
58
|
+
const pagedQuery = queryFn(baseQuery, startAfterFn(last), limitFn(pageSize));
|
|
59
|
+
getDocs(pagedQuery)
|
|
60
|
+
.then((snap) => {
|
|
61
|
+
setDocuments((prev) => [...prev, ...snap.docs]);
|
|
62
|
+
setHasMore(snap.docs.length === pageSize);
|
|
63
|
+
setIsLoading(false);
|
|
64
|
+
})
|
|
65
|
+
.catch((e) => {
|
|
66
|
+
setError(e instanceof Error ? e : new Error(String(e)));
|
|
67
|
+
setIsLoading(false);
|
|
68
|
+
});
|
|
69
|
+
}, [collection, query, pageSize, documents, hasMore, isLoading]);
|
|
70
|
+
const createDocument = useCallback(async (id, data, opts) => {
|
|
71
|
+
if (id == null) {
|
|
72
|
+
const ref = await addDoc(collection, data);
|
|
73
|
+
setTick((n) => n + 1);
|
|
74
|
+
return ref;
|
|
75
|
+
}
|
|
76
|
+
const ref = docFn(collection, id);
|
|
77
|
+
if (opts?.onExisting === 'fail') {
|
|
78
|
+
// CREATE semantics without a batch/create primitive on FirestoreApi:
|
|
79
|
+
// probe the backend, then write. The probe is authoritative for the
|
|
80
|
+
// whole collection (not just a loaded page); the tiny read-then-write
|
|
81
|
+
// window is acceptable for the dev-sandbox surfaces this backs.
|
|
82
|
+
const existing = await getDoc(ref);
|
|
83
|
+
// `exists` is a method on the modular SDK snapshot but a boolean on
|
|
84
|
+
// some compat-shaped snapshots this bundle may be adapted over.
|
|
85
|
+
const exists = typeof existing.exists === 'function' ? existing.exists() : Boolean(existing.exists);
|
|
86
|
+
if (exists) {
|
|
87
|
+
const err = new Error(`Document "${id}" already exists.`);
|
|
88
|
+
err.code = 'already-exists';
|
|
89
|
+
throw err;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
await setDoc(ref, data);
|
|
93
|
+
setTick((n) => n + 1);
|
|
94
|
+
return ref;
|
|
95
|
+
}, [collection]);
|
|
96
|
+
const deleteDocument = useCallback(async (ref) => {
|
|
97
|
+
await deleteDoc(ref);
|
|
98
|
+
setTick((n) => n + 1);
|
|
99
|
+
}, []);
|
|
100
|
+
const refresh = useCallback(() => setTick((n) => n + 1), []);
|
|
101
|
+
return {
|
|
102
|
+
documents,
|
|
103
|
+
isLoading,
|
|
104
|
+
error,
|
|
105
|
+
hasMore,
|
|
106
|
+
loadMore,
|
|
107
|
+
createDocument,
|
|
108
|
+
deleteDocument,
|
|
109
|
+
refresh,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=useDocumentList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDocumentList.js","sourceRoot":"","sources":["../../../src/firestore/hooks/useDocumentList.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { CollectionReference, DocumentReference, Firestore } from 'pyric/firestore';
|
|
2
|
+
/**
|
|
3
|
+
* Lister for a document's own subcollections. Same injected-lister
|
|
4
|
+
* shape as `useCollectionList` / `ReferencePicker` use — the modular
|
|
5
|
+
* Web SDK doesn't expose a native `listCollections` on the client, so
|
|
6
|
+
* the caller wires it (sandbox in-process listing, a server proxy, or
|
|
7
|
+
* a known schema list).
|
|
8
|
+
*/
|
|
9
|
+
export type ListSubcollections = (firestore: Firestore, parent: DocumentReference) => Promise<CollectionReference[]>;
|
|
10
|
+
export interface UseDocumentSubcollectionsOptions {
|
|
11
|
+
firestore: Firestore;
|
|
12
|
+
/** The document whose subcollections to list. When `null`/`undefined`
|
|
13
|
+
* the hook stays idle (empty, not loading) — used when the preview
|
|
14
|
+
* has no ref to drill from. */
|
|
15
|
+
documentRef: DocumentReference | null | undefined;
|
|
16
|
+
listSubcollections: ListSubcollections;
|
|
17
|
+
}
|
|
18
|
+
export interface UseDocumentSubcollectionsResult {
|
|
19
|
+
subcollections: CollectionReference[];
|
|
20
|
+
isLoading: boolean;
|
|
21
|
+
error: Error | undefined;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Read a single document's subcollection list. A thin specialization of
|
|
25
|
+
* the `useCollectionList` pattern, scoped to one parent document and
|
|
26
|
+
* read-only (no create — that lives in `useCollectionList`).
|
|
27
|
+
*/
|
|
28
|
+
export declare function useDocumentSubcollections({ firestore, documentRef, listSubcollections, }: UseDocumentSubcollectionsOptions): UseDocumentSubcollectionsResult;
|
|
29
|
+
//# sourceMappingURL=useDocumentSubcollections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDocumentSubcollections.d.ts","sourceRoot":"","sources":["../../../src/firestore/hooks/useDocumentSubcollections.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,SAAS,EACV,MAAM,iBAAiB,CAAC;AAEzB;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,iBAAiB,KACtB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAEpC,MAAM,WAAW,gCAAgC;IAC/C,SAAS,EAAE,SAAS,CAAC;IACrB;;oCAEgC;IAChC,WAAW,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAC;IAClD,kBAAkB,EAAE,kBAAkB,CAAC;CACxC;AAED,MAAM,WAAW,+BAA+B;IAC9C,cAAc,EAAE,mBAAmB,EAAE,CAAC;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,SAAS,EACT,WAAW,EACX,kBAAkB,GACnB,EAAE,gCAAgC,GAAG,+BAA+B,CA0CpE"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { useEffect, useRef, useState } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Read a single document's subcollection list. A thin specialization of
|
|
4
|
+
* the `useCollectionList` pattern, scoped to one parent document and
|
|
5
|
+
* read-only (no create — that lives in `useCollectionList`).
|
|
6
|
+
*/
|
|
7
|
+
export function useDocumentSubcollections({ firestore, documentRef, listSubcollections, }) {
|
|
8
|
+
const [subcollections, setSubcollections] = useState([]);
|
|
9
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
10
|
+
const [error, setError] = useState(undefined);
|
|
11
|
+
// Stable-ref the injected lister so a fresh closure identity each
|
|
12
|
+
// render doesn't loop the effect — same pattern as useCollectionList.
|
|
13
|
+
const listRef = useRef(listSubcollections);
|
|
14
|
+
listRef.current = listSubcollections;
|
|
15
|
+
// Key the effect on the ref's path (stable across snapshot identity
|
|
16
|
+
// churn) rather than the ref object, which the SDK may re-create.
|
|
17
|
+
const path = documentRef?.path;
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
if (!documentRef) {
|
|
20
|
+
setSubcollections([]);
|
|
21
|
+
setIsLoading(false);
|
|
22
|
+
setError(undefined);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
let cancelled = false;
|
|
26
|
+
setIsLoading(true);
|
|
27
|
+
setError(undefined);
|
|
28
|
+
listRef.current(firestore, documentRef)
|
|
29
|
+
.then((list) => {
|
|
30
|
+
if (cancelled)
|
|
31
|
+
return;
|
|
32
|
+
setSubcollections(list);
|
|
33
|
+
setIsLoading(false);
|
|
34
|
+
})
|
|
35
|
+
.catch((e) => {
|
|
36
|
+
if (cancelled)
|
|
37
|
+
return;
|
|
38
|
+
setError(e instanceof Error ? e : new Error(String(e)));
|
|
39
|
+
setIsLoading(false);
|
|
40
|
+
});
|
|
41
|
+
return () => {
|
|
42
|
+
cancelled = true;
|
|
43
|
+
};
|
|
44
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
45
|
+
}, [firestore, path]);
|
|
46
|
+
return { subcollections, isLoading, error };
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=useDocumentSubcollections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDocumentSubcollections.js","sourceRoot":"","sources":["../../../src/firestore/hooks/useDocumentSubcollections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAkCpD;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,EACxC,SAAS,EACT,WAAW,EACX,kBAAkB,GACe;IACjC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAwB,EAAE,CAAC,CAAC;IAChF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAoB,SAAS,CAAC,CAAC;IAEjE,kEAAkE;IAClE,sEAAsE;IACtE,MAAM,OAAO,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC3C,OAAO,CAAC,OAAO,GAAG,kBAAkB,CAAC;IAErC,oEAAoE;IACpE,kEAAkE;IAClE,MAAM,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC;IAE/B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,iBAAiB,CAAC,EAAE,CAAC,CAAC;YACtB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,QAAQ,CAAC,SAAS,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QACD,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpB,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC;aACpC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACb,IAAI,SAAS;gBAAE,OAAO;YACtB,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACxB,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACX,IAAI,SAAS;gBAAE,OAAO;YACtB,QAAQ,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QACL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;QACF,uDAAuD;IACzD,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;IAEtB,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type Query, type QuerySnapshot } from 'pyric/firestore';
|
|
2
|
+
import type { SubscriptionState } from './useFirestoreDoc.js';
|
|
3
|
+
/**
|
|
4
|
+
* Subscribe to a Firestore query (a `Query` from `pyric/firestore`'s
|
|
5
|
+
* modular surface, including any `CollectionReference`, which extends
|
|
6
|
+
* `Query`). Returns `{ data, error, isLoading }`.
|
|
7
|
+
*
|
|
8
|
+
* Null/undefined query short-circuits to idle. Cleanup is automatic
|
|
9
|
+
* on unmount or query change. `Query` objects don't have a stable
|
|
10
|
+
* structural identity, so the consumer must memoize at the call site
|
|
11
|
+
* — pass the same instance across renders to avoid re-subscribing.
|
|
12
|
+
*/
|
|
13
|
+
export declare function useFirestoreCollection(query: Query | null | undefined): SubscriptionState<QuerySnapshot>;
|
|
14
|
+
//# sourceMappingURL=useFirestoreCollection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFirestoreCollection.d.ts","sourceRoot":"","sources":["../../../src/firestore/hooks/useFirestoreCollection.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,KAAK,EACV,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,GAC9B,iBAAiB,CAAC,aAAa,CAAC,CA+BlC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
import { onSnapshot, } from 'pyric/firestore';
|
|
3
|
+
import { coerceError } from './coerceError.js';
|
|
4
|
+
/**
|
|
5
|
+
* Subscribe to a Firestore query (a `Query` from `pyric/firestore`'s
|
|
6
|
+
* modular surface, including any `CollectionReference`, which extends
|
|
7
|
+
* `Query`). Returns `{ data, error, isLoading }`.
|
|
8
|
+
*
|
|
9
|
+
* Null/undefined query short-circuits to idle. Cleanup is automatic
|
|
10
|
+
* on unmount or query change. `Query` objects don't have a stable
|
|
11
|
+
* structural identity, so the consumer must memoize at the call site
|
|
12
|
+
* — pass the same instance across renders to avoid re-subscribing.
|
|
13
|
+
*/
|
|
14
|
+
export function useFirestoreCollection(query) {
|
|
15
|
+
const [state, setState] = useState(() => ({
|
|
16
|
+
data: undefined,
|
|
17
|
+
error: undefined,
|
|
18
|
+
isLoading: query != null,
|
|
19
|
+
}));
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
if (!query) {
|
|
22
|
+
setState({ data: undefined, error: undefined, isLoading: false });
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
setState((prev) => ({ data: prev.data, error: undefined, isLoading: true }));
|
|
26
|
+
const unsubscribe = onSnapshot(query, (snap) => setState({ data: snap, error: undefined, isLoading: false }), (err) => setState({
|
|
27
|
+
data: undefined,
|
|
28
|
+
error: coerceError(err),
|
|
29
|
+
isLoading: false,
|
|
30
|
+
}));
|
|
31
|
+
return unsubscribe;
|
|
32
|
+
}, [query]);
|
|
33
|
+
return state;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=useFirestoreCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFirestoreCollection.js","sourceRoot":"","sources":["../../../src/firestore/hooks/useFirestoreCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EACL,UAAU,GAGX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAA+B;IAE/B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAmC,GAAG,EAAE,CAAC,CAAC;QAC1E,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,KAAK,IAAI,IAAI;KACzB,CAAC,CAAC,CAAC;IAEJ,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YAClE,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAE7E,MAAM,WAAW,GAAG,UAAU,CAC5B,KAAK,EACL,CAAC,IAAI,EAAE,EAAE,CACP,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAqB,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAC/E,CAAC,GAAG,EAAE,EAAE,CACN,QAAQ,CAAC;YACP,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC;YACvB,SAAS,EAAE,KAAK;SACjB,CAAC,CACL,CAAC;QAEF,OAAO,WAAW,CAAC;IACrB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type DocumentReference, type DocumentSnapshot } from 'pyric/firestore';
|
|
2
|
+
export interface SubscriptionState<T> {
|
|
3
|
+
data: T | undefined;
|
|
4
|
+
error: Error | undefined;
|
|
5
|
+
isLoading: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Subscribe to a single Firestore document. Returns `{ data, error,
|
|
9
|
+
* isLoading }`. Null/undefined ref short-circuits to an idle state
|
|
10
|
+
* (`data: undefined, error: undefined, isLoading: false`) — useful
|
|
11
|
+
* for conditional rendering before a ref is known.
|
|
12
|
+
*
|
|
13
|
+
* Cleanup is automatic on unmount or ref change. Memoize the ref at
|
|
14
|
+
* the call site; this hook's effect re-runs on identity change.
|
|
15
|
+
*/
|
|
16
|
+
export declare function useFirestoreDoc(ref: DocumentReference | null | undefined): SubscriptionState<DocumentSnapshot>;
|
|
17
|
+
//# sourceMappingURL=useFirestoreDoc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFirestoreDoc.d.ts","sourceRoot":"","sources":["../../../src/firestore/hooks/useFirestoreDoc.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;IACpB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,GACxC,iBAAiB,CAAC,gBAAgB,CAAC,CA+BrC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
import { onSnapshot, } from 'pyric/firestore';
|
|
3
|
+
import { coerceError } from './coerceError.js';
|
|
4
|
+
/**
|
|
5
|
+
* Subscribe to a single Firestore document. Returns `{ data, error,
|
|
6
|
+
* isLoading }`. Null/undefined ref short-circuits to an idle state
|
|
7
|
+
* (`data: undefined, error: undefined, isLoading: false`) — useful
|
|
8
|
+
* for conditional rendering before a ref is known.
|
|
9
|
+
*
|
|
10
|
+
* Cleanup is automatic on unmount or ref change. Memoize the ref at
|
|
11
|
+
* the call site; this hook's effect re-runs on identity change.
|
|
12
|
+
*/
|
|
13
|
+
export function useFirestoreDoc(ref) {
|
|
14
|
+
const [state, setState] = useState(() => ({
|
|
15
|
+
data: undefined,
|
|
16
|
+
error: undefined,
|
|
17
|
+
isLoading: ref != null,
|
|
18
|
+
}));
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
if (!ref) {
|
|
21
|
+
setState({ data: undefined, error: undefined, isLoading: false });
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
setState((prev) => ({ data: prev.data, error: undefined, isLoading: true }));
|
|
25
|
+
const unsubscribe = onSnapshot(ref, (snap) => setState({ data: snap, error: undefined, isLoading: false }), (err) => setState({
|
|
26
|
+
data: undefined,
|
|
27
|
+
error: coerceError(err),
|
|
28
|
+
isLoading: false,
|
|
29
|
+
}));
|
|
30
|
+
return unsubscribe;
|
|
31
|
+
}, [ref]);
|
|
32
|
+
return state;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=useFirestoreDoc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFirestoreDoc.js","sourceRoot":"","sources":["../../../src/firestore/hooks/useFirestoreDoc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EACL,UAAU,GAGX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAQ/C;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC7B,GAAyC;IAEzC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAsC,GAAG,EAAE,CAAC,CAAC;QAC7E,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,GAAG,IAAI,IAAI;KACvB,CAAC,CAAC,CAAC;IAEJ,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YAClE,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAE7E,MAAM,WAAW,GAAG,UAAU,CAC5B,GAAG,EACH,CAAC,IAAI,EAAE,EAAE,CACP,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAwB,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAClF,CAAC,GAAG,EAAE,EAAE,CACN,QAAQ,CAAC;YACP,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC;YACvB,SAAS,EAAE,KAAK;SACjB,CAAC,CACL,CAAC;QAEF,OAAO,WAAW,CAAC;IACrB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type CollectionReference, type OrderDirection, type Query, type WhereFilterOp } from 'pyric/firestore';
|
|
2
|
+
export type QueryOp = WhereFilterOp;
|
|
3
|
+
export declare const QUERY_OPS: readonly QueryOp[];
|
|
4
|
+
/** Ops that accept an array of values. The value editor in the
|
|
5
|
+
* bundled <QueryBuilder> parses the input as JSON for these. */
|
|
6
|
+
export declare const MULTI_VALUE_OPS: ReadonlySet<QueryOp>;
|
|
7
|
+
export interface QueryCondition {
|
|
8
|
+
id: string;
|
|
9
|
+
field: string;
|
|
10
|
+
op: QueryOp;
|
|
11
|
+
value: unknown;
|
|
12
|
+
}
|
|
13
|
+
export interface QueryBuilderState {
|
|
14
|
+
conditions: QueryCondition[];
|
|
15
|
+
orderBy?: {
|
|
16
|
+
field: string;
|
|
17
|
+
direction: OrderDirection;
|
|
18
|
+
};
|
|
19
|
+
limit?: number;
|
|
20
|
+
}
|
|
21
|
+
export interface QueryBuilderActions {
|
|
22
|
+
addCondition: (c?: Partial<Omit<QueryCondition, 'id'>>) => void;
|
|
23
|
+
updateCondition: (id: string, patch: Partial<Omit<QueryCondition, 'id'>>) => void;
|
|
24
|
+
removeCondition: (id: string) => void;
|
|
25
|
+
setOrderBy: (orderBy?: {
|
|
26
|
+
field: string;
|
|
27
|
+
direction: OrderDirection;
|
|
28
|
+
}) => void;
|
|
29
|
+
setLimit: (limit?: number) => void;
|
|
30
|
+
reset: () => void;
|
|
31
|
+
/**
|
|
32
|
+
* Compose the state into a Firestore `Query`. Returns the base
|
|
33
|
+
* collection when there are no conditions / orderBy / limit.
|
|
34
|
+
* Conditions with empty `field` are skipped — the builder UI
|
|
35
|
+
* lets users add a row before they've filled it in.
|
|
36
|
+
*/
|
|
37
|
+
buildQuery: (base: CollectionReference | Query) => Query;
|
|
38
|
+
}
|
|
39
|
+
export type UseQueryBuilderResult = QueryBuilderState & QueryBuilderActions;
|
|
40
|
+
export interface UseQueryBuilderOptions {
|
|
41
|
+
/** Pre-populate the builder. */
|
|
42
|
+
initial?: Partial<QueryBuilderState>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Headless query-builder state machine. Single-level — no nested
|
|
46
|
+
* `and()`/`or()` groups in v1. Consumers compose the state into a
|
|
47
|
+
* Firestore `Query` via `buildQuery(base)` and feed that into
|
|
48
|
+
* `useDocumentList` / `useFirestoreCollection`.
|
|
49
|
+
*/
|
|
50
|
+
export declare function useQueryBuilder(options?: UseQueryBuilderOptions): UseQueryBuilderResult;
|
|
51
|
+
//# sourceMappingURL=useQueryBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useQueryBuilder.d.ts","sourceRoot":"","sources":["../../../src/firestore/hooks/useQueryBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,KAAK,EACV,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,OAAO,GAAG,aAAa,CAAC;AAEpC,eAAO,MAAM,SAAS,EAAE,SAAS,OAAO,EAW9B,CAAC;AAEX;iEACiE;AACjE,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,OAAO,CAI/C,CAAC;AAEH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,cAAc,CAAA;KAAE,CAAC;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC;IAChE,eAAe,EAAE,CACf,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,KACvC,IAAI,CAAC;IACV,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,cAAc,CAAA;KAAE,KAAK,IAAI,CAAC;IAC7E,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB;;;;;OAKG;IACH,UAAU,EAAE,CAAC,IAAI,EAAE,mBAAmB,GAAG,KAAK,KAAK,KAAK,CAAC;CAC1D;AAED,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,GAAG,mBAAmB,CAAC;AAI5E,MAAM,WAAW,sBAAsB;IACrC,gCAAgC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACtC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,OAAO,GAAE,sBAA2B,GACnC,qBAAqB,CAuGvB"}
|