@arbidocs/blocks 0.5.106 → 0.5.107

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 (249) hide show
  1. package/README.md +60 -6
  2. package/dist/{ConnectedCallDock-P7LK2HYF.cjs → ConnectedCallDock-H3WWFGXF.cjs} +8 -8
  3. package/dist/{ConnectedCallDock-P7LK2HYF.cjs.map → ConnectedCallDock-H3WWFGXF.cjs.map} +1 -1
  4. package/dist/{ConnectedCallDock-NEZJNTKH.js → ConnectedCallDock-TDYRHPAK.js} +6 -6
  5. package/dist/{ConnectedCallDock-NEZJNTKH.js.map → ConnectedCallDock-TDYRHPAK.js.map} +1 -1
  6. package/dist/{ConnectedCallRoom-FXTR4YFI.cjs → ConnectedCallRoom-55O5OUN7.cjs} +7 -7
  7. package/dist/{ConnectedCallRoom-FXTR4YFI.cjs.map → ConnectedCallRoom-55O5OUN7.cjs.map} +1 -1
  8. package/dist/{ConnectedCallRoom-K3X6ICCG.js → ConnectedCallRoom-Z6F6WCLH.js} +6 -6
  9. package/dist/{ConnectedCallRoom-K3X6ICCG.js.map → ConnectedCallRoom-Z6F6WCLH.js.map} +1 -1
  10. package/dist/{ConnectedNativeDocxComparison-7VJKOKYU.cjs → ConnectedNativeDocxComparison-DGBZJ4XA.cjs} +10 -10
  11. package/dist/{ConnectedNativeDocxComparison-7VJKOKYU.cjs.map → ConnectedNativeDocxComparison-DGBZJ4XA.cjs.map} +1 -1
  12. package/dist/{ConnectedNativeDocxComparison-FENZYWDH.js → ConnectedNativeDocxComparison-NVZRVNOS.js} +9 -9
  13. package/dist/{ConnectedNativeDocxComparison-FENZYWDH.js.map → ConnectedNativeDocxComparison-NVZRVNOS.js.map} +1 -1
  14. package/dist/{ConnectedNativeDocxEditor-HB5BHGZ2.cjs → ConnectedNativeDocxEditor-R4WINUUB.cjs} +10 -10
  15. package/dist/{ConnectedNativeDocxEditor-HB5BHGZ2.cjs.map → ConnectedNativeDocxEditor-R4WINUUB.cjs.map} +1 -1
  16. package/dist/{ConnectedNativeDocxEditor-CNQAMO2N.js → ConnectedNativeDocxEditor-RSVBN7DY.js} +8 -8
  17. package/dist/{ConnectedNativeDocxEditor-CNQAMO2N.js.map → ConnectedNativeDocxEditor-RSVBN7DY.js.map} +1 -1
  18. package/dist/{ConnectedProductionSetDialog-O4FWTZNF.js → ConnectedProductionSetDialog-2DFBXE2X.js} +5 -5
  19. package/dist/{ConnectedProductionSetDialog-O4FWTZNF.js.map → ConnectedProductionSetDialog-2DFBXE2X.js.map} +1 -1
  20. package/dist/{ConnectedProductionSetDialog-ENAIZWPK.cjs → ConnectedProductionSetDialog-KYDPQ7SG.cjs} +6 -6
  21. package/dist/{ConnectedProductionSetDialog-ENAIZWPK.cjs.map → ConnectedProductionSetDialog-KYDPQ7SG.cjs.map} +1 -1
  22. package/dist/{ConnectedStreamedWordArtifact-ILMKFCDC.js → ConnectedStreamedWordArtifact-HLJ5IIOU.js} +9 -9
  23. package/dist/ConnectedStreamedWordArtifact-HLJ5IIOU.js.map +1 -0
  24. package/dist/{ConnectedStreamedWordArtifact-BF6JET2D.cjs → ConnectedStreamedWordArtifact-JQ34AOUU.cjs} +10 -10
  25. package/dist/ConnectedStreamedWordArtifact-JQ34AOUU.cjs.map +1 -0
  26. package/dist/{DocumentReviewCard-UOLXZKZE.js → DocumentReviewCard-7JSXRJZ2.js} +6 -6
  27. package/dist/{DocumentReviewCard-UOLXZKZE.js.map → DocumentReviewCard-7JSXRJZ2.js.map} +1 -1
  28. package/dist/{DocumentReviewCard-QVQ2LGFH.cjs → DocumentReviewCard-C4HVT3WM.cjs} +8 -8
  29. package/dist/{DocumentReviewCard-QVQ2LGFH.cjs.map → DocumentReviewCard-C4HVT3WM.cjs.map} +1 -1
  30. package/dist/{FilesViewerDialog-5ELQYWAZ.js → FilesViewerDialog-IMQTZWKD.js} +16 -16
  31. package/dist/{FilesViewerDialog-5ELQYWAZ.js.map → FilesViewerDialog-IMQTZWKD.js.map} +1 -1
  32. package/dist/{FilesViewerDialog-XNGHHWYS.cjs → FilesViewerDialog-UP7GFHYN.cjs} +23 -23
  33. package/dist/{FilesViewerDialog-XNGHHWYS.cjs.map → FilesViewerDialog-UP7GFHYN.cjs.map} +1 -1
  34. package/dist/{RechartsRenderer-EJRIFAAP.js → RechartsRenderer-23OF4H6X.js} +3 -3
  35. package/dist/{RechartsRenderer-EJRIFAAP.js.map → RechartsRenderer-23OF4H6X.js.map} +1 -1
  36. package/dist/{RechartsRenderer-CNFQ5EHF.cjs → RechartsRenderer-GIRCW7DB.cjs} +4 -4
  37. package/dist/{RechartsRenderer-CNFQ5EHF.cjs.map → RechartsRenderer-GIRCW7DB.cjs.map} +1 -1
  38. package/dist/{WorkspaceTableView-HRCV6WR7.cjs → WorkspaceTableView-PJM47B5F.cjs} +8 -8
  39. package/dist/{WorkspaceTableView-HRCV6WR7.cjs.map → WorkspaceTableView-PJM47B5F.cjs.map} +1 -1
  40. package/dist/{WorkspaceTableView-DIMTW5P5.js → WorkspaceTableView-YDA7A4UJ.js} +6 -6
  41. package/dist/{WorkspaceTableView-DIMTW5P5.js.map → WorkspaceTableView-YDA7A4UJ.js.map} +1 -1
  42. package/dist/{ai-E6FA4Y4J.cjs → ai-ADS6YSS2.cjs} +17 -17
  43. package/dist/ai-ADS6YSS2.cjs.map +1 -0
  44. package/dist/{ai-WASSGEMI.js → ai-KHWTGBT5.js} +9 -9
  45. package/dist/ai-KHWTGBT5.js.map +1 -0
  46. package/dist/auth/index.cjs +32 -32
  47. package/dist/auth/index.js +1 -1
  48. package/dist/calls/index.cjs +49 -49
  49. package/dist/calls/index.js +10 -10
  50. package/dist/{chunk-VJAMDAR6.cjs → chunk-22KAKJ3W.cjs} +4 -4
  51. package/dist/{chunk-VJAMDAR6.cjs.map → chunk-22KAKJ3W.cjs.map} +1 -1
  52. package/dist/{chunk-DEIF2VAA.js → chunk-3GFQNJYE.js} +3 -3
  53. package/dist/{chunk-DEIF2VAA.js.map → chunk-3GFQNJYE.js.map} +1 -1
  54. package/dist/{chunk-LUO46ELJ.cjs → chunk-3YZKDCWY.cjs} +2 -2
  55. package/dist/chunk-3YZKDCWY.cjs.map +1 -0
  56. package/dist/{chunk-5OUOPKGE.cjs → chunk-45OU2UAA.cjs} +18 -18
  57. package/dist/{chunk-5OUOPKGE.cjs.map → chunk-45OU2UAA.cjs.map} +1 -1
  58. package/dist/{chunk-JXKNPKU6.cjs → chunk-4CIVQWAX.cjs} +4 -4
  59. package/dist/{chunk-JXKNPKU6.cjs.map → chunk-4CIVQWAX.cjs.map} +1 -1
  60. package/dist/{chunk-VOI26MXJ.cjs → chunk-5AC52BHL.cjs} +16 -16
  61. package/dist/{chunk-VOI26MXJ.cjs.map → chunk-5AC52BHL.cjs.map} +1 -1
  62. package/dist/{chunk-OG3TI5GX.js → chunk-6M5NAAWX.js} +47 -5
  63. package/dist/chunk-6M5NAAWX.js.map +1 -0
  64. package/dist/{chunk-IIUEDF3F.js → chunk-6ZYOUT73.js} +7 -7
  65. package/dist/{chunk-IIUEDF3F.js.map → chunk-6ZYOUT73.js.map} +1 -1
  66. package/dist/{chunk-TRI3LQVR.js → chunk-7S7YVBFK.js} +5 -5
  67. package/dist/{chunk-TRI3LQVR.js.map → chunk-7S7YVBFK.js.map} +1 -1
  68. package/dist/{chunk-QN5GTCPB.cjs → chunk-7V4OCZS6.cjs} +8 -8
  69. package/dist/{chunk-QN5GTCPB.cjs.map → chunk-7V4OCZS6.cjs.map} +1 -1
  70. package/dist/{chunk-S7NJVJJX.cjs → chunk-AHMRYY7J.cjs} +25 -25
  71. package/dist/{chunk-S7NJVJJX.cjs.map → chunk-AHMRYY7J.cjs.map} +1 -1
  72. package/dist/{chunk-GK5BMDS6.js → chunk-AVGHTUPE.js} +4 -4
  73. package/dist/{chunk-GK5BMDS6.js.map → chunk-AVGHTUPE.js.map} +1 -1
  74. package/dist/{chunk-RAYNCZ7O.js → chunk-AZCMKGDG.js} +3 -3
  75. package/dist/{chunk-RAYNCZ7O.js.map → chunk-AZCMKGDG.js.map} +1 -1
  76. package/dist/{chunk-IJVU5MZA.js → chunk-BAUZUIHB.js} +5 -5
  77. package/dist/{chunk-IJVU5MZA.js.map → chunk-BAUZUIHB.js.map} +1 -1
  78. package/dist/{chunk-2VHZUSFW.js → chunk-BBWLFK3C.js} +3 -3
  79. package/dist/{chunk-2VHZUSFW.js.map → chunk-BBWLFK3C.js.map} +1 -1
  80. package/dist/{chunk-MW7FGIF4.cjs → chunk-BFVCYBND.cjs} +9 -9
  81. package/dist/{chunk-MW7FGIF4.cjs.map → chunk-BFVCYBND.cjs.map} +1 -1
  82. package/dist/{chunk-7ONU7EWY.js → chunk-BH6IKGZ3.js} +5 -5
  83. package/dist/{chunk-7ONU7EWY.js.map → chunk-BH6IKGZ3.js.map} +1 -1
  84. package/dist/{chunk-RNX5LAQK.cjs → chunk-C42WBPH4.cjs} +7 -7
  85. package/dist/{chunk-RNX5LAQK.cjs.map → chunk-C42WBPH4.cjs.map} +1 -1
  86. package/dist/{chunk-LM5CPXJO.cjs → chunk-CRLFLMTK.cjs} +19 -13
  87. package/dist/chunk-CRLFLMTK.cjs.map +1 -0
  88. package/dist/{chunk-CWC6W2NE.cjs → chunk-D35EHOK5.cjs} +11 -11
  89. package/dist/{chunk-CWC6W2NE.cjs.map → chunk-D35EHOK5.cjs.map} +1 -1
  90. package/dist/{chunk-BMHW7WTF.js → chunk-DBKZANTC.js} +4 -4
  91. package/dist/{chunk-BMHW7WTF.js.map → chunk-DBKZANTC.js.map} +1 -1
  92. package/dist/{chunk-Q5U6Y2NO.js → chunk-E2P4JJLJ.js} +4 -45
  93. package/dist/chunk-E2P4JJLJ.js.map +1 -0
  94. package/dist/{chunk-D3GZWKHW.cjs → chunk-EKSHUNJI.cjs} +9 -9
  95. package/dist/{chunk-D3GZWKHW.cjs.map → chunk-EKSHUNJI.cjs.map} +1 -1
  96. package/dist/{chunk-5XQNXDST.js → chunk-FPOKWML2.js} +18 -5
  97. package/dist/chunk-FPOKWML2.js.map +1 -0
  98. package/dist/{chunk-M4TM3K52.cjs → chunk-FSXQHEFQ.cjs} +16 -16
  99. package/dist/{chunk-M4TM3K52.cjs.map → chunk-FSXQHEFQ.cjs.map} +1 -1
  100. package/dist/{chunk-35BADIIF.cjs → chunk-GX75YCWJ.cjs} +23 -23
  101. package/dist/{chunk-35BADIIF.cjs.map → chunk-GX75YCWJ.cjs.map} +1 -1
  102. package/dist/{chunk-7IF3E3I2.cjs → chunk-I7CJDF3V.cjs} +4 -4
  103. package/dist/{chunk-7IF3E3I2.cjs.map → chunk-I7CJDF3V.cjs.map} +1 -1
  104. package/dist/{chunk-KYLQRS3O.js → chunk-IHOV6OTA.js} +4 -4
  105. package/dist/{chunk-KYLQRS3O.js.map → chunk-IHOV6OTA.js.map} +1 -1
  106. package/dist/{chunk-OXHAZN43.cjs → chunk-IXL2KJOZ.cjs} +26 -26
  107. package/dist/{chunk-OXHAZN43.cjs.map → chunk-IXL2KJOZ.cjs.map} +1 -1
  108. package/dist/{chunk-632JXVXY.js → chunk-KIXFXCHL.js} +15 -9
  109. package/dist/chunk-KIXFXCHL.js.map +1 -0
  110. package/dist/{chunk-PIWT2GCY.cjs → chunk-LFYKB7KF.cjs} +15 -15
  111. package/dist/{chunk-PIWT2GCY.cjs.map → chunk-LFYKB7KF.cjs.map} +1 -1
  112. package/dist/{chunk-7Q6EVFMT.js → chunk-LYW5A35J.js} +9 -9
  113. package/dist/{chunk-7Q6EVFMT.js.map → chunk-LYW5A35J.js.map} +1 -1
  114. package/dist/chunk-NFK2SEUD.js +577 -0
  115. package/dist/chunk-NFK2SEUD.js.map +1 -0
  116. package/dist/{chunk-TJQMC7GJ.cjs → chunk-NNBL3HPG.cjs} +4 -4
  117. package/dist/{chunk-TJQMC7GJ.cjs.map → chunk-NNBL3HPG.cjs.map} +1 -1
  118. package/dist/{chunk-Y5P5ZMHQ.js → chunk-NWBCZ4PA.js} +4 -4
  119. package/dist/{chunk-Y5P5ZMHQ.js.map → chunk-NWBCZ4PA.js.map} +1 -1
  120. package/dist/{chunk-5UMZXDGL.cjs → chunk-O27K7KTZ.cjs} +161 -7
  121. package/dist/chunk-O27K7KTZ.cjs.map +1 -0
  122. package/dist/{chunk-GARDQALH.js → chunk-OLAYDOPC.js} +5 -5
  123. package/dist/{chunk-GARDQALH.js.map → chunk-OLAYDOPC.js.map} +1 -1
  124. package/dist/chunk-ORELHENJ.cjs +594 -0
  125. package/dist/chunk-ORELHENJ.cjs.map +1 -0
  126. package/dist/{chunk-NUOMPVKQ.js → chunk-OWHO2TO3.js} +3 -3
  127. package/dist/{chunk-NUOMPVKQ.js.map → chunk-OWHO2TO3.js.map} +1 -1
  128. package/dist/{chunk-6XNWGOS3.cjs → chunk-PHDUN4SG.cjs} +187 -80
  129. package/dist/chunk-PHDUN4SG.cjs.map +1 -0
  130. package/dist/{chunk-KGUBKE3V.cjs → chunk-PL7O3RJJ.cjs} +48 -4
  131. package/dist/chunk-PL7O3RJJ.cjs.map +1 -0
  132. package/dist/{chunk-BH4MK2J5.js → chunk-QG6MRLZG.js} +2 -2
  133. package/dist/chunk-QG6MRLZG.js.map +1 -0
  134. package/dist/{chunk-YPTZNQPJ.cjs → chunk-RCZRI72J.cjs} +4 -4
  135. package/dist/{chunk-YPTZNQPJ.cjs.map → chunk-RCZRI72J.cjs.map} +1 -1
  136. package/dist/{chunk-E7STRFBT.cjs → chunk-SCLGUHLU.cjs} +4 -4
  137. package/dist/{chunk-E7STRFBT.cjs.map → chunk-SCLGUHLU.cjs.map} +1 -1
  138. package/dist/{chunk-EOTJX536.js → chunk-T5ZMG6MC.js} +3 -3
  139. package/dist/{chunk-EOTJX536.js.map → chunk-T5ZMG6MC.js.map} +1 -1
  140. package/dist/{chunk-LWEX3AOZ.js → chunk-TG4IICWO.js} +4 -4
  141. package/dist/{chunk-LWEX3AOZ.js.map → chunk-TG4IICWO.js.map} +1 -1
  142. package/dist/{chunk-ET3W24JV.js → chunk-TNKPQ3EF.js} +9 -9
  143. package/dist/{chunk-ET3W24JV.js.map → chunk-TNKPQ3EF.js.map} +1 -1
  144. package/dist/{chunk-QFKL4HV2.js → chunk-U5F5P4YU.js} +118 -15
  145. package/dist/chunk-U5F5P4YU.js.map +1 -0
  146. package/dist/{chunk-N52PBUAP.cjs → chunk-U6LQ6Z3P.cjs} +10 -10
  147. package/dist/{chunk-N52PBUAP.cjs.map → chunk-U6LQ6Z3P.cjs.map} +1 -1
  148. package/dist/{chunk-JNVJQCGF.cjs → chunk-UCA4JLLJ.cjs} +4 -4
  149. package/dist/{chunk-JNVJQCGF.cjs.map → chunk-UCA4JLLJ.cjs.map} +1 -1
  150. package/dist/{chunk-3RUQHIDC.js → chunk-UQ2OBHMV.js} +7 -7
  151. package/dist/{chunk-3RUQHIDC.js.map → chunk-UQ2OBHMV.js.map} +1 -1
  152. package/dist/{chunk-VYJF4ZQY.cjs → chunk-V6C2MBFY.cjs} +3 -2
  153. package/dist/chunk-V6C2MBFY.cjs.map +1 -0
  154. package/dist/{chunk-O4X7HXLF.cjs → chunk-VCEX7COE.cjs} +2 -45
  155. package/dist/chunk-VCEX7COE.cjs.map +1 -0
  156. package/dist/{chunk-QTSNHGSI.js → chunk-WFM6E7DD.js} +3 -3
  157. package/dist/{chunk-QTSNHGSI.js.map → chunk-WFM6E7DD.js.map} +1 -1
  158. package/dist/{chunk-SY2WD6VA.cjs → chunk-WI3BVKEC.cjs} +5 -5
  159. package/dist/{chunk-SY2WD6VA.cjs.map → chunk-WI3BVKEC.cjs.map} +1 -1
  160. package/dist/{chunk-LWCLAAEX.js → chunk-WJHRWXWJ.js} +3 -3
  161. package/dist/{chunk-LWCLAAEX.js.map → chunk-WJHRWXWJ.js.map} +1 -1
  162. package/dist/{chunk-FVZ2CN4A.js → chunk-WQH2WWZE.js} +3 -2
  163. package/dist/chunk-WQH2WWZE.js.map +1 -0
  164. package/dist/{chunk-V2CKYM4B.cjs → chunk-XHN5KOI2.cjs} +9 -9
  165. package/dist/{chunk-V2CKYM4B.cjs.map → chunk-XHN5KOI2.cjs.map} +1 -1
  166. package/dist/{chunk-DBHBJIF4.js → chunk-YJWAGXYM.js} +3 -3
  167. package/dist/{chunk-DBHBJIF4.js.map → chunk-YJWAGXYM.js.map} +1 -1
  168. package/dist/{chunk-KUI2IC7W.js → chunk-YLKHTBYA.js} +3 -3
  169. package/dist/{chunk-KUI2IC7W.js.map → chunk-YLKHTBYA.js.map} +1 -1
  170. package/dist/{chunk-73FJ6L6I.cjs → chunk-ZMVF7EYJ.cjs} +18 -5
  171. package/dist/chunk-ZMVF7EYJ.cjs.map +1 -0
  172. package/dist/{chunk-CEVVGJQX.js → chunk-ZNY5W3VX.js} +162 -9
  173. package/dist/chunk-ZNY5W3VX.js.map +1 -0
  174. package/dist/connect/docx.cjs +13 -13
  175. package/dist/connect/docx.js +9 -9
  176. package/dist/connect/index.cjs +1100 -884
  177. package/dist/connect/index.cjs.map +1 -1
  178. package/dist/connect/index.d.ts +1 -0
  179. package/dist/connect/index.js +475 -274
  180. package/dist/connect/index.js.map +1 -1
  181. package/dist/connect/viewer.cjs +12 -12
  182. package/dist/connect/viewer.js +10 -10
  183. package/dist/connection/account-cluster/ConnectedAccountCluster.d.ts +1 -1
  184. package/dist/connection/dashboards/ConnectedDashboardsPage.d.ts +13 -2
  185. package/dist/connection/dashboards/index.d.ts +1 -1
  186. package/dist/connection/dashboards/templates.d.ts +14 -3
  187. package/dist/connection/remote-control/ConnectedRemoteControlConsent.d.ts +17 -0
  188. package/dist/connection/remote-control/ConnectedRemoteControlIndicator.d.ts +8 -0
  189. package/dist/connection/remote-control/ConnectedRemoteControlSwitch.d.ts +1 -0
  190. package/dist/connection/remote-control/index.d.ts +4 -0
  191. package/dist/connection/remote-control/remoteControl.d.ts +40 -0
  192. package/dist/connection/routes/useDeepLinkSync.d.ts +4 -1
  193. package/dist/connection/runtime/ConnectedAppRuntime.d.ts +1 -1
  194. package/dist/connection/settings-page/settingsSections.d.ts +1 -1
  195. package/dist/connection/tags/ConnectedTagTable.d.ts +1 -1
  196. package/dist/dashboards/index.cjs +327 -116
  197. package/dist/dashboards/index.cjs.map +1 -1
  198. package/dist/dashboards/index.js +311 -101
  199. package/dist/dashboards/index.js.map +1 -1
  200. package/dist/embed/index.cjs +21 -21
  201. package/dist/embed/index.js +14 -14
  202. package/dist/guided/GuidedCursor.d.ts +21 -0
  203. package/dist/guided/cursor.d.ts +56 -0
  204. package/dist/guided/index.d.ts +5 -0
  205. package/dist/guided/runner.d.ts +30 -0
  206. package/dist/guided/sequences.d.ts +80 -0
  207. package/dist/guided/surfaces.d.ts +13 -0
  208. package/dist/guided/useGuidedRuns.d.ts +3 -0
  209. package/dist/index.cjs +171 -135
  210. package/dist/index.d.ts +1 -0
  211. package/dist/index.js +7 -7
  212. package/dist/provider/host.d.ts +6 -0
  213. package/dist/settings/PlanBadge.d.ts +1 -1
  214. package/dist/settings/TipsEditor.d.ts +6 -3
  215. package/dist/settings/index.cjs +152 -151
  216. package/dist/settings/index.js +3 -2
  217. package/dist/shell/index.cjs +46 -46
  218. package/dist/shell/index.js +3 -3
  219. package/dist/studio/index.cjs +15 -15
  220. package/dist/studio/index.js +9 -9
  221. package/dist/styles.css +1 -1
  222. package/dist/workflow-canvas/index.cjs +25 -25
  223. package/dist/workflow-canvas/index.js +13 -13
  224. package/node_modules/@arbidocs/coedit/package.json +1 -1
  225. package/package.json +5 -5
  226. package/dist/ConnectedStreamedWordArtifact-BF6JET2D.cjs.map +0 -1
  227. package/dist/ConnectedStreamedWordArtifact-ILMKFCDC.js.map +0 -1
  228. package/dist/ai-E6FA4Y4J.cjs.map +0 -1
  229. package/dist/ai-WASSGEMI.js.map +0 -1
  230. package/dist/chunk-5UMZXDGL.cjs.map +0 -1
  231. package/dist/chunk-5XQNXDST.js.map +0 -1
  232. package/dist/chunk-632JXVXY.js.map +0 -1
  233. package/dist/chunk-6XNWGOS3.cjs.map +0 -1
  234. package/dist/chunk-73FJ6L6I.cjs.map +0 -1
  235. package/dist/chunk-BH4MK2J5.js.map +0 -1
  236. package/dist/chunk-C4TGESIB.cjs +0 -260
  237. package/dist/chunk-C4TGESIB.cjs.map +0 -1
  238. package/dist/chunk-CEVVGJQX.js.map +0 -1
  239. package/dist/chunk-FVZ2CN4A.js.map +0 -1
  240. package/dist/chunk-KGUBKE3V.cjs.map +0 -1
  241. package/dist/chunk-LM5CPXJO.cjs.map +0 -1
  242. package/dist/chunk-LUO46ELJ.cjs.map +0 -1
  243. package/dist/chunk-MHFWGIF4.js +0 -254
  244. package/dist/chunk-MHFWGIF4.js.map +0 -1
  245. package/dist/chunk-O4X7HXLF.cjs.map +0 -1
  246. package/dist/chunk-OG3TI5GX.js.map +0 -1
  247. package/dist/chunk-Q5U6Y2NO.js.map +0 -1
  248. package/dist/chunk-QFKL4HV2.js.map +0 -1
  249. package/dist/chunk-VYJF4ZQY.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/auth/AuthLayout.tsx","../src/auth/AuthForm.tsx","../src/auth/AuthFooter.tsx","../src/auth/auth-error.ts","../src/auth/password-rules.ts","../src/auth/credential-storage.ts","../src/auth/RecoveryDialogs.tsx","../src/connection/auth/auth-hash.ts","../src/connection/auth/fragment-credentials.ts"],"names":["jsxs","cn","jsx","Fragment","ArrowRight","createContext","useId","useMemo","useContext","Input","useState","testIdOr","EyeOff","Eye","AlertCircle","Button","Loader2","TabsPrimitive","WifiOff","Checkbox","DropdownMenu","DropdownMenuTrigger","MoreVertical","DropdownMenuContent","DropdownMenuItem","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","useRef","Key","Shield","Upload","DialogFooter","useEffect"],"mappings":"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","file":"chunk-VYJF4ZQY.cjs","sourcesContent":["import type { LucideIcon } from 'lucide-react'\nimport { ArrowRight } from 'lucide-react'\nimport type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport interface AuthLayoutProps {\n /** The form column content. */\n children: ReactNode\n /** Sits above the form: the Login / Register tabs, or an offline badge. */\n headerRight?: ReactNode\n /** Hero panel: the right half on desktop, hidden on mobile. Omit for a single centred column. */\n aside?: ReactNode\n /** Brand mark shown top-left of the form column (logo + name). */\n brand?: ReactNode\n /** Pinned bottom-right over the hero on desktop (e.g. a deployment indicator). */\n corner?: ReactNode\n className?: string\n testId?: string\n}\n\n/**\n * Full-bleed split: a calm form column on the left, the hero (`aside`) on the right. On mobile the\n * hero is hidden and the form fills the screen. With no `aside` it is a single centred column.\n */\nexport function AuthLayout({\n children,\n headerRight,\n aside,\n brand,\n corner,\n className,\n testId = 'auth-layout',\n}: AuthLayoutProps) {\n return (\n <div\n data-slot=\"auth-layout\"\n className={cn(\n 'min-h-screen bg-background text-foreground',\n // The hero needs height: a phone held sideways (under 32rem tall) gets the form alone.\n aside && 'md:grid [@media(min-height:32rem)]:md:grid-cols-2',\n className\n )}\n data-testid={testId}\n >\n {corner}\n <section className=\"flex min-h-screen flex-col px-4 py-5 sm:px-8 md:px-12 md:py-6\">\n {brand && (\n <div className=\"flex items-center gap-3 font-semibold text-foreground\">{brand}</div>\n )}\n {/* Top-aligned at a fixed offset (not vertically centred) so switching tabs never moves the tabs. */}\n <div className=\"mx-auto mt-10 flex w-full max-w-sm flex-col gap-5 py-8 md:mt-[14vh]\">\n {headerRight && <div className=\"flex items-center\">{headerRight}</div>}\n {children}\n </div>\n </section>\n {/* Exactly one screen tall and pinned, so the hero is centred in the window rather than in\n the row: a form that overflows the screen (Login, with its SSO buttons, on a laptop)\n would otherwise stretch the row and move the hero text when switching tabs. */}\n {aside && (\n <div className=\"hidden [@media(min-height:32rem)]:md:sticky [@media(min-height:32rem)]:md:top-0 [@media(min-height:32rem)]:md:flex [@media(min-height:32rem)]:md:h-screen\">\n {aside}\n </div>\n )}\n </div>\n )\n}\n\nexport interface AuthHeroPillar {\n icon: LucideIcon\n title: string\n body: string\n}\n\nexport interface AuthHeroProps {\n /** First line of the headline. */\n headline?: ReactNode\n /** Second headline line, set in italic accent. */\n emphasis?: string\n lead?: ReactNode\n pillars?: AuthHeroPillar[]\n link?: { href: string; label: string }\n /** Cover image behind the content (any CSS `url(...)` source). A tint keeps text legible. */\n backgroundImage?: string\n /** Extra content under the pillars (a quote, a logo row, a screenshot). */\n children?: ReactNode\n className?: string\n testId?: string\n}\n\n/** The value-proposition panel for {@link AuthLayout}'s `aside`: headline, lead, pillars, link. */\nexport function AuthHero({\n headline,\n emphasis,\n lead,\n pillars = [],\n link,\n backgroundImage,\n children,\n className,\n testId = 'product-pillars',\n}: AuthHeroProps) {\n return (\n <div\n data-slot=\"auth-hero\"\n className={cn(\n 'relative flex w-full flex-col justify-center gap-6 overflow-hidden bg-hero px-12 py-16 text-white',\n className\n )}\n data-testid={testId}\n >\n {backgroundImage && (\n <>\n <div\n aria-hidden=\"true\"\n data-slot=\"auth-hero-image\"\n className=\"absolute inset-0 bg-cover bg-center\"\n style={{ backgroundImage: `url(${backgroundImage})` }}\n />\n <div aria-hidden=\"true\" className=\"absolute inset-0 bg-hero/70\" />\n </>\n )}\n {headline && (\n <h2 className=\"relative max-w-[18ch] text-3xl font-semibold leading-tight text-white\">\n {headline}\n {emphasis && (\n <>\n <br />\n <span className=\"italic text-theme-cyan-bright\">{emphasis}</span>\n </>\n )}\n </h2>\n )}\n {lead && <p className=\"relative max-w-[44ch] text-base text-white/70\">{lead}</p>}\n\n <ul className=\"relative flex max-w-[46ch] flex-col gap-5\">\n {pillars.map(({ icon: Icon, title, body }) => (\n <li key={title} className=\"flex gap-3\">\n <Icon className=\"mt-0.5 h-5 w-5 shrink-0 text-theme-cyan-bright\" aria-hidden=\"true\" />\n <div>\n <h3 className=\"text-base font-semibold leading-snug text-white\">{title}</h3>\n <p className=\"text-sm leading-relaxed text-white/70\">{body}</p>\n </div>\n </li>\n ))}\n </ul>\n\n {children && <div className=\"relative\">{children}</div>}\n\n {link && (\n <a\n href={link.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"relative inline-flex items-center gap-1 text-sm font-medium text-theme-cyan-bright transition-colors hover:text-white\"\n >\n {link.label}\n <ArrowRight className=\"h-4 w-4\" />\n </a>\n )}\n </div>\n )\n}\n","import { AlertCircle, Eye, EyeOff, Loader2, WifiOff } from 'lucide-react'\nimport {\n createContext,\n useContext,\n useId,\n useMemo,\n useState,\n type ComponentProps,\n type ReactNode,\n} from 'react'\nimport * as TabsPrimitive from '@radix-ui/react-tabs'\nimport { Button, cn, Input } from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\n\n/** Title + one-line description above an auth form. */\nexport function AuthHeading({ title, description }: { title: ReactNode; description?: ReactNode }) {\n return (\n <div data-slot=\"auth-heading\">\n <h1 className=\"text-2xl font-semibold tracking-tight text-foreground\">{title}</h1>\n {description && <p className=\"mt-2 text-sm text-muted-foreground\">{description}</p>}\n </div>\n )\n}\n\n/** A text-style action under or beside a field (\"Forgot your password?\", \"Clear form\"). */\nexport function AuthLink({ className, type = 'button', ...props }: ComponentProps<'button'>) {\n return (\n <button\n type={type}\n data-slot=\"auth-link\"\n className={cn(\n 'text-sm text-primary hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11',\n className\n )}\n {...props}\n />\n )\n}\n\ninterface AuthFieldContextValue {\n id: string\n errorId?: string\n}\n\n/** What an `AuthField` hands to the control inside: its id and the id of its error message. */\nconst AuthFieldContext = createContext<AuthFieldContextValue | null>(null)\n\n/** Merge space-separated id lists for `aria-describedby`. */\nfunction joinIds(...ids: Array<string | undefined>): string | undefined {\n const joined = ids.filter(Boolean).join(' ')\n return joined || undefined\n}\n\nexport interface AuthFieldProps {\n /** Id of the control inside, for the label. Omit it to use a generated (`useId`) id that the\n * `AuthInput` / `RevealablePasswordInput` inside picks up automatically. */\n htmlFor?: string\n /** Field-level error: shown under the control, linked with `aria-describedby`, and marks the\n * control `aria-invalid`. */\n error?: ReactNode\n errorTestId?: string\n label: ReactNode\n required?: boolean\n /** Right-aligned action in the label row (e.g. \"Clear form\"). */\n labelAction?: ReactNode\n /** Overlaid at the right edge of the control (e.g. a \"Verified\" badge). */\n trailing?: ReactNode\n className?: string\n children: ReactNode\n}\n\n/** Label (with required marker) above a control. */\nexport function AuthField({\n htmlFor,\n error,\n errorTestId,\n label,\n required,\n labelAction,\n trailing,\n className,\n children,\n}: AuthFieldProps) {\n const generatedId = useId()\n const id = htmlFor ?? generatedId\n const errorId = error ? `${id}-error` : undefined\n const context = useMemo(() => ({ id, errorId }), [id, errorId])\n return (\n <AuthFieldContext.Provider value={context}>\n <div data-slot=\"auth-field\" className={className}>\n <div className=\"mb-1 flex items-center justify-between\">\n <label htmlFor={id} className=\"block text-sm font-medium text-foreground\">\n {label} {required && <span className=\"text-red-text\">*</span>}\n </label>\n {labelAction}\n </div>\n {trailing ? (\n <div className=\"relative\">\n {children}\n {trailing}\n </div>\n ) : (\n children\n )}\n {error && (\n <p\n id={errorId}\n role=\"alert\"\n className=\"mt-1 text-sm text-red-text\"\n data-testid={errorTestId}\n >\n {error}\n </p>\n )}\n </div>\n </AuthFieldContext.Provider>\n )\n}\n\n/** Input styled for auth forms (faint placeholder). */\nexport function AuthInput({\n className,\n id,\n 'aria-describedby': describedBy,\n 'aria-invalid': invalid,\n ...props\n}: ComponentProps<typeof Input>) {\n const field = useContext(AuthFieldContext)\n return (\n <Input\n id={id ?? field?.id}\n aria-describedby={joinIds(describedBy, field?.errorId)}\n aria-invalid={invalid ?? (field?.errorId ? true : undefined)}\n className={cn('placeholder:text-muted-foreground', className)}\n {...props}\n />\n )\n}\n\n/** Every fixed string of the revealable password input. */\nexport interface RevealablePasswordInputLabels {\n hidePassword: string\n showPassword: string\n}\n\nexport const DEFAULT_REVEALABLE_PASSWORD_INPUT_LABELS: RevealablePasswordInputLabels = {\n hidePassword: 'Hide password',\n showPassword: 'Show password',\n}\n\n/** Every fixed string of the offline badge. */\nexport interface AuthOfflineBadgeLabels {\n offline: string\n}\n\nexport const DEFAULT_AUTH_OFFLINE_BADGE_LABELS: AuthOfflineBadgeLabels = {\n offline: 'Offline',\n}\n\nexport interface RevealablePasswordInputProps extends Omit<ComponentProps<typeof Input>, 'type'> {\n /** Controlled reveal state. Omit it and the input manages its own (see `defaultRevealed`). */\n isRevealed?: boolean\n /** Initial state when uncontrolled. */\n defaultRevealed?: boolean\n /** Called on every toggle press, controlled or not. */\n onToggleReveal?: () => void\n labels?: Partial<RevealablePasswordInputLabels>\n /** Show/hide button id (default `toggle-password-visibility`); `data-testid` goes to the input. */\n toggleTestId?: string\n}\n\n/** Password input with a show/hide button inside the field. */\nexport function RevealablePasswordInput({\n isRevealed: controlledRevealed,\n defaultRevealed = false,\n onToggleReveal,\n className,\n labels,\n toggleTestId,\n ...props\n}: RevealablePasswordInputProps) {\n const [innerRevealed, setInnerRevealed] = useState(defaultRevealed)\n const isControlled = controlledRevealed !== undefined\n const isRevealed = isControlled ? controlledRevealed : innerRevealed\n const l = useMemo(() => ({ ...DEFAULT_REVEALABLE_PASSWORD_INPUT_LABELS, ...labels }), [labels])\n return (\n <div className=\"relative\">\n <AuthInput\n type={isRevealed ? 'text' : 'password'}\n className={cn('pr-10', className)}\n {...props}\n />\n <button\n type=\"button\"\n onClick={() => {\n if (!isControlled) setInnerRevealed((prev) => !prev)\n onToggleReveal?.()\n }}\n aria-label={isRevealed ? l.hidePassword : l.showPassword}\n aria-pressed={isRevealed}\n className=\"absolute inset-y-0 right-0 flex w-10 items-center justify-center rounded-r-md text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring pointer-coarse:w-11\"\n data-testid={testIdOr(toggleTestId, { testId: 'toggle-password-visibility' })}\n >\n {isRevealed ? (\n <EyeOff className=\"h-4 w-4\" aria-hidden=\"true\" />\n ) : (\n <Eye className=\"h-4 w-4\" aria-hidden=\"true\" />\n )}\n </button>\n </div>\n )\n}\n\n/** Small pill on a locked field, e.g. \"Verified\". */\nexport function AuthFieldBadge({\n icon,\n children,\n testId,\n}: {\n icon?: ReactNode\n children: ReactNode\n testId?: string\n}) {\n return (\n <span\n className=\"pointer-events-none absolute inset-y-0 right-3 flex items-center gap-1 text-xs font-medium text-green-text\"\n data-testid={testId}\n >\n {icon}\n {children}\n </span>\n )\n}\n\n/** Centred muted sentence under a step's primary action. */\nexport function AuthNote({ className, ...props }: ComponentProps<'p'>) {\n return <p className={cn('text-center text-sm text-muted-foreground', className)} {...props} />\n}\n\n/** Error / status message box for a form. */\nexport function AuthAlert({\n children,\n withIcon = false,\n testId,\n id,\n}: {\n children: ReactNode\n withIcon?: boolean\n testId?: string\n /** Lets a field point at this message with `aria-describedby`. */\n id?: string\n}) {\n return (\n <div\n id={id}\n role=\"alert\"\n data-testid={testId}\n className=\"flex gap-2 rounded-md bg-red-bg p-3 text-sm text-red-text\"\n >\n {withIcon && <AlertCircle className=\"h-5 w-5 flex-shrink-0\" aria-hidden=\"true\" />}\n <div>{children}</div>\n </div>\n )\n}\n\nexport interface AuthSubmitButtonProps extends ComponentProps<typeof Button> {\n /** Shows a spinner and sets `aria-busy`. */\n isBusy?: boolean\n /** Shorthand for `data-testid`. */\n testId?: string\n}\n\n/** Full-width primary submit with a spinner while busy. */\nexport function AuthSubmitButton({\n isBusy,\n testId,\n children,\n className,\n ...props\n}: AuthSubmitButtonProps) {\n return (\n <Button\n type=\"submit\"\n className={cn('w-full', className)}\n aria-busy={isBusy || undefined}\n data-testid={testId}\n {...props}\n >\n {isBusy && <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />}\n {children}\n </Button>\n )\n}\n\n/** \"or continue with\" separator between the form and the SSO button. */\nexport function AuthDivider({ label, testId }: { label: string; testId?: string }) {\n return (\n <div\n data-slot=\"auth-divider\"\n data-testid={testIdOr(testId, { testId: 'login-divider' })}\n className=\"relative\"\n >\n <div className=\"absolute inset-0 flex items-center\">\n <div className=\"w-full border-t border-border\" />\n </div>\n <div className=\"relative flex justify-center text-xs\">\n <span className=\"bg-background px-2 text-muted-foreground\">{label}</span>\n </div>\n </div>\n )\n}\n\nexport interface AuthTabOption<T extends string> {\n value: T\n label: string\n testId?: string\n}\n\n/**\n * Underline tab pair (Login / Register) above the form. Radix Tabs: one tab stop, arrow keys,\n * Home and End move between tabs and select them (the form below swaps with the selection).\n */\nexport function AuthTabs<T extends string>({\n value,\n onChange,\n tabs,\n ariaLabel,\n}: {\n value: T\n onChange: (value: T) => void\n tabs: AuthTabOption<T>[]\n ariaLabel: string\n}) {\n return (\n <TabsPrimitive.Root value={value} onValueChange={(next) => onChange(next as T)}>\n <TabsPrimitive.List aria-label={ariaLabel} className=\"inline-flex items-center gap-6\">\n {tabs.map((tab) => (\n <TabsPrimitive.Trigger\n key={tab.value}\n value={tab.value}\n data-testid={tab.testId}\n className={cn(\n '-mb-px border-b-2 py-2 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-w-11 pointer-coarse:py-3',\n tab.value === value\n ? 'border-primary text-foreground'\n : 'border-transparent text-muted-foreground hover:text-foreground'\n )}\n >\n {tab.label}\n </TabsPrimitive.Trigger>\n ))}\n </TabsPrimitive.List>\n {/* The form the tabs switch lives outside this component; these empty, hidden panels only\n give each tab's `aria-controls` a valid target. */}\n {tabs.map((tab) => (\n <TabsPrimitive.Content\n key={tab.value}\n value={tab.value}\n tabIndex={-1}\n aria-hidden=\"true\"\n className=\"hidden\"\n />\n ))}\n </TabsPrimitive.Root>\n )\n}\n\n/** Pill shown instead of the tabs when the device is offline. */\nexport function AuthOfflineBadge({\n label,\n title,\n testId,\n labels,\n}: {\n label?: string\n title?: string\n testId?: string\n labels?: Partial<AuthOfflineBadgeLabels>\n}) {\n const text = label ?? labels?.offline ?? DEFAULT_AUTH_OFFLINE_BADGE_LABELS.offline\n return (\n <span\n data-testid={testIdOr(testId, { testId: 'login-offline-indicator' })}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-yellow-bg px-2.5 py-1.5 text-sm font-medium text-yellow-text\"\n title={title}\n >\n <WifiOff className=\"h-4 w-4 shrink-0\" />\n {text}\n </span>\n )\n}\n","import { useMemo, type ReactNode } from 'react'\nimport { MoreVertical } from 'lucide-react'\nimport {\n Checkbox,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\n\nexport interface AuthLegalLink {\n href: string\n label: string\n}\n\nexport interface AuthConsentProps {\n termsAccepted: boolean\n onTermsAcceptedChange: (accepted: boolean) => void\n /** Whether to download a recovery key on signup (opt-out; unchecking shows the warning). */\n saveRecoveryKey: boolean\n onSaveRecoveryKeyChange: (save: boolean) => void\n termsLink: AuthLegalLink\n privacyLink: AuthLegalLink\n /** Shown (role=\"alert\") only when the recovery-key box is unchecked. */\n noRecoveryKeyWarning: string\n labels?: Partial<AuthConsentLabels>\n /** Part ids; defaults are the current ids. */\n testIds?: Partial<\n Record<'termsCheckbox' | 'recoveryKeyCheckbox' | 'noRecoveryKeyWarning', string>\n >\n}\n\n/** Every fixed string of the sign-up consent block. */\nexport interface AuthConsentLabels {\n /** Text before the terms link. */\n acknowledge: string\n /** Text between the terms and privacy links. */\n and: string\n downloadRecoveryKey: string\n}\n\nexport const DEFAULT_AUTH_CONSENT_LABELS: AuthConsentLabels = {\n acknowledge: 'I acknowledge the',\n and: 'and',\n downloadRecoveryKey: 'Download my recovery key',\n}\n\n/** Every fixed string of the sign-in footer. */\nexport interface AuthFooterLinksLabels {\n installOptions: string\n install: string\n}\n\nexport const DEFAULT_AUTH_FOOTER_LINKS_LABELS: AuthFooterLinksLabels = {\n installOptions: 'Install options',\n install: 'Install',\n}\n\nconst LEGAL_LINK_CLASS = 'underline transition-colors hover:text-primary'\n\n/** Sign-up consent: required terms checkbox and the opt-out \"download recovery key\" checkbox. */\nexport function AuthConsent({\n termsAccepted,\n onTermsAcceptedChange,\n saveRecoveryKey,\n onSaveRecoveryKeyChange,\n termsLink,\n privacyLink,\n noRecoveryKeyWarning,\n labels,\n testIds,\n}: AuthConsentProps) {\n const l = useMemo(() => ({ ...DEFAULT_AUTH_CONSENT_LABELS, ...labels }), [labels])\n return (\n <div data-slot=\"auth-consent\" className=\"space-y-2\">\n <div className=\"flex items-start gap-2\">\n <Checkbox\n id=\"accept-terms\"\n checked={termsAccepted}\n onCheckedChange={(checked) => onTermsAcceptedChange(checked === true)}\n data-testid={testIdOr(testIds?.termsCheckbox, { testId: 'accept-terms-checkbox' })}\n />\n <label\n htmlFor=\"accept-terms\"\n className=\"cursor-pointer text-sm leading-relaxed text-muted-foreground\"\n >\n {l.acknowledge}{' '}\n <a\n href={termsLink.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={LEGAL_LINK_CLASS}\n >\n {termsLink.label}\n </a>{' '}\n {l.and}{' '}\n <a\n href={privacyLink.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={LEGAL_LINK_CLASS}\n >\n {privacyLink.label}\n </a>\n </label>\n </div>\n <div className=\"flex items-start gap-2\">\n <Checkbox\n id=\"save-recovery-key\"\n checked={saveRecoveryKey}\n onCheckedChange={(checked) => onSaveRecoveryKeyChange(checked === true)}\n data-testid={testIdOr(testIds?.recoveryKeyCheckbox, {\n testId: 'save-recovery-key-checkbox',\n })}\n />\n <label\n htmlFor=\"save-recovery-key\"\n className=\"cursor-pointer text-sm leading-relaxed text-muted-foreground\"\n >\n {l.downloadRecoveryKey}\n </label>\n </div>\n {/* Only shown on opt-out: the default path stays free of warnings. */}\n {!saveRecoveryKey && (\n <p\n className=\"text-sm text-red-text\"\n role=\"alert\"\n data-testid={testIdOr(testIds?.noRecoveryKeyWarning, {\n testId: 'no-recovery-key-warning',\n })}\n >\n {noRecoveryKeyWarning}\n </p>\n )}\n </div>\n )\n}\n\nexport interface AuthInstallOption {\n id: string\n label: ReactNode\n icon?: ReactNode\n onSelect: () => void\n disabled?: boolean\n testId?: string\n}\n\nexport interface AuthFooterLinksProps {\n privacyLink: AuthLegalLink\n /** Entries of the \"Install\" kebab menu. Omit/empty to hide the menu. */\n installOptions?: AuthInstallOption[]\n /** Dialog or other overlay owned by the host, rendered inside the footer. */\n children?: ReactNode\n labels?: Partial<AuthFooterLinksLabels>\n /** Install menu trigger id (default `install-options-trigger`). */\n installTriggerTestId?: string\n}\n\n/** Sign-in footer: privacy link on the left, an \"Install\" kebab menu on the right. */\nexport function AuthFooterLinks({\n privacyLink,\n installOptions = [],\n children,\n labels,\n installTriggerTestId,\n}: AuthFooterLinksProps) {\n const l = useMemo(() => ({ ...DEFAULT_AUTH_FOOTER_LINKS_LABELS, ...labels }), [labels])\n return (\n <div\n data-slot=\"auth-footer-links\"\n className=\"flex items-center justify-between pt-2 text-sm text-muted-foreground\"\n >\n <a\n href={privacyLink.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center transition-colors hover:text-primary pointer-coarse:min-h-11\"\n >\n {privacyLink.label}\n </a>\n\n {installOptions.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger\n className=\"flex items-center gap-1 rounded-md px-1.5 py-1 transition-colors hover:text-primary focus:outline-none focus-visible:ring-1 focus-visible:ring-ring pointer-coarse:min-h-11\"\n aria-label={l.installOptions}\n data-testid={testIdOr(installTriggerTestId, { testId: 'install-options-trigger' })}\n >\n {l.install}\n <MoreVertical size={14} />\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {installOptions.map((option) => (\n <DropdownMenuItem\n key={option.id}\n onClick={option.onSelect}\n disabled={option.disabled}\n className=\"gap-2\"\n data-testid={option.testId}\n >\n {option.icon}\n {option.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n {children}\n </div>\n )\n}\n","/**\n * Auth Error Parsing Utility\n *\n * Parses API error responses into user-friendly messages.\n * Handles FastAPI/Pydantic error formats (detail field) and standard Error objects.\n */\n\nexport interface ParseAuthErrorOptions {\n /** Default message if error cannot be parsed */\n defaultMessage?: string\n /** Check for 429 rate limit errors */\n checkRateLimit?: boolean\n /** Map specific error messages to custom messages */\n messageMap?: Record<string, string>\n}\n\n/**\n * Parse an API error into a user-friendly message\n */\nexport function parseAuthError(error: unknown, options: ParseAuthErrorOptions = {}): string {\n const {\n defaultMessage = 'Unable to communicate with the server',\n checkRateLimit = false,\n messageMap = {},\n } = options\n\n if (!error) return defaultMessage\n\n // An Error carrying the server's answer (`detail`, `status`: what the SDK's auth calls throw) is\n // read like the answer itself.\n if (error instanceof Error && !('detail' in error) && !('status' in error)) {\n return isNetworkError(error.message)\n ? defaultMessage\n : applyMessageMap(error.message, messageMap)\n }\n\n if (typeof error !== 'object') return defaultMessage\n\n const errorObj = error as {\n detail?: string | Array<{ msg: string }>\n message?: string\n status?: number\n }\n // The server's answer wins over a wrapping message (\"Login failed: …\").\n const message = errorObj.detail === undefined ? errorObj.message : undefined\n\n // Check for rate limiting (429)\n if (checkRateLimit) {\n if (\n errorObj.status === 429 ||\n errorObj.message?.includes('429') ||\n (typeof errorObj.detail === 'string' && errorObj.detail.includes('429'))\n ) {\n return 'Error: duplicate request'\n }\n }\n\n // Handle detail field (FastAPI/Pydantic style)\n if (errorObj.detail) {\n if (Array.isArray(errorObj.detail)) {\n return errorObj.detail[0]?.msg || 'Validation error occurred'\n }\n if (typeof errorObj.detail === 'string') {\n return applyMessageMap(errorObj.detail, messageMap)\n }\n }\n\n // Handle message field\n if (message) {\n return isNetworkError(message) ? defaultMessage : applyMessageMap(message, messageMap)\n }\n\n return defaultMessage\n}\n\nfunction isNetworkError(message: string): boolean {\n const lower = message.toLowerCase()\n return lower.includes('fetch') || lower.includes('network')\n}\n\nfunction applyMessageMap(message: string, messageMap: Record<string, string>): string {\n return messageMap[message] ?? message\n}\n","/**\n * Password rules: the requirements a new password must meet (registration, a new SSO account's\n * master password, a password change), as one value a site configures once (`createPasswordRules`)\n * and every form reads: the one-line hint of `PasswordStrengthInput`, the submit gate, the error.\n */\n\nexport interface PasswordRequirements {\n minLength: boolean\n hasUpperOrSpecial: boolean\n hasNumber: boolean\n}\n\nexport interface PasswordRules {\n minLength: number\n /** Which requirements the password meets. */\n check(password: string): PasswordRequirements\n /** The first unmet requirement as a short hint, or `null` when the password is acceptable. */\n unmet(password: string): string | null\n isValid(password: string): boolean\n /** The first unmet requirement as a sentence (an error to show), or `null`. */\n error(password: string): string | null\n}\n\n/** The rules with a minimum length (default 8): one uppercase or special character, one number. */\nexport function createPasswordRules(minLength = 8): PasswordRules {\n const check = (password: string): PasswordRequirements => ({\n minLength: password.length >= minLength,\n hasUpperOrSpecial: /[A-Z!@#$%^&*()_+\\-=[\\]{};':\"\\\\|,.<>/?]/.test(password),\n hasNumber: /[0-9]/.test(password),\n })\n return {\n minLength,\n check,\n unmet(password) {\n const met = check(password)\n if (!met.minLength) return `Minimum ${minLength} characters`\n if (!met.hasUpperOrSpecial) return 'At least one uppercase letter or special character'\n if (!met.hasNumber) return 'At least one number'\n return null\n },\n isValid(password) {\n const met = check(password)\n return met.minLength && met.hasUpperOrSpecial && met.hasNumber\n },\n error(password) {\n const met = check(password)\n if (!met.minLength) return `Password must be at least ${minLength} characters long.`\n if (!met.hasUpperOrSpecial) {\n return 'Password must contain at least one uppercase letter or special character.'\n }\n if (!met.hasNumber) return 'Password must contain at least one number.'\n return null\n },\n }\n}\n\n/** The default rules (8 characters). */\nexport const DEFAULT_PASSWORD_RULES = createPasswordRules()\n","/**\n * Credential Storage Utilities\n *\n * Uses the Credential Management API to prompt browsers to save passwords.\n * This helps users store passwords in their browser's built-in password manager.\n */\n\n/**\n * Prompt the browser to save credentials to its password manager.\n *\n * This uses the Credential Management API which is supported by:\n * - Chrome/Edge (full support, syncs to Google/Microsoft account)\n * - Firefox (limited support)\n * - Safari (uses Keychain instead)\n *\n * @param email - User's email address\n * @param password - User's password\n * @returns true if credential was stored, false otherwise\n */\nexport async function promptSaveCredential(email: string, password: string): Promise<boolean> {\n // Check if Credential Management API is supported\n if (!('credentials' in navigator) || !('PasswordCredential' in window)) {\n console.info('[CREDENTIAL] Credential Management API not supported')\n return false\n }\n\n try {\n // Create a PasswordCredential object\n const credential = new (\n window as unknown as {\n PasswordCredential: new (data: {\n id: string\n password: string\n name?: string\n }) => Credential\n }\n ).PasswordCredential({\n id: email,\n password: password,\n name: 'ARBI Account',\n })\n\n // Prompt the browser to store the credential\n await navigator.credentials.store(credential)\n console.info('[CREDENTIAL] Credential stored successfully')\n return true\n } catch (error) {\n // User may have declined or browser doesn't support\n console.info('[CREDENTIAL] Failed to store credential:', error)\n return false\n }\n}\n","import {\n useMemo,\n useRef,\n useState,\n type DragEvent,\n type FormEvent,\n type ReactNode,\n useId,\n} from 'react'\nimport { AlertCircle, Key, Loader2, Shield, Upload } from 'lucide-react'\nimport {\n Button,\n cn,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Input,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\n\nfunction ErrorBox({ message, id }: { message: string; id?: string }) {\n return (\n <div id={id} role=\"alert\" className=\"rounded-md bg-red-bg p-3\">\n <div className=\"flex gap-2\">\n <AlertCircle className=\"h-5 w-5 flex-shrink-0 text-red-text\" aria-hidden=\"true\" />\n <p className=\"text-sm text-red-text\">{message}</p>\n </div>\n </div>\n )\n}\n\n/** Every fixed string of the recovery-key dialog. `title` / description props win. */\nexport interface RecoveryKeyDialogLabels {\n title: string\n verifiedDescription: string\n unverifiedDescription: string\n done: string\n currentPassword: string\n passwordPlaceholder: string\n cancel: string\n verifying: string\n verify: string\n}\n\nexport const DEFAULT_RECOVERY_KEY_DIALOG_LABELS: RecoveryKeyDialogLabels = {\n title: 'Save your recovery key',\n verifiedDescription:\n \"If you forget your password, this is the only way to get back into your account. Save it to your password manager so it's there when you need it.\",\n unverifiedDescription: 'Confirm your password to continue.',\n done: 'Done',\n currentPassword: 'Current Password',\n passwordPlaceholder: 'Enter your password',\n cancel: 'Cancel',\n verifying: 'Verifying...',\n verify: 'Verify',\n}\n\n/** Every fixed string of the account-recovery dialog. */\nexport interface AccountRecoveryDialogLabels {\n title: string\n description: string\n emailAddress: string\n emailPlaceholder: string\n keyLoadedFromLink: string\n ssoProtectedKeyNotice: string\n recoveryKey: string\n ssoProtectedKey: string\n dropKeyHere: string\n uploadKeyPrompt: string\n ssoSignInNotice: string\n ssoSignIn: string\n afterRecoveryNotice: string\n cancel: string\n recovering: string\n recoverAccount: string\n}\n\nexport const DEFAULT_ACCOUNT_RECOVERY_DIALOG_LABELS: AccountRecoveryDialogLabels = {\n title: 'Recover Your Account',\n description: 'Upload your recovery key to regain access to your account',\n emailAddress: 'Email Address',\n emailPlaceholder: 'Enter your email',\n keyLoadedFromLink: 'Recovery key loaded from link',\n ssoProtectedKeyNotice: 'SSO-protected key — you must be signed into the matching SSO account.',\n recoveryKey: 'Recovery Key',\n ssoProtectedKey: 'SSO Protected Key',\n dropKeyHere: 'Drop your recovery key here',\n uploadKeyPrompt: 'Click or drag to upload your recovery key (.key file)',\n ssoSignInNotice:\n 'This account signs in with single sign-on. Sign in with your identity provider to continue — you won\\u2019t need your forgotten master password for that step.',\n ssoSignIn: 'Sign in with Auth0 to continue',\n afterRecoveryNotice:\n 'After successful recovery, you will be prompted to set a new password to secure your account.',\n cancel: 'Cancel',\n recovering: 'Recovering...',\n recoverAccount: 'Recover Account',\n}\n\nexport interface RecoveryKeyDialogProps {\n labels?: Partial<RecoveryKeyDialogLabels>\n open: boolean\n onClose: () => void\n /** Content shown once the password is verified (the key download). `null` while verifying. */\n verified: ReactNode | null\n password: string\n onPasswordChange: (password: string) => void\n onVerify: () => void\n isVerifying: boolean\n error: string | null\n title?: string\n verifiedDescription?: string\n unverifiedDescription?: string\n /** Dialog test id (default `download-recovery-key-dialog`). */\n testId?: string\n /** Part ids; defaults are the current ids. */\n testIds?: Partial<Record<'passwordInput', string>>\n}\n\n/**\n * \"Save your recovery key\": confirm the account password first, then reveal the key download\n * (`verified`) with a Done button.\n */\nexport function RecoveryKeyDialog({\n open,\n onClose,\n verified,\n password,\n onPasswordChange,\n onVerify,\n isVerifying,\n error,\n title,\n verifiedDescription,\n unverifiedDescription,\n labels,\n testId,\n testIds,\n}: RecoveryKeyDialogProps) {\n const verifyPasswordId = useId()\n const l = useMemo(() => ({ ...DEFAULT_RECOVERY_KEY_DIALOG_LABELS, ...labels }), [labels])\n const handleSubmit = (e: FormEvent) => {\n e.preventDefault()\n onVerify()\n }\n\n return (\n <Dialog open={open} onOpenChange={onClose}>\n <DialogContent\n presentation=\"sheet\"\n className=\"sm:max-w-md\"\n data-testid={testIdOr(testId, { testId: 'download-recovery-key-dialog' })}\n >\n <DialogHeader>\n <DialogTitle className=\"font-heading\">{title ?? l.title}</DialogTitle>\n <DialogDescription>\n {verified\n ? (verifiedDescription ?? l.verifiedDescription)\n : (unverifiedDescription ?? l.unverifiedDescription)}\n </DialogDescription>\n </DialogHeader>\n\n {verified ? (\n <div className=\"space-y-4\">\n {verified}\n <div className=\"flex justify-end\">\n <Button onClick={onClose}>{l.done}</Button>\n </div>\n </div>\n ) : (\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label htmlFor={verifyPasswordId} className=\"text-sm font-medium\">\n {l.currentPassword}\n </label>\n <Input\n id={verifyPasswordId}\n type=\"password\"\n value={password}\n onChange={(e) => onPasswordChange(e.target.value)}\n placeholder={l.passwordPlaceholder}\n disabled={isVerifying}\n autoComplete=\"current-password\"\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? `${verifyPasswordId}-error` : undefined}\n data-testid={testIdOr(testIds?.passwordInput, { testId: 'verify-password-input' })}\n />\n </div>\n\n {error && <ErrorBox message={error} id={`${verifyPasswordId}-error`} />}\n\n <div className=\"flex flex-col-reverse sm:flex-row sm:justify-end gap-3\">\n <Button type=\"button\" variant=\"outline\" onClick={onClose} disabled={isVerifying}>\n {l.cancel}\n </Button>\n <Button type=\"submit\" disabled={isVerifying || !password}>\n {isVerifying ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n {l.verifying}\n </>\n ) : (\n l.verify\n )}\n </Button>\n </div>\n </form>\n )}\n </DialogContent>\n </Dialog>\n )\n}\n\nexport interface AccountRecoveryDialogProps {\n labels?: Partial<AccountRecoveryDialogLabels>\n open: boolean\n onClose: () => void\n email: string\n onEmailChange: (email: string) => void\n /** The key arrived in the page URL (the /recover link): show a \"loaded\" notice, no file picker. */\n isKeyFromLink: boolean\n /** Name of the chosen key file, once one is loaded. */\n keyFileName: string | null\n /** The loaded key is wrapped with the user's SSO identity. */\n isKeyEncrypted: boolean\n /** A file was picked or dropped. */\n onKeyFile: (file: File) => void\n error: string | null\n /** SSO sign-in is the next required step (SSO-wrapped key or SSO-linked account). */\n needsSsoSignIn: boolean\n onSsoSignIn: () => void\n isProcessing: boolean\n /** Enables the submit button (email and key present). */\n canSubmit: boolean\n onSubmit: () => void\n /** Dialog test id (default `forgot-password-modal`). */\n testId?: string\n /** Part ids; defaults are the current ids. */\n testIds?: Partial<\n Record<'emailInput' | 'keyDropzone' | 'keyInput' | 'ssoSignIn' | 'cancel' | 'submit', string>\n >\n}\n\n/**\n * Account recovery: email + recovery key (file or link) -> sign in with the key. When the account\n * is SSO-linked, the SSO prompt replaces the submit button.\n */\nexport function AccountRecoveryDialog({\n open,\n onClose,\n email,\n onEmailChange,\n isKeyFromLink,\n keyFileName,\n isKeyEncrypted,\n onKeyFile,\n error,\n needsSsoSignIn,\n onSsoSignIn,\n isProcessing,\n canSubmit,\n onSubmit,\n labels,\n testId,\n testIds,\n}: AccountRecoveryDialogProps) {\n const recoveryEmailId = useId()\n const l = useMemo(() => ({ ...DEFAULT_ACCOUNT_RECOVERY_DIALOG_LABELS, ...labels }), [labels])\n const fileInputRef = useRef<HTMLInputElement>(null)\n const [isDragActive, setIsDragActive] = useState(false)\n\n const handleDragOver = (e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragActive(true)\n }\n const handleDragLeave = (e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragActive(false)\n }\n const handleDrop = (e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragActive(false)\n const file = e.dataTransfer.files?.[0]\n if (file) onKeyFile(file)\n }\n\n return (\n <Dialog open={open} onOpenChange={onClose}>\n <DialogContent\n presentation=\"sheet\"\n className=\"sm:max-w-md\"\n data-testid={testIdOr(testId, { testId: 'forgot-password-modal' })}\n >\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\">\n <Key className=\"h-5 w-5 text-primary\" />\n {l.title}\n </DialogTitle>\n <DialogDescription>{l.description}</DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label htmlFor={recoveryEmailId} className=\"text-sm font-medium\">\n {l.emailAddress}\n </label>\n <Input\n id={recoveryEmailId}\n type=\"email\"\n value={email}\n onChange={(e) => onEmailChange(e.target.value)}\n placeholder={l.emailPlaceholder}\n disabled={isProcessing}\n data-testid={testIdOr(testIds?.emailInput, { testId: 'recovery-email-input' })}\n />\n </div>\n\n {isKeyFromLink ? (\n <div className=\"rounded-md bg-green-bg p-3\">\n <div className=\"flex items-center gap-2 text-sm\">\n <Key className=\"h-4 w-4 text-green-text\" />\n <span className=\"font-medium text-green-text\">{l.keyLoadedFromLink}</span>\n </div>\n {isKeyEncrypted && (\n <p className=\"mt-1 inline-flex items-center gap-1 text-sm text-primary\">\n <Shield className=\"h-3 w-3\" />\n {l.ssoProtectedKeyNotice}\n </p>\n )}\n </div>\n ) : (\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">{l.recoveryKey}</label>\n <div\n role=\"button\"\n tabIndex={0}\n className={cn(\n 'cursor-pointer rounded-lg p-4 text-center transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n isDragActive ? 'bg-accent' : 'bg-muted hover:bg-muted/70'\n )}\n onClick={() => fileInputRef.current?.click()}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n fileInputRef.current?.click()\n }\n }}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n data-testid={testIdOr(testIds?.keyDropzone, { testId: 'recovery-key-dropzone' })}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\".key\"\n onClick={(e) => e.stopPropagation()}\n onChange={(e) => {\n const file = e.target.files?.[0]\n if (file) onKeyFile(file)\n }}\n className=\"hidden\"\n data-testid={testIdOr(testIds?.keyInput, { testId: 'recovery-key-input' })}\n />\n {keyFileName ? (\n <div className=\"flex flex-col items-center gap-1\">\n <div className=\"flex items-center justify-center gap-2 text-sm\">\n <Key className=\"h-4 w-4 text-green-text\" />\n <span className=\"font-medium text-green-text\">{keyFileName}</span>\n </div>\n {isKeyEncrypted && (\n <span className=\"inline-flex items-center gap-1 text-sm text-primary\">\n <Shield className=\"h-3 w-3\" />\n {l.ssoProtectedKey}\n </span>\n )}\n </div>\n ) : (\n <div className=\"space-y-2\">\n <Upload className=\"mx-auto h-8 w-8 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">\n {isDragActive ? l.dropKeyHere : l.uploadKeyPrompt}\n </p>\n </div>\n )}\n </div>\n </div>\n )}\n\n {error && <ErrorBox message={error} />}\n\n {needsSsoSignIn ? (\n <div className=\"space-y-2 rounded-lg bg-muted p-3\">\n <div className=\"flex gap-2\">\n <Shield className=\"h-5 w-5 flex-shrink-0 text-primary\" />\n <p className=\"text-sm\">{l.ssoSignInNotice}</p>\n </div>\n <Button\n onClick={onSsoSignIn}\n className=\"w-full\"\n data-testid={testIdOr(testIds?.ssoSignIn, { testId: 'recovery-sso-signin-button' })}\n >\n {l.ssoSignIn}\n </Button>\n </div>\n ) : (\n <div className=\"rounded-md bg-muted p-3\">\n <p className=\"text-sm text-muted-foreground\">{l.afterRecoveryNotice}</p>\n </div>\n )}\n </div>\n\n <DialogFooter className=\"gap-2\">\n <Button\n variant=\"outline\"\n onClick={onClose}\n disabled={isProcessing}\n data-testid={testIdOr(testIds?.cancel, { testId: 'forgot-password-cancel' })}\n >\n {l.cancel}\n </Button>\n {/* Hidden when SSO sign-in is the next step, to avoid two competing options. */}\n {!needsSsoSignIn && (\n <Button\n onClick={onSubmit}\n disabled={isProcessing || !canSubmit}\n data-testid={testIdOr(testIds?.submit, { testId: 'forgot-password-submit' })}\n >\n {isProcessing ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n {l.recovering}\n </>\n ) : (\n l.recoverAccount\n )}\n </Button>\n )}\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n","/** The auth pages' URL fragment: `#verify=…&code=…&next=…`, and a fragment carried after it. */\n\n/**\n * Split an auth page's hash (`#verify=…&code=…&next=…`) from a second fragment appended after it.\n * A call invitation's registration link ends with the call key fragment (`…#k=…&v=…`) — a URL has\n * one fragment, so it arrives inside ours, after a second `#`.\n */\nexport function splitAuthHash(hash: string): {\n params: URLSearchParams\n /** `#k=…&v=…` (with its `#`), or '' when there is none. */\n trailingFragment: string\n} {\n const raw = hash.replace(/^#/, '')\n const cut = raw.indexOf('#')\n return {\n params: new URLSearchParams(cut >= 0 ? raw.slice(0, cut) : raw),\n trailingFragment: cut >= 0 ? raw.slice(cut) : '',\n }\n}\n\n/** `next` with the trailing fragment appended, unless `next` already carries a fragment. */\nexport function withTrailingFragment(next: string, trailingFragment: string): string {\n if (!trailingFragment || trailingFragment === '#' || next.includes('#')) return next\n return `${next}${trailingFragment}`\n}\n","/**\n * Sign-in from the URL fragment, for mock and demo deployments only:\n *\n * <login page>#email=<urlencoded>&password=<urlencoded>[&next=/path]\n *\n * OFF by default: nothing is read unless the page opts in (`enabled`). A password in a link is\n * visible to whoever holds the link, so a real deployment never turns this on. When on, the\n * fragment is read once and scrubbed from the address bar (`history.replaceState`) before the\n * first render commits, so it does not linger in history or get copied along with the URL. The\n * fragment never reaches the server; the credentials are never logged nor stored.\n *\n * Values are form-urlencoded (`URLSearchParams`): encode a `+` in a password as `%2B`. Other\n * auth-page parameters (`#verify=…`) and a trailing fragment after a second `#` (a call key) are\n * left in place.\n */\n\nimport { useEffect, useRef, useState } from 'react'\nimport { splitAuthHash, withTrailingFragment } from './auth-hash'\n\nexport interface FragmentCredentials {\n email: string\n password: string\n /** Where to go once signed in: a same-origin path, or `null`. */\n next: string | null\n}\n\nconst KEYS = ['email', 'password', 'next'] as const\n\n/** A same-origin absolute path (`/app/…`), never a scheme or a protocol-relative URL. */\nfunction safeNext(next: string | null): string | null {\n if (!next || !next.startsWith('/') || next.startsWith('//') || next.startsWith('/\\\\')) return null\n return next\n}\n\n/** The credentials in an auth page's hash, or `null` without both an email and a password. */\nexport function parseFragmentCredentials(hash: string): FragmentCredentials | null {\n const { params, trailingFragment } = splitAuthHash(hash)\n const email = params.get('email')?.trim()\n const password = params.get('password')\n if (!email || !password) return null\n const next = safeNext(params.get('next'))\n return { email, password, next: next && withTrailingFragment(next, trailingFragment) }\n}\n\n/**\n * Read the credentials from the current URL's fragment and scrub them (with `next`) from the\n * address bar, keeping any other fragment parameters. `null` when there are none; a fragment with\n * only one of email/password is scrubbed all the same.\n */\nexport function consumeFragmentCredentials(): FragmentCredentials | null {\n if (typeof window === 'undefined') return null\n const { hash, pathname, search } = window.location\n const { params, trailingFragment } = splitAuthHash(hash)\n if (!KEYS.some((k) => k !== 'next' && params.has(k))) return null\n const credentials = parseFragmentCredentials(hash)\n for (const k of KEYS) params.delete(k)\n const rest = params.toString()\n const kept = rest ? `#${rest}${trailingFragment}` : trailingFragment\n window.history.replaceState(window.history.state, '', `${pathname}${search}${kept}`)\n return credentials\n}\n\n// Read once per page load and held only until the sign-in is handed over (a strict-mode double\n// render reads the already-scrubbed URL, so it takes these instead).\nlet taken: FragmentCredentials | null = null\n\nfunction take(): FragmentCredentials | null {\n const fresh = consumeFragmentCredentials()\n if (fresh) taken = fresh\n return taken\n}\n\nexport interface UseFragmentCredentialsOptions {\n /** Opt in. Off by default: only a mock/demo deployment turns this on. */\n enabled?: boolean\n /** Sign in with them (the same path as the form). Called once. */\n onCredentials: (credentials: FragmentCredentials) => void\n}\n\n/**\n * Opt-in sign-in from `#email=…&password=…[&next=…]` (see the top of this file). Returns the\n * email and `next` from the link (to prefill the form should the sign-in fail), or `null`.\n */\nexport function useFragmentCredentials({\n enabled = false,\n onCredentials,\n}: UseFragmentCredentialsOptions): Omit<FragmentCredentials, 'password'> | null {\n // Read (and scrub) during the first render, before any effect or await.\n const [credentials] = useState(() => (enabled ? take() : null))\n const handedOver = useRef(false)\n const callback = useRef(onCredentials)\n callback.current = onCredentials\n\n useEffect(() => {\n if (!credentials || handedOver.current) return\n handedOver.current = true\n taken = null\n callback.current(credentials)\n }, [credentials])\n\n return credentials && { email: credentials.email, next: credentials.next }\n}\n"]}