@tempoxyz/id 0.0.0-stage → 0.0.1

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 (1096) hide show
  1. package/README.md +121 -2
  2. package/dist/App.d.ts +121 -0
  3. package/dist/App.d.ts.map +1 -0
  4. package/dist/App.js +132 -0
  5. package/dist/App.js.map +1 -0
  6. package/dist/app/client/.assetsignore +2 -0
  7. package/dist/app/client/_headers +4 -0
  8. package/dist/app/client/assets/Account-BYLpNFf3.css +1 -0
  9. package/dist/app/client/assets/Account-BllJah07.js +1 -0
  10. package/dist/app/client/assets/Amount-E_7snI0-.js +1 -0
  11. package/dist/app/client/assets/Amount-ZdtluGf-.css +1 -0
  12. package/dist/app/client/assets/Approval-CgV5JHlb.css +1 -0
  13. package/dist/app/client/assets/Approval-yKflypU2.js +1 -0
  14. package/dist/app/client/assets/ArrowUp-CRvqfMNU.js +1 -0
  15. package/dist/app/client/assets/Authentication-BAXhOh_4.js +2 -0
  16. package/dist/app/client/assets/BRLA-CZvVDNYr.png +0 -0
  17. package/dist/app/client/assets/BRZ-Cn3jEi9t.svg +1 -0
  18. package/dist/app/client/assets/CHFAU-DCedc4aH.png +0 -0
  19. package/dist/app/client/assets/Callout-B736759d.js +1 -0
  20. package/dist/app/client/assets/Callout-DBfEmP7q.css +1 -0
  21. package/dist/app/client/assets/Check-DVgD8tDG.js +1 -0
  22. package/dist/app/client/assets/ChevronRight-CsXtIZCB.js +1 -0
  23. package/dist/app/client/assets/ChooseAccount-BjxfQjPK.js +1 -0
  24. package/dist/app/client/assets/ChooseAccount-DL3wgJhE.css +1 -0
  25. package/dist/app/client/assets/Client-JrABNovb.js +1 -0
  26. package/dist/app/client/assets/Close-CRvWlhqc.js +1 -0
  27. package/dist/app/client/assets/Cloud-DgJsrqpQ.js +1 -0
  28. package/dist/app/client/assets/CodeInput-79Ctx8ZA.js +1 -0
  29. package/dist/app/client/assets/CodeInput-BqRteSwD.css +1 -0
  30. package/dist/app/client/assets/DLUSD-BnRXm3EI.png +0 -0
  31. package/dist/app/client/assets/Deposit-CclrAoXL.css +1 -0
  32. package/dist/app/client/assets/Deposit-c7uYn2Eb.js +1 -0
  33. package/dist/app/client/assets/DevTools-BYkmtuV5.css +1 -0
  34. package/dist/app/client/assets/DevTools-BgnzDGo2.js +1 -0
  35. package/dist/app/client/assets/DeviceApproval-BBUVv58e.js +1 -0
  36. package/dist/app/client/assets/DeviceApproval-BffFLD8F.css +1 -0
  37. package/dist/app/client/assets/EURAU-sjieTTB9.svg +1 -0
  38. package/dist/app/client/assets/EURC.e-CxYiiwkz.svg +1 -0
  39. package/dist/app/client/assets/Fingerprint-BNCA6qOJ.js +1 -0
  40. package/dist/app/client/assets/GBPA-DI_25xSG.svg +4 -0
  41. package/dist/app/client/assets/GUSD-BDEP2Qb-.svg +1 -0
  42. package/dist/app/client/assets/GeistMono-Variable-BRXCGrxA.woff2 +0 -0
  43. package/dist/app/client/assets/Globe-f0eWzcEI.js +1 -0
  44. package/dist/app/client/assets/Grant-5a-n1gJH.css +1 -0
  45. package/dist/app/client/assets/Grant-Dp7mpcEi.js +1 -0
  46. package/dist/app/client/assets/Hex-C9KeV7_9.css +1 -0
  47. package/dist/app/client/assets/Hex-CSp2U46W.js +10 -0
  48. package/dist/app/client/assets/IconChip-DpZHa1JW.js +1 -0
  49. package/dist/app/client/assets/IconChip-yqaQ2y_d.css +1 -0
  50. package/dist/app/client/assets/InputGroup-BlZvt9In.css +1 -0
  51. package/dist/app/client/assets/InputGroup-CsOeBnpB.js +1 -0
  52. package/dist/app/client/assets/Inter-cyrillic-e3OmmzmJ.woff2 +0 -0
  53. package/dist/app/client/assets/Inter-cyrillic-ext-DOWZeO4Q.woff2 +0 -0
  54. package/dist/app/client/assets/Inter-greek-BD3ujQlX.woff2 +0 -0
  55. package/dist/app/client/assets/Inter-greek-ext-CXEwbus4.woff2 +0 -0
  56. package/dist/app/client/assets/Inter-latin-BDFm4vTb.woff2 +0 -0
  57. package/dist/app/client/assets/Inter-latin-ext-E7a9JEPe.woff2 +0 -0
  58. package/dist/app/client/assets/Inter-symbols-DEch7Rxr.woff2 +0 -0
  59. package/dist/app/client/assets/Inter-vietnamese-Bg9723vR.woff2 +0 -0
  60. package/dist/app/client/assets/Loader-Cm9YJNNJ.js +1 -0
  61. package/dist/app/client/assets/MACH-sK0r79kQ.svg +4 -0
  62. package/dist/app/client/assets/OUSD-BFXgVo-Z.svg +5 -0
  63. package/dist/app/client/assets/OUSD.dark-BbbjMvA1.svg +17 -0
  64. package/dist/app/client/assets/OUSD.light-B_zpSz_c.svg +17 -0
  65. package/dist/app/client/assets/PRIME-CiFp2-3e.svg +14 -0
  66. package/dist/app/client/assets/PopoverPopup-DprRXRQe.js +1 -0
  67. package/dist/app/client/assets/Rows-DPGTUdA8.css +1 -0
  68. package/dist/app/client/assets/Rows-Qqo3evtk.js +1 -0
  69. package/dist/app/client/assets/SBC-BTYkbkiD.svg +1 -0
  70. package/dist/app/client/assets/SEKAU-CB5Fc6o8.svg +5 -0
  71. package/dist/app/client/assets/Separator-CZUjVQOL.js +1 -0
  72. package/dist/app/client/assets/SignIn-HdaDzFmq.js +1 -0
  73. package/dist/app/client/assets/SignIn-mlBTwUq4.css +1 -0
  74. package/dist/app/client/assets/Stack-CkkvkOzj.js +1 -0
  75. package/dist/app/client/assets/Stack-D7Yt22Ed.css +1 -0
  76. package/dist/app/client/assets/Tag-BMh6ajrW.css +1 -0
  77. package/dist/app/client/assets/Tag-CLOVANTX.js +1 -0
  78. package/dist/app/client/assets/ToolbarRootContext-Zty_Dh3J.js +1 -0
  79. package/dist/app/client/assets/Tooltip-CLATV6YU.js +1 -0
  80. package/dist/app/client/assets/Tooltip-d3y9ESUJ.css +1 -0
  81. package/dist/app/client/assets/USD1-COVcO_PB.svg +30 -0
  82. package/dist/app/client/assets/USDB-Ckwb6UQw.svg +11 -0
  83. package/dist/app/client/assets/USDC.e-3nMsKAMC.svg +1 -0
  84. package/dist/app/client/assets/USDT0-ia60Dw0e.svg +1 -0
  85. package/dist/app/client/assets/USDY-CB4iet2q.svg +16 -0
  86. package/dist/app/client/assets/USDe-BXHQCd92.svg +1 -0
  87. package/dist/app/client/assets/Upgrade-D0_aO5AP.js +1 -0
  88. package/dist/app/client/assets/WalletUpgrade-BPsPNQsd.js +1 -0
  89. package/dist/app/client/assets/WalletUpgrade-C04kW0Jl.css +1 -0
  90. package/dist/app/client/assets/YLDS-CRh8Zw0g.svg +3 -0
  91. package/dist/app/client/assets/___-I98bns4o.css +1 -0
  92. package/dist/app/client/assets/___.flows-XOlLwMIy.js +5 -0
  93. package/dist/app/client/assets/alphaUSD-CpCFoVuh.svg +1 -0
  94. package/dist/app/client/assets/authorize-C-MlCyaM.js +1 -0
  95. package/dist/app/client/assets/betaUSD-9A8AjgYg.svg +1 -0
  96. package/dist/app/client/assets/cUSD-WsQfa-iC.svg +1 -0
  97. package/dist/app/client/assets/cbBTC-DvUDqrDi.svg +1 -0
  98. package/dist/app/client/assets/choose-account-nXR-SKa2.js +1 -0
  99. package/dist/app/client/assets/deposit-G8tiLPN4.js +1 -0
  100. package/dist/app/client/assets/device-BojBF7hZ.js +1 -0
  101. package/dist/app/client/assets/error-KiOpX7GD.js +1 -0
  102. package/dist/app/client/assets/frxUSD-n9pTpinR.svg +1 -0
  103. package/dist/app/client/assets/getPseudoElementBounds-BsLy4zf_.js +1 -0
  104. package/dist/app/client/assets/goUSD-D9kUvHsF.svg +5 -0
  105. package/dist/app/client/assets/iUSD-CWCJAq9X.svg +1 -0
  106. package/dist/app/client/assets/index-BZH0M7Nf.js +13 -0
  107. package/dist/app/client/assets/index-CIYxHmYA.css +1 -0
  108. package/dist/app/client/assets/login-DUjpk60p.js +1 -0
  109. package/dist/app/client/assets/pathUSD-BvaO6ooS.svg +25 -0
  110. package/dist/app/client/assets/preload-helper-Bs9KvdYl.js +1 -0
  111. package/dist/app/client/assets/rUSD-B-xuFS7T.svg +1 -0
  112. package/dist/app/client/assets/reUSD-CkIUs0Lx.svg +1 -0
  113. package/dist/app/client/assets/removable-DMiA3t_o.js +1 -0
  114. package/dist/app/client/assets/reset-co-CHrff.css +1 -0
  115. package/dist/app/client/assets/rolldown-runtime-WkwZ5CU-.js +1 -0
  116. package/dist/app/client/assets/routes-CK8cthzA.js +1 -0
  117. package/dist/app/client/assets/sUSDe-j9GOnH7I.svg +1 -0
  118. package/dist/app/client/assets/siUSD-C10QUNYS.svg +1 -0
  119. package/dist/app/client/assets/stcUSD-DIntDJeh.svg +1 -0
  120. package/dist/app/client/assets/syrupUSDC-DhYwZqdM.svg +5 -0
  121. package/dist/app/client/assets/thetaUSD-Dgmksf6G.svg +1 -0
  122. package/dist/app/client/assets/useNavigate-CB6S2u4J.js +1 -0
  123. package/dist/app/client/assets/useQuery-BpHfPhTT.js +1 -0
  124. package/dist/app/client/assets/useRegisterFieldControl-DsslqY-V.js +1 -0
  125. package/dist/app/client/assets/wYLDS-CaCKDrO-.svg +10 -0
  126. package/dist/app/client/assets/wsrUSD-B2Ey0bDQ.svg +1 -0
  127. package/dist/app/client/assets/zyzz-DYC-X0_B.css +1 -0
  128. package/dist/app/client/assets/zyzz.config-DX_D_7j3.js +2 -0
  129. package/dist/app/db/auth.d.ts +3412 -0
  130. package/dist/app/db/auth.d.ts.map +1 -0
  131. package/dist/app/db/auth.js +349 -0
  132. package/dist/app/db/auth.js.map +1 -0
  133. package/dist/app/db/schema.d.ts +1091 -0
  134. package/dist/app/db/schema.d.ts.map +1 -0
  135. package/dist/app/db/schema.js +183 -0
  136. package/dist/app/db/schema.js.map +1 -0
  137. package/dist/app/db/table.d.ts +8 -0
  138. package/dist/app/db/table.d.ts.map +1 -0
  139. package/dist/app/db/table.js +28 -0
  140. package/dist/app/db/table.js.map +1 -0
  141. package/dist/app/server/.vite/manifest.json +2093 -0
  142. package/dist/app/server/assets/Account-BYLpNFf3.css +1 -0
  143. package/dist/app/server/assets/Account-G_SUeRU3.js +2 -0
  144. package/dist/app/server/assets/Account-G_SUeRU3.js.map +1 -0
  145. package/dist/app/server/assets/Amount-Cgwdr3Xt.js +2 -0
  146. package/dist/app/server/assets/Amount-Cgwdr3Xt.js.map +1 -0
  147. package/dist/app/server/assets/Amount-ZdtluGf-.css +1 -0
  148. package/dist/app/server/assets/Approval-CgV5JHlb.css +1 -0
  149. package/dist/app/server/assets/Approval-DvkB9tWA.js +2 -0
  150. package/dist/app/server/assets/Approval-DvkB9tWA.js.map +1 -0
  151. package/dist/app/server/assets/ArrowUp-DpK_zNgZ.js +2 -0
  152. package/dist/app/server/assets/ArrowUp-DpK_zNgZ.js.map +1 -0
  153. package/dist/app/server/assets/Authentication-BOkhlNQu.js +2 -0
  154. package/dist/app/server/assets/Authentication-BOkhlNQu.js.map +1 -0
  155. package/dist/app/server/assets/Authentication-C3oNZAVX.js +2 -0
  156. package/dist/app/server/assets/Authentication-C3oNZAVX.js.map +1 -0
  157. package/dist/app/server/assets/BRLA-CZvVDNYr.png +0 -0
  158. package/dist/app/server/assets/BRZ-Cn3jEi9t.svg +1 -0
  159. package/dist/app/server/assets/Bytes-C7CRVS3J.js +4 -0
  160. package/dist/app/server/assets/Bytes-C7CRVS3J.js.map +1 -0
  161. package/dist/app/server/assets/CHFAU-DCedc4aH.png +0 -0
  162. package/dist/app/server/assets/Callout-DBfEmP7q.css +1 -0
  163. package/dist/app/server/assets/Callout-tQoAitWq.js +2 -0
  164. package/dist/app/server/assets/Callout-tQoAitWq.js.map +1 -0
  165. package/dist/app/server/assets/ChainList-C4A_7e-9.js +6 -0
  166. package/dist/app/server/assets/ChainList-C4A_7e-9.js.map +1 -0
  167. package/dist/app/server/assets/ChainName-BMnJyJrd.js +2 -0
  168. package/dist/app/server/assets/ChainName-BMnJyJrd.js.map +1 -0
  169. package/dist/app/server/assets/Check-DU_oR3Ev.js +2 -0
  170. package/dist/app/server/assets/Check-DU_oR3Ev.js.map +1 -0
  171. package/dist/app/server/assets/ChevronRight-DTBnw-W6.js +2 -0
  172. package/dist/app/server/assets/ChevronRight-DTBnw-W6.js.map +1 -0
  173. package/dist/app/server/assets/ChooseAccount-BizJvMrY.js +2 -0
  174. package/dist/app/server/assets/ChooseAccount-BizJvMrY.js.map +1 -0
  175. package/dist/app/server/assets/ChooseAccount-DL3wgJhE.css +1 -0
  176. package/dist/app/server/assets/Client-Dx3KrpJZ.js +2 -0
  177. package/dist/app/server/assets/Client-Dx3KrpJZ.js.map +1 -0
  178. package/dist/app/server/assets/ClientOnly-CKLiu67O.js +2 -0
  179. package/dist/app/server/assets/ClientOnly-CKLiu67O.js.map +1 -0
  180. package/dist/app/server/assets/Close-DUeE37ev.js +2 -0
  181. package/dist/app/server/assets/Close-DUeE37ev.js.map +1 -0
  182. package/dist/app/server/assets/Cloud-CLB3rTTy.js +2 -0
  183. package/dist/app/server/assets/Cloud-CLB3rTTy.js.map +1 -0
  184. package/dist/app/server/assets/CodeInput-BqRteSwD.css +1 -0
  185. package/dist/app/server/assets/CodeInput-FsPzVuLU.js +2 -0
  186. package/dist/app/server/assets/CodeInput-FsPzVuLU.js.map +1 -0
  187. package/dist/app/server/assets/Credential-DFjcrdyI.js +2 -0
  188. package/dist/app/server/assets/Credential-DFjcrdyI.js.map +1 -0
  189. package/dist/app/server/assets/DLUSD-BnRXm3EI.png +0 -0
  190. package/dist/app/server/assets/Deposit-CclrAoXL.css +1 -0
  191. package/dist/app/server/assets/Deposit-ChYGRfW2.js +2 -0
  192. package/dist/app/server/assets/Deposit-ChYGRfW2.js.map +1 -0
  193. package/dist/app/server/assets/DevTools-BYkmtuV5.css +1 -0
  194. package/dist/app/server/assets/DevTools-ZJVXqrIK.js +2 -0
  195. package/dist/app/server/assets/DevTools-ZJVXqrIK.js.map +1 -0
  196. package/dist/app/server/assets/DeviceApproval-BffFLD8F.css +1 -0
  197. package/dist/app/server/assets/DeviceApproval-Bqe3Mi78.js +2 -0
  198. package/dist/app/server/assets/DeviceApproval-Bqe3Mi78.js.map +1 -0
  199. package/dist/app/server/assets/EURAU-sjieTTB9.svg +1 -0
  200. package/dist/app/server/assets/EURC.e-CxYiiwkz.svg +1 -0
  201. package/dist/app/server/assets/ExecutionError-CDszGSF1.js +9 -0
  202. package/dist/app/server/assets/ExecutionError-CDszGSF1.js.map +1 -0
  203. package/dist/app/server/assets/Fingerprint-DhOPOdRr.js +2 -0
  204. package/dist/app/server/assets/Fingerprint-DhOPOdRr.js.map +1 -0
  205. package/dist/app/server/assets/GBPA-DI_25xSG.svg +4 -0
  206. package/dist/app/server/assets/GUSD-BDEP2Qb-.svg +1 -0
  207. package/dist/app/server/assets/GeistMono-Variable-BRXCGrxA.woff2 +0 -0
  208. package/dist/app/server/assets/Globe-2CxqxU-7.js +2 -0
  209. package/dist/app/server/assets/Globe-2CxqxU-7.js.map +1 -0
  210. package/dist/app/server/assets/Grant-5a-n1gJH.css +1 -0
  211. package/dist/app/server/assets/Grant-D_tun0mF.js +2 -0
  212. package/dist/app/server/assets/Grant-D_tun0mF.js.map +1 -0
  213. package/dist/app/server/assets/Hex-C9KeV7_9.css +1 -0
  214. package/dist/app/server/assets/Hex-Z6m_0Y0m.js +11 -0
  215. package/dist/app/server/assets/Hex-Z6m_0Y0m.js.map +1 -0
  216. package/dist/app/server/assets/IconChip-C9ZrmGB5.js +2 -0
  217. package/dist/app/server/assets/IconChip-C9ZrmGB5.js.map +1 -0
  218. package/dist/app/server/assets/IconChip-yqaQ2y_d.css +1 -0
  219. package/dist/app/server/assets/InputGroup-BlZvt9In.css +1 -0
  220. package/dist/app/server/assets/InputGroup-hpjuLuR7.js +2 -0
  221. package/dist/app/server/assets/InputGroup-hpjuLuR7.js.map +1 -0
  222. package/dist/app/server/assets/Inter-cyrillic-e3OmmzmJ.woff2 +0 -0
  223. package/dist/app/server/assets/Inter-cyrillic-ext-DOWZeO4Q.woff2 +0 -0
  224. package/dist/app/server/assets/Inter-greek-BD3ujQlX.woff2 +0 -0
  225. package/dist/app/server/assets/Inter-greek-ext-CXEwbus4.woff2 +0 -0
  226. package/dist/app/server/assets/Inter-latin-BDFm4vTb.woff2 +0 -0
  227. package/dist/app/server/assets/Inter-latin-ext-E7a9JEPe.woff2 +0 -0
  228. package/dist/app/server/assets/Inter-symbols-DEch7Rxr.woff2 +0 -0
  229. package/dist/app/server/assets/Inter-vietnamese-Bg9723vR.woff2 +0 -0
  230. package/dist/app/server/assets/Loader-DnKC9P5p.js +2 -0
  231. package/dist/app/server/assets/Loader-DnKC9P5p.js.map +1 -0
  232. package/dist/app/server/assets/MACH-sK0r79kQ.svg +4 -0
  233. package/dist/app/server/assets/Match-CyVdYcSf.js +2 -0
  234. package/dist/app/server/assets/Match-CyVdYcSf.js.map +1 -0
  235. package/dist/app/server/assets/OUSD-BFXgVo-Z.svg +5 -0
  236. package/dist/app/server/assets/OUSD.dark-BbbjMvA1.svg +17 -0
  237. package/dist/app/server/assets/OUSD.light-B_zpSz_c.svg +17 -0
  238. package/dist/app/server/assets/PRIME-CiFp2-3e.svg +14 -0
  239. package/dist/app/server/assets/PopoverPopup-CwqeQelI.js +2 -0
  240. package/dist/app/server/assets/PopoverPopup-CwqeQelI.js.map +1 -0
  241. package/dist/app/server/assets/Rows-CQKQwTI1.js +2 -0
  242. package/dist/app/server/assets/Rows-CQKQwTI1.js.map +1 -0
  243. package/dist/app/server/assets/Rows-DPGTUdA8.css +1 -0
  244. package/dist/app/server/assets/SBC-BTYkbkiD.svg +1 -0
  245. package/dist/app/server/assets/SEKAU-CB5Fc6o8.svg +5 -0
  246. package/dist/app/server/assets/Separator-DrI7KRAs.js +2 -0
  247. package/dist/app/server/assets/Separator-DrI7KRAs.js.map +1 -0
  248. package/dist/app/server/assets/SignIn-DfeeLEmN.js +2 -0
  249. package/dist/app/server/assets/SignIn-DfeeLEmN.js.map +1 -0
  250. package/dist/app/server/assets/SignIn-mlBTwUq4.css +1 -0
  251. package/dist/app/server/assets/Stack-D7Yt22Ed.css +1 -0
  252. package/dist/app/server/assets/Stack-DGktaLZc.js +2 -0
  253. package/dist/app/server/assets/Stack-DGktaLZc.js.map +1 -0
  254. package/dist/app/server/assets/Tag-9vSRBpph.js +2 -0
  255. package/dist/app/server/assets/Tag-9vSRBpph.js.map +1 -0
  256. package/dist/app/server/assets/Tag-BMh6ajrW.css +1 -0
  257. package/dist/app/server/assets/ToolbarRootContext-BH_CFSWd.js +2 -0
  258. package/dist/app/server/assets/ToolbarRootContext-BH_CFSWd.js.map +1 -0
  259. package/dist/app/server/assets/Tooltip-DLX41peb.js +2 -0
  260. package/dist/app/server/assets/Tooltip-DLX41peb.js.map +1 -0
  261. package/dist/app/server/assets/Tooltip-d3y9ESUJ.css +1 -0
  262. package/dist/app/server/assets/USD1-COVcO_PB.svg +30 -0
  263. package/dist/app/server/assets/USDB-Ckwb6UQw.svg +11 -0
  264. package/dist/app/server/assets/USDC.e-3nMsKAMC.svg +1 -0
  265. package/dist/app/server/assets/USDT0-ia60Dw0e.svg +1 -0
  266. package/dist/app/server/assets/USDY-CB4iet2q.svg +16 -0
  267. package/dist/app/server/assets/USDe-BXHQCd92.svg +1 -0
  268. package/dist/app/server/assets/Upgrade-Dbfm2nm0.js +2 -0
  269. package/dist/app/server/assets/Upgrade-Dbfm2nm0.js.map +1 -0
  270. package/dist/app/server/assets/WalletUpgrade-C04kW0Jl.css +1 -0
  271. package/dist/app/server/assets/WalletUpgrade-CWKc5fYt.js +2 -0
  272. package/dist/app/server/assets/WalletUpgrade-CWKc5fYt.js.map +1 -0
  273. package/dist/app/server/assets/YLDS-CRh8Zw0g.svg +3 -0
  274. package/dist/app/server/assets/___-I98bns4o.css +1 -0
  275. package/dist/app/server/assets/___.flows-Cc-awUoC.js +6 -0
  276. package/dist/app/server/assets/___.flows-Cc-awUoC.js.map +1 -0
  277. package/dist/app/server/assets/_tanstack-start-manifest_v-U7TrtUSA.js +1 -0
  278. package/dist/app/server/assets/_zyzz__2Fhome_2Frunner_2Fwork_2Fid_2Fid_2Fsrc_2Fapp_2Froutes_2F_5B__5D.flows-B1pPOqsM.css +1 -0
  279. package/dist/app/server/assets/_zyzz__2Fhome_2Frunner_2Fwork_2Fid_2Fid_2Fsrc_2Fapp_2Froutes_2F_5B__5D.flows.tsx-CKALi9oD.js +2 -0
  280. package/dist/app/server/assets/_zyzz__2Fhome_2Frunner_2Fwork_2Fid_2Fid_2Fsrc_2Fapp_2Froutes_2F_5B__5D.flows.tsx-CKALi9oD.js.map +1 -0
  281. package/dist/app/server/assets/_zyzz_shared-BbDIEd_j.css +1 -0
  282. package/dist/app/server/assets/alphaUSD-CpCFoVuh.svg +1 -0
  283. package/dist/app/server/assets/arktype-aI7TBD0R-D1R3Byo5.js +2 -0
  284. package/dist/app/server/assets/arktype-aI7TBD0R-D1R3Byo5.js.map +1 -0
  285. package/dist/app/server/assets/async-local-storage-DlOvwxXd.js +2 -0
  286. package/dist/app/server/assets/async-local-storage-DlOvwxXd.js.map +1 -0
  287. package/dist/app/server/assets/authorize-BXzTo2Pb.js +2 -0
  288. package/dist/app/server/assets/authorize-BXzTo2Pb.js.map +1 -0
  289. package/dist/app/server/assets/authorize-BzoUqOdA.js +2 -0
  290. package/dist/app/server/assets/authorize-BzoUqOdA.js.map +1 -0
  291. package/dist/app/server/assets/authorize-DXYo-K2n-rmQQ42x1.js +56 -0
  292. package/dist/app/server/assets/authorize-DXYo-K2n-rmQQ42x1.js.map +1 -0
  293. package/dist/app/server/assets/authorize-DfjPYJqS.css +1 -0
  294. package/dist/app/server/assets/betaUSD-9A8AjgYg.svg +1 -0
  295. package/dist/app/server/assets/bun-sqlite-dialect-DoOVo4ja-CtyBkVMb.js +2 -0
  296. package/dist/app/server/assets/bun-sqlite-dialect-DoOVo4ja-CtyBkVMb.js.map +1 -0
  297. package/dist/app/server/assets/cUSD-WsQfa-iC.svg +1 -0
  298. package/dist/app/server/assets/call-dzi0xjZd.js +31 -0
  299. package/dist/app/server/assets/call-dzi0xjZd.js.map +1 -0
  300. package/dist/app/server/assets/cbBTC-DvUDqrDi.svg +1 -0
  301. package/dist/app/server/assets/ccip-DjD8z_3B.js +2 -0
  302. package/dist/app/server/assets/ccip-DjD8z_3B.js.map +1 -0
  303. package/dist/app/server/assets/choose-account-_X7xq5am.js +2 -0
  304. package/dist/app/server/assets/choose-account-_X7xq5am.js.map +1 -0
  305. package/dist/app/server/assets/choose-account-lqA5SLx9.css +1 -0
  306. package/dist/app/server/assets/choose-account-zm-5Qs3e.js +2 -0
  307. package/dist/app/server/assets/choose-account-zm-5Qs3e.js.map +1 -0
  308. package/dist/app/server/assets/compiled-query-Ds2NVcFT.js +2 -0
  309. package/dist/app/server/assets/compiled-query-Ds2NVcFT.js.map +1 -0
  310. package/dist/app/server/assets/convert-BIC8n32x.js +2 -0
  311. package/dist/app/server/assets/convert-BIC8n32x.js.map +1 -0
  312. package/dist/app/server/assets/cookie-DxViaO10.js +2 -0
  313. package/dist/app/server/assets/cookie-DxViaO10.js.map +1 -0
  314. package/dist/app/server/assets/core-BBrZXfrB.js +56 -0
  315. package/dist/app/server/assets/core-BBrZXfrB.js.map +1 -0
  316. package/dist/app/server/assets/d1-sqlite-dialect-m0f01-4z-Cv-csE1u.js +2 -0
  317. package/dist/app/server/assets/d1-sqlite-dialect-m0f01-4z-Cv-csE1u.js.map +1 -0
  318. package/dist/app/server/assets/decodeFunctionData-bP6V2ai4.js +2 -0
  319. package/dist/app/server/assets/decodeFunctionData-bP6V2ai4.js.map +1 -0
  320. package/dist/app/server/assets/default-u_dwuiYb-DOrMMcg9.js +2 -0
  321. package/dist/app/server/assets/default-u_dwuiYb-DOrMMcg9.js.map +1 -0
  322. package/dist/app/server/assets/deposit-BBaNI01u.js +2 -0
  323. package/dist/app/server/assets/deposit-BBaNI01u.js.map +1 -0
  324. package/dist/app/server/assets/deposit-LWS6ZTuf.js +2 -0
  325. package/dist/app/server/assets/deposit-LWS6ZTuf.js.map +1 -0
  326. package/dist/app/server/assets/deposit-oFx15XCA.css +1 -0
  327. package/dist/app/server/assets/device-CrXlusjr.js +2 -0
  328. package/dist/app/server/assets/device-CrXlusjr.js.map +1 -0
  329. package/dist/app/server/assets/device-DdFMgYe2.js +2 -0
  330. package/dist/app/server/assets/device-DdFMgYe2.js.map +1 -0
  331. package/dist/app/server/assets/device-tMCpu5zk.css +1 -0
  332. package/dist/app/server/assets/dist-CR6FW-yS.js +1 -0
  333. package/dist/app/server/assets/dist-CoH0hD1s.js +15 -0
  334. package/dist/app/server/assets/dist-CoH0hD1s.js.map +1 -0
  335. package/dist/app/server/assets/dist-DcICI3fd.js +2 -0
  336. package/dist/app/server/assets/dist-DcICI3fd.js.map +1 -0
  337. package/dist/app/server/assets/effect-QlVUlMFu-mXPkuQTb.js +2 -0
  338. package/dist/app/server/assets/effect-QlVUlMFu-mXPkuQTb.js.map +1 -0
  339. package/dist/app/server/assets/empty-plugin-adapters-BaGcmrjC.js +2 -0
  340. package/dist/app/server/assets/empty-plugin-adapters-BaGcmrjC.js.map +1 -0
  341. package/dist/app/server/assets/error-CXy8gqdE.css +1 -0
  342. package/dist/app/server/assets/error-DXDT2AHy.js +2 -0
  343. package/dist/app/server/assets/error-DXDT2AHy.js.map +1 -0
  344. package/dist/app/server/assets/error-bnVzy9tx.js +2 -0
  345. package/dist/app/server/assets/error-bnVzy9tx.js.map +1 -0
  346. package/dist/app/server/assets/esm-C6SW--yt.js +4 -0
  347. package/dist/app/server/assets/esm-C6SW--yt.js.map +1 -0
  348. package/dist/app/server/assets/factory-dvoOlKer.js +5 -0
  349. package/dist/app/server/assets/factory-dvoOlKer.js.map +1 -0
  350. package/dist/app/server/assets/frxUSD-n9pTpinR.svg +1 -0
  351. package/dist/app/server/assets/get-id-field-OwLpfjj2.js +6 -0
  352. package/dist/app/server/assets/get-id-field-OwLpfjj2.js.map +1 -0
  353. package/dist/app/server/assets/getPseudoElementBounds-PkWU72kn.js +2 -0
  354. package/dist/app/server/assets/getPseudoElementBounds-PkWU72kn.js.map +1 -0
  355. package/dist/app/server/assets/goUSD-D9kUvHsF.svg +5 -0
  356. package/dist/app/server/assets/iUSD-CWCJAq9X.svg +1 -0
  357. package/dist/app/server/assets/index-CLddUTqr-CC33CMvS.js +2 -0
  358. package/dist/app/server/assets/index-CLddUTqr-CC33CMvS.js.map +1 -0
  359. package/dist/app/server/assets/index-DZEfthgZ-Ec2MMQ_e.js +2 -0
  360. package/dist/app/server/assets/index-DZEfthgZ-Ec2MMQ_e.js.map +1 -0
  361. package/dist/app/server/assets/kysely-adapter-B8tQwTcu.js +1 -0
  362. package/dist/app/server/assets/lazyRouteComponent-DPOOPZw_.js +2 -0
  363. package/dist/app/server/assets/lazyRouteComponent-DPOOPZw_.js.map +1 -0
  364. package/dist/app/server/assets/load-server-Dr0IlySo.js +3 -0
  365. package/dist/app/server/assets/load-server-Dr0IlySo.js.map +1 -0
  366. package/dist/app/server/assets/login-BLq3tEEr.js +2 -0
  367. package/dist/app/server/assets/login-BLq3tEEr.js.map +1 -0
  368. package/dist/app/server/assets/login-DCIrAbED.js +2 -0
  369. package/dist/app/server/assets/login-DCIrAbED.js.map +1 -0
  370. package/dist/app/server/assets/login-msDnt3yT.css +1 -0
  371. package/dist/app/server/assets/matchContext-ByrIUj4L.js +2 -0
  372. package/dist/app/server/assets/matchContext-ByrIUj4L.js.map +1 -0
  373. package/dist/app/server/assets/node-sqlite-dialect-BowWLXvK.js +2 -0
  374. package/dist/app/server/assets/node-sqlite-dialect-BowWLXvK.js.map +1 -0
  375. package/dist/app/server/assets/pathUSD-BvaO6ooS.svg +25 -0
  376. package/dist/app/server/assets/rUSD-B-xuFS7T.svg +1 -0
  377. package/dist/app/server/assets/reUSD-CkIUs0Lx.svg +1 -0
  378. package/dist/app/server/assets/react-dom-DYzj0HXX.js +2 -0
  379. package/dist/app/server/assets/react-dom-DYzj0HXX.js.map +1 -0
  380. package/dist/app/server/assets/removable-BCLTvPOx.js +2 -0
  381. package/dist/app/server/assets/removable-BCLTvPOx.js.map +1 -0
  382. package/dist/app/server/assets/reset-DZWeTZeQ.js +2 -0
  383. package/dist/app/server/assets/reset-DZWeTZeQ.js.map +1 -0
  384. package/dist/app/server/assets/reset-co-CHrff.css +1 -0
  385. package/dist/app/server/assets/resolveError-CZXXvCJR.js +2 -0
  386. package/dist/app/server/assets/resolveError-CZXXvCJR.js.map +1 -0
  387. package/dist/app/server/assets/rolldown-runtime-BWaJ3C7D.js +1 -0
  388. package/dist/app/server/assets/router-Bqz5X4Qw.js +2 -0
  389. package/dist/app/server/assets/router-Bqz5X4Qw.js.map +1 -0
  390. package/dist/app/server/assets/router-CclzitkY.css +1 -0
  391. package/dist/app/server/assets/routes-BLQdKqcZ.js +2 -0
  392. package/dist/app/server/assets/routes-BLQdKqcZ.js.map +1 -0
  393. package/dist/app/server/assets/routes-BgiIzrOt.css +1 -0
  394. package/dist/app/server/assets/routes-Bv6WzsSR.js +2 -0
  395. package/dist/app/server/assets/routes-Bv6WzsSR.js.map +1 -0
  396. package/dist/app/server/assets/sUSDe-j9GOnH7I.svg +1 -0
  397. package/dist/app/server/assets/schema-check-oLqvHR8y.js +9 -0
  398. package/dist/app/server/assets/schema-check-oLqvHR8y.js.map +1 -0
  399. package/dist/app/server/assets/secp256k1-yg8eeIYU.js +2 -0
  400. package/dist/app/server/assets/secp256k1-yg8eeIYU.js.map +1 -0
  401. package/dist/app/server/assets/server-RRUiOef2.js +76 -0
  402. package/dist/app/server/assets/server-RRUiOef2.js.map +1 -0
  403. package/dist/app/server/assets/siUSD-C10QUNYS.svg +1 -0
  404. package/dist/app/server/assets/sqlite-adapter-C_LAV4e3.js +2 -0
  405. package/dist/app/server/assets/sqlite-adapter-C_LAV4e3.js.map +1 -0
  406. package/dist/app/server/assets/sqlite-introspector-DSCAP82F-Crx7Ny14.js +6 -0
  407. package/dist/app/server/assets/sqlite-introspector-DSCAP82F-Crx7Ny14.js.map +1 -0
  408. package/dist/app/server/assets/standard-json-DY77efq0.js +2 -0
  409. package/dist/app/server/assets/standard-json-DY77efq0.js.map +1 -0
  410. package/dist/app/server/assets/standard-json-ig2t0wRt.js +2 -0
  411. package/dist/app/server/assets/standard-json-ig2t0wRt.js.map +1 -0
  412. package/dist/app/server/assets/standard-json-t-LNckA6.js +2 -0
  413. package/dist/app/server/assets/standard-json-t-LNckA6.js.map +1 -0
  414. package/dist/app/server/assets/standard-openapi-CONmVRl8.js +2 -0
  415. package/dist/app/server/assets/standard-openapi-CONmVRl8.js.map +1 -0
  416. package/dist/app/server/assets/start-C63VetBp.js +2 -0
  417. package/dist/app/server/assets/start-C63VetBp.js.map +1 -0
  418. package/dist/app/server/assets/stcUSD-DIntDJeh.svg +1 -0
  419. package/dist/app/server/assets/sury-CWZTCd75-CDaOS2oM.js +2 -0
  420. package/dist/app/server/assets/sury-CWZTCd75-CDaOS2oM.js.map +1 -0
  421. package/dist/app/server/assets/syrupUSDC-DhYwZqdM.svg +5 -0
  422. package/dist/app/server/assets/thetaUSD-Dgmksf6G.svg +1 -0
  423. package/dist/app/server/assets/typebox-Dei93FPO-D_lCVdAz.js +2 -0
  424. package/dist/app/server/assets/typebox-Dei93FPO-D_lCVdAz.js.map +1 -0
  425. package/dist/app/server/assets/useNavigate-D6d1w7KE.js +2 -0
  426. package/dist/app/server/assets/useNavigate-D6d1w7KE.js.map +1 -0
  427. package/dist/app/server/assets/useQuery-BRpCr5vj.js +2 -0
  428. package/dist/app/server/assets/useQuery-BRpCr5vj.js.map +1 -0
  429. package/dist/app/server/assets/useRegisterFieldControl-cJesrOWK.js +2 -0
  430. package/dist/app/server/assets/useRegisterFieldControl-cJesrOWK.js.map +1 -0
  431. package/dist/app/server/assets/utils-C4ZXZIZW.js +2 -0
  432. package/dist/app/server/assets/utils-C4ZXZIZW.js.map +1 -0
  433. package/dist/app/server/assets/utils-D57zfcg-.js +2 -0
  434. package/dist/app/server/assets/utils-D57zfcg-.js.map +1 -0
  435. package/dist/app/server/assets/valibot--1zFm7rT-CIKoH3MS.js +2 -0
  436. package/dist/app/server/assets/valibot--1zFm7rT-CIKoH3MS.js.map +1 -0
  437. package/dist/app/server/assets/valibot-D_HTw1Gn-BdPyLkXt.js +2 -0
  438. package/dist/app/server/assets/valibot-D_HTw1Gn-BdPyLkXt.js.map +1 -0
  439. package/dist/app/server/assets/wYLDS-CaCKDrO-.svg +10 -0
  440. package/dist/app/server/assets/wsrUSD-B2Ey0bDQ.svg +1 -0
  441. package/dist/app/server/assets/zod-Bwrt9trS-BezI5Gi1.js +2 -0
  442. package/dist/app/server/assets/zod-Bwrt9trS-BezI5Gi1.js.map +1 -0
  443. package/dist/app/server/assets/zod-DSgpEGAE-DZ7M_Q33.js +2 -0
  444. package/dist/app/server/assets/zod-DSgpEGAE-DZ7M_Q33.js.map +1 -0
  445. package/dist/app/server/assets/zyzz-6R2K52xP.css +1 -0
  446. package/dist/app/server/assets/zyzz.config-CJRpjn0E.js +3 -0
  447. package/dist/app/server/assets/zyzz.config-CJRpjn0E.js.map +1 -0
  448. package/dist/app/server/index.js +532 -0
  449. package/dist/app/server/index.js.map +1 -0
  450. package/dist/app/server/wrangler.json +1 -0
  451. package/dist/cli/Admin.d.ts +34 -0
  452. package/dist/cli/Admin.d.ts.map +1 -0
  453. package/dist/cli/Admin.js +61 -0
  454. package/dist/cli/Admin.js.map +1 -0
  455. package/dist/cli/Apps.d.ts +9 -0
  456. package/dist/cli/Apps.d.ts.map +1 -0
  457. package/dist/cli/Apps.js +34 -0
  458. package/dist/cli/Apps.js.map +1 -0
  459. package/dist/cli/Cli.d.ts +13 -0
  460. package/dist/cli/Cli.d.ts.map +1 -0
  461. package/dist/cli/Cli.js +26 -0
  462. package/dist/cli/Cli.js.map +1 -0
  463. package/dist/cli/Project.d.ts +17 -0
  464. package/dist/cli/Project.d.ts.map +1 -0
  465. package/dist/cli/Project.js +90 -0
  466. package/dist/cli/Project.js.map +1 -0
  467. package/dist/cli/Realms.d.ts +24 -0
  468. package/dist/cli/Realms.d.ts.map +1 -0
  469. package/dist/cli/Realms.js +48 -0
  470. package/dist/cli/Realms.js.map +1 -0
  471. package/dist/cli/Session.d.ts +79 -0
  472. package/dist/cli/Session.d.ts.map +1 -0
  473. package/dist/cli/Session.js +229 -0
  474. package/dist/cli/Session.js.map +1 -0
  475. package/dist/cli/User.d.ts +24 -0
  476. package/dist/cli/User.d.ts.map +1 -0
  477. package/dist/cli/User.js +34 -0
  478. package/dist/cli/User.js.map +1 -0
  479. package/dist/cli/V1.d.ts +32 -0
  480. package/dist/cli/V1.d.ts.map +1 -0
  481. package/dist/cli/V1.js +38 -0
  482. package/dist/cli/V1.js.map +1 -0
  483. package/dist/cli/bin.d.ts +3 -0
  484. package/dist/cli/bin.d.ts.map +1 -0
  485. package/dist/cli/bin.js +46 -0
  486. package/dist/cli/bin.js.map +1 -0
  487. package/dist/cli/commands/admin/apps/create.d.ts +23 -0
  488. package/dist/cli/commands/admin/apps/create.d.ts.map +1 -0
  489. package/dist/cli/commands/admin/apps/create.js +84 -0
  490. package/dist/cli/commands/admin/apps/create.js.map +1 -0
  491. package/dist/cli/commands/admin/apps/delete.d.ts +15 -0
  492. package/dist/cli/commands/admin/apps/delete.d.ts.map +1 -0
  493. package/dist/cli/commands/admin/apps/delete.js +41 -0
  494. package/dist/cli/commands/admin/apps/delete.js.map +1 -0
  495. package/dist/cli/commands/admin/apps/index.d.ts +5 -0
  496. package/dist/cli/commands/admin/apps/index.d.ts.map +1 -0
  497. package/dist/cli/commands/admin/apps/index.js +14 -0
  498. package/dist/cli/commands/admin/apps/index.js.map +1 -0
  499. package/dist/cli/commands/admin/apps/list.d.ts +10 -0
  500. package/dist/cli/commands/admin/apps/list.d.ts.map +1 -0
  501. package/dist/cli/commands/admin/apps/list.js +26 -0
  502. package/dist/cli/commands/admin/apps/list.js.map +1 -0
  503. package/dist/cli/commands/admin/apps/rotate-secret.d.ts +17 -0
  504. package/dist/cli/commands/admin/apps/rotate-secret.d.ts.map +1 -0
  505. package/dist/cli/commands/admin/apps/rotate-secret.js +47 -0
  506. package/dist/cli/commands/admin/apps/rotate-secret.js.map +1 -0
  507. package/dist/cli/commands/admin/apps/update.d.ts +20 -0
  508. package/dist/cli/commands/admin/apps/update.d.ts.map +1 -0
  509. package/dist/cli/commands/admin/apps/update.js +71 -0
  510. package/dist/cli/commands/admin/apps/update.js.map +1 -0
  511. package/dist/cli/commands/admin/index.d.ts +5 -0
  512. package/dist/cli/commands/admin/index.d.ts.map +1 -0
  513. package/dist/cli/commands/admin/index.js +13 -0
  514. package/dist/cli/commands/admin/index.js.map +1 -0
  515. package/dist/cli/commands/admin/migrate.d.ts +10 -0
  516. package/dist/cli/commands/admin/migrate.d.ts.map +1 -0
  517. package/dist/cli/commands/admin/migrate.js +20 -0
  518. package/dist/cli/commands/admin/migrate.js.map +1 -0
  519. package/dist/cli/commands/admin/realms/add.d.ts +13 -0
  520. package/dist/cli/commands/admin/realms/add.d.ts.map +1 -0
  521. package/dist/cli/commands/admin/realms/add.js +42 -0
  522. package/dist/cli/commands/admin/realms/add.js.map +1 -0
  523. package/dist/cli/commands/admin/realms/index.d.ts +5 -0
  524. package/dist/cli/commands/admin/realms/index.d.ts.map +1 -0
  525. package/dist/cli/commands/admin/realms/index.js +13 -0
  526. package/dist/cli/commands/admin/realms/index.js.map +1 -0
  527. package/dist/cli/commands/admin/realms/list.d.ts +14 -0
  528. package/dist/cli/commands/admin/realms/list.d.ts.map +1 -0
  529. package/dist/cli/commands/admin/realms/list.js +36 -0
  530. package/dist/cli/commands/admin/realms/list.js.map +1 -0
  531. package/dist/cli/commands/admin/realms/passkeys/index.d.ts +5 -0
  532. package/dist/cli/commands/admin/realms/passkeys/index.d.ts.map +1 -0
  533. package/dist/cli/commands/admin/realms/passkeys/index.js +13 -0
  534. package/dist/cli/commands/admin/realms/passkeys/index.js.map +1 -0
  535. package/dist/cli/commands/admin/realms/passkeys/set.d.ts +17 -0
  536. package/dist/cli/commands/admin/realms/passkeys/set.d.ts.map +1 -0
  537. package/dist/cli/commands/admin/realms/passkeys/set.js +46 -0
  538. package/dist/cli/commands/admin/realms/passkeys/set.js.map +1 -0
  539. package/dist/cli/commands/admin/realms/privy/index.d.ts +5 -0
  540. package/dist/cli/commands/admin/realms/privy/index.d.ts.map +1 -0
  541. package/dist/cli/commands/admin/realms/privy/index.js +13 -0
  542. package/dist/cli/commands/admin/realms/privy/index.js.map +1 -0
  543. package/dist/cli/commands/admin/realms/privy/set.d.ts +19 -0
  544. package/dist/cli/commands/admin/realms/privy/set.d.ts.map +1 -0
  545. package/dist/cli/commands/admin/realms/privy/set.js +66 -0
  546. package/dist/cli/commands/admin/realms/privy/set.js.map +1 -0
  547. package/dist/cli/commands/admin/realms/remove.d.ts +12 -0
  548. package/dist/cli/commands/admin/realms/remove.d.ts.map +1 -0
  549. package/dist/cli/commands/admin/realms/remove.js +35 -0
  550. package/dist/cli/commands/admin/realms/remove.js.map +1 -0
  551. package/dist/cli/commands/admin/realms/secp256k1/disable.d.ts +16 -0
  552. package/dist/cli/commands/admin/realms/secp256k1/disable.d.ts.map +1 -0
  553. package/dist/cli/commands/admin/realms/secp256k1/disable.js +42 -0
  554. package/dist/cli/commands/admin/realms/secp256k1/disable.js.map +1 -0
  555. package/dist/cli/commands/admin/realms/secp256k1/enable.d.ts +16 -0
  556. package/dist/cli/commands/admin/realms/secp256k1/enable.d.ts.map +1 -0
  557. package/dist/cli/commands/admin/realms/secp256k1/enable.js +42 -0
  558. package/dist/cli/commands/admin/realms/secp256k1/enable.js.map +1 -0
  559. package/dist/cli/commands/admin/realms/secp256k1/index.d.ts +9 -0
  560. package/dist/cli/commands/admin/realms/secp256k1/index.d.ts.map +1 -0
  561. package/dist/cli/commands/admin/realms/secp256k1/index.js +17 -0
  562. package/dist/cli/commands/admin/realms/secp256k1/index.js.map +1 -0
  563. package/dist/cli/commands/admin/realms/set.d.ts +17 -0
  564. package/dist/cli/commands/admin/realms/set.d.ts.map +1 -0
  565. package/dist/cli/commands/admin/realms/set.js +46 -0
  566. package/dist/cli/commands/admin/realms/set.js.map +1 -0
  567. package/dist/cli/commands/admin/rotate-key.d.ts +16 -0
  568. package/dist/cli/commands/admin/rotate-key.d.ts.map +1 -0
  569. package/dist/cli/commands/admin/rotate-key.js +46 -0
  570. package/dist/cli/commands/admin/rotate-key.js.map +1 -0
  571. package/dist/cli/commands/init.d.ts +11 -0
  572. package/dist/cli/commands/init.d.ts.map +1 -0
  573. package/dist/cli/commands/init.js +34 -0
  574. package/dist/cli/commands/init.js.map +1 -0
  575. package/dist/cli/commands/login.d.ts +12 -0
  576. package/dist/cli/commands/login.d.ts.map +1 -0
  577. package/dist/cli/commands/login.js +29 -0
  578. package/dist/cli/commands/login.js.map +1 -0
  579. package/dist/cli/commands/logout.d.ts +8 -0
  580. package/dist/cli/commands/logout.d.ts.map +1 -0
  581. package/dist/cli/commands/logout.js +19 -0
  582. package/dist/cli/commands/logout.js.map +1 -0
  583. package/dist/cli/commands/whoami.d.ts +12 -0
  584. package/dist/cli/commands/whoami.d.ts.map +1 -0
  585. package/dist/cli/commands/whoami.js +24 -0
  586. package/dist/cli/commands/whoami.js.map +1 -0
  587. package/dist/client/Actions.d.ts +108 -0
  588. package/dist/client/Actions.d.ts.map +1 -0
  589. package/dist/client/Actions.js +94 -0
  590. package/dist/client/Actions.js.map +1 -0
  591. package/dist/client/Auth.d.ts +143 -0
  592. package/dist/client/Auth.d.ts.map +1 -0
  593. package/dist/client/Auth.js +106 -0
  594. package/dist/client/Auth.js.map +1 -0
  595. package/dist/client/Authorization.d.ts +29 -0
  596. package/dist/client/Authorization.d.ts.map +1 -0
  597. package/dist/client/Authorization.js +12 -0
  598. package/dist/client/Authorization.js.map +1 -0
  599. package/dist/client/Decorator.d.ts +172 -0
  600. package/dist/client/Decorator.d.ts.map +1 -0
  601. package/dist/client/Decorator.js +241 -0
  602. package/dist/client/Decorator.js.map +1 -0
  603. package/dist/client/Key.d.ts +82 -0
  604. package/dist/client/Key.d.ts.map +1 -0
  605. package/dist/client/Key.js +81 -0
  606. package/dist/client/Key.js.map +1 -0
  607. package/dist/client/Pending.d.ts +38 -0
  608. package/dist/client/Pending.d.ts.map +1 -0
  609. package/dist/client/Pending.js +12 -0
  610. package/dist/client/Pending.js.map +1 -0
  611. package/dist/client/Permissions.d.ts +36 -0
  612. package/dist/client/Permissions.d.ts.map +1 -0
  613. package/dist/client/Permissions.js +16 -0
  614. package/dist/client/Permissions.js.map +1 -0
  615. package/dist/client/Storage.d.ts +27 -0
  616. package/dist/client/Storage.d.ts.map +1 -0
  617. package/dist/client/Storage.js +16 -0
  618. package/dist/client/Storage.js.map +1 -0
  619. package/dist/client/TempoAccount.d.ts +52 -0
  620. package/dist/client/TempoAccount.d.ts.map +1 -0
  621. package/dist/client/TempoAccount.js +17 -0
  622. package/dist/client/TempoAccount.js.map +1 -0
  623. package/dist/client/Tokens.d.ts +25 -0
  624. package/dist/client/Tokens.d.ts.map +1 -0
  625. package/dist/client/Tokens.js +12 -0
  626. package/dist/client/Tokens.js.map +1 -0
  627. package/dist/client/User.d.ts +21 -0
  628. package/dist/client/User.d.ts.map +1 -0
  629. package/dist/client/User.js +12 -0
  630. package/dist/client/User.js.map +1 -0
  631. package/dist/client/actions/account.d.ts +75 -0
  632. package/dist/client/actions/account.d.ts.map +1 -0
  633. package/dist/client/actions/account.js +102 -0
  634. package/dist/client/actions/account.js.map +1 -0
  635. package/dist/client/actions/device.d.ts +52 -0
  636. package/dist/client/actions/device.d.ts.map +1 -0
  637. package/dist/client/actions/device.js +103 -0
  638. package/dist/client/actions/device.js.map +1 -0
  639. package/dist/client/actions/email.d.ts +89 -0
  640. package/dist/client/actions/email.d.ts.map +1 -0
  641. package/dist/client/actions/email.js +86 -0
  642. package/dist/client/actions/email.js.map +1 -0
  643. package/dist/client/actions/oauth.d.ts +112 -0
  644. package/dist/client/actions/oauth.d.ts.map +1 -0
  645. package/dist/client/actions/oauth.js +103 -0
  646. package/dist/client/actions/oauth.js.map +1 -0
  647. package/dist/client/actions/passkey.d.ts +140 -0
  648. package/dist/client/actions/passkey.d.ts.map +1 -0
  649. package/dist/client/actions/passkey.js +170 -0
  650. package/dist/client/actions/passkey.js.map +1 -0
  651. package/dist/client/actions/realm.d.ts +25 -0
  652. package/dist/client/actions/realm.d.ts.map +1 -0
  653. package/dist/client/actions/realm.js +16 -0
  654. package/dist/client/actions/realm.js.map +1 -0
  655. package/dist/client/actions/redirect.d.ts +152 -0
  656. package/dist/client/actions/redirect.d.ts.map +1 -0
  657. package/dist/client/actions/redirect.js +311 -0
  658. package/dist/client/actions/redirect.js.map +1 -0
  659. package/dist/client/internal/accessKey.d.ts +21 -0
  660. package/dist/client/internal/accessKey.d.ts.map +1 -0
  661. package/dist/client/internal/accessKey.js +38 -0
  662. package/dist/client/internal/accessKey.js.map +1 -0
  663. package/dist/client/internal/account.d.ts +17 -0
  664. package/dist/client/internal/account.d.ts.map +1 -0
  665. package/dist/client/internal/account.js +3 -0
  666. package/dist/client/internal/account.js.map +1 -0
  667. package/dist/client/internal/api.d.ts +110 -0
  668. package/dist/client/internal/api.d.ts.map +1 -0
  669. package/dist/client/internal/api.js +136 -0
  670. package/dist/client/internal/api.js.map +1 -0
  671. package/dist/client/internal/headless.d.ts +159 -0
  672. package/dist/client/internal/headless.d.ts.map +1 -0
  673. package/dist/client/internal/headless.js +196 -0
  674. package/dist/client/internal/headless.js.map +1 -0
  675. package/dist/client/internal/indexedDb.d.ts +8 -0
  676. package/dist/client/internal/indexedDb.d.ts.map +1 -0
  677. package/dist/client/internal/indexedDb.js +32 -0
  678. package/dist/client/internal/indexedDb.js.map +1 -0
  679. package/dist/client/internal/request.d.ts +56 -0
  680. package/dist/client/internal/request.d.ts.map +1 -0
  681. package/dist/client/internal/request.js +44 -0
  682. package/dist/client/internal/request.js.map +1 -0
  683. package/dist/client/internal/store.d.ts +12 -0
  684. package/dist/client/internal/store.d.ts.map +1 -0
  685. package/dist/client/internal/store.js +15 -0
  686. package/dist/client/internal/store.js.map +1 -0
  687. package/dist/client/internal/verifier.d.ts +25 -0
  688. package/dist/client/internal/verifier.d.ts.map +1 -0
  689. package/dist/client/internal/verifier.js +52 -0
  690. package/dist/client/internal/verifier.js.map +1 -0
  691. package/dist/client.d.ts +18 -0
  692. package/dist/client.d.ts.map +1 -0
  693. package/dist/client.js +18 -0
  694. package/dist/client.js.map +1 -0
  695. package/dist/index.d.ts +6 -0
  696. package/dist/index.d.ts.map +1 -0
  697. package/dist/index.js +6 -0
  698. package/dist/index.js.map +1 -0
  699. package/dist/internal/Apps.d.ts +3169 -0
  700. package/dist/internal/Apps.d.ts.map +1 -0
  701. package/dist/internal/Apps.js +948 -0
  702. package/dist/internal/Apps.js.map +1 -0
  703. package/dist/internal/Auth.d.ts +4287 -0
  704. package/dist/internal/Auth.d.ts.map +1 -0
  705. package/dist/internal/Auth.js +185 -0
  706. package/dist/internal/Auth.js.map +1 -0
  707. package/dist/internal/Authorize.d.ts +526 -0
  708. package/dist/internal/Authorize.d.ts.map +1 -0
  709. package/dist/internal/Authorize.js +330 -0
  710. package/dist/internal/Authorize.js.map +1 -0
  711. package/dist/internal/Cache.d.ts +56 -0
  712. package/dist/internal/Cache.d.ts.map +1 -0
  713. package/dist/internal/Cache.js +65 -0
  714. package/dist/internal/Cache.js.map +1 -0
  715. package/dist/internal/Chain.d.ts +738 -0
  716. package/dist/internal/Chain.d.ts.map +1 -0
  717. package/dist/internal/Chain.js +65 -0
  718. package/dist/internal/Chain.js.map +1 -0
  719. package/dist/internal/ChainList.d.ts +117 -0
  720. package/dist/internal/ChainList.d.ts.map +1 -0
  721. package/dist/internal/ChainList.js +148 -0
  722. package/dist/internal/ChainList.js.map +1 -0
  723. package/dist/internal/ChainName.d.ts +11 -0
  724. package/dist/internal/ChainName.d.ts.map +1 -0
  725. package/dist/internal/ChainName.js +13 -0
  726. package/dist/internal/ChainName.js.map +1 -0
  727. package/dist/internal/CodeEmail.d.ts +38 -0
  728. package/dist/internal/CodeEmail.d.ts.map +1 -0
  729. package/dist/internal/CodeEmail.js +85 -0
  730. package/dist/internal/CodeEmail.js.map +1 -0
  731. package/dist/internal/ConfigurableAccount.d.ts +600 -0
  732. package/dist/internal/ConfigurableAccount.d.ts.map +1 -0
  733. package/dist/internal/ConfigurableAccount.js +795 -0
  734. package/dist/internal/ConfigurableAccount.js.map +1 -0
  735. package/dist/internal/Device.d.ts +246 -0
  736. package/dist/internal/Device.d.ts.map +1 -0
  737. package/dist/internal/Device.js +257 -0
  738. package/dist/internal/Device.js.map +1 -0
  739. package/dist/internal/Env.d.ts +97 -0
  740. package/dist/internal/Env.d.ts.map +1 -0
  741. package/dist/internal/Env.js +2 -0
  742. package/dist/internal/Env.js.map +1 -0
  743. package/dist/internal/ErrorResponse.d.ts +608 -0
  744. package/dist/internal/ErrorResponse.d.ts.map +1 -0
  745. package/dist/internal/ErrorResponse.js +701 -0
  746. package/dist/internal/ErrorResponse.js.map +1 -0
  747. package/dist/internal/Id.d.ts +10 -0
  748. package/dist/internal/Id.d.ts.map +1 -0
  749. package/dist/internal/Id.js +34 -0
  750. package/dist/internal/Id.js.map +1 -0
  751. package/dist/internal/KeyAuthorization.d.ts +1650 -0
  752. package/dist/internal/KeyAuthorization.d.ts.map +1 -0
  753. package/dist/internal/KeyAuthorization.js +1187 -0
  754. package/dist/internal/KeyAuthorization.js.map +1 -0
  755. package/dist/internal/Limits.d.ts +70 -0
  756. package/dist/internal/Limits.d.ts.map +1 -0
  757. package/dist/internal/Limits.js +36 -0
  758. package/dist/internal/Limits.js.map +1 -0
  759. package/dist/internal/Log.d.ts +34 -0
  760. package/dist/internal/Log.d.ts.map +1 -0
  761. package/dist/internal/Log.js +99 -0
  762. package/dist/internal/Log.js.map +1 -0
  763. package/dist/internal/LogLine.d.ts +29 -0
  764. package/dist/internal/LogLine.d.ts.map +1 -0
  765. package/dist/internal/LogLine.js +50 -0
  766. package/dist/internal/LogLine.js.map +1 -0
  767. package/dist/internal/Migrations.d.ts +28 -0
  768. package/dist/internal/Migrations.d.ts.map +1 -0
  769. package/dist/internal/Migrations.js +82 -0
  770. package/dist/internal/Migrations.js.map +1 -0
  771. package/dist/internal/Owner.d.ts +230 -0
  772. package/dist/internal/Owner.d.ts.map +1 -0
  773. package/dist/internal/Owner.js +101 -0
  774. package/dist/internal/Owner.js.map +1 -0
  775. package/dist/internal/Passkey.d.ts +901 -0
  776. package/dist/internal/Passkey.d.ts.map +1 -0
  777. package/dist/internal/Passkey.js +1185 -0
  778. package/dist/internal/Passkey.js.map +1 -0
  779. package/dist/internal/PendingKey.d.ts +49 -0
  780. package/dist/internal/PendingKey.d.ts.map +1 -0
  781. package/dist/internal/PendingKey.js +58 -0
  782. package/dist/internal/PendingKey.js.map +1 -0
  783. package/dist/internal/Privy.d.ts +138 -0
  784. package/dist/internal/Privy.d.ts.map +1 -0
  785. package/dist/internal/Privy.js +285 -0
  786. package/dist/internal/Privy.js.map +1 -0
  787. package/dist/internal/RateLimit.d.ts +218 -0
  788. package/dist/internal/RateLimit.d.ts.map +1 -0
  789. package/dist/internal/RateLimit.js +209 -0
  790. package/dist/internal/RateLimit.js.map +1 -0
  791. package/dist/internal/Realm.d.ts +290 -0
  792. package/dist/internal/Realm.d.ts.map +1 -0
  793. package/dist/internal/Realm.js +502 -0
  794. package/dist/internal/Realm.js.map +1 -0
  795. package/dist/internal/RequestId.d.ts +16 -0
  796. package/dist/internal/RequestId.d.ts.map +1 -0
  797. package/dist/internal/RequestId.js +78 -0
  798. package/dist/internal/RequestId.js.map +1 -0
  799. package/dist/internal/SigningKey.d.ts +126 -0
  800. package/dist/internal/SigningKey.d.ts.map +1 -0
  801. package/dist/internal/SigningKey.js +221 -0
  802. package/dist/internal/SigningKey.js.map +1 -0
  803. package/dist/internal/TempoAccount.d.ts +181 -0
  804. package/dist/internal/TempoAccount.d.ts.map +1 -0
  805. package/dist/internal/TempoAccount.js +369 -0
  806. package/dist/internal/TempoAccount.js.map +1 -0
  807. package/dist/internal/TestInbox.d.ts +42 -0
  808. package/dist/internal/TestInbox.d.ts.map +1 -0
  809. package/dist/internal/TestInbox.js +20 -0
  810. package/dist/internal/TestInbox.js.map +1 -0
  811. package/dist/internal/Timing.d.ts +52 -0
  812. package/dist/internal/Timing.d.ts.map +1 -0
  813. package/dist/internal/Timing.js +116 -0
  814. package/dist/internal/Timing.js.map +1 -0
  815. package/dist/internal/Validation.d.ts +52 -0
  816. package/dist/internal/Validation.d.ts.map +1 -0
  817. package/dist/internal/Validation.js +22 -0
  818. package/dist/internal/Validation.js.map +1 -0
  819. package/dist/internal/Verification.d.ts +24 -0
  820. package/dist/internal/Verification.d.ts.map +1 -0
  821. package/dist/internal/Verification.js +37 -0
  822. package/dist/internal/Verification.js.map +1 -0
  823. package/dist/internal/Wallet.d.ts +66 -0
  824. package/dist/internal/Wallet.d.ts.map +1 -0
  825. package/dist/internal/Wallet.js +59 -0
  826. package/dist/internal/Wallet.js.map +1 -0
  827. package/dist/internal/owners/Passkey.d.ts +9 -0
  828. package/dist/internal/owners/Passkey.d.ts.map +1 -0
  829. package/dist/internal/owners/Passkey.js +58 -0
  830. package/dist/internal/owners/Passkey.js.map +1 -0
  831. package/dist/internal/owners/Privy.d.ts +13 -0
  832. package/dist/internal/owners/Privy.d.ts.map +1 -0
  833. package/dist/internal/owners/Privy.js +59 -0
  834. package/dist/internal/owners/Privy.js.map +1 -0
  835. package/dist/internal/owners/Secp256k1.d.ts +12 -0
  836. package/dist/internal/owners/Secp256k1.d.ts.map +1 -0
  837. package/dist/internal/owners/Secp256k1.js +99 -0
  838. package/dist/internal/owners/Secp256k1.js.map +1 -0
  839. package/dist/worker.d.ts +18 -0
  840. package/dist/worker.d.ts.map +1 -0
  841. package/dist/worker.js +18 -0
  842. package/dist/worker.js.map +1 -0
  843. package/package.json +83 -3
  844. package/src/Api.ts +157 -0
  845. package/src/App.ts +316 -0
  846. package/src/api/account.ts +2266 -0
  847. package/src/api/authenticate.ts +1662 -0
  848. package/src/api/authorize.ts +1086 -0
  849. package/src/api/device.ts +516 -0
  850. package/src/api/health.ts +72 -0
  851. package/src/api/lib/AccountStep.ts +485 -0
  852. package/src/api/lib/Auth.ts +164 -0
  853. package/src/api/lib/Configure.ts +921 -0
  854. package/src/api/lib/Consent.ts +388 -0
  855. package/src/api/lib/Cors.ts +160 -0
  856. package/src/api/lib/Database.ts +10 -0
  857. package/src/api/lib/DeviceRequest.ts +244 -0
  858. package/src/api/lib/FirstAccount.ts +136 -0
  859. package/src/api/lib/Headless.ts +616 -0
  860. package/src/api/lib/IsolateCache.ts +28 -0
  861. package/src/api/lib/KeySigner.ts +690 -0
  862. package/src/api/lib/PasskeyLink.ts +162 -0
  863. package/src/api/lib/Session.ts +64 -0
  864. package/src/api/lib/SignInConsent.ts +393 -0
  865. package/src/api/oauth.ts +1796 -0
  866. package/src/app/components/CodeInput.tsx +153 -0
  867. package/src/app/components/DevTools.tsx +1071 -0
  868. package/src/app/components/Grant.tsx +476 -0
  869. package/src/app/components/icons/BRLA.png +0 -0
  870. package/src/app/components/icons/BRZ.svg +1 -0
  871. package/src/app/components/icons/CHFAU.png +0 -0
  872. package/src/app/components/icons/DLUSD.png +0 -0
  873. package/src/app/components/icons/EURAU.svg +1 -0
  874. package/src/app/components/icons/EURC.e.svg +1 -0
  875. package/src/app/components/icons/GBPA.svg +4 -0
  876. package/src/app/components/icons/GUSD.svg +1 -0
  877. package/src/app/components/icons/MACH.svg +4 -0
  878. package/src/app/components/icons/OUSD.svg +5 -0
  879. package/src/app/components/icons/PRIME.svg +14 -0
  880. package/src/app/components/icons/SBC.svg +1 -0
  881. package/src/app/components/icons/SEKAU.svg +5 -0
  882. package/src/app/components/icons/USD1.svg +30 -0
  883. package/src/app/components/icons/USDB.svg +11 -0
  884. package/src/app/components/icons/USDC.e.svg +1 -0
  885. package/src/app/components/icons/USDT0.svg +1 -0
  886. package/src/app/components/icons/USDY.svg +16 -0
  887. package/src/app/components/icons/USDe.svg +1 -0
  888. package/src/app/components/icons/YLDS.svg +3 -0
  889. package/src/app/components/icons/alphaUSD.svg +1 -0
  890. package/src/app/components/icons/betaUSD.svg +1 -0
  891. package/src/app/components/icons/cUSD.svg +1 -0
  892. package/src/app/components/icons/cbBTC.svg +1 -0
  893. package/src/app/components/icons/frxUSD.svg +1 -0
  894. package/src/app/components/icons/goUSD.svg +5 -0
  895. package/src/app/components/icons/iUSD.svg +1 -0
  896. package/src/app/components/icons/pathUSD.svg +25 -0
  897. package/src/app/components/icons/rUSD.svg +1 -0
  898. package/src/app/components/icons/reUSD.svg +1 -0
  899. package/src/app/components/icons/sUSDe.svg +1 -0
  900. package/src/app/components/icons/siUSD.svg +1 -0
  901. package/src/app/components/icons/stcUSD.svg +1 -0
  902. package/src/app/components/icons/syrupUSDC.svg +5 -0
  903. package/src/app/components/icons/thetaUSD.svg +1 -0
  904. package/src/app/components/icons/wYLDS.svg +10 -0
  905. package/src/app/components/icons/wsrUSD.svg +1 -0
  906. package/src/app/components/logos/OUSD.dark.svg +17 -0
  907. package/src/app/components/logos/OUSD.light.svg +17 -0
  908. package/src/app/coverage.server.ts +73 -0
  909. package/src/app/coverage.ts +69 -0
  910. package/src/app/crons/cleanup.ts +104 -0
  911. package/src/app/db/auth.ts +440 -0
  912. package/src/app/db/migrations/0000_better_auth.sql +53 -0
  913. package/src/app/db/migrations/0001_oauth_provider.sql +162 -0
  914. package/src/app/db/migrations/0002_device_code.sql +17 -0
  915. package/src/app/db/migrations/0003_realms.sql +27 -0
  916. package/src/app/db/migrations/0004_default_realm.sql +2 -0
  917. package/src/app/db/migrations/0005_passkeys.sql +30 -0
  918. package/src/app/db/migrations/0006_first_accounts.sql +9 -0
  919. package/src/app/db/migrations/0007_pending_keys.sql +13 -0
  920. package/src/app/db/migrations/0008_secp256k1_owners.sql +18 -0
  921. package/src/app/db/migrations/0009_device_requests.sql +8 -0
  922. package/src/app/db/migrations/0010_device_keys.sql +4 -0
  923. package/src/app/db/migrations/0011_registered_passkeys.sql +2 -0
  924. package/src/app/db/migrations/0012_passkey_accounts.sql +7 -0
  925. package/src/app/db/migrations/0013_first_party_apps.sql +4 -0
  926. package/src/app/db/migrations/0014_logout_revokes_tokens.sql +17 -0
  927. package/src/app/db/migrations/0015_expiry_indexes.sql +9 -0
  928. package/src/app/db/migrations/0016_configurable_accounts.sql +15 -0
  929. package/src/app/db/migrations/0017_account_config_keys.sql +3 -0
  930. package/src/app/db/migrations/0018_better_auth_1_8.sql +9 -0
  931. package/src/app/db/migrations/0019_drop_provider_account_index.sql +1 -0
  932. package/src/app/db/migrations/meta/0000_snapshot.json +362 -0
  933. package/src/app/db/migrations/meta/0001_snapshot.json +1487 -0
  934. package/src/app/db/migrations/meta/0002_snapshot.json +1603 -0
  935. package/src/app/db/migrations/meta/0003_snapshot.json +1760 -0
  936. package/src/app/db/migrations/meta/0004_snapshot.json +1760 -0
  937. package/src/app/db/migrations/meta/0005_snapshot.json +1911 -0
  938. package/src/app/db/migrations/meta/0006_snapshot.json +1967 -0
  939. package/src/app/db/migrations/meta/0007_snapshot.json +2047 -0
  940. package/src/app/db/migrations/meta/0008_snapshot.json +2157 -0
  941. package/src/app/db/migrations/meta/0009_snapshot.json +2207 -0
  942. package/src/app/db/migrations/meta/0010_snapshot.json +2231 -0
  943. package/src/app/db/migrations/meta/0011_snapshot.json +2231 -0
  944. package/src/app/db/migrations/meta/0012_snapshot.json +2231 -0
  945. package/src/app/db/migrations/meta/0013_snapshot.json +2231 -0
  946. package/src/app/db/migrations/meta/0014_snapshot.json +2231 -0
  947. package/src/app/db/migrations/meta/0015_snapshot.json +2375 -0
  948. package/src/app/db/migrations/meta/0016_snapshot.json +2475 -0
  949. package/src/app/db/migrations/meta/0017_snapshot.json +2481 -0
  950. package/src/app/db/migrations/meta/0018_snapshot.json +2535 -0
  951. package/src/app/db/migrations/meta/0019_snapshot.json +2514 -0
  952. package/src/app/db/migrations/meta/_journal.json +146 -0
  953. package/src/app/db/schema.ts +241 -0
  954. package/src/app/db/table.ts +31 -0
  955. package/src/app/env.ts +57 -0
  956. package/src/app/inbox.ts +190 -0
  957. package/src/app/lib/Client.ts +82 -0
  958. package/src/app/lib/Inbox.ts +11 -0
  959. package/src/app/lib/Loader.ts +21 -0
  960. package/src/app/lib/Upgrade.ts +221 -0
  961. package/src/app/package.json +8 -0
  962. package/src/app/public/_headers +4 -0
  963. package/src/app/routeTree.gen.ts +219 -0
  964. package/src/app/router.tsx +47 -0
  965. package/src/app/routes/[_].flows.tsx +4254 -0
  966. package/src/app/routes/__root.tsx +172 -0
  967. package/src/app/routes/authorize.tsx +379 -0
  968. package/src/app/routes/choose-account.tsx +144 -0
  969. package/src/app/routes/deposit.tsx +107 -0
  970. package/src/app/routes/device.tsx +273 -0
  971. package/src/app/routes/error.tsx +62 -0
  972. package/src/app/routes/index.tsx +511 -0
  973. package/src/app/routes/login.tsx +577 -0
  974. package/src/app/screens/Account.tsx +559 -0
  975. package/src/app/screens/Approval.tsx +444 -0
  976. package/src/app/screens/ChooseAccount.tsx +206 -0
  977. package/src/app/screens/Deposit.tsx +523 -0
  978. package/src/app/screens/DeviceApproval.tsx +500 -0
  979. package/src/app/screens/NotFound.tsx +62 -0
  980. package/src/app/screens/SignIn.tsx +372 -0
  981. package/src/app/screens/WalletUpgrade.tsx +121 -0
  982. package/src/app/screens/chains/base.svg +3 -0
  983. package/src/app/screens/chains/ethereum.svg +11 -0
  984. package/src/app/screens/chains/solana.svg +4 -0
  985. package/src/app/screens/chains/tempo.svg +4 -0
  986. package/src/app/server.ts +342 -0
  987. package/src/app/vite.config.ts +128 -0
  988. package/src/app/void.config.ts +36 -0
  989. package/src/app/wallet.ts +69 -0
  990. package/src/app/zyzz.config.ts +52 -0
  991. package/src/cli/Admin.ts +74 -0
  992. package/src/cli/Apps.ts +27 -0
  993. package/src/cli/Cli.ts +41 -0
  994. package/src/cli/Project.ts +119 -0
  995. package/src/cli/Realms.ts +49 -0
  996. package/src/cli/Session.ts +290 -0
  997. package/src/cli/User.ts +40 -0
  998. package/src/cli/V1.ts +54 -0
  999. package/src/cli/bin.ts +44 -0
  1000. package/src/cli/commands/admin/apps/create.ts +96 -0
  1001. package/src/cli/commands/admin/apps/delete.ts +38 -0
  1002. package/src/cli/commands/admin/apps/index.ts +15 -0
  1003. package/src/cli/commands/admin/apps/list.ts +25 -0
  1004. package/src/cli/commands/admin/apps/rotate-secret.ts +47 -0
  1005. package/src/cli/commands/admin/apps/update.ts +79 -0
  1006. package/src/cli/commands/admin/index.ts +14 -0
  1007. package/src/cli/commands/admin/migrate.ts +19 -0
  1008. package/src/cli/commands/admin/realms/add.ts +40 -0
  1009. package/src/cli/commands/admin/realms/index.ts +14 -0
  1010. package/src/cli/commands/admin/realms/list.ts +38 -0
  1011. package/src/cli/commands/admin/realms/passkeys/index.ts +15 -0
  1012. package/src/cli/commands/admin/realms/passkeys/set.ts +44 -0
  1013. package/src/cli/commands/admin/realms/privy/index.ts +14 -0
  1014. package/src/cli/commands/admin/realms/privy/set.ts +69 -0
  1015. package/src/cli/commands/admin/realms/remove.ts +33 -0
  1016. package/src/cli/commands/admin/realms/secp256k1/disable.ts +40 -0
  1017. package/src/cli/commands/admin/realms/secp256k1/enable.ts +40 -0
  1018. package/src/cli/commands/admin/realms/secp256k1/index.ts +19 -0
  1019. package/src/cli/commands/admin/realms/set.ts +46 -0
  1020. package/src/cli/commands/admin/rotate-key.ts +47 -0
  1021. package/src/cli/commands/init.ts +42 -0
  1022. package/src/cli/commands/login.ts +32 -0
  1023. package/src/cli/commands/logout.ts +19 -0
  1024. package/src/cli/commands/whoami.ts +23 -0
  1025. package/src/client/Actions.ts +180 -0
  1026. package/src/client/Auth.ts +267 -0
  1027. package/src/client/Authorization.ts +34 -0
  1028. package/src/client/Decorator.ts +444 -0
  1029. package/src/client/Key.ts +137 -0
  1030. package/src/client/Pending.ts +45 -0
  1031. package/src/client/Permissions.ts +41 -0
  1032. package/src/client/Storage.ts +29 -0
  1033. package/src/client/TempoAccount.ts +55 -0
  1034. package/src/client/Tokens.ts +27 -0
  1035. package/src/client/User.ts +23 -0
  1036. package/src/client/actions/account.ts +171 -0
  1037. package/src/client/actions/device.ts +166 -0
  1038. package/src/client/actions/email.ts +164 -0
  1039. package/src/client/actions/oauth.ts +179 -0
  1040. package/src/client/actions/passkey.ts +333 -0
  1041. package/src/client/actions/realm.ts +37 -0
  1042. package/src/client/actions/redirect.ts +502 -0
  1043. package/src/client/internal/accessKey.ts +54 -0
  1044. package/src/client/internal/account.ts +18 -0
  1045. package/src/client/internal/api.ts +242 -0
  1046. package/src/client/internal/headless.ts +308 -0
  1047. package/src/client/internal/indexedDb.ts +44 -0
  1048. package/src/client/internal/request.ts +70 -0
  1049. package/src/client/internal/store.ts +20 -0
  1050. package/src/client/internal/verifier.ts +75 -0
  1051. package/src/client.ts +17 -0
  1052. package/src/index.ts +5 -0
  1053. package/src/internal/Apps.ts +1283 -0
  1054. package/src/internal/Auth.ts +273 -0
  1055. package/src/internal/Authorize.ts +433 -0
  1056. package/src/internal/Balance.ts +144 -0
  1057. package/src/internal/BodyLimit.ts +31 -0
  1058. package/src/internal/Cache.ts +119 -0
  1059. package/src/internal/Chain.ts +99 -0
  1060. package/src/internal/ChainList.ts +270 -0
  1061. package/src/internal/ChainName.ts +14 -0
  1062. package/src/internal/ChainStatus.ts +65 -0
  1063. package/src/internal/CodeEmail.ts +138 -0
  1064. package/src/internal/ConfigurableAccount.ts +1315 -0
  1065. package/src/internal/Device.ts +471 -0
  1066. package/src/internal/Env.ts +92 -0
  1067. package/src/internal/ErrorResponse.ts +896 -0
  1068. package/src/internal/Faucet.ts +43 -0
  1069. package/src/internal/Id.ts +41 -0
  1070. package/src/internal/KeyAuthorization.ts +1536 -0
  1071. package/src/internal/Limits.ts +40 -0
  1072. package/src/internal/Log.ts +166 -0
  1073. package/src/internal/LogLine.ts +81 -0
  1074. package/src/internal/Logout.ts +356 -0
  1075. package/src/internal/Migrations.ts +120 -0
  1076. package/src/internal/OpenApi.ts +300 -0
  1077. package/src/internal/Owner.ts +310 -0
  1078. package/src/internal/Passkey.ts +1904 -0
  1079. package/src/internal/PendingKey.ts +104 -0
  1080. package/src/internal/Privy.ts +536 -0
  1081. package/src/internal/RateLimit.ts +346 -0
  1082. package/src/internal/Realm.ts +814 -0
  1083. package/src/internal/RequestId.ts +118 -0
  1084. package/src/internal/SignInGrant.ts +175 -0
  1085. package/src/internal/SigningKey.ts +319 -0
  1086. package/src/internal/TempoAccount.ts +545 -0
  1087. package/src/internal/TestInbox.ts +51 -0
  1088. package/src/internal/Timing.ts +172 -0
  1089. package/src/internal/Validation.ts +52 -0
  1090. package/src/internal/Verification.ts +58 -0
  1091. package/src/internal/Wallet.ts +101 -0
  1092. package/src/internal/owners/Passkey.ts +76 -0
  1093. package/src/internal/owners/Privy.ts +82 -0
  1094. package/src/internal/owners/Secp256k1.ts +139 -0
  1095. package/src/types/app.d.ts +39 -0
  1096. package/src/worker.ts +17 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"___.flows-Cc-awUoC.js","names":["_formatErrorMessage","REASONS.triggerPress","_formatErrorMessage","_formatErrorMessage","TransitionStatusDataAttributes.startingStyle","TransitionStatusDataAttributes.endingStyle","CollapsiblePanelDataAttributes.open","CollapsiblePanelDataAttributes.closed","CollapsibleTriggerDataAttributes.panelOpen","baseMapping","AccordionItemDataAttributes.index","CollapsiblePanelDataAttributes.startingStyle","REASONS.none","ownerWindow","AccordionPanelCssVars.accordionPanelHeight","AccordionPanelCssVars.accordionPanelWidth","_jsx","BaseUi.Accordion.Item","styles","BaseUi.Accordion.Panel","BaseUi.Accordion.Root","BaseUi.Accordion.Header","_jsxs","BaseUi.Accordion.Trigger","_jsxs","_jsx","_jsxs","_jsx","Props","__zyzzProps","Link","Accordion","Button","Tooltip","ChevronRight","ZoomIn","ZoomOut","useCallback","useEffect","useLayoutEffect","useMemo","useRef","useState","CodeInput","Account","Approval","InvalidRequest","ChooseAccount","Deposit","DeviceApproval","NotFound","SignIn","WalletUpgrade","style","variants","vars","zoom","max","min","step","Page","all","sections","scale","setScale","current","anchor","undefined","main","probe","origin","window","scrollY","getBoundingClientRect","top","Number","parseFloat","getComputedStyle","paddingTop","unit","height","zoomTo","next","viewport","clamped","Math","point","x","innerWidth","y","innerHeight","canvas","scrollX","pending","scrollTo","onWheel","event","ctrlKey","metaKey","preventDefault","delta","deltaMode","WheelEvent","DOM_DELTA_LINE","deltaY","DOM_DELTA_PAGE","bounded","exp","clientX","clientY","gestureStart","onGestureStart","onGestureChange","gesture","onKeyDown","altKey","target","HTMLElement","isContentEditable","closest","key","addEventListener","passive","removeEventListener","location","hash","reveal","id","slice","percent","round","styles","className","panels","zoomIcon","zoomLevel","hidden","world","Content","props","intro","title","lede","map","section","sectionTitle","fragment","flows","flow","flowHeader","flowTitle","flowDescription","description","estimate","external","screen","Row","box","near","setNear","size","setSize","nodes","some","node","width","reduce","index","element","observer","IntersectionObserver","entries","entry","at","isIntersecting","firstElementChild","HTMLOListElement","rect","rootMargin","observe","disconnect","rowBox","row","name","edge","artboard","frameLabel","owner","set","frame","detail","length","placeholder","slug","options","document","getElementById","matchMedia","matches","settled","align","scrollIntoView","block","left","frames","settle","abs","requestAnimationFrame","text","toLowerCase","replace","Legend","legend","legendItem","legendTrigger","legendList","legendSection","legendFlows","legendFlow","Entry","button","shiftKey","children","ZoomTip","label","Description","split","part","code","Arrow","arrow","shaft","line","head","External","kind","externalName","AppScreen","app","appHeader","appTitle","appDescription","AppButton","appButton","tone","AppEmailField","appField","appLabel","appInput","AppSignIn","appDivider","AppEmail","AppCode","email","AppSignedIn","appAddress","accounts","address","noop","prevent","balance","amount","currency","realm","unavailable","calls","expiry","floor","Date","now","limits","period","tokens","symbol","unrecognized","approval","approving","denying","destination","heading","keyAuthorization","onApprove","onDeny","verified","signInRequest","appRequest","selectedAccount","keyedEntry","account","onAddPasskey","onSignOut","signingOut","configurable","onAddOwner","passkeys","chooseAccount","onChoose","deviceApproval","fetching","invalid","onSubmitCode","deviceRequest","created_at","device","ip","key_authorization","user_code","loginEntry","loginExit","walletUpgrade","onContinue","onSkip","upgrading","signIn","onChangeEmail","onPasskey","onResend","onStartOver","onSubmitEmail","resend","sending","verifying","redirectEntry","appSignInEdge","tokenExit","owners","credentialId","refusal","challenge","chain","call","selector","_styles","input","inline","result","value","Object","hasOwn","String","create","component","useMemo","useState","useRef","useCallback","_Fragment","__toESM","require_react","require_jsx_runtime","Link","useStableCallback","resolveStyle","createChangeEventDetails","transitionStatusMapping","useRenderElement","startingStyle$1","EMPTY_ARRAY","AnimationFrame","formatErrorMessage","useButton","useMergedRefs","useAnimationsFinished","useOpenChangeComplete","none","create","getWindow","addEventListener","Button","vars","useIsoLayoutEffect","triggerPress","Timeout","useTransitionStatus","useValueAsRef","useBaseUiId","Tooltip","ChevronDown","Deposit","useCompositeListItem","CompositeList","useControlled","CodeInput","SignIn","Account","ChevronRight","DeviceApproval","NotFound","ChooseAccount","InvalidRequest","Approval","WalletUpgrade","import_react","AccordionRootContext","useAccordionRootContext","context","import_jsx_runtime","rootStateAttributesMapping","AccordionRoot","hiddenUntilFoundProp","keepMountedProp","valueProp","defaultValueProp","elementProps","componentProps","defaultValue","accordionItemRefs","value","setValue","handleValueChange","nextValue","multiple","nextOpen","newValue","v","onValueChange","details","state","disabled","orientation","contextValue","element","forwardedRef","useCollapsibleRoot","openParam","parameters","open","setOpen","defaultOpen","defaultPanelId","registeredPanelId","setPanelIdState","panelId","handleTrigger","eventDetails","event","onOpenChange","mounted","setMounted","transitionStatus","CollapsibleRootContext","useCollapsibleRootContext","AccordionItemContext","useAccordionItemContext","closed","startingStyle","panelOpen","PANEL_OPEN_HOOK","PANEL_CLOSED_HOOK","triggerOpenStateMapping","collapsibleOpenStateMapping","index","accordionStateAttributesMapping","AccordionItem","disabledProp","onOpenChangeProp","listItemRef","contextDisabled","rootState","openValues","fallbackValue","isOpen","collapsible","collapsibleContext","defaultTriggerId","registeredTriggerId","setTriggerId","triggerId","accordionItemContext","AccordionHeader","stateAttributesMapping","AccordionTrigger","idProp","nativeButton","registeredId","id","currentId","buttonRef","getButtonProps","EMPTY_DIMENSIONS","useCollapsiblePanel","idParam","panelRef","animationTypeRef","dimensions","setDimensionsUnwrapped","lastMeasuredDimensionsRef","shouldSkipNextOpenRef","shouldPreventMountAnimationRef","shouldPreventActivityResumeAnimationRef","forcePanelIdle","setForcePanelIdle","pendingTemporaryStyleRestoreRef","mergedPanelRef","externalRef","latestOpenRef","runOnceCloseAnimationsFinish","hidden","panelTransitionStatus","shouldPreventOpenAnimation","renderedDimensions","shouldPersistHiddenTransitionStyles","hiddenUntilFound","setDimensions","shouldCacheMeasurement","nextDimensions","restorePendingTemporaryStyle","setPendingTemporaryStyleRestore","restore","markActivityResumeAnimationSuppressed","panel","animationType","getAnimationType","getDimensions","skipNextOpen","restoreLayoutStyles","resetLayoutStyles","restoreTransitionDuration","setTemporaryStyle","restoreAnimationName","restoreAnimationDuration","abortController","endingStyleFrame","handleComplete","revealDecisionTimeout","revertRevealFrame","scheduleRevealRevert","revertSkippedMotion","restoreStartingStyle","cleanupBeforeMatchListener","hadStartingStyle","shouldRender","keepMounted","panelStyles","hasAnimation","name","hasSuppressedMountAnimation","hasNonZeroDuration","hasTransition","part","previousValue","property","previousPriority","originalLayoutStyles","key","frame","accordionPanelHeight","accordionPanelWidth","AccordionPanel","contextHiddenUntilFound","contextKeepMounted","panelState","resolvedStyle","style","props","height","width","Accordion","Item","attributes","styles$1","Panel","Root","Trigger","children","external","input","inline","className","result","\"size\"","ZoomIn","ZoomOut","zoom","Page","all","sections","scale","setScale","current","anchor","main","probe","origin","unit","zoomTo","clamped","next","point","viewport","pending","onWheel","delta","bounded","gestureStart","onGestureStart","onGestureChange","gesture","onKeyDown","reveal","canvas","Content","percent","styles","ZoomTip","Legend","fragment","section","flow","Description","Row","estimate","box","near","setNear","size","setSize","node","observer","entry","entries","rect","Arrow","External","slug","target","options","top","settled","align","frames","settle","text","Entry","AppScreen","AppButton","AppEmailField","AppSignIn","AppEmail","AppCode","email","AppSignedIn","accounts","noop","prevent","unavailable","approval","signInRequest","appRequest","selectedAccount","keyedEntry","account","configurable","chooseAccount","deviceApproval","deviceRequest","loginEntry","loginExit","walletUpgrade","signIn","redirectEntry","appSignInEdge","tokenExit","\"tone\"","\"kind\""],"sources":["../../../../../node_modules/.pnpm/@base-ui+react@1.9.0_@types+react@19.3.0_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@base-ui/react/accordion/root/AccordionRootContext.mjs","../../../../../node_modules/.pnpm/@base-ui+react@1.9.0_@types+react@19.3.0_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@base-ui/react/accordion/root/AccordionRoot.mjs","../../../../../node_modules/.pnpm/@base-ui+react@1.9.0_@types+react@19.3.0_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@base-ui/react/collapsible/root/useCollapsibleRoot.mjs","../../../../../node_modules/.pnpm/@base-ui+react@1.9.0_@types+react@19.3.0_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@base-ui/react/collapsible/root/CollapsibleRootContext.mjs","../../../../../node_modules/.pnpm/@base-ui+react@1.9.0_@types+react@19.3.0_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@base-ui/react/accordion/item/AccordionItemContext.mjs","../../../../../node_modules/.pnpm/@base-ui+react@1.9.0_@types+react@19.3.0_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@base-ui/react/collapsible/panel/CollapsiblePanelDataAttributes.mjs","../../../../../node_modules/.pnpm/@base-ui+react@1.9.0_@types+react@19.3.0_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@base-ui/react/collapsible/trigger/CollapsibleTriggerDataAttributes.mjs","../../../../../node_modules/.pnpm/@base-ui+react@1.9.0_@types+react@19.3.0_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@base-ui/react/utils/collapsibleOpenStateMapping.mjs","../../../../../node_modules/.pnpm/@base-ui+react@1.9.0_@types+react@19.3.0_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@base-ui/react/accordion/item/AccordionItemDataAttributes.mjs","../../../../../node_modules/.pnpm/@base-ui+react@1.9.0_@types+react@19.3.0_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@base-ui/react/accordion/item/stateAttributesMapping.mjs","../../../../../node_modules/.pnpm/@base-ui+react@1.9.0_@types+react@19.3.0_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@base-ui/react/accordion/item/AccordionItem.mjs","../../../../../node_modules/.pnpm/@base-ui+react@1.9.0_@types+react@19.3.0_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@base-ui/react/accordion/header/AccordionHeader.mjs","../../../../../node_modules/.pnpm/@base-ui+react@1.9.0_@types+react@19.3.0_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@base-ui/react/accordion/trigger/AccordionTrigger.mjs","../../../../../node_modules/.pnpm/@base-ui+react@1.9.0_@types+react@19.3.0_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@base-ui/react/collapsible/panel/useCollapsiblePanel.mjs","../../../../../node_modules/.pnpm/@base-ui+react@1.9.0_@types+react@19.3.0_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@base-ui/react/accordion/panel/AccordionPanelCssVars.mjs","../../../../../node_modules/.pnpm/@base-ui+react@1.9.0_@types+react@19.3.0_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@base-ui/react/accordion/panel/AccordionPanel.mjs","../../../../../node_modules/.pnpm/@tempoxyz+ds@0.2.6_@types+react@19.3.0_react-dom@19.3.0_react@19.3.0__react-native@0.86_f564df10a26f3190a3aaf6288ad1f3d1/node_modules/@tempoxyz/ds/dist/web/components/Accordion.js","../../../../../node_modules/.pnpm/@tempoxyz+ds@0.2.6_@types+react@19.3.0_react-dom@19.3.0_react@19.3.0__react-native@0.86_f564df10a26f3190a3aaf6288ad1f3d1/node_modules/@tempoxyz/ds/dist/web/icons/ZoomIn.js","../../../../../node_modules/.pnpm/@tempoxyz+ds@0.2.6_@types+react@19.3.0_react-dom@19.3.0_react@19.3.0__react-native@0.86_f564df10a26f3190a3aaf6288ad1f3d1/node_modules/@tempoxyz/ds/dist/web/icons/ZoomOut.js","../../../routes/[_].flows.tsx?tsr-split=component"],"sourcesContent":["'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const AccordionRootContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") AccordionRootContext.displayName = \"AccordionRootContext\";\nexport function useAccordionRootContext() {\n const context = React.useContext(AccordionRootContext);\n if (context === undefined) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: AccordionRootContext is missing. Accordion parts must be placed within <Accordion.Root>.' : _formatErrorMessage(10));\n }\n return context;\n}","'use client';\n\nimport * as React from 'react';\nimport { useControlled } from '@base-ui/utils/useControlled';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { warn } from '@base-ui/utils/warn';\nimport { EMPTY_ARRAY } from '@base-ui/utils/empty';\nimport { CompositeList } from \"../../internals/composite/list/CompositeList.mjs\";\nimport { AccordionRootContext } from \"./AccordionRootContext.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst rootStateAttributesMapping = {\n value: () => null\n};\n\n/**\n * Groups all parts of the accordion.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Accordion](https://base-ui.com/react/components/accordion)\n */\nexport const AccordionRoot = /*#__PURE__*/React.forwardRef(function AccordionRoot(componentProps, forwardedRef) {\n const {\n render,\n className,\n disabled = false,\n hiddenUntilFound: hiddenUntilFoundProp,\n keepMounted: keepMountedProp,\n loopFocus,\n onValueChange,\n multiple = false,\n orientation = 'vertical',\n value: valueProp,\n defaultValue: defaultValueProp,\n style,\n ...elementProps\n } = componentProps;\n const defaultValue = defaultValueProp ?? EMPTY_ARRAY;\n\n /* istanbul ignore else -- `process.env.NODE_ENV` is a build-time constant under test */\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useEffect(() => {\n if (hiddenUntilFoundProp && keepMountedProp === false) {\n warn('The `keepMounted={false}` prop on `Accordion.Root` is ignored when `hiddenUntilFound` is enabled, since panels must remain mounted while closed.');\n }\n }, [hiddenUntilFoundProp, keepMountedProp]);\n }\n const accordionItemRefs = React.useRef([]);\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: 'Accordion',\n state: 'value'\n });\n const handleValueChange = useStableCallback((newValue, nextOpen, details) => {\n let nextValue;\n if (!multiple) {\n nextValue = value[0] === newValue ? [] : [newValue];\n } else if (nextOpen) {\n // Not `concat`: an item value can itself be an array, which `concat` would flatten.\n nextValue = [...value, newValue];\n } else {\n nextValue = value.filter(v => v !== newValue);\n }\n onValueChange?.(nextValue, details);\n if (details.isCanceled) {\n return;\n }\n setValue(nextValue);\n });\n const state = React.useMemo(() => ({\n value,\n disabled,\n orientation\n }), [value, disabled, orientation]);\n const contextValue = React.useMemo(() => ({\n disabled,\n handleValueChange,\n hiddenUntilFound: hiddenUntilFoundProp ?? false,\n keepMounted: keepMountedProp ?? false,\n state,\n value\n }), [disabled, handleValueChange, hiddenUntilFoundProp, keepMountedProp, state, value]);\n const element = useRenderElement('div', componentProps, {\n state,\n ref: forwardedRef,\n props: elementProps,\n stateAttributesMapping: rootStateAttributesMapping\n });\n return /*#__PURE__*/_jsx(AccordionRootContext.Provider, {\n value: contextValue,\n children: /*#__PURE__*/_jsx(CompositeList, {\n elementsRef: accordionItemRefs,\n children: element\n })\n });\n});\nif (process.env.NODE_ENV !== \"production\") AccordionRoot.displayName = \"AccordionRoot\";","'use client';\n\nimport * as React from 'react';\nimport { useControlled } from '@base-ui/utils/useControlled';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useBaseUiId } from \"../../internals/useBaseUiId.mjs\";\nimport { createChangeEventDetails } from \"../../internals/createBaseUIEventDetails.mjs\";\nimport { REASONS } from \"../../internals/reasons.mjs\";\nimport { useTransitionStatus } from \"../../internals/useTransitionStatus.mjs\";\nexport function useCollapsibleRoot(parameters) {\n const {\n open: openParam,\n defaultOpen = false,\n onOpenChange,\n disabled\n } = parameters;\n const [open, setOpen] = useControlled({\n controlled: openParam,\n default: defaultOpen,\n name: 'Collapsible',\n state: 'open'\n });\n const {\n mounted,\n setMounted,\n transitionStatus\n } = useTransitionStatus(open, true, true);\n const defaultPanelId = useBaseUiId();\n // `undefined` uses the initial generated fallback; `null` means the panel unmounted.\n const [registeredPanelId, setPanelIdState] = React.useState();\n const panelId = registeredPanelId === null ? undefined : registeredPanelId ?? defaultPanelId;\n const handleTrigger = useStableCallback(event => {\n const nextOpen = !open;\n const eventDetails = createChangeEventDetails(REASONS.triggerPress, event.nativeEvent);\n onOpenChange(nextOpen, eventDetails);\n if (eventDetails.isCanceled) {\n return;\n }\n setOpen(nextOpen);\n });\n return React.useMemo(() => ({\n defaultPanelId,\n disabled,\n handleTrigger,\n mounted,\n open,\n panelId,\n setMounted,\n setOpen,\n setPanelIdState,\n transitionStatus\n }), [defaultPanelId, disabled, handleTrigger, mounted, open, panelId, setMounted, setOpen, setPanelIdState, transitionStatus]);\n}","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const CollapsibleRootContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") CollapsibleRootContext.displayName = \"CollapsibleRootContext\";\nexport function useCollapsibleRootContext() {\n const context = React.useContext(CollapsibleRootContext);\n if (context === undefined) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: CollapsibleRootContext is missing. Collapsible parts must be placed within <Collapsible.Root>.' : _formatErrorMessage(15));\n }\n return context;\n}","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const AccordionItemContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") AccordionItemContext.displayName = \"AccordionItemContext\";\nexport function useAccordionItemContext() {\n const context = React.useContext(AccordionItemContext);\n if (context === undefined) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: AccordionItemContext is missing. Accordion parts must be placed within <Accordion.Item>.' : _formatErrorMessage(9));\n }\n return context;\n}","import { TransitionStatusDataAttributes } from \"../../internals/stateAttributesMapping.mjs\";\n\n/**\n * Present when the collapsible panel is open.\n */\nexport const open = 'data-open';\n/**\n * Present when the collapsible panel is closed.\n */\nexport const closed = 'data-closed';\n/**\n * Present when the panel begins animating in.\n */\nexport const startingStyle = TransitionStatusDataAttributes.startingStyle;\n/**\n * Present when the panel is animating out.\n */\nexport const endingStyle = TransitionStatusDataAttributes.endingStyle;","/**\n * Present when the collapsible panel is open.\n */\nexport const panelOpen = 'data-panel-open';","import * as CollapsiblePanelDataAttributes from \"../collapsible/panel/CollapsiblePanelDataAttributes.mjs\";\nimport * as CollapsibleTriggerDataAttributes from \"../collapsible/trigger/CollapsibleTriggerDataAttributes.mjs\";\nconst PANEL_OPEN_HOOK = {\n [CollapsiblePanelDataAttributes.open]: ''\n};\nconst PANEL_CLOSED_HOOK = {\n [CollapsiblePanelDataAttributes.closed]: ''\n};\nexport const triggerOpenStateMapping = {\n open(value) {\n if (value) {\n return {\n [CollapsibleTriggerDataAttributes.panelOpen]: ''\n };\n }\n return null;\n }\n};\nexport const collapsibleOpenStateMapping = {\n open(value) {\n if (value) {\n return PANEL_OPEN_HOOK;\n }\n return PANEL_CLOSED_HOOK;\n }\n};","/**\n * Indicates the index of the accordion item.\n * @type {number}\n */\nexport const index = 'data-index';\n/**\n * Present when the accordion item is disabled.\n */\nexport const disabled = 'data-disabled';\n/**\n * Present when the accordion item is open.\n */\nexport const open = 'data-open';","import { collapsibleOpenStateMapping as baseMapping } from \"../../utils/collapsibleOpenStateMapping.mjs\";\nimport { transitionStatusMapping } from \"../../internals/stateAttributesMapping.mjs\";\nimport * as AccordionItemDataAttributes from \"./AccordionItemDataAttributes.mjs\";\nexport const accordionStateAttributesMapping = {\n ...baseMapping,\n index: value => ({\n [AccordionItemDataAttributes.index]: String(value)\n }),\n ...transitionStatusMapping,\n value: () => null\n};","'use client';\n\nimport * as React from 'react';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useBaseUiId } from \"../../internals/useBaseUiId.mjs\";\nimport { useCollapsibleRoot } from \"../../collapsible/root/useCollapsibleRoot.mjs\";\nimport { CollapsibleRootContext } from \"../../collapsible/root/CollapsibleRootContext.mjs\";\nimport { useCompositeListItem } from \"../../internals/composite/list/useCompositeListItem.mjs\";\nimport { useAccordionRootContext } from \"../root/AccordionRootContext.mjs\";\nimport { AccordionItemContext } from \"./AccordionItemContext.mjs\";\nimport { accordionStateAttributesMapping } from \"./stateAttributesMapping.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Groups an accordion header with the corresponding panel.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Accordion](https://base-ui.com/react/components/accordion)\n */\nexport const AccordionItem = /*#__PURE__*/React.forwardRef(function AccordionItem(componentProps, forwardedRef) {\n const {\n className,\n disabled: disabledProp = false,\n onOpenChange: onOpenChangeProp,\n render,\n value: valueProp,\n style,\n ...elementProps\n } = componentProps;\n const {\n ref: listItemRef,\n index\n } = useCompositeListItem();\n const {\n disabled: contextDisabled,\n handleValueChange,\n state: rootState,\n value: openValues\n } = useAccordionRootContext();\n const fallbackValue = useBaseUiId();\n const value = valueProp ?? fallbackValue;\n const disabled = disabledProp || contextDisabled;\n const isOpen = openValues.includes(value);\n const onOpenChange = useStableCallback((nextOpen, eventDetails) => {\n onOpenChangeProp?.(nextOpen, eventDetails);\n if (eventDetails.isCanceled) {\n return;\n }\n handleValueChange(value, nextOpen, eventDetails);\n });\n const collapsible = useCollapsibleRoot({\n open: isOpen,\n onOpenChange,\n disabled\n });\n const collapsibleContext = React.useMemo(() => ({\n ...collapsible,\n onOpenChange,\n state: {\n open: collapsible.open,\n disabled: collapsible.disabled,\n transitionStatus: collapsible.transitionStatus\n }\n }), [collapsible, onOpenChange]);\n const state = React.useMemo(() => ({\n ...rootState,\n hidden: !isOpen && !collapsible.mounted,\n index,\n disabled,\n open: isOpen\n }), [collapsible.mounted, disabled, index, isOpen, rootState]);\n const defaultTriggerId = useBaseUiId();\n // `undefined` uses the initial generated fallback; `null` means the trigger unmounted.\n const [registeredTriggerId, setTriggerId] = React.useState();\n const triggerId = registeredTriggerId === null ? undefined : registeredTriggerId ?? defaultTriggerId;\n const accordionItemContext = React.useMemo(() => ({\n defaultTriggerId,\n open: isOpen,\n state,\n setTriggerId,\n triggerId\n }), [defaultTriggerId, isOpen, state, setTriggerId, triggerId]);\n const element = useRenderElement('div', componentProps, {\n state,\n ref: [forwardedRef, listItemRef],\n props: elementProps,\n stateAttributesMapping: accordionStateAttributesMapping\n });\n return /*#__PURE__*/_jsx(CollapsibleRootContext.Provider, {\n value: collapsibleContext,\n children: /*#__PURE__*/_jsx(AccordionItemContext.Provider, {\n value: accordionItemContext,\n children: element\n })\n });\n});\nif (process.env.NODE_ENV !== \"production\") AccordionItem.displayName = \"AccordionItem\";","'use client';\n\nimport * as React from 'react';\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useAccordionItemContext } from \"../item/AccordionItemContext.mjs\";\nimport { accordionStateAttributesMapping } from \"../item/stateAttributesMapping.mjs\";\n\n/**\n * A heading that labels the corresponding panel.\n * Renders an `<h3>` element.\n *\n * Documentation: [Base UI Accordion](https://base-ui.com/react/components/accordion)\n */\nexport const AccordionHeader = /*#__PURE__*/React.forwardRef(function AccordionHeader(componentProps, forwardedRef) {\n const {\n render,\n className,\n style,\n ...elementProps\n } = componentProps;\n const {\n state\n } = useAccordionItemContext();\n const element = useRenderElement('h3', componentProps, {\n state,\n ref: forwardedRef,\n props: elementProps,\n stateAttributesMapping: accordionStateAttributesMapping\n });\n return element;\n});\nif (process.env.NODE_ENV !== \"production\") AccordionHeader.displayName = \"AccordionHeader\";","'use client';\n\nimport * as React from 'react';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { triggerOpenStateMapping } from \"../../utils/collapsibleOpenStateMapping.mjs\";\nimport { useButton } from \"../../internals/use-button/index.mjs\";\nimport { useCollapsibleRootContext } from \"../../collapsible/root/CollapsibleRootContext.mjs\";\nimport { useAccordionItemContext } from \"../item/AccordionItemContext.mjs\";\nimport { accordionStateAttributesMapping } from \"../item/stateAttributesMapping.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nconst stateAttributesMapping = {\n ...accordionStateAttributesMapping,\n ...triggerOpenStateMapping\n};\n\n/**\n * A button that opens and closes the corresponding panel.\n * Renders a `<button>` element.\n *\n * Documentation: [Base UI Accordion](https://base-ui.com/react/components/accordion)\n */\n\nexport const AccordionTrigger = /*#__PURE__*/React.forwardRef(function AccordionTrigger(componentProps, forwardedRef) {\n const {\n disabled: disabledProp,\n className,\n id: idProp,\n render,\n nativeButton = true,\n style,\n ...elementProps\n } = componentProps;\n const {\n panelId,\n open,\n handleTrigger,\n disabled: contextDisabled\n } = useCollapsibleRootContext();\n const disabled = disabledProp || contextDisabled;\n const {\n getButtonProps,\n buttonRef\n } = useButton({\n disabled,\n native: nativeButton\n });\n const {\n defaultTriggerId,\n state,\n setTriggerId\n } = useAccordionItemContext();\n const registeredId = idProp || undefined;\n const id = registeredId ?? defaultTriggerId;\n useIsoLayoutEffect(() => {\n setTriggerId(currentId => registeredId ?? (currentId === null ? undefined : currentId));\n return () => {\n setTriggerId(currentId => currentId === registeredId ? null : currentId);\n };\n }, [registeredId, setTriggerId]);\n const props = {\n 'aria-controls': open ? panelId : undefined,\n 'aria-expanded': open,\n id,\n onClick: handleTrigger\n };\n const element = useRenderElement('button', componentProps, {\n state,\n ref: [forwardedRef, buttonRef],\n props: [props, elementProps, getButtonProps],\n stateAttributesMapping\n });\n return element;\n});\nif (process.env.NODE_ENV !== \"production\") AccordionTrigger.displayName = \"AccordionTrigger\";","'use client';\n\nimport * as React from 'react';\nimport { addEventListener } from '@base-ui/utils/addEventListener';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useMergedRefs } from '@base-ui/utils/useMergedRefs';\nimport { AnimationFrame } from '@base-ui/utils/useAnimationFrame';\nimport { Timeout } from '@base-ui/utils/useTimeout';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useValueAsRef } from '@base-ui/utils/useValueAsRef';\nimport { warn } from '@base-ui/utils/warn';\nimport { ownerWindow } from '@base-ui/utils/owner';\nimport { createChangeEventDetails } from \"../../internals/createBaseUIEventDetails.mjs\";\nimport { REASONS } from \"../../internals/reasons.mjs\";\nimport { useOpenChangeComplete } from \"../../internals/useOpenChangeComplete.mjs\";\nimport { useAnimationsFinished } from \"../../internals/useAnimationsFinished.mjs\";\nimport * as CollapsiblePanelDataAttributes from \"./CollapsiblePanelDataAttributes.mjs\";\nconst EMPTY_DIMENSIONS = {\n height: undefined,\n width: undefined\n};\nexport function useCollapsiblePanel(parameters) {\n const {\n externalRef,\n hiddenUntilFound,\n id: idParam,\n keepMounted,\n mounted,\n onOpenChange,\n open,\n setMounted,\n setOpen,\n transitionStatus\n } = parameters;\n const panelRef = React.useRef(null);\n const animationTypeRef = React.useRef(null);\n const [dimensions, setDimensionsUnwrapped] = React.useState(EMPTY_DIMENSIONS);\n const lastMeasuredDimensionsRef = React.useRef(EMPTY_DIMENSIONS);\n // `beforematch` should reveal the matched content immediately, so the next\n // open cycle skips author-defined motion once and then returns to normal.\n const shouldSkipNextOpenRef = React.useRef(false);\n // Keyframe mount animations on initially open panels cause a visible layout\n // shift during the server-rendered first paint, so suppress that first open\n // lifecycle until the panel has been closed once.\n const shouldPreventMountAnimationRef = React.useRef(open);\n // React.Activity tears down Effects while preserving state, so revealing an\n // already-open panel would otherwise replay its CSS keyframe open animation.\n const shouldPreventActivityResumeAnimationRef = React.useRef(false);\n // Some open paths intentionally bypass motion, but the shared root transition\n // status still advances asynchronously. Override the panel to idle so its data\n // attributes and dimension cleanup reflect the immediate open state.\n const [forcePanelIdle, setForcePanelIdle] = React.useState(false);\n const pendingTemporaryStyleRestoreRef = React.useRef(null);\n const mergedPanelRef = useMergedRefs(externalRef, panelRef);\n const latestOpenRef = useValueAsRef(open);\n // Only used to handle panel close\n const runOnceCloseAnimationsFinish = useAnimationsFinished(panelRef);\n const hidden = !open && !mounted;\n const panelTransitionStatus = forcePanelIdle ? 'idle' : transitionStatus;\n const shouldPreventOpenAnimation = open && (\n // These 2 refs are safe to read in render, they are only written from committed\n // layout/effect paths and gate one-shot motion suppression for the next open\n // lifecycle. They intentionally expose the last committed motion snapshot.\n shouldPreventMountAnimationRef.current || shouldPreventActivityResumeAnimationRef.current);\n const renderedDimensions = !open && mounted &&\n // These 2 refs are also safe to read in render, both hold the last committed\n // animation mode and measurement. This fallback only restores a previously\n // measured pixel size after the live dimensions state has been reset back to `auto`.\n animationTypeRef.current === 'css-animation' && dimensions.height === undefined && dimensions.width === undefined ? lastMeasuredDimensionsRef.current : dimensions;\n const shouldPersistHiddenTransitionStyles = hiddenUntilFound && hidden && animationTypeRef.current !== 'css-animation';\n\n // Most measured dimensions are reused later when CSS keyframe closes need a\n // pixel size after the rendered dimensions have been reset back to `auto`.\n // Passing `false` is only for clearing the current dimensions state.\n const setDimensions = useStableCallback((nextDimensions, shouldCacheMeasurement = true) => {\n if (shouldCacheMeasurement) {\n lastMeasuredDimensionsRef.current = nextDimensions;\n }\n setDimensionsUnwrapped(nextDimensions);\n });\n const restorePendingTemporaryStyle = useStableCallback(() => {\n pendingTemporaryStyleRestoreRef.current?.();\n pendingTemporaryStyleRestoreRef.current = null;\n });\n const setPendingTemporaryStyleRestore = useStableCallback(restore => {\n restorePendingTemporaryStyle();\n pendingTemporaryStyleRestoreRef.current = () => {\n pendingTemporaryStyleRestoreRef.current = null;\n restore();\n };\n });\n\n // React.Activity unmounts Effects while preserving component state. If that\n // teardown happens while an already-open keyframe panel is visible, remember\n // to suppress the replayed open animation on the next committed reveal.\n const markActivityResumeAnimationSuppressed = useStableCallback(() => {\n if (open && mounted && animationTypeRef.current === 'css-animation') {\n shouldPreventActivityResumeAnimationRef.current = true;\n }\n });\n useIsoLayoutEffect(() => {\n // `forcePanelIdle` is only a temporary override for open paths that skip\n // motion. Keep it active while the shared root still reports `starting`,\n // then drop it once the root transition state catches up.\n if (!forcePanelIdle || transitionStatus === 'starting') {\n return;\n }\n setForcePanelIdle(false);\n }, [forcePanelIdle, transitionStatus]);\n React.useEffect(() => {\n return () => {\n markActivityResumeAnimationSuppressed();\n restorePendingTemporaryStyle();\n };\n }, [markActivityResumeAnimationSuppressed, restorePendingTemporaryStyle]);\n useIsoLayoutEffect(() => {\n // A render function can remove the panel on close. Clear one-shot open animation\n // suppression even without an element, so the next open animates normally.\n if (!open) {\n shouldPreventMountAnimationRef.current = false;\n shouldPreventActivityResumeAnimationRef.current = false;\n }\n const panel = panelRef.current;\n if (!panel) {\n return undefined;\n }\n\n // `beforematch` can temporarily force a `0s` motion duration so the matched\n // content reveals immediately. Restore the authored duration before detecting\n // the next close animation type, otherwise that first close is misread as\n // \"no motion\" and the close transition or keyframe gets skipped.\n if (!open && pendingTemporaryStyleRestoreRef.current) {\n restorePendingTemporaryStyle();\n }\n const animationType = getAnimationType(panel, shouldPreventOpenAnimation);\n animationTypeRef.current = animationType;\n\n // Initially open keyframe panels skip their first paint animation to avoid\n // layout shift, but we still need to cache the expanded size so the first\n // close animation can start from pixels instead of `auto`.\n if (open && transitionStatus === 'idle' && shouldPreventMountAnimationRef.current && animationType === 'css-animation') {\n lastMeasuredDimensionsRef.current = getDimensions(panel);\n return undefined;\n }\n\n // Handle the opening pass: measure the expanded size and, when necessary,\n // neutralize author-defined motion so the panel can open immediately.\n if (open && transitionStatus === 'starting') {\n // `beforematch` opens should reveal the panel immediately so find-in-page\n // does not wait for the author-defined transition or animation to finish.\n const skipNextOpen = shouldSkipNextOpenRef.current;\n shouldSkipNextOpenRef.current = false;\n if (animationType === 'none') {\n setDimensions(getDimensions(panel));\n setForcePanelIdle(true);\n return undefined;\n }\n if (animationType === 'css-transition') {\n const restoreLayoutStyles = resetLayoutStyles(panel);\n setDimensions(getDimensions(panel));\n if (!skipNextOpen) {\n return restoreLayoutStyles;\n }\n const restoreTransitionDuration = setTemporaryStyle(panel, 'transition-duration', '0s');\n setPendingTemporaryStyleRestore(restoreTransitionDuration);\n setForcePanelIdle(true);\n return restoreLayoutStyles;\n }\n setDimensions(getDimensions(panel));\n const restoreAnimationName = setTemporaryStyle(panel, 'animation-name', 'none');\n if (!skipNextOpen) {\n restoreAnimationName();\n return undefined;\n }\n const restoreAnimationDuration = setTemporaryStyle(panel, 'animation-duration', '0s');\n restoreAnimationName();\n setPendingTemporaryStyleRestore(restoreAnimationDuration);\n setForcePanelIdle(true);\n return undefined;\n }\n\n // Capture the current size as soon as close is requested, before the\n // deferred ending phase applies closed styles. This keeps close transitions\n // starting from a measured pixel value, including interrupted opens.\n if (!open && mounted && (transitionStatus === 'idle' || transitionStatus === 'starting')) {\n if (animationType === 'none') {\n setDimensions(EMPTY_DIMENSIONS, false);\n setMounted(false);\n return undefined;\n }\n setDimensions(getDimensions(panel));\n return undefined;\n }\n if (transitionStatus !== 'ending') {\n return undefined;\n }\n\n // Reachable when `transitionStatus` already flipped to `ending` before this effect ran, so\n // the close branch above was skipped. Without motion there is nothing to wait for, so unmount\n // here instead of deferring to the animation-finished path below.\n if (animationType === 'none') {\n setMounted(false);\n return undefined;\n }\n const nextDimensions = getDimensions(panel);\n const hasMeasuredSize = nextDimensions.height > 0 || nextDimensions.width > 0;\n if (!hasMeasuredSize) {\n setMounted(false);\n return undefined;\n }\n setDimensions(nextDimensions);\n if (animationType === 'css-animation') {\n const restoreAnimationName = setTemporaryStyle(panel, 'animation-name', 'none');\n restoreAnimationName();\n }\n return undefined;\n }, [mounted, open, restorePendingTemporaryStyle, setDimensions, setMounted, setPendingTemporaryStyleRestore, shouldPreventOpenAnimation, transitionStatus]);\n useOpenChangeComplete({\n enabled: open && mounted && panelTransitionStatus === 'idle',\n open: true,\n ref: panelRef,\n onComplete() {\n // `useOpenChangeComplete` only aborts from its effect cleanup, which React runs in the\n // post-paint passive flush. An animation's `finished` microtask can resolve after the render\n // that set `open` to `false` but before that cleanup, so re-check the latest value here.\n // Clearing the measured size in that window would make the close transition start from\n // `height: 0` instead of the expanded pixel height.\n if (!open) {\n return;\n }\n setDimensions(EMPTY_DIMENSIONS, false);\n }\n });\n\n // Closing panels need extra sequencing beyond `useOpenChangeComplete`.\n // This passive effect runs after the `ending` render has committed, so\n // `[data-ending-style]` is already present. Chrome can still register the\n // exit transition one frame later when an Accordion closes one item while\n // opening another, so wait one frame before watching animations.\n // See https://github.com/mui/base-ui/issues/3099\n React.useEffect(() => {\n if (open || !mounted || panelTransitionStatus !== 'ending') {\n return undefined;\n }\n const panel = panelRef.current;\n if (!panel) {\n // A render function can drop the panel element while it closes. There is nothing left\n // to animate, so finish closing instead of staying in the ending phase.\n setMounted(false);\n setDimensions(EMPTY_DIMENSIONS, false);\n return undefined;\n }\n const abortController = new AbortController();\n let endingStyleFrame = -1;\n function handleComplete() {\n // Same post-paint race as the `useOpenChangeComplete` callback above, except `open` is\n // captured by this effect's closure and always `false` here, so read the latest value from\n // a ref. Unmounting a panel that has already reopened would drop it from the DOM.\n if (latestOpenRef.current) {\n return;\n }\n setMounted(false);\n setDimensions(EMPTY_DIMENSIONS, false);\n }\n endingStyleFrame = AnimationFrame.request(() => {\n runOnceCloseAnimationsFinish(handleComplete, abortController.signal);\n });\n return () => {\n AnimationFrame.cancel(endingStyleFrame);\n abortController.abort();\n };\n }, [latestOpenRef, mounted, open, panelTransitionStatus, runOnceCloseAnimationsFinish, setDimensions, setMounted]);\n useIsoLayoutEffect(() => {\n const panel = panelRef.current;\n if (!panel || !hiddenUntilFound || !hidden) {\n return;\n }\n\n // React only supports a boolean for the `hidden` attribute and forces\n // legit string values to booleans so we have to force it back in the DOM\n // when necessary: https://github.com/react/react/issues/24740\n panel.setAttribute('hidden', 'until-found');\n }, [hidden, hiddenUntilFound]);\n React.useEffect(function registerBeforeMatchListener() {\n const panel = panelRef.current;\n if (!panel) {\n return undefined;\n }\n const revealDecisionTimeout = Timeout.create();\n let revertRevealFrame = -1;\n\n // Reverting must wait until the browser has measured the match, and React\n // cannot do it: it keeps rendering the same `hidden` and `data-starting-style`\n // props while the panel stays closed, so it never rewrites attributes that were\n // changed behind its back (the browser removes `hidden` as part of the reveal).\n //\n // Whether the open arrived is decided in a task, not a frame: `setOpen` has\n // already scheduled React's own task by the time the timeout is queued, so the\n // decision drains after the commit even when a busy main thread delays both,\n // whereas a rendering update could preempt the still-queued commit and make an\n // animation frame read a stale value. When the consumer ignores the open, no\n // commit is ever scheduled and the decision holds. The DOM revert then runs\n // in a frame so it stays atomic with respect to paint.\n const scheduleRevealRevert = (revertSkippedMotion, restoreStartingStyle) => {\n revealDecisionTimeout.start(0, () => {\n if (latestOpenRef.current) {\n return;\n }\n revertRevealFrame = AnimationFrame.request(() => {\n if (latestOpenRef.current) {\n return;\n }\n if (revertSkippedMotion) {\n // The open never happened, so the next one is an ordinary open that\n // should keep its author-defined motion.\n shouldSkipNextOpenRef.current = false;\n }\n if (restoreStartingStyle) {\n panel.setAttribute(CollapsiblePanelDataAttributes.startingStyle, '');\n }\n panel.setAttribute('hidden', 'until-found');\n });\n });\n };\n\n // Declared as a `const` after the null check so `panel` stays narrowed: the\n // handler must touch the same element the listener is attached to.\n const handleBeforeMatch = event => {\n const eventDetails = createChangeEventDetails(REASONS.none, event);\n onOpenChange(true, eventDetails);\n if (eventDetails.isCanceled) {\n // A canceled reveal means the panel must stay hidden, so undo the\n // browser's removal of `hidden` and keep the content searchable.\n scheduleRevealRevert(false, false);\n return;\n }\n shouldSkipNextOpenRef.current = true;\n\n // The browser removes `hidden` and measures the match in the same task that\n // dispatches this event, while the React state update below only lands in a\n // later one. Panels kept collapsed by persisted starting styles would still\n // be zero-sized at that point and the match highlight is dropped, so drop\n // those styles synchronously here.\n const hadStartingStyle = panel.hasAttribute(CollapsiblePanelDataAttributes.startingStyle);\n panel.removeAttribute(CollapsiblePanelDataAttributes.startingStyle);\n setOpen(true);\n\n // A controlled panel whose `onOpenChange` is ignored never receives the open\n // state, so return it to the fully closed state once the browser has measured.\n scheduleRevealRevert(true, hadStartingStyle);\n };\n const cleanupBeforeMatchListener = addEventListener(panel, 'beforematch', handleBeforeMatch);\n return () => {\n revealDecisionTimeout.clear();\n AnimationFrame.cancel(revertRevealFrame);\n cleanupBeforeMatchListener();\n };\n }, [latestOpenRef, onOpenChange, setOpen]);\n const shouldRender = keepMounted || hiddenUntilFound || mounted || open;\n return {\n height: renderedDimensions.height,\n props: {\n ...(shouldPersistHiddenTransitionStyles ? {\n [CollapsiblePanelDataAttributes.startingStyle]: ''\n } : undefined),\n hidden,\n id: idParam\n },\n ref: mergedPanelRef,\n shouldPreventOpenAnimation,\n shouldRender,\n transitionStatus: panelTransitionStatus,\n width: renderedDimensions.width\n };\n}\nfunction getDimensions(element) {\n return {\n height: element.scrollHeight,\n width: element.scrollWidth\n };\n}\nfunction getAnimationType(element, hasSuppressedMountAnimation) {\n const panelStyles = ownerWindow(element).getComputedStyle(element);\n const hasAnimation = (panelStyles.animationName.split(',').map(name => name.trim()).some(name => name !== '' && name !== 'none') || hasSuppressedMountAnimation) && hasNonZeroDuration(panelStyles.animationDuration);\n const hasTransition = hasNonZeroDuration(panelStyles.transitionDuration);\n if (hasAnimation && hasTransition) {\n /* istanbul ignore else -- `process.env.NODE_ENV` is a build-time constant under test */\n if (process.env.NODE_ENV !== 'production') {\n warn('CSS transitions and CSS animations both detected on Collapsible or Accordion panel.', 'Only one of either animation type should be used.');\n }\n return 'css-transition';\n }\n if (hasTransition) {\n return 'css-transition';\n }\n if (hasAnimation) {\n return 'css-animation';\n }\n return 'none';\n}\nfunction hasNonZeroDuration(value) {\n return value.split(',').map(part => part.trim()).some(part => part !== '' && Number.parseFloat(part) > 0);\n}\n\n/**\n * Temporarily overrides an inline style property and returns a cleanup that\n * restores the previous inline value and priority.\n * @param element - The element whose inline style should be updated.\n * @param property - The CSS property name to override.\n * @param value - The temporary value to assign.\n * @returns A cleanup function that restores the original inline style state.\n */\nfunction setTemporaryStyle(element, property, value) {\n const previousValue = element.style.getPropertyValue(property);\n const previousPriority = element.style.getPropertyPriority(property);\n element.style.setProperty(property, value);\n return () => {\n if (previousValue === '') {\n element.style.removeProperty(property);\n return;\n }\n element.style.setProperty(property, previousValue, previousPriority);\n };\n}\n\n/**\n * Temporarily resets inline alignment styles that can distort scroll-based\n * size measurements, then restores them on the next animation frame.\n * @param element - The panel element being measured.\n * @returns A cleanup function that cancels the scheduled restore and reapplies\n * the original inline layout styles immediately.\n */\nfunction resetLayoutStyles(element) {\n const originalLayoutStyles = {\n 'justify-content': element.style.justifyContent,\n 'align-items': element.style.alignItems,\n 'align-content': element.style.alignContent,\n 'justify-items': element.style.justifyItems\n };\n Object.keys(originalLayoutStyles).forEach(key => {\n element.style.setProperty(key, 'initial', 'important');\n });\n function restoreLayoutStyles() {\n Object.entries(originalLayoutStyles).forEach(([key, value]) => {\n if (value === '') {\n element.style.removeProperty(key);\n return;\n }\n element.style.setProperty(key, value);\n });\n }\n const frame = AnimationFrame.request(restoreLayoutStyles);\n return () => {\n AnimationFrame.cancel(frame);\n restoreLayoutStyles();\n };\n}","/**\n * The accordion panel's height.\n * @type {number}\n */\nexport const accordionPanelHeight = '--accordion-panel-height';\n/**\n * The accordion panel's width.\n * @type {number}\n */\nexport const accordionPanelWidth = '--accordion-panel-width';","'use client';\n\nimport * as React from 'react';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { warn } from '@base-ui/utils/warn';\nimport { resolveStyle } from \"../../utils/resolveStyle.mjs\";\nimport { useCollapsibleRootContext } from \"../../collapsible/root/CollapsibleRootContext.mjs\";\nimport { useCollapsiblePanel } from \"../../collapsible/panel/useCollapsiblePanel.mjs\";\nimport { useAccordionRootContext } from \"../root/AccordionRootContext.mjs\";\nimport { useAccordionItemContext } from \"../item/AccordionItemContext.mjs\";\nimport { accordionStateAttributesMapping } from \"../item/stateAttributesMapping.mjs\";\nimport * as AccordionPanelCssVars from \"./AccordionPanelCssVars.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\n/**\n * A collapsible panel with the accordion item contents.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Accordion](https://base-ui.com/react/components/accordion)\n */\nexport const AccordionPanel = /*#__PURE__*/React.forwardRef(function AccordionPanel(componentProps, forwardedRef) {\n const {\n className,\n hiddenUntilFound: hiddenUntilFoundProp,\n keepMounted: keepMountedProp,\n id: idProp,\n render,\n style,\n ...elementProps\n } = componentProps;\n const {\n hiddenUntilFound: contextHiddenUntilFound,\n keepMounted: contextKeepMounted\n } = useAccordionRootContext();\n const {\n defaultPanelId,\n mounted,\n onOpenChange,\n open,\n setMounted,\n setOpen,\n setPanelIdState,\n transitionStatus\n } = useCollapsibleRootContext();\n const hiddenUntilFound = hiddenUntilFoundProp ?? contextHiddenUntilFound;\n const keepMounted = keepMountedProp ?? contextKeepMounted;\n const registeredId = idProp || undefined;\n const id = idProp ?? defaultPanelId;\n\n /* istanbul ignore else -- `process.env.NODE_ENV` is a build-time constant under test */\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useEffect(() => {\n if (keepMountedProp === false && hiddenUntilFound) {\n warn('The `keepMounted={false}` prop on an `Accordion.Panel` is ignored when `hiddenUntilFound` is enabled on the panel or root, since the panel must remain mounted while closed.');\n }\n }, [hiddenUntilFound, keepMountedProp]);\n }\n useIsoLayoutEffect(() => {\n setPanelIdState(currentId => registeredId ?? (currentId === null ? undefined : currentId));\n return () => {\n setPanelIdState(currentId => currentId === registeredId ? null : currentId);\n };\n }, [registeredId, setPanelIdState]);\n const {\n height,\n props,\n ref,\n shouldPreventOpenAnimation,\n shouldRender,\n transitionStatus: panelTransitionStatus,\n width\n } = useCollapsiblePanel({\n externalRef: forwardedRef,\n hiddenUntilFound,\n id,\n keepMounted,\n mounted,\n onOpenChange,\n open,\n setMounted,\n setOpen,\n transitionStatus\n });\n const {\n state,\n triggerId\n } = useAccordionItemContext();\n const panelState = {\n ...state,\n transitionStatus: panelTransitionStatus\n };\n const resolvedStyle = resolveStyle(style, panelState);\n const element = useRenderElement('div', {\n ...componentProps,\n style: undefined\n }, {\n state: panelState,\n ref,\n props: [props, {\n 'aria-labelledby': triggerId,\n role: 'region',\n style: {\n [AccordionPanelCssVars.accordionPanelHeight]: height === undefined ? 'auto' : `${height}px`,\n [AccordionPanelCssVars.accordionPanelWidth]: width === undefined ? 'auto' : `${width}px`\n }\n }, elementProps, resolvedStyle ? {\n style: resolvedStyle\n } : undefined,\n // Resolve the public `style` prop so temporary `animationName: 'none'`\n // can still win after user's inline styles have been merged.\n shouldPreventOpenAnimation ? {\n style: {\n animationName: 'none'\n }\n } : undefined],\n stateAttributesMapping: accordionStateAttributesMapping\n });\n if (!shouldRender) {\n return null;\n }\n return element;\n});\nif (process.env.NODE_ENV !== \"production\") AccordionPanel.displayName = \"AccordionPanel\";","\nimport { Props as __zyzzProps } from 'zyzz/runtime';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as BaseUi from '@base-ui/react/accordion';\nimport { ChevronDown } from '../icons/ChevronDown.js';\nimport { style, variants } from '../zyzz.config.js';\n/**\n * A stack of collapsible sections built on Base UI Accordion. Each `Trigger` is a `<button>`\n * with `aria-expanded` inside an `<h3>`, and Enter or Space toggles its `role=\"region\"` panel.\n * One item opens at a time unless `multiple` is set on `Root`.\n *\n * - Write trigger labels that summarize the hidden panel content.\n * - Keep content most people need visible, since collapsed content is easy to miss.\n * - Headers always render as `<h3>`, so place the accordion where that level fits the outline.\n * - Set `hiddenUntilFound` so the browser's find in page can reach and open collapsed panels.\n *\n * @example\n * <Accordion.Root>\n * <Accordion.Item value=\"fees\">\n * <Accordion.Trigger>What are the fees?</Accordion.Trigger>\n * <Accordion.Panel>Transfers cost a flat network fee.</Accordion.Panel>\n * </Accordion.Item>\n * </Accordion.Root>\n *\n * @see {@link https://base-ui.com/react/components/accordion | Base UI Accordion}\n * @see {@link https://www.w3.org/WAI/ARIA/apg/patterns/accordion/ | WAI-ARIA APG Accordion pattern}\n * @see {@link https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html | WCAG 2.2 Name, Role, Value}\n * @see {@link https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html | WCAG 2.2 Info and Relationships}\n * @see {@link https://www.w3.org/WAI/WCAG22/Understanding/focus-visible.html | WCAG 2.2 Focus Visible}\n */\nexport var Accordion;\n(function (Accordion) {\n /**\n * Groups one trigger with its panel. `value` identifies the item in the root's `value` array\n * and is generated when omitted. `onOpenChange` reports this item's open state.\n */\n function Item(props) {\n const { className, vars, ...attributes } = props;\n return (_jsx(BaseUi.Accordion.Item, { ...attributes, ...styles.item({ className, style: props.style, vars }) }));\n }\n Accordion.Item = Item;\n /**\n * The collapsible `role=\"region\"` that animates its height open and closed. It unmounts while\n * closed unless `keepMounted` or `hiddenUntilFound` is set.\n */\n function Panel(props) {\n const { children, className, vars, ...attributes } = props;\n return (_jsx(BaseUi.Accordion.Panel, { ...attributes, ...styles.panel({ className, style: props.style, vars }), children: _jsx(\"div\", { ...styles.content(), children: children }) }));\n }\n Accordion.Panel = Panel;\n /**\n * Owns which items are open, as an array of item values. `size` sets every trigger to 32, 40\n * or 56px. Set `multiple` to let several items stay open.\n */\n function Root(props) {\n const { className, size, vars, ...attributes } = props;\n return (_jsx(BaseUi.Accordion.Root, { ...attributes, ...styles.root({ className, size, style: props.style, vars }) }));\n }\n Accordion.Root = Root;\n /**\n * Renders the `<h3>` header and the full-width `<button>` that toggles the panel, followed by a\n * chevron that flips while open. `ref`, `className` and `style` reach the button.\n */\n function Trigger(props) {\n const { children, className, vars, ...attributes } = props;\n return (_jsx(BaseUi.Accordion.Header, { ...styles.header(), children: _jsxs(BaseUi.Accordion.Trigger, { ...attributes, \"data-accordion-trigger\": \"\", ...styles.trigger({ className, style: props.style, vars }), children: [children, _jsx(ChevronDown, { ...styles.icon() })] }) }));\n }\n Accordion.Trigger = Trigger;\n})(Accordion || (Accordion = {}));\nvar styles;\n(function (styles) {\n styles.content = /*#__PURE__*/__zyzzProps.create({className:\"z_tds_2f_web-ctC8Bx0 z_tds_2f_web-ctC8Bx1 z_tds_2f_web-ctC8Bx2 z_tds_2f_web-ctC8Bx3 z_tds_2f_web-ctC8Bx4 z_tds_2f_web-ctC8Bx5 z_tds_2f_web-ctC8Bx6\"});\n styles.header = /*#__PURE__*/__zyzzProps.create({className:\"z_tds_2f_web-ctC8Bx7\"});\n styles.icon = /*#__PURE__*/__zyzzProps.create({className:\"z_tds_2f_web-ctC8Bx8 z_tds_2f_web-ctC8Bx9 z_tds_2f_web-ctC8Bxa z_tds_2f_web-ctC8Bxb z_tds_2f_web-ctC8Bxc z_tds_2f_web-ctC8Bxd z_tds_2f_web-ctC8Bxe z_tds_2f_web-ctC8Bxf\"});\n styles.item = ((input={})=>{const external=input.className,style=input.style,vars=input.vars,inline=vars?{...vars,...style}:style,className=external?\"z_tds_2f_web-ctC8Bxg z_tds_2f_web-ctC8Bxh\"+\" \"+external:\"z_tds_2f_web-ctC8Bxg z_tds_2f_web-ctC8Bxh\",result=inline?{className,style:inline}:{className};let value;return result});\n styles.panel = ((input={})=>{const external=input.className,style=input.style,vars=input.vars,inline=vars?{...vars,...style}:style,className=external?\"z_tds_2f_web-ctC8Bxi z_tds_2f_web-ctC8Bxj z_tds_2f_web-ctC8Bxk z_tds_2f_web-ctC8Bxl z_tds_2f_web-ctC8Bxc z_tds_2f_web-ctC8Bxm z_tds_2f_web-ctC8Bxn z_tds_2f_web-ctC8Bxo z_tds_2f_web-ctC8Bxp\"+\" \"+external:\"z_tds_2f_web-ctC8Bxi z_tds_2f_web-ctC8Bxj z_tds_2f_web-ctC8Bxk z_tds_2f_web-ctC8Bxl z_tds_2f_web-ctC8Bxc z_tds_2f_web-ctC8Bxm z_tds_2f_web-ctC8Bxn z_tds_2f_web-ctC8Bxo z_tds_2f_web-ctC8Bxp\",result=inline?{className,style:inline}:{className};let value;return result});\n styles.root = ((input={})=>{const external=input.className,style=input.style,vars=input.vars,inline=vars?{...vars,...style}:style,className=external?\"z_tds_2f_web-ctC8Bxq z_tds_2f_web-ctC8Bxr z_tds_2f_web-ctC8Bxs z_tds_2f_web-ctC8Bxt z_tds_2f_web-ctC8Bxu z_tds_2f_web-ctC8Bxv z_tds_2f_web-ctC8Bxw z_tds_2f_web-ctC8Bxx z_tds_2f_web-ctC8Bxy z_tds_2f_web-ctC8Bxz z_tds_2f_web-ctC8Bx10 z_tds_2f_web-ctC8Bx11 z_tds_2f_web-ctC8Bx12 z_tds_2f_web-ctC8Bx13 z_tds_2f_web-ctC8Bx14 z_tds_2f_web-ctC8Bx15 z_tds_2f_web-ctC8Bx16\"+\" \"+external:\"z_tds_2f_web-ctC8Bxq z_tds_2f_web-ctC8Bxr z_tds_2f_web-ctC8Bxs z_tds_2f_web-ctC8Bxt z_tds_2f_web-ctC8Bxu z_tds_2f_web-ctC8Bxv z_tds_2f_web-ctC8Bxw z_tds_2f_web-ctC8Bxx z_tds_2f_web-ctC8Bxy z_tds_2f_web-ctC8Bxz z_tds_2f_web-ctC8Bx10 z_tds_2f_web-ctC8Bx11 z_tds_2f_web-ctC8Bx12 z_tds_2f_web-ctC8Bx13 z_tds_2f_web-ctC8Bx14 z_tds_2f_web-ctC8Bx15 z_tds_2f_web-ctC8Bx16\",result=inline?{className,style:inline}:{className};let value;value=Object.hasOwn(input,\"size\")?input[\"size\"]:void 0;if(value===void 0)value=\"medium\";if(value!==null&&value!==void 0)result[\"data-size\"]=String(value);return result});\n styles.trigger = ((input={})=>{const external=input.className,style=input.style,vars=input.vars,inline=vars?{...vars,...style}:style,className=external?\"z_tds_2f_web-ctC8Bx17 z_tds_2f_web-ctC8Bx18 z_tds_2f_web-ctC8Bx19 z_tds_2f_web-ctC8Bx1a z_tds_2f_web-ctC8Bx1b z_tds_2f_web-ctC8Bx1c z_tds_2f_web-ctC8Bx1d z_tds_2f_web-ctC8Bx1e z_tds_2f_web-ctC8Bxq z_tds_2f_web-ctC8Bx1f z_tds_2f_web-ctC8Bx1g z_tds_2f_web-ctC8Bx1h z_tds_2f_web-ctC8Bx1i z_tds_2f_web-ctC8Bx1j z_tds_2f_web-ctC8Bx1k z_tds_2f_web-ctC8Bx1l z_tds_2f_web-ctC8Bx1m z_tds_2f_web-ctC8Bx1n z_tds_2f_web-ctC8Bx1o z_tds_2f_web-ctC8Bx1p z_tds_2f_web-ctC8Bx1q z_tds_2f_web-ctC8Bx1r z_tds_2f_web-ctC8Bx1s z_tds_2f_web-ctC8Bx1t z_tds_2f_web-ctC8Bx1u z_tds_2f_web-ctC8Bx1v z_tds_2f_web-ctC8Bxs z_tds_2f_web-ctC8Bx1w z_tds_2f_web-ctC8Bx1x z_tds_2f_web-ctC8Bx1y z_tds_2f_web-ctC8Bx1z z_tds_2f_web-ctC8Bx20\"+\" \"+external:\"z_tds_2f_web-ctC8Bx17 z_tds_2f_web-ctC8Bx18 z_tds_2f_web-ctC8Bx19 z_tds_2f_web-ctC8Bx1a z_tds_2f_web-ctC8Bx1b z_tds_2f_web-ctC8Bx1c z_tds_2f_web-ctC8Bx1d z_tds_2f_web-ctC8Bx1e z_tds_2f_web-ctC8Bxq z_tds_2f_web-ctC8Bx1f z_tds_2f_web-ctC8Bx1g z_tds_2f_web-ctC8Bx1h z_tds_2f_web-ctC8Bx1i z_tds_2f_web-ctC8Bx1j z_tds_2f_web-ctC8Bx1k z_tds_2f_web-ctC8Bx1l z_tds_2f_web-ctC8Bx1m z_tds_2f_web-ctC8Bx1n z_tds_2f_web-ctC8Bx1o z_tds_2f_web-ctC8Bx1p z_tds_2f_web-ctC8Bx1q z_tds_2f_web-ctC8Bx1r z_tds_2f_web-ctC8Bx1s z_tds_2f_web-ctC8Bx1t z_tds_2f_web-ctC8Bx1u z_tds_2f_web-ctC8Bx1v z_tds_2f_web-ctC8Bxs z_tds_2f_web-ctC8Bx1w z_tds_2f_web-ctC8Bx1x z_tds_2f_web-ctC8Bx1y z_tds_2f_web-ctC8Bx1z z_tds_2f_web-ctC8Bx20\",result=inline?{className,style:inline}:{className};let value;return result});\n})(styles || (styles = {}));\n//# sourceMappingURL=Accordion.js.map\nimport './Accordion.css';\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function ZoomIn(props) {\n return (_jsxs(\"svg\", { width: \"1em\", height: \"1em\", viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", \"aria-hidden\": props['aria-label'] || props['aria-labelledby'] ? undefined : true, role: props['aria-label'] || props['aria-labelledby'] ? 'img' : undefined, ...props, children: [_jsx(\"path\", { d: \"M7.33398 4.66699C7.6099 4.66726 7.83398 4.89101 7.83398 5.16699V6.83398H9.5C9.77592 6.83425 10 7.05801 10 7.33398C9.99974 7.60974 9.77576 7.83372 9.5 7.83398H7.83398V9.5C7.83372 9.77576 7.60974 9.99974 7.33398 10C7.058 10 6.83425 9.77592 6.83398 9.5V7.83398H5.16699C4.89101 7.83398 4.66726 7.6099 4.66699 7.33398C4.66699 7.05784 4.89085 6.83398 5.16699 6.83398H6.83398V5.16699C6.83398 4.89085 7.05784 4.66699 7.33398 4.66699Z\", fill: \"currentColor\" }), _jsx(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M7.33301 2C10.2784 2 12.6668 4.38764 12.667 7.33301C12.667 8.62549 12.2052 9.81051 11.4404 10.7334L13.6865 12.9795C13.8818 13.1748 13.8818 13.4913 13.6865 13.6865C13.4913 13.8818 13.1748 13.8818 12.9795 13.6865L10.7334 11.4404C9.81051 12.2052 8.62549 12.667 7.33301 12.667C4.38764 12.6668 2 10.2784 2 7.33301C2.00018 4.38775 4.38775 2.00018 7.33301 2ZM7.33301 3C4.94003 3.00018 3.00018 4.94003 3 7.33301C3 9.72613 4.93992 11.6668 7.33301 11.667C8.52976 11.667 9.61273 11.1822 10.3975 10.3975C11.1822 9.61273 11.667 8.52976 11.667 7.33301C11.6668 4.93992 9.72613 3 7.33301 3Z\", fill: \"currentColor\" })] }));\n}\n//# sourceMappingURL=ZoomIn.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function ZoomOut(props) {\n return (_jsxs(\"svg\", { width: \"1em\", height: \"1em\", viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", \"aria-hidden\": props['aria-label'] || props['aria-labelledby'] ? undefined : true, role: props['aria-label'] || props['aria-labelledby'] ? 'img' : undefined, ...props, children: [_jsx(\"path\", { d: \"M9.5 6.83398C9.77592 6.83425 10 7.05801 10 7.33398C9.99974 7.60974 9.77576 7.83372 9.5 7.83398H5.16699C4.89101 7.83398 4.66726 7.6099 4.66699 7.33398C4.66699 7.05784 4.89085 6.83398 5.16699 6.83398H9.5Z\", fill: \"currentColor\" }), _jsx(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M7.33301 2C10.2784 2 12.6668 4.38764 12.667 7.33301C12.667 8.62549 12.2052 9.81051 11.4404 10.7334L13.6865 12.9795C13.8818 13.1748 13.8818 13.4913 13.6865 13.6865C13.4913 13.8818 13.1748 13.8818 12.9795 13.6865L10.7334 11.4404C9.81051 12.2052 8.62549 12.667 7.33301 12.667C4.38764 12.6668 2 10.2784 2 7.33301C2.00018 4.38775 4.38775 2.00018 7.33301 2ZM7.33301 3C4.94003 3.00018 3.00018 4.94003 3 7.33301C3 9.72613 4.93992 11.6668 7.33301 11.667C8.52976 11.667 9.61273 11.1822 10.3975 10.3975C11.1822 9.61273 11.667 8.52976 11.667 7.33301C11.6668 4.93992 9.72613 3 7.33301 3Z\", fill: \"currentColor\" })] }));\n}\n//# sourceMappingURL=ZoomOut.js.map","/**\n * The flows canvas: each flow's entry point, sample screens, requests, and exit. It pans on scroll,\n * and zooms with a pinch, keys, or its controls. @module\n */\n/* istanbul ignore file -- With `ssr: false`, it renders only in a browser. */\nimport { createFileRoute, Link } from '@tanstack/react-router'\nimport { Accordion, Button, Tooltip } from '@tempoxyz/ds'\nimport { ChevronRight, ZoomIn, ZoomOut } from '@tempoxyz/ds/icons'\nimport {\n type FormEvent,\n type ReactElement,\n type ReactNode,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { CodeInput } from '../components/CodeInput.js'\nimport { Account } from '../screens/Account.js'\nimport { Approval, InvalidRequest } from '../screens/Approval.js'\nimport { ChooseAccount } from '../screens/ChooseAccount.js'\nimport { Deposit } from '../screens/Deposit.js'\nimport { DeviceApproval } from '../screens/DeviceApproval.js'\nimport { NotFound } from '../screens/NotFound.js'\nimport { SignIn } from '../screens/SignIn.js'\nimport { WalletUpgrade } from '../screens/WalletUpgrade.js'\nimport { style, variants, vars } from '../zyzz.config.js'\n\n/** An entry point, a Tempo ID screen, or an external step. */\ntype Node = {\n /** A secondary line, such as the entry request. */\n detail?: string | undefined\n /** The request or event on the incoming arrow. Absent on the first node. */\n edge?: string | undefined\n /** The name of the screen or step. */\n name: string\n /** `app` for an app's own screen. Absent for Tempo ID. */\n owner?: 'app' | undefined\n /** Absent for an external step. */\n screen?: ReactNode | undefined\n}\n\n/** One path from an entry point to an exit. */\ntype Flow = {\n /** What the flow does, with code spans in backticks. */\n description: string\n /** The entry point, the steps, and the exit, in order. */\n nodes: readonly Node[]\n /** The flow's name. */\n title: string\n}\n\n/** A canvas point that stays under a viewport point during a zoom. */\ntype Anchor = {\n /** Unzoomed pixels from the canvas's top left. */\n canvas: { x: number; y: number }\n /** Pixels from the viewport's top left. */\n viewport: { x: number; y: number }\n}\n\n/** A titled group of flows. */\ntype Section = {\n /** In reading order. */\n flows: readonly Flow[]\n /** The group's name. */\n title: string\n}\n\nexport const Route = createFileRoute('/_/flows')({\n component: Page,\n // The canvas renders in the browser alone, since its sample balances format in the browser's\n // locale and its sample expiries read the clock.\n ssr: false,\n})\n\n/** The zoom limits, and the factor of one step. */\nconst zoom = { max: 2, min: 0.25, step: 1.25 } as const\n\n/** Renders the canvas. */\nfunction Page(): ReactNode {\n // The screens stay the same elements between zoom renders, so React skips them.\n const all = useMemo(sections, [])\n const [scale, setScale] = useState(1)\n // The wheel and gesture listeners read the scale between renders, before the state updates.\n const current = useRef(1)\n const anchor = useRef<Anchor | undefined>(undefined)\n const main = useRef<HTMLElement>(null)\n const probe = useRef<HTMLDivElement>(null)\n\n // The zoomed content starts below the canvas's top space, which the zoom does not scale. Engines\n // with the legacy `zoom` geometry divide a zoomed element's rect by its zoom, so the origin comes\n // from the canvas, outside the zoom.\n const origin = () => {\n if (!main.current) return window.scrollY\n return (\n main.current.getBoundingClientRect().top +\n Number.parseFloat(getComputedStyle(main.current).paddingTop) +\n window.scrollY\n )\n }\n\n // Returns the rect pixels per CSS pixel inside the zoom: the scale in engines with the standard\n // `zoom` geometry, and 1 in engines with the legacy one.\n const unit = useCallback(\n () => (probe.current?.getBoundingClientRect().height ?? 100) / 100,\n [],\n )\n\n // Sets the zoom, and keeps the canvas point under `viewport` in place, or the viewport's center.\n const zoomTo = (next: number, viewport?: Anchor['viewport']) => {\n const clamped = Math.min(zoom.max, Math.max(zoom.min, next))\n // An unchanged scale renders nothing, so the layout effect would never spend the anchor.\n if (clamped === current.current) return\n\n const point = viewport ?? {\n x: window.innerWidth / 2,\n y: window.innerHeight / 2,\n }\n\n // The scroll position updates only after the render, so a pending anchor keeps its canvas point.\n anchor.current = {\n canvas: anchor.current?.canvas ?? {\n x: (window.scrollX + point.x) / current.current,\n y: (window.scrollY + point.y - origin()) / current.current,\n },\n viewport: point,\n }\n current.current = clamped\n setScale(clamped)\n }\n\n useLayoutEffect(() => {\n const pending = anchor.current\n if (!pending) return\n\n anchor.current = undefined\n window.scrollTo(\n pending.canvas.x * scale - pending.viewport.x,\n pending.canvas.y * scale + origin() - pending.viewport.y,\n )\n }, [scale])\n\n // A plain wheel scrolls, so it pans. A pinch on a trackpad reaches the page as a wheel with\n // `ctrlKey`, and Safari's as gesture events, which would otherwise zoom the whole page.\n useEffect(() => {\n const onWheel = (event: WheelEvent) => {\n if (!event.ctrlKey && !event.metaKey) return\n\n event.preventDefault()\n const delta = (() => {\n if (event.deltaMode === WheelEvent.DOM_DELTA_LINE)\n return event.deltaY * 16\n if (event.deltaMode === WheelEvent.DOM_DELTA_PAGE)\n return event.deltaY * window.innerHeight\n return event.deltaY\n })()\n const bounded = Math.min(50, Math.max(-50, delta))\n zoomTo(current.current * Math.exp(-bounded / 200), {\n x: event.clientX,\n y: event.clientY,\n })\n }\n\n let gestureStart = 1\n const onGestureStart = (event: Event) => {\n event.preventDefault()\n gestureStart = current.current\n }\n // WebKit's `GestureEvent` is not in the DOM types. iOS leaves out the pointer's coordinates.\n type Gesture = Event & {\n clientX?: number | undefined\n clientY?: number | undefined\n scale: number\n }\n const onGestureChange = (event: Event) => {\n event.preventDefault()\n const gesture = event as Gesture\n // Without the pointer, the zoom keeps the viewport's center in place.\n zoomTo(\n gestureStart * gesture.scale,\n typeof gesture.clientX === 'number' &&\n typeof gesture.clientY === 'number'\n ? { x: gesture.clientX, y: gesture.clientY }\n : undefined,\n )\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.altKey || event.ctrlKey || event.metaKey) return\n if (\n event.target instanceof HTMLElement &&\n (event.target.isContentEditable ||\n event.target.closest('input, select, textarea'))\n )\n return\n\n if (event.key === '+' || event.key === '=')\n zoomTo(current.current * zoom.step)\n else if (event.key === '-') zoomTo(current.current / zoom.step)\n else if (event.key === '0') zoomTo(1)\n else return\n event.preventDefault()\n }\n\n window.addEventListener('wheel', onWheel, { passive: false })\n window.addEventListener('gesturestart', onGestureStart)\n window.addEventListener('gesturechange', onGestureChange)\n window.addEventListener('keydown', onKeyDown)\n return () => {\n window.removeEventListener('wheel', onWheel)\n window.removeEventListener('gesturestart', onGestureStart)\n window.removeEventListener('gesturechange', onGestureChange)\n window.removeEventListener('keydown', onKeyDown)\n }\n }, [])\n\n // The canvas renders after load, so the browser finds no target for a link's fragment then. Each\n // identifier is a slug, so the fragment needs no decoding.\n useEffect(() => {\n if (window.location.hash) reveal({ id: window.location.hash.slice(1) })\n }, [])\n\n // The content stays one element across zoom renders, so a zoom renders only the controls.\n const canvas = useMemo(\n () => <Content sections={all} unit={unit} />,\n [all, unit],\n )\n\n const percent = Math.round(scale * 100)\n\n return (\n <main ref={main} {...styles.canvas()}>\n <div {...styles.panels()}>\n <div aria-label=\"Zoom\" role=\"toolbar\" {...styles.zoom()}>\n <ZoomTip label=\"Zoom out\">\n <Button\n aria-label=\"Zoom out\"\n disabled={scale <= zoom.min}\n onClick={() => zoomTo(scale / zoom.step)}\n shape=\"icon\"\n size=\"small\"\n variant=\"text\"\n >\n <ZoomOut {...styles.zoomIcon()} />\n </Button>\n </ZoomTip>\n <ZoomTip label=\"Reset to 100%\">\n <Button\n aria-label={`Zoom ${percent}%. Reset to 100%`}\n onClick={() => zoomTo(1)}\n size=\"small\"\n variant=\"text\"\n {...styles.zoomLevel()}\n >\n {percent}%\n </Button>\n </ZoomTip>\n <ZoomTip label=\"Zoom in\">\n <Button\n aria-label=\"Zoom in\"\n disabled={scale >= zoom.max}\n onClick={() => zoomTo(scale * zoom.step)}\n shape=\"icon\"\n size=\"small\"\n variant=\"text\"\n >\n <ZoomIn {...styles.zoomIcon()} />\n </Button>\n </ZoomTip>\n <span aria-live=\"polite\" role=\"status\" {...styles.hidden()}>\n {`Zoom ${percent}%`}\n </span>\n </div>\n <Legend sections={all} />\n </div>\n {/* `zoom` scales the layout too, so the page's scroll size follows the zoom and scrolling pans. */}\n <div {...styles.world({ style: { zoom: scale } })}>\n <div aria-hidden ref={probe} {...styles.probe()} />\n {canvas}\n </div>\n </main>\n )\n}\n\n/** Renders the introduction, the groups, and their flows. */\nfunction Content(props: Content.Props): ReactNode {\n return (\n <>\n <header {...styles.intro()}>\n <h1 {...styles.title()}>Flows</h1>\n <p {...styles.lede()}>\n Every path through Tempo ID, from the entry point on the left to the\n exit on the right. Each arrow names the request or event that leads to\n the next step. Scroll to pan. To zoom, pinch, or scroll with Control\n or Command held.\n </p>\n </header>\n {props.sections.map((section) => (\n <section {...styles.section()} key={section.title}>\n <h2 {...styles.sectionTitle()} id={fragment.section(section)}>\n {section.title}\n </h2>\n {section.flows.map((flow) => (\n <article\n {...styles.flow()}\n id={fragment.flow(section, flow)}\n key={flow.title}\n >\n <header {...styles.flowHeader()}>\n <h3 {...styles.flowTitle()}>{flow.title}</h3>\n <p {...styles.flowDescription()}>\n <Description text={flow.description} />\n </p>\n </header>\n <Row flow={flow} unit={props.unit} />\n </article>\n ))}\n </section>\n ))}\n </>\n )\n}\n\ndeclare namespace Content {\n type Props = {\n /** In canvas order. */\n sections: readonly Section[]\n /** Returns the rect pixels per CSS pixel inside the zoom. */\n unit: () => number\n }\n}\n\n/** Estimated row heights before a render, in unzoomed pixels. */\nconst estimate = { external: 128, screen: 480 }\n\n/**\n * Renders a flow's row near the viewport, or a box of its last size, so a zoom lays out few\n * screens.\n */\nfunction Row(props: Row.Props): ReactNode {\n const box = useRef<HTMLDivElement>(null)\n const [near, setNear] = useState(false)\n const [size, setSize] = useState(() => ({\n height: props.flow.nodes.some((node) => node.screen !== undefined)\n ? estimate.screen\n : estimate.external,\n width: props.flow.nodes.reduce(\n (width, node, index) =>\n width + (node.screen === undefined ? 224 : 384) + (index > 0 ? 192 : 0),\n 0,\n ),\n }))\n\n useEffect(() => {\n const element = box.current\n if (!element) return\n\n // The margin of one viewport on each side renders a row before it scrolls into view.\n const observer = new IntersectionObserver(\n (entries) => {\n const entry = entries.at(-1)\n if (!entry) return\n\n // A row records its size before it leaves, so its box keeps the canvas's layout. The rect\n // and the unit come from the same geometry, so the size is in CSS pixels in either one.\n if (\n !entry.isIntersecting &&\n element.firstElementChild instanceof HTMLOListElement\n ) {\n const rect = element.getBoundingClientRect()\n setSize({\n height: rect.height / props.unit(),\n width: rect.width / props.unit(),\n })\n }\n setNear(entry.isIntersecting)\n },\n { rootMargin: '100%' },\n )\n observer.observe(element)\n return () => observer.disconnect()\n }, [props.unit])\n\n return (\n <div ref={box} {...styles.rowBox()}>\n {near ? (\n <ol {...styles.row()}>\n {props.flow.nodes.map((node, index) => (\n <li {...styles.step()} key={`${index}:${node.name}`}>\n {index > 0 ? <Arrow label={node.edge} /> : null}\n {node.screen ? (\n <figure {...styles.artboard()}>\n <figcaption {...styles.frameLabel()}>\n {node.owner === 'app' ? `App · ${node.name}` : node.name}\n </figcaption>\n {node.owner === 'app' ? (\n <div {...vars({ set: 'thirdParty' })}>\n <div {...styles.frame()}>{node.screen}</div>\n </div>\n ) : (\n <div {...styles.frame()}>{node.screen}</div>\n )}\n </figure>\n ) : (\n <External\n detail={node.detail}\n kind={(() => {\n if (index === 0) return 'Entry'\n if (index === props.flow.nodes.length - 1) return 'Exit'\n return 'External'\n })()}\n name={node.name}\n />\n )}\n </li>\n ))}\n </ol>\n ) : (\n <div\n aria-hidden\n {...styles.placeholder({\n style: { height: size.height, width: size.width },\n })}\n />\n )}\n </div>\n )\n}\n\ndeclare namespace Row {\n type Props = {\n /** The flow that the row renders. */\n flow: Flow\n /** Returns the rect pixels per CSS pixel inside the zoom. */\n unit: () => number\n }\n}\n\n/** Fragment identifiers of the groups and flows, from their titles. */\nconst fragment = {\n /** Returns the identifier of `flow` under `section`, since flow names repeat across groups. */\n flow(section: Section, flow: Flow) {\n return `${fragment.section(section)}--${slug(flow.title)}`\n },\n /** Returns the identifier of `section`. */\n section(section: Section) {\n return slug(section.title)\n },\n}\n\n/**\n * Scrolls the group or flow `id` to the top left, and aligns it for 10 frames while rows render.\n */\nfunction reveal(options: reveal.Options) {\n const target = document.getElementById(options.id)\n if (!target) return\n\n // The clearance is in viewport pixels, since a scroll margin inside the zoom would shrink with it.\n // `scrollIntoView` places the target in either `zoom` geometry, so the scroll reads no zoomed rect.\n const top = window.matchMedia('(min-width: 64rem)').matches ? 24 : 112\n let settled = 0\n const align = () => {\n target.scrollIntoView({ block: 'start' })\n window.scrollTo({ left: 0, top: window.scrollY - top })\n settled = target.getBoundingClientRect().top\n }\n align()\n\n // Each check compares the target's rect with its own rect after the last alignment, which holds in\n // either geometry.\n let frames = 10\n const settle = () => {\n if (Math.abs(target.getBoundingClientRect().top - settled) > 1) align()\n frames -= 1\n if (frames > 0) requestAnimationFrame(settle)\n }\n requestAnimationFrame(settle)\n}\n\ndeclare namespace reveal {\n type Options = {\n /** The identifier of the group or flow. */\n id: string\n }\n}\n\n/** Returns `text` in lowercase, with each non-alphanumeric run as `-`. */\nfunction slug(text: string) {\n return text\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '')\n}\n\n/** Renders the collapsed contents list, with a link to each group and flow. */\nfunction Legend(props: Legend.Props): ReactNode {\n return (\n <nav aria-label=\"Flows\" {...styles.legend()}>\n <Accordion.Root>\n <Accordion.Item value=\"contents\" {...styles.legendItem()}>\n <Accordion.Trigger {...styles.legendTrigger()}>\n Contents\n </Accordion.Trigger>\n <Accordion.Panel>\n <ol {...styles.legendList()}>\n {props.sections.map((section) => (\n <li key={section.title}>\n <Entry\n {...styles.legendSection()}\n id={fragment.section(section)}\n >\n {section.title}\n </Entry>\n <ol {...styles.legendFlows()}>\n {section.flows.map((flow) => (\n <li key={flow.title}>\n <Entry\n {...styles.legendFlow()}\n id={fragment.flow(section, flow)}\n >\n {flow.title}\n </Entry>\n </li>\n ))}\n </ol>\n </li>\n ))}\n </ol>\n </Accordion.Panel>\n </Accordion.Item>\n </Accordion.Root>\n </nav>\n )\n}\n\ndeclare namespace Legend {\n type Props = {\n /** In canvas order. */\n sections: readonly Section[]\n }\n}\n\n/** Renders a link to the group or flow `id`, which {@link reveal} scrolls to. */\nfunction Entry(props: Entry.Props): ReactNode {\n return (\n <Link\n className={props.className}\n hash={props.id}\n hashScrollIntoView={false}\n onClick={(event) => {\n // A modified click opens the link in another tab or window, so this page keeps its scroll.\n if (\n event.button !== 0 ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey ||\n event.shiftKey\n )\n return\n reveal({ id: props.id })\n }}\n replace\n resetScroll={false}\n to=\"/_/flows\"\n >\n {props.children}\n </Link>\n )\n}\n\ndeclare namespace Entry {\n type Props = {\n /** The link text. */\n children: ReactNode\n /** The link's class names. */\n className?: string | undefined\n /** The identifier of the group or flow. */\n id: string\n }\n}\n\n/** Renders a tooltip below a zoom control. */\nfunction ZoomTip(props: ZoomTip.Props): ReactNode {\n return (\n <Tooltip.Root>\n <Tooltip.Trigger delay={300} render={props.children} />\n <Tooltip.Popup side=\"bottom\" sideOffset={8}>\n {props.label}\n </Tooltip.Popup>\n </Tooltip.Root>\n )\n}\n\ndeclare namespace ZoomTip {\n type Props = {\n /** The control, which receives the trigger's props. */\n children: ReactElement\n /** The tooltip text. */\n label: string\n }\n}\n\n/** Renders `text` with each backtick span as code. */\nfunction Description(props: Description.Props): ReactNode {\n // Splitting on the backticks puts each code span at an odd index.\n return props.text.split('`').map((part, index) =>\n index % 2 ? (\n <code {...styles.code()} key={index}>\n {part}\n </code>\n ) : (\n part\n ),\n )\n}\n\ndeclare namespace Description {\n type Props = {\n /** The description, with code spans in backticks. */\n text: string\n }\n}\n\n/** A labeled arrow between two nodes. */\nfunction Arrow(props: Arrow.Props): ReactNode {\n return (\n <span {...styles.arrow()} aria-label={props.label ?? 'Then'} role=\"img\">\n <span {...styles.edge()}>{props.label}</span>\n <span {...styles.shaft()}>\n <span {...styles.line()} />\n <ChevronRight {...styles.head()} />\n </span>\n </span>\n )\n}\n\ndeclare namespace Arrow {\n type Props = {\n /** The request or event. */\n label?: string | undefined\n }\n}\n\n/** A step outside Tempo ID's pages, such as a provider. */\nfunction External(props: External.Props): ReactNode {\n return (\n <div {...styles.external({ kind: props.kind })}>\n <span {...styles.kind()}>{props.kind}</span>\n <span {...styles.externalName()}>{props.name}</span>\n {props.detail ? <code {...styles.detail()}>{props.detail}</code> : null}\n </div>\n )\n}\n\ndeclare namespace External {\n type Props = {\n /** A secondary line, such as the entry request. */\n detail?: string | undefined\n /** Where the step sits in its flow. */\n kind: 'Entry' | 'Exit' | 'External'\n /** The step's name. */\n name: string\n }\n}\n\n/** A sample app's own screen, in the style of a food-delivery app. */\nfunction AppScreen(props: AppScreen.Props): ReactNode {\n return (\n <div {...styles.app()}>\n <header {...styles.appHeader()}>\n <h4 {...styles.appTitle()}>{props.title}</h4>\n {props.description ? (\n <p {...styles.appDescription()}>{props.description}</p>\n ) : null}\n </header>\n {props.children}\n </div>\n )\n}\n\ndeclare namespace AppScreen {\n type Props = {\n /** The screen's controls. */\n children?: ReactNode | undefined\n /** The line below the title. */\n description?: string | undefined\n /** The screen's heading. */\n title: string\n }\n}\n\n/** A pill button in the sample app's style. */\nfunction AppButton(props: AppButton.Props): ReactNode {\n return (\n // oxlint-disable-next-line tds/prefer-component -- The sample app draws its own controls.\n <button {...styles.appButton({ tone: props.tone })} type=\"button\">\n {props.children}\n </button>\n )\n}\n\ndeclare namespace AppButton {\n type Props = {\n /** The button's label. */\n children: ReactNode\n /** The brand red, or a quiet gray. */\n tone: 'brand' | 'quiet'\n }\n}\n\n/** The sample app's labeled email field. */\nfunction AppEmailField(): ReactNode {\n return (\n <label {...styles.appField()}>\n <span {...styles.appLabel()}>Email</span>\n {/* oxlint-disable-next-line tds/prefer-component -- The sample app draws its own controls. */}\n <input {...styles.appInput()} placeholder=\"Required\" readOnly />\n </label>\n )\n}\n\n/** The sample app's sign-in: a passkey, or an email. */\nfunction AppSignIn(): ReactNode {\n return (\n <AppScreen title=\"Sign in or sign up\">\n <AppButton tone=\"quiet\">Continue with passkey</AppButton>\n <p {...styles.appDivider()}>or continue with email</p>\n <AppEmailField />\n <AppButton tone=\"brand\">Continue</AppButton>\n </AppScreen>\n )\n}\n\n/** The sample app's email step for an unlinked passkey. */\nfunction AppEmail(): ReactNode {\n return (\n <AppScreen\n description=\"Sign in with your email to link this passkey.\"\n title=\"Add your email\"\n >\n <AppEmailField />\n <AppButton tone=\"brand\">Continue</AppButton>\n </AppScreen>\n )\n}\n\n/** The sample app's code step. */\nfunction AppCode(): ReactNode {\n return (\n <AppScreen\n description={`Enter the 6-digit code sent to ${email}.`}\n title=\"Check your email\"\n >\n <CodeInput aria-label=\"Code\" length={6} readOnly />\n <AppButton tone=\"brand\">Verify</AppButton>\n </AppScreen>\n )\n}\n\n/** The sample app after the sign-in. */\nfunction AppSignedIn(): ReactNode {\n return (\n <AppScreen description={email} title=\"You're signed in\">\n <p {...styles.appAddress()}>{accounts[0].address}</p>\n <AppButton tone=\"quiet\">Sign out</AppButton>\n </AppScreen>\n )\n}\n\n/** A handler that does nothing. */\nfunction noop() {}\n\n/** A form handler that stops the submission. */\nfunction prevent(event: FormEvent<HTMLFormElement>) {\n event.preventDefault()\n}\n\n/** The sample accounts: one that Privy owns, and one that a passkey owns. */\nconst accounts = [\n {\n address: '0x1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9f3c',\n balance: { amount: '1250.5', currency: 'USD' },\n owner: 'privy',\n realm: null,\n },\n {\n address: '0x7c4d2e9a1b3f5c7d9e0a2b4c6d8e0f1a3b5c21ab',\n balance: { amount: '42', currency: 'USD' },\n owner: 'webAuthn',\n realm: null,\n },\n] as const satisfies readonly ChooseAccount.Account[]\n\n/** The sample email address. */\nconst email = 'user@example.com'\n\n/** The sample refusal of an upstream service. */\nconst unavailable = 'An upstream service is unavailable. Retry later.'\n\n/** The sample key: 100 USD a day for a week, in pathUSD. */\nfunction key(): Approval.Key {\n return {\n calls: [],\n expiry: Math.floor(Date.now() / 1000) + 7 * 24 * 60 * 60,\n limits: [\n {\n amount: '100',\n currency: 'USD',\n period: 24 * 60 * 60,\n tokens: [{ amount: '100', symbol: 'pathUSD' }],\n },\n ],\n unrecognized: [],\n }\n}\n\n/** Sample `Approval` props for a key, before a decision. */\nfunction approval(): Approval.Props {\n return {\n app: 'Tempo Wallet',\n approving: false,\n denying: false,\n destination: 'wallet.tempo.xyz',\n email,\n heading: 'h4',\n keyAuthorization: key(),\n onApprove: noop,\n onDeny: noop,\n verified: true,\n }\n}\n\n/** The sample sign-in request, with its key. */\nfunction signInRequest(): NonNullable<SignIn.Props['request']> {\n return { app: 'Tempo Wallet', key: key(), verified: true }\n}\n\n/** The sample sign-in request, without a key. */\nfunction appRequest(): NonNullable<SignIn.Props['request']> {\n return { app: 'Tempo Wallet', key: null, verified: true }\n}\n\n/** The sample account that the account step chose. */\nfunction selectedAccount(): NonNullable<Approval.Props['account']> {\n return { address: accounts[0].address, owner: accounts[0].owner }\n}\n\n/** The entry of a signed-out redirect with a key. */\nconst keyedEntry = {\n detail: 'GET /oauth2/authorize?…&key_authorization',\n name: 'Web app',\n} as const satisfies Node\n\n/** Sample `Account` props for a signed-in user. */\nfunction account(): Account.Props {\n return {\n accounts: [accounts[0]],\n email,\n heading: 'h4',\n onAddPasskey: noop,\n onSignOut: noop,\n signingOut: false,\n }\n}\n\n/** Sample `Account` props on a configurable chain, whose only account is `accounts[index]`. */\nfunction configurable(index: 0 | 1): Account.Props {\n return {\n ...account(),\n // An account that Tempo ID created is configurable from its creation, and a linked wallet.tempo\n // passkey's account is not until its upgrade.\n accounts: [{ ...accounts[index], configurable: index === 0 }],\n onAddOwner: noop,\n passkeys: true,\n }\n}\n\n/** Sample `ChooseAccount` props, with nothing chosen. */\nfunction chooseAccount(): ChooseAccount.Props {\n return { accounts, app: 'Tempo Wallet', heading: 'h4', onChoose: noop }\n}\n\n/** Sample `DeviceApproval` props, before a submission. */\nfunction deviceApproval(): DeviceApproval.Props {\n return {\n approving: false,\n code: '',\n denying: false,\n email,\n fetching: false,\n heading: 'h4',\n invalid: false,\n onApprove: noop,\n onDeny: noop,\n onSubmitCode: prevent,\n }\n}\n\n/** A sample `tempo-id login` request, with its key. */\nfunction deviceRequest(): DeviceApproval.Request {\n return {\n app: { name: 'Tempo CLI' },\n created_at: Math.floor(Date.now() / 1000),\n device: 'ada-macbook',\n ip: '203.0.113.7',\n key_authorization: key(),\n location: 'San Francisco, US',\n user_code: 'BDWP-HQPK',\n }\n}\n\n/** The entry of `tempo-id login`, which requests a code and a key. */\nconst loginEntry = {\n detail: 'POST /device/code with key_authorization',\n name: 'tempo-id login',\n} as const satisfies Node\n\n/** The exit of `tempo-id login`: the poll for the tokens and the signed key. */\nconst loginExit = {\n detail:\n 'Tokens and key_authorization, stored in ~/.tempo/id/credentials.json. A replaced session’s refresh token goes to POST /oauth2/revoke.',\n edge: 'POST /oauth2/token: authorization_pending, then tokens',\n name: 'tempo-id login',\n} as const satisfies Node\n\n/** Sample `WalletUpgrade` props, before the upgrade. */\nfunction walletUpgrade(): WalletUpgrade.Props {\n return {\n heading: 'h4',\n onContinue: noop,\n onSkip: noop,\n upgrading: false,\n }\n}\n\n/** Sample `SignIn` props, before a submission, with every method. */\nfunction signIn(): SignIn.Props {\n return {\n heading: 'h4',\n invalid: false,\n onChangeEmail: noop,\n onPasskey: noop,\n onResend: noop,\n onStartOver: noop,\n onSubmitCode: prevent,\n onSubmitEmail: prevent,\n resend: 'idle',\n sending: false,\n verifying: false,\n }\n}\n\n/** The entry of an app's redirect to `/oauth2/authorize`. */\nconst redirectEntry = {\n detail: 'GET /oauth2/authorize?client_id&redirect_uri&code_challenge&state',\n name: 'Web app',\n} as const satisfies Node\n\n/** The page-load requests that select a headless app's own sign-in. */\nconst appSignInEdge = 'GET /v1/auth/session: no user'\n\n/** The exit of an app's redirect: the code redemption. */\nconst tokenExit = {\n detail: 'Access, ID, and refresh tokens',\n edge: 'POST /oauth2/token with code_verifier',\n name: 'Web app',\n} as const satisfies Node\n\n/**\n * Every flow, by group. Update it with any flow it shows. It runs on mount, so sample times read\n * the clock then.\n */\nfunction sections(): readonly Section[] {\n return [\n {\n flows: [\n {\n description:\n 'A visitor opens Tempo ID without a session and signs in with an emailed code. An accepted code shows green for 500 ms before the sign-in continues.',\n nodes: [\n { detail: 'GET /', name: 'Browser opens Tempo ID' },\n {\n edge: 'Page /login',\n name: 'Sign in',\n screen: <SignIn {...signIn()} />,\n },\n {\n edge: 'POST /v1/auth/code',\n name: 'Check your email',\n screen: <SignIn {...signIn()} email={email} />,\n },\n {\n edge: 'POST /v1/auth/code/verify: 200',\n name: 'Check your email (accepted)',\n screen: <SignIn {...signIn()} email={email} verified />,\n },\n {\n edge: 'after 500 ms, redirect: null',\n name: 'Your account',\n screen: <Account {...account()} />,\n },\n ],\n title: 'Email code',\n },\n {\n description:\n 'A passkey of the realm signs the user in with one prompt, from the button.',\n nodes: [\n { detail: 'GET /login', name: 'Browser opens sign-in' },\n {\n detail: 'POST /v1/auth/passkey/options, as the page shows',\n name: 'Sign in',\n screen: <SignIn {...signIn()} />,\n },\n {\n detail: 'The options that the page requested',\n edge: 'Sign in with a passkey',\n name: 'Authenticator prompt',\n },\n {\n edge: 'POST /v1/auth/passkey/verify',\n name: 'Your account',\n screen: <Account {...account()} />,\n },\n ],\n title: 'Passkey',\n },\n {\n description:\n 'A wallet.tempo passkey without an email verifies one with a code. The passkey signs again with the code, which links it to the user.',\n nodes: [\n { detail: 'GET /login', name: 'Browser opens sign-in' },\n {\n detail: 'POST /v1/auth/passkey/options, as the page shows',\n name: 'Sign in',\n screen: <SignIn {...signIn()} />,\n },\n {\n detail: 'The options that the page requested',\n edge: 'Sign in with a passkey',\n name: 'Authenticator prompt',\n },\n {\n edge: 'POST /v1/auth/passkey/verify: step email',\n name: 'Sign in (link passkey)',\n screen: <SignIn {...signIn()} linking />,\n },\n {\n edge: 'POST /v1/auth/code',\n name: 'Check your email (link passkey)',\n screen: <SignIn {...signIn()} email={email} linking />,\n },\n {\n detail: 'POST /v1/auth/passkey/options with link and authorize',\n edge: 'Code complete',\n name: 'Authenticator prompt',\n },\n {\n edge: 'POST /v1/auth/code/verify with link and assertion: 200',\n name: 'Check your email (link accepted)',\n screen: <SignIn {...signIn()} email={email} linking verified />,\n },\n {\n edge: 'after 500 ms, redirect: null',\n name: 'Your account',\n screen: <Account {...account()} />,\n },\n ],\n title: 'Passkey: adds an email',\n },\n {\n description:\n 'Start over on the email step drops the passkey’s link and a pending code request, so the passkey stays unlinked.',\n nodes: [\n { detail: 'GET /login', name: 'Browser opens sign-in' },\n {\n edge: 'Sign in with a passkey, POST /v1/auth/passkey/verify: step email',\n name: 'Sign in (link passkey)',\n screen: <SignIn {...signIn()} linking />,\n },\n {\n edge: 'Start over',\n name: 'Sign in',\n screen: <SignIn {...signIn()} />,\n },\n ],\n title: 'Passkey: start over',\n },\n {\n description:\n 'Realms without a passkey relying party at Tempo ID’s origin leave only the email field.',\n nodes: [\n { detail: 'GET /login', name: 'Browser opens sign-in' },\n {\n edge: '200, passkeys: false',\n name: 'Sign in (email only)',\n screen: <SignIn {...signIn()} onPasskey={undefined} />,\n },\n ],\n title: 'Email only: no passkey',\n },\n {\n description:\n 'Each sign-in request holds its controls, shows a spinner, and announces its progress until it settles. One sign-in runs at a time.',\n nodes: [\n { detail: 'GET /login', name: 'Browser opens sign-in' },\n {\n edge: 'Continue, POST /v1/auth/code',\n name: 'Sign in (sending)',\n screen: <SignIn {...signIn()} sending />,\n },\n {\n edge: 'Or: Sign in with a passkey',\n name: 'Sign in (passkey pending)',\n screen: <SignIn {...signIn()} passkeyPending />,\n },\n {\n edge: 'Code complete, POST /v1/auth/code/verify',\n name: 'Check your email (verifying)',\n screen: <SignIn {...signIn()} email={email} verifying />,\n },\n {\n edge: 'Or: Resend code, POST /v1/auth/code',\n name: 'Check your email (resending)',\n screen: <SignIn {...signIn()} email={email} resend=\"pending\" />,\n },\n ],\n title: 'Sign-in: in progress',\n },\n ],\n title: 'Sign-in',\n },\n {\n flows: [\n {\n description:\n 'The account page lists the user’s Tempo Accounts in the `default` realm, oldest first, each with its balance and a deposit link. A lone wallet shows its balance large, without a list.',\n nodes: [\n { detail: 'GET /', name: 'Browser opens Tempo ID' },\n {\n edge: 'GET /v1/account?chain, 200, one wallet',\n name: 'Your account (one wallet)',\n screen: <Account {...account()} />,\n },\n {\n edge: 'Or: several wallets',\n name: 'Your account (several wallets)',\n screen: <Account {...account()} accounts={accounts} />,\n },\n {\n edge: 'Or: a balance read fails',\n name: 'Your account (balance unavailable)',\n screen: (\n <Account\n {...account()}\n accounts={[accounts[0], { ...accounts[1], balance: null }]}\n />\n ),\n },\n {\n edge: 'Or: no wallet, POST /v1/account with chain creates the first one, 200 with its balance',\n name: 'Your account (wallet created)',\n screen: <Account {...account()} />,\n },\n {\n edge: 'Or: the realm creates no wallets on the server, but holds passkeys',\n name: 'Your account (no wallets)',\n screen: <Account {...account()} accounts={[]} />,\n },\n {\n edge: 'Or: the realm creates no wallets at all',\n name: 'Your account (no wallet possible)',\n screen: (\n <Account\n {...account()}\n accounts={[]}\n onAddPasskey={undefined}\n />\n ),\n },\n {\n edge: 'Or: the accounts cannot be read',\n name: 'Your account (unavailable)',\n screen: (\n <Account\n {...account()}\n accountError=\"Your wallets failed to load. Reload the page to try again.\"\n accounts={null}\n />\n ),\n },\n ],\n title: 'Account page',\n },\n {\n description:\n 'On a test chain, such as testnet, each deposit icon funds its wallet from the chain’s faucet through `POST /i/account/fund`, one request at a time. Tempo mainnet has no faucet, so its deposit icon opens `/deposit`.',\n nodes: [\n { detail: 'GET /?chain=testnet', name: 'Browser' },\n {\n edge: 'GET /v1/account?chain=testnet, 200',\n name: 'Your account (test chain)',\n screen: (\n <Account\n {...account()}\n accounts={[\n {\n ...accounts[0],\n balance: { amount: '0', currency: 'USD' },\n },\n ]}\n onFund={noop}\n />\n ),\n },\n {\n edge: 'Deposit icon, POST /i/account/fund',\n name: 'Your account (funding)',\n screen: (\n <Account\n {...account()}\n accounts={[\n {\n ...accounts[0],\n balance: { amount: '0', currency: 'USD' },\n },\n ]}\n funding={accounts[0].address}\n onFund={noop}\n />\n ),\n },\n {\n edge: '200 with the transfers, GET /v1/account?chain=testnet',\n name: 'Your account (funded)',\n screen: (\n <Account\n {...account()}\n accounts={[\n {\n ...accounts[0],\n balance: { amount: '5000000', currency: 'USD' },\n },\n ]}\n onFund={noop}\n />\n ),\n },\n {\n edge: 'Or: the node fails, 503 upstream_unavailable',\n name: 'Your account (faucet unavailable)',\n screen: (\n <Account\n {...account()}\n accounts={[\n {\n ...accounts[0],\n balance: { amount: '0', currency: 'USD' },\n },\n ]}\n error={unavailable}\n onFund={noop}\n />\n ),\n },\n ],\n title: 'Account page: testnet faucet',\n },\n {\n description:\n 'In one click, the account page adds a passkey of the `default` realm, which signs the user in and owns a new passkey wallet. The page offers it only when the realm holds passkeys and the user has no passkey wallet.',\n nodes: [\n { detail: 'GET /', name: 'Browser opens Tempo ID' },\n {\n name: 'Your account',\n screen: <Account {...account()} />,\n },\n {\n edge: 'Add passkey, POST /v1/account/passkey/options, navigator.credentials.create(), POST /v1/account/passkey, navigator.credentials.get()',\n name: 'Your account (adding a passkey)',\n screen: <Account {...account()} addingPasskey />,\n },\n {\n edge: 'POST /v1/account/passkey/verify, 200, then the accounts load again, and a toast: Passkey added',\n name: 'Your account (passkey added)',\n screen: (\n <Account\n {...account()}\n accounts={accounts}\n onAddPasskey={undefined}\n passkeyAdded\n />\n ),\n },\n {\n edge: 'Or: the ceremony is canceled',\n name: 'Your account (passkey canceled)',\n screen: (\n <Account\n {...account()}\n error=\"Adding a passkey was canceled. Try again.\"\n />\n ),\n },\n {\n edge: 'Or: the session signed in more than 10 minutes before',\n name: 'Your account (sign in again)',\n screen: (\n <Account\n {...account()}\n error=\"Sign in again: adding a passkey needs a sign-in within the last 10 minutes.\"\n />\n ),\n },\n {\n edge: 'Or: the accounts failed to load, and the device already holds one of the user’s passkeys',\n name: 'Your account (passkey held)',\n screen: (\n <Account\n {...account()}\n error=\"This device already holds one of your passkeys. Add a passkey on another device.\"\n />\n ),\n },\n ],\n title: 'Account page: add a passkey',\n },\n {\n description:\n 'On a chain that `CONFIGURABLE_ACCOUNTS` names, a cloud wallet’s configurable account adds a passkey as a second owner. The cloud wallet signs the configuration update, so the wallet keeps its address, and either owner then signs alone.',\n nodes: [\n { detail: 'GET /?chain=local', name: 'Browser opens Tempo ID' },\n {\n name: 'Your account (configurable chain)',\n screen: <Account {...configurable(0)} />,\n },\n {\n edge: 'Add passkey, POST /v1/account/passkey/options, navigator.credentials.create(), POST /v1/account/passkey, navigator.credentials.get()',\n name: 'Your account (adding a passkey)',\n screen: <Account {...configurable(0)} addingPasskey />,\n },\n {\n edge: 'POST /v1/account/passkey/verify with account: the cloud wallet signs the update, and a toast: Passkey added',\n name: 'Your account (passkey added)',\n screen: (\n <Account\n {...configurable(0)}\n accounts={[\n {\n ...accounts[0],\n configurable: true,\n owners: ['privy', 'webAuthn'],\n },\n ]}\n ownerAdded=\"passkey\"\n />\n ),\n },\n {\n edge: 'Or: the chain refuses the change, or the Tempo API’s sponsor fails',\n name: 'Your account (change failed)',\n screen: (\n <Account\n {...configurable(0)}\n error=\"An upstream service is unavailable. Retry later.\"\n />\n ),\n },\n ],\n title: 'Add a passkey to a cloud wallet',\n },\n {\n description:\n 'On a chain that `CONFIGURABLE_ACCOUNTS` names, a linked wallet.tempo passkey’s wallet upgrades in place, with the passkey as its only owner. One click signs the prepared passkey step, and the wallet keeps its address.',\n nodes: [\n {\n detail:\n 'GET /?chain=local, then POST /v1/account/upgrade, 200, the passkey step',\n name: 'Browser opens Tempo ID',\n },\n {\n name: 'Your account (upgrade)',\n screen: <Account {...configurable(1)} onUpgrade={noop} />,\n },\n {\n edge: 'Or: the user holds a cloud wallet too, and each wallet’s row offers its own change as an icon',\n name: 'Your account (two wallets)',\n screen: (\n <Account\n {...configurable(1)}\n accounts={[\n { ...accounts[0], configurable: true },\n { ...accounts[1], configurable: false },\n ]}\n onUpgrade={noop}\n />\n ),\n },\n {\n edge: 'Upgrade wallet, navigator.credentials.get(), POST /v1/account/upgrade with passkey.assertion',\n name: 'Your account (upgrading)',\n screen: (\n <Account\n {...configurable(1)}\n onUpgrade={noop}\n upgrading={accounts[1].address}\n />\n ),\n },\n {\n edge: '200, the account at version 1, and a toast: Wallet upgraded',\n name: 'Your account (upgraded)',\n screen: (\n <Account\n {...configurable(1)}\n accounts={[{ ...accounts[1], configurable: true }]}\n />\n ),\n },\n {\n edge: 'Or: the chain refuses the upgrade, or the Tempo API’s sponsor fails',\n name: 'Your account (upgrade failed)',\n screen: (\n <Account\n {...configurable(1)}\n error=\"An upstream service is unavailable. Retry later.\"\n onUpgrade={noop}\n />\n ),\n },\n ],\n title: 'Upgrade a passkey wallet',\n },\n {\n description:\n 'When `CONFIGURABLE_ACCOUNTS` names the sign-in page’s `chain`, a wallet.tempo user receives no cloud wallet. Before the account page, Continue on the upgrade step links the passkey and signs its upgrade.',\n nodes: [\n {\n detail:\n 'GET /?chain=local, page /login?chain=local, then POST /v1/auth/code/verify: 200',\n name: 'Browser signs in by email',\n },\n {\n edge: 'GET /i/account/upgrades?chain=local, then POST /v1/account/upgrade with credentialId, 200, the passkey step',\n name: 'Upgrade your wallet',\n screen: <WalletUpgrade {...walletUpgrade()} />,\n },\n {\n edge: 'Continue, POST /v1/account/upgrade with passkey.assertion, which links the passkey',\n name: 'Upgrade your wallet (upgrading)',\n screen: <WalletUpgrade {...walletUpgrade()} upgrading />,\n },\n {\n edge: 'Or: the passkey ceremony fails, or the upgrade is refused',\n name: 'Upgrade your wallet (failed)',\n screen: (\n <WalletUpgrade\n {...walletUpgrade()}\n error=\"Your passkey did not sign the upgrade. Continue to try again.\"\n />\n ),\n },\n {\n edge: 'redirect: null, GET /?chain=local',\n name: 'Your account (upgraded)',\n screen: (\n <Account\n {...configurable(1)}\n accounts={[{ ...accounts[1], configurable: true }]}\n />\n ),\n },\n ],\n title: 'Sign-in: upgrade a wallet.tempo passkey',\n },\n {\n description:\n 'A wallet.tempo user who chooses Not now on the upgrade step holds no configurable wallet yet. The account page lists that passkey’s wallet from `GET /i/account/passkeys`, and one click links the passkey and signs its upgrade.',\n nodes: [\n {\n detail: 'Not now, then GET /?chain=local',\n name: 'Browser signs in',\n },\n {\n edge: 'GET /i/account/passkeys, then POST /v1/account/upgrade with credentialId, 200, the passkey step',\n name: 'Your account (wallet.tempo passkey)',\n screen: (\n <Account\n {...configurable(1)}\n accounts={[\n {\n ...accounts[1],\n credentialId: 'KEbWNCc7NgaYnUyrNeFGX9_3Y-8',\n },\n ]}\n onUpgrade={noop}\n />\n ),\n },\n {\n edge: 'Upgrade wallet, POST /v1/account/upgrade with passkey.assertion, which links the passkey, and a toast: Wallet upgraded',\n name: 'Your account (upgraded)',\n screen: (\n <Account\n {...configurable(1)}\n accounts={[{ ...accounts[1], configurable: true }]}\n />\n ),\n },\n ],\n title: 'Account page: upgrade a wallet.tempo passkey',\n },\n {\n description:\n 'The account page and the deposit page send a visitor without a session to sign-in, which then opens the account page. The deposit page leaves the address out of the sign-in query.',\n nodes: [\n { detail: 'GET / or GET /deposit?address', name: 'Browser' },\n {\n edge: 'GET /v1/account: session_required, page /login',\n name: 'Sign in',\n screen: <SignIn {...signIn()} />,\n },\n {\n edge: 'POST /v1/auth/code',\n name: 'Check your email',\n screen: <SignIn {...signIn()} email={email} />,\n },\n {\n edge: 'POST /v1/auth/code/verify: 200',\n name: 'Check your email (accepted)',\n screen: <SignIn {...signIn()} email={email} verified />,\n },\n {\n edge: 'after 500 ms, redirect: null, GET /',\n name: 'Your account',\n screen: <Account {...account()} />,\n },\n ],\n title: 'Account page: signed out',\n },\n {\n description:\n 'Deposit lists the networks and cash methods for one of the user’s wallets. Only Tempo is available, and it shows the wallet’s address as a QR code and as text.',\n nodes: [\n { detail: 'GET /', name: 'Browser opens Tempo ID' },\n {\n edge: '200, one wallet',\n name: 'Your account',\n screen: <Account {...account()} />,\n },\n {\n edge: 'Deposit, GET /deposit?address',\n name: 'Deposit',\n screen: <Deposit address={accounts[0].address} heading=\"h4\" />,\n },\n {\n edge: 'Tempo, GET /deposit?address&method=tempo',\n name: 'Receive funds',\n screen: (\n <Deposit\n address={accounts[0].address}\n heading=\"h4\"\n method=\"tempo\"\n />\n ),\n },\n {\n edge: 'Back, GET /deposit?address',\n name: 'Deposit',\n screen: <Deposit address={accounts[0].address} heading=\"h4\" />,\n },\n {\n edge: 'Back, GET /',\n name: 'Your account',\n screen: <Account {...account()} />,\n },\n ],\n title: 'Deposit',\n },\n {\n description: 'Done on Receive funds opens the account page at once.',\n nodes: [\n { detail: 'GET /deposit?address&method=tempo', name: 'Browser' },\n {\n edge: '200 deposit page',\n name: 'Receive funds',\n screen: (\n <Deposit\n address={accounts[0].address}\n heading=\"h4\"\n method=\"tempo\"\n />\n ),\n },\n {\n edge: 'Done, GET /',\n name: 'Your account',\n screen: <Account {...account()} />,\n },\n ],\n title: 'Deposit: done',\n },\n {\n description:\n 'An address that is not one of the user’s wallets in the `default` realm shows no address. A spent rate limit or a failed account read shows its own reason in the same place.',\n nodes: [\n {\n detail: 'GET /deposit?address (not the user’s)',\n name: 'Browser',\n },\n {\n edge: '200, address: null',\n name: 'Deposit (wallet not found)',\n screen: (\n <Deposit\n error=\"This wallet was not found. Go back to your account, then choose Deposit.\"\n heading=\"h4\"\n />\n ),\n },\n {\n edge: 'Or: the account rate limit is spent',\n name: 'Deposit (rate limited)',\n screen: (\n <Deposit\n error=\"Too many requests. Try again in 1 minute.\"\n heading=\"h4\"\n />\n ),\n },\n {\n edge: 'Or: the accounts cannot be read',\n name: 'Deposit (unavailable)',\n screen: (\n <Deposit\n error=\"Your wallets failed to load. Reload the page to try again.\"\n heading=\"h4\"\n />\n ),\n },\n ],\n title: 'Deposit: unknown wallet',\n },\n {\n description:\n 'A page path that no route serves responds with status 404 and the not-found screen, which links to the account page. An API path, such as `/v1/…` or `/oauth2/…`, responds with `unknown_endpoint` instead.',\n nodes: [\n { detail: 'GET /nope', name: 'Browser' },\n {\n edge: '404',\n name: 'Page not found',\n screen: <NotFound heading=\"h4\" />,\n },\n {\n edge: 'Go to your account, GET /',\n name: 'Your account',\n screen: <Account {...account()} />,\n },\n ],\n title: 'Unknown page: 404',\n },\n ],\n title: 'Account and deposit',\n },\n {\n flows: [\n {\n description:\n 'A web app redirects a signed-out user to the sign-in page, which names the app of the request that Better Auth signs. A page on Tempo ID’s site can first prefetch the sign-in page’s assets from `GET /v1/auth/assets`.',\n nodes: [\n redirectEntry,\n {\n edge: 'Page /login?…&sig, GET /login: request without key',\n name: 'Sign in (app)',\n screen: <SignIn {...signIn()} request={appRequest()} />,\n },\n {\n edge: 'POST /v1/auth/code',\n name: 'Check your email',\n screen: <SignIn {...signIn()} email={email} />,\n },\n {\n edge: 'POST /v1/auth/code/verify with oauth_query: 200',\n name: 'Check your email (accepted)',\n screen: <SignIn {...signIn()} email={email} verified />,\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'after 500 ms, redirect',\n name: 'Web app callback',\n },\n tokenExit,\n ],\n title: 'Redirect: signed out',\n },\n {\n description:\n 'A signed-out user’s request with a key shows the app and the key on the sign-in page. The first sign-in of the request grants the key, so the browser returns to the app without the approval page.',\n nodes: [\n keyedEntry,\n {\n edge: 'Page /login?…&sig, GET /login: request',\n name: 'Sign in (key)',\n screen: <SignIn {...signIn()} request={signInRequest()} />,\n },\n {\n edge: 'POST /v1/auth/code',\n name: 'Check your email',\n screen: <SignIn {...signIn()} email={email} />,\n },\n {\n edge: 'POST /v1/auth/code/verify with oauth_query: 200, grants the key',\n name: 'Check your email (accepted)',\n screen: <SignIn {...signIn()} email={email} verified />,\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'after 500 ms, redirect',\n name: 'Web app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n },\n ],\n title: 'Sign-in grant',\n },\n {\n description:\n 'On the sign-in page, the passkey’s challenge is the digest of the request’s key. One assertion signs the user in and signs the key, for an account that this passkey owns, or that Privy or secp256k1 owns.',\n nodes: [\n keyedEntry,\n {\n edge: 'Page /login?…&sig',\n name: 'Sign in (key)',\n screen: <SignIn {...signIn()} request={signInRequest()} />,\n },\n {\n detail:\n 'POST /v1/auth/passkey/options with oauth_query, as the page shows: the key’s digest',\n edge: 'Sign in with a passkey',\n name: 'Authenticator prompt',\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'POST /v1/auth/passkey/verify with oauth_query, grants the key',\n name: 'Web app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n },\n ],\n title: 'Sign-in grant: passkey sign-in with key signature',\n },\n {\n description:\n 'When the account reads are spent, the account step does not run, so a user with several accounts receives no grant. The approval page opens, and holds Approve until a reload after a minute.',\n nodes: [\n keyedEntry,\n {\n edge: 'Page /login?…&sig',\n name: 'Sign in (key)',\n screen: <SignIn {...signIn()} request={signInRequest()} />,\n },\n {\n edge: 'POST /v1/auth/code',\n name: 'Check your email',\n screen: <SignIn {...signIn()} email={email} />,\n },\n {\n edge: 'POST /v1/auth/code/verify with oauth_query: ACCOUNT_LIMIT spent, no account step, several accounts: no grant',\n name: 'Check your email (accepted)',\n screen: <SignIn {...signIn()} email={email} verified />,\n },\n {\n edge: 'after 500 ms, redirect /authorize?…&sig',\n name: 'Authorize this app (unavailable)',\n screen: (\n <Approval\n {...approval()}\n keyAuthorization={{ ...key(), refusal: 'unavailable' }}\n />\n ),\n },\n {\n edge: 'Reload after a minute',\n name: 'Authorize this app',\n screen: <Approval {...approval()} />,\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'Approve, POST /v1/authorize/consent',\n name: 'Web app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n },\n ],\n title: 'Sign-in grant: account reads spent',\n },\n {\n description:\n 'A held grant covers only the request that the sign-in spent. A request with another `scope`, or with a `challenge`, takes no held grant on the account step, so the approval page opens.',\n nodes: [\n {\n detail: 'GET /choose-account?…&sig, another scope or a challenge',\n name: 'Browser',\n },\n {\n edge: '200 account step',\n name: 'Choose a wallet',\n screen: <ChooseAccount {...chooseAccount()} />,\n },\n {\n edge: 'Choose, POST /v1/authorize/account: another scope, no held grant, redirect /authorize?…&sig',\n name: 'Authorize this app (another scope)',\n screen: <Approval {...approval()} />,\n },\n {\n edge: 'Or: a challenge, which takes no grant, redirect /authorize?…&sig',\n name: 'Authorize this app (challenge)',\n screen: (\n <Approval\n {...approval()}\n keyAuthorization={{\n ...key(),\n challenge: 'Sign in to api.example.com\\nNonce: 8f2a91',\n }}\n />\n ),\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'Approve, POST /v1/authorize/consent',\n name: 'Web app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n },\n ],\n title: 'Sign-in grant: another request',\n },\n {\n description:\n 'A user with several accounts in the app’s realms chooses one, and the choice takes the sign-in’s grant, which lasts 10 minutes. A passkey that owns the chosen account first signs the key on this step.',\n nodes: [\n keyedEntry,\n {\n edge: 'Page /login?…&sig',\n name: 'Sign in (key)',\n screen: <SignIn {...signIn()} request={signInRequest()} />,\n },\n {\n edge: 'POST /v1/auth/code',\n name: 'Check your email',\n screen: <SignIn {...signIn()} email={email} />,\n },\n {\n edge: 'POST /v1/auth/code/verify with oauth_query: 200, holds the grant',\n name: 'Check your email (accepted)',\n screen: <SignIn {...signIn()} email={email} verified />,\n },\n {\n edge: 'after 500 ms, redirect /choose-account?…&sig',\n name: 'Choose a wallet',\n screen: <ChooseAccount {...chooseAccount()} />,\n },\n {\n edge: 'Choose, POST /v1/authorize/account',\n name: 'Choose a wallet (selecting)',\n screen: (\n <ChooseAccount\n {...chooseAccount()}\n selecting={accounts[0].address}\n />\n ),\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'takes the held grant, redirect (a passkey account: passkey step, then POST again with the assertion)',\n name: 'Web app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n },\n ],\n title: 'Sign-in grant: account step',\n },\n {\n description:\n 'A sign-in that cannot grant the key keeps the redirect to the approval page, which shows the request again. Causes include another passkey that owns the account, a replayed request, a refused key, a spent rate limit, or an upstream failure.',\n nodes: [\n keyedEntry,\n {\n edge: 'Page /login?…&sig',\n name: 'Sign in (key)',\n screen: <SignIn {...signIn()} request={signInRequest()} />,\n },\n {\n edge: 'Sign-in with oauth_query: the grant fails, redirect /authorize?…&sig',\n name: 'Authorize this app',\n screen: <Approval {...approval()} />,\n },\n {\n edge: 'Approve, POST /v1/authorize/consent',\n name: 'Authorize this app (approving)',\n screen: <Approval {...approval()} approving />,\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'redirect, or the passkey step first',\n name: 'Web app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n },\n ],\n title: 'Sign-in grant: falls back to approval',\n },\n {\n description:\n 'The account step’s signed query expires 10 minutes after the sign-in, just before its held grant. A later choice is refused with `authorization_expired`, so the user starts again in the app.',\n nodes: [\n keyedEntry,\n {\n edge: 'Page /login?…&sig',\n name: 'Sign in (key)',\n screen: <SignIn {...signIn()} request={signInRequest()} />,\n },\n {\n edge: 'POST /v1/auth/code',\n name: 'Check your email',\n screen: <SignIn {...signIn()} email={email} />,\n },\n {\n edge: 'POST /v1/auth/code/verify with oauth_query: 200, holds the grant',\n name: 'Check your email (accepted)',\n screen: <SignIn {...signIn()} email={email} verified />,\n },\n {\n edge: 'after 500 ms, redirect /choose-account?…&sig',\n name: 'Choose a wallet',\n screen: <ChooseAccount {...chooseAccount()} />,\n },\n {\n edge: 'After 10 minutes, Choose, POST /v1/authorize/account: authorization_expired',\n name: 'Choose a wallet (request expired)',\n screen: (\n <ChooseAccount\n {...chooseAccount()}\n error=\"Expired authorization request: the request from the app is no longer valid. Return to the app, and start again.\"\n />\n ),\n },\n {\n detail:\n 'GET /oauth2/authorize?…&key_authorization, a new request',\n edge: 'Return to the app, and start again',\n name: 'Web app',\n },\n ],\n title: 'Sign-in grant: account step expired',\n },\n {\n description:\n 'A request with a `challenge` signs a message that only the approval page shows. So the sign-in page names the app but shows no key, and the sign-in grants nothing.',\n nodes: [\n {\n ...keyedEntry,\n detail: 'GET /oauth2/authorize?…&key_authorization&challenge',\n },\n {\n edge: 'Page /login?…&sig, GET /login: request without key',\n name: 'Sign in (app)',\n screen: <SignIn {...signIn()} request={appRequest()} />,\n },\n {\n edge: 'POST /v1/auth/code',\n name: 'Check your email',\n screen: <SignIn {...signIn()} email={email} />,\n },\n {\n edge: 'POST /v1/auth/code/verify with oauth_query: 200',\n name: 'Check your email (accepted)',\n screen: <SignIn {...signIn()} email={email} verified />,\n },\n {\n edge: 'after 500 ms, redirect /authorize?…&sig',\n name: 'Authorize this app (challenge)',\n screen: (\n <Approval\n {...approval()}\n keyAuthorization={{\n ...key(),\n challenge: 'Sign in to api.example.com\\nNonce: 8f2a91',\n }}\n />\n ),\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'Approve, POST /v1/authorize/consent',\n name: 'Web app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n },\n ],\n title: 'Sign-in grant: with a challenge',\n },\n {\n description:\n 'A signed-in user returns to an app that skips consent at once. Tempo ID shows no screen.',\n nodes: [\n redirectEntry,\n {\n detail: 'GET redirect_uri?code&state',\n edge: '302, no screen',\n name: 'Web app callback',\n },\n tokenExit,\n ],\n title: 'Redirect: signed in',\n },\n {\n description:\n 'A request with `prompt=login` asks a signed-in user to sign in again. The sign-in page shows the request, and its key, despite the session.',\n nodes: [\n {\n ...keyedEntry,\n detail: 'GET /oauth2/authorize?…&key_authorization&prompt=login',\n },\n {\n edge: 'Page /login?…&prompt=login consent&sig',\n name: 'Sign in (key)',\n screen: <SignIn {...signIn()} request={signInRequest()} />,\n },\n {\n edge: 'POST /v1/auth/code',\n name: 'Check your email',\n screen: <SignIn {...signIn()} email={email} />,\n },\n {\n edge: 'POST /v1/auth/code/verify with oauth_query: 200, grants the key',\n name: 'Check your email (accepted)',\n screen: <SignIn {...signIn()} email={email} verified />,\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'after 500 ms, redirect',\n name: 'Web app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n },\n ],\n title: 'Redirect: prompt=login',\n },\n {\n description:\n 'A signed-in user approves a third-party app, which never skips consent, once for the scopes it requests. The request carries no key, so the page shows none.',\n nodes: [\n redirectEntry,\n {\n edge: 'Page /authorize?…&sig',\n name: 'Authorize this app (no key)',\n screen: <Approval {...approval()} keyAuthorization={undefined} />,\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'POST /v1/authorize/consent, accept',\n name: 'Web app callback',\n },\n tokenExit,\n ],\n title: 'Approval: no key',\n },\n {\n description:\n 'A signed-in user’s request with a key opens the approval page, which holds Approve until the account read streams in. A Privy or secp256k1 owner signs the key on the server when the user approves.',\n nodes: [\n {\n ...redirectEntry,\n detail: 'GET /oauth2/authorize?…&key_authorization',\n },\n {\n edge: 'Page /authorize?…&sig, GET /i/authorize/request',\n name: 'Authorize this app (checking)',\n screen: <Approval {...approval()} checking />,\n },\n {\n edge: 'GET /v1/authorize/request streams in: the account and any refusal',\n name: 'Authorize this app',\n screen: <Approval {...approval()} />,\n },\n {\n edge: 'Approve, POST /v1/authorize/consent',\n name: 'Authorize this app (approving)',\n screen: <Approval {...approval()} approving />,\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'redirect',\n name: 'Web app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n },\n ],\n title: 'Approval: key',\n },\n {\n description:\n 'A key on a chain other than mainnet shows its chain as a gray tag on the permissions card. The tag shows the name that `GET /v1/chains` lists, or else the chain ID.',\n nodes: [\n {\n ...redirectEntry,\n detail: 'GET /oauth2/authorize?…&key_authorization with chainId',\n },\n {\n edge: 'Page /authorize?…&sig',\n name: 'Authorize this app (another chain)',\n screen: (\n <Approval\n {...approval()}\n keyAuthorization={{\n ...key(),\n chain: { id: 31318, name: 't14' },\n }}\n />\n ),\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'Approve, POST /v1/authorize/consent',\n name: 'Web app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n },\n ],\n title: 'Approval: key on another chain',\n },\n {\n description:\n 'A third-party app names its metadata document’s URL, or its origin, as `client_id`, and registers nothing. The page shows the host beside the name, marks no name as verified, and grants only keys that name expiry, limits, and scopes.',\n nodes: [\n {\n detail:\n 'GET /oauth2/authorize?client_id=https://app.example.com/.well-known/oauth-client-metadata.json&key_authorization',\n name: 'Third-party app',\n },\n {\n edge: \"GET client_id: the metadata document or the origin's manifest, page /authorize?…&sig\",\n name: 'Authorize this app (third-party)',\n screen: (\n <Approval\n {...approval()}\n app=\"Example\"\n destination=\"app.example.com\"\n verified={false}\n />\n ),\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'Approve, POST /v1/authorize/consent',\n name: 'Third-party app callback',\n },\n {\n detail: 'Tokens, account, and key_authorization',\n edge: 'POST /oauth2/token with code_verifier',\n name: 'Third-party app',\n },\n ],\n title: 'Third-party app',\n },\n {\n description:\n 'A third-party app’s key that leaves out its expiry, limits, or scopes returns to the app with `missing_permissions`, before sign-in.',\n nodes: [\n {\n detail:\n 'GET /oauth2/authorize?client_id=https://app.example.com/.well-known/oauth-client-metadata.json&key_authorization (no limits)',\n name: 'Third-party app',\n },\n {\n detail: 'GET redirect_uri?error=invalid_authorization_details',\n edge: 'missing_permissions',\n name: 'Third-party app callback',\n },\n ],\n title: 'Third-party app: missing permissions',\n },\n {\n description:\n 'A passkey owns the account, so the approval returns the passkey step. The passkey signs the key’s digest, and the page approves again.',\n nodes: [\n {\n ...redirectEntry,\n detail: 'GET /oauth2/authorize?…&key_authorization',\n },\n {\n edge: 'Page /authorize?…&sig',\n name: 'Authorize this app',\n screen: <Approval {...approval()} />,\n },\n {\n edge: 'Approve, POST /v1/authorize/consent',\n name: 'Authorize this app (approving)',\n screen: <Approval {...approval()} approving />,\n },\n {\n detail: 'Signs the key authorization, over the approving page',\n edge: 'step passkey',\n name: 'Authenticator prompt',\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'POST /v1/authorize/consent with passkey.assertion',\n name: 'Web app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n },\n ],\n title: 'Approval: passkey account',\n },\n {\n description:\n 'When a wallet.tempo passkey’s wallet waits for its upgrade, Approve shows the upgrade step first. The approval follows the upgrade, so the browser returns to the app.',\n nodes: [\n {\n ...redirectEntry,\n detail: 'GET /oauth2/authorize?…&key_authorization',\n },\n {\n edge: 'Page /authorize?…&sig, GET /v1/authorize/request: refusal upgrade, GET /i/account/passkeys for a passkey that has not linked, POST /v1/account/upgrade, the passkey step',\n name: 'Authorize this app',\n screen: <Approval {...approval()} />,\n },\n {\n edge: 'Approve',\n name: 'Upgrade your wallet',\n screen: <WalletUpgrade {...walletUpgrade()} />,\n },\n {\n edge: 'Or: POST /v1/account/upgrade: reauthentication_required, then Sign in again, POST /v1/auth/logout, and the sign-in page',\n name: 'Upgrade your wallet (sign in again)',\n screen: <WalletUpgrade {...walletUpgrade()} onSignIn={noop} />,\n },\n {\n detail:\n 'Signs the upgrade, then the key authorization, over the upgrading step',\n edge: 'Continue, POST /v1/account/upgrade with passkey.assertion, then POST /v1/authorize/consent, step passkey',\n name: 'Authenticator prompt',\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'POST /v1/authorize/consent with passkey.assertion',\n name: 'Web app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n },\n ],\n title: 'Approval: upgrade after Approve',\n },\n {\n description:\n 'Not now on the upgrade step approves the request without the upgrade, and the passkey signs the key as its own account. The key stops working on that chain once the wallet upgrades, and the account page and the next approval offer the upgrade again.',\n nodes: [\n {\n ...redirectEntry,\n detail: 'GET /oauth2/authorize?…&key_authorization',\n },\n {\n edge: 'Page /authorize?…&sig, GET /v1/authorize/request: refusal upgrade, then Approve',\n name: 'Upgrade your wallet',\n screen: <WalletUpgrade {...walletUpgrade()} />,\n },\n {\n edge: 'Not now, POST /v1/authorize/consent with skip_upgrade',\n name: 'Upgrade your wallet (skipping)',\n screen: <WalletUpgrade {...walletUpgrade()} skipping />,\n },\n {\n detail:\n 'Signs the key authorization as the passkey’s own account, over the skipping step',\n edge: 'step passkey',\n name: 'Authenticator prompt',\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'POST /v1/authorize/consent with skip_upgrade and passkey.assertion, which links a passkey that has not linked',\n name: 'Web app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n },\n ],\n title: 'Approval: skip the upgrade',\n },\n {\n description:\n 'An app with the `tempo-id:sign` scope sends a challenge, and the approval page shows the message that the key signs.',\n nodes: [\n {\n detail: 'GET /oauth2/authorize?…&key_authorization&challenge',\n name: 'Native app',\n },\n {\n edge: 'Page /authorize?…&sig',\n name: 'Authorize this app (challenge)',\n screen: (\n <Approval\n {...approval()}\n app=\"Tempo Mobile\"\n destination=\"tempo\"\n keyAuthorization={{\n ...key(),\n challenge: 'Sign in to api.example.com\\nNonce: 8f2a91',\n }}\n />\n ),\n },\n {\n detail: 'tempo:/callback?code&state',\n edge: 'POST /v1/authorize/consent, accept',\n name: 'Native app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n name: 'Native app',\n },\n ],\n title: 'Approval: challenge',\n },\n {\n description:\n 'Beside its limits, the approval page lists the `open` and `topUp` calls on the channel reserve as funds held for services. Its info icon links to the Machine Payments Protocol.',\n nodes: [\n {\n ...redirectEntry,\n detail: 'GET /oauth2/authorize?…&key_authorization',\n },\n {\n edge: 'Page /authorize?…&sig',\n name: 'Authorize this app (MPP sessions)',\n screen: (\n <Approval\n {...approval()}\n keyAuthorization={{\n ...key(),\n calls: [{ call: 'open' }, { call: 'topUp' }],\n }}\n />\n ),\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'POST /v1/authorize/consent, accept',\n name: 'Web app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n },\n ],\n title: 'Approval: MPP sessions',\n },\n {\n description:\n 'The approval page lists a key’s calls that Tempo ID does not recognize, such as a function on another contract, with a warning. A headless request refuses them unless the app holds the `tempo-id:sign` scope.',\n nodes: [\n {\n ...redirectEntry,\n detail: 'GET /oauth2/authorize?…&key_authorization',\n },\n {\n edge: 'Page /authorize?…&sig',\n name: 'Authorize this app (unrecognized calls)',\n screen: (\n <Approval\n {...approval()}\n keyAuthorization={{\n ...key(),\n unrecognized: [\n {\n address: '0xdec0000000000000000000000000000000000000',\n selector: '0x12345678',\n },\n ],\n }}\n />\n ),\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'POST /v1/authorize/consent, accept',\n name: 'Web app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n },\n ],\n title: 'Approval: unrecognized calls',\n },\n {\n description:\n 'A user with more than one Tempo Account in the app’s realms chooses one, which continues to the approval page. Each row shows the account’s balance on the key’s chain, or Balance unavailable when the read fails.',\n nodes: [\n {\n ...redirectEntry,\n detail: 'GET /oauth2/authorize?…&key_authorization',\n },\n {\n edge: 'Page /choose-account?…&sig',\n name: 'Choose a wallet',\n screen: <ChooseAccount {...chooseAccount()} />,\n },\n {\n edge: 'Or: a balance read fails',\n name: 'Choose a wallet (balance unavailable)',\n screen: (\n <ChooseAccount\n {...chooseAccount()}\n accounts={[accounts[0], { ...accounts[1], balance: null }]}\n />\n ),\n },\n {\n edge: 'Choose, POST /v1/authorize/account',\n name: 'Choose a wallet (selecting)',\n screen: (\n <ChooseAccount\n {...chooseAccount()}\n selecting={accounts[0].address}\n />\n ),\n },\n {\n edge: 'redirect /authorize?…&sig, GET /v1/authorize/request: account',\n name: 'Authorize this app (account)',\n screen: <Approval {...approval()} account={selectedAccount()} />,\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'POST /v1/authorize/consent, accept',\n name: 'Web app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n },\n ],\n title: 'Account step',\n },\n {\n description:\n 'A user with several Tempo Accounts who returns in the same session skips the account step, and the approval page shows the selected account. Sign-out from Tempo ID ends the selection.',\n nodes: [\n {\n ...redirectEntry,\n detail: 'GET /oauth2/authorize?…&key_authorization',\n },\n {\n edge: 'Page /authorize?…&sig, GET /v1/authorize/request: account',\n name: 'Authorize this app (selected account)',\n screen: <Approval {...approval()} account={selectedAccount()} />,\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'POST /v1/authorize/consent, accept',\n name: 'Web app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n },\n ],\n title: 'Account step: selection kept',\n },\n {\n description:\n 'An app in several realms, such as web-shared, lists accounts from each. Each row then names its realm, apart from the `default` realm.',\n nodes: [\n {\n ...redirectEntry,\n detail: 'GET /oauth2/authorize?…&key_authorization',\n name: 'Web app in two realms',\n },\n {\n edge: 'Page /choose-account?…&sig',\n name: 'Choose a wallet (two realms)',\n screen: (\n <ChooseAccount\n {...chooseAccount()}\n accounts={[\n { ...accounts[0], realm: 'Tempo Cash' },\n accounts[1],\n ]}\n />\n ),\n },\n {\n edge: 'Choose, POST /v1/authorize/account',\n name: 'Choose a wallet (two realms, selecting)',\n screen: (\n <ChooseAccount\n {...chooseAccount()}\n accounts={[\n { ...accounts[0], realm: 'Tempo Cash' },\n accounts[1],\n ]}\n selecting={accounts[0].address}\n />\n ),\n },\n {\n edge: 'redirect /authorize?…&sig',\n name: 'Authorize this app',\n screen: <Approval {...approval()} />,\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'POST /v1/authorize/consent, accept',\n name: 'Web app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n },\n ],\n title: 'Account step: several realms',\n },\n {\n description:\n 'Denying returns the browser to the app with `error=access_denied`. The app receives no code.',\n nodes: [\n {\n ...redirectEntry,\n detail: 'GET /oauth2/authorize?…&key_authorization',\n },\n {\n edge: 'Page /authorize?…&sig',\n name: 'Authorize this app',\n screen: <Approval {...approval()} />,\n },\n {\n edge: 'Deny',\n name: 'Authorize this app (denying)',\n screen: <Approval {...approval()} denying />,\n },\n {\n detail: 'GET redirect_uri?error=access_denied&state',\n edge: 'POST /v1/authorize/consent, accept: false',\n name: 'Web app callback',\n },\n ],\n title: 'Approval: denied',\n },\n {\n description:\n 'Approval cannot sign some keys, so the page holds Approve and states why. Deny still returns to the app.',\n nodes: [\n {\n ...redirectEntry,\n detail: 'GET /oauth2/authorize?…&key_authorization',\n },\n {\n edge: 'Page /authorize?…&sig: no account, and no Privy app to create one',\n name: 'Authorize this app (no account)',\n screen: (\n <Approval\n {...approval()}\n keyAuthorization={{ ...key(), refusal: 'no_account' }}\n />\n ),\n },\n {\n edge: 'Or: a passkey whose relying party is not Tempo ID’s, or POST /v1/authorize/consent: webauthn_required',\n name: 'Authorize this app (passkey)',\n screen: (\n <Approval\n {...approval()}\n keyAuthorization={{ ...key(), refusal: 'passkey' }}\n />\n ),\n },\n {\n edge: 'Or: a wallet.tempo passkey’s wallet waits for its upgrade, and the page reads no upgrade for it, such as when GET /i/chains fails',\n name: 'Authorize this app (upgrade first)',\n screen: (\n <Approval\n {...approval()}\n keyAuthorization={{ ...key(), refusal: 'upgrade' }}\n />\n ),\n },\n {\n edge: 'Or: the key names an account that the user does not hold',\n name: 'Authorize this app (foreign account)',\n screen: (\n <Approval\n {...approval()}\n keyAuthorization={{ ...key(), refusal: 'foreign_account' }}\n />\n ),\n },\n {\n edge: 'Or: the accounts cannot be read',\n name: 'Authorize this app (unavailable)',\n screen: (\n <Approval\n {...approval()}\n keyAuthorization={{ ...key(), refusal: 'unavailable' }}\n />\n ),\n },\n {\n detail: 'GET redirect_uri?error=access_denied&state',\n edge: 'Deny, POST /v1/authorize/consent, accept: false',\n name: 'Web app callback',\n },\n ],\n title: 'Approval: key it cannot sign',\n },\n {\n description:\n 'A key that breaks a rule returns to the app with the refusal, as `/oauth2/authorize` returns one before sign-in. The `error` names the rule, such as `invalid_authorization_details` for an expired key, or `unauthorized_client` for a challenge without the `tempo-id:sign` scope.',\n nodes: [\n {\n ...redirectEntry,\n detail: 'GET /oauth2/authorize?…&key_authorization',\n },\n {\n detail: 'GET redirect_uri?error&error_description',\n edge: 'key refused',\n name: 'Web app callback',\n },\n ],\n title: 'Refused key',\n },\n {\n description:\n 'A changed or expired query, or a request without a known app, shows an invalid request, on the approval page and on the account step.',\n nodes: [\n { detail: 'GET /authorize?…&sig (changed)', name: 'Browser' },\n {\n edge: '200, request: null',\n name: 'This sign-in request is invalid',\n screen: <InvalidRequest heading=\"h4\" />,\n },\n {\n edge: 'Or: GET /choose-account?…&sig (changed), 200, request: null',\n name: 'This sign-in request is invalid (account step)',\n screen: <InvalidRequest heading=\"h4\" />,\n },\n ],\n title: 'Invalid request',\n },\n {\n description:\n '`/oauth2/authorize` shows the error page, not a redirect, for an unknown or disabled app, a failed metadata document, or an unregistered `redirect_uri`. The page maps `error` to fixed copy and never shows `error_description`.',\n nodes: [\n {\n ...redirectEntry,\n detail: 'GET /oauth2/authorize?client_id (unknown)',\n },\n {\n edge: 'Page /error?error=invalid_client',\n name: 'This app is not recognized',\n screen: <InvalidRequest heading=\"h4\" reason=\"client\" />,\n },\n {\n edge: 'Or: redirect_uri not registered, 302 /error?error=invalid_redirect',\n name: 'This app’s return address is not registered',\n screen: <InvalidRequest heading=\"h4\" reason=\"redirect\" />,\n },\n {\n edge: 'Or: another error, such as unsupported_response_type',\n name: 'This sign-in request is invalid (error page)',\n screen: <InvalidRequest heading=\"h4\" />,\n },\n ],\n title: 'Unknown app or redirect URI',\n },\n {\n description:\n 'A backend runs the redirect flow and redeems the code with its client secret, so tokens never reach the browser. In the test harness, no account in the `default` realm can sign the request’s key, so the approval page holds Approve.',\n nodes: [\n {\n detail: 'GET /auth/start on the backend, with a key',\n name: 'Backend playground',\n },\n {\n edge: '302 /oauth2/authorize with state and code_challenge, page /login?…&sig',\n name: 'Sign in (key)',\n screen: (\n <SignIn\n {...signIn()}\n request={{ ...signInRequest(), app: 'Backend playground' }}\n />\n ),\n },\n {\n edge: 'POST /v1/auth/code',\n name: 'Check your email',\n screen: <SignIn {...signIn()} email={email} />,\n },\n {\n edge: 'POST /v1/auth/code/verify with oauth_query: 200, no account to sign',\n name: 'Check your email (accepted)',\n screen: <SignIn {...signIn()} email={email} verified />,\n },\n {\n edge: 'after 500 ms, redirect /authorize?…&sig',\n name: 'Authorize this app (no account)',\n screen: (\n <Approval\n {...approval()}\n app=\"Backend playground\"\n destination=\"backend.example.com\"\n keyAuthorization={{ ...key(), refusal: 'no_account' }}\n />\n ),\n },\n {\n detail: 'GET /auth/callback?error=access_denied&state',\n edge: 'Deny, POST /v1/authorize/consent, accept: false',\n name: 'Backend callback',\n },\n {\n detail: 'GET /auth/callback?code&state',\n edge: '302 /auth/start?key=false, 302 /oauth2/authorize, 302, no screen',\n name: 'Backend callback',\n },\n {\n detail: 'Tokens stay on the server, without a key',\n edge: 'POST /oauth2/token with client_secret',\n name: 'Backend session',\n },\n ],\n title: 'Backend app',\n },\n ],\n title: 'App authorization',\n },\n {\n flows: [\n {\n description:\n \"The app's own pages send the code, then verify it with the authorization request, which signs in, creates the first account, and returns the authorization. Tempo ID shows no screen.\",\n nodes: [\n { detail: 'Web playground', name: \"App's sign-in\" },\n {\n edge: appSignInEdge,\n name: 'Sign in',\n owner: 'app',\n screen: <AppSignIn />,\n },\n {\n edge: 'POST /v1/auth/code',\n name: 'Check your email',\n owner: 'app',\n screen: <AppCode />,\n },\n {\n edge: 'POST /v1/auth/code/verify with authorize: user and authorization',\n name: 'Signed in',\n owner: 'app',\n screen: <AppSignedIn />,\n },\n ],\n title: 'Email code',\n },\n {\n description:\n \"A wallet.tempo passkey owns the user's account, so the code signs no key, and the sign-in returns the passkey step. The passkey then signs the key's digest on the app's page, with no approval page, when its relying party covers the page.\",\n nodes: [\n { detail: 'Web playground', name: \"App's sign-in\" },\n {\n edge: appSignInEdge,\n name: 'Sign in',\n owner: 'app',\n screen: <AppSignIn />,\n },\n {\n edge: 'POST /v1/auth/code',\n name: 'Check your email',\n owner: 'app',\n screen: <AppCode />,\n },\n {\n detail:\n 'POST /v1/auth/code/verify with authorize and passkey: step passkey',\n edge: 'Code complete',\n name: 'Authenticator prompt',\n },\n {\n edge: 'POST /v1/authorize with expiry and passkey: { assertion }: authorization',\n name: 'Signed in',\n owner: 'app',\n screen: <AppSignedIn />,\n },\n ],\n title: 'Email code: passkey account',\n },\n {\n description:\n 'A signed-in user skips the code. The app requests the authorization at once.',\n nodes: [\n { detail: 'Session cookie set', name: \"App's page\" },\n {\n edge: 'GET /v1/auth/session, POST /v1/authorize',\n name: 'Signed in',\n owner: 'app',\n screen: <AppSignedIn />,\n },\n ],\n title: 'Email code: signed in',\n },\n {\n description:\n \"The app's page runs the passkey ceremony with its client ID, which selects the app's realms, and its authorization request. The challenge is the key's digest, so one assertion signs the user in and signs the key of the passkey's account, with no approval page.\",\n nodes: [\n { detail: 'Web playground', name: \"App's sign-in\" },\n {\n edge: appSignInEdge,\n name: 'Sign in',\n owner: 'app',\n screen: <AppSignIn />,\n },\n {\n detail:\n 'The options of `Actions.passkey.prepare`, as the form showed: GET /v1/realms, then POST /v1/auth/passkey/options with client_id and authorize',\n edge: 'Continue with passkey',\n name: 'Authenticator prompt',\n },\n {\n edge: 'POST /v1/auth/passkey/verify: user and authorization',\n name: 'Signed in',\n owner: 'app',\n screen: <AppSignedIn />,\n },\n ],\n title: 'Passkey',\n },\n {\n description:\n \"A wallet.tempo passkey without an email verifies one through the app's own code step. The passkey signs again with the code, which links it, and that assertion signs the key of its account.\",\n nodes: [\n { detail: 'Web playground', name: \"App's sign-in\" },\n {\n edge: appSignInEdge,\n name: 'Sign in',\n owner: 'app',\n screen: <AppSignIn />,\n },\n {\n detail:\n 'The options of `Actions.passkey.prepare`, as the form showed: GET /v1/realms, then POST /v1/auth/passkey/options with client_id',\n edge: 'Continue with passkey',\n name: 'Authenticator prompt',\n },\n {\n edge: 'POST /v1/auth/passkey/verify: step email',\n name: 'Add your email',\n owner: 'app',\n screen: <AppEmail />,\n },\n {\n edge: 'POST /v1/auth/code',\n name: 'Check your email',\n owner: 'app',\n screen: <AppCode />,\n },\n {\n detail: 'POST /v1/auth/passkey/options with link',\n edge: 'Code complete',\n name: 'Authenticator prompt',\n },\n {\n edge: 'POST /v1/auth/code/verify with link and assertion: user and authorization',\n name: 'Signed in',\n owner: 'app',\n screen: <AppSignedIn />,\n },\n ],\n title: 'Passkey: adds an email',\n },\n {\n description:\n 'In a sign-in with key signature, a passkey signs only the key of its own account. For another passkey’s account, the sign-in refuses the key with `webauthn_required`, and the app signs in through a redirect without a key.',\n nodes: [\n {\n detail: 'POST /v1/auth/passkey/verify: webauthn_required',\n name: \"App's sign-in\",\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'GET /oauth2/authorize without key_authorization, 302, no screen',\n name: 'Web app callback',\n },\n {\n edge: 'POST /oauth2/token with code_verifier',\n name: 'Signed in',\n owner: 'app',\n screen: <AppSignedIn />,\n },\n ],\n title: 'Passkey: falls back to redirect',\n },\n {\n description:\n \"On a chain whose accounts are configurable, a wallet.tempo passkey's account waits for its upgrade. The sign-in sets `skip_upgrade`, so its one assertion signs the key as the passkey's own account, and returns `upgradeAvailable`. The web playground then calls `Actions.account.upgrade` in the same click. Its prompt signs the upgrade, and Tempo ID first registers the key through a sponsored transaction that the access key signs, so the key keeps working.\",\n nodes: [\n { detail: 'Web playground', name: \"App's sign-in\" },\n {\n edge: appSignInEdge,\n name: 'Sign in',\n owner: 'app',\n screen: <AppSignIn />,\n },\n {\n detail:\n 'The options of `Actions.passkey.prepare`, with skip_upgrade in authorize',\n edge: 'Continue with passkey',\n name: 'Authenticator prompt',\n },\n {\n detail:\n 'POST /v1/account/upgrade with key_authorization: the passkey step, with step.key.digest, which the access key signs with no prompt',\n edge: 'POST /v1/auth/passkey/verify: user and authorization with upgrade_available: true',\n name: 'Authenticator prompt',\n },\n {\n edge: 'POST /v1/account/upgrade with passkey.assertion and key.signature: the key registers, then the account upgrades',\n name: 'Signed in',\n owner: 'app',\n screen: <AppSignedIn />,\n },\n ],\n title: 'Passkey: upgrade the wallet',\n },\n ],\n title: 'Headless apps',\n },\n {\n flows: [\n {\n description:\n '`tempo-id login` requests a code with a new access key, and prints `verification_uri_complete`. After the user approves on the device page, the CLI’s next poll receives the tokens and the signed key, and stores them.',\n nodes: [\n loginEntry,\n {\n detail: 'GET /device?code',\n edge: 'Shows verification_uri_complete',\n name: 'Browser',\n },\n {\n edge: 'Page /login?return_to=/device?code',\n name: 'Sign in',\n screen: <SignIn {...signIn()} device />,\n },\n {\n edge: 'POST /v1/auth/code',\n name: 'Check your email',\n screen: <SignIn {...signIn()} device email={email} />,\n },\n {\n edge: 'POST /v1/auth/code/verify: 200',\n name: 'Check your email (accepted)',\n screen: <SignIn {...signIn()} device email={email} verified />,\n },\n {\n edge: 'after 500 ms, /device?code',\n name: 'Authorize a device',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n request={deviceRequest()}\n />\n ),\n },\n {\n edge: 'POST /v1/device/approve',\n name: 'Authorization successful',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n request={deviceRequest()}\n status=\"approved\"\n />\n ),\n },\n loginExit,\n ],\n title: 'Device code: signed out',\n },\n {\n description:\n 'A user who opens the bare `verification_uri` types the code that the terminal shows.',\n nodes: [\n loginEntry,\n {\n detail: 'GET /device',\n edge: 'Shows user_code and verification_uri',\n name: 'Browser',\n },\n {\n edge: '200 device page',\n name: 'Authorize a device (enter a code)',\n screen: <DeviceApproval {...deviceApproval()} />,\n },\n {\n edge: 'Continue, GET /device?code',\n name: 'Authorize a device',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n request={deviceRequest()}\n />\n ),\n },\n {\n edge: 'POST /v1/device/approve',\n name: 'Authorization successful',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n request={deviceRequest()}\n status=\"approved\"\n />\n ),\n },\n loginExit,\n ],\n title: 'Device code: typed',\n },\n {\n description:\n \"Denying ends the request. The CLI's next poll is refused.\",\n nodes: [\n { detail: 'GET /device?code', name: 'Browser' },\n {\n edge: '200 device page',\n name: 'Authorize a device',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n request={deviceRequest()}\n />\n ),\n },\n {\n edge: 'POST /v1/device/deny',\n name: 'Denied',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n request={deviceRequest()}\n status=\"denied\"\n />\n ),\n },\n {\n detail: 'Exits with not_signed_in',\n edge: 'POST /oauth2/token: access_denied',\n name: 'tempo-id login',\n },\n ],\n title: 'Device code: denied',\n },\n {\n description:\n 'A passkey owns the account, so the approval returns the passkey step. The passkey signs the key’s digest in this browser, and the page approves again.',\n nodes: [\n { detail: 'GET /device?code', name: 'Browser' },\n {\n edge: '200 device page',\n name: 'Authorize a device',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n request={deviceRequest()}\n />\n ),\n },\n {\n edge: 'Approve, POST /v1/device/approve',\n name: 'Authorize a device (approving)',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n approving\n request={deviceRequest()}\n />\n ),\n },\n {\n detail: 'Signs the key authorization, over the approving page',\n edge: 'step passkey',\n name: 'Authenticator prompt',\n },\n {\n edge: 'POST /v1/device/approve with passkey.assertion',\n name: 'Authorization successful',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n request={deviceRequest()}\n status=\"approved\"\n />\n ),\n },\n loginExit,\n ],\n title: 'Device code: passkey account',\n },\n {\n description:\n 'When a wallet.tempo passkey’s wallet waits for its upgrade, the device page shows the upgrade step first. Continue upgrades the wallet and loads the request again, and Not now shows the request with its refusal.',\n nodes: [\n { detail: 'GET /device?code', name: 'Browser' },\n {\n edge: 'GET /v1/device/requests/:code: refusal upgrade, GET /i/account/passkeys for a passkey that has not linked, POST /v1/account/upgrade, the passkey step',\n name: 'Upgrade your wallet',\n screen: <WalletUpgrade {...walletUpgrade()} />,\n },\n {\n edge: 'Continue, POST /v1/account/upgrade with passkey.assertion, then GET /v1/device/requests/:code again',\n name: 'Authorize a device',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n request={deviceRequest()}\n />\n ),\n },\n {\n detail: 'Signs the key authorization, over the approving page',\n edge: 'Approve, POST /v1/device/approve, step passkey',\n name: 'Authenticator prompt',\n },\n {\n edge: 'POST /v1/device/approve with passkey.assertion',\n name: 'Authorization successful',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n request={deviceRequest()}\n status=\"approved\"\n />\n ),\n },\n loginExit,\n ],\n title: 'Device code: upgrade first',\n },\n {\n description:\n 'Approval cannot sign some keys, so the page holds Approve and states why. Deny still ends the request.',\n nodes: [\n { detail: 'GET /device?code', name: 'Browser' },\n {\n edge: 'The key names an account that the user does not hold',\n name: 'Authorize a device (foreign account)',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n request={{\n ...deviceRequest(),\n key_authorization: { ...key(), refusal: 'foreign_account' },\n }}\n />\n ),\n },\n {\n edge: 'Or: no account, and no Privy app to create one, or Not now on the upgrade step',\n name: 'Authorize a device (no account)',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n request={{\n ...deviceRequest(),\n key_authorization: { ...key(), refusal: 'no_account' },\n }}\n />\n ),\n },\n {\n edge: 'Or: a passkey whose relying party is not Tempo ID’s, or POST /v1/device/approve: webauthn_required',\n name: 'Authorize a device (passkey)',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n request={{\n ...deviceRequest(),\n key_authorization: { ...key(), refusal: 'passkey' },\n }}\n />\n ),\n },\n {\n edge: 'Or: the accounts cannot be read',\n name: 'Authorize a device (unavailable)',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n request={{\n ...deviceRequest(),\n key_authorization: { ...key(), refusal: 'unavailable' },\n }}\n />\n ),\n },\n {\n detail: 'POST /oauth2/token: access_denied',\n edge: 'Deny, POST /v1/device/deny',\n name: 'tempo-id login',\n },\n ],\n title: 'Device code: key it cannot sign',\n },\n {\n description:\n 'A CLI with the `tempo-id:sign` scope sends a challenge, and the device page shows the message that the key signs.',\n nodes: [\n {\n detail: 'POST /device/code with key_authorization and challenge',\n name: 'CLI',\n },\n {\n edge: 'GET /device?code, 200 device page',\n name: 'Authorize a device (challenge)',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n request={{\n ...deviceRequest(),\n challenge: 'Sign in to api.example.com\\nNonce: 8f2a91',\n }}\n />\n ),\n },\n {\n edge: 'Approve, POST /v1/device/approve, or the passkey step first',\n name: 'Authorization successful',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n request={deviceRequest()}\n status=\"approved\"\n />\n ),\n },\n {\n detail:\n 'Tokens, and key_authorization bound to the challenge’s hash',\n edge: 'POST /oauth2/token: authorization_pending, then tokens',\n name: 'CLI',\n },\n ],\n title: 'Device code: challenge',\n },\n {\n description:\n 'A code that is already approved or denied shows its outcome again, without the decision buttons.',\n nodes: [\n { detail: 'GET /device?code', name: 'Browser' },\n {\n edge: '200, status: approved',\n name: 'Authorization successful',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n request={deviceRequest()}\n status=\"approved\"\n />\n ),\n },\n ],\n title: 'Device code: already decided',\n },\n {\n description:\n 'A code that no one approves before `expires_in` ends the login. The CLI stores nothing, and the user runs `tempo-id login` again.',\n nodes: [\n loginEntry,\n {\n detail: 'Exits with not_signed_in',\n edge: 'POST /oauth2/token: authorization_pending, then expired_token',\n name: 'tempo-id login',\n },\n ],\n title: 'tempo-id login: expired',\n },\n {\n description:\n 'The CLI reads the stored session, refreshes its access token when it expires within 30 seconds, and reads the user.',\n nodes: [\n { detail: '~/.tempo/id/credentials.json', name: 'tempo-id whoami' },\n {\n detail: 'Email and Tempo Account',\n edge: 'POST /oauth2/token with refresh_token within 30 s of expiry, GET /oauth2/userinfo',\n name: 'tempo-id whoami',\n },\n ],\n title: 'tempo-id whoami',\n },\n {\n description:\n 'Each device request holds the code field or the decision buttons, and shows a spinner, until it settles.',\n nodes: [\n { detail: 'GET /device', name: 'Browser' },\n {\n edge: 'Continue, GET /device?code',\n name: 'Authorize a device (fetching)',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n code=\"BDWP-HQPK\"\n fetching\n />\n ),\n },\n {\n edge: 'Approve, POST /v1/device/approve',\n name: 'Authorize a device (approving)',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n approving\n request={deviceRequest()}\n />\n ),\n },\n {\n edge: 'Or: Deny, POST /v1/device/deny',\n name: 'Authorize a device (denying)',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n denying\n request={deviceRequest()}\n />\n ),\n },\n ],\n title: 'Device code: in progress',\n },\n {\n description:\n 'A device app without a display name could be anyone’s, so the request omits `app`, and the page flags an unverified app.',\n nodes: [\n { detail: 'GET /device?code', name: 'Browser' },\n {\n edge: '200 device page, request without app',\n name: 'Authorize a device (unverified app)',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n request={{ ...deviceRequest(), app: undefined }}\n />\n ),\n },\n ],\n title: 'Device code: unverified app',\n },\n {\n description:\n 'A code that matches no pending request, or one that another user holds, keeps the code form.',\n nodes: [\n { detail: 'GET /device?code', name: 'Browser' },\n {\n edge: 'unknown_code',\n name: 'Authorize a device (unknown code)',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n code=\"BDWP-HQPX\"\n error=\"Invalid or expired code. Check the code in the terminal.\"\n invalid\n />\n ),\n },\n ],\n title: 'Device code: unknown code',\n },\n {\n description:\n 'Each user’s code lookups share one rate limit, so the page refuses a lookup over it and keeps the code form.',\n nodes: [\n { detail: 'GET /device?code', name: 'Browser' },\n {\n edge: 'Lookup over the rate limit',\n name: 'Authorize a device (rate limited)',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n code=\"BDWP-HQPK\"\n error=\"Too many requests. Try again in 1 minute.\"\n invalid\n />\n ),\n },\n ],\n title: 'Device code: rate limited',\n },\n ],\n title: 'Device grant',\n },\n {\n flows: [\n {\n description:\n 'Sign-out ends the session and revokes its refresh tokens, then opens the sign-in page.',\n nodes: [\n { detail: 'GET /', name: 'Browser opens Tempo ID' },\n {\n name: 'Your account',\n screen: <Account {...account()} />,\n },\n {\n edge: 'Sign out, POST /v1/auth/logout',\n name: 'Your account (signing out)',\n screen: <Account {...account()} signingOut />,\n },\n {\n edge: '200, then /login',\n name: 'Sign in',\n screen: <SignIn {...signIn()} />,\n },\n ],\n title: 'Sign-out',\n },\n {\n description:\n 'An app signs the user out with its ID token. Tempo ID ends the session that the hint names, if this browser holds it, and redirects to the app.',\n nodes: [\n {\n detail:\n 'GET /oauth2/end-session?id_token_hint&post_logout_redirect_uri&state',\n name: 'Web app',\n },\n {\n detail: 'GET post_logout_redirect_uri?state',\n edge: '302, no screen',\n name: 'Web app',\n },\n ],\n title: 'RP-initiated logout',\n },\n {\n description:\n 'A cross-site form POST carries no `SameSite=Lax` session cookie, so Tempo ID seals the parameters and continues as a GET, which carries the cookie.',\n nodes: [\n {\n detail:\n 'POST /oauth2/end-session with id_token_hint, post_logout_redirect_uri, and state',\n name: 'Web app',\n },\n {\n detail: 'GET /oauth2/end-session?continuation',\n edge: '303, no session cookie',\n name: 'Browser',\n },\n {\n detail: 'GET post_logout_redirect_uri?state',\n edge: '302, no screen',\n name: 'Web app',\n },\n ],\n title: 'RP-initiated logout: form POST',\n },\n {\n description:\n \"An app's own Sign out ends the Tempo ID session. The app forgets the sign-in even if the request fails, and shows the error.\",\n nodes: [\n { detail: 'Web playground', name: \"App's page\" },\n {\n edge: 'GET /v1/auth/session, POST /v1/authorize',\n name: 'Signed in',\n owner: 'app',\n screen: <AppSignedIn />,\n },\n {\n edge: 'Sign out, POST /v1/auth/logout',\n name: 'Sign in',\n owner: 'app',\n screen: <AppSignIn />,\n },\n ],\n title: 'Headless sign-out',\n },\n {\n description:\n 'The CLI revokes the stored refresh token at the deployment that issued it, and deletes the session even if the revocation fails.',\n nodes: [\n { detail: '~/.tempo/id/credentials.json', name: 'tempo-id logout' },\n {\n detail: 'Session deleted',\n edge: 'POST /oauth2/revoke with the refresh token',\n name: 'tempo-id logout',\n },\n ],\n title: 'tempo-id logout',\n },\n ],\n title: 'Sign-out',\n },\n {\n flows: [\n {\n description:\n 'A refused send keeps the first step, with the refusal below the email field, which it marks invalid. The user can try again or pick another method.',\n nodes: [\n { detail: 'GET /login', name: 'Browser opens sign-in' },\n {\n edge: 'POST /v1/auth/code: 503',\n name: 'Sign in (send failed)',\n screen: <SignIn {...signIn()} error={unavailable} invalid />,\n },\n ],\n title: 'Email code: send refused',\n },\n {\n description:\n 'A canceled prompt or a refused passkey keeps the first step, with the error below the email field. The email field is not marked invalid, since no address was sent.',\n nodes: [\n { detail: 'GET /login', name: 'Browser opens sign-in' },\n {\n edge: 'Canceled prompt, or POST /v1/auth/passkey/verify refused',\n name: 'Sign in (passkey failed)',\n screen: (\n <SignIn\n {...signIn()}\n error=\"Passkey sign-in was canceled. Try again, or continue with email.\"\n />\n ),\n },\n ],\n title: 'Passkey: fails',\n },\n {\n description:\n 'A refused code clears the field and marks it invalid, so the next code can be typed at once.',\n nodes: [\n { detail: 'GET /login', name: 'Browser opens sign-in' },\n {\n edge: 'POST /v1/auth/code/verify: 401',\n name: 'Check your email (wrong code)',\n screen: (\n <SignIn\n {...signIn()}\n email={email}\n error=\"Invalid or expired code. Request a new one.\"\n invalid\n />\n ),\n },\n ],\n title: 'Email code: wrong code',\n },\n {\n description:\n 'With `SIGN_UP_DOMAINS`, a verified code for an address with no account, outside those domains, creates no account. An existing account at any domain still signs in.',\n nodes: [\n { detail: 'GET /login', name: 'Browser opens sign-in' },\n {\n edge: 'POST /v1/auth/code/verify: 403 sign_up_not_permitted',\n name: 'Check your email (sign-up refused)',\n screen: (\n <SignIn\n {...signIn()}\n email={email}\n error=\"Sign-up not permitted: new accounts need an address at tempo.xyz. Sign in with an existing account, or with an address at tempo.xyz.\"\n invalid\n />\n ),\n },\n ],\n title: 'Email code: sign-up refused',\n },\n {\n description:\n 'A passkey that does not sign again, or whose assertion is refused, drops the link. The code field clears and takes focus, so the next code signs in with email only.',\n nodes: [\n { detail: 'GET /login', name: 'Browser opens sign-in' },\n {\n edge: 'Canceled prompt, or POST /v1/auth/code/verify with link: webauthn_rejected',\n name: 'Check your email (link failed)',\n screen: (\n <SignIn\n {...signIn()}\n email={email}\n error=\"Your passkey did not confirm the sign-in. Enter the code again to sign in with email only.\"\n invalid\n />\n ),\n },\n ],\n title: 'Passkey: link fails',\n },\n {\n description:\n 'A resent code shows Code sent on the disabled button for 5 seconds, then Resend code again. A hidden status announces the send, and the code field keeps its value.',\n nodes: [\n { detail: 'GET /login', name: 'Browser opens sign-in' },\n {\n edge: 'Resend code, POST /v1/auth/code',\n name: 'Check your email (resent)',\n screen: <SignIn {...signIn()} email={email} resend=\"sent\" />,\n },\n ],\n title: 'Email code: resent',\n },\n {\n description:\n 'A refused resend keeps the code step and its code, with the refusal below the code field. The code stays valid, so the field is not marked invalid.',\n nodes: [\n { detail: 'GET /login', name: 'Browser opens sign-in' },\n {\n edge: 'Resend code, POST /v1/auth/code: 429',\n name: 'Check your email (resend refused)',\n screen: (\n <SignIn\n {...signIn()}\n email={email}\n error=\"Too many requests. Try again in 1 minute.\"\n />\n ),\n },\n ],\n title: 'Email code: resend refused',\n },\n {\n description:\n 'A failed selection keeps the account step, so the user can choose again. The page does not reload, so an ended session or an expired request shows its refusal in the same place.',\n nodes: [\n { detail: 'GET /choose-account?…&sig', name: 'Browser' },\n {\n edge: 'POST /v1/authorize/account: 503',\n name: 'Choose a wallet (failed)',\n screen: (\n <ChooseAccount {...chooseAccount()} error={unavailable} />\n ),\n },\n {\n edge: 'Or: POST /v1/authorize/account: session_required',\n name: 'Choose a wallet (session ended)',\n screen: (\n <ChooseAccount {...chooseAccount()} error=\"Sign in first.\" />\n ),\n },\n {\n edge: 'Or: POST /v1/authorize/account: authorization_expired',\n name: 'Choose a wallet (request expired)',\n screen: (\n <ChooseAccount\n {...chooseAccount()}\n error=\"Expired authorization request: the request from the app is no longer valid. Return to the app, and start again.\"\n />\n ),\n },\n ],\n title: 'Account step: fails',\n },\n {\n description:\n 'A failed decision keeps the approval page, with the refusal below the buttons.',\n nodes: [\n { detail: 'GET /authorize?…&sig', name: 'Browser' },\n {\n edge: 'POST /v1/authorize/consent: 503',\n name: 'Authorize this app (failed)',\n screen: <Approval {...approval()} error={unavailable} />,\n },\n ],\n title: 'Approval: fails',\n },\n {\n description:\n 'A spent authorization rate limit refuses Approve, as it refuses the grant at sign-in. The approval page stays until the limit resets.',\n nodes: [\n { detail: 'GET /authorize?…&sig', name: 'Browser' },\n {\n edge: 'Approve, POST /v1/authorize/consent: 429 rate_limited',\n name: 'Authorize this app (rate limited)',\n screen: (\n <Approval\n {...approval()}\n error=\"Too many requests. Try again in 1 minute.\"\n />\n ),\n },\n ],\n title: 'Approval: rate limited',\n },\n {\n description:\n 'A canceled prompt or a refused assertion keeps the approval page, and Approve starts a new passkey step.',\n nodes: [\n { detail: 'GET /authorize?…&sig', name: 'Browser' },\n {\n edge: 'Canceled prompt, or POST /v1/authorize/consent with passkey.assertion: webauthn_rejected',\n name: 'Authorize this app (passkey failed)',\n screen: (\n <Approval\n {...approval()}\n error=\"The passkey request was canceled. Approve again, or deny the request.\"\n />\n ),\n },\n ],\n title: 'Approval: passkey fails',\n },\n {\n description:\n 'A session that ends before the decision reloads the page, and the loader sends the browser to sign-in with the signed query. A sign-in already spent this request, so the sign-in page shows only the app, and the next sign-in opens the approval page again.',\n nodes: [\n { detail: 'GET /authorize?…&sig', name: 'Browser' },\n {\n edge: '200 approval page',\n name: 'Authorize this app',\n screen: <Approval {...approval()} />,\n },\n {\n edge: 'Approve, POST /v1/authorize/consent: session_required, reload, 302 /login?…&sig, GET /login: spent request',\n name: 'Sign in (app)',\n screen: <SignIn {...signIn()} request={appRequest()} />,\n },\n {\n edge: 'POST /v1/auth/code',\n name: 'Check your email',\n screen: <SignIn {...signIn()} email={email} />,\n },\n {\n edge: 'POST /v1/auth/code/verify with oauth_query: 200',\n name: 'Check your email (accepted)',\n screen: <SignIn {...signIn()} email={email} verified />,\n },\n {\n edge: 'after 500 ms, redirect /authorize?…&sig',\n name: 'Authorize this app',\n screen: <Approval {...approval()} />,\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'Approve, POST /v1/authorize/consent',\n name: 'Web app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n },\n ],\n title: 'Approval: session expired',\n },\n {\n description:\n 'A user who was signed in when the request arrived reached the approval page without a sign-in, so the request is unspent. The sign-in after the reload grants the key and returns to the app at once.',\n nodes: [\n { detail: 'GET /authorize?…&sig', name: 'Browser' },\n {\n edge: '200 approval page',\n name: 'Authorize this app',\n screen: <Approval {...approval()} />,\n },\n {\n edge: 'Approve, POST /v1/authorize/consent: session_required, reload, 302 /login?…&sig',\n name: 'Sign in (key)',\n screen: <SignIn {...signIn()} request={signInRequest()} />,\n },\n {\n edge: 'POST /v1/auth/code',\n name: 'Check your email',\n screen: <SignIn {...signIn()} email={email} />,\n },\n {\n edge: 'POST /v1/auth/code/verify with oauth_query: 200, grants the key',\n name: 'Check your email (accepted)',\n screen: <SignIn {...signIn()} email={email} verified />,\n },\n {\n detail: 'GET redirect_uri?code&state',\n edge: 'after 500 ms, redirect',\n name: 'Web app callback',\n },\n {\n ...tokenExit,\n detail: 'Tokens, account, and key_authorization',\n },\n ],\n title: 'Approval: session expired, unspent',\n },\n {\n description:\n 'A failed decision keeps the device page with the request, and the refusal below the buttons.',\n nodes: [\n { detail: 'GET /device?code', name: 'Browser' },\n {\n edge: 'POST /v1/device/approve: 503',\n name: 'Authorize a device (failed)',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n error={unavailable}\n request={deviceRequest()}\n />\n ),\n },\n ],\n title: 'Device code: decision fails',\n },\n {\n description:\n 'A session that ends before the decision reloads the page, and sign-in returns to the same code. The request is bound to its user, so another user’s sign-in shows the unknown code.',\n nodes: [\n { detail: 'GET /device?code', name: 'Browser' },\n {\n edge: '200 device page',\n name: 'Authorize a device',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n request={deviceRequest()}\n />\n ),\n },\n {\n edge: 'Approve, POST /v1/device/approve: session_required, reload, 302 /login?return_to=/device?code',\n name: 'Sign in',\n screen: <SignIn {...signIn()} />,\n },\n {\n edge: 'Sign-in, /device?code',\n name: 'Authorize a device',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n request={deviceRequest()}\n />\n ),\n },\n ],\n title: 'Device code: session expired',\n },\n {\n description:\n 'A canceled prompt or a refused assertion keeps the device page, and Approve starts a new passkey step.',\n nodes: [\n { detail: 'GET /device?code', name: 'Browser' },\n {\n edge: 'Canceled prompt, or POST /v1/device/approve with passkey.assertion: webauthn_rejected',\n name: 'Authorize a device (passkey failed)',\n screen: (\n <DeviceApproval\n {...deviceApproval()}\n error=\"The passkey request was canceled. Approve again, or deny the request.\"\n request={deviceRequest()}\n />\n ),\n },\n ],\n title: 'Device code: passkey fails',\n },\n {\n description:\n 'A failed sign-out keeps the account page, with the refusal above the button.',\n nodes: [\n { detail: 'GET /', name: 'Browser opens Tempo ID' },\n {\n edge: 'POST /v1/auth/logout: 503',\n name: 'Your account (sign-out failed)',\n screen: <Account {...account()} error={unavailable} />,\n },\n ],\n title: 'Sign-out: fails',\n },\n ],\n title: 'Request failures',\n },\n ]\n}\n\nnamespace styles {\n export const app = style({ display: 'grid', gap: '12' })\n\n export const appAddress = style({\n color: 'gray.900',\n margin: '0',\n overflowWrap: 'anywhere',\n typography: 'copy.13.mono',\n })\n\n export const appButton = variants({\n base: {\n alignItems: 'center',\n border: 'none',\n borderRadius: 'full',\n cursor: 'pointer',\n display: 'flex',\n gap: '12',\n height: '48',\n justifyContent: 'center',\n paddingInline: '24',\n typography: 'button.16',\n width: '100% !custom',\n },\n variants: {\n tone: {\n brand: { backgroundColor: 'red.700', color: 'white' },\n quiet: { backgroundColor: 'gray.100', color: 'foreground' },\n },\n },\n })\n\n export const appDescription = style({\n color: 'gray.900',\n typography: 'copy.16',\n })\n\n // A rule on each side of the label, as the sample app's divider draws it.\n export const appDivider = style({\n alignItems: 'center',\n color: 'gray.900',\n display: 'flex',\n gap: '16',\n margin: '0',\n typography: 'copy.14',\n whiteSpace: 'nowrap',\n '&::before, &::after': {\n backgroundColor: 'gray.400',\n content: '\"\"',\n flexGrow: 1,\n height: '1',\n },\n })\n\n export const appField = style({ display: 'grid', gap: '8' })\n\n export const appHeader = style({\n display: 'grid',\n gap: '8',\n marginBottom: '8',\n })\n\n export const appInput = style({\n backgroundColor: 'gray.100',\n border: 'none',\n borderRadius: '6',\n color: 'foreground',\n height: '48',\n paddingInline: '16',\n typography: 'copy.16',\n width: '100% !custom',\n })\n\n export const appLabel = style({ typography: 'label.16' })\n\n export const appTitle = style({ typography: 'heading.32' })\n\n export const arrow = style({\n alignItems: 'center',\n display: 'grid',\n flexShrink: 0,\n gap: '8',\n justifyItems: 'center',\n paddingInline: '12',\n width: '192',\n })\n\n export const artboard = style({ display: 'grid', gap: '8', margin: '0' })\n\n export const canvas = style({\n backgroundColor: 'gray.100',\n minHeight: '100dvh !custom',\n // The canvas grows to its widest flow at the current zoom, so the page scrolls to pan.\n minWidth: '100% !custom',\n // Below 64rem, the fixed controls reach over the introduction, so the canvas starts below them.\n // The space sits outside the zoom, so it holds at every scale.\n paddingTop: '96',\n width: 'max-content !custom',\n '@media (min-width: 64rem)': { paddingTop: '0' },\n })\n\n export const code = style({ typography: 'copy.13.mono' })\n\n export const detail = style({\n color: 'gray.900',\n overflowWrap: 'anywhere',\n typography: 'copy.13.mono',\n })\n\n export const edge = style({\n color: 'gray.900',\n overflowWrap: 'anywhere',\n textAlign: 'center',\n typography: 'copy.13.mono',\n })\n\n export const external = variants({\n base: {\n backgroundColor: 'background.surface',\n border: '1px dashed',\n borderColor: 'gray.500',\n borderRadius: '8',\n display: 'grid',\n flexShrink: 0,\n gap: '4',\n padding: '16',\n width: '224',\n },\n variants: {\n kind: {\n Entry: { borderColor: 'blue.700', borderStyle: 'solid' },\n Exit: { borderColor: 'green.700', borderStyle: 'solid' },\n External: {},\n },\n },\n })\n\n export const externalName = style({ typography: 'label.14' })\n\n export const flow = style({ display: 'grid', gap: '16' })\n\n export const flowDescription = style({\n color: 'gray.900',\n typography: 'copy.14',\n })\n\n // The flow's text stays at the canvas's left edge while the row scrolls.\n export const flowHeader = style({\n display: 'grid',\n gap: '4',\n left: '16',\n maxWidth: 'min(36rem, calc(100vw - 2rem)) !custom',\n position: 'sticky',\n '@media (min-width: 48rem)': { left: '48' },\n })\n\n export const flowTitle = style({ typography: 'heading.16' })\n\n // Each frame draws the page's color, so its screen reads as it does in the app.\n export const frame = style({\n // oxlint-disable-next-line typescript/restrict-template-expressions -- zyzz reads each token reference at build time, so it stays a direct interpolation.\n backgroundColor: `light-dark(${vars.color.background.surface}, ${vars.color.background.primary}) !custom`,\n borderRadius: '8',\n boxShadow: '6',\n paddingBlock: '40',\n paddingInline: '24',\n width: '384',\n })\n\n export const frameLabel = style({ color: 'gray.900', typography: 'label.12' })\n\n export const head = style({\n color: 'gray.600',\n flexShrink: 0,\n height: '16',\n width: '16',\n })\n\n export const hidden = style({\n clipPath: 'inset(50%) !custom',\n height: '1px !custom',\n overflow: 'hidden',\n position: 'absolute',\n whiteSpace: 'nowrap',\n width: '1px !custom',\n })\n\n export const intro = style({\n display: 'grid',\n gap: '8',\n left: '16',\n maxWidth: 'min(36rem, calc(100vw - 2rem)) !custom',\n position: 'sticky',\n '@media (min-width: 48rem)': { left: '48' },\n })\n\n export const kind = style({\n color: 'gray.900',\n textTransform: 'uppercase',\n typography: 'label.12',\n })\n\n export const legend = style({\n backgroundColor: 'background.surface',\n borderRadius: '12',\n boxShadow: 'popover',\n // The list ends above the developer toolbar at the bottom of the viewport.\n maxHeight: 'calc(100dvh - 9.5rem) !custom',\n overflowY: 'auto',\n pointerEvents: 'auto',\n width: 'min(18rem, calc(100vw - 2rem)) !custom',\n })\n\n export const legendFlow = style({\n borderRadius: '6',\n color: 'gray.900',\n display: 'block',\n paddingBlock: '4',\n paddingInline: '8',\n textDecoration: 'none',\n typography: 'copy.13',\n '&:hover': { backgroundColor: 'grayAlpha.100', color: 'foreground' },\n })\n\n export const legendFlows = style({\n listStyle: 'none',\n margin: '0',\n padding: '0',\n })\n\n export const legendList = style({\n display: 'grid',\n gap: '12',\n listStyle: 'none',\n margin: '0',\n paddingBlockEnd: '8',\n paddingBlockStart: '0',\n paddingInline: '8',\n })\n\n export const legendSection = style({\n borderRadius: '6',\n color: 'foreground',\n display: 'block',\n paddingBlock: '4',\n paddingInline: '8',\n textDecoration: 'none',\n typography: 'label.14',\n '&:hover': { backgroundColor: 'grayAlpha.100' },\n })\n\n export const legendItem = style({ borderBottom: 'none !custom' })\n\n export const legendTrigger = style({\n paddingInline: '1rem !custom',\n })\n\n export const lede = style({ color: 'gray.900', typography: 'copy.16' })\n\n export const line = style({\n backgroundColor: 'gray.600',\n flexGrow: 1,\n height: '1',\n })\n\n // The zoom controls and the contents stay at the top right, clear of the developer toolbar at the\n // bottom. Clicks between them reach the canvas.\n export const panels = style({\n alignItems: 'flex-end',\n display: 'flex',\n flexDirection: 'column',\n gap: '8',\n pointerEvents: 'none',\n position: 'fixed',\n right: '16',\n top: '16',\n zIndex: 'overlay',\n })\n\n export const placeholder = style({ flexShrink: 0 })\n\n // A box of 100 CSS pixels inside the zoom, whose rect height measures the zoom's geometry.\n export const probe = style({\n height: '100px !custom',\n pointerEvents: 'none',\n position: 'absolute',\n visibility: 'hidden',\n width: '1px !custom',\n })\n\n export const row = style({\n alignItems: 'center',\n display: 'flex',\n listStyle: 'none',\n margin: '0',\n padding: '0',\n })\n\n // The box spans its row, so the observer sees the row's full width at every scroll position.\n export const rowBox = style({ width: 'max-content !custom' })\n\n export const section = style({ display: 'grid', gap: '40' })\n\n export const sectionTitle = style({\n borderBottom: '1px solid',\n borderBottomColor: 'grayAlpha.400',\n paddingBottom: '8',\n typography: 'heading.20',\n })\n\n export const shaft = style({\n alignItems: 'center',\n display: 'flex',\n width: '100% !custom',\n })\n\n export const step = style({ alignItems: 'center', display: 'flex' })\n\n export const title = style({ typography: 'heading.32' })\n\n export const world = style({\n display: 'grid',\n gap: '64',\n padding: '16',\n '@media (min-width: 48rem)': { padding: '48' },\n })\n\n export const zoom = style({\n alignItems: 'center',\n backgroundColor: 'background.surface',\n borderRadius: 'full',\n boxShadow: 'popover',\n display: 'flex',\n gap: '2',\n padding: '4',\n pointerEvents: 'auto',\n })\n\n export const zoomIcon = style({\n flexShrink: '0 !custom',\n height: '18',\n width: '18',\n })\n\n // A fixed width keeps the zoom buttons in place as the percentage changes.\n export const zoomLevel = style({\n fontVariantNumeric: 'tabular-nums',\n minWidth: '56',\n })\n}\n"],"ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"mappings":"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DACV,EACA,CACEN,KAAM,wBACND,KAAM,qCACN5B,QACE,EAAAiP,EAAA,IAAA,CAACN,EAAD,CACE,GAAInH,EAAS,EACb,iBAAkB,CAChB,GAAG3J,EAAI,EACPiN,MAAO,CAAE1M,GAAI,MAAOwD,KAAM,KAAM,CAClC,CAAA,CAAA,CAGN,EACA,CACEO,OAAQ,8BACRN,KAAM,sCACND,KAAM,kBACR,EACA,CACE,GAAG6I,EACHtI,OAAQ,wCACV,CAAA,EAEFjD,MAAO,gCACT,EACA,CACEW,YACE,4OACFU,MAAO,CACL,CACE4B,OACE,mHACFP,KAAM,iBACR,EACA,CACEC,KAAM,uFACND,KAAM,mCACN5B,QACE,EAAAiP,EAAA,IAAA,CAACN,EAAD,CACE,GAAInH,EAAS,EACb,IAAA,UACA,YAAA,kBACA,SAAU,EAAA,CAAA,CAGhB,EACA,CACErF,OAAQ,8BACRN,KAAM,sCACND,KAAM,0BACR,EACA,CACEO,OAAQ,yCACRN,KAAM,wCACND,KAAM,iBACR,CAAA,EAEF1C,MAAO,iBACT,EACA,CACEW,YACE,uIACFU,MAAO,CACL,CACE4B,OACE,+HACFP,KAAM,iBACR,EACA,CACEO,OAAQ,uDACRN,KAAM,sBACND,KAAM,0BACR,CACF,EACA1C,MAAO,sCACT,EACA,CACEW,YACE,yIACFU,MAAO,CACL,CACE,GAAGgK,EACHpI,OAAQ,2CACV,EACA,CACEN,KAAM,wBACND,KAAM,qBACN5B,QAAQ,EAAAiP,EAAA,IAAA,CAACN,EAAD,CAAU,GAAInH,EAAS,CAAC,CAAA,CAClC,EACA,CACE3F,KAAM,sCACND,KAAM,iCACN5B,QAAQ,EAAAiP,EAAA,IAAA,CAACN,EAAD,CAAU,GAAInH,EAAS,EAAG,UAAA,EAAA,CAAA,CACpC,EACA,CACErF,OAAQ,uDACRN,KAAM,eACND,KAAM,sBACR,EACA,CACEO,OAAQ,8BACRN,KAAM,oDACND,KAAM,kBACR,EACA,CACE,GAAG6I,EACHtI,OAAQ,wCACV,CAAA,EAEFjD,MAAO,2BACT,EACA,CACEW,YACE,yKACFU,MAAO,CACL,CACE,GAA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"}