@pyric/cli 0.1.0-alpha.10 → 0.1.0-alpha.11

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.
Files changed (304) hide show
  1. package/README.md.orig +2 -2
  2. package/dist/assurance/.generated/conformance-verdicts.d.ts +16 -0
  3. package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -1
  4. package/dist/assurance/.generated/conformance-verdicts.js +16 -0
  5. package/dist/assurance/.generated/conformance-verdicts.js.map +1 -1
  6. package/dist/bridge/server/peer.d.ts +1 -1
  7. package/dist/bridge/server.d.ts +1 -1
  8. package/dist/bridge/server.js +1 -1
  9. package/dist/cli/index.d.ts +11 -0
  10. package/dist/cli/index.d.ts.map +1 -1
  11. package/dist/cli/index.js +13 -1
  12. package/dist/cli/index.js.map +1 -1
  13. package/dist/cli/init.d.ts +3 -3
  14. package/dist/cli/init.d.ts.map +1 -1
  15. package/dist/cli/init.js +5 -5
  16. package/dist/cli/init.js.map +1 -1
  17. package/dist/cli/serve.d.ts.map +1 -1
  18. package/dist/cli/serve.js +8 -2
  19. package/dist/cli/serve.js.map +1 -1
  20. package/dist/conformance/.generated/can-i-use-browser.d.ts.map +1 -1
  21. package/dist/conformance/.generated/can-i-use-browser.js +1 -1
  22. package/dist/conformance/.generated/can-i-use-browser.js.map +1 -1
  23. package/dist/conformance/.generated/can-i-use.d.ts.map +1 -1
  24. package/dist/conformance/.generated/can-i-use.js +1 -1
  25. package/dist/conformance/.generated/can-i-use.js.map +1 -1
  26. package/dist/conformance/.generated/conformance-docs.d.ts +12 -0
  27. package/dist/conformance/.generated/conformance-docs.d.ts.map +1 -0
  28. package/dist/conformance/.generated/conformance-docs.js +2 -0
  29. package/dist/conformance/.generated/conformance-docs.js.map +1 -0
  30. package/dist/conformance/docs.d.ts +6 -0
  31. package/dist/conformance/docs.d.ts.map +1 -0
  32. package/dist/conformance/docs.js +6 -0
  33. package/dist/conformance/docs.js.map +1 -0
  34. package/dist/remote/index.d.ts.map +1 -1
  35. package/dist/remote/index.js +1 -0
  36. package/dist/remote/index.js.map +1 -1
  37. package/dist/serve/activity-guard.d.ts +4 -0
  38. package/dist/serve/activity-guard.d.ts.map +1 -0
  39. package/dist/serve/activity-guard.js +22 -0
  40. package/dist/serve/activity-guard.js.map +1 -0
  41. package/dist/serve/activity-route.d.ts +4 -0
  42. package/dist/serve/activity-route.d.ts.map +1 -0
  43. package/dist/serve/activity-route.js +157 -0
  44. package/dist/serve/activity-route.js.map +1 -0
  45. package/dist/serve/activity-warning.d.ts +4 -0
  46. package/dist/serve/activity-warning.d.ts.map +1 -0
  47. package/dist/serve/activity-warning.js +21 -0
  48. package/dist/serve/activity-warning.js.map +1 -0
  49. package/dist/serve/bridge-mount.d.ts +5 -0
  50. package/dist/serve/bridge-mount.d.ts.map +1 -1
  51. package/dist/serve/bridge-mount.js +1 -0
  52. package/dist/serve/bridge-mount.js.map +1 -1
  53. package/dist/serve/docs-ui/404.html +3 -0
  54. package/dist/serve/docs-ui/_astro/{_slug_.DPUwShm2.css → _slug_.CXh9yTP1.css} +1 -1
  55. package/dist/serve/docs-ui/_astro/_slug_.DUci-duz.css +1 -0
  56. package/dist/serve/docs-ui/docs/_rhythm/index.html +2 -1
  57. package/dist/serve/docs-ui/docs/agent/set-up-your-agent/index.html +3 -2
  58. package/dist/serve/docs-ui/docs/agent/set-up-your-agent.md +1 -1
  59. package/dist/serve/docs-ui/docs/agent/watch-and-review/index.html +2 -1
  60. package/dist/serve/docs-ui/docs/agent/work-with-an-agent/index.html +2 -1
  61. package/dist/serve/docs-ui/docs/ai-compat/index.html +2 -1
  62. package/dist/serve/docs-ui/docs/api-reference/index.html +51 -49
  63. package/dist/serve/docs-ui/docs/api-reference.md +2 -2
  64. package/dist/serve/docs-ui/docs/app-compat/index.html +2 -1
  65. package/dist/serve/docs-ui/docs/auth-compat/index.html +2 -1
  66. package/dist/serve/docs-ui/docs/build/ai-logic/index.html +18 -3
  67. package/dist/serve/docs-ui/docs/build/ai-logic.md +30 -2
  68. package/dist/serve/docs-ui/docs/build/authentication/index.html +2 -1
  69. package/dist/serve/docs-ui/docs/build/authentication.md +1 -1
  70. package/dist/serve/docs-ui/docs/build/cloud-firestore/index.html +2 -1
  71. package/dist/serve/docs-ui/docs/build/cloud-messaging/index.html +46 -2
  72. package/dist/serve/docs-ui/docs/build/cloud-messaging.md +56 -1
  73. package/dist/serve/docs-ui/docs/build/cloud-storage/index.html +2 -1
  74. package/dist/serve/docs-ui/docs/build/cloud-storage.md +1 -1
  75. package/dist/serve/docs-ui/docs/build/realtime-database/index.html +21 -3
  76. package/dist/serve/docs-ui/docs/build/realtime-database.md +25 -1
  77. package/dist/serve/docs-ui/docs/conformance-scores/index.html +2 -1
  78. package/dist/serve/docs-ui/docs/create-pyric-reference-api/index.html +61 -28
  79. package/dist/serve/docs-ui/docs/create-pyric-reference-api.md +65 -20
  80. package/dist/serve/docs-ui/docs/database-compat/index.html +2 -1
  81. package/dist/serve/docs-ui/docs/firestore-compat/index.html +6 -5
  82. package/dist/serve/docs-ui/docs/firestore-compat.md +4 -4
  83. package/dist/serve/docs-ui/docs/functions-rtdb-compat/index.html +2 -1
  84. package/dist/serve/docs-ui/docs/get-started/how-the-swap-works/index.html +2 -1
  85. package/dist/serve/docs-ui/docs/get-started/start-building/index.html +4 -3
  86. package/dist/serve/docs-ui/docs/get-started/start-building.md +2 -2
  87. package/dist/serve/docs-ui/docs/index.json +800 -575
  88. package/dist/serve/docs-ui/docs/messaging-compat/index.html +2 -1
  89. package/dist/serve/docs-ui/docs/observe/see-whats-happening/index.html +2 -1
  90. package/dist/serve/docs-ui/docs/observe/shape-your-data/index.html +2 -1
  91. package/dist/serve/docs-ui/docs/overview/index.html +2 -1
  92. package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api/index.html +5 -4
  93. package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api.md +3 -4
  94. package/dist/serve/docs-ui/docs/pyric-admin-auth-reference-api/index.html +5 -4
  95. package/dist/serve/docs-ui/docs/pyric-admin-auth-reference-api.md +3 -4
  96. package/dist/serve/docs-ui/docs/pyric-admin-database-reference-api/index.html +5 -4
  97. package/dist/serve/docs-ui/docs/pyric-admin-database-reference-api.md +3 -4
  98. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api/index.html +2503 -12
  99. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api.md +2219 -8
  100. package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api/index.html +4 -3
  101. package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api.md +2 -3
  102. package/dist/serve/docs-ui/docs/pyric-ai-reference-api/index.html +16 -11
  103. package/dist/serve/docs-ui/docs/pyric-ai-reference-api.md +14 -13
  104. package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api/index.html +4 -3
  105. package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api.md +2 -3
  106. package/dist/serve/docs-ui/docs/pyric-app-reference-api/index.html +7 -2
  107. package/dist/serve/docs-ui/docs/pyric-app-reference-api.md +5 -2
  108. package/dist/serve/docs-ui/docs/pyric-auth-reference-api/index.html +23 -12
  109. package/dist/serve/docs-ui/docs/pyric-auth-reference-api.md +15 -12
  110. package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +10 -48
  111. package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api.md +11 -24
  112. package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api/index.html +87 -97
  113. package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api.md +53 -65
  114. package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api/index.html +14 -15
  115. package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api.md +19 -28
  116. package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api/index.html +4 -3
  117. package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api.md +2 -3
  118. package/dist/serve/docs-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +3 -2
  119. package/dist/serve/docs-ui/docs/pyric-cli-conformance-browser-reference-api.md +1 -2
  120. package/dist/serve/docs-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +51 -0
  121. package/dist/serve/docs-ui/docs/pyric-cli-conformance-docs-reference-api.md +36 -0
  122. package/dist/serve/docs-ui/docs/pyric-cli-conformance-reference-api/index.html +3 -2
  123. package/dist/serve/docs-ui/docs/pyric-cli-conformance-reference-api.md +1 -2
  124. package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api/index.html +3 -2
  125. package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api.md +1 -2
  126. package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api/index.html +3 -2
  127. package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api.md +1 -2
  128. package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api/index.html +3 -2
  129. package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api.md +1 -2
  130. package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api/index.html +1067 -83
  131. package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api.md +1291 -160
  132. package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api/index.html +123 -92
  133. package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api.md +49 -20
  134. package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api/index.html +72 -7
  135. package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api.md +22 -7
  136. package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api/index.html +33 -12
  137. package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api.md +15 -12
  138. package/dist/serve/docs-ui/docs/pyric-database-reference-api/index.html +18 -17
  139. package/dist/serve/docs-ui/docs/pyric-database-reference-api.md +19 -22
  140. package/dist/serve/docs-ui/docs/pyric-firestore-reference-api/index.html +1512 -545
  141. package/dist/serve/docs-ui/docs/pyric-firestore-reference-api.md +1311 -316
  142. package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api/index.html +3 -2
  143. package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api.md +1 -2
  144. package/dist/serve/docs-ui/docs/pyric-messaging-reference-api/index.html +5 -4
  145. package/dist/serve/docs-ui/docs/pyric-messaging-reference-api.md +3 -4
  146. package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api/index.html +69 -369
  147. package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api.md +103 -216
  148. package/dist/serve/docs-ui/docs/pyric-rules-reference-api/index.html +10 -9
  149. package/dist/serve/docs-ui/docs/pyric-rules-reference-api.md +9 -10
  150. package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api/index.html +8 -7
  151. package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api.md +6 -7
  152. package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api/index.html +10 -9
  153. package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api.md +9 -10
  154. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api/index.html +374 -910
  155. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api.md +377 -911
  156. package/dist/serve/docs-ui/docs/pyric-storage-reference-api/index.html +25 -17
  157. package/dist/serve/docs-ui/docs/pyric-storage-reference-api.md +21 -19
  158. package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api/index.html +3 -2
  159. package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api.md +1 -2
  160. package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +63 -776
  161. package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api.md +69 -510
  162. package/dist/serve/docs-ui/docs/pyric-ui-auth-reference-api/index.html +22 -21
  163. package/dist/serve/docs-ui/docs/pyric-ui-auth-reference-api.md +29 -30
  164. package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api/index.html +15 -168
  165. package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api.md +17 -87
  166. package/dist/serve/docs-ui/docs/pyric-ui-events-reference-api/index.html +6 -5
  167. package/dist/serve/docs-ui/docs/pyric-ui-events-reference-api.md +5 -6
  168. package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +82 -970
  169. package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api.md +104 -479
  170. package/dist/serve/docs-ui/docs/pyric-ui-firestore-reference-api/index.html +30 -29
  171. package/dist/serve/docs-ui/docs/pyric-ui-firestore-reference-api.md +54 -55
  172. package/dist/serve/docs-ui/docs/pyric-ui-primitives-reference-api/index.html +3 -2
  173. package/dist/serve/docs-ui/docs/pyric-ui-primitives-reference-api.md +1 -2
  174. package/dist/serve/docs-ui/docs/pyric-ui-rtdb-reference-api/index.html +5 -4
  175. package/dist/serve/docs-ui/docs/pyric-ui-rtdb-reference-api.md +3 -4
  176. package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +9 -124
  177. package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api.md +7 -58
  178. package/dist/serve/docs-ui/docs/pyric-ui-rules-reference-api/index.html +24 -23
  179. package/dist/serve/docs-ui/docs/pyric-ui-rules-reference-api.md +31 -34
  180. package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +104 -1385
  181. package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api.md +133 -817
  182. package/dist/serve/docs-ui/docs/pyric-ui-storage-reference-api/index.html +34 -33
  183. package/dist/serve/docs-ui/docs/pyric-ui-storage-reference-api.md +37 -38
  184. package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +116 -1169
  185. package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api.md +142 -590
  186. package/dist/serve/docs-ui/docs/pyric-ui-traffic-reference-api/index.html +4 -3
  187. package/dist/serve/docs-ui/docs/pyric-ui-traffic-reference-api.md +3 -4
  188. package/dist/serve/docs-ui/docs/rules-compat/index.html +34 -1
  189. package/dist/serve/docs-ui/docs/rules-compat.md +32 -0
  190. package/dist/serve/docs-ui/docs/secure/audit-your-rules/index.html +19 -2
  191. package/dist/serve/docs-ui/docs/secure/audit-your-rules.md +32 -0
  192. package/dist/serve/docs-ui/docs/secure/firestore-rules-limits/index.html +2 -1
  193. package/dist/serve/docs-ui/docs/secure/read-a-denial/index.html +2 -1
  194. package/dist/serve/docs-ui/docs/secure/rtdb-rules-in-typescript/index.html +2 -1
  195. package/dist/serve/docs-ui/docs/secure/rtdb-rules-in-typescript.md +1 -1
  196. package/dist/serve/docs-ui/docs/secure/rules-standard-library/index.html +2 -1
  197. package/dist/serve/docs-ui/docs/secure/secure-it-with-rules/index.html +2 -1
  198. package/dist/serve/docs-ui/docs/secure/simulate-and-lint/index.html +2 -1
  199. package/dist/serve/docs-ui/docs/secure/write-a-rules-test-suite/index.html +2 -1
  200. package/dist/serve/docs-ui/docs/ship/ship-to-production/index.html +2 -1
  201. package/dist/serve/docs-ui/docs/ship/test-in-node/index.html +2 -1
  202. package/dist/serve/docs-ui/docs/storage-compat/index.html +2 -1
  203. package/dist/serve/docs-ui/docs/trust/how-we-know-it-matches-firebase/index.html +2 -1
  204. package/dist/serve/docs-ui/docs/trust/versioning-and-compatibility/index.html +2 -1
  205. package/dist/serve/docs-ui/llms.txt +1 -0
  206. package/dist/serve/entries/ai.d.ts.map +1 -1
  207. package/dist/serve/entries/ai.js +39 -1
  208. package/dist/serve/entries/ai.js.map +1 -1
  209. package/dist/serve/entries/messaging-sw.d.ts.map +1 -1
  210. package/dist/serve/entries/messaging-sw.js +5 -1
  211. package/dist/serve/entries/messaging-sw.js.map +1 -1
  212. package/dist/serve/entries/messaging.d.ts.map +1 -1
  213. package/dist/serve/entries/messaging.js +7 -1
  214. package/dist/serve/entries/messaging.js.map +1 -1
  215. package/dist/serve/entries/runtime.d.ts.map +1 -1
  216. package/dist/serve/entries/runtime.js +20 -1
  217. package/dist/serve/entries/runtime.js.map +1 -1
  218. package/dist/serve/init-payload.d.ts +25 -0
  219. package/dist/serve/init-payload.d.ts.map +1 -1
  220. package/dist/serve/namespace.d.ts +39 -0
  221. package/dist/serve/namespace.d.ts.map +1 -1
  222. package/dist/serve/namespace.js +80 -1
  223. package/dist/serve/namespace.js.map +1 -1
  224. package/dist/serve/standalone-assets.d.ts +11 -9
  225. package/dist/serve/standalone-assets.d.ts.map +1 -1
  226. package/dist/serve/standalone-assets.js +6 -5
  227. package/dist/serve/standalone-assets.js.map +1 -1
  228. package/dist/serve/studio-ui/assets/{RulesCodeEditor-CXdSLKhO.js → RulesCodeEditor-CxVYcZXw.js} +1 -1
  229. package/dist/serve/studio-ui/assets/index-cpSfgQ7H.js +1218 -0
  230. package/dist/serve/studio-ui/assets/seed-DeuFKi4J.js +20 -0
  231. package/dist/serve/studio-ui/index.html +1 -1
  232. package/dist/serve/vite-plugin.d.ts +92 -15
  233. package/dist/serve/vite-plugin.d.ts.map +1 -1
  234. package/dist/serve/vite-plugin.js +281 -11
  235. package/dist/serve/vite-plugin.js.map +1 -1
  236. package/dist/serve/worker/activity-bootstrap.d.ts +8 -0
  237. package/dist/serve/worker/activity-bootstrap.d.ts.map +1 -0
  238. package/dist/serve/worker/activity-bootstrap.js +11 -0
  239. package/dist/serve/worker/activity-bootstrap.js.map +1 -0
  240. package/dist/serve/worker/client/connection.d.ts.map +1 -1
  241. package/dist/serve/worker/client/connection.js +17 -5
  242. package/dist/serve/worker/client/connection.js.map +1 -1
  243. package/dist/serve/worker/client/core.d.ts +2 -2
  244. package/dist/serve/worker/client/core.d.ts.map +1 -1
  245. package/dist/serve/worker/client/core.js +33 -5
  246. package/dist/serve/worker/client/core.js.map +1 -1
  247. package/dist/serve/worker/client/firestore-writes.d.ts.map +1 -1
  248. package/dist/serve/worker/client/firestore-writes.js +1 -0
  249. package/dist/serve/worker/client/firestore-writes.js.map +1 -1
  250. package/dist/serve/worker/client/messaging.d.ts +9 -1
  251. package/dist/serve/worker/client/messaging.d.ts.map +1 -1
  252. package/dist/serve/worker/client/messaging.js +15 -0
  253. package/dist/serve/worker/client/messaging.js.map +1 -1
  254. package/dist/serve/worker/client/studio.d.ts +10 -0
  255. package/dist/serve/worker/client/studio.d.ts.map +1 -1
  256. package/dist/serve/worker/client/studio.js +11 -0
  257. package/dist/serve/worker/client/studio.js.map +1 -1
  258. package/dist/serve/worker/durable-persistence.d.ts +12 -0
  259. package/dist/serve/worker/durable-persistence.d.ts.map +1 -0
  260. package/dist/serve/worker/durable-persistence.js +118 -0
  261. package/dist/serve/worker/durable-persistence.js.map +1 -0
  262. package/dist/serve/worker/entry.d.ts +7 -3
  263. package/dist/serve/worker/entry.d.ts.map +1 -1
  264. package/dist/serve/worker/entry.js +7 -3
  265. package/dist/serve/worker/entry.js.map +1 -1
  266. package/dist/serve/worker/host/core.d.ts +9 -5
  267. package/dist/serve/worker/host/core.d.ts.map +1 -1
  268. package/dist/serve/worker/host/core.js +33 -8
  269. package/dist/serve/worker/host/core.js.map +1 -1
  270. package/dist/serve/worker/host/dispatch.d.ts.map +1 -1
  271. package/dist/serve/worker/host/dispatch.js +9 -2
  272. package/dist/serve/worker/host/dispatch.js.map +1 -1
  273. package/dist/serve/worker/host/studio.d.ts +1 -1
  274. package/dist/serve/worker/host/studio.d.ts.map +1 -1
  275. package/dist/serve/worker/host/studio.js +36 -1
  276. package/dist/serve/worker/host/studio.js.map +1 -1
  277. package/dist/serve/worker/host/subscriptions.d.ts.map +1 -1
  278. package/dist/serve/worker/host/subscriptions.js +27 -7
  279. package/dist/serve/worker/host/subscriptions.js.map +1 -1
  280. package/dist/serve/worker/host-context.d.ts +15 -0
  281. package/dist/serve/worker/host-context.d.ts.map +1 -1
  282. package/dist/serve/worker/host-context.js +10 -0
  283. package/dist/serve/worker/host-context.js.map +1 -1
  284. package/dist/serve/worker/host-messaging.d.ts.map +1 -1
  285. package/dist/serve/worker/host-messaging.js +9 -2
  286. package/dist/serve/worker/host-messaging.js.map +1 -1
  287. package/dist/serve/worker/index.d.ts +1 -1
  288. package/dist/serve/worker/index.d.ts.map +1 -1
  289. package/dist/serve/worker/index.js +2 -0
  290. package/dist/serve/worker/index.js.map +1 -1
  291. package/dist/serve/worker/protocol.d.ts +25 -3
  292. package/dist/serve/worker/protocol.d.ts.map +1 -1
  293. package/dist/serve/worker/protocol.js.map +1 -1
  294. package/dist/serve/worker/serve-init.d.ts +23 -37
  295. package/dist/serve/worker/serve-init.d.ts.map +1 -1
  296. package/dist/serve/worker/serve-init.js +95 -172
  297. package/dist/serve/worker/serve-init.js.map +1 -1
  298. package/dist/vite.d.ts +4 -4
  299. package/dist/vite.d.ts.map +1 -1
  300. package/dist/vite.js +3 -3
  301. package/dist/vite.js.map +1 -1
  302. package/package.json +8 -4
  303. package/dist/serve/studio-ui/assets/index-BvtQIpGn.js +0 -1211
  304. package/dist/serve/studio-ui/assets/seed-3DMedLL3.js +0 -2
