@pyric/cli 0.1.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +216 -0
- package/README.md +156 -0
- package/README.md.orig +138 -0
- package/dist/assurance/attachment.d.ts +24 -0
- package/dist/assurance/attachment.d.ts.map +1 -0
- package/dist/assurance/attachment.js +138 -0
- package/dist/assurance/attachment.js.map +1 -0
- package/dist/assurance/browser.d.ts +7 -0
- package/dist/assurance/browser.d.ts.map +1 -0
- package/dist/assurance/browser.js +68 -0
- package/dist/assurance/browser.js.map +1 -0
- package/dist/assurance/campaign.d.ts +41 -0
- package/dist/assurance/campaign.d.ts.map +1 -0
- package/dist/assurance/campaign.js +364 -0
- package/dist/assurance/campaign.js.map +1 -0
- package/dist/assurance/capabilities.d.ts +7 -0
- package/dist/assurance/capabilities.d.ts.map +1 -0
- package/dist/assurance/capabilities.js +295 -0
- package/dist/assurance/capabilities.js.map +1 -0
- package/dist/assurance/cases.d.ts +14 -0
- package/dist/assurance/cases.d.ts.map +1 -0
- package/dist/assurance/cases.js +27 -0
- package/dist/assurance/cases.js.map +1 -0
- package/dist/assurance/generated-capabilities.d.ts +52 -0
- package/dist/assurance/generated-capabilities.d.ts.map +1 -0
- package/dist/assurance/generated-capabilities.js +329 -0
- package/dist/assurance/generated-capabilities.js.map +1 -0
- package/dist/assurance/index.d.ts +11 -0
- package/dist/assurance/index.d.ts.map +1 -0
- package/dist/assurance/index.js +9 -0
- package/dist/assurance/index.js.map +1 -0
- package/dist/assurance/runner.d.ts +3 -0
- package/dist/assurance/runner.d.ts.map +1 -0
- package/dist/assurance/runner.js +633 -0
- package/dist/assurance/runner.js.map +1 -0
- package/dist/assurance/tool-names.d.ts +4 -0
- package/dist/assurance/tool-names.d.ts.map +1 -0
- package/dist/assurance/tool-names.js +14 -0
- package/dist/assurance/tool-names.js.map +1 -0
- package/dist/assurance/tools.d.ts +19 -0
- package/dist/assurance/tools.d.ts.map +1 -0
- package/dist/assurance/tools.js +740 -0
- package/dist/assurance/tools.js.map +1 -0
- package/dist/assurance/types.d.ts +348 -0
- package/dist/assurance/types.d.ts.map +1 -0
- package/dist/assurance/types.js +7 -0
- package/dist/assurance/types.js.map +1 -0
- package/dist/assurance/validation.d.ts +8 -0
- package/dist/assurance/validation.d.ts.map +1 -0
- package/dist/assurance/validation.js +269 -0
- package/dist/assurance/validation.js.map +1 -0
- package/dist/bridge/client/bridge.d.ts +133 -0
- package/dist/bridge/client/bridge.d.ts.map +1 -0
- package/dist/bridge/client/bridge.js +429 -0
- package/dist/bridge/client/bridge.js.map +1 -0
- package/dist/bridge/client/dispatch.d.ts +41 -0
- package/dist/bridge/client/dispatch.d.ts.map +1 -0
- package/dist/bridge/client/dispatch.js +111 -0
- package/dist/bridge/client/dispatch.js.map +1 -0
- package/dist/bridge/client.d.ts +24 -0
- package/dist/bridge/client.d.ts.map +1 -0
- package/dist/bridge/client.js +26 -0
- package/dist/bridge/client.js.map +1 -0
- package/dist/bridge/protocol.d.ts +227 -0
- package/dist/bridge/protocol.d.ts.map +1 -0
- package/dist/bridge/protocol.js +131 -0
- package/dist/bridge/protocol.js.map +1 -0
- package/dist/bridge/server/audit.d.ts +19 -0
- package/dist/bridge/server/audit.d.ts.map +1 -0
- package/dist/bridge/server/audit.js +46 -0
- package/dist/bridge/server/audit.js.map +1 -0
- package/dist/bridge/server/bridge.d.ts +126 -0
- package/dist/bridge/server/bridge.d.ts.map +1 -0
- package/dist/bridge/server/bridge.js +383 -0
- package/dist/bridge/server/bridge.js.map +1 -0
- package/dist/bridge/server/headless.d.ts +36 -0
- package/dist/bridge/server/headless.d.ts.map +1 -0
- package/dist/bridge/server/headless.js +142 -0
- package/dist/bridge/server/headless.js.map +1 -0
- package/dist/bridge/server/json-schema-to-zod.d.ts +37 -0
- package/dist/bridge/server/json-schema-to-zod.d.ts.map +1 -0
- package/dist/bridge/server/json-schema-to-zod.js +93 -0
- package/dist/bridge/server/json-schema-to-zod.js.map +1 -0
- package/dist/bridge/server/local-bridge.d.ts +33 -0
- package/dist/bridge/server/local-bridge.d.ts.map +1 -0
- package/dist/bridge/server/local-bridge.js +41 -0
- package/dist/bridge/server/local-bridge.js.map +1 -0
- package/dist/bridge/server/logger.d.ts +28 -0
- package/dist/bridge/server/logger.d.ts.map +1 -0
- package/dist/bridge/server/logger.js +42 -0
- package/dist/bridge/server/logger.js.map +1 -0
- package/dist/bridge/server/mcp-contract.d.ts +21 -0
- package/dist/bridge/server/mcp-contract.d.ts.map +1 -0
- package/dist/bridge/server/mcp-contract.js +62 -0
- package/dist/bridge/server/mcp-contract.js.map +1 -0
- package/dist/bridge/server/mcp.d.ts +26 -0
- package/dist/bridge/server/mcp.d.ts.map +1 -0
- package/dist/bridge/server/mcp.js +102 -0
- package/dist/bridge/server/mcp.js.map +1 -0
- package/dist/bridge/server/peer.d.ts +39 -0
- package/dist/bridge/server/peer.d.ts.map +1 -0
- package/dist/bridge/server/peer.js +189 -0
- package/dist/bridge/server/peer.js.map +1 -0
- package/dist/bridge/server/standalone.d.ts +49 -0
- package/dist/bridge/server/standalone.d.ts.map +1 -0
- package/dist/bridge/server/standalone.js +267 -0
- package/dist/bridge/server/standalone.js.map +1 -0
- package/dist/bridge/server/tool-metadata.d.ts +38 -0
- package/dist/bridge/server/tool-metadata.d.ts.map +1 -0
- package/dist/bridge/server/tool-metadata.js +81 -0
- package/dist/bridge/server/tool-metadata.js.map +1 -0
- package/dist/bridge/server.d.ts +21 -0
- package/dist/bridge/server.d.ts.map +1 -0
- package/dist/bridge/server.js +18 -0
- package/dist/bridge/server.js.map +1 -0
- package/dist/cli/database-rules.d.ts +43 -0
- package/dist/cli/database-rules.d.ts.map +1 -0
- package/dist/cli/database-rules.js +261 -0
- package/dist/cli/database-rules.js.map +1 -0
- package/dist/cli/dev-runner.d.ts +112 -0
- package/dist/cli/dev-runner.d.ts.map +1 -0
- package/dist/cli/dev-runner.js +239 -0
- package/dist/cli/dev-runner.js.map +1 -0
- package/dist/cli/firebase-json.d.ts +66 -0
- package/dist/cli/firebase-json.d.ts.map +1 -0
- package/dist/cli/firebase-json.js +60 -0
- package/dist/cli/firebase-json.js.map +1 -0
- package/dist/cli/firestore-indexes.d.ts +21 -0
- package/dist/cli/firestore-indexes.d.ts.map +1 -0
- package/dist/cli/firestore-indexes.js +39 -0
- package/dist/cli/firestore-indexes.js.map +1 -0
- package/dist/cli/index.d.ts +56 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +379 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +50 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +182 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/mcp-proxy.d.ts +10 -0
- package/dist/cli/mcp-proxy.d.ts.map +1 -0
- package/dist/cli/mcp-proxy.js +129 -0
- package/dist/cli/mcp-proxy.js.map +1 -0
- package/dist/cli/parse-args.d.ts +20 -0
- package/dist/cli/parse-args.d.ts.map +1 -0
- package/dist/cli/parse-args.js +69 -0
- package/dist/cli/parse-args.js.map +1 -0
- package/dist/cli/rules.d.ts +55 -0
- package/dist/cli/rules.d.ts.map +1 -0
- package/dist/cli/rules.js +199 -0
- package/dist/cli/rules.js.map +1 -0
- package/dist/cli/scope.d.ts +12 -0
- package/dist/cli/scope.d.ts.map +1 -0
- package/dist/cli/scope.js +44 -0
- package/dist/cli/scope.js.map +1 -0
- package/dist/cli/serve.d.ts +122 -0
- package/dist/cli/serve.d.ts.map +1 -0
- package/dist/cli/serve.js +844 -0
- package/dist/cli/serve.js.map +1 -0
- package/dist/cli/service-commands.d.ts +8 -0
- package/dist/cli/service-commands.d.ts.map +1 -0
- package/dist/cli/service-commands.js +58 -0
- package/dist/cli/service-commands.js.map +1 -0
- package/dist/cli/snapshot.d.ts +22 -0
- package/dist/cli/snapshot.d.ts.map +1 -0
- package/dist/cli/snapshot.js +139 -0
- package/dist/cli/snapshot.js.map +1 -0
- package/dist/cli/storage-rules.d.ts +21 -0
- package/dist/cli/storage-rules.d.ts.map +1 -0
- package/dist/cli/storage-rules.js +121 -0
- package/dist/cli/storage-rules.js.map +1 -0
- package/dist/cli/verify.d.ts +23 -0
- package/dist/cli/verify.d.ts.map +1 -0
- package/dist/cli/verify.js +349 -0
- package/dist/cli/verify.js.map +1 -0
- package/dist/credentials/core/memoize-ttl.d.ts +58 -0
- package/dist/credentials/core/memoize-ttl.d.ts.map +1 -0
- package/dist/credentials/core/memoize-ttl.js +88 -0
- package/dist/credentials/core/memoize-ttl.js.map +1 -0
- package/dist/credentials/core/types.d.ts +11 -0
- package/dist/credentials/core/types.d.ts.map +1 -0
- package/dist/credentials/core/types.js +2 -0
- package/dist/credentials/core/types.js.map +1 -0
- package/dist/credentials/node/from-adc.d.ts +10 -0
- package/dist/credentials/node/from-adc.d.ts.map +1 -0
- package/dist/credentials/node/from-adc.js +76 -0
- package/dist/credentials/node/from-adc.js.map +1 -0
- package/dist/credentials/node/from-service-account.d.ts +24 -0
- package/dist/credentials/node/from-service-account.d.ts.map +1 -0
- package/dist/credentials/node/from-service-account.js +108 -0
- package/dist/credentials/node/from-service-account.js.map +1 -0
- package/dist/credentials/node/index.d.ts +7 -0
- package/dist/credentials/node/index.d.ts.map +1 -0
- package/dist/credentials/node/index.js +7 -0
- package/dist/credentials/node/index.js.map +1 -0
- package/dist/discover/concurrency.d.ts +42 -0
- package/dist/discover/concurrency.d.ts.map +1 -0
- package/dist/discover/concurrency.js +113 -0
- package/dist/discover/concurrency.js.map +1 -0
- package/dist/discover/crawler-adapter.d.ts +48 -0
- package/dist/discover/crawler-adapter.d.ts.map +1 -0
- package/dist/discover/crawler-adapter.js +92 -0
- package/dist/discover/crawler-adapter.js.map +1 -0
- package/dist/discover/crawler.d.ts +294 -0
- package/dist/discover/crawler.d.ts.map +1 -0
- package/dist/discover/crawler.js +764 -0
- package/dist/discover/crawler.js.map +1 -0
- package/dist/discover/credential-free.d.ts +19 -0
- package/dist/discover/credential-free.d.ts.map +1 -0
- package/dist/discover/credential-free.js +18 -0
- package/dist/discover/credential-free.js.map +1 -0
- package/dist/discover/findCollectionGroup.d.ts +44 -0
- package/dist/discover/findCollectionGroup.d.ts.map +1 -0
- package/dist/discover/findCollectionGroup.js +81 -0
- package/dist/discover/findCollectionGroup.js.map +1 -0
- package/dist/discover/firestore-source.d.ts +60 -0
- package/dist/discover/firestore-source.d.ts.map +1 -0
- package/dist/discover/firestore-source.js +11 -0
- package/dist/discover/firestore-source.js.map +1 -0
- package/dist/discover/index.d.ts +3 -0
- package/dist/discover/index.d.ts.map +1 -0
- package/dist/discover/index.js +5 -0
- package/dist/discover/index.js.map +1 -0
- package/dist/discover/merge.d.ts +108 -0
- package/dist/discover/merge.d.ts.map +1 -0
- package/dist/discover/merge.js +394 -0
- package/dist/discover/merge.js.map +1 -0
- package/dist/discover/session.d.ts +116 -0
- package/dist/discover/session.d.ts.map +1 -0
- package/dist/discover/session.js +331 -0
- package/dist/discover/session.js.map +1 -0
- package/dist/discover/tools.d.ts +58 -0
- package/dist/discover/tools.d.ts.map +1 -0
- package/dist/discover/tools.js +115 -0
- package/dist/discover/tools.js.map +1 -0
- package/dist/discover/types.d.ts +190 -0
- package/dist/discover/types.d.ts.map +1 -0
- package/dist/discover/types.js +12 -0
- package/dist/discover/types.js.map +1 -0
- package/dist/discover/wire.d.ts +70 -0
- package/dist/discover/wire.d.ts.map +1 -0
- package/dist/discover/wire.js +309 -0
- package/dist/discover/wire.js.map +1 -0
- package/dist/functions-rtdb/child.d.ts +52 -0
- package/dist/functions-rtdb/child.d.ts.map +1 -0
- package/dist/functions-rtdb/child.js +283 -0
- package/dist/functions-rtdb/child.js.map +1 -0
- package/dist/functions-rtdb/delivery.d.ts +4 -0
- package/dist/functions-rtdb/delivery.d.ts.map +1 -0
- package/dist/functions-rtdb/delivery.js +2 -0
- package/dist/functions-rtdb/delivery.js.map +1 -0
- package/dist/functions-rtdb/discovery.d.ts +41 -0
- package/dist/functions-rtdb/discovery.d.ts.map +1 -0
- package/dist/functions-rtdb/discovery.js +86 -0
- package/dist/functions-rtdb/discovery.js.map +1 -0
- package/dist/functions-rtdb/event.d.ts +20 -0
- package/dist/functions-rtdb/event.d.ts.map +1 -0
- package/dist/functions-rtdb/event.js +45 -0
- package/dist/functions-rtdb/event.js.map +1 -0
- package/dist/functions-rtdb/execution.d.ts +20 -0
- package/dist/functions-rtdb/execution.d.ts.map +1 -0
- package/dist/functions-rtdb/execution.js +70 -0
- package/dist/functions-rtdb/execution.js.map +1 -0
- package/dist/functions-rtdb/in-memory-delivery.d.ts +9 -0
- package/dist/functions-rtdb/in-memory-delivery.d.ts.map +1 -0
- package/dist/functions-rtdb/in-memory-delivery.js +36 -0
- package/dist/functions-rtdb/in-memory-delivery.js.map +1 -0
- package/dist/functions-rtdb/project.d.ts +7 -0
- package/dist/functions-rtdb/project.d.ts.map +1 -0
- package/dist/functions-rtdb/project.js +54 -0
- package/dist/functions-rtdb/project.js.map +1 -0
- package/dist/functions-rtdb/projection.d.ts +14 -0
- package/dist/functions-rtdb/projection.d.ts.map +1 -0
- package/dist/functions-rtdb/projection.js +65 -0
- package/dist/functions-rtdb/projection.js.map +1 -0
- package/dist/functions-rtdb/reference-pattern.d.ts +5 -0
- package/dist/functions-rtdb/reference-pattern.d.ts.map +1 -0
- package/dist/functions-rtdb/reference-pattern.js +14 -0
- package/dist/functions-rtdb/reference-pattern.js.map +1 -0
- package/dist/functions-rtdb/remote-delivery.d.ts +9 -0
- package/dist/functions-rtdb/remote-delivery.d.ts.map +1 -0
- package/dist/functions-rtdb/remote-delivery.js +11 -0
- package/dist/functions-rtdb/remote-delivery.js.map +1 -0
- package/dist/pkg-version.d.ts +2 -0
- package/dist/pkg-version.d.ts.map +1 -0
- package/dist/pkg-version.js +47 -0
- package/dist/pkg-version.js.map +1 -0
- package/dist/register/esm-exports.d.ts +26 -0
- package/dist/register/esm-exports.d.ts.map +1 -0
- package/dist/register/esm-exports.js +61 -0
- package/dist/register/esm-exports.js.map +1 -0
- package/dist/register/hooks.d.ts +13 -0
- package/dist/register/hooks.d.ts.map +1 -0
- package/dist/register/hooks.js +15 -0
- package/dist/register/hooks.js.map +1 -0
- package/dist/register/index.d.ts +5 -0
- package/dist/register/index.d.ts.map +1 -0
- package/dist/register/index.js +124 -0
- package/dist/register/index.js.map +1 -0
- package/dist/register/mapping.d.ts +19 -0
- package/dist/register/mapping.d.ts.map +1 -0
- package/dist/register/mapping.js +35 -0
- package/dist/register/mapping.js.map +1 -0
- package/dist/remote/index.d.ts +232 -0
- package/dist/remote/index.d.ts.map +1 -0
- package/dist/remote/index.js +720 -0
- package/dist/remote/index.js.map +1 -0
- package/dist/rtdb/crawl-snapshot.d.ts +17 -0
- package/dist/rtdb/crawl-snapshot.d.ts.map +1 -0
- package/dist/rtdb/crawl-snapshot.js +72 -0
- package/dist/rtdb/crawl-snapshot.js.map +1 -0
- package/dist/rtdb/inspection.d.ts +8 -0
- package/dist/rtdb/inspection.d.ts.map +1 -0
- package/dist/rtdb/inspection.js +111 -0
- package/dist/rtdb/inspection.js.map +1 -0
- package/dist/rtdb/load-rules-document.d.ts +25 -0
- package/dist/rtdb/load-rules-document.d.ts.map +1 -0
- package/dist/rtdb/load-rules-document.js +38 -0
- package/dist/rtdb/load-rules-document.js.map +1 -0
- package/dist/rtdb/rules-generation-tool.d.ts +4 -0
- package/dist/rtdb/rules-generation-tool.d.ts.map +1 -0
- package/dist/rtdb/rules-generation-tool.js +35 -0
- package/dist/rtdb/rules-generation-tool.js.map +1 -0
- package/dist/rtdb/rules-json.d.ts +8 -0
- package/dist/rtdb/rules-json.d.ts.map +1 -0
- package/dist/rtdb/rules-json.js +17 -0
- package/dist/rtdb/rules-json.js.map +1 -0
- package/dist/serve/bridge-mount.d.ts +36 -0
- package/dist/serve/bridge-mount.d.ts.map +1 -0
- package/dist/serve/bridge-mount.js +162 -0
- package/dist/serve/bridge-mount.js.map +1 -0
- package/dist/serve/bundler.d.ts +110 -0
- package/dist/serve/bundler.d.ts.map +1 -0
- package/dist/serve/bundler.js +432 -0
- package/dist/serve/bundler.js.map +1 -0
- package/dist/serve/capture-store.d.ts +27 -0
- package/dist/serve/capture-store.d.ts.map +1 -0
- package/dist/serve/capture-store.js +47 -0
- package/dist/serve/capture-store.js.map +1 -0
- package/dist/serve/discovery.d.ts +71 -0
- package/dist/serve/discovery.d.ts.map +1 -0
- package/dist/serve/discovery.js +158 -0
- package/dist/serve/discovery.js.map +1 -0
- package/dist/serve/docs-ui/_astro/_slug_.CQYSemvw.css +1 -0
- package/dist/serve/docs-ui/docs/_rhythm/index.html +99 -0
- package/dist/serve/docs-ui/docs/_rhythm.md +101 -0
- package/dist/serve/docs-ui/docs/api-reference/index.html +64 -0
- package/dist/serve/docs-ui/docs/api-reference.md +67 -0
- package/dist/serve/docs-ui/docs/audit-your-rules/index.html +34 -0
- package/dist/serve/docs-ui/docs/audit-your-rules.md +50 -0
- package/dist/serve/docs-ui/docs/create-pyric-reference-api/index.html +498 -0
- package/dist/serve/docs-ui/docs/create-pyric-reference-api.md +345 -0
- package/dist/serve/docs-ui/docs/firestore-rules-limits/index.html +59 -0
- package/dist/serve/docs-ui/docs/firestore-rules-limits.md +54 -0
- package/dist/serve/docs-ui/docs/how-the-swap-works/index.html +47 -0
- package/dist/serve/docs-ui/docs/how-the-swap-works.md +43 -0
- package/dist/serve/docs-ui/docs/how-we-know-it-matches-firebase/index.html +131 -0
- package/dist/serve/docs-ui/docs/how-we-know-it-matches-firebase.md +169 -0
- package/dist/serve/docs-ui/docs/index.html +2 -0
- package/dist/serve/docs-ui/docs/index.json +18637 -0
- package/dist/serve/docs-ui/docs/overview/index.html +23 -0
- package/dist/serve/docs-ui/docs/overview.md +40 -0
- package/dist/serve/docs-ui/docs/pyric-admin-app/index.html +19 -0
- package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api/index.html +185 -0
- package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api.md +206 -0
- package/dist/serve/docs-ui/docs/pyric-admin-app.md +27 -0
- package/dist/serve/docs-ui/docs/pyric-admin-auth/index.html +24 -0
- package/dist/serve/docs-ui/docs/pyric-admin-auth-reference-api/index.html +617 -0
- package/dist/serve/docs-ui/docs/pyric-admin-auth-reference-api.md +441 -0
- package/dist/serve/docs-ui/docs/pyric-admin-auth.md +29 -0
- package/dist/serve/docs-ui/docs/pyric-admin-database/index.html +26 -0
- package/dist/serve/docs-ui/docs/pyric-admin-database-reference-api/index.html +583 -0
- package/dist/serve/docs-ui/docs/pyric-admin-database-reference-api.md +597 -0
- package/dist/serve/docs-ui/docs/pyric-admin-database.md +31 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore/index.html +38 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-error-translation/index.html +57 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-error-translation.md +95 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-per-call-delegate/index.html +58 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-per-call-delegate.md +94 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-why-mirror-admin-shape/index.html +59 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-why-mirror-admin-shape.md +88 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-run-a-transaction/index.html +53 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-run-a-transaction.md +76 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-seed-and-set-rules/index.html +62 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-seed-and-set-rules.md +96 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-translate-denials/index.html +80 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-translate-denials.md +98 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-use-onsnapshot/index.html +57 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-use-onsnapshot.md +88 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-write-a-batch/index.html +50 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-write-a-batch.md +73 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api/index.html +32 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api.md +30 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-onsnapshot/index.html +68 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-onsnapshot.md +81 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-re-exported-types/index.html +76 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-re-exported-types.md +103 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-sandbox-firestore/index.html +40 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-sandbox-firestore.md +77 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-tutorials-01-first-admin-session/index.html +118 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-tutorials-01-first-admin-session.md +166 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore.md +53 -0
- package/dist/serve/docs-ui/docs/pyric-admin-storage/index.html +25 -0
- package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api/index.html +317 -0
- package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api.md +285 -0
- package/dist/serve/docs-ui/docs/pyric-admin-storage.md +30 -0
- package/dist/serve/docs-ui/docs/pyric-ai-compat/index.html +436 -0
- package/dist/serve/docs-ui/docs/pyric-ai-compat.md +471 -0
- package/dist/serve/docs-ui/docs/pyric-ai-reference-api/index.html +5831 -0
- package/dist/serve/docs-ui/docs/pyric-ai-reference-api.md +5440 -0
- package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api/index.html +159 -0
- package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api.md +122 -0
- package/dist/serve/docs-ui/docs/pyric-app-compat/index.html +180 -0
- package/dist/serve/docs-ui/docs/pyric-app-compat.md +199 -0
- package/dist/serve/docs-ui/docs/pyric-app-reference-api/index.html +420 -0
- package/dist/serve/docs-ui/docs/pyric-app-reference-api.md +326 -0
- package/dist/serve/docs-ui/docs/pyric-auth/index.html +59 -0
- package/dist/serve/docs-ui/docs/pyric-auth-compat/index.html +804 -0
- package/dist/serve/docs-ui/docs/pyric-auth-compat.md +847 -0
- package/dist/serve/docs-ui/docs/pyric-auth-reference-api/index.html +5452 -0
- package/dist/serve/docs-ui/docs/pyric-auth-reference-api.md +5271 -0
- package/dist/serve/docs-ui/docs/pyric-auth-reference-feature-matrix/index.html +781 -0
- package/dist/serve/docs-ui/docs/pyric-auth-reference-feature-matrix.md +198 -0
- package/dist/serve/docs-ui/docs/pyric-auth-reference-sandbox-test-driver/index.html +71 -0
- package/dist/serve/docs-ui/docs/pyric-auth-reference-sandbox-test-driver.md +108 -0
- package/dist/serve/docs-ui/docs/pyric-auth.md +86 -0
- package/dist/serve/docs-ui/docs/pyric-cli/index.html +40 -0
- package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +98 -0
- package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api.md +88 -0
- package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api/index.html +2355 -0
- package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api.md +1554 -0
- package/dist/serve/docs-ui/docs/pyric-cli-bridge/index.html +69 -0
- package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api/index.html +546 -0
- package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api.md +485 -0
- package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api/index.html +506 -0
- package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api.md +419 -0
- package/dist/serve/docs-ui/docs/pyric-cli-bridge.md +99 -0
- package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api/index.html +67 -0
- package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api.md +59 -0
- package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api/index.html +2355 -0
- package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api.md +2036 -0
- package/dist/serve/docs-ui/docs/pyric-cli-functions-rtdb-compat/index.html +112 -0
- package/dist/serve/docs-ui/docs/pyric-cli-functions-rtdb-compat.md +124 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-build-a-standalone-binary/index.html +91 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-build-a-standalone-binary.md +105 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-promote-sandbox-state-to-a-fixture/index.html +52 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-promote-sandbox-state-to-a-fixture.md +98 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-run-rtdb-onvaluecreated/index.html +66 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-run-rtdb-onvaluecreated.md +100 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-serve-persistence-and-multi-tab/index.html +228 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-serve-persistence-and-multi-tab.md +179 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-use-the-vite-plugin/index.html +341 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-use-the-vite-plugin.md +309 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-verify-against-a-captured-session/index.html +128 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-verify-against-a-captured-session.md +207 -0
- package/dist/serve/docs-ui/docs/pyric-cli-reference-cli/index.html +404 -0
- package/dist/serve/docs-ui/docs/pyric-cli-reference-cli.md +249 -0
- package/dist/serve/docs-ui/docs/pyric-cli-reference-package-and-resolution/index.html +93 -0
- package/dist/serve/docs-ui/docs/pyric-cli-reference-package-and-resolution.md +65 -0
- package/dist/serve/docs-ui/docs/pyric-cli-reference-verify/index.html +81 -0
- package/dist/serve/docs-ui/docs/pyric-cli-reference-verify.md +110 -0
- package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api/index.html +10 -0
- package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api.md +16 -0
- package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api/index.html +1044 -0
- package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api.md +952 -0
- package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api/index.html +5041 -0
- package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api.md +4739 -0
- package/dist/serve/docs-ui/docs/pyric-cli-tutorials-server-adoption/index.html +219 -0
- package/dist/serve/docs-ui/docs/pyric-cli-tutorials-server-adoption.md +251 -0
- package/dist/serve/docs-ui/docs/pyric-cli-tutorials-wire-claude-code/index.html +136 -0
- package/dist/serve/docs-ui/docs/pyric-cli-tutorials-wire-claude-code.md +217 -0
- package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api/index.html +926 -0
- package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api.md +586 -0
- package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api/index.html +102 -0
- package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api.md +76 -0
- package/dist/serve/docs-ui/docs/pyric-cli.md +42 -0
- package/dist/serve/docs-ui/docs/pyric-conformance-scores/index.html +180 -0
- package/dist/serve/docs-ui/docs/pyric-conformance-scores.md +184 -0
- package/dist/serve/docs-ui/docs/pyric-database/index.html +43 -0
- package/dist/serve/docs-ui/docs/pyric-database-compat/index.html +1224 -0
- package/dist/serve/docs-ui/docs/pyric-database-compat.md +1289 -0
- package/dist/serve/docs-ui/docs/pyric-database-explanation-rules-authoring-and-deploy-are-separate/index.html +16 -0
- package/dist/serve/docs-ui/docs/pyric-database-explanation-rules-authoring-and-deploy-are-separate.md +23 -0
- package/dist/serve/docs-ui/docs/pyric-database-reference-api/index.html +1851 -0
- package/dist/serve/docs-ui/docs/pyric-database-reference-api.md +1842 -0
- package/dist/serve/docs-ui/docs/pyric-database-reference-constraints/index.html +381 -0
- package/dist/serve/docs-ui/docs/pyric-database-reference-constraints.md +168 -0
- package/dist/serve/docs-ui/docs/pyric-database-reference-rules-tooling/index.html +218 -0
- package/dist/serve/docs-ui/docs/pyric-database-reference-rules-tooling.md +303 -0
- package/dist/serve/docs-ui/docs/pyric-database-tutorials-01-author-rtdb-rules-with-constraints/index.html +125 -0
- package/dist/serve/docs-ui/docs/pyric-database-tutorials-01-author-rtdb-rules-with-constraints.md +171 -0
- package/dist/serve/docs-ui/docs/pyric-database.md +26 -0
- package/dist/serve/docs-ui/docs/pyric-explanation-versioning-and-compatibility/index.html +40 -0
- package/dist/serve/docs-ui/docs/pyric-explanation-versioning-and-compatibility.md +68 -0
- package/dist/serve/docs-ui/docs/pyric-firestore/index.html +48 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-compat/index.html +868 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-compat.md +939 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-explanation-rules-tooling-is-separate/index.html +92 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-explanation-rules-tooling-is-separate.md +70 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-explanation-target-symbol-opacity/index.html +59 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-explanation-target-symbol-opacity.md +91 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-explanation-two-backends-one-surface/index.html +43 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-explanation-two-backends-one-surface.md +58 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-migrate-from-firebase-firestore/index.html +58 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-migrate-from-firebase-firestore.md +86 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-pick-a-backend/index.html +52 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-pick-a-backend.md +83 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-run-a-transaction/index.html +42 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-run-a-transaction.md +59 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-onsnapshot/index.html +66 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-onsnapshot.md +96 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-sandbox-ops/index.html +61 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-sandbox-ops.md +92 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-api/index.html +3623 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-api.md +3399 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-feature-matrix/index.html +80 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-feature-matrix.md +66 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-getfirestore/index.html +46 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-getfirestore.md +73 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-query-constraints/index.html +80 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-query-constraints.md +129 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-sandbox-ops/index.html +58 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-sandbox-ops.md +88 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-tool-factories/index.html +51 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-tool-factories.md +71 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-01-write-a-sandbox-demo/index.html +130 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-01-write-a-sandbox-demo.md +180 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-02-swap-to-prod-backend/index.html +59 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-02-swap-to-prod-backend.md +92 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api/index.html +30 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api.md +30 -0
- package/dist/serve/docs-ui/docs/pyric-firestore.md +72 -0
- package/dist/serve/docs-ui/docs/pyric-messaging-compat/index.html +300 -0
- package/dist/serve/docs-ui/docs/pyric-messaging-compat.md +321 -0
- package/dist/serve/docs-ui/docs/pyric-messaging-reference-api/index.html +508 -0
- package/dist/serve/docs-ui/docs/pyric-messaging-reference-api.md +374 -0
- package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api/index.html +482 -0
- package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api.md +348 -0
- package/dist/serve/docs-ui/docs/pyric-rules/index.html +87 -0
- package/dist/serve/docs-ui/docs/pyric-rules-compat/index.html +328 -0
- package/dist/serve/docs-ui/docs/pyric-rules-compat.md +347 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-agent-failure-modes/index.html +50 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-agent-failure-modes.md +78 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-lint-vs-validate-vs-simulate-vs-test/index.html +79 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-lint-vs-validate-vs-simulate-vs-test.md +69 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-runtime-budget-and-shared-gates/index.html +67 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-runtime-budget-and-shared-gates.md +75 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-sentinel-expression-engine/index.html +49 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-sentinel-expression-engine.md +74 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-simulator-vs-rules-test-api/index.html +95 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-simulator-vs-rules-test-api.md +80 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-the-2-plus-modules-extension/index.html +58 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-the-2-plus-modules-extension.md +79 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-value-wrappers-design/index.html +63 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-value-wrappers-design.md +84 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-why-this-package-exists/index.html +34 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-why-this-package-exists.md +43 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-compare-rulesets-for-weakening/index.html +55 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-compare-rulesets-for-weakening.md +77 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-inspect-rules-via-the-ast/index.html +90 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-inspect-rules-via-the-ast.md +129 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-lint-rules-source/index.html +55 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-lint-rules-source.md +84 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-pin-request-time/index.html +49 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-pin-request-time.md +64 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-register-tools-with-an-agent/index.html +61 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-register-tools-with-an-agent.md +87 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-resolve-module-imports/index.html +93 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-resolve-module-imports.md +105 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-simulate-rules-locally/index.html +89 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-simulate-rules-locally.md +134 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-test-rules-against-firebase/index.html +66 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-test-rules-against-firebase.md +102 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-api/index.html +2629 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-api.md +2213 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-ast/index.html +85 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-ast.md +121 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-conformance-gaps/index.html +277 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-conformance-gaps.md +360 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-errors/index.html +76 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-errors.md +123 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-lint-rules/index.html +148 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-lint-rules.md +159 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-simulator-context/index.html +66 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-simulator-context.md +104 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-stdlib-modules/index.html +241 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-stdlib-modules.md +143 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-test-case-schema/index.html +94 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-test-case-schema.md +121 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-validator-findings/index.html +87 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-validator-findings.md +117 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-value-wrappers/index.html +102 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-value-wrappers.md +152 -0
- package/dist/serve/docs-ui/docs/pyric-rules.md +93 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox/index.html +67 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api/index.html +120 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api.md +110 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-every-op-is-a-request/index.html +141 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-every-op-is-a-request.md +161 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-identity-is-a-context/index.html +66 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-identity-is-a-context.md +110 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-internal-adapter-protocol/index.html +71 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-internal-adapter-protocol.md +111 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-listener-re-evaluation/index.html +56 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-listener-re-evaluation.md +82 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-local-backend-vs-firestore-offline/index.html +64 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-local-backend-vs-firestore-offline.md +56 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-adapters-are-siblings/index.html +92 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-adapters-are-siblings.md +90 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-this-package-exists/index.html +69 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-this-package-exists.md +57 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api/index.html +202 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api.md +134 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-multiple-isolated-sandboxes/index.html +63 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-multiple-isolated-sandboxes.md +89 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-observe-events/index.html +159 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-observe-events.md +168 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-pick-an-adapter/index.html +79 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-pick-an-adapter.md +75 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-replay-events/index.html +88 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-replay-events.md +92 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-reset-between-tests/index.html +68 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-reset-between-tests.md +92 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-seed-data-and-rules/index.html +91 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-seed-data-and-rules.md +122 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-switch-users/index.html +50 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-switch-users.md +78 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-use-admin-reads/index.html +54 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-use-admin-reads.md +85 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api/index.html +5019 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api.md +4060 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-divergences/index.html +125 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-divergences.md +151 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-error-codes/index.html +110 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-error-codes.md +118 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-internal-protocol/index.html +72 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-internal-protocol.md +109 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-sandbox-and-context/index.html +90 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-sandbox-and-context.md +140 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-sandbox-event/index.html +146 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-sandbox-event.md +204 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-snapshot-and-admin/index.html +53 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-snapshot-and-admin.md +89 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-tutorials-01-your-first-sandbox-session/index.html +115 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-tutorials-01-your-first-sandbox-session.md +176 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox.md +69 -0
- package/dist/serve/docs-ui/docs/pyric-storage/index.html +65 -0
- package/dist/serve/docs-ui/docs/pyric-storage-compat/index.html +676 -0
- package/dist/serve/docs-ui/docs/pyric-storage-compat.md +699 -0
- package/dist/serve/docs-ui/docs/pyric-storage-explanation-implementation-scope/index.html +52 -0
- package/dist/serve/docs-ui/docs/pyric-storage-explanation-implementation-scope.md +85 -0
- package/dist/serve/docs-ui/docs/pyric-storage-explanation-session-archive-use-case/index.html +58 -0
- package/dist/serve/docs-ui/docs/pyric-storage-explanation-session-archive-use-case.md +82 -0
- package/dist/serve/docs-ui/docs/pyric-storage-explanation-why-indexeddb/index.html +50 -0
- package/dist/serve/docs-ui/docs/pyric-storage-explanation-why-indexeddb.md +82 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-enforce-rules/index.html +120 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-enforce-rules.md +127 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-list-and-delete/index.html +53 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-list-and-delete.md +86 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-switch-backends/index.html +43 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-switch-backends.md +65 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-test-rule-expressions/index.html +70 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-test-rule-expressions.md +88 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-api/index.html +2120 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-api.md +1687 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-conformance-gaps/index.html +137 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-conformance-gaps.md +171 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-error-codes/index.html +37 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-error-codes.md +57 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-rules-subset/index.html +96 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-rules-subset.md +134 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-storage-options/index.html +39 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-storage-options.md +61 -0
- package/dist/serve/docs-ui/docs/pyric-storage.md +67 -0
- package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api/index.html +638 -0
- package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api.md +430 -0
- package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +813 -0
- package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api.md +634 -0
- package/dist/serve/docs-ui/docs/pyric-ui-auth-reference-api/index.html +1708 -0
- package/dist/serve/docs-ui/docs/pyric-ui-auth-reference-api.md +1300 -0
- package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api/index.html +177 -0
- package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api.md +111 -0
- package/dist/serve/docs-ui/docs/pyric-ui-events-reference-api/index.html +1542 -0
- package/dist/serve/docs-ui/docs/pyric-ui-events-reference-api.md +903 -0
- package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +1024 -0
- package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api.md +640 -0
- package/dist/serve/docs-ui/docs/pyric-ui-firestore-reference-api/index.html +2753 -0
- package/dist/serve/docs-ui/docs/pyric-ui-firestore-reference-api.md +2171 -0
- package/dist/serve/docs-ui/docs/pyric-ui-primitives-reference-api/index.html +1005 -0
- package/dist/serve/docs-ui/docs/pyric-ui-primitives-reference-api.md +693 -0
- package/dist/serve/docs-ui/docs/pyric-ui-rtdb-reference-api/index.html +1388 -0
- package/dist/serve/docs-ui/docs/pyric-ui-rtdb-reference-api.md +1340 -0
- package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +131 -0
- package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api.md +76 -0
- package/dist/serve/docs-ui/docs/pyric-ui-rules-reference-api/index.html +648 -0
- package/dist/serve/docs-ui/docs/pyric-ui-rules-reference-api.md +508 -0
- package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +1457 -0
- package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api.md +1029 -0
- package/dist/serve/docs-ui/docs/pyric-ui-storage-reference-api/index.html +2476 -0
- package/dist/serve/docs-ui/docs/pyric-ui-storage-reference-api.md +1919 -0
- package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +1241 -0
- package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api.md +817 -0
- package/dist/serve/docs-ui/docs/pyric-ui-traffic-reference-api/index.html +2289 -0
- package/dist/serve/docs-ui/docs/pyric-ui-traffic-reference-api.md +1489 -0
- package/dist/serve/docs-ui/docs/read-a-denial/index.html +40 -0
- package/dist/serve/docs-ui/docs/read-a-denial.md +62 -0
- package/dist/serve/docs-ui/docs/receive-messages/index.html +28 -0
- package/dist/serve/docs-ui/docs/receive-messages.md +43 -0
- package/dist/serve/docs-ui/docs/rtdb-rules-in-typescript/index.html +67 -0
- package/dist/serve/docs-ui/docs/rtdb-rules-in-typescript.md +101 -0
- package/dist/serve/docs-ui/docs/rules-patterns/index.html +68 -0
- package/dist/serve/docs-ui/docs/rules-patterns.md +104 -0
- package/dist/serve/docs-ui/docs/rules-standard-library/index.html +87 -0
- package/dist/serve/docs-ui/docs/rules-standard-library.md +93 -0
- package/dist/serve/docs-ui/docs/run-ai-logic-locally/index.html +27 -0
- package/dist/serve/docs-ui/docs/run-ai-logic-locally.md +43 -0
- package/dist/serve/docs-ui/docs/secure-it-with-rules/index.html +69 -0
- package/dist/serve/docs-ui/docs/secure-it-with-rules.md +101 -0
- package/dist/serve/docs-ui/docs/see-whats-happening/index.html +73 -0
- package/dist/serve/docs-ui/docs/see-whats-happening.md +77 -0
- package/dist/serve/docs-ui/docs/set-up-the-project/index.html +14 -0
- package/dist/serve/docs-ui/docs/set-up-the-project.md +19 -0
- package/dist/serve/docs-ui/docs/set-up-your-agent/index.html +42 -0
- package/dist/serve/docs-ui/docs/set-up-your-agent.md +86 -0
- package/dist/serve/docs-ui/docs/shape-your-data/index.html +44 -0
- package/dist/serve/docs-ui/docs/shape-your-data.md +88 -0
- package/dist/serve/docs-ui/docs/ship-to-production/index.html +36 -0
- package/dist/serve/docs-ui/docs/ship-to-production.md +80 -0
- package/dist/serve/docs-ui/docs/sign-in-and-manage-users/index.html +31 -0
- package/dist/serve/docs-ui/docs/sign-in-and-manage-users.md +50 -0
- package/dist/serve/docs-ui/docs/simulate-and-lint/index.html +95 -0
- package/dist/serve/docs-ui/docs/simulate-and-lint.md +99 -0
- package/dist/serve/docs-ui/docs/skills/index.html +20 -0
- package/dist/serve/docs-ui/docs/skills.md +34 -0
- package/dist/serve/docs-ui/docs/start-building/index.html +32 -0
- package/dist/serve/docs-ui/docs/start-building.md +64 -0
- package/dist/serve/docs-ui/docs/store-and-query-data/index.html +16 -0
- package/dist/serve/docs-ui/docs/store-and-query-data.md +33 -0
- package/dist/serve/docs-ui/docs/store-files/index.html +13 -0
- package/dist/serve/docs-ui/docs/store-files.md +25 -0
- package/dist/serve/docs-ui/docs/sync-realtime-data/index.html +15 -0
- package/dist/serve/docs-ui/docs/sync-realtime-data.md +27 -0
- package/dist/serve/docs-ui/docs/test-in-node/index.html +74 -0
- package/dist/serve/docs-ui/docs/test-in-node.md +100 -0
- package/dist/serve/docs-ui/docs/ui/index.html +76 -0
- package/dist/serve/docs-ui/docs/ui-auth-authsigninhelper/index.html +194 -0
- package/dist/serve/docs-ui/docs/ui-auth-authsigninhelper.md +114 -0
- package/dist/serve/docs-ui/docs/ui-auth-authusers/index.html +263 -0
- package/dist/serve/docs-ui/docs/ui-auth-authusers.md +183 -0
- package/dist/serve/docs-ui/docs/ui-firestore-collectionlist/index.html +92 -0
- package/dist/serve/docs-ui/docs/ui-firestore-collectionlist.md +79 -0
- package/dist/serve/docs-ui/docs/ui-firestore-deletewithconfirm/index.html +128 -0
- package/dist/serve/docs-ui/docs/ui-firestore-deletewithconfirm.md +104 -0
- package/dist/serve/docs-ui/docs/ui-firestore-documenteditor/index.html +154 -0
- package/dist/serve/docs-ui/docs/ui-firestore-documenteditor.md +117 -0
- package/dist/serve/docs-ui/docs/ui-firestore-documentlist/index.html +132 -0
- package/dist/serve/docs-ui/docs/ui-firestore-documentlist.md +92 -0
- package/dist/serve/docs-ui/docs/ui-firestore-documentpreview/index.html +159 -0
- package/dist/serve/docs-ui/docs/ui-firestore-documentpreview.md +84 -0
- package/dist/serve/docs-ui/docs/ui-firestore-querybuilder/index.html +104 -0
- package/dist/serve/docs-ui/docs/ui-firestore-querybuilder.md +103 -0
- package/dist/serve/docs-ui/docs/ui-firestore-referencepicker/index.html +113 -0
- package/dist/serve/docs-ui/docs/ui-firestore-referencepicker.md +93 -0
- package/dist/serve/docs-ui/docs/ui-primitives-badge/index.html +56 -0
- package/dist/serve/docs-ui/docs/ui-primitives-badge.md +40 -0
- package/dist/serve/docs-ui/docs/ui-primitives-confirmdialog/index.html +140 -0
- package/dist/serve/docs-ui/docs/ui-primitives-confirmdialog.md +108 -0
- package/dist/serve/docs-ui/docs/ui-primitives-copybutton/index.html +58 -0
- package/dist/serve/docs-ui/docs/ui-primitives-copybutton.md +37 -0
- package/dist/serve/docs-ui/docs/ui-primitives-jsonview/index.html +58 -0
- package/dist/serve/docs-ui/docs/ui-primitives-jsonview.md +47 -0
- package/dist/serve/docs-ui/docs/ui-primitives-segmentedcontrol/index.html +70 -0
- package/dist/serve/docs-ui/docs/ui-primitives-segmentedcontrol.md +50 -0
- package/dist/serve/docs-ui/docs/ui-primitives-toast/index.html +87 -0
- package/dist/serve/docs-ui/docs/ui-primitives-toast.md +82 -0
- package/dist/serve/docs-ui/docs/ui-primitives-virtuallist/index.html +85 -0
- package/dist/serve/docs-ui/docs/ui-primitives-virtuallist.md +54 -0
- package/dist/serve/docs-ui/docs/ui-storage/index.html +150 -0
- package/dist/serve/docs-ui/docs/ui-storage-deleteselectionwithconfirm/index.html +126 -0
- package/dist/serve/docs-ui/docs/ui-storage-deleteselectionwithconfirm.md +88 -0
- package/dist/serve/docs-ui/docs/ui-storage-objectbrowser/index.html +137 -0
- package/dist/serve/docs-ui/docs/ui-storage-objectbrowser.md +90 -0
- package/dist/serve/docs-ui/docs/ui-storage-objectinspector/index.html +139 -0
- package/dist/serve/docs-ui/docs/ui-storage-objectinspector.md +93 -0
- package/dist/serve/docs-ui/docs/ui-storage-pathbreadcrumb/index.html +72 -0
- package/dist/serve/docs-ui/docs/ui-storage-pathbreadcrumb.md +57 -0
- package/dist/serve/docs-ui/docs/ui-storage-rules-aware-affordances/index.html +60 -0
- package/dist/serve/docs-ui/docs/ui-storage-rules-aware-affordances.md +52 -0
- package/dist/serve/docs-ui/docs/ui-storage-uploaddropzone/index.html +93 -0
- package/dist/serve/docs-ui/docs/ui-storage-uploaddropzone.md +78 -0
- package/dist/serve/docs-ui/docs/ui-storage-usestoragerulesgate/index.html +144 -0
- package/dist/serve/docs-ui/docs/ui-storage-usestoragerulesgate.md +101 -0
- package/dist/serve/docs-ui/docs/ui-storage.md +165 -0
- package/dist/serve/docs-ui/docs/ui-traffic/index.html +88 -0
- package/dist/serve/docs-ui/docs/ui-traffic-ruleheatmap/index.html +79 -0
- package/dist/serve/docs-ui/docs/ui-traffic-ruleheatmap.md +60 -0
- package/dist/serve/docs-ui/docs/ui-traffic-trafficdetail/index.html +78 -0
- package/dist/serve/docs-ui/docs/ui-traffic-trafficdetail.md +59 -0
- package/dist/serve/docs-ui/docs/ui-traffic-trafficlog/index.html +118 -0
- package/dist/serve/docs-ui/docs/ui-traffic-trafficlog.md +69 -0
- package/dist/serve/docs-ui/docs/ui-traffic-trafficstats/index.html +51 -0
- package/dist/serve/docs-ui/docs/ui-traffic-trafficstats.md +46 -0
- package/dist/serve/docs-ui/docs/ui-traffic.md +102 -0
- package/dist/serve/docs-ui/docs/ui.md +90 -0
- package/dist/serve/docs-ui/docs/watch-and-review/index.html +25 -0
- package/dist/serve/docs-ui/docs/watch-and-review.md +40 -0
- package/dist/serve/docs-ui/docs/what-your-agent-can-do/index.html +81 -0
- package/dist/serve/docs-ui/docs/what-your-agent-can-do.md +78 -0
- package/dist/serve/docs-ui/docs/whats-experimental/index.html +22 -0
- package/dist/serve/docs-ui/docs/whats-experimental.md +33 -0
- package/dist/serve/docs-ui/docs/whats-possible/index.html +63 -0
- package/dist/serve/docs-ui/docs/whats-possible.md +53 -0
- package/dist/serve/docs-ui/docs/which-data-service/index.html +8 -0
- package/dist/serve/docs-ui/docs/which-data-service.md +11 -0
- package/dist/serve/docs-ui/docs/write-a-rules-test-suite/index.html +85 -0
- package/dist/serve/docs-ui/docs/write-a-rules-test-suite.md +119 -0
- package/dist/serve/docs-ui/index.html +1 -0
- package/dist/serve/docs-ui/llms.txt +308 -0
- package/dist/serve/entries/ai.d.ts +4 -0
- package/dist/serve/entries/ai.d.ts.map +1 -0
- package/dist/serve/entries/ai.js +184 -0
- package/dist/serve/entries/ai.js.map +1 -0
- package/dist/serve/entries/app-backend.d.ts +2 -0
- package/dist/serve/entries/app-backend.d.ts.map +1 -0
- package/dist/serve/entries/app-backend.js +4 -0
- package/dist/serve/entries/app-backend.js.map +1 -0
- package/dist/serve/entries/app-client.d.ts +5 -0
- package/dist/serve/entries/app-client.d.ts.map +1 -0
- package/dist/serve/entries/app-client.js +23 -0
- package/dist/serve/entries/app-client.js.map +1 -0
- package/dist/serve/entries/app-session-store.d.ts +14 -0
- package/dist/serve/entries/app-session-store.d.ts.map +1 -0
- package/dist/serve/entries/app-session-store.js +37 -0
- package/dist/serve/entries/app-session-store.js.map +1 -0
- package/dist/serve/entries/app.d.ts +2 -0
- package/dist/serve/entries/app.d.ts.map +1 -0
- package/dist/serve/entries/app.js +10 -0
- package/dist/serve/entries/app.js.map +1 -0
- package/dist/serve/entries/auth-helper-core.d.ts +52 -0
- package/dist/serve/entries/auth-helper-core.d.ts.map +1 -0
- package/dist/serve/entries/auth-helper-core.js +118 -0
- package/dist/serve/entries/auth-helper-core.js.map +1 -0
- package/dist/serve/entries/auth-helper-dom.d.ts +14 -0
- package/dist/serve/entries/auth-helper-dom.d.ts.map +1 -0
- package/dist/serve/entries/auth-helper-dom.js +116 -0
- package/dist/serve/entries/auth-helper-dom.js.map +1 -0
- package/dist/serve/entries/auth-helper-runtime.d.ts +5 -0
- package/dist/serve/entries/auth-helper-runtime.d.ts.map +1 -0
- package/dist/serve/entries/auth-helper-runtime.js +11 -0
- package/dist/serve/entries/auth-helper-runtime.js.map +1 -0
- package/dist/serve/entries/auth.d.ts +77 -0
- package/dist/serve/entries/auth.d.ts.map +1 -0
- package/dist/serve/entries/auth.js +201 -0
- package/dist/serve/entries/auth.js.map +1 -0
- package/dist/serve/entries/bridge-url.d.ts +25 -0
- package/dist/serve/entries/bridge-url.d.ts.map +1 -0
- package/dist/serve/entries/bridge-url.js +30 -0
- package/dist/serve/entries/bridge-url.js.map +1 -0
- package/dist/serve/entries/database.d.ts +46 -0
- package/dist/serve/entries/database.d.ts.map +1 -0
- package/dist/serve/entries/database.js +80 -0
- package/dist/serve/entries/database.js.map +1 -0
- package/dist/serve/entries/firestore.d.ts +104 -0
- package/dist/serve/entries/firestore.d.ts.map +1 -0
- package/dist/serve/entries/firestore.js +202 -0
- package/dist/serve/entries/firestore.js.map +1 -0
- package/dist/serve/entries/init.d.ts +2 -0
- package/dist/serve/entries/init.d.ts.map +1 -0
- package/dist/serve/entries/init.js +40 -0
- package/dist/serve/entries/init.js.map +1 -0
- package/dist/serve/entries/keepalive.d.ts +20 -0
- package/dist/serve/entries/keepalive.d.ts.map +1 -0
- package/dist/serve/entries/keepalive.js +38 -0
- package/dist/serve/entries/keepalive.js.map +1 -0
- package/dist/serve/entries/messaging-sw.d.ts +10 -0
- package/dist/serve/entries/messaging-sw.d.ts.map +1 -0
- package/dist/serve/entries/messaging-sw.js +36 -0
- package/dist/serve/entries/messaging-sw.js.map +1 -0
- package/dist/serve/entries/messaging.d.ts +11 -0
- package/dist/serve/entries/messaging.d.ts.map +1 -0
- package/dist/serve/entries/messaging.js +53 -0
- package/dist/serve/entries/messaging.js.map +1 -0
- package/dist/serve/entries/runtime.d.ts +46 -0
- package/dist/serve/entries/runtime.d.ts.map +1 -0
- package/dist/serve/entries/runtime.js +435 -0
- package/dist/serve/entries/runtime.js.map +1 -0
- package/dist/serve/entries/session-store.d.ts +48 -0
- package/dist/serve/entries/session-store.d.ts.map +1 -0
- package/dist/serve/entries/session-store.js +82 -0
- package/dist/serve/entries/session-store.js.map +1 -0
- package/dist/serve/entries/storage.d.ts +25 -0
- package/dist/serve/entries/storage.d.ts.map +1 -0
- package/dist/serve/entries/storage.js +61 -0
- package/dist/serve/entries/storage.js.map +1 -0
- package/dist/serve/entries/tab-sync-wiring.d.ts +88 -0
- package/dist/serve/entries/tab-sync-wiring.d.ts.map +1 -0
- package/dist/serve/entries/tab-sync-wiring.js +217 -0
- package/dist/serve/entries/tab-sync-wiring.js.map +1 -0
- package/dist/serve/entries/worker-runtime.d.ts +10 -0
- package/dist/serve/entries/worker-runtime.d.ts.map +1 -0
- package/dist/serve/entries/worker-runtime.js +59 -0
- package/dist/serve/entries/worker-runtime.js.map +1 -0
- package/dist/serve/init-payload.d.ts +21 -0
- package/dist/serve/init-payload.d.ts.map +1 -0
- package/dist/serve/init-payload.js +2 -0
- package/dist/serve/init-payload.js.map +1 -0
- package/dist/serve/namespace.d.ts +73 -0
- package/dist/serve/namespace.d.ts.map +1 -0
- package/dist/serve/namespace.js +470 -0
- package/dist/serve/namespace.js.map +1 -0
- package/dist/serve/open-browser.d.ts +23 -0
- package/dist/serve/open-browser.d.ts.map +1 -0
- package/dist/serve/open-browser.js +58 -0
- package/dist/serve/open-browser.js.map +1 -0
- package/dist/serve/rules.d.ts +77 -0
- package/dist/serve/rules.d.ts.map +1 -0
- package/dist/serve/rules.js +202 -0
- package/dist/serve/rules.js.map +1 -0
- package/dist/serve/sandbox-marker.d.ts +9 -0
- package/dist/serve/sandbox-marker.d.ts.map +1 -0
- package/dist/serve/sandbox-marker.js +31 -0
- package/dist/serve/sandbox-marker.js.map +1 -0
- package/dist/serve/server.d.ts +135 -0
- package/dist/serve/server.d.ts.map +1 -0
- package/dist/serve/server.js +328 -0
- package/dist/serve/server.js.map +1 -0
- package/dist/serve/standalone-assets.d.ts +67 -0
- package/dist/serve/standalone-assets.d.ts.map +1 -0
- package/dist/serve/standalone-assets.js +134 -0
- package/dist/serve/standalone-assets.js.map +1 -0
- package/dist/serve/state-store.d.ts +45 -0
- package/dist/serve/state-store.d.ts.map +1 -0
- package/dist/serve/state-store.js +120 -0
- package/dist/serve/state-store.js.map +1 -0
- package/dist/serve/studio/disk-project-store.d.ts +9 -0
- package/dist/serve/studio/disk-project-store.d.ts.map +1 -0
- package/dist/serve/studio/disk-project-store.js +173 -0
- package/dist/serve/studio/disk-project-store.js.map +1 -0
- package/dist/serve/studio/disk-workspace.d.ts +14 -0
- package/dist/serve/studio/disk-workspace.d.ts.map +1 -0
- package/dist/serve/studio/disk-workspace.js +152 -0
- package/dist/serve/studio/disk-workspace.js.map +1 -0
- package/dist/serve/studio/index.d.ts +10 -0
- package/dist/serve/studio/index.d.ts.map +1 -0
- package/dist/serve/studio/index.js +9 -0
- package/dist/serve/studio/index.js.map +1 -0
- package/dist/serve/studio/routes.d.ts +40 -0
- package/dist/serve/studio/routes.d.ts.map +1 -0
- package/dist/serve/studio/routes.js +182 -0
- package/dist/serve/studio/routes.js.map +1 -0
- package/dist/serve/studio/store-types.d.ts +45 -0
- package/dist/serve/studio/store-types.d.ts.map +1 -0
- package/dist/serve/studio/store-types.js +11 -0
- package/dist/serve/studio/store-types.js.map +1 -0
- package/dist/serve/studio-ui/assets/RulesCodeEditor-BZpD57II.js +23 -0
- package/dist/serve/studio-ui/assets/index-Bsa-TQNK.css +1 -0
- package/dist/serve/studio-ui/assets/index-DGaVuOhE.js +1211 -0
- package/dist/serve/studio-ui/assets/seed-CTmn6YuO.js +2 -0
- package/dist/serve/studio-ui/index.html +32 -0
- package/dist/serve/studio-ui/pyric-logo.svg +76 -0
- package/dist/serve/vite-plugin.d.ts +57 -0
- package/dist/serve/vite-plugin.d.ts.map +1 -0
- package/dist/serve/vite-plugin.js +658 -0
- package/dist/serve/vite-plugin.js.map +1 -0
- package/dist/serve/worker/client/admin-firestore.d.ts +18 -0
- package/dist/serve/worker/client/admin-firestore.d.ts.map +1 -0
- package/dist/serve/worker/client/admin-firestore.js +26 -0
- package/dist/serve/worker/client/admin-firestore.js.map +1 -0
- package/dist/serve/worker/client/ai.d.ts +31 -0
- package/dist/serve/worker/client/ai.d.ts.map +1 -0
- package/dist/serve/worker/client/ai.js +89 -0
- package/dist/serve/worker/client/ai.js.map +1 -0
- package/dist/serve/worker/client/auth.d.ts +168 -0
- package/dist/serve/worker/client/auth.d.ts.map +1 -0
- package/dist/serve/worker/client/auth.js +322 -0
- package/dist/serve/worker/client/auth.js.map +1 -0
- package/dist/serve/worker/client/connection.d.ts +80 -0
- package/dist/serve/worker/client/connection.d.ts.map +1 -0
- package/dist/serve/worker/client/connection.js +148 -0
- package/dist/serve/worker/client/connection.js.map +1 -0
- package/dist/serve/worker/client/core.d.ts +109 -0
- package/dist/serve/worker/client/core.d.ts.map +1 -0
- package/dist/serve/worker/client/core.js +248 -0
- package/dist/serve/worker/client/core.js.map +1 -0
- package/dist/serve/worker/client/disconnect.d.ts +7 -0
- package/dist/serve/worker/client/disconnect.d.ts.map +1 -0
- package/dist/serve/worker/client/disconnect.js +26 -0
- package/dist/serve/worker/client/disconnect.js.map +1 -0
- package/dist/serve/worker/client/firestore-reads.d.ts +49 -0
- package/dist/serve/worker/client/firestore-reads.d.ts.map +1 -0
- package/dist/serve/worker/client/firestore-reads.js +139 -0
- package/dist/serve/worker/client/firestore-reads.js.map +1 -0
- package/dist/serve/worker/client/firestore-refs.d.ts +54 -0
- package/dist/serve/worker/client/firestore-refs.d.ts.map +1 -0
- package/dist/serve/worker/client/firestore-refs.js +167 -0
- package/dist/serve/worker/client/firestore-refs.js.map +1 -0
- package/dist/serve/worker/client/firestore-writes.d.ts +70 -0
- package/dist/serve/worker/client/firestore-writes.d.ts.map +1 -0
- package/dist/serve/worker/client/firestore-writes.js +169 -0
- package/dist/serve/worker/client/firestore-writes.js.map +1 -0
- package/dist/serve/worker/client/handles.d.ts +73 -0
- package/dist/serve/worker/client/handles.d.ts.map +1 -0
- package/dist/serve/worker/client/handles.js +4 -0
- package/dist/serve/worker/client/handles.js.map +1 -0
- package/dist/serve/worker/client/messaging.d.ts +16 -0
- package/dist/serve/worker/client/messaging.d.ts.map +1 -0
- package/dist/serve/worker/client/messaging.js +60 -0
- package/dist/serve/worker/client/messaging.js.map +1 -0
- package/dist/serve/worker/client/presence.d.ts +43 -0
- package/dist/serve/worker/client/presence.d.ts.map +1 -0
- package/dist/serve/worker/client/presence.js +132 -0
- package/dist/serve/worker/client/presence.js.map +1 -0
- package/dist/serve/worker/client/rtdb.d.ts +36 -0
- package/dist/serve/worker/client/rtdb.d.ts.map +1 -0
- package/dist/serve/worker/client/rtdb.js +241 -0
- package/dist/serve/worker/client/rtdb.js.map +1 -0
- package/dist/serve/worker/client/rules.d.ts +24 -0
- package/dist/serve/worker/client/rules.d.ts.map +1 -0
- package/dist/serve/worker/client/rules.js +44 -0
- package/dist/serve/worker/client/rules.js.map +1 -0
- package/dist/serve/worker/client/service-worker-connection.d.ts +3 -0
- package/dist/serve/worker/client/service-worker-connection.d.ts.map +1 -0
- package/dist/serve/worker/client/service-worker-connection.js +53 -0
- package/dist/serve/worker/client/service-worker-connection.js.map +1 -0
- package/dist/serve/worker/client/snapshots.d.ts +32 -0
- package/dist/serve/worker/client/snapshots.d.ts.map +1 -0
- package/dist/serve/worker/client/snapshots.js +46 -0
- package/dist/serve/worker/client/snapshots.js.map +1 -0
- package/dist/serve/worker/client/storage.d.ts +64 -0
- package/dist/serve/worker/client/storage.d.ts.map +1 -0
- package/dist/serve/worker/client/storage.js +125 -0
- package/dist/serve/worker/client/storage.js.map +1 -0
- package/dist/serve/worker/client/studio.d.ts +32 -0
- package/dist/serve/worker/client/studio.d.ts.map +1 -0
- package/dist/serve/worker/client/studio.js +61 -0
- package/dist/serve/worker/client/studio.js.map +1 -0
- package/dist/serve/worker/client.d.ts +43 -0
- package/dist/serve/worker/client.d.ts.map +1 -0
- package/dist/serve/worker/client.js +44 -0
- package/dist/serve/worker/client.js.map +1 -0
- package/dist/serve/worker/entry.d.ts +40 -0
- package/dist/serve/worker/entry.d.ts.map +1 -0
- package/dist/serve/worker/entry.js +144 -0
- package/dist/serve/worker/entry.js.map +1 -0
- package/dist/serve/worker/host/admin-firestore.d.ts +17 -0
- package/dist/serve/worker/host/admin-firestore.d.ts.map +1 -0
- package/dist/serve/worker/host/admin-firestore.js +92 -0
- package/dist/serve/worker/host/admin-firestore.js.map +1 -0
- package/dist/serve/worker/host/connection.d.ts +40 -0
- package/dist/serve/worker/host/connection.d.ts.map +1 -0
- package/dist/serve/worker/host/connection.js +153 -0
- package/dist/serve/worker/host/connection.js.map +1 -0
- package/dist/serve/worker/host/core.d.ts +159 -0
- package/dist/serve/worker/host/core.d.ts.map +1 -0
- package/dist/serve/worker/host/core.js +296 -0
- package/dist/serve/worker/host/core.js.map +1 -0
- package/dist/serve/worker/host/dispatch.d.ts +34 -0
- package/dist/serve/worker/host/dispatch.d.ts.map +1 -0
- package/dist/serve/worker/host/dispatch.js +267 -0
- package/dist/serve/worker/host/dispatch.js.map +1 -0
- package/dist/serve/worker/host/firestore-reads.d.ts +17 -0
- package/dist/serve/worker/host/firestore-reads.d.ts.map +1 -0
- package/dist/serve/worker/host/firestore-reads.js +108 -0
- package/dist/serve/worker/host/firestore-reads.js.map +1 -0
- package/dist/serve/worker/host/firestore-writes.d.ts +37 -0
- package/dist/serve/worker/host/firestore-writes.d.ts.map +1 -0
- package/dist/serve/worker/host/firestore-writes.js +409 -0
- package/dist/serve/worker/host/firestore-writes.js.map +1 -0
- package/dist/serve/worker/host/presence.d.ts +38 -0
- package/dist/serve/worker/host/presence.d.ts.map +1 -0
- package/dist/serve/worker/host/presence.js +280 -0
- package/dist/serve/worker/host/presence.js.map +1 -0
- package/dist/serve/worker/host/rtdb.d.ts +18 -0
- package/dist/serve/worker/host/rtdb.d.ts.map +1 -0
- package/dist/serve/worker/host/rtdb.js +128 -0
- package/dist/serve/worker/host/rtdb.js.map +1 -0
- package/dist/serve/worker/host/rules.d.ts +17 -0
- package/dist/serve/worker/host/rules.d.ts.map +1 -0
- package/dist/serve/worker/host/rules.js +118 -0
- package/dist/serve/worker/host/rules.js.map +1 -0
- package/dist/serve/worker/host/storage.d.ts +19 -0
- package/dist/serve/worker/host/storage.d.ts.map +1 -0
- package/dist/serve/worker/host/storage.js +260 -0
- package/dist/serve/worker/host/storage.js.map +1 -0
- package/dist/serve/worker/host/studio.d.ts +13 -0
- package/dist/serve/worker/host/studio.d.ts.map +1 -0
- package/dist/serve/worker/host/studio.js +30 -0
- package/dist/serve/worker/host/studio.js.map +1 -0
- package/dist/serve/worker/host/subscriptions.d.ts +21 -0
- package/dist/serve/worker/host/subscriptions.d.ts.map +1 -0
- package/dist/serve/worker/host/subscriptions.js +162 -0
- package/dist/serve/worker/host/subscriptions.js.map +1 -0
- package/dist/serve/worker/host-ai.d.ts +59 -0
- package/dist/serve/worker/host-ai.d.ts.map +1 -0
- package/dist/serve/worker/host-ai.js +158 -0
- package/dist/serve/worker/host-ai.js.map +1 -0
- package/dist/serve/worker/host-auth.d.ts +47 -0
- package/dist/serve/worker/host-auth.d.ts.map +1 -0
- package/dist/serve/worker/host-auth.js +464 -0
- package/dist/serve/worker/host-auth.js.map +1 -0
- package/dist/serve/worker/host-context.d.ts +220 -0
- package/dist/serve/worker/host-context.d.ts.map +1 -0
- package/dist/serve/worker/host-context.js +45 -0
- package/dist/serve/worker/host-context.js.map +1 -0
- package/dist/serve/worker/host-events.d.ts +21 -0
- package/dist/serve/worker/host-events.d.ts.map +1 -0
- package/dist/serve/worker/host-events.js +87 -0
- package/dist/serve/worker/host-events.js.map +1 -0
- package/dist/serve/worker/host-messaging.d.ts +60 -0
- package/dist/serve/worker/host-messaging.d.ts.map +1 -0
- package/dist/serve/worker/host-messaging.js +226 -0
- package/dist/serve/worker/host-messaging.js.map +1 -0
- package/dist/serve/worker/host.d.ts +36 -0
- package/dist/serve/worker/host.d.ts.map +1 -0
- package/dist/serve/worker/host.js +39 -0
- package/dist/serve/worker/host.js.map +1 -0
- package/dist/serve/worker/index.d.ts +22 -0
- package/dist/serve/worker/index.d.ts.map +1 -0
- package/dist/serve/worker/index.js +61 -0
- package/dist/serve/worker/index.js.map +1 -0
- package/dist/serve/worker/presence-timing.d.ts +14 -0
- package/dist/serve/worker/presence-timing.d.ts.map +1 -0
- package/dist/serve/worker/presence-timing.js +14 -0
- package/dist/serve/worker/presence-timing.js.map +1 -0
- package/dist/serve/worker/protocol.d.ts +1150 -0
- package/dist/serve/worker/protocol.d.ts.map +1 -0
- package/dist/serve/worker/protocol.js +228 -0
- package/dist/serve/worker/protocol.js.map +1 -0
- package/dist/serve/worker/serve-init.d.ts +201 -0
- package/dist/serve/worker/serve-init.d.ts.map +1 -0
- package/dist/serve/worker/serve-init.js +579 -0
- package/dist/serve/worker/serve-init.js.map +1 -0
- package/dist/serve/worker/service-worker-channel.d.ts +23 -0
- package/dist/serve/worker/service-worker-channel.d.ts.map +1 -0
- package/dist/serve/worker/service-worker-channel.js +9 -0
- package/dist/serve/worker/service-worker-channel.js.map +1 -0
- package/dist/serve/worker/service-worker-relay.d.ts +22 -0
- package/dist/serve/worker/service-worker-relay.d.ts.map +1 -0
- package/dist/serve/worker/service-worker-relay.js +63 -0
- package/dist/serve/worker/service-worker-relay.js.map +1 -0
- package/dist/serve/writer-lock.d.ts +32 -0
- package/dist/serve/writer-lock.d.ts.map +1 -0
- package/dist/serve/writer-lock.js +43 -0
- package/dist/serve/writer-lock.js.map +1 -0
- package/dist/verify/cases.d.ts +37 -0
- package/dist/verify/cases.d.ts.map +1 -0
- package/dist/verify/cases.js +173 -0
- package/dist/verify/cases.js.map +1 -0
- package/dist/verify/fixture.d.ts +100 -0
- package/dist/verify/fixture.d.ts.map +1 -0
- package/dist/verify/fixture.js +156 -0
- package/dist/verify/fixture.js.map +1 -0
- package/dist/verify/index.d.ts +102 -0
- package/dist/verify/index.d.ts.map +1 -0
- package/dist/verify/index.js +318 -0
- package/dist/verify/index.js.map +1 -0
- package/dist/verify/tools.d.ts +7 -0
- package/dist/verify/tools.d.ts.map +1 -0
- package/dist/verify/tools.js +83 -0
- package/dist/verify/tools.js.map +1 -0
- package/dist/version/compat-target.d.ts +18 -0
- package/dist/version/compat-target.d.ts.map +1 -0
- package/dist/version/compat-target.js +18 -0
- package/dist/version/compat-target.js.map +1 -0
- package/dist/vite.d.ts +12 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +16 -0
- package/dist/vite.js.map +1 -0
- package/package.json +133 -0
|
@@ -0,0 +1,2476 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>API reference: @pyric/ui/storage · Pyric Studio</title><meta name="description" content="Published declarations for @pyric/ui/storage."><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet"><link rel="stylesheet" href="/__pyric/ui/_astro/_slug_.CQYSemvw.css"></head> <body> <header class="studio__bar"> <div class="studio__bar-inner"> <a class="studio__brand" href="/__pyric/ui/" aria-label="Pyric Studio">Pyric</a> <nav class="studio__nav" aria-label="Studio tabs"> <a class="studio__nav-tab" href="/__pyric/ui/"> Home </a><a class="studio__nav-tab" href="/__pyric/ui/firestore"> Firestore </a><a class="studio__nav-tab" href="/__pyric/ui/auth"> Auth </a><a class="studio__nav-tab" href="/__pyric/ui/rtdb"> RTDB </a><a class="studio__nav-tab" href="/__pyric/ui/storage"> Storage </a><a class="studio__nav-tab" href="/__pyric/ui/traffic"> Traffic </a><a class="studio__nav-tab" href="/__pyric/ui/settings"> Settings </a><a class="studio__nav-tab" href="/__pyric/ui/docs" aria-current="page"> Docs </a> </nav> </div> </header> <div class="docs-shell"> <details class="docs-nav-drawer"> <summary>Navigate</summary> <nav class="docs-nav" aria-label="Documentation"> <div class="docs-search" data-index-url="/__pyric/ui/docs/index.json"> <div class="docs-search-field"> <svg class="docs-search-icon" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"> <path d="M11.5 11.5 15 15M13 7A6 6 0 1 1 1 7a6 6 0 0 1 12 0Z" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></path> </svg> <input type="text" class="docs-search-input" placeholder="Search docs" aria-label="Search docs" autocomplete="off" spellcheck="false"> <kbd class="docs-search-kbd">⌘K</kbd> </div> <ul class="docs-search-results" hidden></ul> </div> <script type="module">let i=null;function d(t){return i||(i=fetch(t).then(e=>e.json())),i}function l(t,e){return t.title.toLowerCase().includes(e)||t.excerpt.toLowerCase().includes(e)?!0:t.headings.some(r=>r.text.toLowerCase().includes(e))}function u(t,e,r){if(e.innerHTML="",t.length===0){e.hidden=!1;{const n=document.createElement("li");n.className="docs-search-empty",n.textContent="No matches",e.appendChild(n)}return}e.hidden=!1;for(const n of t.slice(0,8)){const s=document.createElement("li"),c=document.createElement("a");c.href=n.path;const o=document.createElement("span");o.className="docs-search-result-title",o.textContent=n.title;const a=document.createElement("span");a.className="docs-search-result-meta",a.textContent=[n.group,n.section].filter(Boolean).join(" / "),c.append(o,a),s.appendChild(c),e.appendChild(s)}}document.querySelectorAll(".docs-search").forEach(t=>{const e=t.dataset.indexUrl,r=t.querySelector(".docs-search-input"),n=t.querySelector(".docs-search-results");r.addEventListener("input",async()=>{const s=r.value.trim().toLowerCase();if(!s){n.hidden=!0,n.innerHTML="";return}const{pages:c}=await d(e);r.value.trim().toLowerCase()===s&&u(c.filter(o=>l(o,s)),n)}),r.addEventListener("focus",()=>{d(e),n.childElementCount>0&&(n.hidden=!1)}),r.addEventListener("keydown",s=>{s.key==="Escape"&&(r.value="",n.hidden=!0,n.innerHTML="",r.blur())}),r.addEventListener("blur",()=>{window.setTimeout(()=>{n.hidden=!0},150)})});document.addEventListener("keydown",t=>{if(!(t.metaKey||t.ctrlKey)||t.key.toLowerCase()!=="k")return;const e=[...document.querySelectorAll(".docs-search-input")].find(r=>r.offsetParent!==null);e&&(t.preventDefault(),e.focus(),e.select())});</script> <a class="docs-nav-toplink" href="/__pyric/ui/docs/overview/"> Overview </a><details class="docs-nav-group"> <summary>Run locally</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/how-the-swap-works/"> How the swap works </a> </li><li> <a href="/__pyric/ui/docs/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Develop with Firebase APIs</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/sign-in-and-manage-users/"> Sign in and manage users </a> </li><li> <a href="/__pyric/ui/docs/store-and-query-data/"> Store and query data </a> </li><li> <a href="/__pyric/ui/docs/sync-realtime-data/"> Sync realtime data </a> </li><li> <a href="/__pyric/ui/docs/store-files/"> Store files </a> </li><li> <a href="/__pyric/ui/docs/receive-messages/"> Receive messages </a> </li><li> <a href="/__pyric/ui/docs/run-ai-logic-locally/"> Run AI Logic locally </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-how-to-run-rtdb-onvaluecreated/"> Run an RTDB function locally </a> </li><li> <a href="/__pyric/ui/docs/which-data-service/"> Which data service? </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Inspect and correct</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <h2 class="docs-nav-heading"> Inspect the sandbox </h2> <ul> <li> <a href="/__pyric/ui/docs/see-whats-happening/"> Traffic & rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/shape-your-data/"> Seed, snapshot, replay </a> </li><li> <a href="/__pyric/ui/docs/watch-and-review/"> Review agent activity </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading"> Correct Security Rules </h2> <ul> <li> <a href="/__pyric/ui/docs/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/rules-patterns/"> Rules patterns </a> </li><li> <a href="/__pyric/ui/docs/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/whats-possible/"> Case studies </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading"> Work with an agent </h2> <ul> <li> <a href="/__pyric/ui/docs/what-your-agent-can-do/"> Work through an agent </a> </li><li> <a href="/__pyric/ui/docs/skills/"> Agent skills </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Verify the boundary</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-how-to-verify-against-a-captured-session/"> Verify a captured session </a> </li><li> <a href="/__pyric/ui/docs/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Ship unchanged</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/set-up-the-project/"> Set up the Firebase project </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Conformance</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/how-we-know-it-matches-firebase/"> Conformance </a> </li><li> <a href="/__pyric/ui/docs/whats-experimental/"> What's experimental </a> </li><li> <a href="/__pyric/ui/docs/pyric-conformance-scores/"> Conformance scores </a> </li><li> <a href="/__pyric/ui/docs/pyric-app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-compat/"> Rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-functions-rtdb-compat/"> Functions · RTDB </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" open> <summary>Reference</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli/"> @pyric/cli </a> </li><li> <a href="/__pyric/ui/docs/pyric-explanation-versioning-and-compatibility/"> pyric </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore/"> pyric / firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules/"> pyric / rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox/"> pyric / sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage/"> pyric / storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth/"> pyric / auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-database/"> pyric / database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-app/"> pyric-admin / app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore/"> pyric-admin / firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth/"> pyric-admin / auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database/"> pyric-admin / database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage/"> pyric-admin / storage </a> </li><li> <a href="/__pyric/ui/docs/ui/"> @pyric/ui </a> </li><li> <a href="/__pyric/ui/docs/api-reference/" aria-current="true"> API reference </a> </li> </ul> </div> </div> </details> </nav> </details> <nav class="docs-nav" aria-label="Documentation"> <div class="docs-search" data-index-url="/__pyric/ui/docs/index.json"> <div class="docs-search-field"> <svg class="docs-search-icon" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"> <path d="M11.5 11.5 15 15M13 7A6 6 0 1 1 1 7a6 6 0 0 1 12 0Z" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></path> </svg> <input type="text" class="docs-search-input" placeholder="Search docs" aria-label="Search docs" autocomplete="off" spellcheck="false"> <kbd class="docs-search-kbd">⌘K</kbd> </div> <ul class="docs-search-results" hidden></ul> </div> <a class="docs-nav-toplink" href="/__pyric/ui/docs/overview/" id="nav-group-overview"> Overview </a><details class="docs-nav-group" id="nav-group-run-locally"> <summary>Run locally</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/how-the-swap-works/"> How the swap works </a> </li><li> <a href="/__pyric/ui/docs/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-develop-with-firebase-apis"> <summary>Develop with Firebase APIs</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/sign-in-and-manage-users/"> Sign in and manage users </a> </li><li> <a href="/__pyric/ui/docs/store-and-query-data/"> Store and query data </a> </li><li> <a href="/__pyric/ui/docs/sync-realtime-data/"> Sync realtime data </a> </li><li> <a href="/__pyric/ui/docs/store-files/"> Store files </a> </li><li> <a href="/__pyric/ui/docs/receive-messages/"> Receive messages </a> </li><li> <a href="/__pyric/ui/docs/run-ai-logic-locally/"> Run AI Logic locally </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-how-to-run-rtdb-onvaluecreated/"> Run an RTDB function locally </a> </li><li> <a href="/__pyric/ui/docs/which-data-service/"> Which data service? </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-inspect-and-correct"> <summary>Inspect and correct</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <h2 class="docs-nav-heading" id="nav-section-inspect-and-correct-inspect-the-sandbox"> Inspect the sandbox </h2> <ul> <li> <a href="/__pyric/ui/docs/see-whats-happening/"> Traffic & rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/shape-your-data/"> Seed, snapshot, replay </a> </li><li> <a href="/__pyric/ui/docs/watch-and-review/"> Review agent activity </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading" id="nav-section-inspect-and-correct-correct-security-rules"> Correct Security Rules </h2> <ul> <li> <a href="/__pyric/ui/docs/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/rules-patterns/"> Rules patterns </a> </li><li> <a href="/__pyric/ui/docs/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/whats-possible/"> Case studies </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading" id="nav-section-inspect-and-correct-work-with-an-agent"> Work with an agent </h2> <ul> <li> <a href="/__pyric/ui/docs/what-your-agent-can-do/"> Work through an agent </a> </li><li> <a href="/__pyric/ui/docs/skills/"> Agent skills </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-verify-the-boundary"> <summary>Verify the boundary</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-how-to-verify-against-a-captured-session/"> Verify a captured session </a> </li><li> <a href="/__pyric/ui/docs/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-ship-unchanged"> <summary>Ship unchanged</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/set-up-the-project/"> Set up the Firebase project </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-conformance"> <summary>Conformance</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/how-we-know-it-matches-firebase/"> Conformance </a> </li><li> <a href="/__pyric/ui/docs/whats-experimental/"> What's experimental </a> </li><li> <a href="/__pyric/ui/docs/pyric-conformance-scores/"> Conformance scores </a> </li><li> <a href="/__pyric/ui/docs/pyric-app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-compat/"> Rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-functions-rtdb-compat/"> Functions · RTDB </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" id="nav-group-reference" open> <summary>Reference</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli/"> @pyric/cli </a> </li><li> <a href="/__pyric/ui/docs/pyric-explanation-versioning-and-compatibility/"> pyric </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore/"> pyric / firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules/"> pyric / rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox/"> pyric / sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage/"> pyric / storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth/"> pyric / auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-database/"> pyric / database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-app/"> pyric-admin / app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore/"> pyric-admin / firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth/"> pyric-admin / auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database/"> pyric-admin / database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage/"> pyric-admin / storage </a> </li><li> <a href="/__pyric/ui/docs/ui/"> @pyric/ui </a> </li><li> <a href="/__pyric/ui/docs/api-reference/" aria-current="true"> API reference </a> </li> </ul> </div> </div> </details> </nav> <main class="doc-main"> <nav class="docs-breadcrumbs" aria-label="Breadcrumb"> <ol> <li> <a href="/__pyric/ui/docs/api-reference/">API reference</a> </li><li> <span class="docs-breadcrumbs-sep" aria-hidden="true">/</span> <span>@pyric/ui</span> </li><li> <span class="docs-breadcrumbs-sep" aria-hidden="true">/</span> <span aria-current="page">@pyric/ui/storage</span> </li> </ol> </nav> <header class="api-reference-header"> <p class="api-reference-kicker">API reference</p> <h1><code>@pyric/ui/storage</code></h1> <p class="api-reference-meta"> 76 published symbols from <code>@pyric/ui</code> </p> <p class="api-reference-source">
|
|
2
|
+
Generated from the TypeScript declarations shipped at this import path.
|
|
3
|
+
</p> </header> <article class="prose api-reference-body"> <!-- Generated from published package declarations via TypeDoc. Do not edit by hand; run bun run docs:api:generate. -->
|
|
4
|
+
<h2 id="interfaces">Interfaces</h2>
|
|
5
|
+
<p><a id="custommetadataentry"></a></p>
|
|
6
|
+
<h3 id="custommetadataentry">CustomMetadataEntry</h3>
|
|
7
|
+
<p>One <code>customMetadata</code> row. <code>id</code> is a stable render key — keys are
|
|
8
|
+
user-editable, so they can’t key the rows themselves.</p>
|
|
9
|
+
<h4 id="properties">Properties</h4>
|
|
10
|
+
<div class="table-scroll">
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="error"></a> <code>error?</code></td><td align="left"><code>string</code></td><td align="left">Validation error (<code>'Key is required'</code> / <code>'Duplicate key'</code>).</td></tr><tr><td align="left"><a id="id"></a> <code>id</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="key"></a> <code>key</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="value"></a> <code>value</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr></tbody></table></div>
|
|
41
|
+
<hr>
|
|
42
|
+
<p><a id="deleteselectionwithconfirmprops"></a></p>
|
|
43
|
+
<h3 id="deleteselectionwithconfirmprops">DeleteSelectionWithConfirmProps</h3>
|
|
44
|
+
<h4 id="properties-1">Properties</h4>
|
|
45
|
+
<div class="table-scroll">
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="body"></a> <code>body?</code></td><td align="left"><code>ReactNode</code></td><td align="left">Confirm-dialog body. Default lists the selected paths.</td></tr><tr><td align="left"><a id="classname"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">Class forwarded to the default trigger button.</td></tr><tr><td align="left"><a id="confirmlabel"></a> <code>confirmLabel?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="entries"></a> <code>entries</code></td><td align="left"><a href="#storageselectionentry"><code>StorageSelectionEntry</code></a>[]</td><td align="left">What to delete — <code>useStorageSelection().selected</code> (or any <code>{kind, fullPath}</code> rows). Folders delete recursively.</td></tr><tr><td align="left"><a id="gate"></a> <code>gate?</code></td><td align="left"><code>Pick</code><<a href="#usestoragerulesgateresult"><code>UseStorageRulesGateResult</code></a>, <code>"verdictFor"</code>></td><td align="left">Rules-aware affordance — pass <code>useStorageRulesGate(storage)</code>. When ANY selected entry’s DELETE verdict denies, the trigger disables with the reason (default trigger: <code>data-pyric-denied</code> + <code>data-pyric-denied-reason</code> + <code>title</code>; <code>renderTrigger</code> receives <code>deniedReason</code>). For folder entries the verdict evaluates the folder path itself — an approximation of the recursive walk (descendants matched by <code>{allPaths=**}</code> rules share the verdict).</td></tr><tr><td align="left"><a id="impl"></a> <code>impl?</code></td><td align="left"><a href="#storagerecursivedeleteimpl"><code>StorageRecursiveDeleteImpl</code></a></td><td align="left">Folder-walk impl override (default: the <code>listAll</code>-driven one).</td></tr><tr><td align="left"><a id="list"></a> <code>list?</code></td><td align="left"><code>Pick</code><<a href="#usestoragelistresult"><code>UseStorageListResult</code></a>, <code>"insertItem"</code> | <code>"removeItem"</code>></td><td align="left">Optimistic seam from <code>useStorageList</code>.</td></tr><tr><td align="left"><a id="ondeleted"></a> <code>onDeleted?</code></td><td align="left">(<code>outcome</code>: <a href="#storagedeleteoutcome"><code>StorageDeleteOutcome</code></a>) => <code>void</code></td><td align="left">Fired after a run with NO failures (e.g. clear the selection + refresh the list).</td></tr><tr><td align="left"><a id="onfailed"></a> <code>onFailed?</code></td><td align="left">(<code>outcome</code>: <a href="#storagedeleteoutcome"><code>StorageDeleteOutcome</code></a>) => <code>void</code></td><td align="left">Fired after a run with failures (the toast already showed).</td></tr><tr><td align="left"><a id="rendertrigger"></a> <code>renderTrigger?</code></td><td align="left">(<code>props</code>: { <code>deniedReason?</code>: <code>string</code>; <code>disabled</code>: <code>boolean</code>; <code>isRunning</code>: <code>boolean</code>; <code>onClick</code>: () => <code>void</code>; <code>progress</code>: <code>number</code>; }) => <code>ReactNode</code></td><td align="left">Render override for the trigger button.</td></tr><tr><td align="left"><a id="storage"></a> <code>storage</code></td><td align="left"><code>any</code></td><td align="left">The package’s single Storage handle prop.</td></tr><tr><td align="left"><a id="title"></a> <code>title?</code></td><td align="left"><code>string</code></td><td align="left">Confirm-dialog title. Default derives from the entry count.</td></tr></tbody></table></div>
|
|
116
|
+
<hr>
|
|
117
|
+
<p><a id="droppedfile"></a></p>
|
|
118
|
+
<h3 id="droppedfile">DroppedFile</h3>
|
|
119
|
+
<p>One dropped file, flattened from the drop’s file/folder tree.</p>
|
|
120
|
+
<h4 id="properties-2">Properties</h4>
|
|
121
|
+
<div class="table-scroll">
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="file"></a> <code>file</code></td><td align="left"><code>File</code></td><td align="left">-</td></tr><tr><td align="left"><a id="relativepath"></a> <code>relativePath</code></td><td align="left"><code>string</code></td><td align="left">Path relative to the drop — <code>'a.txt'</code> for a plain file drop, <code>'photos/cat.png'</code> for a file inside a dropped folder. Feed straight into <code>useObjectUpload</code>: <code>upload(files.map((f) => ({ path: f.relativePath, data: f.file })))</code>.</td></tr></tbody></table></div>
|
|
142
|
+
<hr>
|
|
143
|
+
<p><a id="metadataeditorstate"></a></p>
|
|
144
|
+
<h3 id="metadataeditorstate">MetadataEditorState</h3>
|
|
145
|
+
<h4 id="properties-3">Properties</h4>
|
|
146
|
+
<div class="table-scroll">
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="draft"></a> <code>draft</code></td><td align="left"><code>MetadataDraft</code></td><td align="left">-</td></tr><tr><td align="left"><a id="errorcount"></a> <code>errorCount</code></td><td align="left"><code>number</code></td><td align="left">-</td></tr><tr><td align="left"><a id="initial"></a> <code>initial</code></td><td align="left"><code>MetadataDraft</code></td><td align="left">Snapshot for <code>isDirty</code> / <code>reset</code> — same reference-compare semantics as the document editor’s <code>tree !== initial</code>.</td></tr></tbody></table></div>
|
|
172
|
+
<hr>
|
|
173
|
+
<p><a id="objectbrowserprops"></a></p>
|
|
174
|
+
<h3 id="objectbrowserprops">ObjectBrowserProps</h3>
|
|
175
|
+
<h4 id="properties-4">Properties</h4>
|
|
176
|
+
<div class="table-scroll">
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="classname-1"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="emptystate"></a> <code>emptyState?</code></td><td align="left"><code>ReactNode</code></td><td align="left">-</td></tr><tr><td align="left"><a id="entries-1"></a> <code>entries</code></td><td align="left"><a href="#storagelistentry"><code>StorageListEntry</code></a>[]</td><td align="left">The folders-first row model from <code>useStorageList</code>.</td></tr><tr><td align="left"><a id="error-1"></a> <code>error?</code></td><td align="left"><code>Error</code></td><td align="left">Renders a <code>role="alert"</code> container with the message. Pair with the hook’s typed <code>StorageError</code> for code-driven copy.</td></tr><tr><td align="left"><a id="gate-1"></a> <code>gate?</code></td><td align="left"><code>Pick</code><<a href="#usestoragerulesgateresult"><code>UseStorageRulesGateResult</code></a>, <code>"verdictFor"</code>></td><td align="left">Rules-aware affordances — pass <code>useStorageRulesGate(storage)</code>. Rows whose READ verdict denies are stamped <code>data-pyric-denied</code> (with the evaluator’s reason trace on <code>data-pyric-denied-reason</code>). A denied folder row would throw <code>storage/unauthorized</code> on <code>listAll</code>; the stamp warns BEFORE the click. Rows stay clickable — the affordance is advisory and the sandbox enforcement layer remains authoritative.</td></tr><tr><td align="left"><a id="onnavigate"></a> <code>onNavigate?</code></td><td align="left">(<code>path</code>: <code>string</code>) => <code>void</code></td><td align="left">Folder row click — fired with the prefix’s <code>fullPath</code>. Wire to <code>usePathState.enter</code> (or <code>setPath</code>).</td></tr><tr><td align="left"><a id="onselect"></a> <code>onSelect?</code></td><td align="left">(<code>ref</code>: <code>StorageReference</code>) => <code>void</code></td><td align="left">Object row click — fired with the object’s reference.</td></tr><tr><td align="left"><a id="renderentry"></a> <code>renderEntry?</code></td><td align="left">(<code>entry</code>: <a href="#storagelistentry"><code>StorageListEntry</code></a>) => <code>ReactNode</code></td><td align="left">Row-label slot. Default renders the entry name. The row button, its click wiring, and the <code>data-*</code> states stay with the component — the slot only owns the label content.</td></tr><tr><td align="left"><a id="renderrowaction"></a> <code>renderRowAction?</code></td><td align="left">(<code>entry</code>: <a href="#storagelistentry"><code>StorageListEntry</code></a>) => <code>ReactNode</code></td><td align="left">Optional per-row action rendered as a sibling of the navigation/select button. Use this for independent controls such as selection checkboxes.</td></tr><tr><td align="left"><a id="rowheight"></a> <code>rowHeight?</code></td><td align="left"><code>number</code> | (<code>index</code>: <code>number</code>) => <code>number</code></td><td align="left">Estimated row height when virtualizing. Default 36.</td></tr><tr><td align="left"><a id="selectedpath"></a> <code>selectedPath?</code></td><td align="left"><code>string</code></td><td align="left">Marks the matching object row <code>data-pyric-selected</code> + <code>aria-selected</code>.</td></tr><tr><td align="left"><a id="status"></a> <code>status?</code></td><td align="left"><a href="#storageliststatus"><code>StorageListStatus</code></a></td><td align="left">Drives the loading state (<code>'loading'</code> with no rows yet) and the idle short-circuit. Default <code>'success'</code> for static usage.</td></tr><tr><td align="left"><a id="virtualizedheight"></a> <code>virtualizedHeight?</code></td><td align="left"><code>string</code> | <code>number</code></td><td align="left">Scroll-container height when virtualized. Default <code>'60vh'</code>.</td></tr><tr><td align="left"><a id="virtualizethreshold"></a> <code>virtualizeThreshold?</code></td><td align="left"><code>number</code></td><td align="left">Above this row count, the list switches to virtualization via <code><VirtualList></code> — <code>listAll</code> has no pagination, so a big prefix arrives as one flat result and virtualization is the only defense. Default 100 (same as <code><DocumentList></code>). <code>Infinity</code> disables.</td></tr></tbody></table></div>
|
|
257
|
+
<hr>
|
|
258
|
+
<p><a id="objectinspectorprops"></a></p>
|
|
259
|
+
<h3 id="objectinspectorprops">ObjectInspectorProps</h3>
|
|
260
|
+
<h4 id="properties-5">Properties</h4>
|
|
261
|
+
<div class="table-scroll">
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="children"></a> <code>children?</code></td><td align="left"><code>ReactNode</code></td><td align="left">Extra content below the preview (metadata editor, delete button, …).</td></tr><tr><td align="left"><a id="classname-2"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="path"></a> <code>path</code></td><td align="left"><code>string</code></td><td align="left">Object path to inspect. <code>null</code> renders the idle shell — keep the inspector mounted and swap paths as the user selects rows.</td></tr><tr><td align="left"><a id="previews"></a> <code>previews?</code></td><td align="left"><a href="#storagepreview"><code>StoragePreview</code></a>[]</td><td align="left">Consumer previews, tried BEFORE the built-ins (first match wins) — the extension channel of the preview registry.</td></tr><tr><td align="left"><a id="rendermetadata"></a> <code>renderMetadata?</code></td><td align="left">(<code>metadata</code>: <code>FullMetadata</code>) => <code>ReactNode</code></td><td align="left">Metadata-section slot. Default renders the standard field list. The header, preview, and state wiring stay with the component.</td></tr><tr><td align="left"><a id="storage-1"></a> <code>storage</code></td><td align="left"><code>any</code></td><td align="left">The package’s sandbox Storage handle.</td></tr></tbody></table></div>
|
|
302
|
+
<hr>
|
|
303
|
+
<p><a id="pathbreadcrumbprops"></a></p>
|
|
304
|
+
<h3 id="pathbreadcrumbprops">PathBreadcrumbProps</h3>
|
|
305
|
+
<h4 id="properties-6">Properties</h4>
|
|
306
|
+
<div class="table-scroll">
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="classname-3"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="onnavigate-1"></a> <code>onNavigate?</code></td><td align="left">(<code>path</code>: <code>string</code>) => <code>void</code></td><td align="left">Fired with the absolute path of the clicked crumb (<code>''</code> for root). Wire to <code>usePathState.setPath</code>.</td></tr><tr><td align="left"><a id="path-1"></a> <code>path</code></td><td align="left"><code>string</code></td><td align="left">Current path. <code>''</code> renders just the root crumb.</td></tr><tr><td align="left"><a id="rootlabel"></a> <code>rootLabel?</code></td><td align="left"><code>ReactNode</code></td><td align="left">Label for the root crumb. Default <code>'/'</code> — pass the bucket name for a <code>gs://bucket</code> feel.</td></tr><tr><td align="left"><a id="separator"></a> <code>separator?</code></td><td align="left"><code>ReactNode</code></td><td align="left">Rendered between crumbs. Default <code>'/'</code>.</td></tr></tbody></table></div>
|
|
342
|
+
<hr>
|
|
343
|
+
<p><a id="storagedeletefailure"></a></p>
|
|
344
|
+
<h3 id="storagedeletefailure">StorageDeleteFailure</h3>
|
|
345
|
+
<p>One entry’s failure in a bulk run. <code>error</code> is the typed
|
|
346
|
+
<code>StorageError</code> (<code>.code</code> e.g. <code>storage/unauthorized</code>).</p>
|
|
347
|
+
<h4 id="properties-7">Properties</h4>
|
|
348
|
+
<div class="table-scroll">
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="error-2"></a> <code>error</code></td><td align="left"><code>Error</code></td></tr><tr><td align="left"><a id="fullpath"></a> <code>fullPath</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
|
|
366
|
+
<hr>
|
|
367
|
+
<p><a id="storagedeleteoutcome"></a></p>
|
|
368
|
+
<h3 id="storagedeleteoutcome">StorageDeleteOutcome</h3>
|
|
369
|
+
<h4 id="properties-8">Properties</h4>
|
|
370
|
+
<div class="table-scroll">
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="deleted"></a> <code>deleted</code></td><td align="left"><code>string</code>[]</td><td align="left">fullPaths of entries fully deleted.</td></tr><tr><td align="left"><a id="failed"></a> <code>failed</code></td><td align="left"><a href="#storagedeletefailure"><code>StorageDeleteFailure</code></a>[]</td><td align="left">-</td></tr></tbody></table></div>
|
|
391
|
+
<hr>
|
|
392
|
+
<p><a id="storagedeleteprogress"></a></p>
|
|
393
|
+
<h3 id="storagedeleteprogress">StorageDeleteProgress</h3>
|
|
394
|
+
<h4 id="properties-9">Properties</h4>
|
|
395
|
+
<div class="table-scroll">
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="deletedcount"></a> <code>deletedCount</code></td><td align="left"><code>number</code></td><td align="left">Objects deleted so far in this folder walk.</td></tr><tr><td align="left"><a id="done"></a> <code>done</code></td><td align="left"><code>boolean</code></td><td align="left">True for the final emission.</td></tr></tbody></table></div>
|
|
416
|
+
<hr>
|
|
417
|
+
<p><a id="storagegateverdict"></a></p>
|
|
418
|
+
<h3 id="storagegateverdict">StorageGateVerdict</h3>
|
|
419
|
+
<p>Per-path verdict. <code>pyric/storage</code>’s rules subset has exactly two
|
|
420
|
+
verbs (<code>read</code> | <code>write</code> — the granular get/list/create/update/
|
|
421
|
+
delete forms are a parser follow-up), so <code>delete</code> and <code>upload</code> are
|
|
422
|
+
DERIVED aliases of <code>write</code>: Firebase Storage’s <code>write</code> permission
|
|
423
|
+
governs create, overwrite, AND delete.</p>
|
|
424
|
+
<h4 id="properties-10">Properties</h4>
|
|
425
|
+
<div class="table-scroll">
|
|
426
|
+
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
|
|
448
|
+
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
|
|
452
|
+
|
|
453
|
+
|
|
454
|
+
|
|
455
|
+
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
|
|
459
|
+
|
|
460
|
+
|
|
461
|
+
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
|
|
470
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="delete"></a> <code>delete</code></td><td align="left"><code>boolean</code></td><td align="left">Derived — always <code>=== write</code> under the two-verb subset.</td></tr><tr><td align="left"><a id="read"></a> <code>read</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="reasons"></a> <code>reasons</code></td><td align="left">{ <code>read</code>: <code>string</code>[]; <code>write</code>: <code>string</code>[]; }</td><td align="left">Evaluator reason traces for DENIED verbs (<code>"no rule matches…"</code> / <code>"match /… : condition false"</code>); empty arrays when allowed. Feed into disabled-state tooltips and <code>data-*-reason</code> attributes.</td></tr><tr><td align="left"><code>reasons.read</code></td><td align="left"><code>string</code>[]</td><td align="left">-</td></tr><tr><td align="left"><code>reasons.write</code></td><td align="left"><code>string</code>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="upload"></a> <code>upload</code></td><td align="left"><code>boolean</code></td><td align="left">Derived — always <code>=== write</code> under the two-verb subset.</td></tr><tr><td align="left"><a id="write"></a> <code>write</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr></tbody></table></div>
|
|
471
|
+
<hr>
|
|
472
|
+
<p><a id="storagelistentry"></a></p>
|
|
473
|
+
<h3 id="storagelistentry">StorageListEntry</h3>
|
|
474
|
+
<p>One row of the merged folder/object model, the prefix→folder
|
|
475
|
+
synthesis ported (as an idea, not code) from the emulator UI’s
|
|
476
|
+
<code>useStorageFiles</code>: <code>listAll</code>’s <code>prefixes</code> become <code>kind: 'folder'</code>
|
|
477
|
+
rows, its <code>items</code> become <code>kind: 'object'</code> rows, folders first.</p>
|
|
478
|
+
<h4 id="properties-11">Properties</h4>
|
|
479
|
+
<div class="table-scroll">
|
|
480
|
+
|
|
481
|
+
|
|
482
|
+
|
|
483
|
+
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
|
|
487
|
+
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
|
|
491
|
+
|
|
492
|
+
|
|
493
|
+
|
|
494
|
+
|
|
495
|
+
|
|
496
|
+
|
|
497
|
+
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
|
|
504
|
+
|
|
505
|
+
|
|
506
|
+
|
|
507
|
+
|
|
508
|
+
|
|
509
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="fullpath-1"></a> <code>fullPath</code></td><td align="left"><code>string</code></td><td align="left">Bucket-rooted path (no trailing slash, even for folders).</td></tr><tr><td align="left"><a id="kind"></a> <code>kind</code></td><td align="left"><code>"object"</code> | <code>"folder"</code></td><td align="left">-</td></tr><tr><td align="left"><a id="name"></a> <code>name</code></td><td align="left"><code>string</code></td><td align="left">Last path segment, display name.</td></tr><tr><td align="left"><a id="ref"></a> <code>ref</code></td><td align="left"><code>StorageReference</code></td><td align="left">-</td></tr></tbody></table></div>
|
|
510
|
+
<hr>
|
|
511
|
+
<p><a id="storagepreview"></a></p>
|
|
512
|
+
<h3 id="storagepreview">StoragePreview</h3>
|
|
513
|
+
<p>One entry in the content-type preview registry — the storage
|
|
514
|
+
counterpart of the Firestore field-editor registry, keyed by a
|
|
515
|
+
<code>match</code> predicate instead of a type name because content types are
|
|
516
|
+
open-ended. First match wins; consumer previews run BEFORE the
|
|
517
|
+
built-ins, so overriding <code>image/*</code> is just shipping your own
|
|
518
|
+
matcher.</p>
|
|
519
|
+
<h4 id="properties-12">Properties</h4>
|
|
520
|
+
<div class="table-scroll">
|
|
521
|
+
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
|
|
525
|
+
|
|
526
|
+
|
|
527
|
+
|
|
528
|
+
|
|
529
|
+
|
|
530
|
+
|
|
531
|
+
|
|
532
|
+
|
|
533
|
+
|
|
534
|
+
|
|
535
|
+
|
|
536
|
+
|
|
537
|
+
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
|
|
541
|
+
|
|
542
|
+
|
|
543
|
+
|
|
544
|
+
|
|
545
|
+
|
|
546
|
+
|
|
547
|
+
|
|
548
|
+
|
|
549
|
+
|
|
550
|
+
|
|
551
|
+
|
|
552
|
+
|
|
553
|
+
|
|
554
|
+
|
|
555
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="id-1"></a> <code>id</code></td><td align="left"><code>string</code></td><td align="left">Diagnostic id — also stamped on the preview container as <code>data-pyric-preview="<id>"</code>.</td></tr><tr><td align="left"><a id="match"></a> <code>match</code></td><td align="left">(<code>metadata</code>: <code>FullMetadata</code>) => <code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="maxbytes"></a> <code>maxBytes?</code></td><td align="left"><code>number</code></td><td align="left">Skip the preview (and the blob download) for objects larger than this — the inspector renders its <code>data-pyric-preview-too-large</code> fallback instead. <code>undefined</code> = no cap.</td></tr><tr><td align="left"><a id="needsblob"></a> <code>needsBlob?</code></td><td align="left"><code>boolean</code></td><td align="left">Ask the inspector to <code>loadBlob()</code> before rendering. Default <code>false</code> (metadata-only previews render immediately).</td></tr><tr><td align="left"><a id="render"></a> <code>render</code></td><td align="left">(<code>ctx</code>: <a href="#storagepreviewcontext"><code>StoragePreviewContext</code></a>) => <code>ReactNode</code></td><td align="left">-</td></tr></tbody></table></div>
|
|
556
|
+
<hr>
|
|
557
|
+
<p><a id="storagepreviewcontext"></a></p>
|
|
558
|
+
<h3 id="storagepreviewcontext">StoragePreviewContext</h3>
|
|
559
|
+
<p>What a preview’s <code>render</code> receives. <code>blob</code>/<code>blobUrl</code> are only
|
|
560
|
+
populated for previews that declared <code>needsBlob</code>.</p>
|
|
561
|
+
<h4 id="properties-13">Properties</h4>
|
|
562
|
+
<div class="table-scroll">
|
|
563
|
+
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
|
|
567
|
+
|
|
568
|
+
|
|
569
|
+
|
|
570
|
+
|
|
571
|
+
|
|
572
|
+
|
|
573
|
+
|
|
574
|
+
|
|
575
|
+
|
|
576
|
+
|
|
577
|
+
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
|
|
581
|
+
|
|
582
|
+
|
|
583
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="blob"></a> <code>blob</code></td><td align="left"><code>Blob</code></td></tr><tr><td align="left"><a id="bloburl"></a> <code>blobUrl</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><a id="metadata"></a> <code>metadata</code></td><td align="left"><code>FullMetadata</code></td></tr></tbody></table></div>
|
|
584
|
+
<hr>
|
|
585
|
+
<p><a id="storagerecursivedeleteimpl"></a></p>
|
|
586
|
+
<h3 id="storagerecursivedeleteimpl">StorageRecursiveDeleteImpl</h3>
|
|
587
|
+
<p>Recursive folder delete implementation — the same injection seam
|
|
588
|
+
as the Firestore half’s <code>RecursiveDeleteImpl</code>. Unlike Firestore
|
|
589
|
+
(where tree-walking needs sandbox introspection or a Cloud
|
|
590
|
+
Function), the public storage surface CAN walk a prefix, so the
|
|
591
|
+
package ships <a href="#createlistalldeleteimpl">createListAllDeleteImpl</a> as the default;
|
|
592
|
+
inject your own for server-driven deletes.</p>
|
|
593
|
+
<h4 id="properties-14">Properties</h4>
|
|
594
|
+
<div class="table-scroll">
|
|
595
|
+
|
|
596
|
+
|
|
597
|
+
|
|
598
|
+
|
|
599
|
+
|
|
600
|
+
|
|
601
|
+
|
|
602
|
+
|
|
603
|
+
|
|
604
|
+
|
|
605
|
+
|
|
606
|
+
|
|
607
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="start"></a> <code>start</code></td><td align="left">(<code>target</code>: <code>StorageReference</code>) => <code>AsyncIterableIterator</code><<a href="#storagedeleteprogress"><code>StorageDeleteProgress</code></a>></td></tr></tbody></table></div>
|
|
608
|
+
<hr>
|
|
609
|
+
<p><a id="storageselectionentry"></a></p>
|
|
610
|
+
<h3 id="storageselectionentry">StorageSelectionEntry</h3>
|
|
611
|
+
<p>What the selection tracks per row — a structural subset of
|
|
612
|
+
<code>StorageListEntry</code>, so <code>useStorageList</code>’s entries pass straight
|
|
613
|
+
in. The <code>kind</code> decides the delete verb later (object →
|
|
614
|
+
<code>deleteObject</code>, folder → recursive).</p>
|
|
615
|
+
<h4 id="properties-15">Properties</h4>
|
|
616
|
+
<div class="table-scroll">
|
|
617
|
+
|
|
618
|
+
|
|
619
|
+
|
|
620
|
+
|
|
621
|
+
|
|
622
|
+
|
|
623
|
+
|
|
624
|
+
|
|
625
|
+
|
|
626
|
+
|
|
627
|
+
|
|
628
|
+
|
|
629
|
+
|
|
630
|
+
|
|
631
|
+
|
|
632
|
+
|
|
633
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="fullpath-2"></a> <code>fullPath</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><a id="kind-1"></a> <code>kind</code></td><td align="left"><code>"object"</code> | <code>"folder"</code></td></tr></tbody></table></div>
|
|
634
|
+
<hr>
|
|
635
|
+
<p><a id="uploaddropzoneprops"></a></p>
|
|
636
|
+
<h3 id="uploaddropzoneprops">UploadDropzoneProps</h3>
|
|
637
|
+
<h4 id="properties-16">Properties</h4>
|
|
638
|
+
<div class="table-scroll">
|
|
639
|
+
|
|
640
|
+
|
|
641
|
+
|
|
642
|
+
|
|
643
|
+
|
|
644
|
+
|
|
645
|
+
|
|
646
|
+
|
|
647
|
+
|
|
648
|
+
|
|
649
|
+
|
|
650
|
+
|
|
651
|
+
|
|
652
|
+
|
|
653
|
+
|
|
654
|
+
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
|
|
658
|
+
|
|
659
|
+
|
|
660
|
+
|
|
661
|
+
|
|
662
|
+
|
|
663
|
+
|
|
664
|
+
|
|
665
|
+
|
|
666
|
+
|
|
667
|
+
|
|
668
|
+
|
|
669
|
+
|
|
670
|
+
|
|
671
|
+
|
|
672
|
+
|
|
673
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="children-1"></a> <code>children?</code></td><td align="left"><code>ReactNode</code></td><td align="left">Slot — the dropzone chrome (“Drop files here…”, a browse <code><input type="file"></code>, anything). The component owns only the drag wiring + <code>data-*</code> states.</td></tr><tr><td align="left"><a id="classname-4"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="disabled"></a> <code>disabled?</code></td><td align="left"><code>boolean</code></td><td align="left">Ignore drops + suppress the dragging state.</td></tr><tr><td align="left"><a id="disabledreason"></a> <code>disabledReason?</code></td><td align="left"><code>string</code></td><td align="left">Why the dropzone is disabled — stamped on <code>data-disabled-reason</code> (and only while <code>disabled</code>) so the chrome/styling can surface it. The canonical source is the rules gate: <code>disabled={!gate.verdictFor(path).upload}</code> + <code>disabledReason={gate.verdictFor(path).reasons.write.join('; ')}</code>.</td></tr><tr><td align="left"><a id="onfiles"></a> <code>onFiles</code></td><td align="left">(<code>files</code>: <a href="#droppedfile"><code>DroppedFile</code></a>[]) => <code>void</code></td><td align="left">Fired once per drop with the flattened file list (folder drops are traversed recursively via <code>webkitGetAsEntry</code>; empty folders yield nothing — wire <code>useObjectUpload.createFolder</code> to your own “new folder” affordance instead). Not fired for empty drops.</td></tr></tbody></table></div>
|
|
674
|
+
<hr>
|
|
675
|
+
<p><a id="uploadentry"></a></p>
|
|
676
|
+
<h3 id="uploadentry">UploadEntry</h3>
|
|
677
|
+
<p>Explicit-path upload input. <code>path</code> is relative to the hook’s
|
|
678
|
+
<code>path</code> option (the destination folder).</p>
|
|
679
|
+
<h4 id="properties-17">Properties</h4>
|
|
680
|
+
<div class="table-scroll">
|
|
681
|
+
|
|
682
|
+
|
|
683
|
+
|
|
684
|
+
|
|
685
|
+
|
|
686
|
+
|
|
687
|
+
|
|
688
|
+
|
|
689
|
+
|
|
690
|
+
|
|
691
|
+
|
|
692
|
+
|
|
693
|
+
|
|
694
|
+
|
|
695
|
+
|
|
696
|
+
|
|
697
|
+
|
|
698
|
+
|
|
699
|
+
|
|
700
|
+
|
|
701
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="data"></a> <code>data</code></td><td align="left"><code>Blob</code> | <code>ArrayBuffer</code> | <code>Uint8Array</code><<code>ArrayBufferLike</code>></td></tr><tr><td align="left"><a id="metadata-1"></a> <code>metadata?</code></td><td align="left"><code>SettableMetadata</code></td></tr><tr><td align="left"><a id="path-2"></a> <code>path</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
|
|
702
|
+
<hr>
|
|
703
|
+
<p><a id="uploadtask"></a></p>
|
|
704
|
+
<h3 id="uploadtask">UploadTask</h3>
|
|
705
|
+
<p>One file’s upload, TASK-SHAPED for resumable forward-compat: the
|
|
706
|
+
byte counters and the <code>onProgress</code> callback are in the type NOW so
|
|
707
|
+
a future <code>uploadBytesResumable</code>-backed implementation emits real
|
|
708
|
+
intermediate snapshots without a breaking change. Today
|
|
709
|
+
(<code>pyric/storage</code> has no resumable uploads — COMPAT) a task
|
|
710
|
+
completes in one tick: <code>onProgress</code> fires once at 0 bytes and once
|
|
711
|
+
at <code>totalBytes</code>.</p>
|
|
712
|
+
<h4 id="properties-18">Properties</h4>
|
|
713
|
+
<div class="table-scroll">
|
|
714
|
+
|
|
715
|
+
|
|
716
|
+
|
|
717
|
+
|
|
718
|
+
|
|
719
|
+
|
|
720
|
+
|
|
721
|
+
|
|
722
|
+
|
|
723
|
+
|
|
724
|
+
|
|
725
|
+
|
|
726
|
+
|
|
727
|
+
|
|
728
|
+
|
|
729
|
+
|
|
730
|
+
|
|
731
|
+
|
|
732
|
+
|
|
733
|
+
|
|
734
|
+
|
|
735
|
+
|
|
736
|
+
|
|
737
|
+
|
|
738
|
+
|
|
739
|
+
|
|
740
|
+
|
|
741
|
+
|
|
742
|
+
|
|
743
|
+
|
|
744
|
+
|
|
745
|
+
|
|
746
|
+
|
|
747
|
+
|
|
748
|
+
|
|
749
|
+
|
|
750
|
+
|
|
751
|
+
|
|
752
|
+
|
|
753
|
+
|
|
754
|
+
|
|
755
|
+
|
|
756
|
+
|
|
757
|
+
|
|
758
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="bytestransferred"></a> <code>bytesTransferred</code></td><td align="left"><code>number</code></td><td align="left">-</td></tr><tr><td align="left"><a id="error-3"></a> <code>error?</code></td><td align="left"><code>Error</code></td><td align="left">Populated on <code>'error'</code> — a typed <code>StorageError</code> from the sandbox (<code>.code</code> is <code>storage/<code></code>, e.g. <code>storage/unauthorized</code> for a rules-denied write).</td></tr><tr><td align="left"><a id="fullpath-3"></a> <code>fullPath</code></td><td align="left"><code>string</code></td><td align="left">Bucket-rooted destination path.</td></tr><tr><td align="left"><a id="id-2"></a> <code>id</code></td><td align="left"><code>string</code></td><td align="left">Stable id — key task rows on this, not on <code>fullPath</code> (two uploads can target the same path).</td></tr><tr><td align="left"><a id="metadata-2"></a> <code>metadata?</code></td><td align="left"><code>FullMetadata</code></td><td align="left">Populated on <code>'success'</code>.</td></tr><tr><td align="left"><a id="status-1"></a> <code>status</code></td><td align="left"><a href="#uploadtaskstatus-1"><code>UploadTaskStatus</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="totalbytes"></a> <code>totalBytes</code></td><td align="left"><code>number</code></td><td align="left">-</td></tr></tbody></table></div>
|
|
759
|
+
<hr>
|
|
760
|
+
<p><a id="usemetadataeditoroptions"></a></p>
|
|
761
|
+
<h3 id="usemetadataeditoroptions">UseMetadataEditorOptions</h3>
|
|
762
|
+
<h4 id="properties-19">Properties</h4>
|
|
763
|
+
<div class="table-scroll">
|
|
764
|
+
|
|
765
|
+
|
|
766
|
+
|
|
767
|
+
|
|
768
|
+
|
|
769
|
+
|
|
770
|
+
|
|
771
|
+
|
|
772
|
+
|
|
773
|
+
|
|
774
|
+
|
|
775
|
+
|
|
776
|
+
|
|
777
|
+
|
|
778
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="initial-1"></a> <code>initial?</code></td><td align="left"><code>SettableMetadata</code></td><td align="left">The metadata being edited — the same shape <code>useStorageObject</code>’s <code>metadata</code> carries. Read once on mount (the editor is a stateful workspace, like the document editor); <code>reset()</code> + remount to re-initialize.</td></tr></tbody></table></div>
|
|
779
|
+
<hr>
|
|
780
|
+
<p><a id="usemetadataeditorresult"></a></p>
|
|
781
|
+
<h3 id="usemetadataeditorresult">UseMetadataEditorResult</h3>
|
|
782
|
+
<h4 id="properties-20">Properties</h4>
|
|
783
|
+
<div class="table-scroll">
|
|
784
|
+
|
|
785
|
+
|
|
786
|
+
|
|
787
|
+
|
|
788
|
+
|
|
789
|
+
|
|
790
|
+
|
|
791
|
+
|
|
792
|
+
|
|
793
|
+
|
|
794
|
+
|
|
795
|
+
|
|
796
|
+
|
|
797
|
+
|
|
798
|
+
|
|
799
|
+
|
|
800
|
+
|
|
801
|
+
|
|
802
|
+
|
|
803
|
+
|
|
804
|
+
|
|
805
|
+
|
|
806
|
+
|
|
807
|
+
|
|
808
|
+
|
|
809
|
+
|
|
810
|
+
|
|
811
|
+
|
|
812
|
+
|
|
813
|
+
|
|
814
|
+
|
|
815
|
+
|
|
816
|
+
|
|
817
|
+
|
|
818
|
+
|
|
819
|
+
|
|
820
|
+
|
|
821
|
+
|
|
822
|
+
|
|
823
|
+
|
|
824
|
+
|
|
825
|
+
|
|
826
|
+
|
|
827
|
+
|
|
828
|
+
|
|
829
|
+
|
|
830
|
+
|
|
831
|
+
|
|
832
|
+
|
|
833
|
+
|
|
834
|
+
|
|
835
|
+
|
|
836
|
+
|
|
837
|
+
|
|
838
|
+
|
|
839
|
+
|
|
840
|
+
|
|
841
|
+
|
|
842
|
+
|
|
843
|
+
|
|
844
|
+
|
|
845
|
+
|
|
846
|
+
|
|
847
|
+
|
|
848
|
+
|
|
849
|
+
|
|
850
|
+
|
|
851
|
+
|
|
852
|
+
|
|
853
|
+
|
|
854
|
+
|
|
855
|
+
|
|
856
|
+
|
|
857
|
+
|
|
858
|
+
|
|
859
|
+
|
|
860
|
+
|
|
861
|
+
|
|
862
|
+
|
|
863
|
+
|
|
864
|
+
|
|
865
|
+
|
|
866
|
+
|
|
867
|
+
|
|
868
|
+
|
|
869
|
+
|
|
870
|
+
|
|
871
|
+
|
|
872
|
+
|
|
873
|
+
|
|
874
|
+
|
|
875
|
+
|
|
876
|
+
|
|
877
|
+
|
|
878
|
+
|
|
879
|
+
|
|
880
|
+
|
|
881
|
+
|
|
882
|
+
|
|
883
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="addcustomentry"></a> <code>addCustomEntry</code></td><td align="left">(<code>key?</code>: <code>string</code>, <code>value?</code>: <code>string</code>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="cachecontrol"></a> <code>cacheControl</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="contenttype"></a> <code>contentType</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="custom"></a> <code>custom</code></td><td align="left"><a href="#custommetadataentry"><code>CustomMetadataEntry</code></a>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="dispatch"></a> <code>dispatch</code></td><td align="left">(<code>action</code>: <a href="#metadataeditoraction"><code>MetadataEditorAction</code></a>) => <code>void</code></td><td align="left">Raw dispatch — prefer the named helpers.</td></tr><tr><td align="left"><a id="errorcount-1"></a> <code>errorCount</code></td><td align="left"><code>number</code></td><td align="left">-</td></tr><tr><td align="left"><a id="isdirty"></a> <code>isDirty</code></td><td align="left"><code>boolean</code></td><td align="left"><code>true</code> once any modifying action fired since the last <code>reset</code>/successful <code>save</code>. Reference-compare semantics — manual re-entry of the original values does NOT clear it.</td></tr><tr><td align="left"><a id="issaving"></a> <code>isSaving</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="isvalid"></a> <code>isValid</code></td><td align="left"><code>boolean</code></td><td align="left">Convenience: <code>errorCount === 0</code>.</td></tr><tr><td align="left"><a id="removecustomentry"></a> <code>removeCustomEntry</code></td><td align="left">(<code>id</code>: <code>string</code>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="reset"></a> <code>reset</code></td><td align="left">() => <code>void</code></td><td align="left">Restore the initial values. Clears <code>isDirty</code>.</td></tr><tr><td align="left"><a id="save"></a> <code>save</code></td><td align="left">() => <code>Promise</code><<code>any</code>></td><td align="left"><code>updateMetadata(ref(storage, path), toPatch())</code>. Errors surface via <code>saveError</code> (typed <code>StorageError</code>), not throws — resolves <code>undefined</code> on failure or when the draft is invalid. On success the draft becomes the new baseline (<code>isDirty</code> clears) and the fresh <code>FullMetadata</code> is returned.</td></tr><tr><td align="left"><a id="saveerror"></a> <code>saveError</code></td><td align="left"><code>Error</code></td><td align="left">-</td></tr><tr><td align="left"><a id="setcachecontrol"></a> <code>setCacheControl</code></td><td align="left">(<code>value</code>: <code>string</code>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="setcontenttype"></a> <code>setContentType</code></td><td align="left">(<code>value</code>: <code>string</code>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="setcustomkey"></a> <code>setCustomKey</code></td><td align="left">(<code>id</code>: <code>string</code>, <code>key</code>: <code>string</code>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="setcustomvalue"></a> <code>setCustomValue</code></td><td align="left">(<code>id</code>: <code>string</code>, <code>value</code>: <code>string</code>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="topatch"></a> <code>toPatch</code></td><td align="left">() => <code>SettableMetadata</code></td><td align="left">Serialize the draft to an <code>updateMetadata</code> patch. Empty <code>contentType</code>/<code>cacheControl</code> become <code>undefined</code> — which LEAVES the previous value (the sandbox doesn’t model null-clears; see <code>pyric/storage</code>’s <code>updateMetadata</code> doc). <code>customMetadata</code> is always included and replaces wholesale, so row removal works.</td></tr></tbody></table></div>
|
|
884
|
+
<hr>
|
|
885
|
+
<p><a id="useobjectuploadoptions"></a></p>
|
|
886
|
+
<h3 id="useobjectuploadoptions">UseObjectUploadOptions</h3>
|
|
887
|
+
<h4 id="properties-21">Properties</h4>
|
|
888
|
+
<div class="table-scroll">
|
|
889
|
+
|
|
890
|
+
|
|
891
|
+
|
|
892
|
+
|
|
893
|
+
|
|
894
|
+
|
|
895
|
+
|
|
896
|
+
|
|
897
|
+
|
|
898
|
+
|
|
899
|
+
|
|
900
|
+
|
|
901
|
+
|
|
902
|
+
|
|
903
|
+
|
|
904
|
+
|
|
905
|
+
|
|
906
|
+
|
|
907
|
+
|
|
908
|
+
|
|
909
|
+
|
|
910
|
+
|
|
911
|
+
|
|
912
|
+
|
|
913
|
+
|
|
914
|
+
|
|
915
|
+
|
|
916
|
+
|
|
917
|
+
|
|
918
|
+
|
|
919
|
+
|
|
920
|
+
|
|
921
|
+
|
|
922
|
+
|
|
923
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="list-1"></a> <code>list?</code></td><td align="left"><code>Pick</code><<a href="#usestoragelistresult"><code>UseStorageListResult</code></a>, <code>"insertItem"</code> | <code>"removeItem"</code>></td><td align="left">Optimistic seam from <code>useStorageList</code>: each upload inserts its path immediately and rolls back via <code>removeItem</code> on failure. Caveat: rolling back an upload that was OVERWRITING an existing object drops that object’s row locally (the seam can’t tell an optimistic row from a listed one) — <code>refresh()</code> restores server truth.</td></tr><tr><td align="left"><a id="oncomplete"></a> <code>onComplete?</code></td><td align="left">(<code>task</code>: <a href="#uploadtask"><code>UploadTask</code></a>) => <code>void</code></td><td align="left">Fired once per task reaching <code>'success'</code>.</td></tr><tr><td align="left"><a id="onerror"></a> <code>onError?</code></td><td align="left">(<code>task</code>: <a href="#uploadtask"><code>UploadTask</code></a>) => <code>void</code></td><td align="left">Fired once per task reaching <code>'error'</code>.</td></tr><tr><td align="left"><a id="onprogress"></a> <code>onProgress?</code></td><td align="left">(<code>task</code>: <a href="#uploadtask"><code>UploadTask</code></a>) => <code>void</code></td><td align="left">Task-shaped progress callback (see <a href="#uploadtask">UploadTask</a>).</td></tr><tr><td align="left"><a id="path-3"></a> <code>path?</code></td><td align="left"><code>string</code></td><td align="left">Destination folder, bucket-rooted. Default <code>''</code> (root). Wire to <code>usePathState().path</code> so uploads land in the browsed folder.</td></tr></tbody></table></div>
|
|
924
|
+
<hr>
|
|
925
|
+
<p><a id="useobjectuploadresult"></a></p>
|
|
926
|
+
<h3 id="useobjectuploadresult">UseObjectUploadResult</h3>
|
|
927
|
+
<h4 id="properties-22">Properties</h4>
|
|
928
|
+
<div class="table-scroll">
|
|
929
|
+
|
|
930
|
+
|
|
931
|
+
|
|
932
|
+
|
|
933
|
+
|
|
934
|
+
|
|
935
|
+
|
|
936
|
+
|
|
937
|
+
|
|
938
|
+
|
|
939
|
+
|
|
940
|
+
|
|
941
|
+
|
|
942
|
+
|
|
943
|
+
|
|
944
|
+
|
|
945
|
+
|
|
946
|
+
|
|
947
|
+
|
|
948
|
+
|
|
949
|
+
|
|
950
|
+
|
|
951
|
+
|
|
952
|
+
|
|
953
|
+
|
|
954
|
+
|
|
955
|
+
|
|
956
|
+
|
|
957
|
+
|
|
958
|
+
|
|
959
|
+
|
|
960
|
+
|
|
961
|
+
|
|
962
|
+
|
|
963
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="clearcompleted"></a> <code>clearCompleted</code></td><td align="left">() => <code>void</code></td><td align="left">Drop settled (<code>success</code>/<code>error</code>) tasks from <code>tasks</code>.</td></tr><tr><td align="left"><a id="createfolder"></a> <code>createFolder</code></td><td align="left">(<code>name</code>: <code>string</code>) => <code>Promise</code><<code>void</code>></td><td align="left">Create an empty folder under the hook’s <code>path</code>: writes the GCS placeholder convention — a zero-byte object named <code><path>/</code> (trailing slash). <code>listAll</code> hides the placeholder from <code>items</code> at every level (it only surfaces as a prefix), so the folder appears in the browser with no phantom file inside. <code>ref()</code> normalizes the trailing slash away, so the placeholder is written through a structural value-object reference the sandbox accepts. Throws the underlying error after rolling back the optimistic prefix insert. ALTERNATIVE: when the store must stay free of placeholder objects (Pyric Studio’s choice), use the client-side pending-prefix mechanism instead — see <code>pendingPrefixes.ts</code> for the reducer and the recorded tradeoff.</td></tr><tr><td align="left"><a id="isuploading"></a> <code>isUploading</code></td><td align="left"><code>boolean</code></td><td align="left"><code>true</code> while any task is <code>'running'</code>.</td></tr><tr><td align="left"><a id="tasks"></a> <code>tasks</code></td><td align="left"><a href="#uploadtask"><code>UploadTask</code></a>[]</td><td align="left">Every task started by this hook instance, oldest first.</td></tr><tr><td align="left"><a id="upload-1"></a> <code>upload</code></td><td align="left">(<code>input</code>: <a href="#uploadinput"><code>UploadInput</code></a> | <a href="#uploadinput"><code>UploadInput</code></a>[]) => <code>Promise</code><<a href="#uploadtask"><code>UploadTask</code></a>[]></td><td align="left">Upload one or many files. Tasks run concurrently; the promise resolves with the settled tasks once ALL finish and never rejects — per-file failures land on <code>task.error</code> (and <code>onError</code>), so one bad file doesn’t mask the others.</td></tr></tbody></table></div>
|
|
964
|
+
<hr>
|
|
965
|
+
<p><a id="usepathstateoptions"></a></p>
|
|
966
|
+
<h3 id="usepathstateoptions">UsePathStateOptions</h3>
|
|
967
|
+
<h4 id="properties-23">Properties</h4>
|
|
968
|
+
<div class="table-scroll">
|
|
969
|
+
|
|
970
|
+
|
|
971
|
+
|
|
972
|
+
|
|
973
|
+
|
|
974
|
+
|
|
975
|
+
|
|
976
|
+
|
|
977
|
+
|
|
978
|
+
|
|
979
|
+
|
|
980
|
+
|
|
981
|
+
|
|
982
|
+
|
|
983
|
+
|
|
984
|
+
|
|
985
|
+
|
|
986
|
+
|
|
987
|
+
|
|
988
|
+
|
|
989
|
+
|
|
990
|
+
|
|
991
|
+
|
|
992
|
+
|
|
993
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="defaultpath"></a> <code>defaultPath?</code></td><td align="left"><code>string</code></td><td align="left">Uncontrolled initial value. Default <code>''</code> (bucket root).</td></tr><tr><td align="left"><a id="onpathchange"></a> <code>onPathChange?</code></td><td align="left">(<code>path</code>: <code>string</code>) => <code>void</code></td><td align="left">Fired with the normalized next path on every navigation. Called in both modes.</td></tr><tr><td align="left"><a id="path-4"></a> <code>path?</code></td><td align="left"><code>string</code></td><td align="left">Controlled value. When provided, the hook derives everything from it and navigation calls only fire <code>onPathChange</code> — the owner owns the state (e.g. a router binding <code>?path=</code>).</td></tr></tbody></table></div>
|
|
994
|
+
<hr>
|
|
995
|
+
<p><a id="usepathstateresult"></a></p>
|
|
996
|
+
<h3 id="usepathstateresult">UsePathStateResult</h3>
|
|
997
|
+
<h4 id="properties-24">Properties</h4>
|
|
998
|
+
<div class="table-scroll">
|
|
999
|
+
|
|
1000
|
+
|
|
1001
|
+
|
|
1002
|
+
|
|
1003
|
+
|
|
1004
|
+
|
|
1005
|
+
|
|
1006
|
+
|
|
1007
|
+
|
|
1008
|
+
|
|
1009
|
+
|
|
1010
|
+
|
|
1011
|
+
|
|
1012
|
+
|
|
1013
|
+
|
|
1014
|
+
|
|
1015
|
+
|
|
1016
|
+
|
|
1017
|
+
|
|
1018
|
+
|
|
1019
|
+
|
|
1020
|
+
|
|
1021
|
+
|
|
1022
|
+
|
|
1023
|
+
|
|
1024
|
+
|
|
1025
|
+
|
|
1026
|
+
|
|
1027
|
+
|
|
1028
|
+
|
|
1029
|
+
|
|
1030
|
+
|
|
1031
|
+
|
|
1032
|
+
|
|
1033
|
+
|
|
1034
|
+
|
|
1035
|
+
|
|
1036
|
+
|
|
1037
|
+
|
|
1038
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="enter"></a> <code>enter</code></td><td align="left">(<code>nameOrPath</code>: <code>string</code>) => <code>void</code></td><td align="left">Descend into a child folder — accepts a bare name (<code>'sub'</code>) or an absolute path (<code>'docs/sub'</code>, e.g. a prefix’s <code>fullPath</code>).</td></tr><tr><td align="left"><a id="navigatetoindex"></a> <code>navigateToIndex</code></td><td align="left">(<code>index</code>: <code>number</code>) => <code>void</code></td><td align="left">Jump to the ancestor ending at <code>segments[index]</code> — the breadcrumb click. <code>navigateToIndex(-1)</code> (or any negative) is the root.</td></tr><tr><td align="left"><a id="path-5"></a> <code>path</code></td><td align="left"><code>string</code></td><td align="left">Current normalized path. <code>''</code> is the bucket root.</td></tr><tr><td align="left"><a id="segments"></a> <code>segments</code></td><td align="left"><code>string</code>[]</td><td align="left">Path split into segments. <code>[]</code> at root.</td></tr><tr><td align="left"><a id="setpath"></a> <code>setPath</code></td><td align="left">(<code>path</code>: <code>string</code>) => <code>void</code></td><td align="left">Jump to an absolute path (normalized).</td></tr><tr><td align="left"><a id="up"></a> <code>up</code></td><td align="left">() => <code>void</code></td><td align="left">Ascend one level. No-op at root.</td></tr></tbody></table></div>
|
|
1039
|
+
<hr>
|
|
1040
|
+
<p><a id="usestoragedeleteoptions"></a></p>
|
|
1041
|
+
<h3 id="usestoragedeleteoptions">UseStorageDeleteOptions</h3>
|
|
1042
|
+
<h4 id="properties-25">Properties</h4>
|
|
1043
|
+
<div class="table-scroll">
|
|
1044
|
+
|
|
1045
|
+
|
|
1046
|
+
|
|
1047
|
+
|
|
1048
|
+
|
|
1049
|
+
|
|
1050
|
+
|
|
1051
|
+
|
|
1052
|
+
|
|
1053
|
+
|
|
1054
|
+
|
|
1055
|
+
|
|
1056
|
+
|
|
1057
|
+
|
|
1058
|
+
|
|
1059
|
+
|
|
1060
|
+
|
|
1061
|
+
|
|
1062
|
+
|
|
1063
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="impl-1"></a> <code>impl?</code></td><td align="left"><a href="#storagerecursivedeleteimpl"><code>StorageRecursiveDeleteImpl</code></a></td><td align="left">Folder-walk implementation. Default <a href="#createlistalldeleteimpl">createListAllDeleteImpl</a>.</td></tr><tr><td align="left"><a id="list-2"></a> <code>list?</code></td><td align="left"><code>Pick</code><<a href="#usestoragelistresult"><code>UseStorageListResult</code></a>, <code>"insertItem"</code> | <code>"removeItem"</code>></td><td align="left">Optimistic seam from <code>useStorageList</code>: entries vanish from the local list immediately and roll back (object → item, folder → trailing-slash prefix insert) on failure.</td></tr></tbody></table></div>
|
|
1064
|
+
<hr>
|
|
1065
|
+
<p><a id="usestoragedeleteresult"></a></p>
|
|
1066
|
+
<h3 id="usestoragedeleteresult">UseStorageDeleteResult</h3>
|
|
1067
|
+
<h4 id="properties-26">Properties</h4>
|
|
1068
|
+
<div class="table-scroll">
|
|
1069
|
+
|
|
1070
|
+
|
|
1071
|
+
|
|
1072
|
+
|
|
1073
|
+
|
|
1074
|
+
|
|
1075
|
+
|
|
1076
|
+
|
|
1077
|
+
|
|
1078
|
+
|
|
1079
|
+
|
|
1080
|
+
|
|
1081
|
+
|
|
1082
|
+
|
|
1083
|
+
|
|
1084
|
+
|
|
1085
|
+
|
|
1086
|
+
|
|
1087
|
+
|
|
1088
|
+
|
|
1089
|
+
|
|
1090
|
+
|
|
1091
|
+
|
|
1092
|
+
|
|
1093
|
+
|
|
1094
|
+
|
|
1095
|
+
|
|
1096
|
+
|
|
1097
|
+
|
|
1098
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="deleteentries"></a> <code>deleteEntries</code></td><td align="left">(<code>entries</code>: <a href="#storageselectionentry"><code>StorageSelectionEntry</code></a>[]) => <code>Promise</code><<a href="#storagedeleteoutcome"><code>StorageDeleteOutcome</code></a>></td><td align="left">Delete a mixed object/folder selection (objects via <code>deleteObject</code>, folders via the recursive impl), sequentially in selection order. Resolves with the outcome and never rejects — per-entry failures land in <code>outcome.failed</code> (and <code>error</code> keeps the first one for simple renders).</td></tr><tr><td align="left"><a id="error-4"></a> <code>error</code></td><td align="left"><code>Error</code></td><td align="left">First failure of the current/last run. Cleared on the next call.</td></tr><tr><td align="left"><a id="isrunning"></a> <code>isRunning</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="progress"></a> <code>progress</code></td><td align="left"><code>number</code></td><td align="left">Objects deleted in the current/last run (folder walks included).</td></tr></tbody></table></div>
|
|
1099
|
+
<hr>
|
|
1100
|
+
<p><a id="usestoragelistresult"></a></p>
|
|
1101
|
+
<h3 id="usestoragelistresult">UseStorageListResult</h3>
|
|
1102
|
+
<h4 id="properties-27">Properties</h4>
|
|
1103
|
+
<div class="table-scroll">
|
|
1104
|
+
|
|
1105
|
+
|
|
1106
|
+
|
|
1107
|
+
|
|
1108
|
+
|
|
1109
|
+
|
|
1110
|
+
|
|
1111
|
+
|
|
1112
|
+
|
|
1113
|
+
|
|
1114
|
+
|
|
1115
|
+
|
|
1116
|
+
|
|
1117
|
+
|
|
1118
|
+
|
|
1119
|
+
|
|
1120
|
+
|
|
1121
|
+
|
|
1122
|
+
|
|
1123
|
+
|
|
1124
|
+
|
|
1125
|
+
|
|
1126
|
+
|
|
1127
|
+
|
|
1128
|
+
|
|
1129
|
+
|
|
1130
|
+
|
|
1131
|
+
|
|
1132
|
+
|
|
1133
|
+
|
|
1134
|
+
|
|
1135
|
+
|
|
1136
|
+
|
|
1137
|
+
|
|
1138
|
+
|
|
1139
|
+
|
|
1140
|
+
|
|
1141
|
+
|
|
1142
|
+
|
|
1143
|
+
|
|
1144
|
+
|
|
1145
|
+
|
|
1146
|
+
|
|
1147
|
+
|
|
1148
|
+
|
|
1149
|
+
|
|
1150
|
+
|
|
1151
|
+
|
|
1152
|
+
|
|
1153
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="entries-2"></a> <code>entries</code></td><td align="left"><a href="#storagelistentry"><code>StorageListEntry</code></a>[]</td><td align="left">Folders-first merged row model. Derived from <code>prefixes</code> + <code>items</code>.</td></tr><tr><td align="left"><a id="error-5"></a> <code>error</code></td><td align="left"><code>Error</code></td><td align="left"><code>StorageError</code> (with a typed <code>storage/<code></code> on <code>.code</code>) from the sandbox. A denied list is <code>error.code === 'storage/unauthorized'</code> (ST-B2).</td></tr><tr><td align="left"><a id="insertitem"></a> <code>insertItem</code></td><td align="left">(<code>fullPath</code>: <code>string</code>) => <code>void</code></td><td align="left">Optimistic seam (consumed by M3 upload / M6 bulk ops, exposed now so those hooks layer on without reshaping this one). Inserts <code>fullPath</code> into the local list immediately, applying the same prefix→folder synthesis <code>listAll</code> would: a direct child becomes an item, a deeper descendant surfaces as its first-segment folder. A trailing slash declares a folder (the GCS placeholder convention <code>useObjectUpload.createFolder</code> writes): a direct trailing-slash child inserts a prefix, not an item. No-op for paths outside the listed path, duplicates, or when <code>status</code> is <code>'idle'</code>. What each call ACTUALLY inserted is recorded (keyed by the given <code>fullPath</code>) so <code>removeItem</code> can reverse it precisely. Rollback = <code>removeItem</code> or <code>refresh</code>.</td></tr><tr><td align="left"><a id="items"></a> <code>items</code></td><td align="left"><code>StorageReference</code>[]</td><td align="left">Direct child objects under <code>path</code>. Sorted by <code>fullPath</code>.</td></tr><tr><td align="left"><a id="prefixes"></a> <code>prefixes</code></td><td align="left"><code>StorageReference</code>[]</td><td align="left">Synthetic folder prefixes under <code>path</code>. Sorted by <code>fullPath</code>.</td></tr><tr><td align="left"><a id="refresh"></a> <code>refresh</code></td><td align="left">() => <code>void</code></td><td align="left">Re-run <code>listAll</code> for the current path.</td></tr><tr><td align="left"><a id="removeitem"></a> <code>removeItem</code></td><td align="left">(<code>fullPath</code>: <code>string</code>) => <code>void</code></td><td align="left">Optimistic counterpart. When <code>fullPath</code> was previously given to <code>insertItem</code>, this reverses EXACTLY what that call inserted: a deep upload that synthesized a first-segment folder row removes that folder row, and an insert that was a no-op (the row already existed — e.g. a real, listed folder) removes NOTHING, so a failed upload can never delete server-truth rows. For paths never seen by <code>insertItem</code> it removes the matching item/folder row directly (the optimistic-delete use). Rollback = <code>refresh</code>.</td></tr><tr><td align="left"><a id="status-2"></a> <code>status</code></td><td align="left"><a href="#storageliststatus"><code>StorageListStatus</code></a></td><td align="left"><code>'idle'</code> only when <code>storage</code> is null/undefined.</td></tr></tbody></table></div>
|
|
1154
|
+
<hr>
|
|
1155
|
+
<p><a id="usestorageobjectresult"></a></p>
|
|
1156
|
+
<h3 id="usestorageobjectresult">UseStorageObjectResult</h3>
|
|
1157
|
+
<h4 id="properties-28">Properties</h4>
|
|
1158
|
+
<div class="table-scroll">
|
|
1159
|
+
|
|
1160
|
+
|
|
1161
|
+
|
|
1162
|
+
|
|
1163
|
+
|
|
1164
|
+
|
|
1165
|
+
|
|
1166
|
+
|
|
1167
|
+
|
|
1168
|
+
|
|
1169
|
+
|
|
1170
|
+
|
|
1171
|
+
|
|
1172
|
+
|
|
1173
|
+
|
|
1174
|
+
|
|
1175
|
+
|
|
1176
|
+
|
|
1177
|
+
|
|
1178
|
+
|
|
1179
|
+
|
|
1180
|
+
|
|
1181
|
+
|
|
1182
|
+
|
|
1183
|
+
|
|
1184
|
+
|
|
1185
|
+
|
|
1186
|
+
|
|
1187
|
+
|
|
1188
|
+
|
|
1189
|
+
|
|
1190
|
+
|
|
1191
|
+
|
|
1192
|
+
|
|
1193
|
+
|
|
1194
|
+
|
|
1195
|
+
|
|
1196
|
+
|
|
1197
|
+
|
|
1198
|
+
|
|
1199
|
+
|
|
1200
|
+
|
|
1201
|
+
|
|
1202
|
+
|
|
1203
|
+
|
|
1204
|
+
|
|
1205
|
+
|
|
1206
|
+
|
|
1207
|
+
|
|
1208
|
+
|
|
1209
|
+
|
|
1210
|
+
|
|
1211
|
+
|
|
1212
|
+
|
|
1213
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="blob-1"></a> <code>blob</code></td><td align="left"><code>Blob</code></td><td align="left">-</td></tr><tr><td align="left"><a id="bloberror"></a> <code>blobError</code></td><td align="left"><code>Error</code></td><td align="left">-</td></tr><tr><td align="left"><a id="blobstatus"></a> <code>blobStatus</code></td><td align="left"><a href="#storageobjectstatus"><code>StorageObjectStatus</code></a></td><td align="left">Blob read state. Stays <code>'idle'</code> until <code>loadBlob()</code>, the blob is LAZY; metadata alone never downloads bytes.</td></tr><tr><td align="left"><a id="bloburl-1"></a> <code>blobUrl</code></td><td align="left"><code>string</code></td><td align="left"><code>URL.createObjectURL</code> handle for the loaded blob, used as the local preview channel. Revoked automatically when the blob is replaced, the path changes, or the hook unmounts.</td></tr><tr><td align="left"><a id="error-6"></a> <code>error</code></td><td align="left"><code>Error</code></td><td align="left">Typed <code>StorageError</code> (<code>storage/object-not-found</code>, <code>storage/unauthorized</code>, …).</td></tr><tr><td align="left"><a id="loadblob"></a> <code>loadBlob</code></td><td align="left">() => <code>void</code></td><td align="left">Fetch the bytes via <code>getBlob</code>. Subsequent calls re-fetch.</td></tr><tr><td align="left"><a id="metadata-3"></a> <code>metadata</code></td><td align="left"><code>any</code></td><td align="left">-</td></tr><tr><td align="left"><a id="refresh-1"></a> <code>refresh</code></td><td align="left">() => <code>void</code></td><td align="left">Re-read the metadata (also resets the blob, the object may have been overwritten).</td></tr><tr><td align="left"><a id="status-3"></a> <code>status</code></td><td align="left"><a href="#storageobjectstatus"><code>StorageObjectStatus</code></a></td><td align="left">Metadata read state. <code>'idle'</code> when <code>storage</code> or <code>path</code> is null.</td></tr></tbody></table></div>
|
|
1214
|
+
<hr>
|
|
1215
|
+
<p><a id="usestoragerulesgateoptions"></a></p>
|
|
1216
|
+
<h3 id="usestoragerulesgateoptions">UseStorageRulesGateOptions</h3>
|
|
1217
|
+
<h4 id="properties-29">Properties</h4>
|
|
1218
|
+
<div class="table-scroll">
|
|
1219
|
+
|
|
1220
|
+
|
|
1221
|
+
|
|
1222
|
+
|
|
1223
|
+
|
|
1224
|
+
|
|
1225
|
+
|
|
1226
|
+
|
|
1227
|
+
|
|
1228
|
+
|
|
1229
|
+
|
|
1230
|
+
|
|
1231
|
+
|
|
1232
|
+
|
|
1233
|
+
|
|
1234
|
+
|
|
1235
|
+
|
|
1236
|
+
|
|
1237
|
+
|
|
1238
|
+
|
|
1239
|
+
|
|
1240
|
+
|
|
1241
|
+
|
|
1242
|
+
|
|
1243
|
+
|
|
1244
|
+
|
|
1245
|
+
|
|
1246
|
+
|
|
1247
|
+
|
|
1248
|
+
|
|
1249
|
+
|
|
1250
|
+
|
|
1251
|
+
|
|
1252
|
+
|
|
1253
|
+
|
|
1254
|
+
|
|
1255
|
+
|
|
1256
|
+
|
|
1257
|
+
|
|
1258
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="identity"></a> <code>identity?</code></td><td align="left"><code>any</code></td><td align="left">Identity override. <code>null</code> is anonymous; OMIT the field to use the handle’s own identity (the sandbox context’s <code>auth</code>).</td></tr><tr><td align="left"><a id="paths"></a> <code>paths?</code></td><td align="left"><code>string</code> | readonly <code>string</code>[]</td><td align="left">Path (or paths) to pre-evaluate into <code>verdicts</code>, keyed by the normalized path. Ad-hoc paths (e.g. browser rows) go through <code>verdictFor</code> instead — the two are the same evaluation.</td></tr><tr><td align="left"><a id="rules"></a> <code>rules?</code></td><td align="left"><code>any</code></td><td align="left">Explicit rules source — raw rules text (parsed here; a malformed string surfaces as <code>status: 'error'</code>) or a pre-parsed <code>StorageRules</code> handle. Overrides the sandbox’s deployed ruleset when both exist.</td></tr><tr><td align="left"><a id="writeresource"></a> <code>writeResource?</code></td><td align="left">{ <code>contentType?</code>: <code>string</code>; <code>size</code>: <code>number</code>; }</td><td align="left">The about-to-write payload bound to <code>request.resource</code> for the WRITE evaluation — pass <code>{ size, contentType }</code> when gating a specific upload so size/contentType-conditioned rules evaluate truthfully. When omitted, <code>request.resource</code> is unset, which is exactly DELETE semantics (deletes carry no inbound payload) — a rule like <code>request.resource.size < N</code> then denies, the conservative answer for uploads.</td></tr><tr><td align="left"><code>writeResource.contentType?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><code>writeResource.size</code></td><td align="left"><code>number</code></td><td align="left">-</td></tr></tbody></table></div>
|
|
1259
|
+
<hr>
|
|
1260
|
+
<p><a id="usestoragerulesgateresult"></a></p>
|
|
1261
|
+
<h3 id="usestoragerulesgateresult">UseStorageRulesGateResult</h3>
|
|
1262
|
+
<h4 id="properties-30">Properties</h4>
|
|
1263
|
+
<div class="table-scroll">
|
|
1264
|
+
|
|
1265
|
+
|
|
1266
|
+
|
|
1267
|
+
|
|
1268
|
+
|
|
1269
|
+
|
|
1270
|
+
|
|
1271
|
+
|
|
1272
|
+
|
|
1273
|
+
|
|
1274
|
+
|
|
1275
|
+
|
|
1276
|
+
|
|
1277
|
+
|
|
1278
|
+
|
|
1279
|
+
|
|
1280
|
+
|
|
1281
|
+
|
|
1282
|
+
|
|
1283
|
+
|
|
1284
|
+
|
|
1285
|
+
|
|
1286
|
+
|
|
1287
|
+
|
|
1288
|
+
|
|
1289
|
+
|
|
1290
|
+
|
|
1291
|
+
|
|
1292
|
+
|
|
1293
|
+
|
|
1294
|
+
|
|
1295
|
+
|
|
1296
|
+
|
|
1297
|
+
|
|
1298
|
+
|
|
1299
|
+
|
|
1300
|
+
|
|
1301
|
+
|
|
1302
|
+
|
|
1303
|
+
|
|
1304
|
+
|
|
1305
|
+
|
|
1306
|
+
|
|
1307
|
+
|
|
1308
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="advisory"></a> <code>advisory</code></td><td align="left"><code>boolean</code></td><td align="left">Always false: <code>pyric/storage</code> handles are sandbox mirrors.</td></tr><tr><td align="left"><a id="error-7"></a> <code>error</code></td><td align="left"><code>Error</code></td><td align="left">Rules-resolution failure (e.g. a malformed <code>rules</code> string).</td></tr><tr><td align="left"><a id="identity-1"></a> <code>identity</code></td><td align="left"><code>any</code></td><td align="left">The identity the verdicts evaluate under.</td></tr><tr><td align="left"><a id="source"></a> <code>source</code></td><td align="left"><a href="#storagerulessource"><code>StorageRulesSource</code></a></td><td align="left">Where the active ruleset came from.</td></tr><tr><td align="left"><a id="status-4"></a> <code>status</code></td><td align="left"><a href="#storagerulesgatestatus"><code>StorageRulesGateStatus</code></a></td><td align="left"><code>'idle'</code> only when <code>storage</code> is null/undefined.</td></tr><tr><td align="left"><a id="verdictfor"></a> <code>verdictFor</code></td><td align="left">(<code>path</code>: <code>string</code>) => <a href="#storagegateverdict"><code>StorageGateVerdict</code></a></td><td align="left">Evaluate an arbitrary path under the current ruleset + identity. Pure and synchronous once <code>status</code> is <code>'ready'</code>; before that (and whenever no rules are reachable) it returns the allow-all verdict — the gate FAILS OPEN, because affordances are advisory and the real enforcement (sandbox throw / server denial) stays authoritative.</td></tr><tr><td align="left"><a id="verdicts"></a> <code>verdicts</code></td><td align="left"><code>Record</code><<code>string</code>, <a href="#storagegateverdict"><code>StorageGateVerdict</code></a>></td><td align="left">Pre-evaluated verdicts for <code>options.paths</code>, keyed by normalized path.</td></tr></tbody></table></div>
|
|
1309
|
+
<hr>
|
|
1310
|
+
<p><a id="usestorageselectionresult"></a></p>
|
|
1311
|
+
<h3 id="usestorageselectionresult">UseStorageSelectionResult</h3>
|
|
1312
|
+
<h4 id="properties-31">Properties</h4>
|
|
1313
|
+
<div class="table-scroll">
|
|
1314
|
+
|
|
1315
|
+
|
|
1316
|
+
|
|
1317
|
+
|
|
1318
|
+
|
|
1319
|
+
|
|
1320
|
+
|
|
1321
|
+
|
|
1322
|
+
|
|
1323
|
+
|
|
1324
|
+
|
|
1325
|
+
|
|
1326
|
+
|
|
1327
|
+
|
|
1328
|
+
|
|
1329
|
+
|
|
1330
|
+
|
|
1331
|
+
|
|
1332
|
+
|
|
1333
|
+
|
|
1334
|
+
|
|
1335
|
+
|
|
1336
|
+
|
|
1337
|
+
|
|
1338
|
+
|
|
1339
|
+
|
|
1340
|
+
|
|
1341
|
+
|
|
1342
|
+
|
|
1343
|
+
|
|
1344
|
+
|
|
1345
|
+
|
|
1346
|
+
|
|
1347
|
+
|
|
1348
|
+
|
|
1349
|
+
|
|
1350
|
+
|
|
1351
|
+
|
|
1352
|
+
|
|
1353
|
+
|
|
1354
|
+
|
|
1355
|
+
|
|
1356
|
+
|
|
1357
|
+
|
|
1358
|
+
|
|
1359
|
+
|
|
1360
|
+
|
|
1361
|
+
|
|
1362
|
+
|
|
1363
|
+
<table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="clear"></a> <code>clear</code></td><td align="left">() => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="deselect"></a> <code>deselect</code></td><td align="left">(<code>fullPath</code>: <code>string</code>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="isselected"></a> <code>isSelected</code></td><td align="left">(<code>fullPath</code>: <code>string</code>) => <code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="select"></a> <code>select</code></td><td align="left">(<code>entry</code>: <a href="#storageselectionentry"><code>StorageSelectionEntry</code></a>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="selectall"></a> <code>selectAll</code></td><td align="left">(<code>entries</code>: <a href="#storageselectionentry"><code>StorageSelectionEntry</code></a>[]) => <code>void</code></td><td align="left">Replace the selection (e.g. a “select all” over <code>list.entries</code>).</td></tr><tr><td align="left"><a id="selected"></a> <code>selected</code></td><td align="left"><a href="#storageselectionentry"><code>StorageSelectionEntry</code></a>[]</td><td align="left">Selected entries in selection order.</td></tr><tr><td align="left"><a id="size"></a> <code>size</code></td><td align="left"><code>number</code></td><td align="left">-</td></tr><tr><td align="left"><a id="toggle"></a> <code>toggle</code></td><td align="left">(<code>entry</code>: <a href="#storageselectionentry"><code>StorageSelectionEntry</code></a>) => <code>void</code></td><td align="left">Add/remove — the checkbox verb.</td></tr></tbody></table></div>
|
|
1364
|
+
<h2 id="type-aliases">Type Aliases</h2>
|
|
1365
|
+
<p><a id="metadataeditoraction"></a></p>
|
|
1366
|
+
<h3 id="metadataeditoraction">MetadataEditorAction</h3>
|
|
1367
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> MetadataEditorAction</span><span style="color:#56B6C2"> =</span></span>
|
|
1368
|
+
<span class="line"><span style="color:#ABB2BF"> | {</span></span>
|
|
1369
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setContentType"</span><span style="color:#ABB2BF">;</span></span>
|
|
1370
|
+
<span class="line"><span style="color:#E06C75"> value</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1371
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span>
|
|
1372
|
+
<span class="line"><span style="color:#ABB2BF"> | {</span></span>
|
|
1373
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setCacheControl"</span><span style="color:#ABB2BF">;</span></span>
|
|
1374
|
+
<span class="line"><span style="color:#E06C75"> value</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1375
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span>
|
|
1376
|
+
<span class="line"><span style="color:#ABB2BF"> | {</span></span>
|
|
1377
|
+
<span class="line"><span style="color:#E06C75"> id</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1378
|
+
<span class="line"><span style="color:#E06C75"> key</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1379
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setCustomKey"</span><span style="color:#ABB2BF">;</span></span>
|
|
1380
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span>
|
|
1381
|
+
<span class="line"><span style="color:#ABB2BF"> | {</span></span>
|
|
1382
|
+
<span class="line"><span style="color:#E06C75"> id</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1383
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setCustomValue"</span><span style="color:#ABB2BF">;</span></span>
|
|
1384
|
+
<span class="line"><span style="color:#E06C75"> value</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1385
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span>
|
|
1386
|
+
<span class="line"><span style="color:#ABB2BF"> | {</span></span>
|
|
1387
|
+
<span class="line"><span style="color:#E06C75"> key</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1388
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"addCustomEntry"</span><span style="color:#ABB2BF">;</span></span>
|
|
1389
|
+
<span class="line"><span style="color:#E06C75"> value</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1390
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span>
|
|
1391
|
+
<span class="line"><span style="color:#ABB2BF"> | {</span></span>
|
|
1392
|
+
<span class="line"><span style="color:#E06C75"> id</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1393
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"removeCustomEntry"</span><span style="color:#ABB2BF">;</span></span>
|
|
1394
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span>
|
|
1395
|
+
<span class="line"><span style="color:#ABB2BF"> | {</span></span>
|
|
1396
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"reset"</span><span style="color:#ABB2BF">;</span></span>
|
|
1397
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span>
|
|
1398
|
+
<span class="line"><span style="color:#ABB2BF"> | {</span></span>
|
|
1399
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"commit"</span><span style="color:#ABB2BF">;</span></span>
|
|
1400
|
+
<span class="line"><span style="color:#ABB2BF">};</span></span></code></pre>
|
|
1401
|
+
<h4 id="type-declaration">Type Declaration</h4>
|
|
1402
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
|
|
1403
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setContentType"</span><span style="color:#ABB2BF">;</span></span>
|
|
1404
|
+
<span class="line"><span style="color:#E06C75"> value</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1405
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
|
|
1406
|
+
<h5 id="type">type</h5>
|
|
1407
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setContentType"</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1408
|
+
<h5 id="value">value</h5>
|
|
1409
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">value</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1410
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
|
|
1411
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setCacheControl"</span><span style="color:#ABB2BF">;</span></span>
|
|
1412
|
+
<span class="line"><span style="color:#E06C75"> value</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1413
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
|
|
1414
|
+
<h5 id="type-1">type</h5>
|
|
1415
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setCacheControl"</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1416
|
+
<h5 id="value-1">value</h5>
|
|
1417
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">value</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1418
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
|
|
1419
|
+
<span class="line"><span style="color:#E06C75"> id</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1420
|
+
<span class="line"><span style="color:#E06C75"> key</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1421
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setCustomKey"</span><span style="color:#ABB2BF">;</span></span>
|
|
1422
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
|
|
1423
|
+
<h5 id="id">id</h5>
|
|
1424
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">id</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1425
|
+
<h5 id="key">key</h5>
|
|
1426
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">key</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1427
|
+
<h5 id="type-2">type</h5>
|
|
1428
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setCustomKey"</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1429
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
|
|
1430
|
+
<span class="line"><span style="color:#E06C75"> id</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1431
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setCustomValue"</span><span style="color:#ABB2BF">;</span></span>
|
|
1432
|
+
<span class="line"><span style="color:#E06C75"> value</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1433
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
|
|
1434
|
+
<h5 id="id-1">id</h5>
|
|
1435
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">id</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1436
|
+
<h5 id="type-3">type</h5>
|
|
1437
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setCustomValue"</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1438
|
+
<h5 id="value-2">value</h5>
|
|
1439
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">value</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1440
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
|
|
1441
|
+
<span class="line"><span style="color:#E06C75"> key</span><span style="color:#C678DD">?:</span><span style="color:#E06C75"> string</span><span style="color:#ABB2BF">;</span></span>
|
|
1442
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"addCustomEntry"</span><span style="color:#ABB2BF">;</span></span>
|
|
1443
|
+
<span class="line"><span style="color:#E06C75"> value</span><span style="color:#C678DD">?:</span><span style="color:#E06C75"> string</span><span style="color:#ABB2BF">;</span></span>
|
|
1444
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
|
|
1445
|
+
<h5 id="key-1">key?</h5>
|
|
1446
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">optional</span><span style="color:#E06C75"> key</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1447
|
+
<h5 id="type-4">type</h5>
|
|
1448
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"addCustomEntry"</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1449
|
+
<h5 id="value-3">value?</h5>
|
|
1450
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">optional</span><span style="color:#E06C75"> value</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1451
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
|
|
1452
|
+
<span class="line"><span style="color:#E06C75"> id</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1453
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"removeCustomEntry"</span><span style="color:#ABB2BF">;</span></span>
|
|
1454
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
|
|
1455
|
+
<h5 id="id-2">id</h5>
|
|
1456
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">id</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1457
|
+
<h5 id="type-5">type</h5>
|
|
1458
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"removeCustomEntry"</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1459
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
|
|
1460
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"reset"</span><span style="color:#ABB2BF">;</span></span>
|
|
1461
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
|
|
1462
|
+
<h5 id="type-6">type</h5>
|
|
1463
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"reset"</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1464
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
|
|
1465
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"commit"</span><span style="color:#ABB2BF">;</span></span>
|
|
1466
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
|
|
1467
|
+
<h5 id="type-7">type</h5>
|
|
1468
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"commit"</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1469
|
+
<p>Internal — a successful save makes the draft the new baseline.</p>
|
|
1470
|
+
<hr>
|
|
1471
|
+
<p><a id="pendingprefixaction"></a></p>
|
|
1472
|
+
<h3 id="pendingprefixaction">PendingPrefixAction</h3>
|
|
1473
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> PendingPrefixAction</span><span style="color:#56B6C2"> =</span></span>
|
|
1474
|
+
<span class="line"><span style="color:#ABB2BF"> | {</span></span>
|
|
1475
|
+
<span class="line"><span style="color:#E06C75"> path</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1476
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"create"</span><span style="color:#ABB2BF">;</span></span>
|
|
1477
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span>
|
|
1478
|
+
<span class="line"><span style="color:#ABB2BF"> | {</span></span>
|
|
1479
|
+
<span class="line"><span style="color:#E06C75"> path</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1480
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"materialize"</span><span style="color:#ABB2BF">;</span></span>
|
|
1481
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span>
|
|
1482
|
+
<span class="line"><span style="color:#ABB2BF"> | {</span></span>
|
|
1483
|
+
<span class="line"><span style="color:#E06C75"> path</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1484
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"discard"</span><span style="color:#ABB2BF">;</span></span>
|
|
1485
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span>
|
|
1486
|
+
<span class="line"><span style="color:#ABB2BF"> | {</span></span>
|
|
1487
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"clear"</span><span style="color:#ABB2BF">;</span></span>
|
|
1488
|
+
<span class="line"><span style="color:#ABB2BF">};</span></span></code></pre>
|
|
1489
|
+
<h4 id="type-declaration-1">Type Declaration</h4>
|
|
1490
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
|
|
1491
|
+
<span class="line"><span style="color:#E06C75"> path</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1492
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"create"</span><span style="color:#ABB2BF">;</span></span>
|
|
1493
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
|
|
1494
|
+
<h5 id="path">path</h5>
|
|
1495
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">path</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1496
|
+
<h5 id="type-8">type</h5>
|
|
1497
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"create"</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1498
|
+
<p>Create a folder at <code>path</code> (absolute, bucket-rooted; nested paths
|
|
1499
|
+
allowed) — adds the full ancestor chain.</p>
|
|
1500
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
|
|
1501
|
+
<span class="line"><span style="color:#E06C75"> path</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1502
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"materialize"</span><span style="color:#ABB2BF">;</span></span>
|
|
1503
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
|
|
1504
|
+
<h5 id="path-1">path</h5>
|
|
1505
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">path</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1506
|
+
<h5 id="type-9">type</h5>
|
|
1507
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"materialize"</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1508
|
+
<p>An object now exists directly under <code>path</code>: drop <code>path</code> and its
|
|
1509
|
+
ancestors from pending (they are real prefixes now).</p>
|
|
1510
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
|
|
1511
|
+
<span class="line"><span style="color:#E06C75"> path</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1512
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"discard"</span><span style="color:#ABB2BF">;</span></span>
|
|
1513
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
|
|
1514
|
+
<h5 id="path-2">path</h5>
|
|
1515
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">path</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1516
|
+
<h5 id="type-10">type</h5>
|
|
1517
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"discard"</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1518
|
+
<p>Remove a session-only folder and every pending descendant beneath it.</p>
|
|
1519
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
|
|
1520
|
+
<span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"clear"</span><span style="color:#ABB2BF">;</span></span>
|
|
1521
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
|
|
1522
|
+
<h5 id="type-11">type</h5>
|
|
1523
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"clear"</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1524
|
+
<hr>
|
|
1525
|
+
<p><a id="pendingprefixstate"></a></p>
|
|
1526
|
+
<h3 id="pendingprefixstate">PendingPrefixState</h3>
|
|
1527
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> PendingPrefixState</span><span style="color:#56B6C2"> =</span><span style="color:#C678DD"> readonly</span><span style="color:#E5C07B"> string</span><span style="color:#ABB2BF">[];</span></span></code></pre>
|
|
1528
|
+
<p>Sorted, deduped, normalized pending prefix paths.</p>
|
|
1529
|
+
<hr>
|
|
1530
|
+
<p><a id="storageapi"></a></p>
|
|
1531
|
+
<h3 id="storageapi">StorageApi</h3>
|
|
1532
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> StorageApi</span><span style="color:#56B6C2"> =</span><span style="color:#E5C07B"> Pick</span><span style="color:#ABB2BF"><</span><span style="color:#E5C07B">any</span><span style="color:#ABB2BF">,</span></span>
|
|
1533
|
+
<span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"ref"</span></span>
|
|
1534
|
+
<span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"listAll"</span></span>
|
|
1535
|
+
<span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"getMetadata"</span></span>
|
|
1536
|
+
<span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"getBlob"</span></span>
|
|
1537
|
+
<span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"uploadBytes"</span></span>
|
|
1538
|
+
<span class="line"><span style="color:#ABB2BF">| </span><span style="color:#98C379">"deleteObject"</span><span style="color:#ABB2BF">>;</span></span></code></pre>
|
|
1539
|
+
<p>The modular Storage fns the browse/inspect hooks call, as an INJECTABLE
|
|
1540
|
+
bundle (same pattern as <code>@pyric/ui</code>’s FirestoreApi / AuthApi).</p>
|
|
1541
|
+
<p>Default = in-process <code>pyric/storage</code>, so existing consumers are unchanged.
|
|
1542
|
+
Pyric Studio served mode injects the SharedWorker client bundle so the Storage
|
|
1543
|
+
surface browses the live worker object store. These ops are already async, so
|
|
1544
|
+
no sync/async wrinkle (unlike auth <code>listUsers</code>); the worker handles/refs are
|
|
1545
|
+
runtime-compatible at the surface the hooks use (<code>.fullPath</code> / <code>.name</code>).</p>
|
|
1546
|
+
<p><code>uploadBytes</code> rides the same seam so <code>useObjectUpload</code> follows the injected
|
|
1547
|
+
backend: in-process writes are uncapped; the worker client’s <code>uploadBytes</code>
|
|
1548
|
+
(base64 <code>storage.putBytes</code> over the MessagePort) enforces an 8 MiB payload
|
|
1549
|
+
cap on both ends — an over-cap upload fails that file’s task with the typed
|
|
1550
|
+
<code>storage/...</code> too-large error and the rest of the batch proceeds.</p>
|
|
1551
|
+
<p>NOTE the rules gate (<code>useStorageRulesGate</code>) is NOT here: it reads in-process
|
|
1552
|
+
rules internals and no-ops on a handle without them (worker handles), which is
|
|
1553
|
+
the correct degrade (the worker enforces read rules on <code>listAll</code> server-side).</p>
|
|
1554
|
+
<hr>
|
|
1555
|
+
<p><a id="storageliststatus"></a></p>
|
|
1556
|
+
<h3 id="storageliststatus">StorageListStatus</h3>
|
|
1557
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> StorageListStatus</span><span style="color:#56B6C2"> =</span><span style="color:#98C379"> "idle"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"loading"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"success"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"error"</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1558
|
+
<hr>
|
|
1559
|
+
<p><a id="storageobjectstatus"></a></p>
|
|
1560
|
+
<h3 id="storageobjectstatus">StorageObjectStatus</h3>
|
|
1561
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> StorageObjectStatus</span><span style="color:#56B6C2"> =</span><span style="color:#98C379"> "idle"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"loading"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"success"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"error"</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1562
|
+
<hr>
|
|
1563
|
+
<p><a id="storagerulesgatestatus"></a></p>
|
|
1564
|
+
<h3 id="storagerulesgatestatus">StorageRulesGateStatus</h3>
|
|
1565
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> StorageRulesGateStatus</span><span style="color:#56B6C2"> =</span><span style="color:#98C379"> "idle"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"loading"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"ready"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"error"</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1566
|
+
<hr>
|
|
1567
|
+
<p><a id="storagerulessource"></a></p>
|
|
1568
|
+
<h3 id="storagerulessource">StorageRulesSource</h3>
|
|
1569
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> StorageRulesSource</span><span style="color:#56B6C2"> =</span><span style="color:#98C379"> "option"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"sandbox"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"none"</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1570
|
+
<p>Where the active ruleset came from:</p>
|
|
1571
|
+
<ul>
|
|
1572
|
+
<li><code>'option'</code> — the explicit <code>rules</code> option (string or pre-parsed).</li>
|
|
1573
|
+
<li><code>'sandbox'</code> — the ruleset deployed on the sandbox handle
|
|
1574
|
+
(<code>getStorageSandbox(ctx, { rules })</code>), read off the handle’s
|
|
1575
|
+
<code>StorageService</code>.</li>
|
|
1576
|
+
<li><code>'none'</code> — no rules reachable. Every verdict allows
|
|
1577
|
+
(open-by-default, the same semantics <code>pyric/storage</code>’s
|
|
1578
|
+
enforcement layer applies when no rules are configured).</li>
|
|
1579
|
+
</ul>
|
|
1580
|
+
<hr>
|
|
1581
|
+
<p><a id="uploadinput"></a></p>
|
|
1582
|
+
<h3 id="uploadinput">UploadInput</h3>
|
|
1583
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> UploadInput</span><span style="color:#56B6C2"> =</span><span style="color:#E5C07B"> File</span><span style="color:#ABB2BF"> | </span><span style="color:#E5C07B">UploadEntry</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1584
|
+
<p><code>upload()</code> accepts plain <code>File</code>s (destination = the file’s
|
|
1585
|
+
<code>webkitRelativePath</code> when present — folder drops keep their
|
|
1586
|
+
structure — else its <code>name</code>) or explicit <a href="#uploadentry">UploadEntry</a>s.</p>
|
|
1587
|
+
<hr>
|
|
1588
|
+
<p><a id="uploadtaskstatus-1"></a></p>
|
|
1589
|
+
<h3 id="uploadtaskstatus">UploadTaskStatus</h3>
|
|
1590
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> UploadTaskStatus</span><span style="color:#56B6C2"> =</span><span style="color:#98C379"> "running"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"success"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"error"</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1591
|
+
<h2 id="variables">Variables</h2>
|
|
1592
|
+
<p><a id="defaultstoragepreviews"></a></p>
|
|
1593
|
+
<h3 id="defaultstoragepreviews">defaultStoragePreviews</h3>
|
|
1594
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">const</span><span style="color:#E5C07B"> defaultStoragePreviews</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">ReadonlyArray</span><span style="color:#ABB2BF"><</span><span style="color:#E5C07B">StoragePreview</span><span style="color:#ABB2BF">>;</span></span></code></pre>
|
|
1595
|
+
<p>The section 3 defaults: image, text/json; everything else is
|
|
1596
|
+
metadata-only (the inspector’s <code>data-pyric-preview-none</code> state).</p>
|
|
1597
|
+
<hr>
|
|
1598
|
+
<p><a id="imagepreview"></a></p>
|
|
1599
|
+
<h3 id="imagepreview">imagePreview</h3>
|
|
1600
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">const</span><span style="color:#E5C07B"> imagePreview</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">StoragePreview</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1601
|
+
<p><code>image/*</code> → blob-URL <code><img></code>.</p>
|
|
1602
|
+
<hr>
|
|
1603
|
+
<p><a id="initialpendingprefixes"></a></p>
|
|
1604
|
+
<h3 id="initialpendingprefixes">initialPendingPrefixes</h3>
|
|
1605
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">const</span><span style="color:#E5C07B"> initialPendingPrefixes</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">PendingPrefixState</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1606
|
+
<hr>
|
|
1607
|
+
<p><a id="text_preview_max_bytes"></a></p>
|
|
1608
|
+
<h3 id="text_preview_max_bytes">TEXT_PREVIEW_MAX_BYTES</h3>
|
|
1609
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">const</span><span style="color:#E5C07B"> TEXT_PREVIEW_MAX_BYTES</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">number</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1610
|
+
<p>256KB — the section 3 default cap for the text-family preview.</p>
|
|
1611
|
+
<hr>
|
|
1612
|
+
<p><a id="textpreview"></a></p>
|
|
1613
|
+
<h3 id="textpreview">textPreview</h3>
|
|
1614
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">const</span><span style="color:#E5C07B"> textPreview</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">StoragePreview</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1615
|
+
<p><code>text/*</code> + <code>application/json</code> → text panel, 256KB cap (bigger
|
|
1616
|
+
objects fall through to the too-large fallback). JSON is
|
|
1617
|
+
pretty-printed when parseable.</p>
|
|
1618
|
+
<h2 id="functions">Functions</h2>
|
|
1619
|
+
<p><a id="createlistalldeleteimpl"></a></p>
|
|
1620
|
+
<h3 id="createlistalldeleteimpl">createListAllDeleteImpl()</h3>
|
|
1621
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> createListAllDeleteImpl</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">api</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Pick</span><span style="color:#ABB2BF"><</span><span style="color:#E5C07B">StorageApi</span><span style="color:#ABB2BF">, </span><span style="color:#98C379">"listAll"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"deleteObject"</span><span style="color:#ABB2BF">>): </span><span style="color:#E5C07B">StorageRecursiveDeleteImpl</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1622
|
+
<p>The default, <code>listAll</code>-driven impl: walks the prefix tree,
|
|
1623
|
+
<code>deleteObject</code>s every item (yielding progress per object), then
|
|
1624
|
+
sweeps each visited folder’s <code><path>/</code> placeholder so emptied
|
|
1625
|
+
create-folder folders disappear too (<code>listAll</code> hides placeholders,
|
|
1626
|
+
so the walk alone would leave ghost folders). Placeholder sweeps
|
|
1627
|
+
are best-effort — <code>deletedCount</code> counts listed objects only.</p>
|
|
1628
|
+
<h4 id="parameters">Parameters</h4>
|
|
1629
|
+
<div class="table-scroll">
|
|
1630
|
+
|
|
1631
|
+
|
|
1632
|
+
|
|
1633
|
+
|
|
1634
|
+
|
|
1635
|
+
|
|
1636
|
+
|
|
1637
|
+
|
|
1638
|
+
|
|
1639
|
+
|
|
1640
|
+
|
|
1641
|
+
|
|
1642
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>api?</code></td><td align="left"><code>Pick</code><<a href="#storageapi"><code>StorageApi</code></a>, <code>"listAll"</code> | <code>"deleteObject"</code>></td></tr></tbody></table></div>
|
|
1643
|
+
<h4 id="returns">Returns</h4>
|
|
1644
|
+
<p><a href="#storagerecursivedeleteimpl"><code>StorageRecursiveDeleteImpl</code></a></p>
|
|
1645
|
+
<hr>
|
|
1646
|
+
<p><a id="deleteselectionwithconfirm"></a></p>
|
|
1647
|
+
<h3 id="deleteselectionwithconfirm">DeleteSelectionWithConfirm()</h3>
|
|
1648
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> DeleteSelectionWithConfirm</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">DeleteSelectionWithConfirmProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1649
|
+
<p>Bulk delete behind the confirm-dialog primitive, with toasts on
|
|
1650
|
+
outcome — wires <code>useConfirm</code> + <code>useStorageDelete</code> + <code>useToast</code> the
|
|
1651
|
+
way <code><DeleteWithConfirm></code> wires the Firestore trio. Requires
|
|
1652
|
+
<code><ConfirmProvider></code> AND <code><ToastProvider></code> ancestors.</p>
|
|
1653
|
+
<p>Outcome toasts: all-success → one <code>success</code> toast with the count;
|
|
1654
|
+
any failure → an <code>error</code> toast listing each failed path with its
|
|
1655
|
+
typed <code>StorageError.code</code>.</p>
|
|
1656
|
+
<p>The default trigger styles via <code>[data-pyric-ui="delete-selection"]</code>
|
|
1657
|
+
(+ <code>[data-pyric-destructive]</code>, <code>[data-pyric-running]</code>,
|
|
1658
|
+
<code>[data-pyric-denied]</code> with the reason on
|
|
1659
|
+
<code>data-pyric-denied-reason</code>/<code>title</code>); it disables while running,
|
|
1660
|
+
when <code>entries</code> is empty, or when the rules <code>gate</code> denies the
|
|
1661
|
+
selection.</p>
|
|
1662
|
+
<h4 id="parameters-1">Parameters</h4>
|
|
1663
|
+
<div class="table-scroll">
|
|
1664
|
+
|
|
1665
|
+
|
|
1666
|
+
|
|
1667
|
+
|
|
1668
|
+
|
|
1669
|
+
|
|
1670
|
+
|
|
1671
|
+
|
|
1672
|
+
|
|
1673
|
+
|
|
1674
|
+
|
|
1675
|
+
|
|
1676
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#deleteselectionwithconfirmprops"><code>DeleteSelectionWithConfirmProps</code></a></td></tr></tbody></table></div>
|
|
1677
|
+
<h4 id="returns-1">Returns</h4>
|
|
1678
|
+
<p><code>Element</code></p>
|
|
1679
|
+
<hr>
|
|
1680
|
+
<p><a id="expandpathchain"></a></p>
|
|
1681
|
+
<h3 id="expandpathchain">expandPathChain()</h3>
|
|
1682
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> expandPathChain</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">path</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">[];</span></span></code></pre>
|
|
1683
|
+
<p><code>'a/b/c'</code> → <code>['a', 'a/b', 'a/b/c']</code>; <code>''</code> → <code>[]</code>.</p>
|
|
1684
|
+
<h4 id="parameters-2">Parameters</h4>
|
|
1685
|
+
<div class="table-scroll">
|
|
1686
|
+
|
|
1687
|
+
|
|
1688
|
+
|
|
1689
|
+
|
|
1690
|
+
|
|
1691
|
+
|
|
1692
|
+
|
|
1693
|
+
|
|
1694
|
+
|
|
1695
|
+
|
|
1696
|
+
|
|
1697
|
+
|
|
1698
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>path</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
|
|
1699
|
+
<h4 id="returns-2">Returns</h4>
|
|
1700
|
+
<p><code>string</code>[]</p>
|
|
1701
|
+
<hr>
|
|
1702
|
+
<p><a id="folderinputerror"></a></p>
|
|
1703
|
+
<h3 id="folderinputerror">folderInputError()</h3>
|
|
1704
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> folderInputError</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">input</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1705
|
+
<p>Validate a create-folder input (relative to the current folder;
|
|
1706
|
+
nested <code>a/b/c</code> allowed — VS Code semantics). Returns an error
|
|
1707
|
+
message or <code>null</code> when valid. Normalization tolerates stray/repeat
|
|
1708
|
+
slashes; <code>.</code>/<code>..</code> segments are rejected (GCS object names have no
|
|
1709
|
+
dot-segment semantics — accepting them would create unreachable
|
|
1710
|
+
names).</p>
|
|
1711
|
+
<h4 id="parameters-3">Parameters</h4>
|
|
1712
|
+
<div class="table-scroll">
|
|
1713
|
+
|
|
1714
|
+
|
|
1715
|
+
|
|
1716
|
+
|
|
1717
|
+
|
|
1718
|
+
|
|
1719
|
+
|
|
1720
|
+
|
|
1721
|
+
|
|
1722
|
+
|
|
1723
|
+
|
|
1724
|
+
|
|
1725
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>input</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
|
|
1726
|
+
<h4 id="returns-3">Returns</h4>
|
|
1727
|
+
<p><code>string</code></p>
|
|
1728
|
+
<hr>
|
|
1729
|
+
<p><a id="initmetadataeditorstate"></a></p>
|
|
1730
|
+
<h3 id="initmetadataeditorstate">initMetadataEditorState()</h3>
|
|
1731
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> initMetadataEditorState</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">initial</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">any</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">MetadataEditorState</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1732
|
+
<p>Build the edit state from the metadata a <code>getMetadata</code> /
|
|
1733
|
+
<code>useStorageObject</code> read returned.</p>
|
|
1734
|
+
<h4 id="parameters-4">Parameters</h4>
|
|
1735
|
+
<div class="table-scroll">
|
|
1736
|
+
|
|
1737
|
+
|
|
1738
|
+
|
|
1739
|
+
|
|
1740
|
+
|
|
1741
|
+
|
|
1742
|
+
|
|
1743
|
+
|
|
1744
|
+
|
|
1745
|
+
|
|
1746
|
+
|
|
1747
|
+
|
|
1748
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>initial</code></td><td align="left"><code>any</code></td></tr></tbody></table></div>
|
|
1749
|
+
<h4 id="returns-4">Returns</h4>
|
|
1750
|
+
<p><a href="#metadataeditorstate"><code>MetadataEditorState</code></a></p>
|
|
1751
|
+
<hr>
|
|
1752
|
+
<p><a id="ispendingprefix"></a></p>
|
|
1753
|
+
<h3 id="ispendingprefix">isPendingPrefix()</h3>
|
|
1754
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> isPendingPrefix</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">state</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">PendingPrefixState</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">path</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">boolean</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1755
|
+
<p>Whether <code>path</code> itself is a pending (session-only) folder.</p>
|
|
1756
|
+
<h4 id="parameters-5">Parameters</h4>
|
|
1757
|
+
<div class="table-scroll">
|
|
1758
|
+
|
|
1759
|
+
|
|
1760
|
+
|
|
1761
|
+
|
|
1762
|
+
|
|
1763
|
+
|
|
1764
|
+
|
|
1765
|
+
|
|
1766
|
+
|
|
1767
|
+
|
|
1768
|
+
|
|
1769
|
+
|
|
1770
|
+
|
|
1771
|
+
|
|
1772
|
+
|
|
1773
|
+
|
|
1774
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>state</code></td><td align="left"><a href="#pendingprefixstate"><code>PendingPrefixState</code></a></td></tr><tr><td align="left"><code>path</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
|
|
1775
|
+
<h4 id="returns-5">Returns</h4>
|
|
1776
|
+
<p><code>boolean</code></p>
|
|
1777
|
+
<hr>
|
|
1778
|
+
<p><a id="metadataeditorreducer"></a></p>
|
|
1779
|
+
<h3 id="metadataeditorreducer">metadataEditorReducer()</h3>
|
|
1780
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> metadataEditorReducer</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">state</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">MetadataEditorState</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">action</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">MetadataEditorAction</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">MetadataEditorState</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1781
|
+
<p>Pure reducer — exported (with <a href="#initmetadataeditorstate">initMetadataEditorState</a>) so
|
|
1782
|
+
the edit state is testable without React, mirroring the document
|
|
1783
|
+
editor’s reducer/hook split.</p>
|
|
1784
|
+
<h4 id="parameters-6">Parameters</h4>
|
|
1785
|
+
<div class="table-scroll">
|
|
1786
|
+
|
|
1787
|
+
|
|
1788
|
+
|
|
1789
|
+
|
|
1790
|
+
|
|
1791
|
+
|
|
1792
|
+
|
|
1793
|
+
|
|
1794
|
+
|
|
1795
|
+
|
|
1796
|
+
|
|
1797
|
+
|
|
1798
|
+
|
|
1799
|
+
|
|
1800
|
+
|
|
1801
|
+
|
|
1802
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>state</code></td><td align="left"><a href="#metadataeditorstate"><code>MetadataEditorState</code></a></td></tr><tr><td align="left"><code>action</code></td><td align="left"><a href="#metadataeditoraction"><code>MetadataEditorAction</code></a></td></tr></tbody></table></div>
|
|
1803
|
+
<h4 id="returns-6">Returns</h4>
|
|
1804
|
+
<p><a href="#metadataeditorstate"><code>MetadataEditorState</code></a></p>
|
|
1805
|
+
<hr>
|
|
1806
|
+
<p><a id="normalizestoragepath"></a></p>
|
|
1807
|
+
<h3 id="normalizestoragepath">normalizeStoragePath()</h3>
|
|
1808
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> normalizeStoragePath</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">path</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1809
|
+
<p>Strip leading/trailing slashes and collapse repeats — mirrors
|
|
1810
|
+
<code>pyric/storage</code>’s reference normalization so <code>usePathState</code> and
|
|
1811
|
+
<code>useStorageList</code> always agree on what a path is.</p>
|
|
1812
|
+
<h4 id="parameters-7">Parameters</h4>
|
|
1813
|
+
<div class="table-scroll">
|
|
1814
|
+
|
|
1815
|
+
|
|
1816
|
+
|
|
1817
|
+
|
|
1818
|
+
|
|
1819
|
+
|
|
1820
|
+
|
|
1821
|
+
|
|
1822
|
+
|
|
1823
|
+
|
|
1824
|
+
|
|
1825
|
+
|
|
1826
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>path</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
|
|
1827
|
+
<h4 id="returns-7">Returns</h4>
|
|
1828
|
+
<p><code>string</code></p>
|
|
1829
|
+
<hr>
|
|
1830
|
+
<p><a id="objectbrowser"></a></p>
|
|
1831
|
+
<h3 id="objectbrowser">ObjectBrowser()</h3>
|
|
1832
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> ObjectBrowser</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">ObjectBrowserProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1833
|
+
<p>Headless storage browser shell — renders <code>useStorageList</code>’s merged
|
|
1834
|
+
folder/object rows. Folder rows navigate (<code>onNavigate</code> with the
|
|
1835
|
+
prefix path), object rows select (<code>onSelect</code> with the ref). Below
|
|
1836
|
+
<code>virtualizeThreshold</code> renders a plain <code><ul></code>; above it, composes
|
|
1837
|
+
the package’s <code><VirtualList></code>.</p>
|
|
1838
|
+
<p>Ships no visual styling. Consumers style via:</p>
|
|
1839
|
+
<ul>
|
|
1840
|
+
<li><code>[data-pyric-ui="object-browser"]</code> — the root (stamps <code>data-size</code>)</li>
|
|
1841
|
+
<li><code>…[data-pyric-loading]</code> / <code>[data-pyric-empty]</code> / <code>[data-pyric-error]</code></li>
|
|
1842
|
+
<li><code>…[data-pyric-virtualized]</code> — virtualized mode</li>
|
|
1843
|
+
<li><code>[data-pyric-object-browser-items]</code> — the <code><ul></code> in plain mode</li>
|
|
1844
|
+
<li><code>[data-pyric-storage-entry]</code> — each row</li>
|
|
1845
|
+
<li><code>[data-pyric-storage-entry][data-pyric-entry-kind="folder"|"object"]</code></li>
|
|
1846
|
+
<li><code>[data-pyric-storage-entry][data-pyric-entry-path="docs/a.txt"]</code></li>
|
|
1847
|
+
<li><code>[data-pyric-storage-entry][data-pyric-denied]</code> — read-denied row
|
|
1848
|
+
(rules gate; reason on <code>data-pyric-denied-reason</code>)</li>
|
|
1849
|
+
<li><code>[data-pyric-entry-select]</code> — the row button</li>
|
|
1850
|
+
<li><code>[data-pyric-entry-select][data-pyric-selected]</code> — the selected object</li>
|
|
1851
|
+
<li><code>[data-pyric-storage-action]</code> — optional sibling row action</li>
|
|
1852
|
+
</ul>
|
|
1853
|
+
<h4 id="parameters-8">Parameters</h4>
|
|
1854
|
+
<div class="table-scroll">
|
|
1855
|
+
|
|
1856
|
+
|
|
1857
|
+
|
|
1858
|
+
|
|
1859
|
+
|
|
1860
|
+
|
|
1861
|
+
|
|
1862
|
+
|
|
1863
|
+
|
|
1864
|
+
|
|
1865
|
+
|
|
1866
|
+
|
|
1867
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#objectbrowserprops"><code>ObjectBrowserProps</code></a></td></tr></tbody></table></div>
|
|
1868
|
+
<h4 id="returns-8">Returns</h4>
|
|
1869
|
+
<p><code>Element</code></p>
|
|
1870
|
+
<hr>
|
|
1871
|
+
<p><a id="objectinspector"></a></p>
|
|
1872
|
+
<h3 id="objectinspector">ObjectInspector()</h3>
|
|
1873
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> ObjectInspector</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">ObjectInspectorProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1874
|
+
<p>Headless inspector for one storage object: metadata + a
|
|
1875
|
+
content-type-driven preview. Previews come from the registry
|
|
1876
|
+
(<code>image/*</code> and <code>text/* + application/json</code> built in; extend via
|
|
1877
|
+
<code>previews</code>). Blob bytes load lazily and ONLY when the matched
|
|
1878
|
+
preview asks (<code>needsBlob</code>) and the object is within the preview’s
|
|
1879
|
+
<code>maxBytes</code> cap; the blob URL is revoked on unmount/path change
|
|
1880
|
+
(see <code>useStorageObject</code>).</p>
|
|
1881
|
+
<p>Ships no visual styling. Consumers style via:</p>
|
|
1882
|
+
<ul>
|
|
1883
|
+
<li><code>[data-pyric-ui="object-inspector"]</code> — root (stamps <code>data-size</code>)</li>
|
|
1884
|
+
<li><code>…[data-pyric-idle]</code> / <code>[data-pyric-loading]</code> / <code>[data-pyric-error]</code></li>
|
|
1885
|
+
<li><code>[data-pyric-object-name]</code> / <code>[data-pyric-object-metadata]</code></li>
|
|
1886
|
+
<li><code>[data-pyric-metadata-field="<field>"]</code> — each metadata row</li>
|
|
1887
|
+
<li><code>[data-pyric-object-preview]</code> — the preview container, stamping
|
|
1888
|
+
<code>data-pyric-preview="<id>"</code> for the matched registry entry</li>
|
|
1889
|
+
<li><code>…[data-pyric-preview-loading]</code> — blob in flight</li>
|
|
1890
|
+
<li><code>…[data-pyric-preview-error]</code> — blob load failed</li>
|
|
1891
|
+
<li><code>…[data-pyric-preview-too-large]</code> — over the preview’s cap</li>
|
|
1892
|
+
<li><code>…[data-pyric-preview-none]</code> — no registry match (metadata-only)</li>
|
|
1893
|
+
</ul>
|
|
1894
|
+
<h4 id="parameters-9">Parameters</h4>
|
|
1895
|
+
<div class="table-scroll">
|
|
1896
|
+
|
|
1897
|
+
|
|
1898
|
+
|
|
1899
|
+
|
|
1900
|
+
|
|
1901
|
+
|
|
1902
|
+
|
|
1903
|
+
|
|
1904
|
+
|
|
1905
|
+
|
|
1906
|
+
|
|
1907
|
+
|
|
1908
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#objectinspectorprops"><code>ObjectInspectorProps</code></a></td></tr></tbody></table></div>
|
|
1909
|
+
<h4 id="returns-9">Returns</h4>
|
|
1910
|
+
<p><code>Element</code></p>
|
|
1911
|
+
<hr>
|
|
1912
|
+
<p><a id="parsecopycounter"></a></p>
|
|
1913
|
+
<h3 id="parsecopycounter">parseCopyCounter()</h3>
|
|
1914
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> parseCopyCounter</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">stem</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">): {</span></span>
|
|
1915
|
+
<span class="line"><span style="color:#E06C75"> base</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1916
|
+
<span class="line"><span style="color:#E06C75"> counter</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">number</span><span style="color:#ABB2BF">;</span></span>
|
|
1917
|
+
<span class="line"><span style="color:#ABB2BF">};</span></span></code></pre>
|
|
1918
|
+
<p>Trailing <code> (n)</code> counter: <code>photo (3)</code> → base <code>photo</code>, counter 3.
|
|
1919
|
+
<code>counter: null</code> when the stem carries none. A counter beyond
|
|
1920
|
+
<code>Number.MAX_SAFE_INTEGER</code> is treated as plain text (no counter):
|
|
1921
|
+
incrementing it would be lossy — <code>n + 1 === n</code> in float land, which
|
|
1922
|
+
turns <a href="#resolvecollision">resolveCollision</a>’s probe loop into a hang — and the
|
|
1923
|
+
candidate would render in scientific notation anyway.</p>
|
|
1924
|
+
<h4 id="parameters-10">Parameters</h4>
|
|
1925
|
+
<div class="table-scroll">
|
|
1926
|
+
|
|
1927
|
+
|
|
1928
|
+
|
|
1929
|
+
|
|
1930
|
+
|
|
1931
|
+
|
|
1932
|
+
|
|
1933
|
+
|
|
1934
|
+
|
|
1935
|
+
|
|
1936
|
+
|
|
1937
|
+
|
|
1938
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>stem</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
|
|
1939
|
+
<h4 id="returns-10">Returns</h4>
|
|
1940
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
|
|
1941
|
+
<span class="line"><span style="color:#E06C75"> base</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
|
|
1942
|
+
<span class="line"><span style="color:#E06C75"> counter</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">number</span><span style="color:#ABB2BF">;</span></span>
|
|
1943
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
|
|
1944
|
+
<h5 id="base">base</h5>
|
|
1945
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">base</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1946
|
+
<h5 id="counter">counter</h5>
|
|
1947
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">counter</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">number</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1948
|
+
<hr>
|
|
1949
|
+
<p><a id="pathbreadcrumb"></a></p>
|
|
1950
|
+
<h3 id="pathbreadcrumb">PathBreadcrumb()</h3>
|
|
1951
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> PathBreadcrumb</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">PathBreadcrumbProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
1952
|
+
<p>Headless breadcrumb for storage paths. Every crumb (including the
|
|
1953
|
+
current one) is a real <code><button></code> — clicking the current crumb is
|
|
1954
|
+
a cheap “refresh this level” affordance for consumers that wire
|
|
1955
|
+
<code>onNavigate</code> to a path-keyed loader.</p>
|
|
1956
|
+
<p>Ships no visual styling. Consumers style via:</p>
|
|
1957
|
+
<ul>
|
|
1958
|
+
<li><code>[data-pyric-ui="path-breadcrumb"]</code> — the <code><nav></code> root</li>
|
|
1959
|
+
<li><code>[data-pyric-breadcrumb-item]</code> — each <code><li></code></li>
|
|
1960
|
+
<li><code>[data-pyric-breadcrumb-link]</code> — each crumb button</li>
|
|
1961
|
+
<li><code>[data-pyric-breadcrumb-link][data-pyric-current]</code> — the current level</li>
|
|
1962
|
+
<li><code>[data-pyric-breadcrumb-root]</code> — the root crumb’s button</li>
|
|
1963
|
+
<li><code>[data-pyric-breadcrumb-separator]</code> — the separators</li>
|
|
1964
|
+
</ul>
|
|
1965
|
+
<h4 id="parameters-11">Parameters</h4>
|
|
1966
|
+
<div class="table-scroll">
|
|
1967
|
+
|
|
1968
|
+
|
|
1969
|
+
|
|
1970
|
+
|
|
1971
|
+
|
|
1972
|
+
|
|
1973
|
+
|
|
1974
|
+
|
|
1975
|
+
|
|
1976
|
+
|
|
1977
|
+
|
|
1978
|
+
|
|
1979
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#pathbreadcrumbprops"><code>PathBreadcrumbProps</code></a></td></tr></tbody></table></div>
|
|
1980
|
+
<h4 id="returns-11">Returns</h4>
|
|
1981
|
+
<p><code>Element</code></p>
|
|
1982
|
+
<hr>
|
|
1983
|
+
<p><a id="pendingchildfolders"></a></p>
|
|
1984
|
+
<h3 id="pendingchildfolders">pendingChildFolders()</h3>
|
|
1985
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> pendingChildFolders</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">state</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">PendingPrefixState</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">parentPath</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">[];</span></span></code></pre>
|
|
1986
|
+
<p>Direct-child folder NAMES pending under <code>parentPath</code> (<code>''</code> = root),
|
|
1987
|
+
sorted. The chain expansion guarantees every level is present, so a
|
|
1988
|
+
simple parent match is exact.</p>
|
|
1989
|
+
<h4 id="parameters-12">Parameters</h4>
|
|
1990
|
+
<div class="table-scroll">
|
|
1991
|
+
|
|
1992
|
+
|
|
1993
|
+
|
|
1994
|
+
|
|
1995
|
+
|
|
1996
|
+
|
|
1997
|
+
|
|
1998
|
+
|
|
1999
|
+
|
|
2000
|
+
|
|
2001
|
+
|
|
2002
|
+
|
|
2003
|
+
|
|
2004
|
+
|
|
2005
|
+
|
|
2006
|
+
|
|
2007
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>state</code></td><td align="left"><a href="#pendingprefixstate"><code>PendingPrefixState</code></a></td></tr><tr><td align="left"><code>parentPath</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
|
|
2008
|
+
<h4 id="returns-12">Returns</h4>
|
|
2009
|
+
<p><code>string</code>[]</p>
|
|
2010
|
+
<hr>
|
|
2011
|
+
<p><a id="pendingprefixreducer"></a></p>
|
|
2012
|
+
<h3 id="pendingprefixreducer">pendingPrefixReducer()</h3>
|
|
2013
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> pendingPrefixReducer</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">state</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">PendingPrefixState</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">action</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">PendingPrefixAction</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">PendingPrefixState</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
2014
|
+
<h4 id="parameters-13">Parameters</h4>
|
|
2015
|
+
<div class="table-scroll">
|
|
2016
|
+
|
|
2017
|
+
|
|
2018
|
+
|
|
2019
|
+
|
|
2020
|
+
|
|
2021
|
+
|
|
2022
|
+
|
|
2023
|
+
|
|
2024
|
+
|
|
2025
|
+
|
|
2026
|
+
|
|
2027
|
+
|
|
2028
|
+
|
|
2029
|
+
|
|
2030
|
+
|
|
2031
|
+
|
|
2032
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>state</code></td><td align="left"><a href="#pendingprefixstate"><code>PendingPrefixState</code></a></td></tr><tr><td align="left"><code>action</code></td><td align="left"><a href="#pendingprefixaction"><code>PendingPrefixAction</code></a></td></tr></tbody></table></div>
|
|
2033
|
+
<h4 id="returns-13">Returns</h4>
|
|
2034
|
+
<p><a href="#pendingprefixstate"><code>PendingPrefixState</code></a></p>
|
|
2035
|
+
<hr>
|
|
2036
|
+
<p><a id="planbatchnames"></a></p>
|
|
2037
|
+
<h3 id="planbatchnames">planBatchNames()</h3>
|
|
2038
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> planBatchNames</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">relativePaths</span><span style="color:#ABB2BF">: </span><span style="color:#C678DD">readonly</span><span style="color:#E5C07B"> string</span><span style="color:#ABB2BF">[], </span><span style="color:#E06C75;font-style:italic">taken</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">ReadonlySet</span><span style="color:#ABB2BF"><</span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">>): </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">[];</span></span></code></pre>
|
|
2039
|
+
<p>Resolve a whole drop/pick batch against the destination folder’s
|
|
2040
|
+
existing names, with OS drop semantics: collisions are detected and
|
|
2041
|
+
renamed at the batch’s TOP LEVEL only (the names the OS drop
|
|
2042
|
+
“creates” in the destination — a plain file’s name, or a dropped
|
|
2043
|
+
folder’s root segment). Files inside a dropped folder ride their
|
|
2044
|
+
folder’s rename and keep their inner structure untouched — exactly
|
|
2045
|
+
like dropping <code>photos/</code> next to an existing <code>photos/</code> yields
|
|
2046
|
+
<code>photos (1)/…</code> with the contents intact.</p>
|
|
2047
|
+
<p>Within one batch:</p>
|
|
2048
|
+
<ul>
|
|
2049
|
+
<li>all paths sharing a top-level FOLDER segment share its resolution
|
|
2050
|
+
(one dropped folder = one rename), and</li>
|
|
2051
|
+
<li>top-level FILES resolve individually in order, each claiming its
|
|
2052
|
+
resolved name, so two same-named files in one batch get successive
|
|
2053
|
+
counters.</li>
|
|
2054
|
+
</ul>
|
|
2055
|
+
<p>Only the destination’s DIRECT children can be checked — that is all
|
|
2056
|
+
the drop target (one <code>listAll</code> level) knows. Deeper paths follow GCS
|
|
2057
|
+
overwrite semantics, which the folder-level rename already shields
|
|
2058
|
+
in practice (a colliding folder is renamed wholesale).</p>
|
|
2059
|
+
<p>Returns resolved paths in input order.</p>
|
|
2060
|
+
<h4 id="parameters-14">Parameters</h4>
|
|
2061
|
+
<div class="table-scroll">
|
|
2062
|
+
|
|
2063
|
+
|
|
2064
|
+
|
|
2065
|
+
|
|
2066
|
+
|
|
2067
|
+
|
|
2068
|
+
|
|
2069
|
+
|
|
2070
|
+
|
|
2071
|
+
|
|
2072
|
+
|
|
2073
|
+
|
|
2074
|
+
|
|
2075
|
+
|
|
2076
|
+
|
|
2077
|
+
|
|
2078
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>relativePaths</code></td><td align="left">readonly <code>string</code>[]</td></tr><tr><td align="left"><code>taken</code></td><td align="left"><code>ReadonlySet</code><<code>string</code>></td></tr></tbody></table></div>
|
|
2079
|
+
<h4 id="returns-14">Returns</h4>
|
|
2080
|
+
<p><code>string</code>[]</p>
|
|
2081
|
+
<hr>
|
|
2082
|
+
<p><a id="resolvecollision"></a></p>
|
|
2083
|
+
<h3 id="resolvecollision">resolveCollision()</h3>
|
|
2084
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> resolveCollision</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">name</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">taken</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">ReadonlySet</span><span style="color:#ABB2BF"><</span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">>): </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
2085
|
+
<p>Resolve one name against a set of taken sibling names. Returns the
|
|
2086
|
+
name unchanged when free; otherwise the first <code> (n)</code> candidate that
|
|
2087
|
+
is free, per the module rule above.</p>
|
|
2088
|
+
<h4 id="parameters-15">Parameters</h4>
|
|
2089
|
+
<div class="table-scroll">
|
|
2090
|
+
|
|
2091
|
+
|
|
2092
|
+
|
|
2093
|
+
|
|
2094
|
+
|
|
2095
|
+
|
|
2096
|
+
|
|
2097
|
+
|
|
2098
|
+
|
|
2099
|
+
|
|
2100
|
+
|
|
2101
|
+
|
|
2102
|
+
|
|
2103
|
+
|
|
2104
|
+
|
|
2105
|
+
|
|
2106
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>name</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>taken</code></td><td align="left"><code>ReadonlySet</code><<code>string</code>></td></tr></tbody></table></div>
|
|
2107
|
+
<h4 id="returns-15">Returns</h4>
|
|
2108
|
+
<p><code>string</code></p>
|
|
2109
|
+
<hr>
|
|
2110
|
+
<p><a id="selectstoragepreview"></a></p>
|
|
2111
|
+
<h3 id="selectstoragepreview">selectStoragePreview()</h3>
|
|
2112
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> selectStoragePreview</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">metadata</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">FullMetadata</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">consumerPreviews</span><span style="color:#ABB2BF">: </span><span style="color:#C678DD">readonly</span><span style="color:#E5C07B"> StoragePreview</span><span style="color:#ABB2BF">[]): </span><span style="color:#E5C07B">StoragePreview</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
2113
|
+
<p>Pick the preview for <code>metadata</code>: consumer previews first (override
|
|
2114
|
+
channel), then the built-ins, first <code>match</code> wins. <code>undefined</code>
|
|
2115
|
+
means metadata-only.</p>
|
|
2116
|
+
<h4 id="parameters-16">Parameters</h4>
|
|
2117
|
+
<div class="table-scroll">
|
|
2118
|
+
|
|
2119
|
+
|
|
2120
|
+
|
|
2121
|
+
|
|
2122
|
+
|
|
2123
|
+
|
|
2124
|
+
|
|
2125
|
+
|
|
2126
|
+
|
|
2127
|
+
|
|
2128
|
+
|
|
2129
|
+
|
|
2130
|
+
|
|
2131
|
+
|
|
2132
|
+
|
|
2133
|
+
|
|
2134
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>metadata</code></td><td align="left"><code>FullMetadata</code></td></tr><tr><td align="left"><code>consumerPreviews</code></td><td align="left">readonly <a href="#storagepreview"><code>StoragePreview</code></a>[]</td></tr></tbody></table></div>
|
|
2135
|
+
<h4 id="returns-16">Returns</h4>
|
|
2136
|
+
<p><a href="#storagepreview"><code>StoragePreview</code></a></p>
|
|
2137
|
+
<hr>
|
|
2138
|
+
<p><a id="splitstoragename"></a></p>
|
|
2139
|
+
<h3 id="splitstoragename">splitStorageName()</h3>
|
|
2140
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> splitStorageName</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">name</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">): {</span></span>
|
|
2141
|
+
<span class="line"><span style="color:#E06C75"> ext</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
|
|
2142
|
+
<span class="line"><span style="color:#E06C75"> stem</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
|
|
2143
|
+
<span class="line"><span style="color:#ABB2BF">};</span></span></code></pre>
|
|
2144
|
+
<p><code>name</code> split as the rule defines: <code>ext</code> includes the leading dot,
|
|
2145
|
+
or is <code>''</code> when the name has no extension (dotfiles, trailing dots,
|
|
2146
|
+
extensionless names).</p>
|
|
2147
|
+
<h4 id="parameters-17">Parameters</h4>
|
|
2148
|
+
<div class="table-scroll">
|
|
2149
|
+
|
|
2150
|
+
|
|
2151
|
+
|
|
2152
|
+
|
|
2153
|
+
|
|
2154
|
+
|
|
2155
|
+
|
|
2156
|
+
|
|
2157
|
+
|
|
2158
|
+
|
|
2159
|
+
|
|
2160
|
+
|
|
2161
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>name</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
|
|
2162
|
+
<h4 id="returns-17">Returns</h4>
|
|
2163
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
|
|
2164
|
+
<span class="line"><span style="color:#E06C75"> ext</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
|
|
2165
|
+
<span class="line"><span style="color:#E06C75"> stem</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
|
|
2166
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
|
|
2167
|
+
<h5 id="ext">ext</h5>
|
|
2168
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">ext</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
2169
|
+
<h5 id="stem">stem</h5>
|
|
2170
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">stem</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
2171
|
+
<hr>
|
|
2172
|
+
<p><a id="storageapiprovider"></a></p>
|
|
2173
|
+
<h3 id="storageapiprovider">StorageApiProvider()</h3>
|
|
2174
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> StorageApiProvider</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: {</span></span>
|
|
2175
|
+
<span class="line"><span style="color:#E06C75"> children</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">ReactNode</span><span style="color:#ABB2BF">;</span></span>
|
|
2176
|
+
<span class="line"><span style="color:#E06C75"> value</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">StorageApi</span><span style="color:#ABB2BF">;</span></span>
|
|
2177
|
+
<span class="line"><span style="color:#ABB2BF">}): </span><span style="color:#E5C07B">FunctionComponentElement</span><span style="color:#ABB2BF"><</span><span style="color:#E5C07B">ProviderProps</span><span style="color:#ABB2BF"><</span><span style="color:#E5C07B">StorageApi</span><span style="color:#ABB2BF">>>;</span></span></code></pre>
|
|
2178
|
+
<p>Provide a Storage API bundle to the subtree (Studio’s worker client).</p>
|
|
2179
|
+
<h4 id="parameters-18">Parameters</h4>
|
|
2180
|
+
<div class="table-scroll">
|
|
2181
|
+
|
|
2182
|
+
|
|
2183
|
+
|
|
2184
|
+
|
|
2185
|
+
|
|
2186
|
+
|
|
2187
|
+
|
|
2188
|
+
|
|
2189
|
+
|
|
2190
|
+
|
|
2191
|
+
|
|
2192
|
+
|
|
2193
|
+
|
|
2194
|
+
|
|
2195
|
+
|
|
2196
|
+
|
|
2197
|
+
|
|
2198
|
+
|
|
2199
|
+
|
|
2200
|
+
|
|
2201
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left">{ <code>children</code>: <code>ReactNode</code>; <code>value</code>: <a href="#storageapi"><code>StorageApi</code></a>; }</td></tr><tr><td align="left"><code>__namedParameters.children</code></td><td align="left"><code>ReactNode</code></td></tr><tr><td align="left"><code>__namedParameters.value</code></td><td align="left"><a href="#storageapi"><code>StorageApi</code></a></td></tr></tbody></table></div>
|
|
2202
|
+
<h4 id="returns-18">Returns</h4>
|
|
2203
|
+
<p><code>FunctionComponentElement</code><<code>ProviderProps</code><<a href="#storageapi"><code>StorageApi</code></a>>></p>
|
|
2204
|
+
<hr>
|
|
2205
|
+
<p><a id="uploaddropzone"></a></p>
|
|
2206
|
+
<h3 id="uploaddropzone">UploadDropzone()</h3>
|
|
2207
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> UploadDropzone</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UploadDropzoneProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
2208
|
+
<p>Headless drop target for file + folder uploads. Slot-based: the
|
|
2209
|
+
children render the chrome; the component owns drag wiring and
|
|
2210
|
+
stamps <code>data-dragging</code> while a drag hovers (a counter tracks
|
|
2211
|
+
enter/leave pairs so crossing child elements doesn’t flicker).</p>
|
|
2212
|
+
<p>Ships no visual styling. Consumers style via:</p>
|
|
2213
|
+
<ul>
|
|
2214
|
+
<li><code>[data-pyric-ui="upload-dropzone"]</code> — the root</li>
|
|
2215
|
+
<li><code>…[data-dragging]</code> — a drag is hovering</li>
|
|
2216
|
+
<li><code>…[data-disabled]</code></li>
|
|
2217
|
+
<li><code>…[data-disabled-reason="…"]</code> — why (e.g. a denied write verdict)</li>
|
|
2218
|
+
</ul>
|
|
2219
|
+
<h4 id="parameters-19">Parameters</h4>
|
|
2220
|
+
<div class="table-scroll">
|
|
2221
|
+
|
|
2222
|
+
|
|
2223
|
+
|
|
2224
|
+
|
|
2225
|
+
|
|
2226
|
+
|
|
2227
|
+
|
|
2228
|
+
|
|
2229
|
+
|
|
2230
|
+
|
|
2231
|
+
|
|
2232
|
+
|
|
2233
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#uploaddropzoneprops"><code>UploadDropzoneProps</code></a></td></tr></tbody></table></div>
|
|
2234
|
+
<h4 id="returns-19">Returns</h4>
|
|
2235
|
+
<p><code>Element</code></p>
|
|
2236
|
+
<hr>
|
|
2237
|
+
<p><a id="usemetadataeditor"></a></p>
|
|
2238
|
+
<h3 id="usemetadataeditor">useMetadataEditor()</h3>
|
|
2239
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> useMetadataEditor</span><span style="color:#ABB2BF">(</span></span>
|
|
2240
|
+
<span class="line"><span style="color:#E06C75;font-style:italic"> storage</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">any</span><span style="color:#ABB2BF">,</span></span>
|
|
2241
|
+
<span class="line"><span style="color:#E06C75;font-style:italic"> path</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">,</span></span>
|
|
2242
|
+
<span class="line"><span style="color:#E06C75;font-style:italic"> options</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UseMetadataEditorOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UseMetadataEditorResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
2243
|
+
<p>Headless metadata editor — the <code>useDocumentEditor</code> reducer pattern
|
|
2244
|
+
over <code>updateMetadata</code>: a pure reducer owns the draft (contentType,
|
|
2245
|
+
cacheControl, customMetadata k/v rows with stable ids +
|
|
2246
|
+
empty/duplicate-key validation); the hook adds named dispatch
|
|
2247
|
+
helpers and the save half.</p>
|
|
2248
|
+
<h4 id="parameters-20">Parameters</h4>
|
|
2249
|
+
<div class="table-scroll">
|
|
2250
|
+
|
|
2251
|
+
|
|
2252
|
+
|
|
2253
|
+
|
|
2254
|
+
|
|
2255
|
+
|
|
2256
|
+
|
|
2257
|
+
|
|
2258
|
+
|
|
2259
|
+
|
|
2260
|
+
|
|
2261
|
+
|
|
2262
|
+
|
|
2263
|
+
|
|
2264
|
+
|
|
2265
|
+
|
|
2266
|
+
|
|
2267
|
+
|
|
2268
|
+
|
|
2269
|
+
|
|
2270
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>storage</code></td><td align="left"><code>any</code></td></tr><tr><td align="left"><code>path</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>options?</code></td><td align="left"><a href="#usemetadataeditoroptions"><code>UseMetadataEditorOptions</code></a></td></tr></tbody></table></div>
|
|
2271
|
+
<h4 id="returns-20">Returns</h4>
|
|
2272
|
+
<p><a href="#usemetadataeditorresult"><code>UseMetadataEditorResult</code></a></p>
|
|
2273
|
+
<hr>
|
|
2274
|
+
<p><a id="useobjectupload"></a></p>
|
|
2275
|
+
<h3 id="useobjectupload">useObjectUpload()</h3>
|
|
2276
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> useObjectUpload</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">storage</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">any</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">options</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UseObjectUploadOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UseObjectUploadResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
2277
|
+
<p>Multi-file upload over the package’s single Storage handle prop.
|
|
2278
|
+
Headless: returns task state; render it however you like (the
|
|
2279
|
+
<code><UploadDropzone></code> component is one producer of <code>upload()</code> calls).</p>
|
|
2280
|
+
<p>Optimistic-with-rollback: with the <code>list</code> seam wired, each upload’s
|
|
2281
|
+
row appears in <code>useStorageList</code> immediately and disappears again if
|
|
2282
|
+
the write fails (typed <code>StorageError</code> on <code>task.error</code>).</p>
|
|
2283
|
+
<h4 id="parameters-21">Parameters</h4>
|
|
2284
|
+
<div class="table-scroll">
|
|
2285
|
+
|
|
2286
|
+
|
|
2287
|
+
|
|
2288
|
+
|
|
2289
|
+
|
|
2290
|
+
|
|
2291
|
+
|
|
2292
|
+
|
|
2293
|
+
|
|
2294
|
+
|
|
2295
|
+
|
|
2296
|
+
|
|
2297
|
+
|
|
2298
|
+
|
|
2299
|
+
|
|
2300
|
+
|
|
2301
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>storage</code></td><td align="left"><code>any</code></td></tr><tr><td align="left"><code>options?</code></td><td align="left"><a href="#useobjectuploadoptions"><code>UseObjectUploadOptions</code></a></td></tr></tbody></table></div>
|
|
2302
|
+
<h4 id="returns-21">Returns</h4>
|
|
2303
|
+
<p><a href="#useobjectuploadresult"><code>UseObjectUploadResult</code></a></p>
|
|
2304
|
+
<hr>
|
|
2305
|
+
<p><a id="usepathstate"></a></p>
|
|
2306
|
+
<h3 id="usepathstate">usePathState()</h3>
|
|
2307
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> usePathState</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">options</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UsePathStateOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UsePathStateResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
2308
|
+
<p>Path navigation state for the storage browser. Controlled when
|
|
2309
|
+
<code>path</code> is provided (the owner re-renders with the next value),
|
|
2310
|
+
uncontrolled otherwise — standard React value/defaultValue
|
|
2311
|
+
semantics. All emitted paths are normalized (<code>normalizeStoragePath</code>).</p>
|
|
2312
|
+
<h4 id="parameters-22">Parameters</h4>
|
|
2313
|
+
<div class="table-scroll">
|
|
2314
|
+
|
|
2315
|
+
|
|
2316
|
+
|
|
2317
|
+
|
|
2318
|
+
|
|
2319
|
+
|
|
2320
|
+
|
|
2321
|
+
|
|
2322
|
+
|
|
2323
|
+
|
|
2324
|
+
|
|
2325
|
+
|
|
2326
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>options?</code></td><td align="left"><a href="#usepathstateoptions"><code>UsePathStateOptions</code></a></td></tr></tbody></table></div>
|
|
2327
|
+
<h4 id="returns-22">Returns</h4>
|
|
2328
|
+
<p><a href="#usepathstateresult"><code>UsePathStateResult</code></a></p>
|
|
2329
|
+
<hr>
|
|
2330
|
+
<p><a id="usestorageapi"></a></p>
|
|
2331
|
+
<h3 id="usestorageapi">useStorageApi()</h3>
|
|
2332
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> useStorageApi</span><span style="color:#ABB2BF">(): </span><span style="color:#E5C07B">StorageApi</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
2333
|
+
<p>Read the active Storage API bundle (defaults to in-process <code>pyric/storage</code>).</p>
|
|
2334
|
+
<h4 id="returns-23">Returns</h4>
|
|
2335
|
+
<p><a href="#storageapi"><code>StorageApi</code></a></p>
|
|
2336
|
+
<hr>
|
|
2337
|
+
<p><a id="usestoragedelete"></a></p>
|
|
2338
|
+
<h3 id="usestoragedelete">useStorageDelete()</h3>
|
|
2339
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> useStorageDelete</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">storage</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">any</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">options</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UseStorageDeleteOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UseStorageDeleteResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
2340
|
+
<p>Drive bulk + recursive deletes from a React component — the
|
|
2341
|
+
storage counterpart of <code>useRecursiveDelete</code> (same progress /
|
|
2342
|
+
isRunning / error shape, same stale-run generation token), bulk
|
|
2343
|
+
because storage selections are flat multi-row affairs.</p>
|
|
2344
|
+
<h4 id="parameters-23">Parameters</h4>
|
|
2345
|
+
<div class="table-scroll">
|
|
2346
|
+
|
|
2347
|
+
|
|
2348
|
+
|
|
2349
|
+
|
|
2350
|
+
|
|
2351
|
+
|
|
2352
|
+
|
|
2353
|
+
|
|
2354
|
+
|
|
2355
|
+
|
|
2356
|
+
|
|
2357
|
+
|
|
2358
|
+
|
|
2359
|
+
|
|
2360
|
+
|
|
2361
|
+
|
|
2362
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>storage</code></td><td align="left"><code>any</code></td></tr><tr><td align="left"><code>options?</code></td><td align="left"><a href="#usestoragedeleteoptions"><code>UseStorageDeleteOptions</code></a></td></tr></tbody></table></div>
|
|
2363
|
+
<h4 id="returns-24">Returns</h4>
|
|
2364
|
+
<p><a href="#usestoragedeleteresult"><code>UseStorageDeleteResult</code></a></p>
|
|
2365
|
+
<hr>
|
|
2366
|
+
<p><a id="usestoragelist"></a></p>
|
|
2367
|
+
<h3 id="usestoragelist">useStorageList()</h3>
|
|
2368
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> useStorageList</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">storage</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">any</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">path</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UseStorageListResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
2369
|
+
<p>List the objects + synthetic folders directly under <code>path</code> :
|
|
2370
|
+
<code>listAll</code> over the package’s sandbox Storage handle. Read-via-get,
|
|
2371
|
+
not realtime: the list updates on <code>refresh</code>, path change, or the
|
|
2372
|
+
optimistic seam. Pass <code>''</code> (or the result of <code>usePathState</code>) for
|
|
2373
|
+
the bucket root.</p>
|
|
2374
|
+
<p><code>listAll</code> has no pagination; a very large prefix arrives as one flat
|
|
2375
|
+
result (virtualize the rendering, which <code><ObjectBrowser></code> does).</p>
|
|
2376
|
+
<h4 id="parameters-24">Parameters</h4>
|
|
2377
|
+
<div class="table-scroll">
|
|
2378
|
+
|
|
2379
|
+
|
|
2380
|
+
|
|
2381
|
+
|
|
2382
|
+
|
|
2383
|
+
|
|
2384
|
+
|
|
2385
|
+
|
|
2386
|
+
|
|
2387
|
+
|
|
2388
|
+
|
|
2389
|
+
|
|
2390
|
+
|
|
2391
|
+
|
|
2392
|
+
|
|
2393
|
+
|
|
2394
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>storage</code></td><td align="left"><code>any</code></td></tr><tr><td align="left"><code>path</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
|
|
2395
|
+
<h4 id="returns-25">Returns</h4>
|
|
2396
|
+
<p><a href="#usestoragelistresult"><code>UseStorageListResult</code></a></p>
|
|
2397
|
+
<hr>
|
|
2398
|
+
<p><a id="usestorageobject"></a></p>
|
|
2399
|
+
<h3 id="usestorageobject">useStorageObject()</h3>
|
|
2400
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> useStorageObject</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">storage</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">any</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">path</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UseStorageObjectResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
2401
|
+
<p>One object’s metadata + lazily-loaded bytes, the data source for
|
|
2402
|
+
<code><ObjectInspector></code>. Read-via-get like the rest of the storage
|
|
2403
|
+
half: updates on <code>refresh</code>, <code>path</code> change, or <code>loadBlob</code>.</p>
|
|
2404
|
+
<h4 id="parameters-25">Parameters</h4>
|
|
2405
|
+
<div class="table-scroll">
|
|
2406
|
+
|
|
2407
|
+
|
|
2408
|
+
|
|
2409
|
+
|
|
2410
|
+
|
|
2411
|
+
|
|
2412
|
+
|
|
2413
|
+
|
|
2414
|
+
|
|
2415
|
+
|
|
2416
|
+
|
|
2417
|
+
|
|
2418
|
+
|
|
2419
|
+
|
|
2420
|
+
|
|
2421
|
+
|
|
2422
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>storage</code></td><td align="left"><code>any</code></td></tr><tr><td align="left"><code>path</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
|
|
2423
|
+
<h4 id="returns-26">Returns</h4>
|
|
2424
|
+
<p><a href="#usestorageobjectresult"><code>UseStorageObjectResult</code></a></p>
|
|
2425
|
+
<hr>
|
|
2426
|
+
<p><a id="usestoragerulesgate"></a></p>
|
|
2427
|
+
<h3 id="usestoragerulesgate">useStorageRulesGate()</h3>
|
|
2428
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> useStorageRulesGate</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">storage</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">any</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">options</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UseStorageRulesGateOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UseStorageRulesGateResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
2429
|
+
<p>Pre-flight rules evaluation — the M7 differentiator. Evaluates the
|
|
2430
|
+
current identity against paths BEFORE the click, so components can
|
|
2431
|
+
annotate denied affordances (<code>data-pyric-denied</code>, disabled-with-
|
|
2432
|
+
reason) instead of letting the user discover a denial via a thrown
|
|
2433
|
+
<code>storage/unauthorized</code>.</p>
|
|
2434
|
+
<p>Rules discovery: a sandbox handle carries its deployed ruleset
|
|
2435
|
+
(<code>getStorageSandbox(ctx, { rules })</code> parses it into the handle’s
|
|
2436
|
+
<code>StorageService</code>) — the hook reads it through the handle’s target,
|
|
2437
|
+
so sandbox callers pass nothing. Identity likewise defaults to the
|
|
2438
|
+
handle’s <code>SandboxContext.auth</code>. An explicit <code>rules</code> or <code>identity</code>
|
|
2439
|
+
option overrides the handle when evaluating a what-if scenario.</p>
|
|
2440
|
+
<p>Evaluation contract (mirrors <code>pyric/storage</code>’s own enforcement):
|
|
2441
|
+
<code>resource</code> (the existing object) is bound as <code>null</code> — the gate
|
|
2442
|
+
pre-evaluates without fetching per-path metadata, matching how the
|
|
2443
|
+
sandbox enforces <code>listAll</code>. Rules conditioned on existing-object
|
|
2444
|
+
state (<code>resource.*</code>) evaluate as if the object doesn’t exist; the
|
|
2445
|
+
common identity/path/payload-shaped rules evaluate exactly.</p>
|
|
2446
|
+
<h4 id="parameters-26">Parameters</h4>
|
|
2447
|
+
<div class="table-scroll">
|
|
2448
|
+
|
|
2449
|
+
|
|
2450
|
+
|
|
2451
|
+
|
|
2452
|
+
|
|
2453
|
+
|
|
2454
|
+
|
|
2455
|
+
|
|
2456
|
+
|
|
2457
|
+
|
|
2458
|
+
|
|
2459
|
+
|
|
2460
|
+
|
|
2461
|
+
|
|
2462
|
+
|
|
2463
|
+
|
|
2464
|
+
<table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>storage</code></td><td align="left"><code>any</code></td></tr><tr><td align="left"><code>options?</code></td><td align="left"><a href="#usestoragerulesgateoptions"><code>UseStorageRulesGateOptions</code></a></td></tr></tbody></table></div>
|
|
2465
|
+
<h4 id="returns-27">Returns</h4>
|
|
2466
|
+
<p><a href="#usestoragerulesgateresult"><code>UseStorageRulesGateResult</code></a></p>
|
|
2467
|
+
<hr>
|
|
2468
|
+
<p><a id="usestorageselection"></a></p>
|
|
2469
|
+
<h3 id="usestorageselection">useStorageSelection()</h3>
|
|
2470
|
+
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> useStorageSelection</span><span style="color:#ABB2BF">(): </span><span style="color:#E5C07B">UseStorageSelectionResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
|
|
2471
|
+
<p>Multi-select state over storage rows, keyed by <code>fullPath</code>.
|
|
2472
|
+
Deliberately dumb: it doesn’t watch the list, so clear it on path
|
|
2473
|
+
change (or after a bulk op via the delete hook’s outcome) — the
|
|
2474
|
+
consumer owns that policy.</p>
|
|
2475
|
+
<h4 id="returns-28">Returns</h4>
|
|
2476
|
+
<p><a href="#usestorageselectionresult"><code>UseStorageSelectionResult</code></a></p> </article> </main> <aside class="doc-toc api-symbols" aria-label="API symbols"> <h2 class="doc-toc-heading">Symbols</h2> <input class="api-symbol-filter" type="search" placeholder="Filter symbols" aria-label="Filter API symbols" data-api-symbol-filter> <div class="api-symbol-groups" data-api-symbol-groups> <section class="api-symbol-group" data-api-symbol-group> <a class="api-symbol-kind" href="#interfaces"> Interfaces </a> <ul> <li data-api-symbol="custommetadataentry"> <a href="#custommetadataentry">CustomMetadataEntry</a> </li><li data-api-symbol="deleteselectionwithconfirmprops"> <a href="#deleteselectionwithconfirmprops">DeleteSelectionWithConfirmProps</a> </li><li data-api-symbol="droppedfile"> <a href="#droppedfile">DroppedFile</a> </li><li data-api-symbol="metadataeditorstate"> <a href="#metadataeditorstate">MetadataEditorState</a> </li><li data-api-symbol="objectbrowserprops"> <a href="#objectbrowserprops">ObjectBrowserProps</a> </li><li data-api-symbol="objectinspectorprops"> <a href="#objectinspectorprops">ObjectInspectorProps</a> </li><li data-api-symbol="pathbreadcrumbprops"> <a href="#pathbreadcrumbprops">PathBreadcrumbProps</a> </li><li data-api-symbol="storagedeletefailure"> <a href="#storagedeletefailure">StorageDeleteFailure</a> </li><li data-api-symbol="storagedeleteoutcome"> <a href="#storagedeleteoutcome">StorageDeleteOutcome</a> </li><li data-api-symbol="storagedeleteprogress"> <a href="#storagedeleteprogress">StorageDeleteProgress</a> </li><li data-api-symbol="storagegateverdict"> <a href="#storagegateverdict">StorageGateVerdict</a> </li><li data-api-symbol="storagelistentry"> <a href="#storagelistentry">StorageListEntry</a> </li><li data-api-symbol="storagepreview"> <a href="#storagepreview">StoragePreview</a> </li><li data-api-symbol="storagepreviewcontext"> <a href="#storagepreviewcontext">StoragePreviewContext</a> </li><li data-api-symbol="storagerecursivedeleteimpl"> <a href="#storagerecursivedeleteimpl">StorageRecursiveDeleteImpl</a> </li><li data-api-symbol="storageselectionentry"> <a href="#storageselectionentry">StorageSelectionEntry</a> </li><li data-api-symbol="uploaddropzoneprops"> <a href="#uploaddropzoneprops">UploadDropzoneProps</a> </li><li data-api-symbol="uploadentry"> <a href="#uploadentry">UploadEntry</a> </li><li data-api-symbol="uploadtask"> <a href="#uploadtask">UploadTask</a> </li><li data-api-symbol="usemetadataeditoroptions"> <a href="#usemetadataeditoroptions">UseMetadataEditorOptions</a> </li><li data-api-symbol="usemetadataeditorresult"> <a href="#usemetadataeditorresult">UseMetadataEditorResult</a> </li><li data-api-symbol="useobjectuploadoptions"> <a href="#useobjectuploadoptions">UseObjectUploadOptions</a> </li><li data-api-symbol="useobjectuploadresult"> <a href="#useobjectuploadresult">UseObjectUploadResult</a> </li><li data-api-symbol="usepathstateoptions"> <a href="#usepathstateoptions">UsePathStateOptions</a> </li><li data-api-symbol="usepathstateresult"> <a href="#usepathstateresult">UsePathStateResult</a> </li><li data-api-symbol="usestoragedeleteoptions"> <a href="#usestoragedeleteoptions">UseStorageDeleteOptions</a> </li><li data-api-symbol="usestoragedeleteresult"> <a href="#usestoragedeleteresult">UseStorageDeleteResult</a> </li><li data-api-symbol="usestoragelistresult"> <a href="#usestoragelistresult">UseStorageListResult</a> </li><li data-api-symbol="usestorageobjectresult"> <a href="#usestorageobjectresult">UseStorageObjectResult</a> </li><li data-api-symbol="usestoragerulesgateoptions"> <a href="#usestoragerulesgateoptions">UseStorageRulesGateOptions</a> </li><li data-api-symbol="usestoragerulesgateresult"> <a href="#usestoragerulesgateresult">UseStorageRulesGateResult</a> </li><li data-api-symbol="usestorageselectionresult"> <a href="#usestorageselectionresult">UseStorageSelectionResult</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group> <a class="api-symbol-kind" href="#type-aliases"> Type Aliases </a> <ul> <li data-api-symbol="metadataeditoraction"> <a href="#metadataeditoraction">MetadataEditorAction</a> </li><li data-api-symbol="pendingprefixaction"> <a href="#pendingprefixaction">PendingPrefixAction</a> </li><li data-api-symbol="pendingprefixstate"> <a href="#pendingprefixstate">PendingPrefixState</a> </li><li data-api-symbol="storageapi"> <a href="#storageapi">StorageApi</a> </li><li data-api-symbol="storageliststatus"> <a href="#storageliststatus">StorageListStatus</a> </li><li data-api-symbol="storageobjectstatus"> <a href="#storageobjectstatus">StorageObjectStatus</a> </li><li data-api-symbol="storagerulesgatestatus"> <a href="#storagerulesgatestatus">StorageRulesGateStatus</a> </li><li data-api-symbol="storagerulessource"> <a href="#storagerulessource">StorageRulesSource</a> </li><li data-api-symbol="uploadinput"> <a href="#uploadinput">UploadInput</a> </li><li data-api-symbol="uploadtaskstatus"> <a href="#uploadtaskstatus">UploadTaskStatus</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group> <a class="api-symbol-kind" href="#variables"> Variables </a> <ul> <li data-api-symbol="defaultstoragepreviews"> <a href="#defaultstoragepreviews">defaultStoragePreviews</a> </li><li data-api-symbol="imagepreview"> <a href="#imagepreview">imagePreview</a> </li><li data-api-symbol="initialpendingprefixes"> <a href="#initialpendingprefixes">initialPendingPrefixes</a> </li><li data-api-symbol="text_preview_max_bytes"> <a href="#text_preview_max_bytes">TEXT_PREVIEW_MAX_BYTES</a> </li><li data-api-symbol="textpreview"> <a href="#textpreview">textPreview</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group> <a class="api-symbol-kind" href="#functions"> Functions </a> <ul> <li data-api-symbol="createlistalldeleteimpl()"> <a href="#createlistalldeleteimpl">createListAllDeleteImpl()</a> </li><li data-api-symbol="deleteselectionwithconfirm()"> <a href="#deleteselectionwithconfirm">DeleteSelectionWithConfirm()</a> </li><li data-api-symbol="expandpathchain()"> <a href="#expandpathchain">expandPathChain()</a> </li><li data-api-symbol="folderinputerror()"> <a href="#folderinputerror">folderInputError()</a> </li><li data-api-symbol="initmetadataeditorstate()"> <a href="#initmetadataeditorstate">initMetadataEditorState()</a> </li><li data-api-symbol="ispendingprefix()"> <a href="#ispendingprefix">isPendingPrefix()</a> </li><li data-api-symbol="metadataeditorreducer()"> <a href="#metadataeditorreducer">metadataEditorReducer()</a> </li><li data-api-symbol="normalizestoragepath()"> <a href="#normalizestoragepath">normalizeStoragePath()</a> </li><li data-api-symbol="objectbrowser()"> <a href="#objectbrowser">ObjectBrowser()</a> </li><li data-api-symbol="objectinspector()"> <a href="#objectinspector">ObjectInspector()</a> </li><li data-api-symbol="parsecopycounter()"> <a href="#parsecopycounter">parseCopyCounter()</a> </li><li data-api-symbol="pathbreadcrumb()"> <a href="#pathbreadcrumb">PathBreadcrumb()</a> </li><li data-api-symbol="pendingchildfolders()"> <a href="#pendingchildfolders">pendingChildFolders()</a> </li><li data-api-symbol="pendingprefixreducer()"> <a href="#pendingprefixreducer">pendingPrefixReducer()</a> </li><li data-api-symbol="planbatchnames()"> <a href="#planbatchnames">planBatchNames()</a> </li><li data-api-symbol="resolvecollision()"> <a href="#resolvecollision">resolveCollision()</a> </li><li data-api-symbol="selectstoragepreview()"> <a href="#selectstoragepreview">selectStoragePreview()</a> </li><li data-api-symbol="splitstoragename()"> <a href="#splitstoragename">splitStorageName()</a> </li><li data-api-symbol="storageapiprovider()"> <a href="#storageapiprovider">StorageApiProvider()</a> </li><li data-api-symbol="uploaddropzone()"> <a href="#uploaddropzone">UploadDropzone()</a> </li><li data-api-symbol="usemetadataeditor()"> <a href="#usemetadataeditor">useMetadataEditor()</a> </li><li data-api-symbol="useobjectupload()"> <a href="#useobjectupload">useObjectUpload()</a> </li><li data-api-symbol="usepathstate()"> <a href="#usepathstate">usePathState()</a> </li><li data-api-symbol="usestorageapi()"> <a href="#usestorageapi">useStorageApi()</a> </li><li data-api-symbol="usestoragedelete()"> <a href="#usestoragedelete">useStorageDelete()</a> </li><li data-api-symbol="usestoragelist()"> <a href="#usestoragelist">useStorageList()</a> </li><li data-api-symbol="usestorageobject()"> <a href="#usestorageobject">useStorageObject()</a> </li><li data-api-symbol="usestoragerulesgate()"> <a href="#usestoragerulesgate">useStorageRulesGate()</a> </li><li data-api-symbol="usestorageselection()"> <a href="#usestorageselection">useStorageSelection()</a> </li> </ul> </section> <p class="api-symbol-empty" data-api-symbol-empty hidden>No matching symbols</p> </div> </aside> </div> <script type="module">const a=document.querySelector("[data-api-symbol-filter]"),d=[...document.querySelectorAll("[data-api-symbol-group]")],n=document.querySelector("[data-api-symbol-empty]");a?.addEventListener("input",()=>{const t=a.value.trim().toLowerCase();let o=0;for(const i of d){let e=0;i.querySelectorAll("[data-api-symbol]").forEach(l=>{const r=!t||(l.dataset.apiSymbol??"").includes(t);l.hidden=!r,r&&e++}),i.hidden=e===0,o+=e}n&&(n.hidden=o>0)});</script> <script type="module">const s=new Map;document.querySelectorAll('.doc-toc a[href^="#"]').forEach(t=>s.set(decodeURIComponent(t.hash.slice(1)),t));if(s.size>0){const t=new Set,n=()=>{let o=null;for(const e of s.keys())if(t.has(e)){o=e;break}s.forEach((e,c)=>e.classList.toggle("active",c===o))},r=new IntersectionObserver(o=>{for(const e of o)e.isIntersecting?t.add(e.target.id):t.delete(e.target.id);n()},{rootMargin:"-72px 0px -60% 0px"});s.forEach((o,e)=>{const c=document.getElementById(e);c&&r.observe(c)})}</script> <script type="module">document.querySelector('.studio__nav [aria-current="page"]')?.scrollIntoView({block:"nearest",inline:"center"});</script> </body> </html>
|