@hexclave/tanstack-start 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. package/README.md +7 -23
  2. package/dist/components/api-key-dialogs.js +18 -18
  3. package/dist/components/api-key-dialogs.js.map +1 -1
  4. package/dist/components/api-key-table.js +19 -19
  5. package/dist/components/api-key-table.js.map +1 -1
  6. package/dist/components/credential-sign-in.js +12 -12
  7. package/dist/components/credential-sign-in.js.map +1 -1
  8. package/dist/components/credential-sign-up.js +19 -19
  9. package/dist/components/credential-sign-up.js.map +1 -1
  10. package/dist/components/elements/separator-with-text.js +3 -3
  11. package/dist/components/elements/separator-with-text.js.map +1 -1
  12. package/dist/components/elements/sidebar-layout.js +15 -15
  13. package/dist/components/elements/sidebar-layout.js.map +1 -1
  14. package/dist/components/elements/user-avatar.js +3 -3
  15. package/dist/components/elements/user-avatar.js.map +1 -1
  16. package/dist/components/link.js +2 -2
  17. package/dist/components/link.js.map +1 -1
  18. package/dist/components/magic-link-sign-in.js +17 -17
  19. package/dist/components/magic-link-sign-in.js.map +1 -1
  20. package/dist/components/message-cards/known-error-message-card.js +2 -2
  21. package/dist/components/message-cards/known-error-message-card.js.map +1 -1
  22. package/dist/components/message-cards/message-card.js +4 -4
  23. package/dist/components/message-cards/message-card.js.map +1 -1
  24. package/dist/components/message-cards/predefined-message-card.js +2 -2
  25. package/dist/components/message-cards/predefined-message-card.js.map +1 -1
  26. package/dist/components/oauth-button.js +15 -15
  27. package/dist/components/oauth-button.js.map +1 -1
  28. package/dist/components/passkey-button.js +2 -2
  29. package/dist/components/passkey-button.js.map +1 -1
  30. package/dist/components/profile-image-editor.js +9 -9
  31. package/dist/components/profile-image-editor.js.map +1 -1
  32. package/dist/components/selected-team-switcher.js +4 -4
  33. package/dist/components/selected-team-switcher.js.map +1 -1
  34. package/dist/components/team-icon.js +4 -4
  35. package/dist/components/team-icon.js.map +1 -1
  36. package/dist/components/team-switcher.js +21 -21
  37. package/dist/components/team-switcher.js.map +1 -1
  38. package/dist/components/user-button.js +13 -13
  39. package/dist/components/user-button.js.map +1 -1
  40. package/dist/components-page/account-settings/active-sessions/active-sessions-page.js +32 -32
  41. package/dist/components-page/account-settings/active-sessions/active-sessions-page.js.map +1 -1
  42. package/dist/components-page/account-settings/api-keys/api-keys-page.js +4 -4
  43. package/dist/components-page/account-settings/api-keys/api-keys-page.js.map +1 -1
  44. package/dist/components-page/account-settings/editable-text.js +5 -5
  45. package/dist/components-page/account-settings/editable-text.js.map +1 -1
  46. package/dist/components-page/account-settings/email-and-auth/emails-section.js +22 -22
  47. package/dist/components-page/account-settings/email-and-auth/emails-section.js.map +1 -1
  48. package/dist/components-page/account-settings/email-and-auth/mfa-section.js +17 -17
  49. package/dist/components-page/account-settings/email-and-auth/mfa-section.js.map +1 -1
  50. package/dist/components-page/account-settings/email-and-auth/otp-section.js +9 -9
  51. package/dist/components-page/account-settings/email-and-auth/otp-section.js.map +1 -1
  52. package/dist/components-page/account-settings/email-and-auth/passkey-section.js +9 -9
  53. package/dist/components-page/account-settings/email-and-auth/passkey-section.js.map +1 -1
  54. package/dist/components-page/account-settings/email-and-auth/password-section.js +23 -23
  55. package/dist/components-page/account-settings/email-and-auth/password-section.js.map +1 -1
  56. package/dist/components-page/account-settings/notifications/notifications-page.js +6 -6
  57. package/dist/components-page/account-settings/notifications/notifications-page.js.map +1 -1
  58. package/dist/components-page/account-settings/payments/payments-panel.js +52 -52
  59. package/dist/components-page/account-settings/payments/payments-panel.js.map +1 -1
  60. package/dist/components-page/account-settings/profile-page/profile-page.js +1 -1
  61. package/dist/components-page/account-settings/section.js +4 -4
  62. package/dist/components-page/account-settings/section.js.map +1 -1
  63. package/dist/components-page/account-settings/settings/delete-account-section.js +7 -7
  64. package/dist/components-page/account-settings/settings/delete-account-section.js.map +1 -1
  65. package/dist/components-page/account-settings/settings/sign-out-section.js +2 -2
  66. package/dist/components-page/account-settings/settings/sign-out-section.js.map +1 -1
  67. package/dist/components-page/account-settings/teams/leave-team-section.js +5 -5
  68. package/dist/components-page/account-settings/teams/leave-team-section.js.map +1 -1
  69. package/dist/components-page/account-settings/teams/team-api-keys-section.js +6 -6
  70. package/dist/components-page/account-settings/teams/team-api-keys-section.js.map +1 -1
  71. package/dist/components-page/account-settings/teams/team-creation-page.js +7 -7
  72. package/dist/components-page/account-settings/teams/team-creation-page.js.map +1 -1
  73. package/dist/components-page/account-settings/teams/team-member-invitation-section.js +20 -20
  74. package/dist/components-page/account-settings/teams/team-member-invitation-section.js.map +1 -1
  75. package/dist/components-page/account-settings/teams/team-member-list-section.js +5 -5
  76. package/dist/components-page/account-settings/teams/team-member-list-section.js.map +1 -1
  77. package/dist/components-page/account-settings.js +22 -22
  78. package/dist/components-page/account-settings.js.map +1 -1
  79. package/dist/components-page/auth-page.js +23 -23
  80. package/dist/components-page/auth-page.js.map +1 -1
  81. package/dist/components-page/cli-auth-confirm.js +9 -9
  82. package/dist/components-page/cli-auth-confirm.js.map +1 -1
  83. package/dist/components-page/cli-auth-confirm.test.js +4 -4
  84. package/dist/components-page/cli-auth-confirm.test.js.map +1 -1
  85. package/dist/components-page/email-verification.js +6 -6
  86. package/dist/components-page/email-verification.js.map +1 -1
  87. package/dist/components-page/error-page.js +11 -11
  88. package/dist/components-page/error-page.js.map +1 -1
  89. package/dist/components-page/forgot-password.js +11 -11
  90. package/dist/components-page/forgot-password.js.map +1 -1
  91. package/dist/components-page/magic-link-callback.js +8 -8
  92. package/dist/components-page/magic-link-callback.js.map +1 -1
  93. package/dist/components-page/mfa.js +13 -13
  94. package/dist/components-page/mfa.js.map +1 -1
  95. package/dist/components-page/oauth-callback.js +9 -9
  96. package/dist/components-page/oauth-callback.js.map +1 -1
  97. package/dist/components-page/onboarding.js +11 -11
  98. package/dist/components-page/onboarding.js.map +1 -1
  99. package/dist/components-page/password-reset.js +27 -27
  100. package/dist/components-page/password-reset.js.map +1 -1
  101. package/dist/components-page/section.js +1 -1
  102. package/dist/components-page/sign-out.js +4 -4
  103. package/dist/components-page/sign-out.js.map +1 -1
  104. package/dist/components-page/stack-handler-client.js +9 -9
  105. package/dist/components-page/stack-handler-client.js.map +1 -1
  106. package/dist/components-page/stack-handler.d.ts +14 -9
  107. package/dist/components-page/stack-handler.d.ts.map +1 -1
  108. package/dist/components-page/stack-handler.js +8 -2
  109. package/dist/components-page/stack-handler.js.map +1 -1
  110. package/dist/components-page/team-creation.js +9 -9
  111. package/dist/components-page/team-creation.js.map +1 -1
  112. package/dist/components-page/team-invitation.js +20 -20
  113. package/dist/components-page/team-invitation.js.map +1 -1
  114. package/dist/dev-tool/dev-tool-core.d.ts.map +1 -1
  115. package/dist/dev-tool/dev-tool-core.js +25 -25
  116. package/dist/dev-tool/dev-tool-core.js.map +1 -1
  117. package/dist/dev-tool/dev-tool-trigger-position.test.js +1 -1
  118. package/dist/dev-tool/index.js +6 -6
  119. package/dist/dev-tool/index.js.map +1 -1
  120. package/dist/esm/components/api-key-dialogs.js.map +1 -1
  121. package/dist/esm/components/api-key-table.js.map +1 -1
  122. package/dist/esm/components/credential-sign-in.js.map +1 -1
  123. package/dist/esm/components/credential-sign-up.js.map +1 -1
  124. package/dist/esm/components/elements/separator-with-text.js.map +1 -1
  125. package/dist/esm/components/elements/sidebar-layout.js.map +1 -1
  126. package/dist/esm/components/elements/user-avatar.js.map +1 -1
  127. package/dist/esm/components/link.js.map +1 -1
  128. package/dist/esm/components/magic-link-sign-in.js.map +1 -1
  129. package/dist/esm/components/message-cards/known-error-message-card.js.map +1 -1
  130. package/dist/esm/components/message-cards/message-card.js.map +1 -1
  131. package/dist/esm/components/message-cards/predefined-message-card.js.map +1 -1
  132. package/dist/esm/components/oauth-button.js.map +1 -1
  133. package/dist/esm/components/passkey-button.js.map +1 -1
  134. package/dist/esm/components/profile-image-editor.js.map +1 -1
  135. package/dist/esm/components/selected-team-switcher.js.map +1 -1
  136. package/dist/esm/components/team-icon.js.map +1 -1
  137. package/dist/esm/components/team-switcher.js.map +1 -1
  138. package/dist/esm/components/user-button.js.map +1 -1
  139. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.js +1 -1
  140. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.js.map +1 -1
  141. package/dist/esm/components-page/account-settings/api-keys/api-keys-page.js +2 -2
  142. package/dist/esm/components-page/account-settings/api-keys/api-keys-page.js.map +1 -1
  143. package/dist/esm/components-page/account-settings/editable-text.js.map +1 -1
  144. package/dist/esm/components-page/account-settings/email-and-auth/emails-section.js.map +1 -1
  145. package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.js.map +1 -1
  146. package/dist/esm/components-page/account-settings/email-and-auth/otp-section.js.map +1 -1
  147. package/dist/esm/components-page/account-settings/email-and-auth/passkey-section.js.map +1 -1
  148. package/dist/esm/components-page/account-settings/email-and-auth/password-section.js.map +1 -1
  149. package/dist/esm/components-page/account-settings/notifications/notifications-page.js.map +1 -1
  150. package/dist/esm/components-page/account-settings/payments/payments-panel.js.map +1 -1
  151. package/dist/esm/components-page/account-settings/profile-page/profile-page.js +1 -1
  152. package/dist/esm/components-page/account-settings/section.js.map +1 -1
  153. package/dist/esm/components-page/account-settings/settings/delete-account-section.js.map +1 -1
  154. package/dist/esm/components-page/account-settings/settings/sign-out-section.js.map +1 -1
  155. package/dist/esm/components-page/account-settings/teams/leave-team-section.js.map +1 -1
  156. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.js +2 -2
  157. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.js.map +1 -1
  158. package/dist/esm/components-page/account-settings/teams/team-creation-page.js.map +1 -1
  159. package/dist/esm/components-page/account-settings/teams/team-member-invitation-section.js.map +1 -1
  160. package/dist/esm/components-page/account-settings/teams/team-member-list-section.js.map +1 -1
  161. package/dist/esm/components-page/account-settings.js.map +1 -1
  162. package/dist/esm/components-page/auth-page.js.map +1 -1
  163. package/dist/esm/components-page/cli-auth-confirm.js.map +1 -1
  164. package/dist/esm/components-page/cli-auth-confirm.test.js +2 -2
  165. package/dist/esm/components-page/cli-auth-confirm.test.js.map +1 -1
  166. package/dist/esm/components-page/email-verification.js.map +1 -1
  167. package/dist/esm/components-page/error-page.js.map +1 -1
  168. package/dist/esm/components-page/forgot-password.js.map +1 -1
  169. package/dist/esm/components-page/magic-link-callback.js.map +1 -1
  170. package/dist/esm/components-page/mfa.js.map +1 -1
  171. package/dist/esm/components-page/oauth-callback.js.map +1 -1
  172. package/dist/esm/components-page/onboarding.js.map +1 -1
  173. package/dist/esm/components-page/password-reset.js.map +1 -1
  174. package/dist/esm/components-page/sign-out.js.map +1 -1
  175. package/dist/esm/components-page/stack-handler-client.js +2 -2
  176. package/dist/esm/components-page/stack-handler-client.js.map +1 -1
  177. package/dist/esm/components-page/stack-handler.d.ts +13 -9
  178. package/dist/esm/components-page/stack-handler.d.ts.map +1 -1
  179. package/dist/esm/components-page/stack-handler.js +5 -2
  180. package/dist/esm/components-page/stack-handler.js.map +1 -1
  181. package/dist/esm/components-page/team-creation.js.map +1 -1
  182. package/dist/esm/components-page/team-invitation.js.map +1 -1
  183. package/dist/esm/dev-tool/dev-tool-core.d.ts.map +1 -1
  184. package/dist/esm/dev-tool/dev-tool-core.js +4 -4
  185. package/dist/esm/dev-tool/dev-tool-core.js.map +1 -1
  186. package/dist/esm/dev-tool/dev-tool-trigger-position.test.js +1 -1
  187. package/dist/esm/dev-tool/index.js.map +1 -1
  188. package/dist/esm/generated/global-css.d.ts +1 -1
  189. package/dist/esm/generated/global-css.js +1 -1
  190. package/dist/esm/generated/global-css.js.map +1 -1
  191. package/dist/esm/generated/quetzal-translations.js.map +1 -1
  192. package/dist/esm/index.d.ts +5 -5
  193. package/dist/esm/index.js +5 -6
  194. package/dist/esm/integrations/convex.js.map +1 -1
  195. package/dist/esm/lib/auth.js.map +1 -1
  196. package/dist/esm/lib/auth.test.js.map +1 -1
  197. package/dist/esm/lib/cookie.js.map +1 -1
  198. package/dist/esm/lib/hooks.d.ts +11 -1
  199. package/dist/esm/lib/hooks.d.ts.map +1 -1
  200. package/dist/esm/lib/hooks.js +19 -9
  201. package/dist/esm/lib/hooks.js.map +1 -1
  202. package/dist/esm/lib/stack-app/api-keys/index.js.map +1 -1
  203. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.d.ts +11 -11
  204. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.d.ts.map +1 -1
  205. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js +3 -1
  206. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js.map +1 -1
  207. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.d.ts +3 -3
  208. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.d.ts.map +1 -1
  209. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js +1 -1
  210. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -1
  211. package/dist/esm/lib/stack-app/apps/implementations/common.d.ts.map +1 -1
  212. package/dist/esm/lib/stack-app/apps/implementations/common.js +2 -2
  213. package/dist/esm/lib/stack-app/apps/implementations/common.js.map +1 -1
  214. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.js.map +1 -1
  215. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.test.js.map +1 -1
  216. package/dist/esm/lib/stack-app/apps/implementations/index.js.map +1 -1
  217. package/dist/esm/lib/stack-app/apps/implementations/redirect-page-urls.js.map +1 -1
  218. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -1
  219. package/dist/esm/lib/stack-app/apps/implementations/session-replay.d.ts.map +1 -1
  220. package/dist/esm/lib/stack-app/apps/implementations/session-replay.js +3 -2
  221. package/dist/esm/lib/stack-app/apps/implementations/session-replay.js.map +1 -1
  222. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.d.ts +4 -0
  223. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.d.ts.map +1 -1
  224. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.js +1 -0
  225. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.js.map +1 -1
  226. package/dist/esm/lib/stack-app/apps/interfaces/client-app.d.ts +5 -0
  227. package/dist/esm/lib/stack-app/apps/interfaces/client-app.d.ts.map +1 -1
  228. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js +1 -0
  229. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js.map +1 -1
  230. package/dist/esm/lib/stack-app/apps/interfaces/server-app.d.ts +4 -0
  231. package/dist/esm/lib/stack-app/apps/interfaces/server-app.d.ts.map +1 -1
  232. package/dist/esm/lib/stack-app/apps/interfaces/server-app.js +1 -0
  233. package/dist/esm/lib/stack-app/apps/interfaces/server-app.js.map +1 -1
  234. package/dist/esm/lib/stack-app/common.js.map +1 -1
  235. package/dist/esm/lib/stack-app/contact-channels/index.js.map +1 -1
  236. package/dist/esm/lib/stack-app/email-templates/index.js.map +1 -1
  237. package/dist/esm/lib/stack-app/internal-api-keys/index.js.map +1 -1
  238. package/dist/esm/lib/stack-app/permissions/index.js.map +1 -1
  239. package/dist/esm/lib/stack-app/projects/index.js.map +1 -1
  240. package/dist/esm/lib/stack-app/teams/index.js.map +1 -1
  241. package/dist/esm/lib/stack-app/url-targets.js.map +1 -1
  242. package/dist/esm/lib/stack-app/url-targets.test.js +1 -1
  243. package/dist/esm/lib/stack-app/url-targets.test.js.map +1 -1
  244. package/dist/esm/lib/stack-app/users/index.js.map +1 -1
  245. package/dist/esm/providers/stack-context.d.ts +3 -2
  246. package/dist/esm/providers/stack-context.d.ts.map +1 -1
  247. package/dist/esm/providers/stack-context.js +3 -1
  248. package/dist/esm/providers/stack-context.js.map +1 -1
  249. package/dist/esm/providers/stack-provider-client.js.map +1 -1
  250. package/dist/esm/providers/stack-provider.d.ts +5 -1
  251. package/dist/esm/providers/stack-provider.d.ts.map +1 -1
  252. package/dist/esm/providers/stack-provider.js +5 -1
  253. package/dist/esm/providers/stack-provider.js.map +1 -1
  254. package/dist/esm/providers/theme-provider.d.ts +6 -2
  255. package/dist/esm/providers/theme-provider.d.ts.map +1 -1
  256. package/dist/esm/providers/theme-provider.js +6 -2
  257. package/dist/esm/providers/theme-provider.js.map +1 -1
  258. package/dist/esm/providers/translation-provider-client.d.ts +4 -3
  259. package/dist/esm/providers/translation-provider-client.d.ts.map +1 -1
  260. package/dist/esm/providers/translation-provider-client.js +4 -2
  261. package/dist/esm/providers/translation-provider-client.js.map +1 -1
  262. package/dist/esm/providers/translation-provider.js.map +1 -1
  263. package/dist/esm/utils/url.js.map +1 -1
  264. package/dist/generated/global-css.d.ts +1 -1
  265. package/dist/generated/global-css.js +1 -1
  266. package/dist/generated/global-css.js.map +1 -1
  267. package/dist/generated/quetzal-translations.js +16 -16
  268. package/dist/generated/quetzal-translations.js.map +1 -1
  269. package/dist/index.d.ts +6 -6
  270. package/dist/index.js +9 -12
  271. package/dist/integrations/convex/component/convex.config.d.ts +1 -1
  272. package/dist/integrations/convex.js +5 -5
  273. package/dist/integrations/convex.js.map +1 -1
  274. package/dist/lib/auth.js +12 -12
  275. package/dist/lib/auth.js.map +1 -1
  276. package/dist/lib/auth.test.js +2 -2
  277. package/dist/lib/auth.test.js.map +1 -1
  278. package/dist/lib/cookie.js +13 -13
  279. package/dist/lib/cookie.js.map +1 -1
  280. package/dist/lib/hooks.d.ts +11 -1
  281. package/dist/lib/hooks.d.ts.map +1 -1
  282. package/dist/lib/hooks.js +19 -8
  283. package/dist/lib/hooks.js.map +1 -1
  284. package/dist/lib/stack-app/api-keys/index.js +2 -2
  285. package/dist/lib/stack-app/api-keys/index.js.map +1 -1
  286. package/dist/lib/stack-app/apps/implementations/admin-app-impl.d.ts +11 -11
  287. package/dist/lib/stack-app/apps/implementations/admin-app-impl.d.ts.map +1 -1
  288. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js +39 -37
  289. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js.map +1 -1
  290. package/dist/lib/stack-app/apps/implementations/client-app-impl.d.ts +3 -3
  291. package/dist/lib/stack-app/apps/implementations/client-app-impl.d.ts.map +1 -1
  292. package/dist/lib/stack-app/apps/implementations/client-app-impl.js +214 -214
  293. package/dist/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -1
  294. package/dist/lib/stack-app/apps/implementations/common.d.ts.map +1 -1
  295. package/dist/lib/stack-app/apps/implementations/common.js +31 -31
  296. package/dist/lib/stack-app/apps/implementations/common.js.map +1 -1
  297. package/dist/lib/stack-app/apps/implementations/event-tracker.js +7 -7
  298. package/dist/lib/stack-app/apps/implementations/event-tracker.js.map +1 -1
  299. package/dist/lib/stack-app/apps/implementations/event-tracker.test.js +3 -3
  300. package/dist/lib/stack-app/apps/implementations/event-tracker.test.js.map +1 -1
  301. package/dist/lib/stack-app/apps/implementations/index.js +4 -4
  302. package/dist/lib/stack-app/apps/implementations/index.js.map +1 -1
  303. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.js +8 -8
  304. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.js.map +1 -1
  305. package/dist/lib/stack-app/apps/implementations/server-app-impl.js +70 -70
  306. package/dist/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -1
  307. package/dist/lib/stack-app/apps/implementations/session-replay.d.ts.map +1 -1
  308. package/dist/lib/stack-app/apps/implementations/session-replay.js +13 -12
  309. package/dist/lib/stack-app/apps/implementations/session-replay.js.map +1 -1
  310. package/dist/lib/stack-app/apps/interfaces/admin-app.d.ts +4 -0
  311. package/dist/lib/stack-app/apps/interfaces/admin-app.d.ts.map +1 -1
  312. package/dist/lib/stack-app/apps/interfaces/admin-app.js +1 -0
  313. package/dist/lib/stack-app/apps/interfaces/admin-app.js.map +1 -1
  314. package/dist/lib/stack-app/apps/interfaces/client-app.d.ts +5 -0
  315. package/dist/lib/stack-app/apps/interfaces/client-app.d.ts.map +1 -1
  316. package/dist/lib/stack-app/apps/interfaces/client-app.js +1 -0
  317. package/dist/lib/stack-app/apps/interfaces/client-app.js.map +1 -1
  318. package/dist/lib/stack-app/apps/interfaces/server-app.d.ts +5 -1
  319. package/dist/lib/stack-app/apps/interfaces/server-app.d.ts.map +1 -1
  320. package/dist/lib/stack-app/apps/interfaces/server-app.js +1 -0
  321. package/dist/lib/stack-app/apps/interfaces/server-app.js.map +1 -1
  322. package/dist/lib/stack-app/common.d.ts +1 -1
  323. package/dist/lib/stack-app/common.js.map +1 -1
  324. package/dist/lib/stack-app/contact-channels/index.js.map +1 -1
  325. package/dist/lib/stack-app/email-templates/index.js.map +1 -1
  326. package/dist/lib/stack-app/internal-api-keys/index.js.map +1 -1
  327. package/dist/lib/stack-app/permissions/index.js.map +1 -1
  328. package/dist/lib/stack-app/projects/index.js.map +1 -1
  329. package/dist/lib/stack-app/teams/index.js.map +1 -1
  330. package/dist/lib/stack-app/url-targets.js +6 -6
  331. package/dist/lib/stack-app/url-targets.js.map +1 -1
  332. package/dist/lib/stack-app/url-targets.test.js +1 -1
  333. package/dist/lib/stack-app/url-targets.test.js.map +1 -1
  334. package/dist/lib/stack-app/users/index.js +3 -3
  335. package/dist/lib/stack-app/users/index.js.map +1 -1
  336. package/dist/providers/stack-context.d.ts +3 -2
  337. package/dist/providers/stack-context.d.ts.map +1 -1
  338. package/dist/providers/stack-context.js +3 -1
  339. package/dist/providers/stack-context.js.map +1 -1
  340. package/dist/providers/stack-provider-client.js +2 -2
  341. package/dist/providers/stack-provider-client.js.map +1 -1
  342. package/dist/providers/stack-provider.d.ts +6 -1
  343. package/dist/providers/stack-provider.d.ts.map +1 -1
  344. package/dist/providers/stack-provider.js +8 -1
  345. package/dist/providers/stack-provider.js.map +1 -1
  346. package/dist/providers/theme-provider.d.ts +6 -2
  347. package/dist/providers/theme-provider.d.ts.map +1 -1
  348. package/dist/providers/theme-provider.js +10 -5
  349. package/dist/providers/theme-provider.js.map +1 -1
  350. package/dist/providers/translation-provider-client.d.ts +4 -3
  351. package/dist/providers/translation-provider-client.d.ts.map +1 -1
  352. package/dist/providers/translation-provider-client.js +4 -1
  353. package/dist/providers/translation-provider-client.js.map +1 -1
  354. package/dist/providers/translation-provider.js +2 -2
  355. package/dist/providers/translation-provider.js.map +1 -1
  356. package/dist/{storage-CPqRDIqg.d.ts → storage-CKzvsBxG.d.ts} +1 -1
  357. package/dist/{storage-CPqRDIqg.d.ts.map → storage-CKzvsBxG.d.ts.map} +1 -1
  358. package/dist/utils/url.js +2 -2
  359. package/dist/utils/url.js.map +1 -1
  360. package/package.json +4 -4
  361. package/dist/esm/internal/deprecation-warning.d.ts +0 -1
  362. package/dist/esm/internal/deprecation-warning.js +0 -24
  363. package/dist/esm/internal/deprecation-warning.js.map +0 -1
  364. package/dist/internal/deprecation-warning.d.ts +0 -1
  365. package/dist/internal/deprecation-warning.js +0 -24
  366. package/dist/internal/deprecation-warning.js.map +0 -1