@@ -1,6 +1,7 @@
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/firestore · Pyric Studio</title><meta name="description" content="Published declarations for @pyric/ui/firestore."><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_.DPUwShm2.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>Get started</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/get-started/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/get-started/how-the-swap-works/"> How the swap works </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Build</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/build/authentication/"> Authentication </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-firestore/"> Cloud Firestore </a> </li><li> <a href="/__pyric/ui/docs/build/realtime-database/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-storage/"> Cloud Storage </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-messaging/"> Cloud Messaging </a> </li><li> <a href="/__pyric/ui/docs/build/ai-logic/"> AI Logic </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Secure &amp; debug</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/secure/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/secure/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/secure/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/secure/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/secure/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/secure/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/secure/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/secure/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Observe &amp; shape</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/observe/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/observe/shape-your-data/"> Seed, snapshot, replay </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Ship &amp; test</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/ship/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Work with an agent</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/agent/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/agent/work-with-an-agent/"> Use the MCP tools </a> </li><li> <a href="/__pyric/ui/docs/agent/watch-and-review/"> Watch in Pyric Studio </a> </li> </ul> </div> </div> </details><a class="docs-nav-toplink" href="/__pyric/ui/docs/trust/versioning-and-compatibility/"> Trust </a><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/conformance-scores/"> Public API coverage </a> </li><li> <a href="/__pyric/ui/docs/trust/how-we-know-it-matches-firebase/"> How we know it matches Firebase </a> </li><li> <a href="/__pyric/ui/docs/app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/functions-rtdb-compat/"> Functions · RTDB </a> </li><li> <a href="/__pyric/ui/docs/rules-compat/"> Rules </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" open> <summary>Reference</summary> <div class="docs-nav-group-body docs-nav-group-body--reference"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/api-reference/"> API reference </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-app-reference-api/"> pyric/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-reference-api/"> pyric/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-reference-api/"> pyric/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-reference-api/"> pyric/ai </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-scripting-reference-api/"> pyric/ai/scripting </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-reference-api/"> pyric/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-reference-api/"> pyric/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-reference-api/"> pyric/messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-sw-reference-api/"> pyric/messaging/sw </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-reference-api/"> pyric/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-values-reference-api/"> pyric/firestore-values </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-reference-api/"> pyric/sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-firestore-reference-api/"> pyric/sandbox/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-database-reference-api/"> pyric/sandbox/database </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric-admin</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-admin-app-reference-api/"> pyric-admin/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore-reference-api/"> pyric-admin/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth-reference-api/"> pyric-admin/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database-reference-api/"> pyric-admin/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage-reference-api/"> pyric-admin/storage </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">create-pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/create-pyric-reference-api/"> create-pyric </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/cli</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-credentials-node-reference-api/"> @pyric/cli/credentials/node </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-verify-reference-api/"> @pyric/cli/verify </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-reference-api/"> @pyric/cli/conformance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-browser-reference-api/"> @pyric/cli/conformance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-reference-api/"> @pyric/cli/assurance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-browser-reference-api/"> @pyric/cli/assurance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-reference-api/"> @pyric/cli/bridge </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-client-reference-api/"> @pyric/cli/bridge/client </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-discover-reference-api/"> @pyric/cli/discover </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-vite-reference-api/"> @pyric/cli/vite </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-serve-worker-reference-api/"> @pyric/cli/serve/worker </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-remote-reference-api/"> @pyric/cli/remote </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-reference-api/"> @pyric/cli/register </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/ui</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-ui-auth-reference-api/"> @pyric/ui/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-auth-hooks-reference-api/"> @pyric/ui/auth/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-primitives-reference-api/"> @pyric/ui/primitives </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-reference-api/" aria-current="page"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/"> @pyric/ui/firestore/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rtdb-reference-api/"> @pyric/ui/rtdb </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-reference-api/"> @pyric/ui/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-hooks-reference-api/"> @pyric/ui/storage/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-reference-api/"> @pyric/ui/traffic </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-hooks-reference-api/"> @pyric/ui/traffic/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-reference-api/"> @pyric/ui/events </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-hooks-reference-api/"> @pyric/ui/events/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-agents-reference-api/"> @pyric/ui/agents </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-reference-api/"> @pyric/ui/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-hooks-reference-api/"> @pyric/ui/rules/hooks </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-get-started"> <summary>Get started</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/get-started/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/get-started/how-the-swap-works/"> How the swap works </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-build"> <summary>Build</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/build/authentication/"> Authentication </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-firestore/"> Cloud Firestore </a> </li><li> <a href="/__pyric/ui/docs/build/realtime-database/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-storage/"> Cloud Storage </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-messaging/"> Cloud Messaging </a> </li><li> <a href="/__pyric/ui/docs/build/ai-logic/"> AI Logic </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-secure-debug"> <summary>Secure &amp; debug</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/secure/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/secure/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/secure/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/secure/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/secure/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/secure/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/secure/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/secure/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-observe-shape"> <summary>Observe &amp; shape</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/observe/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/observe/shape-your-data/"> Seed, snapshot, replay </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-ship-test"> <summary>Ship &amp; test</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/ship/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-work-with-an-agent"> <summary>Work with an agent</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/agent/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/agent/work-with-an-agent/"> Use the MCP tools </a> </li><li> <a href="/__pyric/ui/docs/agent/watch-and-review/"> Watch in Pyric Studio </a> </li> </ul> </div> </div> </details><a class="docs-nav-toplink" href="/__pyric/ui/docs/trust/versioning-and-compatibility/" id="nav-group-trust"> Trust </a><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/conformance-scores/"> Public API coverage </a> </li><li> <a href="/__pyric/ui/docs/trust/how-we-know-it-matches-firebase/"> How we know it matches Firebase </a> </li><li> <a href="/__pyric/ui/docs/app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/functions-rtdb-compat/"> Functions · RTDB </a> </li><li> <a href="/__pyric/ui/docs/rules-compat/"> Rules </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 docs-nav-group-body--reference"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/api-reference/"> API reference </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-app-reference-api/"> pyric/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-reference-api/"> pyric/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-reference-api/"> pyric/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-reference-api/"> pyric/ai </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-scripting-reference-api/"> pyric/ai/scripting </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-reference-api/"> pyric/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-reference-api/"> pyric/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-reference-api/"> pyric/messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-sw-reference-api/"> pyric/messaging/sw </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-reference-api/"> pyric/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-values-reference-api/"> pyric/firestore-values </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-reference-api/"> pyric/sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-firestore-reference-api/"> pyric/sandbox/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-database-reference-api/"> pyric/sandbox/database </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric-admin</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-admin-app-reference-api/"> pyric-admin/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore-reference-api/"> pyric-admin/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth-reference-api/"> pyric-admin/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database-reference-api/"> pyric-admin/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage-reference-api/"> pyric-admin/storage </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">create-pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/create-pyric-reference-api/"> create-pyric </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/cli</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-credentials-node-reference-api/"> @pyric/cli/credentials/node </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-verify-reference-api/"> @pyric/cli/verify </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-reference-api/"> @pyric/cli/conformance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-browser-reference-api/"> @pyric/cli/conformance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-reference-api/"> @pyric/cli/assurance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-browser-reference-api/"> @pyric/cli/assurance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-reference-api/"> @pyric/cli/bridge </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-client-reference-api/"> @pyric/cli/bridge/client </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-discover-reference-api/"> @pyric/cli/discover </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-vite-reference-api/"> @pyric/cli/vite </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-serve-worker-reference-api/"> @pyric/cli/serve/worker </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-remote-reference-api/"> @pyric/cli/remote </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-reference-api/"> @pyric/cli/register </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/ui</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-ui-auth-reference-api/"> @pyric/ui/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-auth-hooks-reference-api/"> @pyric/ui/auth/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-primitives-reference-api/"> @pyric/ui/primitives </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-reference-api/" aria-current="page"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/"> @pyric/ui/firestore/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rtdb-reference-api/"> @pyric/ui/rtdb </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-reference-api/"> @pyric/ui/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-hooks-reference-api/"> @pyric/ui/storage/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-reference-api/"> @pyric/ui/traffic </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-hooks-reference-api/"> @pyric/ui/traffic/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-reference-api/"> @pyric/ui/events </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-hooks-reference-api/"> @pyric/ui/events/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-agents-reference-api/"> @pyric/ui/agents </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-reference-api/"> @pyric/ui/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-hooks-reference-api/"> @pyric/ui/rules/hooks </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/firestore</span> </li> </ol> </nav> <header class="api-reference-header"> <p class="api-reference-kicker">API reference</p> <h1><code>@pyric/ui/firestore</code></h1> <p class="api-reference-meta"> 86 published symbols from <code>@pyric/ui</code> </p> <p class="api-reference-source">
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/firestore · Pyric Studio</title><meta name="description" content="Published declarations for @pyric/ui/firestore."><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_.CXh9yTP1.css">
2
+ <link rel="stylesheet" href="/__pyric/ui/_astro/_slug_.DUci-duz.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>Get started</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/get-started/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/get-started/how-the-swap-works/"> How the swap works </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Build</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/build/authentication/"> Authentication </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-firestore/"> Cloud Firestore </a> </li><li> <a href="/__pyric/ui/docs/build/realtime-database/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-storage/"> Cloud Storage </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-messaging/"> Cloud Messaging </a> </li><li> <a href="/__pyric/ui/docs/build/ai-logic/"> AI Logic </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Secure &amp; debug</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/secure/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/secure/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/secure/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/secure/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/secure/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/secure/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/secure/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/secure/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Observe &amp; shape</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/observe/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/observe/shape-your-data/"> Seed, snapshot, replay </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Ship &amp; test</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/ship/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Work with an agent</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/agent/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/agent/work-with-an-agent/"> Use the MCP tools </a> </li><li> <a href="/__pyric/ui/docs/agent/watch-and-review/"> Watch in Pyric Studio </a> </li> </ul> </div> </div> </details><a class="docs-nav-toplink" href="/__pyric/ui/docs/trust/versioning-and-compatibility/"> Trust </a><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/conformance-scores/"> Public API coverage </a> </li><li> <a href="/__pyric/ui/docs/trust/how-we-know-it-matches-firebase/"> How we know it matches Firebase </a> </li><li> <a href="/__pyric/ui/docs/app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/functions-rtdb-compat/"> Functions · RTDB </a> </li><li> <a href="/__pyric/ui/docs/rules-compat/"> Rules </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" open> <summary>Reference</summary> <div class="docs-nav-group-body docs-nav-group-body--reference"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/api-reference/"> API reference </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-app-reference-api/"> pyric/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-reference-api/"> pyric/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-reference-api/"> pyric/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-reference-api/"> pyric/ai </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-scripting-reference-api/"> pyric/ai/scripting </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-reference-api/"> pyric/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-reference-api/"> pyric/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-reference-api/"> pyric/messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-sw-reference-api/"> pyric/messaging/sw </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-reference-api/"> pyric/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-values-reference-api/"> pyric/firestore-values </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-reference-api/"> pyric/sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-firestore-reference-api/"> pyric/sandbox/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-database-reference-api/"> pyric/sandbox/database </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric-admin</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-admin-app-reference-api/"> pyric-admin/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore-reference-api/"> pyric-admin/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth-reference-api/"> pyric-admin/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database-reference-api/"> pyric-admin/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage-reference-api/"> pyric-admin/storage </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">create-pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/create-pyric-reference-api/"> create-pyric </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/cli</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-credentials-node-reference-api/"> @pyric/cli/credentials/node </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-verify-reference-api/"> @pyric/cli/verify </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-reference-api/"> @pyric/cli/conformance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-browser-reference-api/"> @pyric/cli/conformance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-docs-reference-api/"> @pyric/cli/conformance/docs </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-reference-api/"> @pyric/cli/assurance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-browser-reference-api/"> @pyric/cli/assurance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-reference-api/"> @pyric/cli/bridge </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-client-reference-api/"> @pyric/cli/bridge/client </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-discover-reference-api/"> @pyric/cli/discover </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-vite-reference-api/"> @pyric/cli/vite </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-serve-worker-reference-api/"> @pyric/cli/serve/worker </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-remote-reference-api/"> @pyric/cli/remote </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-reference-api/"> @pyric/cli/register </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/ui</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-ui-auth-reference-api/"> @pyric/ui/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-auth-hooks-reference-api/"> @pyric/ui/auth/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-primitives-reference-api/"> @pyric/ui/primitives </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-reference-api/" aria-current="page"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/"> @pyric/ui/firestore/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rtdb-reference-api/"> @pyric/ui/rtdb </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-reference-api/"> @pyric/ui/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-hooks-reference-api/"> @pyric/ui/storage/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-reference-api/"> @pyric/ui/traffic </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-hooks-reference-api/"> @pyric/ui/traffic/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-reference-api/"> @pyric/ui/events </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-hooks-reference-api/"> @pyric/ui/events/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-agents-reference-api/"> @pyric/ui/agents </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-reference-api/"> @pyric/ui/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-hooks-reference-api/"> @pyric/ui/rules/hooks </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-get-started"> <summary>Get started</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/get-started/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/get-started/how-the-swap-works/"> How the swap works </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-build"> <summary>Build</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/build/authentication/"> Authentication </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-firestore/"> Cloud Firestore </a> </li><li> <a href="/__pyric/ui/docs/build/realtime-database/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-storage/"> Cloud Storage </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-messaging/"> Cloud Messaging </a> </li><li> <a href="/__pyric/ui/docs/build/ai-logic/"> AI Logic </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-secure-debug"> <summary>Secure &amp; debug</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/secure/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/secure/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/secure/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/secure/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/secure/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/secure/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/secure/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/secure/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-observe-shape"> <summary>Observe &amp; shape</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/observe/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/observe/shape-your-data/"> Seed, snapshot, replay </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-ship-test"> <summary>Ship &amp; test</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/ship/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-work-with-an-agent"> <summary>Work with an agent</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/agent/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/agent/work-with-an-agent/"> Use the MCP tools </a> </li><li> <a href="/__pyric/ui/docs/agent/watch-and-review/"> Watch in Pyric Studio </a> </li> </ul> </div> </div> </details><a class="docs-nav-toplink" href="/__pyric/ui/docs/trust/versioning-and-compatibility/" id="nav-group-trust"> Trust </a><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/conformance-scores/"> Public API coverage </a> </li><li> <a href="/__pyric/ui/docs/trust/how-we-know-it-matches-firebase/"> How we know it matches Firebase </a> </li><li> <a href="/__pyric/ui/docs/app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/functions-rtdb-compat/"> Functions · RTDB </a> </li><li> <a href="/__pyric/ui/docs/rules-compat/"> Rules </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 docs-nav-group-body--reference"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/api-reference/"> API reference </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-app-reference-api/"> pyric/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-reference-api/"> pyric/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-reference-api/"> pyric/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-reference-api/"> pyric/ai </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-scripting-reference-api/"> pyric/ai/scripting </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-reference-api/"> pyric/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-reference-api/"> pyric/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-reference-api/"> pyric/messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-sw-reference-api/"> pyric/messaging/sw </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-reference-api/"> pyric/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-values-reference-api/"> pyric/firestore-values </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-reference-api/"> pyric/sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-firestore-reference-api/"> pyric/sandbox/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-database-reference-api/"> pyric/sandbox/database </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric-admin</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-admin-app-reference-api/"> pyric-admin/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore-reference-api/"> pyric-admin/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth-reference-api/"> pyric-admin/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database-reference-api/"> pyric-admin/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage-reference-api/"> pyric-admin/storage </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">create-pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/create-pyric-reference-api/"> create-pyric </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/cli</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-credentials-node-reference-api/"> @pyric/cli/credentials/node </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-verify-reference-api/"> @pyric/cli/verify </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-reference-api/"> @pyric/cli/conformance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-browser-reference-api/"> @pyric/cli/conformance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-docs-reference-api/"> @pyric/cli/conformance/docs </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-reference-api/"> @pyric/cli/assurance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-browser-reference-api/"> @pyric/cli/assurance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-reference-api/"> @pyric/cli/bridge </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-client-reference-api/"> @pyric/cli/bridge/client </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-discover-reference-api/"> @pyric/cli/discover </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-vite-reference-api/"> @pyric/cli/vite </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-serve-worker-reference-api/"> @pyric/cli/serve/worker </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-remote-reference-api/"> @pyric/cli/remote </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-reference-api/"> @pyric/cli/register </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/ui</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-ui-auth-reference-api/"> @pyric/ui/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-auth-hooks-reference-api/"> @pyric/ui/auth/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-primitives-reference-api/"> @pyric/ui/primitives </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-reference-api/" aria-current="page"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/"> @pyric/ui/firestore/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rtdb-reference-api/"> @pyric/ui/rtdb </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-reference-api/"> @pyric/ui/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-hooks-reference-api/"> @pyric/ui/storage/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-reference-api/"> @pyric/ui/traffic </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-hooks-reference-api/"> @pyric/ui/traffic/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-reference-api/"> @pyric/ui/events </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-hooks-reference-api/"> @pyric/ui/events/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-agents-reference-api/"> @pyric/ui/agents </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-reference-api/"> @pyric/ui/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-hooks-reference-api/"> @pyric/ui/rules/hooks </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/firestore</span> </li> </ol> </nav> <header class="api-reference-header"> <p class="api-reference-kicker">API reference</p> <h1><code>@pyric/ui/firestore</code></h1> <p class="api-reference-meta"> 86 published symbols from <code>@pyric/ui</code> </p> <p class="api-reference-source">
2
3
  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
