@hexclave/react 1.0.3 → 1.0.5

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 (874) hide show
  1. package/dist/components/api-key-dialogs.d.ts +1 -1
  2. package/dist/components/api-key-dialogs.js +5 -5
  3. package/dist/components/api-key-dialogs.js.map +1 -1
  4. package/dist/components/api-key-table.d.ts +1 -1
  5. package/dist/components/api-key-table.js.map +1 -1
  6. package/dist/components/credential-sign-in.js +3 -3
  7. package/dist/components/credential-sign-in.js.map +1 -1
  8. package/dist/components/credential-sign-up.js +5 -5
  9. package/dist/components/credential-sign-up.js.map +1 -1
  10. package/dist/components/elements/form-warning.js.map +1 -1
  11. package/dist/components/elements/maybe-full-page.js.map +1 -1
  12. package/dist/components/elements/separator-with-text.js.map +1 -1
  13. package/dist/components/elements/sidebar-layout.js +1 -1
  14. package/dist/components/elements/sidebar-layout.js.map +1 -1
  15. package/dist/components/elements/ssr-layout-effect.js.map +1 -1
  16. package/dist/components/elements/user-avatar.js +1 -1
  17. package/dist/components/elements/user-avatar.js.map +1 -1
  18. package/dist/components/link.js.map +1 -1
  19. package/dist/components/magic-link-sign-in.js +6 -6
  20. package/dist/components/magic-link-sign-in.js.map +1 -1
  21. package/dist/components/message-cards/known-error-message-card.js +2 -2
  22. package/dist/components/message-cards/known-error-message-card.js.map +1 -1
  23. package/dist/components/message-cards/message-card.js.map +1 -1
  24. package/dist/components/message-cards/predefined-message-card.js +10 -10
  25. package/dist/components/message-cards/predefined-message-card.js.map +1 -1
  26. package/dist/components/oauth-button-group.js +2 -2
  27. package/dist/components/oauth-button-group.js.map +1 -1
  28. package/dist/components/oauth-button.js +2 -2
  29. package/dist/components/oauth-button.js.map +1 -1
  30. package/dist/components/passkey-button.js +3 -3
  31. package/dist/components/passkey-button.js.map +1 -1
  32. package/dist/components/profile-image-editor.js +1 -1
  33. package/dist/components/profile-image-editor.js.map +1 -1
  34. package/dist/components/selected-team-switcher.d.ts +1 -1
  35. package/dist/components/selected-team-switcher.js.map +1 -1
  36. package/dist/components/team-icon.d.ts +1 -1
  37. package/dist/components/team-icon.js +1 -1
  38. package/dist/components/team-icon.js.map +1 -1
  39. package/dist/components/team-switcher.d.ts +1 -1
  40. package/dist/components/team-switcher.js +2 -2
  41. package/dist/components/team-switcher.js.map +1 -1
  42. package/dist/components/use-in-iframe.js.map +1 -1
  43. package/dist/components/user-button.js +1 -1
  44. package/dist/components/user-button.js.map +1 -1
  45. package/dist/components-page/account-settings/active-sessions/active-sessions-page.js +1 -1
  46. package/dist/components-page/account-settings/active-sessions/active-sessions-page.js.map +1 -1
  47. package/dist/components-page/account-settings/api-keys/api-keys-page.js.map +1 -1
  48. package/dist/components-page/account-settings/editable-text.js +1 -1
  49. package/dist/components-page/account-settings/editable-text.js.map +1 -1
  50. package/dist/components-page/account-settings/email-and-auth/email-and-auth-page.js.map +1 -1
  51. package/dist/components-page/account-settings/email-and-auth/emails-section.js +3 -3
  52. package/dist/components-page/account-settings/email-and-auth/emails-section.js.map +1 -1
  53. package/dist/components-page/account-settings/email-and-auth/mfa-section.js +1 -1
  54. package/dist/components-page/account-settings/email-and-auth/mfa-section.js.map +1 -1
  55. package/dist/components-page/account-settings/email-and-auth/otp-section.js.map +1 -1
  56. package/dist/components-page/account-settings/email-and-auth/passkey-section.js.map +1 -1
  57. package/dist/components-page/account-settings/email-and-auth/password-section.js +3 -3
  58. package/dist/components-page/account-settings/email-and-auth/password-section.js.map +1 -1
  59. package/dist/components-page/account-settings/notifications/notifications-page.js.map +1 -1
  60. package/dist/components-page/account-settings/page-layout.js.map +1 -1
  61. package/dist/components-page/account-settings/payments/payments-page.d.ts +1 -1
  62. package/dist/components-page/account-settings/payments/payments-page.js.map +1 -1
  63. package/dist/components-page/account-settings/payments/payments-panel.d.ts +1 -1
  64. package/dist/components-page/account-settings/payments/payments-panel.js +3 -3
  65. package/dist/components-page/account-settings/payments/payments-panel.js.map +1 -1
  66. package/dist/components-page/account-settings/profile-page/profile-page.js.map +1 -1
  67. package/dist/components-page/account-settings/section.js.map +1 -1
  68. package/dist/components-page/account-settings/settings/delete-account-section.js.map +1 -1
  69. package/dist/components-page/account-settings/settings/settings-page.js.map +1 -1
  70. package/dist/components-page/account-settings/settings/sign-out-section.js.map +1 -1
  71. package/dist/components-page/account-settings/teams/leave-team-section.d.ts +1 -1
  72. package/dist/components-page/account-settings/teams/leave-team-section.js.map +1 -1
  73. package/dist/components-page/account-settings/teams/team-api-keys-section.d.ts +1 -1
  74. package/dist/components-page/account-settings/teams/team-api-keys-section.js +1 -1
  75. package/dist/components-page/account-settings/teams/team-api-keys-section.js.map +1 -1
  76. package/dist/components-page/account-settings/teams/team-creation-page.js +3 -3
  77. package/dist/components-page/account-settings/teams/team-creation-page.js.map +1 -1
  78. package/dist/components-page/account-settings/teams/team-display-name-section.d.ts +1 -1
  79. package/dist/components-page/account-settings/teams/team-display-name-section.js.map +1 -1
  80. package/dist/components-page/account-settings/teams/team-member-invitation-section.d.ts +1 -1
  81. package/dist/components-page/account-settings/teams/team-member-invitation-section.js +4 -4
  82. package/dist/components-page/account-settings/teams/team-member-invitation-section.js.map +1 -1
  83. package/dist/components-page/account-settings/teams/team-member-list-section.d.ts +1 -1
  84. package/dist/components-page/account-settings/teams/team-member-list-section.js.map +1 -1
  85. package/dist/components-page/account-settings/teams/team-page.d.ts +1 -1
  86. package/dist/components-page/account-settings/teams/team-page.js.map +1 -1
  87. package/dist/components-page/account-settings/teams/team-profile-image-section.d.ts +1 -1
  88. package/dist/components-page/account-settings/teams/team-profile-image-section.js.map +1 -1
  89. package/dist/components-page/account-settings/teams/team-profile-user-section.d.ts +1 -1
  90. package/dist/components-page/account-settings/teams/team-profile-user-section.js.map +1 -1
  91. package/dist/components-page/account-settings.js +3 -3
  92. package/dist/components-page/account-settings.js.map +1 -1
  93. package/dist/components-page/auth-page.d.ts.map +1 -1
  94. package/dist/components-page/auth-page.js +56 -11
  95. package/dist/components-page/auth-page.js.map +1 -1
  96. package/dist/components-page/cli-auth-confirm.js +4 -4
  97. package/dist/components-page/cli-auth-confirm.js.map +1 -1
  98. package/dist/components-page/cli-auth-confirm.test.js +5 -5
  99. package/dist/components-page/cli-auth-confirm.test.js.map +1 -1
  100. package/dist/components-page/email-verification.js +6 -6
  101. package/dist/components-page/email-verification.js.map +1 -1
  102. package/dist/components-page/error-page.js +9 -9
  103. package/dist/components-page/error-page.js.map +1 -1
  104. package/dist/components-page/forgot-password.js +9 -9
  105. package/dist/components-page/forgot-password.js.map +1 -1
  106. package/dist/components-page/{stack-handler-client.d.ts → hexclave-handler-client.d.ts} +4 -4
  107. package/dist/components-page/hexclave-handler-client.d.ts.map +1 -0
  108. package/dist/components-page/{stack-handler-client.js → hexclave-handler-client.js} +25 -24
  109. package/dist/components-page/hexclave-handler-client.js.map +1 -0
  110. package/dist/components-page/{stack-handler.d.ts → hexclave-handler.d.ts} +5 -5
  111. package/dist/components-page/hexclave-handler.d.ts.map +1 -0
  112. package/dist/components-page/{stack-handler.js → hexclave-handler.js} +4 -4
  113. package/dist/components-page/hexclave-handler.js.map +1 -0
  114. package/dist/components-page/magic-link-callback.js +9 -9
  115. package/dist/components-page/magic-link-callback.js.map +1 -1
  116. package/dist/components-page/mfa.js +7 -7
  117. package/dist/components-page/mfa.js.map +1 -1
  118. package/dist/components-page/oauth-callback.js +6 -6
  119. package/dist/components-page/oauth-callback.js.map +1 -1
  120. package/dist/components-page/onboarding.js +7 -7
  121. package/dist/components-page/onboarding.js.map +1 -1
  122. package/dist/components-page/password-reset.js +16 -16
  123. package/dist/components-page/password-reset.js.map +1 -1
  124. package/dist/components-page/sign-in.js.map +1 -1
  125. package/dist/components-page/sign-out.d.ts +1 -0
  126. package/dist/components-page/sign-out.d.ts.map +1 -1
  127. package/dist/components-page/sign-out.js +11 -5
  128. package/dist/components-page/sign-out.js.map +1 -1
  129. package/dist/components-page/sign-up.js.map +1 -1
  130. package/dist/components-page/team-creation.js +5 -5
  131. package/dist/components-page/team-creation.js.map +1 -1
  132. package/dist/components-page/team-invitation.js +17 -17
  133. package/dist/components-page/team-invitation.js.map +1 -1
  134. package/dist/dev-tool/dev-tool-core.d.ts +1 -1
  135. package/dist/dev-tool/dev-tool-core.js +11 -11
  136. package/dist/dev-tool/dev-tool-core.js.map +1 -1
  137. package/dist/dev-tool/dev-tool-styles.d.ts +1 -1
  138. package/dist/dev-tool/dev-tool-styles.js +371 -371
  139. package/dist/dev-tool/dev-tool-styles.js.map +1 -1
  140. package/dist/dev-tool/dev-tool-trigger-position.js.map +1 -1
  141. package/dist/dev-tool/dev-tool-trigger-position.test.js +1 -1
  142. package/dist/dev-tool/dev-tool-trigger-position.test.js.map +1 -1
  143. package/dist/dev-tool/index.d.ts +4 -4
  144. package/dist/dev-tool/index.js +5 -5
  145. package/dist/dev-tool/index.js.map +1 -1
  146. package/dist/esm/components/api-key-dialogs.d.ts +1 -1
  147. package/dist/esm/components/api-key-dialogs.js +5 -5
  148. package/dist/esm/components/api-key-dialogs.js.map +1 -1
  149. package/dist/esm/components/api-key-table.d.ts +1 -1
  150. package/dist/esm/components/api-key-table.js.map +1 -1
  151. package/dist/esm/components/credential-sign-in.js +3 -3
  152. package/dist/esm/components/credential-sign-in.js.map +1 -1
  153. package/dist/esm/components/credential-sign-up.js +5 -5
  154. package/dist/esm/components/credential-sign-up.js.map +1 -1
  155. package/dist/esm/components/elements/form-warning.js.map +1 -1
  156. package/dist/esm/components/elements/maybe-full-page.js.map +1 -1
  157. package/dist/esm/components/elements/separator-with-text.js.map +1 -1
  158. package/dist/esm/components/elements/sidebar-layout.js +1 -1
  159. package/dist/esm/components/elements/sidebar-layout.js.map +1 -1
  160. package/dist/esm/components/elements/ssr-layout-effect.js.map +1 -1
  161. package/dist/esm/components/elements/user-avatar.js +1 -1
  162. package/dist/esm/components/elements/user-avatar.js.map +1 -1
  163. package/dist/esm/components/link.js.map +1 -1
  164. package/dist/esm/components/magic-link-sign-in.js +6 -6
  165. package/dist/esm/components/magic-link-sign-in.js.map +1 -1
  166. package/dist/esm/components/message-cards/known-error-message-card.js +2 -2
  167. package/dist/esm/components/message-cards/known-error-message-card.js.map +1 -1
  168. package/dist/esm/components/message-cards/message-card.js.map +1 -1
  169. package/dist/esm/components/message-cards/predefined-message-card.js +10 -10
  170. package/dist/esm/components/message-cards/predefined-message-card.js.map +1 -1
  171. package/dist/esm/components/oauth-button-group.js +2 -2
  172. package/dist/esm/components/oauth-button-group.js.map +1 -1
  173. package/dist/esm/components/oauth-button.js +2 -2
  174. package/dist/esm/components/oauth-button.js.map +1 -1
  175. package/dist/esm/components/passkey-button.js +3 -3
  176. package/dist/esm/components/passkey-button.js.map +1 -1
  177. package/dist/esm/components/profile-image-editor.js +1 -1
  178. package/dist/esm/components/profile-image-editor.js.map +1 -1
  179. package/dist/esm/components/selected-team-switcher.js.map +1 -1
  180. package/dist/esm/components/team-icon.js +1 -1
  181. package/dist/esm/components/team-icon.js.map +1 -1
  182. package/dist/esm/components/team-switcher.js +2 -2
  183. package/dist/esm/components/team-switcher.js.map +1 -1
  184. package/dist/esm/components/use-in-iframe.js.map +1 -1
  185. package/dist/esm/components/user-button.js +1 -1
  186. package/dist/esm/components/user-button.js.map +1 -1
  187. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.js +1 -1
  188. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.js.map +1 -1
  189. package/dist/esm/components-page/account-settings/api-keys/api-keys-page.js.map +1 -1
  190. package/dist/esm/components-page/account-settings/editable-text.js +1 -1
  191. package/dist/esm/components-page/account-settings/editable-text.js.map +1 -1
  192. package/dist/esm/components-page/account-settings/email-and-auth/email-and-auth-page.js.map +1 -1
  193. package/dist/esm/components-page/account-settings/email-and-auth/emails-section.js +3 -3
  194. package/dist/esm/components-page/account-settings/email-and-auth/emails-section.js.map +1 -1
  195. package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.js +1 -1
  196. package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.js.map +1 -1
  197. package/dist/esm/components-page/account-settings/email-and-auth/otp-section.js.map +1 -1
  198. package/dist/esm/components-page/account-settings/email-and-auth/passkey-section.js.map +1 -1
  199. package/dist/esm/components-page/account-settings/email-and-auth/password-section.js +3 -3
  200. package/dist/esm/components-page/account-settings/email-and-auth/password-section.js.map +1 -1
  201. package/dist/esm/components-page/account-settings/notifications/notifications-page.js.map +1 -1
  202. package/dist/esm/components-page/account-settings/page-layout.js.map +1 -1
  203. package/dist/esm/components-page/account-settings/payments/payments-page.js.map +1 -1
  204. package/dist/esm/components-page/account-settings/payments/payments-panel.d.ts +1 -1
  205. package/dist/esm/components-page/account-settings/payments/payments-panel.js +3 -3
  206. package/dist/esm/components-page/account-settings/payments/payments-panel.js.map +1 -1
  207. package/dist/esm/components-page/account-settings/profile-page/profile-page.js.map +1 -1
  208. package/dist/esm/components-page/account-settings/section.js.map +1 -1
  209. package/dist/esm/components-page/account-settings/settings/delete-account-section.js.map +1 -1
  210. package/dist/esm/components-page/account-settings/settings/settings-page.js.map +1 -1
  211. package/dist/esm/components-page/account-settings/settings/sign-out-section.js.map +1 -1
  212. package/dist/esm/components-page/account-settings/teams/leave-team-section.js.map +1 -1
  213. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.d.ts +1 -1
  214. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.js +1 -1
  215. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.js.map +1 -1
  216. package/dist/esm/components-page/account-settings/teams/team-creation-page.js +3 -3
  217. package/dist/esm/components-page/account-settings/teams/team-creation-page.js.map +1 -1
  218. package/dist/esm/components-page/account-settings/teams/team-display-name-section.js.map +1 -1
  219. package/dist/esm/components-page/account-settings/teams/team-member-invitation-section.js +4 -4
  220. package/dist/esm/components-page/account-settings/teams/team-member-invitation-section.js.map +1 -1
  221. package/dist/esm/components-page/account-settings/teams/team-member-list-section.js.map +1 -1
  222. package/dist/esm/components-page/account-settings/teams/team-page.js.map +1 -1
  223. package/dist/esm/components-page/account-settings/teams/team-profile-image-section.js.map +1 -1
  224. package/dist/esm/components-page/account-settings/teams/team-profile-user-section.js.map +1 -1
  225. package/dist/esm/components-page/account-settings.d.ts +1 -1
  226. package/dist/esm/components-page/account-settings.js +3 -3
  227. package/dist/esm/components-page/account-settings.js.map +1 -1
  228. package/dist/esm/components-page/auth-page.d.ts.map +1 -1
  229. package/dist/esm/components-page/auth-page.js +57 -12
  230. package/dist/esm/components-page/auth-page.js.map +1 -1
  231. package/dist/esm/components-page/cli-auth-confirm.js +4 -4
  232. package/dist/esm/components-page/cli-auth-confirm.js.map +1 -1
  233. package/dist/esm/components-page/cli-auth-confirm.test.js +5 -5
  234. package/dist/esm/components-page/cli-auth-confirm.test.js.map +1 -1
  235. package/dist/esm/components-page/email-verification.js +6 -6
  236. package/dist/esm/components-page/email-verification.js.map +1 -1
  237. package/dist/esm/components-page/error-page.js +9 -9
  238. package/dist/esm/components-page/error-page.js.map +1 -1
  239. package/dist/esm/components-page/forgot-password.js +9 -9
  240. package/dist/esm/components-page/forgot-password.js.map +1 -1
  241. package/dist/esm/components-page/{stack-handler-client.d.ts → hexclave-handler-client.d.ts} +4 -4
  242. package/dist/esm/components-page/hexclave-handler-client.d.ts.map +1 -0
  243. package/dist/esm/components-page/{stack-handler-client.js → hexclave-handler-client.js} +23 -22
  244. package/dist/esm/components-page/hexclave-handler-client.js.map +1 -0
  245. package/dist/esm/components-page/{stack-handler.d.ts → hexclave-handler.d.ts} +5 -5
  246. package/dist/esm/components-page/hexclave-handler.d.ts.map +1 -0
  247. package/dist/esm/components-page/{stack-handler.js → hexclave-handler.js} +4 -4
  248. package/dist/esm/components-page/hexclave-handler.js.map +1 -0
  249. package/dist/esm/components-page/magic-link-callback.js +9 -9
  250. package/dist/esm/components-page/magic-link-callback.js.map +1 -1
  251. package/dist/esm/components-page/mfa.js +7 -7
  252. package/dist/esm/components-page/mfa.js.map +1 -1
  253. package/dist/esm/components-page/oauth-callback.js +6 -6
  254. package/dist/esm/components-page/oauth-callback.js.map +1 -1
  255. package/dist/esm/components-page/onboarding.js +7 -7
  256. package/dist/esm/components-page/onboarding.js.map +1 -1
  257. package/dist/esm/components-page/password-reset.js +16 -16
  258. package/dist/esm/components-page/password-reset.js.map +1 -1
  259. package/dist/esm/components-page/sign-in.js.map +1 -1
  260. package/dist/esm/components-page/sign-out.d.ts +1 -0
  261. package/dist/esm/components-page/sign-out.d.ts.map +1 -1
  262. package/dist/esm/components-page/sign-out.js +11 -5
  263. package/dist/esm/components-page/sign-out.js.map +1 -1
  264. package/dist/esm/components-page/sign-up.js.map +1 -1
  265. package/dist/esm/components-page/team-creation.js +5 -5
  266. package/dist/esm/components-page/team-creation.js.map +1 -1
  267. package/dist/esm/components-page/team-invitation.js +17 -17
  268. package/dist/esm/components-page/team-invitation.js.map +1 -1
  269. package/dist/esm/dev-tool/dev-tool-core.d.ts +1 -1
  270. package/dist/esm/dev-tool/dev-tool-core.js +10 -10
  271. package/dist/esm/dev-tool/dev-tool-core.js.map +1 -1
  272. package/dist/esm/dev-tool/dev-tool-styles.d.ts +1 -1
  273. package/dist/esm/dev-tool/dev-tool-styles.js +371 -371
  274. package/dist/esm/dev-tool/dev-tool-styles.js.map +1 -1
  275. package/dist/esm/dev-tool/dev-tool-trigger-position.js.map +1 -1
  276. package/dist/esm/dev-tool/dev-tool-trigger-position.test.js +1 -1
  277. package/dist/esm/dev-tool/dev-tool-trigger-position.test.js.map +1 -1
  278. package/dist/esm/dev-tool/index.d.ts +4 -4
  279. package/dist/esm/dev-tool/index.js +5 -5
  280. package/dist/esm/dev-tool/index.js.map +1 -1
  281. package/dist/esm/generated/quetzal-translations.d.ts +2 -2
  282. package/dist/esm/generated/quetzal-translations.js.map +1 -1
  283. package/dist/esm/index.d.ts +4 -4
  284. package/dist/esm/index.js +3 -3
  285. package/dist/esm/integrations/convex/component/convex.config.js.map +1 -1
  286. package/dist/esm/integrations/convex.js +1 -1
  287. package/dist/esm/integrations/convex.js.map +1 -1
  288. package/dist/esm/lib/auth.js +1 -1
  289. package/dist/esm/lib/auth.js.map +1 -1
  290. package/dist/esm/lib/auth.test.js +1 -1
  291. package/dist/esm/lib/auth.test.js.map +1 -1
  292. package/dist/esm/lib/cookie.js.map +1 -1
  293. package/dist/esm/lib/env.js.map +1 -1
  294. package/dist/{lib/stack-app → esm/lib/hexclave-app}/api-keys/index.d.ts +2 -2
  295. package/dist/esm/lib/hexclave-app/api-keys/index.d.ts.map +1 -0
  296. package/dist/esm/lib/{stack-app → hexclave-app}/api-keys/index.js +1 -1
  297. package/dist/esm/lib/hexclave-app/api-keys/index.js.map +1 -0
  298. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/admin-app-impl.d.ts +7 -7
  299. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts.map +1 -0
  300. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/admin-app-impl.js +8 -8
  301. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.js.map +1 -0
  302. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.cross-domain.test.js +2 -2
  303. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.js.map +1 -0
  304. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.d.ts +14 -14
  305. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.d.ts.map +1 -0
  306. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.js +25 -32
  307. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.js.map +1 -0
  308. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.oauth-prefetch.test.js +1 -1
  309. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +1 -0
  310. package/dist/{lib/stack-app → esm/lib/hexclave-app}/apps/implementations/common.d.ts +4 -4
  311. package/dist/esm/lib/hexclave-app/apps/implementations/common.d.ts.map +1 -0
  312. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/common.js +9 -9
  313. package/dist/esm/lib/hexclave-app/apps/implementations/common.js.map +1 -0
  314. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.d.ts +1 -1
  315. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.d.ts.map +1 -0
  316. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.js +1 -1
  317. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.js.map +1 -0
  318. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.test.js +1 -1
  319. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.test.js.map +1 -0
  320. package/dist/esm/lib/hexclave-app/apps/implementations/index.d.ts +9 -0
  321. package/dist/esm/lib/hexclave-app/apps/implementations/index.d.ts.map +1 -0
  322. package/dist/esm/lib/hexclave-app/apps/implementations/index.js +27 -0
  323. package/dist/esm/lib/hexclave-app/apps/implementations/index.js.map +1 -0
  324. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/redirect-page-urls.d.ts +1 -1
  325. package/dist/esm/lib/hexclave-app/apps/implementations/redirect-page-urls.d.ts.map +1 -0
  326. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/redirect-page-urls.js +1 -1
  327. package/dist/esm/lib/hexclave-app/apps/implementations/redirect-page-urls.js.map +1 -0
  328. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/server-app-impl.d.ts +5 -5
  329. package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.d.ts.map +1 -0
  330. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/server-app-impl.js +7 -7
  331. package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.js.map +1 -0
  332. package/dist/{lib/stack-app → esm/lib/hexclave-app}/apps/implementations/session-refresh-subscription.d.ts +1 -1
  333. package/dist/esm/lib/hexclave-app/apps/implementations/session-refresh-subscription.d.ts.map +1 -0
  334. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.js +1 -1
  335. package/dist/esm/lib/hexclave-app/apps/implementations/session-refresh-subscription.js.map +1 -0
  336. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.test.js +1 -1
  337. package/dist/esm/lib/hexclave-app/apps/implementations/session-refresh-subscription.test.js.map +1 -0
  338. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.d.ts +1 -1
  339. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.d.ts.map +1 -0
  340. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.js +2 -2
  341. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.js.map +1 -0
  342. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.test.js +1 -1
  343. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.test.js.map +1 -0
  344. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/admin-app.d.ts +1 -1
  345. package/dist/esm/lib/hexclave-app/apps/interfaces/admin-app.d.ts.map +1 -0
  346. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/admin-app.js +3 -3
  347. package/dist/esm/lib/hexclave-app/apps/interfaces/admin-app.js.map +1 -0
  348. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/client-app.d.ts +4 -4
  349. package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.d.ts.map +1 -0
  350. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/client-app.js +3 -3
  351. package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.js.map +1 -0
  352. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/server-app.d.ts +1 -1
  353. package/dist/esm/lib/hexclave-app/apps/interfaces/server-app.d.ts.map +1 -0
  354. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/server-app.js +3 -3
  355. package/dist/esm/lib/hexclave-app/apps/interfaces/server-app.js.map +1 -0
  356. package/dist/esm/lib/{stack-app → hexclave-app}/common.d.ts +7 -7
  357. package/dist/esm/lib/hexclave-app/common.d.ts.map +1 -0
  358. package/dist/esm/lib/hexclave-app/common.js +7 -0
  359. package/dist/esm/lib/hexclave-app/common.js.map +1 -0
  360. package/dist/esm/lib/{stack-app → hexclave-app}/connected-accounts/index.d.ts +1 -1
  361. package/dist/esm/lib/hexclave-app/connected-accounts/index.d.ts.map +1 -0
  362. package/dist/esm/lib/{stack-app → hexclave-app}/contact-channels/index.d.ts +1 -1
  363. package/dist/esm/lib/hexclave-app/contact-channels/index.d.ts.map +1 -0
  364. package/dist/esm/lib/{stack-app → hexclave-app}/contact-channels/index.js +1 -1
  365. package/dist/esm/lib/hexclave-app/contact-channels/index.js.map +1 -0
  366. package/dist/esm/lib/{stack-app → hexclave-app}/customers/index.d.ts +1 -1
  367. package/dist/esm/lib/hexclave-app/customers/index.d.ts.map +1 -0
  368. package/dist/esm/lib/{stack-app → hexclave-app}/data-vault/index.d.ts +1 -1
  369. package/dist/esm/lib/hexclave-app/data-vault/index.d.ts.map +1 -0
  370. package/dist/esm/lib/{stack-app → hexclave-app}/email/index.d.ts +1 -1
  371. package/dist/esm/lib/hexclave-app/email/index.d.ts.map +1 -0
  372. package/dist/{lib/stack-app → esm/lib/hexclave-app}/email-templates/index.d.ts +1 -1
  373. package/dist/esm/lib/hexclave-app/email-templates/index.d.ts.map +1 -0
  374. package/dist/esm/lib/{stack-app → hexclave-app}/email-templates/index.js +1 -1
  375. package/dist/esm/lib/hexclave-app/email-templates/index.js.map +1 -0
  376. package/dist/esm/lib/{stack-app → hexclave-app}/index.d.ts +2 -2
  377. package/dist/esm/lib/{stack-app → hexclave-app}/index.js +2 -2
  378. package/dist/{lib/stack-app → esm/lib/hexclave-app}/internal-api-keys/index.d.ts +1 -1
  379. package/dist/esm/lib/hexclave-app/internal-api-keys/index.d.ts.map +1 -0
  380. package/dist/esm/lib/{stack-app → hexclave-app}/internal-api-keys/index.js +1 -1
  381. package/dist/esm/lib/hexclave-app/internal-api-keys/index.js.map +1 -0
  382. package/dist/{lib/stack-app → esm/lib/hexclave-app}/notification-categories/index.d.ts +1 -1
  383. package/dist/esm/lib/hexclave-app/notification-categories/index.d.ts.map +1 -0
  384. package/dist/{lib/stack-app → esm/lib/hexclave-app}/permissions/index.d.ts +1 -1
  385. package/dist/esm/lib/hexclave-app/permissions/index.d.ts.map +1 -0
  386. package/dist/esm/lib/{stack-app → hexclave-app}/permissions/index.js +1 -1
  387. package/dist/esm/lib/hexclave-app/permissions/index.js.map +1 -0
  388. package/dist/esm/lib/{stack-app → hexclave-app}/project-configs/index.d.ts +1 -1
  389. package/dist/esm/lib/hexclave-app/project-configs/index.d.ts.map +1 -0
  390. package/dist/esm/lib/{stack-app → hexclave-app}/projects/index.d.ts +1 -1
  391. package/dist/esm/lib/hexclave-app/projects/index.d.ts.map +1 -0
  392. package/dist/esm/lib/{stack-app → hexclave-app}/projects/index.js +1 -1
  393. package/dist/esm/lib/hexclave-app/projects/index.js.map +1 -0
  394. package/dist/{lib/stack-app → esm/lib/hexclave-app}/session-replays/index.d.ts +1 -1
  395. package/dist/esm/lib/hexclave-app/session-replays/index.d.ts.map +1 -0
  396. package/dist/esm/lib/{stack-app → hexclave-app}/teams/index.d.ts +1 -1
  397. package/dist/esm/lib/hexclave-app/teams/index.d.ts.map +1 -0
  398. package/dist/esm/lib/{stack-app → hexclave-app}/teams/index.js +1 -1
  399. package/dist/esm/lib/hexclave-app/teams/index.js.map +1 -0
  400. package/dist/esm/lib/{stack-app → hexclave-app}/url-targets.d.ts +1 -1
  401. package/dist/esm/lib/hexclave-app/url-targets.d.ts.map +1 -0
  402. package/dist/esm/lib/{stack-app → hexclave-app}/url-targets.js +2 -2
  403. package/dist/esm/lib/hexclave-app/url-targets.js.map +1 -0
  404. package/dist/esm/lib/{stack-app → hexclave-app}/url-targets.test.js +1 -1
  405. package/dist/esm/lib/hexclave-app/url-targets.test.js.map +1 -0
  406. package/dist/esm/lib/{stack-app → hexclave-app}/users/index.d.ts +2 -2
  407. package/dist/esm/lib/hexclave-app/users/index.d.ts.map +1 -0
  408. package/dist/esm/lib/{stack-app → hexclave-app}/users/index.js +1 -1
  409. package/dist/esm/lib/hexclave-app/users/index.js.map +1 -0
  410. package/dist/esm/lib/hooks.d.ts +1 -1
  411. package/dist/esm/lib/hooks.js +9 -9
  412. package/dist/esm/lib/hooks.js.map +1 -1
  413. package/dist/esm/lib/translations.js.map +1 -1
  414. package/dist/esm/providers/hexclave-context.d.ts +11 -0
  415. package/dist/esm/providers/hexclave-context.d.ts.map +1 -0
  416. package/dist/esm/providers/hexclave-context.js +12 -0
  417. package/dist/esm/providers/hexclave-context.js.map +1 -0
  418. package/dist/esm/providers/{stack-provider-client.d.ts → hexclave-provider-client.d.ts} +5 -5
  419. package/dist/esm/providers/hexclave-provider-client.d.ts.map +1 -0
  420. package/dist/esm/providers/hexclave-provider-client.js +30 -0
  421. package/dist/esm/providers/hexclave-provider-client.js.map +1 -0
  422. package/dist/esm/providers/{stack-provider.d.ts → hexclave-provider.d.ts} +3 -3
  423. package/dist/esm/providers/hexclave-provider.d.ts.map +1 -0
  424. package/dist/esm/providers/{stack-provider.js → hexclave-provider.js} +4 -4
  425. package/dist/esm/providers/hexclave-provider.js.map +1 -0
  426. package/dist/esm/providers/theme-provider.js.map +1 -1
  427. package/dist/esm/providers/translation-provider-client.js.map +1 -1
  428. package/dist/esm/providers/translation-provider.js +1 -1
  429. package/dist/esm/providers/translation-provider.js.map +1 -1
  430. package/dist/esm/tanstack-start-server-context.d.ts +1 -1
  431. package/dist/esm/utils/browser-script.js.map +1 -1
  432. package/dist/esm/utils/constants.js.map +1 -1
  433. package/dist/esm/utils/url.js.map +1 -1
  434. package/dist/generated/quetzal-translations.d.ts +2 -2
  435. package/dist/generated/quetzal-translations.js.map +1 -1
  436. package/dist/index.d.ts +18 -18
  437. package/dist/index.js +9 -9
  438. package/dist/integrations/convex/component/convex.config.js.map +1 -1
  439. package/dist/integrations/convex.js +2 -2
  440. package/dist/integrations/convex.js.map +1 -1
  441. package/dist/lib/auth.js +1 -1
  442. package/dist/lib/auth.js.map +1 -1
  443. package/dist/lib/auth.test.js +1 -1
  444. package/dist/lib/auth.test.js.map +1 -1
  445. package/dist/lib/cookie.js.map +1 -1
  446. package/dist/lib/env.js.map +1 -1
  447. package/dist/{esm/lib/stack-app → lib/hexclave-app}/api-keys/index.d.ts +2 -2
  448. package/dist/{esm/lib/stack-app → lib/hexclave-app}/api-keys/index.d.ts.map +1 -1
  449. package/dist/lib/{stack-app → hexclave-app}/api-keys/index.js +1 -1
  450. package/dist/lib/hexclave-app/api-keys/index.js.map +1 -0
  451. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/admin-app-impl.d.ts +6 -6
  452. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts.map +1 -0
  453. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/admin-app-impl.js +6 -6
  454. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.js.map +1 -0
  455. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.cross-domain.test.js +2 -2
  456. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.js.map +1 -0
  457. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.d.ts +13 -13
  458. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.d.ts.map +1 -0
  459. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.js +24 -31
  460. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.js.map +1 -0
  461. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.oauth-prefetch.test.js +1 -1
  462. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +1 -0
  463. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/common.d.ts +4 -4
  464. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/common.d.ts.map +1 -1
  465. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/common.js +8 -8
  466. package/dist/lib/hexclave-app/apps/implementations/common.js.map +1 -0
  467. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.d.ts +1 -1
  468. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/event-tracker.d.ts.map +1 -1
  469. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.js +1 -1
  470. package/dist/lib/hexclave-app/apps/implementations/event-tracker.js.map +1 -0
  471. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.test.js +1 -1
  472. package/dist/lib/hexclave-app/apps/implementations/event-tracker.test.js.map +1 -0
  473. package/dist/lib/hexclave-app/apps/implementations/index.d.ts +9 -0
  474. package/dist/lib/hexclave-app/apps/implementations/index.d.ts.map +1 -0
  475. package/dist/lib/hexclave-app/apps/implementations/index.js +31 -0
  476. package/dist/lib/hexclave-app/apps/implementations/index.js.map +1 -0
  477. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/redirect-page-urls.d.ts +1 -1
  478. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/redirect-page-urls.d.ts.map +1 -1
  479. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/redirect-page-urls.js +1 -1
  480. package/dist/lib/hexclave-app/apps/implementations/redirect-page-urls.js.map +1 -0
  481. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/server-app-impl.d.ts +4 -4
  482. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/server-app-impl.d.ts.map +1 -1
  483. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/server-app-impl.js +6 -6
  484. package/dist/lib/hexclave-app/apps/implementations/server-app-impl.js.map +1 -0
  485. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/session-refresh-subscription.d.ts +1 -1
  486. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/session-refresh-subscription.d.ts.map +1 -1
  487. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.js +1 -1
  488. package/dist/lib/hexclave-app/apps/implementations/session-refresh-subscription.js.map +1 -0
  489. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.test.js +1 -1
  490. package/dist/lib/hexclave-app/apps/implementations/session-refresh-subscription.test.js.map +1 -0
  491. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.d.ts +1 -1
  492. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/session-replay.d.ts.map +1 -1
  493. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.js +2 -2
  494. package/dist/lib/hexclave-app/apps/implementations/session-replay.js.map +1 -0
  495. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.test.js +1 -1
  496. package/dist/lib/hexclave-app/apps/implementations/session-replay.test.js.map +1 -0
  497. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/admin-app.d.ts +1 -1
  498. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/interfaces/admin-app.d.ts.map +1 -1
  499. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/admin-app.js +2 -2
  500. package/dist/lib/hexclave-app/apps/interfaces/admin-app.js.map +1 -0
  501. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/client-app.d.ts +4 -4
  502. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/interfaces/client-app.d.ts.map +1 -1
  503. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/client-app.js +2 -2
  504. package/dist/lib/hexclave-app/apps/interfaces/client-app.js.map +1 -0
  505. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/server-app.d.ts +1 -1
  506. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/interfaces/server-app.d.ts.map +1 -1
  507. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/server-app.js +2 -2
  508. package/dist/lib/hexclave-app/apps/interfaces/server-app.js.map +1 -0
  509. package/dist/lib/{stack-app → hexclave-app}/common.d.ts +7 -7
  510. package/dist/{esm/lib/stack-app → lib/hexclave-app}/common.d.ts.map +1 -1
  511. package/dist/lib/hexclave-app/common.js +9 -0
  512. package/dist/lib/hexclave-app/common.js.map +1 -0
  513. package/dist/lib/{stack-app → hexclave-app}/connected-accounts/index.d.ts +1 -1
  514. package/dist/{esm/lib/stack-app → lib/hexclave-app}/connected-accounts/index.d.ts.map +1 -1
  515. package/dist/lib/{stack-app → hexclave-app}/contact-channels/index.d.ts +1 -1
  516. package/dist/{esm/lib/stack-app → lib/hexclave-app}/contact-channels/index.d.ts.map +1 -1
  517. package/dist/lib/{stack-app → hexclave-app}/contact-channels/index.js +1 -1
  518. package/dist/lib/hexclave-app/contact-channels/index.js.map +1 -0
  519. package/dist/lib/{stack-app → hexclave-app}/customers/index.d.ts +1 -1
  520. package/dist/{esm/lib/stack-app → lib/hexclave-app}/customers/index.d.ts.map +1 -1
  521. package/dist/lib/{stack-app → hexclave-app}/data-vault/index.d.ts +1 -1
  522. package/dist/{esm/lib/stack-app → lib/hexclave-app}/data-vault/index.d.ts.map +1 -1
  523. package/dist/lib/{stack-app → hexclave-app}/email/index.d.ts +1 -1
  524. package/dist/{esm/lib/stack-app → lib/hexclave-app}/email/index.d.ts.map +1 -1
  525. package/dist/{esm/lib/stack-app → lib/hexclave-app}/email-templates/index.d.ts +1 -1
  526. package/dist/{esm/lib/stack-app → lib/hexclave-app}/email-templates/index.d.ts.map +1 -1
  527. package/dist/lib/{stack-app → hexclave-app}/email-templates/index.js +1 -1
  528. package/dist/lib/hexclave-app/email-templates/index.js.map +1 -0
  529. package/dist/lib/{stack-app → hexclave-app}/index.d.ts +2 -2
  530. package/dist/lib/{stack-app → hexclave-app}/index.js +2 -2
  531. package/dist/{esm/lib/stack-app → lib/hexclave-app}/internal-api-keys/index.d.ts +1 -1
  532. package/dist/{esm/lib/stack-app → lib/hexclave-app}/internal-api-keys/index.d.ts.map +1 -1
  533. package/dist/lib/{stack-app → hexclave-app}/internal-api-keys/index.js +1 -1
  534. package/dist/lib/hexclave-app/internal-api-keys/index.js.map +1 -0
  535. package/dist/{esm/lib/stack-app → lib/hexclave-app}/notification-categories/index.d.ts +1 -1
  536. package/dist/{esm/lib/stack-app → lib/hexclave-app}/notification-categories/index.d.ts.map +1 -1
  537. package/dist/{esm/lib/stack-app → lib/hexclave-app}/permissions/index.d.ts +1 -1
  538. package/dist/{esm/lib/stack-app → lib/hexclave-app}/permissions/index.d.ts.map +1 -1
  539. package/dist/lib/{stack-app → hexclave-app}/permissions/index.js +1 -1
  540. package/dist/lib/hexclave-app/permissions/index.js.map +1 -0
  541. package/dist/lib/{stack-app → hexclave-app}/project-configs/index.d.ts +1 -1
  542. package/dist/{esm/lib/stack-app → lib/hexclave-app}/project-configs/index.d.ts.map +1 -1
  543. package/dist/lib/{stack-app → hexclave-app}/projects/index.d.ts +1 -1
  544. package/dist/{esm/lib/stack-app → lib/hexclave-app}/projects/index.d.ts.map +1 -1
  545. package/dist/lib/{stack-app → hexclave-app}/projects/index.js +1 -1
  546. package/dist/lib/hexclave-app/projects/index.js.map +1 -0
  547. package/dist/{esm/lib/stack-app → lib/hexclave-app}/session-replays/index.d.ts +1 -1
  548. package/dist/{esm/lib/stack-app → lib/hexclave-app}/session-replays/index.d.ts.map +1 -1
  549. package/dist/lib/{stack-app → hexclave-app}/teams/index.d.ts +1 -1
  550. package/dist/{esm/lib/stack-app → lib/hexclave-app}/teams/index.d.ts.map +1 -1
  551. package/dist/lib/{stack-app → hexclave-app}/teams/index.js +1 -1
  552. package/dist/lib/hexclave-app/teams/index.js.map +1 -0
  553. package/dist/lib/{stack-app → hexclave-app}/url-targets.d.ts +1 -1
  554. package/dist/{esm/lib/stack-app → lib/hexclave-app}/url-targets.d.ts.map +1 -1
  555. package/dist/lib/{stack-app → hexclave-app}/url-targets.js +2 -2
  556. package/dist/lib/hexclave-app/url-targets.js.map +1 -0
  557. package/dist/lib/{stack-app → hexclave-app}/url-targets.test.js +1 -1
  558. package/dist/lib/hexclave-app/url-targets.test.js.map +1 -0
  559. package/dist/lib/{stack-app → hexclave-app}/users/index.d.ts +1 -1
  560. package/dist/{esm/lib/stack-app → lib/hexclave-app}/users/index.d.ts.map +1 -1
  561. package/dist/lib/{stack-app → hexclave-app}/users/index.js +1 -1
  562. package/dist/lib/hexclave-app/users/index.js.map +1 -0
  563. package/dist/lib/hooks.d.ts +3 -3
  564. package/dist/lib/hooks.d.ts.map +1 -1
  565. package/dist/lib/hooks.js +9 -9
  566. package/dist/lib/hooks.js.map +1 -1
  567. package/dist/lib/translations.js.map +1 -1
  568. package/dist/providers/hexclave-context.d.ts +11 -0
  569. package/dist/providers/hexclave-context.d.ts.map +1 -0
  570. package/dist/providers/hexclave-context.js +15 -0
  571. package/dist/providers/hexclave-context.js.map +1 -0
  572. package/dist/providers/{stack-provider-client.d.ts → hexclave-provider-client.d.ts} +5 -5
  573. package/dist/providers/hexclave-provider-client.d.ts.map +1 -0
  574. package/dist/providers/{stack-provider-client.js → hexclave-provider-client.js} +9 -9
  575. package/dist/providers/hexclave-provider-client.js.map +1 -0
  576. package/dist/providers/{stack-provider.d.ts → hexclave-provider.d.ts} +3 -3
  577. package/dist/providers/hexclave-provider.d.ts.map +1 -0
  578. package/dist/providers/{stack-provider.js → hexclave-provider.js} +4 -4
  579. package/dist/providers/hexclave-provider.js.map +1 -0
  580. package/dist/providers/theme-provider.js.map +1 -1
  581. package/dist/providers/translation-provider-client.js.map +1 -1
  582. package/dist/providers/translation-provider.js +1 -1
  583. package/dist/providers/translation-provider.js.map +1 -1
  584. package/dist/tanstack-start-server-context.d.ts +1 -1
  585. package/dist/utils/browser-script.js.map +1 -1
  586. package/dist/utils/constants.js.map +1 -1
  587. package/dist/utils/url.js.map +1 -1
  588. package/package.json +5 -4
  589. package/src/components/api-key-dialogs.tsx +173 -0
  590. package/src/components/api-key-table.tsx +127 -0
  591. package/src/components/credential-sign-in.tsx +83 -0
  592. package/src/components/credential-sign-up.tsx +108 -0
  593. package/src/components/elements/form-warning.tsx +17 -0
  594. package/src/components/elements/maybe-full-page.tsx +60 -0
  595. package/src/components/elements/separator-with-text.tsx +22 -0
  596. package/src/components/elements/sidebar-layout.tsx +136 -0
  597. package/src/components/elements/ssr-layout-effect.tsx +24 -0
  598. package/src/components/elements/user-avatar.tsx +32 -0
  599. package/src/components/link.tsx +38 -0
  600. package/src/components/magic-link-sign-in.tsx +143 -0
  601. package/src/components/message-cards/known-error-message-card.tsx +33 -0
  602. package/src/components/message-cards/message-card.tsx +46 -0
  603. package/src/components/message-cards/predefined-message-card.tsx +88 -0
  604. package/src/components/oauth-button-group.tsx +35 -0
  605. package/src/components/oauth-button.tsx +222 -0
  606. package/src/components/passkey-button.tsx +43 -0
  607. package/src/components/profile-image-editor.tsx +194 -0
  608. package/src/components/selected-team-switcher.tsx +97 -0
  609. package/src/components/team-icon.tsx +30 -0
  610. package/src/components/team-switcher.tsx +191 -0
  611. package/src/components/use-in-iframe.tsx +18 -0
  612. package/src/components/user-button.tsx +157 -0
  613. package/src/components-page/account-settings/active-sessions/active-sessions-page.tsx +238 -0
  614. package/src/components-page/account-settings/api-keys/api-keys-page.tsx +157 -0
  615. package/src/components-page/account-settings/editable-text.tsx +53 -0
  616. package/src/components-page/account-settings/email-and-auth/email-and-auth-page.tsx +24 -0
  617. package/src/components-page/account-settings/email-and-auth/emails-section.tsx +201 -0
  618. package/src/components-page/account-settings/email-and-auth/mfa-section.tsx +139 -0
  619. package/src/components-page/account-settings/email-and-auth/otp-section.tsx +102 -0
  620. package/src/components-page/account-settings/email-and-auth/passkey-section.tsx +112 -0
  621. package/src/components-page/account-settings/email-and-auth/password-section.tsx +174 -0
  622. package/src/components-page/account-settings/notifications/notifications-page.tsx +44 -0
  623. package/src/components-page/account-settings/page-layout.tsx +11 -0
  624. package/src/components-page/account-settings/payments/payments-page.tsx +73 -0
  625. package/src/components-page/account-settings/payments/payments-panel.tsx +543 -0
  626. package/src/components-page/account-settings/profile-page/profile-page.tsx +61 -0
  627. package/src/components-page/account-settings/section.tsx +26 -0
  628. package/src/components-page/account-settings/settings/delete-account-section.tsx +85 -0
  629. package/src/components-page/account-settings/settings/settings-page.tsx +19 -0
  630. package/src/components-page/account-settings/settings/sign-out-section.tsx +40 -0
  631. package/src/components-page/account-settings/teams/leave-team-section.tsx +57 -0
  632. package/src/components-page/account-settings/teams/team-api-keys-section.tsx +74 -0
  633. package/src/components-page/account-settings/teams/team-creation-page.tsx +92 -0
  634. package/src/components-page/account-settings/teams/team-display-name-section.tsx +31 -0
  635. package/src/components-page/account-settings/teams/team-member-invitation-section.tsx +128 -0
  636. package/src/components-page/account-settings/teams/team-member-list-section.tsx +59 -0
  637. package/src/components-page/account-settings/teams/team-page.tsx +28 -0
  638. package/src/components-page/account-settings/teams/team-profile-image-section.tsx +33 -0
  639. package/src/components-page/account-settings/teams/team-profile-user-section.tsx +29 -0
  640. package/src/components-page/account-settings.tsx +343 -0
  641. package/src/components-page/auth-page.tsx +206 -0
  642. package/src/components-page/cli-auth-confirm.test.tsx +204 -0
  643. package/src/components-page/cli-auth-confirm.tsx +278 -0
  644. package/src/components-page/email-verification.tsx +76 -0
  645. package/src/components-page/error-page.tsx +105 -0
  646. package/src/components-page/forgot-password.tsx +105 -0
  647. package/src/components-page/hexclave-handler-client.tsx +361 -0
  648. package/src/components-page/hexclave-handler.tsx +48 -0
  649. package/src/components-page/magic-link-callback.tsx +92 -0
  650. package/src/components-page/mfa.tsx +222 -0
  651. package/src/components-page/oauth-callback.tsx +78 -0
  652. package/src/components-page/onboarding.tsx +176 -0
  653. package/src/components-page/password-reset.tsx +185 -0
  654. package/src/components-page/section.tsx +27 -0
  655. package/src/components-page/sign-in.tsx +34 -0
  656. package/src/components-page/sign-out.tsx +37 -0
  657. package/src/components-page/sign-up.tsx +24 -0
  658. package/src/components-page/team-creation.tsx +78 -0
  659. package/src/components-page/team-invitation.tsx +150 -0
  660. package/src/dev-tool/dev-tool-core.ts +2460 -0
  661. package/src/dev-tool/dev-tool-styles.ts +2758 -0
  662. package/src/dev-tool/dev-tool-trigger-position.test.ts +113 -0
  663. package/src/dev-tool/dev-tool-trigger-position.ts +109 -0
  664. package/src/dev-tool/index.ts +149 -0
  665. package/src/generated/.gitignore +3 -0
  666. package/src/generated/quetzal-translations.ts +4312 -0
  667. package/src/global.css +13 -0
  668. package/src/global.d.ts +5 -0
  669. package/src/index.ts +39 -0
  670. package/src/integrations/convex/component/README.md +74 -0
  671. package/src/integrations/convex/component/convex.config.ts +9 -0
  672. package/src/integrations/convex.ts +28 -0
  673. package/src/lib/auth.test.ts +67 -0
  674. package/src/lib/auth.ts +175 -0
  675. package/src/lib/cookie.ts +327 -0
  676. package/src/lib/env.ts +93 -0
  677. package/src/lib/hexclave-app/api-keys/index.ts +73 -0
  678. package/src/lib/hexclave-app/apps/implementations/admin-app-impl.ts +1261 -0
  679. package/src/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.ts +141 -0
  680. package/src/lib/hexclave-app/apps/implementations/client-app-impl.oauth-prefetch.test.ts +36 -0
  681. package/src/lib/hexclave-app/apps/implementations/client-app-impl.ts +3898 -0
  682. package/src/lib/hexclave-app/apps/implementations/common.ts +244 -0
  683. package/src/lib/hexclave-app/apps/implementations/event-tracker.test.ts +105 -0
  684. package/src/lib/hexclave-app/apps/implementations/event-tracker.ts +306 -0
  685. package/src/lib/hexclave-app/apps/implementations/index.ts +35 -0
  686. package/src/lib/hexclave-app/apps/implementations/redirect-page-urls.ts +342 -0
  687. package/src/lib/hexclave-app/apps/implementations/server-app-impl.ts +1619 -0
  688. package/src/lib/hexclave-app/apps/implementations/session-refresh-subscription.test.ts +106 -0
  689. package/src/lib/hexclave-app/apps/implementations/session-refresh-subscription.ts +52 -0
  690. package/src/lib/hexclave-app/apps/implementations/session-replay.test.ts +33 -0
  691. package/src/lib/hexclave-app/apps/implementations/session-replay.ts +356 -0
  692. package/src/lib/hexclave-app/apps/index.ts +40 -0
  693. package/src/lib/hexclave-app/apps/interfaces/admin-app.ts +192 -0
  694. package/src/lib/hexclave-app/apps/interfaces/client-app.ts +180 -0
  695. package/src/lib/hexclave-app/apps/interfaces/server-app.ts +129 -0
  696. package/src/lib/hexclave-app/common.ts +215 -0
  697. package/src/lib/hexclave-app/connected-accounts/index.ts +49 -0
  698. package/src/lib/hexclave-app/contact-channels/index.ts +80 -0
  699. package/src/lib/hexclave-app/customers/index.ts +158 -0
  700. package/src/lib/hexclave-app/data-vault/index.ts +12 -0
  701. package/src/lib/hexclave-app/email/index.ts +280 -0
  702. package/src/lib/hexclave-app/email-templates/index.ts +24 -0
  703. package/src/lib/hexclave-app/index.ts +146 -0
  704. package/src/lib/hexclave-app/internal-api-keys/index.ts +55 -0
  705. package/src/lib/hexclave-app/notification-categories/index.ts +12 -0
  706. package/src/lib/hexclave-app/permissions/index.ts +75 -0
  707. package/src/lib/hexclave-app/project-configs/index.ts +103 -0
  708. package/src/lib/hexclave-app/projects/index.ts +236 -0
  709. package/src/lib/hexclave-app/session-replays/index.ts +72 -0
  710. package/src/lib/hexclave-app/teams/index.ts +206 -0
  711. package/src/lib/hexclave-app/url-targets.test.ts +253 -0
  712. package/src/lib/hexclave-app/url-targets.ts +395 -0
  713. package/src/lib/hexclave-app/users/index.ts +523 -0
  714. package/src/lib/hooks.tsx +63 -0
  715. package/src/lib/translations.tsx +23 -0
  716. package/src/providers/hexclave-context.tsx +20 -0
  717. package/src/providers/hexclave-provider-client.tsx +39 -0
  718. package/src/providers/hexclave-provider.tsx +48 -0
  719. package/src/providers/theme-provider.tsx +121 -0
  720. package/src/providers/translation-provider-client.tsx +35 -0
  721. package/src/providers/translation-provider.tsx +25 -0
  722. package/src/tanstack-start-server-context.d.ts +13 -0
  723. package/src/utils/browser-script.tsx +135 -0
  724. package/src/utils/constants.tsx +58 -0
  725. package/src/utils/url.ts +24 -0
  726. package/dist/components-page/stack-handler-client.d.ts.map +0 -1
  727. package/dist/components-page/stack-handler-client.js.map +0 -1
  728. package/dist/components-page/stack-handler.d.ts.map +0 -1
  729. package/dist/components-page/stack-handler.js.map +0 -1
  730. package/dist/esm/components-page/stack-handler-client.d.ts.map +0 -1
  731. package/dist/esm/components-page/stack-handler-client.js.map +0 -1
  732. package/dist/esm/components-page/stack-handler.d.ts.map +0 -1
  733. package/dist/esm/components-page/stack-handler.js.map +0 -1
  734. package/dist/esm/lib/stack-app/api-keys/index.js.map +0 -1
  735. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.d.ts.map +0 -1
  736. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js.map +0 -1
  737. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.cross-domain.test.js.map +0 -1
  738. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.d.ts.map +0 -1
  739. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js.map +0 -1
  740. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +0 -1
  741. package/dist/esm/lib/stack-app/apps/implementations/common.js.map +0 -1
  742. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.js.map +0 -1
  743. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.test.js.map +0 -1
  744. package/dist/esm/lib/stack-app/apps/implementations/index.d.ts +0 -9
  745. package/dist/esm/lib/stack-app/apps/implementations/index.d.ts.map +0 -1
  746. package/dist/esm/lib/stack-app/apps/implementations/index.js +0 -27
  747. package/dist/esm/lib/stack-app/apps/implementations/index.js.map +0 -1
  748. package/dist/esm/lib/stack-app/apps/implementations/redirect-page-urls.js.map +0 -1
  749. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js.map +0 -1
  750. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.js.map +0 -1
  751. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.test.js.map +0 -1
  752. package/dist/esm/lib/stack-app/apps/implementations/session-replay.js.map +0 -1
  753. package/dist/esm/lib/stack-app/apps/implementations/session-replay.test.js.map +0 -1
  754. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.js.map +0 -1
  755. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js.map +0 -1
  756. package/dist/esm/lib/stack-app/apps/interfaces/server-app.js.map +0 -1
  757. package/dist/esm/lib/stack-app/common.js +0 -7
  758. package/dist/esm/lib/stack-app/common.js.map +0 -1
  759. package/dist/esm/lib/stack-app/contact-channels/index.js.map +0 -1
  760. package/dist/esm/lib/stack-app/email-templates/index.js.map +0 -1
  761. package/dist/esm/lib/stack-app/internal-api-keys/index.js.map +0 -1
  762. package/dist/esm/lib/stack-app/permissions/index.js.map +0 -1
  763. package/dist/esm/lib/stack-app/projects/index.js.map +0 -1
  764. package/dist/esm/lib/stack-app/teams/index.js.map +0 -1
  765. package/dist/esm/lib/stack-app/url-targets.js.map +0 -1
  766. package/dist/esm/lib/stack-app/url-targets.test.js.map +0 -1
  767. package/dist/esm/lib/stack-app/users/index.js.map +0 -1
  768. package/dist/esm/providers/stack-context.d.ts +0 -11
  769. package/dist/esm/providers/stack-context.d.ts.map +0 -1
  770. package/dist/esm/providers/stack-context.js +0 -12
  771. package/dist/esm/providers/stack-context.js.map +0 -1
  772. package/dist/esm/providers/stack-provider-client.d.ts.map +0 -1
  773. package/dist/esm/providers/stack-provider-client.js +0 -30
  774. package/dist/esm/providers/stack-provider-client.js.map +0 -1
  775. package/dist/esm/providers/stack-provider.d.ts.map +0 -1
  776. package/dist/esm/providers/stack-provider.js.map +0 -1
  777. package/dist/lib/stack-app/api-keys/index.d.ts.map +0 -1
  778. package/dist/lib/stack-app/api-keys/index.js.map +0 -1
  779. package/dist/lib/stack-app/apps/implementations/admin-app-impl.d.ts.map +0 -1
  780. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js.map +0 -1
  781. package/dist/lib/stack-app/apps/implementations/client-app-impl.cross-domain.test.js.map +0 -1
  782. package/dist/lib/stack-app/apps/implementations/client-app-impl.d.ts.map +0 -1
  783. package/dist/lib/stack-app/apps/implementations/client-app-impl.js.map +0 -1
  784. package/dist/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +0 -1
  785. package/dist/lib/stack-app/apps/implementations/common.d.ts.map +0 -1
  786. package/dist/lib/stack-app/apps/implementations/common.js.map +0 -1
  787. package/dist/lib/stack-app/apps/implementations/event-tracker.d.ts.map +0 -1
  788. package/dist/lib/stack-app/apps/implementations/event-tracker.js.map +0 -1
  789. package/dist/lib/stack-app/apps/implementations/event-tracker.test.js.map +0 -1
  790. package/dist/lib/stack-app/apps/implementations/index.d.ts +0 -9
  791. package/dist/lib/stack-app/apps/implementations/index.d.ts.map +0 -1
  792. package/dist/lib/stack-app/apps/implementations/index.js +0 -31
  793. package/dist/lib/stack-app/apps/implementations/index.js.map +0 -1
  794. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.d.ts.map +0 -1
  795. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.js.map +0 -1
  796. package/dist/lib/stack-app/apps/implementations/server-app-impl.d.ts.map +0 -1
  797. package/dist/lib/stack-app/apps/implementations/server-app-impl.js.map +0 -1
  798. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.d.ts.map +0 -1
  799. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.js.map +0 -1
  800. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.test.js.map +0 -1
  801. package/dist/lib/stack-app/apps/implementations/session-replay.d.ts.map +0 -1
  802. package/dist/lib/stack-app/apps/implementations/session-replay.js.map +0 -1
  803. package/dist/lib/stack-app/apps/implementations/session-replay.test.js.map +0 -1
  804. package/dist/lib/stack-app/apps/interfaces/admin-app.d.ts.map +0 -1
  805. package/dist/lib/stack-app/apps/interfaces/admin-app.js.map +0 -1
  806. package/dist/lib/stack-app/apps/interfaces/client-app.d.ts.map +0 -1
  807. package/dist/lib/stack-app/apps/interfaces/client-app.js.map +0 -1
  808. package/dist/lib/stack-app/apps/interfaces/server-app.d.ts.map +0 -1
  809. package/dist/lib/stack-app/apps/interfaces/server-app.js.map +0 -1
  810. package/dist/lib/stack-app/common.d.ts.map +0 -1
  811. package/dist/lib/stack-app/common.js +0 -9
  812. package/dist/lib/stack-app/common.js.map +0 -1
  813. package/dist/lib/stack-app/connected-accounts/index.d.ts.map +0 -1
  814. package/dist/lib/stack-app/contact-channels/index.d.ts.map +0 -1
  815. package/dist/lib/stack-app/contact-channels/index.js.map +0 -1
  816. package/dist/lib/stack-app/customers/index.d.ts.map +0 -1
  817. package/dist/lib/stack-app/data-vault/index.d.ts.map +0 -1
  818. package/dist/lib/stack-app/email/index.d.ts.map +0 -1
  819. package/dist/lib/stack-app/email-templates/index.d.ts.map +0 -1
  820. package/dist/lib/stack-app/email-templates/index.js.map +0 -1
  821. package/dist/lib/stack-app/internal-api-keys/index.d.ts.map +0 -1
  822. package/dist/lib/stack-app/internal-api-keys/index.js.map +0 -1
  823. package/dist/lib/stack-app/notification-categories/index.d.ts.map +0 -1
  824. package/dist/lib/stack-app/permissions/index.d.ts.map +0 -1
  825. package/dist/lib/stack-app/permissions/index.js.map +0 -1
  826. package/dist/lib/stack-app/project-configs/index.d.ts.map +0 -1
  827. package/dist/lib/stack-app/projects/index.d.ts.map +0 -1
  828. package/dist/lib/stack-app/projects/index.js.map +0 -1
  829. package/dist/lib/stack-app/session-replays/index.d.ts.map +0 -1
  830. package/dist/lib/stack-app/teams/index.d.ts.map +0 -1
  831. package/dist/lib/stack-app/teams/index.js.map +0 -1
  832. package/dist/lib/stack-app/url-targets.d.ts.map +0 -1
  833. package/dist/lib/stack-app/url-targets.js.map +0 -1
  834. package/dist/lib/stack-app/url-targets.test.js.map +0 -1
  835. package/dist/lib/stack-app/users/index.d.ts.map +0 -1
  836. package/dist/lib/stack-app/users/index.js.map +0 -1
  837. package/dist/providers/stack-context.d.ts +0 -11
  838. package/dist/providers/stack-context.d.ts.map +0 -1
  839. package/dist/providers/stack-context.js +0 -15
  840. package/dist/providers/stack-context.js.map +0 -1
  841. package/dist/providers/stack-provider-client.d.ts.map +0 -1
  842. package/dist/providers/stack-provider-client.js.map +0 -1
  843. package/dist/providers/stack-provider.d.ts.map +0 -1
  844. package/dist/providers/stack-provider.js.map +0 -1
  845. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.cross-domain.test.d.ts +0 -0
  846. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.oauth-prefetch.test.d.ts +0 -0
  847. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.test.d.ts +0 -0
  848. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.test.d.ts +0 -0
  849. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.test.d.ts +0 -0
  850. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/index.d.ts +0 -0
  851. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/index.js +0 -0
  852. /package/dist/esm/lib/{stack-app → hexclave-app}/connected-accounts/index.js +0 -0
  853. /package/dist/esm/lib/{stack-app → hexclave-app}/customers/index.js +0 -0
  854. /package/dist/esm/lib/{stack-app → hexclave-app}/data-vault/index.js +0 -0
  855. /package/dist/esm/lib/{stack-app → hexclave-app}/email/index.js +0 -0
  856. /package/dist/esm/lib/{stack-app → hexclave-app}/notification-categories/index.js +0 -0
  857. /package/dist/esm/lib/{stack-app → hexclave-app}/project-configs/index.js +0 -0
  858. /package/dist/esm/lib/{stack-app → hexclave-app}/session-replays/index.js +0 -0
  859. /package/dist/esm/lib/{stack-app → hexclave-app}/url-targets.test.d.ts +0 -0
  860. /package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.cross-domain.test.d.ts +0 -0
  861. /package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.oauth-prefetch.test.d.ts +0 -0
  862. /package/dist/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.test.d.ts +0 -0
  863. /package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.test.d.ts +0 -0
  864. /package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.test.d.ts +0 -0
  865. /package/dist/lib/{stack-app → hexclave-app}/apps/index.d.ts +0 -0
  866. /package/dist/lib/{stack-app → hexclave-app}/apps/index.js +0 -0
  867. /package/dist/lib/{stack-app → hexclave-app}/connected-accounts/index.js +0 -0
  868. /package/dist/lib/{stack-app → hexclave-app}/customers/index.js +0 -0
  869. /package/dist/lib/{stack-app → hexclave-app}/data-vault/index.js +0 -0
  870. /package/dist/lib/{stack-app → hexclave-app}/email/index.js +0 -0
  871. /package/dist/lib/{stack-app → hexclave-app}/notification-categories/index.js +0 -0
  872. /package/dist/lib/{stack-app → hexclave-app}/project-configs/index.js +0 -0
  873. /package/dist/lib/{stack-app → hexclave-app}/session-replays/index.js +0 -0
  874. /package/dist/lib/{stack-app → hexclave-app}/url-targets.test.d.ts +0 -0