@@ -1,9 +1,9 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  const require_chunk = require('../../../chunk-BE-pF4vm.js');
3
3
  let _hookform_resolvers_yup = require("@hookform/resolvers/yup");
4
- let _stackframe_stack_shared_dist_schema_fields = require("@hexclave/shared/dist/schema-fields");
5
- let _stackframe_stack_shared_dist_utils_promises = require("@hexclave/shared/dist/utils/promises");
6
- let _stackframe_stack_ui = require("@hexclave/ui");
4
+ let _hexclave_shared_dist_schema_fields = require("@hexclave/shared/dist/schema-fields");
5
+ let _hexclave_shared_dist_utils_promises = require("@hexclave/shared/dist/utils/promises");
6
+ let _hexclave_ui = require("@hexclave/ui");
7
7
  let react = require("react");
8
8
  let react_hook_form = require("react-hook-form");
9
9
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -23,37 +23,37 @@ function MemberInvitationsSectionInvitationsList(props) {
23
23
  const { t } = (0, _________lib_translations_js.useTranslation)();
24
24
  const invitationsToShow = props.team.useInvitations();
25
25
  const removeMemberPermission = user.usePermission(props.team, "$remove_members");
26
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_stackframe_stack_ui.Table, {
26
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_hexclave_ui.Table, {
27
27
  className: "mt-6",
28
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TableHeader, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_stackframe_stack_ui.TableRow, { children: [
29
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TableHead, {
28
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TableHeader, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_hexclave_ui.TableRow, { children: [
29
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TableHead, {
30
30
  className: "w-[200px]",
31
31
  children: t("Outstanding invitations")
32
32
  }),
33
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TableHead, {
33
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TableHead, {
34
34
  className: "w-[60px]",
35
35
  children: t("Expires")
36
36
  }),
37
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TableHead, { className: "w-[36px] max-w-[36px]" })
38
- ] }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_stackframe_stack_ui.TableBody, { children: [invitationsToShow.map((invitation, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_stackframe_stack_ui.TableRow, { children: [
39
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TableCell, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Typography, { children: invitation.recipientEmail }) }),
40
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TableCell, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Typography, {
37
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TableHead, { className: "w-[36px] max-w-[36px]" })
38
+ ] }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_hexclave_ui.TableBody, { children: [invitationsToShow.map((invitation, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_hexclave_ui.TableRow, { children: [
39
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TableCell, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Typography, { children: invitation.recipientEmail }) }),
40
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TableCell, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Typography, {
41
41
  variant: "secondary",
42
42
  children: invitation.expiresAt.toLocaleString()
43
43
  }) }),
44
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TableCell, {
44
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TableCell, {
45
45
  align: "right",
46
46
  className: "max-w-[36px]",
47
- children: removeMemberPermission && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Button, {
47
+ children: removeMemberPermission && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Button, {
48
48
  onClick: async () => await invitation.revoke(),
49
49
  size: "icon",
50
50
  variant: "ghost",
51
51
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Trash, { className: "w-4 h-4" })
52
52
  })
53
53
  })
54
- ] }, invitation.id)), invitationsToShow.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TableRow, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TableCell, {
54
+ ] }, invitation.id)), invitationsToShow.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TableRow, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TableCell, {
55
55
  colSpan: 3,
56
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Typography, {
56
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Typography, {
57
57
  variant: "secondary",
58
58
  children: t("No outstanding invitations")
59
59
  })
@@ -64,7 +64,7 @@ function MemberInvitationSectionInner(props) {
64
64
  const user = (0, _________lib_hooks_js.useUser)({ or: "redirect" });
65
65
  const { t } = (0, _________lib_translations_js.useTranslation)();
66
66
  const readMemberPermission = user.usePermission(props.team, "$read_members");
67
- const { register, handleSubmit, formState: { errors }, watch } = (0, react_hook_form.useForm)({ resolver: (0, _hookform_resolvers_yup.yupResolver)((0, _stackframe_stack_shared_dist_schema_fields.yupObject)({ email: (0, _stackframe_stack_shared_dist_schema_fields.strictEmailSchema)(t("Please enter a valid email address")).defined().nonEmpty(t("Please enter an email address")) })) });
67
+ const { register, handleSubmit, formState: { errors }, watch } = (0, react_hook_form.useForm)({ resolver: (0, _hookform_resolvers_yup.yupResolver)((0, _hexclave_shared_dist_schema_fields.yupObject)({ email: (0, _hexclave_shared_dist_schema_fields.strictEmailSchema)(t("Please enter a valid email address")).defined().nonEmpty(t("Please enter an email address")) })) });
68
68
  const [loading, setLoading] = (0, react.useState)(false);
69
69
  const [invitedEmail, setInvitedEmail] = (0, react.useState)(null);
70
70
  const onSubmit = async (data) => {
@@ -83,23 +83,23 @@ function MemberInvitationSectionInner(props) {
83
83
  title: t("Invite member"),
84
84
  description: t("Invite a user to your team through email"),
85
85
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
86
- onSubmit: (e) => (0, _stackframe_stack_shared_dist_utils_promises.runAsynchronouslyWithAlert)(handleSubmit(onSubmit)(e)),
86
+ onSubmit: (e) => (0, _hexclave_shared_dist_utils_promises.runAsynchronouslyWithAlert)(handleSubmit(onSubmit)(e)),
87
87
  noValidate: true,
88
88
  className: "w-full",
89
89
  children: [
90
90
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
91
91
  className: "flex flex-col gap-4 sm:flex-row w-full",
92
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Input, {
92
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Input, {
93
93
  placeholder: t("Email"),
94
94
  ...register("email")
95
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Button, {
95
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Button, {
96
96
  type: "submit",
97
97
  loading,
98
98
  children: t("Invite User")
99
99
  })]
100
100
  }),
101
101
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_________components_elements_form_warning_js.FormWarningText, { text: errors.email?.message?.toString() }),
102
- invitedEmail && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_stackframe_stack_ui.Typography, {
102
+ invitedEmail && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_hexclave_ui.Typography, {
103
103
  type: "label",
104
104
  variant: "secondary",
105
105
  children: ["Invited ", invitedEmail]
@@ -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 \"@stackframe/stack-shared/dist/schema-fields\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Button, Input, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Typography } from \"@stackframe/stack-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,8CACC,4CAACC;GACC,2CAACC;IAAU,WAAU;cAAa,EAAE,0BAA0B;KAAa;GAC3E,2CAACA;IAAU,WAAU;cAAY,EAAE,UAAU;KAAa;GAC1D,2CAACA,kCAAU,WAAU,0BAAoC;MAChD,GACC,EACd,4CAACC,6CACE,kBAAkB,KAAK,YAAY,MAClC,4CAACF;GACC,2CAACG,4CACC,2CAACC,6CAAY,WAAW,iBAA4B,GAC1C;GACZ,2CAACD,4CACC,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,2CAClC,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,8GALiC,EACjC,0EAAyB,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,mFAAgC,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, 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,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  const require_chunk = require('../../../chunk-BE-pF4vm.js');
3
- let _stackframe_stack_ui = require("@hexclave/ui");
3
+ let _hexclave_ui = require("@hexclave/ui");
4
4
  let react_jsx_runtime = require("react/jsx-runtime");
5
5
  let _________lib_hooks_js = require("../../../lib/hooks.js");
6
6
  let _________lib_translations_js = require("../../../lib/translations.js");
@@ -17,18 +17,18 @@ function TeamMemberListSection(props) {
17
17
  function MemberListSectionInner(props) {
18
18
  const { t } = (0, _________lib_translations_js.useTranslation)();
19
19
  const users = props.team.useUsers();
20
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Typography, {
20
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Typography, {
21
21
  className: "font-medium mb-2",
22
22
  children: t("Members")
23
23
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
24
24
  className: "border rounded-md",
25
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_stackframe_stack_ui.Table, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TableHeader, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_stackframe_stack_ui.TableRow, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TableHead, {
25
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_hexclave_ui.Table, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TableHeader, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_hexclave_ui.TableRow, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TableHead, {
26
26
  className: "w-[100px]",
27
27
  children: t("User")
28
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TableHead, {
28
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TableHead, {
29
29
  className: "w-[200px]",
30
30
  children: t("Name")
31
- })] }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TableBody, { children: users.map(({ id, teamProfile }, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_stackframe_stack_ui.TableRow, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TableCell, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_________components_elements_user_avatar_js.UserAvatar, { user: teamProfile }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_stackframe_stack_ui.TableCell, { children: [teamProfile.displayName && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Typography, { children: teamProfile.displayName }), !teamProfile.displayName && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Typography, {
31
+ })] }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TableBody, { children: users.map(({ id, teamProfile }, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_hexclave_ui.TableRow, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TableCell, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_________components_elements_user_avatar_js.UserAvatar, { user: teamProfile }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_hexclave_ui.TableCell, { children: [teamProfile.displayName && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Typography, { children: teamProfile.displayName }), !teamProfile.displayName && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Typography, {
32
32
  className: "text-muted-foreground italic",
33
33
  children: t("No display name set")
34
34
  })] })] }, id)) })] })
@@ -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 \"@stackframe/stack-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,yCACC,2CAACC,8CACC,4CAACC,4CACC,2CAACC;GAAU,WAAU;aAAa,EAAE,OAAO;IAAa,EACxD,2CAACA;GAAU,WAAU;aAAa,EAAE,OAAO;IAAa,IAC/C,GACC,EACd,2CAACC,4CACE,MAAM,KAAK,EAAE,IAAI,eAAe,MAC/B,4CAACF,4CACC,2CAACG,4CACC,2CAACC,0DAAW,MAAM,cAAe,GACvB,EACZ,4CAACD,6CACE,YAAY,eACX,2CAACN,6CAAY,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, 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"}
@@ -2,8 +2,8 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
  const require_chunk = require('../chunk-BE-pF4vm.js');