+ </p> </header> <article class="prose api-reference-body"> <!-- Generated from published package declarations via TypeDoc. Rendered by the api-reference content loader. -->
4
5
  <h2 id="interfaces">Interfaces</h2>
5
6
  <p><a id="collectionlistprops"></a></p>
6
7
  <h3 id="collectionlistprops">CollectionListProps</h3>
@@ -45,7 +46,7 @@ Generated from the TypeScript declarations shipped at this import path.
45
46
 
46
47
 
47
48
 
48
- <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"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="collections"></a> <code>collections</code></td><td align="left"><code>CollectionReference</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">Optional empty-state node. Rendered when <code>collections.length</code> is 0 and the list isn’t loading.</td></tr><tr><td align="left"><a id="error"></a> <code>error?</code></td><td align="left"><code>Error</code></td><td align="left">-</td></tr><tr><td align="left"><a id="isloading"></a> <code>isLoading?</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="onselect"></a> <code>onSelect?</code></td><td align="left">(<code>collection</code>: <code>CollectionReference</code>) => <code>void</code></td><td align="left">Fired when a list item is clicked. Consumer wires navigation.</td></tr></tbody></table></div>
49
+ <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"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="collections"></a> <code>collections</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#collectionreference"><code>CollectionReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>>[]</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">Optional empty-state node. Rendered when <code>collections.length</code> is 0 and the list isn’t loading.</td></tr><tr><td align="left"><a id="error"></a> <code>error?</code></td><td align="left"><code>Error</code></td><td align="left">-</td></tr><tr><td align="left"><a id="isloading"></a> <code>isLoading?</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="onselect"></a> <code>onSelect?</code></td><td align="left">(<code>collection</code>: <a href="/docs/pyric-firestore-reference-api/#collectionreference"><code>CollectionReference</code></a>) => <code>void</code></td><td align="left">Fired when a list item is clicked. Consumer wires navigation.</td></tr></tbody></table></div>
49
50
  <hr>
