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

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 (498) 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 +2 -2
  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 +3 -3
  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 +979 -579
  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-messaging-reference-api/index.html +916 -0
  101. package/dist/serve/docs-ui/docs/pyric-admin-messaging-reference-api.md +706 -0
  102. package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api/index.html +4 -3
  103. package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api.md +2 -3
  104. package/dist/serve/docs-ui/docs/pyric-ai-reference-api/index.html +16 -11
  105. package/dist/serve/docs-ui/docs/pyric-ai-reference-api.md +14 -13
  106. package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api/index.html +4 -3
  107. package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api.md +2 -3
  108. package/dist/serve/docs-ui/docs/pyric-app-reference-api/index.html +7 -2
  109. package/dist/serve/docs-ui/docs/pyric-app-reference-api.md +5 -2
  110. package/dist/serve/docs-ui/docs/pyric-auth-reference-api/index.html +23 -12
  111. package/dist/serve/docs-ui/docs/pyric-auth-reference-api.md +15 -12
  112. package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +10 -48
  113. package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api.md +11 -24
  114. package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api/index.html +87 -97
  115. package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api.md +53 -65
  116. package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api/index.html +14 -15
  117. package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api.md +19 -28
  118. package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api/index.html +4 -3
  119. package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api.md +2 -3
  120. package/dist/serve/docs-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +3 -2
  121. package/dist/serve/docs-ui/docs/pyric-cli-conformance-browser-reference-api.md +1 -2
  122. package/dist/serve/docs-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +51 -0
  123. package/dist/serve/docs-ui/docs/pyric-cli-conformance-docs-reference-api.md +36 -0
  124. package/dist/serve/docs-ui/docs/pyric-cli-conformance-reference-api/index.html +3 -2
  125. package/dist/serve/docs-ui/docs/pyric-cli-conformance-reference-api.md +1 -2
  126. package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api/index.html +3 -2
  127. package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api.md +1 -2
  128. package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api/index.html +3 -2
  129. package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api.md +1 -2
  130. package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api/index.html +3 -2
  131. package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api.md +1 -2
  132. package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api/index.html +1067 -83
  133. package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api.md +1291 -160
  134. package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api/index.html +253 -157
  135. package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api.md +179 -85
  136. package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api/index.html +72 -7
  137. package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api.md +22 -7
  138. package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api/index.html +33 -12
  139. package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api.md +15 -12
  140. package/dist/serve/docs-ui/docs/pyric-database-reference-api/index.html +18 -17
  141. package/dist/serve/docs-ui/docs/pyric-database-reference-api.md +19 -22
  142. package/dist/serve/docs-ui/docs/pyric-firestore-reference-api/index.html +1512 -545
  143. package/dist/serve/docs-ui/docs/pyric-firestore-reference-api.md +1311 -316
  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 +371 -884
  155. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api.md +369 -883
  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 +2 -1
  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 +34 -9
  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/firestore-writes.d.ts.map +1 -1
  274. package/dist/serve/worker/host/firestore-writes.js +3 -2
  275. package/dist/serve/worker/host/firestore-writes.js.map +1 -1
  276. package/dist/serve/worker/host/studio.d.ts +1 -1
  277. package/dist/serve/worker/host/studio.d.ts.map +1 -1
  278. package/dist/serve/worker/host/studio.js +36 -1
  279. package/dist/serve/worker/host/studio.js.map +1 -1
  280. package/dist/serve/worker/host/subscriptions.d.ts.map +1 -1
  281. package/dist/serve/worker/host/subscriptions.js +27 -7
  282. package/dist/serve/worker/host/subscriptions.js.map +1 -1
  283. package/dist/serve/worker/host-context.d.ts +15 -0
  284. package/dist/serve/worker/host-context.d.ts.map +1 -1
  285. package/dist/serve/worker/host-context.js +10 -0
  286. package/dist/serve/worker/host-context.js.map +1 -1
  287. package/dist/serve/worker/host-messaging.d.ts.map +1 -1
  288. package/dist/serve/worker/host-messaging.js +9 -2
  289. package/dist/serve/worker/host-messaging.js.map +1 -1
  290. package/dist/serve/worker/index.d.ts +3 -2
  291. package/dist/serve/worker/index.d.ts.map +1 -1
  292. package/dist/serve/worker/index.js +4 -1
  293. package/dist/serve/worker/index.js.map +1 -1
  294. package/dist/serve/worker/protocol.d.ts +25 -3
  295. package/dist/serve/worker/protocol.d.ts.map +1 -1
  296. package/dist/serve/worker/protocol.js +2 -2
  297. package/dist/serve/worker/protocol.js.map +1 -1
  298. package/dist/serve/worker/serve-init.d.ts +23 -37
  299. package/dist/serve/worker/serve-init.d.ts.map +1 -1
  300. package/dist/serve/worker/serve-init.js +95 -172
  301. package/dist/serve/worker/serve-init.js.map +1 -1
  302. package/dist/vite.d.ts +4 -4
  303. package/dist/vite.d.ts.map +1 -1
  304. package/dist/vite.js +3 -3
  305. package/dist/vite.js.map +1 -1
  306. package/package.json +9 -4
  307. package/src/assurance/.generated/conformance-verdicts.ts +1090 -0
  308. package/src/assurance/attachment.ts +211 -0
  309. package/src/assurance/browser.ts +80 -0
  310. package/src/assurance/campaign.ts +496 -0
  311. package/src/assurance/capabilities.ts +446 -0
  312. package/src/assurance/cases.ts +43 -0
  313. package/src/assurance/index.ts +75 -0
  314. package/src/assurance/runner.ts +885 -0
  315. package/src/assurance/tool-names.ts +15 -0
  316. package/src/assurance/tools.ts +830 -0
  317. package/src/assurance/types.ts +352 -0
  318. package/src/assurance/validation.ts +434 -0
  319. package/src/bridge/client/bridge.ts +550 -0
  320. package/src/bridge/client/dispatch.ts +137 -0
  321. package/src/bridge/client.ts +45 -0
  322. package/src/bridge/protocol.ts +351 -0
  323. package/src/bridge/server/audit.ts +53 -0
  324. package/src/bridge/server/bridge.ts +597 -0
  325. package/src/bridge/server/headless.ts +160 -0
  326. package/src/bridge/server/json-schema-to-zod.ts +108 -0
  327. package/src/bridge/server/local-bridge.ts +66 -0
  328. package/src/bridge/server/logger.ts +50 -0
  329. package/src/bridge/server/mcp-contract.ts +93 -0
  330. package/src/bridge/server/mcp.ts +129 -0
  331. package/src/bridge/server/peer.ts +232 -0
  332. package/src/bridge/server/standalone.ts +347 -0
  333. package/src/bridge/server/tool-metadata.ts +99 -0
  334. package/src/bridge/server.ts +28 -0
  335. package/src/cli/can-i-use.ts +50 -0
  336. package/src/cli/cli.test.ts +493 -0
  337. package/src/cli/database-rules.ts +329 -0
  338. package/src/cli/dev-runner.ts +282 -0
  339. package/src/cli/firebase-json.ts +100 -0
  340. package/src/cli/firestore-indexes.ts +70 -0
  341. package/src/cli/index.ts +425 -0
  342. package/src/cli/init.ts +260 -0
  343. package/src/cli/mcp-proxy.ts +196 -0
  344. package/src/cli/parse-args.ts +80 -0
  345. package/src/cli/rules.ts +259 -0
  346. package/src/cli/scope.ts +67 -0
  347. package/src/cli/serve.ts +996 -0
  348. package/src/cli/service-commands.ts +73 -0
  349. package/src/cli/snapshot.ts +164 -0
  350. package/src/cli/storage-rules.ts +172 -0
  351. package/src/cli/verify.ts +416 -0
  352. package/src/conformance/.generated/can-i-use-browser.ts +113 -0
  353. package/src/conformance/.generated/can-i-use.ts +117 -0
  354. package/src/conformance/.generated/conformance-docs.ts +14 -0
  355. package/src/conformance/browser.ts +24 -0
  356. package/src/conformance/can-i-use-tool.ts +51 -0
  357. package/src/conformance/can-i-use.ts +18 -0
  358. package/src/conformance/docs.ts +8 -0
  359. package/src/conformance/index.ts +20 -0
  360. package/src/conformance/tools.ts +16 -0
  361. package/src/credentials/core/memoize-ttl.ts +142 -0
  362. package/src/credentials/core/types.ts +10 -0
  363. package/src/credentials/node/from-adc.ts +96 -0
  364. package/src/credentials/node/from-service-account.ts +133 -0
  365. package/src/credentials/node/index.ts +6 -0
  366. package/src/discover/concurrency.ts +127 -0
  367. package/src/discover/crawler-adapter.ts +142 -0
  368. package/src/discover/crawler.ts +1127 -0
  369. package/src/discover/credential-free.ts +27 -0
  370. package/src/discover/findCollectionGroup.ts +131 -0
  371. package/src/discover/firestore-source.ts +59 -0
  372. package/src/discover/index.ts +5 -0
  373. package/src/discover/merge.ts +523 -0
  374. package/src/discover/session.ts +402 -0
  375. package/src/discover/tools.ts +201 -0
  376. package/src/discover/types.ts +187 -0
  377. package/src/discover/wire.ts +324 -0
  378. package/src/functions-rtdb/child.ts +382 -0
  379. package/src/functions-rtdb/delivery.ts +7 -0
  380. package/src/functions-rtdb/discovery.ts +136 -0
  381. package/src/functions-rtdb/event.ts +64 -0
  382. package/src/functions-rtdb/execution.ts +111 -0
  383. package/src/functions-rtdb/in-memory-delivery.ts +40 -0
  384. package/src/functions-rtdb/project.ts +74 -0
  385. package/src/functions-rtdb/projection.ts +104 -0
  386. package/src/functions-rtdb/reference-pattern.ts +20 -0
  387. package/src/functions-rtdb/remote-delivery.ts +23 -0
  388. package/src/pkg-version.ts +49 -0
  389. package/src/register/esm-exports.ts +63 -0
  390. package/src/register/hooks.ts +30 -0
  391. package/src/register/index.ts +150 -0
  392. package/src/register/mapping.ts +33 -0
  393. package/src/remote/index.ts +1050 -0
  394. package/src/rtdb/crawl-snapshot.ts +118 -0
  395. package/src/rtdb/inspection.ts +137 -0
  396. package/src/rtdb/load-rules-document.ts +56 -0
  397. package/src/rtdb/rules-generation-tool.ts +38 -0
  398. package/src/rtdb/rules-json.ts +29 -0
  399. package/src/serve/activity-guard.ts +29 -0
  400. package/src/serve/activity-route.ts +164 -0
  401. package/src/serve/activity-warning.ts +26 -0
  402. package/src/serve/bridge-mount.ts +200 -0
  403. package/src/serve/bundler.ts +493 -0
  404. package/src/serve/capture-store.ts +65 -0
  405. package/src/serve/discovery.ts +199 -0
  406. package/src/serve/entries/ai.ts +292 -0
  407. package/src/serve/entries/app-backend.ts +4 -0
  408. package/src/serve/entries/app-client.ts +26 -0
  409. package/src/serve/entries/app-session-store.ts +47 -0
  410. package/src/serve/entries/app.ts +11 -0
  411. package/src/serve/entries/auth-helper-core.ts +181 -0
  412. package/src/serve/entries/auth-helper-dom.ts +134 -0
  413. package/src/serve/entries/auth-helper-runtime.ts +20 -0
  414. package/src/serve/entries/auth.ts +255 -0
  415. package/src/serve/entries/bridge-url.ts +31 -0
  416. package/src/serve/entries/database.ts +129 -0
  417. package/src/serve/entries/firestore.ts +232 -0
  418. package/src/serve/entries/init.ts +46 -0
  419. package/src/serve/entries/keepalive.ts +46 -0
  420. package/src/serve/entries/messaging-sw.ts +75 -0
  421. package/src/serve/entries/messaging.ts +96 -0
  422. package/src/serve/entries/runtime.ts +540 -0
  423. package/src/serve/entries/session-store.ts +97 -0
  424. package/src/serve/entries/storage.ts +92 -0
  425. package/src/serve/entries/tab-sync-wiring.ts +274 -0
  426. package/src/serve/entries/worker-runtime.ts +75 -0
  427. package/src/serve/init-payload.ts +42 -0
  428. package/src/serve/namespace.ts +675 -0
  429. package/src/serve/open-browser.ts +68 -0
  430. package/src/serve/rules.ts +272 -0
  431. package/src/serve/sandbox-marker.ts +31 -0
  432. package/src/serve/server.ts +428 -0
  433. package/src/serve/standalone-assets.ts +180 -0
  434. package/src/serve/state-store.ts +166 -0
  435. package/src/serve/studio/disk-project-store.ts +185 -0
  436. package/src/serve/studio/disk-workspace.ts +162 -0
  437. package/src/serve/studio/index.ts +20 -0
  438. package/src/serve/studio/routes.ts +237 -0
  439. package/src/serve/studio/store-types.ts +48 -0
  440. package/src/serve/studio/studio-storage.test.ts +289 -0
  441. package/src/serve/vite-plugin.ts +1102 -0
  442. package/src/serve/worker/activity-bootstrap.ts +24 -0
  443. package/src/serve/worker/client/admin-firestore.ts +38 -0
  444. package/src/serve/worker/client/ai.ts +124 -0
  445. package/src/serve/worker/client/auth.ts +489 -0
  446. package/src/serve/worker/client/connection.ts +202 -0
  447. package/src/serve/worker/client/core.ts +350 -0
  448. package/src/serve/worker/client/disconnect.ts +45 -0
  449. package/src/serve/worker/client/firestore-reads.ts +181 -0
  450. package/src/serve/worker/client/firestore-refs.ts +226 -0
  451. package/src/serve/worker/client/firestore-writes.ts +232 -0
  452. package/src/serve/worker/client/handles.ts +91 -0
  453. package/src/serve/worker/client/messaging.ts +119 -0
  454. package/src/serve/worker/client/presence.ts +174 -0
  455. package/src/serve/worker/client/rtdb.ts +311 -0
  456. package/src/serve/worker/client/rules.ts +63 -0
  457. package/src/serve/worker/client/service-worker-connection.ts +59 -0
  458. package/src/serve/worker/client/snapshots.ts +86 -0
  459. package/src/serve/worker/client/storage.ts +195 -0
  460. package/src/serve/worker/client/studio.ts +88 -0
  461. package/src/serve/worker/client.ts +57 -0
  462. package/src/serve/worker/durable-persistence.ts +137 -0
  463. package/src/serve/worker/entry.ts +179 -0
  464. package/src/serve/worker/host/admin-firestore.ts +88 -0
  465. package/src/serve/worker/host/connection.ts +179 -0
  466. package/src/serve/worker/host/core.ts +387 -0
  467. package/src/serve/worker/host/dispatch.ts +316 -0
  468. package/src/serve/worker/host/firestore-reads.ts +117 -0
  469. package/src/serve/worker/host/firestore-writes.ts +456 -0
  470. package/src/serve/worker/host/presence.ts +312 -0
  471. package/src/serve/worker/host/rtdb.ts +136 -0
  472. package/src/serve/worker/host/rules.ts +128 -0
  473. package/src/serve/worker/host/storage.ts +312 -0
  474. package/src/serve/worker/host/studio.ts +75 -0
  475. package/src/serve/worker/host/subscriptions.ts +238 -0
  476. package/src/serve/worker/host-ai.ts +165 -0
  477. package/src/serve/worker/host-auth.ts +469 -0
  478. package/src/serve/worker/host-context.ts +273 -0
  479. package/src/serve/worker/host-events.ts +94 -0
  480. package/src/serve/worker/host-messaging.ts +240 -0
  481. package/src/serve/worker/host.ts +47 -0
  482. package/src/serve/worker/index.ts +196 -0
  483. package/src/serve/worker/presence-timing.ts +15 -0
  484. package/src/serve/worker/protocol.ts +1112 -0
  485. package/src/serve/worker/serve-init.ts +606 -0
  486. package/src/serve/worker/service-worker-channel.ts +33 -0
  487. package/src/serve/worker/service-worker-relay.ts +86 -0
  488. package/src/serve/writer-lock.ts +53 -0
  489. package/src/verify/cases.ts +233 -0
  490. package/src/verify/fixture.ts +258 -0
  491. package/src/verify/index.ts +519 -0
  492. package/src/verify/tools.ts +108 -0
  493. package/src/version/compat-target.ts +17 -0
  494. package/src/vite.ts +17 -0
  495. package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api/index.html +0 -30
  496. package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api.md +0 -30
  497. package/dist/serve/studio-ui/assets/index-BvtQIpGn.js +0 -1211
  498. package/dist/serve/studio-ui/assets/seed-3DMedLL3.js +0 -2