5
- let _stackframe_stack_shared_dist_utils_promises = require("@hexclave/shared/dist/utils/promises");
6
- let _stackframe_stack_ui = require("@hexclave/ui");
5
+ let _hexclave_shared_dist_utils_promises = require("@hexclave/shared/dist/utils/promises");
6
+ let _hexclave_ui = require("@hexclave/ui");
7
7
  let react = require("react");
8
8
  react = require_chunk.__toESM(react);
9
9
  let ___index_js = require("../index.js");
@@ -63,7 +63,7 @@ function AccountSettings(props) {
63
63
  (0, react.useEffect)(() => {
64
64
  if (props.mockUser || !userId) return;
65
65
  let cancelled = false;
66
- (0, _stackframe_stack_shared_dist_utils_promises.runAsynchronouslyWithAlert)(async () => {
66
+ (0, _hexclave_shared_dist_utils_promises.runAsynchronouslyWithAlert)(async () => {
67
67
  const currentUser = userRef.current;
68
68
  if (!currentUser || currentUser.id !== userId) return;
69
69
  const [userProducts, teamsWithProducts] = await Promise.all([currentUser.listProducts({ limit: 1 }), Promise.all(teamsById.map(async (team) => {
@@ -187,7 +187,7 @@ function AccountSettings(props) {
187
187
  ...teams.map((team) => ({
188
188
  title: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
189
189
  className: "flex gap-2 items-center w-full",
190
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_team_icon_js.TeamIcon, { team }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Typography, {
190
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_team_icon_js.TeamIcon, { team }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Typography, {
191
191
  className: "max-w-[320px] md:w-[90%] truncate",
192
192
  children: team.displayName
193
193
  })]
@@ -223,43 +223,43 @@ function PageLayout(props) {
223
223
  }
224
224
  function EmailsAndAuthPageSkeleton() {
225
225
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(PageLayout, { children: [
226
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-9 w-full mt-1" }),
227
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-9 w-full mt-1" }),
228
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-9 w-full mt-1" }),
229
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-9 w-full mt-1" })
226
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-9 w-full mt-1" }),
227
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-9 w-full mt-1" }),
228
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-9 w-full mt-1" }),
229
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-9 w-full mt-1" })
230
230
  ] });
231
231
  }
232
232
  function ActiveSessionsPageSkeleton() {
233
233
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(PageLayout, { children: [
234
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-6 w-48 mb-2" }),
235
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-4 w-full mb-4" }),
236
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-[200px] w-full mt-1 rounded-md" })
234
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-6 w-48 mb-2" }),
235
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-4 w-full mb-4" }),
236
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-[200px] w-full mt-1 rounded-md" })
237
237
  ] });
238
238
  }
239
239
  function ApiKeysPageSkeleton() {
240
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(PageLayout, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-9 w-full mt-1" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-[200px] w-full mt-1 rounded-md" })] });
240
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(PageLayout, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-9 w-full mt-1" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-[200px] w-full mt-1 rounded-md" })] });
241
241
  }
242
242
  function PaymentsPageSkeleton() {
243
243
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(PageLayout, { children: [
244
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-6 w-48 mb-2" }),
245
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-9 w-full mt-1" }),
246
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-9 w-full mt-1" }),
247
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-[200px] w-full mt-1 rounded-md" })
244
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-6 w-48 mb-2" }),
245
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-9 w-full mt-1" }),
246
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-9 w-full mt-1" }),
247
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-[200px] w-full mt-1 rounded-md" })
248
248
  ] });
249
249
  }
250
250
  function TeamPageSkeleton() {
251
251
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(PageLayout, { children: [
252
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-9 w-full mt-1" }),
253
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-9 w-full mt-1" }),
254
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-9 w-full mt-1" }),
255
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-[200px] w-full mt-1 rounded-md" })
252
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-9 w-full mt-1" }),
253
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-9 w-full mt-1" }),
254
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-9 w-full mt-1" }),
255
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-[200px] w-full mt-1 rounded-md" })
256
256
  ] });
257
257
  }
258
258
  function TeamCreationSkeleton() {
259
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(PageLayout, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-9 w-full mt-1" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-9 w-full mt-1" })] });
259
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(PageLayout, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-9 w-full mt-1" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-9 w-full mt-1" })] });
260
260
  }
