@pyric/cli 0.1.0-alpha.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1169) hide show
  1. package/LICENSE +216 -0
  2. package/README.md +156 -0
  3. package/README.md.orig +138 -0
  4. package/dist/assurance/attachment.d.ts +24 -0
  5. package/dist/assurance/attachment.d.ts.map +1 -0
  6. package/dist/assurance/attachment.js +138 -0
  7. package/dist/assurance/attachment.js.map +1 -0
  8. package/dist/assurance/browser.d.ts +7 -0
  9. package/dist/assurance/browser.d.ts.map +1 -0
  10. package/dist/assurance/browser.js +68 -0
  11. package/dist/assurance/browser.js.map +1 -0
  12. package/dist/assurance/campaign.d.ts +41 -0
  13. package/dist/assurance/campaign.d.ts.map +1 -0
  14. package/dist/assurance/campaign.js +364 -0
  15. package/dist/assurance/campaign.js.map +1 -0
  16. package/dist/assurance/capabilities.d.ts +7 -0
  17. package/dist/assurance/capabilities.d.ts.map +1 -0
  18. package/dist/assurance/capabilities.js +295 -0
  19. package/dist/assurance/capabilities.js.map +1 -0
  20. package/dist/assurance/cases.d.ts +14 -0
  21. package/dist/assurance/cases.d.ts.map +1 -0
  22. package/dist/assurance/cases.js +27 -0
  23. package/dist/assurance/cases.js.map +1 -0
  24. package/dist/assurance/generated-capabilities.d.ts +52 -0
  25. package/dist/assurance/generated-capabilities.d.ts.map +1 -0
  26. package/dist/assurance/generated-capabilities.js +329 -0
  27. package/dist/assurance/generated-capabilities.js.map +1 -0
  28. package/dist/assurance/index.d.ts +11 -0
  29. package/dist/assurance/index.d.ts.map +1 -0
  30. package/dist/assurance/index.js +9 -0
  31. package/dist/assurance/index.js.map +1 -0
  32. package/dist/assurance/runner.d.ts +3 -0
  33. package/dist/assurance/runner.d.ts.map +1 -0
  34. package/dist/assurance/runner.js +633 -0
  35. package/dist/assurance/runner.js.map +1 -0
  36. package/dist/assurance/tool-names.d.ts +4 -0
  37. package/dist/assurance/tool-names.d.ts.map +1 -0
  38. package/dist/assurance/tool-names.js +14 -0
  39. package/dist/assurance/tool-names.js.map +1 -0
  40. package/dist/assurance/tools.d.ts +19 -0
  41. package/dist/assurance/tools.d.ts.map +1 -0
  42. package/dist/assurance/tools.js +740 -0
  43. package/dist/assurance/tools.js.map +1 -0
  44. package/dist/assurance/types.d.ts +348 -0
  45. package/dist/assurance/types.d.ts.map +1 -0
  46. package/dist/assurance/types.js +7 -0
  47. package/dist/assurance/types.js.map +1 -0
  48. package/dist/assurance/validation.d.ts +8 -0
  49. package/dist/assurance/validation.d.ts.map +1 -0
  50. package/dist/assurance/validation.js +269 -0
  51. package/dist/assurance/validation.js.map +1 -0
  52. package/dist/bridge/client/bridge.d.ts +133 -0
  53. package/dist/bridge/client/bridge.d.ts.map +1 -0
  54. package/dist/bridge/client/bridge.js +429 -0
  55. package/dist/bridge/client/bridge.js.map +1 -0
  56. package/dist/bridge/client/dispatch.d.ts +41 -0
  57. package/dist/bridge/client/dispatch.d.ts.map +1 -0
  58. package/dist/bridge/client/dispatch.js +111 -0
  59. package/dist/bridge/client/dispatch.js.map +1 -0
  60. package/dist/bridge/client.d.ts +24 -0
  61. package/dist/bridge/client.d.ts.map +1 -0
  62. package/dist/bridge/client.js +26 -0
  63. package/dist/bridge/client.js.map +1 -0
  64. package/dist/bridge/protocol.d.ts +227 -0
  65. package/dist/bridge/protocol.d.ts.map +1 -0
  66. package/dist/bridge/protocol.js +131 -0
  67. package/dist/bridge/protocol.js.map +1 -0
  68. package/dist/bridge/server/audit.d.ts +19 -0
  69. package/dist/bridge/server/audit.d.ts.map +1 -0
  70. package/dist/bridge/server/audit.js +46 -0
  71. package/dist/bridge/server/audit.js.map +1 -0
  72. package/dist/bridge/server/bridge.d.ts +126 -0
  73. package/dist/bridge/server/bridge.d.ts.map +1 -0
  74. package/dist/bridge/server/bridge.js +383 -0
  75. package/dist/bridge/server/bridge.js.map +1 -0
  76. package/dist/bridge/server/headless.d.ts +36 -0
  77. package/dist/bridge/server/headless.d.ts.map +1 -0
  78. package/dist/bridge/server/headless.js +142 -0
  79. package/dist/bridge/server/headless.js.map +1 -0
  80. package/dist/bridge/server/json-schema-to-zod.d.ts +37 -0
  81. package/dist/bridge/server/json-schema-to-zod.d.ts.map +1 -0
  82. package/dist/bridge/server/json-schema-to-zod.js +93 -0
  83. package/dist/bridge/server/json-schema-to-zod.js.map +1 -0
  84. package/dist/bridge/server/local-bridge.d.ts +33 -0
  85. package/dist/bridge/server/local-bridge.d.ts.map +1 -0
  86. package/dist/bridge/server/local-bridge.js +41 -0
  87. package/dist/bridge/server/local-bridge.js.map +1 -0
  88. package/dist/bridge/server/logger.d.ts +28 -0
  89. package/dist/bridge/server/logger.d.ts.map +1 -0
  90. package/dist/bridge/server/logger.js +42 -0
  91. package/dist/bridge/server/logger.js.map +1 -0
  92. package/dist/bridge/server/mcp-contract.d.ts +21 -0
  93. package/dist/bridge/server/mcp-contract.d.ts.map +1 -0
  94. package/dist/bridge/server/mcp-contract.js +62 -0
  95. package/dist/bridge/server/mcp-contract.js.map +1 -0
  96. package/dist/bridge/server/mcp.d.ts +26 -0
  97. package/dist/bridge/server/mcp.d.ts.map +1 -0
  98. package/dist/bridge/server/mcp.js +102 -0
  99. package/dist/bridge/server/mcp.js.map +1 -0
  100. package/dist/bridge/server/peer.d.ts +39 -0
  101. package/dist/bridge/server/peer.d.ts.map +1 -0
  102. package/dist/bridge/server/peer.js +189 -0
  103. package/dist/bridge/server/peer.js.map +1 -0
  104. package/dist/bridge/server/standalone.d.ts +49 -0
  105. package/dist/bridge/server/standalone.d.ts.map +1 -0
  106. package/dist/bridge/server/standalone.js +267 -0
  107. package/dist/bridge/server/standalone.js.map +1 -0
  108. package/dist/bridge/server/tool-metadata.d.ts +38 -0
  109. package/dist/bridge/server/tool-metadata.d.ts.map +1 -0
  110. package/dist/bridge/server/tool-metadata.js +81 -0
  111. package/dist/bridge/server/tool-metadata.js.map +1 -0
  112. package/dist/bridge/server.d.ts +21 -0
  113. package/dist/bridge/server.d.ts.map +1 -0
  114. package/dist/bridge/server.js +18 -0
  115. package/dist/bridge/server.js.map +1 -0
  116. package/dist/cli/database-rules.d.ts +43 -0
  117. package/dist/cli/database-rules.d.ts.map +1 -0
  118. package/dist/cli/database-rules.js +261 -0
  119. package/dist/cli/database-rules.js.map +1 -0
  120. package/dist/cli/dev-runner.d.ts +112 -0
  121. package/dist/cli/dev-runner.d.ts.map +1 -0
  122. package/dist/cli/dev-runner.js +239 -0
  123. package/dist/cli/dev-runner.js.map +1 -0
  124. package/dist/cli/firebase-json.d.ts +66 -0
  125. package/dist/cli/firebase-json.d.ts.map +1 -0
  126. package/dist/cli/firebase-json.js +60 -0
  127. package/dist/cli/firebase-json.js.map +1 -0
  128. package/dist/cli/firestore-indexes.d.ts +21 -0
  129. package/dist/cli/firestore-indexes.d.ts.map +1 -0
  130. package/dist/cli/firestore-indexes.js +39 -0
  131. package/dist/cli/firestore-indexes.js.map +1 -0
  132. package/dist/cli/index.d.ts +56 -0
  133. package/dist/cli/index.d.ts.map +1 -0
  134. package/dist/cli/index.js +379 -0
  135. package/dist/cli/index.js.map +1 -0
  136. package/dist/cli/init.d.ts +50 -0
  137. package/dist/cli/init.d.ts.map +1 -0
  138. package/dist/cli/init.js +182 -0
  139. package/dist/cli/init.js.map +1 -0
  140. package/dist/cli/mcp-proxy.d.ts +10 -0
  141. package/dist/cli/mcp-proxy.d.ts.map +1 -0
  142. package/dist/cli/mcp-proxy.js +129 -0
  143. package/dist/cli/mcp-proxy.js.map +1 -0
  144. package/dist/cli/parse-args.d.ts +20 -0
  145. package/dist/cli/parse-args.d.ts.map +1 -0
  146. package/dist/cli/parse-args.js +69 -0
  147. package/dist/cli/parse-args.js.map +1 -0
  148. package/dist/cli/rules.d.ts +55 -0
  149. package/dist/cli/rules.d.ts.map +1 -0
  150. package/dist/cli/rules.js +199 -0
  151. package/dist/cli/rules.js.map +1 -0
  152. package/dist/cli/scope.d.ts +12 -0
  153. package/dist/cli/scope.d.ts.map +1 -0
  154. package/dist/cli/scope.js +44 -0
  155. package/dist/cli/scope.js.map +1 -0
  156. package/dist/cli/serve.d.ts +122 -0
  157. package/dist/cli/serve.d.ts.map +1 -0
  158. package/dist/cli/serve.js +844 -0
  159. package/dist/cli/serve.js.map +1 -0
  160. package/dist/cli/service-commands.d.ts +8 -0
  161. package/dist/cli/service-commands.d.ts.map +1 -0
  162. package/dist/cli/service-commands.js +58 -0
  163. package/dist/cli/service-commands.js.map +1 -0
  164. package/dist/cli/snapshot.d.ts +22 -0
  165. package/dist/cli/snapshot.d.ts.map +1 -0
  166. package/dist/cli/snapshot.js +139 -0
  167. package/dist/cli/snapshot.js.map +1 -0
  168. package/dist/cli/storage-rules.d.ts +21 -0
  169. package/dist/cli/storage-rules.d.ts.map +1 -0
  170. package/dist/cli/storage-rules.js +121 -0
  171. package/dist/cli/storage-rules.js.map +1 -0
  172. package/dist/cli/verify.d.ts +23 -0
  173. package/dist/cli/verify.d.ts.map +1 -0
  174. package/dist/cli/verify.js +349 -0
  175. package/dist/cli/verify.js.map +1 -0
  176. package/dist/credentials/core/memoize-ttl.d.ts +58 -0
  177. package/dist/credentials/core/memoize-ttl.d.ts.map +1 -0
  178. package/dist/credentials/core/memoize-ttl.js +88 -0
  179. package/dist/credentials/core/memoize-ttl.js.map +1 -0
  180. package/dist/credentials/core/types.d.ts +11 -0
  181. package/dist/credentials/core/types.d.ts.map +1 -0
  182. package/dist/credentials/core/types.js +2 -0
  183. package/dist/credentials/core/types.js.map +1 -0
  184. package/dist/credentials/node/from-adc.d.ts +10 -0
  185. package/dist/credentials/node/from-adc.d.ts.map +1 -0
  186. package/dist/credentials/node/from-adc.js +76 -0
  187. package/dist/credentials/node/from-adc.js.map +1 -0
  188. package/dist/credentials/node/from-service-account.d.ts +24 -0
  189. package/dist/credentials/node/from-service-account.d.ts.map +1 -0
  190. package/dist/credentials/node/from-service-account.js +108 -0
  191. package/dist/credentials/node/from-service-account.js.map +1 -0
  192. package/dist/credentials/node/index.d.ts +7 -0
  193. package/dist/credentials/node/index.d.ts.map +1 -0
  194. package/dist/credentials/node/index.js +7 -0
  195. package/dist/credentials/node/index.js.map +1 -0
  196. package/dist/discover/concurrency.d.ts +42 -0
  197. package/dist/discover/concurrency.d.ts.map +1 -0
  198. package/dist/discover/concurrency.js +113 -0
  199. package/dist/discover/concurrency.js.map +1 -0
  200. package/dist/discover/crawler-adapter.d.ts +48 -0
  201. package/dist/discover/crawler-adapter.d.ts.map +1 -0
  202. package/dist/discover/crawler-adapter.js +92 -0
  203. package/dist/discover/crawler-adapter.js.map +1 -0
  204. package/dist/discover/crawler.d.ts +294 -0
  205. package/dist/discover/crawler.d.ts.map +1 -0
  206. package/dist/discover/crawler.js +764 -0
  207. package/dist/discover/crawler.js.map +1 -0
  208. package/dist/discover/credential-free.d.ts +19 -0
  209. package/dist/discover/credential-free.d.ts.map +1 -0
  210. package/dist/discover/credential-free.js +18 -0
  211. package/dist/discover/credential-free.js.map +1 -0
  212. package/dist/discover/findCollectionGroup.d.ts +44 -0
  213. package/dist/discover/findCollectionGroup.d.ts.map +1 -0
  214. package/dist/discover/findCollectionGroup.js +81 -0
  215. package/dist/discover/findCollectionGroup.js.map +1 -0
  216. package/dist/discover/firestore-source.d.ts +60 -0
  217. package/dist/discover/firestore-source.d.ts.map +1 -0
  218. package/dist/discover/firestore-source.js +11 -0
  219. package/dist/discover/firestore-source.js.map +1 -0
  220. package/dist/discover/index.d.ts +3 -0
  221. package/dist/discover/index.d.ts.map +1 -0
  222. package/dist/discover/index.js +5 -0
  223. package/dist/discover/index.js.map +1 -0
  224. package/dist/discover/merge.d.ts +108 -0
  225. package/dist/discover/merge.d.ts.map +1 -0
  226. package/dist/discover/merge.js +394 -0
  227. package/dist/discover/merge.js.map +1 -0
  228. package/dist/discover/session.d.ts +116 -0
  229. package/dist/discover/session.d.ts.map +1 -0
  230. package/dist/discover/session.js +331 -0
  231. package/dist/discover/session.js.map +1 -0
  232. package/dist/discover/tools.d.ts +58 -0
  233. package/dist/discover/tools.d.ts.map +1 -0
  234. package/dist/discover/tools.js +115 -0
  235. package/dist/discover/tools.js.map +1 -0
  236. package/dist/discover/types.d.ts +190 -0
  237. package/dist/discover/types.d.ts.map +1 -0
  238. package/dist/discover/types.js +12 -0
  239. package/dist/discover/types.js.map +1 -0
  240. package/dist/discover/wire.d.ts +70 -0
  241. package/dist/discover/wire.d.ts.map +1 -0
  242. package/dist/discover/wire.js +309 -0
  243. package/dist/discover/wire.js.map +1 -0
  244. package/dist/functions-rtdb/child.d.ts +52 -0
  245. package/dist/functions-rtdb/child.d.ts.map +1 -0
  246. package/dist/functions-rtdb/child.js +283 -0
  247. package/dist/functions-rtdb/child.js.map +1 -0
  248. package/dist/functions-rtdb/delivery.d.ts +4 -0
  249. package/dist/functions-rtdb/delivery.d.ts.map +1 -0
  250. package/dist/functions-rtdb/delivery.js +2 -0
  251. package/dist/functions-rtdb/delivery.js.map +1 -0
  252. package/dist/functions-rtdb/discovery.d.ts +41 -0
  253. package/dist/functions-rtdb/discovery.d.ts.map +1 -0
  254. package/dist/functions-rtdb/discovery.js +86 -0
  255. package/dist/functions-rtdb/discovery.js.map +1 -0
  256. package/dist/functions-rtdb/event.d.ts +20 -0
  257. package/dist/functions-rtdb/event.d.ts.map +1 -0
  258. package/dist/functions-rtdb/event.js +45 -0
  259. package/dist/functions-rtdb/event.js.map +1 -0
  260. package/dist/functions-rtdb/execution.d.ts +20 -0
  261. package/dist/functions-rtdb/execution.d.ts.map +1 -0
  262. package/dist/functions-rtdb/execution.js +70 -0
  263. package/dist/functions-rtdb/execution.js.map +1 -0
  264. package/dist/functions-rtdb/in-memory-delivery.d.ts +9 -0
  265. package/dist/functions-rtdb/in-memory-delivery.d.ts.map +1 -0
  266. package/dist/functions-rtdb/in-memory-delivery.js +36 -0
  267. package/dist/functions-rtdb/in-memory-delivery.js.map +1 -0
  268. package/dist/functions-rtdb/project.d.ts +7 -0
  269. package/dist/functions-rtdb/project.d.ts.map +1 -0
  270. package/dist/functions-rtdb/project.js +54 -0
  271. package/dist/functions-rtdb/project.js.map +1 -0
  272. package/dist/functions-rtdb/projection.d.ts +14 -0
  273. package/dist/functions-rtdb/projection.d.ts.map +1 -0
  274. package/dist/functions-rtdb/projection.js +65 -0
  275. package/dist/functions-rtdb/projection.js.map +1 -0
  276. package/dist/functions-rtdb/reference-pattern.d.ts +5 -0
  277. package/dist/functions-rtdb/reference-pattern.d.ts.map +1 -0
  278. package/dist/functions-rtdb/reference-pattern.js +14 -0
  279. package/dist/functions-rtdb/reference-pattern.js.map +1 -0
  280. package/dist/functions-rtdb/remote-delivery.d.ts +9 -0
  281. package/dist/functions-rtdb/remote-delivery.d.ts.map +1 -0
  282. package/dist/functions-rtdb/remote-delivery.js +11 -0
  283. package/dist/functions-rtdb/remote-delivery.js.map +1 -0
  284. package/dist/pkg-version.d.ts +2 -0
  285. package/dist/pkg-version.d.ts.map +1 -0
  286. package/dist/pkg-version.js +47 -0
  287. package/dist/pkg-version.js.map +1 -0
  288. package/dist/register/esm-exports.d.ts +26 -0
  289. package/dist/register/esm-exports.d.ts.map +1 -0
  290. package/dist/register/esm-exports.js +61 -0
  291. package/dist/register/esm-exports.js.map +1 -0
  292. package/dist/register/hooks.d.ts +13 -0
  293. package/dist/register/hooks.d.ts.map +1 -0
  294. package/dist/register/hooks.js +15 -0
  295. package/dist/register/hooks.js.map +1 -0
  296. package/dist/register/index.d.ts +5 -0
  297. package/dist/register/index.d.ts.map +1 -0
  298. package/dist/register/index.js +124 -0
  299. package/dist/register/index.js.map +1 -0
  300. package/dist/register/mapping.d.ts +19 -0
  301. package/dist/register/mapping.d.ts.map +1 -0
  302. package/dist/register/mapping.js +35 -0
  303. package/dist/register/mapping.js.map +1 -0
  304. package/dist/remote/index.d.ts +232 -0
  305. package/dist/remote/index.d.ts.map +1 -0
  306. package/dist/remote/index.js +720 -0
  307. package/dist/remote/index.js.map +1 -0
  308. package/dist/rtdb/crawl-snapshot.d.ts +17 -0
  309. package/dist/rtdb/crawl-snapshot.d.ts.map +1 -0
  310. package/dist/rtdb/crawl-snapshot.js +72 -0
  311. package/dist/rtdb/crawl-snapshot.js.map +1 -0
  312. package/dist/rtdb/inspection.d.ts +8 -0
  313. package/dist/rtdb/inspection.d.ts.map +1 -0
  314. package/dist/rtdb/inspection.js +111 -0
  315. package/dist/rtdb/inspection.js.map +1 -0
  316. package/dist/rtdb/load-rules-document.d.ts +25 -0
  317. package/dist/rtdb/load-rules-document.d.ts.map +1 -0
  318. package/dist/rtdb/load-rules-document.js +38 -0
  319. package/dist/rtdb/load-rules-document.js.map +1 -0
  320. package/dist/rtdb/rules-generation-tool.d.ts +4 -0
  321. package/dist/rtdb/rules-generation-tool.d.ts.map +1 -0
  322. package/dist/rtdb/rules-generation-tool.js +35 -0
  323. package/dist/rtdb/rules-generation-tool.js.map +1 -0
  324. package/dist/rtdb/rules-json.d.ts +8 -0
  325. package/dist/rtdb/rules-json.d.ts.map +1 -0
  326. package/dist/rtdb/rules-json.js +17 -0
  327. package/dist/rtdb/rules-json.js.map +1 -0
  328. package/dist/serve/bridge-mount.d.ts +36 -0
  329. package/dist/serve/bridge-mount.d.ts.map +1 -0
  330. package/dist/serve/bridge-mount.js +162 -0
  331. package/dist/serve/bridge-mount.js.map +1 -0
  332. package/dist/serve/bundler.d.ts +110 -0
  333. package/dist/serve/bundler.d.ts.map +1 -0
  334. package/dist/serve/bundler.js +432 -0
  335. package/dist/serve/bundler.js.map +1 -0
  336. package/dist/serve/capture-store.d.ts +27 -0
  337. package/dist/serve/capture-store.d.ts.map +1 -0
  338. package/dist/serve/capture-store.js +47 -0
  339. package/dist/serve/capture-store.js.map +1 -0
  340. package/dist/serve/discovery.d.ts +71 -0
  341. package/dist/serve/discovery.d.ts.map +1 -0
  342. package/dist/serve/discovery.js +158 -0
  343. package/dist/serve/discovery.js.map +1 -0
  344. package/dist/serve/docs-ui/_astro/_slug_.CQYSemvw.css +1 -0
  345. package/dist/serve/docs-ui/docs/_rhythm/index.html +99 -0
  346. package/dist/serve/docs-ui/docs/_rhythm.md +101 -0
  347. package/dist/serve/docs-ui/docs/api-reference/index.html +64 -0
  348. package/dist/serve/docs-ui/docs/api-reference.md +67 -0
  349. package/dist/serve/docs-ui/docs/audit-your-rules/index.html +34 -0
  350. package/dist/serve/docs-ui/docs/audit-your-rules.md +50 -0
  351. package/dist/serve/docs-ui/docs/create-pyric-reference-api/index.html +498 -0
  352. package/dist/serve/docs-ui/docs/create-pyric-reference-api.md +345 -0
  353. package/dist/serve/docs-ui/docs/firestore-rules-limits/index.html +59 -0
  354. package/dist/serve/docs-ui/docs/firestore-rules-limits.md +54 -0
  355. package/dist/serve/docs-ui/docs/how-the-swap-works/index.html +47 -0
  356. package/dist/serve/docs-ui/docs/how-the-swap-works.md +43 -0
  357. package/dist/serve/docs-ui/docs/how-we-know-it-matches-firebase/index.html +131 -0
  358. package/dist/serve/docs-ui/docs/how-we-know-it-matches-firebase.md +169 -0
  359. package/dist/serve/docs-ui/docs/index.html +2 -0
  360. package/dist/serve/docs-ui/docs/index.json +18637 -0
  361. package/dist/serve/docs-ui/docs/overview/index.html +23 -0
  362. package/dist/serve/docs-ui/docs/overview.md +40 -0
  363. package/dist/serve/docs-ui/docs/pyric-admin-app/index.html +19 -0
  364. package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api/index.html +185 -0
  365. package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api.md +206 -0
  366. package/dist/serve/docs-ui/docs/pyric-admin-app.md +27 -0
  367. package/dist/serve/docs-ui/docs/pyric-admin-auth/index.html +24 -0
  368. package/dist/serve/docs-ui/docs/pyric-admin-auth-reference-api/index.html +617 -0
  369. package/dist/serve/docs-ui/docs/pyric-admin-auth-reference-api.md +441 -0
  370. package/dist/serve/docs-ui/docs/pyric-admin-auth.md +29 -0
  371. package/dist/serve/docs-ui/docs/pyric-admin-database/index.html +26 -0
  372. package/dist/serve/docs-ui/docs/pyric-admin-database-reference-api/index.html +583 -0
  373. package/dist/serve/docs-ui/docs/pyric-admin-database-reference-api.md +597 -0
  374. package/dist/serve/docs-ui/docs/pyric-admin-database.md +31 -0
  375. package/dist/serve/docs-ui/docs/pyric-admin-firestore/index.html +38 -0
  376. package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-error-translation/index.html +57 -0
  377. package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-error-translation.md +95 -0
  378. package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-per-call-delegate/index.html +58 -0
  379. package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-per-call-delegate.md +94 -0
  380. package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-why-mirror-admin-shape/index.html +59 -0
  381. package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-why-mirror-admin-shape.md +88 -0
  382. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-run-a-transaction/index.html +53 -0
  383. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-run-a-transaction.md +76 -0
  384. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-seed-and-set-rules/index.html +62 -0
  385. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-seed-and-set-rules.md +96 -0
  386. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-translate-denials/index.html +80 -0
  387. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-translate-denials.md +98 -0
  388. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-use-onsnapshot/index.html +57 -0
  389. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-use-onsnapshot.md +88 -0
  390. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-write-a-batch/index.html +50 -0
  391. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-write-a-batch.md +73 -0
  392. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api/index.html +32 -0
  393. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api.md +30 -0
  394. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-onsnapshot/index.html +68 -0
  395. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-onsnapshot.md +81 -0
  396. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-re-exported-types/index.html +76 -0
  397. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-re-exported-types.md +103 -0
  398. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-sandbox-firestore/index.html +40 -0
  399. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-sandbox-firestore.md +77 -0
  400. package/dist/serve/docs-ui/docs/pyric-admin-firestore-tutorials-01-first-admin-session/index.html +118 -0
  401. package/dist/serve/docs-ui/docs/pyric-admin-firestore-tutorials-01-first-admin-session.md +166 -0
  402. package/dist/serve/docs-ui/docs/pyric-admin-firestore.md +53 -0
  403. package/dist/serve/docs-ui/docs/pyric-admin-storage/index.html +25 -0
  404. package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api/index.html +317 -0
  405. package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api.md +285 -0
  406. package/dist/serve/docs-ui/docs/pyric-admin-storage.md +30 -0
  407. package/dist/serve/docs-ui/docs/pyric-ai-compat/index.html +436 -0
  408. package/dist/serve/docs-ui/docs/pyric-ai-compat.md +471 -0
  409. package/dist/serve/docs-ui/docs/pyric-ai-reference-api/index.html +5831 -0
  410. package/dist/serve/docs-ui/docs/pyric-ai-reference-api.md +5440 -0
  411. package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api/index.html +159 -0
  412. package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api.md +122 -0
  413. package/dist/serve/docs-ui/docs/pyric-app-compat/index.html +180 -0
  414. package/dist/serve/docs-ui/docs/pyric-app-compat.md +199 -0
  415. package/dist/serve/docs-ui/docs/pyric-app-reference-api/index.html +420 -0
  416. package/dist/serve/docs-ui/docs/pyric-app-reference-api.md +326 -0
  417. package/dist/serve/docs-ui/docs/pyric-auth/index.html +59 -0
  418. package/dist/serve/docs-ui/docs/pyric-auth-compat/index.html +804 -0
  419. package/dist/serve/docs-ui/docs/pyric-auth-compat.md +847 -0
  420. package/dist/serve/docs-ui/docs/pyric-auth-reference-api/index.html +5452 -0
  421. package/dist/serve/docs-ui/docs/pyric-auth-reference-api.md +5271 -0
  422. package/dist/serve/docs-ui/docs/pyric-auth-reference-feature-matrix/index.html +781 -0
  423. package/dist/serve/docs-ui/docs/pyric-auth-reference-feature-matrix.md +198 -0
  424. package/dist/serve/docs-ui/docs/pyric-auth-reference-sandbox-test-driver/index.html +71 -0
  425. package/dist/serve/docs-ui/docs/pyric-auth-reference-sandbox-test-driver.md +108 -0
  426. package/dist/serve/docs-ui/docs/pyric-auth.md +86 -0
  427. package/dist/serve/docs-ui/docs/pyric-cli/index.html +40 -0
  428. package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +98 -0
  429. package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api.md +88 -0
  430. package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api/index.html +2355 -0
  431. package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api.md +1554 -0
  432. package/dist/serve/docs-ui/docs/pyric-cli-bridge/index.html +69 -0
  433. package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api/index.html +546 -0
  434. package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api.md +485 -0
  435. package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api/index.html +506 -0
  436. package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api.md +419 -0
  437. package/dist/serve/docs-ui/docs/pyric-cli-bridge.md +99 -0
  438. package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api/index.html +67 -0
  439. package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api.md +59 -0
  440. package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api/index.html +2355 -0
  441. package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api.md +2036 -0
  442. package/dist/serve/docs-ui/docs/pyric-cli-functions-rtdb-compat/index.html +112 -0
  443. package/dist/serve/docs-ui/docs/pyric-cli-functions-rtdb-compat.md +124 -0
  444. package/dist/serve/docs-ui/docs/pyric-cli-how-to-build-a-standalone-binary/index.html +91 -0
  445. package/dist/serve/docs-ui/docs/pyric-cli-how-to-build-a-standalone-binary.md +105 -0
  446. package/dist/serve/docs-ui/docs/pyric-cli-how-to-promote-sandbox-state-to-a-fixture/index.html +52 -0
  447. package/dist/serve/docs-ui/docs/pyric-cli-how-to-promote-sandbox-state-to-a-fixture.md +98 -0
  448. package/dist/serve/docs-ui/docs/pyric-cli-how-to-run-rtdb-onvaluecreated/index.html +66 -0
  449. package/dist/serve/docs-ui/docs/pyric-cli-how-to-run-rtdb-onvaluecreated.md +100 -0
  450. package/dist/serve/docs-ui/docs/pyric-cli-how-to-serve-persistence-and-multi-tab/index.html +228 -0
  451. package/dist/serve/docs-ui/docs/pyric-cli-how-to-serve-persistence-and-multi-tab.md +179 -0
  452. package/dist/serve/docs-ui/docs/pyric-cli-how-to-use-the-vite-plugin/index.html +341 -0
  453. package/dist/serve/docs-ui/docs/pyric-cli-how-to-use-the-vite-plugin.md +309 -0
  454. package/dist/serve/docs-ui/docs/pyric-cli-how-to-verify-against-a-captured-session/index.html +128 -0
  455. package/dist/serve/docs-ui/docs/pyric-cli-how-to-verify-against-a-captured-session.md +207 -0
  456. package/dist/serve/docs-ui/docs/pyric-cli-reference-cli/index.html +404 -0
  457. package/dist/serve/docs-ui/docs/pyric-cli-reference-cli.md +249 -0
  458. package/dist/serve/docs-ui/docs/pyric-cli-reference-package-and-resolution/index.html +93 -0
  459. package/dist/serve/docs-ui/docs/pyric-cli-reference-package-and-resolution.md +65 -0
  460. package/dist/serve/docs-ui/docs/pyric-cli-reference-verify/index.html +81 -0
  461. package/dist/serve/docs-ui/docs/pyric-cli-reference-verify.md +110 -0
  462. package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api/index.html +10 -0
  463. package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api.md +16 -0
  464. package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api/index.html +1044 -0
  465. package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api.md +952 -0
  466. package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api/index.html +5041 -0
  467. package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api.md +4739 -0
  468. package/dist/serve/docs-ui/docs/pyric-cli-tutorials-server-adoption/index.html +219 -0
  469. package/dist/serve/docs-ui/docs/pyric-cli-tutorials-server-adoption.md +251 -0
  470. package/dist/serve/docs-ui/docs/pyric-cli-tutorials-wire-claude-code/index.html +136 -0
  471. package/dist/serve/docs-ui/docs/pyric-cli-tutorials-wire-claude-code.md +217 -0
  472. package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api/index.html +926 -0
  473. package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api.md +586 -0
  474. package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api/index.html +102 -0
  475. package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api.md +76 -0
  476. package/dist/serve/docs-ui/docs/pyric-cli.md +42 -0
  477. package/dist/serve/docs-ui/docs/pyric-conformance-scores/index.html +180 -0
  478. package/dist/serve/docs-ui/docs/pyric-conformance-scores.md +184 -0
  479. package/dist/serve/docs-ui/docs/pyric-database/index.html +43 -0
  480. package/dist/serve/docs-ui/docs/pyric-database-compat/index.html +1224 -0
  481. package/dist/serve/docs-ui/docs/pyric-database-compat.md +1289 -0
  482. package/dist/serve/docs-ui/docs/pyric-database-explanation-rules-authoring-and-deploy-are-separate/index.html +16 -0
  483. package/dist/serve/docs-ui/docs/pyric-database-explanation-rules-authoring-and-deploy-are-separate.md +23 -0
  484. package/dist/serve/docs-ui/docs/pyric-database-reference-api/index.html +1851 -0
  485. package/dist/serve/docs-ui/docs/pyric-database-reference-api.md +1842 -0
  486. package/dist/serve/docs-ui/docs/pyric-database-reference-constraints/index.html +381 -0
  487. package/dist/serve/docs-ui/docs/pyric-database-reference-constraints.md +168 -0
  488. package/dist/serve/docs-ui/docs/pyric-database-reference-rules-tooling/index.html +218 -0
  489. package/dist/serve/docs-ui/docs/pyric-database-reference-rules-tooling.md +303 -0
  490. package/dist/serve/docs-ui/docs/pyric-database-tutorials-01-author-rtdb-rules-with-constraints/index.html +125 -0
  491. package/dist/serve/docs-ui/docs/pyric-database-tutorials-01-author-rtdb-rules-with-constraints.md +171 -0
  492. package/dist/serve/docs-ui/docs/pyric-database.md +26 -0
  493. package/dist/serve/docs-ui/docs/pyric-explanation-versioning-and-compatibility/index.html +40 -0
  494. package/dist/serve/docs-ui/docs/pyric-explanation-versioning-and-compatibility.md +68 -0
  495. package/dist/serve/docs-ui/docs/pyric-firestore/index.html +48 -0
  496. package/dist/serve/docs-ui/docs/pyric-firestore-compat/index.html +868 -0
  497. package/dist/serve/docs-ui/docs/pyric-firestore-compat.md +939 -0
  498. package/dist/serve/docs-ui/docs/pyric-firestore-explanation-rules-tooling-is-separate/index.html +92 -0
  499. package/dist/serve/docs-ui/docs/pyric-firestore-explanation-rules-tooling-is-separate.md +70 -0
  500. package/dist/serve/docs-ui/docs/pyric-firestore-explanation-target-symbol-opacity/index.html +59 -0
  501. package/dist/serve/docs-ui/docs/pyric-firestore-explanation-target-symbol-opacity.md +91 -0
  502. package/dist/serve/docs-ui/docs/pyric-firestore-explanation-two-backends-one-surface/index.html +43 -0
  503. package/dist/serve/docs-ui/docs/pyric-firestore-explanation-two-backends-one-surface.md +58 -0
  504. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-migrate-from-firebase-firestore/index.html +58 -0
  505. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-migrate-from-firebase-firestore.md +86 -0
  506. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-pick-a-backend/index.html +52 -0
  507. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-pick-a-backend.md +83 -0
  508. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-run-a-transaction/index.html +42 -0
  509. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-run-a-transaction.md +59 -0
  510. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-onsnapshot/index.html +66 -0
  511. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-onsnapshot.md +96 -0
  512. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-sandbox-ops/index.html +61 -0
  513. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-sandbox-ops.md +92 -0
  514. package/dist/serve/docs-ui/docs/pyric-firestore-reference-api/index.html +3623 -0
  515. package/dist/serve/docs-ui/docs/pyric-firestore-reference-api.md +3399 -0
  516. package/dist/serve/docs-ui/docs/pyric-firestore-reference-feature-matrix/index.html +80 -0
  517. package/dist/serve/docs-ui/docs/pyric-firestore-reference-feature-matrix.md +66 -0
  518. package/dist/serve/docs-ui/docs/pyric-firestore-reference-getfirestore/index.html +46 -0
  519. package/dist/serve/docs-ui/docs/pyric-firestore-reference-getfirestore.md +73 -0
  520. package/dist/serve/docs-ui/docs/pyric-firestore-reference-query-constraints/index.html +80 -0
  521. package/dist/serve/docs-ui/docs/pyric-firestore-reference-query-constraints.md +129 -0
  522. package/dist/serve/docs-ui/docs/pyric-firestore-reference-sandbox-ops/index.html +58 -0
  523. package/dist/serve/docs-ui/docs/pyric-firestore-reference-sandbox-ops.md +88 -0
  524. package/dist/serve/docs-ui/docs/pyric-firestore-reference-tool-factories/index.html +51 -0
  525. package/dist/serve/docs-ui/docs/pyric-firestore-reference-tool-factories.md +71 -0
  526. package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-01-write-a-sandbox-demo/index.html +130 -0
  527. package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-01-write-a-sandbox-demo.md +180 -0
  528. package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-02-swap-to-prod-backend/index.html +59 -0
  529. package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-02-swap-to-prod-backend.md +92 -0
  530. package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api/index.html +30 -0
  531. package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api.md +30 -0
  532. package/dist/serve/docs-ui/docs/pyric-firestore.md +72 -0
  533. package/dist/serve/docs-ui/docs/pyric-messaging-compat/index.html +300 -0
  534. package/dist/serve/docs-ui/docs/pyric-messaging-compat.md +321 -0
  535. package/dist/serve/docs-ui/docs/pyric-messaging-reference-api/index.html +508 -0
  536. package/dist/serve/docs-ui/docs/pyric-messaging-reference-api.md +374 -0
  537. package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api/index.html +482 -0
  538. package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api.md +348 -0
  539. package/dist/serve/docs-ui/docs/pyric-rules/index.html +87 -0
  540. package/dist/serve/docs-ui/docs/pyric-rules-compat/index.html +328 -0
  541. package/dist/serve/docs-ui/docs/pyric-rules-compat.md +347 -0
  542. package/dist/serve/docs-ui/docs/pyric-rules-explanation-agent-failure-modes/index.html +50 -0
  543. package/dist/serve/docs-ui/docs/pyric-rules-explanation-agent-failure-modes.md +78 -0
  544. package/dist/serve/docs-ui/docs/pyric-rules-explanation-lint-vs-validate-vs-simulate-vs-test/index.html +79 -0
  545. package/dist/serve/docs-ui/docs/pyric-rules-explanation-lint-vs-validate-vs-simulate-vs-test.md +69 -0
  546. package/dist/serve/docs-ui/docs/pyric-rules-explanation-runtime-budget-and-shared-gates/index.html +67 -0
  547. package/dist/serve/docs-ui/docs/pyric-rules-explanation-runtime-budget-and-shared-gates.md +75 -0
  548. package/dist/serve/docs-ui/docs/pyric-rules-explanation-sentinel-expression-engine/index.html +49 -0
  549. package/dist/serve/docs-ui/docs/pyric-rules-explanation-sentinel-expression-engine.md +74 -0
  550. package/dist/serve/docs-ui/docs/pyric-rules-explanation-simulator-vs-rules-test-api/index.html +95 -0
  551. package/dist/serve/docs-ui/docs/pyric-rules-explanation-simulator-vs-rules-test-api.md +80 -0
  552. package/dist/serve/docs-ui/docs/pyric-rules-explanation-the-2-plus-modules-extension/index.html +58 -0
  553. package/dist/serve/docs-ui/docs/pyric-rules-explanation-the-2-plus-modules-extension.md +79 -0
  554. package/dist/serve/docs-ui/docs/pyric-rules-explanation-value-wrappers-design/index.html +63 -0
  555. package/dist/serve/docs-ui/docs/pyric-rules-explanation-value-wrappers-design.md +84 -0
  556. package/dist/serve/docs-ui/docs/pyric-rules-explanation-why-this-package-exists/index.html +34 -0
  557. package/dist/serve/docs-ui/docs/pyric-rules-explanation-why-this-package-exists.md +43 -0
  558. package/dist/serve/docs-ui/docs/pyric-rules-how-to-compare-rulesets-for-weakening/index.html +55 -0
  559. package/dist/serve/docs-ui/docs/pyric-rules-how-to-compare-rulesets-for-weakening.md +77 -0
  560. package/dist/serve/docs-ui/docs/pyric-rules-how-to-inspect-rules-via-the-ast/index.html +90 -0
  561. package/dist/serve/docs-ui/docs/pyric-rules-how-to-inspect-rules-via-the-ast.md +129 -0
  562. package/dist/serve/docs-ui/docs/pyric-rules-how-to-lint-rules-source/index.html +55 -0
  563. package/dist/serve/docs-ui/docs/pyric-rules-how-to-lint-rules-source.md +84 -0
  564. package/dist/serve/docs-ui/docs/pyric-rules-how-to-pin-request-time/index.html +49 -0
  565. package/dist/serve/docs-ui/docs/pyric-rules-how-to-pin-request-time.md +64 -0
  566. package/dist/serve/docs-ui/docs/pyric-rules-how-to-register-tools-with-an-agent/index.html +61 -0
  567. package/dist/serve/docs-ui/docs/pyric-rules-how-to-register-tools-with-an-agent.md +87 -0
  568. package/dist/serve/docs-ui/docs/pyric-rules-how-to-resolve-module-imports/index.html +93 -0
  569. package/dist/serve/docs-ui/docs/pyric-rules-how-to-resolve-module-imports.md +105 -0
  570. package/dist/serve/docs-ui/docs/pyric-rules-how-to-simulate-rules-locally/index.html +89 -0
  571. package/dist/serve/docs-ui/docs/pyric-rules-how-to-simulate-rules-locally.md +134 -0
  572. package/dist/serve/docs-ui/docs/pyric-rules-how-to-test-rules-against-firebase/index.html +66 -0
  573. package/dist/serve/docs-ui/docs/pyric-rules-how-to-test-rules-against-firebase.md +102 -0
  574. package/dist/serve/docs-ui/docs/pyric-rules-reference-api/index.html +2629 -0
  575. package/dist/serve/docs-ui/docs/pyric-rules-reference-api.md +2213 -0
  576. package/dist/serve/docs-ui/docs/pyric-rules-reference-ast/index.html +85 -0
  577. package/dist/serve/docs-ui/docs/pyric-rules-reference-ast.md +121 -0
  578. package/dist/serve/docs-ui/docs/pyric-rules-reference-conformance-gaps/index.html +277 -0
  579. package/dist/serve/docs-ui/docs/pyric-rules-reference-conformance-gaps.md +360 -0
  580. package/dist/serve/docs-ui/docs/pyric-rules-reference-errors/index.html +76 -0
  581. package/dist/serve/docs-ui/docs/pyric-rules-reference-errors.md +123 -0
  582. package/dist/serve/docs-ui/docs/pyric-rules-reference-lint-rules/index.html +148 -0
  583. package/dist/serve/docs-ui/docs/pyric-rules-reference-lint-rules.md +159 -0
  584. package/dist/serve/docs-ui/docs/pyric-rules-reference-simulator-context/index.html +66 -0
  585. package/dist/serve/docs-ui/docs/pyric-rules-reference-simulator-context.md +104 -0
  586. package/dist/serve/docs-ui/docs/pyric-rules-reference-stdlib-modules/index.html +241 -0
  587. package/dist/serve/docs-ui/docs/pyric-rules-reference-stdlib-modules.md +143 -0
  588. package/dist/serve/docs-ui/docs/pyric-rules-reference-test-case-schema/index.html +94 -0
  589. package/dist/serve/docs-ui/docs/pyric-rules-reference-test-case-schema.md +121 -0
  590. package/dist/serve/docs-ui/docs/pyric-rules-reference-validator-findings/index.html +87 -0
  591. package/dist/serve/docs-ui/docs/pyric-rules-reference-validator-findings.md +117 -0
  592. package/dist/serve/docs-ui/docs/pyric-rules-reference-value-wrappers/index.html +102 -0
  593. package/dist/serve/docs-ui/docs/pyric-rules-reference-value-wrappers.md +152 -0
  594. package/dist/serve/docs-ui/docs/pyric-rules.md +93 -0
  595. package/dist/serve/docs-ui/docs/pyric-sandbox/index.html +67 -0
  596. package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api/index.html +120 -0
  597. package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api.md +110 -0
  598. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-every-op-is-a-request/index.html +141 -0
  599. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-every-op-is-a-request.md +161 -0
  600. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-identity-is-a-context/index.html +66 -0
  601. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-identity-is-a-context.md +110 -0
  602. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-internal-adapter-protocol/index.html +71 -0
  603. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-internal-adapter-protocol.md +111 -0
  604. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-listener-re-evaluation/index.html +56 -0
  605. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-listener-re-evaluation.md +82 -0
  606. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-local-backend-vs-firestore-offline/index.html +64 -0
  607. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-local-backend-vs-firestore-offline.md +56 -0
  608. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-adapters-are-siblings/index.html +92 -0
  609. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-adapters-are-siblings.md +90 -0
  610. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-this-package-exists/index.html +69 -0
  611. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-this-package-exists.md +57 -0
  612. package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api/index.html +202 -0
  613. package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api.md +134 -0
  614. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-multiple-isolated-sandboxes/index.html +63 -0
  615. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-multiple-isolated-sandboxes.md +89 -0
  616. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-observe-events/index.html +159 -0
  617. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-observe-events.md +168 -0
  618. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-pick-an-adapter/index.html +79 -0
  619. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-pick-an-adapter.md +75 -0
  620. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-replay-events/index.html +88 -0
  621. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-replay-events.md +92 -0
  622. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-reset-between-tests/index.html +68 -0
  623. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-reset-between-tests.md +92 -0
  624. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-seed-data-and-rules/index.html +91 -0
  625. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-seed-data-and-rules.md +122 -0
  626. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-switch-users/index.html +50 -0
  627. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-switch-users.md +78 -0
  628. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-use-admin-reads/index.html +54 -0
  629. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-use-admin-reads.md +85 -0
  630. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api/index.html +5019 -0
  631. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api.md +4060 -0
  632. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-divergences/index.html +125 -0
  633. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-divergences.md +151 -0
  634. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-error-codes/index.html +110 -0
  635. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-error-codes.md +118 -0
  636. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-internal-protocol/index.html +72 -0
  637. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-internal-protocol.md +109 -0
  638. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-sandbox-and-context/index.html +90 -0
  639. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-sandbox-and-context.md +140 -0
  640. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-sandbox-event/index.html +146 -0
  641. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-sandbox-event.md +204 -0
  642. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-snapshot-and-admin/index.html +53 -0
  643. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-snapshot-and-admin.md +89 -0
  644. package/dist/serve/docs-ui/docs/pyric-sandbox-tutorials-01-your-first-sandbox-session/index.html +115 -0
  645. package/dist/serve/docs-ui/docs/pyric-sandbox-tutorials-01-your-first-sandbox-session.md +176 -0
  646. package/dist/serve/docs-ui/docs/pyric-sandbox.md +69 -0
  647. package/dist/serve/docs-ui/docs/pyric-storage/index.html +65 -0
  648. package/dist/serve/docs-ui/docs/pyric-storage-compat/index.html +676 -0
  649. package/dist/serve/docs-ui/docs/pyric-storage-compat.md +699 -0
  650. package/dist/serve/docs-ui/docs/pyric-storage-explanation-implementation-scope/index.html +52 -0
  651. package/dist/serve/docs-ui/docs/pyric-storage-explanation-implementation-scope.md +85 -0
  652. package/dist/serve/docs-ui/docs/pyric-storage-explanation-session-archive-use-case/index.html +58 -0
  653. package/dist/serve/docs-ui/docs/pyric-storage-explanation-session-archive-use-case.md +82 -0
  654. package/dist/serve/docs-ui/docs/pyric-storage-explanation-why-indexeddb/index.html +50 -0
  655. package/dist/serve/docs-ui/docs/pyric-storage-explanation-why-indexeddb.md +82 -0
  656. package/dist/serve/docs-ui/docs/pyric-storage-how-to-enforce-rules/index.html +120 -0
  657. package/dist/serve/docs-ui/docs/pyric-storage-how-to-enforce-rules.md +127 -0
  658. package/dist/serve/docs-ui/docs/pyric-storage-how-to-list-and-delete/index.html +53 -0
  659. package/dist/serve/docs-ui/docs/pyric-storage-how-to-list-and-delete.md +86 -0
  660. package/dist/serve/docs-ui/docs/pyric-storage-how-to-switch-backends/index.html +43 -0
  661. package/dist/serve/docs-ui/docs/pyric-storage-how-to-switch-backends.md +65 -0
  662. package/dist/serve/docs-ui/docs/pyric-storage-how-to-test-rule-expressions/index.html +70 -0
  663. package/dist/serve/docs-ui/docs/pyric-storage-how-to-test-rule-expressions.md +88 -0
  664. package/dist/serve/docs-ui/docs/pyric-storage-reference-api/index.html +2120 -0
  665. package/dist/serve/docs-ui/docs/pyric-storage-reference-api.md +1687 -0
  666. package/dist/serve/docs-ui/docs/pyric-storage-reference-conformance-gaps/index.html +137 -0
  667. package/dist/serve/docs-ui/docs/pyric-storage-reference-conformance-gaps.md +171 -0
  668. package/dist/serve/docs-ui/docs/pyric-storage-reference-error-codes/index.html +37 -0
  669. package/dist/serve/docs-ui/docs/pyric-storage-reference-error-codes.md +57 -0
  670. package/dist/serve/docs-ui/docs/pyric-storage-reference-rules-subset/index.html +96 -0
  671. package/dist/serve/docs-ui/docs/pyric-storage-reference-rules-subset.md +134 -0
  672. package/dist/serve/docs-ui/docs/pyric-storage-reference-storage-options/index.html +39 -0
  673. package/dist/serve/docs-ui/docs/pyric-storage-reference-storage-options.md +61 -0
  674. package/dist/serve/docs-ui/docs/pyric-storage.md +67 -0
  675. package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api/index.html +638 -0
  676. package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api.md +430 -0
  677. package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +813 -0
  678. package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api.md +634 -0
  679. package/dist/serve/docs-ui/docs/pyric-ui-auth-reference-api/index.html +1708 -0
  680. package/dist/serve/docs-ui/docs/pyric-ui-auth-reference-api.md +1300 -0
  681. package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api/index.html +177 -0
  682. package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api.md +111 -0
  683. package/dist/serve/docs-ui/docs/pyric-ui-events-reference-api/index.html +1542 -0
  684. package/dist/serve/docs-ui/docs/pyric-ui-events-reference-api.md +903 -0
  685. package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +1024 -0
  686. package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api.md +640 -0
  687. package/dist/serve/docs-ui/docs/pyric-ui-firestore-reference-api/index.html +2753 -0
  688. package/dist/serve/docs-ui/docs/pyric-ui-firestore-reference-api.md +2171 -0
  689. package/dist/serve/docs-ui/docs/pyric-ui-primitives-reference-api/index.html +1005 -0
  690. package/dist/serve/docs-ui/docs/pyric-ui-primitives-reference-api.md +693 -0
  691. package/dist/serve/docs-ui/docs/pyric-ui-rtdb-reference-api/index.html +1388 -0
  692. package/dist/serve/docs-ui/docs/pyric-ui-rtdb-reference-api.md +1340 -0
  693. package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +131 -0
  694. package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api.md +76 -0
  695. package/dist/serve/docs-ui/docs/pyric-ui-rules-reference-api/index.html +648 -0
  696. package/dist/serve/docs-ui/docs/pyric-ui-rules-reference-api.md +508 -0
  697. package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +1457 -0
  698. package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api.md +1029 -0
  699. package/dist/serve/docs-ui/docs/pyric-ui-storage-reference-api/index.html +2476 -0
  700. package/dist/serve/docs-ui/docs/pyric-ui-storage-reference-api.md +1919 -0
  701. package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +1241 -0
  702. package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api.md +817 -0
  703. package/dist/serve/docs-ui/docs/pyric-ui-traffic-reference-api/index.html +2289 -0
  704. package/dist/serve/docs-ui/docs/pyric-ui-traffic-reference-api.md +1489 -0
  705. package/dist/serve/docs-ui/docs/read-a-denial/index.html +40 -0
  706. package/dist/serve/docs-ui/docs/read-a-denial.md +62 -0
  707. package/dist/serve/docs-ui/docs/receive-messages/index.html +28 -0
  708. package/dist/serve/docs-ui/docs/receive-messages.md +43 -0
  709. package/dist/serve/docs-ui/docs/rtdb-rules-in-typescript/index.html +67 -0
  710. package/dist/serve/docs-ui/docs/rtdb-rules-in-typescript.md +101 -0
  711. package/dist/serve/docs-ui/docs/rules-patterns/index.html +68 -0
  712. package/dist/serve/docs-ui/docs/rules-patterns.md +104 -0
  713. package/dist/serve/docs-ui/docs/rules-standard-library/index.html +87 -0
  714. package/dist/serve/docs-ui/docs/rules-standard-library.md +93 -0
  715. package/dist/serve/docs-ui/docs/run-ai-logic-locally/index.html +27 -0
  716. package/dist/serve/docs-ui/docs/run-ai-logic-locally.md +43 -0
  717. package/dist/serve/docs-ui/docs/secure-it-with-rules/index.html +69 -0
  718. package/dist/serve/docs-ui/docs/secure-it-with-rules.md +101 -0
  719. package/dist/serve/docs-ui/docs/see-whats-happening/index.html +73 -0
  720. package/dist/serve/docs-ui/docs/see-whats-happening.md +77 -0
  721. package/dist/serve/docs-ui/docs/set-up-the-project/index.html +14 -0
  722. package/dist/serve/docs-ui/docs/set-up-the-project.md +19 -0
  723. package/dist/serve/docs-ui/docs/set-up-your-agent/index.html +42 -0
  724. package/dist/serve/docs-ui/docs/set-up-your-agent.md +86 -0
  725. package/dist/serve/docs-ui/docs/shape-your-data/index.html +44 -0
  726. package/dist/serve/docs-ui/docs/shape-your-data.md +88 -0
  727. package/dist/serve/docs-ui/docs/ship-to-production/index.html +36 -0
  728. package/dist/serve/docs-ui/docs/ship-to-production.md +80 -0
  729. package/dist/serve/docs-ui/docs/sign-in-and-manage-users/index.html +31 -0
  730. package/dist/serve/docs-ui/docs/sign-in-and-manage-users.md +50 -0
  731. package/dist/serve/docs-ui/docs/simulate-and-lint/index.html +95 -0
  732. package/dist/serve/docs-ui/docs/simulate-and-lint.md +99 -0
  733. package/dist/serve/docs-ui/docs/skills/index.html +20 -0
  734. package/dist/serve/docs-ui/docs/skills.md +34 -0
  735. package/dist/serve/docs-ui/docs/start-building/index.html +32 -0
  736. package/dist/serve/docs-ui/docs/start-building.md +64 -0
  737. package/dist/serve/docs-ui/docs/store-and-query-data/index.html +16 -0
  738. package/dist/serve/docs-ui/docs/store-and-query-data.md +33 -0
  739. package/dist/serve/docs-ui/docs/store-files/index.html +13 -0
  740. package/dist/serve/docs-ui/docs/store-files.md +25 -0
  741. package/dist/serve/docs-ui/docs/sync-realtime-data/index.html +15 -0
  742. package/dist/serve/docs-ui/docs/sync-realtime-data.md +27 -0
  743. package/dist/serve/docs-ui/docs/test-in-node/index.html +74 -0
  744. package/dist/serve/docs-ui/docs/test-in-node.md +100 -0
  745. package/dist/serve/docs-ui/docs/ui/index.html +76 -0
  746. package/dist/serve/docs-ui/docs/ui-auth-authsigninhelper/index.html +194 -0
  747. package/dist/serve/docs-ui/docs/ui-auth-authsigninhelper.md +114 -0
  748. package/dist/serve/docs-ui/docs/ui-auth-authusers/index.html +263 -0
  749. package/dist/serve/docs-ui/docs/ui-auth-authusers.md +183 -0
  750. package/dist/serve/docs-ui/docs/ui-firestore-collectionlist/index.html +92 -0
  751. package/dist/serve/docs-ui/docs/ui-firestore-collectionlist.md +79 -0
  752. package/dist/serve/docs-ui/docs/ui-firestore-deletewithconfirm/index.html +128 -0
  753. package/dist/serve/docs-ui/docs/ui-firestore-deletewithconfirm.md +104 -0
  754. package/dist/serve/docs-ui/docs/ui-firestore-documenteditor/index.html +154 -0
  755. package/dist/serve/docs-ui/docs/ui-firestore-documenteditor.md +117 -0
  756. package/dist/serve/docs-ui/docs/ui-firestore-documentlist/index.html +132 -0
  757. package/dist/serve/docs-ui/docs/ui-firestore-documentlist.md +92 -0
  758. package/dist/serve/docs-ui/docs/ui-firestore-documentpreview/index.html +159 -0
  759. package/dist/serve/docs-ui/docs/ui-firestore-documentpreview.md +84 -0
  760. package/dist/serve/docs-ui/docs/ui-firestore-querybuilder/index.html +104 -0
  761. package/dist/serve/docs-ui/docs/ui-firestore-querybuilder.md +103 -0
  762. package/dist/serve/docs-ui/docs/ui-firestore-referencepicker/index.html +113 -0
  763. package/dist/serve/docs-ui/docs/ui-firestore-referencepicker.md +93 -0
  764. package/dist/serve/docs-ui/docs/ui-primitives-badge/index.html +56 -0
  765. package/dist/serve/docs-ui/docs/ui-primitives-badge.md +40 -0
  766. package/dist/serve/docs-ui/docs/ui-primitives-confirmdialog/index.html +140 -0
  767. package/dist/serve/docs-ui/docs/ui-primitives-confirmdialog.md +108 -0
  768. package/dist/serve/docs-ui/docs/ui-primitives-copybutton/index.html +58 -0
  769. package/dist/serve/docs-ui/docs/ui-primitives-copybutton.md +37 -0
  770. package/dist/serve/docs-ui/docs/ui-primitives-jsonview/index.html +58 -0
  771. package/dist/serve/docs-ui/docs/ui-primitives-jsonview.md +47 -0
  772. package/dist/serve/docs-ui/docs/ui-primitives-segmentedcontrol/index.html +70 -0
  773. package/dist/serve/docs-ui/docs/ui-primitives-segmentedcontrol.md +50 -0
  774. package/dist/serve/docs-ui/docs/ui-primitives-toast/index.html +87 -0
  775. package/dist/serve/docs-ui/docs/ui-primitives-toast.md +82 -0
  776. package/dist/serve/docs-ui/docs/ui-primitives-virtuallist/index.html +85 -0
  777. package/dist/serve/docs-ui/docs/ui-primitives-virtuallist.md +54 -0
  778. package/dist/serve/docs-ui/docs/ui-storage/index.html +150 -0
  779. package/dist/serve/docs-ui/docs/ui-storage-deleteselectionwithconfirm/index.html +126 -0
  780. package/dist/serve/docs-ui/docs/ui-storage-deleteselectionwithconfirm.md +88 -0
  781. package/dist/serve/docs-ui/docs/ui-storage-objectbrowser/index.html +137 -0
  782. package/dist/serve/docs-ui/docs/ui-storage-objectbrowser.md +90 -0
  783. package/dist/serve/docs-ui/docs/ui-storage-objectinspector/index.html +139 -0
  784. package/dist/serve/docs-ui/docs/ui-storage-objectinspector.md +93 -0
  785. package/dist/serve/docs-ui/docs/ui-storage-pathbreadcrumb/index.html +72 -0
  786. package/dist/serve/docs-ui/docs/ui-storage-pathbreadcrumb.md +57 -0
  787. package/dist/serve/docs-ui/docs/ui-storage-rules-aware-affordances/index.html +60 -0
  788. package/dist/serve/docs-ui/docs/ui-storage-rules-aware-affordances.md +52 -0
  789. package/dist/serve/docs-ui/docs/ui-storage-uploaddropzone/index.html +93 -0
  790. package/dist/serve/docs-ui/docs/ui-storage-uploaddropzone.md +78 -0
  791. package/dist/serve/docs-ui/docs/ui-storage-usestoragerulesgate/index.html +144 -0
  792. package/dist/serve/docs-ui/docs/ui-storage-usestoragerulesgate.md +101 -0
  793. package/dist/serve/docs-ui/docs/ui-storage.md +165 -0
  794. package/dist/serve/docs-ui/docs/ui-traffic/index.html +88 -0
  795. package/dist/serve/docs-ui/docs/ui-traffic-ruleheatmap/index.html +79 -0
  796. package/dist/serve/docs-ui/docs/ui-traffic-ruleheatmap.md +60 -0
  797. package/dist/serve/docs-ui/docs/ui-traffic-trafficdetail/index.html +78 -0
  798. package/dist/serve/docs-ui/docs/ui-traffic-trafficdetail.md +59 -0
  799. package/dist/serve/docs-ui/docs/ui-traffic-trafficlog/index.html +118 -0
  800. package/dist/serve/docs-ui/docs/ui-traffic-trafficlog.md +69 -0
  801. package/dist/serve/docs-ui/docs/ui-traffic-trafficstats/index.html +51 -0
  802. package/dist/serve/docs-ui/docs/ui-traffic-trafficstats.md +46 -0
  803. package/dist/serve/docs-ui/docs/ui-traffic.md +102 -0
  804. package/dist/serve/docs-ui/docs/ui.md +90 -0
  805. package/dist/serve/docs-ui/docs/watch-and-review/index.html +25 -0
  806. package/dist/serve/docs-ui/docs/watch-and-review.md +40 -0
  807. package/dist/serve/docs-ui/docs/what-your-agent-can-do/index.html +81 -0
  808. package/dist/serve/docs-ui/docs/what-your-agent-can-do.md +78 -0
  809. package/dist/serve/docs-ui/docs/whats-experimental/index.html +22 -0
  810. package/dist/serve/docs-ui/docs/whats-experimental.md +33 -0
  811. package/dist/serve/docs-ui/docs/whats-possible/index.html +63 -0
  812. package/dist/serve/docs-ui/docs/whats-possible.md +53 -0
  813. package/dist/serve/docs-ui/docs/which-data-service/index.html +8 -0
  814. package/dist/serve/docs-ui/docs/which-data-service.md +11 -0
  815. package/dist/serve/docs-ui/docs/write-a-rules-test-suite/index.html +85 -0
  816. package/dist/serve/docs-ui/docs/write-a-rules-test-suite.md +119 -0
  817. package/dist/serve/docs-ui/index.html +1 -0
  818. package/dist/serve/docs-ui/llms.txt +308 -0
  819. package/dist/serve/entries/ai.d.ts +4 -0
  820. package/dist/serve/entries/ai.d.ts.map +1 -0
  821. package/dist/serve/entries/ai.js +184 -0
  822. package/dist/serve/entries/ai.js.map +1 -0
  823. package/dist/serve/entries/app-backend.d.ts +2 -0
  824. package/dist/serve/entries/app-backend.d.ts.map +1 -0
  825. package/dist/serve/entries/app-backend.js +4 -0
  826. package/dist/serve/entries/app-backend.js.map +1 -0
  827. package/dist/serve/entries/app-client.d.ts +5 -0
  828. package/dist/serve/entries/app-client.d.ts.map +1 -0
  829. package/dist/serve/entries/app-client.js +23 -0
  830. package/dist/serve/entries/app-client.js.map +1 -0
  831. package/dist/serve/entries/app-session-store.d.ts +14 -0
  832. package/dist/serve/entries/app-session-store.d.ts.map +1 -0
  833. package/dist/serve/entries/app-session-store.js +37 -0
  834. package/dist/serve/entries/app-session-store.js.map +1 -0
  835. package/dist/serve/entries/app.d.ts +2 -0
  836. package/dist/serve/entries/app.d.ts.map +1 -0
  837. package/dist/serve/entries/app.js +10 -0
  838. package/dist/serve/entries/app.js.map +1 -0
  839. package/dist/serve/entries/auth-helper-core.d.ts +52 -0
  840. package/dist/serve/entries/auth-helper-core.d.ts.map +1 -0
  841. package/dist/serve/entries/auth-helper-core.js +118 -0
  842. package/dist/serve/entries/auth-helper-core.js.map +1 -0
  843. package/dist/serve/entries/auth-helper-dom.d.ts +14 -0
  844. package/dist/serve/entries/auth-helper-dom.d.ts.map +1 -0
  845. package/dist/serve/entries/auth-helper-dom.js +116 -0
  846. package/dist/serve/entries/auth-helper-dom.js.map +1 -0
  847. package/dist/serve/entries/auth-helper-runtime.d.ts +5 -0
  848. package/dist/serve/entries/auth-helper-runtime.d.ts.map +1 -0
  849. package/dist/serve/entries/auth-helper-runtime.js +11 -0
  850. package/dist/serve/entries/auth-helper-runtime.js.map +1 -0
  851. package/dist/serve/entries/auth.d.ts +77 -0
  852. package/dist/serve/entries/auth.d.ts.map +1 -0
  853. package/dist/serve/entries/auth.js +201 -0
  854. package/dist/serve/entries/auth.js.map +1 -0
  855. package/dist/serve/entries/bridge-url.d.ts +25 -0
  856. package/dist/serve/entries/bridge-url.d.ts.map +1 -0
  857. package/dist/serve/entries/bridge-url.js +30 -0
  858. package/dist/serve/entries/bridge-url.js.map +1 -0
  859. package/dist/serve/entries/database.d.ts +46 -0
  860. package/dist/serve/entries/database.d.ts.map +1 -0
  861. package/dist/serve/entries/database.js +80 -0
  862. package/dist/serve/entries/database.js.map +1 -0
  863. package/dist/serve/entries/firestore.d.ts +104 -0
  864. package/dist/serve/entries/firestore.d.ts.map +1 -0
  865. package/dist/serve/entries/firestore.js +202 -0
  866. package/dist/serve/entries/firestore.js.map +1 -0
  867. package/dist/serve/entries/init.d.ts +2 -0
  868. package/dist/serve/entries/init.d.ts.map +1 -0
  869. package/dist/serve/entries/init.js +40 -0
  870. package/dist/serve/entries/init.js.map +1 -0
  871. package/dist/serve/entries/keepalive.d.ts +20 -0
  872. package/dist/serve/entries/keepalive.d.ts.map +1 -0
  873. package/dist/serve/entries/keepalive.js +38 -0
  874. package/dist/serve/entries/keepalive.js.map +1 -0
  875. package/dist/serve/entries/messaging-sw.d.ts +10 -0
  876. package/dist/serve/entries/messaging-sw.d.ts.map +1 -0
  877. package/dist/serve/entries/messaging-sw.js +36 -0
  878. package/dist/serve/entries/messaging-sw.js.map +1 -0
  879. package/dist/serve/entries/messaging.d.ts +11 -0
  880. package/dist/serve/entries/messaging.d.ts.map +1 -0
  881. package/dist/serve/entries/messaging.js +53 -0
  882. package/dist/serve/entries/messaging.js.map +1 -0
  883. package/dist/serve/entries/runtime.d.ts +46 -0
  884. package/dist/serve/entries/runtime.d.ts.map +1 -0
  885. package/dist/serve/entries/runtime.js +435 -0
  886. package/dist/serve/entries/runtime.js.map +1 -0
  887. package/dist/serve/entries/session-store.d.ts +48 -0
  888. package/dist/serve/entries/session-store.d.ts.map +1 -0
  889. package/dist/serve/entries/session-store.js +82 -0
  890. package/dist/serve/entries/session-store.js.map +1 -0
  891. package/dist/serve/entries/storage.d.ts +25 -0
  892. package/dist/serve/entries/storage.d.ts.map +1 -0
  893. package/dist/serve/entries/storage.js +61 -0
  894. package/dist/serve/entries/storage.js.map +1 -0
  895. package/dist/serve/entries/tab-sync-wiring.d.ts +88 -0
  896. package/dist/serve/entries/tab-sync-wiring.d.ts.map +1 -0
  897. package/dist/serve/entries/tab-sync-wiring.js +217 -0
  898. package/dist/serve/entries/tab-sync-wiring.js.map +1 -0
  899. package/dist/serve/entries/worker-runtime.d.ts +10 -0
  900. package/dist/serve/entries/worker-runtime.d.ts.map +1 -0
  901. package/dist/serve/entries/worker-runtime.js +59 -0
  902. package/dist/serve/entries/worker-runtime.js.map +1 -0
  903. package/dist/serve/init-payload.d.ts +21 -0
  904. package/dist/serve/init-payload.d.ts.map +1 -0
  905. package/dist/serve/init-payload.js +2 -0
  906. package/dist/serve/init-payload.js.map +1 -0
  907. package/dist/serve/namespace.d.ts +73 -0
  908. package/dist/serve/namespace.d.ts.map +1 -0
  909. package/dist/serve/namespace.js +470 -0
  910. package/dist/serve/namespace.js.map +1 -0
  911. package/dist/serve/open-browser.d.ts +23 -0
  912. package/dist/serve/open-browser.d.ts.map +1 -0
  913. package/dist/serve/open-browser.js +58 -0
  914. package/dist/serve/open-browser.js.map +1 -0
  915. package/dist/serve/rules.d.ts +77 -0
  916. package/dist/serve/rules.d.ts.map +1 -0
  917. package/dist/serve/rules.js +202 -0
  918. package/dist/serve/rules.js.map +1 -0
  919. package/dist/serve/sandbox-marker.d.ts +9 -0
  920. package/dist/serve/sandbox-marker.d.ts.map +1 -0
  921. package/dist/serve/sandbox-marker.js +31 -0
  922. package/dist/serve/sandbox-marker.js.map +1 -0
  923. package/dist/serve/server.d.ts +135 -0
  924. package/dist/serve/server.d.ts.map +1 -0
  925. package/dist/serve/server.js +328 -0
  926. package/dist/serve/server.js.map +1 -0
  927. package/dist/serve/standalone-assets.d.ts +67 -0
  928. package/dist/serve/standalone-assets.d.ts.map +1 -0
  929. package/dist/serve/standalone-assets.js +134 -0
  930. package/dist/serve/standalone-assets.js.map +1 -0
  931. package/dist/serve/state-store.d.ts +45 -0
  932. package/dist/serve/state-store.d.ts.map +1 -0
  933. package/dist/serve/state-store.js +120 -0
  934. package/dist/serve/state-store.js.map +1 -0
  935. package/dist/serve/studio/disk-project-store.d.ts +9 -0
  936. package/dist/serve/studio/disk-project-store.d.ts.map +1 -0
  937. package/dist/serve/studio/disk-project-store.js +173 -0
  938. package/dist/serve/studio/disk-project-store.js.map +1 -0
  939. package/dist/serve/studio/disk-workspace.d.ts +14 -0
  940. package/dist/serve/studio/disk-workspace.d.ts.map +1 -0
  941. package/dist/serve/studio/disk-workspace.js +152 -0
  942. package/dist/serve/studio/disk-workspace.js.map +1 -0
  943. package/dist/serve/studio/index.d.ts +10 -0
  944. package/dist/serve/studio/index.d.ts.map +1 -0
  945. package/dist/serve/studio/index.js +9 -0
  946. package/dist/serve/studio/index.js.map +1 -0
  947. package/dist/serve/studio/routes.d.ts +40 -0
  948. package/dist/serve/studio/routes.d.ts.map +1 -0
  949. package/dist/serve/studio/routes.js +182 -0
  950. package/dist/serve/studio/routes.js.map +1 -0
  951. package/dist/serve/studio/store-types.d.ts +45 -0
  952. package/dist/serve/studio/store-types.d.ts.map +1 -0
  953. package/dist/serve/studio/store-types.js +11 -0
  954. package/dist/serve/studio/store-types.js.map +1 -0
  955. package/dist/serve/studio-ui/assets/RulesCodeEditor-BZpD57II.js +23 -0
  956. package/dist/serve/studio-ui/assets/index-Bsa-TQNK.css +1 -0
  957. package/dist/serve/studio-ui/assets/index-DGaVuOhE.js +1211 -0
  958. package/dist/serve/studio-ui/assets/seed-CTmn6YuO.js +2 -0
  959. package/dist/serve/studio-ui/index.html +32 -0
  960. package/dist/serve/studio-ui/pyric-logo.svg +76 -0
  961. package/dist/serve/vite-plugin.d.ts +57 -0
  962. package/dist/serve/vite-plugin.d.ts.map +1 -0
  963. package/dist/serve/vite-plugin.js +658 -0
  964. package/dist/serve/vite-plugin.js.map +1 -0
  965. package/dist/serve/worker/client/admin-firestore.d.ts +18 -0
  966. package/dist/serve/worker/client/admin-firestore.d.ts.map +1 -0
  967. package/dist/serve/worker/client/admin-firestore.js +26 -0
  968. package/dist/serve/worker/client/admin-firestore.js.map +1 -0
  969. package/dist/serve/worker/client/ai.d.ts +31 -0
  970. package/dist/serve/worker/client/ai.d.ts.map +1 -0
  971. package/dist/serve/worker/client/ai.js +89 -0
  972. package/dist/serve/worker/client/ai.js.map +1 -0
  973. package/dist/serve/worker/client/auth.d.ts +168 -0
  974. package/dist/serve/worker/client/auth.d.ts.map +1 -0
  975. package/dist/serve/worker/client/auth.js +322 -0
  976. package/dist/serve/worker/client/auth.js.map +1 -0
  977. package/dist/serve/worker/client/connection.d.ts +80 -0
  978. package/dist/serve/worker/client/connection.d.ts.map +1 -0
  979. package/dist/serve/worker/client/connection.js +148 -0
  980. package/dist/serve/worker/client/connection.js.map +1 -0
  981. package/dist/serve/worker/client/core.d.ts +109 -0
  982. package/dist/serve/worker/client/core.d.ts.map +1 -0
  983. package/dist/serve/worker/client/core.js +248 -0
  984. package/dist/serve/worker/client/core.js.map +1 -0
  985. package/dist/serve/worker/client/disconnect.d.ts +7 -0
  986. package/dist/serve/worker/client/disconnect.d.ts.map +1 -0
  987. package/dist/serve/worker/client/disconnect.js +26 -0
  988. package/dist/serve/worker/client/disconnect.js.map +1 -0
  989. package/dist/serve/worker/client/firestore-reads.d.ts +49 -0
  990. package/dist/serve/worker/client/firestore-reads.d.ts.map +1 -0
  991. package/dist/serve/worker/client/firestore-reads.js +139 -0
  992. package/dist/serve/worker/client/firestore-reads.js.map +1 -0
  993. package/dist/serve/worker/client/firestore-refs.d.ts +54 -0
  994. package/dist/serve/worker/client/firestore-refs.d.ts.map +1 -0
  995. package/dist/serve/worker/client/firestore-refs.js +167 -0
  996. package/dist/serve/worker/client/firestore-refs.js.map +1 -0
  997. package/dist/serve/worker/client/firestore-writes.d.ts +70 -0
  998. package/dist/serve/worker/client/firestore-writes.d.ts.map +1 -0
  999. package/dist/serve/worker/client/firestore-writes.js +169 -0
  1000. package/dist/serve/worker/client/firestore-writes.js.map +1 -0
  1001. package/dist/serve/worker/client/handles.d.ts +73 -0
  1002. package/dist/serve/worker/client/handles.d.ts.map +1 -0
  1003. package/dist/serve/worker/client/handles.js +4 -0
  1004. package/dist/serve/worker/client/handles.js.map +1 -0
  1005. package/dist/serve/worker/client/messaging.d.ts +16 -0
  1006. package/dist/serve/worker/client/messaging.d.ts.map +1 -0
  1007. package/dist/serve/worker/client/messaging.js +60 -0
  1008. package/dist/serve/worker/client/messaging.js.map +1 -0
  1009. package/dist/serve/worker/client/presence.d.ts +43 -0
  1010. package/dist/serve/worker/client/presence.d.ts.map +1 -0
  1011. package/dist/serve/worker/client/presence.js +132 -0
  1012. package/dist/serve/worker/client/presence.js.map +1 -0
  1013. package/dist/serve/worker/client/rtdb.d.ts +36 -0
  1014. package/dist/serve/worker/client/rtdb.d.ts.map +1 -0
  1015. package/dist/serve/worker/client/rtdb.js +241 -0
  1016. package/dist/serve/worker/client/rtdb.js.map +1 -0
  1017. package/dist/serve/worker/client/rules.d.ts +24 -0
  1018. package/dist/serve/worker/client/rules.d.ts.map +1 -0
  1019. package/dist/serve/worker/client/rules.js +44 -0
  1020. package/dist/serve/worker/client/rules.js.map +1 -0
  1021. package/dist/serve/worker/client/service-worker-connection.d.ts +3 -0
  1022. package/dist/serve/worker/client/service-worker-connection.d.ts.map +1 -0
  1023. package/dist/serve/worker/client/service-worker-connection.js +53 -0
  1024. package/dist/serve/worker/client/service-worker-connection.js.map +1 -0
  1025. package/dist/serve/worker/client/snapshots.d.ts +32 -0
  1026. package/dist/serve/worker/client/snapshots.d.ts.map +1 -0
  1027. package/dist/serve/worker/client/snapshots.js +46 -0
  1028. package/dist/serve/worker/client/snapshots.js.map +1 -0
  1029. package/dist/serve/worker/client/storage.d.ts +64 -0
  1030. package/dist/serve/worker/client/storage.d.ts.map +1 -0
  1031. package/dist/serve/worker/client/storage.js +125 -0
  1032. package/dist/serve/worker/client/storage.js.map +1 -0
  1033. package/dist/serve/worker/client/studio.d.ts +32 -0
  1034. package/dist/serve/worker/client/studio.d.ts.map +1 -0
  1035. package/dist/serve/worker/client/studio.js +61 -0
  1036. package/dist/serve/worker/client/studio.js.map +1 -0
  1037. package/dist/serve/worker/client.d.ts +43 -0
  1038. package/dist/serve/worker/client.d.ts.map +1 -0
  1039. package/dist/serve/worker/client.js +44 -0
  1040. package/dist/serve/worker/client.js.map +1 -0
  1041. package/dist/serve/worker/entry.d.ts +40 -0
  1042. package/dist/serve/worker/entry.d.ts.map +1 -0
  1043. package/dist/serve/worker/entry.js +144 -0
  1044. package/dist/serve/worker/entry.js.map +1 -0
  1045. package/dist/serve/worker/host/admin-firestore.d.ts +17 -0
  1046. package/dist/serve/worker/host/admin-firestore.d.ts.map +1 -0
  1047. package/dist/serve/worker/host/admin-firestore.js +92 -0
  1048. package/dist/serve/worker/host/admin-firestore.js.map +1 -0
  1049. package/dist/serve/worker/host/connection.d.ts +40 -0
  1050. package/dist/serve/worker/host/connection.d.ts.map +1 -0
  1051. package/dist/serve/worker/host/connection.js +153 -0
  1052. package/dist/serve/worker/host/connection.js.map +1 -0
  1053. package/dist/serve/worker/host/core.d.ts +159 -0
  1054. package/dist/serve/worker/host/core.d.ts.map +1 -0
  1055. package/dist/serve/worker/host/core.js +296 -0
  1056. package/dist/serve/worker/host/core.js.map +1 -0
  1057. package/dist/serve/worker/host/dispatch.d.ts +34 -0
  1058. package/dist/serve/worker/host/dispatch.d.ts.map +1 -0
  1059. package/dist/serve/worker/host/dispatch.js +267 -0
  1060. package/dist/serve/worker/host/dispatch.js.map +1 -0
  1061. package/dist/serve/worker/host/firestore-reads.d.ts +17 -0
  1062. package/dist/serve/worker/host/firestore-reads.d.ts.map +1 -0
  1063. package/dist/serve/worker/host/firestore-reads.js +108 -0
  1064. package/dist/serve/worker/host/firestore-reads.js.map +1 -0
  1065. package/dist/serve/worker/host/firestore-writes.d.ts +37 -0
  1066. package/dist/serve/worker/host/firestore-writes.d.ts.map +1 -0
  1067. package/dist/serve/worker/host/firestore-writes.js +409 -0
  1068. package/dist/serve/worker/host/firestore-writes.js.map +1 -0
  1069. package/dist/serve/worker/host/presence.d.ts +38 -0
  1070. package/dist/serve/worker/host/presence.d.ts.map +1 -0
  1071. package/dist/serve/worker/host/presence.js +280 -0
  1072. package/dist/serve/worker/host/presence.js.map +1 -0
  1073. package/dist/serve/worker/host/rtdb.d.ts +18 -0
  1074. package/dist/serve/worker/host/rtdb.d.ts.map +1 -0
  1075. package/dist/serve/worker/host/rtdb.js +128 -0
  1076. package/dist/serve/worker/host/rtdb.js.map +1 -0
  1077. package/dist/serve/worker/host/rules.d.ts +17 -0
  1078. package/dist/serve/worker/host/rules.d.ts.map +1 -0
  1079. package/dist/serve/worker/host/rules.js +118 -0
  1080. package/dist/serve/worker/host/rules.js.map +1 -0
  1081. package/dist/serve/worker/host/storage.d.ts +19 -0
  1082. package/dist/serve/worker/host/storage.d.ts.map +1 -0
  1083. package/dist/serve/worker/host/storage.js +260 -0
  1084. package/dist/serve/worker/host/storage.js.map +1 -0
  1085. package/dist/serve/worker/host/studio.d.ts +13 -0
  1086. package/dist/serve/worker/host/studio.d.ts.map +1 -0
  1087. package/dist/serve/worker/host/studio.js +30 -0
  1088. package/dist/serve/worker/host/studio.js.map +1 -0
  1089. package/dist/serve/worker/host/subscriptions.d.ts +21 -0
  1090. package/dist/serve/worker/host/subscriptions.d.ts.map +1 -0
  1091. package/dist/serve/worker/host/subscriptions.js +162 -0
  1092. package/dist/serve/worker/host/subscriptions.js.map +1 -0
  1093. package/dist/serve/worker/host-ai.d.ts +59 -0
  1094. package/dist/serve/worker/host-ai.d.ts.map +1 -0
  1095. package/dist/serve/worker/host-ai.js +158 -0
  1096. package/dist/serve/worker/host-ai.js.map +1 -0
  1097. package/dist/serve/worker/host-auth.d.ts +47 -0
  1098. package/dist/serve/worker/host-auth.d.ts.map +1 -0
  1099. package/dist/serve/worker/host-auth.js +464 -0
  1100. package/dist/serve/worker/host-auth.js.map +1 -0
  1101. package/dist/serve/worker/host-context.d.ts +220 -0
  1102. package/dist/serve/worker/host-context.d.ts.map +1 -0
  1103. package/dist/serve/worker/host-context.js +45 -0
  1104. package/dist/serve/worker/host-context.js.map +1 -0
  1105. package/dist/serve/worker/host-events.d.ts +21 -0
  1106. package/dist/serve/worker/host-events.d.ts.map +1 -0
  1107. package/dist/serve/worker/host-events.js +87 -0
  1108. package/dist/serve/worker/host-events.js.map +1 -0
  1109. package/dist/serve/worker/host-messaging.d.ts +60 -0
  1110. package/dist/serve/worker/host-messaging.d.ts.map +1 -0
  1111. package/dist/serve/worker/host-messaging.js +226 -0
  1112. package/dist/serve/worker/host-messaging.js.map +1 -0
  1113. package/dist/serve/worker/host.d.ts +36 -0
  1114. package/dist/serve/worker/host.d.ts.map +1 -0
  1115. package/dist/serve/worker/host.js +39 -0
  1116. package/dist/serve/worker/host.js.map +1 -0
  1117. package/dist/serve/worker/index.d.ts +22 -0
  1118. package/dist/serve/worker/index.d.ts.map +1 -0
  1119. package/dist/serve/worker/index.js +61 -0
  1120. package/dist/serve/worker/index.js.map +1 -0
  1121. package/dist/serve/worker/presence-timing.d.ts +14 -0
  1122. package/dist/serve/worker/presence-timing.d.ts.map +1 -0
  1123. package/dist/serve/worker/presence-timing.js +14 -0
  1124. package/dist/serve/worker/presence-timing.js.map +1 -0
  1125. package/dist/serve/worker/protocol.d.ts +1150 -0
  1126. package/dist/serve/worker/protocol.d.ts.map +1 -0
  1127. package/dist/serve/worker/protocol.js +228 -0
  1128. package/dist/serve/worker/protocol.js.map +1 -0
  1129. package/dist/serve/worker/serve-init.d.ts +201 -0
  1130. package/dist/serve/worker/serve-init.d.ts.map +1 -0
  1131. package/dist/serve/worker/serve-init.js +579 -0
  1132. package/dist/serve/worker/serve-init.js.map +1 -0
  1133. package/dist/serve/worker/service-worker-channel.d.ts +23 -0
  1134. package/dist/serve/worker/service-worker-channel.d.ts.map +1 -0
  1135. package/dist/serve/worker/service-worker-channel.js +9 -0
  1136. package/dist/serve/worker/service-worker-channel.js.map +1 -0
  1137. package/dist/serve/worker/service-worker-relay.d.ts +22 -0
  1138. package/dist/serve/worker/service-worker-relay.d.ts.map +1 -0
  1139. package/dist/serve/worker/service-worker-relay.js +63 -0
  1140. package/dist/serve/worker/service-worker-relay.js.map +1 -0
  1141. package/dist/serve/writer-lock.d.ts +32 -0
  1142. package/dist/serve/writer-lock.d.ts.map +1 -0
  1143. package/dist/serve/writer-lock.js +43 -0
  1144. package/dist/serve/writer-lock.js.map +1 -0
  1145. package/dist/verify/cases.d.ts +37 -0
  1146. package/dist/verify/cases.d.ts.map +1 -0
  1147. package/dist/verify/cases.js +173 -0
  1148. package/dist/verify/cases.js.map +1 -0
  1149. package/dist/verify/fixture.d.ts +100 -0
  1150. package/dist/verify/fixture.d.ts.map +1 -0
  1151. package/dist/verify/fixture.js +156 -0
  1152. package/dist/verify/fixture.js.map +1 -0
  1153. package/dist/verify/index.d.ts +102 -0
  1154. package/dist/verify/index.d.ts.map +1 -0
  1155. package/dist/verify/index.js +318 -0
  1156. package/dist/verify/index.js.map +1 -0
  1157. package/dist/verify/tools.d.ts +7 -0
  1158. package/dist/verify/tools.d.ts.map +1 -0
  1159. package/dist/verify/tools.js +83 -0
  1160. package/dist/verify/tools.js.map +1 -0
  1161. package/dist/version/compat-target.d.ts +18 -0
  1162. package/dist/version/compat-target.d.ts.map +1 -0
  1163. package/dist/version/compat-target.js +18 -0
  1164. package/dist/version/compat-target.js.map +1 -0
  1165. package/dist/vite.d.ts +12 -0
  1166. package/dist/vite.d.ts.map +1 -0
  1167. package/dist/vite.js +16 -0
  1168. package/dist/vite.js.map +1 -0
  1169. package/package.json +133 -0