@@ -1,1024 +1,136 @@
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/hooks · Pyric Studio</title><meta name="description" content="Published declarations for @pyric/ui/firestore/hooks."><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/"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/" aria-current="page"> @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/"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/" aria-current="page"> @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/hooks</span> </li> </ol> </nav> <header class="api-reference-header"> <p class="api-reference-kicker">API reference</p> <h1><code>@pyric/ui/firestore/hooks</code></h1> <p class="api-reference-meta"> 33 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/hooks · Pyric Studio</title><meta name="description" content="Published declarations for @pyric/ui/firestore/hooks."><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-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><li> <a href="/__pyric/ui/docs/pyric-admin-messaging-reference-api/"> pyric-admin/messaging </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/"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/" aria-current="page"> @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-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><li> <a href="/__pyric/ui/docs/pyric-admin-messaging-reference-api/"> pyric-admin/messaging </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/"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/" aria-current="page"> @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/hooks</span> </li> </ol> </nav> <header class="api-reference-header"> <p class="api-reference-kicker">API reference</p> <h1><code>@pyric/ui/firestore/hooks</code></h1> <p class="api-reference-meta"> 33 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
- <h2 id="interfaces">Interfaces</h2>
4
+ </p> </header> <article class="prose api-reference-body"> <!-- Generated from published package declarations via TypeDoc. Rendered by the api-reference content loader. -->
5
+ <h2 id="references">References</h2>
6
+ <p><a id="browselocation"></a></p>
7
+ <h3 id="browselocation">BrowseLocation</h3>
8
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#browselocation-1">BrowseLocation</a></p>
9
+ <hr>
10
+ <p><a id="listsubcollections"></a></p>
11
+ <h3 id="listsubcollections">ListSubcollections</h3>
12
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#listsubcollections-2">ListSubcollections</a></p>
13
+ <hr>
14
+ <p><a id="multi_value_ops"></a></p>
15
+ <h3 id="multi_value_ops">MULTI_VALUE_OPS</h3>
16
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#multi_value_ops">MULTI_VALUE_OPS</a></p>
17
+ <hr>
18
+ <p><a id="query_ops"></a></p>
19
+ <h3 id="query_ops">QUERY_OPS</h3>
20
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#query_ops">QUERY_OPS</a></p>
21
+ <hr>
5
22
  <p><a id="querybuilderactions"></a></p>