50
51
  <p><a id="deletewithconfirmprops"></a></p>
51
52
  <h3 id="deletewithconfirmprops">DeleteWithConfirmProps</h3>
@@ -100,7 +101,7 @@ Generated from the TypeScript declarations shipped at this import path.
100
101
 
101
102
 
102
103
 
103
- <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.</td></tr><tr><td align="left"><a id="classname-1"></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">Label on the destructive button.</td></tr><tr><td align="left"><a id="impl"></a> <code>impl</code></td><td align="left"><a href="#recursivedeleteimpl"><code>RecursiveDeleteImpl</code></a></td><td align="left">Implementation that walks the tree + deletes. Consumer-supplied. Sandbox-backed apps usually wire <code>pyric/sandbox</code> introspection; production apps usually call a Cloud Function.</td></tr><tr><td align="left"><a id="ondeleted"></a> <code>onDeleted?</code></td><td align="left">() => <code>void</code></td><td align="left">Fired after the delete iterator finishes successfully.</td></tr><tr><td align="left"><a id="rendertrigger"></a> <code>renderTrigger?</code></td><td align="left">(<code>props</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">Optional render override for the trigger button.</td></tr><tr><td align="left"><a id="target"></a> <code>target</code></td><td align="left"><code>any</code></td><td align="left">The doc / collection to delete.</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. Defaults to a sensible derivation from the target’s path.</td></tr></tbody></table></div>
104
+ <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.</td></tr><tr><td align="left"><a id="classname-1"></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">Label on the destructive button.</td></tr><tr><td align="left"><a id="impl"></a> <code>impl</code></td><td align="left"><a href="#recursivedeleteimpl"><code>RecursiveDeleteImpl</code></a></td><td align="left">Implementation that walks the tree + deletes. Consumer-supplied. Sandbox-backed apps usually wire <code>pyric/sandbox</code> introspection; production apps usually call a Cloud Function.</td></tr><tr><td align="left"><a id="ondeleted"></a> <code>onDeleted?</code></td><td align="left">() => <code>void</code></td><td align="left">Fired after the delete iterator finishes successfully.</td></tr><tr><td align="left"><a id="rendertrigger"></a> <code>renderTrigger?</code></td><td align="left">(<code>props</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">Optional render override for the trigger button.</td></tr><tr><td align="left"><a id="target"></a> <code>target</code></td><td align="left">| <a href="/docs/pyric-firestore-reference-api/#documentreference"><code>DocumentReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>> | <a href="/docs/pyric-firestore-reference-api/#collectionreference"><code>CollectionReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>></td><td align="left">The doc / collection to delete.</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. Defaults to a sensible derivation from the target’s path.</td></tr></tbody></table></div>
104
105
  <hr>
105
106
  <p><a id="documenteditorrootprops"></a></p>
106
107
  <h3 id="documenteditorrootprops">DocumentEditorRootProps</h3>
@@ -262,7 +263,7 @@ implement <code>reset</code> and <code>isDirty</code>).</p>
262
263
 
263
264
 
264
265
 
265
- <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="documents"></a> <code>documents</code></td><td align="left"><code>QueryDocumentSnapshot</code>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="emptystate-1"></a> <code>emptyState?</code></td><td align="left"><code>ReactNode</code></td><td align="left">-</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">-</td></tr><tr><td align="left"><a id="hasmore"></a> <code>hasMore?</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="isloading-1"></a> <code>isLoading?</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="onloadmore"></a> <code>onLoadMore?</code></td><td align="left">() => <code>void</code></td><td align="left">Fired when the user requests another page. Wire to the hook’s <code>loadMore</code>. The component will not render a Load More button when this is undefined.</td></tr><tr><td align="left"><a id="onselect-1"></a> <code>onSelect?</code></td><td align="left">(<code>ref</code>: <code>DocumentReference</code>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="renderlabel"></a> <code>renderLabel?</code></td><td align="left">(<code>doc</code>: <code>QueryDocumentSnapshot</code>) => <code>ReactNode</code></td><td align="left">Optional renderer for the row label. Default renders the doc id. Override to show a field value alongside, an icon, etc.</td></tr><tr><td align="left"><a id="renderrowaction"></a> <code>renderRowAction?</code></td><td align="left">(<code>doc</code>: <code>QueryDocumentSnapshot</code>) => <code>ReactNode</code></td><td align="left">Optional per-row action(s), rendered as a SIBLING of the row’s select button inside the entry (not nested in it — so the action carries its own click handling without an invalid button-in-button). Used for row-level affordances like delete.</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 — matches a single-line text button at 13px font + ~10px padding. Pass a function for variable sizing (TanStack measures the actual height via ResizeObserver after the first paint anyway).</td></tr><tr><td align="left"><a id="updatescope"></a> <code>updateScope?</code></td><td align="left"><code>string</code></td><td align="left">Stable collection/query identity used to reset update highlighting when the rendered list changes scope.</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">Pixel height the virtualized scroll container fills. Only applies when <code>documents.length > virtualizeThreshold</code>. Default <code>'60vh'</code> — consumers usually constrain via their layout.</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>&#x3C;VirtualList></code>. Default 100. Set to <code>Infinity</code> to disable (e.g. when measuring layout shifts is more important than scroll perf).</td></tr></tbody></table></div>
266
+ <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="documents"></a> <code>documents</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#querydocumentsnapshot"><code>QueryDocumentSnapshot</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="emptystate-1"></a> <code>emptyState?</code></td><td align="left"><code>ReactNode</code></td><td align="left">-</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">-</td></tr><tr><td align="left"><a id="hasmore"></a> <code>hasMore?</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="isloading-1"></a> <code>isLoading?</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="onloadmore"></a> <code>onLoadMore?</code></td><td align="left">() => <code>void</code></td><td align="left">Fired when the user requests another page. Wire to the hook’s <code>loadMore</code>. The component will not render a Load More button when this is undefined.</td></tr><tr><td align="left"><a id="onselect-1"></a> <code>onSelect?</code></td><td align="left">(<code>ref</code>: <a href="/docs/pyric-firestore-reference-api/#documentreference"><code>DocumentReference</code></a>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="renderlabel"></a> <code>renderLabel?</code></td><td align="left">(<code>doc</code>: <a href="/docs/pyric-firestore-reference-api/#querydocumentsnapshot"><code>QueryDocumentSnapshot</code></a>) => <code>ReactNode</code></td><td align="left">Optional renderer for the row label. Default renders the doc id. Override to show a field value alongside, an icon, etc.</td></tr><tr><td align="left"><a id="renderrowaction"></a> <code>renderRowAction?</code></td><td align="left">(<code>doc</code>: <a href="/docs/pyric-firestore-reference-api/#querydocumentsnapshot"><code>QueryDocumentSnapshot</code></a>) => <code>ReactNode</code></td><td align="left">Optional per-row action(s), rendered as a SIBLING of the row’s select button inside the entry (not nested in it — so the action carries its own click handling without an invalid button-in-button). Used for row-level affordances like delete.</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 — matches a single-line text button at 13px font + ~10px padding. Pass a function for variable sizing (TanStack measures the actual height via ResizeObserver after the first paint anyway).</td></tr><tr><td align="left"><a id="updatescope"></a> <code>updateScope?</code></td><td align="left"><code>string</code></td><td align="left">Stable collection/query identity used to reset update highlighting when the rendered list changes scope.</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">Pixel height the virtualized scroll container fills. Only applies when <code>documents.length > virtualizeThreshold</code>. Default <code>'60vh'</code> — consumers usually constrain via their layout.</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>&#x3C;VirtualList></code>. Default 100. Set to <code>Infinity</code> to disable (e.g. when measuring layout shifts is more important than scroll perf).</td></tr></tbody></table></div>
266
267
  <hr>
