@hexclave/react 1.0.3 → 1.0.6

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 (897) 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 +6 -6
  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 +4 -4
  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} +16 -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} +66 -30
  109. package/dist/components-page/hexclave-handler-client.js.map +1 -0
  110. package/dist/components-page/hexclave-handler-client.test.js +51 -0
  111. package/dist/components-page/hexclave-handler-client.test.js.map +1 -0
  112. package/dist/components-page/{stack-handler.d.ts → hexclave-handler.d.ts} +5 -5
  113. package/dist/components-page/hexclave-handler.d.ts.map +1 -0
  114. package/dist/components-page/{stack-handler.js → hexclave-handler.js} +4 -4
  115. package/dist/components-page/hexclave-handler.js.map +1 -0
  116. package/dist/components-page/magic-link-callback.js +9 -9
  117. package/dist/components-page/magic-link-callback.js.map +1 -1
  118. package/dist/components-page/mfa.js +7 -7
  119. package/dist/components-page/mfa.js.map +1 -1
  120. package/dist/components-page/oauth-callback.js +6 -6
  121. package/dist/components-page/oauth-callback.js.map +1 -1
  122. package/dist/components-page/onboarding.js +7 -7
  123. package/dist/components-page/onboarding.js.map +1 -1
  124. package/dist/components-page/password-reset.js +16 -16
  125. package/dist/components-page/password-reset.js.map +1 -1
  126. package/dist/components-page/sign-in.js.map +1 -1
  127. package/dist/components-page/sign-out.d.ts +1 -0
  128. package/dist/components-page/sign-out.d.ts.map +1 -1
  129. package/dist/components-page/sign-out.js +11 -5
  130. package/dist/components-page/sign-out.js.map +1 -1
  131. package/dist/components-page/sign-up.js.map +1 -1
  132. package/dist/components-page/team-creation.js +5 -5
  133. package/dist/components-page/team-creation.js.map +1 -1
  134. package/dist/components-page/team-invitation.js +17 -17
  135. package/dist/components-page/team-invitation.js.map +1 -1
  136. package/dist/dev-tool/dev-tool-core.d.ts +1 -1
  137. package/dist/dev-tool/dev-tool-core.js +13 -13
  138. package/dist/dev-tool/dev-tool-core.js.map +1 -1
  139. package/dist/dev-tool/dev-tool-styles.d.ts +1 -1
  140. package/dist/dev-tool/dev-tool-styles.js +371 -371
  141. package/dist/dev-tool/dev-tool-styles.js.map +1 -1
  142. package/dist/dev-tool/dev-tool-trigger-position.js.map +1 -1
  143. package/dist/dev-tool/dev-tool-trigger-position.test.js.map +1 -1
  144. package/dist/dev-tool/index.d.ts +4 -4
  145. package/dist/dev-tool/index.js +5 -5
  146. package/dist/dev-tool/index.js.map +1 -1
  147. package/dist/esm/components/api-key-dialogs.d.ts +1 -1
  148. package/dist/esm/components/api-key-dialogs.js +5 -5
  149. package/dist/esm/components/api-key-dialogs.js.map +1 -1
  150. package/dist/esm/components/api-key-table.d.ts +1 -1
  151. package/dist/esm/components/api-key-table.js.map +1 -1
  152. package/dist/esm/components/credential-sign-in.js +3 -3
  153. package/dist/esm/components/credential-sign-in.js.map +1 -1
  154. package/dist/esm/components/credential-sign-up.js +5 -5
  155. package/dist/esm/components/credential-sign-up.js.map +1 -1
  156. package/dist/esm/components/elements/form-warning.js.map +1 -1
  157. package/dist/esm/components/elements/maybe-full-page.js.map +1 -1
  158. package/dist/esm/components/elements/separator-with-text.js.map +1 -1
  159. package/dist/esm/components/elements/sidebar-layout.js +1 -1
  160. package/dist/esm/components/elements/sidebar-layout.js.map +1 -1
  161. package/dist/esm/components/elements/ssr-layout-effect.js.map +1 -1
  162. package/dist/esm/components/elements/user-avatar.js +1 -1
  163. package/dist/esm/components/elements/user-avatar.js.map +1 -1
  164. package/dist/esm/components/link.js.map +1 -1
  165. package/dist/esm/components/magic-link-sign-in.js +6 -6
  166. package/dist/esm/components/magic-link-sign-in.js.map +1 -1
  167. package/dist/esm/components/message-cards/known-error-message-card.js +2 -2
  168. package/dist/esm/components/message-cards/known-error-message-card.js.map +1 -1
  169. package/dist/esm/components/message-cards/message-card.js.map +1 -1
  170. package/dist/esm/components/message-cards/predefined-message-card.js +10 -10
  171. package/dist/esm/components/message-cards/predefined-message-card.js.map +1 -1
  172. package/dist/esm/components/oauth-button-group.js +2 -2
  173. package/dist/esm/components/oauth-button-group.js.map +1 -1
  174. package/dist/esm/components/oauth-button.js +2 -2
  175. package/dist/esm/components/oauth-button.js.map +1 -1
  176. package/dist/esm/components/passkey-button.js +3 -3
  177. package/dist/esm/components/passkey-button.js.map +1 -1
  178. package/dist/esm/components/profile-image-editor.js +1 -1
  179. package/dist/esm/components/profile-image-editor.js.map +1 -1
  180. package/dist/esm/components/selected-team-switcher.js.map +1 -1
  181. package/dist/esm/components/team-icon.js +1 -1
  182. package/dist/esm/components/team-icon.js.map +1 -1
  183. package/dist/esm/components/team-switcher.js +2 -2
  184. package/dist/esm/components/team-switcher.js.map +1 -1
  185. package/dist/esm/components/use-in-iframe.js.map +1 -1
  186. package/dist/esm/components/user-button.js +1 -1
  187. package/dist/esm/components/user-button.js.map +1 -1
  188. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.js +1 -1
  189. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.js.map +1 -1
  190. package/dist/esm/components-page/account-settings/api-keys/api-keys-page.js.map +1 -1
  191. package/dist/esm/components-page/account-settings/editable-text.js +1 -1
  192. package/dist/esm/components-page/account-settings/editable-text.js.map +1 -1
  193. package/dist/esm/components-page/account-settings/email-and-auth/email-and-auth-page.js.map +1 -1
  194. package/dist/esm/components-page/account-settings/email-and-auth/emails-section.js +3 -3
  195. package/dist/esm/components-page/account-settings/email-and-auth/emails-section.js.map +1 -1
  196. package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.js +1 -1
  197. package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.js.map +1 -1
  198. package/dist/esm/components-page/account-settings/email-and-auth/otp-section.js.map +1 -1
  199. package/dist/esm/components-page/account-settings/email-and-auth/passkey-section.js.map +1 -1
  200. package/dist/esm/components-page/account-settings/email-and-auth/password-section.js +3 -3
  201. package/dist/esm/components-page/account-settings/email-and-auth/password-section.js.map +1 -1
  202. package/dist/esm/components-page/account-settings/notifications/notifications-page.js.map +1 -1
  203. package/dist/esm/components-page/account-settings/page-layout.js.map +1 -1
  204. package/dist/esm/components-page/account-settings/payments/payments-page.js.map +1 -1
  205. package/dist/esm/components-page/account-settings/payments/payments-panel.d.ts +1 -1
  206. package/dist/esm/components-page/account-settings/payments/payments-panel.js +5 -5
  207. package/dist/esm/components-page/account-settings/payments/payments-panel.js.map +1 -1
  208. package/dist/esm/components-page/account-settings/profile-page/profile-page.js.map +1 -1
  209. package/dist/esm/components-page/account-settings/section.js.map +1 -1
  210. package/dist/esm/components-page/account-settings/settings/delete-account-section.js.map +1 -1
  211. package/dist/esm/components-page/account-settings/settings/settings-page.js.map +1 -1
  212. package/dist/esm/components-page/account-settings/settings/sign-out-section.js.map +1 -1
  213. package/dist/esm/components-page/account-settings/teams/leave-team-section.js.map +1 -1
  214. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.d.ts +1 -1
  215. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.js +1 -1
  216. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.js.map +1 -1
  217. package/dist/esm/components-page/account-settings/teams/team-creation-page.js +3 -3
  218. package/dist/esm/components-page/account-settings/teams/team-creation-page.js.map +1 -1
  219. package/dist/esm/components-page/account-settings/teams/team-display-name-section.js.map +1 -1
  220. package/dist/esm/components-page/account-settings/teams/team-member-invitation-section.js +4 -4
  221. package/dist/esm/components-page/account-settings/teams/team-member-invitation-section.js.map +1 -1
  222. package/dist/esm/components-page/account-settings/teams/team-member-list-section.js.map +1 -1
  223. package/dist/esm/components-page/account-settings/teams/team-page.js.map +1 -1
  224. package/dist/esm/components-page/account-settings/teams/team-profile-image-section.js.map +1 -1
  225. package/dist/esm/components-page/account-settings/teams/team-profile-user-section.js.map +1 -1
  226. package/dist/esm/components-page/account-settings.d.ts +1 -1
  227. package/dist/esm/components-page/account-settings.js +3 -3
  228. package/dist/esm/components-page/account-settings.js.map +1 -1
  229. package/dist/esm/components-page/auth-page.d.ts.map +1 -1
  230. package/dist/esm/components-page/auth-page.js +57 -12
  231. package/dist/esm/components-page/auth-page.js.map +1 -1
  232. package/dist/esm/components-page/cli-auth-confirm.js +4 -4
  233. package/dist/esm/components-page/cli-auth-confirm.js.map +1 -1
  234. package/dist/esm/components-page/cli-auth-confirm.test.js +4 -4
  235. package/dist/esm/components-page/cli-auth-confirm.test.js.map +1 -1
  236. package/dist/esm/components-page/email-verification.js +6 -6
  237. package/dist/esm/components-page/email-verification.js.map +1 -1
  238. package/dist/esm/components-page/error-page.js +9 -9
  239. package/dist/esm/components-page/error-page.js.map +1 -1
  240. package/dist/esm/components-page/forgot-password.js +9 -9
  241. package/dist/esm/components-page/forgot-password.js.map +1 -1
  242. package/dist/esm/components-page/{stack-handler-client.d.ts → hexclave-handler-client.d.ts} +15 -4
  243. package/dist/esm/components-page/hexclave-handler-client.d.ts.map +1 -0
  244. package/dist/esm/components-page/{stack-handler-client.js → hexclave-handler-client.js} +64 -29
  245. package/dist/esm/components-page/hexclave-handler-client.js.map +1 -0
  246. package/dist/esm/components-page/hexclave-handler-client.test.js +51 -0
  247. package/dist/esm/components-page/hexclave-handler-client.test.js.map +1 -0
  248. package/dist/esm/components-page/{stack-handler.d.ts → hexclave-handler.d.ts} +5 -5
  249. package/dist/esm/components-page/hexclave-handler.d.ts.map +1 -0
  250. package/dist/esm/components-page/{stack-handler.js → hexclave-handler.js} +4 -4
  251. package/dist/esm/components-page/hexclave-handler.js.map +1 -0
  252. package/dist/esm/components-page/magic-link-callback.js +9 -9
  253. package/dist/esm/components-page/magic-link-callback.js.map +1 -1
  254. package/dist/esm/components-page/mfa.js +7 -7
  255. package/dist/esm/components-page/mfa.js.map +1 -1
  256. package/dist/esm/components-page/oauth-callback.js +6 -6
  257. package/dist/esm/components-page/oauth-callback.js.map +1 -1
  258. package/dist/esm/components-page/onboarding.js +7 -7
  259. package/dist/esm/components-page/onboarding.js.map +1 -1
  260. package/dist/esm/components-page/password-reset.js +16 -16
  261. package/dist/esm/components-page/password-reset.js.map +1 -1
  262. package/dist/esm/components-page/sign-in.js.map +1 -1
  263. package/dist/esm/components-page/sign-out.d.ts +1 -0
  264. package/dist/esm/components-page/sign-out.d.ts.map +1 -1
  265. package/dist/esm/components-page/sign-out.js +11 -5
  266. package/dist/esm/components-page/sign-out.js.map +1 -1
  267. package/dist/esm/components-page/sign-up.js.map +1 -1
  268. package/dist/esm/components-page/team-creation.js +5 -5
  269. package/dist/esm/components-page/team-creation.js.map +1 -1
  270. package/dist/esm/components-page/team-invitation.js +17 -17
  271. package/dist/esm/components-page/team-invitation.js.map +1 -1
  272. package/dist/esm/dev-tool/dev-tool-core.d.ts +1 -1
  273. package/dist/esm/dev-tool/dev-tool-core.js +12 -12
  274. package/dist/esm/dev-tool/dev-tool-core.js.map +1 -1
  275. package/dist/esm/dev-tool/dev-tool-styles.d.ts +1 -1
  276. package/dist/esm/dev-tool/dev-tool-styles.js +371 -371
  277. package/dist/esm/dev-tool/dev-tool-styles.js.map +1 -1
  278. package/dist/esm/dev-tool/dev-tool-trigger-position.js.map +1 -1
  279. package/dist/esm/dev-tool/dev-tool-trigger-position.test.js.map +1 -1
  280. package/dist/esm/dev-tool/index.d.ts +4 -4
  281. package/dist/esm/dev-tool/index.js +5 -5
  282. package/dist/esm/dev-tool/index.js.map +1 -1
  283. package/dist/esm/generated/env.d.ts +26 -0
  284. package/dist/esm/{lib → generated}/env.d.ts.map +1 -1
  285. package/dist/esm/generated/env.js +67 -0
  286. package/dist/esm/generated/env.js.map +1 -0
  287. package/dist/esm/generated/quetzal-translations.d.ts +2 -2
  288. package/dist/esm/generated/quetzal-translations.js.map +1 -1
  289. package/dist/esm/global.d.ts +8 -1
  290. package/dist/esm/global.d.ts.map +1 -0
  291. package/dist/esm/index.d.ts +4 -4
  292. package/dist/esm/index.js +3 -3
  293. package/dist/esm/integrations/convex/component/convex.config.js.map +1 -1
  294. package/dist/esm/integrations/convex.js +1 -1
  295. package/dist/esm/integrations/convex.js.map +1 -1
  296. package/dist/esm/lib/auth.js +1 -1
  297. package/dist/esm/lib/auth.js.map +1 -1
  298. package/dist/esm/lib/auth.test.js +1 -1
  299. package/dist/esm/lib/auth.test.js.map +1 -1
  300. package/dist/esm/lib/cookie.js.map +1 -1
  301. package/dist/{lib/stack-app → esm/lib/hexclave-app}/api-keys/index.d.ts +2 -2
  302. package/dist/esm/lib/hexclave-app/api-keys/index.d.ts.map +1 -0
  303. package/dist/esm/lib/{stack-app → hexclave-app}/api-keys/index.js +1 -1
  304. package/dist/esm/lib/hexclave-app/api-keys/index.js.map +1 -0
  305. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/admin-app-impl.d.ts +7 -7
  306. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts.map +1 -0
  307. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/admin-app-impl.js +8 -8
  308. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.js.map +1 -0
  309. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.js +381 -0
  310. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.js.map +1 -0
  311. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.d.ts +17 -15
  312. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.d.ts.map +1 -0
  313. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.js +77 -57
  314. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.js.map +1 -0
  315. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.oauth-prefetch.test.js +1 -1
  316. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +1 -0
  317. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/common.d.ts +11 -11
  318. package/dist/esm/lib/hexclave-app/apps/implementations/common.d.ts.map +1 -0
  319. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/common.js +35 -21
  320. package/dist/esm/lib/hexclave-app/apps/implementations/common.js.map +1 -0
  321. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.d.ts +1 -1
  322. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.d.ts.map +1 -0
  323. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.js +1 -1
  324. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.js.map +1 -0
  325. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.test.js +1 -1
  326. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.test.js.map +1 -0
  327. package/dist/esm/lib/hexclave-app/apps/implementations/index.d.ts +9 -0
  328. package/dist/esm/lib/hexclave-app/apps/implementations/index.d.ts.map +1 -0
  329. package/dist/esm/lib/hexclave-app/apps/implementations/index.js +27 -0
  330. package/dist/esm/lib/hexclave-app/apps/implementations/index.js.map +1 -0
  331. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/redirect-page-urls.d.ts +1 -1
  332. package/dist/esm/lib/hexclave-app/apps/implementations/redirect-page-urls.d.ts.map +1 -0
  333. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/redirect-page-urls.js +1 -1
  334. package/dist/esm/lib/hexclave-app/apps/implementations/redirect-page-urls.js.map +1 -0
  335. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/server-app-impl.d.ts +5 -5
  336. package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.d.ts.map +1 -0
  337. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/server-app-impl.js +8 -8
  338. package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.js.map +1 -0
  339. package/dist/{lib/stack-app → esm/lib/hexclave-app}/apps/implementations/session-refresh-subscription.d.ts +1 -1
  340. package/dist/esm/lib/hexclave-app/apps/implementations/session-refresh-subscription.d.ts.map +1 -0
  341. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.js +1 -1
  342. package/dist/esm/lib/hexclave-app/apps/implementations/session-refresh-subscription.js.map +1 -0
  343. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.test.js +1 -1
  344. package/dist/esm/lib/hexclave-app/apps/implementations/session-refresh-subscription.test.js.map +1 -0
  345. package/dist/{lib/stack-app → esm/lib/hexclave-app}/apps/implementations/session-replay.d.ts +1 -1
  346. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.d.ts.map +1 -0
  347. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.js +2 -2
  348. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.js.map +1 -0
  349. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.test.js +1 -1
  350. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.test.js.map +1 -0
  351. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/admin-app.d.ts +1 -1
  352. package/dist/esm/lib/hexclave-app/apps/interfaces/admin-app.d.ts.map +1 -0
  353. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/admin-app.js +3 -3
  354. package/dist/esm/lib/hexclave-app/apps/interfaces/admin-app.js.map +1 -0
  355. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/client-app.d.ts +4 -4
  356. package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.d.ts.map +1 -0
  357. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/client-app.js +3 -3
  358. package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.js.map +1 -0
  359. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/server-app.d.ts +1 -1
  360. package/dist/esm/lib/hexclave-app/apps/interfaces/server-app.d.ts.map +1 -0
  361. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/server-app.js +3 -3
  362. package/dist/esm/lib/hexclave-app/apps/interfaces/server-app.js.map +1 -0
  363. package/dist/esm/lib/{stack-app → hexclave-app}/common.d.ts +7 -7
  364. package/dist/esm/lib/hexclave-app/common.d.ts.map +1 -0
  365. package/dist/esm/lib/hexclave-app/common.js +7 -0
  366. package/dist/esm/lib/hexclave-app/common.js.map +1 -0
  367. package/dist/esm/lib/{stack-app → hexclave-app}/connected-accounts/index.d.ts +1 -1
  368. package/dist/esm/lib/hexclave-app/connected-accounts/index.d.ts.map +1 -0
  369. package/dist/esm/lib/{stack-app → hexclave-app}/contact-channels/index.d.ts +1 -1
  370. package/dist/esm/lib/hexclave-app/contact-channels/index.d.ts.map +1 -0
  371. package/dist/esm/lib/{stack-app → hexclave-app}/contact-channels/index.js +1 -1
  372. package/dist/esm/lib/hexclave-app/contact-channels/index.js.map +1 -0
  373. package/dist/esm/lib/{stack-app → hexclave-app}/customers/index.d.ts +1 -1
  374. package/dist/esm/lib/hexclave-app/customers/index.d.ts.map +1 -0
  375. package/dist/esm/lib/{stack-app → hexclave-app}/data-vault/index.d.ts +1 -1
  376. package/dist/esm/lib/hexclave-app/data-vault/index.d.ts.map +1 -0
  377. package/dist/esm/lib/{stack-app → hexclave-app}/email/index.d.ts +1 -1
  378. package/dist/esm/lib/hexclave-app/email/index.d.ts.map +1 -0
  379. package/dist/{lib/stack-app → esm/lib/hexclave-app}/email-templates/index.d.ts +1 -1
  380. package/dist/esm/lib/hexclave-app/email-templates/index.d.ts.map +1 -0
  381. package/dist/esm/lib/{stack-app → hexclave-app}/email-templates/index.js +1 -1
  382. package/dist/esm/lib/hexclave-app/email-templates/index.js.map +1 -0
  383. package/dist/esm/lib/{stack-app → hexclave-app}/index.d.ts +2 -2
  384. package/dist/esm/lib/{stack-app → hexclave-app}/index.js +2 -2
  385. package/dist/{lib/stack-app → esm/lib/hexclave-app}/internal-api-keys/index.d.ts +1 -1
  386. package/dist/esm/lib/hexclave-app/internal-api-keys/index.d.ts.map +1 -0
  387. package/dist/esm/lib/{stack-app → hexclave-app}/internal-api-keys/index.js +1 -1
  388. package/dist/esm/lib/hexclave-app/internal-api-keys/index.js.map +1 -0
  389. package/dist/{lib/stack-app → esm/lib/hexclave-app}/notification-categories/index.d.ts +1 -1
  390. package/dist/esm/lib/hexclave-app/notification-categories/index.d.ts.map +1 -0
  391. package/dist/{lib/stack-app → esm/lib/hexclave-app}/permissions/index.d.ts +1 -1
  392. package/dist/esm/lib/hexclave-app/permissions/index.d.ts.map +1 -0
  393. package/dist/esm/lib/{stack-app → hexclave-app}/permissions/index.js +1 -1
  394. package/dist/esm/lib/hexclave-app/permissions/index.js.map +1 -0
  395. package/dist/esm/lib/{stack-app → hexclave-app}/project-configs/index.d.ts +1 -1
  396. package/dist/esm/lib/hexclave-app/project-configs/index.d.ts.map +1 -0
  397. package/dist/esm/lib/{stack-app → hexclave-app}/projects/index.d.ts +1 -1
  398. package/dist/esm/lib/hexclave-app/projects/index.d.ts.map +1 -0
  399. package/dist/esm/lib/{stack-app → hexclave-app}/projects/index.js +1 -1
  400. package/dist/esm/lib/hexclave-app/projects/index.js.map +1 -0
  401. package/dist/{lib/stack-app → esm/lib/hexclave-app}/session-replays/index.d.ts +1 -1
  402. package/dist/esm/lib/hexclave-app/session-replays/index.d.ts.map +1 -0
  403. package/dist/esm/lib/{stack-app → hexclave-app}/teams/index.d.ts +1 -1
  404. package/dist/esm/lib/hexclave-app/teams/index.d.ts.map +1 -0
  405. package/dist/esm/lib/{stack-app → hexclave-app}/teams/index.js +1 -1
  406. package/dist/esm/lib/hexclave-app/teams/index.js.map +1 -0
  407. package/dist/esm/lib/{stack-app → hexclave-app}/url-targets.d.ts +1 -1
  408. package/dist/esm/lib/hexclave-app/url-targets.d.ts.map +1 -0
  409. package/dist/esm/lib/{stack-app → hexclave-app}/url-targets.js +26 -12
  410. package/dist/esm/lib/hexclave-app/url-targets.js.map +1 -0
  411. package/dist/esm/lib/{stack-app → hexclave-app}/url-targets.test.js +13 -1
  412. package/dist/esm/lib/hexclave-app/url-targets.test.js.map +1 -0
  413. package/dist/esm/lib/{stack-app → hexclave-app}/users/index.d.ts +2 -2
  414. package/dist/esm/lib/hexclave-app/users/index.d.ts.map +1 -0
  415. package/dist/esm/lib/{stack-app → hexclave-app}/users/index.js +1 -1
  416. package/dist/esm/lib/hexclave-app/users/index.js.map +1 -0
  417. package/dist/esm/lib/hooks.d.ts +1 -1
  418. package/dist/esm/lib/hooks.js +9 -9
  419. package/dist/esm/lib/hooks.js.map +1 -1
  420. package/dist/esm/lib/translations.js.map +1 -1
  421. package/dist/esm/providers/hexclave-context.d.ts +11 -0
  422. package/dist/esm/providers/hexclave-context.d.ts.map +1 -0
  423. package/dist/esm/providers/hexclave-context.js +12 -0
  424. package/dist/esm/providers/hexclave-context.js.map +1 -0
  425. package/dist/esm/providers/{stack-provider-client.d.ts → hexclave-provider-client.d.ts} +5 -5
  426. package/dist/esm/providers/hexclave-provider-client.d.ts.map +1 -0
  427. package/dist/esm/providers/hexclave-provider-client.js +30 -0
  428. package/dist/esm/providers/hexclave-provider-client.js.map +1 -0
  429. package/dist/esm/providers/{stack-provider.d.ts → hexclave-provider.d.ts} +3 -3
  430. package/dist/esm/providers/hexclave-provider.d.ts.map +1 -0
  431. package/dist/esm/providers/{stack-provider.js → hexclave-provider.js} +4 -4
  432. package/dist/esm/providers/hexclave-provider.js.map +1 -0
  433. package/dist/esm/providers/theme-provider.js.map +1 -1
  434. package/dist/esm/providers/translation-provider-client.js.map +1 -1
  435. package/dist/esm/providers/translation-provider.js +1 -1
  436. package/dist/esm/providers/translation-provider.js.map +1 -1
  437. package/dist/esm/tanstack-start-server-context.d.ts +1 -1
  438. package/dist/esm/utils/browser-script.js.map +1 -1
  439. package/dist/esm/utils/constants.js.map +1 -1
  440. package/dist/esm/utils/url.js.map +1 -1
  441. package/dist/generated/env.d.ts +26 -0
  442. package/dist/{lib → generated}/env.d.ts.map +1 -1
  443. package/dist/generated/env.js +69 -0
  444. package/dist/generated/env.js.map +1 -0
  445. package/dist/generated/quetzal-translations.d.ts +2 -2
  446. package/dist/generated/quetzal-translations.js.map +1 -1
  447. package/dist/global.d.ts +8 -1
  448. package/dist/global.d.ts.map +1 -0
  449. package/dist/index.d.ts +18 -18
  450. package/dist/index.js +9 -9
  451. package/dist/integrations/convex/component/convex.config.js.map +1 -1
  452. package/dist/integrations/convex.js +2 -2
  453. package/dist/integrations/convex.js.map +1 -1
  454. package/dist/lib/auth.js +1 -1
  455. package/dist/lib/auth.js.map +1 -1
  456. package/dist/lib/auth.test.js +1 -1
  457. package/dist/lib/auth.test.js.map +1 -1
  458. package/dist/lib/cookie.js.map +1 -1
  459. package/dist/{esm/lib/stack-app → lib/hexclave-app}/api-keys/index.d.ts +2 -2
  460. package/dist/{esm/lib/stack-app → lib/hexclave-app}/api-keys/index.d.ts.map +1 -1
  461. package/dist/lib/{stack-app → hexclave-app}/api-keys/index.js +1 -1
  462. package/dist/lib/hexclave-app/api-keys/index.js.map +1 -0
  463. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/admin-app-impl.d.ts +6 -6
  464. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts.map +1 -0
  465. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/admin-app-impl.js +6 -6
  466. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.js.map +1 -0
  467. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.js +381 -0
  468. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.js.map +1 -0
  469. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.d.ts +16 -14
  470. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.d.ts.map +1 -0
  471. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.js +75 -55
  472. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.js.map +1 -0
  473. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.oauth-prefetch.test.js +1 -1
  474. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +1 -0
  475. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/common.d.ts +11 -11
  476. package/dist/lib/hexclave-app/apps/implementations/common.d.ts.map +1 -0
  477. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/common.js +34 -20
  478. package/dist/lib/hexclave-app/apps/implementations/common.js.map +1 -0
  479. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.d.ts +1 -1
  480. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/event-tracker.d.ts.map +1 -1
  481. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.js +1 -1
  482. package/dist/lib/hexclave-app/apps/implementations/event-tracker.js.map +1 -0
  483. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.test.js +1 -1
  484. package/dist/lib/hexclave-app/apps/implementations/event-tracker.test.js.map +1 -0
  485. package/dist/lib/hexclave-app/apps/implementations/index.d.ts +9 -0
  486. package/dist/lib/hexclave-app/apps/implementations/index.d.ts.map +1 -0
  487. package/dist/lib/hexclave-app/apps/implementations/index.js +31 -0
  488. package/dist/lib/hexclave-app/apps/implementations/index.js.map +1 -0
  489. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/redirect-page-urls.d.ts +1 -1
  490. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/redirect-page-urls.d.ts.map +1 -1
  491. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/redirect-page-urls.js +1 -1
  492. package/dist/lib/hexclave-app/apps/implementations/redirect-page-urls.js.map +1 -0
  493. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/server-app-impl.d.ts +4 -4
  494. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/server-app-impl.d.ts.map +1 -1
  495. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/server-app-impl.js +7 -7
  496. package/dist/lib/hexclave-app/apps/implementations/server-app-impl.js.map +1 -0
  497. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/session-refresh-subscription.d.ts +1 -1
  498. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/session-refresh-subscription.d.ts.map +1 -1
  499. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.js +1 -1
  500. package/dist/lib/hexclave-app/apps/implementations/session-refresh-subscription.js.map +1 -0
  501. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.test.js +1 -1
  502. package/dist/lib/hexclave-app/apps/implementations/session-refresh-subscription.test.js.map +1 -0
  503. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/session-replay.d.ts +1 -1
  504. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/session-replay.d.ts.map +1 -1
  505. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.js +2 -2
  506. package/dist/lib/hexclave-app/apps/implementations/session-replay.js.map +1 -0
  507. package/dist/lib/hexclave-app/apps/implementations/session-replay.test.d.ts +1 -0
  508. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.test.js +1 -1
  509. package/dist/lib/hexclave-app/apps/implementations/session-replay.test.js.map +1 -0
  510. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/admin-app.d.ts +1 -1
  511. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/interfaces/admin-app.d.ts.map +1 -1
  512. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/admin-app.js +2 -2
  513. package/dist/lib/hexclave-app/apps/interfaces/admin-app.js.map +1 -0
  514. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/client-app.d.ts +4 -4
  515. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/interfaces/client-app.d.ts.map +1 -1
  516. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/client-app.js +2 -2
  517. package/dist/lib/hexclave-app/apps/interfaces/client-app.js.map +1 -0
  518. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/server-app.d.ts +1 -1
  519. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/interfaces/server-app.d.ts.map +1 -1
  520. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/server-app.js +2 -2
  521. package/dist/lib/hexclave-app/apps/interfaces/server-app.js.map +1 -0
  522. package/dist/lib/{stack-app → hexclave-app}/common.d.ts +7 -7
  523. package/dist/{esm/lib/stack-app → lib/hexclave-app}/common.d.ts.map +1 -1
  524. package/dist/lib/hexclave-app/common.js +9 -0
  525. package/dist/lib/hexclave-app/common.js.map +1 -0
  526. package/dist/lib/{stack-app → hexclave-app}/connected-accounts/index.d.ts +1 -1
  527. package/dist/{esm/lib/stack-app → lib/hexclave-app}/connected-accounts/index.d.ts.map +1 -1
  528. package/dist/lib/{stack-app → hexclave-app}/contact-channels/index.d.ts +1 -1
  529. package/dist/{esm/lib/stack-app → lib/hexclave-app}/contact-channels/index.d.ts.map +1 -1
  530. package/dist/lib/{stack-app → hexclave-app}/contact-channels/index.js +1 -1
  531. package/dist/lib/hexclave-app/contact-channels/index.js.map +1 -0
  532. package/dist/lib/{stack-app → hexclave-app}/customers/index.d.ts +1 -1
  533. package/dist/{esm/lib/stack-app → lib/hexclave-app}/customers/index.d.ts.map +1 -1
  534. package/dist/lib/{stack-app → hexclave-app}/data-vault/index.d.ts +1 -1
  535. package/dist/{esm/lib/stack-app → lib/hexclave-app}/data-vault/index.d.ts.map +1 -1
  536. package/dist/lib/{stack-app → hexclave-app}/email/index.d.ts +1 -1
  537. package/dist/{esm/lib/stack-app → lib/hexclave-app}/email/index.d.ts.map +1 -1
  538. package/dist/{esm/lib/stack-app → lib/hexclave-app}/email-templates/index.d.ts +1 -1
  539. package/dist/{esm/lib/stack-app → lib/hexclave-app}/email-templates/index.d.ts.map +1 -1
  540. package/dist/lib/{stack-app → hexclave-app}/email-templates/index.js +1 -1
  541. package/dist/lib/hexclave-app/email-templates/index.js.map +1 -0
  542. package/dist/lib/{stack-app → hexclave-app}/index.d.ts +2 -2
  543. package/dist/lib/{stack-app → hexclave-app}/index.js +2 -2
  544. package/dist/{esm/lib/stack-app → lib/hexclave-app}/internal-api-keys/index.d.ts +1 -1
  545. package/dist/{esm/lib/stack-app → lib/hexclave-app}/internal-api-keys/index.d.ts.map +1 -1
  546. package/dist/lib/{stack-app → hexclave-app}/internal-api-keys/index.js +1 -1
  547. package/dist/lib/hexclave-app/internal-api-keys/index.js.map +1 -0
  548. package/dist/{esm/lib/stack-app → lib/hexclave-app}/notification-categories/index.d.ts +1 -1
  549. package/dist/{esm/lib/stack-app → lib/hexclave-app}/notification-categories/index.d.ts.map +1 -1
  550. package/dist/{esm/lib/stack-app → lib/hexclave-app}/permissions/index.d.ts +1 -1
  551. package/dist/{esm/lib/stack-app → lib/hexclave-app}/permissions/index.d.ts.map +1 -1
  552. package/dist/lib/{stack-app → hexclave-app}/permissions/index.js +1 -1
  553. package/dist/lib/hexclave-app/permissions/index.js.map +1 -0
  554. package/dist/lib/{stack-app → hexclave-app}/project-configs/index.d.ts +1 -1
  555. package/dist/{esm/lib/stack-app → lib/hexclave-app}/project-configs/index.d.ts.map +1 -1
  556. package/dist/lib/{stack-app → hexclave-app}/projects/index.d.ts +1 -1
  557. package/dist/{esm/lib/stack-app → lib/hexclave-app}/projects/index.d.ts.map +1 -1
  558. package/dist/lib/{stack-app → hexclave-app}/projects/index.js +1 -1
  559. package/dist/lib/hexclave-app/projects/index.js.map +1 -0
  560. package/dist/{esm/lib/stack-app → lib/hexclave-app}/session-replays/index.d.ts +1 -1
  561. package/dist/{esm/lib/stack-app → lib/hexclave-app}/session-replays/index.d.ts.map +1 -1
  562. package/dist/lib/{stack-app → hexclave-app}/teams/index.d.ts +1 -1
  563. package/dist/{esm/lib/stack-app → lib/hexclave-app}/teams/index.d.ts.map +1 -1
  564. package/dist/lib/{stack-app → hexclave-app}/teams/index.js +1 -1
  565. package/dist/lib/hexclave-app/teams/index.js.map +1 -0
  566. package/dist/lib/{stack-app → hexclave-app}/url-targets.d.ts +1 -1
  567. package/dist/{esm/lib/stack-app → lib/hexclave-app}/url-targets.d.ts.map +1 -1
  568. package/dist/lib/{stack-app → hexclave-app}/url-targets.js +26 -12
  569. package/dist/lib/hexclave-app/url-targets.js.map +1 -0
  570. package/dist/lib/hexclave-app/url-targets.test.d.ts +1 -0
  571. package/dist/lib/{stack-app → hexclave-app}/url-targets.test.js +13 -1
  572. package/dist/lib/hexclave-app/url-targets.test.js.map +1 -0
  573. package/dist/lib/{stack-app → hexclave-app}/users/index.d.ts +1 -1
  574. package/dist/{esm/lib/stack-app → lib/hexclave-app}/users/index.d.ts.map +1 -1
  575. package/dist/lib/{stack-app → hexclave-app}/users/index.js +1 -1
  576. package/dist/lib/hexclave-app/users/index.js.map +1 -0
  577. package/dist/lib/hooks.d.ts +3 -3
  578. package/dist/lib/hooks.d.ts.map +1 -1
  579. package/dist/lib/hooks.js +9 -9
  580. package/dist/lib/hooks.js.map +1 -1
  581. package/dist/lib/translations.js.map +1 -1
  582. package/dist/providers/hexclave-context.d.ts +11 -0
  583. package/dist/providers/hexclave-context.d.ts.map +1 -0
  584. package/dist/providers/hexclave-context.js +15 -0
  585. package/dist/providers/hexclave-context.js.map +1 -0
  586. package/dist/providers/{stack-provider-client.d.ts → hexclave-provider-client.d.ts} +5 -5
  587. package/dist/providers/hexclave-provider-client.d.ts.map +1 -0
  588. package/dist/providers/{stack-provider-client.js → hexclave-provider-client.js} +9 -9
  589. package/dist/providers/hexclave-provider-client.js.map +1 -0
  590. package/dist/providers/{stack-provider.d.ts → hexclave-provider.d.ts} +3 -3
  591. package/dist/providers/hexclave-provider.d.ts.map +1 -0
  592. package/dist/providers/{stack-provider.js → hexclave-provider.js} +4 -4
  593. package/dist/providers/hexclave-provider.js.map +1 -0
  594. package/dist/providers/theme-provider.js.map +1 -1
  595. package/dist/providers/translation-provider-client.js.map +1 -1
  596. package/dist/providers/translation-provider.js +1 -1
  597. package/dist/providers/translation-provider.js.map +1 -1
  598. package/dist/tanstack-start-server-context.d.ts +1 -1
  599. package/dist/utils/browser-script.js.map +1 -1
  600. package/dist/utils/constants.js.map +1 -1
  601. package/dist/utils/url.js.map +1 -1
  602. package/package.json +10 -7
  603. package/src/components/api-key-dialogs.tsx +173 -0
  604. package/src/components/api-key-table.tsx +127 -0
  605. package/src/components/credential-sign-in.tsx +83 -0
  606. package/src/components/credential-sign-up.tsx +108 -0
  607. package/src/components/elements/form-warning.tsx +17 -0
  608. package/src/components/elements/maybe-full-page.tsx +60 -0
  609. package/src/components/elements/separator-with-text.tsx +22 -0
  610. package/src/components/elements/sidebar-layout.tsx +136 -0
  611. package/src/components/elements/ssr-layout-effect.tsx +24 -0
  612. package/src/components/elements/user-avatar.tsx +32 -0
  613. package/src/components/link.tsx +38 -0
  614. package/src/components/magic-link-sign-in.tsx +143 -0
  615. package/src/components/message-cards/known-error-message-card.tsx +33 -0
  616. package/src/components/message-cards/message-card.tsx +46 -0
  617. package/src/components/message-cards/predefined-message-card.tsx +88 -0
  618. package/src/components/oauth-button-group.tsx +35 -0
  619. package/src/components/oauth-button.tsx +222 -0
  620. package/src/components/passkey-button.tsx +43 -0
  621. package/src/components/profile-image-editor.tsx +194 -0
  622. package/src/components/selected-team-switcher.tsx +97 -0
  623. package/src/components/team-icon.tsx +30 -0
  624. package/src/components/team-switcher.tsx +191 -0
  625. package/src/components/use-in-iframe.tsx +18 -0
  626. package/src/components/user-button.tsx +157 -0
  627. package/src/components-page/account-settings/active-sessions/active-sessions-page.tsx +238 -0
  628. package/src/components-page/account-settings/api-keys/api-keys-page.tsx +157 -0
  629. package/src/components-page/account-settings/editable-text.tsx +53 -0
  630. package/src/components-page/account-settings/email-and-auth/email-and-auth-page.tsx +24 -0
  631. package/src/components-page/account-settings/email-and-auth/emails-section.tsx +201 -0
  632. package/src/components-page/account-settings/email-and-auth/mfa-section.tsx +139 -0
  633. package/src/components-page/account-settings/email-and-auth/otp-section.tsx +102 -0
  634. package/src/components-page/account-settings/email-and-auth/passkey-section.tsx +112 -0
  635. package/src/components-page/account-settings/email-and-auth/password-section.tsx +174 -0
  636. package/src/components-page/account-settings/notifications/notifications-page.tsx +44 -0
  637. package/src/components-page/account-settings/page-layout.tsx +11 -0
  638. package/src/components-page/account-settings/payments/payments-page.tsx +73 -0
  639. package/src/components-page/account-settings/payments/payments-panel.tsx +543 -0
  640. package/src/components-page/account-settings/profile-page/profile-page.tsx +61 -0
  641. package/src/components-page/account-settings/section.tsx +26 -0
  642. package/src/components-page/account-settings/settings/delete-account-section.tsx +85 -0
  643. package/src/components-page/account-settings/settings/settings-page.tsx +19 -0
  644. package/src/components-page/account-settings/settings/sign-out-section.tsx +40 -0
  645. package/src/components-page/account-settings/teams/leave-team-section.tsx +57 -0
  646. package/src/components-page/account-settings/teams/team-api-keys-section.tsx +74 -0
  647. package/src/components-page/account-settings/teams/team-creation-page.tsx +92 -0
  648. package/src/components-page/account-settings/teams/team-display-name-section.tsx +31 -0
  649. package/src/components-page/account-settings/teams/team-member-invitation-section.tsx +128 -0
  650. package/src/components-page/account-settings/teams/team-member-list-section.tsx +59 -0
  651. package/src/components-page/account-settings/teams/team-page.tsx +28 -0
  652. package/src/components-page/account-settings/teams/team-profile-image-section.tsx +33 -0
  653. package/src/components-page/account-settings/teams/team-profile-user-section.tsx +29 -0
  654. package/src/components-page/account-settings.tsx +343 -0
  655. package/src/components-page/auth-page.tsx +206 -0
  656. package/src/components-page/cli-auth-confirm.test.tsx +204 -0
  657. package/src/components-page/cli-auth-confirm.tsx +278 -0
  658. package/src/components-page/email-verification.tsx +76 -0
  659. package/src/components-page/error-page.tsx +105 -0
  660. package/src/components-page/forgot-password.tsx +105 -0
  661. package/src/components-page/hexclave-handler-client.test.tsx +64 -0
  662. package/src/components-page/hexclave-handler-client.tsx +400 -0
  663. package/src/components-page/hexclave-handler.tsx +48 -0
  664. package/src/components-page/magic-link-callback.tsx +92 -0
  665. package/src/components-page/mfa.tsx +222 -0
  666. package/src/components-page/oauth-callback.tsx +78 -0
  667. package/src/components-page/onboarding.tsx +176 -0
  668. package/src/components-page/password-reset.tsx +185 -0
  669. package/src/components-page/section.tsx +27 -0
  670. package/src/components-page/sign-in.tsx +34 -0
  671. package/src/components-page/sign-out.tsx +37 -0
  672. package/src/components-page/sign-up.tsx +24 -0
  673. package/src/components-page/team-creation.tsx +78 -0
  674. package/src/components-page/team-invitation.tsx +150 -0
  675. package/src/dev-tool/dev-tool-core.ts +2460 -0
  676. package/src/dev-tool/dev-tool-styles.ts +2758 -0
  677. package/src/dev-tool/dev-tool-trigger-position.test.ts +113 -0
  678. package/src/dev-tool/dev-tool-trigger-position.ts +109 -0
  679. package/src/dev-tool/index.ts +149 -0
  680. package/src/generated/.gitignore +3 -0
  681. package/src/generated/quetzal-translations.ts +4312 -0
  682. package/src/global.css +13 -0
  683. package/src/global.d.ts +12 -0
  684. package/src/index.ts +39 -0
  685. package/src/integrations/convex/component/README.md +74 -0
  686. package/src/integrations/convex/component/convex.config.ts +9 -0
  687. package/src/integrations/convex.ts +28 -0
  688. package/src/lib/auth.test.ts +67 -0
  689. package/src/lib/auth.ts +175 -0
  690. package/src/lib/cookie.ts +327 -0
  691. package/src/lib/hexclave-app/api-keys/index.ts +73 -0
  692. package/src/lib/hexclave-app/apps/implementations/admin-app-impl.ts +1261 -0
  693. package/src/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.ts +454 -0
  694. package/src/lib/hexclave-app/apps/implementations/client-app-impl.oauth-prefetch.test.ts +36 -0
  695. package/src/lib/hexclave-app/apps/implementations/client-app-impl.ts +3942 -0
  696. package/src/lib/hexclave-app/apps/implementations/common.ts +264 -0
  697. package/src/lib/hexclave-app/apps/implementations/event-tracker.test.ts +105 -0
  698. package/src/lib/hexclave-app/apps/implementations/event-tracker.ts +306 -0
  699. package/src/lib/hexclave-app/apps/implementations/index.ts +35 -0
  700. package/src/lib/hexclave-app/apps/implementations/redirect-page-urls.ts +342 -0
  701. package/src/lib/hexclave-app/apps/implementations/server-app-impl.ts +1619 -0
  702. package/src/lib/hexclave-app/apps/implementations/session-refresh-subscription.test.ts +106 -0
  703. package/src/lib/hexclave-app/apps/implementations/session-refresh-subscription.ts +52 -0
  704. package/src/lib/hexclave-app/apps/implementations/session-replay.test.ts +33 -0
  705. package/src/lib/hexclave-app/apps/implementations/session-replay.ts +356 -0
  706. package/src/lib/hexclave-app/apps/index.ts +40 -0
  707. package/src/lib/hexclave-app/apps/interfaces/admin-app.ts +192 -0
  708. package/src/lib/hexclave-app/apps/interfaces/client-app.ts +180 -0
  709. package/src/lib/hexclave-app/apps/interfaces/server-app.ts +129 -0
  710. package/src/lib/hexclave-app/common.ts +215 -0
  711. package/src/lib/hexclave-app/connected-accounts/index.ts +49 -0
  712. package/src/lib/hexclave-app/contact-channels/index.ts +80 -0
  713. package/src/lib/hexclave-app/customers/index.ts +158 -0
  714. package/src/lib/hexclave-app/data-vault/index.ts +12 -0
  715. package/src/lib/hexclave-app/email/index.ts +280 -0
  716. package/src/lib/hexclave-app/email-templates/index.ts +24 -0
  717. package/src/lib/hexclave-app/index.ts +146 -0
  718. package/src/lib/hexclave-app/internal-api-keys/index.ts +55 -0
  719. package/src/lib/hexclave-app/notification-categories/index.ts +12 -0
  720. package/src/lib/hexclave-app/permissions/index.ts +75 -0
  721. package/src/lib/hexclave-app/project-configs/index.ts +103 -0
  722. package/src/lib/hexclave-app/projects/index.ts +236 -0
  723. package/src/lib/hexclave-app/session-replays/index.ts +72 -0
  724. package/src/lib/hexclave-app/teams/index.ts +206 -0
  725. package/src/lib/hexclave-app/url-targets.test.ts +270 -0
  726. package/src/lib/hexclave-app/url-targets.ts +413 -0
  727. package/src/lib/hexclave-app/users/index.ts +523 -0
  728. package/src/lib/hooks.tsx +63 -0
  729. package/src/lib/translations.tsx +23 -0
  730. package/src/providers/hexclave-context.tsx +20 -0
  731. package/src/providers/hexclave-provider-client.tsx +39 -0
  732. package/src/providers/hexclave-provider.tsx +48 -0
  733. package/src/providers/theme-provider.tsx +121 -0
  734. package/src/providers/translation-provider-client.tsx +35 -0
  735. package/src/providers/translation-provider.tsx +25 -0
  736. package/src/tanstack-start-server-context.d.ts +13 -0
  737. package/src/utils/browser-script.tsx +135 -0
  738. package/src/utils/constants.tsx +58 -0
  739. package/src/utils/url.ts +24 -0
  740. package/dist/components-page/stack-handler-client.d.ts.map +0 -1
  741. package/dist/components-page/stack-handler-client.js.map +0 -1
  742. package/dist/components-page/stack-handler.d.ts.map +0 -1
  743. package/dist/components-page/stack-handler.js.map +0 -1
  744. package/dist/esm/components-page/stack-handler-client.d.ts.map +0 -1
  745. package/dist/esm/components-page/stack-handler-client.js.map +0 -1
  746. package/dist/esm/components-page/stack-handler.d.ts.map +0 -1
  747. package/dist/esm/components-page/stack-handler.js.map +0 -1
  748. package/dist/esm/lib/env.d.ts +0 -42
  749. package/dist/esm/lib/env.js +0 -93
  750. package/dist/esm/lib/env.js.map +0 -1
  751. package/dist/esm/lib/stack-app/api-keys/index.js.map +0 -1
  752. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.d.ts.map +0 -1
  753. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js.map +0 -1
  754. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.cross-domain.test.js +0 -121
  755. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.cross-domain.test.js.map +0 -1
  756. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.d.ts.map +0 -1
  757. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js.map +0 -1
  758. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +0 -1
  759. package/dist/esm/lib/stack-app/apps/implementations/common.d.ts.map +0 -1
  760. package/dist/esm/lib/stack-app/apps/implementations/common.js.map +0 -1
  761. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.js.map +0 -1
  762. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.test.js.map +0 -1
  763. package/dist/esm/lib/stack-app/apps/implementations/index.d.ts +0 -9
  764. package/dist/esm/lib/stack-app/apps/implementations/index.d.ts.map +0 -1
  765. package/dist/esm/lib/stack-app/apps/implementations/index.js +0 -27
  766. package/dist/esm/lib/stack-app/apps/implementations/index.js.map +0 -1
  767. package/dist/esm/lib/stack-app/apps/implementations/redirect-page-urls.js.map +0 -1
  768. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js.map +0 -1
  769. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.js.map +0 -1
  770. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.test.js.map +0 -1
  771. package/dist/esm/lib/stack-app/apps/implementations/session-replay.js.map +0 -1
  772. package/dist/esm/lib/stack-app/apps/implementations/session-replay.test.js.map +0 -1
  773. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.js.map +0 -1
  774. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js.map +0 -1
  775. package/dist/esm/lib/stack-app/apps/interfaces/server-app.js.map +0 -1
  776. package/dist/esm/lib/stack-app/common.js +0 -7
  777. package/dist/esm/lib/stack-app/common.js.map +0 -1
  778. package/dist/esm/lib/stack-app/contact-channels/index.js.map +0 -1
  779. package/dist/esm/lib/stack-app/email-templates/index.js.map +0 -1
  780. package/dist/esm/lib/stack-app/internal-api-keys/index.js.map +0 -1
  781. package/dist/esm/lib/stack-app/permissions/index.js.map +0 -1
  782. package/dist/esm/lib/stack-app/projects/index.js.map +0 -1
  783. package/dist/esm/lib/stack-app/teams/index.js.map +0 -1
  784. package/dist/esm/lib/stack-app/url-targets.js.map +0 -1
  785. package/dist/esm/lib/stack-app/url-targets.test.js.map +0 -1
  786. package/dist/esm/lib/stack-app/users/index.js.map +0 -1
  787. package/dist/esm/providers/stack-context.d.ts +0 -11
  788. package/dist/esm/providers/stack-context.d.ts.map +0 -1
  789. package/dist/esm/providers/stack-context.js +0 -12
  790. package/dist/esm/providers/stack-context.js.map +0 -1
  791. package/dist/esm/providers/stack-provider-client.d.ts.map +0 -1
  792. package/dist/esm/providers/stack-provider-client.js +0 -30
  793. package/dist/esm/providers/stack-provider-client.js.map +0 -1
  794. package/dist/esm/providers/stack-provider.d.ts.map +0 -1
  795. package/dist/esm/providers/stack-provider.js.map +0 -1
  796. package/dist/lib/env.d.ts +0 -42
  797. package/dist/lib/env.js +0 -95
  798. package/dist/lib/env.js.map +0 -1
  799. package/dist/lib/stack-app/api-keys/index.d.ts.map +0 -1
  800. package/dist/lib/stack-app/api-keys/index.js.map +0 -1
  801. package/dist/lib/stack-app/apps/implementations/admin-app-impl.d.ts.map +0 -1
  802. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js.map +0 -1
  803. package/dist/lib/stack-app/apps/implementations/client-app-impl.cross-domain.test.js +0 -121
  804. package/dist/lib/stack-app/apps/implementations/client-app-impl.cross-domain.test.js.map +0 -1
  805. package/dist/lib/stack-app/apps/implementations/client-app-impl.d.ts.map +0 -1
  806. package/dist/lib/stack-app/apps/implementations/client-app-impl.js.map +0 -1
  807. package/dist/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +0 -1
  808. package/dist/lib/stack-app/apps/implementations/common.d.ts.map +0 -1
  809. package/dist/lib/stack-app/apps/implementations/common.js.map +0 -1
  810. package/dist/lib/stack-app/apps/implementations/event-tracker.d.ts.map +0 -1
  811. package/dist/lib/stack-app/apps/implementations/event-tracker.js.map +0 -1
  812. package/dist/lib/stack-app/apps/implementations/event-tracker.test.js.map +0 -1
  813. package/dist/lib/stack-app/apps/implementations/index.d.ts +0 -9
  814. package/dist/lib/stack-app/apps/implementations/index.d.ts.map +0 -1
  815. package/dist/lib/stack-app/apps/implementations/index.js +0 -31
  816. package/dist/lib/stack-app/apps/implementations/index.js.map +0 -1
  817. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.d.ts.map +0 -1
  818. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.js.map +0 -1
  819. package/dist/lib/stack-app/apps/implementations/server-app-impl.d.ts.map +0 -1
  820. package/dist/lib/stack-app/apps/implementations/server-app-impl.js.map +0 -1
  821. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.d.ts.map +0 -1
  822. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.js.map +0 -1
  823. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.test.js.map +0 -1
  824. package/dist/lib/stack-app/apps/implementations/session-replay.d.ts.map +0 -1
  825. package/dist/lib/stack-app/apps/implementations/session-replay.js.map +0 -1
  826. package/dist/lib/stack-app/apps/implementations/session-replay.test.js.map +0 -1
  827. package/dist/lib/stack-app/apps/interfaces/admin-app.d.ts.map +0 -1
  828. package/dist/lib/stack-app/apps/interfaces/admin-app.js.map +0 -1
  829. package/dist/lib/stack-app/apps/interfaces/client-app.d.ts.map +0 -1
  830. package/dist/lib/stack-app/apps/interfaces/client-app.js.map +0 -1
  831. package/dist/lib/stack-app/apps/interfaces/server-app.d.ts.map +0 -1
  832. package/dist/lib/stack-app/apps/interfaces/server-app.js.map +0 -1
  833. package/dist/lib/stack-app/common.d.ts.map +0 -1
  834. package/dist/lib/stack-app/common.js +0 -9
  835. package/dist/lib/stack-app/common.js.map +0 -1
  836. package/dist/lib/stack-app/connected-accounts/index.d.ts.map +0 -1
  837. package/dist/lib/stack-app/contact-channels/index.d.ts.map +0 -1
  838. package/dist/lib/stack-app/contact-channels/index.js.map +0 -1
  839. package/dist/lib/stack-app/customers/index.d.ts.map +0 -1
  840. package/dist/lib/stack-app/data-vault/index.d.ts.map +0 -1
  841. package/dist/lib/stack-app/email/index.d.ts.map +0 -1
  842. package/dist/lib/stack-app/email-templates/index.d.ts.map +0 -1
  843. package/dist/lib/stack-app/email-templates/index.js.map +0 -1
  844. package/dist/lib/stack-app/internal-api-keys/index.d.ts.map +0 -1
  845. package/dist/lib/stack-app/internal-api-keys/index.js.map +0 -1
  846. package/dist/lib/stack-app/notification-categories/index.d.ts.map +0 -1
  847. package/dist/lib/stack-app/permissions/index.d.ts.map +0 -1
  848. package/dist/lib/stack-app/permissions/index.js.map +0 -1
  849. package/dist/lib/stack-app/project-configs/index.d.ts.map +0 -1
  850. package/dist/lib/stack-app/projects/index.d.ts.map +0 -1
  851. package/dist/lib/stack-app/projects/index.js.map +0 -1
  852. package/dist/lib/stack-app/session-replays/index.d.ts.map +0 -1
  853. package/dist/lib/stack-app/teams/index.d.ts.map +0 -1
  854. package/dist/lib/stack-app/teams/index.js.map +0 -1
  855. package/dist/lib/stack-app/url-targets.d.ts.map +0 -1
  856. package/dist/lib/stack-app/url-targets.js.map +0 -1
  857. package/dist/lib/stack-app/url-targets.test.js.map +0 -1
  858. package/dist/lib/stack-app/users/index.d.ts.map +0 -1
  859. package/dist/lib/stack-app/users/index.js.map +0 -1
  860. package/dist/providers/stack-context.d.ts +0 -11
  861. package/dist/providers/stack-context.d.ts.map +0 -1
  862. package/dist/providers/stack-context.js +0 -15
  863. package/dist/providers/stack-context.js.map +0 -1
  864. package/dist/providers/stack-provider-client.d.ts.map +0 -1
  865. package/dist/providers/stack-provider-client.js.map +0 -1
  866. package/dist/providers/stack-provider.d.ts.map +0 -1
  867. package/dist/providers/stack-provider.js.map +0 -1
  868. /package/dist/{esm/lib/stack-app/apps/implementations/client-app-impl.cross-domain.test.d.ts → components-page/hexclave-handler-client.test.d.ts} +0 -0
  869. /package/dist/esm/{lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.d.ts → components-page/hexclave-handler-client.test.d.ts} +0 -0
  870. /package/dist/{lib/stack-app → esm/lib/hexclave-app}/apps/implementations/client-app-impl.cross-domain.test.d.ts +0 -0
  871. /package/dist/{lib/stack-app → esm/lib/hexclave-app}/apps/implementations/client-app-impl.oauth-prefetch.test.d.ts +0 -0
  872. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.test.d.ts +0 -0
  873. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.test.d.ts +0 -0
  874. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.test.d.ts +0 -0
  875. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/index.d.ts +0 -0
  876. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/index.js +0 -0
  877. /package/dist/esm/lib/{stack-app → hexclave-app}/connected-accounts/index.js +0 -0
  878. /package/dist/esm/lib/{stack-app → hexclave-app}/customers/index.js +0 -0
  879. /package/dist/esm/lib/{stack-app → hexclave-app}/data-vault/index.js +0 -0
  880. /package/dist/esm/lib/{stack-app → hexclave-app}/email/index.js +0 -0
  881. /package/dist/esm/lib/{stack-app → hexclave-app}/notification-categories/index.js +0 -0
  882. /package/dist/esm/lib/{stack-app → hexclave-app}/project-configs/index.js +0 -0
  883. /package/dist/esm/lib/{stack-app → hexclave-app}/session-replays/index.js +0 -0
  884. /package/dist/esm/lib/{stack-app → hexclave-app}/url-targets.test.d.ts +0 -0
  885. /package/dist/lib/{stack-app/apps/implementations/event-tracker.test.d.ts → hexclave-app/apps/implementations/client-app-impl.cross-domain.test.d.ts} +0 -0
  886. /package/dist/lib/{stack-app/apps/implementations/session-refresh-subscription.test.d.ts → hexclave-app/apps/implementations/client-app-impl.oauth-prefetch.test.d.ts} +0 -0
  887. /package/dist/lib/{stack-app/apps/implementations/session-replay.test.d.ts → hexclave-app/apps/implementations/event-tracker.test.d.ts} +0 -0
  888. /package/dist/lib/{stack-app/url-targets.test.d.ts → hexclave-app/apps/implementations/session-refresh-subscription.test.d.ts} +0 -0
  889. /package/dist/lib/{stack-app → hexclave-app}/apps/index.d.ts +0 -0
  890. /package/dist/lib/{stack-app → hexclave-app}/apps/index.js +0 -0
  891. /package/dist/lib/{stack-app → hexclave-app}/connected-accounts/index.js +0 -0
  892. /package/dist/lib/{stack-app → hexclave-app}/customers/index.js +0 -0
  893. /package/dist/lib/{stack-app → hexclave-app}/data-vault/index.js +0 -0
  894. /package/dist/lib/{stack-app → hexclave-app}/email/index.js +0 -0
  895. /package/dist/lib/{stack-app → hexclave-app}/notification-categories/index.js +0 -0
  896. /package/dist/lib/{stack-app → hexclave-app}/project-configs/index.js +0 -0
  897. /package/dist/lib/{stack-app → hexclave-app}/session-replays/index.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"settings-page.js","names":["PageLayout","DeleteAccountSection","SignOutSection"],"sources":["../../../../src/components-page/account-settings/settings/settings-page.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 { PageLayout } from \"../page-layout\";\nimport { DeleteAccountSection } from \"./delete-account-section\";\nimport { SignOutSection } from \"./sign-out-section\";\n\n\nexport function SettingsPage(props?: {\n mockMode?: boolean,\n}) {\n return (\n <PageLayout>\n <DeleteAccountSection mockMode={props?.mockMode} />\n <SignOutSection mockMode={props?.mockMode} />\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;AASA,SAAgB,aAAa,OAE1B;AACD,QACE,4CAACA,2CACC,2CAACC,oDAAqB,UAAU,OAAO,WAAY,EACnD,2CAACC,wCAAe,UAAU,OAAO,WAAY,IAClC"}