6
23
  <h3 id="querybuilderactions">QueryBuilderActions</h3>
7
- <h4 id="properties">Properties</h4>
8
- <div class="table-scroll">
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
- <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>
24
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#querybuilderactions">QueryBuilderActions</a></p>
54
25
  <hr>
55
26
  <p><a id="querybuilderstate"></a></p>
56
27
  <h3 id="querybuilderstate">QueryBuilderState</h3>
57
- <h4 id="properties-1">Properties</h4>
58
- <div class="table-scroll">
59
-
60
-
61
-
62
-
63
-
64
-
65
-
66
-
67
-
68
-
69
-
70
-
71
-
72
-
73
-
74
-
75
-
76
-
77
-
78
-
79
-
80
-
81
-
82
-
83
-
84
-
85
-
86
-
87
- <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>
28
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#querybuilderstate">QueryBuilderState</a></p>
88
29
  <hr>
89
30
  <p><a id="querycondition"></a></p>
90
31
  <h3 id="querycondition">QueryCondition</h3>
91
- <h4 id="properties-2">Properties</h4>
92
- <div class="table-scroll">
93
-
94
-
95
-
96
-
97
-
98
-
99
-
100
-
101
-
102
-
103
-
104
-
105
-
106
-
107
-
108
-
109
-
110
-
111
-
112
-
113
-
114
-
115
-
116
-
117
- <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"></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"></a> <code>value</code></td><td align="left"><code>unknown</code></td></tr></tbody></table></div>
32
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#querycondition">QueryCondition</a></p>
33
+ <hr>
34
+ <p><a id="queryop"></a></p>
35
+ <h3 id="queryop">QueryOp</h3>
36
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#queryop">QueryOp</a></p>
118
37
  <hr>
119
38
  <p><a id="recursivedeleteimpl"></a></p>
120
39
  <h3 id="recursivedeleteimpl">RecursiveDeleteImpl</h3>
121
- <p>Implementation injected by the consumer. The library doesn’t ship
122
- one — sandbox-backed apps usually walk <code>pyric/sandbox</code>’s in-process
123
- tree; production apps usually call a Cloud Function. Either way,
124
- <code>start</code> returns an async iterator emitting progress.</p>
125
- <h4 id="properties-3">Properties</h4>
126
- <div class="table-scroll">
127
-
128
-
129
-
130
-
131
-
132
-
133
-
134
-
135
-
136
-
137
-
138
-
139
- <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>
40
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#recursivedeleteimpl">RecursiveDeleteImpl</a></p>
140
41
  <hr>
141
42
  <p><a id="recursivedeleteprogress"></a></p>
142
43
  <h3 id="recursivedeleteprogress">RecursiveDeleteProgress</h3>
143
- <h4 id="properties-4">Properties</h4>
144
- <div class="table-scroll">
145
-
146
-
147
-
148
-
149
-
150
-
151
-
152
-
153
-
154
-
155
-
156
-
157
-
158
-
159
-
160
-
161
-
162
-
163
-
164
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="deletedcount"></a> <code>deletedCount</code></td><td align="left"><code>number</code></td><td align="left">Total nodes deleted so far.</td></tr><tr><td align="left"><a id="done"></a> <code>done</code></td><td align="left"><code>boolean</code></td><td align="left">True for the final emission.</td></tr></tbody></table></div>
44
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#recursivedeleteprogress">RecursiveDeleteProgress</a></p>
165
45
  <hr>
166
46
  <p><a id="subscriptionstate"></a></p>
167
47
  <h3 id="subscriptionstate">SubscriptionState</h3>
168
- <h4 id="type-parameters">Type Parameters</h4>
169
- <div class="table-scroll">
170
-
171
-
172
-
173
-
174
-
175
-
176
-
177
-
178
-
179
-
180
- <table><thead><tr><th align="left">Type Parameter</th></tr></thead><tbody><tr><td align="left"><code>T</code></td></tr></tbody></table></div>
181
- <h4 id="properties-5">Properties</h4>
182
- <div class="table-scroll">
183
-
184
-
185
-
186
-
187
-
188
-
189
-
190
-
191
-
192
-
193
-
194
-
195
-
196
-
197
-
198
-
199
-
200
-
201
-
202
-
203
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="data"></a> <code>data</code></td><td align="left"><code>T</code></td></tr><tr><td align="left"><a id="error"></a> <code>error</code></td><td align="left"><code>Error</code></td></tr><tr><td align="left"><a id="isloading"></a> <code>isLoading</code></td><td align="left"><code>boolean</code></td></tr></tbody></table></div>
48
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#subscriptionstate">SubscriptionState</a></p>
49
+ <hr>
50
+ <p><a id="usecollectionlist"></a></p>
51
+ <h3 id="usecollectionlist">useCollectionList</h3>
52
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#usecollectionlist">useCollectionList</a></p>
204
53
  <hr>
205
54
  <p><a id="usecollectionlistoptions"></a></p>
206
55
  <h3 id="usecollectionlistoptions">UseCollectionListOptions</h3>
207
- <h4 id="properties-6">Properties</h4>
208
- <div class="table-scroll">
209
-
210
-
211
-
212
-
213
-
214
-
215
-
216
-
217
-
218
-
219
-
220
-
221
-
222
-
223
-
224
-
225
-
226
-
227
-
228
-
229
-
230
-
231
-
232
-
233
- <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"></a> <code>firestore</code></td><td align="left"><code>Firestore</code></td><td align="left">-</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">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>
56
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#usecollectionlistoptions">UseCollectionListOptions</a></p>
234
57
  <hr>
235
58
  <p><a id="usecollectionlistresult"></a></p>
236
59
  <h3 id="usecollectionlistresult">UseCollectionListResult</h3>
237
- <h4 id="properties-7">Properties</h4>
238
- <div class="table-scroll">
239
-
240
-
241
-
242
-
243
-
244
-
245
-
246
-
247
-
248
-
249
-
250
-
251
-
252
-
253
-
254
-
255
-
256
-
257
-
258
-
259
-
260
-
261
-
262
-
263
-
264
-
265
-
266
-
267
-
268
-
269
-
270
-
271
-
272
-
273
- <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"></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-1"></a> <code>error</code></td><td align="left"><code>Error</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="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>
60
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#usecollectionlistresult">UseCollectionListResult</a></p>
61
+ <hr>
62
+ <p><a id="usedocumenteditor"></a></p>
63
+ <h3 id="usedocumenteditor">useDocumentEditor</h3>
64
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#usedocumenteditor">useDocumentEditor</a></p>
274
65
  <hr>