261
261
  function NotificationsPageSkeleton() {
262
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(PageLayout, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-9 w-full mt-1" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-9 w-full mt-1" })] });
262
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(PageLayout, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-9 w-full mt-1" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-9 w-full mt-1" })] });
263
263
  }
264
264
 
265
265
  //#endregion
@@ -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 \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Skeleton, Typography } from '@stackframe/stack-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, 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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"}
@@ -2,8 +2,8 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
  const require_chunk = require('../chunk-BE-pF4vm.js');
5
- let _stackframe_stack_shared_dist_utils_promises = require("@hexclave/shared/dist/utils/promises");
6
- let _stackframe_stack_ui = require("@hexclave/ui");
5
+ let _hexclave_shared_dist_utils_promises = require("@hexclave/shared/dist/utils/promises");
6
+ let _hexclave_ui = require("@hexclave/ui");
7
7
  let react = require("react");
8
8
  let ___index_js = require("../index.js");
9
9
  let ___lib_translations_js = require("../lib/translations.js");
@@ -38,12 +38,12 @@ function Fallback(props) {
38
38
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39
39
  className: "text-center mb-6 flex flex-col",
40
40
  children: [
41
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-9 w-2/3 self-center" }),
42
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-3 w-16 mt-8" }),
43
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-9 w-full mt-1" }),
44
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-3 w-24 mt-2" }),
45
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-9 w-full mt-1" }),
46
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Skeleton, { className: "h-9 w-full mt-6" })
41
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-9 w-2/3 self-center" }),
42
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-3 w-16 mt-8" }),
43
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-9 w-full mt-1" }),
44
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-3 w-24 mt-2" }),
45
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-9 w-full mt-1" }),
46
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Skeleton, { className: "h-9 w-full mt-6" })
47
47
  ]
