@hexclave/next 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 (365) 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 +2 -2
  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/section.js +4 -4
  61. package/dist/components-page/account-settings/section.js.map +1 -1
  62. package/dist/components-page/account-settings/settings/delete-account-section.js +7 -7
  63. package/dist/components-page/account-settings/settings/delete-account-section.js.map +1 -1
  64. package/dist/components-page/account-settings/settings/sign-out-section.js +2 -2
  65. package/dist/components-page/account-settings/settings/sign-out-section.js.map +1 -1
  66. package/dist/components-page/account-settings/teams/leave-team-section.js +5 -5
  67. package/dist/components-page/account-settings/teams/leave-team-section.js.map +1 -1
  68. package/dist/components-page/account-settings/teams/team-api-keys-section.js +5 -5
  69. package/dist/components-page/account-settings/teams/team-api-keys-section.js.map +1 -1
  70. package/dist/components-page/account-settings/teams/team-creation-page.js +7 -7
  71. package/dist/components-page/account-settings/teams/team-creation-page.js.map +1 -1
  72. package/dist/components-page/account-settings/teams/team-member-invitation-section.js +20 -20
  73. package/dist/components-page/account-settings/teams/team-member-invitation-section.js.map +1 -1
  74. package/dist/components-page/account-settings/teams/team-member-list-section.js +5 -5
  75. package/dist/components-page/account-settings/teams/team-member-list-section.js.map +1 -1
  76. package/dist/components-page/account-settings.js +22 -22
  77. package/dist/components-page/account-settings.js.map +1 -1
  78. package/dist/components-page/auth-page.js +23 -23
  79. package/dist/components-page/auth-page.js.map +1 -1
  80. package/dist/components-page/cli-auth-confirm.js +9 -9
  81. package/dist/components-page/cli-auth-confirm.js.map +1 -1
  82. package/dist/components-page/cli-auth-confirm.test.js +4 -4
  83. package/dist/components-page/cli-auth-confirm.test.js.map +1 -1
  84. package/dist/components-page/email-verification.js +6 -6
  85. package/dist/components-page/email-verification.js.map +1 -1
  86. package/dist/components-page/error-page.js +11 -11
  87. package/dist/components-page/error-page.js.map +1 -1
  88. package/dist/components-page/forgot-password.js +11 -11
  89. package/dist/components-page/forgot-password.js.map +1 -1
  90. package/dist/components-page/magic-link-callback.js +8 -8
  91. package/dist/components-page/magic-link-callback.js.map +1 -1
  92. package/dist/components-page/mfa.js +13 -13
  93. package/dist/components-page/mfa.js.map +1 -1
  94. package/dist/components-page/oauth-callback.js +9 -9
  95. package/dist/components-page/oauth-callback.js.map +1 -1
  96. package/dist/components-page/onboarding.js +11 -11
  97. package/dist/components-page/onboarding.js.map +1 -1
  98. package/dist/components-page/password-reset.js +27 -27
  99. package/dist/components-page/password-reset.js.map +1 -1
  100. package/dist/components-page/section.js +1 -1
  101. package/dist/components-page/sign-out.js +4 -4
  102. package/dist/components-page/sign-out.js.map +1 -1
  103. package/dist/components-page/stack-handler-client.js +9 -9
  104. package/dist/components-page/stack-handler-client.js.map +1 -1
  105. package/dist/components-page/stack-handler.d.ts +14 -9
  106. package/dist/components-page/stack-handler.d.ts.map +1 -1
  107. package/dist/components-page/stack-handler.js +8 -2
  108. package/dist/components-page/stack-handler.js.map +1 -1
  109. package/dist/components-page/team-creation.js +9 -9
  110. package/dist/components-page/team-creation.js.map +1 -1
  111. package/dist/components-page/team-invitation.js +20 -20
  112. package/dist/components-page/team-invitation.js.map +1 -1
  113. package/dist/dev-tool/dev-tool-core.d.ts.map +1 -1
  114. package/dist/dev-tool/dev-tool-core.js +25 -25
  115. package/dist/dev-tool/dev-tool-core.js.map +1 -1
  116. package/dist/dev-tool/dev-tool-trigger-position.test.js +1 -1
  117. package/dist/dev-tool/index.js +6 -6
  118. package/dist/dev-tool/index.js.map +1 -1
  119. package/dist/esm/components/api-key-dialogs.js.map +1 -1
  120. package/dist/esm/components/api-key-table.js.map +1 -1
  121. package/dist/esm/components/credential-sign-in.js.map +1 -1
  122. package/dist/esm/components/credential-sign-up.js.map +1 -1
  123. package/dist/esm/components/elements/separator-with-text.js.map +1 -1
  124. package/dist/esm/components/elements/sidebar-layout.js.map +1 -1
  125. package/dist/esm/components/elements/user-avatar.js.map +1 -1
  126. package/dist/esm/components/link.js.map +1 -1
  127. package/dist/esm/components/magic-link-sign-in.js.map +1 -1
  128. package/dist/esm/components/message-cards/known-error-message-card.js.map +1 -1
  129. package/dist/esm/components/message-cards/message-card.js.map +1 -1
  130. package/dist/esm/components/message-cards/predefined-message-card.js.map +1 -1
  131. package/dist/esm/components/oauth-button.js.map +1 -1
  132. package/dist/esm/components/passkey-button.js.map +1 -1
  133. package/dist/esm/components/profile-image-editor.js.map +1 -1
  134. package/dist/esm/components/selected-team-switcher.js.map +1 -1
  135. package/dist/esm/components/team-icon.js.map +1 -1
  136. package/dist/esm/components/team-switcher.js.map +1 -1
  137. package/dist/esm/components/user-button.js.map +1 -1
  138. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.js.map +1 -1
  139. package/dist/esm/components-page/account-settings/api-keys/api-keys-page.js.map +1 -1
  140. package/dist/esm/components-page/account-settings/editable-text.js.map +1 -1
  141. package/dist/esm/components-page/account-settings/email-and-auth/emails-section.js.map +1 -1
  142. package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.js.map +1 -1
  143. package/dist/esm/components-page/account-settings/email-and-auth/otp-section.js.map +1 -1
  144. package/dist/esm/components-page/account-settings/email-and-auth/passkey-section.js.map +1 -1
  145. package/dist/esm/components-page/account-settings/email-and-auth/password-section.js.map +1 -1
  146. package/dist/esm/components-page/account-settings/notifications/notifications-page.js.map +1 -1
  147. package/dist/esm/components-page/account-settings/payments/payments-panel.js +1 -1
  148. package/dist/esm/components-page/account-settings/payments/payments-panel.js.map +1 -1
  149. package/dist/esm/components-page/account-settings/section.js.map +1 -1
  150. package/dist/esm/components-page/account-settings/settings/delete-account-section.js.map +1 -1
  151. package/dist/esm/components-page/account-settings/settings/sign-out-section.js.map +1 -1
  152. package/dist/esm/components-page/account-settings/teams/leave-team-section.js.map +1 -1
  153. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.js +1 -1
  154. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.js.map +1 -1
  155. package/dist/esm/components-page/account-settings/teams/team-creation-page.js.map +1 -1
  156. package/dist/esm/components-page/account-settings/teams/team-member-invitation-section.js.map +1 -1
  157. package/dist/esm/components-page/account-settings/teams/team-member-list-section.js.map +1 -1
  158. package/dist/esm/components-page/account-settings.js.map +1 -1
  159. package/dist/esm/components-page/auth-page.js.map +1 -1
  160. package/dist/esm/components-page/cli-auth-confirm.js.map +1 -1
  161. package/dist/esm/components-page/cli-auth-confirm.test.js +2 -2
  162. package/dist/esm/components-page/cli-auth-confirm.test.js.map +1 -1
  163. package/dist/esm/components-page/email-verification.js.map +1 -1
  164. package/dist/esm/components-page/error-page.js.map +1 -1
  165. package/dist/esm/components-page/forgot-password.js.map +1 -1
  166. package/dist/esm/components-page/magic-link-callback.js.map +1 -1
  167. package/dist/esm/components-page/mfa.js.map +1 -1
  168. package/dist/esm/components-page/oauth-callback.js.map +1 -1
  169. package/dist/esm/components-page/onboarding.js.map +1 -1
  170. package/dist/esm/components-page/password-reset.js.map +1 -1
  171. package/dist/esm/components-page/sign-out.js.map +1 -1
  172. package/dist/esm/components-page/stack-handler-client.js +2 -2
  173. package/dist/esm/components-page/stack-handler-client.js.map +1 -1
  174. package/dist/esm/components-page/stack-handler.d.ts +13 -9
  175. package/dist/esm/components-page/stack-handler.d.ts.map +1 -1
  176. package/dist/esm/components-page/stack-handler.js +5 -2
  177. package/dist/esm/components-page/stack-handler.js.map +1 -1
  178. package/dist/esm/components-page/team-creation.js.map +1 -1
  179. package/dist/esm/components-page/team-invitation.js.map +1 -1
  180. package/dist/esm/dev-tool/dev-tool-core.d.ts.map +1 -1
  181. package/dist/esm/dev-tool/dev-tool-core.js +4 -4
  182. package/dist/esm/dev-tool/dev-tool-core.js.map +1 -1
  183. package/dist/esm/dev-tool/dev-tool-trigger-position.test.js +1 -1
  184. package/dist/esm/dev-tool/index.js.map +1 -1
  185. package/dist/esm/generated/global-css.d.ts +1 -1
  186. package/dist/esm/generated/global-css.js +1 -1
  187. package/dist/esm/generated/global-css.js.map +1 -1
  188. package/dist/esm/generated/quetzal-translations.js.map +1 -1
  189. package/dist/esm/index.d.ts +5 -5
  190. package/dist/esm/index.js +5 -6
  191. package/dist/esm/integrations/convex.js.map +1 -1
  192. package/dist/esm/lib/auth.js +1 -1
  193. package/dist/esm/lib/auth.js.map +1 -1
  194. package/dist/esm/lib/auth.test.js.map +1 -1
  195. package/dist/esm/lib/cookie.js.map +1 -1
  196. package/dist/esm/lib/hooks.d.ts +11 -1
  197. package/dist/esm/lib/hooks.d.ts.map +1 -1
  198. package/dist/esm/lib/hooks.js +19 -9
  199. package/dist/esm/lib/hooks.js.map +1 -1
  200. package/dist/esm/lib/stack-app/api-keys/index.js.map +1 -1
  201. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.d.ts +11 -11
  202. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.d.ts.map +1 -1
  203. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js +3 -1
  204. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js.map +1 -1
  205. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.d.ts +3 -3
  206. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.d.ts.map +1 -1
  207. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js +2 -2
  208. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -1
  209. package/dist/esm/lib/stack-app/apps/implementations/common.d.ts.map +1 -1
  210. package/dist/esm/lib/stack-app/apps/implementations/common.js +3 -3
  211. package/dist/esm/lib/stack-app/apps/implementations/common.js.map +1 -1
  212. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.js.map +1 -1
  213. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.test.js.map +1 -1
  214. package/dist/esm/lib/stack-app/apps/implementations/index.js.map +1 -1
  215. package/dist/esm/lib/stack-app/apps/implementations/redirect-page-urls.js.map +1 -1
  216. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -1
  217. package/dist/esm/lib/stack-app/apps/implementations/session-replay.d.ts.map +1 -1
  218. package/dist/esm/lib/stack-app/apps/implementations/session-replay.js +3 -2
  219. package/dist/esm/lib/stack-app/apps/implementations/session-replay.js.map +1 -1
  220. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.d.ts +4 -0
  221. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.d.ts.map +1 -1
  222. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.js +1 -0
  223. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.js.map +1 -1
  224. package/dist/esm/lib/stack-app/apps/interfaces/client-app.d.ts +5 -0
  225. package/dist/esm/lib/stack-app/apps/interfaces/client-app.d.ts.map +1 -1
  226. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js +1 -0
  227. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js.map +1 -1
  228. package/dist/esm/lib/stack-app/apps/interfaces/server-app.d.ts +4 -0
  229. package/dist/esm/lib/stack-app/apps/interfaces/server-app.d.ts.map +1 -1
  230. package/dist/esm/lib/stack-app/apps/interfaces/server-app.js +1 -0
  231. package/dist/esm/lib/stack-app/apps/interfaces/server-app.js.map +1 -1
  232. package/dist/esm/lib/stack-app/common.d.ts +1 -1
  233. package/dist/esm/lib/stack-app/common.js.map +1 -1
  234. package/dist/esm/lib/stack-app/contact-channels/index.js.map +1 -1
  235. package/dist/esm/lib/stack-app/email-templates/index.js.map +1 -1
  236. package/dist/esm/lib/stack-app/internal-api-keys/index.js.map +1 -1
  237. package/dist/esm/lib/stack-app/permissions/index.js.map +1 -1
  238. package/dist/esm/lib/stack-app/projects/index.js.map +1 -1
  239. package/dist/esm/lib/stack-app/teams/index.js.map +1 -1
  240. package/dist/esm/lib/stack-app/url-targets.js.map +1 -1
  241. package/dist/esm/lib/stack-app/url-targets.test.js +1 -1
  242. package/dist/esm/lib/stack-app/url-targets.test.js.map +1 -1
  243. package/dist/esm/lib/stack-app/users/index.js.map +1 -1
  244. package/dist/esm/providers/stack-context.d.ts +3 -2
  245. package/dist/esm/providers/stack-context.d.ts.map +1 -1
  246. package/dist/esm/providers/stack-context.js +3 -1
  247. package/dist/esm/providers/stack-context.js.map +1 -1
  248. package/dist/esm/providers/stack-provider-client.js.map +1 -1
  249. package/dist/esm/providers/stack-provider.d.ts +5 -1
  250. package/dist/esm/providers/stack-provider.d.ts.map +1 -1
  251. package/dist/esm/providers/stack-provider.js +5 -1
  252. package/dist/esm/providers/stack-provider.js.map +1 -1
  253. package/dist/esm/providers/theme-provider.d.ts +6 -2
  254. package/dist/esm/providers/theme-provider.d.ts.map +1 -1
  255. package/dist/esm/providers/theme-provider.js +6 -2
  256. package/dist/esm/providers/theme-provider.js.map +1 -1
  257. package/dist/esm/providers/translation-provider-client.d.ts +4 -3
  258. package/dist/esm/providers/translation-provider-client.d.ts.map +1 -1
  259. package/dist/esm/providers/translation-provider-client.js +4 -2
  260. package/dist/esm/providers/translation-provider-client.js.map +1 -1
  261. package/dist/esm/providers/translation-provider.js.map +1 -1
  262. package/dist/esm/utils/url.js.map +1 -1
  263. package/dist/generated/global-css.d.ts +1 -1
  264. package/dist/generated/global-css.js +1 -1
  265. package/dist/generated/global-css.js.map +1 -1
  266. package/dist/generated/quetzal-translations.js +16 -16
  267. package/dist/generated/quetzal-translations.js.map +1 -1
  268. package/dist/index.d.ts +6 -6
  269. package/dist/index.js +9 -12
  270. package/dist/integrations/convex/component/convex.config.d.ts +1 -1
  271. package/dist/integrations/convex.js +5 -5
  272. package/dist/integrations/convex.js.map +1 -1
  273. package/dist/lib/auth.js +12 -12
  274. package/dist/lib/auth.js.map +1 -1
  275. package/dist/lib/auth.test.js +2 -2
  276. package/dist/lib/auth.test.js.map +1 -1
  277. package/dist/lib/cookie.js +13 -13
  278. package/dist/lib/cookie.js.map +1 -1
  279. package/dist/lib/hooks.d.ts +11 -1
  280. package/dist/lib/hooks.d.ts.map +1 -1
  281. package/dist/lib/hooks.js +19 -8
  282. package/dist/lib/hooks.js.map +1 -1
  283. package/dist/lib/stack-app/api-keys/index.js +2 -2
  284. package/dist/lib/stack-app/api-keys/index.js.map +1 -1
  285. package/dist/lib/stack-app/apps/implementations/admin-app-impl.d.ts +11 -11
  286. package/dist/lib/stack-app/apps/implementations/admin-app-impl.d.ts.map +1 -1
  287. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js +39 -37
  288. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js.map +1 -1
  289. package/dist/lib/stack-app/apps/implementations/client-app-impl.d.ts +3 -3
  290. package/dist/lib/stack-app/apps/implementations/client-app-impl.d.ts.map +1 -1
  291. package/dist/lib/stack-app/apps/implementations/client-app-impl.js +213 -213
  292. package/dist/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -1
  293. package/dist/lib/stack-app/apps/implementations/common.d.ts.map +1 -1
  294. package/dist/lib/stack-app/apps/implementations/common.js +30 -30
  295. package/dist/lib/stack-app/apps/implementations/common.js.map +1 -1
  296. package/dist/lib/stack-app/apps/implementations/event-tracker.js +7 -7
  297. package/dist/lib/stack-app/apps/implementations/event-tracker.js.map +1 -1
  298. package/dist/lib/stack-app/apps/implementations/event-tracker.test.js +3 -3
  299. package/dist/lib/stack-app/apps/implementations/event-tracker.test.js.map +1 -1
  300. package/dist/lib/stack-app/apps/implementations/index.js +4 -4
  301. package/dist/lib/stack-app/apps/implementations/index.js.map +1 -1
  302. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.js +8 -8
  303. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.js.map +1 -1
  304. package/dist/lib/stack-app/apps/implementations/server-app-impl.js +70 -70
  305. package/dist/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -1
  306. package/dist/lib/stack-app/apps/implementations/session-replay.d.ts.map +1 -1
  307. package/dist/lib/stack-app/apps/implementations/session-replay.js +13 -12
  308. package/dist/lib/stack-app/apps/implementations/session-replay.js.map +1 -1
  309. package/dist/lib/stack-app/apps/interfaces/admin-app.d.ts +4 -0
  310. package/dist/lib/stack-app/apps/interfaces/admin-app.d.ts.map +1 -1
  311. package/dist/lib/stack-app/apps/interfaces/admin-app.js +1 -0
  312. package/dist/lib/stack-app/apps/interfaces/admin-app.js.map +1 -1
  313. package/dist/lib/stack-app/apps/interfaces/client-app.d.ts +5 -0
  314. package/dist/lib/stack-app/apps/interfaces/client-app.d.ts.map +1 -1
  315. package/dist/lib/stack-app/apps/interfaces/client-app.js +1 -0
  316. package/dist/lib/stack-app/apps/interfaces/client-app.js.map +1 -1
  317. package/dist/lib/stack-app/apps/interfaces/server-app.d.ts +5 -1
  318. package/dist/lib/stack-app/apps/interfaces/server-app.d.ts.map +1 -1
  319. package/dist/lib/stack-app/apps/interfaces/server-app.js +1 -0
  320. package/dist/lib/stack-app/apps/interfaces/server-app.js.map +1 -1
  321. package/dist/lib/stack-app/common.d.ts +1 -1
  322. package/dist/lib/stack-app/common.js.map +1 -1
  323. package/dist/lib/stack-app/contact-channels/index.js.map +1 -1
  324. package/dist/lib/stack-app/email-templates/index.js.map +1 -1
  325. package/dist/lib/stack-app/internal-api-keys/index.js.map +1 -1
  326. package/dist/lib/stack-app/permissions/index.js.map +1 -1
  327. package/dist/lib/stack-app/projects/index.js.map +1 -1
  328. package/dist/lib/stack-app/teams/index.js.map +1 -1
  329. package/dist/lib/stack-app/url-targets.js +6 -6
  330. package/dist/lib/stack-app/url-targets.js.map +1 -1
  331. package/dist/lib/stack-app/url-targets.test.js +1 -1
  332. package/dist/lib/stack-app/url-targets.test.js.map +1 -1
  333. package/dist/lib/stack-app/users/index.js +3 -3
  334. package/dist/lib/stack-app/users/index.js.map +1 -1
  335. package/dist/providers/stack-context.d.ts +3 -2
  336. package/dist/providers/stack-context.d.ts.map +1 -1
  337. package/dist/providers/stack-context.js +3 -1
  338. package/dist/providers/stack-context.js.map +1 -1
  339. package/dist/providers/stack-provider-client.js +2 -2
  340. package/dist/providers/stack-provider-client.js.map +1 -1
  341. package/dist/providers/stack-provider.d.ts +6 -1
  342. package/dist/providers/stack-provider.d.ts.map +1 -1
  343. package/dist/providers/stack-provider.js +8 -1
  344. package/dist/providers/stack-provider.js.map +1 -1
  345. package/dist/providers/theme-provider.d.ts +6 -2
  346. package/dist/providers/theme-provider.d.ts.map +1 -1
  347. package/dist/providers/theme-provider.js +10 -5
  348. package/dist/providers/theme-provider.js.map +1 -1
  349. package/dist/providers/translation-provider-client.d.ts +4 -3
  350. package/dist/providers/translation-provider-client.d.ts.map +1 -1
  351. package/dist/providers/translation-provider-client.js +4 -1
  352. package/dist/providers/translation-provider-client.js.map +1 -1
  353. package/dist/providers/translation-provider.js +2 -2
  354. package/dist/providers/translation-provider.js.map +1 -1
  355. package/dist/{storage-DxMLntUt.d.ts → storage-kTmOAWHW.d.ts} +1 -1
  356. package/dist/{storage-DxMLntUt.d.ts.map → storage-kTmOAWHW.d.ts.map} +1 -1
  357. package/dist/utils/url.js +2 -2
  358. package/dist/utils/url.js.map +1 -1
  359. package/package.json +5 -5
  360. package/dist/esm/internal/deprecation-warning.d.ts +0 -1
  361. package/dist/esm/internal/deprecation-warning.js +0 -24
  362. package/dist/esm/internal/deprecation-warning.js.map +0 -1
  363. package/dist/internal/deprecation-warning.d.ts +0 -1
  364. package/dist/internal/deprecation-warning.js +0 -24
  365. package/dist/internal/deprecation-warning.js.map +0 -1