275
66
  <p><a id="usedocumenteditoroptions"></a></p>
276
67
  <h3 id="usedocumenteditoroptions">UseDocumentEditorOptions</h3>
277
- <h4 id="properties-8">Properties</h4>
278
- <div class="table-scroll">
279
-
280
-
281
-
282
-
283
-
284
-
285
-
286
-
287
-
288
-
289
-
290
-
291
-
292
-
293
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="initial"></a> <code>initial?</code></td><td align="left"><code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>></td><td align="left">Initial document data — the same shape a <code>DocumentSnapshot.data()</code> call returns.</td></tr></tbody></table></div>
68
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#usedocumenteditoroptions">UseDocumentEditorOptions</a></p>
294
69
  <hr>
295
70
  <p><a id="usedocumenteditorresult"></a></p>
296
71
  <h3 id="usedocumenteditorresult">UseDocumentEditorResult</h3>
297
- <h4 id="extends">Extends</h4>
298
- <ul>
299
- <li><code>DocumentEditorState</code></li>
300
- </ul>
301
- <h4 id="properties-9">Properties</h4>
302
- <div class="table-scroll">
303
-
304
-
305
-
306
-
307
-
308
-
309
-
310
-
311
-
312
-
313
-
314
-
315
-
316
-
317
-
318
-
319
-
320
-
321
-
322
-
323
-
324
-
325
-
326
-
327
-
328
-
329
-
330
-
331
-
332
-
333
-
334
-
335
-
336
-
337
-
338
-
339
-
340
-
341
-
342
-
343
-
344
-
345
-
346
-
347
-
348
-
349
-
350
-
351
-
352
-
353
-
354
-
355
-
356
-
357
-
358
-
359
-
360
-
361
-
362
-
363
-
364
-
365
-
366
-
367
-
368
-
369
-
370
-
371
-
372
-
373
-
374
-
375
-
376
-
377
-
378
-
379
-
380
-
381
-
382
-
383
-
384
-
385
-
386
-
387
-
388
-
389
-
390
-
391
-
392
-
393
-
394
-
395
-
396
-
397
- <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="addarrayentry"></a> <code>addArrayEntry</code></td><td align="left">(<code>parentId</code>: <code>string</code>, <code>childType</code>: <code>FieldType</code>) => <code>void</code></td><td align="left">Append a child to an array. Nested arrays are silently rejected by the reducer (Firestore disallows them).</td></tr><tr><td align="left"><a id="addmapentry"></a> <code>addMapEntry</code></td><td align="left">(<code>parentId</code>: <code>string</code>, <code>key</code>: <code>string</code>, <code>childType</code>: <code>FieldType</code>) => <code>void</code></td><td align="left">Append a child to a map.</td></tr><tr><td align="left"><a id="dispatch"></a> <code>dispatch</code></td><td align="left">(<code>action</code>: <code>DocumentEditorAction</code>) => <code>void</code></td><td align="left">Raw dispatch — drops to the reducer-action surface. Prefer the named helpers below.</td></tr><tr><td align="left"><a id="errorcount"></a> <code>errorCount</code></td><td align="left"><code>number</code></td><td align="left">Count of nodes with an active <code>error</code>. Derived after every action; the reducer keeps it in state to avoid a tree walk on every render.</td></tr><tr><td align="left"><a id="initial-1"></a> <code>initial</code></td><td align="left"><code>EditorTree</code></td><td align="left">Frozen copy of the tree at construction. <code>reset</code> restores from here; <code>isDirty</code> is computed by comparing serializations.</td></tr><tr><td align="left"><a id="isdirty"></a> <code>isDirty</code></td><td align="left"><code>boolean</code></td><td align="left"><code>true</code> once any modifying action has fired since the last <code>reset</code>. Cleared by <code>reset</code>. Does NOT clear when the user manually re-enters the original values — checking that would require a full serialization comparison on every dispatch.</td></tr><tr><td align="left"><a id="isvalid"></a> <code>isValid</code></td><td align="left"><code>boolean</code></td><td align="left">Convenience: <code>errorCount === 0</code>.</td></tr><tr><td align="left"><a id="remove"></a> <code>remove</code></td><td align="left">(<code>nodeId</code>: <code>string</code>) => <code>void</code></td><td align="left">Remove a node (and all its descendants). Removing the root is a no-op.</td></tr><tr><td align="left"><a id="replacedata"></a> <code>replaceData</code></td><td align="left">(<code>data</code>: <code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>>) => <code>void</code></td><td align="left">Replace the editor with a newly delivered snapshot and adopt it as the clean baseline. Intended for live document viewers.</td></tr><tr><td align="left"><a id="reset-1"></a> <code>reset</code></td><td align="left">() => <code>void</code></td><td align="left">Restore the tree to its initial state. Clears <code>isDirty</code>.</td></tr><tr><td align="left"><a id="setkey"></a> <code>setKey</code></td><td align="left">(<code>nodeId</code>: <code>string</code>, <code>key</code>: <code>string</code>) => <code>void</code></td><td align="left">Set a map-child’s key.</td></tr><tr><td align="left"><a id="settype"></a> <code>setType</code></td><td align="left">(<code>nodeId</code>: <code>string</code>, <code>newType</code>: <code>FieldType</code>) => <code>void</code></td><td align="left">Switch a node’s type. Map/array nodes drop their children.</td></tr><tr><td align="left"><a id="setvalue"></a> <code>setValue</code></td><td align="left">(<code>nodeId</code>: <code>string</code>, <code>value</code>: <code>unknown</code>) => <code>void</code></td><td align="left">Update a leaf value.</td></tr><tr><td align="left"><a id="todata"></a> <code>toData</code></td><td align="left">() => <code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>></td><td align="left">Serialize the tree back to a Firestore-shaped object suitable for <code>setDoc</code> / <code>updateDoc</code>.</td></tr><tr><td align="left"><a id="touch"></a> <code>touch</code></td><td align="left">(<code>nodeId</code>: <code>string</code>) => <code>void</code></td><td align="left">Mark one node touched (dispatch on blur). Gates error display — a freshly-added row stays quiet until the user leaves it.</td></tr><tr><td align="left"><a id="touchall"></a> <code>touchAll</code></td><td align="left">() => <code>void</code></td><td align="left">Mark every node touched (dispatch on a submit attempt) so any hidden errors surface at once.</td></tr><tr><td align="left"><a id="tree"></a> <code>tree</code></td><td align="left"><code>EditorTree</code></td><td align="left">-</td></tr></tbody></table></div>
72
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#usedocumenteditorresult">UseDocumentEditorResult</a></p>
73
+ <hr>
74
+ <p><a id="usedocumentlist"></a></p>
75
+ <h3 id="usedocumentlist">useDocumentList</h3>
76
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#usedocumentlist">useDocumentList</a></p>
398
77
  <hr>
399
78
  <p><a id="usedocumentlistoptions"></a></p>
400
79
  <h3 id="usedocumentlistoptions">UseDocumentListOptions</h3>
401
- <h4 id="properties-10">Properties</h4>
402
- <div class="table-scroll">
403
-
404
-
405
-
406
-
407
-
408
-
409
-
410
-
411
-
412
-
413
-
414
-
415
-
416
-
417
-
418
-
419
-
420
-
421
-
422
-
423
-
424
-
425
-
426
-
427
-
428
-
429
-
430
-
431
-
432
- <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>
80
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#usedocumentlistoptions">UseDocumentListOptions</a></p>
433
81
  <hr>
434
82
  <p><a id="usedocumentlistresult"></a></p>
435
83
  <h3 id="usedocumentlistresult">UseDocumentListResult</h3>
436
- <h4 id="properties-11">Properties</h4>
437
- <div class="table-scroll">
438
-
439
-
440
-
441
-
442
-
443
-
444
-
445
-
446
-
447
-
448
-
449
-
450
-
451
-
452
-
453
-
454
-
455
-
456
-
457
-
458
-
459
-
460
-
461
-
462
-
463
-
464
-
465
-
466
-
467
-
468
-
469
-
470
-
471
-
472
-
473
-
474
-
475
-
476
-
477
-
478
-
479
-
480
-
481
-
482
-
483
-
484
-
485
-
486
-
487
-
488
-
489
-
490
-
491
-
492
- <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"></a> <code>documents</code></td><td align="left"><code>QueryDocumentSnapshot</code>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="error-2"></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">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-2"></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>
84
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#usedocumentlistresult">UseDocumentListResult</a></p>
85
+ <hr>
86
+ <p><a id="usedocumentsubcollections"></a></p>
87
+ <h3 id="usedocumentsubcollections">useDocumentSubcollections</h3>
88
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#usedocumentsubcollections">useDocumentSubcollections</a></p>
493
89
  <hr>