48
48
  })
49
49
  })
@@ -56,7 +56,7 @@ function Inner(props) {
56
56
  const project = props.mockProject || projectFromHook;
57
57
  const { t } = (0, ___lib_translations_js.useTranslation)();
58
58
  if (props.automaticRedirect && user && !props.mockProject) {
59
- (0, _stackframe_stack_shared_dist_utils_promises.runAsynchronously)(user.isRestricted ? stackApp.redirectToOnboarding({ replace: true }) : props.type === "sign-in" ? stackApp.redirectToAfterSignIn({ replace: true }) : stackApp.redirectToAfterSignUp({ replace: true }));
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
60
  return null;
61
61
  }
62
62
  if (user && !props.mockProject && !props.automaticRedirect) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_message_cards_predefined_message_card_js.PredefinedMessageCard, {
@@ -82,27 +82,27 @@ function Inner(props) {
82
82
  children: [
83
83
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
84
84
  className: "text-center mb-6",
85
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Typography, {
85
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Typography, {
86
86
  type: "h2",
87
87
  children: props.type === "sign-in" ? t("Sign in to your account") : t("Create a new account")
88
- }), props.type === "sign-in" ? project.config.signUpEnabled && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_stackframe_stack_ui.Typography, { children: [
88
+ }), props.type === "sign-in" ? project.config.signUpEnabled && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_hexclave_ui.Typography, { children: [
89
89
  t("Don't have an account?"),
90
90
  " ",
91
91
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_link_js.StyledLink, {
92
92
  href: stackApp.urls.signUp,
93
93
  onClick: (e) => {
94
- (0, _stackframe_stack_shared_dist_utils_promises.runAsynchronously)(stackApp.redirectToSignUp());
94
+ (0, _hexclave_shared_dist_utils_promises.runAsynchronously)(stackApp.redirectToSignUp());
95
95
  e.preventDefault();
96
96
  },
97
97
  children: t("Sign up")
98
98
  })
99
- ] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_stackframe_stack_ui.Typography, { children: [
99
+ ] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_hexclave_ui.Typography, { children: [
100
100
  t("Already have an account?"),
101
101
  " ",
102
102
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_link_js.StyledLink, {
103
103
  href: stackApp.urls.signIn,
104
104
  onClick: (e) => {
105
- (0, _stackframe_stack_shared_dist_utils_promises.runAsynchronously)(stackApp.redirectToSignIn());
105
+ (0, _hexclave_shared_dist_utils_promises.runAsynchronously)(stackApp.redirectToSignIn());
106
106
  e.preventDefault();
107
107
  },
108
108
  children: t("Sign in")
@@ -117,37 +117,37 @@ function Inner(props) {
117
117
  }), hasPasskey && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_passkey_button_js.PasskeyButton, { type: props.type })]
118
118
  }),
119
119
  enableSeparator && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_elements_separator_with_text_js.SeparatorWithText, { text: t("Or continue with") }),
120
- project.config.credentialEnabled && project.config.magicLinkEnabled ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_stackframe_stack_ui.Tabs, {
120
+ project.config.credentialEnabled && project.config.magicLinkEnabled ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_hexclave_ui.Tabs, {
121
121
  defaultValue: props.firstTab || "magic-link",
122
122
  children: [
123
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_stackframe_stack_ui.TabsList, {
124
- className: (0, _stackframe_stack_ui.cn)("w-full mb-2", { "flex-row-reverse": props.firstTab === "password" }),
125
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TabsTrigger, {
123
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_hexclave_ui.TabsList, {
124
+ className: (0, _hexclave_ui.cn)("w-full mb-2", { "flex-row-reverse": props.firstTab === "password" }),
125
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TabsTrigger, {
126
126
  value: "magic-link",
127
127
  className: "flex-1",
128
128
  children: t("Email")
129
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TabsTrigger, {
129
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TabsTrigger, {
130
130
  value: "password",
131
131
  className: "flex-1",
132
132
  children: t("Email & Password")
133
133
  })]
134
134
  }),
135
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TabsContent, {
135
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TabsContent, {
136
136
  value: "magic-link",
137
137
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_magic_link_sign_in_js.MagicLinkSignIn, {})
138
138
  }),
139
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TabsContent, {
139
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TabsContent, {
140
140
  value: "password",
141
141
  children: props.type === "sign-up" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_credential_sign_up_js.CredentialSignUp, { noPasswordRepeat: props.noPasswordRepeat }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_credential_sign_in_js.CredentialSignIn, {})
142
142
  })
143
143
  ]
144
- }) : project.config.credentialEnabled ? props.type === "sign-up" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_credential_sign_up_js.CredentialSignUp, { noPasswordRepeat: props.noPasswordRepeat }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_credential_sign_in_js.CredentialSignIn, {}) : project.config.magicLinkEnabled ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_magic_link_sign_in_js.MagicLinkSignIn, {}) : !(hasOAuthProviders || hasPasskey) ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Typography, {
144
+ }) : project.config.credentialEnabled ? props.type === "sign-up" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_credential_sign_up_js.CredentialSignUp, { noPasswordRepeat: props.noPasswordRepeat }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_credential_sign_in_js.CredentialSignIn, {}) : project.config.magicLinkEnabled ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_magic_link_sign_in_js.MagicLinkSignIn, {}) : !(hasOAuthProviders || hasPasskey) ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Typography, {
145
145
  variant: "destructive",
146
146
  className: "text-center",
147
147
  children: t("No authentication method enabled.")
148
148
  }) : null,
