@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,46 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { VirtualList } from '../../primitives/VirtualList.js';
|
|
3
|
+
import { providerLabel } from '../providers.js';
|
|
4
|
+
function defaultIdentifier(user) {
|
|
5
|
+
return user.email ?? user.phoneNumber ?? (user.isAnonymous ? 'anonymous' : user.uid);
|
|
6
|
+
}
|
|
7
|
+
function defaultProviders(user) {
|
|
8
|
+
if (user.isAnonymous && user.providerUserInfo.length === 0) {
|
|
9
|
+
return _jsx("span", { "data-pyric-provider-id": "anonymous", children: providerLabel('anonymous') });
|
|
10
|
+
}
|
|
11
|
+
return user.providerUserInfo.map((p) => (_jsx("span", { "data-pyric-provider-id": p.providerId, children: providerLabel(p.providerId) }, p.providerId)));
|
|
12
|
+
}
|
|
13
|
+
function defaultFormatDate(iso) {
|
|
14
|
+
if (!iso)
|
|
15
|
+
return '—';
|
|
16
|
+
const d = new Date(iso);
|
|
17
|
+
return Number.isNaN(d.getTime()) ? '—' : d.toLocaleDateString();
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Headless users table — the emulator UI's columns (Identifier,
|
|
21
|
+
* Provider, Created, Signed In, User UID, actions) over the
|
|
22
|
+
* `data-pyric-*` styling contract, with role-based table semantics so
|
|
23
|
+
* rows can virtualize (a real `<table>` can't wrap a scroll container).
|
|
24
|
+
*
|
|
25
|
+
* The hook (`useAuthUsers`) owns data + filter state; this component
|
|
26
|
+
* just renders. Disabled accounts carry `data-pyric-user-disabled` for
|
|
27
|
+
* dimmed styling.
|
|
28
|
+
*/
|
|
29
|
+
export function AuthUserList({ users, isLoading, error, filter, onSelect, renderIdentifier, renderProviders, renderActions, formatDate = defaultFormatDate, emptyState, noResultsState, className, virtualizeThreshold = 100, rowHeight = 44, virtualizedHeight = '60vh', }) {
|
|
30
|
+
if (error) {
|
|
31
|
+
return (_jsx("div", { className: className, "data-pyric-ui": "auth-user-list", "data-pyric-error": "", role: "alert", children: error.message }));
|
|
32
|
+
}
|
|
33
|
+
if (isLoading && users.length === 0) {
|
|
34
|
+
return _jsx("div", { className: className, "data-pyric-ui": "auth-user-list", "data-pyric-loading": "" });
|
|
35
|
+
}
|
|
36
|
+
if (users.length === 0) {
|
|
37
|
+
const filtered = Boolean(filter?.trim());
|
|
38
|
+
return (_jsx("div", { className: className, "data-pyric-ui": "auth-user-list", "data-pyric-empty": "", "data-pyric-no-results": filtered ? '' : undefined, children: filtered
|
|
39
|
+
? (noResultsState ?? 'No results')
|
|
40
|
+
: (emptyState ?? 'No users for this project yet') }));
|
|
41
|
+
}
|
|
42
|
+
const virtualized = users.length > virtualizeThreshold;
|
|
43
|
+
const row = (user) => (_jsxs("div", { role: "row", "data-pyric-user-entry": true, "data-pyric-user-uid": user.uid, "data-pyric-user-disabled": user.disabled ? '' : undefined, children: [_jsx("span", { role: "cell", "data-pyric-user-cell": "identifier", children: onSelect ? (_jsx("button", { type: "button", "data-pyric-user-select": true, onClick: () => onSelect(user), children: renderIdentifier ? renderIdentifier(user) : defaultIdentifier(user) })) : ((renderIdentifier ?? defaultIdentifier)(user)) }), _jsx("span", { role: "cell", "data-pyric-user-cell": "providers", children: (renderProviders ?? defaultProviders)(user) }), _jsx("span", { role: "cell", "data-pyric-user-cell": "created", children: formatDate(user.createdAt) }), _jsx("span", { role: "cell", "data-pyric-user-cell": "signed-in", children: formatDate(user.lastLoginAt) }), _jsx("span", { role: "cell", "data-pyric-user-cell": "uid", children: user.uid }), renderActions ? (_jsx("span", { role: "cell", "data-pyric-user-cell": "actions", children: renderActions(user) })) : null] }, user.uid));
|
|
44
|
+
return (_jsxs("div", { className: className, role: "table", "aria-label": "Authentication users", "data-pyric-ui": "auth-user-list", "data-pyric-virtualized": virtualized ? '' : undefined, children: [_jsxs("div", { role: "row", "data-pyric-user-header": true, children: [_jsx("span", { role: "columnheader", "data-pyric-user-cell": "identifier", children: "Identifier" }), _jsx("span", { role: "columnheader", "data-pyric-user-cell": "providers", children: "Provider" }), _jsx("span", { role: "columnheader", "data-pyric-user-cell": "created", children: "Created" }), _jsx("span", { role: "columnheader", "data-pyric-user-cell": "signed-in", children: "Signed In" }), _jsx("span", { role: "columnheader", "data-pyric-user-cell": "uid", children: "User UID" }), renderActions ? (_jsx("span", { role: "columnheader", "data-pyric-user-cell": "actions", "aria-label": "Actions" })) : null] }), virtualized ? (_jsx(VirtualList, { items: users, estimateSize: rowHeight, height: virtualizedHeight, getItemKey: (user) => user.uid, renderItem: row })) : (_jsx("div", { role: "rowgroup", "data-pyric-user-rows": true, children: users.map(row) }))] }));
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=AuthUserList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthUserList.js","sourceRoot":"","sources":["../../../src/auth/components/AuthUserList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface ClaimsFieldProps {
|
|
3
|
+
/** Raw claims JSON text. */
|
|
4
|
+
value: string;
|
|
5
|
+
onChange: (text: string) => void;
|
|
6
|
+
/** Validation message (from `validateSerializedClaims` /
|
|
7
|
+
* `useAuthUserEditor().errors.claims`). Renders a `role="alert"`
|
|
8
|
+
* paragraph and marks the textarea invalid. */
|
|
9
|
+
error?: string;
|
|
10
|
+
/** Helper text under the field (rules-usage hint by default). */
|
|
11
|
+
hint?: ReactNode;
|
|
12
|
+
placeholder?: string;
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Headless custom-claims textarea — the emulator UI's
|
|
17
|
+
* `customAttributes` control. Standalone so custom forms can reuse the
|
|
18
|
+
* exact field (the playground's sign-in helper and the user form both
|
|
19
|
+
* render one); validation itself lives in `validateSerializedClaims`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function ClaimsField({ value, onChange, error, hint, placeholder, className, }: ClaimsFieldProps): import("react").JSX.Element;
|
|
22
|
+
//# sourceMappingURL=ClaimsField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaimsField.d.ts","sourceRoot":"","sources":["../../../src/auth/components/ClaimsField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,gBAAgB;IAC/B,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC;;oDAEgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,WAAgC,EAChC,SAAS,GACV,EAAE,gBAAgB,+BAoBlB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Headless custom-claims textarea — the emulator UI's
|
|
4
|
+
* `customAttributes` control. Standalone so custom forms can reuse the
|
|
5
|
+
* exact field (the playground's sign-in helper and the user form both
|
|
6
|
+
* render one); validation itself lives in `validateSerializedClaims`.
|
|
7
|
+
*/
|
|
8
|
+
export function ClaimsField({ value, onChange, error, hint, placeholder = '{"role":"admin"}', className, }) {
|
|
9
|
+
return (_jsxs("div", { className: className, "data-pyric-ui": "claims-field", children: [_jsx("textarea", { "data-pyric-field": "claims", "data-pyric-claims-invalid": error != null ? '' : undefined, "aria-label": "Custom claims (optional)", "aria-invalid": error != null || undefined, placeholder: placeholder, value: value, onChange: (e) => onChange(e.target.value) }), error != null && (_jsx("p", { role: "alert", "data-pyric-claims-error": true, children: error })), hint != null && _jsx("p", { "data-pyric-claims-hint": true, children: hint })] }));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=ClaimsField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaimsField.js","sourceRoot":"","sources":["../../../src/auth/components/ClaimsField.tsx"],"names":[],"mappings":";AAgBA;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,WAAW,GAAG,kBAAkB,EAChC,SAAS,GACQ;IACjB,OAAO,CACL,eAAK,SAAS,EAAE,SAAS,mBAAgB,cAAc,aACrD,uCACmB,QAAQ,+BACE,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,gBAC9C,0BAA0B,kBACvB,KAAK,IAAI,IAAI,IAAI,SAAS,EACxC,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GACzC,EACD,KAAK,IAAI,IAAI,IAAI,CAChB,YAAG,IAAI,EAAC,OAAO,6CACZ,KAAK,GACJ,CACL,EACA,IAAI,IAAI,IAAI,IAAI,sDAA2B,IAAI,GAAK,IACjD,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { AuthUserRecord } from 'pyric/auth';
|
|
3
|
+
/** Shared trigger contract for the confirm-gated destructive actions. */
|
|
4
|
+
interface TriggerProps {
|
|
5
|
+
onClick: () => void;
|
|
6
|
+
}
|
|
7
|
+
export interface DeleteUserWithConfirmProps {
|
|
8
|
+
user: AuthUserRecord;
|
|
9
|
+
/** Runs after the user confirms. Wire to `useAuthUsers().deleteUser`. */
|
|
10
|
+
onDelete: (uid: string) => void;
|
|
11
|
+
title?: string;
|
|
12
|
+
body?: ReactNode;
|
|
13
|
+
confirmLabel?: string;
|
|
14
|
+
/** Trigger override; default is a plain destructive `<button>`. */
|
|
15
|
+
renderTrigger?: (props: TriggerProps) => ReactNode;
|
|
16
|
+
className?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Confirm-gated single-user delete (the emulator UI's row-menu
|
|
20
|
+
* "Delete user"). Requires a `<ConfirmProvider>` ancestor.
|
|
21
|
+
*/
|
|
22
|
+
export declare function DeleteUserWithConfirm({ user, onDelete, title, body, confirmLabel, renderTrigger, className, }: DeleteUserWithConfirmProps): import("react").JSX.Element;
|
|
23
|
+
export interface ClearUsersWithConfirmProps {
|
|
24
|
+
/** Runs after the user confirms. Wire to `useAuthUsers().clearUsers`. */
|
|
25
|
+
onClear: () => void;
|
|
26
|
+
/** Current user count, interpolated into the default body. */
|
|
27
|
+
count?: number;
|
|
28
|
+
title?: string;
|
|
29
|
+
body?: ReactNode;
|
|
30
|
+
confirmLabel?: string;
|
|
31
|
+
renderTrigger?: (props: TriggerProps) => ReactNode;
|
|
32
|
+
className?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Confirm-gated clear-all (the emulator UI's "Clear all data").
|
|
36
|
+
* Requires a `<ConfirmProvider>` ancestor.
|
|
37
|
+
*/
|
|
38
|
+
export declare function ClearUsersWithConfirm({ onClear, count, title, body, confirmLabel, renderTrigger, className, }: ClearUsersWithConfirmProps): import("react").JSX.Element;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=confirmActions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirmActions.d.ts","sourceRoot":"","sources":["../../../src/auth/components/confirmActions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,yEAAyE;AACzE,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,cAAc,CAAC;IACrB,yEAAyE;IACzE,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,SAAS,CAAC;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,IAAI,EACJ,QAAQ,EACR,KAAqB,EACrB,IAAI,EACJ,YAAuB,EACvB,aAAa,EACb,SAAS,GACV,EAAE,0BAA0B,+BAuB5B;AAED,MAAM,WAAW,0BAA0B;IACzC,yEAAyE;IACzE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,SAAS,CAAC;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,OAAO,EACP,KAAK,EACL,KAAyB,EACzB,IAAI,EACJ,YAAsB,EACtB,aAAa,EACb,SAAS,GACV,EAAE,0BAA0B,+BA2B5B"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useConfirm } from '../../primitives/useConfirm.js';
|
|
3
|
+
function identifierOf(user) {
|
|
4
|
+
return user.email ?? user.phoneNumber ?? user.displayName ?? user.uid;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Confirm-gated single-user delete (the emulator UI's row-menu
|
|
8
|
+
* "Delete user"). Requires a `<ConfirmProvider>` ancestor.
|
|
9
|
+
*/
|
|
10
|
+
export function DeleteUserWithConfirm({ user, onDelete, title = 'Delete user', body, confirmLabel = 'Delete', renderTrigger, className, }) {
|
|
11
|
+
const confirm = useConfirm();
|
|
12
|
+
const handleClick = async () => {
|
|
13
|
+
const ok = await confirm({
|
|
14
|
+
title,
|
|
15
|
+
body: body ?? `This will permanently delete ${identifierOf(user)}.`,
|
|
16
|
+
destructive: true,
|
|
17
|
+
confirmLabel,
|
|
18
|
+
});
|
|
19
|
+
if (ok)
|
|
20
|
+
onDelete(user.uid);
|
|
21
|
+
};
|
|
22
|
+
if (renderTrigger)
|
|
23
|
+
return _jsx(_Fragment, { children: renderTrigger({ onClick: handleClick }) });
|
|
24
|
+
return (_jsx("button", { type: "button", className: className, "data-pyric-ui": "delete-user", "data-pyric-destructive": true, onClick: handleClick, children: "Delete user" }));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Confirm-gated clear-all (the emulator UI's "Clear all data").
|
|
28
|
+
* Requires a `<ConfirmProvider>` ancestor.
|
|
29
|
+
*/
|
|
30
|
+
export function ClearUsersWithConfirm({ onClear, count, title = 'Clear all users', body, confirmLabel = 'Clear', renderTrigger, className, }) {
|
|
31
|
+
const confirm = useConfirm();
|
|
32
|
+
const handleClick = async () => {
|
|
33
|
+
const ok = await confirm({
|
|
34
|
+
title,
|
|
35
|
+
body: body ??
|
|
36
|
+
(count != null
|
|
37
|
+
? `This will permanently delete all ${count} users.`
|
|
38
|
+
: 'This will permanently delete every user.'),
|
|
39
|
+
destructive: true,
|
|
40
|
+
confirmLabel,
|
|
41
|
+
});
|
|
42
|
+
if (ok)
|
|
43
|
+
onClear();
|
|
44
|
+
};
|
|
45
|
+
if (renderTrigger)
|
|
46
|
+
return _jsx(_Fragment, { children: renderTrigger({ onClick: handleClick }) });
|
|
47
|
+
return (_jsx("button", { type: "button", className: className, "data-pyric-ui": "clear-users", "data-pyric-destructive": true, onClick: handleClick, children: "Clear all users" }));
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=confirmActions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirmActions.js","sourceRoot":"","sources":["../../../src/auth/components/confirmActions.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAmB5D,SAAS,YAAY,CAAC,IAAoB;IACxC,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,EACpC,IAAI,EACJ,QAAQ,EACR,KAAK,GAAG,aAAa,EACrB,IAAI,EACJ,YAAY,GAAG,QAAQ,EACvB,aAAa,EACb,SAAS,GACkB;IAC3B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;QAC7B,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC;YACvB,KAAK;YACL,IAAI,EAAE,IAAI,IAAI,gCAAgC,YAAY,CAAC,IAAI,CAAC,GAAG;YACnE,WAAW,EAAE,IAAI;YACjB,YAAY;SACb,CAAC,CAAC;QACH,IAAI,EAAE;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC,CAAC;IACF,IAAI,aAAa;QAAE,OAAO,4BAAG,aAAa,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,GAAI,CAAC;IACzE,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,SAAS,mBACN,aAAa,kCAE3B,OAAO,EAAE,WAAW,4BAGb,CACV,CAAC;AACJ,CAAC;AAcD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,EACpC,OAAO,EACP,KAAK,EACL,KAAK,GAAG,iBAAiB,EACzB,IAAI,EACJ,YAAY,GAAG,OAAO,EACtB,aAAa,EACb,SAAS,GACkB;IAC3B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;QAC7B,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC;YACvB,KAAK;YACL,IAAI,EACF,IAAI;gBACJ,CAAC,KAAK,IAAI,IAAI;oBACZ,CAAC,CAAC,oCAAoC,KAAK,SAAS;oBACpD,CAAC,CAAC,0CAA0C,CAAC;YACjD,WAAW,EAAE,IAAI;YACjB,YAAY;SACb,CAAC,CAAC;QACH,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC;IACF,IAAI,aAAa;QAAE,OAAO,4BAAG,aAAa,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,GAAI,CAAC;IACzE,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,SAAS,mBACN,aAAa,kCAE3B,OAAO,EAAE,WAAW,gCAGb,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sign-in helper controller — the host side of `pyric/auth`'s
|
|
3
|
+
* `AuthFlowResolver` seam.
|
|
4
|
+
*
|
|
5
|
+
* `pyric/auth` stays UI-free: `signInWithPopup` / `signInWithRedirect`
|
|
6
|
+
* delegate to a resolver. This controller IS that resolver's host
|
|
7
|
+
* implementation — it parks the SDK's promise, drives a host UI (an
|
|
8
|
+
* account picker + add-account form, e.g. `<AuthSignInHelper>`), and
|
|
9
|
+
* settles the promise when the user picks an identity, adds one, or
|
|
10
|
+
* cancels. React components stay thin presentational shells over this;
|
|
11
|
+
* all the settle/seed logic lives here so it's testable without a DOM.
|
|
12
|
+
*
|
|
13
|
+
* Faithful to the Firebase emulator: "add account" mints a sandbox
|
|
14
|
+
* identity with optional custom claims (the emulator's
|
|
15
|
+
* `customAttributes`), so a rule gated on `request.auth.token.<claim>`
|
|
16
|
+
* works against live sandbox traffic. Credential + token synthesis is
|
|
17
|
+
* backend-owned (`sandbox.createSignInCredential`) — this controller
|
|
18
|
+
* only drives the UI flow and settles the parked promise.
|
|
19
|
+
*/
|
|
20
|
+
import { sandbox as authSandbox, type Auth, type AuthFlowRequest, type AuthFlowResolver } from 'pyric/auth';
|
|
21
|
+
/** A field set for "add new account" — mirrors the emulator's add-user form. */
|
|
22
|
+
export interface NewIdentitySpec {
|
|
23
|
+
email: string;
|
|
24
|
+
displayName?: string;
|
|
25
|
+
/** Parsed custom claims (the emulator's `customAttributes`). */
|
|
26
|
+
customClaims?: Record<string, unknown>;
|
|
27
|
+
}
|
|
28
|
+
/** One pickable identity, as reported by `sandbox.listIdentities`. */
|
|
29
|
+
export type SandboxIdentity = ReturnType<typeof authSandbox.listIdentities>[number];
|
|
30
|
+
/** Snapshot the helper UI renders from. */
|
|
31
|
+
export interface HelperState {
|
|
32
|
+
/** The in-flight request, or null when the helper is closed. */
|
|
33
|
+
request: AuthFlowRequest | null;
|
|
34
|
+
/** Existing identities to pick from (seeded + previously created). */
|
|
35
|
+
identities: SandboxIdentity[];
|
|
36
|
+
}
|
|
37
|
+
export declare class AuthFlowController {
|
|
38
|
+
private readonly auth;
|
|
39
|
+
private pending;
|
|
40
|
+
private readonly listeners;
|
|
41
|
+
/** Memoized {@link snapshot} result, invalidated by {@link emit}.
|
|
42
|
+
* `useSyncExternalStore` compares consecutive `getSnapshot()` results
|
|
43
|
+
* with `Object.is` — an uncached object here re-renders forever. */
|
|
44
|
+
private cached;
|
|
45
|
+
constructor(auth: Auth);
|
|
46
|
+
/** Wire this controller's resolver into the auth handle. Paired with
|
|
47
|
+
* {@link uninstall} for use in a React effect (install in the body,
|
|
48
|
+
* uninstall in the cleanup) — StrictMode-safe. */
|
|
49
|
+
install(): void;
|
|
50
|
+
uninstall(): void;
|
|
51
|
+
/** The resolver to hand to `sandbox.setAuthFlowResolver`. Popup and
|
|
52
|
+
* redirect share one implementation (the sandbox has no navigation). */
|
|
53
|
+
resolver(): AuthFlowResolver;
|
|
54
|
+
subscribe(fn: () => void): () => void;
|
|
55
|
+
snapshot(): HelperState;
|
|
56
|
+
private emit;
|
|
57
|
+
/** Pick an existing identity (by uid). The backend mints the credential
|
|
58
|
+
* (and records the provider on the identity). */
|
|
59
|
+
pick(uid: string): void;
|
|
60
|
+
/** Add + sign in as a new identity. The backend creates the identity
|
|
61
|
+
* (so claims resolve in rules and it shows up in the picker next time)
|
|
62
|
+
* and mints the credential in one step.
|
|
63
|
+
*
|
|
64
|
+
* Credential creation happens BEFORE {@link take}'s emit: subscribers
|
|
65
|
+
* recompute the snapshot synchronously on emit, so creating after would
|
|
66
|
+
* publish a stale identity list (a `useSyncExternalStore` consumer
|
|
67
|
+
* would miss the new account until the next unrelated emit). */
|
|
68
|
+
add(spec: NewIdentitySpec): void;
|
|
69
|
+
/** Dismiss — rejects with the faithful `auth/popup-closed-by-user`. */
|
|
70
|
+
cancel(): void;
|
|
71
|
+
private take;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/auth/controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EACL,OAAO,IAAI,WAAW,EACtB,KAAK,IAAI,EACT,KAAK,eAAe,EACpB,KAAK,gBAAgB,EAEtB,MAAM,YAAY,CAAC;AAEpB,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,sEAAsE;AACtE,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpF,2CAA2C;AAC3C,MAAM,WAAW,WAAW;IAC1B,gEAAgE;IAChE,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAChC,sEAAsE;IACtE,UAAU,EAAE,eAAe,EAAE,CAAC;CAC/B;AAQD,qBAAa,kBAAkB;IAQjB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPjC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD;;yEAEqE;IACrE,OAAO,CAAC,MAAM,CAA4B;gBAEb,IAAI,EAAE,IAAI;IAEvC;;uDAEmD;IACnD,OAAO,IAAI,IAAI;IAIf,SAAS,IAAI,IAAI;IAIjB;6EACyE;IACzE,QAAQ,IAAI,gBAAgB;IAY5B,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAKrC,QAAQ,IAAI,WAAW;IAQvB,OAAO,CAAC,IAAI;IAMZ;sDACkD;IAClD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAgBvB;;;;;;;qEAOiE;IACjE,GAAG,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAoBhC,uEAAuE;IACvE,MAAM,IAAI,IAAI;IAMd,OAAO,CAAC,IAAI;CAMb"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sign-in helper controller — the host side of `pyric/auth`'s
|
|
3
|
+
* `AuthFlowResolver` seam.
|
|
4
|
+
*
|
|
5
|
+
* `pyric/auth` stays UI-free: `signInWithPopup` / `signInWithRedirect`
|
|
6
|
+
* delegate to a resolver. This controller IS that resolver's host
|
|
7
|
+
* implementation — it parks the SDK's promise, drives a host UI (an
|
|
8
|
+
* account picker + add-account form, e.g. `<AuthSignInHelper>`), and
|
|
9
|
+
* settles the promise when the user picks an identity, adds one, or
|
|
10
|
+
* cancels. React components stay thin presentational shells over this;
|
|
11
|
+
* all the settle/seed logic lives here so it's testable without a DOM.
|
|
12
|
+
*
|
|
13
|
+
* Faithful to the Firebase emulator: "add account" mints a sandbox
|
|
14
|
+
* identity with optional custom claims (the emulator's
|
|
15
|
+
* `customAttributes`), so a rule gated on `request.auth.token.<claim>`
|
|
16
|
+
* works against live sandbox traffic. Credential + token synthesis is
|
|
17
|
+
* backend-owned (`sandbox.createSignInCredential`) — this controller
|
|
18
|
+
* only drives the UI flow and settles the parked promise.
|
|
19
|
+
*/
|
|
20
|
+
import { sandbox as authSandbox, } from 'pyric/auth';
|
|
21
|
+
export class AuthFlowController {
|
|
22
|
+
auth;
|
|
23
|
+
pending = null;
|
|
24
|
+
listeners = new Set();
|
|
25
|
+
/** Memoized {@link snapshot} result, invalidated by {@link emit}.
|
|
26
|
+
* `useSyncExternalStore` compares consecutive `getSnapshot()` results
|
|
27
|
+
* with `Object.is` — an uncached object here re-renders forever. */
|
|
28
|
+
cached = null;
|
|
29
|
+
constructor(auth) {
|
|
30
|
+
this.auth = auth;
|
|
31
|
+
}
|
|
32
|
+
/** Wire this controller's resolver into the auth handle. Paired with
|
|
33
|
+
* {@link uninstall} for use in a React effect (install in the body,
|
|
34
|
+
* uninstall in the cleanup) — StrictMode-safe. */
|
|
35
|
+
install() {
|
|
36
|
+
authSandbox.setAuthFlowResolver(this.auth, this.resolver());
|
|
37
|
+
}
|
|
38
|
+
uninstall() {
|
|
39
|
+
authSandbox.setAuthFlowResolver(this.auth, null);
|
|
40
|
+
}
|
|
41
|
+
/** The resolver to hand to `sandbox.setAuthFlowResolver`. Popup and
|
|
42
|
+
* redirect share one implementation (the sandbox has no navigation). */
|
|
43
|
+
resolver() {
|
|
44
|
+
const open = (req) => new Promise((resolve, reject) => {
|
|
45
|
+
// One helper at a time: a new request supersedes any stale pending.
|
|
46
|
+
if (this.pending)
|
|
47
|
+
this.cancel();
|
|
48
|
+
this.pending = { req, resolve, reject };
|
|
49
|
+
this.emit();
|
|
50
|
+
});
|
|
51
|
+
return { openPopup: open, openRedirect: open };
|
|
52
|
+
}
|
|
53
|
+
// ─── React glue (subscribe + snapshot) ──────────────────────────────
|
|
54
|
+
subscribe(fn) {
|
|
55
|
+
this.listeners.add(fn);
|
|
56
|
+
return () => this.listeners.delete(fn);
|
|
57
|
+
}
|
|
58
|
+
snapshot() {
|
|
59
|
+
this.cached ??= {
|
|
60
|
+
request: this.pending?.req ?? null,
|
|
61
|
+
identities: authSandbox.listIdentities(this.auth),
|
|
62
|
+
};
|
|
63
|
+
return this.cached;
|
|
64
|
+
}
|
|
65
|
+
emit() {
|
|
66
|
+
this.cached = null;
|
|
67
|
+
for (const l of this.listeners)
|
|
68
|
+
l();
|
|
69
|
+
}
|
|
70
|
+
// ─── UI actions ─────────────────────────────────────────────────────
|
|
71
|
+
/** Pick an existing identity (by uid). The backend mints the credential
|
|
72
|
+
* (and records the provider on the identity). */
|
|
73
|
+
pick(uid) {
|
|
74
|
+
const pending = this.pending;
|
|
75
|
+
if (!pending)
|
|
76
|
+
return;
|
|
77
|
+
let cred;
|
|
78
|
+
try {
|
|
79
|
+
cred = authSandbox.createSignInCredential(this.auth, {
|
|
80
|
+
providerId: pending.req.providerId,
|
|
81
|
+
uid,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
this.take()?.reject(e);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
this.take()?.resolve(cred);
|
|
89
|
+
}
|
|
90
|
+
/** Add + sign in as a new identity. The backend creates the identity
|
|
91
|
+
* (so claims resolve in rules and it shows up in the picker next time)
|
|
92
|
+
* and mints the credential in one step.
|
|
93
|
+
*
|
|
94
|
+
* Credential creation happens BEFORE {@link take}'s emit: subscribers
|
|
95
|
+
* recompute the snapshot synchronously on emit, so creating after would
|
|
96
|
+
* publish a stale identity list (a `useSyncExternalStore` consumer
|
|
97
|
+
* would miss the new account until the next unrelated emit). */
|
|
98
|
+
add(spec) {
|
|
99
|
+
const pending = this.pending;
|
|
100
|
+
if (!pending)
|
|
101
|
+
return;
|
|
102
|
+
let cred;
|
|
103
|
+
try {
|
|
104
|
+
cred = authSandbox.createSignInCredential(this.auth, {
|
|
105
|
+
providerId: pending.req.providerId,
|
|
106
|
+
spec: {
|
|
107
|
+
email: spec.email,
|
|
108
|
+
displayName: spec.displayName,
|
|
109
|
+
customClaims: spec.customClaims,
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
catch (e) {
|
|
114
|
+
this.take()?.reject(e);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
this.take()?.resolve(cred);
|
|
118
|
+
}
|
|
119
|
+
/** Dismiss — rejects with the faithful `auth/popup-closed-by-user`. */
|
|
120
|
+
cancel() {
|
|
121
|
+
const p = this.take();
|
|
122
|
+
if (!p)
|
|
123
|
+
return;
|
|
124
|
+
p.reject(authError('auth/popup-closed-by-user', 'The popup has been closed by the user before finalizing the operation.'));
|
|
125
|
+
}
|
|
126
|
+
take() {
|
|
127
|
+
const p = this.pending;
|
|
128
|
+
this.pending = null;
|
|
129
|
+
this.emit();
|
|
130
|
+
return p;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function authError(code, message) {
|
|
134
|
+
const e = new Error(message);
|
|
135
|
+
e.name = 'FirebaseError';
|
|
136
|
+
e.code = code;
|
|
137
|
+
return e;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/auth/controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { useAuthFlowHelper, type UseAuthFlowHelperResult, } from './useAuthFlowHelper.js';
|
|
2
|
+
export { useAuthUsers, type UseAuthUsersResult, } from './useAuthUsers.js';
|
|
3
|
+
export { useAuthProviderConfig, type AuthProviderConfigEntry, type UseAuthProviderConfigResult, } from './useAuthProviderConfig.js';
|
|
4
|
+
export { useAuthUserEditor, type UseAuthUserEditorOptions, type UseAuthUserEditorResult, } from './useAuthUserEditor.js';
|
|
5
|
+
export { authUserEditorReducer, initAuthUserEditorState, fieldsFromRecord, validateAuthUserFields, toCreateRequest, toUpdateRequest, type AuthUserEditorAction, type AuthUserEditorErrors, type AuthUserEditorFields, type AuthUserEditorState, } from '../reducers/userEditor.js';
|
|
6
|
+
export { AuthFlowController, type HelperState, type NewIdentitySpec, type SandboxIdentity, } from '../controller.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,uBAAuB,GAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,YAAY,EACZ,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,qBAAqB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,GACjC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { useAuthFlowHelper, } from './useAuthFlowHelper.js';
|
|
2
|
+
export { useAuthUsers, } from './useAuthUsers.js';
|
|
3
|
+
export { useAuthProviderConfig, } from './useAuthProviderConfig.js';
|
|
4
|
+
export { useAuthUserEditor, } from './useAuthUserEditor.js';
|
|
5
|
+
export { authUserEditorReducer, initAuthUserEditorState, fieldsFromRecord, validateAuthUserFields, toCreateRequest, toUpdateRequest, } from '../reducers/userEditor.js';
|
|
6
|
+
export { AuthFlowController, } from '../controller.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAElB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,YAAY,GAEb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,qBAAqB,GAGtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,iBAAiB,GAGlB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,eAAe,GAKhB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,kBAAkB,GAInB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Auth } from 'pyric/auth';
|
|
2
|
+
import { type HelperState, type NewIdentitySpec } from '../controller.js';
|
|
3
|
+
export interface UseAuthFlowHelperResult {
|
|
4
|
+
/** Render snapshot: the in-flight request (or null) + pickable identities. */
|
|
5
|
+
state: HelperState;
|
|
6
|
+
/** Settle the flow with an existing identity (by uid). */
|
|
7
|
+
pick: (uid: string) => void;
|
|
8
|
+
/** Create + sign in as a new identity (seeds it for next time). */
|
|
9
|
+
add: (spec: NewIdentitySpec) => void;
|
|
10
|
+
/** Dismiss — rejects the app's sign-in promise with
|
|
11
|
+
* `auth/popup-closed-by-user` (faithful to `firebase/auth`). */
|
|
12
|
+
cancel: () => void;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Emulator-style sign-in helper for a sandbox `Auth` handle.
|
|
16
|
+
*
|
|
17
|
+
* Installs an {@link AuthFlowController} as the handle's
|
|
18
|
+
* `AuthFlowResolver` for the lifetime of the calling component — the
|
|
19
|
+
* analog of browser `getAuth` wiring `browserPopupRedirectResolver`.
|
|
20
|
+
* While mounted, any `signInWithPopup` / `signInWithRedirect` call made
|
|
21
|
+
* against `auth` parks on `state.request`; render an account-picker UI
|
|
22
|
+
* (e.g. `<AuthSignInHelper>`) from `state` and settle with
|
|
23
|
+
* `pick` / `add` / `cancel`.
|
|
24
|
+
*
|
|
25
|
+
* Install/uninstall is a paired effect, so the StrictMode double-mount
|
|
26
|
+
* installs and cleanly uninstalls. Sandbox-only: the controller throws
|
|
27
|
+
* `failed-precondition` if `auth` is prod-backed.
|
|
28
|
+
*/
|
|
29
|
+
export declare function useAuthFlowHelper(auth: Auth): UseAuthFlowHelperResult;
|
|
30
|
+
//# sourceMappingURL=useAuthFlowHelper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAuthFlowHelper.d.ts","sourceRoot":"","sources":["../../../src/auth/hooks/useAuthFlowHelper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,uBAAuB;IACtC,8EAA8E;IAC9E,KAAK,EAAE,WAAW,CAAC;IACnB,0DAA0D;IAC1D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,mEAAmE;IACnE,GAAG,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IACrC;qEACiE;IACjE,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,uBAAuB,CAmBrE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { useCallback, useEffect, useMemo, useSyncExternalStore } from 'react';
|
|
2
|
+
import { AuthFlowController, } from '../controller.js';
|
|
3
|
+
/**
|
|
4
|
+
* Emulator-style sign-in helper for a sandbox `Auth` handle.
|
|
5
|
+
*
|
|
6
|
+
* Installs an {@link AuthFlowController} as the handle's
|
|
7
|
+
* `AuthFlowResolver` for the lifetime of the calling component — the
|
|
8
|
+
* analog of browser `getAuth` wiring `browserPopupRedirectResolver`.
|
|
9
|
+
* While mounted, any `signInWithPopup` / `signInWithRedirect` call made
|
|
10
|
+
* against `auth` parks on `state.request`; render an account-picker UI
|
|
11
|
+
* (e.g. `<AuthSignInHelper>`) from `state` and settle with
|
|
12
|
+
* `pick` / `add` / `cancel`.
|
|
13
|
+
*
|
|
14
|
+
* Install/uninstall is a paired effect, so the StrictMode double-mount
|
|
15
|
+
* installs and cleanly uninstalls. Sandbox-only: the controller throws
|
|
16
|
+
* `failed-precondition` if `auth` is prod-backed.
|
|
17
|
+
*/
|
|
18
|
+
export function useAuthFlowHelper(auth) {
|
|
19
|
+
const controller = useMemo(() => new AuthFlowController(auth), [auth]);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
controller.install();
|
|
22
|
+
return () => controller.uninstall();
|
|
23
|
+
}, [controller]);
|
|
24
|
+
const state = useSyncExternalStore(useCallback((cb) => controller.subscribe(cb), [controller]), () => controller.snapshot(), () => controller.snapshot());
|
|
25
|
+
const pick = useCallback((uid) => controller.pick(uid), [controller]);
|
|
26
|
+
const add = useCallback((spec) => controller.add(spec), [controller]);
|
|
27
|
+
const cancel = useCallback(() => controller.cancel(), [controller]);
|
|
28
|
+
return { state, pick, add, cancel };
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=useAuthFlowHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAuthFlowHelper.js","sourceRoot":"","sources":["../../../src/auth/hooks/useAuthFlowHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAE9E,OAAO,EACL,kBAAkB,GAGnB,MAAM,kBAAkB,CAAC;AAc1B;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAU;IAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEvE,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;IACtC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,MAAM,KAAK,GAAG,oBAAoB,CAChC,WAAW,CAAC,CAAC,EAAc,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EACvE,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,EAC3B,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,CAC5B,CAAC;IAEF,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9E,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,IAAqB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IACvF,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEpE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Auth } from 'pyric/auth';
|
|
2
|
+
/** One provider's current enablement, as the hook exposes it. */
|
|
3
|
+
export interface AuthProviderConfigEntry {
|
|
4
|
+
providerId: string;
|
|
5
|
+
enabled: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface UseAuthProviderConfigResult {
|
|
8
|
+
/** Every provider this sandbox has an explicit enablement for. Unknown
|
|
9
|
+
* providers (never toggled) are simply absent — `isEnabled` treats an
|
|
10
|
+
* absent entry as disabled, matching the backend default. */
|
|
11
|
+
config: AuthProviderConfigEntry[];
|
|
12
|
+
isLoading: boolean;
|
|
13
|
+
error: Error | undefined;
|
|
14
|
+
/** Convenience lookup: `false` for a provider that's never been toggled. */
|
|
15
|
+
isEnabled: (providerId: string) => boolean;
|
|
16
|
+
/** Toggle a provider on/off. Sync (in-process) failures throw to the
|
|
17
|
+
* caller, same policy as `useAuthUsers`'s mutation callbacks; an ASYNC
|
|
18
|
+
* (worker-RPC) failure can't reach a sync caller, so it surfaces on the
|
|
19
|
+
* hook's `error` state instead — never an unhandled rejection. */
|
|
20
|
+
setEnabled: (providerId: string, enabled: boolean) => void;
|
|
21
|
+
/** Re-read manually. Rarely needed — every mutation (this hook's own
|
|
22
|
+
* `setEnabled`, another handle, the agent) already triggers the
|
|
23
|
+
* subscription re-list. */
|
|
24
|
+
refresh: () => void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Live sign-in provider config view over a sandbox `Auth` handle:
|
|
28
|
+
* `sandbox.getAuthProviderConfig` + `sandbox.subscribeAuthProviderConfig` +
|
|
29
|
+
* `sandbox.setAuthProviderConfig`. Mirrors `useAuthUsers`'s shape exactly
|
|
30
|
+
* (coarse "something changed, re-list" subscription; sync in-process,
|
|
31
|
+
* tolerates a promise over the SharedWorker client).
|
|
32
|
+
*
|
|
33
|
+
* Sandbox-only: throws `failed-precondition` on a prod-backed handle (the
|
|
34
|
+
* hook surfaces that via `error`, same as `useAuthUsers`).
|
|
35
|
+
*/
|
|
36
|
+
export declare function useAuthProviderConfig(auth: Auth): UseAuthProviderConfigResult;
|
|
37
|
+
//# sourceMappingURL=useAuthProviderConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAuthProviderConfig.d.ts","sourceRoot":"","sources":["../../../src/auth/hooks/useAuthProviderConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,iEAAiE;AACjE,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,2BAA2B;IAC1C;;kEAE8D;IAC9D,MAAM,EAAE,uBAAuB,EAAE,CAAC;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,4EAA4E;IAC5E,SAAS,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C;;;uEAGmE;IACnE,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3D;;gCAE4B;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,2BAA2B,CAkG7E"}
|