494
90
  <p><a id="usedocumentsubcollectionsoptions"></a></p>
495
91
  <h3 id="usedocumentsubcollectionsoptions">UseDocumentSubcollectionsOptions</h3>
496
- <h4 id="properties-12">Properties</h4>
497
- <div class="table-scroll">
498
-
499
-
500
-
501
-
502
-
503
-
504
-
505
-
506
-
507
-
508
-
509
-
510
-
511
-
512
-
513
-
514
-
515
-
516
-
517
-
518
-
519
-
520
-
521
-
522
- <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"></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-1"></a> <code>firestore</code></td><td align="left"><code>Firestore</code></td><td align="left">-</td></tr><tr><td align="left"><a id="listsubcollections"></a> <code>listSubcollections</code></td><td align="left"><a href="#listsubcollections-1"><code>ListSubcollections</code></a></td><td align="left">-</td></tr></tbody></table></div>
92
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#usedocumentsubcollectionsoptions">UseDocumentSubcollectionsOptions</a></p>
523
93
  <hr>
524
94
  <p><a id="usedocumentsubcollectionsresult"></a></p>
525
95
  <h3 id="usedocumentsubcollectionsresult">UseDocumentSubcollectionsResult</h3>
526
- <h4 id="properties-13">Properties</h4>
527
- <div class="table-scroll">
528
-
529
-
530
-
531
-
532
-
533
-
534
-
535
-
536
-
537
-
538
-
539
-
540
-
541
-
542
-
543
-
544
-
545
-
546
-
547
-
548
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="error-3"></a> <code>error</code></td><td align="left"><code>Error</code></td></tr><tr><td align="left"><a id="isloading-3"></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>
549
- <hr>
550
- <p><a id="usequerybuilderoptions"></a></p>
551
- <h3 id="usequerybuilderoptions">UseQueryBuilderOptions</h3>
552
- <h4 id="properties-14">Properties</h4>
553
- <div class="table-scroll">
554
-
555
-
556
-
557
-
558
-
559
-
560
-
561
-
562
-
563
-
564
-
565
-
566
-
567
-
568
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="initial-2"></a> <code>initial?</code></td><td align="left"><code>Partial</code>&#x3C;<a href="#querybuilderstate"><code>QueryBuilderState</code></a>></td><td align="left">Pre-populate the builder.</td></tr></tbody></table></div>
569
- <hr>
570
- <p><a id="userecursivedeleteresult"></a></p>
571
- <h3 id="userecursivedeleteresult">UseRecursiveDeleteResult</h3>
572
- <h4 id="properties-15">Properties</h4>
573
- <div class="table-scroll">
574
-
575
-
576
-
577
-
578
-
579
-
580
-
581
-
582
-
583
-
584
-
585
-
586
-
587
-
588
-
589
-
590
-
591
-
592
-
593
-
594
-
595
-
596
-
597
-
598
-
599
-
600
-
601
-
602
-
603
- <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-4"></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>
96
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#usedocumentsubcollectionsresult">UseDocumentSubcollectionsResult</a></p>
604
97
  <hr>
605
- <p><a id="usereferencepickeroptions"></a></p>
606
- <h3 id="usereferencepickeroptions">UseReferencePickerOptions</h3>
607
- <h4 id="properties-16">Properties</h4>
608
- <div class="table-scroll">
609
-
610
-
611
-
612
-
613
-
614
-
615
-
616
-
617
-
618
-
619
-
620
-
621
-
622
-
623
-
624
-
625
-
626
-
627
-
628
-
629
-
630
-
631
-
632
-
633
-
634
-
635
-
636
-
637
-
638
- <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="initialpath"></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-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">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>
98
+ <p><a id="usefirestorecollection"></a></p>
99
+ <h3 id="usefirestorecollection">useFirestoreCollection</h3>
100
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#usefirestorecollection">useFirestoreCollection</a></p>
639
101
  <hr>
640
- <p><a id="usereferencepickerresult"></a></p>
641
- <h3 id="usereferencepickerresult">UseReferencePickerResult</h3>
642
- <h4 id="properties-17">Properties</h4>
643
- <div class="table-scroll">
644
-
645
-
646
-
647
-
648
-
649
-
650
-
651
-
652
-
653
-
654
-
655
-
656
-
657
-
658
-
659
-
660
-
661
-
662
-
663
-
664
-
665
-
666
-
667
-
668
-
669
-
670
-
671
-
672
-
673
-
674
-
675
-
676
-
677
-
678
-
679
-
680
-
681
-
682
-
683
-
684
-
685
-
686
-
687
-
688
-
689
-
690
-
691
-
692
-
693
-
694
-
695
-
696
-
697
-
698
-
699
-
700
-
701
-
702
-
703
-
704
-
705
-
706
-
707
-
708
-
709
-
710
-
711
-
712
-
713
-
714
-
715
-
716
-
717
-
718
-
719
-
720
-
721
-
722
-
723
- <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-1"></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-1"></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-5"></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-4"></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>
724
- <h2 id="type-aliases">Type Aliases</h2>
725
- <p><a id="browselocation-1"></a></p>
726
- <h3 id="browselocation">BrowseLocation</h3>
727
- <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"> BrowseLocation</span><span style="color:#56B6C2"> =</span></span>
728
- <span class="line"><span style="color:#ABB2BF"> | {</span></span>
729
- <span class="line"><span style="color:#E06C75"> kind</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"root"</span><span style="color:#ABB2BF">;</span></span>
730
- <span class="line"><span style="color:#ABB2BF">}</span></span>
731
- <span class="line"><span style="color:#ABB2BF"> | {</span></span>
732
- <span class="line"><span style="color:#E06C75"> kind</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"document"</span><span style="color:#ABB2BF">;</span></span>
733
- <span class="line"><span style="color:#E06C75"> ref</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">DocumentReference</span><span style="color:#ABB2BF">;</span></span>
734
- <span class="line"><span style="color:#ABB2BF">}</span></span>
735
- <span class="line"><span style="color:#ABB2BF"> | {</span></span>
736
- <span class="line"><span style="color:#E06C75"> kind</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"collection"</span><span style="color:#ABB2BF">;</span></span>
737
- <span class="line"><span style="color:#E06C75"> ref</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">CollectionReference</span><span style="color:#ABB2BF">;</span></span>
738
- <span class="line"><span style="color:#ABB2BF">};</span></span></code></pre>
102
+ <p><a id="usefirestoredoc"></a></p>
103
+ <h3 id="usefirestoredoc">useFirestoreDoc</h3>
104
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#usefirestoredoc">useFirestoreDoc</a></p>
739
105
  <hr>
740
- <p><a id="listsubcollections-1"></a></p>
741
- <h3 id="listsubcollections">ListSubcollections()</h3>
742
- <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"> ListSubcollections</span><span style="color:#56B6C2"> =</span><span style="color:#ABB2BF"> (</span><span style="color:#E06C75;font-style:italic">firestore</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Firestore</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">parent</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">DocumentReference</span><span style="color:#ABB2BF">) </span><span style="color:#C678DD">=></span><span style="color:#E5C07B"> Promise</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">CollectionReference</span><span style="color:#ABB2BF">[]>;</span></span></code></pre>
743
- <p>Lister for a document’s own subcollections. Same injected-lister
744
- shape as <code>useCollectionList</code> / <code>ReferencePicker</code> use — the modular
745
- Web SDK doesn’t expose a native <code>listCollections</code> on the client, so
746
- the caller wires it (sandbox in-process listing, a server proxy, or
747
- a known schema list).</p>
748
- <h4 id="parameters">Parameters</h4>
749
- <div class="table-scroll">
750
-
751
-
752
-
753
-
754
-
755
-
756
-
757
-
758
-
759
-
760
-
761
-
762
-
763
-
764
-
765
-
766
- <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>
767
- <h4 id="returns">Returns</h4>
768
- <p><code>Promise</code>&#x3C;<code>CollectionReference</code>[]></p>
106
+ <p><a id="usequerybuilder"></a></p>
107
+ <h3 id="usequerybuilder">useQueryBuilder</h3>
108
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#usequerybuilder">useQueryBuilder</a></p>
769
109
  <hr>