267
268
  <p><a id="documentpreviewprops"></a></p>
268
269
  <h3 id="documentpreviewprops">DocumentPreviewProps</h3>
@@ -322,7 +323,7 @@ implement <code>reset</code> and <code>isDirty</code>).</p>
322
323
 
323
324
 
324
325
 
325
- <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-4"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">Forwarded to the root <code>&#x3C;div></code>.</td></tr><tr><td align="left"><a id="documentref"></a> <code>documentRef?</code></td><td align="left"><code>any</code></td><td align="left">The document’s own reference. Required to surface its subcollections — <code>DocumentSnapshot</code> (as typed by <code>pyric/firestore</code>) doesn’t expose <code>.ref</code>, so the consumer threads the ref it already holds from fetching the doc. Without it (or without <a href="#listsubcollections">listSubcollections</a>) the Subcollections section is omitted.</td></tr><tr><td align="left"><a id="emptystate-2"></a> <code>emptyState?</code></td><td align="left"><code>ReactNode</code></td><td align="left">Content rendered when the snapshot is missing or <code>!exists()</code>. Defaults to <code>null</code> (renders nothing).</td></tr><tr><td align="left"><a id="fieldeditors-1"></a> <code>fieldEditors?</code></td><td align="left"><a href="#fieldeditorregistry"><code>FieldEditorRegistry</code></a></td><td align="left">Override or extend the built-in field editors. Merged on top of <a href="#defaultfieldeditors">defaultFieldEditors</a> — only the keys you provide override.</td></tr><tr><td align="left"><a id="firestore"></a> <code>firestore?</code></td><td align="left"><code>Firestore</code></td><td align="left">Firestore handle passed to <a href="#listsubcollections">listSubcollections</a>. Required alongside <code>documentRef</code> + <code>listSubcollections</code> to surface the Subcollections section (the same explicit-handle shape <code>ReferencePicker</code> uses).</td></tr><tr><td align="left"><a id="listsubcollections"></a> <code>listSubcollections?</code></td><td align="left"><a href="#listsubcollections-2"><code>ListSubcollections</code></a></td><td align="left">Injected lister for the document’s subcollections. The modular Web SDK has no client-side <code>listCollections</code>; sandbox-backed apps wire <code>pyric/sandbox</code>’s in-process listing, production apps pass a known list or a server proxy. Same shape <code>ReferencePicker</code> / <code>useCollectionList</code> use. Omit to hide the Subcollections section.</td></tr><tr><td align="left"><a id="onreferenceclick"></a> <code>onReferenceClick?</code></td><td align="left">(<code>ref</code>: <code>DocumentReference</code>) => <code>void</code></td><td align="left">Fired when a reference field is clicked. When supplied, the reference Display renders as an interactive <code>&#x3C;button></code> (with <code>data-pyric-clickable</code>); when omitted, it stays inert as a <code>&#x3C;span></code>. Consumers wire navigation here — the library does not depend on a router.</td></tr><tr><td align="left"><a id="onsubcollectionclick"></a> <code>onSubcollectionClick?</code></td><td align="left">(<code>collection</code>: <code>CollectionReference</code>) => <code>void</code></td><td align="left">Fired when a subcollection’s drill affordance is activated. Receives the subcollection’s <code>CollectionReference</code> (its <code>.path</code> is the navigate target). Consumers wire navigation here.</td></tr><tr><td align="left"><a id="snapshot"></a> <code>snapshot</code></td><td align="left"><code>any</code></td><td align="left">Snapshot from <code>useFirestoreDoc</code> or <code>getDoc</code>. When <code>null</code> / <code>undefined</code>, renders <a href="#emptystate-2">emptyState</a>.</td></tr></tbody></table></div>
326
+ <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-4"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">Forwarded to the root <code>&#x3C;div></code>.</td></tr><tr><td align="left"><a id="documentref"></a> <code>documentRef?</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#documentreference"><code>DocumentReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>></td><td align="left">The document’s own reference. Required to surface its subcollections — <code>DocumentSnapshot</code> (as typed by <code>pyric/firestore</code>) doesn’t expose <code>.ref</code>, so the consumer threads the ref it already holds from fetching the doc. Without it (or without <a href="#listsubcollections">listSubcollections</a>) the Subcollections section is omitted.</td></tr><tr><td align="left"><a id="emptystate-2"></a> <code>emptyState?</code></td><td align="left"><code>ReactNode</code></td><td align="left">Content rendered when the snapshot is missing or <code>!exists()</code>. Defaults to <code>null</code> (renders nothing).</td></tr><tr><td align="left"><a id="fieldeditors-1"></a> <code>fieldEditors?</code></td><td align="left"><a href="#fieldeditorregistry"><code>FieldEditorRegistry</code></a></td><td align="left">Override or extend the built-in field editors. Merged on top of <a href="#defaultfieldeditors">defaultFieldEditors</a> — only the keys you provide override.</td></tr><tr><td align="left"><a id="firestore"></a> <code>firestore?</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#firestore"><code>Firestore</code></a></td><td align="left">Firestore handle passed to <a href="#listsubcollections">listSubcollections</a>. Required alongside <code>documentRef</code> + <code>listSubcollections</code> to surface the Subcollections section (the same explicit-handle shape <code>ReferencePicker</code> uses).</td></tr><tr><td align="left"><a id="listsubcollections"></a> <code>listSubcollections?</code></td><td align="left"><a href="#listsubcollections-2"><code>ListSubcollections</code></a></td><td align="left">Injected lister for the document’s subcollections. The modular Web SDK has no client-side <code>listCollections</code>; sandbox-backed apps wire <code>pyric/sandbox</code>’s in-process listing, production apps pass a known list or a server proxy. Same shape <code>ReferencePicker</code> / <code>useCollectionList</code> use. Omit to hide the Subcollections section.</td></tr><tr><td align="left"><a id="onreferenceclick"></a> <code>onReferenceClick?</code></td><td align="left">(<code>ref</code>: <a href="/docs/pyric-firestore-reference-api/#documentreference"><code>DocumentReference</code></a>) => <code>void</code></td><td align="left">Fired when a reference field is clicked. When supplied, the reference Display renders as an interactive <code>&#x3C;button></code> (with <code>data-pyric-clickable</code>); when omitted, it stays inert as a <code>&#x3C;span></code>. Consumers wire navigation here — the library does not depend on a router.</td></tr><tr><td align="left"><a id="onsubcollectionclick"></a> <code>onSubcollectionClick?</code></td><td align="left">(<code>collection</code>: <a href="/docs/pyric-firestore-reference-api/#collectionreference"><code>CollectionReference</code></a>) => <code>void</code></td><td align="left">Fired when a subcollection’s drill affordance is activated. Receives the subcollection’s <code>CollectionReference</code> (its <code>.path</code> is the navigate target). Consumers wire navigation here.</td></tr><tr><td align="left"><a id="snapshot"></a> <code>snapshot</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#documentsnapshot"><code>DocumentSnapshot</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>></td><td align="left">Snapshot from <code>useFirestoreDoc</code> or <code>getDoc</code>. When <code>null</code> / <code>undefined</code>, renders <a href="#emptystate-2">emptyState</a>.</td></tr></tbody></table></div>
326
327
  <hr>
327
328
  <p><a id="editortree"></a></p>
328
329
  <h3 id="editortree">EditorTree</h3>
@@ -702,7 +703,7 @@ a map key is always a chosen id).</p>
702
703
 
703
704
 
704
705
 
705
- <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="addcondition"></a> <code>addCondition</code></td><td align="left">(<code>c?</code>: <code>Partial</code>&#x3C;<code>Omit</code>&#x3C;<a href="#querycondition"><code>QueryCondition</code></a>, <code>"id"</code>>>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="buildquery"></a> <code>buildQuery</code></td><td align="left">(<code>base</code>: <code>any</code>) => <code>Query</code></td><td align="left">Compose the state into a Firestore <code>Query</code>. Returns the base collection when there are no conditions / orderBy / limit. Conditions with empty <code>field</code> are skipped — the builder UI lets users add a row before they’ve filled it in.</td></tr><tr><td align="left"><a id="removecondition"></a> <code>removeCondition</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">-</td></tr><tr><td align="left"><a id="setlimit"></a> <code>setLimit</code></td><td align="left">(<code>limit?</code>: <code>number</code>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="setorderby"></a> <code>setOrderBy</code></td><td align="left">(<code>orderBy?</code>: { <code>direction</code>: <code>OrderDirection</code>; <code>field</code>: <code>string</code>; }) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="updatecondition"></a> <code>updateCondition</code></td><td align="left">(<code>id</code>: <code>string</code>, <code>patch</code>: <code>Partial</code>&#x3C;<code>Omit</code>&#x3C;<a href="#querycondition"><code>QueryCondition</code></a>, <code>"id"</code>>>) => <code>void</code></td><td align="left">-</td></tr></tbody></table></div>
706
+ <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="addcondition"></a> <code>addCondition</code></td><td align="left">(<code>c?</code>: <code>Partial</code>&#x3C;<code>Omit</code>&#x3C;<a href="#querycondition"><code>QueryCondition</code></a>, <code>"id"</code>>>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="buildquery"></a> <code>buildQuery</code></td><td align="left">(<code>base</code>: | <a href="/docs/pyric-firestore-reference-api/#query"><code>Query</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>> | <a href="/docs/pyric-firestore-reference-api/#collectionreference"><code>CollectionReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>>) => <a href="/docs/pyric-firestore-reference-api/#query"><code>Query</code></a></td><td align="left">Compose the state into a Firestore <code>Query</code>. Returns the base collection when there are no conditions / orderBy / limit. Conditions with empty <code>field</code> are skipped — the builder UI lets users add a row before they’ve filled it in.</td></tr><tr><td align="left"><a id="removecondition"></a> <code>removeCondition</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">-</td></tr><tr><td align="left"><a id="setlimit"></a> <code>setLimit</code></td><td align="left">(<code>limit?</code>: <code>number</code>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="setorderby"></a> <code>setOrderBy</code></td><td align="left">(<code>orderBy?</code>: { <code>direction</code>: <a href="/docs/pyric-firestore-reference-api/#orderdirection"><code>OrderDirection</code></a>; <code>field</code>: <code>string</code>; }) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="updatecondition"></a> <code>updateCondition</code></td><td align="left">(<code>id</code>: <code>string</code>, <code>patch</code>: <code>Partial</code>&#x3C;<code>Omit</code>&#x3C;<a href="#querycondition"><code>QueryCondition</code></a>, <code>"id"</code>>>) => <code>void</code></td><td align="left">-</td></tr></tbody></table></div>
706
707
  <hr>
707
708
  <p><a id="querybuilderprops"></a></p>
708
709
  <h3 id="querybuilderprops">QueryBuilderProps</h3>
@@ -766,7 +767,7 @@ a map key is always a chosen id).</p>
766
767
 
767
768
 
768
769
 
769
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="conditions"></a> <code>conditions</code></td><td align="left"><a href="#querycondition"><code>QueryCondition</code></a>[]</td></tr><tr><td align="left"><a id="limit"></a> <code>limit?</code></td><td align="left"><code>number</code></td></tr><tr><td align="left"><a id="orderby"></a> <code>orderBy?</code></td><td align="left">{ <code>direction</code>: <code>OrderDirection</code>; <code>field</code>: <code>string</code>; }</td></tr><tr><td align="left"><code>orderBy.direction</code></td><td align="left"><code>OrderDirection</code></td></tr><tr><td align="left"><code>orderBy.field</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
770
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="conditions"></a> <code>conditions</code></td><td align="left"><a href="#querycondition"><code>QueryCondition</code></a>[]</td></tr><tr><td align="left"><a id="limit"></a> <code>limit?</code></td><td align="left"><code>number</code></td></tr><tr><td align="left"><a id="orderby"></a> <code>orderBy?</code></td><td align="left">{ <code>direction</code>: <a href="/docs/pyric-firestore-reference-api/#orderdirection"><code>OrderDirection</code></a>; <code>field</code>: <code>string</code>; }</td></tr><tr><td align="left"><code>orderBy.direction</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#orderdirection"><code>OrderDirection</code></a></td></tr><tr><td align="left"><code>orderBy.field</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
770
771
  <hr>
771
772
  <p><a id="querycondition"></a></p>
772
773
  <h3 id="querycondition">QueryCondition</h3>
@@ -796,7 +797,7 @@ a map key is always a chosen id).</p>
796
797
 
