@pyric/ui 0.1.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +216 -0
- package/README.md +79 -0
- package/dist/agents/ContextWindowUsage.d.ts +67 -0
- package/dist/agents/ContextWindowUsage.d.ts.map +1 -0
- package/dist/agents/ContextWindowUsage.js +115 -0
- package/dist/agents/ContextWindowUsage.js.map +1 -0
- package/dist/agents/EmptyState.d.ts +18 -0
- package/dist/agents/EmptyState.d.ts.map +1 -0
- package/dist/agents/EmptyState.js +11 -0
- package/dist/agents/EmptyState.js.map +1 -0
- package/dist/agents/Fold.d.ts +37 -0
- package/dist/agents/Fold.d.ts.map +1 -0
- package/dist/agents/Fold.js +18 -0
- package/dist/agents/Fold.js.map +1 -0
- package/dist/agents/Modal.d.ts +25 -0
- package/dist/agents/Modal.d.ts.map +1 -0
- package/dist/agents/Modal.js +28 -0
- package/dist/agents/Modal.js.map +1 -0
- package/dist/agents/PulsingDot.d.ts +21 -0
- package/dist/agents/PulsingDot.d.ts.map +1 -0
- package/dist/agents/PulsingDot.js +18 -0
- package/dist/agents/PulsingDot.js.map +1 -0
- package/dist/agents/index.d.ts +15 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +15 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/auth/authApi.d.ts +32 -0
- package/dist/auth/authApi.d.ts.map +1 -0
- package/dist/auth/authApi.js +27 -0
- package/dist/auth/authApi.js.map +1 -0
- package/dist/auth/claims.d.ts +27 -0
- package/dist/auth/claims.d.ts.map +1 -0
- package/dist/auth/claims.js +58 -0
- package/dist/auth/claims.js.map +1 -0
- package/dist/auth/components/AuthProviderToggles.d.ts +31 -0
- package/dist/auth/components/AuthProviderToggles.d.ts.map +1 -0
- package/dist/auth/components/AuthProviderToggles.js +48 -0
- package/dist/auth/components/AuthProviderToggles.js.map +1 -0
- package/dist/auth/components/AuthSignInHelper.d.ts +57 -0
- package/dist/auth/components/AuthSignInHelper.d.ts.map +1 -0
- package/dist/auth/components/AuthSignInHelper.js +69 -0
- package/dist/auth/components/AuthSignInHelper.js.map +1 -0
- package/dist/auth/components/AuthUserForm.d.ts +84 -0
- package/dist/auth/components/AuthUserForm.d.ts.map +1 -0
- package/dist/auth/components/AuthUserForm.js +89 -0
- package/dist/auth/components/AuthUserForm.js.map +1 -0
- package/dist/auth/components/AuthUserList.d.ts +62 -0
- package/dist/auth/components/AuthUserList.d.ts.map +1 -0
- package/dist/auth/components/AuthUserList.js +46 -0
- package/dist/auth/components/AuthUserList.js.map +1 -0
- package/dist/auth/components/ClaimsField.d.ts +22 -0
- package/dist/auth/components/ClaimsField.d.ts.map +1 -0
- package/dist/auth/components/ClaimsField.js +11 -0
- package/dist/auth/components/ClaimsField.js.map +1 -0
- package/dist/auth/components/confirmActions.d.ts +40 -0
- package/dist/auth/components/confirmActions.d.ts.map +1 -0
- package/dist/auth/components/confirmActions.js +49 -0
- package/dist/auth/components/confirmActions.js.map +1 -0
- package/dist/auth/controller.d.ts +73 -0
- package/dist/auth/controller.d.ts.map +1 -0
- package/dist/auth/controller.js +139 -0
- package/dist/auth/controller.js.map +1 -0
- package/dist/auth/hooks/index.d.ts +7 -0
- package/dist/auth/hooks/index.d.ts.map +1 -0
- package/dist/auth/hooks/index.js +7 -0
- package/dist/auth/hooks/index.js.map +1 -0
- package/dist/auth/hooks/useAuthFlowHelper.d.ts +30 -0
- package/dist/auth/hooks/useAuthFlowHelper.d.ts.map +1 -0
- package/dist/auth/hooks/useAuthFlowHelper.js +30 -0
- package/dist/auth/hooks/useAuthFlowHelper.js.map +1 -0
- package/dist/auth/hooks/useAuthProviderConfig.d.ts +37 -0
- package/dist/auth/hooks/useAuthProviderConfig.d.ts.map +1 -0
- package/dist/auth/hooks/useAuthProviderConfig.js +98 -0
- package/dist/auth/hooks/useAuthProviderConfig.js.map +1 -0
- package/dist/auth/hooks/useAuthUserEditor.d.ts +30 -0
- package/dist/auth/hooks/useAuthUserEditor.d.ts.map +1 -0
- package/dist/auth/hooks/useAuthUserEditor.js +27 -0
- package/dist/auth/hooks/useAuthUserEditor.js.map +1 -0
- package/dist/auth/hooks/useAuthUsers.d.ts +38 -0
- package/dist/auth/hooks/useAuthUsers.d.ts.map +1 -0
- package/dist/auth/hooks/useAuthUsers.js +111 -0
- package/dist/auth/hooks/useAuthUsers.js.map +1 -0
- package/dist/auth/index.d.ts +11 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +13 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/providers.d.ts +11 -0
- package/dist/auth/providers.d.ts.map +1 -0
- package/dist/auth/providers.js +28 -0
- package/dist/auth/providers.js.map +1 -0
- package/dist/auth/reducers/userEditor.d.ts +55 -0
- package/dist/auth/reducers/userEditor.d.ts.map +1 -0
- package/dist/auth/reducers/userEditor.js +136 -0
- package/dist/auth/reducers/userEditor.js.map +1 -0
- package/dist/events/components/ActivityActionItems.d.ts +45 -0
- package/dist/events/components/ActivityActionItems.d.ts.map +1 -0
- package/dist/events/components/ActivityActionItems.js +68 -0
- package/dist/events/components/ActivityActionItems.js.map +1 -0
- package/dist/events/components/ActivityGrid.d.ts +65 -0
- package/dist/events/components/ActivityGrid.d.ts.map +1 -0
- package/dist/events/components/ActivityGrid.js +61 -0
- package/dist/events/components/ActivityGrid.js.map +1 -0
- package/dist/events/components/ActivityGridRow.d.ts +31 -0
- package/dist/events/components/ActivityGridRow.d.ts.map +1 -0
- package/dist/events/components/ActivityGridRow.js +23 -0
- package/dist/events/components/ActivityGridRow.js.map +1 -0
- package/dist/events/components/ProposedChangeDiff.d.ts +46 -0
- package/dist/events/components/ProposedChangeDiff.d.ts.map +1 -0
- package/dist/events/components/ProposedChangeDiff.js +60 -0
- package/dist/events/components/ProposedChangeDiff.js.map +1 -0
- package/dist/events/components/format.d.ts +11 -0
- package/dist/events/components/format.d.ts.map +1 -0
- package/dist/events/components/format.js +26 -0
- package/dist/events/components/format.js.map +1 -0
- package/dist/events/components/index.d.ts +6 -0
- package/dist/events/components/index.d.ts.map +1 -0
- package/dist/events/components/index.js +6 -0
- package/dist/events/components/index.js.map +1 -0
- package/dist/events/digest.d.ts +167 -0
- package/dist/events/digest.d.ts.map +1 -0
- package/dist/events/digest.js +426 -0
- package/dist/events/digest.js.map +1 -0
- package/dist/events/hooks/index.d.ts +3 -0
- package/dist/events/hooks/index.d.ts.map +1 -0
- package/dist/events/hooks/index.js +3 -0
- package/dist/events/hooks/index.js.map +1 -0
- package/dist/events/hooks/useActivityDigest.d.ts +27 -0
- package/dist/events/hooks/useActivityDigest.d.ts.map +1 -0
- package/dist/events/hooks/useActivityDigest.js +18 -0
- package/dist/events/hooks/useActivityDigest.js.map +1 -0
- package/dist/events/hooks/useActivityStream.d.ts +44 -0
- package/dist/events/hooks/useActivityStream.d.ts.map +1 -0
- package/dist/events/hooks/useActivityStream.js +38 -0
- package/dist/events/hooks/useActivityStream.js.map +1 -0
- package/dist/events/index.d.ts +15 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +14 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/types.d.ts +160 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +21 -0
- package/dist/events/types.js.map +1 -0
- package/dist/firestore/components/CollectionList.d.ts +22 -0
- package/dist/firestore/components/CollectionList.d.ts.map +1 -0
- package/dist/firestore/components/CollectionList.js +21 -0
- package/dist/firestore/components/CollectionList.js.map +1 -0
- package/dist/firestore/components/DeleteWithConfirm.d.ts +38 -0
- package/dist/firestore/components/DeleteWithConfirm.d.ts.map +1 -0
- package/dist/firestore/components/DeleteWithConfirm.js +33 -0
- package/dist/firestore/components/DeleteWithConfirm.js.map +1 -0
- package/dist/firestore/components/DocumentEditor.d.ts +47 -0
- package/dist/firestore/components/DocumentEditor.d.ts.map +1 -0
- package/dist/firestore/components/DocumentEditor.js +176 -0
- package/dist/firestore/components/DocumentEditor.js.map +1 -0
- package/dist/firestore/components/DocumentList.d.ts +63 -0
- package/dist/firestore/components/DocumentList.d.ts.map +1 -0
- package/dist/firestore/components/DocumentList.js +53 -0
- package/dist/firestore/components/DocumentList.js.map +1 -0
- package/dist/firestore/components/DocumentPreview.d.ts +68 -0
- package/dist/firestore/components/DocumentPreview.d.ts.map +1 -0
- package/dist/firestore/components/DocumentPreview.js +76 -0
- package/dist/firestore/components/DocumentPreview.js.map +1 -0
- package/dist/firestore/components/FieldRenderer.d.ts +17 -0
- package/dist/firestore/components/FieldRenderer.d.ts.map +1 -0
- package/dist/firestore/components/FieldRenderer.js +16 -0
- package/dist/firestore/components/FieldRenderer.js.map +1 -0
- package/dist/firestore/components/QueryBuilder.d.ts +25 -0
- package/dist/firestore/components/QueryBuilder.d.ts.map +1 -0
- package/dist/firestore/components/QueryBuilder.js +78 -0
- package/dist/firestore/components/QueryBuilder.js.map +1 -0
- package/dist/firestore/components/ReferencePicker.d.ts +33 -0
- package/dist/firestore/components/ReferencePicker.d.ts.map +1 -0
- package/dist/firestore/components/ReferencePicker.js +42 -0
- package/dist/firestore/components/ReferencePicker.js.map +1 -0
- package/dist/firestore/components/TreeEntry.d.ts +15 -0
- package/dist/firestore/components/TreeEntry.d.ts.map +1 -0
- package/dist/firestore/components/TreeEntry.js +23 -0
- package/dist/firestore/components/TreeEntry.js.map +1 -0
- package/dist/firestore/components/context.d.ts +18 -0
- package/dist/firestore/components/context.d.ts.map +1 -0
- package/dist/firestore/components/context.js +7 -0
- package/dist/firestore/components/context.js.map +1 -0
- package/dist/firestore/fieldEditors/array.d.ts +3 -0
- package/dist/firestore/fieldEditors/array.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/array.js +16 -0
- package/dist/firestore/fieldEditors/array.js.map +1 -0
- package/dist/firestore/fieldEditors/boolean.d.ts +3 -0
- package/dist/firestore/fieldEditors/boolean.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/boolean.js +13 -0
- package/dist/firestore/fieldEditors/boolean.js.map +1 -0
- package/dist/firestore/fieldEditors/bytes.d.ts +4 -0
- package/dist/firestore/fieldEditors/bytes.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/bytes.js +31 -0
- package/dist/firestore/fieldEditors/bytes.js.map +1 -0
- package/dist/firestore/fieldEditors/geopoint.d.ts +4 -0
- package/dist/firestore/fieldEditors/geopoint.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/geopoint.js +32 -0
- package/dist/firestore/fieldEditors/geopoint.js.map +1 -0
- package/dist/firestore/fieldEditors/map.d.ts +3 -0
- package/dist/firestore/fieldEditors/map.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/map.js +19 -0
- package/dist/firestore/fieldEditors/map.js.map +1 -0
- package/dist/firestore/fieldEditors/null.d.ts +3 -0
- package/dist/firestore/fieldEditors/null.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/null.js +17 -0
- package/dist/firestore/fieldEditors/null.js.map +1 -0
- package/dist/firestore/fieldEditors/number.d.ts +3 -0
- package/dist/firestore/fieldEditors/number.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/number.js +24 -0
- package/dist/firestore/fieldEditors/number.js.map +1 -0
- package/dist/firestore/fieldEditors/reference.d.ts +4 -0
- package/dist/firestore/fieldEditors/reference.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/reference.js +49 -0
- package/dist/firestore/fieldEditors/reference.js.map +1 -0
- package/dist/firestore/fieldEditors/registry.d.ts +16 -0
- package/dist/firestore/fieldEditors/registry.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/registry.js +42 -0
- package/dist/firestore/fieldEditors/registry.js.map +1 -0
- package/dist/firestore/fieldEditors/string.d.ts +3 -0
- package/dist/firestore/fieldEditors/string.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/string.js +13 -0
- package/dist/firestore/fieldEditors/string.js.map +1 -0
- package/dist/firestore/fieldEditors/timestamp.d.ts +4 -0
- package/dist/firestore/fieldEditors/timestamp.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/timestamp.js +52 -0
- package/dist/firestore/fieldEditors/timestamp.js.map +1 -0
- package/dist/firestore/fieldEditors/types.d.ts +64 -0
- package/dist/firestore/fieldEditors/types.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/types.js +2 -0
- package/dist/firestore/fieldEditors/types.js.map +1 -0
- package/dist/firestore/fieldEditors/vector.d.ts +29 -0
- package/dist/firestore/fieldEditors/vector.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/vector.js +93 -0
- package/dist/firestore/fieldEditors/vector.js.map +1 -0
- package/dist/firestore/firestoreApi.d.ts +35 -0
- package/dist/firestore/firestoreApi.d.ts.map +1 -0
- package/dist/firestore/firestoreApi.js +29 -0
- package/dist/firestore/firestoreApi.js.map +1 -0
- package/dist/firestore/hooks/coerceError.d.ts +17 -0
- package/dist/firestore/hooks/coerceError.d.ts.map +1 -0
- package/dist/firestore/hooks/coerceError.js +41 -0
- package/dist/firestore/hooks/coerceError.js.map +1 -0
- package/dist/firestore/hooks/index.d.ts +10 -0
- package/dist/firestore/hooks/index.d.ts.map +1 -0
- package/dist/firestore/hooks/index.js +10 -0
- package/dist/firestore/hooks/index.js.map +1 -0
- package/dist/firestore/hooks/useCollectionList.d.ts +37 -0
- package/dist/firestore/hooks/useCollectionList.d.ts.map +1 -0
- package/dist/firestore/hooks/useCollectionList.js +51 -0
- package/dist/firestore/hooks/useCollectionList.js.map +1 -0
- package/dist/firestore/hooks/useDocumentEditor.d.ts +61 -0
- package/dist/firestore/hooks/useDocumentEditor.d.ts.map +1 -0
- package/dist/firestore/hooks/useDocumentEditor.js +71 -0
- package/dist/firestore/hooks/useDocumentEditor.js.map +1 -0
- package/dist/firestore/hooks/useDocumentList.d.ts +50 -0
- package/dist/firestore/hooks/useDocumentList.d.ts.map +1 -0
- package/dist/firestore/hooks/useDocumentList.js +162 -0
- package/dist/firestore/hooks/useDocumentList.js.map +1 -0
- package/dist/firestore/hooks/useDocumentSubcollections.d.ts +29 -0
- package/dist/firestore/hooks/useDocumentSubcollections.d.ts.map +1 -0
- package/dist/firestore/hooks/useDocumentSubcollections.js +48 -0
- package/dist/firestore/hooks/useDocumentSubcollections.js.map +1 -0
- package/dist/firestore/hooks/useFirestoreCollection.d.ts +14 -0
- package/dist/firestore/hooks/useFirestoreCollection.d.ts.map +1 -0
- package/dist/firestore/hooks/useFirestoreCollection.js +36 -0
- package/dist/firestore/hooks/useFirestoreCollection.js.map +1 -0
- package/dist/firestore/hooks/useFirestoreDoc.d.ts +17 -0
- package/dist/firestore/hooks/useFirestoreDoc.d.ts.map +1 -0
- package/dist/firestore/hooks/useFirestoreDoc.js +35 -0
- package/dist/firestore/hooks/useFirestoreDoc.js.map +1 -0
- package/dist/firestore/hooks/useQueryBuilder.d.ts +51 -0
- package/dist/firestore/hooks/useQueryBuilder.d.ts.map +1 -0
- package/dist/firestore/hooks/useQueryBuilder.js +110 -0
- package/dist/firestore/hooks/useQueryBuilder.js.map +1 -0
- package/dist/firestore/hooks/useRecursiveDelete.d.ts +40 -0
- package/dist/firestore/hooks/useRecursiveDelete.d.ts.map +1 -0
- package/dist/firestore/hooks/useRecursiveDelete.js +44 -0
- package/dist/firestore/hooks/useRecursiveDelete.js.map +1 -0
- package/dist/firestore/hooks/useReferencePicker.d.ts +70 -0
- package/dist/firestore/hooks/useReferencePicker.d.ts.map +1 -0
- package/dist/firestore/hooks/useReferencePicker.js +140 -0
- package/dist/firestore/hooks/useReferencePicker.js.map +1 -0
- package/dist/firestore/import/parseImport.d.ts +55 -0
- package/dist/firestore/import/parseImport.d.ts.map +1 -0
- package/dist/firestore/import/parseImport.js +101 -0
- package/dist/firestore/import/parseImport.js.map +1 -0
- package/dist/firestore/index.d.ts +21 -0
- package/dist/firestore/index.d.ts.map +1 -0
- package/dist/firestore/index.js +29 -0
- package/dist/firestore/index.js.map +1 -0
- package/dist/firestore/reducers/defaults.d.ts +10 -0
- package/dist/firestore/reducers/defaults.d.ts.map +1 -0
- package/dist/firestore/reducers/defaults.js +37 -0
- package/dist/firestore/reducers/defaults.js.map +1 -0
- package/dist/firestore/reducers/documentEditor.d.ts +23 -0
- package/dist/firestore/reducers/documentEditor.d.ts.map +1 -0
- package/dist/firestore/reducers/documentEditor.js +201 -0
- package/dist/firestore/reducers/documentEditor.js.map +1 -0
- package/dist/firestore/reducers/tree.d.ts +28 -0
- package/dist/firestore/reducers/tree.d.ts.map +1 -0
- package/dist/firestore/reducers/tree.js +129 -0
- package/dist/firestore/reducers/tree.js.map +1 -0
- package/dist/firestore/reducers/types.d.ts +115 -0
- package/dist/firestore/reducers/types.d.ts.map +1 -0
- package/dist/firestore/reducers/types.js +2 -0
- package/dist/firestore/reducers/types.js.map +1 -0
- package/dist/firestore/reducers/validation.d.ts +25 -0
- package/dist/firestore/reducers/validation.d.ts.map +1 -0
- package/dist/firestore/reducers/validation.js +121 -0
- package/dist/firestore/reducers/validation.js.map +1 -0
- package/dist/firestore/types.d.ts +77 -0
- package/dist/firestore/types.d.ts.map +1 -0
- package/dist/firestore/types.js +196 -0
- package/dist/firestore/types.js.map +1 -0
- package/dist/firestore/validation/ids.d.ts +23 -0
- package/dist/firestore/validation/ids.d.ts.map +1 -0
- package/dist/firestore/validation/ids.js +46 -0
- package/dist/firestore/validation/ids.js.map +1 -0
- package/dist/firestore/valueEquality.d.ts +4 -0
- package/dist/firestore/valueEquality.d.ts.map +1 -0
- package/dist/firestore/valueEquality.js +44 -0
- package/dist/firestore/valueEquality.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/primitives/Badge.d.ts +28 -0
- package/dist/primitives/Badge.d.ts.map +1 -0
- package/dist/primitives/Badge.js +11 -0
- package/dist/primitives/Badge.js.map +1 -0
- package/dist/primitives/ConfirmDialog.d.ts +42 -0
- package/dist/primitives/ConfirmDialog.d.ts.map +1 -0
- package/dist/primitives/ConfirmDialog.js +61 -0
- package/dist/primitives/ConfirmDialog.js.map +1 -0
- package/dist/primitives/CopyButton.d.ts +28 -0
- package/dist/primitives/CopyButton.d.ts.map +1 -0
- package/dist/primitives/CopyButton.js +27 -0
- package/dist/primitives/CopyButton.js.map +1 -0
- package/dist/primitives/JsonView.d.ts +29 -0
- package/dist/primitives/JsonView.d.ts.map +1 -0
- package/dist/primitives/JsonView.js +56 -0
- package/dist/primitives/JsonView.js.map +1 -0
- package/dist/primitives/SegmentedControl.d.ts +37 -0
- package/dist/primitives/SegmentedControl.d.ts.map +1 -0
- package/dist/primitives/SegmentedControl.js +18 -0
- package/dist/primitives/SegmentedControl.js.map +1 -0
- package/dist/primitives/Toast.d.ts +48 -0
- package/dist/primitives/Toast.d.ts.map +1 -0
- package/dist/primitives/Toast.js +60 -0
- package/dist/primitives/Toast.js.map +1 -0
- package/dist/primitives/VirtualList.d.ts +37 -0
- package/dist/primitives/VirtualList.d.ts.map +1 -0
- package/dist/primitives/VirtualList.js +47 -0
- package/dist/primitives/VirtualList.js.map +1 -0
- package/dist/primitives/hooks/useContainerSize.d.ts +29 -0
- package/dist/primitives/hooks/useContainerSize.d.ts.map +1 -0
- package/dist/primitives/hooks/useContainerSize.js +45 -0
- package/dist/primitives/hooks/useContainerSize.js.map +1 -0
- package/dist/primitives/hooks/useUpdateHighlights.d.ts +18 -0
- package/dist/primitives/hooks/useUpdateHighlights.d.ts.map +1 -0
- package/dist/primitives/hooks/useUpdateHighlights.js +84 -0
- package/dist/primitives/hooks/useUpdateHighlights.js.map +1 -0
- package/dist/primitives/index.d.ts +11 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +11 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/primitives/useConfirm.d.ts +34 -0
- package/dist/primitives/useConfirm.d.ts.map +1 -0
- package/dist/primitives/useConfirm.js +63 -0
- package/dist/primitives/useConfirm.js.map +1 -0
- package/dist/rtdb/components/RtdbPathBar.d.ts +31 -0
- package/dist/rtdb/components/RtdbPathBar.d.ts.map +1 -0
- package/dist/rtdb/components/RtdbPathBar.js +47 -0
- package/dist/rtdb/components/RtdbPathBar.js.map +1 -0
- package/dist/rtdb/components/RtdbTree.d.ts +38 -0
- package/dist/rtdb/components/RtdbTree.d.ts.map +1 -0
- package/dist/rtdb/components/RtdbTree.js +104 -0
- package/dist/rtdb/components/RtdbTree.js.map +1 -0
- package/dist/rtdb/editor.d.ts +25 -0
- package/dist/rtdb/editor.d.ts.map +1 -0
- package/dist/rtdb/editor.js +79 -0
- package/dist/rtdb/editor.js.map +1 -0
- package/dist/rtdb/hooks/useRtdbTree.d.ts +33 -0
- package/dist/rtdb/hooks/useRtdbTree.d.ts.map +1 -0
- package/dist/rtdb/hooks/useRtdbTree.js +67 -0
- package/dist/rtdb/hooks/useRtdbTree.js.map +1 -0
- package/dist/rtdb/index.d.ts +17 -0
- package/dist/rtdb/index.d.ts.map +1 -0
- package/dist/rtdb/index.js +21 -0
- package/dist/rtdb/index.js.map +1 -0
- package/dist/rtdb/pathInput.d.ts +28 -0
- package/dist/rtdb/pathInput.d.ts.map +1 -0
- package/dist/rtdb/pathInput.js +40 -0
- package/dist/rtdb/pathInput.js.map +1 -0
- package/dist/rtdb/reducers/tree.d.ts +86 -0
- package/dist/rtdb/reducers/tree.d.ts.map +1 -0
- package/dist/rtdb/reducers/tree.js +131 -0
- package/dist/rtdb/reducers/tree.js.map +1 -0
- package/dist/rtdb/rtdbApi.d.ts +20 -0
- package/dist/rtdb/rtdbApi.d.ts.map +1 -0
- package/dist/rtdb/rtdbApi.js +2 -0
- package/dist/rtdb/rtdbApi.js.map +1 -0
- package/dist/rtdb/values.d.ts +50 -0
- package/dist/rtdb/values.d.ts.map +1 -0
- package/dist/rtdb/values.js +186 -0
- package/dist/rtdb/values.js.map +1 -0
- package/dist/rules/components/DenialInspector.d.ts +18 -0
- package/dist/rules/components/DenialInspector.d.ts.map +1 -0
- package/dist/rules/components/DenialInspector.js +58 -0
- package/dist/rules/components/DenialInspector.js.map +1 -0
- package/dist/rules/components/format.d.ts +56 -0
- package/dist/rules/components/format.d.ts.map +1 -0
- package/dist/rules/components/format.js +137 -0
- package/dist/rules/components/format.js.map +1 -0
- package/dist/rules/components/index.d.ts +4 -0
- package/dist/rules/components/index.d.ts.map +1 -0
- package/dist/rules/components/index.js +4 -0
- package/dist/rules/components/index.js.map +1 -0
- package/dist/rules/components/scope.d.ts +10 -0
- package/dist/rules/components/scope.d.ts.map +1 -0
- package/dist/rules/components/scope.js +72 -0
- package/dist/rules/components/scope.js.map +1 -0
- package/dist/rules/hooks/index.d.ts +2 -0
- package/dist/rules/hooks/index.d.ts.map +1 -0
- package/dist/rules/hooks/index.js +2 -0
- package/dist/rules/hooks/index.js.map +1 -0
- package/dist/rules/hooks/useDenialTrace.d.ts +51 -0
- package/dist/rules/hooks/useDenialTrace.d.ts.map +1 -0
- package/dist/rules/hooks/useDenialTrace.js +58 -0
- package/dist/rules/hooks/useDenialTrace.js.map +1 -0
- package/dist/rules/index.d.ts +14 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +13 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/types.d.ts +75 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +2 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/storage/collisionRename.d.ts +73 -0
- package/dist/storage/collisionRename.d.ts.map +1 -0
- package/dist/storage/collisionRename.js +113 -0
- package/dist/storage/collisionRename.js.map +1 -0
- package/dist/storage/components/DeleteSelectionWithConfirm.d.ts +66 -0
- package/dist/storage/components/DeleteSelectionWithConfirm.d.ts.map +1 -0
- package/dist/storage/components/DeleteSelectionWithConfirm.js +82 -0
- package/dist/storage/components/DeleteSelectionWithConfirm.js.map +1 -0
- package/dist/storage/components/ObjectBrowser.d.ts +78 -0
- package/dist/storage/components/ObjectBrowser.d.ts.map +1 -0
- package/dist/storage/components/ObjectBrowser.js +60 -0
- package/dist/storage/components/ObjectBrowser.js.map +1 -0
- package/dist/storage/components/ObjectInspector.d.ts +43 -0
- package/dist/storage/components/ObjectInspector.d.ts.map +1 -0
- package/dist/storage/components/ObjectInspector.js +92 -0
- package/dist/storage/components/ObjectInspector.js.map +1 -0
- package/dist/storage/components/PathBreadcrumb.d.ts +30 -0
- package/dist/storage/components/PathBreadcrumb.d.ts.map +1 -0
- package/dist/storage/components/PathBreadcrumb.js +26 -0
- package/dist/storage/components/PathBreadcrumb.js.map +1 -0
- package/dist/storage/components/UploadDropzone.d.ts +50 -0
- package/dist/storage/components/UploadDropzone.d.ts.map +1 -0
- package/dist/storage/components/UploadDropzone.js +109 -0
- package/dist/storage/components/UploadDropzone.js.map +1 -0
- package/dist/storage/folderPlaceholder.d.ts +20 -0
- package/dist/storage/folderPlaceholder.d.ts.map +1 -0
- package/dist/storage/folderPlaceholder.js +34 -0
- package/dist/storage/folderPlaceholder.js.map +1 -0
- package/dist/storage/hooks/index.d.ts +9 -0
- package/dist/storage/hooks/index.d.ts.map +1 -0
- package/dist/storage/hooks/index.js +9 -0
- package/dist/storage/hooks/index.js.map +1 -0
- package/dist/storage/hooks/useMetadataEditor.d.ts +114 -0
- package/dist/storage/hooks/useMetadataEditor.d.ts.map +1 -0
- package/dist/storage/hooks/useMetadataEditor.js +193 -0
- package/dist/storage/hooks/useMetadataEditor.js.map +1 -0
- package/dist/storage/hooks/useObjectUpload.d.ts +105 -0
- package/dist/storage/hooks/useObjectUpload.d.ts.map +1 -0
- package/dist/storage/hooks/useObjectUpload.js +134 -0
- package/dist/storage/hooks/useObjectUpload.js.map +1 -0
- package/dist/storage/hooks/usePathState.d.ts +43 -0
- package/dist/storage/hooks/usePathState.d.ts.map +1 -0
- package/dist/storage/hooks/usePathState.js +42 -0
- package/dist/storage/hooks/usePathState.js.map +1 -0
- package/dist/storage/hooks/useStorageDelete.d.ts +74 -0
- package/dist/storage/hooks/useStorageDelete.d.ts.map +1 -0
- package/dist/storage/hooks/useStorageDelete.js +120 -0
- package/dist/storage/hooks/useStorageDelete.js.map +1 -0
- package/dist/storage/hooks/useStorageList.d.ts +72 -0
- package/dist/storage/hooks/useStorageList.d.ts.map +1 -0
- package/dist/storage/hooks/useStorageList.js +164 -0
- package/dist/storage/hooks/useStorageList.js.map +1 -0
- package/dist/storage/hooks/useStorageObject.d.ts +33 -0
- package/dist/storage/hooks/useStorageObject.d.ts.map +1 -0
- package/dist/storage/hooks/useStorageObject.js +114 -0
- package/dist/storage/hooks/useStorageObject.js.map +1 -0
- package/dist/storage/hooks/useStorageRulesGate.d.ts +116 -0
- package/dist/storage/hooks/useStorageRulesGate.d.ts.map +1 -0
- package/dist/storage/hooks/useStorageRulesGate.js +150 -0
- package/dist/storage/hooks/useStorageRulesGate.js.map +1 -0
- package/dist/storage/hooks/useStorageSelection.d.ts +32 -0
- package/dist/storage/hooks/useStorageSelection.d.ts.map +1 -0
- package/dist/storage/hooks/useStorageSelection.js +55 -0
- package/dist/storage/hooks/useStorageSelection.js.map +1 -0
- package/dist/storage/index.d.ts +11 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +17 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/pendingPrefixes.d.ts +77 -0
- package/dist/storage/pendingPrefixes.d.ts.map +1 -0
- package/dist/storage/pendingPrefixes.js +104 -0
- package/dist/storage/pendingPrefixes.js.map +1 -0
- package/dist/storage/previews.d.ts +51 -0
- package/dist/storage/previews.d.ts.map +1 -0
- package/dist/storage/previews.js +73 -0
- package/dist/storage/previews.js.map +1 -0
- package/dist/storage/storageApi.d.ts +30 -0
- package/dist/storage/storageApi.d.ts.map +1 -0
- package/dist/storage/storageApi.js +20 -0
- package/dist/storage/storageApi.js.map +1 -0
- package/dist/traffic/components/RuleHeatmap.d.ts +34 -0
- package/dist/traffic/components/RuleHeatmap.d.ts.map +1 -0
- package/dist/traffic/components/RuleHeatmap.js +40 -0
- package/dist/traffic/components/RuleHeatmap.js.map +1 -0
- package/dist/traffic/components/TrafficDetail.d.ts +33 -0
- package/dist/traffic/components/TrafficDetail.d.ts.map +1 -0
- package/dist/traffic/components/TrafficDetail.js +28 -0
- package/dist/traffic/components/TrafficDetail.js.map +1 -0
- package/dist/traffic/components/TrafficGroupRow.d.ts +28 -0
- package/dist/traffic/components/TrafficGroupRow.d.ts.map +1 -0
- package/dist/traffic/components/TrafficGroupRow.js +25 -0
- package/dist/traffic/components/TrafficGroupRow.js.map +1 -0
- package/dist/traffic/components/TrafficLineChart.d.ts +37 -0
- package/dist/traffic/components/TrafficLineChart.d.ts.map +1 -0
- package/dist/traffic/components/TrafficLineChart.js +49 -0
- package/dist/traffic/components/TrafficLineChart.js.map +1 -0
- package/dist/traffic/components/TrafficLog.d.ts +52 -0
- package/dist/traffic/components/TrafficLog.d.ts.map +1 -0
- package/dist/traffic/components/TrafficLog.js +34 -0
- package/dist/traffic/components/TrafficLog.js.map +1 -0
- package/dist/traffic/components/TrafficMetricCards.d.ts +26 -0
- package/dist/traffic/components/TrafficMetricCards.d.ts.map +1 -0
- package/dist/traffic/components/TrafficMetricCards.js +24 -0
- package/dist/traffic/components/TrafficMetricCards.js.map +1 -0
- package/dist/traffic/components/TrafficRow.d.ts +40 -0
- package/dist/traffic/components/TrafficRow.d.ts.map +1 -0
- package/dist/traffic/components/TrafficRow.js +27 -0
- package/dist/traffic/components/TrafficRow.js.map +1 -0
- package/dist/traffic/components/TrafficStats.d.ts +18 -0
- package/dist/traffic/components/TrafficStats.d.ts.map +1 -0
- package/dist/traffic/components/TrafficStats.js +19 -0
- package/dist/traffic/components/TrafficStats.js.map +1 -0
- package/dist/traffic/components/TrafficTimeline.d.ts +88 -0
- package/dist/traffic/components/TrafficTimeline.d.ts.map +1 -0
- package/dist/traffic/components/TrafficTimeline.js +86 -0
- package/dist/traffic/components/TrafficTimeline.js.map +1 -0
- package/dist/traffic/components/format.d.ts +13 -0
- package/dist/traffic/components/format.d.ts.map +1 -0
- package/dist/traffic/components/format.js +24 -0
- package/dist/traffic/components/format.js.map +1 -0
- package/dist/traffic/components/index.d.ts +11 -0
- package/dist/traffic/components/index.d.ts.map +1 -0
- package/dist/traffic/components/index.js +11 -0
- package/dist/traffic/components/index.js.map +1 -0
- package/dist/traffic/hooks/index.d.ts +8 -0
- package/dist/traffic/hooks/index.d.ts.map +1 -0
- package/dist/traffic/hooks/index.js +8 -0
- package/dist/traffic/hooks/index.js.map +1 -0
- package/dist/traffic/hooks/useRuleHeatmap.d.ts +33 -0
- package/dist/traffic/hooks/useRuleHeatmap.d.ts.map +1 -0
- package/dist/traffic/hooks/useRuleHeatmap.js +54 -0
- package/dist/traffic/hooks/useRuleHeatmap.js.map +1 -0
- package/dist/traffic/hooks/useTrafficBuckets.d.ts +71 -0
- package/dist/traffic/hooks/useTrafficBuckets.d.ts.map +1 -0
- package/dist/traffic/hooks/useTrafficBuckets.js +74 -0
- package/dist/traffic/hooks/useTrafficBuckets.js.map +1 -0
- package/dist/traffic/hooks/useTrafficFilter.d.ts +40 -0
- package/dist/traffic/hooks/useTrafficFilter.d.ts.map +1 -0
- package/dist/traffic/hooks/useTrafficFilter.js +33 -0
- package/dist/traffic/hooks/useTrafficFilter.js.map +1 -0
- package/dist/traffic/hooks/useTrafficGroups.d.ts +47 -0
- package/dist/traffic/hooks/useTrafficGroups.d.ts.map +1 -0
- package/dist/traffic/hooks/useTrafficGroups.js +73 -0
- package/dist/traffic/hooks/useTrafficGroups.js.map +1 -0
- package/dist/traffic/hooks/useTrafficMetrics.d.ts +66 -0
- package/dist/traffic/hooks/useTrafficMetrics.d.ts.map +1 -0
- package/dist/traffic/hooks/useTrafficMetrics.js +156 -0
- package/dist/traffic/hooks/useTrafficMetrics.js.map +1 -0
- package/dist/traffic/hooks/useTrafficMonitor.d.ts +56 -0
- package/dist/traffic/hooks/useTrafficMonitor.d.ts.map +1 -0
- package/dist/traffic/hooks/useTrafficMonitor.js +58 -0
- package/dist/traffic/hooks/useTrafficMonitor.js.map +1 -0
- package/dist/traffic/hooks/useTrafficStats.d.ts +32 -0
- package/dist/traffic/hooks/useTrafficStats.d.ts.map +1 -0
- package/dist/traffic/hooks/useTrafficStats.js +45 -0
- package/dist/traffic/hooks/useTrafficStats.js.map +1 -0
- package/dist/traffic/index.d.ts +4 -0
- package/dist/traffic/index.d.ts.map +1 -0
- package/dist/traffic/index.js +3 -0
- package/dist/traffic/index.js.map +1 -0
- package/dist/traffic/types.d.ts +72 -0
- package/dist/traffic/types.d.ts.map +1 -0
- package/dist/traffic/types.js +10 -0
- package/dist/traffic/types.js.map +1 -0
- package/package.json +127 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { AuthUserRecord, CreateUserRequest, UpdateUserRequest } from 'pyric/auth';
|
|
3
|
+
/** What `onSubmit` receives — discriminated on the form's mode. */
|
|
4
|
+
export type AuthUserFormSubmit = {
|
|
5
|
+
mode: 'create';
|
|
6
|
+
request: CreateUserRequest;
|
|
7
|
+
} | {
|
|
8
|
+
mode: 'edit';
|
|
9
|
+
uid: string;
|
|
10
|
+
request: UpdateUserRequest;
|
|
11
|
+
};
|
|
12
|
+
/** Field names the {@link AuthUserFormProps.renderField} slot receives,
|
|
13
|
+
* in render order. Claims is NOT a slot field — it stays the standalone
|
|
14
|
+
* `<ClaimsField>` (override it by composing `useAuthUserEditor`). */
|
|
15
|
+
export type AuthUserFormFieldName = 'email' | 'password' | 'display-name' | 'phone-number' | 'photo-url' | 'providers' | 'email-verified' | 'disabled';
|
|
16
|
+
/** What the {@link AuthUserFormProps.renderField} slot receives per field. */
|
|
17
|
+
export interface AuthUserFormField {
|
|
18
|
+
name: AuthUserFormFieldName;
|
|
19
|
+
/** The visible label text the default rendering uses. */
|
|
20
|
+
label: string;
|
|
21
|
+
/** The wired, controlled input element (carries `data-pyric-field`).
|
|
22
|
+
* Place it anywhere; state/validation stay connected. */
|
|
23
|
+
input: ReactNode;
|
|
24
|
+
/** Current validation message for this field, or null. */
|
|
25
|
+
error: string | null;
|
|
26
|
+
/** `'text' | 'checkbox' | 'group'` — lets one slot impl branch on
|
|
27
|
+
* layout (`group` = a multi-control block, e.g. the provider
|
|
28
|
+
* checklist; create mode only). */
|
|
29
|
+
kind: 'text' | 'checkbox' | 'group';
|
|
30
|
+
/** The default rendering (label wrapper + label text + input + error).
|
|
31
|
+
* Call it to keep the stock layout for fields you don't customize. */
|
|
32
|
+
defaultRender: () => ReactNode;
|
|
33
|
+
}
|
|
34
|
+
export interface AuthUserFormProps {
|
|
35
|
+
/** Existing record → edit mode (delta payloads); omit → create mode. */
|
|
36
|
+
initial?: AuthUserRecord;
|
|
37
|
+
/** Receives the validated payload. Wire `create` to
|
|
38
|
+
* `useAuthUsers().createUser` and `edit` to `updateUser`. */
|
|
39
|
+
onSubmit: (submit: AuthUserFormSubmit) => void;
|
|
40
|
+
onCancel?: () => void;
|
|
41
|
+
submitLabel?: string;
|
|
42
|
+
cancelLabel?: string;
|
|
43
|
+
/** Extra content rendered before the action row (e.g. an error from a
|
|
44
|
+
* failed `createUser` call). */
|
|
45
|
+
children?: ReactNode;
|
|
46
|
+
className?: string;
|
|
47
|
+
/** Per-field layout override. Called for each field (see
|
|
48
|
+
* {@link AuthUserFormFieldName} order); return your own markup around
|
|
49
|
+
* `field.input`, or `field.defaultRender()` to keep the stock label
|
|
50
|
+
* wrapper for that field. Omit the prop for the default layout. */
|
|
51
|
+
renderField?: (field: AuthUserFormField) => ReactNode;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Headless add/edit-user form over `useAuthUserEditor` — the emulator
|
|
55
|
+
* UI's user dialog fields (email, password, display name, phone, photo
|
|
56
|
+
* URL, verified/disabled toggles, custom claims) with its validation
|
|
57
|
+
* messages. Zero CSS; structure addressable via `data-pyric-*`:
|
|
58
|
+
*
|
|
59
|
+
* - root `form[data-pyric-ui="auth-user-form"]` with `data-pyric-mode`,
|
|
60
|
+
* `data-pyric-is-dirty`, `data-pyric-is-valid` state attrs
|
|
61
|
+
* - every field (text inputs AND checkboxes) is wrapped in a
|
|
62
|
+
* `label[data-pyric-field-label="<name>"]` carrying a visible
|
|
63
|
+
* `span[data-pyric-label-text]` — labeled grid layouts are pure CSS
|
|
64
|
+
* (`display: grid` on the wrappers); label-less designs hide
|
|
65
|
+
* `[data-pyric-label-text]` and lean on the placeholders
|
|
66
|
+
* - inputs `[data-pyric-field="email" | "password" | "display-name" |
|
|
67
|
+
* "phone-number" | "photo-url" | "email-verified" | "disabled"]`
|
|
68
|
+
* - CREATE mode only: a "Sign-in providers" group
|
|
69
|
+
* (`fieldset[data-pyric-field-label="providers"]` wrapping
|
|
70
|
+
* `[data-pyric-provider-checklist]`) — one checkbox per federated
|
|
71
|
+
* provider the sandbox supports (`FEDERATED_PROVIDER_IDS` from
|
|
72
|
+
* `pyric/auth`; multiple selectable, entries land on
|
|
73
|
+
* `CreateUserRequest.providerUserInfo`)
|
|
74
|
+
* - claims via the standalone `<ClaimsField>`
|
|
75
|
+
* - per-field messages `[data-pyric-field-error="email" | "password"]`
|
|
76
|
+
* render INSIDE the field's label wrapper, after the input
|
|
77
|
+
* - `button[data-pyric-cancel]` / `button[data-pyric-submit]` (submit is
|
|
78
|
+
* disabled while invalid, or pristine in edit mode)
|
|
79
|
+
*
|
|
80
|
+
* Submit emits payloads only — no sandbox calls — so the same form works
|
|
81
|
+
* for create and edit and the consumer owns error handling.
|
|
82
|
+
*/
|
|
83
|
+
export declare function AuthUserForm({ initial, onSubmit, onCancel, submitLabel, cancelLabel, children, className, renderField, }: AuthUserFormProps): import("react").JSX.Element;
|
|
84
|
+
//# sourceMappingURL=AuthUserForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthUserForm.d.ts","sourceRoot":"","sources":["../../../src/auth/components/AuthUserForm.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,OAAO,CAAC;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAsCvF,mEAAmE;AACnE,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAE9D;;sEAEsE;AACtE,MAAM,MAAM,qBAAqB,GAC7B,OAAO,GACP,UAAU,GACV,cAAc,GACd,cAAc,GACd,WAAW,GACX,WAAW,GACX,gBAAgB,GAChB,UAAU,CAAC;AAEf,8EAA8E;AAC9E,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd;8DAC0D;IAC1D,KAAK,EAAE,SAAS,CAAC;IACjB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;wCAEoC;IACpC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;IACpC;2EACuE;IACvE,aAAa,EAAE,MAAM,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,wEAAwE;IACxE,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB;kEAC8D;IAC9D,QAAQ,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;qCACiC;IACjC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;wEAGoE;IACpE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,SAAS,CAAC;CACvD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,WAAoB,EACpB,WAAsB,EACtB,QAAQ,EACR,SAAS,EACT,WAAW,GACZ,EAAE,iBAAiB,+BA8LnB"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Fragment } from 'react';
|
|
3
|
+
import { FEDERATED_PROVIDER_IDS } from 'pyric/auth';
|
|
4
|
+
import { useAuthUserEditor } from '../hooks/useAuthUserEditor.js';
|
|
5
|
+
import { providerLabel } from '../providers.js';
|
|
6
|
+
import { ClaimsField } from './ClaimsField.js';
|
|
7
|
+
/** Create-mode provider multi-select: one checkbox per federated provider
|
|
8
|
+
* id the sandbox supports (the canonical `FEDERATED_PROVIDER_IDS` set from
|
|
9
|
+
* `pyric/auth` — derived from the shipped provider classes, not a UI-side
|
|
10
|
+
* copy). A user can link one or several. Headless: style
|
|
11
|
+
* `[data-pyric-provider-checklist]` / `[data-pyric-provider-option]`. */
|
|
12
|
+
function ProviderChecklist({ selected, onChange, }) {
|
|
13
|
+
return (_jsx("div", { "data-pyric-provider-checklist": true, children: FEDERATED_PROVIDER_IDS.map((id) => (_jsxs("label", { "data-pyric-provider-option": id, children: [_jsx("input", { type: "checkbox", checked: selected.includes(id), onChange: (e) => onChange(e.target.checked ? [...selected, id] : selected.filter((p) => p !== id)) }), _jsx("span", { "data-pyric-provider-option-label": true, children: providerLabel(id) }), _jsx("span", { "data-pyric-provider-option-id": true, children: id })] }, id))) }));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Headless add/edit-user form over `useAuthUserEditor` — the emulator
|
|
17
|
+
* UI's user dialog fields (email, password, display name, phone, photo
|
|
18
|
+
* URL, verified/disabled toggles, custom claims) with its validation
|
|
19
|
+
* messages. Zero CSS; structure addressable via `data-pyric-*`:
|
|
20
|
+
*
|
|
21
|
+
* - root `form[data-pyric-ui="auth-user-form"]` with `data-pyric-mode`,
|
|
22
|
+
* `data-pyric-is-dirty`, `data-pyric-is-valid` state attrs
|
|
23
|
+
* - every field (text inputs AND checkboxes) is wrapped in a
|
|
24
|
+
* `label[data-pyric-field-label="<name>"]` carrying a visible
|
|
25
|
+
* `span[data-pyric-label-text]` — labeled grid layouts are pure CSS
|
|
26
|
+
* (`display: grid` on the wrappers); label-less designs hide
|
|
27
|
+
* `[data-pyric-label-text]` and lean on the placeholders
|
|
28
|
+
* - inputs `[data-pyric-field="email" | "password" | "display-name" |
|
|
29
|
+
* "phone-number" | "photo-url" | "email-verified" | "disabled"]`
|
|
30
|
+
* - CREATE mode only: a "Sign-in providers" group
|
|
31
|
+
* (`fieldset[data-pyric-field-label="providers"]` wrapping
|
|
32
|
+
* `[data-pyric-provider-checklist]`) — one checkbox per federated
|
|
33
|
+
* provider the sandbox supports (`FEDERATED_PROVIDER_IDS` from
|
|
34
|
+
* `pyric/auth`; multiple selectable, entries land on
|
|
35
|
+
* `CreateUserRequest.providerUserInfo`)
|
|
36
|
+
* - claims via the standalone `<ClaimsField>`
|
|
37
|
+
* - per-field messages `[data-pyric-field-error="email" | "password"]`
|
|
38
|
+
* render INSIDE the field's label wrapper, after the input
|
|
39
|
+
* - `button[data-pyric-cancel]` / `button[data-pyric-submit]` (submit is
|
|
40
|
+
* disabled while invalid, or pristine in edit mode)
|
|
41
|
+
*
|
|
42
|
+
* Submit emits payloads only — no sandbox calls — so the same form works
|
|
43
|
+
* for create and edit and the consumer owns error handling.
|
|
44
|
+
*/
|
|
45
|
+
export function AuthUserForm({ initial, onSubmit, onCancel, submitLabel = 'Save', cancelLabel = 'Cancel', children, className, renderField, }) {
|
|
46
|
+
const editor = useAuthUserEditor({ initial });
|
|
47
|
+
const mode = initial ? 'edit' : 'create';
|
|
48
|
+
const submittable = editor.isValid && (mode === 'create' || editor.isDirty);
|
|
49
|
+
/** Build one field descriptor: the wired input + the stock label-wrapper
|
|
50
|
+
* rendering. `renderField` consumers place `input` themselves. */
|
|
51
|
+
const field = (name, label, kind, input, error = null) => ({
|
|
52
|
+
name,
|
|
53
|
+
label,
|
|
54
|
+
input,
|
|
55
|
+
error,
|
|
56
|
+
kind,
|
|
57
|
+
defaultRender: () => kind === 'checkbox' ? (_jsxs("label", { "data-pyric-field-label": name, children: [input, _jsx("span", { "data-pyric-label-text": true, children: label })] }, name)) : kind === 'group' ? (_jsxs("fieldset", { "data-pyric-field-label": name, children: [_jsx("legend", { "data-pyric-label-text": true, children: label }), input] }, name)) : (_jsxs("label", { "data-pyric-field-label": name, children: [_jsx("span", { "data-pyric-label-text": true, children: label }), input, error != null && (_jsx("p", { role: "alert", "data-pyric-field-error": name, children: error }))] }, name)),
|
|
58
|
+
});
|
|
59
|
+
const fields = [
|
|
60
|
+
field('email', 'Email', 'text', _jsx("input", { type: "email", "data-pyric-field": "email", placeholder: "email@example.com", value: editor.fields.email, onChange: (e) => editor.setField('email', e.target.value) }), editor.errors.email ?? null),
|
|
61
|
+
field('password', 'Password', 'text', _jsx("input", { type: "password", "data-pyric-field": "password", placeholder: mode === 'edit' ? 'New password (unchanged if empty)' : 'Password', value: editor.fields.password, onChange: (e) => editor.setField('password', e.target.value) }), editor.errors.password ?? null),
|
|
62
|
+
field('display-name', 'Display name', 'text', _jsx("input", { type: "text", "data-pyric-field": "display-name", placeholder: "Display name (optional)", value: editor.fields.displayName, onChange: (e) => editor.setField('displayName', e.target.value) })),
|
|
63
|
+
field('phone-number', 'Phone number', 'text', _jsx("input", { type: "tel", "data-pyric-field": "phone-number", placeholder: "+1 555 555 0100", value: editor.fields.phoneNumber, onChange: (e) => editor.setField('phoneNumber', e.target.value) })),
|
|
64
|
+
field('photo-url', 'Photo URL', 'text', _jsx("input", { type: "url", "data-pyric-field": "photo-url", placeholder: "https://example.com/avatar.png", value: editor.fields.photoUrl, onChange: (e) => editor.setField('photoUrl', e.target.value) })),
|
|
65
|
+
// Provider selection is CREATE-only: in edit mode linked providers are
|
|
66
|
+
// managed by the consumer's own affordance over `updateUser` (Studio's
|
|
67
|
+
// per-user ProvidersEditor), not the delta form.
|
|
68
|
+
...(mode === 'create'
|
|
69
|
+
? [
|
|
70
|
+
field('providers', 'Sign-in providers', 'group', _jsx(ProviderChecklist, { selected: editor.fields.providerIds, onChange: (ids) => editor.setField('providerIds', ids) })),
|
|
71
|
+
]
|
|
72
|
+
: []),
|
|
73
|
+
field('email-verified', 'Verified email', 'checkbox', _jsx("input", { type: "checkbox", "data-pyric-field": "email-verified", checked: editor.fields.emailVerified, onChange: (e) => editor.setField('emailVerified', e.target.checked) })),
|
|
74
|
+
field('disabled', 'Disabled (sign-in attempts are rejected)', 'checkbox', _jsx("input", { type: "checkbox", "data-pyric-field": "disabled", checked: editor.fields.disabled, onChange: (e) => editor.setField('disabled', e.target.checked) })),
|
|
75
|
+
];
|
|
76
|
+
const submit = (e) => {
|
|
77
|
+
e.preventDefault();
|
|
78
|
+
if (!submittable)
|
|
79
|
+
return;
|
|
80
|
+
if (mode === 'edit') {
|
|
81
|
+
onSubmit({ mode, uid: initial.uid, request: editor.toUpdateRequest() });
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
onSubmit({ mode, request: editor.toCreateRequest() });
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
return (_jsxs("form", { className: className, "data-pyric-ui": "auth-user-form", "data-pyric-mode": mode, "data-pyric-is-dirty": editor.isDirty ? '' : undefined, "data-pyric-is-valid": editor.isValid ? '' : undefined, onSubmit: submit, children: [fields.map((f) => renderField ? (_jsx(Fragment, { children: renderField(f) }, f.name)) : (f.defaultRender())), _jsx(ClaimsField, { value: editor.fields.claimsText, onChange: (text) => editor.setField('claimsText', text), error: editor.errors.claims }), children, _jsxs("footer", { "data-pyric-form-actions": true, children: [onCancel ? (_jsx("button", { type: "button", "data-pyric-cancel": true, onClick: onCancel, children: cancelLabel })) : null, _jsx("button", { type: "submit", "data-pyric-submit": true, disabled: !submittable, children: submitLabel })] })] }));
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=AuthUserForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthUserForm.js","sourceRoot":"","sources":["../../../src/auth/components/AuthUserForm.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { AuthUserRecord } from 'pyric/auth';
|
|
3
|
+
export interface AuthUserListProps {
|
|
4
|
+
/** Rows to render — usually `useAuthUsers().users`. */
|
|
5
|
+
users: AuthUserRecord[];
|
|
6
|
+
isLoading?: boolean;
|
|
7
|
+
error?: Error;
|
|
8
|
+
/** The active filter text. Distinguishes the "no users yet" zero state
|
|
9
|
+
* (empty filter) from "no results" (non-empty). */
|
|
10
|
+
filter?: string;
|
|
11
|
+
/** Fired when the identifier cell is clicked. When omitted, the
|
|
12
|
+
* identifier renders as plain text. */
|
|
13
|
+
onSelect?: (user: AuthUserRecord) => void;
|
|
14
|
+
/** Identifier-cell override. Default: email, else phone, else
|
|
15
|
+
* `anonymous`, else the uid. */
|
|
16
|
+
renderIdentifier?: (user: AuthUserRecord) => ReactNode;
|
|
17
|
+
/** Providers-cell override. Default: one `<span data-pyric-provider-id>`
|
|
18
|
+
* per linked provider with its text label (`anonymous` for anonymous
|
|
19
|
+
* users) — hook icons off the attribute. */
|
|
20
|
+
renderProviders?: (user: AuthUserRecord) => ReactNode;
|
|
21
|
+
/** Per-row selection control. Rendered in the leading cell so bulk
|
|
22
|
+
* selection stays visually separate from trailing row actions. */
|
|
23
|
+
renderSelection?: (user: AuthUserRecord) => ReactNode;
|
|
24
|
+
/** Optional content for the leading selection column header (for example,
|
|
25
|
+
* a select-all checkbox). Only rendered with `renderSelection`. */
|
|
26
|
+
renderSelectionHeader?: ReactNode;
|
|
27
|
+
/** Per-row action slot (edit / disable / delete menu). Rendered in a
|
|
28
|
+
* trailing cell; column header is added when this is provided. */
|
|
29
|
+
renderActions?: (user: AuthUserRecord) => ReactNode;
|
|
30
|
+
/** Optional content for the trailing actions column header (for example,
|
|
31
|
+
* a select-all checkbox). Only rendered with `renderActions`. */
|
|
32
|
+
renderActionsHeader?: ReactNode;
|
|
33
|
+
/** Timestamp formatter for Created. Default: locale date, em dash for null. */
|
|
34
|
+
formatCreatedAt?: (iso: string | null) => ReactNode;
|
|
35
|
+
/** Timestamp formatter for Signed In. Kept separate because a missing login
|
|
36
|
+
* means "never", while a missing/invalid creation time is malformed data. */
|
|
37
|
+
formatLastLoginAt?: (iso: string | null) => ReactNode;
|
|
38
|
+
/** Zero state when the project has no users at all. */
|
|
39
|
+
emptyState?: ReactNode;
|
|
40
|
+
/** Zero state when the filter matches nothing. */
|
|
41
|
+
noResultsState?: ReactNode;
|
|
42
|
+
className?: string;
|
|
43
|
+
/** Above this row count, rows render through `<VirtualList>`.
|
|
44
|
+
* Default 100. `Infinity` disables. */
|
|
45
|
+
virtualizeThreshold?: number;
|
|
46
|
+
/** Estimated row height when virtualizing. Default 44. */
|
|
47
|
+
rowHeight?: number | ((index: number) => number);
|
|
48
|
+
/** Scroll-container height when virtualized. Default `'60vh'`. */
|
|
49
|
+
virtualizedHeight?: number | string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Headless users table — the emulator UI's columns (Identifier,
|
|
53
|
+
* Provider, Created, Signed In, User UID, actions) over the
|
|
54
|
+
* `data-pyric-*` styling contract, with role-based table semantics so
|
|
55
|
+
* rows can virtualize (a real `<table>` can't wrap a scroll container).
|
|
56
|
+
*
|
|
57
|
+
* The hook (`useAuthUsers`) owns data + filter state; this component
|
|
58
|
+
* just renders. Disabled accounts carry `data-pyric-user-disabled` for
|
|
59
|
+
* dimmed styling.
|
|
60
|
+
*/
|
|
61
|
+
export declare function AuthUserList({ users, isLoading, error, filter, onSelect, renderIdentifier, renderProviders, renderSelection, renderSelectionHeader, renderActions, renderActionsHeader, formatCreatedAt, formatLastLoginAt, emptyState, noResultsState, className, virtualizeThreshold, rowHeight, virtualizedHeight, }: AuthUserListProps): import("react").JSX.Element;
|
|
62
|
+
//# sourceMappingURL=AuthUserList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthUserList.d.ts","sourceRoot":"","sources":["../../../src/auth/components/AuthUserList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd;wDACoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;4CACwC;IACxC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1C;qCACiC;IACjC,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,SAAS,CAAC;IACvD;;iDAE6C;IAC7C,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,SAAS,CAAC;IACtD;uEACmE;IACnE,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,SAAS,CAAC;IACtD;wEACoE;IACpE,qBAAqB,CAAC,EAAE,SAAS,CAAC;IAClC;uEACmE;IACnE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,SAAS,CAAC;IACpD;sEACkE;IAClE,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,+EAA+E;IAC/E,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,SAAS,CAAC;IACpD;kFAC8E;IAC9E,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,SAAS,CAAC;IACtD,uDAAuD;IACvD,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,kDAAkD;IAClD,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;4CACwC;IACxC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IACjD,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACrC;AAuBD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,SAAS,EACT,KAAK,EACL,MAAM,EACN,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,eAAmC,EACnC,iBAAqC,EACrC,UAAU,EACV,cAAc,EACd,SAAS,EACT,mBAAyB,EACzB,SAAc,EACd,iBAA0B,GAC3B,EAAE,iBAAiB,+BAiHnB"}
|
|
@@ -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, renderSelection, renderSelectionHeader, renderActions, renderActionsHeader, formatCreatedAt = defaultFormatDate, formatLastLoginAt = 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: [renderSelection ? (_jsx("span", { role: "cell", "data-pyric-user-cell": "selection", children: renderSelection(user) })) : null, _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: formatCreatedAt(user.createdAt) }), _jsx("span", { role: "cell", "data-pyric-user-cell": "signed-in", children: formatLastLoginAt(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, "data-pyric-selection": renderSelection ? '' : undefined, "data-pyric-actions": renderActions ? '' : undefined, children: [_jsxs("div", { role: "row", "data-pyric-user-header": true, children: [renderSelection ? (_jsx("span", { role: "columnheader", "data-pyric-user-cell": "selection", "aria-label": "Selection", children: renderSelectionHeader })) : null, _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", children: renderActionsHeader })) : 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"}
|