770
- <p><a id="queryop"></a></p>
771
- <h3 id="queryop">QueryOp</h3>
772
- <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"> QueryOp</span><span style="color:#56B6C2"> =</span><span style="color:#E5C07B"> WhereFilterOp</span><span style="color:#ABB2BF">;</span></span></code></pre>
110
+ <p><a id="usequerybuilderoptions"></a></p>
111
+ <h3 id="usequerybuilderoptions">UseQueryBuilderOptions</h3>
112
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#usequerybuilderoptions">UseQueryBuilderOptions</a></p>
773
113
  <hr>
774
114
  <p><a id="usequerybuilderresult"></a></p>
775
115
  <h3 id="usequerybuilderresult">UseQueryBuilderResult</h3>
776
- <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"> UseQueryBuilderResult</span><span style="color:#56B6C2"> =</span><span style="color:#E5C07B"> QueryBuilderState</span><span style="color:#ABB2BF"> &#x26; </span><span style="color:#E5C07B">QueryBuilderActions</span><span style="color:#ABB2BF">;</span></span></code></pre>
777
- <h2 id="variables">Variables</h2>
778
- <p><a id="multi_value_ops"></a></p>
779
- <h3 id="multi_value_ops">MULTI_VALUE_OPS</h3>
780
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">const</span><span style="color:#E5C07B"> MULTI_VALUE_OPS</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">ReadonlySet</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">QueryOp</span><span style="color:#ABB2BF">>;</span></span></code></pre>
781
- <p>Ops that accept an array of values. The value editor in the
782
- bundled <querybuilder> parses the input as JSON for these.</querybuilder></p>
783
- <hr>
784
- <p><a id="query_ops"></a></p>
785
- <h3 id="query_ops">QUERY_OPS</h3>
786
- <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">const</span><span style="color:#E5C07B"> QUERY_OPS</span><span style="color:#ABB2BF">: </span><span style="color:#C678DD">readonly</span><span style="color:#E5C07B"> QueryOp</span><span style="color:#ABB2BF">[];</span></span></code></pre>
787
- <h2 id="functions">Functions</h2>
788
- <p><a id="usecollectionlist"></a></p>
789
- <h3 id="usecollectionlist">useCollectionList()</h3>
790
- <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"> useCollectionList</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UseCollectionListOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UseCollectionListResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
791
- <p>Operational read + create for collections under a parent (or root).
792
- Listing is injected because the modular Web SDK doesn’t expose a
793
- native <code>listCollections</code> on the client — see options docs.</p>
794
- <h4 id="parameters-1">Parameters</h4>
795
- <div class="table-scroll">
796
-
797
-
798
-
799
-
800
-
801
-
802
-
803
-
804
-
805
-
806
-
807
-
808
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#usecollectionlistoptions"><code>UseCollectionListOptions</code></a></td></tr></tbody></table></div>
809
- <h4 id="returns-1">Returns</h4>
810
- <p><a href="#usecollectionlistresult"><code>UseCollectionListResult</code></a></p>
811
- <hr>
812
- <p><a id="usedocumenteditor"></a></p>
813
- <h3 id="usedocumenteditor">useDocumentEditor()</h3>
814
- <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"> useDocumentEditor</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">options</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UseDocumentEditorOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UseDocumentEditorResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
815
- <p>Headless document editor. Owns the entire edit state for one
816
- document via a pure reducer. Consumers either render the bundled
817
- <code>&#x3C;DocumentEditor></code> compound component over this hook, or render
818
- their own tree using the returned state.</p>
819
- <p>The hook builds its tree from <code>initial</code> on first mount. Changing
820
- <code>initial</code> later does NOT rebuild the tree; live viewers explicitly call
821
- <code>replaceData()</code> when a newer snapshot should become the clean baseline.
822
- This matches the firebase-tools-ui pattern of treating the editor as a
823
- stateful workspace while still allowing snapshot-driven reconciliation.</p>
824
- <h4 id="parameters-2">Parameters</h4>
825
- <div class="table-scroll">
826
-
827
-
828
-
829
-
830
-
831
-
832
-
833
-
834
-
835
-
836
-
837
-
838
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>options?</code></td><td align="left"><a href="#usedocumenteditoroptions"><code>UseDocumentEditorOptions</code></a></td></tr></tbody></table></div>
839
- <h4 id="returns-2">Returns</h4>
840
- <p><a href="#usedocumenteditorresult"><code>UseDocumentEditorResult</code></a></p>
841
- <hr>
842
- <p><a id="usedocumentlist"></a></p>
843
- <h3 id="usedocumentlist">useDocumentList()</h3>
844
- <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"> useDocumentList</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UseDocumentListOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UseDocumentListResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
845
- <p>Paginated document list with two acquisition strategies. The default
846
- <code>paged</code> mode uses <code>startAfter</code> and accumulates one-shot reads. <code>live</code> keeps
847
- the requested prefix under one <code>onSnapshot</code> listener; loading more grows
848
- that prefix and establishes a new subscription baseline.</p>
849
- <h4 id="parameters-3">Parameters</h4>
850
- <div class="table-scroll">
851
-
852
-
853
-
854
-
855
-
856
-
857
-
858
-
859
-
860
-
861
-
862
-
863
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#usedocumentlistoptions"><code>UseDocumentListOptions</code></a></td></tr></tbody></table></div>
864
- <h4 id="returns-3">Returns</h4>
865
- <p><a href="#usedocumentlistresult"><code>UseDocumentListResult</code></a></p>
116
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#usequerybuilderresult">UseQueryBuilderResult</a></p>
866
117
  <hr>
867
- <p><a id="usedocumentsubcollections"></a></p>
868
- <h3 id="usedocumentsubcollections">useDocumentSubcollections()</h3>
869
- <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"> useDocumentSubcollections</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UseDocumentSubcollectionsOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UseDocumentSubcollectionsResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
870
- <p>Read a single document’s subcollection list. A thin specialization of
871
- the <code>useCollectionList</code> pattern, scoped to one parent document and
872
- read-only (no create — that lives in <code>useCollectionList</code>).</p>
873
- <h4 id="parameters-4">Parameters</h4>
874
- <div class="table-scroll">
875
-
876
-
877
-
878
-
879
-
880
-
881
-
882
-
883
-
884
-
885
-
886
-
887
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#usedocumentsubcollectionsoptions"><code>UseDocumentSubcollectionsOptions</code></a></td></tr></tbody></table></div>
888
- <h4 id="returns-4">Returns</h4>
889
- <p><a href="#usedocumentsubcollectionsresult"><code>UseDocumentSubcollectionsResult</code></a></p>
890
- <hr>
891
- <p><a id="usefirestorecollection"></a></p>
892
- <h3 id="usefirestorecollection">useFirestoreCollection()</h3>
893
- <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>
894
- <p>Subscribe to a Firestore query (a <code>Query</code> from <code>pyric/firestore</code>’s
895
- modular surface, including any <code>CollectionReference</code>, which extends
896
- <code>Query</code>). Returns <code>{ data, error, isLoading }</code>.</p>
897
- <p>Null/undefined query short-circuits to idle. Cleanup is automatic
898
- on unmount or query change. <code>Query</code> objects don’t have a stable
899
- structural identity, so the consumer must memoize at the call site
900
- — pass the same instance across renders to avoid re-subscribing.</p>
901
- <h4 id="parameters-5">Parameters</h4>
902
- <div class="table-scroll">
903
-
904
-
905
-
906
-
907
-
908
-
909
-
910
-
911
-
912
-
913
-
914
-
915
- <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>
916
- <h4 id="returns-5">Returns</h4>
917
- <p><a href="#subscriptionstate"><code>SubscriptionState</code></a>&#x3C;<code>QuerySnapshot</code>></p>
118
+ <p><a id="userecursivedelete"></a></p>
119
+ <h3 id="userecursivedelete">useRecursiveDelete</h3>
120
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#userecursivedelete">useRecursiveDelete</a></p>
918
121
  <hr>
919
- <p><a id="usefirestoredoc"></a></p>
920
- <h3 id="usefirestoredoc">useFirestoreDoc()</h3>
921
- <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>
922
- <p>Subscribe to a single Firestore document. Returns <code>{ data, error, isLoading }</code>. Null/undefined ref short-circuits to an idle state
923
- (<code>data: undefined, error: undefined, isLoading: false</code>) — useful
924
- for conditional rendering before a ref is known.</p>
925
- <p>Cleanup is automatic on unmount or ref change. Memoize the ref at
926
- the call site; this hook’s effect re-runs on identity change.</p>
927
- <h4 id="parameters-6">Parameters</h4>
928
- <div class="table-scroll">
929
-
930
-
931
-
932
-
933
-
934
-
935
-
936
-
937
-
938
-
939
-
940
-
941
- <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>
942
- <h4 id="returns-6">Returns</h4>
943
- <p><a href="#subscriptionstate"><code>SubscriptionState</code></a>&#x3C;<code>DocumentSnapshot</code>></p>
122
+ <p><a id="userecursivedeleteresult"></a></p>
123
+ <h3 id="userecursivedeleteresult">UseRecursiveDeleteResult</h3>
124
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#userecursivedeleteresult">UseRecursiveDeleteResult</a></p>
944
125
  <hr>