@@ -0,0 +1,2753 @@
1
+ <!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>API reference: @pyric/ui/firestore · Pyric Studio</title><meta name="description" content="Published declarations for @pyric/ui/firestore."><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet"><link rel="stylesheet" href="/__pyric/ui/_astro/_slug_.CQYSemvw.css"></head> <body> <header class="studio__bar"> <div class="studio__bar-inner"> <a class="studio__brand" href="/__pyric/ui/" aria-label="Pyric Studio">Pyric</a> <nav class="studio__nav" aria-label="Studio tabs"> <a class="studio__nav-tab" href="/__pyric/ui/"> Home </a><a class="studio__nav-tab" href="/__pyric/ui/firestore"> Firestore </a><a class="studio__nav-tab" href="/__pyric/ui/auth"> Auth </a><a class="studio__nav-tab" href="/__pyric/ui/rtdb"> RTDB </a><a class="studio__nav-tab" href="/__pyric/ui/storage"> Storage </a><a class="studio__nav-tab" href="/__pyric/ui/traffic"> Traffic </a><a class="studio__nav-tab" href="/__pyric/ui/settings"> Settings </a><a class="studio__nav-tab" href="/__pyric/ui/docs" aria-current="page"> Docs </a> </nav> </div> </header> <div class="docs-shell"> <details class="docs-nav-drawer"> <summary>Navigate</summary> <nav class="docs-nav" aria-label="Documentation"> <div class="docs-search" data-index-url="/__pyric/ui/docs/index.json"> <div class="docs-search-field"> <svg class="docs-search-icon" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"> <path d="M11.5 11.5 15 15M13 7A6 6 0 1 1 1 7a6 6 0 0 1 12 0Z" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></path> </svg> <input type="text" class="docs-search-input" placeholder="Search docs" aria-label="Search docs" autocomplete="off" spellcheck="false"> <kbd class="docs-search-kbd">⌘K</kbd> </div> <ul class="docs-search-results" hidden></ul> </div> <script type="module">let i=null;function d(t){return i||(i=fetch(t).then(e=>e.json())),i}function l(t,e){return t.title.toLowerCase().includes(e)||t.excerpt.toLowerCase().includes(e)?!0:t.headings.some(r=>r.text.toLowerCase().includes(e))}function u(t,e,r){if(e.innerHTML="",t.length===0){e.hidden=!1;{const n=document.createElement("li");n.className="docs-search-empty",n.textContent="No matches",e.appendChild(n)}return}e.hidden=!1;for(const n of t.slice(0,8)){const s=document.createElement("li"),c=document.createElement("a");c.href=n.path;const o=document.createElement("span");o.className="docs-search-result-title",o.textContent=n.title;const a=document.createElement("span");a.className="docs-search-result-meta",a.textContent=[n.group,n.section].filter(Boolean).join(" / "),c.append(o,a),s.appendChild(c),e.appendChild(s)}}document.querySelectorAll(".docs-search").forEach(t=>{const e=t.dataset.indexUrl,r=t.querySelector(".docs-search-input"),n=t.querySelector(".docs-search-results");r.addEventListener("input",async()=>{const s=r.value.trim().toLowerCase();if(!s){n.hidden=!0,n.innerHTML="";return}const{pages:c}=await d(e);r.value.trim().toLowerCase()===s&&u(c.filter(o=>l(o,s)),n)}),r.addEventListener("focus",()=>{d(e),n.childElementCount>0&&(n.hidden=!1)}),r.addEventListener("keydown",s=>{s.key==="Escape"&&(r.value="",n.hidden=!0,n.innerHTML="",r.blur())}),r.addEventListener("blur",()=>{window.setTimeout(()=>{n.hidden=!0},150)})});document.addEventListener("keydown",t=>{if(!(t.metaKey||t.ctrlKey)||t.key.toLowerCase()!=="k")return;const e=[...document.querySelectorAll(".docs-search-input")].find(r=>r.offsetParent!==null);e&&(t.preventDefault(),e.focus(),e.select())});</script> <a class="docs-nav-toplink" href="/__pyric/ui/docs/overview/"> Overview </a><details class="docs-nav-group"> <summary>Run locally</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/how-the-swap-works/"> How the swap works </a> </li><li> <a href="/__pyric/ui/docs/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Develop with Firebase APIs</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/sign-in-and-manage-users/"> Sign in and manage users </a> </li><li> <a href="/__pyric/ui/docs/store-and-query-data/"> Store and query data </a> </li><li> <a href="/__pyric/ui/docs/sync-realtime-data/"> Sync realtime data </a> </li><li> <a href="/__pyric/ui/docs/store-files/"> Store files </a> </li><li> <a href="/__pyric/ui/docs/receive-messages/"> Receive messages </a> </li><li> <a href="/__pyric/ui/docs/run-ai-logic-locally/"> Run AI Logic locally </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-how-to-run-rtdb-onvaluecreated/"> Run an RTDB function locally </a> </li><li> <a href="/__pyric/ui/docs/which-data-service/"> Which data service? </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Inspect and correct</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <h2 class="docs-nav-heading"> Inspect the sandbox </h2> <ul> <li> <a href="/__pyric/ui/docs/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/shape-your-data/"> Seed, snapshot, replay </a> </li><li> <a href="/__pyric/ui/docs/watch-and-review/"> Review agent activity </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading"> Correct Security Rules </h2> <ul> <li> <a href="/__pyric/ui/docs/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/rules-patterns/"> Rules patterns </a> </li><li> <a href="/__pyric/ui/docs/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/whats-possible/"> Case studies </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading"> Work with an agent </h2> <ul> <li> <a href="/__pyric/ui/docs/what-your-agent-can-do/"> Work through an agent </a> </li><li> <a href="/__pyric/ui/docs/skills/"> Agent skills </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Verify the boundary</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-how-to-verify-against-a-captured-session/"> Verify a captured session </a> </li><li> <a href="/__pyric/ui/docs/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Ship unchanged</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/set-up-the-project/"> Set up the Firebase project </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Conformance</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/how-we-know-it-matches-firebase/"> Conformance </a> </li><li> <a href="/__pyric/ui/docs/whats-experimental/"> What&#39;s experimental </a> </li><li> <a href="/__pyric/ui/docs/pyric-conformance-scores/"> Conformance scores </a> </li><li> <a href="/__pyric/ui/docs/pyric-app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-compat/"> Rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-functions-rtdb-compat/"> Functions · RTDB </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" open> <summary>Reference</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli/"> @pyric/cli </a> </li><li> <a href="/__pyric/ui/docs/pyric-explanation-versioning-and-compatibility/"> pyric </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore/"> pyric / firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules/"> pyric / rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox/"> pyric / sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage/"> pyric / storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth/"> pyric / auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-database/"> pyric / database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-app/"> pyric-admin / app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore/"> pyric-admin / firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth/"> pyric-admin / auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database/"> pyric-admin / database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage/"> pyric-admin / storage </a> </li><li> <a href="/__pyric/ui/docs/ui/"> @pyric/ui </a> </li><li> <a href="/__pyric/ui/docs/api-reference/" aria-current="true"> API reference </a> </li> </ul> </div> </div> </details> </nav> </details> <nav class="docs-nav" aria-label="Documentation"> <div class="docs-search" data-index-url="/__pyric/ui/docs/index.json"> <div class="docs-search-field"> <svg class="docs-search-icon" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"> <path d="M11.5 11.5 15 15M13 7A6 6 0 1 1 1 7a6 6 0 0 1 12 0Z" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></path> </svg> <input type="text" class="docs-search-input" placeholder="Search docs" aria-label="Search docs" autocomplete="off" spellcheck="false"> <kbd class="docs-search-kbd">⌘K</kbd> </div> <ul class="docs-search-results" hidden></ul> </div> <a class="docs-nav-toplink" href="/__pyric/ui/docs/overview/" id="nav-group-overview"> Overview </a><details class="docs-nav-group" id="nav-group-run-locally"> <summary>Run locally</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/how-the-swap-works/"> How the swap works </a> </li><li> <a href="/__pyric/ui/docs/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-develop-with-firebase-apis"> <summary>Develop with Firebase APIs</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/sign-in-and-manage-users/"> Sign in and manage users </a> </li><li> <a href="/__pyric/ui/docs/store-and-query-data/"> Store and query data </a> </li><li> <a href="/__pyric/ui/docs/sync-realtime-data/"> Sync realtime data </a> </li><li> <a href="/__pyric/ui/docs/store-files/"> Store files </a> </li><li> <a href="/__pyric/ui/docs/receive-messages/"> Receive messages </a> </li><li> <a href="/__pyric/ui/docs/run-ai-logic-locally/"> Run AI Logic locally </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-how-to-run-rtdb-onvaluecreated/"> Run an RTDB function locally </a> </li><li> <a href="/__pyric/ui/docs/which-data-service/"> Which data service? </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-inspect-and-correct"> <summary>Inspect and correct</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <h2 class="docs-nav-heading" id="nav-section-inspect-and-correct-inspect-the-sandbox"> Inspect the sandbox </h2> <ul> <li> <a href="/__pyric/ui/docs/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/shape-your-data/"> Seed, snapshot, replay </a> </li><li> <a href="/__pyric/ui/docs/watch-and-review/"> Review agent activity </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading" id="nav-section-inspect-and-correct-correct-security-rules"> Correct Security Rules </h2> <ul> <li> <a href="/__pyric/ui/docs/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/rules-patterns/"> Rules patterns </a> </li><li> <a href="/__pyric/ui/docs/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/whats-possible/"> Case studies </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading" id="nav-section-inspect-and-correct-work-with-an-agent"> Work with an agent </h2> <ul> <li> <a href="/__pyric/ui/docs/what-your-agent-can-do/"> Work through an agent </a> </li><li> <a href="/__pyric/ui/docs/skills/"> Agent skills </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-verify-the-boundary"> <summary>Verify the boundary</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-how-to-verify-against-a-captured-session/"> Verify a captured session </a> </li><li> <a href="/__pyric/ui/docs/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-ship-unchanged"> <summary>Ship unchanged</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/set-up-the-project/"> Set up the Firebase project </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-conformance"> <summary>Conformance</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/how-we-know-it-matches-firebase/"> Conformance </a> </li><li> <a href="/__pyric/ui/docs/whats-experimental/"> What&#39;s experimental </a> </li><li> <a href="/__pyric/ui/docs/pyric-conformance-scores/"> Conformance scores </a> </li><li> <a href="/__pyric/ui/docs/pyric-app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-compat/"> Rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-functions-rtdb-compat/"> Functions · RTDB </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" id="nav-group-reference" open> <summary>Reference</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli/"> @pyric/cli </a> </li><li> <a href="/__pyric/ui/docs/pyric-explanation-versioning-and-compatibility/"> pyric </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore/"> pyric / firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules/"> pyric / rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox/"> pyric / sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage/"> pyric / storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth/"> pyric / auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-database/"> pyric / database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-app/"> pyric-admin / app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore/"> pyric-admin / firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth/"> pyric-admin / auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database/"> pyric-admin / database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage/"> pyric-admin / storage </a> </li><li> <a href="/__pyric/ui/docs/ui/"> @pyric/ui </a> </li><li> <a href="/__pyric/ui/docs/api-reference/" aria-current="true"> API reference </a> </li> </ul> </div> </div> </details> </nav> <main class="doc-main"> <nav class="docs-breadcrumbs" aria-label="Breadcrumb"> <ol> <li> <a href="/__pyric/ui/docs/api-reference/">API reference</a> </li><li> <span class="docs-breadcrumbs-sep" aria-hidden="true">/</span> <span>@pyric/ui</span> </li><li> <span class="docs-breadcrumbs-sep" aria-hidden="true">/</span> <span aria-current="page">@pyric/ui/firestore</span> </li> </ol> </nav> <header class="api-reference-header"> <p class="api-reference-kicker">API reference</p> <h1><code>@pyric/ui/firestore</code></h1> <p class="api-reference-meta"> 86 published symbols from <code>@pyric/ui</code> </p> <p class="api-reference-source">
2
+ Generated from the TypeScript declarations shipped at this import path.
3
+ </p> </header> <article class="prose api-reference-body"> <!-- Generated from published package declarations via TypeDoc. Do not edit by hand; run bun run docs:api:generate. -->
4
+ <h2 id="interfaces">Interfaces</h2>
5
+ <p><a id="collectionlistprops"></a></p>
6
+ <h3 id="collectionlistprops">CollectionListProps</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
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="classname"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="collections"></a> <code>collections</code></td><td align="left"><code>CollectionReference</code>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="emptystate"></a> <code>emptyState?</code></td><td align="left"><code>ReactNode</code></td><td align="left">Optional empty-state node. Rendered when <code>collections.length</code> is 0 and the list isn’t loading.</td></tr><tr><td align="left"><a id="error"></a> <code>error?</code></td><td align="left"><code>Error</code></td><td align="left">-</td></tr><tr><td align="left"><a id="isloading"></a> <code>isLoading?</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="onselect"></a> <code>onSelect?</code></td><td align="left">(<code>collection</code>: <code>CollectionReference</code>) => <code>void</code></td><td align="left">Fired when a list item is clicked. Consumer wires navigation.</td></tr></tbody></table></div>
49
+ <hr>
50
+ <p><a id="deletewithconfirmprops"></a></p>
51
+ <h3 id="deletewithconfirmprops">DeleteWithConfirmProps</h3>
52
+ <h4 id="properties-1">Properties</h4>
53
+ <div class="table-scroll">
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="body"></a> <code>body?</code></td><td align="left"><code>ReactNode</code></td><td align="left">Confirm-dialog body.</td></tr><tr><td align="left"><a id="classname-1"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">Class forwarded to the default trigger button.</td></tr><tr><td align="left"><a id="confirmlabel"></a> <code>confirmLabel?</code></td><td align="left"><code>string</code></td><td align="left">Label on the destructive button.</td></tr><tr><td align="left"><a id="impl"></a> <code>impl</code></td><td align="left"><a href="#recursivedeleteimpl"><code>RecursiveDeleteImpl</code></a></td><td align="left">Implementation that walks the tree + deletes. Consumer-supplied. Sandbox-backed apps usually wire <code>pyric/sandbox</code> introspection; production apps usually call a Cloud Function.</td></tr><tr><td align="left"><a id="ondeleted"></a> <code>onDeleted?</code></td><td align="left">() => <code>void</code></td><td align="left">Fired after the delete iterator finishes successfully.</td></tr><tr><td align="left"><a id="rendertrigger"></a> <code>renderTrigger?</code></td><td align="left">(<code>props</code>: { <code>isRunning</code>: <code>boolean</code>; <code>onClick</code>: () => <code>void</code>; <code>progress</code>: <code>number</code>; }) => <code>ReactNode</code></td><td align="left">Optional render override for the trigger button.</td></tr><tr><td align="left"><a id="target"></a> <code>target</code></td><td align="left"><code>any</code></td><td align="left">The doc / collection to delete.</td></tr><tr><td align="left"><a id="title"></a> <code>title?</code></td><td align="left"><code>string</code></td><td align="left">Confirm-dialog title. Defaults to a sensible derivation from the target’s path.</td></tr></tbody></table></div>
104
+ <hr>
105
+ <p><a id="documenteditorrootprops"></a></p>
106
+ <h3 id="documenteditorrootprops">DocumentEditorRootProps</h3>
107
+ <h4 id="properties-2">Properties</h4>
108
+ <div class="table-scroll">
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="children"></a> <code>children</code></td><td align="left"><code>ReactNode</code></td><td align="left">-</td></tr><tr><td align="left"><a id="classname-2"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="fieldeditors"></a> <code>fieldEditors?</code></td><td align="left"><a href="#fieldeditorregistry"><code>FieldEditorRegistry</code></a></td><td align="left">Override or extend the built-in field editors.</td></tr><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. Built into the editor’s tree on first mount; later changes don’t rebuild — call <code>editor.reset()</code> to re-initialize from a fresh <code>initial</code>.</td></tr><tr><td align="left"><a id="onchange"></a> <code>onChange?</code></td><td align="left">(<code>state</code>: <a href="#usedocumenteditorresult"><code>UseDocumentEditorResult</code></a>) => <code>void</code></td><td align="left">Called on every state change with the latest editor state. The parent typically watches <code>state.isValid</code> + <code>state.isDirty</code> to enable/disable a Save button.</td></tr></tbody></table></div>
144
+ <hr>
145
+ <p><a id="documenteditorstate"></a></p>
146
+ <h3 id="documenteditorstate">DocumentEditorState</h3>
147
+ <p>Reducer state. <code>tree</code> is the live document under edit; <code>initial</code>
148
+ is the snapshot the editor was constructed from (used to
149
+ implement <code>reset</code> and <code>isDirty</code>).</p>
150
+ <h4 id="extended-by">Extended by</h4>
151
+ <ul>
152
+ <li><a href="#usedocumenteditorresult"><code>UseDocumentEditorResult</code></a></li>
153
+ </ul>
154
+ <h4 id="properties-3">Properties</h4>
155
+ <div class="table-scroll">
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+
177
+
178
+
179
+
180
+ <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="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"><a href="#editortree"><code>EditorTree</code></a></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="tree"></a> <code>tree</code></td><td align="left"><a href="#editortree"><code>EditorTree</code></a></td><td align="left">-</td></tr></tbody></table></div>
181
+ <hr>
182
+ <p><a id="documentlistprops"></a></p>
183
+ <h3 id="documentlistprops">DocumentListProps</h3>
184
+ <h4 id="properties-4">Properties</h4>
185
+ <div class="table-scroll">
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+
201
+
202
+
203
+
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+
228
+
229
+
230
+
231
+
232
+
233
+
234
+
235
+
236
+
237
+
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+
263
+
264
+
265
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="classname-3"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="documents"></a> <code>documents</code></td><td align="left"><code>QueryDocumentSnapshot</code>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="emptystate-1"></a> <code>emptyState?</code></td><td align="left"><code>ReactNode</code></td><td align="left">-</td></tr><tr><td align="left"><a id="error-1"></a> <code>error?</code></td><td align="left"><code>Error</code></td><td align="left">-</td></tr><tr><td align="left"><a id="hasmore"></a> <code>hasMore?</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="isloading-1"></a> <code>isLoading?</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="onloadmore"></a> <code>onLoadMore?</code></td><td align="left">() => <code>void</code></td><td align="left">Fired when the user requests another page. Wire to the hook’s <code>loadMore</code>. The component will not render a Load More button when this is undefined.</td></tr><tr><td align="left"><a id="onselect-1"></a> <code>onSelect?</code></td><td align="left">(<code>ref</code>: <code>DocumentReference</code>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="renderlabel"></a> <code>renderLabel?</code></td><td align="left">(<code>doc</code>: <code>QueryDocumentSnapshot</code>) => <code>ReactNode</code></td><td align="left">Optional renderer for the row label. Default renders the doc id. Override to show a field value alongside, an icon, etc.</td></tr><tr><td align="left"><a id="renderrowaction"></a> <code>renderRowAction?</code></td><td align="left">(<code>doc</code>: <code>QueryDocumentSnapshot</code>) => <code>ReactNode</code></td><td align="left">Optional per-row action(s), rendered as a SIBLING of the row’s select button inside the entry (not nested in it — so the action carries its own click handling without an invalid button-in-button). Used for row-level affordances like delete.</td></tr><tr><td align="left"><a id="rowheight"></a> <code>rowHeight?</code></td><td align="left"><code>number</code> | (<code>index</code>: <code>number</code>) => <code>number</code></td><td align="left">Estimated row height when virtualizing. Default 36 — matches a single-line text button at 13px font + ~10px padding. Pass a function for variable sizing (TanStack measures the actual height via ResizeObserver after the first paint anyway).</td></tr><tr><td align="left"><a id="updatescope"></a> <code>updateScope?</code></td><td align="left"><code>string</code></td><td align="left">Stable collection/query identity used to reset update highlighting when the rendered list changes scope.</td></tr><tr><td align="left"><a id="virtualizedheight"></a> <code>virtualizedHeight?</code></td><td align="left"><code>string</code> | <code>number</code></td><td align="left">Pixel height the virtualized scroll container fills. Only applies when <code>documents.length > virtualizeThreshold</code>. Default <code>'60vh'</code> — consumers usually constrain via their layout.</td></tr><tr><td align="left"><a id="virtualizethreshold"></a> <code>virtualizeThreshold?</code></td><td align="left"><code>number</code></td><td align="left">Above this row count, the list switches to virtualization via <code>&#x3C;VirtualList></code>. Default 100. Set to <code>Infinity</code> to disable (e.g. when measuring layout shifts is more important than scroll perf).</td></tr></tbody></table></div>
266
+ <hr>
267
+ <p><a id="documentpreviewprops"></a></p>
268
+ <h3 id="documentpreviewprops">DocumentPreviewProps</h3>
269
+ <h4 id="properties-5">Properties</h4>
270
+ <div class="table-scroll">
271
+
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+
291
+
292
+
293
+
294
+
295
+
296
+
297
+
298
+
299
+
300
+
301
+
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+
324
+
325
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="classname-4"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">Forwarded to the root <code>&#x3C;div></code>.</td></tr><tr><td align="left"><a id="documentref"></a> <code>documentRef?</code></td><td align="left"><code>any</code></td><td align="left">The document’s own reference. Required to surface its subcollections — <code>DocumentSnapshot</code> (as typed by <code>pyric/firestore</code>) doesn’t expose <code>.ref</code>, so the consumer threads the ref it already holds from fetching the doc. Without it (or without <a href="#listsubcollections">listSubcollections</a>) the Subcollections section is omitted.</td></tr><tr><td align="left"><a id="emptystate-2"></a> <code>emptyState?</code></td><td align="left"><code>ReactNode</code></td><td align="left">Content rendered when the snapshot is missing or <code>!exists()</code>. Defaults to <code>null</code> (renders nothing).</td></tr><tr><td align="left"><a id="fieldeditors-1"></a> <code>fieldEditors?</code></td><td align="left"><a href="#fieldeditorregistry"><code>FieldEditorRegistry</code></a></td><td align="left">Override or extend the built-in field editors. Merged on top of <a href="#defaultfieldeditors">defaultFieldEditors</a> — only the keys you provide override.</td></tr><tr><td align="left"><a id="firestore"></a> <code>firestore?</code></td><td align="left"><code>Firestore</code></td><td align="left">Firestore handle passed to <a href="#listsubcollections">listSubcollections</a>. Required alongside <code>documentRef</code> + <code>listSubcollections</code> to surface the Subcollections section (the same explicit-handle shape <code>ReferencePicker</code> uses).</td></tr><tr><td align="left"><a id="listsubcollections"></a> <code>listSubcollections?</code></td><td align="left"><a href="#listsubcollections-2"><code>ListSubcollections</code></a></td><td align="left">Injected lister for the document’s subcollections. The modular Web SDK has no client-side <code>listCollections</code>; sandbox-backed apps wire <code>pyric/sandbox</code>’s in-process listing, production apps pass a known list or a server proxy. Same shape <code>ReferencePicker</code> / <code>useCollectionList</code> use. Omit to hide the Subcollections section.</td></tr><tr><td align="left"><a id="onreferenceclick"></a> <code>onReferenceClick?</code></td><td align="left">(<code>ref</code>: <code>DocumentReference</code>) => <code>void</code></td><td align="left">Fired when a reference field is clicked. When supplied, the reference Display renders as an interactive <code>&#x3C;button></code> (with <code>data-pyric-clickable</code>); when omitted, it stays inert as a <code>&#x3C;span></code>. Consumers wire navigation here — the library does not depend on a router.</td></tr><tr><td align="left"><a id="onsubcollectionclick"></a> <code>onSubcollectionClick?</code></td><td align="left">(<code>collection</code>: <code>CollectionReference</code>) => <code>void</code></td><td align="left">Fired when a subcollection’s drill affordance is activated. Receives the subcollection’s <code>CollectionReference</code> (its <code>.path</code> is the navigate target). Consumers wire navigation here.</td></tr><tr><td align="left"><a id="snapshot"></a> <code>snapshot</code></td><td align="left"><code>any</code></td><td align="left">Snapshot from <code>useFirestoreDoc</code> or <code>getDoc</code>. When <code>null</code> / <code>undefined</code>, renders <a href="#emptystate-2">emptyState</a>.</td></tr></tbody></table></div>
326
+ <hr>
327
+ <p><a id="editortree"></a></p>
328
+ <h3 id="editortree">EditorTree</h3>
329
+ <p>Normalized tree of nodes. <code>nodes</code> is the lookup; <code>childIds</code> is the
330
+ ordered child list per parent. The root node is itself a <code>map</code>
331
+ node (its children are the document’s top-level fields).</p>
332
+ <h4 id="properties-6">Properties</h4>
333
+ <div class="table-scroll">
334
+
335
+
336
+
337
+
338
+
339
+
340
+
341
+
342
+
343
+
344
+
345
+
346
+
347
+
348
+
349
+
350
+
351
+
352
+
353
+
354
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="childids"></a> <code>childIds</code></td><td align="left"><code>Record</code>&#x3C;<code>string</code>, <code>string</code>[]></td></tr><tr><td align="left"><a id="nodes"></a> <code>nodes</code></td><td align="left"><code>Record</code>&#x3C;<code>string</code>, <a href="#fieldnode"><code>FieldNode</code></a>></td></tr><tr><td align="left"><a id="rootid"></a> <code>rootId</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
355
+ <hr>
356
+ <p><a id="fielddisplayprops"></a></p>
357
+ <h3 id="fielddisplayprops">FieldDisplayProps</h3>
358
+ <h4 id="type-parameters">Type Parameters</h4>
359
+ <div class="table-scroll">
360
+
361
+
362
+
363
+
364
+
365
+
366
+
367
+
368
+
369
+
370
+
371
+
372
+ <table><thead><tr><th align="left">Type Parameter</th><th align="left">Default type</th></tr></thead><tbody><tr><td align="left"><code>V</code></td><td align="left"><code>unknown</code></td></tr></tbody></table></div>
373
+ <h4 id="properties-7">Properties</h4>
374
+ <div class="table-scroll">
375
+
376
+
377
+
378
+
379
+
380
+
381
+
382
+
383
+
384
+
385
+
386
+
387
+
388
+
389
+
390
+
391
+
392
+
393
+
394
+
395
+
396
+
397
+
398
+
399
+ <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="fieldeditors-2"></a> <code>fieldEditors?</code></td><td align="left"><a href="#fieldeditorregistry"><code>FieldEditorRegistry</code></a></td><td align="left">Recursive editors (Map, Array) need the registry to dispatch on their children. Leaf editors (String, Number, …) can ignore this prop. Required-but-optional because the consumer of the component (<code>&#x3C;FieldRenderer></code>, <code>&#x3C;DocumentPreview></code>) always threads it through.</td></tr><tr><td align="left"><a id="path"></a> <code>path?</code></td><td align="left"><code>string</code></td><td align="left">Dotted/bracketed path from the document root, e.g. <code>users.alice</code> or <code>tags[0]</code>. Forwarded so consumer styles can target nested positions via <code>[data-field-path="users.alice"]</code>.</td></tr><tr><td align="left"><a id="value"></a> <code>value</code></td><td align="left"><code>V</code></td><td align="left">Value to display. The component’s <code>V</code> generic narrows this.</td></tr></tbody></table></div>
400
+ <hr>
401
+ <p><a id="fieldeditorcontract"></a></p>
402
+ <h3 id="fieldeditorcontract">FieldEditorContract</h3>
403
+ <p>Contract for one Firestore value type. <code>Display</code> (read-mode) is
404
+ required; <code>Edit</code> + <code>validate</code> + <code>defaultValue</code> are required for
405
+ leaf types that participate in M3’s editor. Map/array contracts
406
+ supply only <code>Display</code> — their edit affordances come from the
407
+ <code>&#x3C;DocumentEditor></code> compound component.</p>
408
+ <h4 id="type-parameters-1">Type Parameters</h4>
409
+ <div class="table-scroll">
410
+
411
+
412
+
413
+
414
+
415
+
416
+
417
+
418
+
419
+
420
+
421
+
422
+ <table><thead><tr><th align="left">Type Parameter</th><th align="left">Default type</th></tr></thead><tbody><tr><td align="left"><code>V</code></td><td align="left"><code>unknown</code></td></tr></tbody></table></div>
423
+ <h4 id="properties-8">Properties</h4>
424
+ <div class="table-scroll">
425
+
426
+
427
+
428
+
429
+
430
+
431
+
432
+
433
+
434
+
435
+
436
+
437
+
438
+
439
+
440
+
441
+
442
+
443
+
444
+
445
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="display"></a> <code>Display</code></td><td align="left"><code>ComponentType</code>&#x3C;<a href="#fielddisplayprops"><code>FieldDisplayProps</code></a>&#x3C;<code>V</code>>></td></tr><tr><td align="left"><a id="edit"></a> <code>Edit?</code></td><td align="left"><code>ComponentType</code>&#x3C;<a href="#fieldeditprops"><code>FieldEditProps</code></a>&#x3C;<code>V</code>>></td></tr><tr><td align="left"><a id="type"></a> <code>type</code></td><td align="left"><a href="#fieldtype"><code>FieldType</code></a></td></tr></tbody></table></div>
446
+ <hr>
447
+ <p><a id="fieldeditprops"></a></p>
448
+ <h3 id="fieldeditprops">FieldEditProps</h3>
449
+ <p>Props passed to a per-type <code>Edit</code> component. The leaf editors
450
+ (string, number, …) consume this directly. Map/array editing is
451
+ handled by the <code>&#x3C;DocumentEditor></code> compound component itself, not
452
+ by individual editors — Firestore’s container shapes are special
453
+ enough that pushing them through the registry costs more than
454
+ it’s worth.</p>
455
+ <h4 id="type-parameters-2">Type Parameters</h4>
456
+ <div class="table-scroll">
457
+
458
+
459
+
460
+
461
+
462
+
463
+
464
+
465
+
466
+
467
+
468
+
469
+ <table><thead><tr><th align="left">Type Parameter</th><th align="left">Default type</th></tr></thead><tbody><tr><td align="left"><code>V</code></td><td align="left"><code>unknown</code></td></tr></tbody></table></div>
470
+ <h4 id="properties-9">Properties</h4>
471
+ <div class="table-scroll">
472
+
473
+
474
+
475
+
476
+
477
+
478
+
479
+
480
+
481
+
482
+
483
+
484
+
485
+
486
+
487
+
488
+
489
+
490
+
491
+
492
+
493
+
494
+
495
+
496
+
497
+
498
+
499
+
500
+
501
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="error-2"></a> <code>error?</code></td><td align="left"><code>string</code></td><td align="left">Validation error attached by the reducer. Editors render it inline alongside the input.</td></tr><tr><td align="left"><a id="onchange-1"></a> <code>onChange</code></td><td align="left">(<code>next</code>: <code>V</code>) => <code>void</code></td><td align="left">Commit a new value. The hook wires this to the reducer’s <code>setValue</code> action.</td></tr><tr><td align="left"><a id="path-1"></a> <code>path?</code></td><td align="left"><code>string</code></td><td align="left">Dotted/bracketed path from the document root.</td></tr><tr><td align="left"><a id="value-1"></a> <code>value</code></td><td align="left"><code>V</code></td><td align="left">Current value.</td></tr></tbody></table></div>
502
+ <hr>
503
+ <p><a id="fieldnode"></a></p>
504
+ <h3 id="fieldnode">FieldNode</h3>
505
+ <p>One node in the normalized editor tree. Every Firestore field —
506
+ leaf or container — is a node with a uuid, a parent pointer, a
507
+ type, and a value. Containers (map, array) carry no value of
508
+ their own; their children represent the value.</p>
509
+ <h4 id="properties-10">Properties</h4>
510
+ <div class="table-scroll">
511
+
512
+
513
+
514
+
515
+
516
+
517
+
518
+
519
+
520
+
521
+
522
+
523
+
524
+
525
+
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+
534
+
535
+
536
+
537
+
538
+
539
+
540
+
541
+
542
+
543
+
544
+
545
+
546
+
547
+
548
+
549
+
550
+
551
+
552
+
553
+
554
+
555
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="error-3"></a> <code>error?</code></td><td align="left"><code>string</code></td><td align="left">Validation error message attached to the node by the reducer after every action. <code>undefined</code> when valid. Computed on EVERY action regardless of <a href="#touched">touched</a> — <code>errorCount</code> / <code>isValid</code> must reflect the true state so Save stays disabled. <code>touched</code> governs only whether a consumer chooses to DISPLAY the error.</td></tr><tr><td align="left"><a id="id"></a> <code>id</code></td><td align="left"><code>string</code></td><td align="left">Stable uuid. Used as React <code>key</code> and as the action target.</td></tr><tr><td align="left"><a id="key"></a> <code>key</code></td><td align="left"><code>string</code></td><td align="left">Map children carry their key here. Array children carry <code>null</code> (position comes from the parent’s <code>childIds</code> order). The root also carries <code>null</code> (it has no parent).</td></tr><tr><td align="left"><a id="parentid"></a> <code>parentId</code></td><td align="left"><code>string</code></td><td align="left">Parent uuid; <code>null</code> for the root.</td></tr><tr><td align="left"><a id="touched"></a> <code>touched?</code></td><td align="left"><code>boolean</code></td><td align="left">Set once the field has been blurred (or a submit attempt swept the whole tree via <code>touchAll</code>). Consumers gate error display on <code>touched &#x26;&#x26; error</code> so a freshly-added empty row doesn’t show “Field name is required” before the user has interacted with it.</td></tr><tr><td align="left"><a id="type-1"></a> <code>type</code></td><td align="left"><a href="#fieldtype"><code>FieldType</code></a></td><td align="left">Discriminated type. Drives which editor renders.</td></tr><tr><td align="left"><a id="value-2"></a> <code>value</code></td><td align="left"><code>unknown</code></td><td align="left">Leaf value. <code>undefined</code> for <code>map</code> / <code>array</code> — those carry their value as children. <code>null</code> field type has <code>value === null</code>.</td></tr></tbody></table></div>
556
+ <hr>
557
+ <p><a id="fieldrendererprops"></a></p>
558
+ <h3 id="fieldrendererprops">FieldRendererProps</h3>
559
+ <h4 id="properties-11">Properties</h4>
560
+ <div class="table-scroll">
561
+
562
+
563
+
564
+
565
+
566
+
567
+
568
+
569
+
570
+
571
+
572
+
573
+
574
+
575
+
576
+
577
+
578
+
579
+
580
+
581
+
582
+
583
+
584
+
585
+ <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="fieldeditors-3"></a> <code>fieldEditors</code></td><td align="left"><a href="#fieldeditorregistry"><code>FieldEditorRegistry</code></a></td><td align="left">Registry to dispatch through. Pass the merged registry — this component does not fall back to defaults on its own (to avoid a circular import with the editors). <code>&#x3C;DocumentPreview></code> is the entry point that merges user overrides into defaults.</td></tr><tr><td align="left"><a id="path-2"></a> <code>path?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="value-3"></a> <code>value</code></td><td align="left"><code>unknown</code></td><td align="left">-</td></tr></tbody></table></div>
586
+ <hr>
587
+ <p><a id="parsedimportdoc"></a></p>
588
+ <h3 id="parsedimportdoc">ParsedImportDoc</h3>
589
+ <p>One document to create. <code>id === null</code> means “let Firestore auto-id it”
590
+ (only produced by the array shape when no <code>generateId</code> option is given —
591
+ a map key is always a chosen id).</p>
592
+ <h4 id="properties-12">Properties</h4>
593
+ <div class="table-scroll">
594
+
595
+
596
+
597
+
598
+
599
+
600
+
601
+
602
+
603
+
604
+
605
+
606
+
607
+
608
+
609
+
610
+ <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>Record</code>&#x3C;<code>string</code>, <code>unknown</code>></td></tr><tr><td align="left"><a id="id-1"></a> <code>id</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
611
+ <hr>
612
+ <p><a id="parseimportoptions"></a></p>
613
+ <h3 id="parseimportoptions">ParseImportOptions</h3>
614
+ <h4 id="properties-13">Properties</h4>
615
+ <div class="table-scroll">
616
+
617
+
618
+
619
+
620
+
621
+
622
+
623
+
624
+
625
+
626
+
627
+
628
+
629
+
630
+ <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="generateid"></a> <code>generateId?</code></td><td align="left">() => <code>string</code></td><td align="left">When provided, array-shape entries get their auto-id GENERATED AT PARSE TIME (instead of <code>id: null</code> / addDoc-at-write-time). Fixing ids at parse makes a retry after a partial failure idempotent: the same parse’s ids are reused, so re-running the import cannot duplicate already-written docs. Use <a href="#firestoreautoid">firestoreAutoId</a> for prod-parity ids.</td></tr></tbody></table></div>
631
+ <hr>
632
+ <p><a id="parseimportresult"></a></p>
633
+ <h3 id="parseimportresult">ParseImportResult</h3>
634
+ <h4 id="properties-14">Properties</h4>
635
+ <div class="table-scroll">
636
+
637
+
638
+
639
+
640
+
641
+
642
+
643
+
644
+
645
+
646
+
647
+
648
+
649
+
650
+
651
+
652
+
653
+
654
+
655
+ <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="docs"></a> <code>docs</code></td><td align="left"><a href="#parsedimportdoc"><code>ParsedImportDoc</code></a>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="errors"></a> <code>errors</code></td><td align="left"><code>string</code>[]</td><td align="left">Human-readable problems found while parsing. A non-empty <code>errors</code> does NOT necessarily mean <code>docs</code> is empty — the parser is per-item tolerant so one bad entry doesn’t block the rest; the caller decides whether to block on any error or proceed with the valid subset.</td></tr></tbody></table></div>
656
+ <hr>
657
+ <p><a id="querybuilderactions"></a></p>
658
+ <h3 id="querybuilderactions">QueryBuilderActions</h3>
659
+ <h4 id="properties-15">Properties</h4>
660
+ <div class="table-scroll">
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
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="addcondition"></a> <code>addCondition</code></td><td align="left">(<code>c?</code>: <code>Partial</code>&#x3C;<code>Omit</code>&#x3C;<a href="#querycondition"><code>QueryCondition</code></a>, <code>"id"</code>>>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="buildquery"></a> <code>buildQuery</code></td><td align="left">(<code>base</code>: <code>any</code>) => <code>Query</code></td><td align="left">Compose the state into a Firestore <code>Query</code>. Returns the base collection when there are no conditions / orderBy / limit. Conditions with empty <code>field</code> are skipped — the builder UI lets users add a row before they’ve filled it in.</td></tr><tr><td align="left"><a id="removecondition"></a> <code>removeCondition</code></td><td align="left">(<code>id</code>: <code>string</code>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="reset"></a> <code>reset</code></td><td align="left">() => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="setlimit"></a> <code>setLimit</code></td><td align="left">(<code>limit?</code>: <code>number</code>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="setorderby"></a> <code>setOrderBy</code></td><td align="left">(<code>orderBy?</code>: { <code>direction</code>: <code>OrderDirection</code>; <code>field</code>: <code>string</code>; }) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="updatecondition"></a> <code>updateCondition</code></td><td align="left">(<code>id</code>: <code>string</code>, <code>patch</code>: <code>Partial</code>&#x3C;<code>Omit</code>&#x3C;<a href="#querycondition"><code>QueryCondition</code></a>, <code>"id"</code>>>) => <code>void</code></td><td align="left">-</td></tr></tbody></table></div>
706
+ <hr>
707
+ <p><a id="querybuilderprops"></a></p>
708
+ <h3 id="querybuilderprops">QueryBuilderProps</h3>
709
+ <h4 id="properties-16">Properties</h4>
710
+ <div class="table-scroll">
711
+
712
+
713
+
714
+
715
+
716
+
717
+
718
+
719
+
720
+
721
+
722
+
723
+
724
+
725
+
726
+
727
+
728
+
729
+
730
+
731
+
732
+
733
+
734
+
735
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="classname-5"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><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">Drives the hook used internally. Both the state and the composed Query are exposed via <code>onChange</code>.</td></tr><tr><td align="left"><a id="onchange-2"></a> <code>onChange?</code></td><td align="left">(<code>builder</code>: <a href="#usequerybuilderresult"><code>UseQueryBuilderResult</code></a>) => <code>void</code></td><td align="left">Fired on every state change with the latest builder API. The parent typically calls <code>builder.buildQuery(collection)</code> and feeds the result into <code>useDocumentList</code> / <code>useFirestoreCollection</code>.</td></tr></tbody></table></div>
736
+ <hr>
737
+ <p><a id="querybuilderstate"></a></p>
738
+ <h3 id="querybuilderstate">QueryBuilderState</h3>
739
+ <h4 id="properties-17">Properties</h4>
740
+ <div class="table-scroll">
741
+
742
+
743
+
744
+
745
+
746
+
747
+
748
+
749
+
750
+
751
+
752
+
753
+
754
+
755
+
756
+
757
+
758
+
759
+
760
+
761
+
762
+
763
+
764
+
765
+
766
+
767
+
768
+
769
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="conditions"></a> <code>conditions</code></td><td align="left"><a href="#querycondition"><code>QueryCondition</code></a>[]</td></tr><tr><td align="left"><a id="limit"></a> <code>limit?</code></td><td align="left"><code>number</code></td></tr><tr><td align="left"><a id="orderby"></a> <code>orderBy?</code></td><td align="left">{ <code>direction</code>: <code>OrderDirection</code>; <code>field</code>: <code>string</code>; }</td></tr><tr><td align="left"><code>orderBy.direction</code></td><td align="left"><code>OrderDirection</code></td></tr><tr><td align="left"><code>orderBy.field</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
770
+ <hr>
771
+ <p><a id="querycondition"></a></p>
772
+ <h3 id="querycondition">QueryCondition</h3>
773
+ <h4 id="properties-18">Properties</h4>
774
+ <div class="table-scroll">
775
+
776
+
777
+
778
+
779
+
780
+
781
+
782
+
783
+
784
+
785
+
786
+
787
+
788
+
789
+
790
+
791
+
792
+
793
+
794
+
795
+
796
+
797
+
798
+
799
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="field"></a> <code>field</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><a id="id-2"></a> <code>id</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><a id="op"></a> <code>op</code></td><td align="left"><code>WhereFilterOp</code></td></tr><tr><td align="left"><a id="value-4"></a> <code>value</code></td><td align="left"><code>unknown</code></td></tr></tbody></table></div>
800
+ <hr>
801
+ <p><a id="recursivedeleteimpl"></a></p>
802
+ <h3 id="recursivedeleteimpl">RecursiveDeleteImpl</h3>
803
+ <p>Implementation injected by the consumer. The library doesn’t ship
804
+ one — sandbox-backed apps usually walk <code>pyric/sandbox</code>’s in-process
805
+ tree; production apps usually call a Cloud Function. Either way,
806
+ <code>start</code> returns an async iterator emitting progress.</p>
807
+ <h4 id="properties-19">Properties</h4>
808
+ <div class="table-scroll">
809
+
810
+
811
+
812
+
813
+
814
+
815
+
816
+
817
+
818
+
819
+
820
+
821
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="start"></a> <code>start</code></td><td align="left">(<code>target</code>: <code>any</code>) => <code>AsyncIterableIterator</code>&#x3C;<a href="#recursivedeleteprogress"><code>RecursiveDeleteProgress</code></a>></td></tr></tbody></table></div>
822
+ <hr>
823
+ <p><a id="recursivedeleteprogress"></a></p>
824
+ <h3 id="recursivedeleteprogress">RecursiveDeleteProgress</h3>
825
+ <h4 id="properties-20">Properties</h4>
826
+ <div class="table-scroll">
827
+
828
+
829
+
830
+
831
+
832
+
833
+
834
+
835
+
836
+
837
+
838
+
839
+
840
+
841
+
842
+
843
+
844
+
845
+
846
+ <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>
847
+ <hr>
848
+ <p><a id="referencepickerprops"></a></p>
849
+ <h3 id="referencepickerprops">ReferencePickerProps</h3>
850
+ <h4 id="properties-21">Properties</h4>
851
+ <div class="table-scroll">
852
+
853
+
854
+
855
+
856
+
857
+
858
+
859
+
860
+
861
+
862
+
863
+
864
+
865
+
866
+
867
+
868
+
869
+
870
+
871
+
872
+
873
+
874
+
875
+
876
+
877
+
878
+
879
+
880
+
881
+
882
+
883
+
884
+
885
+
886
+
887
+
888
+
889
+
890
+
891
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="classname-6"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">Forwarded to the root.</td></tr><tr><td align="left"><a id="firestore-1"></a> <code>firestore</code></td><td align="left"><code>Firestore</code></td><td align="left">-</td></tr><tr><td align="left"><a id="initialpath"></a> <code>initialPath?</code></td><td align="left"><code>string</code></td><td align="left">Initial path text.</td></tr><tr><td align="left"><a id="listcollections"></a> <code>listCollections</code></td><td align="left">(<code>firestore</code>: <code>Firestore</code>, <code>parent</code>: <code>any</code>) => <code>Promise</code>&#x3C;<code>CollectionReference</code>[]></td><td align="left">Lister for subcollections. Required — see <code>useReferencePicker</code> docs for the rationale.</td></tr><tr><td align="left"><a id="onpick"></a> <code>onPick?</code></td><td align="left">(<code>ref</code>: <code>DocumentReference</code>) => <code>void</code></td><td align="left">Fired when the user commits a picked reference (browse pick OR a valid manually-typed path with the Commit button).</td></tr><tr><td align="left"><a id="pathlabel"></a> <code>pathLabel?</code></td><td align="left"><code>string</code></td><td align="left">Label for the path text input. Default ‘Document path’.</td></tr></tbody></table></div>
892
+ <hr>
893
+ <p><a id="subscriptionstate"></a></p>
894
+ <h3 id="subscriptionstate">SubscriptionState</h3>
895
+ <h4 id="type-parameters-3">Type Parameters</h4>
896
+ <div class="table-scroll">
897
+
898
+
899
+
900
+
901
+
902
+
903
+
904
+
905
+
906
+
907
+ <table><thead><tr><th align="left">Type Parameter</th></tr></thead><tbody><tr><td align="left"><code>T</code></td></tr></tbody></table></div>
908
+ <h4 id="properties-22">Properties</h4>
909
+ <div class="table-scroll">
910
+
911
+
912
+
913
+
914
+
915
+
916
+
917
+
918
+
919
+
920
+
921
+
922
+
923
+
924
+
925
+
926
+
927
+
928
+
929
+
930
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="data-1"></a> <code>data</code></td><td align="left"><code>T</code></td></tr><tr><td align="left"><a id="error-4"></a> <code>error</code></td><td align="left"><code>Error</code></td></tr><tr><td align="left"><a id="isloading-2"></a> <code>isLoading</code></td><td align="left"><code>boolean</code></td></tr></tbody></table></div>
931
+ <hr>
932
+ <p><a id="usecollectionlistoptions"></a></p>
933
+ <h3 id="usecollectionlistoptions">UseCollectionListOptions</h3>
934
+ <h4 id="properties-23">Properties</h4>
935
+ <div class="table-scroll">
936
+
937
+
938
+
939
+
940
+
941
+
942
+
943
+
944
+
945
+
946
+
947
+
948
+
949
+
950
+
951
+
952
+
953
+
954
+
955
+
956
+
957
+
958
+
959
+
960
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="firestore-2"></a> <code>firestore</code></td><td align="left"><code>Firestore</code></td><td align="left">-</td></tr><tr><td align="left"><a id="listcollections-1"></a> <code>listCollections</code></td><td align="left">(<code>firestore</code>: <code>Firestore</code>, <code>parent</code>: <code>any</code>) => <code>Promise</code>&#x3C;<code>CollectionReference</code>[]></td><td align="left">Injected collection-listing function. The library doesn’t ship a default — the modular Web SDK doesn’t expose <code>listCollections</code> on the client. Sandbox-backed apps usually wire <code>pyric/sandbox</code>’s in-process listing; production apps either pass a known list (e.g. from a schema) or call a server proxy.</td></tr><tr><td align="left"><a id="parent"></a> <code>parent?</code></td><td align="left"><code>any</code></td><td align="left">Parent document, or <code>null</code>/<code>undefined</code> for root collections.</td></tr></tbody></table></div>
961
+ <hr>
962
+ <p><a id="usecollectionlistresult"></a></p>
963
+ <h3 id="usecollectionlistresult">UseCollectionListResult</h3>
964
+ <h4 id="properties-24">Properties</h4>
965
+ <div class="table-scroll">
966
+
967
+
968
+
969
+
970
+
971
+
972
+
973
+
974
+
975
+
976
+
977
+
978
+
979
+
980
+
981
+
982
+
983
+
984
+
985
+
986
+
987
+
988
+
989
+
990
+
991
+
992
+
993
+
994
+
995
+
996
+
997
+
998
+
999
+
1000
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="collections-1"></a> <code>collections</code></td><td align="left"><code>CollectionReference</code>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="createcollection"></a> <code>createCollection</code></td><td align="left">(<code>collectionId</code>: <code>string</code>, <code>firstDoc</code>: { <code>data</code>: <code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>>; <code>id</code>: <code>string</code>; }) => <code>Promise</code>&#x3C;<code>DocumentReference</code>></td><td align="left">Create a new collection by writing its first document. Firestore collections don’t exist independently of their documents — <code>setDoc</code> on the first child path materializes the collection.</td></tr><tr><td align="left"><a id="error-5"></a> <code>error</code></td><td align="left"><code>Error</code></td><td align="left">-</td></tr><tr><td align="left"><a id="isloading-3"></a> <code>isLoading</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="refresh"></a> <code>refresh</code></td><td align="left">() => <code>void</code></td><td align="left">Re-run the listing function.</td></tr></tbody></table></div>
1001
+ <hr>
1002
+ <p><a id="usedocumenteditoroptions"></a></p>
1003
+ <h3 id="usedocumenteditoroptions">UseDocumentEditorOptions</h3>
1004
+ <h4 id="properties-25">Properties</h4>
1005
+ <div class="table-scroll">
1006
+
1007
+
1008
+
1009
+
1010
+
1011
+
1012
+
1013
+
1014
+
1015
+
1016
+
1017
+
1018
+
1019
+
1020
+ <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-3"></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>
1021
+ <hr>
1022
+ <p><a id="usedocumenteditorresult"></a></p>
1023
+ <h3 id="usedocumenteditorresult">UseDocumentEditorResult</h3>
1024
+ <p>Reducer state. <code>tree</code> is the live document under edit; <code>initial</code>
1025
+ is the snapshot the editor was constructed from (used to
1026
+ implement <code>reset</code> and <code>isDirty</code>).</p>
1027
+ <h4 id="extends">Extends</h4>
1028
+ <ul>
1029
+ <li><a href="#documenteditorstate"><code>DocumentEditorState</code></a></li>
1030
+ </ul>
1031
+ <h4 id="properties-26">Properties</h4>
1032
+ <div class="table-scroll">
1033
+
1034
+
1035
+
1036
+
1037
+
1038
+
1039
+
1040
+
1041
+
1042
+
1043
+
1044
+
1045
+
1046
+
1047
+
1048
+
1049
+
1050
+
1051
+
1052
+
1053
+
1054
+
1055
+
1056
+
1057
+
1058
+
1059
+
1060
+
1061
+
1062
+
1063
+
1064
+
1065
+
1066
+
1067
+
1068
+
1069
+
1070
+
1071
+
1072
+
1073
+
1074
+
1075
+
1076
+
1077
+
1078
+
1079
+
1080
+
1081
+
1082
+
1083
+
1084
+
1085
+
1086
+
1087
+
1088
+
1089
+
1090
+
1091
+
1092
+
1093
+
1094
+
1095
+
1096
+
1097
+
1098
+
1099
+
1100
+
1101
+
1102
+
1103
+
1104
+
1105
+
1106
+
1107
+
1108
+
1109
+
1110
+
1111
+
1112
+
1113
+
1114
+
1115
+
1116
+
1117
+
1118
+
1119
+
1120
+
1121
+
1122
+
1123
+
1124
+
1125
+
1126
+
1127
+ <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>: <a href="#fieldtype"><code>FieldType</code></a>) => <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>: <a href="#fieldtype"><code>FieldType</code></a>) => <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>: <a href="#documenteditoraction"><code>DocumentEditorAction</code></a>) => <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-1"></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-4"></a> <code>initial</code></td><td align="left"><a href="#editortree"><code>EditorTree</code></a></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>: <a href="#fieldtype"><code>FieldType</code></a>) => <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-1"></a> <code>tree</code></td><td align="left"><a href="#editortree"><code>EditorTree</code></a></td><td align="left">-</td></tr></tbody></table></div>
1128
+ <hr>
1129
+ <p><a id="usedocumentlistoptions"></a></p>
1130
+ <h3 id="usedocumentlistoptions">UseDocumentListOptions</h3>
1131
+ <h4 id="properties-27">Properties</h4>
1132
+ <div class="table-scroll">
1133
+
1134
+
1135
+
1136
+
1137
+
1138
+
1139
+
1140
+
1141
+
1142
+
1143
+
1144
+
1145
+
1146
+
1147
+
1148
+
1149
+
1150
+
1151
+
1152
+
1153
+
1154
+
1155
+
1156
+
1157
+
1158
+
1159
+
1160
+
1161
+
1162
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="collection"></a> <code>collection</code></td><td align="left"><code>CollectionReference</code></td><td align="left">-</td></tr><tr><td align="left"><a id="mode"></a> <code>mode?</code></td><td align="left"><code>"paged"</code> | <code>"live"</code></td><td align="left"><code>paged</code> preserves the historical get-based cursor behavior. <code>live</code> keeps the currently requested window under an <code>onSnapshot</code> subscription and grows that window when <code>loadMore</code> is requested. Default <code>paged</code>.</td></tr><tr><td align="left"><a id="pagesize"></a> <code>pageSize?</code></td><td align="left"><code>number</code></td><td align="left">Page size for cursor-based pagination. Default 50.</td></tr><tr><td align="left"><a id="query"></a> <code>query?</code></td><td align="left"><code>Query</code></td><td align="left">Optional filter / sort. If omitted, the raw collection is used.</td></tr></tbody></table></div>
1163
+ <hr>
1164
+ <p><a id="usedocumentlistresult"></a></p>
1165
+ <h3 id="usedocumentlistresult">UseDocumentListResult</h3>
1166
+ <h4 id="properties-28">Properties</h4>
1167
+ <div class="table-scroll">
1168
+
1169
+
1170
+
1171
+
1172
+
1173
+
1174
+
1175
+
1176
+
1177
+
1178
+
1179
+
1180
+
1181
+
1182
+
1183
+
1184
+
1185
+
1186
+
1187
+
1188
+
1189
+
1190
+
1191
+
1192
+
1193
+
1194
+
1195
+
1196
+
1197
+
1198
+
1199
+
1200
+
1201
+
1202
+
1203
+
1204
+
1205
+
1206
+
1207
+
1208
+
1209
+
1210
+
1211
+
1212
+
1213
+
1214
+
1215
+
1216
+
1217
+
1218
+
1219
+
1220
+
1221
+
1222
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="createdocument"></a> <code>createDocument</code></td><td align="left">(<code>id</code>: <code>string</code>, <code>data</code>: <code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>>, <code>opts?</code>: { <code>onExisting?</code>: <code>"overwrite"</code> | <code>"fail"</code>; }) => <code>Promise</code>&#x3C;<code>DocumentReference</code>></td><td align="left">Create a document. If <code>id</code> is null, Firestore generates one via <code>addDoc</code>. With <code>onExisting: 'fail'</code> (CREATE semantics, the admin <code>create()</code> analog) an id that already exists rejects with <code>code: 'already-exists'</code> instead of silently overwriting — checked against the BACKEND (a <code>getDoc</code> probe), not any loaded page, so it is honest beyond pagination. Default: ‘overwrite’ (plain <code>setDoc</code>, the historical behavior).</td></tr><tr><td align="left"><a id="deletedocument"></a> <code>deleteDocument</code></td><td align="left">(<code>ref</code>: <code>DocumentReference</code>) => <code>Promise</code>&#x3C;<code>void</code>></td><td align="left">-</td></tr><tr><td align="left"><a id="documents-1"></a> <code>documents</code></td><td align="left"><code>QueryDocumentSnapshot</code>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="error-6"></a> <code>error</code></td><td align="left"><code>Error</code></td><td align="left">-</td></tr><tr><td align="left"><a id="hasmore-1"></a> <code>hasMore</code></td><td align="left"><code>boolean</code></td><td align="left">True if there might be another page. The hook tracks this via the last fetch’s length === pageSize.</td></tr><tr><td align="left"><a id="isloading-4"></a> <code>isLoading</code></td><td align="left"><code>boolean</code></td><td align="left">-</td></tr><tr><td align="left"><a id="loadmore"></a> <code>loadMore</code></td><td align="left">() => <code>void</code></td><td align="left">Fetch the next page; live mode grows and re-establishes its window.</td></tr><tr><td align="left"><a id="refresh-1"></a> <code>refresh</code></td><td align="left">() => <code>void</code></td><td align="left">Re-establish the active read/subscription. Useful after the consumer mutates data outside this hook.</td></tr><tr><td align="left"><a id="subscriptiongeneration"></a> <code>subscriptionGeneration</code></td><td align="left"><code>number</code></td><td align="left">Identifies the active live subscription. Consumers that diff result snapshots can include this in their scope so a re-subscription (including load-more) establishes a silent baseline instead of looking like writes.</td></tr></tbody></table></div>
1223
+ <hr>
1224
+ <p><a id="usedocumentsubcollectionsoptions"></a></p>
1225
+ <h3 id="usedocumentsubcollectionsoptions">UseDocumentSubcollectionsOptions</h3>
1226
+ <h4 id="properties-29">Properties</h4>
1227
+ <div class="table-scroll">
1228
+
1229
+
1230
+
1231
+
1232
+
1233
+
1234
+
1235
+
1236
+
1237
+
1238
+
1239
+
1240
+
1241
+
1242
+
1243
+
1244
+
1245
+
1246
+
1247
+
1248
+
1249
+
1250
+
1251
+
1252
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="documentref-1"></a> <code>documentRef</code></td><td align="left"><code>any</code></td><td align="left">The document whose subcollections to list. When <code>null</code>/<code>undefined</code> the hook stays idle (empty, not loading) — used when the preview has no ref to drill from.</td></tr><tr><td align="left"><a id="firestore-3"></a> <code>firestore</code></td><td align="left"><code>Firestore</code></td><td align="left">-</td></tr><tr><td align="left"><a id="listsubcollections-1"></a> <code>listSubcollections</code></td><td align="left"><a href="#listsubcollections-2"><code>ListSubcollections</code></a></td><td align="left">-</td></tr></tbody></table></div>
1253
+ <hr>
1254
+ <p><a id="usedocumentsubcollectionsresult"></a></p>
1255
+ <h3 id="usedocumentsubcollectionsresult">UseDocumentSubcollectionsResult</h3>
1256
+ <h4 id="properties-30">Properties</h4>
1257
+ <div class="table-scroll">
1258
+
1259
+
1260
+
1261
+
1262
+
1263
+
1264
+
1265
+
1266
+
1267
+
1268
+
1269
+
1270
+
1271
+
1272
+
1273
+
1274
+
1275
+
1276
+
1277
+
1278
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="error-7"></a> <code>error</code></td><td align="left"><code>Error</code></td></tr><tr><td align="left"><a id="isloading-5"></a> <code>isLoading</code></td><td align="left"><code>boolean</code></td></tr><tr><td align="left"><a id="subcollections"></a> <code>subcollections</code></td><td align="left"><code>CollectionReference</code>[]</td></tr></tbody></table></div>
1279
+ <hr>
1280
+ <p><a id="usequerybuilderoptions"></a></p>
1281
+ <h3 id="usequerybuilderoptions">UseQueryBuilderOptions</h3>
1282
+ <h4 id="properties-31">Properties</h4>
1283
+ <div class="table-scroll">
1284
+
1285
+
1286
+
1287
+
1288
+
1289
+
1290
+
1291
+
1292
+
1293
+
1294
+
1295
+
1296
+
1297
+
1298
+ <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-5"></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>
1299
+ <hr>
1300
+ <p><a id="userecursivedeleteresult"></a></p>
1301
+ <h3 id="userecursivedeleteresult">UseRecursiveDeleteResult</h3>
1302
+ <h4 id="properties-32">Properties</h4>
1303
+ <div class="table-scroll">
1304
+
1305
+
1306
+
1307
+
1308
+
1309
+
1310
+
1311
+
1312
+
1313
+
1314
+
1315
+
1316
+
1317
+
1318
+
1319
+
1320
+
1321
+
1322
+
1323
+
1324
+
1325
+
1326
+
1327
+
1328
+
1329
+
1330
+
1331
+
1332
+
1333
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="delete"></a> <code>delete</code></td><td align="left">(<code>target</code>: <code>any</code>) => <code>Promise</code>&#x3C;<code>void</code>></td><td align="left">Run the delete. Resolves when the iterator signals <code>done</code>.</td></tr><tr><td align="left"><a id="error-8"></a> <code>error</code></td><td align="left"><code>Error</code></td><td align="left">Error thrown by the iterator, if any. Cleared at the start of the next call.</td></tr><tr><td align="left"><a id="isrunning"></a> <code>isRunning</code></td><td align="left"><code>boolean</code></td><td align="left">True while an iteration is in flight.</td></tr><tr><td align="left"><a id="progress"></a> <code>progress</code></td><td align="left"><code>number</code></td><td align="left">Number of nodes deleted in the current/last run.</td></tr></tbody></table></div>
1334
+ <hr>
1335
+ <p><a id="usereferencepickeroptions"></a></p>
1336
+ <h3 id="usereferencepickeroptions">UseReferencePickerOptions</h3>
1337
+ <h4 id="properties-33">Properties</h4>
1338
+ <div class="table-scroll">
1339
+
1340
+
1341
+
1342
+
1343
+
1344
+
1345
+
1346
+
1347
+
1348
+
1349
+
1350
+
1351
+
1352
+
1353
+
1354
+
1355
+
1356
+
1357
+
1358
+
1359
+
1360
+
1361
+
1362
+
1363
+
1364
+
1365
+
1366
+
1367
+
1368
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="firestore-4"></a> <code>firestore</code></td><td align="left"><code>Firestore</code></td><td align="left">-</td></tr><tr><td align="left"><a id="initialpath-1"></a> <code>initialPath?</code></td><td align="left"><code>string</code></td><td align="left">Initial value to pre-populate the text input + parse.</td></tr><tr><td align="left"><a id="listcollections-2"></a> <code>listCollections</code></td><td align="left">(<code>firestore</code>: <code>Firestore</code>, <code>parent</code>: <code>any</code>) => <code>Promise</code>&#x3C;<code>CollectionReference</code>[]></td><td align="left">Lister for subcollections under a parent (or root when <code>parent == null</code>). The library does not ship a default — see <code>useCollectionList</code> for the same rationale (the modular Web SDK can’t enumerate collections client-side).</td></tr><tr><td align="left"><a id="pagesize-1"></a> <code>pageSize?</code></td><td align="left"><code>number</code></td><td align="left">Default page size for the document list when browsing inside a collection. Default 20.</td></tr></tbody></table></div>
1369
+ <hr>
1370
+ <p><a id="usereferencepickerresult"></a></p>
1371
+ <h3 id="usereferencepickerresult">UseReferencePickerResult</h3>
1372
+ <h4 id="properties-34">Properties</h4>
1373
+ <div class="table-scroll">
1374
+
1375
+
1376
+
1377
+
1378
+
1379
+
1380
+
1381
+
1382
+
1383
+
1384
+
1385
+
1386
+
1387
+
1388
+
1389
+
1390
+
1391
+
1392
+
1393
+
1394
+
1395
+
1396
+
1397
+
1398
+
1399
+
1400
+
1401
+
1402
+
1403
+
1404
+
1405
+
1406
+
1407
+
1408
+
1409
+
1410
+
1411
+
1412
+
1413
+
1414
+
1415
+
1416
+
1417
+
1418
+
1419
+
1420
+
1421
+
1422
+
1423
+
1424
+
1425
+
1426
+
1427
+
1428
+
1429
+
1430
+
1431
+
1432
+
1433
+
1434
+
1435
+
1436
+
1437
+
1438
+
1439
+
1440
+
1441
+
1442
+
1443
+
1444
+
1445
+
1446
+
1447
+
1448
+
1449
+
1450
+
1451
+
1452
+
1453
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="browselocation"></a> <code>browseLocation</code></td><td align="left"><a href="#browselocation-1"><code>BrowseLocation</code></a></td><td align="left">Current browse position in the tree.</td></tr><tr><td align="left"><a id="candrillback"></a> <code>canDrillBack</code></td><td align="left"><code>boolean</code></td><td align="left">Whether <code>drillBack</code> has anywhere to go.</td></tr><tr><td align="left"><a id="clear"></a> <code>clear</code></td><td align="left">() => <code>void</code></td><td align="left">Clear the path input + reset browse to root.</td></tr><tr><td align="left"><a id="collections-2"></a> <code>collections</code></td><td align="left"><code>CollectionReference</code>[]</td><td align="left">Collections available at the current browse level. Populated when <code>browseLocation</code> is <code>root</code> or <code>document</code>.</td></tr><tr><td align="left"><a id="documents-2"></a> <code>documents</code></td><td align="left"><code>QueryDocumentSnapshot</code>[]</td><td align="left">First page of documents in the current collection — populated when <code>browseLocation.kind === 'collection'</code>.</td></tr><tr><td align="left"><a id="drillback"></a> <code>drillBack</code></td><td align="left">() => <code>void</code></td><td align="left">Step back one level. No-op when at root.</td></tr><tr><td align="left"><a id="drillintocollection"></a> <code>drillIntoCollection</code></td><td align="left">(<code>ref</code>: <code>CollectionReference</code>) => <code>void</code></td><td align="left">Drill into a collection — fetches its first page of documents.</td></tr><tr><td align="left"><a id="drillintodocument"></a> <code>drillIntoDocument</code></td><td align="left">(<code>ref</code>: <code>DocumentReference</code>) => <code>void</code></td><td align="left">Drill into a document — fetches its subcollections.</td></tr><tr><td align="left"><a id="error-9"></a> <code>error</code></td><td align="left"><code>string</code></td><td align="left">Parse error, or <code>null</code> when valid.</td></tr><tr><td align="left"><a id="isloading-6"></a> <code>isLoading</code></td><td align="left"><code>boolean</code></td><td align="left">True while a fetch is in flight.</td></tr><tr><td align="left"><a id="pathinput"></a> <code>pathInput</code></td><td align="left"><code>string</code></td><td align="left">Current text input value.</td></tr><tr><td align="left"><a id="pick"></a> <code>pick</code></td><td align="left">(<code>ref</code>: <code>DocumentReference</code>) => <code>void</code></td><td align="left">Commit a chosen reference. Updates <code>pathInput</code> (and therefore the parsed <code>reference</code>).</td></tr><tr><td align="left"><a id="reference"></a> <code>reference</code></td><td align="left"><code>any</code></td><td align="left">Validated <code>DocumentReference</code> parsed from <code>pathInput</code>, or <code>null</code> when the path is empty / invalid.</td></tr><tr><td align="left"><a id="setpathinput"></a> <code>setPathInput</code></td><td align="left">(<code>path</code>: <code>string</code>) => <code>void</code></td><td align="left">Set the text-input value. Parses on every change.</td></tr></tbody></table></div>
1454
+ <hr>
1455
+ <p><a id="vectorview"></a></p>
1456
+ <h3 id="vectorview">VectorView</h3>
1457
+ <p>Normalized read-side view of a Firestore vector (embedding) value.
1458
+ Editors and the renderer work against this rather than the raw shape
1459
+ so they don’t have to care which backend produced the value.</p>
1460
+ <h4 id="properties-35">Properties</h4>
1461
+ <div class="table-scroll">
1462
+
1463
+
1464
+
1465
+
1466
+
1467
+
1468
+
1469
+
1470
+
1471
+
1472
+
1473
+
1474
+
1475
+
1476
+
1477
+
1478
+
1479
+
1480
+
1481
+
1482
+
1483
+
1484
+ <table><thead><tr><th align="left">Property</th><th align="left">Modifier</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="dimension"></a> <code>dimension</code></td><td align="left"><code>readonly</code></td><td align="left"><code>number</code></td><td align="left">Number of components. Equivalent to <code>values.length</code>; surfaced separately because that’s what the UI labels (<code>vector · &#x3C;dims></code>).</td></tr><tr><td align="left"><a id="values"></a> <code>values</code></td><td align="left"><code>readonly</code></td><td align="left"><code>number</code>[]</td><td align="left">The embedding components. Defensive copy — safe to read freely.</td></tr></tbody></table></div>
1485
+ <h2 id="type-aliases">Type Aliases</h2>
1486
+ <p><a id="browselocation-1"></a></p>
1487
+ <h3 id="browselocation">BrowseLocation</h3>
1488
+ <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>
1489
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1490
+ <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>
1491
+ <span class="line"><span style="color:#ABB2BF">}</span></span>
1492
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1493
+ <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>
1494
+ <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>
1495
+ <span class="line"><span style="color:#ABB2BF">}</span></span>
1496
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1497
+ <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>
1498
+ <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>
1499
+ <span class="line"><span style="color:#ABB2BF">};</span></span></code></pre>
1500
+ <hr>
1501
+ <p><a id="documenteditoraction"></a></p>
1502
+ <h3 id="documenteditoraction">DocumentEditorAction</h3>
1503
+ <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"> DocumentEditorAction</span><span style="color:#56B6C2"> =</span></span>
1504
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1505
+ <span class="line"><span style="color:#E06C75"> nodeId</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
1506
+ <span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setValue"</span><span style="color:#ABB2BF">;</span></span>
1507
+ <span class="line"><span style="color:#E06C75"> value</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">unknown</span><span style="color:#ABB2BF">;</span></span>
1508
+ <span class="line"><span style="color:#ABB2BF">}</span></span>
1509
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1510
+ <span class="line"><span style="color:#E06C75"> newType</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">FieldType</span><span style="color:#ABB2BF">;</span></span>
1511
+ <span class="line"><span style="color:#E06C75"> nodeId</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
1512
+ <span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setType"</span><span style="color:#ABB2BF">;</span></span>
1513
+ <span class="line"><span style="color:#ABB2BF">}</span></span>
1514
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1515
+ <span class="line"><span style="color:#E06C75"> key</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
1516
+ <span class="line"><span style="color:#E06C75"> nodeId</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
1517
+ <span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setKey"</span><span style="color:#ABB2BF">;</span></span>
1518
+ <span class="line"><span style="color:#ABB2BF">}</span></span>
1519
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1520
+ <span class="line"><span style="color:#E06C75"> childType</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">FieldType</span><span style="color:#ABB2BF">;</span></span>
1521
+ <span class="line"><span style="color:#E06C75"> key</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
1522
+ <span class="line"><span style="color:#E06C75"> parentId</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
1523
+ <span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"addMapEntry"</span><span style="color:#ABB2BF">;</span></span>
1524
+ <span class="line"><span style="color:#ABB2BF">}</span></span>
1525
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1526
+ <span class="line"><span style="color:#E06C75"> childType</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">FieldType</span><span style="color:#ABB2BF">;</span></span>
1527
+ <span class="line"><span style="color:#E06C75"> parentId</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
1528
+ <span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"addArrayEntry"</span><span style="color:#ABB2BF">;</span></span>
1529
+ <span class="line"><span style="color:#ABB2BF">}</span></span>
1530
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1531
+ <span class="line"><span style="color:#E06C75"> nodeId</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
1532
+ <span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"remove"</span><span style="color:#ABB2BF">;</span></span>
1533
+ <span class="line"><span style="color:#ABB2BF">}</span></span>
1534
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1535
+ <span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"reset"</span><span style="color:#ABB2BF">;</span></span>
1536
+ <span class="line"><span style="color:#ABB2BF">}</span></span>
1537
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1538
+ <span class="line"><span style="color:#E06C75"> data</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Record</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">, </span><span style="color:#E5C07B">unknown</span><span style="color:#ABB2BF">>;</span></span>
1539
+ <span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"replaceData"</span><span style="color:#ABB2BF">;</span></span>
1540
+ <span class="line"><span style="color:#ABB2BF">}</span></span>
1541
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1542
+ <span class="line"><span style="color:#E06C75"> nodeId</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span>
1543
+ <span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"touch"</span><span style="color:#ABB2BF">;</span></span>
1544
+ <span class="line"><span style="color:#ABB2BF">}</span></span>
1545
+ <span class="line"><span style="color:#ABB2BF"> | {</span></span>
1546
+ <span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"touchAll"</span><span style="color:#ABB2BF">;</span></span>
1547
+ <span class="line"><span style="color:#ABB2BF">};</span></span></code></pre>
1548
+ <p>Discriminated union of every action the reducer accepts. Each
1549
+ action carries a <code>type</code> discriminator plus the data the reducer
1550
+ needs to apply it.</p>
1551
+ <h4 id="type-declaration">Type Declaration</h4>
1552
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
1553
+ <span class="line"><span style="color:#E06C75"> nodeId</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
1554
+ <span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setValue"</span><span style="color:#ABB2BF">;</span></span>
1555
+ <span class="line"><span style="color:#E06C75"> value</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">unknown</span><span style="color:#ABB2BF">;</span></span>
1556
+ <span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
1557
+ <h5 id="nodeid">nodeId</h5>
1558
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">nodeId</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
1559
+ <h5 id="type">type</h5>
1560
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setValue"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1561
+ <h5 id="value">value</h5>
1562
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">value</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">unknown</span><span style="color:#ABB2BF">;</span></span></code></pre>
1563
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
1564
+ <span class="line"><span style="color:#E06C75"> newType</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">FieldType</span><span style="color:#ABB2BF">;</span></span>
1565
+ <span class="line"><span style="color:#E06C75"> nodeId</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
1566
+ <span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setType"</span><span style="color:#ABB2BF">;</span></span>
1567
+ <span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
1568
+ <h5 id="newtype">newType</h5>
1569
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">newType</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">FieldType</span><span style="color:#ABB2BF">;</span></span></code></pre>
1570
+ <h5 id="nodeid-1">nodeId</h5>
1571
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">nodeId</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
1572
+ <h5 id="type-1">type</h5>
1573
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setType"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1574
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
1575
+ <span class="line"><span style="color:#E06C75"> key</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
1576
+ <span class="line"><span style="color:#E06C75"> nodeId</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
1577
+ <span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setKey"</span><span style="color:#ABB2BF">;</span></span>
1578
+ <span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
1579
+ <h5 id="key">key</h5>
1580
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">key</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
1581
+ <h5 id="nodeid-2">nodeId</h5>
1582
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">nodeId</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
1583
+ <h5 id="type-2">type</h5>
1584
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"setKey"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1585
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
1586
+ <span class="line"><span style="color:#E06C75"> childType</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">FieldType</span><span style="color:#ABB2BF">;</span></span>
1587
+ <span class="line"><span style="color:#E06C75"> key</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
1588
+ <span class="line"><span style="color:#E06C75"> parentId</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
1589
+ <span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"addMapEntry"</span><span style="color:#ABB2BF">;</span></span>
1590
+ <span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
1591
+ <h5 id="childtype">childType</h5>
1592
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">childType</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">FieldType</span><span style="color:#ABB2BF">;</span></span></code></pre>
1593
+ <h5 id="key-1">key</h5>
1594
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">key</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
1595
+ <h5 id="parentid">parentId</h5>
1596
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">parentId</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
1597
+ <h5 id="type-3">type</h5>
1598
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"addMapEntry"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1599
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
1600
+ <span class="line"><span style="color:#E06C75"> childType</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">FieldType</span><span style="color:#ABB2BF">;</span></span>
1601
+ <span class="line"><span style="color:#E06C75"> parentId</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
1602
+ <span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"addArrayEntry"</span><span style="color:#ABB2BF">;</span></span>
1603
+ <span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
1604
+ <h5 id="childtype-1">childType</h5>
1605
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">childType</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">FieldType</span><span style="color:#ABB2BF">;</span></span></code></pre>
1606
+ <h5 id="parentid-1">parentId</h5>
1607
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">parentId</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
1608
+ <h5 id="type-4">type</h5>
1609
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"addArrayEntry"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1610
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
1611
+ <span class="line"><span style="color:#E06C75"> nodeId</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
1612
+ <span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"remove"</span><span style="color:#ABB2BF">;</span></span>
1613
+ <span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
1614
+ <h5 id="nodeid-3">nodeId</h5>
1615
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">nodeId</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
1616
+ <h5 id="type-5">type</h5>
1617
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"remove"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1618
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
1619
+ <span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"reset"</span><span style="color:#ABB2BF">;</span></span>
1620
+ <span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
1621
+ <h5 id="type-6">type</h5>
1622
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"reset"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1623
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
1624
+ <span class="line"><span style="color:#E06C75"> data</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">Record</span><span style="color:#56B6C2">&#x3C;</span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75">unknown</span><span style="color:#56B6C2">></span><span style="color:#ABB2BF">;</span></span>
1625
+ <span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"replaceData"</span><span style="color:#ABB2BF">;</span></span>
1626
+ <span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
1627
+ <h5 id="data">data</h5>
1628
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">data</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">Record</span><span style="color:#56B6C2">&#x3C;</span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75">unknown</span><span style="color:#56B6C2">></span><span style="color:#ABB2BF">;</span></span></code></pre>
1629
+ <h5 id="type-7">type</h5>
1630
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"replaceData"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1631
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
1632
+ <span class="line"><span style="color:#E06C75"> nodeId</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span>
1633
+ <span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"touch"</span><span style="color:#ABB2BF">;</span></span>
1634
+ <span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
1635
+ <h5 id="nodeid-4">nodeId</h5>
1636
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">nodeId</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
1637
+ <h5 id="type-8">type</h5>
1638
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"touch"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1639
+ <p>Mark one node touched (dispatched on blur). Doesn’t change any
1640
+ value — only gates error display for consumers that check it.</p>
1641
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
1642
+ <span class="line"><span style="color:#E06C75"> type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"touchAll"</span><span style="color:#ABB2BF">;</span></span>
1643
+ <span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
1644
+ <h5 id="type-9">type</h5>
1645
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"touchAll"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1646
+ <p>Mark every node touched (dispatched on a submit attempt), so
1647
+ errors that were hidden pre-interaction all surface at once.</p>
1648
+ <hr>
1649
+ <p><a id="fieldeditorregistry"></a></p>
1650
+ <h3 id="fieldeditorregistry">FieldEditorRegistry</h3>
1651
+ <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"> FieldEditorRegistry</span><span style="color:#56B6C2"> =</span><span style="color:#E5C07B"> Partial</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">Record</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">FieldType</span><span style="color:#ABB2BF">, </span><span style="color:#E5C07B">FieldEditorContract</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">any</span><span style="color:#ABB2BF">>>>;</span></span></code></pre>
1652
+ <p>Map of field-type to editor contract. <code>Partial&#x3C;…></code> so consumers
1653
+ can override one type without re-supplying the rest — the merge
1654
+ happens at the <code>&#x3C;DocumentPreview></code> boundary.</p>
1655
+ <p>The stored value type is <code>FieldEditorContract&#x3C;any></code> rather than
1656
+ <code>FieldEditorContract&#x3C;unknown></code> because each per-type contract
1657
+ narrows its generic (e.g., <code>FieldEditorContract&#x3C;Timestamp></code> for
1658
+ timestamp) and TypeScript’s <code>ComponentType</code> is invariant in
1659
+ props. <code>any</code> at the registry layer means the type-safety lives
1660
+ at the per-contract definition site, not in the dispatch map.
1661
+ <code>FieldRenderer</code> narrows back from <code>unknown</code> -> the right contract
1662
+ via <code>inferType</code> at dispatch time.</p>
1663
+ <hr>
1664
+ <p><a id="fieldtype"></a></p>
1665
+ <h3 id="fieldtype">FieldType</h3>
1666
+ <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"> FieldType</span><span style="color:#56B6C2"> =</span></span>
1667
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"string"</span></span>
1668
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"number"</span></span>
1669
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"boolean"</span></span>
1670
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"null"</span></span>
1671
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"timestamp"</span></span>
1672
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"geopoint"</span></span>
1673
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"reference"</span></span>
1674
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"bytes"</span></span>
1675
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"map"</span></span>
1676
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"array"</span></span>
1677
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"vector"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1678
+ <p>The set of value types <code>@pyric/ui</code> knows how to display + edit.
1679
+ Maps 1:1 to Firestore’s serializable value shapes; consumers can
1680
+ extend the registry but the built-in editors cover these.</p>
1681
+ <hr>
1682
+ <p><a id="firestoreapi"></a></p>
1683
+ <h3 id="firestoreapi">FirestoreApi</h3>
1684
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> FirestoreApi</span><span style="color:#56B6C2"> =</span><span style="color:#E5C07B"> Pick</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">any</span><span style="color:#ABB2BF">,</span></span>
1685
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"addDoc"</span></span>
1686
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"collection"</span></span>
1687
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"deleteDoc"</span></span>
1688
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"doc"</span></span>
1689
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"getDoc"</span></span>
1690
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"getDocs"</span></span>
1691
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"limit"</span></span>
1692
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"onSnapshot"</span></span>
1693
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"query"</span></span>
1694
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"setDoc"</span></span>
1695
+ <span class="line"><span style="color:#ABB2BF">| </span><span style="color:#98C379">"startAfter"</span><span style="color:#ABB2BF">>;</span></span></code></pre>
1696
+ <p>The modular Firestore functions the data hooks call, as an INJECTABLE bundle.</p>
1697
+ <p>WHY: the hooks default to the in-process <code>pyric/firestore</code> API, but Pyric
1698
+ Studio’s served mode drives the SAME ops over a SharedWorker via a PARALLEL
1699
+ modular client (<code>@pyric/cli/serve/worker</code>: its own <code>collection</code>/<code>getDocs</code>/…
1700
+ over a <code>MessagePort</code>, and a <code>ClientDb</code> that is not a <code>pyric/firestore</code>
1701
+ <code>Firestore</code>). Statically importing the in-process fns hardwires the hooks to
1702
+ the in-page sandbox; reading them from this context lets a consumer inject the
1703
+ worker client’s fns so the hooks operate on the live worker backend without
1704
+ the hooks (or the components) knowing which backend they hit.</p>
1705
+ <p>The bundle is typed to the in-process signatures. A worker bundle is adapted
1706
+ (cast) to this shape at the Studio boundary: the worker handles + snapshots
1707
+ are runtime-compatible at the surface the hooks use (<code>.id</code> / <code>.data()</code> /
1708
+ <code>.docs</code> / <code>.ref</code>), which is the contract function-injection relies on.</p>
1709
+ <p>Default = the real <code>pyric/firestore</code> fns, so every existing consumer (the
1710
+ dev-seed review build, tests, any app embedding <code>@pyric/ui</code>) is unchanged: no
1711
+ provider needed unless you are swapping the backend.</p>
1712
+ <hr>
1713
+ <p><a id="listsubcollections-2"></a></p>
1714
+ <h3 id="listsubcollections">ListSubcollections()</h3>
1715
+ <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>
1716
+ <p>Lister for a document’s own subcollections. Same injected-lister
1717
+ shape as <code>useCollectionList</code> / <code>ReferencePicker</code> use — the modular
1718
+ Web SDK doesn’t expose a native <code>listCollections</code> on the client, so
1719
+ the caller wires it (sandbox in-process listing, a server proxy, or
1720
+ a known schema list).</p>
1721
+ <h4 id="parameters">Parameters</h4>
1722
+ <div class="table-scroll">
1723
+
1724
+
1725
+
1726
+
1727
+
1728
+
1729
+
1730
+
1731
+
1732
+
1733
+
1734
+
1735
+
1736
+
1737
+
1738
+
1739
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>firestore</code></td><td align="left"><code>Firestore</code></td></tr><tr><td align="left"><code>parent</code></td><td align="left"><code>DocumentReference</code></td></tr></tbody></table></div>
1740
+ <h4 id="returns">Returns</h4>
1741
+ <p><code>Promise</code>&#x3C;<code>CollectionReference</code>[]></p>
1742
+ <hr>
1743
+ <p><a id="queryop"></a></p>
1744
+ <h3 id="queryop">QueryOp</h3>
1745
+ <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>
1746
+ <hr>
1747
+ <p><a id="usequerybuilderresult"></a></p>
1748
+ <h3 id="usequerybuilderresult">UseQueryBuilderResult</h3>
1749
+ <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>
1750
+ <h2 id="variables">Variables</h2>
1751
+ <p><a id="defaultfieldeditors"></a></p>
1752
+ <h3 id="defaultfieldeditors">defaultFieldEditors</h3>
1753
+ <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"> defaultFieldEditors</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">FieldEditorRegistry</span><span style="color:#ABB2BF">;</span></span></code></pre>
1754
+ <p>Default registry. Covers every <a href="#fieldtype">FieldType</a>. Consumers extend
1755
+ or override by passing their own (partial) registry into
1756
+ <code>&#x3C;DocumentPreview></code> / <code>&#x3C;FieldRenderer></code> — the components merge
1757
+ overrides into these defaults so a consumer can swap just one
1758
+ editor without re-declaring the rest.</p>
1759
+ <hr>
1760
+ <p><a id="documenteditor"></a></p>
1761
+ <h3 id="documenteditor">DocumentEditor</h3>
1762
+ <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"> DocumentEditor</span><span style="color:#ABB2BF">: {</span></span>
1763
+ <span class="line"><span style="color:#E06C75"> Fields</span><span style="color:#ABB2BF">: </span><span style="color:#C678DD">typeof</span><span style="color:#E06C75"> DocumentEditorFields</span><span style="color:#ABB2BF">;</span></span>
1764
+ <span class="line"><span style="color:#E06C75"> Root</span><span style="color:#ABB2BF">: </span><span style="color:#C678DD">typeof</span><span style="color:#E06C75"> DocumentEditorRoot</span><span style="color:#ABB2BF">;</span></span>
1765
+ <span class="line"><span style="color:#ABB2BF">};</span></span></code></pre>
1766
+ <p>Compound root export. Consumers pattern-match via dot access:</p>
1767
+ <p>&#x3C;DocumentEditor.Root initial={data} onChange={…}>
1768
+ &#x3C;DocumentEditor.Fields />
1769
+ &#x3C;/DocumentEditor.Root></p>
1770
+ <h4 id="type-declaration-1">Type Declaration</h4>
1771
+ <p><a id="fields"></a></p>
1772
+ <h5 id="fields">Fields</h5>
1773
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">Fields</span><span style="color:#ABB2BF">: </span><span style="color:#C678DD">typeof</span><span style="color:#E06C75"> DocumentEditorFields</span><span style="color:#ABB2BF">;</span></span></code></pre>
1774
+ <p><a id="root"></a></p>
1775
+ <h5 id="root">Root</h5>
1776
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">Root</span><span style="color:#ABB2BF">: </span><span style="color:#C678DD">typeof</span><span style="color:#E06C75"> DocumentEditorRoot</span><span style="color:#ABB2BF">;</span></span></code></pre>
1777
+ <hr>
1778
+ <p><a id="multi_value_ops"></a></p>
1779
+ <h3 id="multi_value_ops">MULTI_VALUE_OPS</h3>
1780
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">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>
1781
+ <p>Ops that accept an array of values. The value editor in the
1782
+ bundled <querybuilder> parses the input as JSON for these.</querybuilder></p>
1783
+ <hr>
1784
+ <p><a id="query_ops"></a></p>
1785
+ <h3 id="query_ops">QUERY_OPS</h3>
1786
+ <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>
1787
+ <h2 id="functions">Functions</h2>
1788
+ <p><a id="asvectorview"></a></p>
1789
+ <h3 id="asvectorview">asVectorView()</h3>
1790
+ <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"> asVectorView</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">value</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">unknown</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">VectorView</span><span style="color:#ABB2BF">;</span></span></code></pre>
1791
+ <p>Detect + normalize a Firestore vector value, or return <code>null</code> if the
1792
+ value isn’t a vector. Vectors reach <code>@pyric/ui</code> in several runtime
1793
+ shapes depending on the backend the snapshot came from — there is no
1794
+ single <code>VectorValue</code> class <code>pyric/firestore</code> re-exports, so we match
1795
+ structurally (the same strategy isDocumentReferenceShape uses
1796
+ for refs):</p>
1797
+ <ol>
1798
+ <li><strong>pyric <code>Vector</code> wrapper</strong> — frozen <code>.value: number[]</code> array plus
1799
+ a <code>.dimension</code> getter (sandbox / rules-side reads).</li>
1800
+ <li><strong>firebase/firestore (web) <code>VectorValue</code></strong> — exposes <code>.toArray()</code>
1801
+ and nothing else publicly.</li>
1802
+ <li><strong>firebase-admin <code>VectorValue</code></strong> — internal <code>._values: number[]</code>
1803
+ (also a <code>.toArray()</code>).</li>
1804
+ <li><strong>wire sentinel</strong> — <code>{ __type__: '__vector__', value: number[] }</code>,
1805
+ the plain-object encoded form a discover crawler / seed emits.</li>
1806
+ </ol>
1807
+ <p>A bare <code>number[]</code> is intentionally NOT a vector — those stay <code>array</code>.
1808
+ Only the typed/branded shapes above match.</p>
1809
+ <h4 id="parameters-1">Parameters</h4>
1810
+ <div class="table-scroll">
1811
+
1812
+
1813
+
1814
+
1815
+
1816
+
1817
+
1818
+
1819
+
1820
+
1821
+
1822
+
1823
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>value</code></td><td align="left"><code>unknown</code></td></tr></tbody></table></div>
1824
+ <h4 id="returns-1">Returns</h4>
1825
+ <p><a href="#vectorview"><code>VectorView</code></a></p>
1826
+ <hr>
1827
+ <p><a id="collectionlist"></a></p>
1828
+ <h3 id="collectionlist">CollectionList()</h3>
1829
+ <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"> CollectionList</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">CollectionListProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
1830
+ <p>Headless collection list. Takes a pre-fetched array of references
1831
+ (from <code>useCollectionList</code>) plus a select callback. Renders one
1832
+ row per collection with <code>data-pyric-collection-id</code> for styling
1833
+ and testing. The library does not own the data fetch — the hook
1834
+ does — so this component is a thin presentational layer.</p>
1835
+ <h4 id="parameters-2">Parameters</h4>
1836
+ <div class="table-scroll">
1837
+
1838
+
1839
+
1840
+
1841
+
1842
+
1843
+
1844
+
1845
+
1846
+
1847
+
1848
+
1849
+ <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="#collectionlistprops"><code>CollectionListProps</code></a></td></tr></tbody></table></div>
1850
+ <h4 id="returns-2">Returns</h4>
1851
+ <p><code>Element</code></p>
1852
+ <hr>
1853
+ <p><a id="deletewithconfirm"></a></p>
1854
+ <h3 id="deletewithconfirm">DeleteWithConfirm()</h3>
1855
+ <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"> DeleteWithConfirm</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">DeleteWithConfirmProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
1856
+ <p>Composition that wires <code>useConfirm</code> + <code>useRecursiveDelete</code>. Requires
1857
+ a <code>&#x3C;ConfirmProvider></code> ancestor.</p>
1858
+ <p>The default trigger renders a plain <code>&#x3C;button></code> carrying the
1859
+ destructive intent (the consumer styles via <code>[data-pyric-destructive]</code>).
1860
+ Consumers wanting different chrome pass <code>renderTrigger</code>.</p>
1861
+ <h4 id="parameters-3">Parameters</h4>
1862
+ <div class="table-scroll">
1863
+
1864
+
1865
+
1866
+
1867
+
1868
+
1869
+
1870
+
1871
+
1872
+
1873
+
1874
+
1875
+ <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="#deletewithconfirmprops"><code>DeleteWithConfirmProps</code></a></td></tr></tbody></table></div>
1876
+ <h4 id="returns-3">Returns</h4>
1877
+ <p><code>Element</code></p>
1878
+ <hr>
1879
+ <p><a id="detectcollisions"></a></p>
1880
+ <h3 id="detectcollisions">detectCollisions()</h3>
1881
+ <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"> detectCollisions</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">existingIds</span><span style="color:#ABB2BF">: </span><span style="color:#C678DD">readonly</span><span style="color:#E5C07B"> string</span><span style="color:#ABB2BF">[], </span><span style="color:#E06C75;font-style:italic">docs</span><span style="color:#ABB2BF">: </span><span style="color:#C678DD">readonly</span><span style="color:#E5C07B"> ParsedImportDoc</span><span style="color:#ABB2BF">[]): </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">[];</span></span></code></pre>
1882
+ <p>Ids in <code>docs</code> (map-shape entries only — <code>id !== null</code>) that already exist
1883
+ in <code>existingIds</code>. The UI shows the skip-or-overwrite policy choice ONLY
1884
+ when this returns a non-empty list.</p>
1885
+ <h4 id="parameters-4">Parameters</h4>
1886
+ <div class="table-scroll">
1887
+
1888
+
1889
+
1890
+
1891
+
1892
+
1893
+
1894
+
1895
+
1896
+
1897
+
1898
+
1899
+
1900
+
1901
+
1902
+
1903
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>existingIds</code></td><td align="left">readonly <code>string</code>[]</td></tr><tr><td align="left"><code>docs</code></td><td align="left">readonly <a href="#parsedimportdoc"><code>ParsedImportDoc</code></a>[]</td></tr></tbody></table></div>
1904
+ <h4 id="returns-4">Returns</h4>
1905
+ <p><code>string</code>[]</p>
1906
+ <hr>
1907
+ <p><a id="documenteditorfields-1"></a></p>
1908
+ <h3 id="documenteditorfields">DocumentEditorFields()</h3>
1909
+ <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"> DocumentEditorFields</span><span style="color:#ABB2BF">(): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
1910
+ <p>Renders the top-level fields of the document. For finer control,
1911
+ a consumer can call <code>useDocumentEditorContext()</code> and render the
1912
+ tree themselves.</p>
1913
+ <h4 id="returns-5">Returns</h4>
1914
+ <p><code>Element</code></p>
1915
+ <hr>
1916
+ <p><a id="documenteditorroot-1"></a></p>
1917
+ <h3 id="documenteditorroot">DocumentEditorRoot()</h3>
1918
+ <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"> DocumentEditorRoot</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">DocumentEditorRootProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
1919
+ <p>Wires the <code>useDocumentEditor</code> hook + field-editor registry into a
1920
+ React context so <code>&#x3C;DocumentEditor.Fields></code> and <code>&#x3C;DocumentEditor.AddField></code>
1921
+ can render the tree without prop drilling.</p>
1922
+ <p>Pattern: hook + compound component. Consumers wanting full control
1923
+ over the layout call <code>useDocumentEditor</code> directly and render their
1924
+ own tree; consumers wanting the default rendering use this.</p>
1925
+ <h4 id="parameters-5">Parameters</h4>
1926
+ <div class="table-scroll">
1927
+
1928
+
1929
+
1930
+
1931
+
1932
+
1933
+
1934
+
1935
+
1936
+
1937
+
1938
+
1939
+ <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="#documenteditorrootprops"><code>DocumentEditorRootProps</code></a></td></tr></tbody></table></div>
1940
+ <h4 id="returns-6">Returns</h4>
1941
+ <p><code>Element</code></p>
1942
+ <hr>
1943
+ <p><a id="documentlist"></a></p>
1944
+ <h3 id="documentlist">DocumentList()</h3>
1945
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> DocumentList</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">DocumentListProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
1946
+ <p>Headless document list. Below <code>virtualizeThreshold</code>, renders a
1947
+ plain <code>&#x3C;ul></code>; above it, switches to TanStack-Virtual via
1948
+ <code>&#x3C;VirtualList></code> so 10k-doc collections don’t bloat the DOM.</p>
1949
+ <p>The hook owns pagination state; this component just renders. The
1950
+ Load More button only renders when <code>hasMore</code> is true AND
1951
+ <code>onLoadMore</code> is provided. Consumers wanting infinite scroll
1952
+ trigger <code>onLoadMore</code> from a sentinel <code>IntersectionObserver</code> in
1953
+ their own code — the component doesn’t bake that policy in.</p>
1954
+ <h4 id="parameters-6">Parameters</h4>
1955
+ <div class="table-scroll">
1956
+
1957
+
1958
+
1959
+
1960
+
1961
+
1962
+
1963
+
1964
+
1965
+
1966
+
1967
+
1968
+ <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="#documentlistprops"><code>DocumentListProps</code></a></td></tr></tbody></table></div>
1969
+ <h4 id="returns-7">Returns</h4>
1970
+ <p><code>Element</code></p>
1971
+ <hr>
1972
+ <p><a id="documentpreview"></a></p>
1973
+ <h3 id="documentpreview">DocumentPreview()</h3>
1974
+ <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"> DocumentPreview</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">DocumentPreviewProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
1975
+ <p>Read-only renderer for a Firestore document. Iterates top-level
1976
+ fields in lexicographic order; each field dispatches through the
1977
+ field-editor registry on its inferred type.</p>
1978
+ <p>Headless — no shipped CSS. Consumers style via <code>className</code> on the
1979
+ root and <code>[data-pyric-field-type]</code> / <code>[data-pyric-field-path]</code>
1980
+ attribute selectors on the per-field nodes.</p>
1981
+ <p>Editing arrives in M3 (<code>&#x3C;DocumentEditor></code>). M2 only displays.</p>
1982
+ <h4 id="parameters-7">Parameters</h4>
1983
+ <div class="table-scroll">
1984
+
1985
+
1986
+
1987
+
1988
+
1989
+
1990
+
1991
+
1992
+
1993
+
1994
+
1995
+
1996
+ <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="#documentpreviewprops"><code>DocumentPreviewProps</code></a></td></tr></tbody></table></div>
1997
+ <h4 id="returns-8">Returns</h4>
1998
+ <p><code>Element</code></p>
1999
+ <hr>
2000
+ <p><a id="fieldrenderer"></a></p>
2001
+ <h3 id="fieldrenderer">FieldRenderer()</h3>
2002
+ <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"> FieldRenderer</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">FieldRendererProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
2003
+ <p>Dispatches a single value to its registered display component.
2004
+ Recursive editors (Map, Array) re-enter through this component
2005
+ for their children, threading the same registry.</p>
2006
+ <h4 id="parameters-8">Parameters</h4>
2007
+ <div class="table-scroll">
2008
+
2009
+
2010
+
2011
+
2012
+
2013
+
2014
+
2015
+
2016
+
2017
+
2018
+
2019
+
2020
+ <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="#fieldrendererprops"><code>FieldRendererProps</code></a></td></tr></tbody></table></div>
2021
+ <h4 id="returns-9">Returns</h4>
2022
+ <p><code>Element</code></p>
2023
+ <hr>
2024
+ <p><a id="firestoreapiprovider"></a></p>
2025
+ <h3 id="firestoreapiprovider">FirestoreApiProvider()</h3>
2026
+ <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"> FirestoreApiProvider</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: {</span></span>
2027
+ <span class="line"><span style="color:#E06C75"> children</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">ReactNode</span><span style="color:#ABB2BF">;</span></span>
2028
+ <span class="line"><span style="color:#E06C75"> value</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">FirestoreApi</span><span style="color:#ABB2BF">;</span></span>
2029
+ <span class="line"><span style="color:#ABB2BF">}): </span><span style="color:#E5C07B">FunctionComponentElement</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">ProviderProps</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">FirestoreApi</span><span style="color:#ABB2BF">>>;</span></span></code></pre>
2030
+ <p>Provide a Firestore API bundle to the subtree. Pyric Studio wraps its data
2031
+ surface with this, supplying the in-process bundle for dev-seed review and the
2032
+ SharedWorker client bundle under <code>pyric dev --ui</code>.</p>
2033
+ <h4 id="parameters-9">Parameters</h4>
2034
+ <div class="table-scroll">
2035
+
2036
+
2037
+
2038
+
2039
+
2040
+
2041
+
2042
+
2043
+
2044
+
2045
+
2046
+
2047
+
2048
+
2049
+
2050
+
2051
+
2052
+
2053
+
2054
+
2055
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>__namedParameters</code></td><td align="left">{ <code>children</code>: <code>ReactNode</code>; <code>value</code>: <a href="#firestoreapi"><code>FirestoreApi</code></a>; }</td></tr><tr><td align="left"><code>__namedParameters.children</code></td><td align="left"><code>ReactNode</code></td></tr><tr><td align="left"><code>__namedParameters.value</code></td><td align="left"><a href="#firestoreapi"><code>FirestoreApi</code></a></td></tr></tbody></table></div>
2056
+ <h4 id="returns-10">Returns</h4>
2057
+ <p><code>FunctionComponentElement</code>&#x3C;<code>ProviderProps</code>&#x3C;<a href="#firestoreapi"><code>FirestoreApi</code></a>>></p>
2058
+ <hr>
2059
+ <p><a id="firestoreautoid"></a></p>
2060
+ <h3 id="firestoreautoid">firestoreAutoId()</h3>
2061
+ <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"> firestoreAutoId</span><span style="color:#ABB2BF">(): </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
2062
+ <p>A Firestore-style 20-char auto id (same alphabet/length the SDK uses).</p>
2063
+ <h4 id="returns-11">Returns</h4>
2064
+ <p><code>string</code></p>
2065
+ <hr>
2066
+ <p><a id="firestorevaluesequal"></a></p>
2067
+ <h3 id="firestorevaluesequal">firestoreValuesEqual()</h3>
2068
+ <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"> firestoreValuesEqual</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">previous</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">unknown</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">next</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">unknown</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">boolean</span><span style="color:#ABB2BF">;</span></span></code></pre>
2069
+ <p>Firestore-aware structural equality for values delivered by either the
2070
+ in-process SDK or the SharedWorker serializer.</p>
2071
+ <h4 id="parameters-10">Parameters</h4>
2072
+ <div class="table-scroll">
2073
+
2074
+
2075
+
2076
+
2077
+
2078
+
2079
+
2080
+
2081
+
2082
+
2083
+
2084
+
2085
+
2086
+
2087
+
2088
+
2089
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>previous</code></td><td align="left"><code>unknown</code></td></tr><tr><td align="left"><code>next</code></td><td align="left"><code>unknown</code></td></tr></tbody></table></div>
2090
+ <h4 id="returns-12">Returns</h4>
2091
+ <p><code>boolean</code></p>
2092
+ <hr>
2093
+ <p><a id="infertype"></a></p>
2094
+ <h3 id="infertype">inferType()</h3>
2095
+ <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"> inferType</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">value</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">unknown</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">FieldType</span><span style="color:#ABB2BF">;</span></span></code></pre>
2096
+ <p>Runtime-classify a value into one of the <a href="#fieldtype">FieldType</a>s.</p>
2097
+ <p>The discrimination order matters:</p>
2098
+ <ul>
2099
+ <li><code>null</code> checked before <code>typeof === 'object'</code> (null is an object)</li>
2100
+ <li>vector (a typed embedding wrapper) checked before <code>Array.isArray</code>
2101
+ and before generic objects — its wire-sentinel shape is a plain
2102
+ object, and a bare <code>number[]</code> must stay <code>array</code>, not <code>vector</code></li>
2103
+ <li><code>Array.isArray</code> checked before generic objects</li>
2104
+ <li>Firestore special types (Timestamp/GeoPoint/Bytes/DocumentRef)
2105
+ checked before falling through to <code>map</code></li>
2106
+ </ul>
2107
+ <p><code>undefined</code> values aren’t legal Firestore field values; we coerce
2108
+ them to <code>'null'</code> rather than throw — the caller can decide whether
2109
+ to display or filter.</p>
2110
+ <h4 id="parameters-11">Parameters</h4>
2111
+ <div class="table-scroll">
2112
+
2113
+
2114
+
2115
+
2116
+
2117
+
2118
+
2119
+
2120
+
2121
+
2122
+
2123
+
2124
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>value</code></td><td align="left"><code>unknown</code></td></tr></tbody></table></div>
2125
+ <h4 id="returns-13">Returns</h4>
2126
+ <p><a href="#fieldtype"><code>FieldType</code></a></p>
2127
+ <hr>
2128
+ <p><a id="initstate"></a></p>
2129
+ <h3 id="initstate">initState()</h3>
2130
+ <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"> initState</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">initial</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Record</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">, </span><span style="color:#E5C07B">unknown</span><span style="color:#ABB2BF">>): </span><span style="color:#E5C07B">DocumentEditorState</span><span style="color:#ABB2BF">;</span></span></code></pre>
2131
+ <p>Initial state factory. Builds tree + initial snapshot + error count.</p>
2132
+ <h4 id="parameters-12">Parameters</h4>
2133
+ <div class="table-scroll">
2134
+
2135
+
2136
+
2137
+
2138
+
2139
+
2140
+
2141
+
2142
+
2143
+
2144
+
2145
+
2146
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>initial</code></td><td align="left"><code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>></td></tr></tbody></table></div>
2147
+ <h4 id="returns-14">Returns</h4>
2148
+ <p><a href="#documenteditorstate"><code>DocumentEditorState</code></a></p>
2149
+ <hr>
2150
+ <p><a id="mergefieldeditors"></a></p>
2151
+ <h3 id="mergefieldeditors">mergeFieldEditors()</h3>
2152
+ <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"> mergeFieldEditors</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">override</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Partial</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">Record</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">FieldType</span><span style="color:#ABB2BF">, </span><span style="color:#E5C07B">FieldEditorContract</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">any</span><span style="color:#ABB2BF">>>>): </span><span style="color:#E5C07B">FieldEditorRegistry</span><span style="color:#ABB2BF">;</span></span></code></pre>
2153
+ <p>Merge a consumer-supplied registry over the defaults. <code>undefined</code>
2154
+ input returns the defaults as-is. Used internally by
2155
+ <code>&#x3C;DocumentPreview></code> so consumers don’t have to spread manually.</p>
2156
+ <h4 id="parameters-13">Parameters</h4>
2157
+ <div class="table-scroll">
2158
+
2159
+
2160
+
2161
+
2162
+
2163
+
2164
+
2165
+
2166
+
2167
+
2168
+
2169
+
2170
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>override</code></td><td align="left"><code>Partial</code>&#x3C;<code>Record</code>&#x3C;<a href="#fieldtype"><code>FieldType</code></a>, <a href="#fieldeditorcontract"><code>FieldEditorContract</code></a>&#x3C;<code>any</code>>>></td></tr></tbody></table></div>
2171
+ <h4 id="returns-15">Returns</h4>
2172
+ <p><a href="#fieldeditorregistry"><code>FieldEditorRegistry</code></a></p>
2173
+ <hr>
2174
+ <p><a id="parseimport"></a></p>
2175
+ <h3 id="parseimport">parseImport()</h3>
2176
+ <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"> parseImport</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">input</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">options</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">ParseImportOptions</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">ParseImportResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
2177
+ <p>Parse raw JSON text into the documents it would create. Never throws —
2178
+ a JSON syntax error or a wrong top-level shape becomes an entry in
2179
+ <code>errors</code> with an empty <code>docs</code> array.</p>
2180
+ <h4 id="parameters-14">Parameters</h4>
2181
+ <div class="table-scroll">
2182
+
2183
+
2184
+
2185
+
2186
+
2187
+
2188
+
2189
+
2190
+
2191
+
2192
+
2193
+
2194
+
2195
+
2196
+
2197
+
2198
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>input</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>options?</code></td><td align="left"><a href="#parseimportoptions"><code>ParseImportOptions</code></a></td></tr></tbody></table></div>
2199
+ <h4 id="returns-16">Returns</h4>
2200
+ <p><a href="#parseimportresult"><code>ParseImportResult</code></a></p>
2201
+ <hr>
2202
+ <p><a id="querybuilder"></a></p>
2203
+ <h3 id="querybuilder">QueryBuilder()</h3>
2204
+ <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"> QueryBuilder</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">QueryBuilderProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
2205
+ <p>Default visible composition over <code>useQueryBuilder</code>. Renders the
2206
+ condition list + orderBy + limit form. Headless — every node
2207
+ carries <code>data-pyric-*</code> for styling.</p>
2208
+ <p>Values are JSON-parsed on input. <code>42</code>, <code>"text"</code>, <code>true</code>, <code>null</code>,
2209
+ and <code>[1, 2, 3]</code> (for <code>in</code>/<code>not-in</code>/<code>array-contains-any</code>) all
2210
+ work; raw strings that aren’t JSON-parsable fall through as-is.
2211
+ For non-JSON Firestore values (Timestamp, GeoPoint, Reference,
2212
+ Bytes), consumers either use the hook directly with their own
2213
+ value editors or swap the rendered component out.</p>
2214
+ <h4 id="parameters-15">Parameters</h4>
2215
+ <div class="table-scroll">
2216
+
2217
+
2218
+
2219
+
2220
+
2221
+
2222
+
2223
+
2224
+
2225
+
2226
+
2227
+
2228
+ <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="#querybuilderprops"><code>QueryBuilderProps</code></a></td></tr></tbody></table></div>
2229
+ <h4 id="returns-17">Returns</h4>
2230
+ <p><code>Element</code></p>
2231
+ <hr>
2232
+ <p><a id="reducer"></a></p>
2233
+ <h3 id="reducer">reducer()</h3>
2234
+ <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"> reducer</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">state</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">DocumentEditorState</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">action</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">DocumentEditorAction</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">DocumentEditorState</span><span style="color:#ABB2BF">;</span></span></code></pre>
2235
+ <p>Pure reducer. Every action returns a fresh state — no in-place
2236
+ mutation of <code>state.tree</code>. Validation re-runs after the structural
2237
+ change so <code>errorCount</code> is always current. Container nodes (map /
2238
+ array) ignore actions that don’t apply to them rather than
2239
+ throwing; the components only render valid affordances per type.</p>
2240
+ <h4 id="parameters-16">Parameters</h4>
2241
+ <div class="table-scroll">
2242
+
2243
+
2244
+
2245
+
2246
+
2247
+
2248
+
2249
+
2250
+
2251
+
2252
+
2253
+
2254
+
2255
+
2256
+
2257
+
2258
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>state</code></td><td align="left"><a href="#documenteditorstate"><code>DocumentEditorState</code></a></td></tr><tr><td align="left"><code>action</code></td><td align="left"><a href="#documenteditoraction"><code>DocumentEditorAction</code></a></td></tr></tbody></table></div>
2259
+ <h4 id="returns-18">Returns</h4>
2260
+ <p><a href="#documenteditorstate"><code>DocumentEditorState</code></a></p>
2261
+ <hr>
2262
+ <p><a id="referencepicker"></a></p>
2263
+ <h3 id="referencepicker">ReferencePicker()</h3>
2264
+ <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"> ReferencePicker</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">ReferencePickerProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
2265
+ <p>Visible reference picker — text input + browseable panel.</p>
2266
+ <p>Two ways to commit a reference:</p>
2267
+ <ol>
2268
+ <li>Type a path, then click Commit (enabled only when the path
2269
+ parses to a valid <code>DocumentReference</code>).</li>
2270
+ <li>Drill into a collection in the panel and click a document
2271
+ row.</li>
2272
+ </ol>
2273
+ <p>Either path fires <code>onPick(ref)</code>. Headless — emits structural
2274
+ <code>data-pyric-*</code> for styling.</p>
2275
+ <h4 id="parameters-17">Parameters</h4>
2276
+ <div class="table-scroll">
2277
+
2278
+
2279
+
2280
+
2281
+
2282
+
2283
+
2284
+
2285
+
2286
+
2287
+
2288
+
2289
+ <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="#referencepickerprops"><code>ReferencePickerProps</code></a></td></tr></tbody></table></div>
2290
+ <h4 id="returns-19">Returns</h4>
2291
+ <p><code>Element</code></p>
2292
+ <hr>
2293
+ <p><a id="treefromdata"></a></p>
2294
+ <h3 id="treefromdata">treeFromData()</h3>
2295
+ <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"> treeFromData</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">data</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Record</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">, </span><span style="color:#E5C07B">unknown</span><span style="color:#ABB2BF">>): </span><span style="color:#E5C07B">EditorTree</span><span style="color:#ABB2BF">;</span></span></code></pre>
2296
+ <p>Build a normalized editor tree from a Firestore-shaped object.
2297
+ The root node is a virtual <code>map</code> that holds the document’s
2298
+ top-level fields. Order of children mirrors <code>Object.entries</code> (the
2299
+ renderer is responsible for any sort it wants).</p>
2300
+ <h4 id="parameters-18">Parameters</h4>
2301
+ <div class="table-scroll">
2302
+
2303
+
2304
+
2305
+
2306
+
2307
+
2308
+
2309
+
2310
+
2311
+
2312
+
2313
+
2314
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>data</code></td><td align="left"><code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>></td></tr></tbody></table></div>
2315
+ <h4 id="returns-20">Returns</h4>
2316
+ <p><a href="#editortree"><code>EditorTree</code></a></p>
2317
+ <hr>
2318
+ <p><a id="treetodata"></a></p>
2319
+ <h3 id="treetodata">treeToData()</h3>
2320
+ <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"> treeToData</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">tree</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">EditorTree</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Record</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">, </span><span style="color:#E5C07B">unknown</span><span style="color:#ABB2BF">>;</span></span></code></pre>
2321
+ <p>Serialize a tree back to a Firestore-shaped object. Leaf values
2322
+ pass through unchanged (so a <code>Timestamp</code> round-trips as the same
2323
+ <code>Timestamp</code> instance). Maps recurse with their sorted keys; arrays
2324
+ recurse in <code>childIds</code> order.</p>
2325
+ <h4 id="parameters-19">Parameters</h4>
2326
+ <div class="table-scroll">
2327
+
2328
+
2329
+
2330
+
2331
+
2332
+
2333
+
2334
+
2335
+
2336
+
2337
+
2338
+
2339
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>tree</code></td><td align="left"><a href="#editortree"><code>EditorTree</code></a></td></tr></tbody></table></div>
2340
+ <h4 id="returns-21">Returns</h4>
2341
+ <p><code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>></p>
2342
+ <hr>
2343
+ <p><a id="truncatevectorsfordisplay"></a></p>
2344
+ <h3 id="truncatevectorsfordisplay">truncateVectorsForDisplay()</h3>
2345
+ <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"> truncateVectorsForDisplay</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">value</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">unknown</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">unknown</span><span style="color:#ABB2BF">;</span></span></code></pre>
2346
+ <p>Deep-replace any vector-shaped value with a compact preview STRING, so the
2347
+ result can be <code>JSON.stringify</code>’d / formatted without dumping full embeddings.
2348
+ Recurses plain objects + arrays; class instances (Timestamp/GeoPoint) and
2349
+ scalars pass through untouched. Vector instances/sentinels are caught first.</p>
2350
+ <h4 id="parameters-20">Parameters</h4>
2351
+ <div class="table-scroll">
2352
+
2353
+
2354
+
2355
+
2356
+
2357
+
2358
+
2359
+
2360
+
2361
+
2362
+
2363
+
2364
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>value</code></td><td align="left"><code>unknown</code></td></tr></tbody></table></div>
2365
+ <h4 id="returns-22">Returns</h4>
2366
+ <p><code>unknown</code></p>
2367
+ <hr>
2368
+ <p><a id="usecollectionlist"></a></p>
2369
+ <h3 id="usecollectionlist">useCollectionList()</h3>
2370
+ <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>
2371
+ <p>Operational read + create for collections under a parent (or root).
2372
+ Listing is injected because the modular Web SDK doesn’t expose a
2373
+ native <code>listCollections</code> on the client — see options docs.</p>
2374
+ <h4 id="parameters-21">Parameters</h4>
2375
+ <div class="table-scroll">
2376
+
2377
+
2378
+
2379
+
2380
+
2381
+
2382
+
2383
+
2384
+
2385
+
2386
+
2387
+
2388
+ <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>
2389
+ <h4 id="returns-23">Returns</h4>
2390
+ <p><a href="#usecollectionlistresult"><code>UseCollectionListResult</code></a></p>
2391
+ <hr>
2392
+ <p><a id="usedocumenteditor"></a></p>
2393
+ <h3 id="usedocumenteditor">useDocumentEditor()</h3>
2394
+ <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>
2395
+ <p>Headless document editor. Owns the entire edit state for one
2396
+ document via a pure reducer. Consumers either render the bundled
2397
+ <code>&#x3C;DocumentEditor></code> compound component over this hook, or render
2398
+ their own tree using the returned state.</p>
2399
+ <p>The hook builds its tree from <code>initial</code> on first mount. Changing
2400
+ <code>initial</code> later does NOT rebuild the tree; live viewers explicitly call
2401
+ <code>replaceData()</code> when a newer snapshot should become the clean baseline.
2402
+ This matches the firebase-tools-ui pattern of treating the editor as a
2403
+ stateful workspace while still allowing snapshot-driven reconciliation.</p>
2404
+ <h4 id="parameters-22">Parameters</h4>
2405
+ <div class="table-scroll">
2406
+
2407
+
2408
+
2409
+
2410
+
2411
+
2412
+
2413
+
2414
+
2415
+
2416
+
2417
+
2418
+ <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>
2419
+ <h4 id="returns-24">Returns</h4>
2420
+ <p><a href="#usedocumenteditorresult"><code>UseDocumentEditorResult</code></a></p>
2421
+ <hr>
2422
+ <p><a id="usedocumenteditorcontext"></a></p>
2423
+ <h3 id="usedocumenteditorcontext">useDocumentEditorContext()</h3>
2424
+ <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"> useDocumentEditorContext</span><span style="color:#ABB2BF">(): </span><span style="color:#E5C07B">UseDocumentEditorResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
2425
+ <p>Read access to the underlying editor state from inside a Root.</p>
2426
+ <h4 id="returns-25">Returns</h4>
2427
+ <p><a href="#usedocumenteditorresult"><code>UseDocumentEditorResult</code></a></p>
2428
+ <hr>
2429
+ <p><a id="usedocumentlist"></a></p>
2430
+ <h3 id="usedocumentlist">useDocumentList()</h3>
2431
+ <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>
2432
+ <p>Paginated document list with two acquisition strategies. The default
2433
+ <code>paged</code> mode uses <code>startAfter</code> and accumulates one-shot reads. <code>live</code> keeps
2434
+ the requested prefix under one <code>onSnapshot</code> listener; loading more grows
2435
+ that prefix and establishes a new subscription baseline.</p>
2436
+ <h4 id="parameters-23">Parameters</h4>
2437
+ <div class="table-scroll">
2438
+
2439
+
2440
+
2441
+
2442
+
2443
+
2444
+
2445
+
2446
+
2447
+
2448
+
2449
+
2450
+ <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>
2451
+ <h4 id="returns-26">Returns</h4>
2452
+ <p><a href="#usedocumentlistresult"><code>UseDocumentListResult</code></a></p>
2453
+ <hr>
2454
+ <p><a id="usedocumentsubcollections"></a></p>
2455
+ <h3 id="usedocumentsubcollections">useDocumentSubcollections()</h3>
2456
+ <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>
2457
+ <p>Read a single document’s subcollection list. A thin specialization of
2458
+ the <code>useCollectionList</code> pattern, scoped to one parent document and
2459
+ read-only (no create — that lives in <code>useCollectionList</code>).</p>
2460
+ <h4 id="parameters-24">Parameters</h4>
2461
+ <div class="table-scroll">
2462
+
2463
+
2464
+
2465
+
2466
+
2467
+
2468
+
2469
+
2470
+
2471
+
2472
+
2473
+
2474
+ <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>
2475
+ <h4 id="returns-27">Returns</h4>
2476
+ <p><a href="#usedocumentsubcollectionsresult"><code>UseDocumentSubcollectionsResult</code></a></p>
2477
+ <hr>
2478
+ <p><a id="usefirestoreapi"></a></p>
2479
+ <h3 id="usefirestoreapi">useFirestoreApi()</h3>
2480
+ <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"> useFirestoreApi</span><span style="color:#ABB2BF">(): </span><span style="color:#E5C07B">FirestoreApi</span><span style="color:#ABB2BF">;</span></span></code></pre>
2481
+ <p>Read the active Firestore API bundle (defaults to in-process <code>pyric/firestore</code>).</p>
2482
+ <h4 id="returns-28">Returns</h4>
2483
+ <p><a href="#firestoreapi"><code>FirestoreApi</code></a></p>
2484
+ <hr>
2485
+ <p><a id="usefirestorecollection"></a></p>
2486
+ <h3 id="usefirestorecollection">useFirestoreCollection()</h3>
2487
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> useFirestoreCollection</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">query</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">any</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">SubscriptionState</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">QuerySnapshot</span><span style="color:#ABB2BF">>;</span></span></code></pre>
2488
+ <p>Subscribe to a Firestore query (a <code>Query</code> from <code>pyric/firestore</code>’s
2489
+ modular surface, including any <code>CollectionReference</code>, which extends
2490
+ <code>Query</code>). Returns <code>{ data, error, isLoading }</code>.</p>
2491
+ <p>Null/undefined query short-circuits to idle. Cleanup is automatic
2492
+ on unmount or query change. <code>Query</code> objects don’t have a stable
2493
+ structural identity, so the consumer must memoize at the call site
2494
+ — pass the same instance across renders to avoid re-subscribing.</p>
2495
+ <h4 id="parameters-25">Parameters</h4>
2496
+ <div class="table-scroll">
2497
+
2498
+
2499
+
2500
+
2501
+
2502
+
2503
+
2504
+
2505
+
2506
+
2507
+
2508
+
2509
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>query</code></td><td align="left"><code>any</code></td></tr></tbody></table></div>
2510
+ <h4 id="returns-29">Returns</h4>
2511
+ <p><a href="#subscriptionstate"><code>SubscriptionState</code></a>&#x3C;<code>QuerySnapshot</code>></p>
2512
+ <hr>
2513
+ <p><a id="usefirestoredoc"></a></p>
2514
+ <h3 id="usefirestoredoc">useFirestoreDoc()</h3>
2515
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> useFirestoreDoc</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">ref</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">any</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">SubscriptionState</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">DocumentSnapshot</span><span style="color:#ABB2BF">>;</span></span></code></pre>
2516
+ <p>Subscribe to a single Firestore document. Returns <code>{ data, error, isLoading }</code>. Null/undefined ref short-circuits to an idle state
2517
+ (<code>data: undefined, error: undefined, isLoading: false</code>) — useful
2518
+ for conditional rendering before a ref is known.</p>
2519
+ <p>Cleanup is automatic on unmount or ref change. Memoize the ref at
2520
+ the call site; this hook’s effect re-runs on identity change.</p>
2521
+ <h4 id="parameters-26">Parameters</h4>
2522
+ <div class="table-scroll">
2523
+
2524
+
2525
+
2526
+
2527
+
2528
+
2529
+
2530
+
2531
+
2532
+
2533
+
2534
+
2535
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>ref</code></td><td align="left"><code>any</code></td></tr></tbody></table></div>
2536
+ <h4 id="returns-30">Returns</h4>
2537
+ <p><a href="#subscriptionstate"><code>SubscriptionState</code></a>&#x3C;<code>DocumentSnapshot</code>></p>
2538
+ <hr>
2539
+ <p><a id="usequerybuilder"></a></p>
2540
+ <h3 id="usequerybuilder">useQueryBuilder()</h3>
2541
+ <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>
2542
+ <p>Headless query-builder state machine. Single-level — no nested
2543
+ <code>and()</code>/<code>or()</code> groups in v1. Consumers compose the state into a
2544
+ Firestore <code>Query</code> via <code>buildQuery(base)</code> and feed that into
2545
+ <code>useDocumentList</code> / <code>useFirestoreCollection</code>.</p>
2546
+ <h4 id="parameters-27">Parameters</h4>
2547
+ <div class="table-scroll">
2548
+
2549
+
2550
+
2551
+
2552
+
2553
+
2554
+
2555
+
2556
+
2557
+
2558
+
2559
+
2560
+ <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>
2561
+ <h4 id="returns-31">Returns</h4>
2562
+ <p><a href="#usequerybuilderresult"><code>UseQueryBuilderResult</code></a></p>
2563
+ <hr>
2564
+ <p><a id="userecursivedelete"></a></p>
2565
+ <h3 id="userecursivedelete">useRecursiveDelete()</h3>
2566
+ <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>
2567
+ <p>Drive a <a href="#recursivedeleteimpl">RecursiveDeleteImpl</a> from a React component. Tracks
2568
+ progress + running state so the consumer can render a progress
2569
+ indicator. Errors are caught and surfaced via the returned state,
2570
+ not thrown.</p>
2571
+ <p>Stale-run protection: if the component remounts (or the user
2572
+ cancels and starts a new run) before a previous iteration
2573
+ finishes, the older run’s progress updates are dropped via a
2574
+ generation token.</p>
2575
+ <h4 id="parameters-28">Parameters</h4>
2576
+ <div class="table-scroll">
2577
+
2578
+
2579
+
2580
+
2581
+
2582
+
2583
+
2584
+
2585
+
2586
+
2587
+
2588
+
2589
+ <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>
2590
+ <h4 id="returns-32">Returns</h4>
2591
+ <p><a href="#userecursivedeleteresult"><code>UseRecursiveDeleteResult</code></a></p>
2592
+ <hr>
2593
+ <p><a id="usereferencepicker"></a></p>
2594
+ <h3 id="usereferencepicker">useReferencePicker()</h3>
2595
+ <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>
2596
+ <p>Picker state machine. Browses a Firestore tree level-by-level
2597
+ (root → collection → document → collection → …), maintains a
2598
+ separately-validated text-input path, and commits a chosen
2599
+ reference via <code>pick</code>.</p>
2600
+ <p>Headless — consumers compose the resulting state into their own
2601
+ UI, or use the bundled <code>&#x3C;ReferencePicker></code> component.</p>
2602
+ <h4 id="parameters-29">Parameters</h4>
2603
+ <div class="table-scroll">
2604
+
2605
+
2606
+
2607
+
2608
+
2609
+
2610
+
2611
+
2612
+
2613
+
2614
+
2615
+
2616
+ <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>
2617
+ <h4 id="returns-33">Returns</h4>
2618
+ <p><a href="#usereferencepickerresult"><code>UseReferencePickerResult</code></a></p>
2619
+ <hr>
2620
+ <p><a id="validatecollectionid"></a></p>
2621
+ <h3 id="validatecollectionid">validateCollectionId()</h3>
2622
+ <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"> validateCollectionId</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">id</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
2623
+ <p>Validate a collection id. Returns an error message, or <code>undefined</code> when valid.</p>
2624
+ <h4 id="parameters-30">Parameters</h4>
2625
+ <div class="table-scroll">
2626
+
2627
+
2628
+
2629
+
2630
+
2631
+
2632
+
2633
+
2634
+
2635
+
2636
+
2637
+
2638
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>id</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
2639
+ <h4 id="returns-34">Returns</h4>
2640
+ <p><code>string</code></p>
2641
+ <hr>
2642
+ <p><a id="validatedocumentid"></a></p>
2643
+ <h3 id="validatedocumentid">validateDocumentId()</h3>
2644
+ <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"> validateDocumentId</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">id</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
2645
+ <p>Validate a document id. Returns an error message, or <code>undefined</code> when valid.</p>
2646
+ <h4 id="parameters-31">Parameters</h4>
2647
+ <div class="table-scroll">
2648
+
2649
+
2650
+
2651
+
2652
+
2653
+
2654
+
2655
+
2656
+
2657
+
2658
+
2659
+
2660
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>id</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
2661
+ <h4 id="returns-35">Returns</h4>
2662
+ <p><code>string</code></p>
2663
+ <hr>
2664
+ <p><a id="validateleaf"></a></p>
2665
+ <h3 id="validateleaf">validateLeaf()</h3>
2666
+ <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"> validateLeaf</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">type</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">FieldType</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">value</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">unknown</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
2667
+ <p>Per-type leaf validator. Returns an error message when the value
2668
+ doesn’t satisfy the type’s constraints, <code>undefined</code> when valid.</p>
2669
+ <p><code>map</code> and <code>array</code> aren’t validated here — their integrity comes
2670
+ from their children + (for maps) sibling-key uniqueness, which
2671
+ is enforced in <a href="#validatetree">validateTree</a>.</p>
2672
+ <h4 id="parameters-32">Parameters</h4>
2673
+ <div class="table-scroll">
2674
+
2675
+
2676
+
2677
+
2678
+
2679
+
2680
+
2681
+
2682
+
2683
+
2684
+
2685
+
2686
+
2687
+
2688
+
2689
+
2690
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>type</code></td><td align="left"><a href="#fieldtype"><code>FieldType</code></a></td></tr><tr><td align="left"><code>value</code></td><td align="left"><code>unknown</code></td></tr></tbody></table></div>
2691
+ <h4 id="returns-36">Returns</h4>
2692
+ <p><code>string</code></p>
2693
+ <hr>
2694
+ <p><a id="validatetree"></a></p>
2695
+ <h3 id="validatetree">validateTree()</h3>
2696
+ <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"> validateTree</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">tree</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">EditorTree</span><span style="color:#ABB2BF">): {</span></span>
2697
+ <span class="line"><span style="color:#E06C75"> errorCount</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">number</span><span style="color:#ABB2BF">;</span></span>
2698
+ <span class="line"><span style="color:#E06C75"> tree</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">EditorTree</span><span style="color:#ABB2BF">;</span></span>
2699
+ <span class="line"><span style="color:#ABB2BF">};</span></span></code></pre>
2700
+ <p>Walk the tree, attach an <code>error</code> to each node, and return the
2701
+ mutated tree along with the total error count. The function does
2702
+ not mutate the input; it returns a fresh tree.</p>
2703
+ <p>Per-leaf errors come from <a href="#validateleaf">validateLeaf</a>. Map nodes
2704
+ additionally surface duplicate-key + empty-key errors on the
2705
+ offending children (not on the parent).</p>
2706
+ <h4 id="parameters-33">Parameters</h4>
2707
+ <div class="table-scroll">
2708
+
2709
+
2710
+
2711
+
2712
+
2713
+
2714
+
2715
+
2716
+
2717
+
2718
+
2719
+
2720
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>tree</code></td><td align="left"><a href="#editortree"><code>EditorTree</code></a></td></tr></tbody></table></div>
2721
+ <h4 id="returns-37">Returns</h4>
2722
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">{</span></span>
2723
+ <span class="line"><span style="color:#E06C75"> errorCount</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">number</span><span style="color:#ABB2BF">;</span></span>
2724
+ <span class="line"><span style="color:#E06C75"> tree</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">EditorTree</span><span style="color:#ABB2BF">;</span></span>
2725
+ <span class="line"><span style="color:#ABB2BF">}</span></span></code></pre>
2726
+ <h5 id="errorcount">errorCount</h5>
2727
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">errorCount</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">number</span><span style="color:#ABB2BF">;</span></span></code></pre>
2728
+ <h5 id="tree">tree</h5>
2729
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">tree</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">EditorTree</span><span style="color:#ABB2BF">;</span></span></code></pre>
2730
+ <hr>
2731
+ <p><a id="vectorpreview"></a></p>
2732
+ <h3 id="vectorpreview">vectorPreview()</h3>
2733
+ <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"> vectorPreview</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">view</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">VectorView</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
2734
+ <p>Compact, display-safe rendering of a vector: <code>vector · &#x3C;dim> [a, b, c, …]</code>.
2735
+ So a real embedding never dumps its full array into a diff, a rules trace, or
2736
+ a debugger panel.</p>
2737
+ <h4 id="parameters-34">Parameters</h4>
2738
+ <div class="table-scroll">
2739
+
2740
+
2741
+
2742
+
2743
+
2744
+
2745
+
2746
+
2747
+
2748
+
2749
+
2750
+
2751
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>view</code></td><td align="left"><a href="#vectorview"><code>VectorView</code></a></td></tr></tbody></table></div>
2752
+ <h4 id="returns-38">Returns</h4>
2753
+ <p><code>string</code></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="collectionlistprops"> <a href="#collectionlistprops">CollectionListProps</a> </li><li data-api-symbol="deletewithconfirmprops"> <a href="#deletewithconfirmprops">DeleteWithConfirmProps</a> </li><li data-api-symbol="documenteditorrootprops"> <a href="#documenteditorrootprops">DocumentEditorRootProps</a> </li><li data-api-symbol="documenteditorstate"> <a href="#documenteditorstate">DocumentEditorState</a> </li><li data-api-symbol="documentlistprops"> <a href="#documentlistprops">DocumentListProps</a> </li><li data-api-symbol="documentpreviewprops"> <a href="#documentpreviewprops">DocumentPreviewProps</a> </li><li data-api-symbol="editortree"> <a href="#editortree">EditorTree</a> </li><li data-api-symbol="fielddisplayprops"> <a href="#fielddisplayprops">FieldDisplayProps</a> </li><li data-api-symbol="fieldeditorcontract"> <a href="#fieldeditorcontract">FieldEditorContract</a> </li><li data-api-symbol="fieldeditprops"> <a href="#fieldeditprops">FieldEditProps</a> </li><li data-api-symbol="fieldnode"> <a href="#fieldnode">FieldNode</a> </li><li data-api-symbol="fieldrendererprops"> <a href="#fieldrendererprops">FieldRendererProps</a> </li><li data-api-symbol="parsedimportdoc"> <a href="#parsedimportdoc">ParsedImportDoc</a> </li><li data-api-symbol="parseimportoptions"> <a href="#parseimportoptions">ParseImportOptions</a> </li><li data-api-symbol="parseimportresult"> <a href="#parseimportresult">ParseImportResult</a> </li><li data-api-symbol="querybuilderactions"> <a href="#querybuilderactions">QueryBuilderActions</a> </li><li data-api-symbol="querybuilderprops"> <a href="#querybuilderprops">QueryBuilderProps</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="referencepickerprops"> <a href="#referencepickerprops">ReferencePickerProps</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><li data-api-symbol="vectorview"> <a href="#vectorview">VectorView</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="documenteditoraction"> <a href="#documenteditoraction">DocumentEditorAction</a> </li><li data-api-symbol="fieldeditorregistry"> <a href="#fieldeditorregistry">FieldEditorRegistry</a> </li><li data-api-symbol="fieldtype"> <a href="#fieldtype">FieldType</a> </li><li data-api-symbol="firestoreapi"> <a href="#firestoreapi">FirestoreApi</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="defaultfieldeditors"> <a href="#defaultfieldeditors">defaultFieldEditors</a> </li><li data-api-symbol="documenteditor"> <a href="#documenteditor">DocumentEditor</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> </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="asvectorview()"> <a href="#asvectorview">asVectorView()</a> </li><li data-api-symbol="collectionlist()"> <a href="#collectionlist">CollectionList()</a> </li><li data-api-symbol="deletewithconfirm()"> <a href="#deletewithconfirm">DeleteWithConfirm()</a> </li><li data-api-symbol="detectcollisions()"> <a href="#detectcollisions">detectCollisions()</a> </li><li data-api-symbol="documenteditorfields()"> <a href="#documenteditorfields">DocumentEditorFields()</a> </li><li data-api-symbol="documenteditorroot()"> <a href="#documenteditorroot">DocumentEditorRoot()</a> </li><li data-api-symbol="documentlist()"> <a href="#documentlist">DocumentList()</a> </li><li data-api-symbol="documentpreview()"> <a href="#documentpreview">DocumentPreview()</a> </li><li data-api-symbol="fieldrenderer()"> <a href="#fieldrenderer">FieldRenderer()</a> </li><li data-api-symbol="firestoreapiprovider()"> <a href="#firestoreapiprovider">FirestoreApiProvider()</a> </li><li data-api-symbol="firestoreautoid()"> <a href="#firestoreautoid">firestoreAutoId()</a> </li><li data-api-symbol="firestorevaluesequal()"> <a href="#firestorevaluesequal">firestoreValuesEqual()</a> </li><li data-api-symbol="infertype()"> <a href="#infertype">inferType()</a> </li><li data-api-symbol="initstate()"> <a href="#initstate">initState()</a> </li><li data-api-symbol="mergefieldeditors()"> <a href="#mergefieldeditors">mergeFieldEditors()</a> </li><li data-api-symbol="parseimport()"> <a href="#parseimport">parseImport()</a> </li><li data-api-symbol="querybuilder()"> <a href="#querybuilder">QueryBuilder()</a> </li><li data-api-symbol="reducer()"> <a href="#reducer">reducer()</a> </li><li data-api-symbol="referencepicker()"> <a href="#referencepicker">ReferencePicker()</a> </li><li data-api-symbol="treefromdata()"> <a href="#treefromdata">treeFromData()</a> </li><li data-api-symbol="treetodata()"> <a href="#treetodata">treeToData()</a> </li><li data-api-symbol="truncatevectorsfordisplay()"> <a href="#truncatevectorsfordisplay">truncateVectorsForDisplay()</a> </li><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="usedocumenteditorcontext()"> <a href="#usedocumenteditorcontext">useDocumentEditorContext()</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="usefirestoreapi()"> <a href="#usefirestoreapi">useFirestoreApi()</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><li data-api-symbol="validatecollectionid()"> <a href="#validatecollectionid">validateCollectionId()</a> </li><li data-api-symbol="validatedocumentid()"> <a href="#validatedocumentid">validateDocumentId()</a> </li><li data-api-symbol="validateleaf()"> <a href="#validateleaf">validateLeaf()</a> </li><li data-api-symbol="validatetree()"> <a href="#validatetree">validateTree()</a> </li><li data-api-symbol="vectorpreview()"> <a href="#vectorpreview">vectorPreview()</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>