1
+ {"version":3,"file":"settings-page.js","names":["PageLayout","DeleteAccountSection","SignOutSection"],"sources":["../../../../src/components-page/account-settings/settings/settings-page.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 { PageLayout } from \"../page-layout\";\nimport { DeleteAccountSection } from \"./delete-account-section\";\nimport { SignOutSection } from \"./sign-out-section\";\n\n\nexport function SettingsPage(props?: {\n mockMode?: boolean,\n}) {\n return (\n <PageLayout>\n <DeleteAccountSection mockMode={props?.mockMode} />\n <SignOutSection mockMode={props?.mockMode} />\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;AASA,SAAgB,aAAa,OAE1B;AACD,QACE,4CAACA,2CACC,2CAACC,oDAAqB,UAAU,OAAO,WAAY,EACnD,2CAACC,wCAAe,UAAU,OAAO,WAAY,IAClC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sign-out-section.js","names":["Section","Button"],"sources":["../../../../src/components-page/account-settings/settings/sign-out-section.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 { Button } from \"@hexclave/ui\";\nimport { useUser } from \"../../../lib/hooks\";\nimport { useTranslation } from \"../../../lib/translations\";\nimport { Section } from \"../section\";\n\nexport function SignOutSection(props?: { mockMode?: boolean }) {\n const { t } = useTranslation();\n const user = useUser({ or: props?.mockMode ? \"return-null\" : \"throw\" });\n\n const handleSignOut = async () => {\n if (props?.mockMode) {\n // Mock mode - just show an alert or do nothing\n alert(\"Mock mode: Sign out clicked\");\n return;\n }\n if (user) {\n await user.signOut();\n }\n };\n\n return (\n <Section\n title={t(\"Sign out\")}\n description={t(\"End your current session\")}\n >\n <div>\n <Button\n variant='secondary'\n onClick={handleSignOut}\n >\n {t(\"Sign out\")}\n </Button>\n </div>\n </Section>\n );\n}\n"],"mappings":";;;;;;;;;AASA,SAAgB,eAAe,OAAgC;CAC7D,MAAM,EAAE,wDAAsB;CAC9B,MAAM,0CAAe,EAAE,IAAI,OAAO,WAAW,gBAAgB,SAAS,CAAC;CAEvE,MAAM,gBAAgB,YAAY;AAChC,MAAI,OAAO,UAAU;AAEnB,SAAM,8BAA8B;AACpC;;AAEF,MAAI,KACF,OAAM,KAAK,SAAS;;AAIxB,QACE,2CAACA;EACC,OAAO,EAAE,WAAW;EACpB,aAAa,EAAE,2BAA2B;YAE1C,2CAAC,mBACC,2CAACC;GACC,SAAQ;GACR,SAAS;aAER,EAAE,WAAW;IACP,GACL;GACE"}
1
+ {"version":3,"file":"sign-out-section.js","names":["Section","Button"],"sources":["../../../../src/components-page/account-settings/settings/sign-out-section.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 { Button } from \"@hexclave/ui\";\nimport { useUser } from \"../../../lib/hooks\";\nimport { useTranslation } from \"../../../lib/translations\";\nimport { Section } from \"../section\";\n\nexport function SignOutSection(props?: { mockMode?: boolean }) {\n const { t } = useTranslation();\n const user = useUser({ or: props?.mockMode ? \"return-null\" : \"throw\" });\n\n const handleSignOut = async () => {\n if (props?.mockMode) {\n // Mock mode - just show an alert or do nothing\n alert(\"Mock mode: Sign out clicked\");\n return;\n }\n if (user) {\n await user.signOut();\n }\n };\n\n return (\n <Section\n title={t(\"Sign out\")}\n description={t(\"End your current session\")}\n >\n <div>\n <Button\n variant='secondary'\n onClick={handleSignOut}\n >\n {t(\"Sign out\")}\n </Button>\n </div>\n </Section>\n );\n}\n"],"mappings":";;;;;;;;;AASA,SAAgB,eAAe,OAAgC;CAC7D,MAAM,EAAE,wDAAsB;CAC9B,MAAM,0CAAe,EAAE,IAAI,OAAO,WAAW,gBAAgB,SAAS,CAAC;CAEvE,MAAM,gBAAgB,YAAY;AAChC,MAAI,OAAO,UAAU;AAEnB,SAAM,8BAA8B;AACpC;;AAEF,MAAI,KACF,OAAM,KAAK,SAAS;;AAIxB,QACE,2CAACA;EACC,OAAO,EAAE,WAAW;EACpB,aAAa,EAAE,2BAA2B;YAE1C,2CAAC,mBACC,2CAACC;GACC,SAAQ;GACR,SAAS;aAER,EAAE,WAAW;IACP,GACL;GACE"}
@@ -1,4 +1,4 @@
1
- import { Team } from "../../../lib/stack-app/teams/index.js";
1
+ import { Team } from "../../../lib/hexclave-app/teams/index.js";
2
2
  import * as react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components-page/account-settings/teams/leave-team-section.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"leave-team-section.js","names":["Section","Button","Typography"],"sources":["../../../../src/components-page/account-settings/teams/leave-team-section.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 { Button, Typography } from \"@hexclave/ui\";\nimport { useState } from \"react\";\nimport { Team } from \"../../..\";\nimport { useUser } from \"../../../lib/hooks\";\nimport { useTranslation } from \"../../../lib/translations\";\nimport { Section } from \"../section\";\n\nexport function LeaveTeamSection(props: { team: Team }) {\n const { t } = useTranslation();\n const user = useUser({ or: 'redirect' });\n const [leaving, setLeaving] = useState(false);\n\n return (\n <Section\n title={t(\"Leave Team\")}\n description={t(\"leave this team and remove your team profile\")}\n >\n {!leaving ? (\n <div>\n <Button\n variant='secondary'\n onClick={() => setLeaving(true)}\n >\n {t(\"Leave team\")}\n </Button>\n </div>\n ) : (\n <div className='flex flex-col gap-2'>\n <Typography variant='destructive'>\n {t(\"Are you sure you want to leave the team?\")}\n </Typography>\n <div className='flex gap-2'>\n <Button\n variant='destructive'\n onClick={async () => {\n await user.leaveTeam(props.team);\n window.location.reload();\n }}\n >\n {t(\"Leave\")}\n </Button>\n <Button\n variant='secondary'\n onClick={() => setLeaving(false)}\n >\n {t(\"Cancel\")}\n </Button>\n </div>\n </div>\n )}\n </Section>\n );\n}\n"],"mappings":";;;;;;;;;;AAWA,SAAgB,iBAAiB,OAAuB;CACtD,MAAM,EAAE,wDAAsB;CAC9B,MAAM,0CAAe,EAAE,IAAI,YAAY,CAAC;CACxC,MAAM,CAAC,SAAS,kCAAuB,MAAM;AAE7C,QACE,2CAACA;EACC,OAAO,EAAE,aAAa;EACtB,aAAa,EAAE,+CAA+C;YAE7D,CAAC,UACA,2CAAC,mBACC,2CAACC;GACC,SAAQ;GACR,eAAe,WAAW,KAAK;aAE9B,EAAE,aAAa;IACT,GACL,GAEN,4CAAC;GAAI,WAAU;cACb,2CAACC;IAAW,SAAQ;cACjB,EAAE,2CAA2C;KACnC,EACb,4CAAC;IAAI,WAAU;eACb,2CAACD;KACC,SAAQ;KACR,SAAS,YAAY;AACnB,YAAM,KAAK,UAAU,MAAM,KAAK;AAChC,aAAO,SAAS,QAAQ;;eAGzB,EAAE,QAAQ;MACJ,EACT,2CAACA;KACC,SAAQ;KACR,eAAe,WAAW,MAAM;eAE/B,EAAE,SAAS;MACL;KACL;IACF;GAEA"}