945
- <p><a id="usequerybuilder"></a></p>
946
- <h3 id="usequerybuilder">useQueryBuilder()</h3>
947
- <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"> useQueryBuilder</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">options</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UseQueryBuilderOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UseQueryBuilderResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
948
- <p>Headless query-builder state machine. Single-level — no nested
949
- <code>and()</code>/<code>or()</code> groups in v1. Consumers compose the state into a
950
- Firestore <code>Query</code> via <code>buildQuery(base)</code> and feed that into
951
- <code>useDocumentList</code> / <code>useFirestoreCollection</code>.</p>
952
- <h4 id="parameters-7">Parameters</h4>
953
- <div class="table-scroll">
954
-
955
-
956
-
957
-
958
-
959
-
960
-
961
-
962
-
963
-
964
-
965
-
966
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>options?</code></td><td align="left"><a href="#usequerybuilderoptions"><code>UseQueryBuilderOptions</code></a></td></tr></tbody></table></div>
967
- <h4 id="returns-7">Returns</h4>
968
- <p><a href="#usequerybuilderresult"><code>UseQueryBuilderResult</code></a></p>
126
+ <p><a id="usereferencepicker"></a></p>
127
+ <h3 id="usereferencepicker">useReferencePicker</h3>
128
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#usereferencepicker">useReferencePicker</a></p>
969
129
  <hr>
970
- <p><a id="userecursivedelete"></a></p>
971
- <h3 id="userecursivedelete">useRecursiveDelete()</h3>
972
- <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"> useRecursiveDelete</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">impl</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">RecursiveDeleteImpl</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UseRecursiveDeleteResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
973
- <p>Drive a <a href="#recursivedeleteimpl">RecursiveDeleteImpl</a> from a React component. Tracks
974
- progress + running state so the consumer can render a progress
975
- indicator. Errors are caught and surfaced via the returned state,
976
- not thrown.</p>
977
- <p>Stale-run protection: if the component remounts (or the user
978
- cancels and starts a new run) before a previous iteration
979
- finishes, the older run’s progress updates are dropped via a
980
- generation token.</p>
981
- <h4 id="parameters-8">Parameters</h4>
982
- <div class="table-scroll">
983
-
984
-
985
-
986
-
987
-
988
-
989
-
990
-
991
-
992
-
993
-
994
-
995
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>impl</code></td><td align="left"><a href="#recursivedeleteimpl"><code>RecursiveDeleteImpl</code></a></td></tr></tbody></table></div>
996
- <h4 id="returns-8">Returns</h4>
997
- <p><a href="#userecursivedeleteresult"><code>UseRecursiveDeleteResult</code></a></p>
130
+ <p><a id="usereferencepickeroptions"></a></p>
131
+ <h3 id="usereferencepickeroptions">UseReferencePickerOptions</h3>
132
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#usereferencepickeroptions">UseReferencePickerOptions</a></p>
998
133
  <hr>
