@hexclave/next 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (837) hide show
  1. package/dist/components/api-key-dialogs.d.ts +1 -1
  2. package/dist/components/api-key-dialogs.js.map +1 -1
  3. package/dist/components/api-key-table.d.ts +1 -1
  4. package/dist/components/api-key-table.js.map +1 -1
  5. package/dist/components/credential-sign-in.js.map +1 -1
  6. package/dist/components/credential-sign-up.js.map +1 -1
  7. package/dist/components/elements/form-warning.js.map +1 -1
  8. package/dist/components/elements/maybe-full-page.js.map +1 -1
  9. package/dist/components/elements/separator-with-text.js.map +1 -1
  10. package/dist/components/elements/sidebar-layout.js.map +1 -1
  11. package/dist/components/elements/ssr-layout-effect.js.map +1 -1
  12. package/dist/components/elements/user-avatar.js.map +1 -1
  13. package/dist/components/link.js.map +1 -1
  14. package/dist/components/magic-link-sign-in.js +2 -2
  15. package/dist/components/magic-link-sign-in.js.map +1 -1
  16. package/dist/components/message-cards/known-error-message-card.js +2 -2
  17. package/dist/components/message-cards/known-error-message-card.js.map +1 -1
  18. package/dist/components/message-cards/message-card.js.map +1 -1
  19. package/dist/components/message-cards/predefined-message-card.js +9 -9
  20. package/dist/components/message-cards/predefined-message-card.js.map +1 -1
  21. package/dist/components/oauth-button-group.js +2 -2
  22. package/dist/components/oauth-button-group.js.map +1 -1
  23. package/dist/components/oauth-button.js +2 -2
  24. package/dist/components/oauth-button.js.map +1 -1
  25. package/dist/components/passkey-button.js +2 -2
  26. package/dist/components/passkey-button.js.map +1 -1
  27. package/dist/components/profile-image-editor.js.map +1 -1
  28. package/dist/components/selected-team-switcher.d.ts +1 -1
  29. package/dist/components/selected-team-switcher.js.map +1 -1
  30. package/dist/components/team-icon.d.ts +1 -1
  31. package/dist/components/team-icon.js.map +1 -1
  32. package/dist/components/team-switcher.d.ts +1 -1
  33. package/dist/components/team-switcher.js.map +1 -1
  34. package/dist/components/use-in-iframe.js.map +1 -1
  35. package/dist/components/user-button.js.map +1 -1
  36. package/dist/components-page/account-settings/active-sessions/active-sessions-page.js.map +1 -1
  37. package/dist/components-page/account-settings/api-keys/api-keys-page.js.map +1 -1
  38. package/dist/components-page/account-settings/editable-text.js.map +1 -1
  39. package/dist/components-page/account-settings/email-and-auth/email-and-auth-page.js.map +1 -1
  40. package/dist/components-page/account-settings/email-and-auth/emails-section.js.map +1 -1
  41. package/dist/components-page/account-settings/email-and-auth/mfa-section.js.map +1 -1
  42. package/dist/components-page/account-settings/email-and-auth/otp-section.js.map +1 -1
  43. package/dist/components-page/account-settings/email-and-auth/passkey-section.js.map +1 -1
  44. package/dist/components-page/account-settings/email-and-auth/password-section.js.map +1 -1
  45. package/dist/components-page/account-settings/notifications/notifications-page.js.map +1 -1
  46. package/dist/components-page/account-settings/page-layout.js.map +1 -1
  47. package/dist/components-page/account-settings/payments/payments-page.d.ts +1 -1
  48. package/dist/components-page/account-settings/payments/payments-page.js.map +1 -1
  49. package/dist/components-page/account-settings/payments/payments-panel.d.ts +1 -1
  50. package/dist/components-page/account-settings/payments/payments-panel.js +3 -3
  51. package/dist/components-page/account-settings/payments/payments-panel.js.map +1 -1
  52. package/dist/components-page/account-settings/profile-page/profile-page.js.map +1 -1
  53. package/dist/components-page/account-settings/section.js.map +1 -1
  54. package/dist/components-page/account-settings/settings/delete-account-section.js.map +1 -1
  55. package/dist/components-page/account-settings/settings/settings-page.js.map +1 -1
  56. package/dist/components-page/account-settings/settings/sign-out-section.js.map +1 -1
  57. package/dist/components-page/account-settings/teams/leave-team-section.d.ts +1 -1
  58. package/dist/components-page/account-settings/teams/leave-team-section.js.map +1 -1
  59. package/dist/components-page/account-settings/teams/team-api-keys-section.d.ts +1 -1
  60. package/dist/components-page/account-settings/teams/team-api-keys-section.js.map +1 -1
  61. package/dist/components-page/account-settings/teams/team-creation-page.js.map +1 -1
  62. package/dist/components-page/account-settings/teams/team-display-name-section.d.ts +1 -1
  63. package/dist/components-page/account-settings/teams/team-display-name-section.js.map +1 -1
  64. package/dist/components-page/account-settings/teams/team-member-invitation-section.d.ts +1 -1
  65. package/dist/components-page/account-settings/teams/team-member-invitation-section.js.map +1 -1
  66. package/dist/components-page/account-settings/teams/team-member-list-section.d.ts +1 -1
  67. package/dist/components-page/account-settings/teams/team-member-list-section.js.map +1 -1
  68. package/dist/components-page/account-settings/teams/team-page.d.ts +1 -1
  69. package/dist/components-page/account-settings/teams/team-page.js.map +1 -1
  70. package/dist/components-page/account-settings/teams/team-profile-image-section.d.ts +1 -1
  71. package/dist/components-page/account-settings/teams/team-profile-image-section.js.map +1 -1
  72. package/dist/components-page/account-settings/teams/team-profile-user-section.d.ts +1 -1
  73. package/dist/components-page/account-settings/teams/team-profile-user-section.js.map +1 -1
  74. package/dist/components-page/account-settings.js.map +1 -1
  75. package/dist/components-page/auth-page.d.ts.map +1 -1
  76. package/dist/components-page/auth-page.js +55 -10
  77. package/dist/components-page/auth-page.js.map +1 -1
  78. package/dist/components-page/cli-auth-confirm.js +3 -3
  79. package/dist/components-page/cli-auth-confirm.js.map +1 -1
  80. package/dist/components-page/cli-auth-confirm.test.js +4 -4
  81. package/dist/components-page/cli-auth-confirm.test.js.map +1 -1
  82. package/dist/components-page/email-verification.js +4 -4
  83. package/dist/components-page/email-verification.js.map +1 -1
  84. package/dist/components-page/error-page.js +9 -9
  85. package/dist/components-page/error-page.js.map +1 -1
  86. package/dist/components-page/forgot-password.js +4 -4
  87. package/dist/components-page/forgot-password.js.map +1 -1
  88. package/dist/components-page/{stack-handler-client.d.ts → hexclave-handler-client.d.ts} +4 -4
  89. package/dist/components-page/hexclave-handler-client.d.ts.map +1 -0
  90. package/dist/components-page/{stack-handler-client.js → hexclave-handler-client.js} +19 -18
  91. package/dist/components-page/hexclave-handler-client.js.map +1 -0
  92. package/dist/components-page/{stack-handler.d.ts → hexclave-handler.d.ts} +5 -5
  93. package/dist/components-page/hexclave-handler.d.ts.map +1 -0
  94. package/dist/components-page/{stack-handler.js → hexclave-handler.js} +4 -4
  95. package/dist/components-page/hexclave-handler.js.map +1 -0
  96. package/dist/components-page/magic-link-callback.js +7 -7
  97. package/dist/components-page/magic-link-callback.js.map +1 -1
  98. package/dist/components-page/mfa.js +4 -4
  99. package/dist/components-page/mfa.js.map +1 -1
  100. package/dist/components-page/oauth-callback.js +3 -3
  101. package/dist/components-page/oauth-callback.js.map +1 -1
  102. package/dist/components-page/onboarding.js +3 -3
  103. package/dist/components-page/onboarding.js.map +1 -1
  104. package/dist/components-page/password-reset.js +8 -8
  105. package/dist/components-page/password-reset.js.map +1 -1
  106. package/dist/components-page/sign-in.js.map +1 -1
  107. package/dist/components-page/sign-out.d.ts +1 -0
  108. package/dist/components-page/sign-out.d.ts.map +1 -1
  109. package/dist/components-page/sign-out.js +11 -5
  110. package/dist/components-page/sign-out.js.map +1 -1
  111. package/dist/components-page/sign-up.js.map +1 -1
  112. package/dist/components-page/team-creation.js.map +1 -1
  113. package/dist/components-page/team-invitation.js +16 -16
  114. package/dist/components-page/team-invitation.js.map +1 -1
  115. package/dist/dev-tool/dev-tool-core.d.ts +1 -1
  116. package/dist/dev-tool/dev-tool-core.js +11 -11
  117. package/dist/dev-tool/dev-tool-core.js.map +1 -1
  118. package/dist/dev-tool/dev-tool-styles.d.ts +1 -1
  119. package/dist/dev-tool/dev-tool-styles.js +371 -371
  120. package/dist/dev-tool/dev-tool-styles.js.map +1 -1
  121. package/dist/dev-tool/dev-tool-trigger-position.js.map +1 -1
  122. package/dist/dev-tool/dev-tool-trigger-position.test.js.map +1 -1
  123. package/dist/dev-tool/index.d.ts +4 -4
  124. package/dist/dev-tool/index.js +4 -4
  125. package/dist/dev-tool/index.js.map +1 -1
  126. package/dist/esm/components/api-key-dialogs.d.ts +1 -1
  127. package/dist/esm/components/api-key-dialogs.js.map +1 -1
  128. package/dist/esm/components/api-key-table.d.ts +1 -1
  129. package/dist/esm/components/api-key-table.js.map +1 -1
  130. package/dist/esm/components/credential-sign-in.js.map +1 -1
  131. package/dist/esm/components/credential-sign-up.js.map +1 -1
  132. package/dist/esm/components/elements/form-warning.js.map +1 -1
  133. package/dist/esm/components/elements/maybe-full-page.js.map +1 -1
  134. package/dist/esm/components/elements/separator-with-text.js.map +1 -1
  135. package/dist/esm/components/elements/sidebar-layout.js.map +1 -1
  136. package/dist/esm/components/elements/ssr-layout-effect.js.map +1 -1
  137. package/dist/esm/components/elements/user-avatar.js.map +1 -1
  138. package/dist/esm/components/link.js.map +1 -1
  139. package/dist/esm/components/magic-link-sign-in.js +2 -2
  140. package/dist/esm/components/magic-link-sign-in.js.map +1 -1
  141. package/dist/esm/components/message-cards/known-error-message-card.js +2 -2
  142. package/dist/esm/components/message-cards/known-error-message-card.js.map +1 -1
  143. package/dist/esm/components/message-cards/message-card.js.map +1 -1
  144. package/dist/esm/components/message-cards/predefined-message-card.js +9 -9
  145. package/dist/esm/components/message-cards/predefined-message-card.js.map +1 -1
  146. package/dist/esm/components/oauth-button-group.js +2 -2
  147. package/dist/esm/components/oauth-button-group.js.map +1 -1
  148. package/dist/esm/components/oauth-button.js +2 -2
  149. package/dist/esm/components/oauth-button.js.map +1 -1
  150. package/dist/esm/components/passkey-button.js +2 -2
  151. package/dist/esm/components/passkey-button.js.map +1 -1
  152. package/dist/esm/components/profile-image-editor.js.map +1 -1
  153. package/dist/esm/components/selected-team-switcher.js.map +1 -1
  154. package/dist/esm/components/team-icon.js.map +1 -1
  155. package/dist/esm/components/team-switcher.js.map +1 -1
  156. package/dist/esm/components/use-in-iframe.js.map +1 -1
  157. package/dist/esm/components/user-button.js.map +1 -1
  158. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.js.map +1 -1
  159. package/dist/esm/components-page/account-settings/api-keys/api-keys-page.js.map +1 -1
  160. package/dist/esm/components-page/account-settings/editable-text.js.map +1 -1
  161. package/dist/esm/components-page/account-settings/email-and-auth/email-and-auth-page.js.map +1 -1
  162. package/dist/esm/components-page/account-settings/email-and-auth/emails-section.js.map +1 -1
  163. package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.js.map +1 -1
  164. package/dist/esm/components-page/account-settings/email-and-auth/otp-section.js.map +1 -1
  165. package/dist/esm/components-page/account-settings/email-and-auth/passkey-section.js.map +1 -1
  166. package/dist/esm/components-page/account-settings/email-and-auth/password-section.js.map +1 -1
  167. package/dist/esm/components-page/account-settings/notifications/notifications-page.js.map +1 -1
  168. package/dist/esm/components-page/account-settings/page-layout.js.map +1 -1
  169. package/dist/esm/components-page/account-settings/payments/payments-page.js.map +1 -1
  170. package/dist/esm/components-page/account-settings/payments/payments-panel.d.ts +1 -1
  171. package/dist/esm/components-page/account-settings/payments/payments-panel.js +3 -3
  172. package/dist/esm/components-page/account-settings/payments/payments-panel.js.map +1 -1
  173. package/dist/esm/components-page/account-settings/profile-page/profile-page.js.map +1 -1
  174. package/dist/esm/components-page/account-settings/section.js.map +1 -1
  175. package/dist/esm/components-page/account-settings/settings/delete-account-section.js.map +1 -1
  176. package/dist/esm/components-page/account-settings/settings/settings-page.js.map +1 -1
  177. package/dist/esm/components-page/account-settings/settings/sign-out-section.js.map +1 -1
  178. package/dist/esm/components-page/account-settings/teams/leave-team-section.js.map +1 -1
  179. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.d.ts +1 -1
  180. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.js.map +1 -1
  181. package/dist/esm/components-page/account-settings/teams/team-creation-page.js.map +1 -1
  182. package/dist/esm/components-page/account-settings/teams/team-display-name-section.js.map +1 -1
  183. package/dist/esm/components-page/account-settings/teams/team-member-invitation-section.js.map +1 -1
  184. package/dist/esm/components-page/account-settings/teams/team-member-list-section.js.map +1 -1
  185. package/dist/esm/components-page/account-settings/teams/team-page.js.map +1 -1
  186. package/dist/esm/components-page/account-settings/teams/team-profile-image-section.js.map +1 -1
  187. package/dist/esm/components-page/account-settings/teams/team-profile-user-section.js.map +1 -1
  188. package/dist/esm/components-page/account-settings.js.map +1 -1
  189. package/dist/esm/components-page/auth-page.d.ts.map +1 -1
  190. package/dist/esm/components-page/auth-page.js +56 -11
  191. package/dist/esm/components-page/auth-page.js.map +1 -1
  192. package/dist/esm/components-page/cli-auth-confirm.js +3 -3
  193. package/dist/esm/components-page/cli-auth-confirm.js.map +1 -1
  194. package/dist/esm/components-page/cli-auth-confirm.test.js +4 -4
  195. package/dist/esm/components-page/cli-auth-confirm.test.js.map +1 -1
  196. package/dist/esm/components-page/email-verification.js +4 -4
  197. package/dist/esm/components-page/email-verification.js.map +1 -1
  198. package/dist/esm/components-page/error-page.js +9 -9
  199. package/dist/esm/components-page/error-page.js.map +1 -1
  200. package/dist/esm/components-page/forgot-password.js +4 -4
  201. package/dist/esm/components-page/forgot-password.js.map +1 -1
  202. package/dist/esm/components-page/{stack-handler-client.d.ts → hexclave-handler-client.d.ts} +4 -4
  203. package/dist/esm/components-page/hexclave-handler-client.d.ts.map +1 -0
  204. package/dist/esm/components-page/{stack-handler-client.js → hexclave-handler-client.js} +17 -16
  205. package/dist/esm/components-page/hexclave-handler-client.js.map +1 -0
  206. package/dist/esm/components-page/{stack-handler.d.ts → hexclave-handler.d.ts} +5 -5
  207. package/dist/esm/components-page/hexclave-handler.d.ts.map +1 -0
  208. package/dist/esm/components-page/{stack-handler.js → hexclave-handler.js} +4 -4
  209. package/dist/esm/components-page/hexclave-handler.js.map +1 -0
  210. package/dist/esm/components-page/magic-link-callback.js +7 -7
  211. package/dist/esm/components-page/magic-link-callback.js.map +1 -1
  212. package/dist/esm/components-page/mfa.js +4 -4
  213. package/dist/esm/components-page/mfa.js.map +1 -1
  214. package/dist/esm/components-page/oauth-callback.js +3 -3
  215. package/dist/esm/components-page/oauth-callback.js.map +1 -1
  216. package/dist/esm/components-page/onboarding.js +3 -3
  217. package/dist/esm/components-page/onboarding.js.map +1 -1
  218. package/dist/esm/components-page/password-reset.js +8 -8
  219. package/dist/esm/components-page/password-reset.js.map +1 -1
  220. package/dist/esm/components-page/sign-in.js.map +1 -1
  221. package/dist/esm/components-page/sign-out.d.ts +1 -0
  222. package/dist/esm/components-page/sign-out.d.ts.map +1 -1
  223. package/dist/esm/components-page/sign-out.js +11 -5
  224. package/dist/esm/components-page/sign-out.js.map +1 -1
  225. package/dist/esm/components-page/sign-up.js.map +1 -1
  226. package/dist/esm/components-page/team-creation.js.map +1 -1
  227. package/dist/esm/components-page/team-invitation.js +16 -16
  228. package/dist/esm/components-page/team-invitation.js.map +1 -1
  229. package/dist/esm/dev-tool/dev-tool-core.d.ts +1 -1
  230. package/dist/esm/dev-tool/dev-tool-core.js +10 -10
  231. package/dist/esm/dev-tool/dev-tool-core.js.map +1 -1
  232. package/dist/esm/dev-tool/dev-tool-styles.d.ts +1 -1
  233. package/dist/esm/dev-tool/dev-tool-styles.js +371 -371
  234. package/dist/esm/dev-tool/dev-tool-styles.js.map +1 -1
  235. package/dist/esm/dev-tool/dev-tool-trigger-position.js.map +1 -1
  236. package/dist/esm/dev-tool/dev-tool-trigger-position.test.js.map +1 -1
  237. package/dist/esm/dev-tool/index.d.ts +4 -4
  238. package/dist/esm/dev-tool/index.js +4 -4
  239. package/dist/esm/dev-tool/index.js.map +1 -1
  240. package/dist/esm/generated/global-css.d.ts +1 -1
  241. package/dist/esm/generated/global-css.js +1 -1
  242. package/dist/esm/generated/global-css.js.map +1 -1
  243. package/dist/esm/generated/quetzal-translations.js.map +1 -1
  244. package/dist/esm/index.d.ts +4 -4
  245. package/dist/esm/index.js +3 -3
  246. package/dist/esm/integrations/convex/component/convex.config.js.map +1 -1
  247. package/dist/esm/integrations/convex.js +1 -1
  248. package/dist/esm/integrations/convex.js.map +1 -1
  249. package/dist/esm/lib/auth.js.map +1 -1
  250. package/dist/esm/lib/auth.test.js.map +1 -1
  251. package/dist/esm/lib/cookie.js +2 -2
  252. package/dist/esm/lib/cookie.js.map +1 -1
  253. package/dist/esm/lib/env.js.map +1 -1
  254. package/dist/{lib/stack-app → esm/lib/hexclave-app}/api-keys/index.d.ts +2 -2
  255. package/dist/esm/lib/hexclave-app/api-keys/index.d.ts.map +1 -0
  256. package/dist/esm/lib/{stack-app → hexclave-app}/api-keys/index.js +1 -1
  257. package/dist/esm/lib/hexclave-app/api-keys/index.js.map +1 -0
  258. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/admin-app-impl.d.ts +6 -6
  259. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts.map +1 -0
  260. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/admin-app-impl.js +7 -7
  261. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.js.map +1 -0
  262. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.cross-domain.test.js +2 -2
  263. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.js.map +1 -0
  264. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.d.ts +13 -13
  265. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.d.ts.map +1 -0
  266. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.js +23 -30
  267. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.js.map +1 -0
  268. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.oauth-prefetch.test.js +1 -1
  269. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +1 -0
  270. package/dist/{lib/stack-app → esm/lib/hexclave-app}/apps/implementations/common.d.ts +4 -4
  271. package/dist/esm/lib/hexclave-app/apps/implementations/common.d.ts.map +1 -0
  272. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/common.js +7 -7
  273. package/dist/esm/lib/hexclave-app/apps/implementations/common.js.map +1 -0
  274. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.d.ts +1 -1
  275. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.d.ts.map +1 -0
  276. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.js +1 -1
  277. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.js.map +1 -0
  278. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.test.js +1 -1
  279. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.test.js.map +1 -0
  280. package/dist/esm/lib/hexclave-app/apps/implementations/index.d.ts +9 -0
  281. package/dist/esm/lib/hexclave-app/apps/implementations/index.d.ts.map +1 -0
  282. package/dist/esm/lib/hexclave-app/apps/implementations/index.js +27 -0
  283. package/dist/esm/lib/hexclave-app/apps/implementations/index.js.map +1 -0
  284. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/redirect-page-urls.d.ts +1 -1
  285. package/dist/esm/lib/hexclave-app/apps/implementations/redirect-page-urls.d.ts.map +1 -0
  286. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/redirect-page-urls.js +1 -1
  287. package/dist/esm/lib/hexclave-app/apps/implementations/redirect-page-urls.js.map +1 -0
  288. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/server-app-impl.d.ts +4 -4
  289. package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.d.ts.map +1 -0
  290. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/server-app-impl.js +6 -6
  291. package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.js.map +1 -0
  292. package/dist/{lib/stack-app → esm/lib/hexclave-app}/apps/implementations/session-refresh-subscription.d.ts +1 -1
  293. package/dist/esm/lib/hexclave-app/apps/implementations/session-refresh-subscription.d.ts.map +1 -0
  294. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.js +1 -1
  295. package/dist/esm/lib/hexclave-app/apps/implementations/session-refresh-subscription.js.map +1 -0
  296. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.test.js +1 -1
  297. package/dist/esm/lib/hexclave-app/apps/implementations/session-refresh-subscription.test.js.map +1 -0
  298. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.d.ts +1 -1
  299. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.d.ts.map +1 -0
  300. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.js +1 -1
  301. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.js.map +1 -0
  302. package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.test.js +1 -1
  303. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.test.js.map +1 -0
  304. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/admin-app.d.ts +1 -1
  305. package/dist/esm/lib/hexclave-app/apps/interfaces/admin-app.d.ts.map +1 -0
  306. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/admin-app.js +3 -3
  307. package/dist/esm/lib/hexclave-app/apps/interfaces/admin-app.js.map +1 -0
  308. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/client-app.d.ts +4 -4
  309. package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.d.ts.map +1 -0
  310. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/client-app.js +3 -3
  311. package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.js.map +1 -0
  312. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/server-app.d.ts +1 -1
  313. package/dist/esm/lib/hexclave-app/apps/interfaces/server-app.d.ts.map +1 -0
  314. package/dist/esm/lib/{stack-app → hexclave-app}/apps/interfaces/server-app.js +3 -3
  315. package/dist/esm/lib/hexclave-app/apps/interfaces/server-app.js.map +1 -0
  316. package/dist/esm/lib/{stack-app → hexclave-app}/common.d.ts +7 -7
  317. package/dist/esm/lib/hexclave-app/common.d.ts.map +1 -0
  318. package/dist/esm/lib/hexclave-app/common.js +7 -0
  319. package/dist/esm/lib/hexclave-app/common.js.map +1 -0
  320. package/dist/esm/lib/{stack-app → hexclave-app}/connected-accounts/index.d.ts +1 -1
  321. package/dist/esm/lib/hexclave-app/connected-accounts/index.d.ts.map +1 -0
  322. package/dist/esm/lib/{stack-app → hexclave-app}/contact-channels/index.d.ts +1 -1
  323. package/dist/esm/lib/hexclave-app/contact-channels/index.d.ts.map +1 -0
  324. package/dist/esm/lib/{stack-app → hexclave-app}/contact-channels/index.js +1 -1
  325. package/dist/esm/lib/hexclave-app/contact-channels/index.js.map +1 -0
  326. package/dist/esm/lib/{stack-app → hexclave-app}/customers/index.d.ts +1 -1
  327. package/dist/esm/lib/hexclave-app/customers/index.d.ts.map +1 -0
  328. package/dist/esm/lib/{stack-app → hexclave-app}/data-vault/index.d.ts +1 -1
  329. package/dist/esm/lib/hexclave-app/data-vault/index.d.ts.map +1 -0
  330. package/dist/{lib/stack-app → esm/lib/hexclave-app}/email/index.d.ts +1 -1
  331. package/dist/esm/lib/hexclave-app/email/index.d.ts.map +1 -0
  332. package/dist/{lib/stack-app → esm/lib/hexclave-app}/email-templates/index.d.ts +1 -1
  333. package/dist/esm/lib/hexclave-app/email-templates/index.d.ts.map +1 -0
  334. package/dist/esm/lib/{stack-app → hexclave-app}/email-templates/index.js +1 -1
  335. package/dist/esm/lib/hexclave-app/email-templates/index.js.map +1 -0
  336. package/dist/esm/lib/{stack-app → hexclave-app}/index.d.ts +2 -2
  337. package/dist/esm/lib/{stack-app → hexclave-app}/index.js +2 -2
  338. package/dist/{lib/stack-app → esm/lib/hexclave-app}/internal-api-keys/index.d.ts +1 -1
  339. package/dist/esm/lib/hexclave-app/internal-api-keys/index.d.ts.map +1 -0
  340. package/dist/esm/lib/{stack-app → hexclave-app}/internal-api-keys/index.js +1 -1
  341. package/dist/esm/lib/hexclave-app/internal-api-keys/index.js.map +1 -0
  342. package/dist/{lib/stack-app → esm/lib/hexclave-app}/notification-categories/index.d.ts +1 -1
  343. package/dist/esm/lib/hexclave-app/notification-categories/index.d.ts.map +1 -0
  344. package/dist/{lib/stack-app → esm/lib/hexclave-app}/permissions/index.d.ts +1 -1
  345. package/dist/esm/lib/hexclave-app/permissions/index.d.ts.map +1 -0
  346. package/dist/esm/lib/{stack-app → hexclave-app}/permissions/index.js +1 -1
  347. package/dist/esm/lib/hexclave-app/permissions/index.js.map +1 -0
  348. package/dist/esm/lib/{stack-app → hexclave-app}/project-configs/index.d.ts +1 -1
  349. package/dist/esm/lib/hexclave-app/project-configs/index.d.ts.map +1 -0
  350. package/dist/esm/lib/{stack-app → hexclave-app}/projects/index.d.ts +1 -1
  351. package/dist/esm/lib/hexclave-app/projects/index.d.ts.map +1 -0
  352. package/dist/esm/lib/{stack-app → hexclave-app}/projects/index.js +1 -1
  353. package/dist/esm/lib/hexclave-app/projects/index.js.map +1 -0
  354. package/dist/{lib/stack-app → esm/lib/hexclave-app}/session-replays/index.d.ts +1 -1
  355. package/dist/esm/lib/hexclave-app/session-replays/index.d.ts.map +1 -0
  356. package/dist/esm/lib/{stack-app → hexclave-app}/teams/index.d.ts +1 -1
  357. package/dist/esm/lib/hexclave-app/teams/index.d.ts.map +1 -0
  358. package/dist/esm/lib/{stack-app → hexclave-app}/teams/index.js +1 -1
  359. package/dist/esm/lib/hexclave-app/teams/index.js.map +1 -0
  360. package/dist/esm/lib/{stack-app → hexclave-app}/url-targets.d.ts +1 -1
  361. package/dist/esm/lib/hexclave-app/url-targets.d.ts.map +1 -0
  362. package/dist/esm/lib/{stack-app → hexclave-app}/url-targets.js +2 -2
  363. package/dist/esm/lib/hexclave-app/url-targets.js.map +1 -0
  364. package/dist/esm/lib/{stack-app → hexclave-app}/url-targets.test.js +1 -1
  365. package/dist/esm/lib/hexclave-app/url-targets.test.js.map +1 -0
  366. package/dist/esm/lib/{stack-app → hexclave-app}/users/index.d.ts +1 -1
  367. package/dist/esm/lib/hexclave-app/users/index.d.ts.map +1 -0
  368. package/dist/esm/lib/{stack-app → hexclave-app}/users/index.js +1 -1
  369. package/dist/esm/lib/hexclave-app/users/index.js.map +1 -0
  370. package/dist/esm/lib/hooks.d.ts +1 -1
  371. package/dist/esm/lib/hooks.js +9 -9
  372. package/dist/esm/lib/hooks.js.map +1 -1
  373. package/dist/esm/lib/translations.js.map +1 -1
  374. package/dist/esm/providers/hexclave-context.d.ts +11 -0
  375. package/dist/esm/providers/hexclave-context.d.ts.map +1 -0
  376. package/dist/esm/providers/hexclave-context.js +12 -0
  377. package/dist/esm/providers/hexclave-context.js.map +1 -0
  378. package/dist/esm/providers/{stack-provider-client.d.ts → hexclave-provider-client.d.ts} +5 -5
  379. package/dist/esm/providers/hexclave-provider-client.d.ts.map +1 -0
  380. package/dist/esm/providers/hexclave-provider-client.js +30 -0
  381. package/dist/esm/providers/hexclave-provider-client.js.map +1 -0
  382. package/dist/esm/providers/{stack-provider.d.ts → hexclave-provider.d.ts} +3 -3
  383. package/dist/esm/providers/hexclave-provider.d.ts.map +1 -0
  384. package/dist/esm/providers/{stack-provider.js → hexclave-provider.js} +6 -6
  385. package/dist/esm/providers/hexclave-provider.js.map +1 -0
  386. package/dist/esm/providers/theme-provider.js.map +1 -1
  387. package/dist/esm/providers/translation-provider-client.js.map +1 -1
  388. package/dist/esm/providers/translation-provider.js.map +1 -1
  389. package/dist/esm/tanstack-start-server-context.d.ts +1 -1
  390. package/dist/esm/utils/browser-script.js.map +1 -1
  391. package/dist/esm/utils/constants.js.map +1 -1
  392. package/dist/esm/utils/url.js.map +1 -1
  393. package/dist/generated/global-css.d.ts +1 -1
  394. package/dist/generated/global-css.js +1 -1
  395. package/dist/generated/global-css.js.map +1 -1
  396. package/dist/generated/quetzal-translations.js.map +1 -1
  397. package/dist/index.d.ts +18 -18
  398. package/dist/index.js +9 -9
  399. package/dist/integrations/convex/component/convex.config.d.ts +2 -2
  400. package/dist/integrations/convex/component/convex.config.d.ts.map +1 -1
  401. package/dist/integrations/convex/component/convex.config.js.map +1 -1
  402. package/dist/integrations/convex.js +2 -2
  403. package/dist/integrations/convex.js.map +1 -1
  404. package/dist/lib/auth.js.map +1 -1
  405. package/dist/lib/auth.test.js.map +1 -1
  406. package/dist/lib/cookie.js +2 -2
  407. package/dist/lib/cookie.js.map +1 -1
  408. package/dist/lib/env.js.map +1 -1
  409. package/dist/{esm/lib/stack-app → lib/hexclave-app}/api-keys/index.d.ts +2 -2
  410. package/dist/{esm/lib/stack-app → lib/hexclave-app}/api-keys/index.d.ts.map +1 -1
  411. package/dist/lib/{stack-app → hexclave-app}/api-keys/index.js +1 -1
  412. package/dist/lib/hexclave-app/api-keys/index.js.map +1 -0
  413. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/admin-app-impl.d.ts +6 -6
  414. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts.map +1 -0
  415. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/admin-app-impl.js +5 -5
  416. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.js.map +1 -0
  417. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.cross-domain.test.js +2 -2
  418. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.js.map +1 -0
  419. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.d.ts +13 -13
  420. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.d.ts.map +1 -0
  421. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.js +22 -29
  422. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.js.map +1 -0
  423. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.oauth-prefetch.test.js +1 -1
  424. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +1 -0
  425. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/common.d.ts +4 -4
  426. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/common.d.ts.map +1 -1
  427. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/common.js +6 -6
  428. package/dist/lib/hexclave-app/apps/implementations/common.js.map +1 -0
  429. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.d.ts +1 -1
  430. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/event-tracker.d.ts.map +1 -1
  431. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.js +1 -1
  432. package/dist/lib/hexclave-app/apps/implementations/event-tracker.js.map +1 -0
  433. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.test.js +1 -1
  434. package/dist/lib/hexclave-app/apps/implementations/event-tracker.test.js.map +1 -0
  435. package/dist/lib/hexclave-app/apps/implementations/index.d.ts +9 -0
  436. package/dist/lib/hexclave-app/apps/implementations/index.d.ts.map +1 -0
  437. package/dist/lib/hexclave-app/apps/implementations/index.js +31 -0
  438. package/dist/lib/hexclave-app/apps/implementations/index.js.map +1 -0
  439. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/redirect-page-urls.d.ts +1 -1
  440. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/redirect-page-urls.d.ts.map +1 -1
  441. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/redirect-page-urls.js +1 -1
  442. package/dist/lib/hexclave-app/apps/implementations/redirect-page-urls.js.map +1 -0
  443. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/server-app-impl.d.ts +4 -4
  444. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/server-app-impl.d.ts.map +1 -1
  445. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/server-app-impl.js +5 -5
  446. package/dist/lib/hexclave-app/apps/implementations/server-app-impl.js.map +1 -0
  447. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/session-refresh-subscription.d.ts +1 -1
  448. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/session-refresh-subscription.d.ts.map +1 -1
  449. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.js +1 -1
  450. package/dist/lib/hexclave-app/apps/implementations/session-refresh-subscription.js.map +1 -0
  451. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.test.js +1 -1
  452. package/dist/lib/hexclave-app/apps/implementations/session-refresh-subscription.test.js.map +1 -0
  453. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.d.ts +1 -1
  454. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/implementations/session-replay.d.ts.map +1 -1
  455. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.js +1 -1
  456. package/dist/lib/hexclave-app/apps/implementations/session-replay.js.map +1 -0
  457. package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.test.js +1 -1
  458. package/dist/lib/hexclave-app/apps/implementations/session-replay.test.js.map +1 -0
  459. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/admin-app.d.ts +1 -1
  460. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/interfaces/admin-app.d.ts.map +1 -1
  461. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/admin-app.js +2 -2
  462. package/dist/lib/hexclave-app/apps/interfaces/admin-app.js.map +1 -0
  463. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/client-app.d.ts +4 -4
  464. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/interfaces/client-app.d.ts.map +1 -1
  465. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/client-app.js +2 -2
  466. package/dist/lib/hexclave-app/apps/interfaces/client-app.js.map +1 -0
  467. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/server-app.d.ts +2 -2
  468. package/dist/{esm/lib/stack-app → lib/hexclave-app}/apps/interfaces/server-app.d.ts.map +1 -1
  469. package/dist/lib/{stack-app → hexclave-app}/apps/interfaces/server-app.js +2 -2
  470. package/dist/lib/hexclave-app/apps/interfaces/server-app.js.map +1 -0
  471. package/dist/lib/{stack-app → hexclave-app}/common.d.ts +8 -8
  472. package/dist/{esm/lib/stack-app → lib/hexclave-app}/common.d.ts.map +1 -1
  473. package/dist/lib/hexclave-app/common.js +9 -0
  474. package/dist/lib/hexclave-app/common.js.map +1 -0
  475. package/dist/lib/{stack-app → hexclave-app}/connected-accounts/index.d.ts +1 -1
  476. package/dist/{esm/lib/stack-app → lib/hexclave-app}/connected-accounts/index.d.ts.map +1 -1
  477. package/dist/lib/{stack-app → hexclave-app}/contact-channels/index.d.ts +1 -1
  478. package/dist/{esm/lib/stack-app → lib/hexclave-app}/contact-channels/index.d.ts.map +1 -1
  479. package/dist/lib/{stack-app → hexclave-app}/contact-channels/index.js +1 -1
  480. package/dist/lib/hexclave-app/contact-channels/index.js.map +1 -0
  481. package/dist/lib/{stack-app → hexclave-app}/customers/index.d.ts +1 -1
  482. package/dist/{esm/lib/stack-app → lib/hexclave-app}/customers/index.d.ts.map +1 -1
  483. package/dist/lib/{stack-app → hexclave-app}/data-vault/index.d.ts +1 -1
  484. package/dist/{esm/lib/stack-app → lib/hexclave-app}/data-vault/index.d.ts.map +1 -1
  485. package/dist/{esm/lib/stack-app → lib/hexclave-app}/email/index.d.ts +1 -1
  486. package/dist/{esm/lib/stack-app → lib/hexclave-app}/email/index.d.ts.map +1 -1
  487. package/dist/{esm/lib/stack-app → lib/hexclave-app}/email-templates/index.d.ts +1 -1
  488. package/dist/{esm/lib/stack-app → lib/hexclave-app}/email-templates/index.d.ts.map +1 -1
  489. package/dist/lib/{stack-app → hexclave-app}/email-templates/index.js +1 -1
  490. package/dist/lib/hexclave-app/email-templates/index.js.map +1 -0
  491. package/dist/lib/{stack-app → hexclave-app}/index.d.ts +2 -2
  492. package/dist/lib/{stack-app → hexclave-app}/index.js +2 -2
  493. package/dist/{esm/lib/stack-app → lib/hexclave-app}/internal-api-keys/index.d.ts +1 -1
  494. package/dist/{esm/lib/stack-app → lib/hexclave-app}/internal-api-keys/index.d.ts.map +1 -1
  495. package/dist/lib/{stack-app → hexclave-app}/internal-api-keys/index.js +1 -1
  496. package/dist/lib/hexclave-app/internal-api-keys/index.js.map +1 -0
  497. package/dist/{esm/lib/stack-app → lib/hexclave-app}/notification-categories/index.d.ts +1 -1
  498. package/dist/{esm/lib/stack-app → lib/hexclave-app}/notification-categories/index.d.ts.map +1 -1
  499. package/dist/{esm/lib/stack-app → lib/hexclave-app}/permissions/index.d.ts +1 -1
  500. package/dist/{esm/lib/stack-app → lib/hexclave-app}/permissions/index.d.ts.map +1 -1
  501. package/dist/lib/{stack-app → hexclave-app}/permissions/index.js +1 -1
  502. package/dist/lib/hexclave-app/permissions/index.js.map +1 -0
  503. package/dist/lib/{stack-app → hexclave-app}/project-configs/index.d.ts +1 -1
  504. package/dist/{esm/lib/stack-app → lib/hexclave-app}/project-configs/index.d.ts.map +1 -1
  505. package/dist/lib/{stack-app → hexclave-app}/projects/index.d.ts +1 -1
  506. package/dist/{esm/lib/stack-app → lib/hexclave-app}/projects/index.d.ts.map +1 -1
  507. package/dist/lib/{stack-app → hexclave-app}/projects/index.js +1 -1
  508. package/dist/lib/hexclave-app/projects/index.js.map +1 -0
  509. package/dist/{esm/lib/stack-app → lib/hexclave-app}/session-replays/index.d.ts +1 -1
  510. package/dist/{esm/lib/stack-app → lib/hexclave-app}/session-replays/index.d.ts.map +1 -1
  511. package/dist/lib/{stack-app → hexclave-app}/teams/index.d.ts +1 -1
  512. package/dist/{esm/lib/stack-app → lib/hexclave-app}/teams/index.d.ts.map +1 -1
  513. package/dist/lib/{stack-app → hexclave-app}/teams/index.js +1 -1
  514. package/dist/lib/hexclave-app/teams/index.js.map +1 -0
  515. package/dist/lib/{stack-app → hexclave-app}/url-targets.d.ts +1 -1
  516. package/dist/{esm/lib/stack-app → lib/hexclave-app}/url-targets.d.ts.map +1 -1
  517. package/dist/lib/{stack-app → hexclave-app}/url-targets.js +2 -2
  518. package/dist/lib/hexclave-app/url-targets.js.map +1 -0
  519. package/dist/lib/{stack-app → hexclave-app}/url-targets.test.js +1 -1
  520. package/dist/lib/hexclave-app/url-targets.test.js.map +1 -0
  521. package/dist/lib/{stack-app → hexclave-app}/users/index.d.ts +1 -1
  522. package/dist/{esm/lib/stack-app → lib/hexclave-app}/users/index.d.ts.map +1 -1
  523. package/dist/lib/{stack-app → hexclave-app}/users/index.js +1 -1
  524. package/dist/lib/hexclave-app/users/index.js.map +1 -0
  525. package/dist/lib/hooks.d.ts +3 -3
  526. package/dist/lib/hooks.d.ts.map +1 -1
  527. package/dist/lib/hooks.js +9 -9
  528. package/dist/lib/hooks.js.map +1 -1
  529. package/dist/lib/translations.js.map +1 -1
  530. package/dist/providers/hexclave-context.d.ts +11 -0
  531. package/dist/providers/hexclave-context.d.ts.map +1 -0
  532. package/dist/providers/hexclave-context.js +15 -0
  533. package/dist/providers/hexclave-context.js.map +1 -0
  534. package/dist/providers/{stack-provider-client.d.ts → hexclave-provider-client.d.ts} +5 -5
  535. package/dist/providers/hexclave-provider-client.d.ts.map +1 -0
  536. package/dist/providers/{stack-provider-client.js → hexclave-provider-client.js} +9 -9
  537. package/dist/providers/hexclave-provider-client.js.map +1 -0
  538. package/dist/providers/{stack-provider.d.ts → hexclave-provider.d.ts} +5 -5
  539. package/dist/providers/hexclave-provider.d.ts.map +1 -0
  540. package/dist/providers/{stack-provider.js → hexclave-provider.js} +6 -6
  541. package/dist/providers/hexclave-provider.js.map +1 -0
  542. package/dist/providers/theme-provider.js.map +1 -1
  543. package/dist/providers/translation-provider-client.js.map +1 -1
  544. package/dist/providers/translation-provider.js.map +1 -1
  545. package/dist/{storage-kTmOAWHW.d.ts → storage-CKzvsBxG.d.ts} +18 -18
  546. package/dist/{storage-kTmOAWHW.d.ts.map → storage-CKzvsBxG.d.ts.map} +1 -1
  547. package/dist/tanstack-start-server-context.d.ts +1 -1
  548. package/dist/utils/browser-script.js.map +1 -1
  549. package/dist/utils/constants.js.map +1 -1
  550. package/dist/utils/url.js.map +1 -1
  551. package/package.json +6 -5
  552. package/src/components/api-key-dialogs.tsx +173 -0
  553. package/src/components/api-key-table.tsx +127 -0
  554. package/src/components/credential-sign-in.tsx +83 -0
  555. package/src/components/credential-sign-up.tsx +108 -0
  556. package/src/components/elements/form-warning.tsx +17 -0
  557. package/src/components/elements/maybe-full-page.tsx +60 -0
  558. package/src/components/elements/separator-with-text.tsx +22 -0
  559. package/src/components/elements/sidebar-layout.tsx +136 -0
  560. package/src/components/elements/ssr-layout-effect.tsx +24 -0
  561. package/src/components/elements/user-avatar.tsx +32 -0
  562. package/src/components/link.tsx +40 -0
  563. package/src/components/magic-link-sign-in.tsx +143 -0
  564. package/src/components/message-cards/known-error-message-card.tsx +33 -0
  565. package/src/components/message-cards/message-card.tsx +46 -0
  566. package/src/components/message-cards/predefined-message-card.tsx +88 -0
  567. package/src/components/oauth-button-group.tsx +35 -0
  568. package/src/components/oauth-button.tsx +222 -0
  569. package/src/components/passkey-button.tsx +43 -0
  570. package/src/components/profile-image-editor.tsx +194 -0
  571. package/src/components/selected-team-switcher.tsx +97 -0
  572. package/src/components/team-icon.tsx +30 -0
  573. package/src/components/team-switcher.tsx +191 -0
  574. package/src/components/use-in-iframe.tsx +18 -0
  575. package/src/components/user-button.tsx +157 -0
  576. package/src/components-page/account-settings/active-sessions/active-sessions-page.tsx +238 -0
  577. package/src/components-page/account-settings/api-keys/api-keys-page.tsx +157 -0
  578. package/src/components-page/account-settings/editable-text.tsx +53 -0
  579. package/src/components-page/account-settings/email-and-auth/email-and-auth-page.tsx +24 -0
  580. package/src/components-page/account-settings/email-and-auth/emails-section.tsx +201 -0
  581. package/src/components-page/account-settings/email-and-auth/mfa-section.tsx +139 -0
  582. package/src/components-page/account-settings/email-and-auth/otp-section.tsx +102 -0
  583. package/src/components-page/account-settings/email-and-auth/passkey-section.tsx +112 -0
  584. package/src/components-page/account-settings/email-and-auth/password-section.tsx +174 -0
  585. package/src/components-page/account-settings/notifications/notifications-page.tsx +44 -0
  586. package/src/components-page/account-settings/page-layout.tsx +11 -0
  587. package/src/components-page/account-settings/payments/payments-page.tsx +73 -0
  588. package/src/components-page/account-settings/payments/payments-panel.tsx +543 -0
  589. package/src/components-page/account-settings/profile-page/profile-page.tsx +61 -0
  590. package/src/components-page/account-settings/section.tsx +26 -0
  591. package/src/components-page/account-settings/settings/delete-account-section.tsx +85 -0
  592. package/src/components-page/account-settings/settings/settings-page.tsx +19 -0
  593. package/src/components-page/account-settings/settings/sign-out-section.tsx +40 -0
  594. package/src/components-page/account-settings/teams/leave-team-section.tsx +57 -0
  595. package/src/components-page/account-settings/teams/team-api-keys-section.tsx +74 -0
  596. package/src/components-page/account-settings/teams/team-creation-page.tsx +92 -0
  597. package/src/components-page/account-settings/teams/team-display-name-section.tsx +31 -0
  598. package/src/components-page/account-settings/teams/team-member-invitation-section.tsx +128 -0
  599. package/src/components-page/account-settings/teams/team-member-list-section.tsx +59 -0
  600. package/src/components-page/account-settings/teams/team-page.tsx +28 -0
  601. package/src/components-page/account-settings/teams/team-profile-image-section.tsx +33 -0
  602. package/src/components-page/account-settings/teams/team-profile-user-section.tsx +29 -0
  603. package/src/components-page/account-settings.tsx +343 -0
  604. package/src/components-page/auth-page.tsx +206 -0
  605. package/src/components-page/cli-auth-confirm.test.tsx +204 -0
  606. package/src/components-page/cli-auth-confirm.tsx +278 -0
  607. package/src/components-page/email-verification.tsx +76 -0
  608. package/src/components-page/error-page.tsx +105 -0
  609. package/src/components-page/forgot-password.tsx +105 -0
  610. package/src/components-page/hexclave-handler-client.tsx +325 -0
  611. package/src/components-page/hexclave-handler.tsx +48 -0
  612. package/src/components-page/magic-link-callback.tsx +92 -0
  613. package/src/components-page/mfa.tsx +222 -0
  614. package/src/components-page/oauth-callback.tsx +78 -0
  615. package/src/components-page/onboarding.tsx +176 -0
  616. package/src/components-page/password-reset.tsx +185 -0
  617. package/src/components-page/section.tsx +27 -0
  618. package/src/components-page/sign-in.tsx +34 -0
  619. package/src/components-page/sign-out.tsx +37 -0
  620. package/src/components-page/sign-up.tsx +24 -0
  621. package/src/components-page/team-creation.tsx +78 -0
  622. package/src/components-page/team-invitation.tsx +150 -0
  623. package/src/dev-tool/dev-tool-core.ts +2460 -0
  624. package/src/dev-tool/dev-tool-styles.ts +2758 -0
  625. package/src/dev-tool/dev-tool-trigger-position.test.ts +113 -0
  626. package/src/dev-tool/dev-tool-trigger-position.ts +109 -0
  627. package/src/dev-tool/index.ts +149 -0
  628. package/src/generated/.gitignore +3 -0
  629. package/src/generated/quetzal-translations.ts +4312 -0
  630. package/src/global.css +13 -0
  631. package/src/global.d.ts +5 -0
  632. package/src/index.ts +39 -0
  633. package/src/integrations/convex/component/README.md +74 -0
  634. package/src/integrations/convex/component/convex.config.ts +9 -0
  635. package/src/integrations/convex.ts +28 -0
  636. package/src/lib/auth.test.ts +67 -0
  637. package/src/lib/auth.ts +175 -0
  638. package/src/lib/cookie.ts +421 -0
  639. package/src/lib/env.ts +93 -0
  640. package/src/lib/hexclave-app/api-keys/index.ts +73 -0
  641. package/src/lib/hexclave-app/apps/implementations/admin-app-impl.ts +1261 -0
  642. package/src/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.ts +141 -0
  643. package/src/lib/hexclave-app/apps/implementations/client-app-impl.oauth-prefetch.test.ts +36 -0
  644. package/src/lib/hexclave-app/apps/implementations/client-app-impl.ts +3912 -0
  645. package/src/lib/hexclave-app/apps/implementations/common.ts +244 -0
  646. package/src/lib/hexclave-app/apps/implementations/event-tracker.test.ts +105 -0
  647. package/src/lib/hexclave-app/apps/implementations/event-tracker.ts +306 -0
  648. package/src/lib/hexclave-app/apps/implementations/index.ts +35 -0
  649. package/src/lib/hexclave-app/apps/implementations/redirect-page-urls.ts +342 -0
  650. package/src/lib/hexclave-app/apps/implementations/server-app-impl.ts +1619 -0
  651. package/src/lib/hexclave-app/apps/implementations/session-refresh-subscription.test.ts +106 -0
  652. package/src/lib/hexclave-app/apps/implementations/session-refresh-subscription.ts +52 -0
  653. package/src/lib/hexclave-app/apps/implementations/session-replay.test.ts +33 -0
  654. package/src/lib/hexclave-app/apps/implementations/session-replay.ts +356 -0
  655. package/src/lib/hexclave-app/apps/index.ts +40 -0
  656. package/src/lib/hexclave-app/apps/interfaces/admin-app.ts +192 -0
  657. package/src/lib/hexclave-app/apps/interfaces/client-app.ts +180 -0
  658. package/src/lib/hexclave-app/apps/interfaces/server-app.ts +129 -0
  659. package/src/lib/hexclave-app/common.ts +216 -0
  660. package/src/lib/hexclave-app/connected-accounts/index.ts +49 -0
  661. package/src/lib/hexclave-app/contact-channels/index.ts +80 -0
  662. package/src/lib/hexclave-app/customers/index.ts +158 -0
  663. package/src/lib/hexclave-app/data-vault/index.ts +12 -0
  664. package/src/lib/hexclave-app/email/index.ts +280 -0
  665. package/src/lib/hexclave-app/email-templates/index.ts +24 -0
  666. package/src/lib/hexclave-app/index.ts +146 -0
  667. package/src/lib/hexclave-app/internal-api-keys/index.ts +55 -0
  668. package/src/lib/hexclave-app/notification-categories/index.ts +12 -0
  669. package/src/lib/hexclave-app/permissions/index.ts +75 -0
  670. package/src/lib/hexclave-app/project-configs/index.ts +103 -0
  671. package/src/lib/hexclave-app/projects/index.ts +236 -0
  672. package/src/lib/hexclave-app/session-replays/index.ts +72 -0
  673. package/src/lib/hexclave-app/teams/index.ts +206 -0
  674. package/src/lib/hexclave-app/url-targets.test.ts +253 -0
  675. package/src/lib/hexclave-app/url-targets.ts +395 -0
  676. package/src/lib/hexclave-app/users/index.ts +523 -0
  677. package/src/lib/hooks.tsx +63 -0
  678. package/src/lib/translations.tsx +23 -0
  679. package/src/providers/hexclave-context.tsx +20 -0
  680. package/src/providers/hexclave-provider-client.tsx +39 -0
  681. package/src/providers/hexclave-provider.tsx +48 -0
  682. package/src/providers/theme-provider.tsx +121 -0
  683. package/src/providers/translation-provider-client.tsx +35 -0
  684. package/src/providers/translation-provider.tsx +25 -0
  685. package/src/tanstack-start-server-context.d.ts +13 -0
  686. package/src/utils/browser-script.tsx +135 -0
  687. package/src/utils/constants.tsx +58 -0
  688. package/src/utils/url.ts +24 -0
  689. package/dist/components-page/stack-handler-client.d.ts.map +0 -1
  690. package/dist/components-page/stack-handler-client.js.map +0 -1
  691. package/dist/components-page/stack-handler.d.ts.map +0 -1
  692. package/dist/components-page/stack-handler.js.map +0 -1
  693. package/dist/esm/components-page/stack-handler-client.d.ts.map +0 -1
  694. package/dist/esm/components-page/stack-handler-client.js.map +0 -1
  695. package/dist/esm/components-page/stack-handler.d.ts.map +0 -1
  696. package/dist/esm/components-page/stack-handler.js.map +0 -1
  697. package/dist/esm/lib/stack-app/api-keys/index.js.map +0 -1
  698. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.d.ts.map +0 -1
  699. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js.map +0 -1
  700. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.cross-domain.test.js.map +0 -1
  701. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.d.ts.map +0 -1
  702. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js.map +0 -1
  703. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +0 -1
  704. package/dist/esm/lib/stack-app/apps/implementations/common.js.map +0 -1
  705. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.js.map +0 -1
  706. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.test.js.map +0 -1
  707. package/dist/esm/lib/stack-app/apps/implementations/index.d.ts +0 -9
  708. package/dist/esm/lib/stack-app/apps/implementations/index.d.ts.map +0 -1
  709. package/dist/esm/lib/stack-app/apps/implementations/index.js +0 -27
  710. package/dist/esm/lib/stack-app/apps/implementations/index.js.map +0 -1
  711. package/dist/esm/lib/stack-app/apps/implementations/redirect-page-urls.js.map +0 -1
  712. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js.map +0 -1
  713. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.js.map +0 -1
  714. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.test.js.map +0 -1
  715. package/dist/esm/lib/stack-app/apps/implementations/session-replay.js.map +0 -1
  716. package/dist/esm/lib/stack-app/apps/implementations/session-replay.test.js.map +0 -1
  717. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.js.map +0 -1
  718. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js.map +0 -1
  719. package/dist/esm/lib/stack-app/apps/interfaces/server-app.js.map +0 -1
  720. package/dist/esm/lib/stack-app/common.js +0 -7
  721. package/dist/esm/lib/stack-app/common.js.map +0 -1
  722. package/dist/esm/lib/stack-app/contact-channels/index.js.map +0 -1
  723. package/dist/esm/lib/stack-app/email-templates/index.js.map +0 -1
  724. package/dist/esm/lib/stack-app/internal-api-keys/index.js.map +0 -1
  725. package/dist/esm/lib/stack-app/permissions/index.js.map +0 -1
  726. package/dist/esm/lib/stack-app/projects/index.js.map +0 -1
  727. package/dist/esm/lib/stack-app/teams/index.js.map +0 -1
  728. package/dist/esm/lib/stack-app/url-targets.js.map +0 -1
  729. package/dist/esm/lib/stack-app/url-targets.test.js.map +0 -1
  730. package/dist/esm/lib/stack-app/users/index.js.map +0 -1
  731. package/dist/esm/providers/stack-context.d.ts +0 -11
  732. package/dist/esm/providers/stack-context.d.ts.map +0 -1
  733. package/dist/esm/providers/stack-context.js +0 -12
  734. package/dist/esm/providers/stack-context.js.map +0 -1
  735. package/dist/esm/providers/stack-provider-client.d.ts.map +0 -1
  736. package/dist/esm/providers/stack-provider-client.js +0 -30
  737. package/dist/esm/providers/stack-provider-client.js.map +0 -1
  738. package/dist/esm/providers/stack-provider.d.ts.map +0 -1
  739. package/dist/esm/providers/stack-provider.js.map +0 -1
  740. package/dist/lib/stack-app/api-keys/index.d.ts.map +0 -1
  741. package/dist/lib/stack-app/api-keys/index.js.map +0 -1
  742. package/dist/lib/stack-app/apps/implementations/admin-app-impl.d.ts.map +0 -1
  743. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js.map +0 -1
  744. package/dist/lib/stack-app/apps/implementations/client-app-impl.cross-domain.test.js.map +0 -1
  745. package/dist/lib/stack-app/apps/implementations/client-app-impl.d.ts.map +0 -1
  746. package/dist/lib/stack-app/apps/implementations/client-app-impl.js.map +0 -1
  747. package/dist/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +0 -1
  748. package/dist/lib/stack-app/apps/implementations/common.d.ts.map +0 -1
  749. package/dist/lib/stack-app/apps/implementations/common.js.map +0 -1
  750. package/dist/lib/stack-app/apps/implementations/event-tracker.d.ts.map +0 -1
  751. package/dist/lib/stack-app/apps/implementations/event-tracker.js.map +0 -1
  752. package/dist/lib/stack-app/apps/implementations/event-tracker.test.js.map +0 -1
  753. package/dist/lib/stack-app/apps/implementations/index.d.ts +0 -9
  754. package/dist/lib/stack-app/apps/implementations/index.d.ts.map +0 -1
  755. package/dist/lib/stack-app/apps/implementations/index.js +0 -31
  756. package/dist/lib/stack-app/apps/implementations/index.js.map +0 -1
  757. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.d.ts.map +0 -1
  758. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.js.map +0 -1
  759. package/dist/lib/stack-app/apps/implementations/server-app-impl.d.ts.map +0 -1
  760. package/dist/lib/stack-app/apps/implementations/server-app-impl.js.map +0 -1
  761. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.d.ts.map +0 -1
  762. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.js.map +0 -1
  763. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.test.js.map +0 -1
  764. package/dist/lib/stack-app/apps/implementations/session-replay.d.ts.map +0 -1
  765. package/dist/lib/stack-app/apps/implementations/session-replay.js.map +0 -1
  766. package/dist/lib/stack-app/apps/implementations/session-replay.test.js.map +0 -1
  767. package/dist/lib/stack-app/apps/interfaces/admin-app.d.ts.map +0 -1
  768. package/dist/lib/stack-app/apps/interfaces/admin-app.js.map +0 -1
  769. package/dist/lib/stack-app/apps/interfaces/client-app.d.ts.map +0 -1
  770. package/dist/lib/stack-app/apps/interfaces/client-app.js.map +0 -1
  771. package/dist/lib/stack-app/apps/interfaces/server-app.d.ts.map +0 -1
  772. package/dist/lib/stack-app/apps/interfaces/server-app.js.map +0 -1
  773. package/dist/lib/stack-app/common.d.ts.map +0 -1
  774. package/dist/lib/stack-app/common.js +0 -9
  775. package/dist/lib/stack-app/common.js.map +0 -1
  776. package/dist/lib/stack-app/connected-accounts/index.d.ts.map +0 -1
  777. package/dist/lib/stack-app/contact-channels/index.d.ts.map +0 -1
  778. package/dist/lib/stack-app/contact-channels/index.js.map +0 -1
  779. package/dist/lib/stack-app/customers/index.d.ts.map +0 -1
  780. package/dist/lib/stack-app/data-vault/index.d.ts.map +0 -1
  781. package/dist/lib/stack-app/email/index.d.ts.map +0 -1
  782. package/dist/lib/stack-app/email-templates/index.d.ts.map +0 -1
  783. package/dist/lib/stack-app/email-templates/index.js.map +0 -1
  784. package/dist/lib/stack-app/internal-api-keys/index.d.ts.map +0 -1
  785. package/dist/lib/stack-app/internal-api-keys/index.js.map +0 -1
  786. package/dist/lib/stack-app/notification-categories/index.d.ts.map +0 -1
  787. package/dist/lib/stack-app/permissions/index.d.ts.map +0 -1
  788. package/dist/lib/stack-app/permissions/index.js.map +0 -1
  789. package/dist/lib/stack-app/project-configs/index.d.ts.map +0 -1
  790. package/dist/lib/stack-app/projects/index.d.ts.map +0 -1
  791. package/dist/lib/stack-app/projects/index.js.map +0 -1
  792. package/dist/lib/stack-app/session-replays/index.d.ts.map +0 -1
  793. package/dist/lib/stack-app/teams/index.d.ts.map +0 -1
  794. package/dist/lib/stack-app/teams/index.js.map +0 -1
  795. package/dist/lib/stack-app/url-targets.d.ts.map +0 -1
  796. package/dist/lib/stack-app/url-targets.js.map +0 -1
  797. package/dist/lib/stack-app/url-targets.test.js.map +0 -1
  798. package/dist/lib/stack-app/users/index.d.ts.map +0 -1
  799. package/dist/lib/stack-app/users/index.js.map +0 -1
  800. package/dist/providers/stack-context.d.ts +0 -11
  801. package/dist/providers/stack-context.d.ts.map +0 -1
  802. package/dist/providers/stack-context.js +0 -15
  803. package/dist/providers/stack-context.js.map +0 -1
  804. package/dist/providers/stack-provider-client.d.ts.map +0 -1
  805. package/dist/providers/stack-provider-client.js.map +0 -1
  806. package/dist/providers/stack-provider.d.ts.map +0 -1
  807. package/dist/providers/stack-provider.js.map +0 -1
  808. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.cross-domain.test.d.ts +0 -0
  809. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.oauth-prefetch.test.d.ts +0 -0
  810. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.test.d.ts +0 -0
  811. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.test.d.ts +0 -0
  812. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.test.d.ts +0 -0
  813. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/index.d.ts +0 -0
  814. /package/dist/esm/lib/{stack-app → hexclave-app}/apps/index.js +0 -0
  815. /package/dist/esm/lib/{stack-app → hexclave-app}/connected-accounts/index.js +0 -0
  816. /package/dist/esm/lib/{stack-app → hexclave-app}/customers/index.js +0 -0
  817. /package/dist/esm/lib/{stack-app → hexclave-app}/data-vault/index.js +0 -0
  818. /package/dist/esm/lib/{stack-app → hexclave-app}/email/index.js +0 -0
  819. /package/dist/esm/lib/{stack-app → hexclave-app}/notification-categories/index.js +0 -0
  820. /package/dist/esm/lib/{stack-app → hexclave-app}/project-configs/index.js +0 -0
  821. /package/dist/esm/lib/{stack-app → hexclave-app}/session-replays/index.js +0 -0
  822. /package/dist/esm/lib/{stack-app → hexclave-app}/url-targets.test.d.ts +0 -0
  823. /package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.cross-domain.test.d.ts +0 -0
  824. /package/dist/lib/{stack-app → hexclave-app}/apps/implementations/client-app-impl.oauth-prefetch.test.d.ts +0 -0
  825. /package/dist/lib/{stack-app → hexclave-app}/apps/implementations/event-tracker.test.d.ts +0 -0
  826. /package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-refresh-subscription.test.d.ts +0 -0
  827. /package/dist/lib/{stack-app → hexclave-app}/apps/implementations/session-replay.test.d.ts +0 -0
  828. /package/dist/lib/{stack-app → hexclave-app}/apps/index.d.ts +0 -0
  829. /package/dist/lib/{stack-app → hexclave-app}/apps/index.js +0 -0
  830. /package/dist/lib/{stack-app → hexclave-app}/connected-accounts/index.js +0 -0
  831. /package/dist/lib/{stack-app → hexclave-app}/customers/index.js +0 -0
  832. /package/dist/lib/{stack-app → hexclave-app}/data-vault/index.js +0 -0
  833. /package/dist/lib/{stack-app → hexclave-app}/email/index.js +0 -0
  834. /package/dist/lib/{stack-app → hexclave-app}/notification-categories/index.js +0 -0
  835. /package/dist/lib/{stack-app → hexclave-app}/project-configs/index.js +0 -0
  836. /package/dist/lib/{stack-app → hexclave-app}/session-replays/index.js +0 -0
  837. /package/dist/lib/{stack-app → hexclave-app}/url-targets.test.d.ts +0 -0