149
149
  props.extraInfo && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
150
- className: (0, _stackframe_stack_ui.cn)("flex flex-col items-center text-center text-sm text-gray-500", {
150
+ className: (0, _hexclave_ui.cn)("flex flex-col items-center text-center text-sm text-gray-500", {
151
151
  "mt-2": project.config.credentialEnabled || project.config.magicLinkEnabled,
152
152
  "mt-6": !(project.config.credentialEnabled || project.config.magicLinkEnabled)
153
153
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"auth-page.js","names":["Suspense","MaybeFullPage","Skeleton","PredefinedMessageCard","Typography","StyledLink","OAuthButtonGroup","PasskeyButton","SeparatorWithText","Tabs","TabsList","TabsTrigger","TabsContent","MagicLinkSignIn","CredentialSignUp","CredentialSignIn"],"sources":["../../src/components-page/auth-page.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 { runAsynchronously } from '@stackframe/stack-shared/dist/utils/promises';\nimport { Skeleton, Tabs, TabsContent, TabsList, TabsTrigger, Typography, cn } from '@stackframe/stack-ui';\nimport { Suspense } from 'react';\nimport { useStackApp, useUser } from '..';\nimport { CredentialSignIn } from '../components/credential-sign-in';\nimport { CredentialSignUp } from '../components/credential-sign-up';\nimport { MaybeFullPage } from '../components/elements/maybe-full-page';\nimport { SeparatorWithText } from '../components/elements/separator-with-text';\nimport { StyledLink } from '../components/link';\nimport { MagicLinkSignIn } from '../components/magic-link-sign-in';\nimport { PredefinedMessageCard } from '../components/message-cards/predefined-message-card';\nimport { OAuthButtonGroup } from '../components/oauth-button-group';\nimport { PasskeyButton } from '../components/passkey-button';\nimport { useTranslation } from '../lib/translations';\n\ntype Props = {\n noPasswordRepeat?: boolean,\n firstTab?: 'magic-link' | 'password',\n fullPage?: boolean,\n type: 'sign-in' | 'sign-up',\n automaticRedirect?: boolean,\n extraInfo?: React.ReactNode,\n mockProject?: {\n config: {\n signUpEnabled: boolean,\n credentialEnabled: boolean,\n passkeyEnabled: boolean,\n magicLinkEnabled: boolean,\n oauthProviders: {\n id: string,\n }[],\n },\n },\n}\n\nexport function AuthPage(props: Props) {\n return <Suspense fallback={<Fallback {...props} />}>\n <Inner {...props} />\n </Suspense>;\n}\n\nfunction Fallback(props: Props) {\n return (\n <MaybeFullPage fullPage={!!props.fullPage}>\n <div className='stack-scope flex flex-col items-stretch' style={{ maxWidth: '380px', flexBasis: '380px', padding: props.fullPage ? '1rem' : 0 }}>\n <div className=\"text-center mb-6 flex flex-col\">\n <Skeleton className='h-9 w-2/3 self-center' />\n\n <Skeleton className='h-3 w-16 mt-8' />\n <Skeleton className='h-9 w-full mt-1' />\n\n <Skeleton className='h-3 w-24 mt-2' />\n <Skeleton className='h-9 w-full mt-1' />\n\n <Skeleton className='h-9 w-full mt-6' />\n </div>\n </div>\n </MaybeFullPage>\n );\n}\n\nfunction Inner(props: Props) {\n const stackApp = useStackApp();\n const user = useUser({ includeRestricted: true });\n const projectFromHook = stackApp.useProject();\n const project = props.mockProject || projectFromHook;\n const { t } = useTranslation();\n\n if (props.automaticRedirect && user && !props.mockProject) {\n runAsynchronously(\n user.isRestricted\n ? stackApp.redirectToOnboarding({ replace: true })\n : props.type === 'sign-in'\n ? stackApp.redirectToAfterSignIn({ replace: true })\n : stackApp.redirectToAfterSignUp({ replace: true })\n );\n return null;\n }\n\n if (user && !props.mockProject && !props.automaticRedirect) {\n return <PredefinedMessageCard type='signedIn' fullPage={props.fullPage} />;\n }\n\n if (props.type === 'sign-up' && !project.config.signUpEnabled) {\n return <PredefinedMessageCard type='signUpDisabled' fullPage={props.fullPage} />;\n }\n\n const hasOAuthProviders = project.config.oauthProviders.length > 0;\n const hasPasskey = (project.config.passkeyEnabled === true && props.type === \"sign-in\");\n const enableSeparator = (project.config.credentialEnabled || project.config.magicLinkEnabled) && (hasOAuthProviders || hasPasskey);\n\n return (\n <MaybeFullPage fullPage={!!props.fullPage}>\n <div className='stack-scope flex flex-col items-stretch' style={{ maxWidth: '380px', flexBasis: '380px', padding: props.fullPage ? '1rem' : 0 }}>\n <div className=\"text-center mb-6\">\n <Typography type='h2'>\n {props.type === 'sign-in' ? t(\"Sign in to your account\") : t(\"Create a new account\")}\n </Typography>\n {props.type === 'sign-in' ? (\n project.config.signUpEnabled && (\n <Typography>\n {t(\"Don't have an account?\")}{\" \"}\n <StyledLink href={stackApp.urls.signUp} onClick={(e) => {\n runAsynchronously(stackApp.redirectToSignUp());\n e.preventDefault();\n }}>{t(\"Sign up\")}</StyledLink>\n </Typography>\n )\n ) : (\n <Typography>\n {t(\"Already have an account?\")}{\" \"}\n <StyledLink href={stackApp.urls.signIn} onClick={(e) => {\n runAsynchronously(stackApp.redirectToSignIn());\n e.preventDefault();\n }}>{t(\"Sign in\")}</StyledLink>\n </Typography>\n )}\n </div>\n {(hasOAuthProviders || hasPasskey) && (\n <div className='gap-4 flex flex-col items-stretch stack-scope'>\n {hasOAuthProviders && <OAuthButtonGroup type={props.type} mockProject={props.mockProject} />}\n {hasPasskey && <PasskeyButton type={props.type} />}\n </div>\n )}\n\n {enableSeparator && <SeparatorWithText text={t('Or continue with')} />}\n {project.config.credentialEnabled && project.config.magicLinkEnabled ? (\n <Tabs defaultValue={props.firstTab || 'magic-link'}>\n <TabsList className={cn('w-full mb-2', {\n 'flex-row-reverse': props.firstTab === 'password'\n })}>\n <TabsTrigger value='magic-link' className='flex-1'>{t(\"Email\")}</TabsTrigger>\n <TabsTrigger value='password' className='flex-1'>{t(\"Email & Password\")}</TabsTrigger>\n </TabsList>\n <TabsContent value='magic-link'>\n <MagicLinkSignIn />\n </TabsContent>\n <TabsContent value='password'>\n {props.type === 'sign-up' ? <CredentialSignUp noPasswordRepeat={props.noPasswordRepeat} /> : <CredentialSignIn />}\n </TabsContent>\n </Tabs>\n ) : project.config.credentialEnabled ? (\n props.type === 'sign-up' ? <CredentialSignUp noPasswordRepeat={props.noPasswordRepeat} /> : <CredentialSignIn />\n ) : project.config.magicLinkEnabled ? (\n <MagicLinkSignIn />\n ) : !(hasOAuthProviders || hasPasskey) ? <Typography variant={\"destructive\"} className=\"text-center\">{t(\"No authentication method enabled.\")}</Typography> : null}\n {props.extraInfo && (\n <div className={cn('flex flex-col items-center text-center text-sm text-gray-500', {\n 'mt-2': project.config.credentialEnabled || project.config.magicLinkEnabled,\n 'mt-6': !(project.config.credentialEnabled || project.config.magicLinkEnabled),\n })}>\n <div>{props.extraInfo}</div>\n </div>\n )}\n </div>\n </MaybeFullPage>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"auth-page.js","names":["Suspense","MaybeFullPage","Skeleton","PredefinedMessageCard","Typography","StyledLink","OAuthButtonGroup","PasskeyButton","SeparatorWithText","Tabs","TabsList","TabsTrigger","TabsContent","MagicLinkSignIn","CredentialSignUp","CredentialSignIn"],"sources":["../../src/components-page/auth-page.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 { runAsynchronously } from '@hexclave/shared/dist/utils/promises';\nimport { Skeleton, Tabs, TabsContent, TabsList, TabsTrigger, Typography, cn } from '@hexclave/ui';\nimport { Suspense } from 'react';\nimport { useStackApp, useUser } from '..';\nimport { CredentialSignIn } from '../components/credential-sign-in';\nimport { CredentialSignUp } from '../components/credential-sign-up';\nimport { MaybeFullPage } from '../components/elements/maybe-full-page';\nimport { SeparatorWithText } from '../components/elements/separator-with-text';\nimport { StyledLink } from '../components/link';\nimport { MagicLinkSignIn } from '../components/magic-link-sign-in';\nimport { PredefinedMessageCard } from '../components/message-cards/predefined-message-card';\nimport { OAuthButtonGroup } from '../components/oauth-button-group';\nimport { PasskeyButton } from '../components/passkey-button';\nimport { useTranslation } from '../lib/translations';\n\ntype Props = {\n noPasswordRepeat?: boolean,\n firstTab?: 'magic-link' | 'password',\n fullPage?: boolean,\n type: 'sign-in' | 'sign-up',\n automaticRedirect?: boolean,\n extraInfo?: React.ReactNode,\n mockProject?: {\n config: {\n signUpEnabled: boolean,\n credentialEnabled: boolean,\n passkeyEnabled: boolean,\n magicLinkEnabled: boolean,\n oauthProviders: {\n id: string,\n }[],\n },\n },\n}\n\nexport function AuthPage(props: Props) {\n return <Suspense fallback={<Fallback {...props} />}>\n <Inner {...props} />\n </Suspense>;\n}\n\nfunction Fallback(props: Props) {\n return (\n <MaybeFullPage fullPage={!!props.fullPage}>\n <div className='stack-scope flex flex-col items-stretch' style={{ maxWidth: '380px', flexBasis: '380px', padding: props.fullPage ? '1rem' : 0 }}>\n <div className=\"text-center mb-6 flex flex-col\">\n <Skeleton className='h-9 w-2/3 self-center' />\n\n <Skeleton className='h-3 w-16 mt-8' />\n <Skeleton className='h-9 w-full mt-1' />\n\n <Skeleton className='h-3 w-24 mt-2' />\n <Skeleton className='h-9 w-full mt-1' />\n\n <Skeleton className='h-9 w-full mt-6' />\n </div>\n </div>\n </MaybeFullPage>\n );\n}\n\nfunction Inner(props: Props) {\n const stackApp = useStackApp();\n const user = useUser({ includeRestricted: true });\n const projectFromHook = stackApp.useProject();\n const project = props.mockProject || projectFromHook;\n const { t } = useTranslation();\n\n if (props.automaticRedirect && user && !props.mockProject) {\n runAsynchronously(\n user.isRestricted\n ? stackApp.redirectToOnboarding({ replace: true })\n : props.type === 'sign-in'\n ? stackApp.redirectToAfterSignIn({ replace: true })\n : stackApp.redirectToAfterSignUp({ replace: true })\n );\n return null;\n }\n\n if (user && !props.mockProject && !props.automaticRedirect) {\n return <PredefinedMessageCard type='signedIn' fullPage={props.fullPage} />;\n }\n\n if (props.type === 'sign-up' && !project.config.signUpEnabled) {\n return <PredefinedMessageCard type='signUpDisabled' fullPage={props.fullPage} />;\n }\n\n const hasOAuthProviders = project.config.oauthProviders.length > 0;\n const hasPasskey = (project.config.passkeyEnabled === true && props.type === \"sign-in\");\n const enableSeparator = (project.config.credentialEnabled || project.config.magicLinkEnabled) && (hasOAuthProviders || hasPasskey);\n\n return (\n <MaybeFullPage fullPage={!!props.fullPage}>\n <div className='stack-scope flex flex-col items-stretch' style={{ maxWidth: '380px', flexBasis: '380px', padding: props.fullPage ? '1rem' : 0 }}>\n <div className=\"text-center mb-6\">\n <Typography type='h2'>\n {props.type === 'sign-in' ? t(\"Sign in to your account\") : t(\"Create a new account\")}\n </Typography>\n {props.type === 'sign-in' ? (\n project.config.signUpEnabled && (\n <Typography>\n {t(\"Don't have an account?\")}{\" \"}\n <StyledLink href={stackApp.urls.signUp} onClick={(e) => {\n runAsynchronously(stackApp.redirectToSignUp());\n e.preventDefault();\n }}>{t(\"Sign up\")}</StyledLink>\n </Typography>\n )\n ) : (\n <Typography>\n {t(\"Already have an account?\")}{\" \"}\n <StyledLink href={stackApp.urls.signIn} onClick={(e) => {\n runAsynchronously(stackApp.redirectToSignIn());\n e.preventDefault();\n }}>{t(\"Sign in\")}</StyledLink>\n </Typography>\n )}\n </div>\n {(hasOAuthProviders || hasPasskey) && (\n <div className='gap-4 flex flex-col items-stretch stack-scope'>\n {hasOAuthProviders && <OAuthButtonGroup type={props.type} mockProject={props.mockProject} />}\n {hasPasskey && <PasskeyButton type={props.type} />}\n </div>\n )}\n\n {enableSeparator && <SeparatorWithText text={t('Or continue with')} />}\n {project.config.credentialEnabled && project.config.magicLinkEnabled ? (\n <Tabs defaultValue={props.firstTab || 'magic-link'}>\n <TabsList className={cn('w-full mb-2', {\n 'flex-row-reverse': props.firstTab === 'password'\n })}>\n <TabsTrigger value='magic-link' className='flex-1'>{t(\"Email\")}</TabsTrigger>\n <TabsTrigger value='password' className='flex-1'>{t(\"Email & Password\")}</TabsTrigger>\n </TabsList>\n <TabsContent value='magic-link'>\n <MagicLinkSignIn />\n </TabsContent>\n <TabsContent value='password'>\n {props.type === 'sign-up' ? <CredentialSignUp noPasswordRepeat={props.noPasswordRepeat} /> : <CredentialSignIn />}\n </TabsContent>\n </Tabs>\n ) : project.config.credentialEnabled ? (\n props.type === 'sign-up' ? <CredentialSignUp noPasswordRepeat={props.noPasswordRepeat} /> : <CredentialSignIn />\n ) : project.config.magicLinkEnabled ? (\n <MagicLinkSignIn />\n ) : !(hasOAuthProviders || hasPasskey) ? <Typography variant={\"destructive\"} className=\"text-center\">{t(\"No authentication method enabled.\")}</Typography> : null}\n {props.extraInfo && (\n <div className={cn('flex flex-col items-center text-center text-sm text-gray-500', {\n 'mt-2': project.config.credentialEnabled || project.config.magicLinkEnabled,\n 'mt-6': !(project.config.credentialEnabled || project.config.magicLinkEnabled),\n })}>\n <div>{props.extraInfo}</div>\n </div>\n )}\n </div>\n </MaybeFullPage>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA0CA,SAAgB,SAAS,OAAc;AACrC,QAAO,2CAACA;EAAS,UAAU,2CAAC,YAAS,GAAI,QAAS;YAChD,2CAAC,SAAM,GAAI,QAAS;GACX;;AAGb,SAAS,SAAS,OAAc;AAC9B,QACE,2CAACC;EAAc,UAAU,CAAC,CAAC,MAAM;YAC/B,2CAAC;GAAI,WAAU;GAA0C,OAAO;IAAE,UAAU;IAAS,WAAW;IAAS,SAAS,MAAM,WAAW,SAAS;IAAG;aAC7I,4CAAC;IAAI,WAAU;;KACb,2CAACC,yBAAS,WAAU,0BAA0B;KAE9C,2CAACA,yBAAS,WAAU,kBAAkB;KACtC,2CAACA,yBAAS,WAAU,oBAAoB;KAExC,2CAACA,yBAAS,WAAU,kBAAkB;KACtC,2CAACA,yBAAS,WAAU,oBAAoB;KAExC,2CAACA,yBAAS,WAAU,oBAAoB;;KACpC;IACF;GACQ;;AAIpB,SAAS,MAAM,OAAc;CAC3B,MAAM,yCAAwB;CAC9B,MAAM,gCAAe,EAAE,mBAAmB,MAAM,CAAC;CACjD,MAAM,kBAAkB,SAAS,YAAY;CAC7C,MAAM,UAAU,MAAM,eAAe;CACrC,MAAM,EAAE,kDAAsB;AAE9B,KAAI,MAAM,qBAAqB,QAAQ,CAAC,MAAM,aAAa;AACzD,8DACE,KAAK,eACD,SAAS,qBAAqB,EAAE,SAAS,MAAM,CAAC,GAChD,MAAM,SAAS,YACb,SAAS,sBAAsB,EAAE,SAAS,MAAM,CAAC,GACjD,SAAS,sBAAsB,EAAE,SAAS,MAAM,CAAC,CACxD;AACD,SAAO;;AAGT,KAAI,QAAQ,CAAC,MAAM,eAAe,CAAC,MAAM,kBACvC,QAAO,2CAACC;EAAsB,MAAK;EAAW,UAAU,MAAM;GAAY;AAG5E,KAAI,MAAM,SAAS,aAAa,CAAC,QAAQ,OAAO,cAC9C,QAAO,2CAACA;EAAsB,MAAK;EAAiB,UAAU,MAAM;GAAY;CAGlF,MAAM,oBAAoB,QAAQ,OAAO,eAAe,SAAS;CACjE,MAAM,aAAc,QAAQ,OAAO,mBAAmB,QAAQ,MAAM,SAAS;CAC7E,MAAM,mBAAmB,QAAQ,OAAO,qBAAqB,QAAQ,OAAO,sBAAsB,qBAAqB;AAEvH,QACE,2CAACF;EAAc,UAAU,CAAC,CAAC,MAAM;YAC/B,4CAAC;GAAI,WAAU;GAA0C,OAAO;IAAE,UAAU;IAAS,WAAW;IAAS,SAAS,MAAM,WAAW,SAAS;IAAG;;IAC7I,4CAAC;KAAI,WAAU;gBACb,2CAACG;MAAW,MAAK;gBACd,MAAM,SAAS,YAAY,EAAE,0BAA0B,GAAG,EAAE,uBAAuB;OACzE,EACZ,MAAM,SAAS,YACd,QAAQ,OAAO,iBACb,4CAACA;MACE,EAAE,yBAAyB;MAAE;MAC9B,2CAACC;OAAW,MAAM,SAAS,KAAK;OAAQ,UAAU,MAAM;AACtD,oEAAkB,SAAS,kBAAkB,CAAC;AAC9C,UAAE,gBAAgB;;iBAChB,EAAE,UAAU;QAAc;SACnB,GAGf,4CAACD;MACE,EAAE,2BAA2B;MAAE;MAChC,2CAACC;OAAW,MAAM,SAAS,KAAK;OAAQ,UAAU,MAAM;AACtD,oEAAkB,SAAS,kBAAkB,CAAC;AAC9C,UAAE,gBAAgB;;iBAChB,EAAE,UAAU;QAAc;SACnB;MAEX;KACJ,qBAAqB,eACrB,4CAAC;KAAI,WAAU;gBACZ,qBAAqB,2CAACC;MAAiB,MAAM,MAAM;MAAM,aAAa,MAAM;OAAe,EAC3F,cAAc,2CAACC,iDAAc,MAAM,MAAM,OAAQ;MAC9C;IAGP,mBAAmB,2CAACC,mEAAkB,MAAM,EAAE,mBAAmB,GAAI;IACrE,QAAQ,OAAO,qBAAqB,QAAQ,OAAO,mBAClD,4CAACC;KAAK,cAAc,MAAM,YAAY;;MACpC,4CAACC;OAAS,gCAAc,eAAe,EACrC,oBAAoB,MAAM,aAAa,YACxC,CAAC;kBACA,2CAACC;QAAY,OAAM;QAAa,WAAU;kBAAU,EAAE,QAAQ;SAAe,EAC7E,2CAACA;QAAY,OAAM;QAAW,WAAU;kBAAU,EAAE,mBAAmB;SAAe;QAC7E;MACX,2CAACC;OAAY,OAAM;iBACjB,2CAACC,wDAAkB;QACP;MACd,2CAACD;OAAY,OAAM;iBAChB,MAAM,SAAS,YAAY,2CAACE,wDAAiB,kBAAkB,MAAM,mBAAoB,GAAG,2CAACC,yDAAmB;QACrG;;MACT,GACL,QAAQ,OAAO,oBACjB,MAAM,SAAS,YAAY,2CAACD,wDAAiB,kBAAkB,MAAM,mBAAoB,GAAG,2CAACC,yDAAmB,GAC9G,QAAQ,OAAO,mBACjB,2CAACF,wDAAkB,GACjB,EAAE,qBAAqB,cAAc,2CAACT;KAAW,SAAS;KAAe,WAAU;eAAe,EAAE,oCAAoC;MAAc,GAAG;IAC5J,MAAM,aACL,2CAAC;KAAI,gCAAc,gEAAgE;MACjF,QAAQ,QAAQ,OAAO,qBAAqB,QAAQ,OAAO;MAC3D,QAAQ,EAAE,QAAQ,OAAO,qBAAqB,QAAQ,OAAO;MAC9D,CAAC;eACA,2CAAC,mBAAK,MAAM,YAAgB;MACxB;;IAEJ;GACQ"}