@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,10 @@
|
|
|
1
|
+
export { CopyButton } from './CopyButton.js';
|
|
2
|
+
export { Badge } from './Badge.js';
|
|
3
|
+
export { JsonView, } from './JsonView.js';
|
|
4
|
+
export { SegmentedControl, } from './SegmentedControl.js';
|
|
5
|
+
export { ConfirmDialog } from './ConfirmDialog.js';
|
|
6
|
+
export { ConfirmProvider, useConfirm, } from './useConfirm.js';
|
|
7
|
+
export { ToastProvider, useToast, } from './Toast.js';
|
|
8
|
+
export { VirtualList } from './VirtualList.js';
|
|
9
|
+
export { useContainerSize, } from './hooks/useContainerSize.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/primitives/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,KAAK,EAAmB,MAAM,YAAY,CAAC;AACpD,OAAO,EACL,QAAQ,GAET,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,GAGjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EACL,eAAe,EACf,UAAU,GAIX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,aAAa,EACb,QAAQ,GAKT,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAyB,MAAM,kBAAkB,CAAC;AACtE,OAAO,EACL,gBAAgB,GAGjB,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export interface ConfirmOptions {
|
|
3
|
+
title: string;
|
|
4
|
+
body?: ReactNode;
|
|
5
|
+
destructive?: boolean;
|
|
6
|
+
confirmLabel?: string;
|
|
7
|
+
cancelLabel?: string;
|
|
8
|
+
}
|
|
9
|
+
export type ConfirmFn = (options: ConfirmOptions) => Promise<boolean>;
|
|
10
|
+
/**
|
|
11
|
+
* Imperative confirmation hook. Returns a function that opens the
|
|
12
|
+
* provider-managed dialog and resolves to `true` on confirm, `false`
|
|
13
|
+
* on cancel/dismiss.
|
|
14
|
+
*
|
|
15
|
+
* const confirm = useConfirm();
|
|
16
|
+
* const ok = await confirm({ title: 'Delete?', destructive: true });
|
|
17
|
+
* if (ok) await deleteDoc(ref);
|
|
18
|
+
*
|
|
19
|
+
* Requires a `<ConfirmProvider>` ancestor.
|
|
20
|
+
*/
|
|
21
|
+
export declare function useConfirm(): ConfirmFn;
|
|
22
|
+
export interface ConfirmProviderProps {
|
|
23
|
+
children: ReactNode;
|
|
24
|
+
/** Forwarded to the rendered `<ConfirmDialog>`. */
|
|
25
|
+
dialogClassName?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Mounts a single managed `<ConfirmDialog>` and exposes the
|
|
29
|
+
* imperative `confirm()` API through context. Scoped — multiple
|
|
30
|
+
* providers can coexist in different subtrees, each managing its
|
|
31
|
+
* own dialog.
|
|
32
|
+
*/
|
|
33
|
+
export declare function ConfirmProvider({ children, dialogClassName }: ConfirmProviderProps): import("react").JSX.Element;
|
|
34
|
+
//# sourceMappingURL=useConfirm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useConfirm.d.ts","sourceRoot":"","sources":["../../src/primitives/useConfirm.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAItE;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,IAAI,SAAS,CAMtC;AAOD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,SAAS,CAAC;IACpB,mDAAmD;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,oBAAoB,+BAqDlF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useCallback, useContext, useMemo, useRef, useState, } from 'react';
|
|
3
|
+
import { ConfirmDialog } from './ConfirmDialog.js';
|
|
4
|
+
const Ctx = createContext(null);
|
|
5
|
+
/**
|
|
6
|
+
* Imperative confirmation hook. Returns a function that opens the
|
|
7
|
+
* provider-managed dialog and resolves to `true` on confirm, `false`
|
|
8
|
+
* on cancel/dismiss.
|
|
9
|
+
*
|
|
10
|
+
* const confirm = useConfirm();
|
|
11
|
+
* const ok = await confirm({ title: 'Delete?', destructive: true });
|
|
12
|
+
* if (ok) await deleteDoc(ref);
|
|
13
|
+
*
|
|
14
|
+
* Requires a `<ConfirmProvider>` ancestor.
|
|
15
|
+
*/
|
|
16
|
+
export function useConfirm() {
|
|
17
|
+
const fn = useContext(Ctx);
|
|
18
|
+
if (!fn) {
|
|
19
|
+
throw new Error('useConfirm: missing <ConfirmProvider> ancestor');
|
|
20
|
+
}
|
|
21
|
+
return fn;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Mounts a single managed `<ConfirmDialog>` and exposes the
|
|
25
|
+
* imperative `confirm()` API through context. Scoped — multiple
|
|
26
|
+
* providers can coexist in different subtrees, each managing its
|
|
27
|
+
* own dialog.
|
|
28
|
+
*/
|
|
29
|
+
export function ConfirmProvider({ children, dialogClassName }) {
|
|
30
|
+
const [pending, setPending] = useState(null);
|
|
31
|
+
// Track which resolution path fired so the close handler doesn't
|
|
32
|
+
// double-resolve when both onConfirm + onOpenChange(false) trigger.
|
|
33
|
+
const resolvedRef = useRef(false);
|
|
34
|
+
const confirm = useCallback((options) => {
|
|
35
|
+
return new Promise((resolve) => {
|
|
36
|
+
resolvedRef.current = false;
|
|
37
|
+
setPending({ options, resolve });
|
|
38
|
+
});
|
|
39
|
+
}, []);
|
|
40
|
+
const handleConfirm = useCallback(() => {
|
|
41
|
+
if (!pending)
|
|
42
|
+
return;
|
|
43
|
+
if (resolvedRef.current)
|
|
44
|
+
return;
|
|
45
|
+
resolvedRef.current = true;
|
|
46
|
+
pending.resolve(true);
|
|
47
|
+
setPending(null);
|
|
48
|
+
}, [pending]);
|
|
49
|
+
const handleOpenChange = useCallback((open) => {
|
|
50
|
+
if (open)
|
|
51
|
+
return;
|
|
52
|
+
if (!pending)
|
|
53
|
+
return;
|
|
54
|
+
if (resolvedRef.current)
|
|
55
|
+
return;
|
|
56
|
+
resolvedRef.current = true;
|
|
57
|
+
pending.resolve(false);
|
|
58
|
+
setPending(null);
|
|
59
|
+
}, [pending]);
|
|
60
|
+
const ctxValue = useMemo(() => confirm, [confirm]);
|
|
61
|
+
return (_jsxs(Ctx.Provider, { value: ctxValue, children: [children, pending ? (_jsx(ConfirmDialog, { open: true, onOpenChange: handleOpenChange, title: pending.options.title, body: pending.options.body, destructive: pending.options.destructive, confirmLabel: pending.options.confirmLabel, cancelLabel: pending.options.cancelLabel, onConfirm: handleConfirm, className: dialogClassName })) : null] }));
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=useConfirm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useConfirm.js","sourceRoot":"","sources":["../../src/primitives/useConfirm.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EACb,WAAW,EACX,UAAU,EACV,OAAO,EACP,MAAM,EACN,QAAQ,GAET,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAYnD,MAAM,GAAG,GAAG,aAAa,CAAmB,IAAI,CAAC,CAAC;AAElD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAaD;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAwB;IACjF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAwB,IAAI,CAAC,CAAC;IACpE,iEAAiE;IACjE,oEAAoE;IACpE,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAElC,MAAM,OAAO,GAAG,WAAW,CAAY,CAAC,OAAO,EAAE,EAAE;QACjD,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;YACtC,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC;YAC5B,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;QACrC,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,WAAW,CAAC,OAAO;YAAE,OAAO;QAChC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtB,UAAU,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,IAAa,EAAE,EAAE;QAChB,IAAI,IAAI;YAAE,OAAO;QACjB,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,WAAW,CAAC,OAAO;YAAE,OAAO;QAChC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvB,UAAU,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEnD,OAAO,CACL,MAAC,GAAG,CAAC,QAAQ,IAAC,KAAK,EAAE,QAAQ,aAC1B,QAAQ,EACR,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,aAAa,IACZ,IAAI,QACJ,YAAY,EAAE,gBAAgB,EAC9B,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAC5B,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,EAC1B,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,EACxC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,EAC1C,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,EACxC,SAAS,EAAE,aAAa,EACxB,SAAS,EAAE,eAAe,GAC1B,CACH,CAAC,CAAC,CAAC,IAAI,IACK,CAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export interface RtdbPathBarProps {
|
|
3
|
+
/** Current absolute database path (`'/'` for root). */
|
|
4
|
+
path: string;
|
|
5
|
+
/** Fired with the parsed absolute path on crumb click or input submit. */
|
|
6
|
+
onNavigate: (path: string) => void;
|
|
7
|
+
/** Root crumb label — the database/instance identity (e.g. the sandbox
|
|
8
|
+
* slug). Default `'/'`. */
|
|
9
|
+
rootLabel?: ReactNode;
|
|
10
|
+
/** Text shown before the input while editing (the non-editable URL part). */
|
|
11
|
+
inputPrefix?: string;
|
|
12
|
+
className?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The editable path bar of the RTDB viewer — the interaction form of the
|
|
16
|
+
* Firebase console / firebase-tools-ui database URL bar (clean-room
|
|
17
|
+
* adaptation): in DISPLAY mode the path renders as clickable crumbs
|
|
18
|
+
* (root → … → current) plus an edit affordance; EDIT mode swaps in a text
|
|
19
|
+
* input seeded with the current path — Enter navigates, Escape or blur
|
|
20
|
+
* cancels. Pasted full URLs and missing leading slashes are tolerated
|
|
21
|
+
* (`parseRtdbPathInput`).
|
|
22
|
+
*
|
|
23
|
+
* Headless. Consumers style via:
|
|
24
|
+
* - `[data-pyric-ui="rtdb-path-bar"]` — the root (`data-rtdb-editing` when editing)
|
|
25
|
+
* - `[data-rtdb-crumb]` / `[data-rtdb-crumb-root]` / `[data-pyric-current]`
|
|
26
|
+
* - `[data-rtdb-crumb-separator]`
|
|
27
|
+
* - `[data-rtdb-path-edit]` — the edit button
|
|
28
|
+
* - `[data-rtdb-path-form]`, `[data-rtdb-path-prefix]`, `[data-rtdb-path-input]`
|
|
29
|
+
*/
|
|
30
|
+
export declare function RtdbPathBar({ path, onNavigate, rootLabel, inputPrefix, className, }: RtdbPathBarProps): import("react").JSX.Element;
|
|
31
|
+
//# sourceMappingURL=RtdbPathBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RtdbPathBar.d.ts","sourceRoot":"","sources":["../../../src/rtdb/components/RtdbPathBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIpF,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;gCAC4B;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,UAAU,EACV,SAAe,EACf,WAAW,EACX,SAAS,GACV,EAAE,gBAAgB,+BA+FlB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from 'react';
|
|
3
|
+
import { parseRtdbPathInput, rtdbCrumbs } from '../pathInput.js';
|
|
4
|
+
import { normalizeRtdbPath } from '../values.js';
|
|
5
|
+
/**
|
|
6
|
+
* The editable path bar of the RTDB viewer — the interaction form of the
|
|
7
|
+
* Firebase console / firebase-tools-ui database URL bar (clean-room
|
|
8
|
+
* adaptation): in DISPLAY mode the path renders as clickable crumbs
|
|
9
|
+
* (root → … → current) plus an edit affordance; EDIT mode swaps in a text
|
|
10
|
+
* input seeded with the current path — Enter navigates, Escape or blur
|
|
11
|
+
* cancels. Pasted full URLs and missing leading slashes are tolerated
|
|
12
|
+
* (`parseRtdbPathInput`).
|
|
13
|
+
*
|
|
14
|
+
* Headless. Consumers style via:
|
|
15
|
+
* - `[data-pyric-ui="rtdb-path-bar"]` — the root (`data-rtdb-editing` when editing)
|
|
16
|
+
* - `[data-rtdb-crumb]` / `[data-rtdb-crumb-root]` / `[data-pyric-current]`
|
|
17
|
+
* - `[data-rtdb-crumb-separator]`
|
|
18
|
+
* - `[data-rtdb-path-edit]` — the edit button
|
|
19
|
+
* - `[data-rtdb-path-form]`, `[data-rtdb-path-prefix]`, `[data-rtdb-path-input]`
|
|
20
|
+
*/
|
|
21
|
+
export function RtdbPathBar({ path, onNavigate, rootLabel = '/', inputPrefix, className, }) {
|
|
22
|
+
const normalized = normalizeRtdbPath(path);
|
|
23
|
+
const [editing, setEditing] = useState(false);
|
|
24
|
+
// UNCONTROLLED input, read at submit: the input mounts fresh per edit
|
|
25
|
+
// session (display mode unmounts it) seeded with the current path, so a
|
|
26
|
+
// cancelled draft never leaks into the next session.
|
|
27
|
+
const inputRef = useRef(null);
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
if (editing)
|
|
30
|
+
inputRef.current?.select();
|
|
31
|
+
}, [editing]);
|
|
32
|
+
const submit = (e) => {
|
|
33
|
+
e.preventDefault();
|
|
34
|
+
onNavigate(parseRtdbPathInput(inputRef.current?.value ?? ''));
|
|
35
|
+
setEditing(false);
|
|
36
|
+
};
|
|
37
|
+
const cancel = () => setEditing(false);
|
|
38
|
+
const crumbs = rtdbCrumbs(normalized);
|
|
39
|
+
return (_jsx("nav", { className: className, "data-pyric-ui": "rtdb-path-bar", "data-rtdb-editing": editing ? '' : undefined, "aria-label": "Database path", children: editing ? (_jsxs("form", { "data-rtdb-path-form": true, onSubmit: submit, children: [inputPrefix ? _jsx("span", { "data-rtdb-path-prefix": true, children: inputPrefix }) : null, _jsx("input", { ref: inputRef, "data-rtdb-path-input": true, "aria-label": "Database path", autoFocus: true, defaultValue: normalized, onBlur: cancel, onKeyDown: (e) => {
|
|
40
|
+
if (e.key === 'Escape')
|
|
41
|
+
cancel();
|
|
42
|
+
}, spellCheck: false })] })) : (_jsxs(_Fragment, { children: [_jsxs("ol", { "data-rtdb-crumb-list": true, children: [_jsx("li", { "data-rtdb-crumb-item": true, children: _jsx("button", { type: "button", "data-rtdb-crumb": true, "data-rtdb-crumb-root": true, "data-pyric-current": crumbs.length === 0 ? '' : undefined, "aria-current": crumbs.length === 0 ? 'page' : undefined, onClick: () => onNavigate('/'), children: rootLabel }) }), crumbs.map((crumb, i) => {
|
|
43
|
+
const isCurrent = i === crumbs.length - 1;
|
|
44
|
+
return (_jsxs("li", { "data-rtdb-crumb-item": true, children: [_jsx("span", { "aria-hidden": true, "data-rtdb-crumb-separator": true, children: "/" }), _jsx("button", { type: "button", "data-rtdb-crumb": true, "data-pyric-current": isCurrent ? '' : undefined, "aria-current": isCurrent ? 'page' : undefined, onClick: () => onNavigate(crumb.path), children: crumb.label })] }, crumb.path));
|
|
45
|
+
})] }), _jsx("button", { type: "button", "data-rtdb-path-edit": true, "aria-label": "Edit path", title: "Edit path", onClick: () => setEditing(true), children: _jsx("svg", { "aria-hidden": true, viewBox: "0 0 16 16", width: "12", height: "12", fill: "currentColor", children: _jsx("path", { d: "M11.7 1.3a1 1 0 0 1 1.4 0l1.6 1.6a1 1 0 0 1 0 1.4l-8.5 8.5-3.4 1.1a.5.5 0 0 1-.63-.63l1.1-3.4 8.43-8.57ZM10.9 3.5l1.6 1.6 1.2-1.2-1.6-1.6-1.2 1.2Z" }) }) })] })) }));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=RtdbPathBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RtdbPathBar.js","sourceRoot":"","sources":["../../../src/rtdb/components/RtdbPathBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { RtdbApi } from '../rtdbApi.js';
|
|
3
|
+
import type { RtdbTreeController } from '../hooks/useRtdbTree.js';
|
|
4
|
+
export interface RtdbTreeProps {
|
|
5
|
+
/** The live tree controller from `useRtdbTree`. */
|
|
6
|
+
tree: RtdbTreeController;
|
|
7
|
+
/** Mutation backend (admin lens in Studio). */
|
|
8
|
+
api: RtdbApi;
|
|
9
|
+
/** Key-click navigation: re-roots the viewer at the clicked node (wire to
|
|
10
|
+
* the same path state as the path bar). */
|
|
11
|
+
onNavigate?: (path: string) => void;
|
|
12
|
+
/** Label for the view-root row when the root is `'/'` — the database /
|
|
13
|
+
* instance identity. Default `'/'`. */
|
|
14
|
+
rootLabel?: ReactNode;
|
|
15
|
+
className?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The RTDB data tree — the interaction form of the Firebase console /
|
|
19
|
+
* firebase-tools-ui database viewer (clean-room adaptation of the
|
|
20
|
+
* NodeContainer/NodeParent/NodeLeaf split):
|
|
21
|
+
*
|
|
22
|
+
* - parents render a caret (expand/collapse), leaves a `key: value` row;
|
|
23
|
+
* - keys navigate (re-root the view), carets only toggle;
|
|
24
|
+
* - hover/focus reveals per-node actions: `+` add child, `×` delete —
|
|
25
|
+
* delete flips to an INLINE two-step confirm (no modal, C3);
|
|
26
|
+
* - leaf values are click-to-edit inline (type select: string / number /
|
|
27
|
+
* boolean / JSON);
|
|
28
|
+
* - wide levels page at `tree.pageSize` with a "show more" row (the console's
|
|
29
|
+
* form — see `reducers/tree.ts` for why paging over virtualization).
|
|
30
|
+
*
|
|
31
|
+
* Headless: consumers style `[data-pyric-ui="rtdb-tree"]` and the
|
|
32
|
+
* `data-rtdb-*` attributes (`node`, `row`, `caret`, `key`, `sep`, `value`,
|
|
33
|
+
* `actions`, `action-add`, `action-delete`, `confirm`, `editor`, `children`,
|
|
34
|
+
* `show-more`, `error`, `loading`). An empty root renders the console's
|
|
35
|
+
* classic form — `<root>: null` — not an instructional empty state.
|
|
36
|
+
*/
|
|
37
|
+
export declare function RtdbTree({ tree, api, onNavigate, rootLabel, className }: RtdbTreeProps): import("react").JSX.Element;
|
|
38
|
+
//# sourceMappingURL=RtdbTree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RtdbTree.d.ts","sourceRoot":"","sources":["../../../src/rtdb/components/RtdbTree.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAiBlE,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,IAAI,EAAE,kBAAkB,CAAC;IACzB,+CAA+C;IAC/C,GAAG,EAAE,OAAO,CAAC;IACb;gDAC4C;IAC5C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;4CACwC;IACxC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,SAAe,EAAE,SAAS,EAAE,EAAE,aAAa,+BA0B5F"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useRef, useState } from 'react';
|
|
3
|
+
import { RTDB_EDITOR_TYPES, coerceRtdbEditorValue, formatRtdbEditorValue, inferRtdbEditorType, rtdbKeyInputError, } from '../editor.js';
|
|
4
|
+
import { formatRtdbValueLabel, hasRtdbChildren, joinRtdbPath, rtdbPathSegments, rtdbValueKind, } from '../values.js';
|
|
5
|
+
/**
|
|
6
|
+
* The RTDB data tree — the interaction form of the Firebase console /
|
|
7
|
+
* firebase-tools-ui database viewer (clean-room adaptation of the
|
|
8
|
+
* NodeContainer/NodeParent/NodeLeaf split):
|
|
9
|
+
*
|
|
10
|
+
* - parents render a caret (expand/collapse), leaves a `key: value` row;
|
|
11
|
+
* - keys navigate (re-root the view), carets only toggle;
|
|
12
|
+
* - hover/focus reveals per-node actions: `+` add child, `×` delete —
|
|
13
|
+
* delete flips to an INLINE two-step confirm (no modal, C3);
|
|
14
|
+
* - leaf values are click-to-edit inline (type select: string / number /
|
|
15
|
+
* boolean / JSON);
|
|
16
|
+
* - wide levels page at `tree.pageSize` with a "show more" row (the console's
|
|
17
|
+
* form — see `reducers/tree.ts` for why paging over virtualization).
|
|
18
|
+
*
|
|
19
|
+
* Headless: consumers style `[data-pyric-ui="rtdb-tree"]` and the
|
|
20
|
+
* `data-rtdb-*` attributes (`node`, `row`, `caret`, `key`, `sep`, `value`,
|
|
21
|
+
* `actions`, `action-add`, `action-delete`, `confirm`, `editor`, `children`,
|
|
22
|
+
* `show-more`, `error`, `loading`). An empty root renders the console's
|
|
23
|
+
* classic form — `<root>: null` — not an instructional empty state.
|
|
24
|
+
*/
|
|
25
|
+
export function RtdbTree({ tree, api, onNavigate, rootLabel = '/', className }) {
|
|
26
|
+
const { state } = tree;
|
|
27
|
+
const rootSegments = rtdbPathSegments(state.path);
|
|
28
|
+
const rootKey = rootSegments.length === 0 ? rootLabel : rootSegments[rootSegments.length - 1];
|
|
29
|
+
return (_jsx("div", { className: className, "data-pyric-ui": "rtdb-tree", children: state.status === 'loading' ? (_jsx("p", { "data-rtdb-loading": true, children: "Loading\u2026" })) : state.status === 'error' ? (_jsx("p", { role: "alert", "data-rtdb-error": true, children: state.error })) : (_jsx(Node, { tree: tree, api: api, onNavigate: onNavigate, path: state.path, label: rootKey, isViewRoot: true })) }));
|
|
30
|
+
}
|
|
31
|
+
function Node({ tree, api, onNavigate, path, label, isViewRoot }) {
|
|
32
|
+
const value = tree.valueAt(path);
|
|
33
|
+
const isParent = hasRtdbChildren(value);
|
|
34
|
+
const expanded = tree.isExpanded(path);
|
|
35
|
+
const [adding, setAdding] = useState(false);
|
|
36
|
+
const [editing, setEditing] = useState(false);
|
|
37
|
+
const [confirming, setConfirming] = useState(false);
|
|
38
|
+
const [actionError, setActionError] = useState(null);
|
|
39
|
+
const run = async (op, done) => {
|
|
40
|
+
try {
|
|
41
|
+
await op();
|
|
42
|
+
setActionError(null);
|
|
43
|
+
done();
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
setActionError(e instanceof Error ? e.message : String(e));
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const openAdd = () => {
|
|
50
|
+
setAdding(true);
|
|
51
|
+
setConfirming(false);
|
|
52
|
+
if (isParent && !expanded)
|
|
53
|
+
tree.toggle(path);
|
|
54
|
+
};
|
|
55
|
+
const children = isParent && expanded ? tree.childrenAt(path) : null;
|
|
56
|
+
return (_jsxs("div", { "data-rtdb-node": true, "data-rtdb-kind": isParent ? 'parent' : 'leaf', "data-rtdb-view-root": isViewRoot ? '' : undefined, "data-rtdb-expanded": isParent && expanded ? '' : undefined, children: [_jsxs("div", { "data-rtdb-row": true, children: [isParent && !isViewRoot ? (_jsx("button", { type: "button", "data-rtdb-caret": true, "aria-expanded": expanded, "aria-label": expanded ? 'Collapse' : 'Expand', onClick: () => tree.toggle(path), children: _jsx("svg", { "aria-hidden": true, viewBox: "0 0 8 8", width: "8", height: "8", fill: "currentColor", children: _jsx("path", { d: "M1 0l6 4-6 4z" }) }) })) : (_jsx("span", { "aria-hidden": true, "data-rtdb-caret-spacer": true })), _jsx("button", { type: "button", "data-rtdb-key": true, "aria-label": "Key name", onClick: () => onNavigate?.(path), children: label }), !isParent ? (_jsxs(_Fragment, { children: [_jsx("span", { "aria-hidden": true, "data-rtdb-sep": true, children: ":" }), _jsx("button", { type: "button", "data-rtdb-value": true, "data-rtdb-type": rtdbValueKind(value), title: "Edit value", onClick: () => {
|
|
57
|
+
setEditing(true);
|
|
58
|
+
setConfirming(false);
|
|
59
|
+
}, children: formatRtdbValueLabel(value) })] })) : null, _jsx("span", { "data-rtdb-actions": true, children: confirming ? (_jsxs("span", { "data-rtdb-confirm": true, children: [_jsxs("span", { "data-rtdb-confirm-label": true, children: ["Delete", isParent ? ' subtree' : '', "?"] }), _jsx("button", { type: "button", "data-rtdb-confirm-yes": true, onClick: () => void run(() => api.remove(path), () => setConfirming(false)), children: "Delete" }), _jsx("button", { type: "button", "data-rtdb-confirm-no": true, onClick: () => setConfirming(false), children: "Cancel" })] })) : (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", "data-rtdb-action-add": true, "aria-label": `Add child to ${pathLabel(path)}`, title: "Add child", onClick: openAdd, children: "+" }), _jsx("button", { type: "button", "data-rtdb-action-delete": true, "aria-label": `Delete ${pathLabel(path)}`, title: "Delete", onClick: () => setConfirming(true), children: "\u00D7" })] })) })] }), actionError ? (_jsx("p", { role: "alert", "data-rtdb-error": true, children: actionError })) : null, editing ? (_jsx(ValueEditor, { initialType: inferRtdbEditorType(value), initialText: formatRtdbEditorValue(value, inferRtdbEditorType(value)), submitLabel: "Save", onCancel: () => setEditing(false), onSubmit: (next) => run(() => api.set(path, next), () => setEditing(false)) })) : null, adding ? (_jsx(ValueEditor, { withKey: true, initialType: "string", initialText: "", submitLabel: "Add", onCancel: () => setAdding(false), onSubmit: (next, key) => run(() => api.set(joinRtdbPath(path, key), next), () => setAdding(false)) })) : null, children ? (_jsxs("ul", { "data-rtdb-children": true, children: [children.entries.map(([key]) => (_jsx("li", { children: _jsx(Node, { tree: tree, api: api, onNavigate: onNavigate, path: joinRtdbPath(path, key), label: key }) }, key))), children.hiddenCount > 0 ? (_jsx("li", { "data-rtdb-show-more-item": true, children: _jsxs("button", { type: "button", "data-rtdb-show-more": true, onClick: () => tree.showMore(path), children: ["Show more (", children.hiddenCount, " hidden)"] }) })) : null] })) : null] }));
|
|
60
|
+
}
|
|
61
|
+
/** Last segment for aria labels; `'/'` reads as "root". */
|
|
62
|
+
function pathLabel(path) {
|
|
63
|
+
const segments = rtdbPathSegments(path);
|
|
64
|
+
return segments.length === 0 ? 'root' : segments[segments.length - 1];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Inline key/value editor row (add + edit flows). Escape cancels.
|
|
68
|
+
*
|
|
69
|
+
* The key + value fields are UNCONTROLLED and read at submit — validation
|
|
70
|
+
* happens on submit (errors render inline), so per-keystroke state buys
|
|
71
|
+
* nothing. Only the type select is controlled (it decides whether the value
|
|
72
|
+
* control is a text input or a true/false select).
|
|
73
|
+
*/
|
|
74
|
+
function ValueEditor({ withKey, initialType, initialText, submitLabel, onSubmit, onCancel, }) {
|
|
75
|
+
const keyRef = useRef(null);
|
|
76
|
+
const valueRef = useRef(null);
|
|
77
|
+
const [type, setType] = useState(initialType);
|
|
78
|
+
const [error, setError] = useState(null);
|
|
79
|
+
const submit = (e) => {
|
|
80
|
+
e.preventDefault();
|
|
81
|
+
const key = keyRef.current?.value ?? '';
|
|
82
|
+
if (withKey) {
|
|
83
|
+
const keyError = rtdbKeyInputError(key);
|
|
84
|
+
if (keyError) {
|
|
85
|
+
setError(keyError);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const coerced = coerceRtdbEditorValue(type, valueRef.current?.value ?? '');
|
|
90
|
+
if (!coerced.ok) {
|
|
91
|
+
setError(coerced.error);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
setError(null);
|
|
95
|
+
void onSubmit(coerced.value, withKey ? key.trim() : undefined);
|
|
96
|
+
};
|
|
97
|
+
const onEscape = (e) => {
|
|
98
|
+
if (e.key === 'Escape')
|
|
99
|
+
onCancel();
|
|
100
|
+
};
|
|
101
|
+
return (_jsxs("form", { "data-rtdb-editor": true, onSubmit: submit, children: [withKey ? (_jsx("input", { ref: keyRef, "data-rtdb-editor-key": true, "aria-label": "Child key", placeholder: "key", autoFocus: true, onKeyDown: onEscape, spellCheck: false })) : null, _jsx("select", { "data-rtdb-editor-type": true, "aria-label": "Value type", value: type, onChange: (e) => setType(e.currentTarget.value), onKeyDown: onEscape, children: RTDB_EDITOR_TYPES.map((t) => (_jsx("option", { value: t, children: t }, t))) }), type === 'boolean' ? (_jsxs("select", { ref: valueRef, "data-rtdb-editor-value": true, "aria-label": "Value", defaultValue: initialText.trim().toLowerCase() === 'true' ? 'true' : 'false', onKeyDown: onEscape, children: [_jsx("option", { value: "true", children: "true" }), _jsx("option", { value: "false", children: "false" })] })) : (_jsx("input", { ref: valueRef, "data-rtdb-editor-value": true, "aria-label": "Value", placeholder: type === 'json' ? '{ "key": "value" }' : 'value', autoFocus: !withKey, defaultValue: initialText, onKeyDown: onEscape, spellCheck: false })), _jsx("button", { type: "submit", "data-rtdb-editor-save": true, children: submitLabel }), _jsx("button", { type: "button", "data-rtdb-editor-cancel": true, onClick: onCancel, children: "Cancel" }), error ? (_jsx("span", { role: "alert", "data-rtdb-editor-error": true, children: error })) : null] }));
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=RtdbTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RtdbTree.js","sourceRoot":"","sources":["../../../src/rtdb/components/RtdbTree.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inline value-editor logic (pure): the type select + text input pair used by
|
|
3
|
+
* the tree's click-to-edit and add-child rows. Four author-facing types cover
|
|
4
|
+
* every RTDB value: string / number / boolean scalars, and `json` for
|
|
5
|
+
* objects/arrays/null (or any hand-written literal).
|
|
6
|
+
*/
|
|
7
|
+
export type RtdbEditorType = 'string' | 'number' | 'boolean' | 'json';
|
|
8
|
+
export declare const RTDB_EDITOR_TYPES: readonly RtdbEditorType[];
|
|
9
|
+
/** The editor type a value opens under when clicked. */
|
|
10
|
+
export declare function inferRtdbEditorType(value: unknown): RtdbEditorType;
|
|
11
|
+
/** Seed the editor's text field from the current value under a type. */
|
|
12
|
+
export declare function formatRtdbEditorValue(value: unknown, type: RtdbEditorType): string;
|
|
13
|
+
/** Why a typed child key is unusable, or `null` when it's fine. RTDB forbids
|
|
14
|
+
* `. $ # [ ] /` in keys (a `/` would silently create a nested path). */
|
|
15
|
+
export declare function rtdbKeyInputError(key: string): string | null;
|
|
16
|
+
export type RtdbEditorResult = {
|
|
17
|
+
ok: true;
|
|
18
|
+
value: unknown;
|
|
19
|
+
} | {
|
|
20
|
+
ok: false;
|
|
21
|
+
error: string;
|
|
22
|
+
};
|
|
23
|
+
/** Coerce the editor's text under the selected type, or explain why not. */
|
|
24
|
+
export declare function coerceRtdbEditorValue(type: RtdbEditorType, text: string): RtdbEditorResult;
|
|
25
|
+
//# sourceMappingURL=editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/rtdb/editor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAEtE,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,EAKtD,CAAC;AAEF,wDAAwD;AACxD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAWlE;AAED,wEAAwE;AACxE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,MAAM,CAIlF;AAED;yEACyE;AACzE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK5D;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC5B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC,4EAA4E;AAC5E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,CA2B1F"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inline value-editor logic (pure): the type select + text input pair used by
|
|
3
|
+
* the tree's click-to-edit and add-child rows. Four author-facing types cover
|
|
4
|
+
* every RTDB value: string / number / boolean scalars, and `json` for
|
|
5
|
+
* objects/arrays/null (or any hand-written literal).
|
|
6
|
+
*/
|
|
7
|
+
export const RTDB_EDITOR_TYPES = [
|
|
8
|
+
'string',
|
|
9
|
+
'number',
|
|
10
|
+
'boolean',
|
|
11
|
+
'json',
|
|
12
|
+
];
|
|
13
|
+
/** The editor type a value opens under when clicked. */
|
|
14
|
+
export function inferRtdbEditorType(value) {
|
|
15
|
+
switch (typeof value) {
|
|
16
|
+
case 'string':
|
|
17
|
+
return 'string';
|
|
18
|
+
case 'number':
|
|
19
|
+
return 'number';
|
|
20
|
+
case 'boolean':
|
|
21
|
+
return 'boolean';
|
|
22
|
+
default:
|
|
23
|
+
return 'json';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** Seed the editor's text field from the current value under a type. */
|
|
27
|
+
export function formatRtdbEditorValue(value, type) {
|
|
28
|
+
if (type === 'json')
|
|
29
|
+
return JSON.stringify(value ?? null);
|
|
30
|
+
if (value === null || value === undefined)
|
|
31
|
+
return '';
|
|
32
|
+
return String(value);
|
|
33
|
+
}
|
|
34
|
+
/** Why a typed child key is unusable, or `null` when it's fine. RTDB forbids
|
|
35
|
+
* `. $ # [ ] /` in keys (a `/` would silently create a nested path). */
|
|
36
|
+
export function rtdbKeyInputError(key) {
|
|
37
|
+
if (key.trim().length === 0)
|
|
38
|
+
return 'Enter a key.';
|
|
39
|
+
const bad = key.match(/[.$#[\]/]/);
|
|
40
|
+
if (bad)
|
|
41
|
+
return `Keys can't contain "${bad[0]}".`;
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
/** Coerce the editor's text under the selected type, or explain why not. */
|
|
45
|
+
export function coerceRtdbEditorValue(type, text) {
|
|
46
|
+
switch (type) {
|
|
47
|
+
case 'string':
|
|
48
|
+
return { ok: true, value: text };
|
|
49
|
+
case 'number': {
|
|
50
|
+
const trimmed = text.trim();
|
|
51
|
+
if (trimmed.length === 0)
|
|
52
|
+
return { ok: false, error: 'Enter a number.' };
|
|
53
|
+
const n = Number(trimmed);
|
|
54
|
+
if (Number.isNaN(n))
|
|
55
|
+
return { ok: false, error: `"${text}" is not a number.` };
|
|
56
|
+
return { ok: true, value: n };
|
|
57
|
+
}
|
|
58
|
+
case 'boolean': {
|
|
59
|
+
const t = text.trim().toLowerCase();
|
|
60
|
+
if (t === 'true')
|
|
61
|
+
return { ok: true, value: true };
|
|
62
|
+
if (t === 'false')
|
|
63
|
+
return { ok: true, value: false };
|
|
64
|
+
return { ok: false, error: 'Enter true or false.' };
|
|
65
|
+
}
|
|
66
|
+
case 'json': {
|
|
67
|
+
const t = text.trim();
|
|
68
|
+
if (t.length === 0)
|
|
69
|
+
return { ok: true, value: null };
|
|
70
|
+
try {
|
|
71
|
+
return { ok: true, value: JSON.parse(t) };
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
return { ok: false, error: e instanceof Error ? e.message : 'Invalid JSON.' };
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/rtdb/editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { RtdbApi } from '../rtdbApi.js';
|
|
2
|
+
import { type RtdbTreeState, type RtdbVisibleChildren } from '../reducers/tree.js';
|
|
3
|
+
/** Console-style child paging (Firebase console shows 50, then "show more"). */
|
|
4
|
+
export declare const RTDB_DEFAULT_PAGE_SIZE = 50;
|
|
5
|
+
export interface UseRtdbTreeOptions {
|
|
6
|
+
/** Children rendered per level before "show more". Default 50. */
|
|
7
|
+
pageSize?: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Everything a tree view needs: the reducer state plus path-addressed
|
|
11
|
+
* selectors and the expansion/paging commands. All paths are ABSOLUTE
|
|
12
|
+
* database paths.
|
|
13
|
+
*/
|
|
14
|
+
export interface RtdbTreeController {
|
|
15
|
+
state: RtdbTreeState;
|
|
16
|
+
pageSize: number;
|
|
17
|
+
valueAt(path: string): unknown;
|
|
18
|
+
isExpanded(path: string): boolean;
|
|
19
|
+
childrenAt(path: string): RtdbVisibleChildren;
|
|
20
|
+
toggle(path: string): void;
|
|
21
|
+
showMore(path: string): void;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Live tree state for the RTDB viewer: subscribes to the value at the view
|
|
25
|
+
* root `path` (realtime — every write re-delivers the subtree) and runs the
|
|
26
|
+
* expansion/paging reducer over it. See `reducers/tree.ts` for the
|
|
27
|
+
* one-subscription-per-view-root loading strategy and why expansion is a
|
|
28
|
+
* pure render toggle rather than a fetch.
|
|
29
|
+
*/
|
|
30
|
+
export declare function useRtdbTree(api: RtdbApi, path: string, options?: UseRtdbTreeOptions): RtdbTreeController;
|
|
31
|
+
//# sourceMappingURL=useRtdbTree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRtdbTree.d.ts","sourceRoot":"","sources":["../../../src/rtdb/hooks/useRtdbTree.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAML,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,gFAAgF;AAChF,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,MAAM,WAAW,kBAAkB;IACjC,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC9C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,kBAAuB,GAC/B,kBAAkB,CAyDpB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { useCallback, useEffect, useMemo, useReducer } from 'react';
|
|
2
|
+
import { normalizeRtdbPath } from '../values.js';
|
|
3
|
+
import { initialRtdbTree, isRtdbPathExpanded, rtdbTreeReducer, rtdbTreeValueAt, rtdbVisibleChildren, } from '../reducers/tree.js';
|
|
4
|
+
/** Console-style child paging (Firebase console shows 50, then "show more"). */
|
|
5
|
+
export const RTDB_DEFAULT_PAGE_SIZE = 50;
|
|
6
|
+
/**
|
|
7
|
+
* Live tree state for the RTDB viewer: subscribes to the value at the view
|
|
8
|
+
* root `path` (realtime — every write re-delivers the subtree) and runs the
|
|
9
|
+
* expansion/paging reducer over it. See `reducers/tree.ts` for the
|
|
10
|
+
* one-subscription-per-view-root loading strategy and why expansion is a
|
|
11
|
+
* pure render toggle rather than a fetch.
|
|
12
|
+
*/
|
|
13
|
+
export function useRtdbTree(api, path, options = {}) {
|
|
14
|
+
const pageSize = options.pageSize ?? RTDB_DEFAULT_PAGE_SIZE;
|
|
15
|
+
const normalized = normalizeRtdbPath(path);
|
|
16
|
+
const [state, dispatch] = useReducer(rtdbTreeReducer, normalized, initialRtdbTree);
|
|
17
|
+
// Keep the reducer's view root in lockstep with the prop BEFORE the
|
|
18
|
+
// subscription effect below re-runs, so a snapshot for the new root never
|
|
19
|
+
// lands on the old root's state.
|
|
20
|
+
if (state.path !== normalized) {
|
|
21
|
+
dispatch({ type: 'navigate', path: normalized });
|
|
22
|
+
}
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
let cancelled = false;
|
|
25
|
+
const unsubscribe = api.subscribeValue(normalized, (value) => {
|
|
26
|
+
if (!cancelled)
|
|
27
|
+
dispatch({ type: 'value', path: normalized, value });
|
|
28
|
+
}, (err) => {
|
|
29
|
+
if (!cancelled) {
|
|
30
|
+
dispatch({
|
|
31
|
+
type: 'error',
|
|
32
|
+
path: normalized,
|
|
33
|
+
message: err instanceof Error ? err.message : String(err),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
return () => {
|
|
38
|
+
cancelled = true;
|
|
39
|
+
unsubscribe();
|
|
40
|
+
};
|
|
41
|
+
}, [api, normalized]);
|
|
42
|
+
const valueAt = useCallback((p) => rtdbTreeValueAt(state, p), [state]);
|
|
43
|
+
const isExpanded = useCallback((p) => isRtdbPathExpanded(state, p), [state]);
|
|
44
|
+
const childrenAt = useCallback((p) => rtdbVisibleChildren(state, p, pageSize), [state, pageSize]);
|
|
45
|
+
const toggle = useCallback((p) => dispatch({ type: 'toggle', path: p }), []);
|
|
46
|
+
const showMore = useCallback((p) => dispatch({ type: 'show-more', path: p, pageSize }), [pageSize]);
|
|
47
|
+
return useMemo(() => ({ state, pageSize, valueAt, isExpanded, childrenAt, toggle, showMore }), [state, pageSize, valueAt, isExpanded, childrenAt, toggle, showMore]);
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=useRtdbTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRtdbTree.js","sourceRoot":"","sources":["../../../src/rtdb/hooks/useRtdbTree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@pyric/ui/rtdb` — the headless RTDB data viewer, in the Firebase console /
|
|
3
|
+
* firebase-tools-ui form: an editable path bar (crumbs + direct path entry)
|
|
4
|
+
* over an expandable tree with inline add/edit/delete affordances. Follows
|
|
5
|
+
* this package's firestore/auth/storage split: pure logic + hooks +
|
|
6
|
+
* unstyled components on `data-*` styling contracts; the consumer (Studio)
|
|
7
|
+
* brings the CSS and the backend bundle ({@link RtdbApi}).
|
|
8
|
+
*/
|
|
9
|
+
export { normalizeRtdbPath, rtdbPathSegments, joinRtdbPath, parentRtdbPath, relativeRtdbPath, isRtdbObjectValue, hasRtdbChildren, rtdbChildEntries, rtdbValueAt, formatRtdbJson, parseRtdbJson, rtdbValueKind, previewRtdbValue, normalizeRtdbSnapshotValue, formatRtdbValueLabel, } from './values.js';
|
|
10
|
+
export { parseRtdbPathInput, rtdbCrumbs, type RtdbCrumb } from './pathInput.js';
|
|
11
|
+
export { RTDB_EDITOR_TYPES, inferRtdbEditorType, formatRtdbEditorValue, coerceRtdbEditorValue, rtdbKeyInputError, type RtdbEditorType, type RtdbEditorResult, } from './editor.js';
|
|
12
|
+
export type { RtdbApi } from './rtdbApi.js';
|
|
13
|
+
export { initialRtdbTree, rtdbTreeReducer, rtdbTreeValueAt, isRtdbPathExpanded, rtdbVisibleChildren, type RtdbTreeState, type RtdbTreeAction, type RtdbVisibleChildren, } from './reducers/tree.js';
|
|
14
|
+
export { useRtdbTree, RTDB_DEFAULT_PAGE_SIZE, type UseRtdbTreeOptions, type RtdbTreeController, } from './hooks/useRtdbTree.js';
|
|
15
|
+
export { RtdbPathBar, type RtdbPathBarProps } from './components/RtdbPathBar.js';
|
|
16
|
+
export { RtdbTree, type RtdbTreeProps } from './components/RtdbTree.js';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rtdb/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,0BAA0B,EAC1B,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhF,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AAGrB,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,mBAAmB,GACzB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC"}
|