797
798
 
798
799
 
799
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="field"></a> <code>field</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><a id="id-2"></a> <code>id</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><a id="op"></a> <code>op</code></td><td align="left"><code>WhereFilterOp</code></td></tr><tr><td align="left"><a id="value-4"></a> <code>value</code></td><td align="left"><code>unknown</code></td></tr></tbody></table></div>
800
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="field"></a> <code>field</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><a id="id-2"></a> <code>id</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><a id="op"></a> <code>op</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#wherefilterop"><code>WhereFilterOp</code></a></td></tr><tr><td align="left"><a id="value-4"></a> <code>value</code></td><td align="left"><code>unknown</code></td></tr></tbody></table></div>
800
801
  <hr>
801
802
  <p><a id="recursivedeleteimpl"></a></p>
802
803
  <h3 id="recursivedeleteimpl">RecursiveDeleteImpl</h3>
@@ -818,7 +819,7 @@ tree; production apps usually call a Cloud Function. Either way,
818
819
 
819
820
 
820
821
 
821
- <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>any</code>) => <code>AsyncIterableIterator</code>&#x3C;<a href="#recursivedeleteprogress"><code>RecursiveDeleteProgress</code></a>></td></tr></tbody></table></div>
822
+ <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>: | <a href="/docs/pyric-firestore-reference-api/#documentreference"><code>DocumentReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>> | <a href="/docs/pyric-firestore-reference-api/#collectionreference"><code>CollectionReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>>) => <code>AsyncIterableIterator</code>&#x3C;<a href="#recursivedeleteprogress"><code>RecursiveDeleteProgress</code></a>></td></tr></tbody></table></div>
822
823
  <hr>
823
824
  <p><a id="recursivedeleteprogress"></a></p>
824
825
  <h3 id="recursivedeleteprogress">RecursiveDeleteProgress</h3>
@@ -888,7 +889,7 @@ tree; production apps usually call a Cloud Function. Either way,
888
889
 
889
890
 
890
891
 
891
- <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-6"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">Forwarded to the root.</td></tr><tr><td align="left"><a id="firestore-1"></a> <code>firestore</code></td><td align="left"><code>Firestore</code></td><td align="left">-</td></tr><tr><td align="left"><a id="initialpath"></a> <code>initialPath?</code></td><td align="left"><code>string</code></td><td align="left">Initial path text.</td></tr><tr><td align="left"><a id="listcollections"></a> <code>listCollections</code></td><td align="left">(<code>firestore</code>: <code>Firestore</code>, <code>parent</code>: <code>any</code>) => <code>Promise</code>&#x3C;<code>CollectionReference</code>[]></td><td align="left">Lister for subcollections. Required — see <code>useReferencePicker</code> docs for the rationale.</td></tr><tr><td align="left"><a id="onpick"></a> <code>onPick?</code></td><td align="left">(<code>ref</code>: <code>DocumentReference</code>) => <code>void</code></td><td align="left">Fired when the user commits a picked reference (browse pick OR a valid manually-typed path with the Commit button).</td></tr><tr><td align="left"><a id="pathlabel"></a> <code>pathLabel?</code></td><td align="left"><code>string</code></td><td align="left">Label for the path text input. Default ‘Document path’.</td></tr></tbody></table></div>
892
+ <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-6"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">Forwarded to the root.</td></tr><tr><td align="left"><a id="firestore-1"></a> <code>firestore</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#firestore"><code>Firestore</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="initialpath"></a> <code>initialPath?</code></td><td align="left"><code>string</code></td><td align="left">Initial path text.</td></tr><tr><td align="left"><a id="listcollections"></a> <code>listCollections</code></td><td align="left">(<code>firestore</code>: <a href="/docs/pyric-firestore-reference-api/#firestore"><code>Firestore</code></a>, <code>parent</code>: <a href="/docs/pyric-firestore-reference-api/#documentreference"><code>DocumentReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>>) => <code>Promise</code>&#x3C;<a href="/docs/pyric-firestore-reference-api/#collectionreference"><code>CollectionReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>>[]></td><td align="left">Lister for subcollections. Required — see <code>useReferencePicker</code> docs for the rationale.</td></tr><tr><td align="left"><a id="onpick"></a> <code>onPick?</code></td><td align="left">(<code>ref</code>: <a href="/docs/pyric-firestore-reference-api/#documentreference"><code>DocumentReference</code></a>) => <code>void</code></td><td align="left">Fired when the user commits a picked reference (browse pick OR a valid manually-typed path with the Commit button).</td></tr><tr><td align="left"><a id="pathlabel"></a> <code>pathLabel?</code></td><td align="left"><code>string</code></td><td align="left">Label for the path text input. Default ‘Document path’.</td></tr></tbody></table></div>
892
893
  <hr>
893
894
  <p><a id="subscriptionstate"></a></p>
894
895
  <h3 id="subscriptionstate">SubscriptionState</h3>
@@ -957,7 +958,7 @@ tree; production apps usually call a Cloud Function. Either way,
957
958
 
958
959
 
959
960
 
960
- <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="firestore-2"></a> <code>firestore</code></td><td align="left"><code>Firestore</code></td><td align="left">-</td></tr><tr><td align="left"><a id="listcollections-1"></a> <code>listCollections</code></td><td align="left">(<code>firestore</code>: <code>Firestore</code>, <code>parent</code>: <code>any</code>) => <code>Promise</code>&#x3C;<code>CollectionReference</code>[]></td><td align="left">Injected collection-listing function. The library doesn’t ship a default — the modular Web SDK doesn’t expose <code>listCollections</code> on the client. Sandbox-backed apps usually wire <code>pyric/sandbox</code>’s in-process listing; production apps either pass a known list (e.g. from a schema) or call a server proxy.</td></tr><tr><td align="left"><a id="parent"></a> <code>parent?</code></td><td align="left"><code>any</code></td><td align="left">Parent document, or <code>null</code>/<code>undefined</code> for root collections.</td></tr></tbody></table></div>
961
+ <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="firestore-2"></a> <code>firestore</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#firestore"><code>Firestore</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="listcollections-1"></a> <code>listCollections</code></td><td align="left">(<code>firestore</code>: <a href="/docs/pyric-firestore-reference-api/#firestore"><code>Firestore</code></a>, <code>parent</code>: <a href="/docs/pyric-firestore-reference-api/#documentreference"><code>DocumentReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>>) => <code>Promise</code>&#x3C;<a href="/docs/pyric-firestore-reference-api/#collectionreference"><code>CollectionReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>>[]></td><td align="left">Injected collection-listing function. The library doesn’t ship a default — the modular Web SDK doesn’t expose <code>listCollections</code> on the client. Sandbox-backed apps usually wire <code>pyric/sandbox</code>’s in-process listing; production apps either pass a known list (e.g. from a schema) or call a server proxy.</td></tr><tr><td align="left"><a id="parent"></a> <code>parent?</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#documentreference"><code>DocumentReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>></td><td align="left">Parent document, or <code>null</code>/<code>undefined</code> for root collections.</td></tr></tbody></table></div>
961
962
  <hr>
962
963
  <p><a id="usecollectionlistresult"></a></p>
963
964
  <h3 id="usecollectionlistresult">UseCollectionListResult</h3>
@@ -997,7 +998,7 @@ tree; production apps usually call a Cloud Function. Either way,
997
998
 
998
999
 
999
1000
 
1000
- <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="collections-1"></a> <code>collections</code></td><td align="left"><code>CollectionReference</code>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="createcollection"></a> <code>createCollection</code></td><td align="left">(<code>collectionId</code>: <code>string</code>, <code>firstDoc</code>: { <code>data</code>: <code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>>; <code>id</code>: <code>string</code>; }) => <code>Promise</code>&#x3C;<code>DocumentReference</code>></td><td align="left">Create a new collection by writing its first document. Firestore collections don’t exist independently of their documents — <code>setDoc</code> on the first child path materializes the collection.</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">-</td></tr><tr><td align="left"><a id="isloading-3"></a> <code>isLoading</code></td><td align="left"><code>boolean</code></td><td align="left">-</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 the listing function.</td></tr></tbody></table></div>
1001
+ <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="collections-1"></a> <code>collections</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#collectionreference"><code>CollectionReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="createcollection"></a> <code>createCollection</code></td><td align="left">(<code>collectionId</code>: <code>string</code>, <code>firstDoc</code>: { <code>data</code>: <code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>>; <code>id</code>: <code>string</code>; }) => <code>Promise</code>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentreference"><code>DocumentReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>>></td><td align="left">Create a new collection by writing its first document. Firestore collections don’t exist independently of their documents — <code>setDoc</code> on the first child path materializes the collection.</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">-</td></tr><tr><td align="left"><a id="isloading-3"></a> <code>isLoading</code></td><td align="left"><code>boolean</code></td><td align="left">-</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 the listing function.</td></tr></tbody></table></div>
1001
1002
  <hr>
1002
1003
  <p><a id="usedocumenteditoroptions"></a></p>
1003
1004
  <h3 id="usedocumenteditoroptions">UseDocumentEditorOptions</h3>
@@ -1159,7 +1160,7 @@ implement <code>reset</code> and <code>isDirty</code>).</p>
1159
1160
 
1160
1161
 
1161
1162
 
1162
- <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="collection"></a> <code>collection</code></td><td align="left"><code>CollectionReference</code></td><td align="left">-</td></tr><tr><td align="left"><a id="mode"></a> <code>mode?</code></td><td align="left"><code>"paged"</code> | <code>"live"</code></td><td align="left"><code>paged</code> preserves the historical get-based cursor behavior. <code>live</code> keeps the currently requested window under an <code>onSnapshot</code> subscription and grows that window when <code>loadMore</code> is requested. Default <code>paged</code>.</td></tr><tr><td align="left"><a id="pagesize"></a> <code>pageSize?</code></td><td align="left"><code>number</code></td><td align="left">Page size for cursor-based pagination. Default 50.</td></tr><tr><td align="left"><a id="query"></a> <code>query?</code></td><td align="left"><code>Query</code></td><td align="left">Optional filter / sort. If omitted, the raw collection is used.</td></tr></tbody></table></div>
1163
+ <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="collection"></a> <code>collection</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#collectionreference"><code>CollectionReference</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="mode"></a> <code>mode?</code></td><td align="left"><code>"paged"</code> | <code>"live"</code></td><td align="left"><code>paged</code> preserves the historical get-based cursor behavior. <code>live</code> keeps the currently requested window under an <code>onSnapshot</code> subscription and grows that window when <code>loadMore</code> is requested. Default <code>paged</code>.</td></tr><tr><td align="left"><a id="pagesize"></a> <code>pageSize?</code></td><td align="left"><code>number</code></td><td align="left">Page size for cursor-based pagination. Default 50.</td></tr><tr><td align="left"><a id="query"></a> <code>query?</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#query"><code>Query</code></a></td><td align="left">Optional filter / sort. If omitted, the raw collection is used.</td></tr></tbody></table></div>
1163
1164
  <hr>
1164
1165
  <p><a id="usedocumentlistresult"></a></p>
1165
1166
  <h3 id="usedocumentlistresult">UseDocumentListResult</h3>
@@ -1219,7 +1220,7 @@ implement <code>reset</code> and <code>isDirty</code>).</p>
1219
1220
 
1220
1221
 
1221
1222
 