@@ -1,4 +1,4 @@
1
- import { ApiKey, ApiKeyCreationOptions, ApiKeyType } from "../lib/stack-app/api-keys/index.js";
1
+ import { ApiKey, ApiKeyCreationOptions, ApiKeyType } from "../lib/hexclave-app/api-keys/index.js";
2
2
  import * as react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/api-key-dialogs.d.ts
@@ -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 '@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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"}
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 UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { yupObject, yupString } from '@hexclave/shared/dist/schema-fields';\nimport { 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/hexclave-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,4 +1,4 @@
1
- import { ApiKey } from "../lib/stack-app/api-keys/index.js";
1
+ import { ApiKey } from "../lib/hexclave-app/api-keys/index.js";
2
2
  import * as react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/api-key-table.d.ts
@@ -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 \"@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"}
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 UNLESS YOU ALSO 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/hexclave-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"}
@@ -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 \"@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"}
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 UNLESS YOU ALSO 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"}
@@ -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 \"@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"}
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 UNLESS YOU ALSO 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"}
@@ -1 +1 @@
1
- {"version":3,"file":"form-warning.js","names":[],"sources":["../../../src/components/elements/form-warning.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\nexport function FormWarningText({ text }: { text?: string }) {\n if (!text) {\n return null;\n }\n return (\n <div className=\"text-red-500 text-sm mt-1\">\n {text}\n </div>\n );\n}\n"],"mappings":";;;;;;;AAOA,SAAgB,gBAAgB,EAAE,QAA2B;AAC3D,KAAI,CAAC,KACH,QAAO;AAET,QACE,2CAAC;EAAI,WAAU;YACZ;GACG"}
1
+ {"version":3,"file":"form-warning.js","names":[],"sources":["../../../src/components/elements/form-warning.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nexport function FormWarningText({ text }: { text?: string }) {\n if (!text) {\n return null;\n }\n return (\n <div className=\"text-red-500 text-sm mt-1\">\n {text}\n </div>\n );\n}\n"],"mappings":";;;;;;;AAOA,SAAgB,gBAAgB,EAAE,QAA2B;AAC3D,KAAI,CAAC,KACH,QAAO;AAET,QACE,2CAAC;EAAI,WAAU;YACZ;GACG"}
@@ -1 +1 @@
1
- {"version":3,"file":"maybe-full-page.js","names":["SsrScript"],"sources":["../../../src/components/elements/maybe-full-page.tsx"],"sourcesContent":["\"use client\";\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport React, { useId } from \"react\";\nimport { SsrScript } from \"./ssr-layout-effect\";\n\nexport function MaybeFullPage({\n children,\n fullPage,\n}: {\n children: React.ReactNode,\n fullPage: boolean,\n size?: number,\n containerClassName?: string,\n}) {\n const uniqueId = useId();\n const id = `stack-full-page-container-${uniqueId}`;\n\n const scriptString = `(([id]) => {\n const el = document.getElementById(id);\n if (!el) {\n // component is not full page\n return;\n }\n const offset = el.getBoundingClientRect().top + document.documentElement.scrollTop;\n el.style.minHeight = \\`calc(100vh - \\${offset}px)\\`;\n })(${JSON.stringify([id])})`;\n\n if (fullPage) {\n return (\n <>\n <div\n suppressHydrationWarning\n id={id}\n style={{\n minHeight: '100vh',\n alignSelf: 'stretch',\n flexGrow: 1,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n className=\"stack-scope\"\n >\n {children}\n </div>\n <SsrScript script={scriptString} />\n </>\n );\n } else {\n return <>\n {children}\n </>;\n }\n\n}\n"],"mappings":";;;;;;;;;;AAUA,SAAgB,cAAc,EAC5B,UACA,YAMC;CAED,MAAM,KAAK,+CADa;CAGxB,MAAM,eAAe;;;;;;;;OAQhB,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC;AAE1B,KAAI,SACF,QACE,qFACE,2CAAC;EACC;EACI;EACJ,OAAO;GACL,WAAW;GACX,WAAW;GACX,UAAU;GACV,SAAS;GACT,gBAAgB;GAChB,YAAY;GACb;EACD,WAAU;EAET;GACG,EACN,2CAACA,oCAAU,QAAQ,eAAgB,IAClC;KAGL,QAAO,yEACJ,WACA"}
1
+ {"version":3,"file":"maybe-full-page.js","names":["SsrScript"],"sources":["../../../src/components/elements/maybe-full-page.tsx"],"sourcesContent":["\"use client\";\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport React, { useId } from \"react\";\nimport { SsrScript } from \"./ssr-layout-effect\";\n\nexport function MaybeFullPage({\n children,\n fullPage,\n}: {\n children: React.ReactNode,\n fullPage: boolean,\n size?: number,\n containerClassName?: string,\n}) {\n const uniqueId = useId();\n const id = `stack-full-page-container-${uniqueId}`;\n\n const scriptString = `(([id]) => {\n const el = document.getElementById(id);\n if (!el) {\n // component is not full page\n return;\n }\n const offset = el.getBoundingClientRect().top + document.documentElement.scrollTop;\n el.style.minHeight = \\`calc(100vh - \\${offset}px)\\`;\n })(${JSON.stringify([id])})`;\n\n if (fullPage) {\n return (\n <>\n <div\n suppressHydrationWarning\n id={id}\n style={{\n minHeight: '100vh',\n alignSelf: 'stretch',\n flexGrow: 1,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n className=\"stack-scope\"\n >\n {children}\n </div>\n <SsrScript script={scriptString} />\n </>\n );\n } else {\n return <>\n {children}\n </>;\n }\n\n}\n"],"mappings":";;;;;;;;;;AAUA,SAAgB,cAAc,EAC5B,UACA,YAMC;CAED,MAAM,KAAK,+CADa;CAGxB,MAAM,eAAe;;;;;;;;OAQhB,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC;AAE1B,KAAI,SACF,QACE,qFACE,2CAAC;EACC;EACI;EACJ,OAAO;GACL,WAAW;GACX,WAAW;GACX,UAAU;GACV,SAAS;GACT,gBAAgB;GAChB,YAAY;GACb;EACD,WAAU;EAET;GACG,EACN,2CAACA,oCAAU,QAAQ,eAAgB,IAClC;KAGL,QAAO,yEACJ,WACA"}
@@ -1 +1 @@
1
- {"version":3,"file":"separator-with-text.js","names":["Separator"],"sources":["../../../src/components/elements/separator-with-text.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 { Separator } from \"@hexclave/ui\";\n\nexport function SeparatorWithText({ text }: { text: string }) {\n return (\n <div className=\"flex items-center justify-center my-6 stack-scope\">\n <div className=\"flex-1\">\n <Separator />\n </div>\n <div className=\"mx-2 text-sm text-zinc-500\">{text}</div>\n <div className=\"flex-1\">\n <Separator />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;AASA,SAAgB,kBAAkB,EAAE,QAA0B;AAC5D,QACE,4CAAC;EAAI,WAAU;;GACb,2CAAC;IAAI,WAAU;cACb,2CAACA,2BAAY;KACT;GACN,2CAAC;IAAI,WAAU;cAA8B;KAAW;GACxD,2CAAC;IAAI,WAAU;cACb,2CAACA,2BAAY;KACT;;GACF"}
1
+ {"version":3,"file":"separator-with-text.js","names":["Separator"],"sources":["../../../src/components/elements/separator-with-text.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { Separator } from \"@hexclave/ui\";\n\nexport function SeparatorWithText({ text }: { text: string }) {\n return (\n <div className=\"flex items-center justify-center my-6 stack-scope\">\n <div className=\"flex-1\">\n <Separator />\n </div>\n <div className=\"mx-2 text-sm text-zinc-500\">{text}</div>\n <div className=\"flex-1\">\n <Separator />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;AASA,SAAgB,kBAAkB,EAAE,QAA0B;AAC5D,QACE,4CAAC;EAAI,WAAU;;GACb,2CAAC;IAAI,WAAU;cACb,2CAACA,2BAAY;KACT;GACN,2CAAC;IAAI,WAAU;cAA8B;KAAW;GACxD,2CAAC;IAAI,WAAU;cACb,2CAACA,2BAAY;KACT;;GACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-layout.js","names":["Button","Typography","XIcon"],"sources":["../../../src/components/elements/sidebar-layout.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 { useHash } from '@hexclave/shared/dist/hooks/use-hash';\nimport { Button, Typography, cn } from '@hexclave/ui';\nimport { XIcon } from 'lucide-react';\nimport React, { ReactNode } from 'react';\nimport { useStackApp } from '../..';\n\nexport type SidebarItem = {\n title: React.ReactNode,\n type: 'item' | 'divider',\n description?: React.ReactNode,\n id?: string,\n icon?: React.ReactNode,\n content?: React.ReactNode,\n contentTitle?: React.ReactNode,\n}\n\nexport function SidebarLayout(props: { items: SidebarItem[], title?: ReactNode, className?: string }) {\n const hash = useHash();\n const selectedIndex = props.items.findIndex(item => item.id && (item.id === hash));\n return (\n <>\n <div className={cn(\"hidden sm:flex stack-scope h-full\", props.className)}>\n <DesktopLayout items={props.items} title={props.title} selectedIndex={selectedIndex} />\n </div>\n <div className={cn(\"sm:hidden stack-scope h-full\", props.className)}>\n <MobileLayout items={props.items} title={props.title} selectedIndex={selectedIndex} />\n </div>\n </>\n );\n}\n\nfunction Items(props: { items: SidebarItem[], selectedIndex: number }) {\n const app = useStackApp();\n const navigate = app.useNavigate();\n\n\n const activeItemIndex = props.selectedIndex === -1 ? 0 : props.selectedIndex;\n\n return props.items.map((item, index) => (\n item.type === 'item' ?\n <Button\n key={index}\n variant='ghost'\n size='sm'\n className={cn(\n activeItemIndex === index && \"sm:bg-muted\",\n \"justify-start text-md text-zinc-800 dark:text-zinc-300 px-2 text-left\",\n )}\n onClick={() => {\n if (item.id) {\n navigate('#' + item.id);\n }\n }}\n >\n {item.icon}\n {item.title}\n </Button> :\n <Typography key={index}>\n {item.title}\n </Typography>\n ));\n\n}\n\nfunction DesktopLayout(props: { items: SidebarItem[], title?: ReactNode, selectedIndex: number }) {\n const selectedItem = props.items[props.selectedIndex === -1 ? 0 : props.selectedIndex];\n\n return (\n <div className=\"stack-scope flex w-full h-full max-w-full relative\">\n <div className=\"flex max-w-[200px] min-w-[200px] border-r flex-col items-stretch gap-2 p-2 overflow-y-auto\">\n {props.title && <div className='mb-2 ml-2'>\n <Typography type='h2' className=\"text-lg font-semibold text-zinc-800 dark:text-zinc-300\">{props.title}</Typography>\n </div>}\n\n <Items items={props.items} selectedIndex={props.selectedIndex} />\n </div>\n <div className=\"flex-1 w-0 flex justify-center gap-4 py-2 px-4\">\n <div className='flex flex-col max-w-[800px] w-[800px]'>\n <div className='mt-4 mb-6'>\n <Typography type='h4' className='font-semibold'>{selectedItem.title}</Typography>\n {selectedItem.description && <Typography variant='secondary' type='label'>{selectedItem.description}</Typography>}\n </div>\n <div className='flex-1'>\n {selectedItem.content}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction MobileLayout(props: { items: SidebarItem[], title?: ReactNode, selectedIndex: number }) {\n const selectedItem = props.items[props.selectedIndex];\n const app = useStackApp();\n const navigate = app.useNavigate();\n\n if (props.selectedIndex === -1) {\n return (\n <div className=\"flex flex-col gap-2 p-2\">\n {props.title && <div className='mb-2 ml-2'>\n <Typography type='h2' className=\"text-lg font-semibold text-zinc-800 dark:text-zinc-300\">{props.title}</Typography>\n </div>}\n\n <Items items={props.items} selectedIndex={props.selectedIndex} />\n </div>\n );\n } else {\n return (\n <div className=\"flex-1 flex flex-col gap-4 py-2 px-4\">\n <div className='flex flex-col'>\n <div className='flex justify-between'>\n <Typography type='h4' className='font-semibold'>{selectedItem.title}</Typography>\n <Button\n variant='ghost'\n size='icon'\n onClick={() => { navigate('#'); }}\n >\n <XIcon className='h-5 w-5' />\n </Button>\n </div>\n {selectedItem.description && <Typography variant='secondary' type='label'>{selectedItem.description}</Typography>}\n </div>\n <div className='flex-1'>\n {selectedItem.content}\n </div>\n </div>\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAuBA,SAAgB,cAAc,OAAwE;CACpG,MAAM,0DAAgB;CACtB,MAAM,gBAAgB,MAAM,MAAM,WAAU,SAAQ,KAAK,MAAO,KAAK,OAAO,KAAM;AAClF,QACE,qFACE,2CAAC;EAAI,gCAAc,qCAAqC,MAAM,UAAU;YACtE,2CAAC;GAAc,OAAO,MAAM;GAAO,OAAO,MAAM;GAAsB;IAAiB;GACnF,EACN,2CAAC;EAAI,gCAAc,gCAAgC,MAAM,UAAU;YACjE,2CAAC;GAAa,OAAO,MAAM;GAAO,OAAO,MAAM;GAAsB;IAAiB;GAClF,IACL;;AAIP,SAAS,MAAM,OAAwD;CAErE,MAAM,4CADmB,CACJ,aAAa;CAGlC,MAAM,kBAAkB,MAAM,kBAAkB,KAAK,IAAI,MAAM;AAE/D,QAAO,MAAM,MAAM,KAAK,MAAM,UAC5B,KAAK,SAAS,SACZ,4CAACA;EAEC,SAAQ;EACR,MAAK;EACL,gCACE,oBAAoB,SAAS,eAC7B,wEACD;EACD,eAAe;AACb,OAAI,KAAK,GACP,UAAS,MAAM,KAAK,GAAG;;aAI1B,KAAK,MACL,KAAK;IAdD,MAeE,GACT,2CAACC,qCACE,KAAK,SADS,MAEJ,CACf;;AAIJ,SAAS,cAAc,OAA2E;CAChG,MAAM,eAAe,MAAM,MAAM,MAAM,kBAAkB,KAAK,IAAI,MAAM;AAExE,QACE,4CAAC;EAAI,WAAU;aACb,4CAAC;GAAI,WAAU;cACZ,MAAM,SAAS,2CAAC;IAAI,WAAU;cAC7B,2CAACA;KAAW,MAAK;KAAK,WAAU;eAA0D,MAAM;MAAmB;KAC/G,EAEN,2CAAC;IAAM,OAAO,MAAM;IAAO,eAAe,MAAM;KAAiB;IAC7D,EACN,2CAAC;GAAI,WAAU;aACb,4CAAC;IAAI,WAAU;eACb,4CAAC;KAAI,WAAU;gBACb,2CAACA;MAAW,MAAK;MAAK,WAAU;gBAAiB,aAAa;OAAmB,EAChF,aAAa,eAAe,2CAACA;MAAW,SAAQ;MAAY,MAAK;gBAAS,aAAa;OAAyB;MAC7G,EACN,2CAAC;KAAI,WAAU;eACZ,aAAa;MACV;KACF;IACF;GACF;;AAIV,SAAS,aAAa,OAA2E;CAC/F,MAAM,eAAe,MAAM,MAAM,MAAM;CAEvC,MAAM,4CADmB,CACJ,aAAa;AAElC,KAAI,MAAM,kBAAkB,GAC1B,QACE,4CAAC;EAAI,WAAU;aACZ,MAAM,SAAS,2CAAC;GAAI,WAAU;aAC7B,2CAACA;IAAW,MAAK;IAAK,WAAU;cAA0D,MAAM;KAAmB;IAC/G,EAEN,2CAAC;GAAM,OAAO,MAAM;GAAO,eAAe,MAAM;IAAiB;GAC7D;KAGR,QACE,4CAAC;EAAI,WAAU;aACb,4CAAC;GAAI,WAAU;cACb,4CAAC;IAAI,WAAU;eACb,2CAACA;KAAW,MAAK;KAAK,WAAU;eAAiB,aAAa;MAAmB,EACjF,2CAACD;KACC,SAAQ;KACR,MAAK;KACL,eAAe;AAAE,eAAS,IAAI;;eAE9B,2CAACE,sBAAM,WAAU,YAAY;MACtB;KACL,EACL,aAAa,eAAe,2CAACD;IAAW,SAAQ;IAAY,MAAK;cAAS,aAAa;KAAyB;IAC7G,EACN,2CAAC;GAAI,WAAU;aACZ,aAAa;IACV;GACF"}
1
+ {"version":3,"file":"sidebar-layout.js","names":["Button","Typography","XIcon"],"sources":["../../../src/components/elements/sidebar-layout.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { useHash } from '@hexclave/shared/dist/hooks/use-hash';\nimport { Button, Typography, cn } from '@hexclave/ui';\nimport { XIcon } from 'lucide-react';\nimport React, { ReactNode } from 'react';\nimport { useStackApp } from '../..';\n\nexport type SidebarItem = {\n title: React.ReactNode,\n type: 'item' | 'divider',\n description?: React.ReactNode,\n id?: string,\n icon?: React.ReactNode,\n content?: React.ReactNode,\n contentTitle?: React.ReactNode,\n}\n\nexport function SidebarLayout(props: { items: SidebarItem[], title?: ReactNode, className?: string }) {\n const hash = useHash();\n const selectedIndex = props.items.findIndex(item => item.id && (item.id === hash));\n return (\n <>\n <div className={cn(\"hidden sm:flex stack-scope h-full\", props.className)}>\n <DesktopLayout items={props.items} title={props.title} selectedIndex={selectedIndex} />\n </div>\n <div className={cn(\"sm:hidden stack-scope h-full\", props.className)}>\n <MobileLayout items={props.items} title={props.title} selectedIndex={selectedIndex} />\n </div>\n </>\n );\n}\n\nfunction Items(props: { items: SidebarItem[], selectedIndex: number }) {\n const app = useStackApp();\n const navigate = app.useNavigate();\n\n\n const activeItemIndex = props.selectedIndex === -1 ? 0 : props.selectedIndex;\n\n return props.items.map((item, index) => (\n item.type === 'item' ?\n <Button\n key={index}\n variant='ghost'\n size='sm'\n className={cn(\n activeItemIndex === index && \"sm:bg-muted\",\n \"justify-start text-md text-zinc-800 dark:text-zinc-300 px-2 text-left\",\n )}\n onClick={() => {\n if (item.id) {\n navigate('#' + item.id);\n }\n }}\n >\n {item.icon}\n {item.title}\n </Button> :\n <Typography key={index}>\n {item.title}\n </Typography>\n ));\n\n}\n\nfunction DesktopLayout(props: { items: SidebarItem[], title?: ReactNode, selectedIndex: number }) {\n const selectedItem = props.items[props.selectedIndex === -1 ? 0 : props.selectedIndex];\n\n return (\n <div className=\"stack-scope flex w-full h-full max-w-full relative\">\n <div className=\"flex max-w-[200px] min-w-[200px] border-r flex-col items-stretch gap-2 p-2 overflow-y-auto\">\n {props.title && <div className='mb-2 ml-2'>\n <Typography type='h2' className=\"text-lg font-semibold text-zinc-800 dark:text-zinc-300\">{props.title}</Typography>\n </div>}\n\n <Items items={props.items} selectedIndex={props.selectedIndex} />\n </div>\n <div className=\"flex-1 w-0 flex justify-center gap-4 py-2 px-4\">\n <div className='flex flex-col max-w-[800px] w-[800px]'>\n <div className='mt-4 mb-6'>\n <Typography type='h4' className='font-semibold'>{selectedItem.title}</Typography>\n {selectedItem.description && <Typography variant='secondary' type='label'>{selectedItem.description}</Typography>}\n </div>\n <div className='flex-1'>\n {selectedItem.content}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction MobileLayout(props: { items: SidebarItem[], title?: ReactNode, selectedIndex: number }) {\n const selectedItem = props.items[props.selectedIndex];\n const app = useStackApp();\n const navigate = app.useNavigate();\n\n if (props.selectedIndex === -1) {\n return (\n <div className=\"flex flex-col gap-2 p-2\">\n {props.title && <div className='mb-2 ml-2'>\n <Typography type='h2' className=\"text-lg font-semibold text-zinc-800 dark:text-zinc-300\">{props.title}</Typography>\n </div>}\n\n <Items items={props.items} selectedIndex={props.selectedIndex} />\n </div>\n );\n } else {\n return (\n <div className=\"flex-1 flex flex-col gap-4 py-2 px-4\">\n <div className='flex flex-col'>\n <div className='flex justify-between'>\n <Typography type='h4' className='font-semibold'>{selectedItem.title}</Typography>\n <Button\n variant='ghost'\n size='icon'\n onClick={() => { navigate('#'); }}\n >\n <XIcon className='h-5 w-5' />\n </Button>\n </div>\n {selectedItem.description && <Typography variant='secondary' type='label'>{selectedItem.description}</Typography>}\n </div>\n <div className='flex-1'>\n {selectedItem.content}\n </div>\n </div>\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAuBA,SAAgB,cAAc,OAAwE;CACpG,MAAM,0DAAgB;CACtB,MAAM,gBAAgB,MAAM,MAAM,WAAU,SAAQ,KAAK,MAAO,KAAK,OAAO,KAAM;AAClF,QACE,qFACE,2CAAC;EAAI,gCAAc,qCAAqC,MAAM,UAAU;YACtE,2CAAC;GAAc,OAAO,MAAM;GAAO,OAAO,MAAM;GAAsB;IAAiB;GACnF,EACN,2CAAC;EAAI,gCAAc,gCAAgC,MAAM,UAAU;YACjE,2CAAC;GAAa,OAAO,MAAM;GAAO,OAAO,MAAM;GAAsB;IAAiB;GAClF,IACL;;AAIP,SAAS,MAAM,OAAwD;CAErE,MAAM,4CADmB,CACJ,aAAa;CAGlC,MAAM,kBAAkB,MAAM,kBAAkB,KAAK,IAAI,MAAM;AAE/D,QAAO,MAAM,MAAM,KAAK,MAAM,UAC5B,KAAK,SAAS,SACZ,4CAACA;EAEC,SAAQ;EACR,MAAK;EACL,gCACE,oBAAoB,SAAS,eAC7B,wEACD;EACD,eAAe;AACb,OAAI,KAAK,GACP,UAAS,MAAM,KAAK,GAAG;;aAI1B,KAAK,MACL,KAAK;IAdD,MAeE,GACT,2CAACC,qCACE,KAAK,SADS,MAEJ,CACf;;AAIJ,SAAS,cAAc,OAA2E;CAChG,MAAM,eAAe,MAAM,MAAM,MAAM,kBAAkB,KAAK,IAAI,MAAM;AAExE,QACE,4CAAC;EAAI,WAAU;aACb,4CAAC;GAAI,WAAU;cACZ,MAAM,SAAS,2CAAC;IAAI,WAAU;cAC7B,2CAACA;KAAW,MAAK;KAAK,WAAU;eAA0D,MAAM;MAAmB;KAC/G,EAEN,2CAAC;IAAM,OAAO,MAAM;IAAO,eAAe,MAAM;KAAiB;IAC7D,EACN,2CAAC;GAAI,WAAU;aACb,4CAAC;IAAI,WAAU;eACb,4CAAC;KAAI,WAAU;gBACb,2CAACA;MAAW,MAAK;MAAK,WAAU;gBAAiB,aAAa;OAAmB,EAChF,aAAa,eAAe,2CAACA;MAAW,SAAQ;MAAY,MAAK;gBAAS,aAAa;OAAyB;MAC7G,EACN,2CAAC;KAAI,WAAU;eACZ,aAAa;MACV;KACF;IACF;GACF;;AAIV,SAAS,aAAa,OAA2E;CAC/F,MAAM,eAAe,MAAM,MAAM,MAAM;CAEvC,MAAM,4CADmB,CACJ,aAAa;AAElC,KAAI,MAAM,kBAAkB,GAC1B,QACE,4CAAC;EAAI,WAAU;aACZ,MAAM,SAAS,2CAAC;GAAI,WAAU;aAC7B,2CAACA;IAAW,MAAK;IAAK,WAAU;cAA0D,MAAM;KAAmB;IAC/G,EAEN,2CAAC;GAAM,OAAO,MAAM;GAAO,eAAe,MAAM;IAAiB;GAC7D;KAGR,QACE,4CAAC;EAAI,WAAU;aACb,4CAAC;GAAI,WAAU;cACb,4CAAC;IAAI,WAAU;eACb,2CAACA;KAAW,MAAK;KAAK,WAAU;eAAiB,aAAa;MAAmB,EACjF,2CAACD;KACC,SAAQ;KACR,MAAK;KACL,eAAe;AAAE,eAAS,IAAI;;eAE9B,2CAACE,sBAAM,WAAU,YAAY;MACtB;KACL,EACL,aAAa,eAAe,2CAACD;IAAW,SAAQ;IAAY,MAAK;cAAS,aAAa;KAAyB;IAC7G,EACN,2CAAC;GAAI,WAAU;aACZ,aAAa;IACV;GACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"ssr-layout-effect.js","names":[],"sources":["../../../src/components/elements/ssr-layout-effect.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 { useLayoutEffect } from \"react\";\n\nexport function SsrScript(props: { script: string, nonce?: string }) {\n useLayoutEffect(() => {\n // TODO fix workaround: React has a bug where it doesn't run the script on the first CSR render if SSR has been skipped due to suspense\n // As a workaround, we run the script in the <script> tag again after the first render\n // Note that we do an indirect eval as described here: https://esbuild.github.io/content-types/#direct-eval\n (0, eval)(props.script);\n }, []);\n\n return (\n <script\n suppressHydrationWarning // the transpiler is setup differently for client/server targets, so if `script` was generated with Function.toString they will differ\n nonce={props.nonce}\n dangerouslySetInnerHTML={{ __html: props.script }}\n />\n );\n}\n"],"mappings":";;;;;;;;AAQA,SAAgB,UAAU,OAA2C;AACnE,kCAAsB;AAIpB,GAAC,GAAG,MAAM,MAAM,OAAO;IACtB,EAAE,CAAC;AAEN,QACE,2CAAC;EACC;EACA,OAAO,MAAM;EACb,yBAAyB,EAAE,QAAQ,MAAM,QAAQ;GACjD"}
1
+ {"version":3,"file":"ssr-layout-effect.js","names":[],"sources":["../../../src/components/elements/ssr-layout-effect.tsx"],"sourcesContent":["\"use client\";\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\nimport { useLayoutEffect } from \"react\";\n\nexport function SsrScript(props: { script: string, nonce?: string }) {\n useLayoutEffect(() => {\n // TODO fix workaround: React has a bug where it doesn't run the script on the first CSR render if SSR has been skipped due to suspense\n // As a workaround, we run the script in the <script> tag again after the first render\n // Note that we do an indirect eval as described here: https://esbuild.github.io/content-types/#direct-eval\n (0, eval)(props.script);\n }, []);\n\n return (\n <script\n suppressHydrationWarning // the transpiler is setup differently for client/server targets, so if `script` was generated with Function.toString they will differ\n nonce={props.nonce}\n dangerouslySetInnerHTML={{ __html: props.script }}\n />\n );\n}\n"],"mappings":";;;;;;;;AAQA,SAAgB,UAAU,OAA2C;AACnE,kCAAsB;AAIpB,GAAC,GAAG,MAAM,MAAM,OAAO;IACtB,EAAE,CAAC;AAEN,QACE,2CAAC;EACC;EACA,OAAO,MAAM;EACb,yBAAyB,EAAE,QAAQ,MAAM,QAAQ;GACjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"user-avatar.js","names":["Avatar","AvatarImage","AvatarFallback","UserRound"],"sources":["../../../src/components/elements/user-avatar.tsx"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\nimport { Avatar, AvatarFallback, AvatarImage } from \"@hexclave/ui\";\nimport { UserRound } from \"lucide-react\";\n\nconst defaultSize = 34;\n\nexport function UserAvatar(props: {\n size?: number,\n user?: {\n profileImageUrl?: string | null,\n displayName?: string | null,\n primaryEmail?: string | null,\n } | null,\n border?: boolean,\n}) {\n const user = props.user;\n return (\n <Avatar style={{ height: props.size || defaultSize, width: props.size || defaultSize }} className={props.border ? 'border' : ''}>\n <AvatarImage src={user?.profileImageUrl || ''} />\n <AvatarFallback>\n {user ?\n <div className='font-medium' style={{ fontSize: (props.size || defaultSize) * 0.4 }}>\n {(user.displayName || user.primaryEmail)?.slice(0, 2).toUpperCase()}\n </div> :\n <UserRound className=\"text-zinc-500\" size={(props.size || defaultSize) * 0.6} />}\n </AvatarFallback>\n </Avatar>\n );\n}\n"],"mappings":";;;;;;;AAOA,MAAM,cAAc;AAEpB,SAAgB,WAAW,OAQxB;CACD,MAAM,OAAO,MAAM;AACnB,QACE,4CAACA;EAAO,OAAO;GAAE,QAAQ,MAAM,QAAQ;GAAa,OAAO,MAAM,QAAQ;GAAa;EAAE,WAAW,MAAM,SAAS,WAAW;aAC3H,2CAACC,4BAAY,KAAK,MAAM,mBAAmB,KAAM,EACjD,2CAACC,yCACE,OACC,2CAAC;GAAI,WAAU;GAAc,OAAO,EAAE,WAAW,MAAM,QAAQ,eAAe,IAAK;cAC/E,KAAK,eAAe,KAAK,eAAe,MAAM,GAAG,EAAE,CAAC,aAAa;IAC/D,GACN,2CAACC;GAAU,WAAU;GAAgB,OAAO,MAAM,QAAQ,eAAe;IAAO,GACnE;GACV"}
1
+ {"version":3,"file":"user-avatar.js","names":["Avatar","AvatarImage","AvatarFallback","UserRound"],"sources":["../../../src/components/elements/user-avatar.tsx"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\nimport { Avatar, AvatarFallback, AvatarImage } from \"@hexclave/ui\";\nimport { UserRound } from \"lucide-react\";\n\nconst defaultSize = 34;\n\nexport function UserAvatar(props: {\n size?: number,\n user?: {\n profileImageUrl?: string | null,\n displayName?: string | null,\n primaryEmail?: string | null,\n } | null,\n border?: boolean,\n}) {\n const user = props.user;\n return (\n <Avatar style={{ height: props.size || defaultSize, width: props.size || defaultSize }} className={props.border ? 'border' : ''}>\n <AvatarImage src={user?.profileImageUrl || ''} />\n <AvatarFallback>\n {user ?\n <div className='font-medium' style={{ fontSize: (props.size || defaultSize) * 0.4 }}>\n {(user.displayName || user.primaryEmail)?.slice(0, 2).toUpperCase()}\n </div> :\n <UserRound className=\"text-zinc-500\" size={(props.size || defaultSize) * 0.6} />}\n </AvatarFallback>\n </Avatar>\n );\n}\n"],"mappings":";;;;;;;AAOA,MAAM,cAAc;AAEpB,SAAgB,WAAW,OAQxB;CACD,MAAM,OAAO,MAAM;AACnB,QACE,4CAACA;EAAO,OAAO;GAAE,QAAQ,MAAM,QAAQ;GAAa,OAAO,MAAM,QAAQ;GAAa;EAAE,WAAW,MAAM,SAAS,WAAW;aAC3H,2CAACC,4BAAY,KAAK,MAAM,mBAAmB,KAAM,EACjD,2CAACC,yCACE,OACC,2CAAC;GAAI,WAAU;GAAc,OAAO,EAAE,WAAW,MAAM,QAAQ,eAAe,IAAK;cAC/E,KAAK,eAAe,KAAK,eAAe,MAAM,GAAG,EAAE,CAAC,aAAa;IAC/D,GACN,2CAACC;GAAU,WAAU;GAAgB,OAAO,MAAM,QAAQ,eAAe;IAAO,GACnE;GACV"}
@@ -1 +1 @@
1
- {"version":3,"file":"link.js","names":["NextLink"],"sources":["../../src/components/link.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 { cn } from \"@hexclave/ui\";\nimport NextLink from 'next/link'; // THIS_LINE_PLATFORM next\n\ntype LinkProps = {\n href: string,\n children: React.ReactNode,\n className?: string,\n target?: string,\n onClick?: React.MouseEventHandler<HTMLAnchorElement>,\n prefetch?: boolean,\n};\n\nfunction Link(props: LinkProps) {\n return <NextLink\n href={props.href}\n target={props.target}\n className={props.className}\n prefetch={props.prefetch}\n onClick={props.onClick}\n >\n {props.children}\n </NextLink>;\n}\n\nfunction StyledLink(props: LinkProps) {\n return (\n <Link {...props} className={cn(\"underline font-medium\", props.className)}>\n {props.children}\n </Link>\n );\n}\n\nexport { Link, StyledLink };\n"],"mappings":";;;;;;;;;;AAmBA,SAAS,KAAK,OAAkB;AAC9B,QAAO,2CAACA;EACN,MAAM,MAAM;EACZ,QAAQ,MAAM;EACd,WAAW,MAAM;EACjB,UAAU,MAAM;EAChB,SAAS,MAAM;YAEd,MAAM;GACE;;AAGb,SAAS,WAAW,OAAkB;AACpC,QACE,2CAAC;EAAK,GAAI;EAAO,gCAAc,yBAAyB,MAAM,UAAU;YACrE,MAAM;GACF"}
1
+ {"version":3,"file":"link.js","names":["NextLink"],"sources":["../../src/components/link.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { cn } from \"@hexclave/ui\";\nimport NextLink from 'next/link'; // THIS_LINE_PLATFORM next\n\ntype LinkProps = {\n href: string,\n children: React.ReactNode,\n className?: string,\n target?: string,\n onClick?: React.MouseEventHandler<HTMLAnchorElement>,\n prefetch?: boolean,\n};\n\nfunction Link(props: LinkProps) {\n return <NextLink\n href={props.href}\n target={props.target}\n className={props.className}\n prefetch={props.prefetch}\n onClick={props.onClick}\n >\n {props.children}\n </NextLink>;\n}\n\nfunction StyledLink(props: LinkProps) {\n return (\n <Link {...props} className={cn(\"underline font-medium\", props.className)}>\n {props.children}\n </Link>\n );\n}\n\nexport { Link, StyledLink };\n"],"mappings":";;;;;;;;;;AAmBA,SAAS,KAAK,OAAkB;AAC9B,QAAO,2CAACA;EACN,MAAM,MAAM;EACZ,QAAQ,MAAM;EACd,WAAW,MAAM;EACjB,UAAU,MAAM;EAChB,SAAS,MAAM;YAEd,MAAM;GACE;;AAGb,SAAS,WAAW,OAAkB;AACpC,QACE,2CAAC;EAAK,GAAI;EAAO,gCAAc,yBAAyB,MAAM,UAAU;YACrE,MAAM;GACF"}
@@ -19,12 +19,12 @@ function OTP(props) {
19
19
  const { t } = (0, ___lib_translations_js.useTranslation)();
20
20
  const [otp, setOtp] = (0, react.useState)("");
21
21
  const [submitting, setSubmitting] = (0, react.useState)(false);
22
- const stackApp = (0, ___lib_hooks_js.useStackApp)();
22
+ const hexclaveApp = (0, ___lib_hooks_js.useStackApp)();
23
23
  const [error, setError] = (0, react.useState)(null);
24
24
  (0, react.useEffect)(() => {
25
25
  if (otp.length === 6 && !submitting) {
26
26
  setSubmitting(true);
27
- stackApp.signInWithMagicLink(otp + props.nonce).then((result) => {
27
+ hexclaveApp.signInWithMagicLink(otp + props.nonce).then((result) => {
28
28
  if (result.status === "error") if (_hexclave_shared.KnownErrors.VerificationCodeError.isInstance(result.error)) setError(t("Invalid code"));
29
29
  else if (_hexclave_shared.KnownErrors.InvalidTotpCode.isInstance(result.error)) setError(t("Invalid TOTP code"));
30
30
  else throw result.error;
@@ -1 +1 @@
1
- {"version":3,"file":"magic-link-sign-in.js","names":["KnownErrors","Typography","InputOTP","InputOTPGroup","InputOTPSlot","FormWarningText","Button","Label","Input"],"sources":["../../src/components/magic-link-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 { KnownErrors } from \"@hexclave/shared\";\nimport { strictEmailSchema, yupObject } from \"@hexclave/shared/dist/schema-fields\";\nimport { runAsynchronouslyWithAlert } from \"@hexclave/shared/dist/utils/promises\";\nimport { Button, Input, InputOTP, InputOTPGroup, InputOTPSlot, Label, Typography } from \"@hexclave/ui\";\nimport { useEffect, 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\nfunction OTP(props: {\n onBack: () => void,\n nonce: string,\n}) {\n const { t } = useTranslation();\n const [otp, setOtp] = useState<string>('');\n const [submitting, setSubmitting] = useState<boolean>(false);\n const stackApp = useStackApp();\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n if (otp.length === 6 && !submitting) {\n setSubmitting(true);\n // eslint-disable-next-line no-restricted-syntax\n stackApp.signInWithMagicLink(otp + props.nonce)\n .then(result => {\n if (result.status === 'error') {\n if (KnownErrors.VerificationCodeError.isInstance(result.error)) {\n setError(t(\"Invalid code\"));\n } else if (KnownErrors.InvalidTotpCode.isInstance(result.error)) {\n setError(t(\"Invalid TOTP code\"));\n } else {\n throw result.error;\n }\n }\n })\n .catch(e => console.error(e))\n .finally(() => {\n setSubmitting(false);\n setOtp('');\n });\n }\n if (otp.length !== 0 && otp.length !== 6) {\n setError(null);\n }\n }, [otp, submitting]);\n\n return (\n <div className=\"flex flex-col items-stretch stack-scope\">\n <form className='w-full flex flex-col items-center mb-2'>\n <Typography className='mb-2' >{t('Enter the code from your email')}</Typography>\n <InputOTP\n maxLength={6}\n type=\"text\"\n inputMode=\"text\"\n pattern={\"^[a-zA-Z0-9]+$\"}\n value={otp}\n onChange={value => setOtp(value.toUpperCase())}\n disabled={submitting}\n >\n <InputOTPGroup>\n {[0, 1, 2, 3, 4, 5].map((index) => (\n <InputOTPSlot key={index} index={index} size='lg' />\n ))}\n </InputOTPGroup>\n </InputOTP>\n {error && <FormWarningText text={error} />}\n </form>\n <Button variant='link' onClick={props.onBack} className='underline'>{t('Cancel')}</Button>\n </div>\n );\n}\n\nexport function MagicLinkSignIn() {\n const { t } = useTranslation();\n const app = useStackApp();\n const [loading, setLoading] = useState(false);\n const [nonce, setNonce] = useState<string | null>(null);\n\n const schema = yupObject({\n email: strictEmailSchema(t('Please enter a valid email')).defined().nonEmpty(t('Please enter your email'))\n });\n\n const { register, handleSubmit, setError, formState: { errors } } = useForm({\n resolver: yupResolver(schema)\n });\n\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\n setLoading(true);\n try {\n const { email } = data;\n const result = await app.sendMagicLinkEmail(email);\n if (result.status === 'error') {\n setError('email', { type: 'manual', message: result.error.message });\n return;\n } else {\n setNonce(result.data.nonce);\n }\n } catch (e) {\n if (KnownErrors.SignUpNotEnabled.isInstance(e)) {\n setError('email', { type: 'manual', message: t('New account registration is not allowed') });\n } else {\n throw e;\n }\n } finally {\n setLoading(false);\n }\n };\n\n if (nonce) {\n return <OTP nonce={nonce} onBack={() => setNonce(null)} />;\n } else {\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 <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n {t('Send email')}\n </Button>\n </form>\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"magic-link-sign-in.js","names":["KnownErrors","Typography","InputOTP","InputOTPGroup","InputOTPSlot","FormWarningText","Button","Label","Input"],"sources":["../../src/components/magic-link-sign-in.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { KnownErrors } from \"@hexclave/shared\";\nimport { strictEmailSchema, yupObject } from \"@hexclave/shared/dist/schema-fields\";\nimport { runAsynchronouslyWithAlert } from \"@hexclave/shared/dist/utils/promises\";\nimport { Button, Input, InputOTP, InputOTPGroup, InputOTPSlot, Label, Typography } from \"@hexclave/ui\";\nimport { useEffect, 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\nfunction OTP(props: {\n onBack: () => void,\n nonce: string,\n}) {\n const { t } = useTranslation();\n const [otp, setOtp] = useState<string>('');\n const [submitting, setSubmitting] = useState<boolean>(false);\n const hexclaveApp = useStackApp();\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n if (otp.length === 6 && !submitting) {\n setSubmitting(true);\n // eslint-disable-next-line no-restricted-syntax\n hexclaveApp.signInWithMagicLink(otp + props.nonce)\n .then(result => {\n if (result.status === 'error') {\n if (KnownErrors.VerificationCodeError.isInstance(result.error)) {\n setError(t(\"Invalid code\"));\n } else if (KnownErrors.InvalidTotpCode.isInstance(result.error)) {\n setError(t(\"Invalid TOTP code\"));\n } else {\n throw result.error;\n }\n }\n })\n .catch(e => console.error(e))\n .finally(() => {\n setSubmitting(false);\n setOtp('');\n });\n }\n if (otp.length !== 0 && otp.length !== 6) {\n setError(null);\n }\n }, [otp, submitting]);\n\n return (\n <div className=\"flex flex-col items-stretch stack-scope\">\n <form className='w-full flex flex-col items-center mb-2'>\n <Typography className='mb-2' >{t('Enter the code from your email')}</Typography>\n <InputOTP\n maxLength={6}\n type=\"text\"\n inputMode=\"text\"\n pattern={\"^[a-zA-Z0-9]+$\"}\n value={otp}\n onChange={value => setOtp(value.toUpperCase())}\n disabled={submitting}\n >\n <InputOTPGroup>\n {[0, 1, 2, 3, 4, 5].map((index) => (\n <InputOTPSlot key={index} index={index} size='lg' />\n ))}\n </InputOTPGroup>\n </InputOTP>\n {error && <FormWarningText text={error} />}\n </form>\n <Button variant='link' onClick={props.onBack} className='underline'>{t('Cancel')}</Button>\n </div>\n );\n}\n\nexport function MagicLinkSignIn() {\n const { t } = useTranslation();\n const app = useStackApp();\n const [loading, setLoading] = useState(false);\n const [nonce, setNonce] = useState<string | null>(null);\n\n const schema = yupObject({\n email: strictEmailSchema(t('Please enter a valid email')).defined().nonEmpty(t('Please enter your email'))\n });\n\n const { register, handleSubmit, setError, formState: { errors } } = useForm({\n resolver: yupResolver(schema)\n });\n\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\n setLoading(true);\n try {\n const { email } = data;\n const result = await app.sendMagicLinkEmail(email);\n if (result.status === 'error') {\n setError('email', { type: 'manual', message: result.error.message });\n return;\n } else {\n setNonce(result.data.nonce);\n }\n } catch (e) {\n if (KnownErrors.SignUpNotEnabled.isInstance(e)) {\n setError('email', { type: 'manual', message: t('New account registration is not allowed') });\n } else {\n throw e;\n }\n } finally {\n setLoading(false);\n }\n };\n\n if (nonce) {\n return <OTP nonce={nonce} onBack={() => setNonce(null)} />;\n } else {\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 <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n {t('Send email')}\n </Button>\n </form>\n );\n }\n}\n"],"mappings":"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"}
@@ -9,12 +9,12 @@ let __message_card_js = require("./message-card.js");
9
9
 
10
10
  //#region src/components/message-cards/known-error-message-card.tsx
11
11
  function KnownErrorMessageCard({ error, fullPage = false }) {
12
- const stackApp = (0, ______index_js.useStackApp)();
12
+ const hexclaveApp = (0, ______index_js.useStackApp)();
13
13
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(__message_card_js.MessageCard, {
14
14
  title: "An error occurred",
15
15
  fullPage,
16
16
  primaryButtonText: "Go Home",
17
- primaryAction: () => stackApp.redirectToHome(),
17
+ primaryAction: () => hexclaveApp.redirectToHome(),
18
18
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_hexclave_ui.Typography, { children: ["Error Code: ", error.errorCode] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_hexclave_ui.Typography, { children: ["Error Message: ", error.message] })]
19
19
  });
20
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"known-error-message-card.js","names":["MessageCard","Typography"],"sources":["../../../src/components/message-cards/known-error-message-card.tsx"],"sourcesContent":["\"use client\";\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { KnownError } from \"@hexclave/shared\";\nimport { Typography } from \"@hexclave/ui\";\nimport { useStackApp } from \"../..\";\nimport { MessageCard } from \"./message-card\";\n\nexport function KnownErrorMessageCard({\n error,\n fullPage=false,\n}: {\n error: KnownError,\n fullPage?: boolean,\n}) {\n const stackApp = useStackApp();\n\n return (\n <MessageCard\n title={\"An error occurred\"}\n fullPage={fullPage}\n primaryButtonText={\"Go Home\"}\n primaryAction={() => stackApp.redirectToHome()}\n >\n {<Typography>Error Code: {error.errorCode}</Typography>}\n {<Typography>Error Message: {error.message}</Typography>}\n </MessageCard>\n );\n}\n"],"mappings":";;;;;;;;;;AAYA,SAAgB,sBAAsB,EACpC,OACA,WAAS,SAIR;CACD,MAAM,4CAAwB;AAE9B,QACE,4CAACA;EACC,OAAO;EACG;EACV,mBAAmB;EACnB,qBAAqB,SAAS,gBAAgB;aAE7C,4CAACC,sCAAW,gBAAa,MAAM,aAAuB,EACtD,4CAACA,sCAAW,mBAAgB,MAAM,WAAqB;GAC5C"}
1
+ {"version":3,"file":"known-error-message-card.js","names":["MessageCard","Typography"],"sources":["../../../src/components/message-cards/known-error-message-card.tsx"],"sourcesContent":["\"use client\";\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { KnownError } from \"@hexclave/shared\";\nimport { Typography } from \"@hexclave/ui\";\nimport { useStackApp } from \"../..\";\nimport { MessageCard } from \"./message-card\";\n\nexport function KnownErrorMessageCard({\n error,\n fullPage=false,\n}: {\n error: KnownError,\n fullPage?: boolean,\n}) {\n const hexclaveApp = useStackApp();\n\n return (\n <MessageCard\n title={\"An error occurred\"}\n fullPage={fullPage}\n primaryButtonText={\"Go Home\"}\n primaryAction={() => hexclaveApp.redirectToHome()}\n >\n {<Typography>Error Code: {error.errorCode}</Typography>}\n {<Typography>Error Message: {error.message}</Typography>}\n </MessageCard>\n );\n}\n"],"mappings":";;;;;;;;;;AAYA,SAAgB,sBAAsB,EACpC,OACA,WAAS,SAIR;CACD,MAAM,+CAA2B;AAEjC,QACE,4CAACA;EACC,OAAO;EACG;EACV,mBAAmB;EACnB,qBAAqB,YAAY,gBAAgB;aAEhD,4CAACC,sCAAW,gBAAa,MAAM,aAAuB,EACtD,4CAACA,sCAAW,mBAAgB,MAAM,WAAqB;GAC5C"}
@@ -1 +1 @@
1
- {"version":3,"file":"message-card.js","names":["MaybeFullPage","Typography","Button"],"sources":["../../../src/components/message-cards/message-card.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 React from \"react\";\nimport { MaybeFullPage } from \"../elements/maybe-full-page\";\nimport { Button, Typography } from \"@hexclave/ui\";\n\nexport function MessageCard(\n { fullPage=false, ...props }:\n {\n children?: React.ReactNode,\n title: string,\n fullPage?: boolean,\n primaryButtonText?: string,\n primaryAction?: () => Promise<void> | void,\n secondaryButtonText?: string,\n secondaryAction?: () => Promise<void> | void,\n }\n) {\n return (\n <MaybeFullPage fullPage={fullPage}>\n <div className=\"text-center stack-scope flex flex-col gap-4\" style={{ maxWidth: '380px', flexBasis: '380px', padding: fullPage ? '1rem' : 0 }}>\n <Typography type='h3'>{props.title}</Typography>\n {props.children}\n {(props.primaryButtonText || props.secondaryButtonText) && (\n <div className=\"flex justify-center gap-4 my-5\">\n {props.secondaryButtonText && (\n <Button variant=\"secondary\" onClick={props.secondaryAction}>\n {props.secondaryButtonText}\n </Button>\n )}\n {props.primaryButtonText && (\n <Button onClick={props.primaryAction}>\n {props.primaryButtonText}\n </Button>\n )}\n </div>\n )}\n </div>\n </MaybeFullPage>\n );\n}\n"],"mappings":";;;;;;;;;;;AAWA,SAAgB,YACd,EAAE,WAAS,OAAO,GAAG,SAUrB;AACA,QACE,2CAACA;EAAwB;YACvB,4CAAC;GAAI,WAAU;GAA8C,OAAO;IAAE,UAAU;IAAS,WAAW;IAAS,SAAS,WAAW,SAAS;IAAG;;IAC3I,2CAACC;KAAW,MAAK;eAAM,MAAM;MAAmB;IAC/C,MAAM;KACL,MAAM,qBAAqB,MAAM,wBACjC,4CAAC;KAAI,WAAU;gBACZ,MAAM,uBACL,2CAACC;MAAO,SAAQ;MAAY,SAAS,MAAM;gBACxC,MAAM;OACA,EAEV,MAAM,qBACL,2CAACA;MAAO,SAAS,MAAM;gBACpB,MAAM;OACA;MAEP;;IAEJ;GACQ"}
1
+ {"version":3,"file":"message-card.js","names":["MaybeFullPage","Typography","Button"],"sources":["../../../src/components/message-cards/message-card.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport React from \"react\";\nimport { MaybeFullPage } from \"../elements/maybe-full-page\";\nimport { Button, Typography } from \"@hexclave/ui\";\n\nexport function MessageCard(\n { fullPage=false, ...props }:\n {\n children?: React.ReactNode,\n title: string,\n fullPage?: boolean,\n primaryButtonText?: string,\n primaryAction?: () => Promise<void> | void,\n secondaryButtonText?: string,\n secondaryAction?: () => Promise<void> | void,\n }\n) {\n return (\n <MaybeFullPage fullPage={fullPage}>\n <div className=\"text-center stack-scope flex flex-col gap-4\" style={{ maxWidth: '380px', flexBasis: '380px', padding: fullPage ? '1rem' : 0 }}>\n <Typography type='h3'>{props.title}</Typography>\n {props.children}\n {(props.primaryButtonText || props.secondaryButtonText) && (\n <div className=\"flex justify-center gap-4 my-5\">\n {props.secondaryButtonText && (\n <Button variant=\"secondary\" onClick={props.secondaryAction}>\n {props.secondaryButtonText}\n </Button>\n )}\n {props.primaryButtonText && (\n <Button onClick={props.primaryAction}>\n {props.primaryButtonText}\n </Button>\n )}\n </div>\n )}\n </div>\n </MaybeFullPage>\n );\n}\n"],"mappings":";;;;;;;;;;;AAWA,SAAgB,YACd,EAAE,WAAS,OAAO,GAAG,SAUrB;AACA,QACE,2CAACA;EAAwB;YACvB,4CAAC;GAAI,WAAU;GAA8C,OAAO;IAAE,UAAU;IAAS,WAAW;IAAS,SAAS,WAAW,SAAS;IAAG;;IAC3I,2CAACC;KAAW,MAAK;eAAM,MAAM;MAAmB;IAC/C,MAAM;KACL,MAAM,qBAAqB,MAAM,wBACjC,4CAAC;KAAI,WAAU;gBACZ,MAAM,uBACL,2CAACC;MAAO,SAAQ;MAAY,SAAS,MAAM;gBACxC,MAAM;OACA,EAEV,MAAM,qBACL,2CAACA;MAAO,SAAS,MAAM;gBACpB,MAAM;OACA;MAEP;;IAEJ;GACQ"}
@@ -10,7 +10,7 @@ let ______lib_translations_js = require("../../lib/translations.js");
10
10
 
11
11
  //#region src/components/message-cards/predefined-message-card.tsx
12
12
  function PredefinedMessageCard({ type, fullPage = false }) {
13
- const stackApp = (0, ______index_js.useStackApp)();
13
+ const hexclaveApp = (0, ______index_js.useStackApp)();
14
14
  const { t } = (0, ______lib_translations_js.useTranslation)();
15
15
  let title;
16
16
  let message = null;
@@ -21,39 +21,39 @@ function PredefinedMessageCard({ type, fullPage = false }) {
21
21
  switch (type) {
22
22
  case "signedIn":
23
23
  title = t("You are already signed in");
24
- primaryAction = () => stackApp.redirectToHome();
25
- secondaryAction = () => stackApp.redirectToSignOut();
24
+ primaryAction = () => hexclaveApp.redirectToHome();
25
+ secondaryAction = () => hexclaveApp.redirectToSignOut();
26
26
  primaryButton = t("Go home");
27
27
  secondaryButton = t("Sign out");
28
28
  break;
29
29
  case "signedOut":
30
30
  title = t("You are not currently signed in.");
31
- primaryAction = () => stackApp.redirectToSignIn();
31
+ primaryAction = () => hexclaveApp.redirectToSignIn();
32
32
  primaryButton = t("Sign in");
33
33
  break;
34
34
  case "signUpDisabled":
35
35
  title = t("Sign up for new users is not enabled at the moment.");
36
- primaryAction = () => stackApp.redirectToHome();
37
- secondaryAction = () => stackApp.redirectToSignIn();
36
+ primaryAction = () => hexclaveApp.redirectToHome();
37
+ secondaryAction = () => hexclaveApp.redirectToSignIn();
38
38
  primaryButton = t("Go home");
39
39
  secondaryButton = t("Sign in");
40
40
  break;
41
41
  case "emailSent":
42
42
  title = t("Email sent!");
43
43
  message = t("If the user with this e-mail address exists, an e-mail was sent to your inbox. Make sure to check your spam folder.");
44
- primaryAction = () => stackApp.redirectToHome();
44
+ primaryAction = () => hexclaveApp.redirectToHome();
45
45
  primaryButton = t("Go home");
46
46
  break;
47
47
  case "passwordReset":
48
48
  title = t("Password reset successfully!");
49
49
  message = t("Your password has been reset. You can now sign in with your new password.");
50
- primaryAction = () => stackApp.redirectToSignIn({ noRedirectBack: true });
50
+ primaryAction = () => hexclaveApp.redirectToSignIn({ noRedirectBack: true });
51
51
  primaryButton = t("Sign in");
52
52
  break;
53
53
  case "unknownError":
54
54
  title = t("An unknown error occurred");
55
55
  message = t("Please try again and if the problem persists, contact support.");
56
- primaryAction = () => stackApp.redirectToHome();
56
+ primaryAction = () => hexclaveApp.redirectToHome();
57
57
  primaryButton = t("Go home");
58
58
  break;
59
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"predefined-message-card.js","names":["MessageCard","Typography"],"sources":["../../../src/components/message-cards/predefined-message-card.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 { Typography } from \"@hexclave/ui\";\nimport { useStackApp } from \"../..\";\nimport { useTranslation } from \"../../lib/translations\";\nimport { MessageCard } from \"./message-card\";\n\nexport function PredefinedMessageCard({\n type,\n fullPage=false,\n}: {\n type: 'signedIn' | 'signedOut' | 'emailSent' | 'passwordReset' | 'unknownError' | 'signUpDisabled',\n fullPage?: boolean,\n}) {\n const stackApp = useStackApp();\n const { t } = useTranslation();\n\n let title: string;\n let message: string | null = null;\n let primaryButton: string | null = null;\n let secondaryButton: string | null = null;\n let primaryAction: (() => Promise<void> | void) | null = null;\n let secondaryAction: (() => Promise<void> | void) | null = null;\n\n switch (type) {\n case 'signedIn': {\n title = t(\"You are already signed in\");\n primaryAction = () => stackApp.redirectToHome();\n secondaryAction = () => stackApp.redirectToSignOut();\n primaryButton = t(\"Go home\");\n secondaryButton = t(\"Sign out\");\n break;\n }\n case 'signedOut': {\n title = t(\"You are not currently signed in.\");\n primaryAction = () => stackApp.redirectToSignIn();\n primaryButton = t(\"Sign in\");\n break;\n }\n case 'signUpDisabled': {\n title = t(\"Sign up for new users is not enabled at the moment.\");\n primaryAction = () => stackApp.redirectToHome();\n secondaryAction = () => stackApp.redirectToSignIn();\n primaryButton = t(\"Go home\");\n secondaryButton = t(\"Sign in\");\n break;\n }\n case 'emailSent': {\n title = t(\"Email sent!\");\n message = t(\"If the user with this e-mail address exists, an e-mail was sent to your inbox. Make sure to check your spam folder.\");\n primaryAction = () => stackApp.redirectToHome();\n primaryButton = t(\"Go home\");\n break;\n }\n case 'passwordReset': {\n title = t(\"Password reset successfully!\");\n message = t(\"Your password has been reset. You can now sign in with your new password.\");\n primaryAction = () => stackApp.redirectToSignIn({ noRedirectBack: true });\n primaryButton = t(\"Sign in\");\n break;\n }\n case 'unknownError': {\n title = t(\"An unknown error occurred\");\n message = t(\"Please try again and if the problem persists, contact support.\");\n primaryAction = () => stackApp.redirectToHome();\n primaryButton = t(\"Go home\");\n break;\n }\n }\n\n return (\n <MessageCard\n title={title}\n fullPage={fullPage}\n primaryButtonText={primaryButton}\n primaryAction={primaryAction}\n secondaryButtonText={secondaryButton || undefined}\n secondaryAction={secondaryAction || undefined}\n >\n {message && <Typography>{message}</Typography>}\n </MessageCard>\n );\n}\n"],"mappings":";;;;;;;;;;;AAYA,SAAgB,sBAAsB,EACpC,MACA,WAAS,SAIR;CACD,MAAM,4CAAwB;CAC9B,MAAM,EAAE,qDAAsB;CAE9B,IAAI;CACJ,IAAI,UAAyB;CAC7B,IAAI,gBAA+B;CACnC,IAAI,kBAAiC;CACrC,IAAI,gBAAqD;CACzD,IAAI,kBAAuD;AAE3D,SAAQ,MAAR;EACE,KAAK;AACH,WAAQ,EAAE,4BAA4B;AACtC,yBAAsB,SAAS,gBAAgB;AAC/C,2BAAwB,SAAS,mBAAmB;AACpD,mBAAgB,EAAE,UAAU;AAC5B,qBAAkB,EAAE,WAAW;AAC/B;EAEF,KAAK;AACH,WAAQ,EAAE,mCAAmC;AAC7C,yBAAsB,SAAS,kBAAkB;AACjD,mBAAgB,EAAE,UAAU;AAC5B;EAEF,KAAK;AACH,WAAQ,EAAE,sDAAsD;AAChE,yBAAsB,SAAS,gBAAgB;AAC/C,2BAAwB,SAAS,kBAAkB;AACnD,mBAAgB,EAAE,UAAU;AAC5B,qBAAkB,EAAE,UAAU;AAC9B;EAEF,KAAK;AACH,WAAQ,EAAE,cAAc;AACxB,aAAU,EAAE,sHAAsH;AAClI,yBAAsB,SAAS,gBAAgB;AAC/C,mBAAgB,EAAE,UAAU;AAC5B;EAEF,KAAK;AACH,WAAQ,EAAE,+BAA+B;AACzC,aAAU,EAAE,4EAA4E;AACxF,yBAAsB,SAAS,iBAAiB,EAAE,gBAAgB,MAAM,CAAC;AACzE,mBAAgB,EAAE,UAAU;AAC5B;EAEF,KAAK;AACH,WAAQ,EAAE,4BAA4B;AACtC,aAAU,EAAE,iEAAiE;AAC7E,yBAAsB,SAAS,gBAAgB;AAC/C,mBAAgB,EAAE,UAAU;AAC5B;;AAIJ,QACE,2CAACA;EACQ;EACG;EACV,mBAAmB;EACJ;EACf,qBAAqB,mBAAmB;EACxC,iBAAiB,mBAAmB;YAEnC,WAAW,2CAACC,qCAAY,UAAqB;GAClC"}
1
+ {"version":3,"file":"predefined-message-card.js","names":["MessageCard","Typography"],"sources":["../../../src/components/message-cards/predefined-message-card.tsx"],"sourcesContent":["\"use client\";\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { Typography } from \"@hexclave/ui\";\nimport { useStackApp } from \"../..\";\nimport { useTranslation } from \"../../lib/translations\";\nimport { MessageCard } from \"./message-card\";\n\nexport function PredefinedMessageCard({\n type,\n fullPage=false,\n}: {\n type: 'signedIn' | 'signedOut' | 'emailSent' | 'passwordReset' | 'unknownError' | 'signUpDisabled',\n fullPage?: boolean,\n}) {\n const hexclaveApp = useStackApp();\n const { t } = useTranslation();\n\n let title: string;\n let message: string | null = null;\n let primaryButton: string | null = null;\n let secondaryButton: string | null = null;\n let primaryAction: (() => Promise<void> | void) | null = null;\n let secondaryAction: (() => Promise<void> | void) | null = null;\n\n switch (type) {\n case 'signedIn': {\n title = t(\"You are already signed in\");\n primaryAction = () => hexclaveApp.redirectToHome();\n secondaryAction = () => hexclaveApp.redirectToSignOut();\n primaryButton = t(\"Go home\");\n secondaryButton = t(\"Sign out\");\n break;\n }\n case 'signedOut': {\n title = t(\"You are not currently signed in.\");\n primaryAction = () => hexclaveApp.redirectToSignIn();\n primaryButton = t(\"Sign in\");\n break;\n }\n case 'signUpDisabled': {\n title = t(\"Sign up for new users is not enabled at the moment.\");\n primaryAction = () => hexclaveApp.redirectToHome();\n secondaryAction = () => hexclaveApp.redirectToSignIn();\n primaryButton = t(\"Go home\");\n secondaryButton = t(\"Sign in\");\n break;\n }\n case 'emailSent': {\n title = t(\"Email sent!\");\n message = t(\"If the user with this e-mail address exists, an e-mail was sent to your inbox. Make sure to check your spam folder.\");\n primaryAction = () => hexclaveApp.redirectToHome();\n primaryButton = t(\"Go home\");\n break;\n }\n case 'passwordReset': {\n title = t(\"Password reset successfully!\");\n message = t(\"Your password has been reset. You can now sign in with your new password.\");\n primaryAction = () => hexclaveApp.redirectToSignIn({ noRedirectBack: true });\n primaryButton = t(\"Sign in\");\n break;\n }\n case 'unknownError': {\n title = t(\"An unknown error occurred\");\n message = t(\"Please try again and if the problem persists, contact support.\");\n primaryAction = () => hexclaveApp.redirectToHome();\n primaryButton = t(\"Go home\");\n break;\n }\n }\n\n return (\n <MessageCard\n title={title}\n fullPage={fullPage}\n primaryButtonText={primaryButton}\n primaryAction={primaryAction}\n secondaryButtonText={secondaryButton || undefined}\n secondaryAction={secondaryAction || undefined}\n >\n {message && <Typography>{message}</Typography>}\n </MessageCard>\n );\n}\n"],"mappings":";;;;;;;;;;;AAYA,SAAgB,sBAAsB,EACpC,MACA,WAAS,SAIR;CACD,MAAM,+CAA2B;CACjC,MAAM,EAAE,qDAAsB;CAE9B,IAAI;CACJ,IAAI,UAAyB;CAC7B,IAAI,gBAA+B;CACnC,IAAI,kBAAiC;CACrC,IAAI,gBAAqD;CACzD,IAAI,kBAAuD;AAE3D,SAAQ,MAAR;EACE,KAAK;AACH,WAAQ,EAAE,4BAA4B;AACtC,yBAAsB,YAAY,gBAAgB;AAClD,2BAAwB,YAAY,mBAAmB;AACvD,mBAAgB,EAAE,UAAU;AAC5B,qBAAkB,EAAE,WAAW;AAC/B;EAEF,KAAK;AACH,WAAQ,EAAE,mCAAmC;AAC7C,yBAAsB,YAAY,kBAAkB;AACpD,mBAAgB,EAAE,UAAU;AAC5B;EAEF,KAAK;AACH,WAAQ,EAAE,sDAAsD;AAChE,yBAAsB,YAAY,gBAAgB;AAClD,2BAAwB,YAAY,kBAAkB;AACtD,mBAAgB,EAAE,UAAU;AAC5B,qBAAkB,EAAE,UAAU;AAC9B;EAEF,KAAK;AACH,WAAQ,EAAE,cAAc;AACxB,aAAU,EAAE,sHAAsH;AAClI,yBAAsB,YAAY,gBAAgB;AAClD,mBAAgB,EAAE,UAAU;AAC5B;EAEF,KAAK;AACH,WAAQ,EAAE,+BAA+B;AACzC,aAAU,EAAE,4EAA4E;AACxF,yBAAsB,YAAY,iBAAiB,EAAE,gBAAgB,MAAM,CAAC;AAC5E,mBAAgB,EAAE,UAAU;AAC5B;EAEF,KAAK;AACH,WAAQ,EAAE,4BAA4B;AACtC,aAAU,EAAE,iEAAiE;AAC7E,yBAAsB,YAAY,gBAAgB;AAClD,mBAAgB,EAAE,UAAU;AAC5B;;AAIJ,QACE,2CAACA;EACQ;EACG;EACV,mBAAmB;EACJ;EACf,qBAAqB,mBAAmB;EACxC,iBAAiB,mBAAmB;YAEnC,WAAW,2CAACC,qCAAY,UAAqB;GAClC"}
@@ -8,10 +8,10 @@ let __oauth_button_js = require("./oauth-button.js");
8
8
 
9
9
  //#region src/components/oauth-button-group.tsx
10
10
  function OAuthButtonGroup({ type, mockProject }) {
11
- const stackApp = (0, ___lib_hooks_js.useStackApp)();
11
+ const hexclaveApp = (0, ___lib_hooks_js.useStackApp)();
12
12
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
13
13
  className: "gap-4 flex flex-col items-stretch stack-scope",
14
- children: (mockProject || stackApp.useProject()).config.oauthProviders.map((p) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__oauth_button_js.OAuthButton, {
14
+ children: (mockProject || hexclaveApp.useProject()).config.oauthProviders.map((p) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__oauth_button_js.OAuthButton, {
15
15
  provider: p.id,
16
16
  type,
17
17
  isMock: !!mockProject
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-button-group.js","names":["OAuthButton"],"sources":["../../src/components/oauth-button-group.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 { useStackApp } from \"../lib/hooks\";\nimport { OAuthButton } from \"./oauth-button\";\n\nexport function OAuthButtonGroup({\n type,\n mockProject,\n}: {\n type: 'sign-in' | 'sign-up',\n mockProject?: {\n config: {\n oauthProviders: {\n id: string,\n }[],\n },\n },\n}) {\n const stackApp = useStackApp();\n const project = mockProject || stackApp.useProject();\n return (\n <div className='gap-4 flex flex-col items-stretch stack-scope'>\n {project.config.oauthProviders.map(p => (\n <OAuthButton key={p.id} provider={p.id} type={type}\n isMock={!!mockProject}\n />\n ))}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAUA,SAAgB,iBAAiB,EAC/B,MACA,eAUC;CACD,MAAM,6CAAwB;AAE9B,QACE,2CAAC;EAAI,WAAU;aAFD,eAAe,SAAS,YAAY,EAGvC,OAAO,eAAe,KAAI,MACjC,2CAACA;GAAuB,UAAU,EAAE;GAAU;GAC5C,QAAQ,CAAC,CAAC;KADM,EAAE,GAElB,CACF;GACE"}
1
+ {"version":3,"file":"oauth-button-group.js","names":["OAuthButton"],"sources":["../../src/components/oauth-button-group.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { useStackApp } from \"../lib/hooks\";\nimport { OAuthButton } from \"./oauth-button\";\n\nexport function OAuthButtonGroup({\n type,\n mockProject,\n}: {\n type: 'sign-in' | 'sign-up',\n mockProject?: {\n config: {\n oauthProviders: {\n id: string,\n }[],\n },\n },\n}) {\n const hexclaveApp = useStackApp();\n const project = mockProject || hexclaveApp.useProject();\n return (\n <div className='gap-4 flex flex-col items-stretch stack-scope'>\n {project.config.oauthProviders.map(p => (\n <OAuthButton key={p.id} provider={p.id} type={type}\n isMock={!!mockProject}\n />\n ))}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAUA,SAAgB,iBAAiB,EAC/B,MACA,eAUC;CACD,MAAM,gDAA2B;AAEjC,QACE,2CAAC;EAAI,WAAU;aAFD,eAAe,YAAY,YAAY,EAG1C,OAAO,eAAe,KAAI,MACjC,2CAACA;GAAuB,UAAU,EAAE;GAAU;GAC5C,QAAQ,CAAC,CAAC;KADM,EAAE,GAElB,CACF;GACE"}
@@ -19,7 +19,7 @@ const changeColor = (c, value) => {
19
19
  };
20
20
  function OAuthButton({ provider, type, isMock = false, onAuthenticate }) {
21
21
  const { t } = (0, ___lib_translations_js.useTranslation)();
22
- const stackApp = (0, ___lib_hooks_js.useStackApp)();
22
+ const hexclaveApp = (0, ___lib_hooks_js.useStackApp)();
23
23
  const styleId = (0, react.useId)().replaceAll(":", "-");
24
24
  const isIframe = (0, __use_in_iframe_js.useInIframe)();
25
25
  const [lastUsed, setLastUsed] = (0, react.useState)(null);
@@ -150,7 +150,7 @@ function OAuthButton({ provider, type, isMock = false, onAuthenticate }) {
150
150
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_hexclave_ui.Button, {
151
151
  onClick: async () => {
152
152
  localStorage.setItem("_HEXCLAVE.lastUsed", provider);
153
- await (onAuthenticate ? onAuthenticate() : stackApp.signInWithOAuth(provider));
153
+ await (onAuthenticate ? onAuthenticate() : hexclaveApp.signInWithOAuth(provider));
154
154
  },
155
155
  className: `stack-oauth-button-${styleId} stack-scope relative w-full`,
156
156
  disabled: isIframe,
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-button.js","names":["BrandIcons","SimpleTooltip","Button"],"sources":["../../src/components/oauth-button.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 { BrandIcons, Button, SimpleTooltip } from '@hexclave/ui';\nimport Color, { ColorInstance } from 'color';\nimport type { ReactElement } from 'react';\nimport { useEffect, useId, useState } from 'react';\nimport { useStackApp } from '../lib/hooks';\nimport { useTranslation } from '../lib/translations';\nimport { useInIframe } from './use-in-iframe';\n\nconst iconSize = 22;\n\nconst changeColor = (c: ColorInstance, value: number) => {\n if (c.isLight()) {\n value = -value;\n }\n return c.hsl(c.hue(), c.saturationl(), c.lightness() + value).toString();\n};\n\nexport function OAuthButton({\n provider,\n type,\n isMock = false,\n onAuthenticate,\n}: {\n provider: string,\n type: 'sign-in' | 'sign-up',\n isMock?: boolean,\n onAuthenticate?: () => Promise<void>,\n}) {\n const { t } = useTranslation();\n const stackApp = useStackApp();\n const styleId = useId().replaceAll(':', '-');\n const isIframe = useInIframe();\n\n const [lastUsed, setLastUsed] = useState<string | null>(null);\n useEffect(() => {\n // Hexclave rebrand: UI hint key — straight rename (dot delimiter preserved).\n setLastUsed(localStorage.getItem('_HEXCLAVE.lastUsed'));\n }, []);\n\n let style : {\n backgroundColor?: string,\n textColor?: string,\n name: string,\n icon: ReactElement | null,\n border?: string,\n };\n switch (provider) {\n case 'google': {\n style = {\n backgroundColor: '#fff',\n textColor: '#000',\n name: 'Google',\n border: '1px solid #ddd',\n icon: <BrandIcons.Google iconSize={iconSize} />,\n };\n break;\n }\n case 'github': {\n style = {\n backgroundColor: '#111',\n textColor: '#fff',\n border: '1px solid #333',\n name: 'GitHub',\n icon: <BrandIcons.GitHub iconSize={iconSize} />,\n };\n break;\n }\n case 'facebook': {\n style = {\n backgroundColor: '#1877F2',\n textColor: '#fff',\n name: 'Facebook',\n icon: <BrandIcons.Facebook iconSize={iconSize} />,\n };\n break;\n }\n case 'microsoft': {\n style = {\n backgroundColor: '#2f2f2f',\n textColor: '#fff',\n name: 'Microsoft',\n icon: <BrandIcons.Microsoft iconSize={iconSize} />,\n };\n break;\n }\n case 'spotify': {\n style = {\n backgroundColor: '#1DB954',\n textColor: '#fff',\n name: 'Spotify',\n icon: <BrandIcons.Spotify iconSize={iconSize} />,\n };\n break;\n }\n case 'discord': {\n style = {\n backgroundColor: '#5865F2',\n textColor: '#fff',\n name: 'Discord',\n icon: <BrandIcons.Discord iconSize={iconSize} />,\n };\n break;\n }\n case 'gitlab': {\n style = {\n backgroundColor: \"#111\",\n textColor: \"#fff\",\n border: \"1px solid #333\",\n name: \"Gitlab\",\n icon: <BrandIcons.Gitlab iconSize={iconSize} />,\n };\n break;\n }\n case 'apple': {\n style = {\n backgroundColor: \"#000\",\n textColor: \"#fff\",\n border: \"1px solid #333\",\n name: \"Apple\",\n icon: <BrandIcons.Apple iconSize={iconSize} />,\n };\n break;\n }\n case \"bitbucket\": {\n style = {\n backgroundColor: \"#fff\",\n textColor: \"#000\",\n border: \"1px solid #ddd\",\n name: \"Bitbucket\",\n icon: <BrandIcons.Bitbucket iconSize={iconSize} />,\n };\n break;\n }\n case 'linkedin': {\n style = {\n backgroundColor: \"#0073b1\",\n textColor: \"#fff\",\n name: \"LinkedIn\",\n icon: <BrandIcons.LinkedIn iconSize={iconSize} />,\n };\n break;\n }\n case 'x': {\n style = {\n backgroundColor: \"#000\",\n textColor: \"#fff\",\n name: \"X\",\n icon: <BrandIcons.X iconSize={iconSize} />,\n };\n break;\n }\n case 'twitch': {\n style = {\n backgroundColor: \"#6441a5\",\n textColor: \"#fff\",\n name: \"Twitch\",\n icon: <BrandIcons.Twitch iconSize={iconSize} />,\n };\n break;\n }\n default: {\n style = {\n name: provider,\n icon: null,\n };\n }\n }\n\n const styleSheet = `\n .stack-oauth-button-${styleId} {\n background-color: ${style.backgroundColor} !important;\n color: ${style.textColor} !important;\n border: ${style.border} !important;\n }\n .stack-oauth-button-${styleId}:hover {\n background-color: ${changeColor(Color(style.backgroundColor), 10)} !important;\n }\n `;\n\n return (\n <>\n <style>{styleSheet}</style>\n <SimpleTooltip\n disabled={!isIframe}\n tooltip={isIframe ? \"This auth provider is not supported in an iframe for security reasons.\" : undefined}\n className='stack-scope w-full inline-flex'\n >\n <Button\n onClick={async () => {\n // Hexclave rebrand: UI hint key — straight rename (dot delimiter preserved).\n localStorage.setItem('_HEXCLAVE.lastUsed', provider);\n await (onAuthenticate ? onAuthenticate() : stackApp.signInWithOAuth(provider));\n }}\n className={`stack-oauth-button-${styleId} stack-scope relative w-full`}\n disabled={isIframe}\n >\n {!isMock && lastUsed === provider && (\n <span className=\"absolute -top-2 -right-2 bg-blue-500 text-white text-xs px-2 py-1 rounded-md\">\n last\n </span>\n )}\n <div className='flex items-center w-full gap-4'>\n {style.icon}\n <span className='flex-1'>\n {type === 'sign-up' ?\n t('Sign up with {provider}', { provider: style.name }) :\n t('Sign in with {provider}', { provider: style.name })\n }\n </span>\n </div>\n </Button>\n </SimpleTooltip>\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"oauth-button.js","names":["BrandIcons","SimpleTooltip","Button"],"sources":["../../src/components/oauth-button.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { BrandIcons, Button, SimpleTooltip } from '@hexclave/ui';\nimport Color, { ColorInstance } from 'color';\nimport type { ReactElement } from 'react';\nimport { useEffect, useId, useState } from 'react';\nimport { useStackApp } from '../lib/hooks';\nimport { useTranslation } from '../lib/translations';\nimport { useInIframe } from './use-in-iframe';\n\nconst iconSize = 22;\n\nconst changeColor = (c: ColorInstance, value: number) => {\n if (c.isLight()) {\n value = -value;\n }\n return c.hsl(c.hue(), c.saturationl(), c.lightness() + value).toString();\n};\n\nexport function OAuthButton({\n provider,\n type,\n isMock = false,\n onAuthenticate,\n}: {\n provider: string,\n type: 'sign-in' | 'sign-up',\n isMock?: boolean,\n onAuthenticate?: () => Promise<void>,\n}) {\n const { t } = useTranslation();\n const hexclaveApp = useStackApp();\n const styleId = useId().replaceAll(':', '-');\n const isIframe = useInIframe();\n\n const [lastUsed, setLastUsed] = useState<string | null>(null);\n useEffect(() => {\n // Hexclave rebrand: UI hint key — straight rename (dot delimiter preserved).\n setLastUsed(localStorage.getItem('_HEXCLAVE.lastUsed'));\n }, []);\n\n let style : {\n backgroundColor?: string,\n textColor?: string,\n name: string,\n icon: ReactElement | null,\n border?: string,\n };\n switch (provider) {\n case 'google': {\n style = {\n backgroundColor: '#fff',\n textColor: '#000',\n name: 'Google',\n border: '1px solid #ddd',\n icon: <BrandIcons.Google iconSize={iconSize} />,\n };\n break;\n }\n case 'github': {\n style = {\n backgroundColor: '#111',\n textColor: '#fff',\n border: '1px solid #333',\n name: 'GitHub',\n icon: <BrandIcons.GitHub iconSize={iconSize} />,\n };\n break;\n }\n case 'facebook': {\n style = {\n backgroundColor: '#1877F2',\n textColor: '#fff',\n name: 'Facebook',\n icon: <BrandIcons.Facebook iconSize={iconSize} />,\n };\n break;\n }\n case 'microsoft': {\n style = {\n backgroundColor: '#2f2f2f',\n textColor: '#fff',\n name: 'Microsoft',\n icon: <BrandIcons.Microsoft iconSize={iconSize} />,\n };\n break;\n }\n case 'spotify': {\n style = {\n backgroundColor: '#1DB954',\n textColor: '#fff',\n name: 'Spotify',\n icon: <BrandIcons.Spotify iconSize={iconSize} />,\n };\n break;\n }\n case 'discord': {\n style = {\n backgroundColor: '#5865F2',\n textColor: '#fff',\n name: 'Discord',\n icon: <BrandIcons.Discord iconSize={iconSize} />,\n };\n break;\n }\n case 'gitlab': {\n style = {\n backgroundColor: \"#111\",\n textColor: \"#fff\",\n border: \"1px solid #333\",\n name: \"Gitlab\",\n icon: <BrandIcons.Gitlab iconSize={iconSize} />,\n };\n break;\n }\n case 'apple': {\n style = {\n backgroundColor: \"#000\",\n textColor: \"#fff\",\n border: \"1px solid #333\",\n name: \"Apple\",\n icon: <BrandIcons.Apple iconSize={iconSize} />,\n };\n break;\n }\n case \"bitbucket\": {\n style = {\n backgroundColor: \"#fff\",\n textColor: \"#000\",\n border: \"1px solid #ddd\",\n name: \"Bitbucket\",\n icon: <BrandIcons.Bitbucket iconSize={iconSize} />,\n };\n break;\n }\n case 'linkedin': {\n style = {\n backgroundColor: \"#0073b1\",\n textColor: \"#fff\",\n name: \"LinkedIn\",\n icon: <BrandIcons.LinkedIn iconSize={iconSize} />,\n };\n break;\n }\n case 'x': {\n style = {\n backgroundColor: \"#000\",\n textColor: \"#fff\",\n name: \"X\",\n icon: <BrandIcons.X iconSize={iconSize} />,\n };\n break;\n }\n case 'twitch': {\n style = {\n backgroundColor: \"#6441a5\",\n textColor: \"#fff\",\n name: \"Twitch\",\n icon: <BrandIcons.Twitch iconSize={iconSize} />,\n };\n break;\n }\n default: {\n style = {\n name: provider,\n icon: null,\n };\n }\n }\n\n const styleSheet = `\n .stack-oauth-button-${styleId} {\n background-color: ${style.backgroundColor} !important;\n color: ${style.textColor} !important;\n border: ${style.border} !important;\n }\n .stack-oauth-button-${styleId}:hover {\n background-color: ${changeColor(Color(style.backgroundColor), 10)} !important;\n }\n `;\n\n return (\n <>\n <style>{styleSheet}</style>\n <SimpleTooltip\n disabled={!isIframe}\n tooltip={isIframe ? \"This auth provider is not supported in an iframe for security reasons.\" : undefined}\n className='stack-scope w-full inline-flex'\n >\n <Button\n onClick={async () => {\n // Hexclave rebrand: UI hint key — straight rename (dot delimiter preserved).\n localStorage.setItem('_HEXCLAVE.lastUsed', provider);\n await (onAuthenticate ? onAuthenticate() : hexclaveApp.signInWithOAuth(provider));\n }}\n className={`stack-oauth-button-${styleId} stack-scope relative w-full`}\n disabled={isIframe}\n >\n {!isMock && lastUsed === provider && (\n <span className=\"absolute -top-2 -right-2 bg-blue-500 text-white text-xs px-2 py-1 rounded-md\">\n last\n </span>\n )}\n <div className='flex items-center w-full gap-4'>\n {style.icon}\n <span className='flex-1'>\n {type === 'sign-up' ?\n t('Sign up with {provider}', { provider: style.name }) :\n t('Sign in with {provider}', { provider: style.name })\n }\n </span>\n </div>\n </Button>\n </SimpleTooltip>\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAeA,MAAM,WAAW;AAEjB,MAAM,eAAe,GAAkB,UAAkB;AACvD,KAAI,EAAE,SAAS,CACb,SAAQ,CAAC;AAEX,QAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,EAAE,WAAW,GAAG,MAAM,CAAC,UAAU;;AAG1E,SAAgB,YAAY,EAC1B,UACA,MACA,SAAS,OACT,kBAMC;CACD,MAAM,EAAE,kDAAsB;CAC9B,MAAM,gDAA2B;CACjC,MAAM,4BAAiB,CAAC,WAAW,KAAK,IAAI;CAC5C,MAAM,gDAAwB;CAE9B,MAAM,CAAC,UAAU,mCAAuC,KAAK;AAC7D,4BAAgB;AAEd,cAAY,aAAa,QAAQ,qBAAqB,CAAC;IACtD,EAAE,CAAC;CAEN,IAAI;AAOJ,SAAQ,UAAR;EACE,KAAK;AACH,WAAQ;IACN,iBAAiB;IACjB,WAAW;IACX,MAAM;IACN,QAAQ;IACR,MAAM,2CAACA,wBAAW,UAAiB,WAAY;IAChD;AACD;EAEF,KAAK;AACH,WAAQ;IACN,iBAAiB;IACjB,WAAW;IACX,QAAQ;IACR,MAAM;IACN,MAAM,2CAACA,wBAAW,UAAiB,WAAY;IAChD;AACD;EAEF,KAAK;AACH,WAAQ;IACN,iBAAiB;IACjB,WAAW;IACX,MAAM;IACN,MAAM,2CAACA,wBAAW,YAAmB,WAAY;IAClD;AACD;EAEF,KAAK;AACH,WAAQ;IACN,iBAAiB;IACjB,WAAW;IACX,MAAM;IACN,MAAM,2CAACA,wBAAW,aAAoB,WAAY;IACnD;AACD;EAEF,KAAK;AACH,WAAQ;IACN,iBAAiB;IACjB,WAAW;IACX,MAAM;IACN,MAAM,2CAACA,wBAAW,WAAkB,WAAY;IACjD;AACD;EAEF,KAAK;AACH,WAAQ;IACN,iBAAiB;IACjB,WAAW;IACX,MAAM;IACN,MAAM,2CAACA,wBAAW,WAAkB,WAAY;IACjD;AACD;EAEF,KAAK;AACH,WAAQ;IACN,iBAAiB;IACjB,WAAW;IACX,QAAQ;IACR,MAAM;IACN,MAAM,2CAACA,wBAAW,UAAiB,WAAY;IAChD;AACD;EAEF,KAAK;AACH,WAAQ;IACN,iBAAiB;IACjB,WAAW;IACX,QAAQ;IACR,MAAM;IACN,MAAM,2CAACA,wBAAW,SAAgB,WAAY;IAC/C;AACD;EAEF,KAAK;AACH,WAAQ;IACN,iBAAiB;IACjB,WAAW;IACX,QAAQ;IACR,MAAM;IACN,MAAM,2CAACA,wBAAW,aAAoB,WAAY;IACnD;AACD;EAEF,KAAK;AACH,WAAQ;IACN,iBAAiB;IACjB,WAAW;IACX,MAAM;IACN,MAAM,2CAACA,wBAAW,YAAmB,WAAY;IAClD;AACD;EAEF,KAAK;AACH,WAAQ;IACN,iBAAiB;IACjB,WAAW;IACX,MAAM;IACN,MAAM,2CAACA,wBAAW,KAAY,WAAY;IAC3C;AACD;EAEF,KAAK;AACH,WAAQ;IACN,iBAAiB;IACjB,WAAW;IACX,MAAM;IACN,MAAM,2CAACA,wBAAW,UAAiB,WAAY;IAChD;AACD;EAEF,QACE,SAAQ;GACN,MAAM;GACN,MAAM;GACP;;AAeL,QACE,qFACE,2CAAC,qBAbc;0BACK,QAAQ;0BACR,MAAM,gBAAgB;eACjC,MAAM,UAAU;gBACf,MAAM,OAAO;;0BAEH,QAAQ;0BACR,+BAAkB,MAAM,gBAAgB,EAAE,GAAG,CAAC;;MAMvC,EAC3B,2CAACC;EACC,UAAU,CAAC;EACX,SAAS,WAAW,2EAA2E;EAC/F,WAAU;YAEV,4CAACC;GACC,SAAS,YAAY;AAEnB,iBAAa,QAAQ,sBAAsB,SAAS;AACpD,WAAO,iBAAiB,gBAAgB,GAAG,YAAY,gBAAgB,SAAS;;GAElF,WAAW,sBAAsB,QAAQ;GACzC,UAAU;cAET,CAAC,UAAU,aAAa,YACvB,2CAAC;IAAK,WAAU;cAA+E;KAExF,EAET,4CAAC;IAAI,WAAU;eACZ,MAAM,MACP,2CAAC;KAAK,WAAU;eACb,SAAS,YACV,EAAE,2BAA2B,EAAE,UAAU,MAAM,MAAM,CAAC,GACtD,EAAE,2BAA2B,EAAE,UAAU,MAAM,MAAM,CAAC;MAEjD;KACH;IACC;GACK,IACf"}
@@ -12,10 +12,10 @@ let lucide_react = require("lucide-react");
12
12
  //#region src/components/passkey-button.tsx
13
13
  function PasskeyButton({ type }) {
14
14
  const { t } = (0, ___lib_translations_js.useTranslation)();
15
- const stackApp = (0, ___index_js.useStackApp)();
15
+ const hexclaveApp = (0, ___index_js.useStackApp)();
16
16
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Button, {
17
17
  onClick: async () => {
18
- await stackApp.signInWithPasskey();
18
+ await hexclaveApp.signInWithPasskey();
19
19
  },
20
20
  className: `stack-oauth-button-${(0, react.useId)().replaceAll(":", "-")} stack-scope`,
21
21
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
@@ -1 +1 @@
1
- {"version":3,"file":"passkey-button.js","names":["Button","KeyRound"],"sources":["../../src/components/passkey-button.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 { Button } from '@hexclave/ui';\nimport { KeyRound } from 'lucide-react';\nimport { useId } from 'react';\nimport { useStackApp } from '..';\nimport { useTranslation } from '../lib/translations';\n\n\nexport function PasskeyButton({\n type,\n}: {\n type: 'sign-in' | 'sign-up',\n}) {\n const { t } = useTranslation();\n const stackApp = useStackApp();\n const styleId = useId().replaceAll(':', '-');\n\n\n return (\n <>\n <Button\n onClick={async () => { await stackApp.signInWithPasskey(); }}\n className={`stack-oauth-button-${styleId} stack-scope`}\n >\n <div className='flex items-center w-full gap-4'>\n <KeyRound />\n <span className='flex-1'>\n {type === 'sign-up' ?\n t('Sign up with Passkey') :\n t('Sign in with Passkey')\n }\n </span>\n </div>\n </Button>\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAcA,SAAgB,cAAc,EAC5B,QAGC;CACD,MAAM,EAAE,kDAAsB;CAC9B,MAAM,yCAAwB;AAI9B,QACE,mFACE,2CAACA;EACC,SAAS,YAAY;AAAE,SAAM,SAAS,mBAAmB;;EACzD,WAAW,wCAPM,CAAC,WAAW,KAAK,IAAI,CAOG;YAEzC,4CAAC;GAAI,WAAU;cACb,2CAACC,0BAAW,EACZ,2CAAC;IAAK,WAAU;cACb,SAAS,YACR,EAAE,uBAAuB,GACzB,EAAE,uBAAuB;KAEtB;IACH;GACC,GACR"}
1
+ {"version":3,"file":"passkey-button.js","names":["Button","KeyRound"],"sources":["../../src/components/passkey-button.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { Button } from '@hexclave/ui';\nimport { KeyRound } from 'lucide-react';\nimport { useId } from 'react';\nimport { useStackApp } from '..';\nimport { useTranslation } from '../lib/translations';\n\n\nexport function PasskeyButton({\n type,\n}: {\n type: 'sign-in' | 'sign-up',\n}) {\n const { t } = useTranslation();\n const hexclaveApp = useStackApp();\n const styleId = useId().replaceAll(':', '-');\n\n\n return (\n <>\n <Button\n onClick={async () => { await hexclaveApp.signInWithPasskey(); }}\n className={`stack-oauth-button-${styleId} stack-scope`}\n >\n <div className='flex items-center w-full gap-4'>\n <KeyRound />\n <span className='flex-1'>\n {type === 'sign-up' ?\n t('Sign up with Passkey') :\n t('Sign in with Passkey')\n }\n </span>\n </div>\n </Button>\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAcA,SAAgB,cAAc,EAC5B,QAGC;CACD,MAAM,EAAE,kDAAsB;CAC9B,MAAM,4CAA2B;AAIjC,QACE,mFACE,2CAACA;EACC,SAAS,YAAY;AAAE,SAAM,YAAY,mBAAmB;;EAC5D,WAAW,wCAPM,CAAC,WAAW,KAAK,IAAI,CAOG;YAEzC,4CAAC;GAAI,WAAU;cACb,2CAACC,0BAAW,EACZ,2CAAC;IAAK,WAAU;cACb,SAAS,YACR,EAAE,uBAAuB,GACzB,EAAE,uBAAuB;KAEtB;IACH;GACC,GACR"}