@@ -1,18 +1,18 @@
1
1
  "use client";
2
2
 
3
3
  import { Button, InputOTP, InputOTPGroup, InputOTPSlot, Spinner, Typography, cn } from "@hexclave/ui";
4
- import { CheckIcon } from "lucide-react";
5
4
  import { useEffect, useMemo, useRef, useState } from "react";
6
5
  import { useStackApp } from "../index.js";
7
- import { MaybeFullPage } from "../components/elements/maybe-full-page.js";
6
+ import { FormWarningText } from "../components/elements/form-warning.js";
8
7
  import { useTranslation } from "../lib/translations.js";
9
8
  import { jsx, jsxs } from "react/jsx-runtime";
10
9
  import { KnownErrors } from "@hexclave/shared";
11
- import { FormWarningText } from "../components/elements/form-warning.js";
10
+ import { CheckIcon } from "lucide-react";
11
+ import { MaybeFullPage } from "../components/elements/maybe-full-page.js";
12
12
 
13
13
  //#region src/components-page/mfa.tsx
14
14
  function MfaForm({ onSuccess, onCancel }) {
15
- const stackApp = useStackApp();
15
+ const hexclaveApp = useStackApp();
16
16
  const { t } = useTranslation();
17
17
  const [otp, setOtp] = useState("");
18
18
  const formRef = useRef(null);
@@ -35,7 +35,7 @@ function MfaForm({ onSuccess, onCancel }) {
35
35
  }
36
36
  setSubmitting(true);
37
37
  setError(null);
38
- if (attemptCode) stackApp.signInWithMfa(otp, attemptCode, { noRedirect: true }).then(async (result) => {
38
+ if (attemptCode) hexclaveApp.signInWithMfa(otp, attemptCode, { noRedirect: true }).then(async (result) => {
39
39
  if (result.status === "ok") {
40
40
  setVerified(true);
41
41
  if (typeof window !== "undefined") {
@@ -43,7 +43,7 @@ function MfaForm({ onSuccess, onCancel }) {
43
43
  window.sessionStorage.removeItem("stack_mfa_attempt_code");
44
44
  }
45
45
  if (onSuccess) onSuccess();
46
- else await stackApp.redirectToAfterSignIn();
46
+ else await hexclaveApp.redirectToAfterSignIn();
47
47
  } else throw result.error;
48
48
  }).catch((e) => {
49
49
  if (e instanceof KnownErrors.InvalidTotpCode) setError(t("Invalid TOTP code"));
@@ -63,7 +63,7 @@ function MfaForm({ onSuccess, onCancel }) {
63
63
  submitting,
64
64
  onSuccess,
65
65
  attemptCode,
66
- stackApp,
66
+ hexclaveApp,
67
67
  t,
68
68
  verified
69
69
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"mfa.js","names":[],"sources":["../../../src/components-page/mfa.tsx"],"sourcesContent":["\"use client\";\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { KnownErrors } from \"@hexclave/shared\";\nimport {\n Button,\n InputOTP,\n InputOTPGroup,\n InputOTPSlot,\n Spinner,\n Typography,\n cn,\n} from \"@hexclave/ui\";\nimport { CheckIcon } from \"lucide-react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useStackApp } from \"..\";\nimport { FormWarningText } from \"../components/elements/form-warning\";\nimport { MaybeFullPage } from \"../components/elements/maybe-full-page\";\nimport { useTranslation } from \"../lib/translations\";\n\nfunction MfaForm({ onSuccess, onCancel }: {\n onSuccess?: () => void,\n onCancel?: () => void,\n}) {\n const stackApp = useStackApp();\n const { t } = useTranslation();\n const [otp, setOtp] = useState<string>(\"\");\n const formRef = useRef<HTMLFormElement>(null);\n\n const [submitting, setSubmitting] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n const [verified, setVerified] = useState<boolean>(false);\n\n const [attemptCode, setAttemptCode] = useState<string | null>(null);\n\n useEffect(() => {\n if (!attemptCode && typeof window !== \"undefined\") {\n // Hexclave rebrand: prefer the new MFA attempt code key, fall back to the legacy key.\n const code = window.sessionStorage.getItem(\"hexclave_mfa_attempt_code\") ?? window.sessionStorage.getItem(\"stack_mfa_attempt_code\");\n if (code) {\n setAttemptCode(code);\n }\n }\n }, [ attemptCode]);\n\n // Handle OTP verification when code is complete\n useEffect(() => {\n if (otp.length === 6 && !submitting) {\n // Blur any focused inputs\n if (document.activeElement instanceof HTMLElement) {\n document.activeElement.blur();\n }\n if (formRef.current) {\n const inputs = formRef.current.querySelectorAll('input');\n for (const input of inputs) {\n input.blur();\n }\n }\n\n setSubmitting(true);\n setError(null);\n\n if (attemptCode) {\n stackApp\n .signInWithMfa(otp, attemptCode, { noRedirect: true })\n .then(async (result) => {\n if (result.status === \"ok\") {\n setVerified(true);\n\n // Cleanup session storage\n if (typeof window !== \"undefined\") {\n // Hexclave rebrand: remove both the new and legacy MFA attempt code keys.\n window.sessionStorage.removeItem(\"hexclave_mfa_attempt_code\");\n window.sessionStorage.removeItem(\"stack_mfa_attempt_code\");\n }\n\n if (onSuccess) {\n onSuccess();\n } else {\n await stackApp.redirectToAfterSignIn();\n }\n } else {\n throw result.error;\n }\n })\n .catch((e) => {\n if (e instanceof KnownErrors.InvalidTotpCode) {\n setError(t(\"Invalid TOTP code\"));\n } else {\n setError(t(\"Verification failed\"));\n }\n })\n .finally(() => {\n setSubmitting(false);\n if (!verified) {\n setOtp(\"\");\n }\n });\n } else {\n setSubmitting(false);\n setError(t(\"Missing verification information\"));\n }\n }\n\n // Clear error when user is typing\n if (otp.length !== 0 && otp.length !== 6) {\n setError(null);\n }\n }, [otp, submitting, onSuccess, attemptCode, stackApp, t, verified]);\n\n\n const inputStyleClass = useMemo(() => {\n if (verified) {\n return \"opacity-85 transition-all duration-300\";\n }\n\n if (error) {\n return \"ring-red-500 border-red-500\";\n }\n\n return \"focus:ring-primary/50\";\n }, [error, verified]);\n\n return (\n <div className=\"flex flex-col items-stretch stack-scope\">\n <form ref={formRef} className=\"w-full flex flex-col items-center gap-4\">\n <InputOTP\n maxLength={6}\n type=\"text\"\n inputMode=\"numeric\"\n placeholder=\"······\"\n value={otp}\n onChange={(value) => setOtp(value.toUpperCase())}\n disabled={submitting || verified}\n >\n <InputOTPGroup>\n {[0, 1, 2, 3, 4, 5].map((index) => (\n <InputOTPSlot\n key={index}\n index={index}\n size=\"lg\"\n className={cn(\n \"border focus:ring-2 transition-all\",\n inputStyleClass,\n )}\n />\n ))}\n </InputOTPGroup>\n </InputOTP>\n\n {/* Verification Status */}\n <div className=\"h-8 flex flex-col gap-4 items-center justify-center w-full\">\n {verified ? (\n <div className=\"flex items-center gap-2 animate-in fade-in duration-300 slide-in-from-bottom-2\">\n <CheckIcon className=\"w-5 h-5 text-green-600 animate-in zoom-in duration-300\" />\n <Typography className=\"text-sm font-medium\">{t(\"Verified! Redirecting...\")}</Typography>\n </div>\n ) : submitting ? (\n <div className=\"flex items-center gap-2\">\n <Spinner className=\"text-primary h-4 w-4\" />\n <Typography className=\"text-sm\">{t(\"Verifying...\")}</Typography>\n </div>\n ) : null}\n\n {/* Error reporting */}\n {error !== null && !submitting && !verified ? <FormWarningText text={error} /> : null}\n </div>\n </form>\n\n {/* Cancel Button */}\n {onCancel && !verified && (\n <Button\n variant=\"link\"\n onClick={onCancel}\n className=\"underline mt-4 self-center\"\n disabled={submitting || verified}\n >\n {t(\"Cancel\")}\n </Button>\n )}\n </div>\n );\n}\n\nexport function MFA(props: {\n fullPage?: boolean,\n onSuccess?: () => void,\n onCancel?: () => void,\n}) {\n const { t } = useTranslation();\n\n const headerText = t(\"Multi-Factor Authentication\");\n const instructionText = t(\"Enter the six-digit code from your authenticator app\");\n\n if (props.fullPage) {\n return (\n <MaybeFullPage fullPage={true}>\n <div\n className=\"stack-scope flex flex-col items-stretch\"\n style={{ maxWidth: \"380px\", flexBasis: \"380px\", padding: \"1rem\" }}\n >\n <div className=\"text-center mb-6\">\n <Typography type=\"h2\">{headerText}</Typography>\n <Typography className=\"mt-2\">{instructionText}</Typography>\n </div>\n <MfaForm onSuccess={props.onSuccess} onCancel={props.onCancel} />\n </div>\n </MaybeFullPage>\n );\n }\n\n return (\n <div className=\"flex flex-col items-stretch stack-scope\">\n <Typography className=\"mb-4 text-center\">{instructionText}</Typography>\n <MfaForm onSuccess={props.onSuccess} onCancel={props.onCancel} />\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"mfa.js","names":[],"sources":["../../../src/components-page/mfa.tsx"],"sourcesContent":["\"use client\";\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { KnownErrors } from \"@hexclave/shared\";\nimport {\n Button,\n InputOTP,\n InputOTPGroup,\n InputOTPSlot,\n Spinner,\n Typography,\n cn,\n} from \"@hexclave/ui\";\nimport { CheckIcon } from \"lucide-react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useStackApp } from \"..\";\nimport { FormWarningText } from \"../components/elements/form-warning\";\nimport { MaybeFullPage } from \"../components/elements/maybe-full-page\";\nimport { useTranslation } from \"../lib/translations\";\n\nfunction MfaForm({ onSuccess, onCancel }: {\n onSuccess?: () => void,\n onCancel?: () => void,\n}) {\n const hexclaveApp = useStackApp();\n const { t } = useTranslation();\n const [otp, setOtp] = useState<string>(\"\");\n const formRef = useRef<HTMLFormElement>(null);\n\n const [submitting, setSubmitting] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n const [verified, setVerified] = useState<boolean>(false);\n\n const [attemptCode, setAttemptCode] = useState<string | null>(null);\n\n useEffect(() => {\n if (!attemptCode && typeof window !== \"undefined\") {\n // Hexclave rebrand: prefer the new MFA attempt code key, fall back to the legacy key.\n const code = window.sessionStorage.getItem(\"hexclave_mfa_attempt_code\") ?? window.sessionStorage.getItem(\"stack_mfa_attempt_code\");\n if (code) {\n setAttemptCode(code);\n }\n }\n }, [ attemptCode]);\n\n // Handle OTP verification when code is complete\n useEffect(() => {\n if (otp.length === 6 && !submitting) {\n // Blur any focused inputs\n if (document.activeElement instanceof HTMLElement) {\n document.activeElement.blur();\n }\n if (formRef.current) {\n const inputs = formRef.current.querySelectorAll('input');\n for (const input of inputs) {\n input.blur();\n }\n }\n\n setSubmitting(true);\n setError(null);\n\n if (attemptCode) {\n hexclaveApp\n .signInWithMfa(otp, attemptCode, { noRedirect: true })\n .then(async (result) => {\n if (result.status === \"ok\") {\n setVerified(true);\n\n // Cleanup session storage\n if (typeof window !== \"undefined\") {\n // Hexclave rebrand: remove both the new and legacy MFA attempt code keys.\n window.sessionStorage.removeItem(\"hexclave_mfa_attempt_code\");\n window.sessionStorage.removeItem(\"stack_mfa_attempt_code\");\n }\n\n if (onSuccess) {\n onSuccess();\n } else {\n await hexclaveApp.redirectToAfterSignIn();\n }\n } else {\n throw result.error;\n }\n })\n .catch((e) => {\n if (e instanceof KnownErrors.InvalidTotpCode) {\n setError(t(\"Invalid TOTP code\"));\n } else {\n setError(t(\"Verification failed\"));\n }\n })\n .finally(() => {\n setSubmitting(false);\n if (!verified) {\n setOtp(\"\");\n }\n });\n } else {\n setSubmitting(false);\n setError(t(\"Missing verification information\"));\n }\n }\n\n // Clear error when user is typing\n if (otp.length !== 0 && otp.length !== 6) {\n setError(null);\n }\n }, [otp, submitting, onSuccess, attemptCode, hexclaveApp, t, verified]);\n\n\n const inputStyleClass = useMemo(() => {\n if (verified) {\n return \"opacity-85 transition-all duration-300\";\n }\n\n if (error) {\n return \"ring-red-500 border-red-500\";\n }\n\n return \"focus:ring-primary/50\";\n }, [error, verified]);\n\n return (\n <div className=\"flex flex-col items-stretch stack-scope\">\n <form ref={formRef} className=\"w-full flex flex-col items-center gap-4\">\n <InputOTP\n maxLength={6}\n type=\"text\"\n inputMode=\"numeric\"\n placeholder=\"······\"\n value={otp}\n onChange={(value) => setOtp(value.toUpperCase())}\n disabled={submitting || verified}\n >\n <InputOTPGroup>\n {[0, 1, 2, 3, 4, 5].map((index) => (\n <InputOTPSlot\n key={index}\n index={index}\n size=\"lg\"\n className={cn(\n \"border focus:ring-2 transition-all\",\n inputStyleClass,\n )}\n />\n ))}\n </InputOTPGroup>\n </InputOTP>\n\n {/* Verification Status */}\n <div className=\"h-8 flex flex-col gap-4 items-center justify-center w-full\">\n {verified ? (\n <div className=\"flex items-center gap-2 animate-in fade-in duration-300 slide-in-from-bottom-2\">\n <CheckIcon className=\"w-5 h-5 text-green-600 animate-in zoom-in duration-300\" />\n <Typography className=\"text-sm font-medium\">{t(\"Verified! Redirecting...\")}</Typography>\n </div>\n ) : submitting ? (\n <div className=\"flex items-center gap-2\">\n <Spinner className=\"text-primary h-4 w-4\" />\n <Typography className=\"text-sm\">{t(\"Verifying...\")}</Typography>\n </div>\n ) : null}\n\n {/* Error reporting */}\n {error !== null && !submitting && !verified ? <FormWarningText text={error} /> : null}\n </div>\n </form>\n\n {/* Cancel Button */}\n {onCancel && !verified && (\n <Button\n variant=\"link\"\n onClick={onCancel}\n className=\"underline mt-4 self-center\"\n disabled={submitting || verified}\n >\n {t(\"Cancel\")}\n </Button>\n )}\n </div>\n );\n}\n\nexport function MFA(props: {\n fullPage?: boolean,\n onSuccess?: () => void,\n onCancel?: () => void,\n}) {\n const { t } = useTranslation();\n\n const headerText = t(\"Multi-Factor Authentication\");\n const instructionText = t(\"Enter the six-digit code from your authenticator app\");\n\n if (props.fullPage) {\n return (\n <MaybeFullPage fullPage={true}>\n <div\n className=\"stack-scope flex flex-col items-stretch\"\n style={{ maxWidth: \"380px\", flexBasis: \"380px\", padding: \"1rem\" }}\n >\n <div className=\"text-center mb-6\">\n <Typography type=\"h2\">{headerText}</Typography>\n <Typography className=\"mt-2\">{instructionText}</Typography>\n </div>\n <MfaForm onSuccess={props.onSuccess} onCancel={props.onCancel} />\n </div>\n </MaybeFullPage>\n );\n }\n\n return (\n <div className=\"flex flex-col items-stretch stack-scope\">\n <Typography className=\"mb-4 text-center\">{instructionText}</Typography>\n <MfaForm onSuccess={props.onSuccess} onCancel={props.onCancel} />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAwBA,SAAS,QAAQ,EAAE,WAAW,YAG3B;CACD,MAAM,cAAc,aAAa;CACjC,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,CAAC,KAAK,UAAU,SAAiB,GAAG;CAC1C,MAAM,UAAU,OAAwB,KAAK;CAE7C,MAAM,CAAC,YAAY,iBAAiB,SAAkB,MAAM;CAC5D,MAAM,CAAC,OAAO,YAAY,SAAwB,KAAK;CACvD,MAAM,CAAC,UAAU,eAAe,SAAkB,MAAM;CAExD,MAAM,CAAC,aAAa,kBAAkB,SAAwB,KAAK;AAEnE,iBAAgB;AACd,MAAI,CAAC,eAAe,OAAO,WAAW,aAAa;GAEjD,MAAM,OAAO,OAAO,eAAe,QAAQ,4BAA4B,IAAI,OAAO,eAAe,QAAQ,yBAAyB;AAClI,OAAI,KACF,gBAAe,KAAK;;IAGvB,CAAE,YAAY,CAAC;AAGlB,iBAAgB;AACd,MAAI,IAAI,WAAW,KAAK,CAAC,YAAY;AAEnC,OAAI,SAAS,yBAAyB,YACpC,UAAS,cAAc,MAAM;AAE/B,OAAI,QAAQ,SAAS;IACnB,MAAM,SAAS,QAAQ,QAAQ,iBAAiB,QAAQ;AACxD,SAAK,MAAM,SAAS,OAClB,OAAM,MAAM;;AAIhB,iBAAc,KAAK;AACnB,YAAS,KAAK;AAEd,OAAI,YACF,aACG,cAAc,KAAK,aAAa,EAAE,YAAY,MAAM,CAAC,CACrD,KAAK,OAAO,WAAW;AACtB,QAAI,OAAO,WAAW,MAAM;AAC1B,iBAAY,KAAK;AAGjB,SAAI,OAAO,WAAW,aAAa;AAEjC,aAAO,eAAe,WAAW,4BAA4B;AAC7D,aAAO,eAAe,WAAW,yBAAyB;;AAG5D,SAAI,UACF,YAAW;SAEX,OAAM,YAAY,uBAAuB;UAG3C,OAAM,OAAO;KAEf,CACD,OAAO,MAAM;AACZ,QAAI,aAAa,YAAY,gBAC3B,UAAS,EAAE,oBAAoB,CAAC;QAEhC,UAAS,EAAE,sBAAsB,CAAC;KAEpC,CACD,cAAc;AACb,kBAAc,MAAM;AACpB,QAAI,CAAC,SACH,QAAO,GAAG;KAEZ;QACC;AACL,kBAAc,MAAM;AACpB,aAAS,EAAE,mCAAmC,CAAC;;;AAKnD,MAAI,IAAI,WAAW,KAAK,IAAI,WAAW,EACrC,UAAS,KAAK;IAEf;EAAC;EAAK;EAAY;EAAW;EAAa;EAAa;EAAG;EAAS,CAAC;CAGvE,MAAM,kBAAkB,cAAc;AACpC,MAAI,SACF,QAAO;AAGT,MAAI,MACF,QAAO;AAGT,SAAO;IACN,CAAC,OAAO,SAAS,CAAC;AAErB,QACE,qBAAC;EAAI,WAAU;aACb,qBAAC;GAAK,KAAK;GAAS,WAAU;cAC5B,oBAAC;IACC,WAAW;IACX,MAAK;IACL,WAAU;IACV,aAAY;IACZ,OAAO;IACP,WAAW,UAAU,OAAO,MAAM,aAAa,CAAC;IAChD,UAAU,cAAc;cAExB,oBAAC,2BACE;KAAC;KAAG;KAAG;KAAG;KAAG;KAAG;KAAE,CAAC,KAAK,UACvB,oBAAC;KAEQ;KACP,MAAK;KACL,WAAW,GACT,sCACA,gBACD;OANI,MAOL,CACF,GACY;KACP,EAGX,qBAAC;IAAI,WAAU;eACZ,WACC,qBAAC;KAAI,WAAU;gBACb,oBAAC,aAAU,WAAU,2DAA2D,EAChF,oBAAC;MAAW,WAAU;gBAAuB,EAAE,2BAA2B;OAAc;MACpF,GACJ,aACF,qBAAC;KAAI,WAAU;gBACb,oBAAC,WAAQ,WAAU,yBAAyB,EAC5C,oBAAC;MAAW,WAAU;gBAAW,EAAE,eAAe;OAAc;MAC5D,GACJ,MAGH,UAAU,QAAQ,CAAC,cAAc,CAAC,WAAW,oBAAC,mBAAgB,MAAM,QAAS,GAAG;KAC7E;IACD,EAGN,YAAY,CAAC,YACZ,oBAAC;GACC,SAAQ;GACR,SAAS;GACT,WAAU;GACV,UAAU,cAAc;aAEvB,EAAE,SAAS;IACL;GAEP;;AAIV,SAAgB,IAAI,OAIjB;CACD,MAAM,EAAE,MAAM,gBAAgB;CAE9B,MAAM,aAAa,EAAE,8BAA8B;CACnD,MAAM,kBAAkB,EAAE,uDAAuD;AAEjF,KAAI,MAAM,SACR,QACE,oBAAC;EAAc,UAAU;YACvB,qBAAC;GACC,WAAU;GACV,OAAO;IAAE,UAAU;IAAS,WAAW;IAAS,SAAS;IAAQ;cAEjE,qBAAC;IAAI,WAAU;eACb,oBAAC;KAAW,MAAK;eAAM;MAAwB,EAC/C,oBAAC;KAAW,WAAU;eAAQ;MAA6B;KACvD,EACN,oBAAC;IAAQ,WAAW,MAAM;IAAW,UAAU,MAAM;KAAY;IAC7D;GACQ;AAIpB,QACE,qBAAC;EAAI,WAAU;aACb,oBAAC;GAAW,WAAU;aAAoB;IAA6B,EACvE,oBAAC;GAAQ,WAAW,MAAM;GAAW,UAAU,MAAM;IAAY;GAC7D"}
@@ -1,16 +1,16 @@
1
1
  'use client';
2
2
 
3
+ import { captureError } from "@hexclave/shared/dist/utils/errors";
3
4
  import { runAsynchronously } from "@hexclave/shared/dist/utils/promises";
4
5
  import { Spinner, cn } from "@hexclave/ui";
5
6
  import { useEffect, useRef, useState } from "react";
6
7
  import { useStackApp } from "../index.js";
7
- import { MaybeFullPage } from "../components/elements/maybe-full-page.js";
8
8
  import { useTranslation } from "../lib/translations.js";
9
9
  import { jsx, jsxs } from "react/jsx-runtime";
10
- import { StyledLink } from "../components/link.js";
11
10
  import { KnownError } from "@hexclave/shared";
12
- import { captureError } from "@hexclave/shared/dist/utils/errors";
13
- import { stackAppInternalsSymbol } from "../lib/stack-app/index.js";
11
+ import { MaybeFullPage } from "../components/elements/maybe-full-page.js";
12
+ import { StyledLink } from "../components/link.js";
13
+ import { hexclaveAppInternalsSymbol } from "../lib/hexclave-app/index.js";
14
14
 
15
15
  //#region src/components-page/oauth-callback.tsx
16
16
  function OAuthCallback({ fullPage }) {
@@ -24,11 +24,11 @@ function OAuthCallback({ fullPage }) {
24
24
  called.current = true;
25
25
  const redirectToError = async (url) => {
26
26
  const urlString = url.toString();
27
- if (app[stackAppInternalsSymbol].getRedirectMethod() === "none") {
27
+ if (app[hexclaveAppInternalsSymbol].getRedirectMethod() === "none") {
28
28
  setRedirectUrl(urlString);
29
29
  return;
30
30
  }
31
- await app[stackAppInternalsSymbol].redirectToUrl(urlString, { replace: true });
31
+ await app[hexclaveAppInternalsSymbol].redirectToUrl(urlString, { replace: true });
32
32
  };
33
33
  try {
34
34
  if (!await app.callOAuthCallback()) await app.redirectToSignIn({ noRedirectBack: true });
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-callback.js","names":[],"sources":["../../../src/components-page/oauth-callback.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { KnownError } from \"@hexclave/shared\";\nimport { captureError } from \"@hexclave/shared/dist/utils/errors\";\nimport { runAsynchronously } from \"@hexclave/shared/dist/utils/promises\";\nimport { Spinner, cn } from \"@hexclave/ui\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { useStackApp } from \"..\";\nimport { MaybeFullPage } from \"../components/elements/maybe-full-page\";\nimport { StyledLink } from \"../components/link\";\nimport { stackAppInternalsSymbol } from \"../lib/stack-app\";\nimport { useTranslation } from \"../lib/translations\";\n\nexport function OAuthCallback({ fullPage }: { fullPage?: boolean }) {\n const { t } = useTranslation();\n const app = useStackApp();\n const called = useRef(false);\n const [showRedirectLink, setShowRedirectLink] = useState(false);\n const [redirectUrl, setRedirectUrl] = useState<string | null>(null);\n\n useEffect(() => runAsynchronously(async () => {\n if (called.current) return;\n called.current = true;\n const redirectToError = async (url: URL) => {\n const urlString = url.toString();\n if (app[stackAppInternalsSymbol].getRedirectMethod() === \"none\") {\n setRedirectUrl(urlString);\n return;\n }\n await app[stackAppInternalsSymbol].redirectToUrl(urlString, { replace: true });\n };\n try {\n const hasRedirected = await app.callOAuthCallback();\n if (!hasRedirected) {\n await app.redirectToSignIn({ noRedirectBack: true });\n }\n } catch (e) {\n if (KnownError.isKnownError(e)) {\n const errorUrl = new URL(app.urls.error, window.location.href);\n errorUrl.searchParams.set(\"errorCode\", e.errorCode);\n errorUrl.searchParams.set(\"message\", e.message);\n errorUrl.searchParams.set(\"details\", JSON.stringify(e.details ?? {}));\n await redirectToError(errorUrl);\n return;\n }\n captureError(\"<OAuthCallback />\", e);\n await redirectToError(new URL(app.urls.error, window.location.href));\n }\n }), [app]);\n\n useEffect(() => {\n setTimeout(() => setShowRedirectLink(true), 3000);\n }, []);\n\n return (\n <MaybeFullPage\n fullPage={fullPage ?? false}\n containerClassName=\"flex items-center justify-center\"\n >\n <div\n className={cn(\n \"text-center justify-center items-center stack-scope flex flex-col gap-4 max-w-[380px]\",\n fullPage ? \"p-4\" : \"p-0\"\n )}\n >\n <div className=\"flex flex-col justify-center items-center gap-4\">\n <Spinner size={20} />\n </div>\n {showRedirectLink || redirectUrl != null ? <p>{t('If you are not redirected automatically, ')}<StyledLink className=\"whitespace-nowrap\" href={redirectUrl ?? app.urls.home}>{t(\"click here\")}</StyledLink></p> : null}\n </div>\n </MaybeFullPage>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,SAAgB,cAAc,EAAE,YAAoC;CAClE,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,MAAM,aAAa;CACzB,MAAM,SAAS,OAAO,MAAM;CAC5B,MAAM,CAAC,kBAAkB,uBAAuB,SAAS,MAAM;CAC/D,MAAM,CAAC,aAAa,kBAAkB,SAAwB,KAAK;AAEnE,iBAAgB,kBAAkB,YAAY;AAC5C,MAAI,OAAO,QAAS;AACpB,SAAO,UAAU;EACjB,MAAM,kBAAkB,OAAO,QAAa;GAC1C,MAAM,YAAY,IAAI,UAAU;AAChC,OAAI,IAAI,yBAAyB,mBAAmB,KAAK,QAAQ;AAC/D,mBAAe,UAAU;AACzB;;AAEF,SAAM,IAAI,yBAAyB,cAAc,WAAW,EAAE,SAAS,MAAM,CAAC;;AAEhF,MAAI;AAEF,OAAI,CADkB,MAAM,IAAI,mBAAmB,CAEjD,OAAM,IAAI,iBAAiB,EAAE,gBAAgB,MAAM,CAAC;WAE/C,GAAG;AACV,OAAI,WAAW,aAAa,EAAE,EAAE;IAC9B,MAAM,WAAW,IAAI,IAAI,IAAI,KAAK,OAAO,OAAO,SAAS,KAAK;AAC9D,aAAS,aAAa,IAAI,aAAa,EAAE,UAAU;AACnD,aAAS,aAAa,IAAI,WAAW,EAAE,QAAQ;AAC/C,aAAS,aAAa,IAAI,WAAW,KAAK,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;AACrE,UAAM,gBAAgB,SAAS;AAC/B;;AAEF,gBAAa,qBAAqB,EAAE;AACpC,SAAM,gBAAgB,IAAI,IAAI,IAAI,KAAK,OAAO,OAAO,SAAS,KAAK,CAAC;;GAEtE,EAAE,CAAC,IAAI,CAAC;AAEV,iBAAgB;AACd,mBAAiB,oBAAoB,KAAK,EAAE,IAAK;IAChD,EAAE,CAAC;AAEN,QACE,oBAAC;EACC,UAAU,YAAY;EACtB,oBAAmB;YAEnB,qBAAC;GACC,WAAW,GACT,yFACA,WAAW,QAAQ,MACpB;cAED,oBAAC;IAAI,WAAU;cACb,oBAAC,WAAQ,MAAM,KAAM;KACjB,EACL,oBAAoB,eAAe,OAAO,qBAAC,kBAAG,EAAE,4CAA4C,EAAC,oBAAC;IAAW,WAAU;IAAoB,MAAM,eAAe,IAAI,KAAK;cAAO,EAAE,aAAa;KAAc,IAAI,GAAG;IAC7M;GACQ"}
1
+ {"version":3,"file":"oauth-callback.js","names":[],"sources":["../../../src/components-page/oauth-callback.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { KnownError } from \"@hexclave/shared\";\nimport { captureError } from \"@hexclave/shared/dist/utils/errors\";\nimport { runAsynchronously } from \"@hexclave/shared/dist/utils/promises\";\nimport { Spinner, cn } from \"@hexclave/ui\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { useStackApp } from \"..\";\nimport { MaybeFullPage } from \"../components/elements/maybe-full-page\";\nimport { StyledLink } from \"../components/link\";\nimport { hexclaveAppInternalsSymbol } from \"../lib/hexclave-app\";\nimport { useTranslation } from \"../lib/translations\";\n\nexport function OAuthCallback({ fullPage }: { fullPage?: boolean }) {\n const { t } = useTranslation();\n const app = useStackApp();\n const called = useRef(false);\n const [showRedirectLink, setShowRedirectLink] = useState(false);\n const [redirectUrl, setRedirectUrl] = useState<string | null>(null);\n\n useEffect(() => runAsynchronously(async () => {\n if (called.current) return;\n called.current = true;\n const redirectToError = async (url: URL) => {\n const urlString = url.toString();\n if (app[hexclaveAppInternalsSymbol].getRedirectMethod() === \"none\") {\n setRedirectUrl(urlString);\n return;\n }\n await app[hexclaveAppInternalsSymbol].redirectToUrl(urlString, { replace: true });\n };\n try {\n const hasRedirected = await app.callOAuthCallback();\n if (!hasRedirected) {\n await app.redirectToSignIn({ noRedirectBack: true });\n }\n } catch (e) {\n if (KnownError.isKnownError(e)) {\n const errorUrl = new URL(app.urls.error, window.location.href);\n errorUrl.searchParams.set(\"errorCode\", e.errorCode);\n errorUrl.searchParams.set(\"message\", e.message);\n errorUrl.searchParams.set(\"details\", JSON.stringify(e.details ?? {}));\n await redirectToError(errorUrl);\n return;\n }\n captureError(\"<OAuthCallback />\", e);\n await redirectToError(new URL(app.urls.error, window.location.href));\n }\n }), [app]);\n\n useEffect(() => {\n setTimeout(() => setShowRedirectLink(true), 3000);\n }, []);\n\n return (\n <MaybeFullPage\n fullPage={fullPage ?? false}\n containerClassName=\"flex items-center justify-center\"\n >\n <div\n className={cn(\n \"text-center justify-center items-center stack-scope flex flex-col gap-4 max-w-[380px]\",\n fullPage ? \"p-4\" : \"p-0\"\n )}\n >\n <div className=\"flex flex-col justify-center items-center gap-4\">\n <Spinner size={20} />\n </div>\n {showRedirectLink || redirectUrl != null ? <p>{t('If you are not redirected automatically, ')}<StyledLink className=\"whitespace-nowrap\" href={redirectUrl ?? app.urls.home}>{t(\"click here\")}</StyledLink></p> : null}\n </div>\n </MaybeFullPage>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,SAAgB,cAAc,EAAE,YAAoC;CAClE,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,MAAM,aAAa;CACzB,MAAM,SAAS,OAAO,MAAM;CAC5B,MAAM,CAAC,kBAAkB,uBAAuB,SAAS,MAAM;CAC/D,MAAM,CAAC,aAAa,kBAAkB,SAAwB,KAAK;AAEnE,iBAAgB,kBAAkB,YAAY;AAC5C,MAAI,OAAO,QAAS;AACpB,SAAO,UAAU;EACjB,MAAM,kBAAkB,OAAO,QAAa;GAC1C,MAAM,YAAY,IAAI,UAAU;AAChC,OAAI,IAAI,4BAA4B,mBAAmB,KAAK,QAAQ;AAClE,mBAAe,UAAU;AACzB;;AAEF,SAAM,IAAI,4BAA4B,cAAc,WAAW,EAAE,SAAS,MAAM,CAAC;;AAEnF,MAAI;AAEF,OAAI,CADkB,MAAM,IAAI,mBAAmB,CAEjD,OAAM,IAAI,iBAAiB,EAAE,gBAAgB,MAAM,CAAC;WAE/C,GAAG;AACV,OAAI,WAAW,aAAa,EAAE,EAAE;IAC9B,MAAM,WAAW,IAAI,IAAI,IAAI,KAAK,OAAO,OAAO,SAAS,KAAK;AAC9D,aAAS,aAAa,IAAI,aAAa,EAAE,UAAU;AACnD,aAAS,aAAa,IAAI,WAAW,EAAE,QAAQ;AAC/C,aAAS,aAAa,IAAI,WAAW,KAAK,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;AACrE,UAAM,gBAAgB,SAAS;AAC/B;;AAEF,gBAAa,qBAAqB,EAAE;AACpC,SAAM,gBAAgB,IAAI,IAAI,IAAI,KAAK,OAAO,OAAO,SAAS,KAAK,CAAC;;GAEtE,EAAE,CAAC,IAAI,CAAC;AAEV,iBAAgB;AACd,mBAAiB,oBAAoB,KAAK,EAAE,IAAK;IAChD,EAAE,CAAC;AAEN,QACE,oBAAC;EACC,UAAU,YAAY;EACtB,oBAAmB;YAEnB,qBAAC;GACC,WAAW,GACT,yFACA,WAAW,QAAQ,MACpB;cAED,oBAAC;IAAI,WAAU;cACb,oBAAC,WAAQ,MAAM,KAAM;KACjB,EACL,oBAAoB,eAAe,OAAO,qBAAC,kBAAG,EAAE,4CAA4C,EAAC,oBAAC;IAAW,WAAU;IAAoB,MAAM,eAAe,IAAI,KAAK;cAAO,EAAE,aAAa;KAAc,IAAI,GAAG;IAC7M;GACQ"}
@@ -1,31 +1,31 @@
1
1
  'use client';
2
2
 
3
+ import { yupResolver } from "@hookform/resolvers/yup";
4
+ import { strictEmailSchema, yupObject } from "@hexclave/shared/dist/schema-fields";
3
5
  import { runAsynchronously, runAsynchronouslyWithAlert } from "@hexclave/shared/dist/utils/promises";
4
6
  import { Button, Input, Typography } from "@hexclave/ui";
5
7
  import { useState } from "react";
8
+ import { useForm } from "react-hook-form";
6
9
  import { useStackApp, useUser } from "../index.js";
10
+ import { FormWarningText } from "../components/elements/form-warning.js";
7
11
  import { useTranslation } from "../lib/translations.js";
8
12
  import { jsx, jsxs } from "react/jsx-runtime";
9
13
  import { MessageCard as MessageCard$1 } from "../components/message-cards/message-card.js";
10
- import { yupResolver } from "@hookform/resolvers/yup";
11
- import { strictEmailSchema, yupObject } from "@hexclave/shared/dist/schema-fields";
12
- import { useForm } from "react-hook-form";
13
- import { FormWarningText } from "../components/elements/form-warning.js";
14
14
 
15
15
  //#region src/components-page/onboarding.tsx
16
16
  function Onboarding(props) {
17
17
  const { t } = useTranslation();
18
- const stackApp = useStackApp();
18
+ const hexclaveApp = useStackApp();
19
19
  const user = useUser({
20
20
  or: "return-null",
21
21
  includeRestricted: true
22
22
  });
23
23
  if (user && !user.isRestricted) {
24
- runAsynchronously(stackApp.redirectToAfterSignIn());
24
+ runAsynchronously(hexclaveApp.redirectToAfterSignIn());
25
25
  return null;
26
26
  }
27
27
  if (!user || user.isAnonymous) {
28
- runAsynchronously(stackApp.redirectToSignIn());
28
+ runAsynchronously(hexclaveApp.redirectToSignIn());
29
29
  return null;
30
30
  }
31
31
  if (user.restrictedReason?.type === "email_not_verified") {
@@ -1 +1 @@
1
- {"version":3,"file":"onboarding.js","names":["MessageCard"],"sources":["../../../src/components-page/onboarding.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { strictEmailSchema, yupObject } from \"@hexclave/shared/dist/schema-fields\";\nimport { runAsynchronously, runAsynchronouslyWithAlert } from \"@hexclave/shared/dist/utils/promises\";\nimport { Button, Input, Typography } from \"@hexclave/ui\";\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { useStackApp, useUser } from \"..\";\nimport { FormWarningText } from \"../components/elements/form-warning\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { useTranslation } from \"../lib/translations\";\n\nexport function Onboarding(props: {\n fullPage?: boolean,\n}) {\n const { t } = useTranslation();\n const stackApp = useStackApp();\n const user = useUser({ or: \"return-null\", includeRestricted: true });\n\n // If user is not restricted anymore, redirect to the intended destination\n // redirectToAfterSignIn automatically checks for after_auth_return_to in the URL\n if (user && !user.isRestricted) {\n runAsynchronously(stackApp.redirectToAfterSignIn());\n // TODO: This should return a loading indicator, not just null\n return null;\n }\n\n // If user is anonymous or not logged in, redirect to sign-in\n if (!user || user.isAnonymous) {\n runAsynchronously(stackApp.redirectToSignIn());\n // TODO: This should return a loading indicator, not just null\n return null;\n }\n\n // User is restricted - show appropriate onboarding step based on restricted reason\n const restrictedReason = user.restrictedReason;\n\n if (restrictedReason?.type === \"email_not_verified\") {\n // Check if user has a primary email\n const hasPrimaryEmail = !!user.primaryEmail;\n\n if (!hasPrimaryEmail) {\n // User needs to add an email first\n return <AddEmailForm fullPage={props.fullPage} />;\n }\n\n // User has email but it's not verified\n return <VerifyEmailScreen user={user} email={user.primaryEmail} fullPage={props.fullPage} />;\n }\n\n // Unknown restricted reason - show generic message\n return (\n <MessageCard\n title={t(\"Complete your account setup\")}\n fullPage={!!props.fullPage}\n secondaryButtonText={t(\"Sign out\")}\n secondaryAction={async () => {\n await user.signOut();\n }}\n >\n <p>{t(\"You have not yet completed your account setup. Please reach out to support if you believe this is an error.\")}</p>\n </MessageCard>\n );\n}\n\nfunction AddEmailForm(props: {\n fullPage?: boolean,\n onEmailAdded?: () => void,\n}) {\n const { t } = useTranslation();\n const user = useUser({ or: \"throw\", includeRestricted: true });\n const stackApp = useStackApp();\n const [loading, setLoading] = useState(false);\n\n const emailSchema = yupObject({\n email: strictEmailSchema(t('Please enter a valid email address'))\n .defined()\n .nonEmpty(t('Email is required')),\n });\n\n const { register, handleSubmit, formState: { errors } } = useForm({\n resolver: yupResolver(emailSchema)\n });\n\n const onSubmit = async (data: yup.InferType<typeof emailSchema>) => {\n setLoading(true);\n try {\n await user.update({ primaryEmail: data.email });\n props.onEmailAdded?.();\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <MessageCard\n title={t(\"Add your email address\")}\n fullPage={!!props.fullPage}\n secondaryButtonText={t(\"Sign out\")}\n secondaryAction={async () => {\n await user.signOut();\n }}\n >\n <Typography className=\"mb-4\">\n {t(\"Please add an email address to complete your account setup. We'll send you a verification email.\")}\n </Typography>\n <form\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n className='flex flex-col gap-2'\n >\n <Input\n {...register(\"email\")}\n placeholder={t(\"Enter your email\")}\n type=\"email\"\n />\n {errors.email && <FormWarningText text={errors.email.message} />}\n <Button type=\"submit\" loading={loading} className=\"w-full\">\n {t(\"Continue\")}\n </Button>\n </form>\n </MessageCard>\n );\n}\n\nfunction VerifyEmailScreen(props: {\n user: NonNullable<ReturnType<typeof useUser>>,\n email: string,\n fullPage?: boolean,\n}) {\n const { t } = useTranslation();\n const { user, email } = props;\n const [changingEmail, setChangingEmail] = useState(false);\n\n if (changingEmail) {\n return <AddEmailForm fullPage={props.fullPage} onEmailAdded={() => setChangingEmail(false)} />;\n }\n\n return (\n <MessageCard\n title={t(\"Please check your email inbox\")}\n fullPage={!!props.fullPage}\n primaryButtonText={t(\"Resend verification email\")}\n primaryAction={async () => {\n await user.sendVerificationEmail();\n }}\n secondaryButtonText={t(\"Sign out\")}\n secondaryAction={async () => {\n await user.signOut();\n }}\n >\n <Typography>\n {t(\"Please verify your email address \")}\n <span className=\"font-semibold\">{email}</span>\n {\" (\"}\n <button\n type=\"button\"\n className=\"text-primary hover:underline\"\n onClick={() => setChangingEmail(true)}\n >\n {t(\"change\")}\n </button>\n {\"). \"}\n {t(\"Click the button below to resend the verification link.\")}\n </Typography>\n </MessageCard>\n );\n}\n\n"],"mappings":"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"}
1
+ {"version":3,"file":"onboarding.js","names":["MessageCard"],"sources":["../../../src/components-page/onboarding.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { strictEmailSchema, yupObject } from \"@hexclave/shared/dist/schema-fields\";\nimport { runAsynchronously, runAsynchronouslyWithAlert } from \"@hexclave/shared/dist/utils/promises\";\nimport { Button, Input, Typography } from \"@hexclave/ui\";\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { useStackApp, useUser } from \"..\";\nimport { FormWarningText } from \"../components/elements/form-warning\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { useTranslation } from \"../lib/translations\";\n\nexport function Onboarding(props: {\n fullPage?: boolean,\n}) {\n const { t } = useTranslation();\n const hexclaveApp = useStackApp();\n const user = useUser({ or: \"return-null\", includeRestricted: true });\n\n // If user is not restricted anymore, redirect to the intended destination\n // redirectToAfterSignIn automatically checks for after_auth_return_to in the URL\n if (user && !user.isRestricted) {\n runAsynchronously(hexclaveApp.redirectToAfterSignIn());\n // TODO: This should return a loading indicator, not just null\n return null;\n }\n\n // If user is anonymous or not logged in, redirect to sign-in\n if (!user || user.isAnonymous) {\n runAsynchronously(hexclaveApp.redirectToSignIn());\n // TODO: This should return a loading indicator, not just null\n return null;\n }\n\n // User is restricted - show appropriate onboarding step based on restricted reason\n const restrictedReason = user.restrictedReason;\n\n if (restrictedReason?.type === \"email_not_verified\") {\n // Check if user has a primary email\n const hasPrimaryEmail = !!user.primaryEmail;\n\n if (!hasPrimaryEmail) {\n // User needs to add an email first\n return <AddEmailForm fullPage={props.fullPage} />;\n }\n\n // User has email but it's not verified\n return <VerifyEmailScreen user={user} email={user.primaryEmail} fullPage={props.fullPage} />;\n }\n\n // Unknown restricted reason - show generic message\n return (\n <MessageCard\n title={t(\"Complete your account setup\")}\n fullPage={!!props.fullPage}\n secondaryButtonText={t(\"Sign out\")}\n secondaryAction={async () => {\n await user.signOut();\n }}\n >\n <p>{t(\"You have not yet completed your account setup. Please reach out to support if you believe this is an error.\")}</p>\n </MessageCard>\n );\n}\n\nfunction AddEmailForm(props: {\n fullPage?: boolean,\n onEmailAdded?: () => void,\n}) {\n const { t } = useTranslation();\n const user = useUser({ or: \"throw\", includeRestricted: true });\n const hexclaveApp = useStackApp();\n const [loading, setLoading] = useState(false);\n\n const emailSchema = yupObject({\n email: strictEmailSchema(t('Please enter a valid email address'))\n .defined()\n .nonEmpty(t('Email is required')),\n });\n\n const { register, handleSubmit, formState: { errors } } = useForm({\n resolver: yupResolver(emailSchema)\n });\n\n const onSubmit = async (data: yup.InferType<typeof emailSchema>) => {\n setLoading(true);\n try {\n await user.update({ primaryEmail: data.email });\n props.onEmailAdded?.();\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <MessageCard\n title={t(\"Add your email address\")}\n fullPage={!!props.fullPage}\n secondaryButtonText={t(\"Sign out\")}\n secondaryAction={async () => {\n await user.signOut();\n }}\n >\n <Typography className=\"mb-4\">\n {t(\"Please add an email address to complete your account setup. We'll send you a verification email.\")}\n </Typography>\n <form\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n className='flex flex-col gap-2'\n >\n <Input\n {...register(\"email\")}\n placeholder={t(\"Enter your email\")}\n type=\"email\"\n />\n {errors.email && <FormWarningText text={errors.email.message} />}\n <Button type=\"submit\" loading={loading} className=\"w-full\">\n {t(\"Continue\")}\n </Button>\n </form>\n </MessageCard>\n );\n}\n\nfunction VerifyEmailScreen(props: {\n user: NonNullable<ReturnType<typeof useUser>>,\n email: string,\n fullPage?: boolean,\n}) {\n const { t } = useTranslation();\n const { user, email } = props;\n const [changingEmail, setChangingEmail] = useState(false);\n\n if (changingEmail) {\n return <AddEmailForm fullPage={props.fullPage} onEmailAdded={() => setChangingEmail(false)} />;\n }\n\n return (\n <MessageCard\n title={t(\"Please check your email inbox\")}\n fullPage={!!props.fullPage}\n primaryButtonText={t(\"Resend verification email\")}\n primaryAction={async () => {\n await user.sendVerificationEmail();\n }}\n secondaryButtonText={t(\"Sign out\")}\n secondaryAction={async () => {\n await user.signOut();\n }}\n >\n <Typography>\n {t(\"Please verify your email address \")}\n <span className=\"font-semibold\">{email}</span>\n {\" (\"}\n <button\n type=\"button\"\n className=\"text-primary hover:underline\"\n onClick={() => setChangingEmail(true)}\n >\n {t(\"change\")}\n </button>\n {\"). \"}\n {t(\"Click the button below to resend the verification link.\")}\n </Typography>\n </MessageCard>\n );\n}\n\n"],"mappings":";;;;;;;;;;;;;;;AAmBA,SAAgB,WAAW,OAExB;CACD,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,cAAc,aAAa;CACjC,MAAM,OAAO,QAAQ;EAAE,IAAI;EAAe,mBAAmB;EAAM,CAAC;AAIpE,KAAI,QAAQ,CAAC,KAAK,cAAc;AAC9B,oBAAkB,YAAY,uBAAuB,CAAC;AAEtD,SAAO;;AAIT,KAAI,CAAC,QAAQ,KAAK,aAAa;AAC7B,oBAAkB,YAAY,kBAAkB,CAAC;AAEjD,SAAO;;AAMT,KAFyB,KAAK,kBAER,SAAS,sBAAsB;AAInD,MAAI,CAFoB,CAAC,CAAC,KAAK,aAI7B,QAAO,oBAAC,gBAAa,UAAU,MAAM,WAAY;AAInD,SAAO,oBAAC;GAAwB;GAAM,OAAO,KAAK;GAAc,UAAU,MAAM;IAAY;;AAI9F,QACE,oBAACA;EACC,OAAO,EAAE,8BAA8B;EACvC,UAAU,CAAC,CAAC,MAAM;EAClB,qBAAqB,EAAE,WAAW;EAClC,iBAAiB,YAAY;AAC3B,SAAM,KAAK,SAAS;;YAGtB,oBAAC,iBAAG,EAAE,8GAA8G,GAAK;GAC7G;;AAIlB,SAAS,aAAa,OAGnB;CACD,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,OAAO,QAAQ;EAAE,IAAI;EAAS,mBAAmB;EAAM,CAAC;AAC1C,cAAa;CACjC,MAAM,CAAC,SAAS,cAAc,SAAS,MAAM;CAQ7C,MAAM,EAAE,UAAU,cAAc,WAAW,EAAE,aAAa,QAAQ,EAChE,UAAU,YAPQ,UAAU,EAC5B,OAAO,kBAAkB,EAAE,qCAAqC,CAAC,CAC9D,SAAS,CACT,SAAS,EAAE,oBAAoB,CAAC,EACpC,CAAC,CAGkC,EACnC,CAAC;CAEF,MAAM,WAAW,OAAO,SAA4C;AAClE,aAAW,KAAK;AAChB,MAAI;AACF,SAAM,KAAK,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC;AAC/C,SAAM,gBAAgB;YACd;AACR,cAAW,MAAM;;;AAIrB,QACE,qBAACA;EACC,OAAO,EAAE,yBAAyB;EAClC,UAAU,CAAC,CAAC,MAAM;EAClB,qBAAqB,EAAE,WAAW;EAClC,iBAAiB,YAAY;AAC3B,SAAM,KAAK,SAAS;;aAGtB,oBAAC;GAAW,WAAU;aACnB,EAAE,mGAAmG;IAC3F,EACb,qBAAC;GACC,WAAU,MAAK,2BAA2B,aAAa,SAAS,CAAC,EAAE,CAAC;GACpE;GACA,WAAU;;IAEV,oBAAC;KACC,GAAI,SAAS,QAAQ;KACrB,aAAa,EAAE,mBAAmB;KAClC,MAAK;MACL;IACD,OAAO,SAAS,oBAAC,mBAAgB,MAAM,OAAO,MAAM,UAAW;IAChE,oBAAC;KAAO,MAAK;KAAkB;KAAS,WAAU;eAC/C,EAAE,WAAW;MACP;;IACJ;GACK;;AAIlB,SAAS,kBAAkB,OAIxB;CACD,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,EAAE,MAAM,UAAU;CACxB,MAAM,CAAC,eAAe,oBAAoB,SAAS,MAAM;AAEzD,KAAI,cACF,QAAO,oBAAC;EAAa,UAAU,MAAM;EAAU,oBAAoB,iBAAiB,MAAM;GAAI;AAGhG,QACE,oBAACA;EACC,OAAO,EAAE,gCAAgC;EACzC,UAAU,CAAC,CAAC,MAAM;EAClB,mBAAmB,EAAE,4BAA4B;EACjD,eAAe,YAAY;AACzB,SAAM,KAAK,uBAAuB;;EAEpC,qBAAqB,EAAE,WAAW;EAClC,iBAAiB,YAAY;AAC3B,SAAM,KAAK,SAAS;;YAGtB,qBAAC;GACE,EAAE,oCAAoC;GACvC,oBAAC;IAAK,WAAU;cAAiB;KAAa;GAC7C;GACD,oBAAC;IACC,MAAK;IACL,WAAU;IACV,eAAe,iBAAiB,KAAK;cAEpC,EAAE,SAAS;KACL;GACR;GACA,EAAE,0DAA0D;MAClD;GACD"}
@@ -1,23 +1,23 @@
1
1
  'use client';
2
2
 
3
+ import { yupResolver } from "@hookform/resolvers/yup";
4
+ import { passwordSchema, yupObject, yupString } from "@hexclave/shared/dist/schema-fields";
3
5
  import { runAsynchronouslyWithAlert } from "@hexclave/shared/dist/utils/promises";
4
6
  import { Button, Label, PasswordInput, Typography, cn } from "@hexclave/ui";
5
7
  import { useState } from "react";
8
+ import { useForm } from "react-hook-form";
6
9
  import { useStackApp } from "../index.js";
7
- import { MaybeFullPage } from "../components/elements/maybe-full-page.js";
10
+ import { FormWarningText } from "../components/elements/form-warning.js";
8
11
  import { useTranslation } from "../lib/translations.js";
9
12
  import { jsx, jsxs } from "react/jsx-runtime";
10
- import { PredefinedMessageCard } from "../components/message-cards/predefined-message-card.js";
11
- import { MessageCard as MessageCard$1 } from "../components/message-cards/message-card.js";
12
- import { KnownErrors } from "@hexclave/shared";
13
- import { yupResolver } from "@hookform/resolvers/yup";
14
- import { passwordSchema, yupObject, yupString } from "@hexclave/shared/dist/schema-fields";
15
- import { useForm } from "react-hook-form";
16
- import { FormWarningText } from "../components/elements/form-warning.js";
17
- import { cacheFunction } from "@hexclave/shared/dist/utils/caches";
18
13
  import { getPasswordError } from "@hexclave/shared/dist/helpers/password";
19
- import { use } from "@hexclave/shared/dist/utils/react";
20
14
  import * as yup from "yup";
15
+ import { KnownErrors } from "@hexclave/shared";
16
+ import { MaybeFullPage } from "../components/elements/maybe-full-page.js";
17
+ import { use } from "@hexclave/shared/dist/utils/react";
18
+ import { MessageCard as MessageCard$1 } from "../components/message-cards/message-card.js";
19
+ import { PredefinedMessageCard } from "../components/message-cards/predefined-message-card.js";
20
+ import { cacheFunction } from "@hexclave/shared/dist/utils/caches";
21
21
 
22
22
  //#region src/components-page/password-reset.tsx
23
23
  function PasswordResetForm(props) {
@@ -33,7 +33,7 @@ function PasswordResetForm(props) {
33
33
  }),
34
34
  passwordRepeat: yupString().nullable().oneOf([yup.ref("password"), null], t("Passwords do not match")).defined().nonEmpty(t("Please repeat your password"))
35
35
  })) });
36
- const stackApp = useStackApp();
36
+ const hexclaveApp = useStackApp();
37
37
  const [finished, setFinished] = useState(false);
38
38
  const [resetError, setResetError] = useState(false);
39
39
  const [loading, setLoading] = useState(false);
@@ -41,7 +41,7 @@ function PasswordResetForm(props) {
41
41
  setLoading(true);
42
42
  try {
43
43
  const { password } = data;
44
- if ((await stackApp.resetPassword({
44
+ if ((await hexclaveApp.resetPassword({
45
45
  password,
46
46
  code: props.code
47
47
  })).status === "error") {
@@ -118,12 +118,12 @@ function PasswordResetForm(props) {
118
118
  })
119
119
  });
120
120
  }
121
- const cachedVerifyPasswordResetCode = cacheFunction(async (stackApp, code) => {
122
- return await stackApp.verifyPasswordResetCode(code);
121
+ const cachedVerifyPasswordResetCode = cacheFunction(async (hexclaveApp, code) => {
122
+ return await hexclaveApp.verifyPasswordResetCode(code);
123
123
  });
124
124
  function PasswordReset({ searchParams, fullPage = false }) {
125
125
  const { t } = useTranslation();
126
- const stackApp = useStackApp();
126
+ const hexclaveApp = useStackApp();
127
127
  const invalidJsx = /* @__PURE__ */ jsx(MessageCard$1, {
128
128
  title: t("Invalid Password Reset Link"),
129
129
  fullPage,
@@ -141,7 +141,7 @@ function PasswordReset({ searchParams, fullPage = false }) {
141
141
  });
142
142
  const code = searchParams.code;
143
143
  if (!code) return invalidJsx;
144
- const result = use(cachedVerifyPasswordResetCode(stackApp, code));
144
+ const result = use(cachedVerifyPasswordResetCode(hexclaveApp, code));
145
145
  if (result.status === "error") if (KnownErrors.VerificationCodeNotFound.isInstance(result.error)) return invalidJsx;
146
146
  else if (KnownErrors.VerificationCodeExpired.isInstance(result.error)) return expiredJsx;
147
147
  else if (KnownErrors.VerificationCodeAlreadyUsed.isInstance(result.error)) return usedJsx;
@@ -1 +1 @@
1
- {"version":3,"file":"password-reset.js","names":["MessageCard"],"sources":["../../../src/components-page/password-reset.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { KnownErrors } from \"@hexclave/shared\";\nimport { getPasswordError } from \"@hexclave/shared/dist/helpers/password\";\nimport { passwordSchema, yupObject, yupString } from \"@hexclave/shared/dist/schema-fields\";\nimport { cacheFunction } from \"@hexclave/shared/dist/utils/caches\";\nimport { runAsynchronouslyWithAlert } from \"@hexclave/shared/dist/utils/promises\";\nimport { use } from \"@hexclave/shared/dist/utils/react\";\nimport { Button, Label, PasswordInput, Typography, cn } from \"@hexclave/ui\";\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { StackClientApp, useStackApp } from \"..\";\nimport { FormWarningText } from \"../components/elements/form-warning\";\nimport { MaybeFullPage } from \"../components/elements/maybe-full-page\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\nimport { useTranslation } from \"../lib/translations\";\n\nexport default function PasswordResetForm(props: {\n code: string,\n fullPage?: boolean,\n}) {\n const { t } = useTranslation();\n\n const schema = yupObject({\n password: passwordSchema.defined(t(\"Please enter your password\")).nonEmpty(t(\"Please enter your password\")).test({\n name: 'is-valid-password',\n test: (value, ctx) => {\n const error = getPasswordError(value);\n if (error) {\n return ctx.createError({ message: error.message });\n } else {\n return true;\n }\n }\n }),\n passwordRepeat: yupString().nullable().oneOf([yup.ref('password'), null], t(\"Passwords do not match\")).defined().nonEmpty(t(\"Please repeat your password\"))\n });\n\n const { register, handleSubmit, formState: { errors }, clearErrors } = useForm({\n resolver: yupResolver(schema)\n });\n const stackApp = useStackApp();\n const [finished, setFinished] = useState(false);\n const [resetError, setResetError] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\n setLoading(true);\n try {\n const { password } = data;\n const result = await stackApp.resetPassword({ password, code: props.code });\n if (result.status === 'error') {\n setResetError(true);\n return;\n }\n\n setFinished(true);\n } finally {\n setLoading(false);\n }\n };\n\n if (finished) {\n return <PredefinedMessageCard type='passwordReset' fullPage={!!props.fullPage} />;\n }\n\n if (resetError) {\n return (\n <MessageCard title={t(\"Failed to reset password\")} fullPage={!!props.fullPage}>\n {t(\"Failed to reset password. Please request a new password reset link\")}\n </MessageCard>\n );\n }\n\n\n return (\n <MaybeFullPage fullPage={!!props.fullPage}>\n <div className={cn(\n \"flex flex-col items-stretch max-w-[380px] flex-basis-[380px]\",\n props.fullPage ? \"p-4\" : \"p-0\"\n )}>\n <div className=\"text-center mb-6\">\n <Typography type='h2'>{t(\"Reset Your Password\")}</Typography>\n </div>\n\n <form\n className=\"flex flex-col items-stretch\"\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n >\n <Label htmlFor=\"password\" className=\"mb-1\">{t(\"New Password\")}</Label>\n <PasswordInput\n id=\"password\"\n autoComplete=\"new-password\"\n {...register('password')}\n onChange={() => {\n clearErrors('password');\n clearErrors('passwordRepeat');\n }}\n />\n <FormWarningText text={errors.password?.message?.toString()} />\n\n <Label htmlFor=\"repeat-password\" className=\"mt-4 mb-1\">{t(\"Repeat New Password\")}</Label>\n <PasswordInput\n id=\"repeat-password\"\n autoComplete=\"new-password\"\n {...register('passwordRepeat')}\n onChange={() => {\n clearErrors('password');\n clearErrors('passwordRepeat');\n }}\n />\n <FormWarningText text={errors.passwordRepeat?.message?.toString()} />\n\n <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n {t(\"Reset Password\")}\n </Button>\n </form>\n </div>\n </MaybeFullPage>\n );\n}\n\n\nconst cachedVerifyPasswordResetCode = cacheFunction(async (stackApp: StackClientApp<true>, code: string) => {\n return await stackApp.verifyPasswordResetCode(code);\n});\n\nexport function PasswordReset({\n searchParams,\n fullPage = false,\n}: {\n searchParams: Record<string, string>,\n fullPage?: boolean,\n}) {\n const { t } = useTranslation();\n const stackApp = useStackApp();\n\n const invalidJsx = (\n <MessageCard title={t(\"Invalid Password Reset Link\")} fullPage={fullPage}>\n <Typography>{t(\"Please double check if you have the correct password reset link.\")}</Typography>\n </MessageCard>\n );\n\n const expiredJsx = (\n <MessageCard title={t(\"Expired Password Reset Link\")} fullPage={fullPage}>\n <Typography>{t(\"Your password reset link has expired. Please request a new password reset link from the login page.\")}</Typography>\n </MessageCard>\n );\n\n const usedJsx = (\n <MessageCard title={t(\"Used Password Reset Link\")} fullPage={fullPage}>\n <Typography>{t(\"This password reset link has already been used. If you need to reset your password again, please request a new password reset link from the login page.\")}</Typography>\n </MessageCard>\n );\n\n const code = searchParams.code;\n if (!code) {\n return invalidJsx;\n }\n\n const result = use(cachedVerifyPasswordResetCode(stackApp, code));\n\n if (result.status === 'error') {\n if (KnownErrors.VerificationCodeNotFound.isInstance(result.error)) {\n return invalidJsx;\n } else if (KnownErrors.VerificationCodeExpired.isInstance(result.error)) {\n return expiredJsx;\n } else if (KnownErrors.VerificationCodeAlreadyUsed.isInstance(result.error)) {\n return usedJsx;\n } else {\n throw result.error;\n }\n }\n\n return <PasswordResetForm code={code} fullPage={fullPage} />;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"password-reset.js","names":["MessageCard"],"sources":["../../../src/components-page/password-reset.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { KnownErrors } from \"@hexclave/shared\";\nimport { getPasswordError } from \"@hexclave/shared/dist/helpers/password\";\nimport { passwordSchema, yupObject, yupString } from \"@hexclave/shared/dist/schema-fields\";\nimport { cacheFunction } from \"@hexclave/shared/dist/utils/caches\";\nimport { runAsynchronouslyWithAlert } from \"@hexclave/shared/dist/utils/promises\";\nimport { use } from \"@hexclave/shared/dist/utils/react\";\nimport { Button, Label, PasswordInput, Typography, cn } from \"@hexclave/ui\";\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { StackClientApp, useStackApp } from \"..\";\nimport { FormWarningText } from \"../components/elements/form-warning\";\nimport { MaybeFullPage } from \"../components/elements/maybe-full-page\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\nimport { useTranslation } from \"../lib/translations\";\n\nexport default function PasswordResetForm(props: {\n code: string,\n fullPage?: boolean,\n}) {\n const { t } = useTranslation();\n\n const schema = yupObject({\n password: passwordSchema.defined(t(\"Please enter your password\")).nonEmpty(t(\"Please enter your password\")).test({\n name: 'is-valid-password',\n test: (value, ctx) => {\n const error = getPasswordError(value);\n if (error) {\n return ctx.createError({ message: error.message });\n } else {\n return true;\n }\n }\n }),\n passwordRepeat: yupString().nullable().oneOf([yup.ref('password'), null], t(\"Passwords do not match\")).defined().nonEmpty(t(\"Please repeat your password\"))\n });\n\n const { register, handleSubmit, formState: { errors }, clearErrors } = useForm({\n resolver: yupResolver(schema)\n });\n const hexclaveApp = useStackApp();\n const [finished, setFinished] = useState(false);\n const [resetError, setResetError] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\n setLoading(true);\n try {\n const { password } = data;\n const result = await hexclaveApp.resetPassword({ password, code: props.code });\n if (result.status === 'error') {\n setResetError(true);\n return;\n }\n\n setFinished(true);\n } finally {\n setLoading(false);\n }\n };\n\n if (finished) {\n return <PredefinedMessageCard type='passwordReset' fullPage={!!props.fullPage} />;\n }\n\n if (resetError) {\n return (\n <MessageCard title={t(\"Failed to reset password\")} fullPage={!!props.fullPage}>\n {t(\"Failed to reset password. Please request a new password reset link\")}\n </MessageCard>\n );\n }\n\n\n return (\n <MaybeFullPage fullPage={!!props.fullPage}>\n <div className={cn(\n \"flex flex-col items-stretch max-w-[380px] flex-basis-[380px]\",\n props.fullPage ? \"p-4\" : \"p-0\"\n )}>\n <div className=\"text-center mb-6\">\n <Typography type='h2'>{t(\"Reset Your Password\")}</Typography>\n </div>\n\n <form\n className=\"flex flex-col items-stretch\"\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n >\n <Label htmlFor=\"password\" className=\"mb-1\">{t(\"New Password\")}</Label>\n <PasswordInput\n id=\"password\"\n autoComplete=\"new-password\"\n {...register('password')}\n onChange={() => {\n clearErrors('password');\n clearErrors('passwordRepeat');\n }}\n />\n <FormWarningText text={errors.password?.message?.toString()} />\n\n <Label htmlFor=\"repeat-password\" className=\"mt-4 mb-1\">{t(\"Repeat New Password\")}</Label>\n <PasswordInput\n id=\"repeat-password\"\n autoComplete=\"new-password\"\n {...register('passwordRepeat')}\n onChange={() => {\n clearErrors('password');\n clearErrors('passwordRepeat');\n }}\n />\n <FormWarningText text={errors.passwordRepeat?.message?.toString()} />\n\n <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n {t(\"Reset Password\")}\n </Button>\n </form>\n </div>\n </MaybeFullPage>\n );\n}\n\n\nconst cachedVerifyPasswordResetCode = cacheFunction(async (hexclaveApp: StackClientApp<true>, code: string) => {\n return await hexclaveApp.verifyPasswordResetCode(code);\n});\n\nexport function PasswordReset({\n searchParams,\n fullPage = false,\n}: {\n searchParams: Record<string, string>,\n fullPage?: boolean,\n}) {\n const { t } = useTranslation();\n const hexclaveApp = useStackApp();\n\n const invalidJsx = (\n <MessageCard title={t(\"Invalid Password Reset Link\")} fullPage={fullPage}>\n <Typography>{t(\"Please double check if you have the correct password reset link.\")}</Typography>\n </MessageCard>\n );\n\n const expiredJsx = (\n <MessageCard title={t(\"Expired Password Reset Link\")} fullPage={fullPage}>\n <Typography>{t(\"Your password reset link has expired. Please request a new password reset link from the login page.\")}</Typography>\n </MessageCard>\n );\n\n const usedJsx = (\n <MessageCard title={t(\"Used Password Reset Link\")} fullPage={fullPage}>\n <Typography>{t(\"This password reset link has already been used. If you need to reset your password again, please request a new password reset link from the login page.\")}</Typography>\n </MessageCard>\n );\n\n const code = searchParams.code;\n if (!code) {\n return invalidJsx;\n }\n\n const result = use(cachedVerifyPasswordResetCode(hexclaveApp, code));\n\n if (result.status === 'error') {\n if (KnownErrors.VerificationCodeNotFound.isInstance(result.error)) {\n return invalidJsx;\n } else if (KnownErrors.VerificationCodeExpired.isInstance(result.error)) {\n return expiredJsx;\n } else if (KnownErrors.VerificationCodeAlreadyUsed.isInstance(result.error)) {\n return usedJsx;\n } else {\n throw result.error;\n }\n }\n\n return <PasswordResetForm code={code} fullPage={fullPage} />;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sign-in.js","names":[],"sources":["../../../src/components-page/sign-in.tsx"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\nimport { AuthPage } from \"./auth-page\";\n\nexport function SignIn(props: {\n fullPage?: boolean,\n automaticRedirect?: boolean,\n extraInfo?: React.ReactNode,\n firstTab?: 'magic-link' | 'password',\n mockProject?: {\n config: {\n signUpEnabled: boolean,\n credentialEnabled: boolean,\n passkeyEnabled: boolean,\n magicLinkEnabled: boolean,\n oauthProviders: {\n id: string,\n }[],\n },\n },\n}) {\n return (\n <AuthPage\n fullPage={!!props.fullPage}\n type=\"sign-in\"\n automaticRedirect={!!props.automaticRedirect}\n extraInfo={props.extraInfo}\n firstTab={props.firstTab}\n mockProject={props.mockProject}\n />\n );\n}\n"],"mappings":";;;;AAMA,SAAgB,OAAO,OAgBpB;AACD,QACE,oBAAC;EACC,UAAU,CAAC,CAAC,MAAM;EAClB,MAAK;EACL,mBAAmB,CAAC,CAAC,MAAM;EAC3B,WAAW,MAAM;EACjB,UAAU,MAAM;EAChB,aAAa,MAAM;GACnB"}
1
+ {"version":3,"file":"sign-in.js","names":[],"sources":["../../../src/components-page/sign-in.tsx"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\nimport { AuthPage } from \"./auth-page\";\n\nexport function SignIn(props: {\n fullPage?: boolean,\n automaticRedirect?: boolean,\n extraInfo?: React.ReactNode,\n firstTab?: 'magic-link' | 'password',\n mockProject?: {\n config: {\n signUpEnabled: boolean,\n credentialEnabled: boolean,\n passkeyEnabled: boolean,\n magicLinkEnabled: boolean,\n oauthProviders: {\n id: string,\n }[],\n },\n },\n}) {\n return (\n <AuthPage\n fullPage={!!props.fullPage}\n type=\"sign-in\"\n automaticRedirect={!!props.automaticRedirect}\n extraInfo={props.extraInfo}\n firstTab={props.firstTab}\n mockProject={props.mockProject}\n />\n );\n}\n"],"mappings":";;;;AAMA,SAAgB,OAAO,OAgBpB;AACD,QACE,oBAAC;EACC,UAAU,CAAC,CAAC,MAAM;EAClB,MAAK;EACL,mBAAmB,CAAC,CAAC,MAAM;EAC3B,WAAW,MAAM;EACjB,UAAU,MAAM;EAChB,aAAa,MAAM;GACnB"}
@@ -3,6 +3,7 @@ import * as react_jsx_runtime0 from "react/jsx-runtime";
3
3
  //#region src/components-page/sign-out.d.ts
4
4
  declare function SignOut(props: {
5
5
  fullPage?: boolean;
6
+ searchParams?: Record<string, string>;
6
7
  }): react_jsx_runtime0.JSX.Element;
7
8
  //#endregion
8
9
  export { SignOut };
@@ -1 +1 @@
1
- {"version":3,"file":"sign-out.d.ts","names":[],"sources":["../../../src/components-page/sign-out.tsx"],"mappings":";;;iBAgBgB,OAAA,CAAQ,KAAA;EAAS,QAAA;AAAA,IAAoB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"sign-out.d.ts","names":[],"sources":["../../../src/components-page/sign-out.tsx"],"mappings":";;;iBAyBgB,OAAA,CAAQ,KAAA;EAAS,QAAA;EAAoB,YAAA,GAAe,MAAA;AAAA,IAAwB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -2,17 +2,23 @@
2
2
 
3
3
  import { useUser } from "../index.js";
4
4
  import { jsx } from "react/jsx-runtime";
5
+ import { use } from "@hexclave/shared/dist/utils/react";
5
6
  import { PredefinedMessageCard } from "../components/message-cards/predefined-message-card.js";
6
7
  import { cacheFunction } from "@hexclave/shared/dist/utils/caches";
7
- import { use } from "@hexclave/shared/dist/utils/react";
8
8
 
9
9
  //#region src/components-page/sign-out.tsx
10
- const cacheSignOut = cacheFunction(async (user) => {
11
- return await user.signOut();
10
+ const cacheSignOut = cacheFunction(async (user, redirectUrl) => {
11
+ return await user.signOut({ redirectUrl });
12
+ });
13
+ const cacheRedirectIfAlreadySignedOut = cacheFunction(async (redirectUrl) => {
14
+ if (redirectUrl == null) return;
15
+ if (typeof window !== "undefined") window.location.replace(redirectUrl);
12
16
  });
13
17
  function SignOut(props) {
14
- const user = useUser();
15
- if (user) use(cacheSignOut(user));
18
+ const user = useUser({ or: "return-null" });
19
+ const redirectUrl = props.searchParams?.after_auth_return_to;
20
+ if (user) use(cacheSignOut(user, redirectUrl));
21
+ else use(cacheRedirectIfAlreadySignedOut(redirectUrl));
16
22
  return /* @__PURE__ */ jsx(PredefinedMessageCard, {
17
23
  type: "signedOut",
18
24
  fullPage: props.fullPage
@@ -1 +1 @@
1
- {"version":3,"file":"sign-out.js","names":[],"sources":["../../../src/components-page/sign-out.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { cacheFunction } from \"@hexclave/shared/dist/utils/caches\";\nimport { use } from \"@hexclave/shared/dist/utils/react\";\nimport { CurrentUser, useUser } from \"..\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\n\nconst cacheSignOut = cacheFunction(async (user: CurrentUser) => {\n return await user.signOut();\n});\n\nexport function SignOut(props: { fullPage?: boolean }) {\n const user = useUser();\n\n if (user) {\n use(cacheSignOut(user));\n }\n\n return <PredefinedMessageCard type='signedOut' fullPage={props.fullPage} />;\n}\n"],"mappings":";;;;;;;;;AAYA,MAAM,eAAe,cAAc,OAAO,SAAsB;AAC9D,QAAO,MAAM,KAAK,SAAS;EAC3B;AAEF,SAAgB,QAAQ,OAA+B;CACrD,MAAM,OAAO,SAAS;AAEtB,KAAI,KACF,KAAI,aAAa,KAAK,CAAC;AAGzB,QAAO,oBAAC;EAAsB,MAAK;EAAY,UAAU,MAAM;GAAY"}
1
+ {"version":3,"file":"sign-out.js","names":[],"sources":["../../../src/components-page/sign-out.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { cacheFunction } from \"@hexclave/shared/dist/utils/caches\";\nimport { use } from \"@hexclave/shared/dist/utils/react\";\nimport { CurrentUser, useUser } from \"..\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\n\nconst cacheSignOut = cacheFunction(async (user: CurrentUser, redirectUrl: string | undefined) => {\n return await user.signOut({ redirectUrl });\n});\n\nconst cacheRedirectIfAlreadySignedOut = cacheFunction(async (redirectUrl: string | undefined) => {\n if (redirectUrl == null) {\n return;\n }\n if (typeof window !== \"undefined\") {\n window.location.replace(redirectUrl);\n }\n});\n\nexport function SignOut(props: { fullPage?: boolean, searchParams?: Record<string, string> }) {\n const user = useUser({ or: \"return-null\" });\n const redirectUrl = props.searchParams?.after_auth_return_to;\n\n if (user) {\n use(cacheSignOut(user, redirectUrl));\n } else {\n use(cacheRedirectIfAlreadySignedOut(redirectUrl));\n }\n\n return <PredefinedMessageCard type='signedOut' fullPage={props.fullPage} />;\n}\n"],"mappings":";;;;;;;;;AAYA,MAAM,eAAe,cAAc,OAAO,MAAmB,gBAAoC;AAC/F,QAAO,MAAM,KAAK,QAAQ,EAAE,aAAa,CAAC;EAC1C;AAEF,MAAM,kCAAkC,cAAc,OAAO,gBAAoC;AAC/F,KAAI,eAAe,KACjB;AAEF,KAAI,OAAO,WAAW,YACpB,QAAO,SAAS,QAAQ,YAAY;EAEtC;AAEF,SAAgB,QAAQ,OAAsE;CAC5F,MAAM,OAAO,QAAQ,EAAE,IAAI,eAAe,CAAC;CAC3C,MAAM,cAAc,MAAM,cAAc;AAExC,KAAI,KACF,KAAI,aAAa,MAAM,YAAY,CAAC;KAEpC,KAAI,gCAAgC,YAAY,CAAC;AAGnD,QAAO,oBAAC;EAAsB,MAAK;EAAY,UAAU,MAAM;GAAY"}
@@ -1 +1 @@
1
- {"version":3,"file":"sign-up.js","names":[],"sources":["../../../src/components-page/sign-up.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\nimport { AuthPage } from './auth-page';\n\nexport function SignUp(props: {\n fullPage?: boolean,\n automaticRedirect?: boolean,\n noPasswordRepeat?: boolean,\n extraInfo?: React.ReactNode,\n firstTab?: 'magic-link' | 'password',\n}) {\n return <AuthPage\n fullPage={!!props.fullPage}\n type='sign-up'\n automaticRedirect={!!props.automaticRedirect}\n noPasswordRepeat={props.noPasswordRepeat}\n extraInfo={props.extraInfo}\n firstTab={props.firstTab}\n />;\n}\n"],"mappings":";;;;;;AAQA,SAAgB,OAAO,OAMpB;AACD,QAAO,oBAAC;EACN,UAAU,CAAC,CAAC,MAAM;EAClB,MAAK;EACL,mBAAmB,CAAC,CAAC,MAAM;EAC3B,kBAAkB,MAAM;EACxB,WAAW,MAAM;EACjB,UAAU,MAAM;GAChB"}
1
+ {"version":3,"file":"sign-up.js","names":[],"sources":["../../../src/components-page/sign-up.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\nimport { AuthPage } from './auth-page';\n\nexport function SignUp(props: {\n fullPage?: boolean,\n automaticRedirect?: boolean,\n noPasswordRepeat?: boolean,\n extraInfo?: React.ReactNode,\n firstTab?: 'magic-link' | 'password',\n}) {\n return <AuthPage\n fullPage={!!props.fullPage}\n type='sign-up'\n automaticRedirect={!!props.automaticRedirect}\n noPasswordRepeat={props.noPasswordRepeat}\n extraInfo={props.extraInfo}\n firstTab={props.firstTab}\n />;\n}\n"],"mappings":";;;;;;AAQA,SAAgB,OAAO,OAMpB;AACD,QAAO,oBAAC;EACN,UAAU,CAAC,CAAC,MAAM;EAClB,MAAK;EACL,mBAAmB,CAAC,CAAC,MAAM;EAC3B,kBAAkB,MAAM;EACxB,WAAW,MAAM;EACjB,UAAU,MAAM;GAChB"}
@@ -1,16 +1,16 @@
1
1
  'use client';
2
2
 
3
+ import { yupResolver } from "@hookform/resolvers/yup";
4
+ import { yupObject, yupString } from "@hexclave/shared/dist/schema-fields";
3
5
  import { runAsynchronously } from "@hexclave/shared/dist/utils/promises";
4
6
  import { Button, Input, Label, Typography } from "@hexclave/ui";
5
7
  import { useState } from "react";
8
+ import { useForm } from "react-hook-form";
6
9
  import { MessageCard, useStackApp, useUser } from "../index.js";
7
- import { MaybeFullPage } from "../components/elements/maybe-full-page.js";
10
+ import { FormWarningText } from "../components/elements/form-warning.js";
8
11
  import { useTranslation } from "../lib/translations.js";
9
12
  import { jsx, jsxs } from "react/jsx-runtime";
10
- import { yupResolver } from "@hookform/resolvers/yup";
11
- import { yupObject, yupString } from "@hexclave/shared/dist/schema-fields";
12
- import { useForm } from "react-hook-form";
13
- import { FormWarningText } from "../components/elements/form-warning.js";
13
+ import { MaybeFullPage } from "../components/elements/maybe-full-page.js";
14
14
 
15
15
  //#region src/components-page/team-creation.tsx
16
16
  function TeamCreation(props) {
@@ -1 +1 @@
1
- {"version":3,"file":"team-creation.js","names":[],"sources":["../../../src/components-page/team-creation.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { yupObject, yupString } from \"@hexclave/shared/dist/schema-fields\";\nimport { runAsynchronously } from \"@hexclave/shared/dist/utils/promises\";\nimport { Button, Input, Label, Typography } from \"@hexclave/ui\";\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { MessageCard, useStackApp, useUser } from \"..\";\nimport { FormWarningText } from \"../components/elements/form-warning\";\nimport { MaybeFullPage } from \"../components/elements/maybe-full-page\";\nimport { useTranslation } from \"../lib/translations\";\n\nexport function TeamCreation(props: { fullPage?: boolean }) {\n const { t } = useTranslation();\n\n const schema = yupObject({\n displayName: yupString().defined().nonEmpty(t('Please enter a team name')),\n });\n\n const { register, handleSubmit, formState: { errors } } = useForm({\n resolver: yupResolver(schema)\n });\n const app = useStackApp();\n const project = app.useProject();\n const user = useUser({ or: 'redirect' });\n const [loading, setLoading] = useState(false);\n const navigate = app.useNavigate();\n\n if (!project.config.clientTeamCreationEnabled) {\n return <MessageCard title={t('Team creation is not enabled')} />;\n }\n\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\n setLoading(true);\n\n try {\n const team = await user.createTeam({ displayName: data.displayName });\n navigate(`${app.urls.handler}/team-settings/${team.id}`);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <MaybeFullPage fullPage={!!props.fullPage}>\n <div className='stack-scope flex flex-col items-stretch' style={{ maxWidth: '380px', flexBasis: '380px', padding: props.fullPage ? '1rem' : 0 }}>\n <div className=\"text-center mb-6\">\n <Typography type='h2'>\n {t('Create a Team')}\n </Typography>\n </div>\n <form\n className=\"flex flex-col items-stretch stack-scope\"\n onSubmit={e => runAsynchronously(handleSubmit(onSubmit)(e))}\n noValidate\n >\n <Label htmlFor=\"display-name\" className=\"mb-1\">{t('Display name')}</Label>\n <Input\n id=\"display-name\"\n {...register('displayName')}\n />\n <FormWarningText text={errors.displayName?.message?.toString()} />\n\n <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n {t('Create')}\n </Button>\n </form>\n </div>\n </MaybeFullPage>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAmBA,SAAgB,aAAa,OAA+B;CAC1D,MAAM,EAAE,MAAM,gBAAgB;CAM9B,MAAM,EAAE,UAAU,cAAc,WAAW,EAAE,aAAa,QAAQ,EAChE,UAAU,YALG,UAAU,EACvB,aAAa,WAAW,CAAC,SAAS,CAAC,SAAS,EAAE,2BAA2B,CAAC,EAC3E,CAAC,CAG6B,EAC9B,CAAC;CACF,MAAM,MAAM,aAAa;CACzB,MAAM,UAAU,IAAI,YAAY;CAChC,MAAM,OAAO,QAAQ,EAAE,IAAI,YAAY,CAAC;CACxC,MAAM,CAAC,SAAS,cAAc,SAAS,MAAM;CAC7C,MAAM,WAAW,IAAI,aAAa;AAElC,KAAI,CAAC,QAAQ,OAAO,0BAClB,QAAO,oBAAC,eAAY,OAAO,EAAE,+BAA+B,GAAI;CAGlE,MAAM,WAAW,OAAO,SAAuC;AAC7D,aAAW,KAAK;AAEhB,MAAI;GACF,MAAM,OAAO,MAAM,KAAK,WAAW,EAAE,aAAa,KAAK,aAAa,CAAC;AACrE,YAAS,GAAG,IAAI,KAAK,QAAQ,iBAAiB,KAAK,KAAK;YAChD;AACR,cAAW,MAAM;;;AAIrB,QACE,oBAAC;EAAc,UAAU,CAAC,CAAC,MAAM;YAC/B,qBAAC;GAAI,WAAU;GAA0C,OAAO;IAAE,UAAU;IAAS,WAAW;IAAS,SAAS,MAAM,WAAW,SAAS;IAAG;cAC7I,oBAAC;IAAI,WAAU;cACb,oBAAC;KAAW,MAAK;eACd,EAAE,gBAAgB;MACR;KACT,EACN,qBAAC;IACC,WAAU;IACV,WAAU,MAAK,kBAAkB,aAAa,SAAS,CAAC,EAAE,CAAC;IAC3D;;KAEA,oBAAC;MAAM,SAAQ;MAAe,WAAU;gBAAQ,EAAE,eAAe;OAAS;KAC1E,oBAAC;MACC,IAAG;MACH,GAAI,SAAS,cAAc;OAC3B;KACF,oBAAC,mBAAgB,MAAM,OAAO,aAAa,SAAS,UAAU,GAAI;KAElE,oBAAC;MAAO,MAAK;MAAS,WAAU;MAAgB;gBAC7C,EAAE,SAAS;OACL;;KACJ;IACH;GACQ"}
1
+ {"version":3,"file":"team-creation.js","names":[],"sources":["../../../src/components-page/team-creation.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { yupObject, yupString } from \"@hexclave/shared/dist/schema-fields\";\nimport { runAsynchronously } from \"@hexclave/shared/dist/utils/promises\";\nimport { Button, Input, Label, Typography } from \"@hexclave/ui\";\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { MessageCard, useStackApp, useUser } from \"..\";\nimport { FormWarningText } from \"../components/elements/form-warning\";\nimport { MaybeFullPage } from \"../components/elements/maybe-full-page\";\nimport { useTranslation } from \"../lib/translations\";\n\nexport function TeamCreation(props: { fullPage?: boolean }) {\n const { t } = useTranslation();\n\n const schema = yupObject({\n displayName: yupString().defined().nonEmpty(t('Please enter a team name')),\n });\n\n const { register, handleSubmit, formState: { errors } } = useForm({\n resolver: yupResolver(schema)\n });\n const app = useStackApp();\n const project = app.useProject();\n const user = useUser({ or: 'redirect' });\n const [loading, setLoading] = useState(false);\n const navigate = app.useNavigate();\n\n if (!project.config.clientTeamCreationEnabled) {\n return <MessageCard title={t('Team creation is not enabled')} />;\n }\n\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\n setLoading(true);\n\n try {\n const team = await user.createTeam({ displayName: data.displayName });\n navigate(`${app.urls.handler}/team-settings/${team.id}`);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <MaybeFullPage fullPage={!!props.fullPage}>\n <div className='stack-scope flex flex-col items-stretch' style={{ maxWidth: '380px', flexBasis: '380px', padding: props.fullPage ? '1rem' : 0 }}>\n <div className=\"text-center mb-6\">\n <Typography type='h2'>\n {t('Create a Team')}\n </Typography>\n </div>\n <form\n className=\"flex flex-col items-stretch stack-scope\"\n onSubmit={e => runAsynchronously(handleSubmit(onSubmit)(e))}\n noValidate\n >\n <Label htmlFor=\"display-name\" className=\"mb-1\">{t('Display name')}</Label>\n <Input\n id=\"display-name\"\n {...register('displayName')}\n />\n <FormWarningText text={errors.displayName?.message?.toString()} />\n\n <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n {t('Create')}\n </Button>\n </form>\n </div>\n </MaybeFullPage>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAmBA,SAAgB,aAAa,OAA+B;CAC1D,MAAM,EAAE,MAAM,gBAAgB;CAM9B,MAAM,EAAE,UAAU,cAAc,WAAW,EAAE,aAAa,QAAQ,EAChE,UAAU,YALG,UAAU,EACvB,aAAa,WAAW,CAAC,SAAS,CAAC,SAAS,EAAE,2BAA2B,CAAC,EAC3E,CAAC,CAG6B,EAC9B,CAAC;CACF,MAAM,MAAM,aAAa;CACzB,MAAM,UAAU,IAAI,YAAY;CAChC,MAAM,OAAO,QAAQ,EAAE,IAAI,YAAY,CAAC;CACxC,MAAM,CAAC,SAAS,cAAc,SAAS,MAAM;CAC7C,MAAM,WAAW,IAAI,aAAa;AAElC,KAAI,CAAC,QAAQ,OAAO,0BAClB,QAAO,oBAAC,eAAY,OAAO,EAAE,+BAA+B,GAAI;CAGlE,MAAM,WAAW,OAAO,SAAuC;AAC7D,aAAW,KAAK;AAEhB,MAAI;GACF,MAAM,OAAO,MAAM,KAAK,WAAW,EAAE,aAAa,KAAK,aAAa,CAAC;AACrE,YAAS,GAAG,IAAI,KAAK,QAAQ,iBAAiB,KAAK,KAAK;YAChD;AACR,cAAW,MAAM;;;AAIrB,QACE,oBAAC;EAAc,UAAU,CAAC,CAAC,MAAM;YAC/B,qBAAC;GAAI,WAAU;GAA0C,OAAO;IAAE,UAAU;IAAS,WAAW;IAAS,SAAS,MAAM,WAAW,SAAS;IAAG;cAC7I,oBAAC;IAAI,WAAU;cACb,oBAAC;KAAW,MAAK;eACd,EAAE,gBAAgB;MACR;KACT,EACN,qBAAC;IACC,WAAU;IACV,WAAU,MAAK,kBAAkB,aAAa,SAAS,CAAC,EAAE,CAAC;IAC3D;;KAEA,oBAAC;MAAM,SAAQ;MAAe,WAAU;gBAAQ,EAAE,eAAe;OAAS;KAC1E,oBAAC;MACC,IAAG;MACH,GAAI,SAAS,cAAc;OAC3B;KACF,oBAAC,mBAAgB,MAAM,OAAO,aAAa,SAAS,UAAU,GAAI;KAElE,oBAAC;MAAO,MAAK;MAAS,WAAU;MAAgB;gBAC7C,EAAE,SAAS;OACL;;KACJ;IACH;GACQ"}
@@ -6,24 +6,24 @@ import React from "react";
6
6
  import { MessageCard, useStackApp, useUser } from "../index.js";
7
7
  import { useTranslation } from "../lib/translations.js";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
- import { PredefinedMessageCard } from "../components/message-cards/predefined-message-card.js";
10
9
  import { KnownErrors } from "@hexclave/shared";
11
- import { cacheFunction } from "@hexclave/shared/dist/utils/caches";
12
10
  import { use } from "@hexclave/shared/dist/utils/react";
11
+ import { PredefinedMessageCard } from "../components/message-cards/predefined-message-card.js";
12
+ import { cacheFunction } from "@hexclave/shared/dist/utils/caches";
13
13
 
14
14
  //#region src/components-page/team-invitation.tsx
15
- const cachedVerifyInvitation = cacheFunction(async (stackApp, code) => {
16
- return await stackApp.verifyTeamInvitationCode(code);
15
+ const cachedVerifyInvitation = cacheFunction(async (hexclaveApp, code) => {
16
+ return await hexclaveApp.verifyTeamInvitationCode(code);
17
17
  });
18
- const cachedGetInvitationDetails = cacheFunction(async (stackApp, code) => {
19
- return await stackApp.getTeamInvitationDetails(code);
18
+ const cachedGetInvitationDetails = cacheFunction(async (hexclaveApp, code) => {
19
+ return await hexclaveApp.getTeamInvitationDetails(code);
20
20
  });
21
21
  function TeamInvitationInner(props) {
22
22
  const { t } = useTranslation();
23
- const stackApp = useStackApp();
23
+ const hexclaveApp = useStackApp();
24
24
  const [success, setSuccess] = React.useState(false);
25
25
  const [errorMessage, setErrorMessage] = React.useState(null);
26
- const details = use(cachedGetInvitationDetails(stackApp, props.searchParams.code || ""));
26
+ const details = use(cachedGetInvitationDetails(hexclaveApp, props.searchParams.code || ""));
27
27
  if (errorMessage || details.status === "error") return /* @__PURE__ */ jsx(PredefinedMessageCard, {
28
28
  type: "unknownError",
29
29
  fullPage: props.fullPage
@@ -32,7 +32,7 @@ function TeamInvitationInner(props) {
32
32
  title: t("Team invitation"),
33
33
  fullPage: props.fullPage,
34
34
  primaryButtonText: "Go home",
35
- primaryAction: () => stackApp.redirectToHome(),
35
+ primaryAction: () => hexclaveApp.redirectToHome(),
36
36
  children: /* @__PURE__ */ jsxs(Typography, { children: ["You have successfully joined ", details.data.teamDisplayName] })
37
37
  });
38
38
  return /* @__PURE__ */ jsx(MessageCard, {
@@ -40,19 +40,19 @@ function TeamInvitationInner(props) {
40
40
  fullPage: props.fullPage,
41
41
  primaryButtonText: t("Join"),
42
42
  primaryAction: () => runAsynchronouslyWithAlert(async () => {
43
- const result = await stackApp.acceptTeamInvitation(props.searchParams.code || "");
43
+ const result = await hexclaveApp.acceptTeamInvitation(props.searchParams.code || "");
44
44
  if (result.status === "error") setErrorMessage(result.error.message);
45
45
  else setSuccess(true);
46
46
  }),
47
47
  secondaryButtonText: t("Ignore"),
48
- secondaryAction: () => stackApp.redirectToHome(),
48
+ secondaryAction: () => hexclaveApp.redirectToHome(),
49
49
  children: /* @__PURE__ */ jsxs(Typography, { children: ["You are invited to join ", details.data.teamDisplayName] })
50
50
  });
51
51
  }
52
52
  function TeamInvitation({ fullPage = false, searchParams }) {
53
53
  const { t } = useTranslation();
54
54
  const user = useUser({ includeRestricted: true });
55
- const stackApp = useStackApp();
55
+ const hexclaveApp = useStackApp();
56
56
  const invalidJsx = /* @__PURE__ */ jsx(MessageCard, {
57
57
  title: t("Invalid Team Invitation Link"),
58
58
  fullPage,
@@ -73,21 +73,21 @@ function TeamInvitation({ fullPage = false, searchParams }) {
73
73
  title: t("Team invitation"),
74
74
  fullPage,
75
75
  primaryButtonText: t("Sign in"),
76
- primaryAction: () => stackApp.redirectToSignIn(),
76
+ primaryAction: () => hexclaveApp.redirectToSignIn(),
77
77
  secondaryButtonText: t("Cancel"),
78
- secondaryAction: () => stackApp.redirectToHome(),
78
+ secondaryAction: () => hexclaveApp.redirectToHome(),
79
79
  children: /* @__PURE__ */ jsx(Typography, { children: t("Sign in or create an account to join the team.") })
80
80
  });
81
81
  if (user.isRestricted) return /* @__PURE__ */ jsx(MessageCard, {
82
82
  title: t("Complete your account setup"),
83
83
  fullPage,
84
84
  primaryButtonText: t("Complete setup"),
85
- primaryAction: () => stackApp.redirectToOnboarding(),
85
+ primaryAction: () => hexclaveApp.redirectToOnboarding(),
86
86
  secondaryButtonText: t("Cancel"),
87
- secondaryAction: () => stackApp.redirectToHome(),
87
+ secondaryAction: () => hexclaveApp.redirectToHome(),
88
88
  children: /* @__PURE__ */ jsx(Typography, { children: t("Please complete your account setup before joining teams.") })
89
89
  });
90
- const verificationResult = use(cachedVerifyInvitation(stackApp, searchParams.code || ""));
90
+ const verificationResult = use(cachedVerifyInvitation(hexclaveApp, searchParams.code || ""));
91
91
  if (verificationResult.status === "error") {
92
92
  const error = verificationResult.error;
93
93
  if (KnownErrors.VerificationCodeNotFound.isInstance(error)) return invalidJsx;