1222
- <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="createdocument"></a> <code>createDocument</code></td><td align="left">(<code>id</code>: <code>string</code>, <code>data</code>: <code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>>, <code>opts?</code>: { <code>onExisting?</code>: <code>"overwrite"</code> | <code>"fail"</code>; }) => <code>Promise</code>&#x3C;<code>DocumentReference</code>></td><td align="left">Create a document. If <code>id</code> is null, Firestore generates one via <code>addDoc</code>. With <code>onExisting: 'fail'</code> (CREATE semantics, the admin <code>create()</code> analog) an id that already exists rejects with <code>code: 'already-exists'</code> instead of silently overwriting — checked against the BACKEND (a <code>getDoc</code> probe), not any loaded page, so it is honest beyond pagination. Default: ‘overwrite’ (plain <code>setDoc</code>, the historical behavior).</td></tr><tr><td align="left"><a id="deletedocument"></a> <code>deleteDocument</code></td><td align="left">(<code>ref</code>: <code>DocumentReference</code>) => <code>Promise</code>&#x3C;<code>void</code>></td><td align="left">-</td></tr><tr><td align="left"><a id="documents-1"></a> <code>documents</code></td><td align="left"><code>QueryDocumentSnapshot</code>[]</td><td align="left">-</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">-</td></tr><tr><td align="left"><a id="hasmore-1"></a> <code>hasMore</code></td><td align="left"><code>boolean</code></td><td align="left">True if there might be another page. The hook tracks this via the last fetch’s length === pageSize.</td></tr><tr><td align="left"><a id="isloading-4"></a> <code>isLoading</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="loadmore"></a> <code>loadMore</code></td><td align="left">() => <code>void</code></td><td align="left">Fetch the next page; live mode grows and re-establishes its window.</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-establish the active read/subscription. Useful after the consumer mutates data outside this hook.</td></tr><tr><td align="left"><a id="subscriptiongeneration"></a> <code>subscriptionGeneration</code></td><td align="left"><code>number</code></td><td align="left">Identifies the active live subscription. Consumers that diff result snapshots can include this in their scope so a re-subscription (including load-more) establishes a silent baseline instead of looking like writes.</td></tr></tbody></table></div>
1223
+ <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="createdocument"></a> <code>createDocument</code></td><td align="left">(<code>id</code>: <code>string</code>, <code>data</code>: <code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>>, <code>opts?</code>: { <code>onExisting?</code>: <code>"overwrite"</code> | <code>"fail"</code>; }) => <code>Promise</code>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentreference"><code>DocumentReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>>></td><td align="left">Create a document. If <code>id</code> is null, Firestore generates one via <code>addDoc</code>. With <code>onExisting: 'fail'</code> (CREATE semantics, the admin <code>create()</code> analog) an id that already exists rejects with <code>code: 'already-exists'</code> instead of silently overwriting — checked against the BACKEND (a <code>getDoc</code> probe), not any loaded page, so it is honest beyond pagination. Default: ‘overwrite’ (plain <code>setDoc</code>, the historical behavior).</td></tr><tr><td align="left"><a id="deletedocument"></a> <code>deleteDocument</code></td><td align="left">(<code>ref</code>: <a href="/docs/pyric-firestore-reference-api/#documentreference"><code>DocumentReference</code></a>) => <code>Promise</code>&#x3C;<code>void</code>></td><td align="left">-</td></tr><tr><td align="left"><a id="documents-1"></a> <code>documents</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#querydocumentsnapshot"><code>QueryDocumentSnapshot</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>>[]</td><td align="left">-</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">-</td></tr><tr><td align="left"><a id="hasmore-1"></a> <code>hasMore</code></td><td align="left"><code>boolean</code></td><td align="left">True if there might be another page. The hook tracks this via the last fetch’s length === pageSize.</td></tr><tr><td align="left"><a id="isloading-4"></a> <code>isLoading</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="loadmore"></a> <code>loadMore</code></td><td align="left">() => <code>void</code></td><td align="left">Fetch the next page; live mode grows and re-establishes its window.</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-establish the active read/subscription. Useful after the consumer mutates data outside this hook.</td></tr><tr><td align="left"><a id="subscriptiongeneration"></a> <code>subscriptionGeneration</code></td><td align="left"><code>number</code></td><td align="left">Identifies the active live subscription. Consumers that diff result snapshots can include this in their scope so a re-subscription (including load-more) establishes a silent baseline instead of looking like writes.</td></tr></tbody></table></div>
1223
1224
  <hr>
1224
1225
  <p><a id="usedocumentsubcollectionsoptions"></a></p>
1225
1226
  <h3 id="usedocumentsubcollectionsoptions">UseDocumentSubcollectionsOptions</h3>
@@ -1249,7 +1250,7 @@ implement <code>reset</code> and <code>isDirty</code>).</p>
1249
1250
 
1250
1251
 
1251
1252
 
1252
- <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="documentref-1"></a> <code>documentRef</code></td><td align="left"><code>any</code></td><td align="left">The document whose subcollections to list. When <code>null</code>/<code>undefined</code> the hook stays idle (empty, not loading) — used when the preview has no ref to drill from.</td></tr><tr><td align="left"><a id="firestore-3"></a> <code>firestore</code></td><td align="left"><code>Firestore</code></td><td align="left">-</td></tr><tr><td align="left"><a id="listsubcollections-1"></a> <code>listSubcollections</code></td><td align="left"><a href="#listsubcollections-2"><code>ListSubcollections</code></a></td><td align="left">-</td></tr></tbody></table></div>
1253
+ <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="documentref-1"></a> <code>documentRef</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#documentreference"><code>DocumentReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>></td><td align="left">The document whose subcollections to list. When <code>null</code>/<code>undefined</code> the hook stays idle (empty, not loading) — used when the preview has no ref to drill from.</td></tr><tr><td align="left"><a id="firestore-3"></a> <code>firestore</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#firestore"><code>Firestore</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="listsubcollections-1"></a> <code>listSubcollections</code></td><td align="left"><a href="#listsubcollections-2"><code>ListSubcollections</code></a></td><td align="left">-</td></tr></tbody></table></div>
1253
1254
  <hr>
1254
1255
  <p><a id="usedocumentsubcollectionsresult"></a></p>
1255
1256
  <h3 id="usedocumentsubcollectionsresult">UseDocumentSubcollectionsResult</h3>
@@ -1275,7 +1276,7 @@ implement <code>reset</code> and <code>isDirty</code>).</p>
1275
1276
 
1276
1277
 
1277
1278
 
1278
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="error-7"></a> <code>error</code></td><td align="left"><code>Error</code></td></tr><tr><td align="left"><a id="isloading-5"></a> <code>isLoading</code></td><td align="left"><code>boolean</code></td></tr><tr><td align="left"><a id="subcollections"></a> <code>subcollections</code></td><td align="left"><code>CollectionReference</code>[]</td></tr></tbody></table></div>
1279
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="error-7"></a> <code>error</code></td><td align="left"><code>Error</code></td></tr><tr><td align="left"><a id="isloading-5"></a> <code>isLoading</code></td><td align="left"><code>boolean</code></td></tr><tr><td align="left"><a id="subcollections"></a> <code>subcollections</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#collectionreference"><code>CollectionReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>>[]</td></tr></tbody></table></div>
1279
1280
  <hr>
1280
1281
  <p><a id="usequerybuilderoptions"></a></p>
1281
1282
  <h3 id="usequerybuilderoptions">UseQueryBuilderOptions</h3>
@@ -1330,7 +1331,7 @@ implement <code>reset</code> and <code>isDirty</code>).</p>
1330
1331
 
1331
1332
 
1332
1333
 
1333
- <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>target</code>: <code>any</code>) => <code>Promise</code>&#x3C;<code>void</code>></td><td align="left">Run the delete. Resolves when the iterator signals <code>done</code>.</td></tr><tr><td align="left"><a id="error-8"></a> <code>error</code></td><td align="left"><code>Error</code></td><td align="left">Error thrown by the iterator, if any. Cleared at the start of 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">True while an iteration is in flight.</td></tr><tr><td align="left"><a id="progress"></a> <code>progress</code></td><td align="left"><code>number</code></td><td align="left">Number of nodes deleted in the current/last run.</td></tr></tbody></table></div>
1334
+ <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>target</code>: | <a href="/docs/pyric-firestore-reference-api/#documentreference"><code>DocumentReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>> | <a href="/docs/pyric-firestore-reference-api/#collectionreference"><code>CollectionReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>>) => <code>Promise</code>&#x3C;<code>void</code>></td><td align="left">Run the delete. Resolves when the iterator signals <code>done</code>.</td></tr><tr><td align="left"><a id="error-8"></a> <code>error</code></td><td align="left"><code>Error</code></td><td align="left">Error thrown by the iterator, if any. Cleared at the start of 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">True while an iteration is in flight.</td></tr><tr><td align="left"><a id="progress"></a> <code>progress</code></td><td align="left"><code>number</code></td><td align="left">Number of nodes deleted in the current/last run.</td></tr></tbody></table></div>
1334
1335
  <hr>
1335
1336
  <p><a id="usereferencepickeroptions"></a></p>
1336
1337
  <h3 id="usereferencepickeroptions">UseReferencePickerOptions</h3>
@@ -1365,7 +1366,7 @@ implement <code>reset</code> and <code>isDirty</code>).</p>
1365
1366
 
1366
1367
 
1367
1368
 
1368
- <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="firestore-4"></a> <code>firestore</code></td><td align="left"><code>Firestore</code></td><td align="left">-</td></tr><tr><td align="left"><a id="initialpath-1"></a> <code>initialPath?</code></td><td align="left"><code>string</code></td><td align="left">Initial value to pre-populate the text input + parse.</td></tr><tr><td align="left"><a id="listcollections-2"></a> <code>listCollections</code></td><td align="left">(<code>firestore</code>: <code>Firestore</code>, <code>parent</code>: <code>any</code>) => <code>Promise</code>&#x3C;<code>CollectionReference</code>[]></td><td align="left">Lister for subcollections under a parent (or root when <code>parent == null</code>). The library does not ship a default — see <code>useCollectionList</code> for the same rationale (the modular Web SDK can’t enumerate collections client-side).</td></tr><tr><td align="left"><a id="pagesize-1"></a> <code>pageSize?</code></td><td align="left"><code>number</code></td><td align="left">Default page size for the document list when browsing inside a collection. Default 20.</td></tr></tbody></table></div>
1369
+ <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="firestore-4"></a> <code>firestore</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#firestore"><code>Firestore</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="initialpath-1"></a> <code>initialPath?</code></td><td align="left"><code>string</code></td><td align="left">Initial value to pre-populate the text input + parse.</td></tr><tr><td align="left"><a id="listcollections-2"></a> <code>listCollections</code></td><td align="left">(<code>firestore</code>: <a href="/docs/pyric-firestore-reference-api/#firestore"><code>Firestore</code></a>, <code>parent</code>: <a href="/docs/pyric-firestore-reference-api/#documentreference"><code>DocumentReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>>) => <code>Promise</code>&#x3C;<a href="/docs/pyric-firestore-reference-api/#collectionreference"><code>CollectionReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>>[]></td><td align="left">Lister for subcollections under a parent (or root when <code>parent == null</code>). The library does not ship a default — see <code>useCollectionList</code> for the same rationale (the modular Web SDK can’t enumerate collections client-side).</td></tr><tr><td align="left"><a id="pagesize-1"></a> <code>pageSize?</code></td><td align="left"><code>number</code></td><td align="left">Default page size for the document list when browsing inside a collection. Default 20.</td></tr></tbody></table></div>
1369
1370
  <hr>
1370
1371
  <p><a id="usereferencepickerresult"></a></p>
1371
1372
  <h3 id="usereferencepickerresult">UseReferencePickerResult</h3>
@@ -1450,7 +1451,7 @@ implement <code>reset</code> and <code>isDirty</code>).</p>
1450
1451
 
1451
1452
 
1452
1453
 
