@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
package/README.md CHANGED
@@ -1,26 +1,10 @@
1
- # Hexclave: Open-source Clerk/Auth0 alternative
1
+ # This package has been renamed.
2
2
 
3
- ## [📘 Docs](https://docs.hexclave.com) | [☁️ Hosted Version](https://hexclave.com/) | [✨ Demo](https://demo.hexclave.com/) | [🎮 Discord](https://discord.hexclave.com) | [GitHub](https://github.com/hexclave/hexclave)
3
+ Stack Auth is now Hexclave! The new packages are:
4
4
 
5
- Hexclave is a managed user authentication solution. It is developer-friendly and fully open-source (licensed under MIT and AGPL).
5
+ - @hexclave/next
6
+ - @hexclave/react
7
+ - @hexclave/js
8
+ - @hexclave/cli
6
9
 
7
- Hexclave gets you started in just five minutes, after which you'll be ready to use all of its features as you grow your project. Our managed service is completely optional and you can export your user data and self-host, for free, at any time.
8
-
9
- We support Next.js frontends, along with any backend that can use our [REST API](https://docs.hexclave.com/rest-api/overview). Check out our [setup guide](https://docs.hexclave.com/getting-started/setup) to get started.
10
-
11
- ## 📦 Installation & Setup
12
-
13
- 1. Run Hexclave's installation wizard with the following command:
14
- ```bash
15
- npx @hexclave/cli@latest init
16
- ```
17
- 2. Then, create an account on the [Hexclave dashboard](https://app.hexclave.com/projects), create a new project with an API key, and copy its environment variables into the .env.local file of your Next.js project:
18
- ```
19
- NEXT_PUBLIC_STACK_PROJECT_ID=<your-project-id>
20
- NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY=<your-publishable-client-key>
21
- STACK_SECRET_SERVER_KEY=<your-secret-server-key>
22
- ```
23
- 3. That's it! You can run your app with `npm run dev` and go to [http://localhost:3000/handler/signup](http://localhost:3000/handler/signup) to see the sign-up page. You can also check out the account settings page at [http://localhost:3000/handler/account-settings](http://localhost:3000/handler/account-settings).
24
-
25
-
26
- Check out the [documentation](https://docs.hexclave.com/getting-started/setup) for a more detailed guide.
10
+ See the [migration guide](https://docs.hexclave.com/migration) for more information.
@@ -3,10 +3,10 @@
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
  const require_chunk = require('../chunk-BE-pF4vm.js');
5
5
  let _hookform_resolvers_yup = require("@hookform/resolvers/yup");
6
- let _stackframe_stack_shared_dist_schema_fields = require("@hexclave/shared/dist/schema-fields");
7
- let _stackframe_stack_shared_dist_utils_errors = require("@hexclave/shared/dist/utils/errors");
8
- let _stackframe_stack_shared_dist_utils_promises = require("@hexclave/shared/dist/utils/promises");
9
- let _stackframe_stack_ui = require("@hexclave/ui");
6
+ let _hexclave_shared_dist_schema_fields = require("@hexclave/shared/dist/schema-fields");
7
+ let _hexclave_shared_dist_utils_errors = require("@hexclave/shared/dist/utils/errors");
8
+ let _hexclave_shared_dist_utils_promises = require("@hexclave/shared/dist/utils/promises");
9
+ let _hexclave_ui = require("@hexclave/ui");
10
10
  let react = require("react");
11
11
  let react_hook_form = require("react-hook-form");
12
12
  let ___index_js = require("../index.js");
@@ -32,9 +32,9 @@ function CreateApiKeyDialog(props) {
32
32
  (0, ___index_js.useUser)({ or: props.mockMode ? "return-null" : "redirect" });
33
33
  const [loading, setLoading] = (0, react.useState)(false);
34
34
  const { register, handleSubmit, formState: { errors }, reset } = (0, react_hook_form.useForm)({
35
- resolver: (0, _hookform_resolvers_yup.yupResolver)((0, _stackframe_stack_shared_dist_schema_fields.yupObject)({
36
- description: (0, _stackframe_stack_shared_dist_schema_fields.yupString)().defined().nonEmpty(t("Description is required")),
37
- expiresIn: (0, _stackframe_stack_shared_dist_schema_fields.yupString)().defined()
35
+ resolver: (0, _hookform_resolvers_yup.yupResolver)((0, _hexclave_shared_dist_schema_fields.yupObject)({
36
+ description: (0, _hexclave_shared_dist_schema_fields.yupString)().defined().nonEmpty(t("Description is required")),
37
+ expiresIn: (0, _hexclave_shared_dist_schema_fields.yupString)().defined()
38
38
  })),
39
39
  defaultValues: {
40
40
  description: "",
@@ -53,12 +53,12 @@ function CreateApiKeyDialog(props) {
53
53
  reset();
54
54
  props.onOpenChange(false);
55
55
  } catch (error) {
56
- (0, _stackframe_stack_shared_dist_utils_errors.captureError)("Failed to create API key", { error });
56
+ (0, _hexclave_shared_dist_utils_errors.captureError)("Failed to create API key", { error });
57
57
  } finally {
58
58
  setLoading(false);
59
59
  }
60
60
  };
61
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.ActionDialog, {
61
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.ActionDialog, {
62
62
  open: props.open,
63
63
  onOpenChange: props.onOpenChange,
64
64
  title: t("Create API Key"),
@@ -66,18 +66,18 @@ function CreateApiKeyDialog(props) {
66
66
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
67
67
  onSubmit: (e) => {
68
68
  e.preventDefault();
69
- (0, _stackframe_stack_shared_dist_utils_promises.runAsynchronously)(handleSubmit(onSubmit));
69
+ (0, _hexclave_shared_dist_utils_promises.runAsynchronously)(handleSubmit(onSubmit));
70
70
  },
71
71
  className: "space-y-4",
72
72
  children: [
73
73
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
74
74
  className: "space-y-2",
75
75
  children: [
76
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Label, {
76
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Label, {
77
77
  htmlFor: "description",
78
78
  children: t("Description")
79
79
  }),
80
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Input, {
80
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Input, {
81
81
  id: "description",
82
82
  placeholder: t("e.g. Development, Production, CI/CD"),
83
83
  ...register("description")
@@ -88,7 +88,7 @@ function CreateApiKeyDialog(props) {
88
88
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
89
89
  className: "space-y-2",
90
90
  children: [
91
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Label, {
91
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Label, {
92
92
  htmlFor: "expiresIn",
93
93
  children: t("Expires In")
94
94
  }),
@@ -106,7 +106,7 @@ function CreateApiKeyDialog(props) {
106
106
  }),
107
107
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
108
108
  className: "flex justify-end gap-2 pt-4",
109
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Button, {
109
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Button, {
110
110
  type: "button",
111
111
  variant: "secondary",
112
112
  onClick: () => {
@@ -114,7 +114,7 @@ function CreateApiKeyDialog(props) {
114
114
  props.onOpenChange(false);
115
115
  },
116
116
  children: t("Cancel")
117
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Button, {
117
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Button, {
118
118
  type: "submit",
119
119
  loading,
120
120
  children: t("Create")
@@ -129,7 +129,7 @@ function CreateApiKeyDialog(props) {
129
129
  */
130
130
  function ShowApiKeyDialog(props) {
131
131
  const { t } = (0, ___lib_translations_js.useTranslation)();
132
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.ActionDialog, {
132
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.ActionDialog, {
133
133
  open: !!props.apiKey,
134
134
  title: t("API Key"),
135
135
  okButton: { label: t("Close") },
@@ -138,14 +138,14 @@ function ShowApiKeyDialog(props) {
138
138
  confirmText: t("I understand that I will not be able to view this key again."),
139
139
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
140
140
  className: "flex flex-col gap-4",
141
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_stackframe_stack_ui.Typography, { children: [
141
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_hexclave_ui.Typography, { children: [
142
142
  t("Here is your API key."),
143
143
  " ",
144
144
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
145
145
  className: "font-bold",
146
146
  children: t("Copy it to a safe place. You will not be able to view it again.")
147
147
  })
148
- ] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.CopyField, {
148
+ ] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.CopyField, {
149
149
  type: "input",
150
150
  monospace: true,
151
151
  value: props.apiKey?.value ?? "",
@@ -1 +1 @@
1
- {"version":3,"file":"api-key-dialogs.js","names":["ActionDialog","Label","Input","FormWarningText","Button","Typography","CopyField"],"sources":["../../src/components/api-key-dialogs.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { yupObject, yupString } from '@stackframe/stack-shared/dist/schema-fields';\nimport { captureError } from '@stackframe/stack-shared/dist/utils/errors';\nimport { runAsynchronously } from '@stackframe/stack-shared/dist/utils/promises';\nimport { ActionDialog, Button, CopyField, Input, Label, Typography } from '@stackframe/stack-ui';\nimport { useState } from \"react\";\nimport { useForm } from 'react-hook-form';\nimport * as yup from \"yup\";\nimport { useUser } from '..';\nimport { FormWarningText } from '../components/elements/form-warning';\nimport { ApiKey, ApiKeyCreationOptions, ApiKeyType } from \"../lib/stack-app/api-keys\";\nimport { useTranslation } from \"../lib/translations\";\n\n// Constants for expiration options\nexport const neverInMs = 1000 * 60 * 60 * 24 * 365 * 200;\nexport const expiresInOptions = {\n [1000 * 60 * 60 * 24 * 1]: \"1 day\",\n [1000 * 60 * 60 * 24 * 7]: \"7 days\",\n [1000 * 60 * 60 * 24 * 30]: \"30 days\",\n [1000 * 60 * 60 * 24 * 90]: \"90 days\",\n [1000 * 60 * 60 * 24 * 365]: \"1 year\",\n [neverInMs]: \"Never\",\n} as const;\n\n/**\n * Dialog for creating a new API key\n */\nexport function CreateApiKeyDialog<Type extends ApiKeyType = ApiKeyType>(props: {\n open: boolean,\n onOpenChange: (open: boolean) => void,\n onKeyCreated?: (key: ApiKey<Type, true>) => void,\n createApiKey: (data: ApiKeyCreationOptions<Type>) => Promise<ApiKey<Type, true>>,\n mockMode?: boolean,\n}) {\n const { t } = useTranslation();\n const user = useUser({ or: props.mockMode ? 'return-null' : 'redirect' });\n const [loading, setLoading] = useState(false);\n\n const apiKeySchema = yupObject({\n description: yupString().defined().nonEmpty(t('Description is required')),\n expiresIn: yupString().defined(),\n });\n\n const { register, handleSubmit, formState: { errors }, reset } = useForm({\n resolver: yupResolver(apiKeySchema),\n defaultValues: {\n description: '',\n expiresIn: Object.keys(expiresInOptions)[2], // Default to 30 days\n }\n });\n\n const onSubmit = async (data: yup.InferType<typeof apiKeySchema>) => {\n setLoading(true);\n try {\n const expiresAt = new Date(Date.now() + parseInt(data.expiresIn));\n const apiKey = await props.createApiKey({\n description: data.description,\n expiresAt,\n });\n\n if (props.onKeyCreated) {\n props.onKeyCreated(apiKey);\n }\n\n reset();\n props.onOpenChange(false);\n } catch (error) {\n captureError(\"Failed to create API key\", { error });\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <ActionDialog\n open={props.open}\n onOpenChange={props.onOpenChange}\n title={t('Create API Key')}\n description={t('API keys grant programmatic access to your account.')}\n >\n <form\n onSubmit={(e) => {\n e.preventDefault();\n runAsynchronously(handleSubmit(onSubmit));\n }}\n className=\"space-y-4\"\n >\n <div className=\"space-y-2\">\n <Label htmlFor=\"description\">{t('Description')}</Label>\n <Input\n id=\"description\"\n placeholder={t('e.g. Development, Production, CI/CD')}\n {...register('description')}\n />\n {errors.description && <FormWarningText text={errors.description.message} />}\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"expiresIn\">{t('Expires In')}</Label>\n <select\n id=\"expiresIn\"\n className=\"w-full p-2 border border-input rounded-md bg-background\"\n {...register('expiresIn')}\n >\n {Object.entries(expiresInOptions).map(([value, label]) => (\n <option key={value} value={value}>{t(label)}</option>\n ))}\n </select>\n {errors.expiresIn && <FormWarningText text={errors.expiresIn.message} />}\n </div>\n\n <div className=\"flex justify-end gap-2 pt-4\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n reset();\n props.onOpenChange(false);\n }}\n >\n {t('Cancel')}\n </Button>\n <Button type=\"submit\" loading={loading}>\n {t('Create')}\n </Button>\n </div>\n </form>\n </ActionDialog>\n );\n}\n\n/**\n * Dialog for showing the newly created API key\n */\nexport function ShowApiKeyDialog<Type extends ApiKeyType = ApiKeyType>(props: {\n apiKey: ApiKey<Type, true> | null,\n onClose?: () => void,\n}) {\n const { t } = useTranslation();\n\n return (\n <ActionDialog\n open={!!props.apiKey}\n title={t(\"API Key\")}\n okButton={{ label: t(\"Close\") }}\n onClose={props.onClose}\n preventClose\n confirmText={t(\"I understand that I will not be able to view this key again.\")}\n >\n <div className=\"flex flex-col gap-4\">\n <Typography>\n {t(\"Here is your API key.\")}{\" \"}\n <span className=\"font-bold\">\n {t(\"Copy it to a safe place. You will not be able to view it again.\")}\n </span>\n </Typography>\n <CopyField\n type=\"input\"\n monospace\n value={props.apiKey?.value ?? ''}\n label={t(\"Secret API Key\")}\n />\n </div>\n </ActionDialog>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"api-key-dialogs.js","names":["ActionDialog","Label","Input","FormWarningText","Button","Typography","CopyField"],"sources":["../../src/components/api-key-dialogs.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { yupObject, yupString } from '@hexclave/shared/dist/schema-fields';\nimport { captureError } from '@hexclave/shared/dist/utils/errors';\nimport { runAsynchronously } from '@hexclave/shared/dist/utils/promises';\nimport { ActionDialog, Button, CopyField, Input, Label, Typography } from '@hexclave/ui';\nimport { useState } from \"react\";\nimport { useForm } from 'react-hook-form';\nimport * as yup from \"yup\";\nimport { useUser } from '..';\nimport { FormWarningText } from '../components/elements/form-warning';\nimport { ApiKey, ApiKeyCreationOptions, ApiKeyType } from \"../lib/stack-app/api-keys\";\nimport { useTranslation } from \"../lib/translations\";\n\n// Constants for expiration options\nexport const neverInMs = 1000 * 60 * 60 * 24 * 365 * 200;\nexport const expiresInOptions = {\n [1000 * 60 * 60 * 24 * 1]: \"1 day\",\n [1000 * 60 * 60 * 24 * 7]: \"7 days\",\n [1000 * 60 * 60 * 24 * 30]: \"30 days\",\n [1000 * 60 * 60 * 24 * 90]: \"90 days\",\n [1000 * 60 * 60 * 24 * 365]: \"1 year\",\n [neverInMs]: \"Never\",\n} as const;\n\n/**\n * Dialog for creating a new API key\n */\nexport function CreateApiKeyDialog<Type extends ApiKeyType = ApiKeyType>(props: {\n open: boolean,\n onOpenChange: (open: boolean) => void,\n onKeyCreated?: (key: ApiKey<Type, true>) => void,\n createApiKey: (data: ApiKeyCreationOptions<Type>) => Promise<ApiKey<Type, true>>,\n mockMode?: boolean,\n}) {\n const { t } = useTranslation();\n const user = useUser({ or: props.mockMode ? 'return-null' : 'redirect' });\n const [loading, setLoading] = useState(false);\n\n const apiKeySchema = yupObject({\n description: yupString().defined().nonEmpty(t('Description is required')),\n expiresIn: yupString().defined(),\n });\n\n const { register, handleSubmit, formState: { errors }, reset } = useForm({\n resolver: yupResolver(apiKeySchema),\n defaultValues: {\n description: '',\n expiresIn: Object.keys(expiresInOptions)[2], // Default to 30 days\n }\n });\n\n const onSubmit = async (data: yup.InferType<typeof apiKeySchema>) => {\n setLoading(true);\n try {\n const expiresAt = new Date(Date.now() + parseInt(data.expiresIn));\n const apiKey = await props.createApiKey({\n description: data.description,\n expiresAt,\n });\n\n if (props.onKeyCreated) {\n props.onKeyCreated(apiKey);\n }\n\n reset();\n props.onOpenChange(false);\n } catch (error) {\n captureError(\"Failed to create API key\", { error });\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <ActionDialog\n open={props.open}\n onOpenChange={props.onOpenChange}\n title={t('Create API Key')}\n description={t('API keys grant programmatic access to your account.')}\n >\n <form\n onSubmit={(e) => {\n e.preventDefault();\n runAsynchronously(handleSubmit(onSubmit));\n }}\n className=\"space-y-4\"\n >\n <div className=\"space-y-2\">\n <Label htmlFor=\"description\">{t('Description')}</Label>\n <Input\n id=\"description\"\n placeholder={t('e.g. Development, Production, CI/CD')}\n {...register('description')}\n />\n {errors.description && <FormWarningText text={errors.description.message} />}\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"expiresIn\">{t('Expires In')}</Label>\n <select\n id=\"expiresIn\"\n className=\"w-full p-2 border border-input rounded-md bg-background\"\n {...register('expiresIn')}\n >\n {Object.entries(expiresInOptions).map(([value, label]) => (\n <option key={value} value={value}>{t(label)}</option>\n ))}\n </select>\n {errors.expiresIn && <FormWarningText text={errors.expiresIn.message} />}\n </div>\n\n <div className=\"flex justify-end gap-2 pt-4\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n reset();\n props.onOpenChange(false);\n }}\n >\n {t('Cancel')}\n </Button>\n <Button type=\"submit\" loading={loading}>\n {t('Create')}\n </Button>\n </div>\n </form>\n </ActionDialog>\n );\n}\n\n/**\n * Dialog for showing the newly created API key\n */\nexport function ShowApiKeyDialog<Type extends ApiKeyType = ApiKeyType>(props: {\n apiKey: ApiKey<Type, true> | null,\n onClose?: () => void,\n}) {\n const { t } = useTranslation();\n\n return (\n <ActionDialog\n open={!!props.apiKey}\n title={t(\"API Key\")}\n okButton={{ label: t(\"Close\") }}\n onClose={props.onClose}\n preventClose\n confirmText={t(\"I understand that I will not be able to view this key again.\")}\n >\n <div className=\"flex flex-col gap-4\">\n <Typography>\n {t(\"Here is your API key.\")}{\" \"}\n <span className=\"font-bold\">\n {t(\"Copy it to a safe place. You will not be able to view it again.\")}\n </span>\n </Typography>\n <CopyField\n type=\"input\"\n monospace\n value={props.apiKey?.value ?? ''}\n label={t(\"Secret API Key\")}\n />\n </div>\n </ActionDialog>\n );\n}\n"],"mappings":"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"}
@@ -2,16 +2,16 @@
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_ui = require("@hexclave/ui");
5
+ let _hexclave_ui = require("@hexclave/ui");
6
6
  let react = require("react");
7
7
  let react_jsx_runtime = require("react/jsx-runtime");
8
8
 
9
9
  //#region src/components/api-key-table.tsx
10
10
  function toolbarRender(table) {
11
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.SearchToolbarItem, {
11
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.SearchToolbarItem, {
12
12
  table,
13
13
  placeholder: "Search table"
14
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.DataTableFacetedFilter, {
14
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.DataTableFacetedFilter, {
15
15
  column: table.getColumn("status"),
16
16
  title: "Status",
17
17
  options: [
@@ -25,7 +25,7 @@ function toolbarRender(table) {
25
25
  })] });
26
26
  }
27
27
  function RevokeDialog(props) {
28
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.ActionDialog, {
28
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.ActionDialog, {
29
29
  open: props.open,
30
30
  onOpenChange: props.onOpenChange,
31
31
  title: "Revoke API Key",
@@ -47,7 +47,7 @@ function Actions({ row }) {
47
47
  apiKey: row.original,
48
48
  open: isRevokeModalOpen,
49
49
  onOpenChange: setIsRevokeModalOpen
50
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.ActionCell, {
50
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.ActionCell, {
51
51
  invisible: row.original.status !== "valid",
52
52
  items: [{
53
53
  item: "Revoke",
@@ -59,55 +59,55 @@ function Actions({ row }) {
59
59
  const columns = [
60
60
  {
61
61
  accessorKey: "description",
62
- header: ({ column }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.DataTableColumnHeader, {
62
+ header: ({ column }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.DataTableColumnHeader, {
63
63
  column,
64
64
  columnTitle: "Description"
65
65
  }),
66
- cell: ({ row }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TextCell, {
66
+ cell: ({ row }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TextCell, {
67
67
  size: 100,
68
68
  children: row.original.description
69
69
  })
70
70
  },
71
71
  {
72
72
  accessorKey: "status",
73
- header: ({ column }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.DataTableColumnHeader, {
73
+ header: ({ column }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.DataTableColumnHeader, {
74
74
  column,
75
75
  columnTitle: "Status"
76
76
  }),
77
- cell: ({ row }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.BadgeCell, { badges: [row.original.status] }),
78
- filterFn: _stackframe_stack_ui.standardFilterFn
77
+ cell: ({ row }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.BadgeCell, { badges: [row.original.status] }),
78
+ filterFn: _hexclave_ui.standardFilterFn
79
79
  },
80
80
  {
81
81
  id: "value",
82
82
  accessorFn: (row) => row.value.lastFour,
83
- header: ({ column }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.DataTableColumnHeader, {
83
+ header: ({ column }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.DataTableColumnHeader, {
84
84
  column,
85
85
  columnTitle: "Client Key"
86
86
  }),
87
- cell: ({ row }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_stackframe_stack_ui.TextCell, { children: ["*******", row.original.value.lastFour] }),
87
+ cell: ({ row }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_hexclave_ui.TextCell, { children: ["*******", row.original.value.lastFour] }),
88
88
  enableSorting: false
89
89
  },
90
90
  {
91
91
  accessorKey: "expiresAt",
92
- header: ({ column }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.DataTableColumnHeader, {
92
+ header: ({ column }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.DataTableColumnHeader, {
93
93
  column,
94
94
  columnTitle: "Expires At"
95
95
  }),
96
96
  cell: ({ row }) => {
97
- if (row.original.status === "revoked") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TextCell, { children: "-" });
98
- return row.original.expiresAt ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.DateCell, {
97
+ if (row.original.status === "revoked") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TextCell, { children: "-" });
98
+ return row.original.expiresAt ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.DateCell, {
99
99
  date: row.original.expiresAt,
100
100
  ignoreAfterYears: 50
101
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.TextCell, { children: "Never" });
101
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TextCell, { children: "Never" });
102
102
  }
103
103
  },
104
104
  {
105
105
  accessorKey: "createdAt",
106
- header: ({ column }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.DataTableColumnHeader, {
106
+ header: ({ column }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.DataTableColumnHeader, {
107
107
  column,
108
108
  columnTitle: "Created At"
109
109
  }),
110
- cell: ({ row }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.DateCell, {
110
+ cell: ({ row }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.DateCell, {
111
111
  date: row.original.createdAt,
112
112
  ignoreAfterYears: 50
113
113
  })
@@ -118,7 +118,7 @@ const columns = [
118
118
  }
119
119
  ];
120
120
  function ApiKeyTable(props) {
121
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.DataTable, {
121
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.DataTable, {
122
122
  data: (0, react.useMemo)(() => {
123
123
  return props.apiKeys.map((apiKey) => ({
124
124
  ...apiKey,
@@ -1 +1 @@
1
- {"version":3,"file":"api-key-table.js","names":["SearchToolbarItem","DataTableFacetedFilter","ActionDialog","ActionCell","DataTableColumnHeader","TextCell","BadgeCell","standardFilterFn","DateCell","DataTable"],"sources":["../../src/components/api-key-table.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\nimport { ActionCell, ActionDialog, BadgeCell, DataTable, DataTableColumnHeader, DataTableFacetedFilter, DateCell, SearchToolbarItem, TextCell, standardFilterFn } from \"@stackframe/stack-ui\";\nimport { ColumnDef, Row, Table } from \"@tanstack/react-table\";\nimport { useMemo, useState } from \"react\";\nimport { ApiKey } from \"../lib/stack-app/api-keys\";\n\ntype ExtendedApiKey = ApiKey & {\n status: 'valid' | 'expired' | 'revoked',\n};\n\nfunction toolbarRender<TData>(table: Table<TData>) {\n return (\n <>\n <SearchToolbarItem table={table} placeholder=\"Search table\" />\n <DataTableFacetedFilter\n column={table.getColumn(\"status\")}\n title=\"Status\"\n options={['valid', 'expired', 'revoked'].map((provider) => ({\n value: provider,\n label: provider,\n }))}\n />\n </>\n );\n}\n\nfunction RevokeDialog(props: {\n apiKey: ExtendedApiKey,\n open: boolean,\n onOpenChange: (open: boolean) => void,\n}) {\n return <ActionDialog\n open={props.open}\n onOpenChange={props.onOpenChange}\n title=\"Revoke API Key\"\n danger\n cancelButton\n okButton={{ label: \"Revoke Key\", onClick: async () => { await props.apiKey.revoke(); } }}\n confirmText=\"I understand this will unlink all the apps using this API key\"\n >\n {`Are you sure you want to revoke API key *****${props.apiKey.value.lastFour}?`}\n </ActionDialog>;\n}\n\nfunction Actions({ row }: { row: Row<ExtendedApiKey> }) {\n const [isRevokeModalOpen, setIsRevokeModalOpen] = useState(false);\n return (\n <>\n <RevokeDialog apiKey={row.original} open={isRevokeModalOpen} onOpenChange={setIsRevokeModalOpen} />\n <ActionCell\n invisible={row.original.status !== 'valid'}\n items={[{\n item: \"Revoke\",\n danger: true,\n onClick: () => setIsRevokeModalOpen(true),\n }]}\n />\n </>\n );\n}\n\nconst columns: ColumnDef<ExtendedApiKey>[] = [\n {\n accessorKey: \"description\",\n header: ({ column }) => <DataTableColumnHeader column={column} columnTitle=\"Description\" />,\n cell: ({ row }) => <TextCell size={100}>{row.original.description}</TextCell>,\n },\n {\n accessorKey: \"status\",\n header: ({ column }) => <DataTableColumnHeader column={column} columnTitle=\"Status\" />,\n cell: ({ row }) => <BadgeCell badges={[row.original.status]} />,\n filterFn: standardFilterFn,\n },\n {\n id: \"value\",\n accessorFn: (row) => row.value.lastFour,\n header: ({ column }) => <DataTableColumnHeader column={column} columnTitle=\"Client Key\" />,\n cell: ({ row }) => <TextCell>*******{row.original.value.lastFour}</TextCell>,\n enableSorting: false,\n },\n {\n accessorKey: \"expiresAt\",\n header: ({ column }) => <DataTableColumnHeader column={column} columnTitle=\"Expires At\" />,\n cell: ({ row }) => {\n if (row.original.status === 'revoked') return <TextCell>-</TextCell>;\n return row.original.expiresAt ? <DateCell date={row.original.expiresAt} ignoreAfterYears={50} /> : <TextCell>Never</TextCell>;\n },\n },\n {\n accessorKey: \"createdAt\",\n header: ({ column }) => <DataTableColumnHeader column={column} columnTitle=\"Created At\" />,\n cell: ({ row }) => <DateCell date={row.original.createdAt} ignoreAfterYears={50} />\n },\n {\n id: \"actions\",\n cell: ({ row }) => <Actions row={row} />,\n },\n];\n\nexport function ApiKeyTable(props: { apiKeys: ApiKey[] }) {\n const extendedApiKeys = useMemo(() => {\n const keys = props.apiKeys.map((apiKey) => ({\n ...apiKey,\n status: ({ 'valid': 'valid', 'manually-revoked': 'revoked', 'expired': 'expired' } as const)[apiKey.whyInvalid() || 'valid'],\n } satisfies ExtendedApiKey));\n // first sort based on status, then by createdAt\n return keys.sort((a, b) => {\n if (a.status === b.status) {\n return a.createdAt < b.createdAt ? 1 : -1;\n }\n return a.status === 'valid' ? -1 : 1;\n });\n }, [props.apiKeys]);\n\n return <DataTable\n data={extendedApiKeys}\n columns={columns}\n toolbarRender={toolbarRender}\n defaultColumnFilters={[]}\n defaultSorting={[]}\n />;\n}\n"],"mappings":";;;;;;;;;AAeA,SAAS,cAAqB,OAAqB;AACjD,QACE,qFACE,2CAACA;EAAyB;EAAO,aAAY;GAAiB,EAC9D,2CAACC;EACC,QAAQ,MAAM,UAAU,SAAS;EACjC,OAAM;EACN,SAAS;GAAC;GAAS;GAAW;GAAU,CAAC,KAAK,cAAc;GAC1D,OAAO;GACP,OAAO;GACR,EAAE;GACH,IACD;;AAIP,SAAS,aAAa,OAInB;AACD,QAAO,2CAACC;EACN,MAAM,MAAM;EACZ,cAAc,MAAM;EACpB,OAAM;EACN;EACA;EACA,UAAU;GAAE,OAAO;GAAc,SAAS,YAAY;AAAE,UAAM,MAAM,OAAO,QAAQ;;GAAK;EACxF,aAAY;YAEX,gDAAgD,MAAM,OAAO,MAAM,SAAS;GAChE;;AAGjB,SAAS,QAAQ,EAAE,OAAqC;CACtD,MAAM,CAAC,mBAAmB,4CAAiC,MAAM;AACjE,QACE,qFACE,2CAAC;EAAa,QAAQ,IAAI;EAAU,MAAM;EAAmB,cAAc;GAAwB,EACnG,2CAACC;EACC,WAAW,IAAI,SAAS,WAAW;EACnC,OAAO,CAAC;GACN,MAAM;GACN,QAAQ;GACR,eAAe,qBAAqB,KAAK;GAC1C,CAAC;GACF,IACD;;AAIP,MAAM,UAAwC;CAC5C;EACE,aAAa;EACb,SAAS,EAAE,aAAa,2CAACC;GAA8B;GAAQ,aAAY;IAAgB;EAC3F,OAAO,EAAE,UAAU,2CAACC;GAAS,MAAM;aAAM,IAAI,SAAS;IAAuB;EAC9E;CACD;EACE,aAAa;EACb,SAAS,EAAE,aAAa,2CAACD;GAA8B;GAAQ,aAAY;IAAW;EACtF,OAAO,EAAE,UAAU,2CAACE,kCAAU,QAAQ,CAAC,IAAI,SAAS,OAAO,GAAI;EAC/D,UAAUC;EACX;CACD;EACE,IAAI;EACJ,aAAa,QAAQ,IAAI,MAAM;EAC/B,SAAS,EAAE,aAAa,2CAACH;GAA8B;GAAQ,aAAY;IAAe;EAC1F,OAAO,EAAE,UAAU,4CAACC,4CAAS,WAAQ,IAAI,SAAS,MAAM,YAAoB;EAC5E,eAAe;EAChB;CACD;EACE,aAAa;EACb,SAAS,EAAE,aAAa,2CAACD;GAA8B;GAAQ,aAAY;IAAe;EAC1F,OAAO,EAAE,UAAU;AACjB,OAAI,IAAI,SAAS,WAAW,UAAW,QAAO,2CAACC,2CAAS,MAAY;AACpE,UAAO,IAAI,SAAS,YAAY,2CAACG;IAAS,MAAM,IAAI,SAAS;IAAW,kBAAkB;KAAM,GAAG,2CAACH,2CAAS,UAAgB;;EAEhI;CACD;EACE,aAAa;EACb,SAAS,EAAE,aAAa,2CAACD;GAA8B;GAAQ,aAAY;IAAe;EAC1F,OAAO,EAAE,UAAU,2CAACI;GAAS,MAAM,IAAI,SAAS;GAAW,kBAAkB;IAAM;EACpF;CACD;EACE,IAAI;EACJ,OAAO,EAAE,UAAU,2CAAC,WAAa,MAAO;EACzC;CACF;AAED,SAAgB,YAAY,OAA8B;AAexD,QAAO,2CAACC;EACN,+BAfoC;AAMpC,UALa,MAAM,QAAQ,KAAK,YAAY;IAC1C,GAAG;IACH,QAAS;KAAE,SAAS;KAAS,oBAAoB;KAAW,WAAW;KAAW,CAAW,OAAO,YAAY,IAAI;IACrH,EAA2B,CAEhB,MAAM,GAAG,MAAM;AACzB,QAAI,EAAE,WAAW,EAAE,OACjB,QAAO,EAAE,YAAY,EAAE,YAAY,IAAI;AAEzC,WAAO,EAAE,WAAW,UAAU,KAAK;KACnC;KACD,CAAC,MAAM,QAAQ,CAAC;EAIR;EACM;EACf,sBAAsB,EAAE;EACxB,gBAAgB,EAAE;GAClB"}
1
+ {"version":3,"file":"api-key-table.js","names":["SearchToolbarItem","DataTableFacetedFilter","ActionDialog","ActionCell","DataTableColumnHeader","TextCell","BadgeCell","standardFilterFn","DateCell","DataTable"],"sources":["../../src/components/api-key-table.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\nimport { ActionCell, ActionDialog, BadgeCell, DataTable, DataTableColumnHeader, DataTableFacetedFilter, DateCell, SearchToolbarItem, TextCell, standardFilterFn } from \"@hexclave/ui\";\nimport { ColumnDef, Row, Table } from \"@tanstack/react-table\";\nimport { useMemo, useState } from \"react\";\nimport { ApiKey } from \"../lib/stack-app/api-keys\";\n\ntype ExtendedApiKey = ApiKey & {\n status: 'valid' | 'expired' | 'revoked',\n};\n\nfunction toolbarRender<TData>(table: Table<TData>) {\n return (\n <>\n <SearchToolbarItem table={table} placeholder=\"Search table\" />\n <DataTableFacetedFilter\n column={table.getColumn(\"status\")}\n title=\"Status\"\n options={['valid', 'expired', 'revoked'].map((provider) => ({\n value: provider,\n label: provider,\n }))}\n />\n </>\n );\n}\n\nfunction RevokeDialog(props: {\n apiKey: ExtendedApiKey,\n open: boolean,\n onOpenChange: (open: boolean) => void,\n}) {\n return <ActionDialog\n open={props.open}\n onOpenChange={props.onOpenChange}\n title=\"Revoke API Key\"\n danger\n cancelButton\n okButton={{ label: \"Revoke Key\", onClick: async () => { await props.apiKey.revoke(); } }}\n confirmText=\"I understand this will unlink all the apps using this API key\"\n >\n {`Are you sure you want to revoke API key *****${props.apiKey.value.lastFour}?`}\n </ActionDialog>;\n}\n\nfunction Actions({ row }: { row: Row<ExtendedApiKey> }) {\n const [isRevokeModalOpen, setIsRevokeModalOpen] = useState(false);\n return (\n <>\n <RevokeDialog apiKey={row.original} open={isRevokeModalOpen} onOpenChange={setIsRevokeModalOpen} />\n <ActionCell\n invisible={row.original.status !== 'valid'}\n items={[{\n item: \"Revoke\",\n danger: true,\n onClick: () => setIsRevokeModalOpen(true),\n }]}\n />\n </>\n );\n}\n\nconst columns: ColumnDef<ExtendedApiKey>[] = [\n {\n accessorKey: \"description\",\n header: ({ column }) => <DataTableColumnHeader column={column} columnTitle=\"Description\" />,\n cell: ({ row }) => <TextCell size={100}>{row.original.description}</TextCell>,\n },\n {\n accessorKey: \"status\",\n header: ({ column }) => <DataTableColumnHeader column={column} columnTitle=\"Status\" />,\n cell: ({ row }) => <BadgeCell badges={[row.original.status]} />,\n filterFn: standardFilterFn,\n },\n {\n id: \"value\",\n accessorFn: (row) => row.value.lastFour,\n header: ({ column }) => <DataTableColumnHeader column={column} columnTitle=\"Client Key\" />,\n cell: ({ row }) => <TextCell>*******{row.original.value.lastFour}</TextCell>,\n enableSorting: false,\n },\n {\n accessorKey: \"expiresAt\",\n header: ({ column }) => <DataTableColumnHeader column={column} columnTitle=\"Expires At\" />,\n cell: ({ row }) => {\n if (row.original.status === 'revoked') return <TextCell>-</TextCell>;\n return row.original.expiresAt ? <DateCell date={row.original.expiresAt} ignoreAfterYears={50} /> : <TextCell>Never</TextCell>;\n },\n },\n {\n accessorKey: \"createdAt\",\n header: ({ column }) => <DataTableColumnHeader column={column} columnTitle=\"Created At\" />,\n cell: ({ row }) => <DateCell date={row.original.createdAt} ignoreAfterYears={50} />\n },\n {\n id: \"actions\",\n cell: ({ row }) => <Actions row={row} />,\n },\n];\n\nexport function ApiKeyTable(props: { apiKeys: ApiKey[] }) {\n const extendedApiKeys = useMemo(() => {\n const keys = props.apiKeys.map((apiKey) => ({\n ...apiKey,\n status: ({ 'valid': 'valid', 'manually-revoked': 'revoked', 'expired': 'expired' } as const)[apiKey.whyInvalid() || 'valid'],\n } satisfies ExtendedApiKey));\n // first sort based on status, then by createdAt\n return keys.sort((a, b) => {\n if (a.status === b.status) {\n return a.createdAt < b.createdAt ? 1 : -1;\n }\n return a.status === 'valid' ? -1 : 1;\n });\n }, [props.apiKeys]);\n\n return <DataTable\n data={extendedApiKeys}\n columns={columns}\n toolbarRender={toolbarRender}\n defaultColumnFilters={[]}\n defaultSorting={[]}\n />;\n}\n"],"mappings":";;;;;;;;;AAeA,SAAS,cAAqB,OAAqB;AACjD,QACE,qFACE,2CAACA;EAAyB;EAAO,aAAY;GAAiB,EAC9D,2CAACC;EACC,QAAQ,MAAM,UAAU,SAAS;EACjC,OAAM;EACN,SAAS;GAAC;GAAS;GAAW;GAAU,CAAC,KAAK,cAAc;GAC1D,OAAO;GACP,OAAO;GACR,EAAE;GACH,IACD;;AAIP,SAAS,aAAa,OAInB;AACD,QAAO,2CAACC;EACN,MAAM,MAAM;EACZ,cAAc,MAAM;EACpB,OAAM;EACN;EACA;EACA,UAAU;GAAE,OAAO;GAAc,SAAS,YAAY;AAAE,UAAM,MAAM,OAAO,QAAQ;;GAAK;EACxF,aAAY;YAEX,gDAAgD,MAAM,OAAO,MAAM,SAAS;GAChE;;AAGjB,SAAS,QAAQ,EAAE,OAAqC;CACtD,MAAM,CAAC,mBAAmB,4CAAiC,MAAM;AACjE,QACE,qFACE,2CAAC;EAAa,QAAQ,IAAI;EAAU,MAAM;EAAmB,cAAc;GAAwB,EACnG,2CAACC;EACC,WAAW,IAAI,SAAS,WAAW;EACnC,OAAO,CAAC;GACN,MAAM;GACN,QAAQ;GACR,eAAe,qBAAqB,KAAK;GAC1C,CAAC;GACF,IACD;;AAIP,MAAM,UAAwC;CAC5C;EACE,aAAa;EACb,SAAS,EAAE,aAAa,2CAACC;GAA8B;GAAQ,aAAY;IAAgB;EAC3F,OAAO,EAAE,UAAU,2CAACC;GAAS,MAAM;aAAM,IAAI,SAAS;IAAuB;EAC9E;CACD;EACE,aAAa;EACb,SAAS,EAAE,aAAa,2CAACD;GAA8B;GAAQ,aAAY;IAAW;EACtF,OAAO,EAAE,UAAU,2CAACE,0BAAU,QAAQ,CAAC,IAAI,SAAS,OAAO,GAAI;EAC/D,UAAUC;EACX;CACD;EACE,IAAI;EACJ,aAAa,QAAQ,IAAI,MAAM;EAC/B,SAAS,EAAE,aAAa,2CAACH;GAA8B;GAAQ,aAAY;IAAe;EAC1F,OAAO,EAAE,UAAU,4CAACC,oCAAS,WAAQ,IAAI,SAAS,MAAM,YAAoB;EAC5E,eAAe;EAChB;CACD;EACE,aAAa;EACb,SAAS,EAAE,aAAa,2CAACD;GAA8B;GAAQ,aAAY;IAAe;EAC1F,OAAO,EAAE,UAAU;AACjB,OAAI,IAAI,SAAS,WAAW,UAAW,QAAO,2CAACC,mCAAS,MAAY;AACpE,UAAO,IAAI,SAAS,YAAY,2CAACG;IAAS,MAAM,IAAI,SAAS;IAAW,kBAAkB;KAAM,GAAG,2CAACH,mCAAS,UAAgB;;EAEhI;CACD;EACE,aAAa;EACb,SAAS,EAAE,aAAa,2CAACD;GAA8B;GAAQ,aAAY;IAAe;EAC1F,OAAO,EAAE,UAAU,2CAACI;GAAS,MAAM,IAAI,SAAS;GAAW,kBAAkB;IAAM;EACpF;CACD;EACE,IAAI;EACJ,OAAO,EAAE,UAAU,2CAAC,WAAa,MAAO;EACzC;CACF;AAED,SAAgB,YAAY,OAA8B;AAexD,QAAO,2CAACC;EACN,+BAfoC;AAMpC,UALa,MAAM,QAAQ,KAAK,YAAY;IAC1C,GAAG;IACH,QAAS;KAAE,SAAS;KAAS,oBAAoB;KAAW,WAAW;KAAW,CAAW,OAAO,YAAY,IAAI;IACrH,EAA2B,CAEhB,MAAM,GAAG,MAAM;AACzB,QAAI,EAAE,WAAW,EAAE,OACjB,QAAO,EAAE,YAAY,EAAE,YAAY,IAAI;AAEzC,WAAO,EAAE,WAAW,UAAU,KAAK;KACnC;KACD,CAAC,MAAM,QAAQ,CAAC;EAIR;EACM;EACf,sBAAsB,EAAE;EACxB,gBAAgB,EAAE;GAClB"}
@@ -3,9 +3,9 @@
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
  const require_chunk = require('../chunk-BE-pF4vm.js');
5
5
  let _hookform_resolvers_yup = require("@hookform/resolvers/yup");
6
- let _stackframe_stack_shared_dist_schema_fields = require("@hexclave/shared/dist/schema-fields");
7
- let _stackframe_stack_shared_dist_utils_promises = require("@hexclave/shared/dist/utils/promises");
8
- let _stackframe_stack_ui = require("@hexclave/ui");
6
+ let _hexclave_shared_dist_schema_fields = require("@hexclave/shared/dist/schema-fields");
7
+ let _hexclave_shared_dist_utils_promises = require("@hexclave/shared/dist/utils/promises");
8
+ let _hexclave_ui = require("@hexclave/ui");
9
9
  let react = require("react");
10
10
  let react_hook_form = require("react-hook-form");
11
11
  let ___index_js = require("../index.js");
@@ -17,9 +17,9 @@ let __link_js = require("./link.js");
17
17
  //#region src/components/credential-sign-in.tsx
18
18
  function CredentialSignIn() {
19
19
  const { t } = (0, ___lib_translations_js.useTranslation)();
20
- const { register, handleSubmit, setError, formState: { errors } } = (0, react_hook_form.useForm)({ resolver: (0, _hookform_resolvers_yup.yupResolver)((0, _stackframe_stack_shared_dist_schema_fields.yupObject)({
21
- email: (0, _stackframe_stack_shared_dist_schema_fields.strictEmailSchema)(t("Please enter a valid email")).defined().nonEmpty(t("Please enter your email")),
22
- password: _stackframe_stack_shared_dist_schema_fields.passwordSchema.defined().nonEmpty(t("Please enter your password"))
20
+ const { register, handleSubmit, setError, formState: { errors } } = (0, react_hook_form.useForm)({ resolver: (0, _hookform_resolvers_yup.yupResolver)((0, _hexclave_shared_dist_schema_fields.yupObject)({
21
+ email: (0, _hexclave_shared_dist_schema_fields.strictEmailSchema)(t("Please enter a valid email")).defined().nonEmpty(t("Please enter your email")),
22
+ password: _hexclave_shared_dist_schema_fields.passwordSchema.defined().nonEmpty(t("Please enter your password"))
23
23
  })) });
24
24
  const app = (0, ___index_js.useStackApp)();
25
25
  const [loading, setLoading] = (0, react.useState)(false);
@@ -41,27 +41,27 @@ function CredentialSignIn() {
41
41
  };
42
42
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
43
43
  className: "flex flex-col items-stretch stack-scope",
44
- onSubmit: (e) => (0, _stackframe_stack_shared_dist_utils_promises.runAsynchronouslyWithAlert)(handleSubmit(onSubmit)(e)),
44
+ onSubmit: (e) => (0, _hexclave_shared_dist_utils_promises.runAsynchronouslyWithAlert)(handleSubmit(onSubmit)(e)),
45
45
  noValidate: true,
46
46
  children: [
47
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Label, {
47
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Label, {
48
48
  htmlFor: "email",
49
49
  className: "mb-1",
50
50
  children: t("Email")
51
51
  }),
52
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Input, {
52
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Input, {
53
53
  id: "email",
54
54
  type: "email",
55
55
  autoComplete: "email",
56
56
  ...register("email")
57
57
  }),
58
58
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__elements_form_warning_js.FormWarningText, { text: errors.email?.message?.toString() }),
59
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Label, {
59
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Label, {
60
60
  htmlFor: "password",
61
61
  className: "mt-4 mb-1",
62
62
  children: t("Password")
63
63
  }),
64
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.PasswordInput, {
64
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.PasswordInput, {
65
65
  id: "password",
66
66
  autoComplete: "current-password",
67
67
  ...register("password")
@@ -72,7 +72,7 @@ function CredentialSignIn() {
72
72
  className: "mt-1 text-sm",
73
73
  children: t("Forgot password?")
74
74
  }),
75
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Button, {
75
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Button, {
76
76
  type: "submit",
77
77
  className: "mt-6",
78
78
  loading,
@@ -1 +1 @@
1
- {"version":3,"file":"credential-sign-in.js","names":["passwordSchema","Label","Input","FormWarningText","PasswordInput","StyledLink","Button"],"sources":["../../src/components/credential-sign-in.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { passwordSchema, strictEmailSchema, yupObject } from \"@stackframe/stack-shared/dist/schema-fields\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Button, Input, Label, PasswordInput } from \"@stackframe/stack-ui\";\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { useStackApp } from \"..\";\nimport { useTranslation } from \"../lib/translations\";\nimport { FormWarningText } from \"./elements/form-warning\";\nimport { StyledLink } from \"./link\";\n\nexport function CredentialSignIn() {\n const { t } = useTranslation();\n\n const schema = yupObject({\n email: strictEmailSchema(t('Please enter a valid email')).defined().nonEmpty(t('Please enter your email')),\n password: passwordSchema.defined().nonEmpty(t('Please enter your password'))\n });\n\n const { register, handleSubmit, setError, formState: { errors } } = useForm({\n resolver: yupResolver(schema)\n });\n const app = useStackApp();\n const [loading, setLoading] = useState(false);\n\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\n setLoading(true);\n\n try {\n const { email, password } = data;\n const result = await app.signInWithCredential({\n email,\n password,\n });\n if (result.status === 'error') {\n setError('email', { type: 'manual', message: result.error.message });\n }\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <form\n className=\"flex flex-col items-stretch stack-scope\"\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n >\n <Label htmlFor=\"email\" className=\"mb-1\">{t('Email')}</Label>\n <Input\n id=\"email\"\n type=\"email\"\n autoComplete=\"email\"\n {...register('email')}\n />\n <FormWarningText text={errors.email?.message?.toString()} />\n\n <Label htmlFor=\"password\" className=\"mt-4 mb-1\">{t('Password')}</Label>\n <PasswordInput\n id=\"password\"\n autoComplete=\"current-password\"\n {...register('password')}\n />\n <FormWarningText text={errors.password?.message?.toString()} />\n\n <StyledLink href={app.urls.forgotPassword} className=\"mt-1 text-sm\">\n {t('Forgot password?')}\n </StyledLink>\n\n <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n {t('Sign In')}\n </Button>\n </form>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,SAAgB,mBAAmB;CACjC,MAAM,EAAE,kDAAsB;CAO9B,MAAM,EAAE,UAAU,cAAc,UAAU,WAAW,EAAE,0CAAqB,EAC1E,8GANuB;EACvB,0EAAyB,EAAE,6BAA6B,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,0BAA0B,CAAC;EAC1G,UAAUA,2DAAe,SAAS,CAAC,SAAS,EAAE,6BAA6B,CAAC;EAC7E,CAAC,CAG6B,EAC9B,CAAC;CACF,MAAM,oCAAmB;CACzB,MAAM,CAAC,SAAS,kCAAuB,MAAM;CAE7C,MAAM,WAAW,OAAO,SAAuC;AAC7D,aAAW,KAAK;AAEhB,MAAI;GACF,MAAM,EAAE,OAAO,aAAa;GAC5B,MAAM,SAAS,MAAM,IAAI,qBAAqB;IAC5C;IACA;IACD,CAAC;AACF,OAAI,OAAO,WAAW,QACpB,UAAS,SAAS;IAAE,MAAM;IAAU,SAAS,OAAO,MAAM;IAAS,CAAC;YAE9D;AACR,cAAW,MAAM;;;AAIrB,QACE,4CAAC;EACC,WAAU;EACV,WAAU,mFAAgC,aAAa,SAAS,CAAC,EAAE,CAAC;EACpE;;GAEA,2CAACC;IAAM,SAAQ;IAAQ,WAAU;cAAQ,EAAE,QAAQ;KAAS;GAC5D,2CAACC;IACC,IAAG;IACH,MAAK;IACL,cAAa;IACb,GAAI,SAAS,QAAQ;KACrB;GACF,2CAACC,8CAAgB,MAAM,OAAO,OAAO,SAAS,UAAU,GAAI;GAE5D,2CAACF;IAAM,SAAQ;IAAW,WAAU;cAAa,EAAE,WAAW;KAAS;GACvE,2CAACG;IACC,IAAG;IACH,cAAa;IACb,GAAI,SAAS,WAAW;KACxB;GACF,2CAACD,8CAAgB,MAAM,OAAO,UAAU,SAAS,UAAU,GAAI;GAE/D,2CAACE;IAAW,MAAM,IAAI,KAAK;IAAgB,WAAU;cAClD,EAAE,mBAAmB;KACX;GAEb,2CAACC;IAAO,MAAK;IAAS,WAAU;IAAgB;cAC7C,EAAE,UAAU;KACN;;GACJ"}
1
+ {"version":3,"file":"credential-sign-in.js","names":["passwordSchema","Label","Input","FormWarningText","PasswordInput","StyledLink","Button"],"sources":["../../src/components/credential-sign-in.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { passwordSchema, strictEmailSchema, yupObject } from \"@hexclave/shared/dist/schema-fields\";\nimport { runAsynchronouslyWithAlert } from \"@hexclave/shared/dist/utils/promises\";\nimport { Button, Input, Label, PasswordInput } from \"@hexclave/ui\";\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { useStackApp } from \"..\";\nimport { useTranslation } from \"../lib/translations\";\nimport { FormWarningText } from \"./elements/form-warning\";\nimport { StyledLink } from \"./link\";\n\nexport function CredentialSignIn() {\n const { t } = useTranslation();\n\n const schema = yupObject({\n email: strictEmailSchema(t('Please enter a valid email')).defined().nonEmpty(t('Please enter your email')),\n password: passwordSchema.defined().nonEmpty(t('Please enter your password'))\n });\n\n const { register, handleSubmit, setError, formState: { errors } } = useForm({\n resolver: yupResolver(schema)\n });\n const app = useStackApp();\n const [loading, setLoading] = useState(false);\n\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\n setLoading(true);\n\n try {\n const { email, password } = data;\n const result = await app.signInWithCredential({\n email,\n password,\n });\n if (result.status === 'error') {\n setError('email', { type: 'manual', message: result.error.message });\n }\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <form\n className=\"flex flex-col items-stretch stack-scope\"\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n >\n <Label htmlFor=\"email\" className=\"mb-1\">{t('Email')}</Label>\n <Input\n id=\"email\"\n type=\"email\"\n autoComplete=\"email\"\n {...register('email')}\n />\n <FormWarningText text={errors.email?.message?.toString()} />\n\n <Label htmlFor=\"password\" className=\"mt-4 mb-1\">{t('Password')}</Label>\n <PasswordInput\n id=\"password\"\n autoComplete=\"current-password\"\n {...register('password')}\n />\n <FormWarningText text={errors.password?.message?.toString()} />\n\n <StyledLink href={app.urls.forgotPassword} className=\"mt-1 text-sm\">\n {t('Forgot password?')}\n </StyledLink>\n\n <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n {t('Sign In')}\n </Button>\n </form>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,SAAgB,mBAAmB;CACjC,MAAM,EAAE,kDAAsB;CAO9B,MAAM,EAAE,UAAU,cAAc,UAAU,WAAW,EAAE,0CAAqB,EAC1E,sGANuB;EACvB,kEAAyB,EAAE,6BAA6B,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,0BAA0B,CAAC;EAC1G,UAAUA,mDAAe,SAAS,CAAC,SAAS,EAAE,6BAA6B,CAAC;EAC7E,CAAC,CAG6B,EAC9B,CAAC;CACF,MAAM,oCAAmB;CACzB,MAAM,CAAC,SAAS,kCAAuB,MAAM;CAE7C,MAAM,WAAW,OAAO,SAAuC;AAC7D,aAAW,KAAK;AAEhB,MAAI;GACF,MAAM,EAAE,OAAO,aAAa;GAC5B,MAAM,SAAS,MAAM,IAAI,qBAAqB;IAC5C;IACA;IACD,CAAC;AACF,OAAI,OAAO,WAAW,QACpB,UAAS,SAAS;IAAE,MAAM;IAAU,SAAS,OAAO,MAAM;IAAS,CAAC;YAE9D;AACR,cAAW,MAAM;;;AAIrB,QACE,4CAAC;EACC,WAAU;EACV,WAAU,2EAAgC,aAAa,SAAS,CAAC,EAAE,CAAC;EACpE;;GAEA,2CAACC;IAAM,SAAQ;IAAQ,WAAU;cAAQ,EAAE,QAAQ;KAAS;GAC5D,2CAACC;IACC,IAAG;IACH,MAAK;IACL,cAAa;IACb,GAAI,SAAS,QAAQ;KACrB;GACF,2CAACC,8CAAgB,MAAM,OAAO,OAAO,SAAS,UAAU,GAAI;GAE5D,2CAACF;IAAM,SAAQ;IAAW,WAAU;cAAa,EAAE,WAAW;KAAS;GACvE,2CAACG;IACC,IAAG;IACH,cAAa;IACb,GAAI,SAAS,WAAW;KACxB;GACF,2CAACD,8CAAgB,MAAM,OAAO,UAAU,SAAS,UAAU,GAAI;GAE/D,2CAACE;IAAW,MAAM,IAAI,KAAK;IAAgB,WAAU;cAClD,EAAE,mBAAmB;KACX;GAEb,2CAACC;IAAO,MAAK;IAAS,WAAU;IAAgB;cAC7C,EAAE,UAAU;KACN;;GACJ"}
@@ -3,16 +3,16 @@
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
  const require_chunk = require('../chunk-BE-pF4vm.js');
5
5
  let _hookform_resolvers_yup = require("@hookform/resolvers/yup");
6
- let _stackframe_stack_shared_dist_schema_fields = require("@hexclave/shared/dist/schema-fields");
7
- let _stackframe_stack_shared_dist_utils_promises = require("@hexclave/shared/dist/utils/promises");
8
- let _stackframe_stack_ui = require("@hexclave/ui");
6
+ let _hexclave_shared_dist_schema_fields = require("@hexclave/shared/dist/schema-fields");
7
+ let _hexclave_shared_dist_utils_promises = require("@hexclave/shared/dist/utils/promises");
8
+ let _hexclave_ui = require("@hexclave/ui");
9
9
  let react = require("react");
10
10
  react = require_chunk.__toESM(react);
11
11
  let react_hook_form = require("react-hook-form");
12
12
  let ___lib_translations_js = require("../lib/translations.js");
13
13
  let react_jsx_runtime = require("react/jsx-runtime");
14
14
  let __elements_form_warning_js = require("./elements/form-warning.js");
15
- let _stackframe_stack_shared_dist_helpers_password = require("@hexclave/shared/dist/helpers/password");
15
+ let _hexclave_shared_dist_helpers_password = require("@hexclave/shared/dist/helpers/password");
16
16
  let yup = require("yup");
17
17
  yup = require_chunk.__toESM(yup);
18
18
  let ___lib_hooks_js = require("../lib/hooks.js");
@@ -20,17 +20,17 @@ let ___lib_hooks_js = require("../lib/hooks.js");
20
20
  //#region src/components/credential-sign-up.tsx
21
21
  function CredentialSignUp(props) {
22
22
  const { t } = (0, ___lib_translations_js.useTranslation)();
23
- const { register, handleSubmit, setError, formState: { errors }, clearErrors } = (0, react_hook_form.useForm)({ resolver: (0, _hookform_resolvers_yup.yupResolver)((0, _stackframe_stack_shared_dist_schema_fields.yupObject)({
24
- email: (0, _stackframe_stack_shared_dist_schema_fields.strictEmailSchema)(t("Please enter a valid email")).defined().nonEmpty(t("Please enter your email")),
25
- password: _stackframe_stack_shared_dist_schema_fields.passwordSchema.defined().nonEmpty(t("Please enter your password")).test({
23
+ const { register, handleSubmit, setError, formState: { errors }, clearErrors } = (0, react_hook_form.useForm)({ resolver: (0, _hookform_resolvers_yup.yupResolver)((0, _hexclave_shared_dist_schema_fields.yupObject)({
24
+ email: (0, _hexclave_shared_dist_schema_fields.strictEmailSchema)(t("Please enter a valid email")).defined().nonEmpty(t("Please enter your email")),
25
+ password: _hexclave_shared_dist_schema_fields.passwordSchema.defined().nonEmpty(t("Please enter your password")).test({
26
26
  name: "is-valid-password",
27
27
  test: (value, ctx) => {
28
- const error = (0, _stackframe_stack_shared_dist_helpers_password.getPasswordError)(value);
28
+ const error = (0, _hexclave_shared_dist_helpers_password.getPasswordError)(value);
29
29
  if (error) return ctx.createError({ message: error.message });
30
30
  else return true;
31
31
  }
32
32
  }),
33
- ...!props.noPasswordRepeat && { passwordRepeat: _stackframe_stack_shared_dist_schema_fields.passwordSchema.nullable().oneOf([
33
+ ...!props.noPasswordRepeat && { passwordRepeat: _hexclave_shared_dist_schema_fields.passwordSchema.nullable().oneOf([
34
34
  yup.ref("password"),
35
35
  "",
36
36
  null
@@ -58,55 +58,55 @@ function CredentialSignUp(props) {
58
58
  const registerPasswordRepeat = register("passwordRepeat");
59
59
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
60
60
  className: "flex flex-col items-stretch stack-scope",
61
- onSubmit: (e) => (0, _stackframe_stack_shared_dist_utils_promises.runAsynchronouslyWithAlert)(handleSubmit(onSubmit)(e)),
61
+ onSubmit: (e) => (0, _hexclave_shared_dist_utils_promises.runAsynchronouslyWithAlert)(handleSubmit(onSubmit)(e)),
62
62
  noValidate: true,
63
63
  children: [
64
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Label, {
64
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Label, {
65
65
  htmlFor: "email",
66
66
  className: "mb-1",
67
67
  children: t("Email")
68
68
  }),
69
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Input, {
69
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Input, {
70
70
  id: "email",
71
71
  type: "email",
72
72
  autoComplete: "email",
73
73
  ...register("email")
74
74
  }),
75
75
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__elements_form_warning_js.FormWarningText, { text: errors.email?.message?.toString() }),
76
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Label, {
76
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Label, {
77
77
  htmlFor: "password",
78
78
  className: "mt-4 mb-1",
79
79
  children: t("Password")
80
80
  }),
81
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.PasswordInput, {
81
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.PasswordInput, {
82
82
  id: "password",
83
83
  autoComplete: "new-password",
84
84
  ...registerPassword,
85
85
  onChange: (e) => {
86
86
  clearErrors("password");
87
87
  clearErrors("passwordRepeat");
88
- (0, _stackframe_stack_shared_dist_utils_promises.runAsynchronously)(registerPassword.onChange(e));
88
+ (0, _hexclave_shared_dist_utils_promises.runAsynchronously)(registerPassword.onChange(e));
89
89
  }
90
90
  }),
91
91
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__elements_form_warning_js.FormWarningText, { text: errors.password?.message?.toString() }),
92
92
  !props.noPasswordRepeat && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
93
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Label, {
93
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Label, {
94
94
  htmlFor: "repeat-password",
95
95
  className: "mt-4 mb-1",
96
96
  children: t("Repeat Password")
97
97
  }),
98
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.PasswordInput, {
98
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.PasswordInput, {
99
99
  id: "repeat-password",
100
100
  ...registerPasswordRepeat,
101
101
  onChange: (e) => {
102
102
  clearErrors("password");
103
103
  clearErrors("passwordRepeat");
104
- (0, _stackframe_stack_shared_dist_utils_promises.runAsynchronously)(registerPasswordRepeat.onChange(e));
104
+ (0, _hexclave_shared_dist_utils_promises.runAsynchronously)(registerPasswordRepeat.onChange(e));
105
105
  }
106
106
  }),
107
107
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__elements_form_warning_js.FormWarningText, { text: errors.passwordRepeat?.message?.toString() })
108
108
  ] }),
109
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Button, {
109
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Button, {
110
110
  type: "submit",
111
111
  className: "mt-6",
112
112
  loading,
@@ -1 +1 @@
1
- {"version":3,"file":"credential-sign-up.js","names":["passwordSchema","Label","Input","FormWarningText","PasswordInput","Button"],"sources":["../../src/components/credential-sign-up.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { getPasswordError } from \"@stackframe/stack-shared/dist/helpers/password\";\nimport { passwordSchema, strictEmailSchema, yupObject } from \"@stackframe/stack-shared/dist/schema-fields\";\nimport { runAsynchronously, runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Button, Input, Label, PasswordInput } from \"@stackframe/stack-ui\";\nimport React, { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { useStackApp } from \"../lib/hooks\";\nimport { useTranslation } from \"../lib/translations\";\nimport { FormWarningText } from \"./elements/form-warning\";\n\nexport function CredentialSignUp(props: { noPasswordRepeat?: boolean }) {\n const { t } = useTranslation();\n\n const schema = yupObject({\n email: strictEmailSchema(t('Please enter a valid email')).defined().nonEmpty(t('Please enter your email')),\n password: passwordSchema.defined().nonEmpty(t('Please enter your password')).test({\n name: 'is-valid-password',\n test: (value, ctx) => {\n const error = getPasswordError(value);\n if (error) {\n return ctx.createError({ message: error.message });\n } else {\n return true;\n }\n }\n }),\n ...(!props.noPasswordRepeat && {\n passwordRepeat: passwordSchema.nullable().oneOf([yup.ref('password'), \"\", null], t('Passwords do not match')).nonEmpty(t('Please repeat your password'))\n })\n });\n\n const { register, handleSubmit, setError, formState: { errors }, clearErrors } = useForm({\n resolver: yupResolver(schema)\n });\n const app = useStackApp();\n const [loading, setLoading] = useState(false);\n\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\n setLoading(true);\n try {\n const { email, password } = data;\n const result = await app.signUpWithCredential({ email, password });\n if (result.status === 'error') {\n setError('email', { type: 'manual', message: result.error.message });\n }\n } finally {\n setLoading(false);\n }\n };\n\n const registerPassword = register('password');\n const registerPasswordRepeat = register('passwordRepeat');\n\n return (\n <form\n className=\"flex flex-col items-stretch stack-scope\"\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n >\n <Label htmlFor=\"email\" className=\"mb-1\">{t('Email')}</Label>\n <Input id=\"email\" type=\"email\" autoComplete=\"email\" {...register('email')}/>\n <FormWarningText text={errors.email?.message?.toString()} />\n\n <Label htmlFor=\"password\" className=\"mt-4 mb-1\">{t('Password')}</Label>\n <PasswordInput\n id=\"password\"\n autoComplete=\"new-password\"\n {...registerPassword}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n clearErrors('password');\n clearErrors('passwordRepeat');\n runAsynchronously(registerPassword.onChange(e));\n }}\n />\n <FormWarningText text={errors.password?.message?.toString()} />\n {\n !props.noPasswordRepeat && (\n <>\n <Label htmlFor=\"repeat-password\" className=\"mt-4 mb-1\">{t('Repeat Password')}</Label>\n <PasswordInput\n id=\"repeat-password\"\n {...registerPasswordRepeat}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n clearErrors('password');\n clearErrors('passwordRepeat');\n runAsynchronously(registerPasswordRepeat.onChange(e));\n }}\n />\n <FormWarningText text={errors.passwordRepeat?.message?.toString()} />\n </>\n )\n }\n\n <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n {t('Sign Up')}\n </Button>\n </form>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAmBA,SAAgB,iBAAiB,OAAuC;CACtE,MAAM,EAAE,kDAAsB;CAoB9B,MAAM,EAAE,UAAU,cAAc,UAAU,WAAW,EAAE,UAAU,6CAAwB,EACvF,8GAnBuB;EACvB,0EAAyB,EAAE,6BAA6B,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,0BAA0B,CAAC;EAC1G,UAAUA,2DAAe,SAAS,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC,KAAK;GAChF,MAAM;GACN,OAAO,OAAO,QAAQ;IACpB,MAAM,6EAAyB,MAAM;AACrC,QAAI,MACF,QAAO,IAAI,YAAY,EAAE,SAAS,MAAM,SAAS,CAAC;QAElD,QAAO;;GAGZ,CAAC;EACF,GAAI,CAAC,MAAM,oBAAoB,EAC7B,gBAAgBA,2DAAe,UAAU,CAAC,MAAM;GAAC,IAAI,IAAI,WAAW;GAAE;GAAI;GAAK,EAAE,EAAE,yBAAyB,CAAC,CAAC,SAAS,EAAE,8BAA8B,CAAC,EACzJ;EACF,CAAC,CAG6B,EAC9B,CAAC;CACF,MAAM,wCAAmB;CACzB,MAAM,CAAC,SAAS,kCAAuB,MAAM;CAE7C,MAAM,WAAW,OAAO,SAAuC;AAC7D,aAAW,KAAK;AAChB,MAAI;GACF,MAAM,EAAE,OAAO,aAAa;GAC5B,MAAM,SAAS,MAAM,IAAI,qBAAqB;IAAE;IAAO;IAAU,CAAC;AAClE,OAAI,OAAO,WAAW,QACpB,UAAS,SAAS;IAAE,MAAM;IAAU,SAAS,OAAO,MAAM;IAAS,CAAC;YAE9D;AACR,cAAW,MAAM;;;CAIrB,MAAM,mBAAmB,SAAS,WAAW;CAC7C,MAAM,yBAAyB,SAAS,iBAAiB;AAEzD,QACE,4CAAC;EACC,WAAU;EACV,WAAU,mFAAgC,aAAa,SAAS,CAAC,EAAE,CAAC;EACpE;;GAEA,2CAACC;IAAM,SAAQ;IAAQ,WAAU;cAAQ,EAAE,QAAQ;KAAS;GAC5D,2CAACC;IAAM,IAAG;IAAQ,MAAK;IAAQ,cAAa;IAAQ,GAAI,SAAS,QAAQ;KAAG;GAC5E,2CAACC,8CAAgB,MAAM,OAAO,OAAO,SAAS,UAAU,GAAI;GAE5D,2CAACF;IAAM,SAAQ;IAAW,WAAU;cAAa,EAAE,WAAW;KAAS;GACvE,2CAACG;IACC,IAAG;IACH,cAAa;IACb,GAAI;IACJ,WAAW,MAA2C;AACpD,iBAAY,WAAW;AACvB,iBAAY,iBAAiB;AAC7B,yEAAkB,iBAAiB,SAAS,EAAE,CAAC;;KAEjD;GACF,2CAACD,8CAAgB,MAAM,OAAO,UAAU,SAAS,UAAU,GAAI;GAE7D,CAAC,MAAM,oBACL;IACE,2CAACF;KAAM,SAAQ;KAAkB,WAAU;eAAa,EAAE,kBAAkB;MAAS;IACrF,2CAACG;KACC,IAAG;KACH,GAAI;KACJ,WAAW,MAA2C;AACtD,kBAAY,WAAW;AACvB,kBAAY,iBAAiB;AAC7B,0EAAkB,uBAAuB,SAAS,EAAE,CAAC;;MAErD;IACF,2CAACD,8CAAgB,MAAM,OAAO,gBAAgB,SAAS,UAAU,GAAI;OACpE;GAIP,2CAACE;IAAO,MAAK;IAAS,WAAU;IAAgB;cAC7C,EAAE,UAAU;KACN;;GACJ"}
1
+ {"version":3,"file":"credential-sign-up.js","names":["passwordSchema","Label","Input","FormWarningText","PasswordInput","Button"],"sources":["../../src/components/credential-sign-up.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { getPasswordError } from \"@hexclave/shared/dist/helpers/password\";\nimport { passwordSchema, strictEmailSchema, yupObject } from \"@hexclave/shared/dist/schema-fields\";\nimport { runAsynchronously, runAsynchronouslyWithAlert } from \"@hexclave/shared/dist/utils/promises\";\nimport { Button, Input, Label, PasswordInput } from \"@hexclave/ui\";\nimport React, { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { useStackApp } from \"../lib/hooks\";\nimport { useTranslation } from \"../lib/translations\";\nimport { FormWarningText } from \"./elements/form-warning\";\n\nexport function CredentialSignUp(props: { noPasswordRepeat?: boolean }) {\n const { t } = useTranslation();\n\n const schema = yupObject({\n email: strictEmailSchema(t('Please enter a valid email')).defined().nonEmpty(t('Please enter your email')),\n password: passwordSchema.defined().nonEmpty(t('Please enter your password')).test({\n name: 'is-valid-password',\n test: (value, ctx) => {\n const error = getPasswordError(value);\n if (error) {\n return ctx.createError({ message: error.message });\n } else {\n return true;\n }\n }\n }),\n ...(!props.noPasswordRepeat && {\n passwordRepeat: passwordSchema.nullable().oneOf([yup.ref('password'), \"\", null], t('Passwords do not match')).nonEmpty(t('Please repeat your password'))\n })\n });\n\n const { register, handleSubmit, setError, formState: { errors }, clearErrors } = useForm({\n resolver: yupResolver(schema)\n });\n const app = useStackApp();\n const [loading, setLoading] = useState(false);\n\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\n setLoading(true);\n try {\n const { email, password } = data;\n const result = await app.signUpWithCredential({ email, password });\n if (result.status === 'error') {\n setError('email', { type: 'manual', message: result.error.message });\n }\n } finally {\n setLoading(false);\n }\n };\n\n const registerPassword = register('password');\n const registerPasswordRepeat = register('passwordRepeat');\n\n return (\n <form\n className=\"flex flex-col items-stretch stack-scope\"\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n >\n <Label htmlFor=\"email\" className=\"mb-1\">{t('Email')}</Label>\n <Input id=\"email\" type=\"email\" autoComplete=\"email\" {...register('email')}/>\n <FormWarningText text={errors.email?.message?.toString()} />\n\n <Label htmlFor=\"password\" className=\"mt-4 mb-1\">{t('Password')}</Label>\n <PasswordInput\n id=\"password\"\n autoComplete=\"new-password\"\n {...registerPassword}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n clearErrors('password');\n clearErrors('passwordRepeat');\n runAsynchronously(registerPassword.onChange(e));\n }}\n />\n <FormWarningText text={errors.password?.message?.toString()} />\n {\n !props.noPasswordRepeat && (\n <>\n <Label htmlFor=\"repeat-password\" className=\"mt-4 mb-1\">{t('Repeat Password')}</Label>\n <PasswordInput\n id=\"repeat-password\"\n {...registerPasswordRepeat}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n clearErrors('password');\n clearErrors('passwordRepeat');\n runAsynchronously(registerPasswordRepeat.onChange(e));\n }}\n />\n <FormWarningText text={errors.passwordRepeat?.message?.toString()} />\n </>\n )\n }\n\n <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n {t('Sign Up')}\n </Button>\n </form>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAmBA,SAAgB,iBAAiB,OAAuC;CACtE,MAAM,EAAE,kDAAsB;CAoB9B,MAAM,EAAE,UAAU,cAAc,UAAU,WAAW,EAAE,UAAU,6CAAwB,EACvF,sGAnBuB;EACvB,kEAAyB,EAAE,6BAA6B,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,0BAA0B,CAAC;EAC1G,UAAUA,mDAAe,SAAS,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC,KAAK;GAChF,MAAM;GACN,OAAO,OAAO,QAAQ;IACpB,MAAM,qEAAyB,MAAM;AACrC,QAAI,MACF,QAAO,IAAI,YAAY,EAAE,SAAS,MAAM,SAAS,CAAC;QAElD,QAAO;;GAGZ,CAAC;EACF,GAAI,CAAC,MAAM,oBAAoB,EAC7B,gBAAgBA,mDAAe,UAAU,CAAC,MAAM;GAAC,IAAI,IAAI,WAAW;GAAE;GAAI;GAAK,EAAE,EAAE,yBAAyB,CAAC,CAAC,SAAS,EAAE,8BAA8B,CAAC,EACzJ;EACF,CAAC,CAG6B,EAC9B,CAAC;CACF,MAAM,wCAAmB;CACzB,MAAM,CAAC,SAAS,kCAAuB,MAAM;CAE7C,MAAM,WAAW,OAAO,SAAuC;AAC7D,aAAW,KAAK;AAChB,MAAI;GACF,MAAM,EAAE,OAAO,aAAa;GAC5B,MAAM,SAAS,MAAM,IAAI,qBAAqB;IAAE;IAAO;IAAU,CAAC;AAClE,OAAI,OAAO,WAAW,QACpB,UAAS,SAAS;IAAE,MAAM;IAAU,SAAS,OAAO,MAAM;IAAS,CAAC;YAE9D;AACR,cAAW,MAAM;;;CAIrB,MAAM,mBAAmB,SAAS,WAAW;CAC7C,MAAM,yBAAyB,SAAS,iBAAiB;AAEzD,QACE,4CAAC;EACC,WAAU;EACV,WAAU,2EAAgC,aAAa,SAAS,CAAC,EAAE,CAAC;EACpE;;GAEA,2CAACC;IAAM,SAAQ;IAAQ,WAAU;cAAQ,EAAE,QAAQ;KAAS;GAC5D,2CAACC;IAAM,IAAG;IAAQ,MAAK;IAAQ,cAAa;IAAQ,GAAI,SAAS,QAAQ;KAAG;GAC5E,2CAACC,8CAAgB,MAAM,OAAO,OAAO,SAAS,UAAU,GAAI;GAE5D,2CAACF;IAAM,SAAQ;IAAW,WAAU;cAAa,EAAE,WAAW;KAAS;GACvE,2CAACG;IACC,IAAG;IACH,cAAa;IACb,GAAI;IACJ,WAAW,MAA2C;AACpD,iBAAY,WAAW;AACvB,iBAAY,iBAAiB;AAC7B,iEAAkB,iBAAiB,SAAS,EAAE,CAAC;;KAEjD;GACF,2CAACD,8CAAgB,MAAM,OAAO,UAAU,SAAS,UAAU,GAAI;GAE7D,CAAC,MAAM,oBACL;IACE,2CAACF;KAAM,SAAQ;KAAkB,WAAU;eAAa,EAAE,kBAAkB;MAAS;IACrF,2CAACG;KACC,IAAG;KACH,GAAI;KACJ,WAAW,MAA2C;AACtD,kBAAY,WAAW;AACvB,kBAAY,iBAAiB;AAC7B,kEAAkB,uBAAuB,SAAS,EAAE,CAAC;;MAErD;IACF,2CAACD,8CAAgB,MAAM,OAAO,gBAAgB,SAAS,UAAU,GAAI;OACpE;GAIP,2CAACE;IAAO,MAAK;IAAS,WAAU;IAAgB;cAC7C,EAAE,UAAU;KACN;;GACJ"}
@@ -2,7 +2,7 @@
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_ui = require("@hexclave/ui");
5
+ let _hexclave_ui = require("@hexclave/ui");
6
6
  let react_jsx_runtime = require("react/jsx-runtime");
7
7
 
8
8
  //#region src/components/elements/separator-with-text.tsx
@@ -12,7 +12,7 @@ function SeparatorWithText({ text }) {
12
12
  children: [
13
13
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
14
14
  className: "flex-1",
15
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Separator, {})
15
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Separator, {})
16
16
  }),
17
17
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
18
18
  className: "mx-2 text-sm text-zinc-500",
@@ -20,7 +20,7 @@ function SeparatorWithText({ text }) {
20
20
  }),
21
21
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
22
22
  className: "flex-1",
23
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_stackframe_stack_ui.Separator, {})
23
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Separator, {})
24
24
  })
25
25
  ]
26
26
  });