1
+ {"version":3,"file":"leave-team-section.js","names":["Section","Button","Typography"],"sources":["../../../../src/components-page/account-settings/teams/leave-team-section.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 { Button, Typography } from \"@hexclave/ui\";\nimport { useState } from \"react\";\nimport { Team } from \"../../..\";\nimport { useUser } from \"../../../lib/hooks\";\nimport { useTranslation } from \"../../../lib/translations\";\nimport { Section } from \"../section\";\n\nexport function LeaveTeamSection(props: { team: Team }) {\n const { t } = useTranslation();\n const user = useUser({ or: 'redirect' });\n const [leaving, setLeaving] = useState(false);\n\n return (\n <Section\n title={t(\"Leave Team\")}\n description={t(\"leave this team and remove your team profile\")}\n >\n {!leaving ? (\n <div>\n <Button\n variant='secondary'\n onClick={() => setLeaving(true)}\n >\n {t(\"Leave team\")}\n </Button>\n </div>\n ) : (\n <div className='flex flex-col gap-2'>\n <Typography variant='destructive'>\n {t(\"Are you sure you want to leave the team?\")}\n </Typography>\n <div className='flex gap-2'>\n <Button\n variant='destructive'\n onClick={async () => {\n await user.leaveTeam(props.team);\n window.location.reload();\n }}\n >\n {t(\"Leave\")}\n </Button>\n <Button\n variant='secondary'\n onClick={() => setLeaving(false)}\n >\n {t(\"Cancel\")}\n </Button>\n </div>\n </div>\n )}\n </Section>\n );\n}\n"],"mappings":";;;;;;;;;;AAWA,SAAgB,iBAAiB,OAAuB;CACtD,MAAM,EAAE,wDAAsB;CAC9B,MAAM,0CAAe,EAAE,IAAI,YAAY,CAAC;CACxC,MAAM,CAAC,SAAS,kCAAuB,MAAM;AAE7C,QACE,2CAACA;EACC,OAAO,EAAE,aAAa;EACtB,aAAa,EAAE,+CAA+C;YAE7D,CAAC,UACA,2CAAC,mBACC,2CAACC;GACC,SAAQ;GACR,eAAe,WAAW,KAAK;aAE9B,EAAE,aAAa;IACT,GACL,GAEN,4CAAC;GAAI,WAAU;cACb,2CAACC;IAAW,SAAQ;cACjB,EAAE,2CAA2C;KACnC,EACb,4CAAC;IAAI,WAAU;eACb,2CAACD;KACC,SAAQ;KACR,SAAS,YAAY;AACnB,YAAM,KAAK,UAAU,MAAM,KAAK;AAChC,aAAO,SAAS,QAAQ;;eAGzB,EAAE,QAAQ;MACJ,EACT,2CAACA;KACC,SAAQ;KACR,eAAe,WAAW,MAAM;eAE/B,EAAE,SAAS;MACL;KACL;IACF;GAEA"}
@@ -1,4 +1,4 @@
1
- import { Team } from "../../../lib/stack-app/teams/index.js";
1
+ import { Team } from "../../../lib/hexclave-app/teams/index.js";
2
2
  import * as react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components-page/account-settings/teams/team-api-keys-section.d.ts