1453
- <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="browselocation"></a> <code>browseLocation</code></td><td align="left"><a href="#browselocation-1"><code>BrowseLocation</code></a></td><td align="left">Current browse position in the tree.</td></tr><tr><td align="left"><a id="candrillback"></a> <code>canDrillBack</code></td><td align="left"><code>boolean</code></td><td align="left">Whether <code>drillBack</code> has anywhere to go.</td></tr><tr><td align="left"><a id="clear"></a> <code>clear</code></td><td align="left">() => <code>void</code></td><td align="left">Clear the path input + reset browse to root.</td></tr><tr><td align="left"><a id="collections-2"></a> <code>collections</code></td><td align="left"><code>CollectionReference</code>[]</td><td align="left">Collections available at the current browse level. Populated when <code>browseLocation</code> is <code>root</code> or <code>document</code>.</td></tr><tr><td align="left"><a id="documents-2"></a> <code>documents</code></td><td align="left"><code>QueryDocumentSnapshot</code>[]</td><td align="left">First page of documents in the current collection — populated when <code>browseLocation.kind === 'collection'</code>.</td></tr><tr><td align="left"><a id="drillback"></a> <code>drillBack</code></td><td align="left">() => <code>void</code></td><td align="left">Step back one level. No-op when at root.</td></tr><tr><td align="left"><a id="drillintocollection"></a> <code>drillIntoCollection</code></td><td align="left">(<code>ref</code>: <code>CollectionReference</code>) => <code>void</code></td><td align="left">Drill into a collection — fetches its first page of documents.</td></tr><tr><td align="left"><a id="drillintodocument"></a> <code>drillIntoDocument</code></td><td align="left">(<code>ref</code>: <code>DocumentReference</code>) => <code>void</code></td><td align="left">Drill into a document — fetches its subcollections.</td></tr><tr><td align="left"><a id="error-9"></a> <code>error</code></td><td align="left"><code>string</code></td><td align="left">Parse error, or <code>null</code> when valid.</td></tr><tr><td align="left"><a id="isloading-6"></a> <code>isLoading</code></td><td align="left"><code>boolean</code></td><td align="left">True while a fetch is in flight.</td></tr><tr><td align="left"><a id="pathinput"></a> <code>pathInput</code></td><td align="left"><code>string</code></td><td align="left">Current text input value.</td></tr><tr><td align="left"><a id="pick"></a> <code>pick</code></td><td align="left">(<code>ref</code>: <code>DocumentReference</code>) => <code>void</code></td><td align="left">Commit a chosen reference. Updates <code>pathInput</code> (and therefore the parsed <code>reference</code>).</td></tr><tr><td align="left"><a id="reference"></a> <code>reference</code></td><td align="left"><code>any</code></td><td align="left">Validated <code>DocumentReference</code> parsed from <code>pathInput</code>, or <code>null</code> when the path is empty / invalid.</td></tr><tr><td align="left"><a id="setpathinput"></a> <code>setPathInput</code></td><td align="left">(<code>path</code>: <code>string</code>) => <code>void</code></td><td align="left">Set the text-input value. Parses on every change.</td></tr></tbody></table></div>
1454
+ <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="browselocation"></a> <code>browseLocation</code></td><td align="left"><a href="#browselocation-1"><code>BrowseLocation</code></a></td><td align="left">Current browse position in the tree.</td></tr><tr><td align="left"><a id="candrillback"></a> <code>canDrillBack</code></td><td align="left"><code>boolean</code></td><td align="left">Whether <code>drillBack</code> has anywhere to go.</td></tr><tr><td align="left"><a id="clear"></a> <code>clear</code></td><td align="left">() => <code>void</code></td><td align="left">Clear the path input + reset browse to root.</td></tr><tr><td align="left"><a id="collections-2"></a> <code>collections</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#collectionreference"><code>CollectionReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>>[]</td><td align="left">Collections available at the current browse level. Populated when <code>browseLocation</code> is <code>root</code> or <code>document</code>.</td></tr><tr><td align="left"><a id="documents-2"></a> <code>documents</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#querydocumentsnapshot"><code>QueryDocumentSnapshot</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>>[]</td><td align="left">First page of documents in the current collection — populated when <code>browseLocation.kind === 'collection'</code>.</td></tr><tr><td align="left"><a id="drillback"></a> <code>drillBack</code></td><td align="left">() => <code>void</code></td><td align="left">Step back one level. No-op when at root.</td></tr><tr><td align="left"><a id="drillintocollection"></a> <code>drillIntoCollection</code></td><td align="left">(<code>ref</code>: <a href="/docs/pyric-firestore-reference-api/#collectionreference"><code>CollectionReference</code></a>) => <code>void</code></td><td align="left">Drill into a collection — fetches its first page of documents.</td></tr><tr><td align="left"><a id="drillintodocument"></a> <code>drillIntoDocument</code></td><td align="left">(<code>ref</code>: <a href="/docs/pyric-firestore-reference-api/#documentreference"><code>DocumentReference</code></a>) => <code>void</code></td><td align="left">Drill into a document — fetches its subcollections.</td></tr><tr><td align="left"><a id="error-9"></a> <code>error</code></td><td align="left"><code>string</code></td><td align="left">Parse error, or <code>null</code> when valid.</td></tr><tr><td align="left"><a id="isloading-6"></a> <code>isLoading</code></td><td align="left"><code>boolean</code></td><td align="left">True while a fetch is in flight.</td></tr><tr><td align="left"><a id="pathinput"></a> <code>pathInput</code></td><td align="left"><code>string</code></td><td align="left">Current text input value.</td></tr><tr><td align="left"><a id="pick"></a> <code>pick</code></td><td align="left">(<code>ref</code>: <a href="/docs/pyric-firestore-reference-api/#documentreference"><code>DocumentReference</code></a>) => <code>void</code></td><td align="left">Commit a chosen reference. Updates <code>pathInput</code> (and therefore the parsed <code>reference</code>).</td></tr><tr><td align="left"><a id="reference"></a> <code>reference</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#documentreference"><code>DocumentReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>></td><td align="left">Validated <code>DocumentReference</code> parsed from <code>pathInput</code>, or <code>null</code> when the path is empty / invalid.</td></tr><tr><td align="left"><a id="setpathinput"></a> <code>setPathInput</code></td><td align="left">(<code>path</code>: <code>string</code>) => <code>void</code></td><td align="left">Set the text-input value. Parses on every change.</td></tr></tbody></table></div>
1454
1455
  <hr>
1455
1456
  <p><a id="vectorview"></a></p>
1456
1457
  <h3 id="vectorview">VectorView</h3>
@@ -1681,7 +1682,7 @@ extend the registry but the built-in editors cover these.</p>
1681
1682
  <hr>
1682
1683
  <p><a id="firestoreapi"></a></p>
1683
1684
  <h3 id="firestoreapi">FirestoreApi</h3>
1684
- <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"> FirestoreApi</span><span style="color:#56B6C2"> =</span><span style="color:#E5C07B"> Pick</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">any</span><span style="color:#ABB2BF">,</span></span>
1685
+ <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"> FirestoreApi</span><span style="color:#56B6C2"> =</span><span style="color:#E5C07B"> Pick</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">pyric</span><span style="color:#ABB2BF">-</span><span style="color:#E5C07B">firestore</span><span style="color:#ABB2BF">-</span><span style="color:#E5C07B">reference</span><span style="color:#ABB2BF">-</span><span style="color:#E5C07B">api</span><span style="color:#ABB2BF">,</span></span>
1685
1686
  <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"addDoc"</span></span>
1686
1687
  <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"collection"</span></span>
1687
1688
  <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"deleteDoc"</span></span>
@@ -1736,9 +1737,9 @@ a known schema list).</p>
1736
1737
 
1737
1738
 
1738
1739
 
1739
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>firestore</code></td><td align="left"><code>Firestore</code></td></tr><tr><td align="left"><code>parent</code></td><td align="left"><code>DocumentReference</code></td></tr></tbody></table></div>
1740
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>firestore</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#firestore"><code>Firestore</code></a></td></tr><tr><td align="left"><code>parent</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#documentreference"><code>DocumentReference</code></a></td></tr></tbody></table></div>
1740
1741
  <h4 id="returns">Returns</h4>
1741
- <p><code>Promise</code>&#x3C;<code>CollectionReference</code>[]></p>
1742
+ <p><code>Promise</code>&#x3C;<a href="/docs/pyric-firestore-reference-api/#collectionreference"><code>CollectionReference</code></a>[]></p>
1742
1743
  <hr>
1743
1744
  <p><a id="queryop"></a></p>
1744
1745
  <h3 id="queryop">QueryOp</h3>
@@ -2484,7 +2485,7 @@ read-only (no create — that lives in <code>useCollectionList</code>).</p>
2484
2485
  <hr>
2485
2486
  <p><a id="usefirestorecollection"></a></p>
2486
2487
  <h3 id="usefirestorecollection">useFirestoreCollection()</h3>
2487
- <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"> useFirestoreCollection</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">query</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">any</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">SubscriptionState</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">QuerySnapshot</span><span style="color:#ABB2BF">>;</span></span></code></pre>
2488
+ <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"> useFirestoreCollection</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">query</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Query</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">DocumentData</span><span style="color:#ABB2BF">>): </span><span style="color:#E5C07B">SubscriptionState</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">QuerySnapshot</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">DocumentData</span><span style="color:#ABB2BF">>>;</span></span></code></pre>
2488
2489
  <p>Subscribe to a Firestore query (a <code>Query</code> from <code>pyric/firestore</code>’s
2489
2490
  modular surface, including any <code>CollectionReference</code>, which extends
2490
2491
  <code>Query</code>). Returns <code>{ data, error, isLoading }</code>.</p>
@@ -2506,13 +2507,13 @@ structural identity, so the consumer must memoize at the call site
2506
2507
 
2507
2508
 
2508
2509
 
2509
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>query</code></td><td align="left"><code>any</code></td></tr></tbody></table></div>
2510
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>query</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#query"><code>Query</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>></td></tr></tbody></table></div>
2510
2511
  <h4 id="returns-29">Returns</h4>
2511
- <p><a href="#subscriptionstate"><code>SubscriptionState</code></a>&#x3C;<code>QuerySnapshot</code>></p>
2512
+ <p><a href="#subscriptionstate"><code>SubscriptionState</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#querysnapshot"><code>QuerySnapshot</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>>></p>
2512
2513
  <hr>
2513
2514
  <p><a id="usefirestoredoc"></a></p>
2514
2515
  <h3 id="usefirestoredoc">useFirestoreDoc()</h3>
2515
- <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"> useFirestoreDoc</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">ref</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">any</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">SubscriptionState</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">DocumentSnapshot</span><span style="color:#ABB2BF">>;</span></span></code></pre>
2516
+ <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"> useFirestoreDoc</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">ref</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">DocumentReference</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">DocumentData</span><span style="color:#ABB2BF">>): </span><span style="color:#E5C07B">SubscriptionState</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">DocumentSnapshot</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">DocumentData</span><span style="color:#ABB2BF">>>;</span></span></code></pre>
2516
2517
  <p>Subscribe to a single Firestore document. Returns <code>{ data, error, isLoading }</code>. Null/undefined ref short-circuits to an idle state
2517
2518
  (<code>data: undefined, error: undefined, isLoading: false</code>) — useful
2518
2519
  for conditional rendering before a ref is known.</p>
@@ -2532,9 +2533,9 @@ the call site; this hook’s effect re-runs on identity change.</p>
2532
2533
 
2533
2534
 
2534
2535
 
2535
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>ref</code></td><td align="left"><code>any</code></td></tr></tbody></table></div>
2536
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>ref</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#documentreference"><code>DocumentReference</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>></td></tr></tbody></table></div>
2536
2537
  <h4 id="returns-30">Returns</h4>
2537
- <p><a href="#subscriptionstate"><code>SubscriptionState</code></a>&#x3C;<code>DocumentSnapshot</code>></p>
2538
+ <p><a href="#subscriptionstate"><code>SubscriptionState</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentsnapshot"><code>DocumentSnapshot</code></a>&#x3C;<a href="/docs/pyric-firestore-reference-api/#documentdata"><code>DocumentData</code></a>>></p>
2538
2539
  <hr>
2539
2540
  <p><a id="usequerybuilder"></a></p>
2540
2541
  <h3 id="usequerybuilder">useQueryBuilder()</h3>