999
- <p><a id="usereferencepicker"></a></p>
1000
- <h3 id="usereferencepicker">useReferencePicker()</h3>
1001
- <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"> useReferencePicker</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UseReferencePickerOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UseReferencePickerResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
1002
- <p>Picker state machine. Browses a Firestore tree level-by-level
1003
- (root → collection → document → collection → …), maintains a
1004
- separately-validated text-input path, and commits a chosen
1005
- reference via <code>pick</code>.</p>
1006
- <p>Headless — consumers compose the resulting state into their own
1007
- UI, or use the bundled <code>&#x3C;ReferencePicker></code> component.</p>
1008
- <h4 id="parameters-9">Parameters</h4>
1009
- <div class="table-scroll">
1010
-
1011
-
1012
-
1013
-
1014
-
1015
-
1016
-
1017
-
1018
-
1019
-
1020
-
1021
-
1022
- <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left"><a href="#usereferencepickeroptions"><code>UseReferencePickerOptions</code></a></td></tr></tbody></table></div>
1023
- <h4 id="returns-9">Returns</h4>
1024
- <p><a href="#usereferencepickerresult"><code>UseReferencePickerResult</code></a></p> </article> </main> <aside class="doc-toc api-symbols" aria-label="API symbols"> <h2 class="doc-toc-heading">Symbols</h2> <input class="api-symbol-filter" type="search" placeholder="Filter symbols" aria-label="Filter API symbols" data-api-symbol-filter> <div class="api-symbol-groups" data-api-symbol-groups> <section class="api-symbol-group" data-api-symbol-group> <a class="api-symbol-kind" href="#interfaces"> Interfaces </a> <ul> <li data-api-symbol="querybuilderactions"> <a href="#querybuilderactions">QueryBuilderActions</a> </li><li data-api-symbol="querybuilderstate"> <a href="#querybuilderstate">QueryBuilderState</a> </li><li data-api-symbol="querycondition"> <a href="#querycondition">QueryCondition</a> </li><li data-api-symbol="recursivedeleteimpl"> <a href="#recursivedeleteimpl">RecursiveDeleteImpl</a> </li><li data-api-symbol="recursivedeleteprogress"> <a href="#recursivedeleteprogress">RecursiveDeleteProgress</a> </li><li data-api-symbol="subscriptionstate"> <a href="#subscriptionstate">SubscriptionState</a> </li><li data-api-symbol="usecollectionlistoptions"> <a href="#usecollectionlistoptions">UseCollectionListOptions</a> </li><li data-api-symbol="usecollectionlistresult"> <a href="#usecollectionlistresult">UseCollectionListResult</a> </li><li data-api-symbol="usedocumenteditoroptions"> <a href="#usedocumenteditoroptions">UseDocumentEditorOptions</a> </li><li data-api-symbol="usedocumenteditorresult"> <a href="#usedocumenteditorresult">UseDocumentEditorResult</a> </li><li data-api-symbol="usedocumentlistoptions"> <a href="#usedocumentlistoptions">UseDocumentListOptions</a> </li><li data-api-symbol="usedocumentlistresult"> <a href="#usedocumentlistresult">UseDocumentListResult</a> </li><li data-api-symbol="usedocumentsubcollectionsoptions"> <a href="#usedocumentsubcollectionsoptions">UseDocumentSubcollectionsOptions</a> </li><li data-api-symbol="usedocumentsubcollectionsresult"> <a href="#usedocumentsubcollectionsresult">UseDocumentSubcollectionsResult</a> </li><li data-api-symbol="usequerybuilderoptions"> <a href="#usequerybuilderoptions">UseQueryBuilderOptions</a> </li><li data-api-symbol="userecursivedeleteresult"> <a href="#userecursivedeleteresult">UseRecursiveDeleteResult</a> </li><li data-api-symbol="usereferencepickeroptions"> <a href="#usereferencepickeroptions">UseReferencePickerOptions</a> </li><li data-api-symbol="usereferencepickerresult"> <a href="#usereferencepickerresult">UseReferencePickerResult</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group> <a class="api-symbol-kind" href="#type-aliases"> Type Aliases </a> <ul> <li data-api-symbol="browselocation"> <a href="#browselocation">BrowseLocation</a> </li><li data-api-symbol="listsubcollections()"> <a href="#listsubcollections">ListSubcollections()</a> </li><li data-api-symbol="queryop"> <a href="#queryop">QueryOp</a> </li><li data-api-symbol="usequerybuilderresult"> <a href="#usequerybuilderresult">UseQueryBuilderResult</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group> <a class="api-symbol-kind" href="#variables"> Variables </a> <ul> <li data-api-symbol="multi_value_ops"> <a href="#multi_value_ops">MULTI_VALUE_OPS</a> </li><li data-api-symbol="query_ops"> <a href="#query_ops">QUERY_OPS</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group> <a class="api-symbol-kind" href="#functions"> Functions </a> <ul> <li data-api-symbol="usecollectionlist()"> <a href="#usecollectionlist">useCollectionList()</a> </li><li data-api-symbol="usedocumenteditor()"> <a href="#usedocumenteditor">useDocumentEditor()</a> </li><li data-api-symbol="usedocumentlist()"> <a href="#usedocumentlist">useDocumentList()</a> </li><li data-api-symbol="usedocumentsubcollections()"> <a href="#usedocumentsubcollections">useDocumentSubcollections()</a> </li><li data-api-symbol="usefirestorecollection()"> <a href="#usefirestorecollection">useFirestoreCollection()</a> </li><li data-api-symbol="usefirestoredoc()"> <a href="#usefirestoredoc">useFirestoreDoc()</a> </li><li data-api-symbol="usequerybuilder()"> <a href="#usequerybuilder">useQueryBuilder()</a> </li><li data-api-symbol="userecursivedelete()"> <a href="#userecursivedelete">useRecursiveDelete()</a> </li><li data-api-symbol="usereferencepicker()"> <a href="#usereferencepicker">useReferencePicker()</a> </li> </ul> </section> <p class="api-symbol-empty" data-api-symbol-empty hidden>No matching symbols</p> </div> </aside> </div> <script type="module">const a=document.querySelector("[data-api-symbol-filter]"),d=[...document.querySelectorAll("[data-api-symbol-group]")],n=document.querySelector("[data-api-symbol-empty]");a?.addEventListener("input",()=>{const t=a.value.trim().toLowerCase();let o=0;for(const i of d){let e=0;i.querySelectorAll("[data-api-symbol]").forEach(l=>{const r=!t||(l.dataset.apiSymbol??"").includes(t);l.hidden=!r,r&&e++}),i.hidden=e===0,o+=e}n&&(n.hidden=o>0)});</script> <script type="module">const s=new Map;document.querySelectorAll('.doc-toc a[href^="#"]').forEach(t=>s.set(decodeURIComponent(t.hash.slice(1)),t));if(s.size>0){const t=new Set,n=()=>{let o=null;for(const e of s.keys())if(t.has(e)){o=e;break}s.forEach((e,c)=>e.classList.toggle("active",c===o))},r=new IntersectionObserver(o=>{for(const e of o)e.isIntersecting?t.add(e.target.id):t.delete(e.target.id);n()},{rootMargin:"-72px 0px -60% 0px"});s.forEach((o,e)=>{const c=document.getElementById(e);c&&r.observe(c)})}</script> <script type="module">document.querySelector('.studio__nav [aria-current="page"]')?.scrollIntoView({block:"nearest",inline:"center"});</script> </body> </html>
134
+ <p><a id="usereferencepickerresult"></a></p>
135
+ <h3 id="usereferencepickerresult">UseReferencePickerResult</h3>
136
+ <p>Re-exports <a href="/docs/pyric-ui-firestore-reference-api/#usereferencepickerresult">UseReferencePickerResult</a></p> </article> </main> <aside class="doc-toc api-symbols" aria-label="API symbols"> <h2 class="doc-toc-heading">Symbols</h2> <input class="api-symbol-filter" type="search" placeholder="Filter symbols" aria-label="Filter API symbols" data-api-symbol-filter> <div class="api-symbol-groups" data-api-symbol-groups> <section class="api-symbol-group" data-api-symbol-group> <a class="api-symbol-kind" href="#references"> References </a> <ul> <li data-api-symbol="browselocation"> <a href="#browselocation">BrowseLocation</a> </li><li data-api-symbol="listsubcollections"> <a href="#listsubcollections">ListSubcollections</a> </li><li data-api-symbol="multi_value_ops"> <a href="#multi_value_ops">MULTI_VALUE_OPS</a> </li><li data-api-symbol="query_ops"> <a href="#query_ops">QUERY_OPS</a> </li><li data-api-symbol="querybuilderactions"> <a href="#querybuilderactions">QueryBuilderActions</a> </li><li data-api-symbol="querybuilderstate"> <a href="#querybuilderstate">QueryBuilderState</a> </li><li data-api-symbol="querycondition"> <a href="#querycondition">QueryCondition</a> </li><li data-api-symbol="queryop"> <a href="#queryop">QueryOp</a> </li><li data-api-symbol="recursivedeleteimpl"> <a href="#recursivedeleteimpl">RecursiveDeleteImpl</a> </li><li data-api-symbol="recursivedeleteprogress"> <a href="#recursivedeleteprogress">RecursiveDeleteProgress</a> </li><li data-api-symbol="subscriptionstate"> <a href="#subscriptionstate">SubscriptionState</a> </li><li data-api-symbol="usecollectionlist"> <a href="#usecollectionlist">useCollectionList</a> </li><li data-api-symbol="usecollectionlistoptions"> <a href="#usecollectionlistoptions">UseCollectionListOptions</a> </li><li data-api-symbol="usecollectionlistresult"> <a href="#usecollectionlistresult">UseCollectionListResult</a> </li><li data-api-symbol="usedocumenteditor"> <a href="#usedocumenteditor">useDocumentEditor</a> </li><li data-api-symbol="usedocumenteditoroptions"> <a href="#usedocumenteditoroptions">UseDocumentEditorOptions</a> </li><li data-api-symbol="usedocumenteditorresult"> <a href="#usedocumenteditorresult">UseDocumentEditorResult</a> </li><li data-api-symbol="usedocumentlist"> <a href="#usedocumentlist">useDocumentList</a> </li><li data-api-symbol="usedocumentlistoptions"> <a href="#usedocumentlistoptions">UseDocumentListOptions</a> </li><li data-api-symbol="usedocumentlistresult"> <a href="#usedocumentlistresult">UseDocumentListResult</a> </li><li data-api-symbol="usedocumentsubcollections"> <a href="#usedocumentsubcollections">useDocumentSubcollections</a> </li><li data-api-symbol="usedocumentsubcollectionsoptions"> <a href="#usedocumentsubcollectionsoptions">UseDocumentSubcollectionsOptions</a> </li><li data-api-symbol="usedocumentsubcollectionsresult"> <a href="#usedocumentsubcollectionsresult">UseDocumentSubcollectionsResult</a> </li><li data-api-symbol="usefirestorecollection"> <a href="#usefirestorecollection">useFirestoreCollection</a> </li><li data-api-symbol="usefirestoredoc"> <a href="#usefirestoredoc">useFirestoreDoc</a> </li><li data-api-symbol="usequerybuilder"> <a href="#usequerybuilder">useQueryBuilder</a> </li><li data-api-symbol="usequerybuilderoptions"> <a href="#usequerybuilderoptions">UseQueryBuilderOptions</a> </li><li data-api-symbol="usequerybuilderresult"> <a href="#usequerybuilderresult">UseQueryBuilderResult</a> </li><li data-api-symbol="userecursivedelete"> <a href="#userecursivedelete">useRecursiveDelete</a> </li><li data-api-symbol="userecursivedeleteresult"> <a href="#userecursivedeleteresult">UseRecursiveDeleteResult</a> </li><li data-api-symbol="usereferencepicker"> <a href="#usereferencepicker">useReferencePicker</a> </li><li data-api-symbol="usereferencepickeroptions"> <a href="#usereferencepickeroptions">UseReferencePickerOptions</a> </li><li data-api-symbol="usereferencepickerresult"> <a href="#usereferencepickerresult">UseReferencePickerResult</a> </li> </ul> </section> <p class="api-symbol-empty" data-api-symbol-empty hidden>No matching symbols</p> </div> </aside> </div> <script type="module">const a=document.querySelector("[data-api-symbol-filter]"),d=[...document.querySelectorAll("[data-api-symbol-group]")],n=document.querySelector("[data-api-symbol-empty]");a?.addEventListener("input",()=>{const t=a.value.trim().toLowerCase();let o=0;for(const i of d){let e=0;i.querySelectorAll("[data-api-symbol]").forEach(l=>{const r=!t||(l.dataset.apiSymbol??"").includes(t);l.hidden=!r,r&&e++}),i.hidden=e===0,o+=e}n&&(n.hidden=o>0)});</script> <script type="module">const s=new Map;document.querySelectorAll('.doc-toc a[href^="#"]').forEach(t=>s.set(decodeURIComponent(t.hash.slice(1)),t));if(s.size>0){const t=new Set,n=()=>{let o=null;for(const e of s.keys())if(t.has(e)){o=e;break}s.forEach((e,c)=>e.classList.toggle("active",c===o))},r=new IntersectionObserver(o=>{for(const e of o)e.isIntersecting?t.add(e.target.id):t.delete(e.target.id);n()},{rootMargin:"-72px 0px -60% 0px"});s.forEach((o,e)=>{const c=document.getElementById(e);c&&r.observe(c)})}</script> <script type="module">document.querySelector('.studio__nav [aria-current="page"]')?.scrollIntoView({block:"nearest",inline:"center"});</script> </body> </html>