@@ -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":"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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 ___lib_translations_js = require("../lib/translations.js");
9
9
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -77,7 +77,7 @@ function useCliAuthConfirmation() {
77
77
  (0, react.useEffect)(() => {
78
78
  if (!confirmed || !user || autoCompleteRef.current) return;
79
79
  autoCompleteRef.current = true;
80
- (0, _stackframe_stack_shared_dist_utils_promises.runAsynchronouslyWithAlert)(async () => {
80
+ (0, _hexclave_shared_dist_utils_promises.runAsynchronouslyWithAlert)(async () => {
81
81
  setStatus("authorizing");
82
82
  try {
83
83
  await completeWithCurrentUser();
@@ -170,17 +170,17 @@ function CliAuthConfirmation({ fullPage = true }) {
170
170
  if (cliAuth.status === "success") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_message_cards_message_card_js.MessageCard, {
171
171
  title: t("CLI Authorization Successful"),
172
172
  fullPage,
173
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Typography, { children: t("The CLI application has been authorized successfully. You can close this window and return to the command line.") })
173
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Typography, { children: t("The CLI application has been authorized successfully. You can close this window and return to the command line.") })
174
174
  });
175
175
  if (cliAuth.status === "error") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(___components_message_cards_message_card_js.MessageCard, {
176
176
  title: t("Authorization Failed"),
177
177
  fullPage,
178
178
  primaryButtonText: t("Try Again"),
179
179
  primaryAction: cliAuth.retry,
180
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Typography, {
180
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Typography, {
181
181
  className: "text-red-600",
182
182
  children: t("Failed to authorize the CLI application:")
183
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Typography, {
183
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Typography, {
184
184
  className: "text-red-600",
185
185
  children: cliAuth.error?.message
186
186
  })]
@@ -188,7 +188,7 @@ function CliAuthConfirmation({ fullPage = true }) {
188
188
  if (cliAuth.status === "invalid") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_message_cards_message_card_js.MessageCard, {
189
189
  title: t("Invalid CLI Authorization Link"),
190
190
  fullPage,
191
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Typography, {
191
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Typography, {
192
192
  className: "text-red-600",
193
193
  children: t("This CLI authorization link is missing a login code. Please return to the command line and start the login process again.")
194
194
  })
@@ -196,14 +196,14 @@ function CliAuthConfirmation({ fullPage = true }) {
196
196
  if (cliAuth.status === "authorizing" || cliAuth.status === "redirecting") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(___components_message_cards_message_card_js.MessageCard, {
197
197
  title: t("Completing Authorization..."),
198
198
  fullPage,
199
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Typography, { children: t("Finishing up the CLI authorization...") })
199
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Typography, { children: t("Finishing up the CLI authorization...") })
200
200
  });
201
201
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(___components_message_cards_message_card_js.MessageCard, {
202
202
  title: t("Authorize CLI Application"),
203
203
  fullPage,
204
204
  primaryButtonText: cliAuth.isLoading ? t("Authorizing...") : t("Authorize"),
205
205
  primaryAction: cliAuth.authorize,
206
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Typography, { children: t("A command line application is requesting access to your account. Click the button below to authorize it.") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Typography, {
206
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Typography, { children: t("A command line application is requesting access to your account. Click the button below to authorize it.") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Typography, {
207
207
  variant: "destructive",
208
208
  children: t("WARNING: Make sure you trust the command line application, as it will gain access to your account. If you did not initiate this request, you can close this page and ignore it. We will never send you this link via email or any other means.")
209
209
  })]