@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,43 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { FirebaseStorage, FullMetadata } from 'pyric/storage';
|
|
3
|
+
import { type StoragePreview } from '../previews.js';
|
|
4
|
+
export interface ObjectInspectorProps {
|
|
5
|
+
/** The package's single Storage handle prop (sandbox or prod). */
|
|
6
|
+
storage: FirebaseStorage | null | undefined;
|
|
7
|
+
/** Object path to inspect. `null` renders the idle shell — keep
|
|
8
|
+
* the inspector mounted and swap paths as the user selects rows. */
|
|
9
|
+
path: string | null;
|
|
10
|
+
/** Consumer previews, tried BEFORE the built-ins (first match
|
|
11
|
+
* wins) — the extension channel of the preview registry. */
|
|
12
|
+
previews?: StoragePreview[];
|
|
13
|
+
/** Metadata-section slot. Default renders the standard field list.
|
|
14
|
+
* The header, preview, and state wiring stay with the component. */
|
|
15
|
+
renderMetadata?: (metadata: FullMetadata) => ReactNode;
|
|
16
|
+
/** Extra content below the preview (metadata editor, delete
|
|
17
|
+
* button, …). */
|
|
18
|
+
children?: ReactNode;
|
|
19
|
+
className?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Headless inspector for one storage object: metadata + a
|
|
23
|
+
* content-type-driven preview. Previews come from the registry
|
|
24
|
+
* (`image/*` and `text/* + application/json` built in; extend via
|
|
25
|
+
* `previews`). Blob bytes load lazily and ONLY when the matched
|
|
26
|
+
* preview asks (`needsBlob`) and the object is within the preview's
|
|
27
|
+
* `maxBytes` cap; the blob URL is revoked on unmount/path change
|
|
28
|
+
* (see `useStorageObject`).
|
|
29
|
+
*
|
|
30
|
+
* Ships no visual styling. Consumers style via:
|
|
31
|
+
* - `[data-pyric-ui="object-inspector"]` — root (stamps `data-size`)
|
|
32
|
+
* - `…[data-pyric-idle]` / `[data-pyric-loading]` / `[data-pyric-error]`
|
|
33
|
+
* - `[data-pyric-object-name]` / `[data-pyric-object-metadata]`
|
|
34
|
+
* - `[data-pyric-metadata-field="<field>"]` — each metadata row
|
|
35
|
+
* - `[data-pyric-object-preview]` — the preview container, stamping
|
|
36
|
+
* `data-pyric-preview="<id>"` for the matched registry entry
|
|
37
|
+
* - `…[data-pyric-preview-loading]` — blob in flight
|
|
38
|
+
* - `…[data-pyric-preview-error]` — blob load failed
|
|
39
|
+
* - `…[data-pyric-preview-too-large]` — over the preview's cap
|
|
40
|
+
* - `…[data-pyric-preview-none]` — no registry match (metadata-only)
|
|
41
|
+
*/
|
|
42
|
+
export declare function ObjectInspector({ storage, path, previews, renderMetadata, children, className, }: ObjectInspectorProps): import("react").JSX.Element;
|
|
43
|
+
//# sourceMappingURL=ObjectInspector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObjectInspector.d.ts","sourceRoot":"","sources":["../../../src/storage/components/ObjectInspector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGnE,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE3E,MAAM,WAAW,oBAAoB;IACnC,kEAAkE;IAClE,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C;yEACqE;IACrE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB;iEAC6D;IAC7D,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B;yEACqE;IACrE,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,SAAS,CAAC;IACvD;sBACkB;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAsCD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,SAAS,GACV,EAAE,oBAAoB,+BAgFtB"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect } from 'react';
|
|
3
|
+
import { useContainerSize } from '../../primitives/hooks/useContainerSize.js';
|
|
4
|
+
import { useStorageObject } from '../hooks/useStorageObject.js';
|
|
5
|
+
import { selectStoragePreview } from '../previews.js';
|
|
6
|
+
const METADATA_FIELDS = [
|
|
7
|
+
{ key: 'fullPath', label: 'Path', value: (md) => md.fullPath },
|
|
8
|
+
{ key: 'size', label: 'Size', value: (md) => `${md.size}` },
|
|
9
|
+
{ key: 'contentType', label: 'Content type', value: (md) => md.contentType },
|
|
10
|
+
{ key: 'cacheControl', label: 'Cache control', value: (md) => md.cacheControl },
|
|
11
|
+
{ key: 'timeCreated', label: 'Created', value: (md) => md.timeCreated },
|
|
12
|
+
{ key: 'updated', label: 'Updated', value: (md) => md.updated },
|
|
13
|
+
];
|
|
14
|
+
function DefaultMetadata({ metadata }) {
|
|
15
|
+
return (_jsxs("dl", { "data-pyric-object-metadata": true, children: [METADATA_FIELDS.map(({ key, label, value }) => {
|
|
16
|
+
const v = value(metadata);
|
|
17
|
+
if (v === undefined)
|
|
18
|
+
return null;
|
|
19
|
+
return (_jsxs("div", { "data-pyric-metadata-field": key, children: [_jsx("dt", { children: label }), _jsx("dd", { children: v })] }, key));
|
|
20
|
+
}), Object.entries(metadata.customMetadata ?? {}).map(([k, v]) => (_jsxs("div", { "data-pyric-metadata-field": "customMetadata", "data-pyric-metadata-key": k, children: [_jsx("dt", { children: k }), _jsx("dd", { children: v })] }, `custom:${k}`)))] }));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Headless inspector for one storage object: metadata + a
|
|
24
|
+
* content-type-driven preview. Previews come from the registry
|
|
25
|
+
* (`image/*` and `text/* + application/json` built in; extend via
|
|
26
|
+
* `previews`). Blob bytes load lazily and ONLY when the matched
|
|
27
|
+
* preview asks (`needsBlob`) and the object is within the preview's
|
|
28
|
+
* `maxBytes` cap; the blob URL is revoked on unmount/path change
|
|
29
|
+
* (see `useStorageObject`).
|
|
30
|
+
*
|
|
31
|
+
* Ships no visual styling. Consumers style via:
|
|
32
|
+
* - `[data-pyric-ui="object-inspector"]` — root (stamps `data-size`)
|
|
33
|
+
* - `…[data-pyric-idle]` / `[data-pyric-loading]` / `[data-pyric-error]`
|
|
34
|
+
* - `[data-pyric-object-name]` / `[data-pyric-object-metadata]`
|
|
35
|
+
* - `[data-pyric-metadata-field="<field>"]` — each metadata row
|
|
36
|
+
* - `[data-pyric-object-preview]` — the preview container, stamping
|
|
37
|
+
* `data-pyric-preview="<id>"` for the matched registry entry
|
|
38
|
+
* - `…[data-pyric-preview-loading]` — blob in flight
|
|
39
|
+
* - `…[data-pyric-preview-error]` — blob load failed
|
|
40
|
+
* - `…[data-pyric-preview-too-large]` — over the preview's cap
|
|
41
|
+
* - `…[data-pyric-preview-none]` — no registry match (metadata-only)
|
|
42
|
+
*/
|
|
43
|
+
export function ObjectInspector({ storage, path, previews, renderMetadata, children, className, }) {
|
|
44
|
+
const { ref: rootRef, size } = useContainerSize();
|
|
45
|
+
const object = useStorageObject(storage, path);
|
|
46
|
+
const { metadata, blobStatus, loadBlob } = object;
|
|
47
|
+
const preview = metadata ? selectStoragePreview(metadata, previews) : undefined;
|
|
48
|
+
const tooLarge = preview?.maxBytes !== undefined &&
|
|
49
|
+
metadata !== undefined &&
|
|
50
|
+
metadata.size > preview.maxBytes;
|
|
51
|
+
const wantsBlob = preview?.needsBlob === true && !tooLarge;
|
|
52
|
+
// Auto-load the bytes when (and only when) the matched preview
|
|
53
|
+
// needs them. `blobStatus` resets to 'idle' on path change, which
|
|
54
|
+
// re-arms this effect for the next object.
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
if (wantsBlob && blobStatus === 'idle')
|
|
57
|
+
loadBlob();
|
|
58
|
+
}, [wantsBlob, blobStatus, loadBlob]);
|
|
59
|
+
if (object.status === 'idle') {
|
|
60
|
+
return (_jsx("div", { className: className, "data-pyric-ui": "object-inspector", "data-pyric-idle": "" }));
|
|
61
|
+
}
|
|
62
|
+
if (object.status === 'loading') {
|
|
63
|
+
return (_jsx("div", { className: className, "data-pyric-ui": "object-inspector", "data-pyric-loading": "" }));
|
|
64
|
+
}
|
|
65
|
+
if (object.status === 'error' || metadata === undefined) {
|
|
66
|
+
return (_jsx("div", { className: className, "data-pyric-ui": "object-inspector", "data-pyric-error": "", role: "alert", children: object.error?.message }));
|
|
67
|
+
}
|
|
68
|
+
let previewContent;
|
|
69
|
+
let previewState = {};
|
|
70
|
+
if (preview === undefined) {
|
|
71
|
+
previewState = { 'data-pyric-preview-none': '' };
|
|
72
|
+
}
|
|
73
|
+
else if (tooLarge) {
|
|
74
|
+
previewState = { 'data-pyric-preview-too-large': '' };
|
|
75
|
+
}
|
|
76
|
+
else if (wantsBlob && blobStatus === 'loading') {
|
|
77
|
+
previewState = { 'data-pyric-preview-loading': '' };
|
|
78
|
+
}
|
|
79
|
+
else if (wantsBlob && blobStatus === 'error') {
|
|
80
|
+
previewState = { 'data-pyric-preview-error': '' };
|
|
81
|
+
previewContent = object.blobError?.message;
|
|
82
|
+
}
|
|
83
|
+
else if (!wantsBlob || blobStatus === 'success') {
|
|
84
|
+
previewContent = preview.render({
|
|
85
|
+
metadata,
|
|
86
|
+
blob: object.blob,
|
|
87
|
+
blobUrl: object.blobUrl,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return (_jsxs("div", { ref: rootRef, className: className, "data-pyric-ui": "object-inspector", "data-size": size, children: [_jsx("div", { "data-pyric-object-name": true, children: metadata.name }), renderMetadata ? renderMetadata(metadata) : _jsx(DefaultMetadata, { metadata: metadata }), _jsx("div", { "data-pyric-object-preview": true, "data-pyric-preview": preview?.id, ...previewState, children: previewContent }), children] }));
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=ObjectInspector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObjectInspector.js","sourceRoot":"","sources":["../../../src/storage/components/ObjectInspector.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface PathBreadcrumbProps {
|
|
3
|
+
/** Current path. `''` renders just the root crumb. */
|
|
4
|
+
path: string;
|
|
5
|
+
/** Fired with the absolute path of the clicked crumb (`''` for
|
|
6
|
+
* root). Wire to `usePathState.setPath`. */
|
|
7
|
+
onNavigate?: (path: string) => void;
|
|
8
|
+
/** Label for the root crumb. Default `'/'` — pass the bucket name
|
|
9
|
+
* for a `gs://bucket` feel. */
|
|
10
|
+
rootLabel?: ReactNode;
|
|
11
|
+
/** Rendered between crumbs. Default `'/'`. */
|
|
12
|
+
separator?: ReactNode;
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Headless breadcrumb for storage paths. Every crumb (including the
|
|
17
|
+
* current one) is a real `<button>` — clicking the current crumb is
|
|
18
|
+
* a cheap "refresh this level" affordance for consumers that wire
|
|
19
|
+
* `onNavigate` to a path-keyed loader.
|
|
20
|
+
*
|
|
21
|
+
* Ships no visual styling. Consumers style via:
|
|
22
|
+
* - `[data-pyric-ui="path-breadcrumb"]` — the `<nav>` root
|
|
23
|
+
* - `[data-pyric-breadcrumb-item]` — each `<li>`
|
|
24
|
+
* - `[data-pyric-breadcrumb-link]` — each crumb button
|
|
25
|
+
* - `[data-pyric-breadcrumb-link][data-pyric-current]` — the current level
|
|
26
|
+
* - `[data-pyric-breadcrumb-root]` — the root crumb's button
|
|
27
|
+
* - `[data-pyric-breadcrumb-separator]` — the separators
|
|
28
|
+
*/
|
|
29
|
+
export declare function PathBreadcrumb({ path, onNavigate, rootLabel, separator, className, }: PathBreadcrumbProps): import("react").JSX.Element;
|
|
30
|
+
//# sourceMappingURL=PathBreadcrumb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PathBreadcrumb.d.ts","sourceRoot":"","sources":["../../../src/storage/components/PathBreadcrumb.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb;iDAC6C;IAC7C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;oCACgC;IAChC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,UAAU,EACV,SAAe,EACf,SAAe,EACf,SAAS,GACV,EAAE,mBAAmB,+BA8CrB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { normalizeStoragePath } from '../hooks/usePathState.js';
|
|
3
|
+
/**
|
|
4
|
+
* Headless breadcrumb for storage paths. Every crumb (including the
|
|
5
|
+
* current one) is a real `<button>` — clicking the current crumb is
|
|
6
|
+
* a cheap "refresh this level" affordance for consumers that wire
|
|
7
|
+
* `onNavigate` to a path-keyed loader.
|
|
8
|
+
*
|
|
9
|
+
* Ships no visual styling. Consumers style via:
|
|
10
|
+
* - `[data-pyric-ui="path-breadcrumb"]` — the `<nav>` root
|
|
11
|
+
* - `[data-pyric-breadcrumb-item]` — each `<li>`
|
|
12
|
+
* - `[data-pyric-breadcrumb-link]` — each crumb button
|
|
13
|
+
* - `[data-pyric-breadcrumb-link][data-pyric-current]` — the current level
|
|
14
|
+
* - `[data-pyric-breadcrumb-root]` — the root crumb's button
|
|
15
|
+
* - `[data-pyric-breadcrumb-separator]` — the separators
|
|
16
|
+
*/
|
|
17
|
+
export function PathBreadcrumb({ path, onNavigate, rootLabel = '/', separator = '/', className, }) {
|
|
18
|
+
const normalized = normalizeStoragePath(path);
|
|
19
|
+
const segments = normalized === '' ? [] : normalized.split('/');
|
|
20
|
+
return (_jsx("nav", { className: className, "data-pyric-ui": "path-breadcrumb", "aria-label": "Storage path", children: _jsxs("ol", { "data-pyric-breadcrumb-list": true, children: [_jsx("li", { "data-pyric-breadcrumb-item": true, children: _jsx("button", { type: "button", onClick: () => onNavigate?.(''), "data-pyric-breadcrumb-link": true, "data-pyric-breadcrumb-root": true, "data-pyric-current": segments.length === 0 ? '' : undefined, "aria-current": segments.length === 0 ? 'page' : undefined, children: rootLabel }) }), segments.map((segment, i) => {
|
|
21
|
+
const isCurrent = i === segments.length - 1;
|
|
22
|
+
const target = segments.slice(0, i + 1).join('/');
|
|
23
|
+
return (_jsxs("li", { "data-pyric-breadcrumb-item": true, children: [_jsx("span", { "aria-hidden": true, "data-pyric-breadcrumb-separator": true, children: separator }), _jsx("button", { type: "button", onClick: () => onNavigate?.(target), "data-pyric-breadcrumb-link": true, "data-pyric-current": isCurrent ? '' : undefined, "aria-current": isCurrent ? 'page' : undefined, children: segment })] }, target));
|
|
24
|
+
})] }) }));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=PathBreadcrumb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PathBreadcrumb.js","sourceRoot":"","sources":["../../../src/storage/components/PathBreadcrumb.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAgBhE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,cAAc,CAAC,EAC7B,IAAI,EACJ,UAAU,EACV,SAAS,GAAG,GAAG,EACf,SAAS,GAAG,GAAG,EACf,SAAS,GACW;IACpB,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEhE,OAAO,CACL,cACE,SAAS,EAAE,SAAS,mBACN,iBAAiB,gBACpB,cAAc,YAEzB,6DACE,2DACE,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,gGAGX,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,kBAC5C,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YAEvD,SAAS,GACH,GACN,EACJ,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;oBAC3B,MAAM,SAAS,GAAG,CAAC,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAClD,OAAO,CACL,6DACE,uFACG,SAAS,GACL,EACP,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,4DAEf,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,kBAChC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YAE3C,OAAO,GACD,KAZF,MAAM,CAaV,CACN,CAAC;gBACJ,CAAC,CAAC,IACC,GACD,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
/** One dropped file, flattened from the drop's file/folder tree. */
|
|
3
|
+
export interface DroppedFile {
|
|
4
|
+
file: File;
|
|
5
|
+
/**
|
|
6
|
+
* Path relative to the drop — `'a.txt'` for a plain file drop,
|
|
7
|
+
* `'photos/cat.png'` for a file inside a dropped folder. Feed
|
|
8
|
+
* straight into `useObjectUpload`:
|
|
9
|
+
* `upload(files.map((f) => ({ path: f.relativePath, data: f.file })))`.
|
|
10
|
+
*/
|
|
11
|
+
relativePath: string;
|
|
12
|
+
}
|
|
13
|
+
export interface UploadDropzoneProps {
|
|
14
|
+
/**
|
|
15
|
+
* Fired once per drop with the flattened file list (folder drops
|
|
16
|
+
* are traversed recursively via `webkitGetAsEntry`; empty folders
|
|
17
|
+
* yield nothing — wire `useObjectUpload.createFolder` to your own
|
|
18
|
+
* "new folder" affordance instead). Not fired for empty drops.
|
|
19
|
+
*/
|
|
20
|
+
onFiles: (files: DroppedFile[]) => void;
|
|
21
|
+
/** Slot — the dropzone chrome ("Drop files here…", a browse
|
|
22
|
+
* `<input type="file">`, anything). The component owns only the
|
|
23
|
+
* drag wiring + `data-*` states. */
|
|
24
|
+
children?: ReactNode;
|
|
25
|
+
/** Ignore drops + suppress the dragging state. */
|
|
26
|
+
disabled?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Why the dropzone is disabled — stamped on
|
|
29
|
+
* `data-disabled-reason` (and only while `disabled`) so the
|
|
30
|
+
* chrome/styling can surface it. The canonical source is the rules
|
|
31
|
+
* gate: `disabled={!gate.verdictFor(path).upload}` +
|
|
32
|
+
* `disabledReason={gate.verdictFor(path).reasons.write.join('; ')}`.
|
|
33
|
+
*/
|
|
34
|
+
disabledReason?: string;
|
|
35
|
+
className?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Headless drop target for file + folder uploads. Slot-based: the
|
|
39
|
+
* children render the chrome; the component owns drag wiring and
|
|
40
|
+
* stamps `data-dragging` while a drag hovers (a counter tracks
|
|
41
|
+
* enter/leave pairs so crossing child elements doesn't flicker).
|
|
42
|
+
*
|
|
43
|
+
* Ships no visual styling. Consumers style via:
|
|
44
|
+
* - `[data-pyric-ui="upload-dropzone"]` — the root
|
|
45
|
+
* - `…[data-dragging]` — a drag is hovering
|
|
46
|
+
* - `…[data-disabled]`
|
|
47
|
+
* - `…[data-disabled-reason="…"]` — why (e.g. a denied write verdict)
|
|
48
|
+
*/
|
|
49
|
+
export declare function UploadDropzone({ onFiles, children, disabled, disabledReason, className, }: UploadDropzoneProps): import("react").JSX.Element;
|
|
50
|
+
//# sourceMappingURL=UploadDropzone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UploadDropzone.d.ts","sourceRoot":"","sources":["../../../src/storage/components/UploadDropzone.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtF,oEAAoE;AACpE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IACxC;;yCAEqC;IACrC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,SAAS,GACV,EAAE,mBAAmB,+BA8DrB"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useRef, useState } from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* Walk a `FileSystemEntry` tree depth-first, accumulating files with
|
|
5
|
+
* folder-relative paths. `readEntries` is batched per spec (Chrome
|
|
6
|
+
* caps a batch at 100) — loop until an empty batch.
|
|
7
|
+
*/
|
|
8
|
+
async function walkEntry(entry, prefix, out) {
|
|
9
|
+
const path = prefix === '' ? entry.name : `${prefix}/${entry.name}`;
|
|
10
|
+
if (entry.isFile) {
|
|
11
|
+
const file = await new Promise((resolve, reject) => entry.file(resolve, reject));
|
|
12
|
+
out.push({ file, relativePath: path });
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (entry.isDirectory) {
|
|
16
|
+
const reader = entry.createReader();
|
|
17
|
+
for (;;) {
|
|
18
|
+
const batch = await new Promise((resolve, reject) => reader.readEntries(resolve, reject));
|
|
19
|
+
if (batch.length === 0)
|
|
20
|
+
break;
|
|
21
|
+
for (const child of batch) {
|
|
22
|
+
await walkEntry(child, path, out);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Flatten a drop's `DataTransfer` into files. Prefers the
|
|
29
|
+
* `webkitGetAsEntry` tree (the only channel that exposes folder
|
|
30
|
+
* structure); items without it fall back to `getAsFile`, and a
|
|
31
|
+
* `DataTransfer` with no usable `items` falls back to `files`.
|
|
32
|
+
*/
|
|
33
|
+
async function collectDroppedFiles(dt) {
|
|
34
|
+
const out = [];
|
|
35
|
+
const items = dt.items ? Array.from(dt.items) : [];
|
|
36
|
+
for (const item of items) {
|
|
37
|
+
if (item.kind !== 'file')
|
|
38
|
+
continue;
|
|
39
|
+
const getEntry = item.webkitGetAsEntry;
|
|
40
|
+
const entry = typeof getEntry === 'function' ? getEntry.call(item) : null;
|
|
41
|
+
if (entry) {
|
|
42
|
+
await walkEntry(entry, '', out);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const file = item.getAsFile?.();
|
|
46
|
+
if (file)
|
|
47
|
+
out.push({ file, relativePath: file.name });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (out.length === 0) {
|
|
51
|
+
for (const file of Array.from(dt.files ?? [])) {
|
|
52
|
+
out.push({ file, relativePath: file.name });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Headless drop target for file + folder uploads. Slot-based: the
|
|
59
|
+
* children render the chrome; the component owns drag wiring and
|
|
60
|
+
* stamps `data-dragging` while a drag hovers (a counter tracks
|
|
61
|
+
* enter/leave pairs so crossing child elements doesn't flicker).
|
|
62
|
+
*
|
|
63
|
+
* Ships no visual styling. Consumers style via:
|
|
64
|
+
* - `[data-pyric-ui="upload-dropzone"]` — the root
|
|
65
|
+
* - `…[data-dragging]` — a drag is hovering
|
|
66
|
+
* - `…[data-disabled]`
|
|
67
|
+
* - `…[data-disabled-reason="…"]` — why (e.g. a denied write verdict)
|
|
68
|
+
*/
|
|
69
|
+
export function UploadDropzone({ onFiles, children, disabled, disabledReason, className, }) {
|
|
70
|
+
const [dragging, setDragging] = useState(false);
|
|
71
|
+
// dragenter/dragleave fire for every child crossing — count the
|
|
72
|
+
// pairs and only clear at depth 0.
|
|
73
|
+
const depthRef = useRef(0);
|
|
74
|
+
const handleDragEnter = useCallback((e) => {
|
|
75
|
+
e.preventDefault();
|
|
76
|
+
if (disabled)
|
|
77
|
+
return;
|
|
78
|
+
depthRef.current += 1;
|
|
79
|
+
setDragging(true);
|
|
80
|
+
}, [disabled]);
|
|
81
|
+
const handleDragOver = useCallback((e) => {
|
|
82
|
+
// Required — without preventDefault the browser refuses the drop.
|
|
83
|
+
e.preventDefault();
|
|
84
|
+
}, []);
|
|
85
|
+
const handleDragLeave = useCallback((e) => {
|
|
86
|
+
e.preventDefault();
|
|
87
|
+
if (disabled)
|
|
88
|
+
return;
|
|
89
|
+
depthRef.current = Math.max(0, depthRef.current - 1);
|
|
90
|
+
if (depthRef.current === 0)
|
|
91
|
+
setDragging(false);
|
|
92
|
+
}, [disabled]);
|
|
93
|
+
const handleDrop = useCallback((e) => {
|
|
94
|
+
e.preventDefault();
|
|
95
|
+
depthRef.current = 0;
|
|
96
|
+
setDragging(false);
|
|
97
|
+
if (disabled)
|
|
98
|
+
return;
|
|
99
|
+
const dt = e.dataTransfer;
|
|
100
|
+
if (!dt)
|
|
101
|
+
return;
|
|
102
|
+
void collectDroppedFiles(dt).then((files) => {
|
|
103
|
+
if (files.length > 0)
|
|
104
|
+
onFiles(files);
|
|
105
|
+
});
|
|
106
|
+
}, [disabled, onFiles]);
|
|
107
|
+
return (_jsx("div", { className: className, "data-pyric-ui": "upload-dropzone", "data-dragging": dragging ? '' : undefined, "data-disabled": disabled ? '' : undefined, "data-disabled-reason": disabled ? disabledReason : undefined, "aria-disabled": disabled || undefined, onDragEnter: handleDragEnter, onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, children: children }));
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=UploadDropzone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UploadDropzone.js","sourceRoot":"","sources":["../../../src/storage/components/UploadDropzone.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type FirebaseStorage, type StorageReference } from 'pyric/storage';
|
|
2
|
+
/**
|
|
3
|
+
* Internal — build a reference to the trailing-slash folder
|
|
4
|
+
* placeholder (`<path>/`, the GCS create-folder convention).
|
|
5
|
+
*
|
|
6
|
+
* `StorageReference` is a documented structural value object (two
|
|
7
|
+
* refs with the same `(storage, fullPath)` are equal), so a plain
|
|
8
|
+
* object is a legal reference — the only way to express a `<path>/`
|
|
9
|
+
* name past `ref()`'s slash normalization. Sandbox targets accept
|
|
10
|
+
* it; prod targets throw (the `pyric/storage` follow-up routes prod
|
|
11
|
+
* through the REST `name=<path>/` channel — see the P2 step-00 doc).
|
|
12
|
+
*/
|
|
13
|
+
export declare function folderPlaceholderRef(storage: FirebaseStorage, folderPath: string): StorageReference;
|
|
14
|
+
//# sourceMappingURL=folderPlaceholder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folderPlaceholder.d.ts","sourceRoot":"","sources":["../../src/storage/folderPlaceholder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE1F;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,MAAM,GACjB,gBAAgB,CAalB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ref as refFn } from 'pyric/storage';
|
|
2
|
+
/**
|
|
3
|
+
* Internal — build a reference to the trailing-slash folder
|
|
4
|
+
* placeholder (`<path>/`, the GCS create-folder convention).
|
|
5
|
+
*
|
|
6
|
+
* `StorageReference` is a documented structural value object (two
|
|
7
|
+
* refs with the same `(storage, fullPath)` are equal), so a plain
|
|
8
|
+
* object is a legal reference — the only way to express a `<path>/`
|
|
9
|
+
* name past `ref()`'s slash normalization. Sandbox targets accept
|
|
10
|
+
* it; prod targets throw (the `pyric/storage` follow-up routes prod
|
|
11
|
+
* through the REST `name=<path>/` channel — see the P2 step-00 doc).
|
|
12
|
+
*/
|
|
13
|
+
export function folderPlaceholderRef(storage, folderPath) {
|
|
14
|
+
const folder = refFn(storage, folderPath);
|
|
15
|
+
return {
|
|
16
|
+
storage,
|
|
17
|
+
bucket: folder.bucket,
|
|
18
|
+
fullPath: `${folder.fullPath}/`,
|
|
19
|
+
// GCS semantics: the segment after the final slash — empty for a
|
|
20
|
+
// placeholder.
|
|
21
|
+
name: '',
|
|
22
|
+
parent: folder,
|
|
23
|
+
root: folder.root,
|
|
24
|
+
toString: () => `${folder.toString()}/`,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=folderPlaceholder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folderPlaceholder.js","sourceRoot":"","sources":["../../src/storage/folderPlaceholder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,KAAK,EAA+C,MAAM,eAAe,CAAC;AAE1F;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAwB,EACxB,UAAkB;IAElB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC1C,OAAO;QACL,OAAO;QACP,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,GAAG,MAAM,CAAC,QAAQ,GAAG;QAC/B,iEAAiE;QACjE,eAAe;QACf,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { useStorageList, type StorageListStatus, type StorageListEntry, type UseStorageListResult, } from './useStorageList.js';
|
|
2
|
+
export { usePathState, normalizeStoragePath, type UsePathStateOptions, type UsePathStateResult, } from './usePathState.js';
|
|
3
|
+
export { useStorageObject, type StorageObjectStatus, type UseStorageObjectResult, } from './useStorageObject.js';
|
|
4
|
+
export { useMetadataEditor, metadataEditorReducer, initMetadataEditorState, type CustomMetadataEntry, type MetadataEditorState, type MetadataEditorAction, type UseMetadataEditorOptions, type UseMetadataEditorResult, } from './useMetadataEditor.js';
|
|
5
|
+
export { useStorageSelection, type StorageSelectionEntry, type UseStorageSelectionResult, } from './useStorageSelection.js';
|
|
6
|
+
export { useStorageDelete, createListAllDeleteImpl, type StorageDeleteProgress, type StorageRecursiveDeleteImpl, type StorageDeleteFailure, type StorageDeleteOutcome, type UseStorageDeleteOptions, type UseStorageDeleteResult, } from './useStorageDelete.js';
|
|
7
|
+
export { useStorageRulesGate, type StorageRulesGateStatus, type StorageRulesSource, type StorageGateVerdict, type UseStorageRulesGateOptions, type UseStorageRulesGateResult, } from './useStorageRulesGate.js';
|
|
8
|
+
export { useObjectUpload, type UploadTask, type UploadTaskStatus, type UploadEntry, type UploadInput, type UseObjectUploadOptions, type UseObjectUploadResult, } from './useObjectUpload.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAChB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,mBAAmB,EACnB,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,GAC/B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,GAC/B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,eAAe,EACf,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { useStorageList, } from './useStorageList.js';
|
|
2
|
+
export { usePathState, normalizeStoragePath, } from './usePathState.js';
|
|
3
|
+
export { useStorageObject, } from './useStorageObject.js';
|
|
4
|
+
export { useMetadataEditor, metadataEditorReducer, initMetadataEditorState, } from './useMetadataEditor.js';
|
|
5
|
+
export { useStorageSelection, } from './useStorageSelection.js';
|
|
6
|
+
export { useStorageDelete, createListAllDeleteImpl, } from './useStorageDelete.js';
|
|
7
|
+
export { useStorageRulesGate, } from './useStorageRulesGate.js';
|
|
8
|
+
export { useObjectUpload, } from './useObjectUpload.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAIf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,YAAY,EACZ,oBAAoB,GAGrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gBAAgB,GAGjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,GAMxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,mBAAmB,GAGpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GAOxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,GAMpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,eAAe,GAOhB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { type FirebaseStorage, type FullMetadata, type SettableMetadata } from 'pyric/storage';
|
|
2
|
+
/** One `customMetadata` row. `id` is a stable render key — keys are
|
|
3
|
+
* user-editable, so they can't key the rows themselves. */
|
|
4
|
+
export interface CustomMetadataEntry {
|
|
5
|
+
id: string;
|
|
6
|
+
key: string;
|
|
7
|
+
value: string;
|
|
8
|
+
/** Validation error (`'Key is required'` / `'Duplicate key'`). */
|
|
9
|
+
error?: string;
|
|
10
|
+
}
|
|
11
|
+
interface MetadataDraft {
|
|
12
|
+
contentType: string;
|
|
13
|
+
cacheControl: string;
|
|
14
|
+
custom: CustomMetadataEntry[];
|
|
15
|
+
}
|
|
16
|
+
export interface MetadataEditorState {
|
|
17
|
+
draft: MetadataDraft;
|
|
18
|
+
/** Snapshot for `isDirty` / `reset` — same reference-compare
|
|
19
|
+
* semantics as the document editor's `tree !== initial`. */
|
|
20
|
+
initial: MetadataDraft;
|
|
21
|
+
errorCount: number;
|
|
22
|
+
}
|
|
23
|
+
export type MetadataEditorAction = {
|
|
24
|
+
type: 'setContentType';
|
|
25
|
+
value: string;
|
|
26
|
+
} | {
|
|
27
|
+
type: 'setCacheControl';
|
|
28
|
+
value: string;
|
|
29
|
+
} | {
|
|
30
|
+
type: 'setCustomKey';
|
|
31
|
+
id: string;
|
|
32
|
+
key: string;
|
|
33
|
+
} | {
|
|
34
|
+
type: 'setCustomValue';
|
|
35
|
+
id: string;
|
|
36
|
+
value: string;
|
|
37
|
+
} | {
|
|
38
|
+
type: 'addCustomEntry';
|
|
39
|
+
key?: string;
|
|
40
|
+
value?: string;
|
|
41
|
+
} | {
|
|
42
|
+
type: 'removeCustomEntry';
|
|
43
|
+
id: string;
|
|
44
|
+
} | {
|
|
45
|
+
type: 'reset';
|
|
46
|
+
}
|
|
47
|
+
/** Internal — a successful save makes the draft the new baseline. */
|
|
48
|
+
| {
|
|
49
|
+
type: 'commit';
|
|
50
|
+
};
|
|
51
|
+
/** Pure reducer — exported (with {@link initMetadataEditorState}) so
|
|
52
|
+
* the edit state is testable without React, mirroring the document
|
|
53
|
+
* editor's reducer/hook split. */
|
|
54
|
+
export declare function metadataEditorReducer(state: MetadataEditorState, action: MetadataEditorAction): MetadataEditorState;
|
|
55
|
+
/** Build the edit state from the metadata a `getMetadata` /
|
|
56
|
+
* `useStorageObject` read returned. */
|
|
57
|
+
export declare function initMetadataEditorState(initial: SettableMetadata | undefined): MetadataEditorState;
|
|
58
|
+
export interface UseMetadataEditorOptions {
|
|
59
|
+
/** The metadata being edited — the same shape `useStorageObject`'s
|
|
60
|
+
* `metadata` carries. Read once on mount (the editor is a
|
|
61
|
+
* stateful workspace, like the document editor); `reset()` +
|
|
62
|
+
* remount to re-initialize. */
|
|
63
|
+
initial?: SettableMetadata;
|
|
64
|
+
}
|
|
65
|
+
export interface UseMetadataEditorResult {
|
|
66
|
+
contentType: string;
|
|
67
|
+
cacheControl: string;
|
|
68
|
+
custom: CustomMetadataEntry[];
|
|
69
|
+
/** Convenience: `errorCount === 0`. */
|
|
70
|
+
isValid: boolean;
|
|
71
|
+
/** `true` once any modifying action fired since the last
|
|
72
|
+
* `reset`/successful `save`. Reference-compare semantics — manual
|
|
73
|
+
* re-entry of the original values does NOT clear it. */
|
|
74
|
+
isDirty: boolean;
|
|
75
|
+
errorCount: number;
|
|
76
|
+
/** Raw dispatch — prefer the named helpers. */
|
|
77
|
+
dispatch: (action: MetadataEditorAction) => void;
|
|
78
|
+
setContentType: (value: string) => void;
|
|
79
|
+
setCacheControl: (value: string) => void;
|
|
80
|
+
setCustomKey: (id: string, key: string) => void;
|
|
81
|
+
setCustomValue: (id: string, value: string) => void;
|
|
82
|
+
addCustomEntry: (key?: string, value?: string) => void;
|
|
83
|
+
removeCustomEntry: (id: string) => void;
|
|
84
|
+
/** Restore the initial values. Clears `isDirty`. */
|
|
85
|
+
reset: () => void;
|
|
86
|
+
/**
|
|
87
|
+
* Serialize the draft to an `updateMetadata` patch. Empty
|
|
88
|
+
* `contentType`/`cacheControl` become `undefined` — which LEAVES
|
|
89
|
+
* the previous value (the sandbox doesn't model null-clears; see
|
|
90
|
+
* `pyric/storage`'s `updateMetadata` doc). `customMetadata` is
|
|
91
|
+
* always included and replaces wholesale, so row removal works.
|
|
92
|
+
*/
|
|
93
|
+
toPatch: () => SettableMetadata;
|
|
94
|
+
/**
|
|
95
|
+
* `updateMetadata(ref(storage, path), toPatch())`. Errors surface
|
|
96
|
+
* via `saveError` (typed `StorageError`), not throws — resolves
|
|
97
|
+
* `undefined` on failure or when the draft is invalid. On success
|
|
98
|
+
* the draft becomes the new baseline (`isDirty` clears) and the
|
|
99
|
+
* fresh `FullMetadata` is returned.
|
|
100
|
+
*/
|
|
101
|
+
save: () => Promise<FullMetadata | undefined>;
|
|
102
|
+
isSaving: boolean;
|
|
103
|
+
saveError: Error | undefined;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Headless metadata editor — the `useDocumentEditor` reducer pattern
|
|
107
|
+
* over `updateMetadata`: a pure reducer owns the draft (contentType,
|
|
108
|
+
* cacheControl, customMetadata k/v rows with stable ids +
|
|
109
|
+
* empty/duplicate-key validation); the hook adds named dispatch
|
|
110
|
+
* helpers and the save half.
|
|
111
|
+
*/
|
|
112
|
+
export declare function useMetadataEditor(storage: FirebaseStorage | null | undefined, path: string | null | undefined, options?: UseMetadataEditorOptions): UseMetadataEditorResult;
|
|
113
|
+
export {};
|
|
114
|
+
//# sourceMappingURL=useMetadataEditor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMetadataEditor.d.ts","sourceRoot":"","sources":["../../../src/storage/hooks/useMetadataEditor.ts"],"names":[],"mappings":"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"}
|