@@ -1,9 +1,9 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  const require_chunk = require('../../../chunk-BE-pF4vm.js');
3
+ let _hexclave_shared_dist_utils_errors = require("@hexclave/shared/dist/utils/errors");
3
4
  let _hexclave_ui = require("@hexclave/ui");
4
5
  let react = require("react");
5
6
  let react_jsx_runtime = require("react/jsx-runtime");
6
- let _hexclave_shared_dist_utils_errors = require("@hexclave/shared/dist/utils/errors");
7
7
  let _________lib_hooks_js = require("../../../lib/hooks.js");
8
8
  let _________lib_translations_js = require("../../../lib/translations.js");
9
9
  let _________components_api_key_dialogs_js = require("../../../components/api-key-dialogs.js");
@@ -1 +1 @@
1
- {"version":3,"file":"team-api-keys-section.js","names":["HexclaveAssertionError","CreateApiKeyDialog","ShowApiKeyDialog","Section","Button","ApiKeyTable"],"sources":["../../../../src/components-page/account-settings/teams/team-api-keys-section.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 { HexclaveAssertionError } from \"@hexclave/shared/dist/utils/errors\";\nimport { Button } from \"@hexclave/ui\";\nimport { useState } from \"react\";\nimport { CreateApiKeyDialog, ShowApiKeyDialog } from \"../../../components/api-key-dialogs\";\nimport { ApiKeyTable } from \"../../../components/api-key-table\";\nimport { useStackApp, useUser } from \"../../../lib/hooks\";\nimport { TeamApiKeyFirstView } from \"../../../lib/stack-app/api-keys\";\nimport { Team } from \"../../../lib/stack-app/teams\";\nimport { useTranslation } from \"../../../lib/translations\";\nimport { Section } from \"../section\";\n\n\nexport function TeamApiKeysSection(props: { team: Team }) {\n const user = useUser({ or: 'redirect' });\n const team = user.useTeam(props.team.id);\n const stackApp = useStackApp();\n const project = stackApp.useProject();\n\n if (!team) {\n throw new HexclaveAssertionError(\"Team not found\");\n }\n\n const teamApiKeysEnabled = project.config.allowTeamApiKeys;\n const manageApiKeysPermission = user.usePermission(props.team, '$manage_api_keys');\n if (!manageApiKeysPermission || !teamApiKeysEnabled) {\n return null;\n }\n\n return <TeamApiKeysSectionInner team={props.team} />;\n}\n\nfunction TeamApiKeysSectionInner(props: { team: Team }) {\n const { t } = useTranslation();\n\n const [isNewApiKeyDialogOpen, setIsNewApiKeyDialogOpen] = useState(false);\n const [returnedApiKey, setReturnedApiKey] = useState<TeamApiKeyFirstView | null>(null);\n\n const apiKeys = props.team.useApiKeys();\n\n const CreateDialog = CreateApiKeyDialog<\"team\">;\n const ShowDialog = ShowApiKeyDialog<\"team\">;\n\n return (\n <>\n <Section\n title={t(\"API Keys\")}\n description={t(\"API keys grant programmatic access to your team.\")}\n >\n <Button onClick={() => setIsNewApiKeyDialogOpen(true)}>\n {t(\"Create API Key\")}\n </Button>\n </Section>\n <ApiKeyTable apiKeys={apiKeys} />\n\n <CreateDialog\n open={isNewApiKeyDialogOpen}\n onOpenChange={setIsNewApiKeyDialogOpen}\n onKeyCreated={setReturnedApiKey}\n createApiKey={async (data) => {\n const apiKey = await props.team.createApiKey(data);\n return apiKey;\n }}\n />\n <ShowDialog\n apiKey={returnedApiKey}\n onClose={() => setReturnedApiKey(null)}\n />\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAgBA,SAAgB,mBAAmB,OAAuB;CACxD,MAAM,0CAAe,EAAE,IAAI,YAAY,CAAC;CACxC,MAAM,OAAO,KAAK,QAAQ,MAAM,KAAK,GAAG;CAExC,MAAM,kDADwB,CACL,YAAY;AAErC,KAAI,CAAC,KACH,OAAM,IAAIA,0DAAuB,iBAAiB;CAGpD,MAAM,qBAAqB,QAAQ,OAAO;AAE1C,KAAI,CAD4B,KAAK,cAAc,MAAM,MAAM,mBAAmB,IAClD,CAAC,mBAC/B,QAAO;AAGT,QAAO,2CAAC,2BAAwB,MAAM,MAAM,OAAQ;;AAGtD,SAAS,wBAAwB,OAAuB;CACtD,MAAM,EAAE,wDAAsB;CAE9B,MAAM,CAAC,uBAAuB,gDAAqC,MAAM;CACzE,MAAM,CAAC,gBAAgB,yCAA0D,KAAK;CAEtF,MAAM,UAAU,MAAM,KAAK,YAAY;CAEvC,MAAM,eAAeC;CACrB,MAAM,aAAaC;AAEnB,QACE;EACE,2CAACC;GACC,OAAO,EAAE,WAAW;GACpB,aAAa,EAAE,mDAAmD;aAElE,2CAACC;IAAO,eAAe,yBAAyB,KAAK;cAClD,EAAE,iBAAiB;KACb;IACD;EACV,2CAACC,oDAAqB,UAAW;EAEjC,2CAAC;GACC,MAAM;GACN,cAAc;GACd,cAAc;GACd,cAAc,OAAO,SAAS;AAE5B,WADe,MAAM,MAAM,KAAK,aAAa,KAAK;;IAGpD;EACF,2CAAC;GACC,QAAQ;GACR,eAAe,kBAAkB,KAAK;IACtC;KACD"}
1
+ {"version":3,"file":"team-api-keys-section.js","names":["HexclaveAssertionError","CreateApiKeyDialog","ShowApiKeyDialog","Section","Button","ApiKeyTable"],"sources":["../../../../src/components-page/account-settings/teams/team-api-keys-section.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 { HexclaveAssertionError } from \"@hexclave/shared/dist/utils/errors\";\nimport { Button } from \"@hexclave/ui\";\nimport { useState } from \"react\";\nimport { CreateApiKeyDialog, ShowApiKeyDialog } from \"../../../components/api-key-dialogs\";\nimport { ApiKeyTable } from \"../../../components/api-key-table\";\nimport { useStackApp, useUser } from \"../../../lib/hooks\";\nimport { TeamApiKeyFirstView } from \"../../../lib/hexclave-app/api-keys\";\nimport { Team } from \"../../../lib/hexclave-app/teams\";\nimport { useTranslation } from \"../../../lib/translations\";\nimport { Section } from \"../section\";\n\n\nexport function TeamApiKeysSection(props: { team: Team }) {\n const user = useUser({ or: 'redirect' });\n const team = user.useTeam(props.team.id);\n const hexclaveApp = useStackApp();\n const project = hexclaveApp.useProject();\n\n if (!team) {\n throw new HexclaveAssertionError(\"Team not found\");\n }\n\n const teamApiKeysEnabled = project.config.allowTeamApiKeys;\n const manageApiKeysPermission = user.usePermission(props.team, '$manage_api_keys');\n if (!manageApiKeysPermission || !teamApiKeysEnabled) {\n return null;\n }\n\n return <TeamApiKeysSectionInner team={props.team} />;\n}\n\nfunction TeamApiKeysSectionInner(props: { team: Team }) {\n const { t } = useTranslation();\n\n const [isNewApiKeyDialogOpen, setIsNewApiKeyDialogOpen] = useState(false);\n const [returnedApiKey, setReturnedApiKey] = useState<TeamApiKeyFirstView | null>(null);\n\n const apiKeys = props.team.useApiKeys();\n\n const CreateDialog = CreateApiKeyDialog<\"team\">;\n const ShowDialog = ShowApiKeyDialog<\"team\">;\n\n return (\n <>\n <Section\n title={t(\"API Keys\")}\n description={t(\"API keys grant programmatic access to your team.\")}\n >\n <Button onClick={() => setIsNewApiKeyDialogOpen(true)}>\n {t(\"Create API Key\")}\n </Button>\n </Section>\n <ApiKeyTable apiKeys={apiKeys} />\n\n <CreateDialog\n open={isNewApiKeyDialogOpen}\n onOpenChange={setIsNewApiKeyDialogOpen}\n onKeyCreated={setReturnedApiKey}\n createApiKey={async (data) => {\n const apiKey = await props.team.createApiKey(data);\n return apiKey;\n }}\n />\n <ShowDialog\n apiKey={returnedApiKey}\n onClose={() => setReturnedApiKey(null)}\n />\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAgBA,SAAgB,mBAAmB,OAAuB;CACxD,MAAM,0CAAe,EAAE,IAAI,YAAY,CAAC;CACxC,MAAM,OAAO,KAAK,QAAQ,MAAM,KAAK,GAAG;CAExC,MAAM,kDAD2B,CACL,YAAY;AAExC,KAAI,CAAC,KACH,OAAM,IAAIA,0DAAuB,iBAAiB;CAGpD,MAAM,qBAAqB,QAAQ,OAAO;AAE1C,KAAI,CAD4B,KAAK,cAAc,MAAM,MAAM,mBAAmB,IAClD,CAAC,mBAC/B,QAAO;AAGT,QAAO,2CAAC,2BAAwB,MAAM,MAAM,OAAQ;;AAGtD,SAAS,wBAAwB,OAAuB;CACtD,MAAM,EAAE,wDAAsB;CAE9B,MAAM,CAAC,uBAAuB,gDAAqC,MAAM;CACzE,MAAM,CAAC,gBAAgB,yCAA0D,KAAK;CAEtF,MAAM,UAAU,MAAM,KAAK,YAAY;CAEvC,MAAM,eAAeC;CACrB,MAAM,aAAaC;AAEnB,QACE;EACE,2CAACC;GACC,OAAO,EAAE,WAAW;GACpB,aAAa,EAAE,mDAAmD;aAElE,2CAACC;IAAO,eAAe,yBAAyB,KAAK;cAClD,EAAE,iBAAiB;KACb;IACD;EACV,2CAACC,oDAAqB,UAAW;EAEjC,2CAAC;GACC,MAAM;GACN,cAAc;GACd,cAAc;GACd,cAAc,OAAO,SAAS;AAE5B,WADe,MAAM,MAAM,KAAK,aAAa,KAAK;;IAGpD;EACF,2CAAC;GACC,QAAQ;GACR,eAAe,kBAAkB,KAAK;IACtC;KACD"}
@@ -1,12 +1,12 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  const require_chunk = require('../../../chunk-BE-pF4vm.js');
3
+ let _hookform_resolvers_yup = require("@hookform/resolvers/yup");
4
+ let _hexclave_shared_dist_schema_fields = require("@hexclave/shared/dist/schema-fields");
3
5
  let _hexclave_shared_dist_utils_promises = require("@hexclave/shared/dist/utils/promises");
4
6
  let _hexclave_ui = require("@hexclave/ui");
5
7
  let react = require("react");
6
- let react_jsx_runtime = require("react/jsx-runtime");
7
- let _hookform_resolvers_yup = require("@hookform/resolvers/yup");
8
- let _hexclave_shared_dist_schema_fields = require("@hexclave/shared/dist/schema-fields");
9
8
  let react_hook_form = require("react-hook-form");
9
+ let react_jsx_runtime = require("react/jsx-runtime");
10
10
  let _________lib_hooks_js = require("../../../lib/hooks.js");
11
11
  let _________lib_translations_js = require("../../../lib/translations.js");
12
12
  let ___page_layout_js = require("../page-layout.js");
@@ -1 +1 @@
1
- {"version":3,"file":"team-creation-page.js","names":["PageLayout","MessageCard","Section","Input","FormWarningText","Button"],"sources":["../../../../src/components-page/account-settings/teams/team-creation-page.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 { yupResolver } from \"@hookform/resolvers/yup\";\nimport { yupObject, yupString } from \"@hexclave/shared/dist/schema-fields\";\nimport { runAsynchronouslyWithAlert } from \"@hexclave/shared/dist/utils/promises\";\nimport { Button, Input } from \"@hexclave/ui\";\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { FormWarningText } from \"../../../components/elements/form-warning\";\nimport { MessageCard } from \"../../../components/message-cards/message-card\";\nimport { useStackApp, useUser } from \"../../../lib/hooks\";\nimport { useTranslation } from \"../../../lib/translations\";\nimport { PageLayout } from \"../page-layout\";\nimport { Section } from \"../section\";\n\nexport function TeamCreationPage(props?: {\n mockMode?: boolean,\n}) {\n const { t } = useTranslation();\n\n const teamCreationSchema = yupObject({\n displayName: yupString().defined().nonEmpty(t(\"Please enter a team name\")),\n });\n\n const { register, handleSubmit, formState: { errors } } = useForm({\n resolver: yupResolver(teamCreationSchema)\n });\n const app = useStackApp();\n const project = app.useProject();\n const user = useUser({ or: props?.mockMode ? 'return-null' : 'redirect' });\n const navigate = app.useNavigate();\n const [loading, setLoading] = useState(false);\n\n // In mock mode, show that team creation is disabled\n if (props?.mockMode) {\n return (\n <PageLayout>\n <MessageCard title={t(\"Team creation is disabled in demo mode\")} />\n </PageLayout>\n );\n }\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 teamCreationSchema>) => {\n if (props?.mockMode) {\n // Mock mode - just show an alert\n alert(\"Mock mode: Team creation clicked\");\n return;\n }\n\n setLoading(true);\n\n let team;\n try {\n team = await user?.createTeam({ displayName: data.displayName });\n } finally {\n setLoading(false);\n }\n\n if (team) {\n navigate(`#team-${team.id}`);\n }\n };\n\n return (\n <PageLayout>\n <Section title={t(\"Create a Team\")} description={t(\"Enter a display name for your new team\")}>\n <form\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n className='flex gap-2 flex-col sm:flex-row'\n >\n <div className='flex flex-col flex-1'>\n <Input\n id=\"displayName\"\n type=\"text\"\n {...register(\"displayName\")}\n />\n <FormWarningText text={errors.displayName?.message?.toString()} />\n </div>\n <Button type=\"submit\" loading={loading}>{t(\"Create\")}</Button>\n </form>\n </Section>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAkBA,SAAgB,iBAAiB,OAE9B;CACD,MAAM,EAAE,wDAAsB;CAM9B,MAAM,EAAE,UAAU,cAAc,WAAW,EAAE,0CAAqB,EAChE,sGALmC,EACnC,iEAAwB,CAAC,SAAS,CAAC,SAAS,EAAE,2BAA2B,CAAC,EAC3E,CAAC,CAGyC,EAC1C,CAAC;CACF,MAAM,8CAAmB;CACzB,MAAM,UAAU,IAAI,YAAY;CAChC,MAAM,0CAAe,EAAE,IAAI,OAAO,WAAW,gBAAgB,YAAY,CAAC;CAC1E,MAAM,WAAW,IAAI,aAAa;CAClC,MAAM,CAAC,SAAS,kCAAuB,MAAM;AAG7C,KAAI,OAAO,SACT,QACE,2CAACA,0CACC,2CAACC,iEAAY,OAAO,EAAE,yCAAyC,GAAI,GACxD;AAIjB,KAAI,CAAC,QAAQ,OAAO,0BAClB,QAAO,2CAACA,iEAAY,OAAO,EAAE,+BAA+B,GAAI;CAGlE,MAAM,WAAW,OAAO,SAAmD;AACzE,MAAI,OAAO,UAAU;AAEnB,SAAM,mCAAmC;AACzC;;AAGF,aAAW,KAAK;EAEhB,IAAI;AACJ,MAAI;AACF,UAAO,MAAM,MAAM,WAAW,EAAE,aAAa,KAAK,aAAa,CAAC;YACxD;AACR,cAAW,MAAM;;AAGnB,MAAI,KACF,UAAS,SAAS,KAAK,KAAK;;AAIhC,QACE,2CAACD,0CACC,2CAACE;EAAQ,OAAO,EAAE,gBAAgB;EAAE,aAAa,EAAE,yCAAyC;YAC1F,4CAAC;GACC,WAAU,2EAAgC,aAAa,SAAS,CAAC,EAAE,CAAC;GACpE;GACA,WAAU;cAEV,4CAAC;IAAI,WAAU;eACb,2CAACC;KACC,IAAG;KACH,MAAK;KACL,GAAI,SAAS,cAAc;MAC3B,EACF,2CAACC,gEAAgB,MAAM,OAAO,aAAa,SAAS,UAAU,GAAI;KAC9D,EACN,2CAACC;IAAO,MAAK;IAAkB;cAAU,EAAE,SAAS;KAAU;IACzD;GACC,GACC"}
1
+ {"version":3,"file":"team-creation-page.js","names":["PageLayout","MessageCard","Section","Input","FormWarningText","Button"],"sources":["../../../../src/components-page/account-settings/teams/team-creation-page.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 { yupResolver } from \"@hookform/resolvers/yup\";\nimport { yupObject, yupString } from \"@hexclave/shared/dist/schema-fields\";\nimport { runAsynchronouslyWithAlert } from \"@hexclave/shared/dist/utils/promises\";\nimport { Button, Input } from \"@hexclave/ui\";\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { FormWarningText } from \"../../../components/elements/form-warning\";\nimport { MessageCard } from \"../../../components/message-cards/message-card\";\nimport { useStackApp, useUser } from \"../../../lib/hooks\";\nimport { useTranslation } from \"../../../lib/translations\";\nimport { PageLayout } from \"../page-layout\";\nimport { Section } from \"../section\";\n\nexport function TeamCreationPage(props?: {\n mockMode?: boolean,\n}) {\n const { t } = useTranslation();\n\n const teamCreationSchema = yupObject({\n displayName: yupString().defined().nonEmpty(t(\"Please enter a team name\")),\n });\n\n const { register, handleSubmit, formState: { errors } } = useForm({\n resolver: yupResolver(teamCreationSchema)\n });\n const app = useStackApp();\n const project = app.useProject();\n const user = useUser({ or: props?.mockMode ? 'return-null' : 'redirect' });\n const navigate = app.useNavigate();\n const [loading, setLoading] = useState(false);\n\n // In mock mode, show that team creation is disabled\n if (props?.mockMode) {\n return (\n <PageLayout>\n <MessageCard title={t(\"Team creation is disabled in demo mode\")} />\n </PageLayout>\n );\n }\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 teamCreationSchema>) => {\n if (props?.mockMode) {\n // Mock mode - just show an alert\n alert(\"Mock mode: Team creation clicked\");\n return;\n }\n\n setLoading(true);\n\n let team;\n try {\n team = await user?.createTeam({ displayName: data.displayName });\n } finally {\n setLoading(false);\n }\n\n if (team) {\n navigate(`#team-${team.id}`);\n }\n };\n\n return (\n <PageLayout>\n <Section title={t(\"Create a Team\")} description={t(\"Enter a display name for your new team\")}>\n <form\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n className='flex gap-2 flex-col sm:flex-row'\n >\n <div className='flex flex-col flex-1'>\n <Input\n id=\"displayName\"\n type=\"text\"\n {...register(\"displayName\")}\n />\n <FormWarningText text={errors.displayName?.message?.toString()} />\n </div>\n <Button type=\"submit\" loading={loading}>{t(\"Create\")}</Button>\n </form>\n </Section>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAkBA,SAAgB,iBAAiB,OAE9B;CACD,MAAM,EAAE,wDAAsB;CAM9B,MAAM,EAAE,UAAU,cAAc,WAAW,EAAE,0CAAqB,EAChE,sGALmC,EACnC,iEAAwB,CAAC,SAAS,CAAC,SAAS,EAAE,2BAA2B,CAAC,EAC3E,CAAC,CAGyC,EAC1C,CAAC;CACF,MAAM,8CAAmB;CACzB,MAAM,UAAU,IAAI,YAAY;CAChC,MAAM,0CAAe,EAAE,IAAI,OAAO,WAAW,gBAAgB,YAAY,CAAC;CAC1E,MAAM,WAAW,IAAI,aAAa;CAClC,MAAM,CAAC,SAAS,kCAAuB,MAAM;AAG7C,KAAI,OAAO,SACT,QACE,2CAACA,0CACC,2CAACC,iEAAY,OAAO,EAAE,yCAAyC,GAAI,GACxD;AAIjB,KAAI,CAAC,QAAQ,OAAO,0BAClB,QAAO,2CAACA,iEAAY,OAAO,EAAE,+BAA+B,GAAI;CAGlE,MAAM,WAAW,OAAO,SAAmD;AACzE,MAAI,OAAO,UAAU;AAEnB,SAAM,mCAAmC;AACzC;;AAGF,aAAW,KAAK;EAEhB,IAAI;AACJ,MAAI;AACF,UAAO,MAAM,MAAM,WAAW,EAAE,aAAa,KAAK,aAAa,CAAC;YACxD;AACR,cAAW,MAAM;;AAGnB,MAAI,KACF,UAAS,SAAS,KAAK,KAAK;;AAIhC,QACE,2CAACD,0CACC,2CAACE;EAAQ,OAAO,EAAE,gBAAgB;EAAE,aAAa,EAAE,yCAAyC;YAC1F,4CAAC;GACC,WAAU,2EAAgC,aAAa,SAAS,CAAC,EAAE,CAAC;GACpE;GACA,WAAU;cAEV,4CAAC;IAAI,WAAU;eACb,2CAACC;KACC,IAAG;KACH,MAAK;KACL,GAAI,SAAS,cAAc;MAC3B,EACF,2CAACC,gEAAgB,MAAM,OAAO,aAAa,SAAS,UAAU,GAAI;KAC9D,EACN,2CAACC;IAAO,MAAK;IAAkB;cAAU,EAAE,SAAS;KAAU;IACzD;GACC,GACC"}
@@ -1,4 +1,4 @@
1
- import { Team } from "../../../lib/stack-app/teams/index.js";
1
+ import { Team } from "../../../lib/hexclave-app/teams/index.js";
2
2
  import * as react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components-page/account-settings/teams/team-display-name-section.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"team-display-name-section.js","names":["Section","EditableText"],"sources":["../../../../src/components-page/account-settings/teams/team-display-name-section.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 { Team } from \"../../..\";\nimport { useUser } from \"../../../lib/hooks\";\nimport { useTranslation } from \"../../../lib/translations\";\nimport { EditableText } from \"../editable-text\";\nimport { Section } from \"../section\";\n\nexport function TeamDisplayNameSection(props: { team: Team }) {\n const { t } = useTranslation();\n const user = useUser({ or: 'redirect' });\n const updateTeamPermission = user.usePermission(props.team, '$update_team');\n\n if (!updateTeamPermission) {\n return null;\n }\n\n return (\n <Section\n title={t(\"Team display name\")}\n description={t(\"Change the display name of your team\")}\n >\n <EditableText\n value={props.team.displayName}\n onSave={async (newDisplayName) => await props.team.update({ displayName: newDisplayName })}\n />\n </Section>\n );\n}\n"],"mappings":";;;;;;;;;AAUA,SAAgB,uBAAuB,OAAuB;CAC5D,MAAM,EAAE,wDAAsB;AAI9B,KAAI,oCAHiB,EAAE,IAAI,YAAY,CAAC,CACN,cAAc,MAAM,MAAM,eAAe,CAGzE,QAAO;AAGT,QACE,2CAACA;EACC,OAAO,EAAE,oBAAoB;EAC7B,aAAa,EAAE,uCAAuC;YAEtD,2CAACC;GACC,OAAO,MAAM,KAAK;GAClB,QAAQ,OAAO,mBAAmB,MAAM,MAAM,KAAK,OAAO,EAAE,aAAa,gBAAgB,CAAC;IAC1F;GACM"}
1
+ {"version":3,"file":"team-display-name-section.js","names":["Section","EditableText"],"sources":["../../../../src/components-page/account-settings/teams/team-display-name-section.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 { Team } from \"../../..\";\nimport { useUser } from \"../../../lib/hooks\";\nimport { useTranslation } from \"../../../lib/translations\";\nimport { EditableText } from \"../editable-text\";\nimport { Section } from \"../section\";\n\nexport function TeamDisplayNameSection(props: { team: Team }) {\n const { t } = useTranslation();\n const user = useUser({ or: 'redirect' });\n const updateTeamPermission = user.usePermission(props.team, '$update_team');\n\n if (!updateTeamPermission) {\n return null;\n }\n\n return (\n <Section\n title={t(\"Team display name\")}\n description={t(\"Change the display name of your team\")}\n >\n <EditableText\n value={props.team.displayName}\n onSave={async (newDisplayName) => await props.team.update({ displayName: newDisplayName })}\n />\n </Section>\n );\n}\n"],"mappings":";;;;;;;;;AAUA,SAAgB,uBAAuB,OAAuB;CAC5D,MAAM,EAAE,wDAAsB;AAI9B,KAAI,oCAHiB,EAAE,IAAI,YAAY,CAAC,CACN,cAAc,MAAM,MAAM,eAAe,CAGzE,QAAO;AAGT,QACE,2CAACA;EACC,OAAO,EAAE,oBAAoB;EAC7B,aAAa,EAAE,uCAAuC;YAEtD,2CAACC;GACC,OAAO,MAAM,KAAK;GAClB,QAAQ,OAAO,mBAAmB,MAAM,MAAM,KAAK,OAAO,EAAE,aAAa,gBAAgB,CAAC;IAC1F;GACM"}
@@ -1,4 +1,4 @@
1
- import { Team } from "../../../lib/stack-app/teams/index.js";
1
+ import { Team } from "../../../lib/hexclave-app/teams/index.js";
2
2
  import * as react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components-page/account-settings/teams/team-member-invitation-section.d.ts
@@ -1,13 +1,13 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  const require_chunk = require('../../../chunk-BE-pF4vm.js');
3
+ let _hookform_resolvers_yup = require("@hookform/resolvers/yup");
4
+ let _hexclave_shared_dist_schema_fields = require("@hexclave/shared/dist/schema-fields");
3
5
  let _hexclave_shared_dist_utils_promises = require("@hexclave/shared/dist/utils/promises");
4
6
  let _hexclave_ui = require("@hexclave/ui");
5
- let lucide_react = require("lucide-react");
6
7
  let react = require("react");
7
- let react_jsx_runtime = require("react/jsx-runtime");
8
- let _hookform_resolvers_yup = require("@hookform/resolvers/yup");
9
- let _hexclave_shared_dist_schema_fields = require("@hexclave/shared/dist/schema-fields");
10
8
  let react_hook_form = require("react-hook-form");
9
+ let react_jsx_runtime = require("react/jsx-runtime");
10
+ let lucide_react = require("lucide-react");
11
11
  let _________lib_hooks_js = require("../../../lib/hooks.js");
12
12
  let _________lib_translations_js = require("../../../lib/translations.js");
13
13
  let _________components_elements_form_warning_js = require("../../../components/elements/form-warning.js");
@@ -1 +1 @@
1
- {"version":3,"file":"team-member-invitation-section.js","names":["Table","TableHeader","TableRow","TableHead","TableBody","TableCell","Typography","Button","Trash","Section","Input","FormWarningText"],"sources":["../../../../src/components-page/account-settings/teams/team-member-invitation-section.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 { yupResolver } from \"@hookform/resolvers/yup\";\nimport { strictEmailSchema, yupObject } from \"@hexclave/shared/dist/schema-fields\";\nimport { runAsynchronouslyWithAlert } from \"@hexclave/shared/dist/utils/promises\";\nimport { Button, Input, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Typography } from \"@hexclave/ui\";\nimport { Trash } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { Team } from \"../../..\";\nimport { FormWarningText } from \"../../../components/elements/form-warning\";\nimport { useUser } from \"../../../lib/hooks\";\nimport { useTranslation } from \"../../../lib/translations\";\nimport { Section } from \"../section\";\n\nexport function TeamMemberInvitationSection(props: { team: Team }) {\n const user = useUser({ or: 'redirect' });\n const inviteMemberPermission = user.usePermission(props.team, '$invite_members');\n\n if (!inviteMemberPermission) {\n return null;\n }\n\n return <MemberInvitationSectionInner team={props.team} />;\n}\n\nfunction MemberInvitationsSectionInvitationsList(props: { team: Team }) {\n const user = useUser({ or: 'redirect' });\n const { t } = useTranslation();\n const invitationsToShow = props.team.useInvitations();\n const removeMemberPermission = user.usePermission(props.team, '$remove_members');\n\n return <>\n <Table className='mt-6'>\n <TableHeader>\n <TableRow>\n <TableHead className=\"w-[200px]\">{t(\"Outstanding invitations\")}</TableHead>\n <TableHead className=\"w-[60px]\">{t(\"Expires\")}</TableHead>\n <TableHead className=\"w-[36px] max-w-[36px]\"></TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {invitationsToShow.map((invitation, i) => (\n <TableRow key={invitation.id}>\n <TableCell>\n <Typography>{invitation.recipientEmail}</Typography>\n </TableCell>\n <TableCell>\n <Typography variant='secondary'>{invitation.expiresAt.toLocaleString()}</Typography>\n </TableCell>\n <TableCell align='right' className='max-w-[36px]'>\n {removeMemberPermission && (\n <Button onClick={async () => await invitation.revoke()} size='icon' variant='ghost'>\n <Trash className=\"w-4 h-4\" />\n </Button>\n )}\n </TableCell>\n </TableRow>\n ))}\n {invitationsToShow.length === 0 && <TableRow>\n <TableCell colSpan={3}>\n <Typography variant='secondary'>{t(\"No outstanding invitations\")}</Typography>\n </TableCell>\n </TableRow>}\n </TableBody>\n </Table>\n </>;\n}\n\nfunction MemberInvitationSectionInner(props: { team: Team }) {\n const user = useUser({ or: 'redirect' });\n const { t } = useTranslation();\n const readMemberPermission = user.usePermission(props.team, '$read_members');\n\n const invitationSchema = yupObject({\n email: strictEmailSchema(t('Please enter a valid email address')).defined().nonEmpty(t('Please enter an email address')),\n });\n\n const { register, handleSubmit, formState: { errors }, watch } = useForm({\n resolver: yupResolver(invitationSchema)\n });\n const [loading, setLoading] = useState(false);\n const [invitedEmail, setInvitedEmail] = useState<string | null>(null);\n\n const onSubmit = async (data: yup.InferType<typeof invitationSchema>) => {\n setLoading(true);\n\n try {\n await props.team.inviteUser({ email: data.email });\n setInvitedEmail(data.email);\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n setInvitedEmail(null);\n }, [watch('email')]);\n\n return (\n <>\n <Section\n title={t(\"Invite member\")}\n description={t(\"Invite a user to your team through email\")}\n >\n <form\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n className='w-full'\n >\n <div className=\"flex flex-col gap-4 sm:flex-row w-full\">\n <Input\n placeholder={t(\"Email\")}\n {...register(\"email\")}\n />\n <Button type=\"submit\" loading={loading}>{t(\"Invite User\")}</Button>\n </div>\n <FormWarningText text={errors.email?.message?.toString()} />\n {invitedEmail && <Typography type='label' variant='secondary'>Invited {invitedEmail}</Typography>}\n </form>\n </Section>\n {readMemberPermission && <MemberInvitationsSectionInvitationsList team={props.team} />}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAkBA,SAAgB,4BAA4B,OAAuB;AAIjE,KAAI,oCAHiB,EAAE,IAAI,YAAY,CAAC,CACJ,cAAc,MAAM,MAAM,kBAAkB,CAG9E,QAAO;AAGT,QAAO,2CAAC,gCAA6B,MAAM,MAAM,OAAQ;;AAG3D,SAAS,wCAAwC,OAAuB;CACtE,MAAM,0CAAe,EAAE,IAAI,YAAY,CAAC;CACxC,MAAM,EAAE,wDAAsB;CAC9B,MAAM,oBAAoB,MAAM,KAAK,gBAAgB;CACrD,MAAM,yBAAyB,KAAK,cAAc,MAAM,MAAM,kBAAkB;AAEhF,QAAO,mFACL,4CAACA;EAAM,WAAU;aACf,2CAACC,sCACC,4CAACC;GACC,2CAACC;IAAU,WAAU;cAAa,EAAE,0BAA0B;KAAa;GAC3E,2CAACA;IAAU,WAAU;cAAY,EAAE,UAAU;KAAa;GAC1D,2CAACA,0BAAU,WAAU,0BAAoC;MAChD,GACC,EACd,4CAACC,qCACE,kBAAkB,KAAK,YAAY,MAClC,4CAACF;GACC,2CAACG,oCACC,2CAACC,qCAAY,WAAW,iBAA4B,GAC1C;GACZ,2CAACD,oCACC,2CAACC;IAAW,SAAQ;cAAa,WAAW,UAAU,gBAAgB;KAAc,GAC1E;GACZ,2CAACD;IAAU,OAAM;IAAQ,WAAU;cAChC,0BACC,2CAACE;KAAO,SAAS,YAAY,MAAM,WAAW,QAAQ;KAAE,MAAK;KAAO,SAAQ;eAC1E,2CAACC,sBAAM,WAAU,YAAY;MACtB;KAED;OAbC,WAAW,GAcf,CACX,EACD,kBAAkB,WAAW,KAAK,2CAACN,mCAClC,2CAACG;GAAU,SAAS;aAClB,2CAACC;IAAW,SAAQ;cAAa,EAAE,6BAA6B;KAAc;IACpE,GACH,IACD;GACN,GACP;;AAGL,SAAS,6BAA6B,OAAuB;CAC3D,MAAM,0CAAe,EAAE,IAAI,YAAY,CAAC;CACxC,MAAM,EAAE,wDAAsB;CAC9B,MAAM,uBAAuB,KAAK,cAAc,MAAM,MAAM,gBAAgB;CAM5E,MAAM,EAAE,UAAU,cAAc,WAAW,EAAE,UAAU,uCAAkB,EACvE,sGALiC,EACjC,kEAAyB,EAAE,qCAAqC,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,gCAAgC,CAAC,EACzH,CAAC,CAGuC,EACxC,CAAC;CACF,MAAM,CAAC,SAAS,kCAAuB,MAAM;CAC7C,MAAM,CAAC,cAAc,uCAA2C,KAAK;CAErE,MAAM,WAAW,OAAO,SAAiD;AACvE,aAAW,KAAK;AAEhB,MAAI;AACF,SAAM,MAAM,KAAK,WAAW,EAAE,OAAO,KAAK,OAAO,CAAC;AAClD,mBAAgB,KAAK,MAAM;YACnB;AACR,cAAW,MAAM;;;AAIrB,4BAAgB;AACd,kBAAgB,KAAK;IACpB,CAAC,MAAM,QAAQ,CAAC,CAAC;AAEpB,QACE,qFACE,2CAACG;EACC,OAAO,EAAE,gBAAgB;EACzB,aAAa,EAAE,2CAA2C;YAE1D,4CAAC;GACC,WAAU,2EAAgC,aAAa,SAAS,CAAC,EAAE,CAAC;GACpE;GACA,WAAU;;IAEV,4CAAC;KAAI,WAAU;gBACb,2CAACC;MACC,aAAa,EAAE,QAAQ;MACvB,GAAI,SAAS,QAAQ;OACrB,EACF,2CAACH;MAAO,MAAK;MAAkB;gBAAU,EAAE,cAAc;OAAU;MAC/D;IACN,2CAACI,gEAAgB,MAAM,OAAO,OAAO,SAAS,UAAU,GAAI;IAC3D,gBAAgB,4CAACL;KAAW,MAAK;KAAQ,SAAQ;gBAAY,YAAS;MAA0B;;IAC5F;GACC,EACT,wBAAwB,2CAAC,2CAAwC,MAAM,MAAM,OAAQ,IACrF"}
1
+ {"version":3,"file":"team-member-invitation-section.js","names":["Table","TableHeader","TableRow","TableHead","TableBody","TableCell","Typography","Button","Trash","Section","Input","FormWarningText"],"sources":["../../../../src/components-page/account-settings/teams/team-member-invitation-section.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 { yupResolver } from \"@hookform/resolvers/yup\";\nimport { strictEmailSchema, yupObject } from \"@hexclave/shared/dist/schema-fields\";\nimport { runAsynchronouslyWithAlert } from \"@hexclave/shared/dist/utils/promises\";\nimport { Button, Input, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Typography } from \"@hexclave/ui\";\nimport { Trash } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { Team } from \"../../..\";\nimport { FormWarningText } from \"../../../components/elements/form-warning\";\nimport { useUser } from \"../../../lib/hooks\";\nimport { useTranslation } from \"../../../lib/translations\";\nimport { Section } from \"../section\";\n\nexport function TeamMemberInvitationSection(props: { team: Team }) {\n const user = useUser({ or: 'redirect' });\n const inviteMemberPermission = user.usePermission(props.team, '$invite_members');\n\n if (!inviteMemberPermission) {\n return null;\n }\n\n return <MemberInvitationSectionInner team={props.team} />;\n}\n\nfunction MemberInvitationsSectionInvitationsList(props: { team: Team }) {\n const user = useUser({ or: 'redirect' });\n const { t } = useTranslation();\n const invitationsToShow = props.team.useInvitations();\n const removeMemberPermission = user.usePermission(props.team, '$remove_members');\n\n return <>\n <Table className='mt-6'>\n <TableHeader>\n <TableRow>\n <TableHead className=\"w-[200px]\">{t(\"Outstanding invitations\")}</TableHead>\n <TableHead className=\"w-[60px]\">{t(\"Expires\")}</TableHead>\n <TableHead className=\"w-[36px] max-w-[36px]\"></TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {invitationsToShow.map((invitation, i) => (\n <TableRow key={invitation.id}>\n <TableCell>\n <Typography>{invitation.recipientEmail}</Typography>\n </TableCell>\n <TableCell>\n <Typography variant='secondary'>{invitation.expiresAt.toLocaleString()}</Typography>\n </TableCell>\n <TableCell align='right' className='max-w-[36px]'>\n {removeMemberPermission && (\n <Button onClick={async () => await invitation.revoke()} size='icon' variant='ghost'>\n <Trash className=\"w-4 h-4\" />\n </Button>\n )}\n </TableCell>\n </TableRow>\n ))}\n {invitationsToShow.length === 0 && <TableRow>\n <TableCell colSpan={3}>\n <Typography variant='secondary'>{t(\"No outstanding invitations\")}</Typography>\n </TableCell>\n </TableRow>}\n </TableBody>\n </Table>\n </>;\n}\n\nfunction MemberInvitationSectionInner(props: { team: Team }) {\n const user = useUser({ or: 'redirect' });\n const { t } = useTranslation();\n const readMemberPermission = user.usePermission(props.team, '$read_members');\n\n const invitationSchema = yupObject({\n email: strictEmailSchema(t('Please enter a valid email address')).defined().nonEmpty(t('Please enter an email address')),\n });\n\n const { register, handleSubmit, formState: { errors }, watch } = useForm({\n resolver: yupResolver(invitationSchema)\n });\n const [loading, setLoading] = useState(false);\n const [invitedEmail, setInvitedEmail] = useState<string | null>(null);\n\n const onSubmit = async (data: yup.InferType<typeof invitationSchema>) => {\n setLoading(true);\n\n try {\n await props.team.inviteUser({ email: data.email });\n setInvitedEmail(data.email);\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n setInvitedEmail(null);\n }, [watch('email')]);\n\n return (\n <>\n <Section\n title={t(\"Invite member\")}\n description={t(\"Invite a user to your team through email\")}\n >\n <form\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n className='w-full'\n >\n <div className=\"flex flex-col gap-4 sm:flex-row w-full\">\n <Input\n placeholder={t(\"Email\")}\n {...register(\"email\")}\n />\n <Button type=\"submit\" loading={loading}>{t(\"Invite User\")}</Button>\n </div>\n <FormWarningText text={errors.email?.message?.toString()} />\n {invitedEmail && <Typography type='label' variant='secondary'>Invited {invitedEmail}</Typography>}\n </form>\n </Section>\n {readMemberPermission && <MemberInvitationsSectionInvitationsList team={props.team} />}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAkBA,SAAgB,4BAA4B,OAAuB;AAIjE,KAAI,oCAHiB,EAAE,IAAI,YAAY,CAAC,CACJ,cAAc,MAAM,MAAM,kBAAkB,CAG9E,QAAO;AAGT,QAAO,2CAAC,gCAA6B,MAAM,MAAM,OAAQ;;AAG3D,SAAS,wCAAwC,OAAuB;CACtE,MAAM,0CAAe,EAAE,IAAI,YAAY,CAAC;CACxC,MAAM,EAAE,wDAAsB;CAC9B,MAAM,oBAAoB,MAAM,KAAK,gBAAgB;CACrD,MAAM,yBAAyB,KAAK,cAAc,MAAM,MAAM,kBAAkB;AAEhF,QAAO,mFACL,4CAACA;EAAM,WAAU;aACf,2CAACC,sCACC,4CAACC;GACC,2CAACC;IAAU,WAAU;cAAa,EAAE,0BAA0B;KAAa;GAC3E,2CAACA;IAAU,WAAU;cAAY,EAAE,UAAU;KAAa;GAC1D,2CAACA,0BAAU,WAAU,0BAAoC;MAChD,GACC,EACd,4CAACC,qCACE,kBAAkB,KAAK,YAAY,MAClC,4CAACF;GACC,2CAACG,oCACC,2CAACC,qCAAY,WAAW,iBAA4B,GAC1C;GACZ,2CAACD,oCACC,2CAACC;IAAW,SAAQ;cAAa,WAAW,UAAU,gBAAgB;KAAc,GAC1E;GACZ,2CAACD;IAAU,OAAM;IAAQ,WAAU;cAChC,0BACC,2CAACE;KAAO,SAAS,YAAY,MAAM,WAAW,QAAQ;KAAE,MAAK;KAAO,SAAQ;eAC1E,2CAACC,sBAAM,WAAU,YAAY;MACtB;KAED;OAbC,WAAW,GAcf,CACX,EACD,kBAAkB,WAAW,KAAK,2CAACN,mCAClC,2CAACG;GAAU,SAAS;aAClB,2CAACC;IAAW,SAAQ;cAAa,EAAE,6BAA6B;KAAc;IACpE,GACH,IACD;GACN,GACP;;AAGL,SAAS,6BAA6B,OAAuB;CAC3D,MAAM,0CAAe,EAAE,IAAI,YAAY,CAAC;CACxC,MAAM,EAAE,wDAAsB;CAC9B,MAAM,uBAAuB,KAAK,cAAc,MAAM,MAAM,gBAAgB;CAM5E,MAAM,EAAE,UAAU,cAAc,WAAW,EAAE,UAAU,uCAAkB,EACvE,sGALiC,EACjC,kEAAyB,EAAE,qCAAqC,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,gCAAgC,CAAC,EACzH,CAAC,CAGuC,EACxC,CAAC;CACF,MAAM,CAAC,SAAS,kCAAuB,MAAM;CAC7C,MAAM,CAAC,cAAc,uCAA2C,KAAK;CAErE,MAAM,WAAW,OAAO,SAAiD;AACvE,aAAW,KAAK;AAEhB,MAAI;AACF,SAAM,MAAM,KAAK,WAAW,EAAE,OAAO,KAAK,OAAO,CAAC;AAClD,mBAAgB,KAAK,MAAM;YACnB;AACR,cAAW,MAAM;;;AAIrB,4BAAgB;AACd,kBAAgB,KAAK;IACpB,CAAC,MAAM,QAAQ,CAAC,CAAC;AAEpB,QACE,qFACE,2CAACG;EACC,OAAO,EAAE,gBAAgB;EACzB,aAAa,EAAE,2CAA2C;YAE1D,4CAAC;GACC,WAAU,2EAAgC,aAAa,SAAS,CAAC,EAAE,CAAC;GACpE;GACA,WAAU;;IAEV,4CAAC;KAAI,WAAU;gBACb,2CAACC;MACC,aAAa,EAAE,QAAQ;MACvB,GAAI,SAAS,QAAQ;OACrB,EACF,2CAACH;MAAO,MAAK;MAAkB;gBAAU,EAAE,cAAc;OAAU;MAC/D;IACN,2CAACI,gEAAgB,MAAM,OAAO,OAAO,SAAS,UAAU,GAAI;IAC3D,gBAAgB,4CAACL;KAAW,MAAK;KAAQ,SAAQ;gBAAY,YAAS;MAA0B;;IAC5F;GACC,EACT,wBAAwB,2CAAC,2CAAwC,MAAM,MAAM,OAAQ,IACrF"}
@@ -1,4 +1,4 @@
1
- import { Team } from "../../../lib/stack-app/teams/index.js";
1
+ import { Team } from "../../../lib/hexclave-app/teams/index.js";
2
2
  import * as react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components-page/account-settings/teams/team-member-list-section.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"team-member-list-section.js","names":["Typography","Table","TableHeader","TableRow","TableHead","TableBody","TableCell","UserAvatar"],"sources":["../../../../src/components-page/account-settings/teams/team-member-list-section.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 { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Typography } from \"@hexclave/ui\";\nimport { Team } from \"../../..\";\nimport { UserAvatar } from \"../../../components/elements/user-avatar\";\nimport { useUser } from \"../../../lib/hooks\";\nimport { useTranslation } from \"../../../lib/translations\";\n\nexport function TeamMemberListSection(props: { team: Team }) {\n const user = useUser({ or: 'redirect' });\n const readMemberPermission = user.usePermission(props.team, '$read_members');\n const inviteMemberPermission = user.usePermission(props.team, '$invite_members');\n\n if (!readMemberPermission && !inviteMemberPermission) {\n return null;\n }\n\n return <MemberListSectionInner team={props.team} />;\n}\n\nfunction MemberListSectionInner(props: { team: Team }) {\n const { t } = useTranslation();\n const users = props.team.useUsers();\n\n return (\n <div>\n <Typography className='font-medium mb-2'>{t(\"Members\")}</Typography>\n <div className='border rounded-md'>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead className=\"w-[100px]\">{t(\"User\")}</TableHead>\n <TableHead className=\"w-[200px]\">{t(\"Name\")}</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {users.map(({ id, teamProfile }, i) => (\n <TableRow key={id}>\n <TableCell>\n <UserAvatar user={teamProfile} />\n </TableCell>\n <TableCell>\n {teamProfile.displayName && (\n <Typography>{teamProfile.displayName}</Typography>\n )}\n {!teamProfile.displayName && (\n <Typography className=\"text-muted-foreground italic\">{t(\"No display name set\")}</Typography>\n )}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAUA,SAAgB,sBAAsB,OAAuB;CAC3D,MAAM,0CAAe,EAAE,IAAI,YAAY,CAAC;CACxC,MAAM,uBAAuB,KAAK,cAAc,MAAM,MAAM,gBAAgB;CAC5E,MAAM,yBAAyB,KAAK,cAAc,MAAM,MAAM,kBAAkB;AAEhF,KAAI,CAAC,wBAAwB,CAAC,uBAC5B,QAAO;AAGT,QAAO,2CAAC,0BAAuB,MAAM,MAAM,OAAQ;;AAGrD,SAAS,uBAAuB,OAAuB;CACrD,MAAM,EAAE,wDAAsB;CAC9B,MAAM,QAAQ,MAAM,KAAK,UAAU;AAEnC,QACE,4CAAC,oBACC,2CAACA;EAAW,WAAU;YAAoB,EAAE,UAAU;GAAc,EACpE,2CAAC;EAAI,WAAU;YACb,4CAACC,iCACC,2CAACC,sCACC,4CAACC,oCACC,2CAACC;GAAU,WAAU;aAAa,EAAE,OAAO;IAAa,EACxD,2CAACA;GAAU,WAAU;aAAa,EAAE,OAAO;IAAa,IAC/C,GACC,EACd,2CAACC,oCACE,MAAM,KAAK,EAAE,IAAI,eAAe,MAC/B,4CAACF,oCACC,2CAACG,oCACC,2CAACC,0DAAW,MAAM,cAAe,GACvB,EACZ,4CAACD,qCACE,YAAY,eACX,2CAACN,qCAAY,YAAY,cAAyB,EAEnD,CAAC,YAAY,eACZ,2CAACA;GAAW,WAAU;aAAgC,EAAE,sBAAsB;IAAc,IAEpF,KAXC,GAYJ,CACX,GACQ,IACN;GACJ,IACF"}
1
+ {"version":3,"file":"team-member-list-section.js","names":["Typography","Table","TableHeader","TableRow","TableHead","TableBody","TableCell","UserAvatar"],"sources":["../../../../src/components-page/account-settings/teams/team-member-list-section.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 { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Typography } from \"@hexclave/ui\";\nimport { Team } from \"../../..\";\nimport { UserAvatar } from \"../../../components/elements/user-avatar\";\nimport { useUser } from \"../../../lib/hooks\";\nimport { useTranslation } from \"../../../lib/translations\";\n\nexport function TeamMemberListSection(props: { team: Team }) {\n const user = useUser({ or: 'redirect' });\n const readMemberPermission = user.usePermission(props.team, '$read_members');\n const inviteMemberPermission = user.usePermission(props.team, '$invite_members');\n\n if (!readMemberPermission && !inviteMemberPermission) {\n return null;\n }\n\n return <MemberListSectionInner team={props.team} />;\n}\n\nfunction MemberListSectionInner(props: { team: Team }) {\n const { t } = useTranslation();\n const users = props.team.useUsers();\n\n return (\n <div>\n <Typography className='font-medium mb-2'>{t(\"Members\")}</Typography>\n <div className='border rounded-md'>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead className=\"w-[100px]\">{t(\"User\")}</TableHead>\n <TableHead className=\"w-[200px]\">{t(\"Name\")}</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {users.map(({ id, teamProfile }, i) => (\n <TableRow key={id}>\n <TableCell>\n <UserAvatar user={teamProfile} />\n </TableCell>\n <TableCell>\n {teamProfile.displayName && (\n <Typography>{teamProfile.displayName}</Typography>\n )}\n {!teamProfile.displayName && (\n <Typography className=\"text-muted-foreground italic\">{t(\"No display name set\")}</Typography>\n )}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAUA,SAAgB,sBAAsB,OAAuB;CAC3D,MAAM,0CAAe,EAAE,IAAI,YAAY,CAAC;CACxC,MAAM,uBAAuB,KAAK,cAAc,MAAM,MAAM,gBAAgB;CAC5E,MAAM,yBAAyB,KAAK,cAAc,MAAM,MAAM,kBAAkB;AAEhF,KAAI,CAAC,wBAAwB,CAAC,uBAC5B,QAAO;AAGT,QAAO,2CAAC,0BAAuB,MAAM,MAAM,OAAQ;;AAGrD,SAAS,uBAAuB,OAAuB;CACrD,MAAM,EAAE,wDAAsB;CAC9B,MAAM,QAAQ,MAAM,KAAK,UAAU;AAEnC,QACE,4CAAC,oBACC,2CAACA;EAAW,WAAU;YAAoB,EAAE,UAAU;GAAc,EACpE,2CAAC;EAAI,WAAU;YACb,4CAACC,iCACC,2CAACC,sCACC,4CAACC,oCACC,2CAACC;GAAU,WAAU;aAAa,EAAE,OAAO;IAAa,EACxD,2CAACA;GAAU,WAAU;aAAa,EAAE,OAAO;IAAa,IAC/C,GACC,EACd,2CAACC,oCACE,MAAM,KAAK,EAAE,IAAI,eAAe,MAC/B,4CAACF,oCACC,2CAACG,oCACC,2CAACC,0DAAW,MAAM,cAAe,GACvB,EACZ,4CAACD,qCACE,YAAY,eACX,2CAACN,qCAAY,YAAY,cAAyB,EAEnD,CAAC,YAAY,eACZ,2CAACA;GAAW,WAAU;aAAgC,EAAE,sBAAsB;IAAc,IAEpF,KAXC,GAYJ,CACX,GACQ,IACN;GACJ,IACF"}
@@ -1,4 +1,4 @@
1
- import { Team } from "../../../lib/stack-app/teams/index.js";
1
+ import { Team } from "../../../lib/hexclave-app/teams/index.js";
2
2
  import * as react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components-page/account-settings/teams/team-page.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"team-page.js","names":["PageLayout","TeamUserProfileSection","TeamProfileImageSection","TeamDisplayNameSection","TeamMemberListSection","TeamMemberInvitationSection","TeamApiKeysSection","LeaveTeamSection"],"sources":["../../../../src/components-page/account-settings/teams/team-page.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 { Team } from \"../../..\";\nimport { PageLayout } from \"../page-layout\";\nimport { LeaveTeamSection } from \"./leave-team-section\";\nimport { TeamApiKeysSection } from \"./team-api-keys-section\";\nimport { TeamDisplayNameSection } from \"./team-display-name-section\";\nimport { TeamMemberInvitationSection } from \"./team-member-invitation-section\";\nimport { TeamMemberListSection } from \"./team-member-list-section\";\nimport { TeamProfileImageSection } from \"./team-profile-image-section\";\nimport { TeamUserProfileSection } from \"./team-profile-user-section\";\n\n\nexport function TeamPage(props: { team: Team }) {\n return (\n <PageLayout>\n <TeamUserProfileSection key={`user-profile-${props.team.id}`} team={props.team} />\n <TeamProfileImageSection key={`profile-image-${props.team.id}`} team={props.team} />\n <TeamDisplayNameSection key={`display-name-${props.team.id}`} team={props.team} />\n <TeamMemberListSection key={`member-list-${props.team.id}`} team={props.team} />\n <TeamMemberInvitationSection key={`member-invitation-${props.team.id}`} team={props.team} />\n <TeamApiKeysSection key={`api-keys-${props.team.id}`} team={props.team} />\n <LeaveTeamSection key={`leave-team-${props.team.id}`} team={props.team} />\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAeA,SAAgB,SAAS,OAAuB;AAC9C,QACE,4CAACA;EACC,2CAACC,yDAA6D,MAAM,MAAM,QAA7C,gBAAgB,MAAM,KAAK,KAA0B;EAClF,2CAACC,2DAA+D,MAAM,MAAM,QAA9C,iBAAiB,MAAM,KAAK,KAA0B;EACpF,2CAACC,yDAA6D,MAAM,MAAM,QAA7C,gBAAgB,MAAM,KAAK,KAA0B;EAClF,2CAACC,uDAA2D,MAAM,MAAM,QAA5C,eAAe,MAAM,KAAK,KAA0B;EAChF,2CAACC,mEAAuE,MAAM,MAAM,QAAlD,qBAAqB,MAAM,KAAK,KAA0B;EAC5F,2CAACC,iDAAqD,MAAM,MAAM,QAAzC,YAAY,MAAM,KAAK,KAA0B;EAC1E,2CAACC,4CAAqD,MAAM,MAAM,QAA3C,cAAc,MAAM,KAAK,KAA0B;KAC/D"}
1
+ {"version":3,"file":"team-page.js","names":["PageLayout","TeamUserProfileSection","TeamProfileImageSection","TeamDisplayNameSection","TeamMemberListSection","TeamMemberInvitationSection","TeamApiKeysSection","LeaveTeamSection"],"sources":["../../../../src/components-page/account-settings/teams/team-page.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 { Team } from \"../../..\";\nimport { PageLayout } from \"../page-layout\";\nimport { LeaveTeamSection } from \"./leave-team-section\";\nimport { TeamApiKeysSection } from \"./team-api-keys-section\";\nimport { TeamDisplayNameSection } from \"./team-display-name-section\";\nimport { TeamMemberInvitationSection } from \"./team-member-invitation-section\";\nimport { TeamMemberListSection } from \"./team-member-list-section\";\nimport { TeamProfileImageSection } from \"./team-profile-image-section\";\nimport { TeamUserProfileSection } from \"./team-profile-user-section\";\n\n\nexport function TeamPage(props: { team: Team }) {\n return (\n <PageLayout>\n <TeamUserProfileSection key={`user-profile-${props.team.id}`} team={props.team} />\n <TeamProfileImageSection key={`profile-image-${props.team.id}`} team={props.team} />\n <TeamDisplayNameSection key={`display-name-${props.team.id}`} team={props.team} />\n <TeamMemberListSection key={`member-list-${props.team.id}`} team={props.team} />\n <TeamMemberInvitationSection key={`member-invitation-${props.team.id}`} team={props.team} />\n <TeamApiKeysSection key={`api-keys-${props.team.id}`} team={props.team} />\n <LeaveTeamSection key={`leave-team-${props.team.id}`} team={props.team} />\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAeA,SAAgB,SAAS,OAAuB;AAC9C,QACE,4CAACA;EACC,2CAACC,yDAA6D,MAAM,MAAM,QAA7C,gBAAgB,MAAM,KAAK,KAA0B;EAClF,2CAACC,2DAA+D,MAAM,MAAM,QAA9C,iBAAiB,MAAM,KAAK,KAA0B;EACpF,2CAACC,yDAA6D,MAAM,MAAM,QAA7C,gBAAgB,MAAM,KAAK,KAA0B;EAClF,2CAACC,uDAA2D,MAAM,MAAM,QAA5C,eAAe,MAAM,KAAK,KAA0B;EAChF,2CAACC,mEAAuE,MAAM,MAAM,QAAlD,qBAAqB,MAAM,KAAK,KAA0B;EAC5F,2CAACC,iDAAqD,MAAM,MAAM,QAAzC,YAAY,MAAM,KAAK,KAA0B;EAC1E,2CAACC,4CAAqD,MAAM,MAAM,QAA3C,cAAc,MAAM,KAAK,KAA0B;KAC/D"}
@@ -1,4 +1,4 @@
1
- import { Team } from "../../../lib/stack-app/teams/index.js";
1
+ import { Team } from "../../../lib/hexclave-app/teams/index.js";
2
2
  import * as react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components-page/account-settings/teams/team-profile-image-section.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"team-profile-image-section.js","names":["Section","ProfileImageEditor"],"sources":["../../../../src/components-page/account-settings/teams/team-profile-image-section.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 { Team } from \"../../..\";\nimport { ProfileImageEditor } from \"../../../components/profile-image-editor\";\nimport { useUser } from \"../../../lib/hooks\";\nimport { useTranslation } from \"../../../lib/translations\";\nimport { Section } from \"../section\";\n\nexport function TeamProfileImageSection(props: { team: Team }) {\n const { t } = useTranslation();\n const user = useUser({ or: 'redirect' });\n const updateTeamPermission = user.usePermission(props.team, '$update_team');\n\n if (!updateTeamPermission) {\n return null;\n }\n\n return (\n <Section\n title={t(\"Team profile image\")}\n description={t(\"Upload an image for your team\")}\n >\n <ProfileImageEditor\n user={props.team}\n onProfileImageUrlChange={async (profileImageUrl) => {\n await props.team.update({ profileImageUrl });\n }}\n />\n </Section>\n );\n}\n"],"mappings":";;;;;;;;;AAUA,SAAgB,wBAAwB,OAAuB;CAC7D,MAAM,EAAE,wDAAsB;AAI9B,KAAI,oCAHiB,EAAE,IAAI,YAAY,CAAC,CACN,cAAc,MAAM,MAAM,eAAe,CAGzE,QAAO;AAGT,QACE,2CAACA;EACC,OAAO,EAAE,qBAAqB;EAC9B,aAAa,EAAE,gCAAgC;YAE/C,2CAACC;GACC,MAAM,MAAM;GACZ,yBAAyB,OAAO,oBAAoB;AAClD,UAAM,MAAM,KAAK,OAAO,EAAE,iBAAiB,CAAC;;IAE9C;GACM"}
1
+ {"version":3,"file":"team-profile-image-section.js","names":["Section","ProfileImageEditor"],"sources":["../../../../src/components-page/account-settings/teams/team-profile-image-section.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 { Team } from \"../../..\";\nimport { ProfileImageEditor } from \"../../../components/profile-image-editor\";\nimport { useUser } from \"../../../lib/hooks\";\nimport { useTranslation } from \"../../../lib/translations\";\nimport { Section } from \"../section\";\n\nexport function TeamProfileImageSection(props: { team: Team }) {\n const { t } = useTranslation();\n const user = useUser({ or: 'redirect' });\n const updateTeamPermission = user.usePermission(props.team, '$update_team');\n\n if (!updateTeamPermission) {\n return null;\n }\n\n return (\n <Section\n title={t(\"Team profile image\")}\n description={t(\"Upload an image for your team\")}\n >\n <ProfileImageEditor\n user={props.team}\n onProfileImageUrlChange={async (profileImageUrl) => {\n await props.team.update({ profileImageUrl });\n }}\n />\n </Section>\n );\n}\n"],"mappings":";;;;;;;;;AAUA,SAAgB,wBAAwB,OAAuB;CAC7D,MAAM,EAAE,wDAAsB;AAI9B,KAAI,oCAHiB,EAAE,IAAI,YAAY,CAAC,CACN,cAAc,MAAM,MAAM,eAAe,CAGzE,QAAO;AAGT,QACE,2CAACA;EACC,OAAO,EAAE,qBAAqB;EAC9B,aAAa,EAAE,gCAAgC;YAE/C,2CAACC;GACC,MAAM,MAAM;GACZ,yBAAyB,OAAO,oBAAoB;AAClD,UAAM,MAAM,KAAK,OAAO,EAAE,iBAAiB,CAAC;;IAE9C;GACM"}
@@ -1,4 +1,4 @@
1
- import { Team } from "../../../lib/stack-app/teams/index.js";
1
+ import { Team } from "../../../lib/hexclave-app/teams/index.js";
2
2
  import * as react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components-page/account-settings/teams/team-profile-user-section.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"team-profile-user-section.js","names":["Section","EditableText"],"sources":["../../../../src/components-page/account-settings/teams/team-profile-user-section.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 { Team } from \"../../..\";\nimport { useUser } from \"../../../lib/hooks\";\nimport { useTranslation } from \"../../../lib/translations\";\nimport { EditableText } from \"../editable-text\";\nimport { Section } from \"../section\";\n\nexport function TeamUserProfileSection(props: { team: Team }) {\n const { t } = useTranslation();\n const user = useUser({ or: 'redirect' });\n const profile = user.useTeamProfile(props.team);\n\n return (\n <Section\n title={t(\"Team user name\")}\n description={t(\"Overwrite your user display name in this team\")}\n >\n <EditableText\n value={profile.displayName || ''}\n onSave={async (newDisplayName) => {\n await profile.update({ displayName: newDisplayName });\n }}\n />\n </Section>\n );\n}\n"],"mappings":";;;;;;;;;AAUA,SAAgB,uBAAuB,OAAuB;CAC5D,MAAM,EAAE,wDAAsB;CAE9B,MAAM,6CADe,EAAE,IAAI,YAAY,CAAC,CACnB,eAAe,MAAM,KAAK;AAE/C,QACE,2CAACA;EACC,OAAO,EAAE,iBAAiB;EAC1B,aAAa,EAAE,gDAAgD;YAE/D,2CAACC;GACC,OAAO,QAAQ,eAAe;GAC9B,QAAQ,OAAO,mBAAmB;AAChC,UAAM,QAAQ,OAAO,EAAE,aAAa,gBAAgB,CAAC;;IAEvD;GACM"}
1
+ {"version":3,"file":"team-profile-user-section.js","names":["Section","EditableText"],"sources":["../../../../src/components-page/account-settings/teams/team-profile-user-section.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 { Team } from \"../../..\";\nimport { useUser } from \"../../../lib/hooks\";\nimport { useTranslation } from \"../../../lib/translations\";\nimport { EditableText } from \"../editable-text\";\nimport { Section } from \"../section\";\n\nexport function TeamUserProfileSection(props: { team: Team }) {\n const { t } = useTranslation();\n const user = useUser({ or: 'redirect' });\n const profile = user.useTeamProfile(props.team);\n\n return (\n <Section\n title={t(\"Team user name\")}\n description={t(\"Overwrite your user display name in this team\")}\n >\n <EditableText\n value={profile.displayName || ''}\n onSave={async (newDisplayName) => {\n await profile.update({ displayName: newDisplayName });\n }}\n />\n </Section>\n );\n}\n"],"mappings":";;;;;;;;;AAUA,SAAgB,uBAAuB,OAAuB;CAC5D,MAAM,EAAE,wDAAsB;CAE9B,MAAM,6CADe,EAAE,IAAI,YAAY,CAAC,CACnB,eAAe,MAAM,KAAK;AAE/C,QACE,2CAACA;EACC,OAAO,EAAE,iBAAiB;EAC1B,aAAa,EAAE,gDAAgD;YAE/D,2CAACC;GACC,OAAO,QAAQ,eAAe;GAC9B,QAAQ,OAAO,mBAAmB;AAChC,UAAM,QAAQ,OAAO,EAAE,aAAa,gBAAgB,CAAC;;IAEvD;GACM"}
@@ -4,14 +4,15 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
  const require_chunk = require('../chunk-BE-pF4vm.js');
5
5
  let _hexclave_shared_dist_utils_promises = require("@hexclave/shared/dist/utils/promises");
6
6
  let _hexclave_ui = require("@hexclave/ui");
7
- let lucide_react = require("lucide-react");
8
7
  let react = require("react");
9
8
  react = require_chunk.__toESM(react);
10
9
  let ___index_js = require("../index.js");
10
+ let ___lib_translations_js = require("../lib/translations.js");
11
+ let react_jsx_runtime = require("react/jsx-runtime");
12
+ let lucide_react = require("lucide-react");
11
13
  let ___components_elements_maybe_full_page_js = require("../components/elements/maybe-full-page.js");
12
14
  let ___components_elements_sidebar_layout_js = require("../components/elements/sidebar-layout.js");
13
15
  let ___components_team_icon_js = require("../components/team-icon.js");
14
- let ___lib_translations_js = require("../lib/translations.js");
15
16
  let __account_settings_active_sessions_active_sessions_page_js = require("./account-settings/active-sessions/active-sessions-page.js");
16
17
  let __account_settings_api_keys_api_keys_page_js = require("./account-settings/api-keys/api-keys-page.js");
17
18
  let __account_settings_email_and_auth_email_and_auth_page_js = require("./account-settings/email-and-auth/email-and-auth-page.js");
@@ -21,7 +22,6 @@ let __account_settings_payments_payments_page_js = require("./account-settings/p
21
22
  let __account_settings_settings_settings_page_js = require("./account-settings/settings/settings-page.js");
22
23
  let __account_settings_teams_team_creation_page_js = require("./account-settings/teams/team-creation-page.js");
23
24
  let __account_settings_teams_team_page_js = require("./account-settings/teams/team-page.js");
24
- let react_jsx_runtime = require("react/jsx-runtime");
25
25
 
26
26
  //#region src/components-page/account-settings.tsx
27
27
  const iconMap = {
@@ -1 +1 @@
1
- {"version":3,"file":"account-settings.js","names":["MaybeFullPage","SidebarLayout","ProfilePage","Suspense","EmailsAndAuthPage","NotificationsPage","ActiveSessionsPage","ApiKeysPage","PaymentsPage","SettingsPage","TeamIcon","Typography","TeamPage","TeamCreationPage","Skeleton"],"sources":["../../src/components-page/account-settings.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 { runAsynchronouslyWithAlert } from \"@hexclave/shared/dist/utils/promises\";\nimport { Skeleton, Typography } from '@hexclave/ui';\nimport { Contact, ShieldCheck, Bell, Monitor, Key, Settings, CirclePlus, CreditCard } from 'lucide-react';\nimport React, { Suspense, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useStackApp, useUser } from '..';\nimport { MaybeFullPage } from \"../components/elements/maybe-full-page\";\nimport { SidebarLayout } from '../components/elements/sidebar-layout';\nimport { TeamIcon } from '../components/team-icon';\nimport { useTranslation } from \"../lib/translations\";\nimport { ActiveSessionsPage } from \"./account-settings/active-sessions/active-sessions-page\";\nimport { ApiKeysPage } from \"./account-settings/api-keys/api-keys-page\";\nimport { EmailsAndAuthPage } from './account-settings/email-and-auth/email-and-auth-page';\nimport { NotificationsPage } from './account-settings/notifications/notifications-page';\nimport { ProfilePage } from \"./account-settings/profile-page/profile-page\";\nimport { PaymentsPage } from \"./account-settings/payments/payments-page\";\nimport { SettingsPage } from './account-settings/settings/settings-page';\nimport { TeamCreationPage } from './account-settings/teams/team-creation-page';\nimport { TeamPage } from './account-settings/teams/team-page';\n\nconst iconMap = {\n Contact,\n ShieldCheck,\n Bell,\n Monitor,\n Key,\n Settings,\n CirclePlus,\n CreditCard,\n} as const;\n\nconst Icon = ({ name }: { name: keyof typeof iconMap }) => {\n const LucideIcon = iconMap[name];\n return <LucideIcon className=\"mr-2 h-4 w-4\"/>;\n};\n\nexport function AccountSettings(props: {\n fullPage?: boolean,\n extraItems?: ({\n title: string,\n content: React.ReactNode,\n id: string,\n } & ({\n icon?: React.ReactNode,\n } | {\n iconName?: keyof typeof iconMap,\n }))[],\n mockUser?: {\n displayName?: string,\n profileImageUrl?: string,\n },\n mockApiKeys?: Array<{\n id: string,\n description: string,\n createdAt: string,\n expiresAt?: string,\n manuallyRevokedAt?: string,\n }>,\n mockProject?: {\n config: {\n allowUserApiKeys: boolean,\n clientTeamCreationEnabled: boolean,\n },\n },\n mockSessions?: Array<{\n id: string,\n isCurrentSession: boolean,\n isImpersonation?: boolean,\n createdAt: string,\n lastUsedAt?: string,\n geoInfo?: {\n ip?: string,\n cityName?: string,\n },\n }>,\n}) {\n const { t } = useTranslation();\n const userFromHook = useUser({ or: props.mockUser ? 'return-null' : 'redirect' });\n const stackApp = useStackApp();\n const projectFromHook = stackApp.useProject();\n\n // Use mock data if provided, otherwise use real data\n const user = props.mockUser ? {\n useTeams: () => [], // Mock empty teams for now\n useBilling: () => ({ hasCustomer: false }), // Mock empty billing for now\n } : userFromHook;\n\n const project = props.mockProject || projectFromHook;\n const teams = user?.useTeams() || [];\n const billing = user?.useBilling() || null;\n const teamsKey = useMemo(() => teams.map(team => team.id).join(\"|\"), [teams]);\n const teamsById = useMemo(() => teams, [teamsKey]);\n const userRef = useRef(userFromHook ?? null);\n const userId = userFromHook?.id ?? null;\n const [paymentsAvailability, setPaymentsAvailability] = useState<{\n userHasProducts: boolean,\n teamIdsWithProducts: Set<string>,\n isReady: boolean,\n }>(() => ({\n userHasProducts: false,\n teamIdsWithProducts: new Set<string>(),\n isReady: !!props.mockUser,\n }));\n\n useEffect(() => {\n userRef.current = userFromHook ?? null;\n }, [userFromHook]);\n\n useEffect(() => {\n if (props.mockUser || !userId) {\n return;\n }\n let cancelled = false;\n runAsynchronouslyWithAlert(async () => {\n const currentUser = userRef.current;\n if (!currentUser || currentUser.id !== userId) {\n return;\n }\n const [userProducts, teamsWithProducts] = await Promise.all([\n currentUser.listProducts({ limit: 1 }),\n Promise.all(teamsById.map(async (team) => {\n const isTeamAdmin = await currentUser.hasPermission(team, \"team_admin\");\n if (!isTeamAdmin) {\n return null;\n }\n const teamProducts = await team.listProducts({ limit: 1 });\n const hasTeamProducts = teamProducts.some((product) => product.customerType === \"team\");\n return hasTeamProducts ? team.id : null;\n })),\n ]);\n if (cancelled) {\n return;\n }\n const userHasProducts = userProducts.some((product) => product.customerType === \"user\");\n const teamIdsWithProducts = new Set<string>(teamsWithProducts.filter((id): id is string => id !== null));\n setPaymentsAvailability({\n userHasProducts,\n teamIdsWithProducts,\n isReady: true,\n });\n });\n return () => {\n cancelled = true;\n };\n }, [props.mockUser, teamsById, userId]);\n\n const teamsWithProducts = useMemo(\n () => teamsById.filter(team => paymentsAvailability.teamIdsWithProducts.has(team.id)),\n [paymentsAvailability.teamIdsWithProducts, teamsById],\n );\n const shouldShowPaymentsTab = props.mockUser\n || (paymentsAvailability.isReady\n && (paymentsAvailability.userHasProducts || teamsWithProducts.length > 0));\n\n // If we're not in mock mode and don't have a user, the useUser hook will handle redirect\n if (!props.mockUser && !userFromHook) {\n return null;\n }\n\n return (\n <MaybeFullPage fullPage={!!props.fullPage}>\n <div className=\"self-stretch flex-grow w-full\">\n <SidebarLayout\n items={([\n {\n title: t('My Profile'),\n type: 'item',\n id: 'profile',\n icon: <Icon name=\"Contact\"/>,\n content: <ProfilePage mockUser={props.mockUser}/>,\n },\n {\n title: t('Emails & Auth'),\n type: 'item',\n id: 'auth',\n icon: <Icon name=\"ShieldCheck\"/>,\n content: <Suspense fallback={<EmailsAndAuthPageSkeleton/>}>\n <EmailsAndAuthPage mockMode={!!props.mockUser}/>\n </Suspense>,\n },\n {\n title: t('Notifications'),\n type: 'item',\n id: 'notifications',\n icon: <Icon name=\"Bell\"/>,\n content: <Suspense fallback={<NotificationsPageSkeleton/>}>\n <NotificationsPage/>\n </Suspense>,\n },\n {\n title: t('Active Sessions'),\n type: 'item',\n id: 'sessions',\n icon: <Icon name=\"Monitor\"/>,\n content: <Suspense fallback={<ActiveSessionsPageSkeleton/>}>\n <ActiveSessionsPage mockSessions={props.mockSessions} mockMode={!!props.mockUser}/>\n </Suspense>,\n },\n ...(project.config.allowUserApiKeys ? [{\n title: t('API Keys'),\n type: 'item',\n id: 'api-keys',\n icon: <Icon name=\"Key\" />,\n content: <Suspense fallback={<ApiKeysPageSkeleton/>}>\n <ApiKeysPage mockApiKeys={props.mockApiKeys} mockMode={!!props.mockUser} />\n </Suspense>,\n }] as const : []),\n ...(shouldShowPaymentsTab ? [{\n title: t('Payments'),\n type: 'item',\n id: 'payments',\n icon: <Icon name=\"CreditCard\" />,\n content: <Suspense fallback={<PaymentsPageSkeleton/>}>\n <PaymentsPage\n mockMode={!!props.mockUser}\n allowPersonal={paymentsAvailability.userHasProducts}\n availableTeams={teamsWithProducts}\n />\n </Suspense>,\n }] as const : []),\n {\n title: t('Settings'),\n type: 'item',\n id: 'settings',\n icon: <Icon name=\"Settings\"/>,\n content: <SettingsPage mockMode={!!props.mockUser}/>,\n },\n ...(props.extraItems?.map(item => ({\n title: item.title,\n type: 'item',\n id: item.id,\n icon: (() => {\n const iconName = (item as any).iconName as keyof typeof iconMap | undefined;\n if (iconName) {\n return <Icon name={iconName}/>;\n } else if ((item as any).icon) {\n return (item as any).icon;\n }\n return null;\n })(),\n content: item.content,\n } as const)) || []),\n ...(teams.length > 0 || project.config.clientTeamCreationEnabled) ? [{\n title: t('Teams'),\n type: 'divider',\n }] as const : [],\n ...teams.map(team => ({\n title: <div className='flex gap-2 items-center w-full'>\n <TeamIcon team={team}/>\n <Typography className=\"max-w-[320px] md:w-[90%] truncate\">{team.displayName}</Typography>\n </div>,\n type: 'item',\n id: `team-${team.id}`,\n content: <Suspense fallback={<TeamPageSkeleton/>}>\n <TeamPage team={team}/>\n </Suspense>,\n } as const)),\n ...project.config.clientTeamCreationEnabled ? [{\n title: t('Create a team'),\n icon: <Icon name=\"CirclePlus\"/>,\n type: 'item',\n id: 'team-creation',\n content: <Suspense fallback={<TeamCreationSkeleton/>}>\n <TeamCreationPage mockMode={!!props.mockUser} />\n </Suspense>,\n }] as const : [],\n ] as const).filter((p) => p.type === 'divider' || (p as any).content )}\n title={t(\"Account Settings\")}\n />\n </div>\n </MaybeFullPage>\n );\n}\n\nfunction PageLayout(props: { children: React.ReactNode }) {\n return (\n <div className='flex flex-col gap-6'>\n {props.children}\n </div>\n );\n}\n\nfunction EmailsAndAuthPageSkeleton() {\n return <PageLayout>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n </PageLayout>;\n}\n\nfunction ActiveSessionsPageSkeleton() {\n return <PageLayout>\n <Skeleton className=\"h-6 w-48 mb-2\"/>\n <Skeleton className=\"h-4 w-full mb-4\"/>\n <Skeleton className=\"h-[200px] w-full mt-1 rounded-md\"/>\n </PageLayout>;\n}\n\nfunction ApiKeysPageSkeleton() {\n return <PageLayout>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-[200px] w-full mt-1 rounded-md\"/>\n </PageLayout>;\n}\n\nfunction PaymentsPageSkeleton() {\n return <PageLayout>\n <Skeleton className=\"h-6 w-48 mb-2\"/>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-[200px] w-full mt-1 rounded-md\"/>\n </PageLayout>;\n}\n\nfunction TeamPageSkeleton() {\n return <PageLayout>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-[200px] w-full mt-1 rounded-md\"/>\n </PageLayout>;\n}\n\nfunction TeamCreationSkeleton() {\n return <PageLayout>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n </PageLayout>;\n}\n\nfunction NotificationsPageSkeleton() {\n return <PageLayout>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n </PageLayout>;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"account-settings.js","names":["MaybeFullPage","SidebarLayout","ProfilePage","Suspense","EmailsAndAuthPage","NotificationsPage","ActiveSessionsPage","ApiKeysPage","PaymentsPage","SettingsPage","TeamIcon","Typography","TeamPage","TeamCreationPage","Skeleton"],"sources":["../../src/components-page/account-settings.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 { runAsynchronouslyWithAlert } from \"@hexclave/shared/dist/utils/promises\";\nimport { Skeleton, Typography } from '@hexclave/ui';\nimport { Contact, ShieldCheck, Bell, Monitor, Key, Settings, CirclePlus, CreditCard } from 'lucide-react';\nimport React, { Suspense, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useStackApp, useUser } from '..';\nimport { MaybeFullPage } from \"../components/elements/maybe-full-page\";\nimport { SidebarLayout } from '../components/elements/sidebar-layout';\nimport { TeamIcon } from '../components/team-icon';\nimport { useTranslation } from \"../lib/translations\";\nimport { ActiveSessionsPage } from \"./account-settings/active-sessions/active-sessions-page\";\nimport { ApiKeysPage } from \"./account-settings/api-keys/api-keys-page\";\nimport { EmailsAndAuthPage } from './account-settings/email-and-auth/email-and-auth-page';\nimport { NotificationsPage } from './account-settings/notifications/notifications-page';\nimport { ProfilePage } from \"./account-settings/profile-page/profile-page\";\nimport { PaymentsPage } from \"./account-settings/payments/payments-page\";\nimport { SettingsPage } from './account-settings/settings/settings-page';\nimport { TeamCreationPage } from './account-settings/teams/team-creation-page';\nimport { TeamPage } from './account-settings/teams/team-page';\n\nconst iconMap = {\n Contact,\n ShieldCheck,\n Bell,\n Monitor,\n Key,\n Settings,\n CirclePlus,\n CreditCard,\n} as const;\n\nconst Icon = ({ name }: { name: keyof typeof iconMap }) => {\n const LucideIcon = iconMap[name];\n return <LucideIcon className=\"mr-2 h-4 w-4\"/>;\n};\n\nexport function AccountSettings(props: {\n fullPage?: boolean,\n extraItems?: ({\n title: string,\n content: React.ReactNode,\n id: string,\n } & ({\n icon?: React.ReactNode,\n } | {\n iconName?: keyof typeof iconMap,\n }))[],\n mockUser?: {\n displayName?: string,\n profileImageUrl?: string,\n },\n mockApiKeys?: Array<{\n id: string,\n description: string,\n createdAt: string,\n expiresAt?: string,\n manuallyRevokedAt?: string,\n }>,\n mockProject?: {\n config: {\n allowUserApiKeys: boolean,\n clientTeamCreationEnabled: boolean,\n },\n },\n mockSessions?: Array<{\n id: string,\n isCurrentSession: boolean,\n isImpersonation?: boolean,\n createdAt: string,\n lastUsedAt?: string,\n geoInfo?: {\n ip?: string,\n cityName?: string,\n },\n }>,\n}) {\n const { t } = useTranslation();\n const userFromHook = useUser({ or: props.mockUser ? 'return-null' : 'redirect' });\n const hexclaveApp = useStackApp();\n const projectFromHook = hexclaveApp.useProject();\n\n // Use mock data if provided, otherwise use real data\n const user = props.mockUser ? {\n useTeams: () => [], // Mock empty teams for now\n useBilling: () => ({ hasCustomer: false }), // Mock empty billing for now\n } : userFromHook;\n\n const project = props.mockProject || projectFromHook;\n const teams = user?.useTeams() || [];\n const billing = user?.useBilling() || null;\n const teamsKey = useMemo(() => teams.map(team => team.id).join(\"|\"), [teams]);\n const teamsById = useMemo(() => teams, [teamsKey]);\n const userRef = useRef(userFromHook ?? null);\n const userId = userFromHook?.id ?? null;\n const [paymentsAvailability, setPaymentsAvailability] = useState<{\n userHasProducts: boolean,\n teamIdsWithProducts: Set<string>,\n isReady: boolean,\n }>(() => ({\n userHasProducts: false,\n teamIdsWithProducts: new Set<string>(),\n isReady: !!props.mockUser,\n }));\n\n useEffect(() => {\n userRef.current = userFromHook ?? null;\n }, [userFromHook]);\n\n useEffect(() => {\n if (props.mockUser || !userId) {\n return;\n }\n let cancelled = false;\n runAsynchronouslyWithAlert(async () => {\n const currentUser = userRef.current;\n if (!currentUser || currentUser.id !== userId) {\n return;\n }\n const [userProducts, teamsWithProducts] = await Promise.all([\n currentUser.listProducts({ limit: 1 }),\n Promise.all(teamsById.map(async (team) => {\n const isTeamAdmin = await currentUser.hasPermission(team, \"team_admin\");\n if (!isTeamAdmin) {\n return null;\n }\n const teamProducts = await team.listProducts({ limit: 1 });\n const hasTeamProducts = teamProducts.some((product) => product.customerType === \"team\");\n return hasTeamProducts ? team.id : null;\n })),\n ]);\n if (cancelled) {\n return;\n }\n const userHasProducts = userProducts.some((product) => product.customerType === \"user\");\n const teamIdsWithProducts = new Set<string>(teamsWithProducts.filter((id): id is string => id !== null));\n setPaymentsAvailability({\n userHasProducts,\n teamIdsWithProducts,\n isReady: true,\n });\n });\n return () => {\n cancelled = true;\n };\n }, [props.mockUser, teamsById, userId]);\n\n const teamsWithProducts = useMemo(\n () => teamsById.filter(team => paymentsAvailability.teamIdsWithProducts.has(team.id)),\n [paymentsAvailability.teamIdsWithProducts, teamsById],\n );\n const shouldShowPaymentsTab = props.mockUser\n || (paymentsAvailability.isReady\n && (paymentsAvailability.userHasProducts || teamsWithProducts.length > 0));\n\n // If we're not in mock mode and don't have a user, the useUser hook will handle redirect\n if (!props.mockUser && !userFromHook) {\n return null;\n }\n\n return (\n <MaybeFullPage fullPage={!!props.fullPage}>\n <div className=\"self-stretch flex-grow w-full\">\n <SidebarLayout\n items={([\n {\n title: t('My Profile'),\n type: 'item',\n id: 'profile',\n icon: <Icon name=\"Contact\"/>,\n content: <ProfilePage mockUser={props.mockUser}/>,\n },\n {\n title: t('Emails & Auth'),\n type: 'item',\n id: 'auth',\n icon: <Icon name=\"ShieldCheck\"/>,\n content: <Suspense fallback={<EmailsAndAuthPageSkeleton/>}>\n <EmailsAndAuthPage mockMode={!!props.mockUser}/>\n </Suspense>,\n },\n {\n title: t('Notifications'),\n type: 'item',\n id: 'notifications',\n icon: <Icon name=\"Bell\"/>,\n content: <Suspense fallback={<NotificationsPageSkeleton/>}>\n <NotificationsPage/>\n </Suspense>,\n },\n {\n title: t('Active Sessions'),\n type: 'item',\n id: 'sessions',\n icon: <Icon name=\"Monitor\"/>,\n content: <Suspense fallback={<ActiveSessionsPageSkeleton/>}>\n <ActiveSessionsPage mockSessions={props.mockSessions} mockMode={!!props.mockUser}/>\n </Suspense>,\n },\n ...(project.config.allowUserApiKeys ? [{\n title: t('API Keys'),\n type: 'item',\n id: 'api-keys',\n icon: <Icon name=\"Key\" />,\n content: <Suspense fallback={<ApiKeysPageSkeleton/>}>\n <ApiKeysPage mockApiKeys={props.mockApiKeys} mockMode={!!props.mockUser} />\n </Suspense>,\n }] as const : []),\n ...(shouldShowPaymentsTab ? [{\n title: t('Payments'),\n type: 'item',\n id: 'payments',\n icon: <Icon name=\"CreditCard\" />,\n content: <Suspense fallback={<PaymentsPageSkeleton/>}>\n <PaymentsPage\n mockMode={!!props.mockUser}\n allowPersonal={paymentsAvailability.userHasProducts}\n availableTeams={teamsWithProducts}\n />\n </Suspense>,\n }] as const : []),\n {\n title: t('Settings'),\n type: 'item',\n id: 'settings',\n icon: <Icon name=\"Settings\"/>,\n content: <SettingsPage mockMode={!!props.mockUser}/>,\n },\n ...(props.extraItems?.map(item => ({\n title: item.title,\n type: 'item',\n id: item.id,\n icon: (() => {\n const iconName = (item as any).iconName as keyof typeof iconMap | undefined;\n if (iconName) {\n return <Icon name={iconName}/>;\n } else if ((item as any).icon) {\n return (item as any).icon;\n }\n return null;\n })(),\n content: item.content,\n } as const)) || []),\n ...(teams.length > 0 || project.config.clientTeamCreationEnabled) ? [{\n title: t('Teams'),\n type: 'divider',\n }] as const : [],\n ...teams.map(team => ({\n title: <div className='flex gap-2 items-center w-full'>\n <TeamIcon team={team}/>\n <Typography className=\"max-w-[320px] md:w-[90%] truncate\">{team.displayName}</Typography>\n </div>,\n type: 'item',\n id: `team-${team.id}`,\n content: <Suspense fallback={<TeamPageSkeleton/>}>\n <TeamPage team={team}/>\n </Suspense>,\n } as const)),\n ...project.config.clientTeamCreationEnabled ? [{\n title: t('Create a team'),\n icon: <Icon name=\"CirclePlus\"/>,\n type: 'item',\n id: 'team-creation',\n content: <Suspense fallback={<TeamCreationSkeleton/>}>\n <TeamCreationPage mockMode={!!props.mockUser} />\n </Suspense>,\n }] as const : [],\n ] as const).filter((p) => p.type === 'divider' || (p as any).content )}\n title={t(\"Account Settings\")}\n />\n </div>\n </MaybeFullPage>\n );\n}\n\nfunction PageLayout(props: { children: React.ReactNode }) {\n return (\n <div className='flex flex-col gap-6'>\n {props.children}\n </div>\n );\n}\n\nfunction EmailsAndAuthPageSkeleton() {\n return <PageLayout>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n </PageLayout>;\n}\n\nfunction ActiveSessionsPageSkeleton() {\n return <PageLayout>\n <Skeleton className=\"h-6 w-48 mb-2\"/>\n <Skeleton className=\"h-4 w-full mb-4\"/>\n <Skeleton className=\"h-[200px] w-full mt-1 rounded-md\"/>\n </PageLayout>;\n}\n\nfunction ApiKeysPageSkeleton() {\n return <PageLayout>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-[200px] w-full mt-1 rounded-md\"/>\n </PageLayout>;\n}\n\nfunction PaymentsPageSkeleton() {\n return <PageLayout>\n <Skeleton className=\"h-6 w-48 mb-2\"/>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-[200px] w-full mt-1 rounded-md\"/>\n </PageLayout>;\n}\n\nfunction TeamPageSkeleton() {\n return <PageLayout>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-[200px] w-full mt-1 rounded-md\"/>\n </PageLayout>;\n}\n\nfunction TeamCreationSkeleton() {\n return <PageLayout>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n </PageLayout>;\n}\n\nfunction NotificationsPageSkeleton() {\n return <PageLayout>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n <Skeleton className=\"h-9 w-full mt-1\"/>\n </PageLayout>;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth-page.d.ts","names":[],"sources":["../../src/components-page/auth-page.tsx"],"mappings":";;;KAsBK,KAAA;EACH,gBAAA;EACA,QAAA;EACA,QAAA;EACA,IAAA;EACA,iBAAA;EACA,SAAA,GAAY,KAAA,CAAM,SAAA;EAClB,WAAA;IACE,MAAA;MACE,aAAA;MACA,iBAAA;MACA,cAAA;MACA,gBAAA;MACA,cAAA;QACE,EAAA;MAAA;IAAA;EAAA;AAAA;AAAA,iBAMQ,QAAA,CAAS,KAAA,EAAO,KAAA,GAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"auth-page.d.ts","names":[],"sources":["../../src/components-page/auth-page.tsx"],"mappings":";;;KA2BK,KAAA;EACH,gBAAA;EACA,QAAA;EACA,QAAA;EACA,IAAA;EACA,iBAAA;EACA,SAAA,GAAY,KAAA,CAAM,SAAA;EAClB,WAAA;IACE,MAAA;MACE,aAAA;MACA,iBAAA;MACA,cAAA;MACA,gBAAA;MACA,cAAA;QACE,EAAA;MAAA;IAAA;EAAA;AAAA;AAAA,iBAWQ,QAAA,CAAS,KAAA,EAAO,KAAA,GAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -2,17 +2,22 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
  const require_chunk = require('../chunk-BE-pF4vm.js');
5
+ let _hexclave_shared_dist_utils_errors = require("@hexclave/shared/dist/utils/errors");
5
6
  let _hexclave_shared_dist_utils_promises = require("@hexclave/shared/dist/utils/promises");
6
7
  let _hexclave_ui = require("@hexclave/ui");
7
8
  let react = require("react");
8
9
  let ___index_js = require("../index.js");
9
- let ___components_elements_maybe_full_page_js = require("../components/elements/maybe-full-page.js");
10
10
  let ___lib_translations_js = require("../lib/translations.js");
11
11
  let react_jsx_runtime = require("react/jsx-runtime");
12
+ let _hexclave_shared = require("@hexclave/shared");
13
+ let ___components_elements_maybe_full_page_js = require("../components/elements/maybe-full-page.js");
14
+ let _hexclave_shared_dist_utils_react = require("@hexclave/shared/dist/utils/react");
12
15
  let ___components_credential_sign_in_js = require("../components/credential-sign-in.js");
13
16
  let ___components_credential_sign_up_js = require("../components/credential-sign-up.js");
14
17
  let ___components_elements_separator_with_text_js = require("../components/elements/separator-with-text.js");
15
18
  let ___components_link_js = require("../components/link.js");
19
+ let ___components_message_cards_known_error_message_card_js = require("../components/message-cards/known-error-message-card.js");
20
+ let ___components_message_cards_message_card_js = require("../components/message-cards/message-card.js");
16
21
  let ___components_magic_link_sign_in_js = require("../components/magic-link-sign-in.js");
17
22
  let ___components_message_cards_predefined_message_card_js = require("../components/message-cards/predefined-message-card.js");
18
23
  let ___components_oauth_button_group_js = require("../components/oauth-button-group.js");
@@ -49,16 +54,56 @@ function Fallback(props) {
49
54
  })
50
55
  });
51
56
  }
57
+ function AutomaticRedirect(props) {
58
+ const hexclaveApp = (0, ___index_js.useStackApp)();
59
+ const { t } = (0, ___lib_translations_js.useTranslation)();
60
+ const redirectResult = (0, _hexclave_shared_dist_utils_react.use)((0, react.useMemo)(async () => {
61
+ try {
62
+ await (props.isRestricted ? hexclaveApp.redirectToOnboarding({ replace: true }) : props.type === "sign-in" ? hexclaveApp.redirectToAfterSignIn({ replace: true }) : hexclaveApp.redirectToAfterSignUp({ replace: true }));
63
+ return { status: "success" };
64
+ } catch (e) {
65
+ if (_hexclave_shared.KnownError.isKnownError(e)) return {
66
+ status: "known-error",
67
+ error: e
68
+ };
69
+ (0, _hexclave_shared_dist_utils_errors.captureError)("<AuthPage automaticRedirect />", e);
70
+ return { status: "unknown-error" };
71
+ }
72
+ }, [
73
+ hexclaveApp,
74
+ props.isRestricted,
75
+ props.type
76
+ ]));
77
+ if (redirectResult.status === "known-error") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_message_cards_known_error_message_card_js.KnownErrorMessageCard, {
78
+ error: redirectResult.error,
79
+ fullPage: props.fullPage
80
+ });
81
+ if (redirectResult.status === "unknown-error") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_message_cards_predefined_message_card_js.PredefinedMessageCard, {
82
+ type: "unknownError",
83
+ fullPage: props.fullPage
84
+ });
85
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_message_cards_message_card_js.MessageCard, {
86
+ title: t("Redirecting..."),
87
+ fullPage: props.fullPage
88
+ });
89
+ }
52
90
  function Inner(props) {
53
- const stackApp = (0, ___index_js.useStackApp)();
91
+ const hexclaveApp = (0, ___index_js.useStackApp)();
54
92
  const user = (0, ___index_js.useUser)({ includeRestricted: true });
55
- const projectFromHook = stackApp.useProject();
93
+ const projectFromHook = hexclaveApp.useProject();
56
94
  const project = props.mockProject || projectFromHook;
57
95
  const { t } = (0, ___lib_translations_js.useTranslation)();
58
- if (props.automaticRedirect && user && !props.mockProject) {
59
- (0, _hexclave_shared_dist_utils_promises.runAsynchronously)(user.isRestricted ? stackApp.redirectToOnboarding({ replace: true }) : props.type === "sign-in" ? stackApp.redirectToAfterSignIn({ replace: true }) : stackApp.redirectToAfterSignUp({ replace: true }));
60
- return null;
61
- }
96
+ if (props.automaticRedirect && user && !props.mockProject) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react.Suspense, {
97
+ fallback: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_message_cards_message_card_js.MessageCard, {
98
+ title: t("Redirecting..."),
99
+ fullPage: props.fullPage
100
+ }),
101
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AutomaticRedirect, {
102
+ fullPage: props.fullPage,
103
+ isRestricted: user.isRestricted,
104
+ type: props.type
105
+ })
106
+ });
62
107
  if (user && !props.mockProject && !props.automaticRedirect) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_message_cards_predefined_message_card_js.PredefinedMessageCard, {
63
108
  type: "signedIn",
64
109
  fullPage: props.fullPage
@@ -89,9 +134,9 @@ function Inner(props) {
89
134
  t("Don't have an account?"),
90
135
  " ",
91
136
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_link_js.StyledLink, {
92
- href: stackApp.urls.signUp,
137
+ href: hexclaveApp.urls.signUp,
93
138
  onClick: (e) => {
94
- (0, _hexclave_shared_dist_utils_promises.runAsynchronously)(stackApp.redirectToSignUp());
139
+ (0, _hexclave_shared_dist_utils_promises.runAsynchronously)(hexclaveApp.redirectToSignUp());
95
140
  e.preventDefault();
96
141
  },
97
142
  children: t("Sign up")
@@ -100,9 +145,9 @@ function Inner(props) {
100
145
  t("Already have an account?"),
101
146
  " ",
102
147
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_link_js.StyledLink, {
103
- href: stackApp.urls.signIn,
148
+ href: hexclaveApp.urls.signIn,
104
149
  onClick: (e) => {
105
- (0, _hexclave_shared_dist_utils_promises.runAsynchronously)(stackApp.redirectToSignIn());
150
+ (0, _hexclave_shared_dist_utils_promises.runAsynchronously)(hexclaveApp.redirectToSignIn());
106
151
  e.preventDefault();
107
152
  },
108
153
  children: t("Sign in")