@hexclave/next 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -23
- package/dist/components/api-key-dialogs.js +18 -18
- package/dist/components/api-key-dialogs.js.map +1 -1
- package/dist/components/api-key-table.js +19 -19
- package/dist/components/api-key-table.js.map +1 -1
- package/dist/components/credential-sign-in.js +12 -12
- package/dist/components/credential-sign-in.js.map +1 -1
- package/dist/components/credential-sign-up.js +19 -19
- package/dist/components/credential-sign-up.js.map +1 -1
- package/dist/components/elements/separator-with-text.js +3 -3
- package/dist/components/elements/separator-with-text.js.map +1 -1
- package/dist/components/elements/sidebar-layout.js +15 -15
- package/dist/components/elements/sidebar-layout.js.map +1 -1
- package/dist/components/elements/user-avatar.js +3 -3
- package/dist/components/elements/user-avatar.js.map +1 -1
- package/dist/components/link.js +2 -2
- package/dist/components/link.js.map +1 -1
- package/dist/components/magic-link-sign-in.js +17 -17
- package/dist/components/magic-link-sign-in.js.map +1 -1
- package/dist/components/message-cards/known-error-message-card.js +2 -2
- package/dist/components/message-cards/known-error-message-card.js.map +1 -1
- package/dist/components/message-cards/message-card.js +4 -4
- package/dist/components/message-cards/message-card.js.map +1 -1
- package/dist/components/message-cards/predefined-message-card.js +2 -2
- package/dist/components/message-cards/predefined-message-card.js.map +1 -1
- package/dist/components/oauth-button.js +15 -15
- package/dist/components/oauth-button.js.map +1 -1
- package/dist/components/passkey-button.js +2 -2
- package/dist/components/passkey-button.js.map +1 -1
- package/dist/components/profile-image-editor.js +9 -9
- package/dist/components/profile-image-editor.js.map +1 -1
- package/dist/components/selected-team-switcher.js +4 -4
- package/dist/components/selected-team-switcher.js.map +1 -1
- package/dist/components/team-icon.js +4 -4
- package/dist/components/team-icon.js.map +1 -1
- package/dist/components/team-switcher.js +21 -21
- package/dist/components/team-switcher.js.map +1 -1
- package/dist/components/user-button.js +13 -13
- package/dist/components/user-button.js.map +1 -1
- package/dist/components-page/account-settings/active-sessions/active-sessions-page.js +32 -32
- package/dist/components-page/account-settings/active-sessions/active-sessions-page.js.map +1 -1
- package/dist/components-page/account-settings/api-keys/api-keys-page.js +2 -2
- package/dist/components-page/account-settings/api-keys/api-keys-page.js.map +1 -1
- package/dist/components-page/account-settings/editable-text.js +5 -5
- package/dist/components-page/account-settings/editable-text.js.map +1 -1
- package/dist/components-page/account-settings/email-and-auth/emails-section.js +22 -22
- package/dist/components-page/account-settings/email-and-auth/emails-section.js.map +1 -1
- package/dist/components-page/account-settings/email-and-auth/mfa-section.js +17 -17
- package/dist/components-page/account-settings/email-and-auth/mfa-section.js.map +1 -1
- package/dist/components-page/account-settings/email-and-auth/otp-section.js +9 -9
- package/dist/components-page/account-settings/email-and-auth/otp-section.js.map +1 -1
- package/dist/components-page/account-settings/email-and-auth/passkey-section.js +9 -9
- package/dist/components-page/account-settings/email-and-auth/passkey-section.js.map +1 -1
- package/dist/components-page/account-settings/email-and-auth/password-section.js +23 -23
- package/dist/components-page/account-settings/email-and-auth/password-section.js.map +1 -1
- package/dist/components-page/account-settings/notifications/notifications-page.js +6 -6
- package/dist/components-page/account-settings/notifications/notifications-page.js.map +1 -1
- package/dist/components-page/account-settings/payments/payments-panel.js +52 -52
- package/dist/components-page/account-settings/payments/payments-panel.js.map +1 -1
- package/dist/components-page/account-settings/section.js +4 -4
- package/dist/components-page/account-settings/section.js.map +1 -1
- package/dist/components-page/account-settings/settings/delete-account-section.js +7 -7
- package/dist/components-page/account-settings/settings/delete-account-section.js.map +1 -1
- package/dist/components-page/account-settings/settings/sign-out-section.js +2 -2
- package/dist/components-page/account-settings/settings/sign-out-section.js.map +1 -1
- package/dist/components-page/account-settings/teams/leave-team-section.js +5 -5
- package/dist/components-page/account-settings/teams/leave-team-section.js.map +1 -1
- package/dist/components-page/account-settings/teams/team-api-keys-section.js +5 -5
- package/dist/components-page/account-settings/teams/team-api-keys-section.js.map +1 -1
- package/dist/components-page/account-settings/teams/team-creation-page.js +7 -7
- package/dist/components-page/account-settings/teams/team-creation-page.js.map +1 -1
- package/dist/components-page/account-settings/teams/team-member-invitation-section.js +20 -20
- package/dist/components-page/account-settings/teams/team-member-invitation-section.js.map +1 -1
- package/dist/components-page/account-settings/teams/team-member-list-section.js +5 -5
- package/dist/components-page/account-settings/teams/team-member-list-section.js.map +1 -1
- package/dist/components-page/account-settings.js +22 -22
- package/dist/components-page/account-settings.js.map +1 -1
- package/dist/components-page/auth-page.js +23 -23
- package/dist/components-page/auth-page.js.map +1 -1
- package/dist/components-page/cli-auth-confirm.js +9 -9
- package/dist/components-page/cli-auth-confirm.js.map +1 -1
- package/dist/components-page/cli-auth-confirm.test.js +4 -4
- package/dist/components-page/cli-auth-confirm.test.js.map +1 -1
- package/dist/components-page/email-verification.js +6 -6
- package/dist/components-page/email-verification.js.map +1 -1
- package/dist/components-page/error-page.js +11 -11
- package/dist/components-page/error-page.js.map +1 -1
- package/dist/components-page/forgot-password.js +11 -11
- package/dist/components-page/forgot-password.js.map +1 -1
- package/dist/components-page/magic-link-callback.js +8 -8
- package/dist/components-page/magic-link-callback.js.map +1 -1
- package/dist/components-page/mfa.js +13 -13
- package/dist/components-page/mfa.js.map +1 -1
- package/dist/components-page/oauth-callback.js +9 -9
- package/dist/components-page/oauth-callback.js.map +1 -1
- package/dist/components-page/onboarding.js +11 -11
- package/dist/components-page/onboarding.js.map +1 -1
- package/dist/components-page/password-reset.js +27 -27
- package/dist/components-page/password-reset.js.map +1 -1
- package/dist/components-page/section.js +1 -1
- package/dist/components-page/sign-out.js +4 -4
- package/dist/components-page/sign-out.js.map +1 -1
- package/dist/components-page/stack-handler-client.js +9 -9
- package/dist/components-page/stack-handler-client.js.map +1 -1
- package/dist/components-page/stack-handler.d.ts +14 -9
- package/dist/components-page/stack-handler.d.ts.map +1 -1
- package/dist/components-page/stack-handler.js +8 -2
- package/dist/components-page/stack-handler.js.map +1 -1
- package/dist/components-page/team-creation.js +9 -9
- package/dist/components-page/team-creation.js.map +1 -1
- package/dist/components-page/team-invitation.js +20 -20
- package/dist/components-page/team-invitation.js.map +1 -1
- package/dist/dev-tool/dev-tool-core.d.ts.map +1 -1
- package/dist/dev-tool/dev-tool-core.js +25 -25
- package/dist/dev-tool/dev-tool-core.js.map +1 -1
- package/dist/dev-tool/dev-tool-trigger-position.test.js +1 -1
- package/dist/dev-tool/index.js +6 -6
- package/dist/dev-tool/index.js.map +1 -1
- package/dist/esm/components/api-key-dialogs.js.map +1 -1
- package/dist/esm/components/api-key-table.js.map +1 -1
- package/dist/esm/components/credential-sign-in.js.map +1 -1
- package/dist/esm/components/credential-sign-up.js.map +1 -1
- package/dist/esm/components/elements/separator-with-text.js.map +1 -1
- package/dist/esm/components/elements/sidebar-layout.js.map +1 -1
- package/dist/esm/components/elements/user-avatar.js.map +1 -1
- package/dist/esm/components/link.js.map +1 -1
- package/dist/esm/components/magic-link-sign-in.js.map +1 -1
- package/dist/esm/components/message-cards/known-error-message-card.js.map +1 -1
- package/dist/esm/components/message-cards/message-card.js.map +1 -1
- package/dist/esm/components/message-cards/predefined-message-card.js.map +1 -1
- package/dist/esm/components/oauth-button.js.map +1 -1
- package/dist/esm/components/passkey-button.js.map +1 -1
- package/dist/esm/components/profile-image-editor.js.map +1 -1
- package/dist/esm/components/selected-team-switcher.js.map +1 -1
- package/dist/esm/components/team-icon.js.map +1 -1
- package/dist/esm/components/team-switcher.js.map +1 -1
- package/dist/esm/components/user-button.js.map +1 -1
- package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.js.map +1 -1
- package/dist/esm/components-page/account-settings/api-keys/api-keys-page.js.map +1 -1
- package/dist/esm/components-page/account-settings/editable-text.js.map +1 -1
- package/dist/esm/components-page/account-settings/email-and-auth/emails-section.js.map +1 -1
- package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.js.map +1 -1
- package/dist/esm/components-page/account-settings/email-and-auth/otp-section.js.map +1 -1
- package/dist/esm/components-page/account-settings/email-and-auth/passkey-section.js.map +1 -1
- package/dist/esm/components-page/account-settings/email-and-auth/password-section.js.map +1 -1
- package/dist/esm/components-page/account-settings/notifications/notifications-page.js.map +1 -1
- package/dist/esm/components-page/account-settings/payments/payments-panel.js +1 -1
- package/dist/esm/components-page/account-settings/payments/payments-panel.js.map +1 -1
- package/dist/esm/components-page/account-settings/section.js.map +1 -1
- package/dist/esm/components-page/account-settings/settings/delete-account-section.js.map +1 -1
- package/dist/esm/components-page/account-settings/settings/sign-out-section.js.map +1 -1
- package/dist/esm/components-page/account-settings/teams/leave-team-section.js.map +1 -1
- package/dist/esm/components-page/account-settings/teams/team-api-keys-section.js +1 -1
- package/dist/esm/components-page/account-settings/teams/team-api-keys-section.js.map +1 -1
- package/dist/esm/components-page/account-settings/teams/team-creation-page.js.map +1 -1
- package/dist/esm/components-page/account-settings/teams/team-member-invitation-section.js.map +1 -1
- package/dist/esm/components-page/account-settings/teams/team-member-list-section.js.map +1 -1
- package/dist/esm/components-page/account-settings.js.map +1 -1
- package/dist/esm/components-page/auth-page.js.map +1 -1
- package/dist/esm/components-page/cli-auth-confirm.js.map +1 -1
- package/dist/esm/components-page/cli-auth-confirm.test.js +2 -2
- package/dist/esm/components-page/cli-auth-confirm.test.js.map +1 -1
- package/dist/esm/components-page/email-verification.js.map +1 -1
- package/dist/esm/components-page/error-page.js.map +1 -1
- package/dist/esm/components-page/forgot-password.js.map +1 -1
- package/dist/esm/components-page/magic-link-callback.js.map +1 -1
- package/dist/esm/components-page/mfa.js.map +1 -1
- package/dist/esm/components-page/oauth-callback.js.map +1 -1
- package/dist/esm/components-page/onboarding.js.map +1 -1
- package/dist/esm/components-page/password-reset.js.map +1 -1
- package/dist/esm/components-page/sign-out.js.map +1 -1
- package/dist/esm/components-page/stack-handler-client.js +2 -2
- package/dist/esm/components-page/stack-handler-client.js.map +1 -1
- package/dist/esm/components-page/stack-handler.d.ts +13 -9
- package/dist/esm/components-page/stack-handler.d.ts.map +1 -1
- package/dist/esm/components-page/stack-handler.js +5 -2
- package/dist/esm/components-page/stack-handler.js.map +1 -1
- package/dist/esm/components-page/team-creation.js.map +1 -1
- package/dist/esm/components-page/team-invitation.js.map +1 -1
- package/dist/esm/dev-tool/dev-tool-core.d.ts.map +1 -1
- package/dist/esm/dev-tool/dev-tool-core.js +4 -4
- package/dist/esm/dev-tool/dev-tool-core.js.map +1 -1
- package/dist/esm/dev-tool/dev-tool-trigger-position.test.js +1 -1
- package/dist/esm/dev-tool/index.js.map +1 -1
- package/dist/esm/generated/global-css.d.ts +1 -1
- package/dist/esm/generated/global-css.js +1 -1
- package/dist/esm/generated/global-css.js.map +1 -1
- package/dist/esm/generated/quetzal-translations.js.map +1 -1
- package/dist/esm/index.d.ts +5 -5
- package/dist/esm/index.js +5 -6
- package/dist/esm/integrations/convex.js.map +1 -1
- package/dist/esm/lib/auth.js +1 -1
- package/dist/esm/lib/auth.js.map +1 -1
- package/dist/esm/lib/auth.test.js.map +1 -1
- package/dist/esm/lib/cookie.js.map +1 -1
- package/dist/esm/lib/hooks.d.ts +11 -1
- package/dist/esm/lib/hooks.d.ts.map +1 -1
- package/dist/esm/lib/hooks.js +19 -9
- package/dist/esm/lib/hooks.js.map +1 -1
- package/dist/esm/lib/stack-app/api-keys/index.js.map +1 -1
- package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.d.ts +11 -11
- package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.d.ts.map +1 -1
- package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js +3 -1
- package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js.map +1 -1
- package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.d.ts +3 -3
- package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.d.ts.map +1 -1
- package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js +2 -2
- package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -1
- package/dist/esm/lib/stack-app/apps/implementations/common.d.ts.map +1 -1
- package/dist/esm/lib/stack-app/apps/implementations/common.js +3 -3
- package/dist/esm/lib/stack-app/apps/implementations/common.js.map +1 -1
- package/dist/esm/lib/stack-app/apps/implementations/event-tracker.js.map +1 -1
- package/dist/esm/lib/stack-app/apps/implementations/event-tracker.test.js.map +1 -1
- package/dist/esm/lib/stack-app/apps/implementations/index.js.map +1 -1
- package/dist/esm/lib/stack-app/apps/implementations/redirect-page-urls.js.map +1 -1
- package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -1
- package/dist/esm/lib/stack-app/apps/implementations/session-replay.d.ts.map +1 -1
- package/dist/esm/lib/stack-app/apps/implementations/session-replay.js +3 -2
- package/dist/esm/lib/stack-app/apps/implementations/session-replay.js.map +1 -1
- package/dist/esm/lib/stack-app/apps/interfaces/admin-app.d.ts +4 -0
- package/dist/esm/lib/stack-app/apps/interfaces/admin-app.d.ts.map +1 -1
- package/dist/esm/lib/stack-app/apps/interfaces/admin-app.js +1 -0
- package/dist/esm/lib/stack-app/apps/interfaces/admin-app.js.map +1 -1
- package/dist/esm/lib/stack-app/apps/interfaces/client-app.d.ts +5 -0
- package/dist/esm/lib/stack-app/apps/interfaces/client-app.d.ts.map +1 -1
- package/dist/esm/lib/stack-app/apps/interfaces/client-app.js +1 -0
- package/dist/esm/lib/stack-app/apps/interfaces/client-app.js.map +1 -1
- package/dist/esm/lib/stack-app/apps/interfaces/server-app.d.ts +4 -0
- package/dist/esm/lib/stack-app/apps/interfaces/server-app.d.ts.map +1 -1
- package/dist/esm/lib/stack-app/apps/interfaces/server-app.js +1 -0
- package/dist/esm/lib/stack-app/apps/interfaces/server-app.js.map +1 -1
- package/dist/esm/lib/stack-app/common.d.ts +1 -1
- package/dist/esm/lib/stack-app/common.js.map +1 -1
- package/dist/esm/lib/stack-app/contact-channels/index.js.map +1 -1
- package/dist/esm/lib/stack-app/email-templates/index.js.map +1 -1
- package/dist/esm/lib/stack-app/internal-api-keys/index.js.map +1 -1
- package/dist/esm/lib/stack-app/permissions/index.js.map +1 -1
- package/dist/esm/lib/stack-app/projects/index.js.map +1 -1
- package/dist/esm/lib/stack-app/teams/index.js.map +1 -1
- package/dist/esm/lib/stack-app/url-targets.js.map +1 -1
- package/dist/esm/lib/stack-app/url-targets.test.js +1 -1
- package/dist/esm/lib/stack-app/url-targets.test.js.map +1 -1
- package/dist/esm/lib/stack-app/users/index.js.map +1 -1
- package/dist/esm/providers/stack-context.d.ts +3 -2
- package/dist/esm/providers/stack-context.d.ts.map +1 -1
- package/dist/esm/providers/stack-context.js +3 -1
- package/dist/esm/providers/stack-context.js.map +1 -1
- package/dist/esm/providers/stack-provider-client.js.map +1 -1
- package/dist/esm/providers/stack-provider.d.ts +5 -1
- package/dist/esm/providers/stack-provider.d.ts.map +1 -1
- package/dist/esm/providers/stack-provider.js +5 -1
- package/dist/esm/providers/stack-provider.js.map +1 -1
- package/dist/esm/providers/theme-provider.d.ts +6 -2
- package/dist/esm/providers/theme-provider.d.ts.map +1 -1
- package/dist/esm/providers/theme-provider.js +6 -2
- package/dist/esm/providers/theme-provider.js.map +1 -1
- package/dist/esm/providers/translation-provider-client.d.ts +4 -3
- package/dist/esm/providers/translation-provider-client.d.ts.map +1 -1
- package/dist/esm/providers/translation-provider-client.js +4 -2
- package/dist/esm/providers/translation-provider-client.js.map +1 -1
- package/dist/esm/providers/translation-provider.js.map +1 -1
- package/dist/esm/utils/url.js.map +1 -1
- package/dist/generated/global-css.d.ts +1 -1
- package/dist/generated/global-css.js +1 -1
- package/dist/generated/global-css.js.map +1 -1
- package/dist/generated/quetzal-translations.js +16 -16
- package/dist/generated/quetzal-translations.js.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.js +9 -12
- package/dist/integrations/convex/component/convex.config.d.ts +1 -1
- package/dist/integrations/convex.js +5 -5
- package/dist/integrations/convex.js.map +1 -1
- package/dist/lib/auth.js +12 -12
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/auth.test.js +2 -2
- package/dist/lib/auth.test.js.map +1 -1
- package/dist/lib/cookie.js +13 -13
- package/dist/lib/cookie.js.map +1 -1
- package/dist/lib/hooks.d.ts +11 -1
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +19 -8
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/stack-app/api-keys/index.js +2 -2
- package/dist/lib/stack-app/api-keys/index.js.map +1 -1
- package/dist/lib/stack-app/apps/implementations/admin-app-impl.d.ts +11 -11
- package/dist/lib/stack-app/apps/implementations/admin-app-impl.d.ts.map +1 -1
- package/dist/lib/stack-app/apps/implementations/admin-app-impl.js +39 -37
- package/dist/lib/stack-app/apps/implementations/admin-app-impl.js.map +1 -1
- package/dist/lib/stack-app/apps/implementations/client-app-impl.d.ts +3 -3
- package/dist/lib/stack-app/apps/implementations/client-app-impl.d.ts.map +1 -1
- package/dist/lib/stack-app/apps/implementations/client-app-impl.js +213 -213
- package/dist/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -1
- package/dist/lib/stack-app/apps/implementations/common.d.ts.map +1 -1
- package/dist/lib/stack-app/apps/implementations/common.js +30 -30
- package/dist/lib/stack-app/apps/implementations/common.js.map +1 -1
- package/dist/lib/stack-app/apps/implementations/event-tracker.js +7 -7
- package/dist/lib/stack-app/apps/implementations/event-tracker.js.map +1 -1
- package/dist/lib/stack-app/apps/implementations/event-tracker.test.js +3 -3
- package/dist/lib/stack-app/apps/implementations/event-tracker.test.js.map +1 -1
- package/dist/lib/stack-app/apps/implementations/index.js +4 -4
- package/dist/lib/stack-app/apps/implementations/index.js.map +1 -1
- package/dist/lib/stack-app/apps/implementations/redirect-page-urls.js +8 -8
- package/dist/lib/stack-app/apps/implementations/redirect-page-urls.js.map +1 -1
- package/dist/lib/stack-app/apps/implementations/server-app-impl.js +70 -70
- package/dist/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -1
- package/dist/lib/stack-app/apps/implementations/session-replay.d.ts.map +1 -1
- package/dist/lib/stack-app/apps/implementations/session-replay.js +13 -12
- package/dist/lib/stack-app/apps/implementations/session-replay.js.map +1 -1
- package/dist/lib/stack-app/apps/interfaces/admin-app.d.ts +4 -0
- package/dist/lib/stack-app/apps/interfaces/admin-app.d.ts.map +1 -1
- package/dist/lib/stack-app/apps/interfaces/admin-app.js +1 -0
- package/dist/lib/stack-app/apps/interfaces/admin-app.js.map +1 -1
- package/dist/lib/stack-app/apps/interfaces/client-app.d.ts +5 -0
- package/dist/lib/stack-app/apps/interfaces/client-app.d.ts.map +1 -1
- package/dist/lib/stack-app/apps/interfaces/client-app.js +1 -0
- package/dist/lib/stack-app/apps/interfaces/client-app.js.map +1 -1
- package/dist/lib/stack-app/apps/interfaces/server-app.d.ts +5 -1
- package/dist/lib/stack-app/apps/interfaces/server-app.d.ts.map +1 -1
- package/dist/lib/stack-app/apps/interfaces/server-app.js +1 -0
- package/dist/lib/stack-app/apps/interfaces/server-app.js.map +1 -1
- package/dist/lib/stack-app/common.d.ts +1 -1
- package/dist/lib/stack-app/common.js.map +1 -1
- package/dist/lib/stack-app/contact-channels/index.js.map +1 -1
- package/dist/lib/stack-app/email-templates/index.js.map +1 -1
- package/dist/lib/stack-app/internal-api-keys/index.js.map +1 -1
- package/dist/lib/stack-app/permissions/index.js.map +1 -1
- package/dist/lib/stack-app/projects/index.js.map +1 -1
- package/dist/lib/stack-app/teams/index.js.map +1 -1
- package/dist/lib/stack-app/url-targets.js +6 -6
- package/dist/lib/stack-app/url-targets.js.map +1 -1
- package/dist/lib/stack-app/url-targets.test.js +1 -1
- package/dist/lib/stack-app/url-targets.test.js.map +1 -1
- package/dist/lib/stack-app/users/index.js +3 -3
- package/dist/lib/stack-app/users/index.js.map +1 -1
- package/dist/providers/stack-context.d.ts +3 -2
- package/dist/providers/stack-context.d.ts.map +1 -1
- package/dist/providers/stack-context.js +3 -1
- package/dist/providers/stack-context.js.map +1 -1
- package/dist/providers/stack-provider-client.js +2 -2
- package/dist/providers/stack-provider-client.js.map +1 -1
- package/dist/providers/stack-provider.d.ts +6 -1
- package/dist/providers/stack-provider.d.ts.map +1 -1
- package/dist/providers/stack-provider.js +8 -1
- package/dist/providers/stack-provider.js.map +1 -1
- package/dist/providers/theme-provider.d.ts +6 -2
- package/dist/providers/theme-provider.d.ts.map +1 -1
- package/dist/providers/theme-provider.js +10 -5
- package/dist/providers/theme-provider.js.map +1 -1
- package/dist/providers/translation-provider-client.d.ts +4 -3
- package/dist/providers/translation-provider-client.d.ts.map +1 -1
- package/dist/providers/translation-provider-client.js +4 -1
- package/dist/providers/translation-provider-client.js.map +1 -1
- package/dist/providers/translation-provider.js +2 -2
- package/dist/providers/translation-provider.js.map +1 -1
- package/dist/{storage-DxMLntUt.d.ts → storage-kTmOAWHW.d.ts} +1 -1
- package/dist/{storage-DxMLntUt.d.ts.map → storage-kTmOAWHW.d.ts.map} +1 -1
- package/dist/utils/url.js +2 -2
- package/dist/utils/url.js.map +1 -1
- package/package.json +5 -5
- package/dist/esm/internal/deprecation-warning.d.ts +0 -1
- package/dist/esm/internal/deprecation-warning.js +0 -24
- package/dist/esm/internal/deprecation-warning.js.map +0 -1
- package/dist/internal/deprecation-warning.d.ts +0 -1
- package/dist/internal/deprecation-warning.js +0 -24
- package/dist/internal/deprecation-warning.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,26 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# This package has been renamed.
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Stack Auth is now Hexclave! The new packages are:
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
- @hexclave/next
|
|
6
|
+
- @hexclave/react
|
|
7
|
+
- @hexclave/js
|
|
8
|
+
- @hexclave/cli
|
|
6
9
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
We support Next.js frontends, along with any backend that can use our [REST API](https://docs.hexclave.com/rest-api/overview). Check out our [setup guide](https://docs.hexclave.com/getting-started/setup) to get started.
|
|
10
|
-
|
|
11
|
-
## 📦 Installation & Setup
|
|
12
|
-
|
|
13
|
-
1. Run Hexclave's installation wizard with the following command:
|
|
14
|
-
```bash
|
|
15
|
-
npx @hexclave/cli@latest init
|
|
16
|
-
```
|
|
17
|
-
2. Then, create an account on the [Hexclave dashboard](https://app.hexclave.com/projects), create a new project with an API key, and copy its environment variables into the .env.local file of your Next.js project:
|
|
18
|
-
```
|
|
19
|
-
NEXT_PUBLIC_STACK_PROJECT_ID=<your-project-id>
|
|
20
|
-
NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY=<your-publishable-client-key>
|
|
21
|
-
STACK_SECRET_SERVER_KEY=<your-secret-server-key>
|
|
22
|
-
```
|
|
23
|
-
3. That's it! You can run your app with `npm run dev` and go to [http://localhost:3000/handler/signup](http://localhost:3000/handler/signup) to see the sign-up page. You can also check out the account settings page at [http://localhost:3000/handler/account-settings](http://localhost:3000/handler/account-settings).
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
Check out the [documentation](https://docs.hexclave.com/getting-started/setup) for a more detailed guide.
|
|
10
|
+
See the [migration guide](https://docs.hexclave.com/migration) for more information.
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
4
|
const require_chunk = require('../chunk-BE-pF4vm.js');
|
|
5
5
|
let _hookform_resolvers_yup = require("@hookform/resolvers/yup");
|
|
6
|
-
let
|
|
7
|
-
let
|
|
8
|
-
let
|
|
9
|
-
let
|
|
6
|
+
let _hexclave_shared_dist_schema_fields = require("@hexclave/shared/dist/schema-fields");
|
|
7
|
+
let _hexclave_shared_dist_utils_errors = require("@hexclave/shared/dist/utils/errors");
|
|
8
|
+
let _hexclave_shared_dist_utils_promises = require("@hexclave/shared/dist/utils/promises");
|
|
9
|
+
let _hexclave_ui = require("@hexclave/ui");
|
|
10
10
|
let react = require("react");
|
|
11
11
|
let react_hook_form = require("react-hook-form");
|
|
12
12
|
let ___index_js = require("../index.js");
|
|
@@ -32,9 +32,9 @@ function CreateApiKeyDialog(props) {
|
|
|
32
32
|
(0, ___index_js.useUser)({ or: props.mockMode ? "return-null" : "redirect" });
|
|
33
33
|
const [loading, setLoading] = (0, react.useState)(false);
|
|
34
34
|
const { register, handleSubmit, formState: { errors }, reset } = (0, react_hook_form.useForm)({
|
|
35
|
-
resolver: (0, _hookform_resolvers_yup.yupResolver)((0,
|
|
36
|
-
description: (0,
|
|
37
|
-
expiresIn: (0,
|
|
35
|
+
resolver: (0, _hookform_resolvers_yup.yupResolver)((0, _hexclave_shared_dist_schema_fields.yupObject)({
|
|
36
|
+
description: (0, _hexclave_shared_dist_schema_fields.yupString)().defined().nonEmpty(t("Description is required")),
|
|
37
|
+
expiresIn: (0, _hexclave_shared_dist_schema_fields.yupString)().defined()
|
|
38
38
|
})),
|
|
39
39
|
defaultValues: {
|
|
40
40
|
description: "",
|
|
@@ -53,12 +53,12 @@ function CreateApiKeyDialog(props) {
|
|
|
53
53
|
reset();
|
|
54
54
|
props.onOpenChange(false);
|
|
55
55
|
} catch (error) {
|
|
56
|
-
(0,
|
|
56
|
+
(0, _hexclave_shared_dist_utils_errors.captureError)("Failed to create API key", { error });
|
|
57
57
|
} finally {
|
|
58
58
|
setLoading(false);
|
|
59
59
|
}
|
|
60
60
|
};
|
|
61
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
61
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.ActionDialog, {
|
|
62
62
|
open: props.open,
|
|
63
63
|
onOpenChange: props.onOpenChange,
|
|
64
64
|
title: t("Create API Key"),
|
|
@@ -66,18 +66,18 @@ function CreateApiKeyDialog(props) {
|
|
|
66
66
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
|
|
67
67
|
onSubmit: (e) => {
|
|
68
68
|
e.preventDefault();
|
|
69
|
-
(0,
|
|
69
|
+
(0, _hexclave_shared_dist_utils_promises.runAsynchronously)(handleSubmit(onSubmit));
|
|
70
70
|
},
|
|
71
71
|
className: "space-y-4",
|
|
72
72
|
children: [
|
|
73
73
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
74
74
|
className: "space-y-2",
|
|
75
75
|
children: [
|
|
76
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
76
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Label, {
|
|
77
77
|
htmlFor: "description",
|
|
78
78
|
children: t("Description")
|
|
79
79
|
}),
|
|
80
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
80
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Input, {
|
|
81
81
|
id: "description",
|
|
82
82
|
placeholder: t("e.g. Development, Production, CI/CD"),
|
|
83
83
|
...register("description")
|
|
@@ -88,7 +88,7 @@ function CreateApiKeyDialog(props) {
|
|
|
88
88
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
89
89
|
className: "space-y-2",
|
|
90
90
|
children: [
|
|
91
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
91
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Label, {
|
|
92
92
|
htmlFor: "expiresIn",
|
|
93
93
|
children: t("Expires In")
|
|
94
94
|
}),
|
|
@@ -106,7 +106,7 @@ function CreateApiKeyDialog(props) {
|
|
|
106
106
|
}),
|
|
107
107
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
108
108
|
className: "flex justify-end gap-2 pt-4",
|
|
109
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
109
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Button, {
|
|
110
110
|
type: "button",
|
|
111
111
|
variant: "secondary",
|
|
112
112
|
onClick: () => {
|
|
@@ -114,7 +114,7 @@ function CreateApiKeyDialog(props) {
|
|
|
114
114
|
props.onOpenChange(false);
|
|
115
115
|
},
|
|
116
116
|
children: t("Cancel")
|
|
117
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
117
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Button, {
|
|
118
118
|
type: "submit",
|
|
119
119
|
loading,
|
|
120
120
|
children: t("Create")
|
|
@@ -129,7 +129,7 @@ function CreateApiKeyDialog(props) {
|
|
|
129
129
|
*/
|
|
130
130
|
function ShowApiKeyDialog(props) {
|
|
131
131
|
const { t } = (0, ___lib_translations_js.useTranslation)();
|
|
132
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
132
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.ActionDialog, {
|
|
133
133
|
open: !!props.apiKey,
|
|
134
134
|
title: t("API Key"),
|
|
135
135
|
okButton: { label: t("Close") },
|
|
@@ -138,14 +138,14 @@ function ShowApiKeyDialog(props) {
|
|
|
138
138
|
confirmText: t("I understand that I will not be able to view this key again."),
|
|
139
139
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
140
140
|
className: "flex flex-col gap-4",
|
|
141
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(
|
|
141
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_hexclave_ui.Typography, { children: [
|
|
142
142
|
t("Here is your API key."),
|
|
143
143
|
" ",
|
|
144
144
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
145
145
|
className: "font-bold",
|
|
146
146
|
children: t("Copy it to a safe place. You will not be able to view it again.")
|
|
147
147
|
})
|
|
148
|
-
] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
148
|
+
] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.CopyField, {
|
|
149
149
|
type: "input",
|
|
150
150
|
monospace: true,
|
|
151
151
|
value: props.apiKey?.value ?? "",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-key-dialogs.js","names":["ActionDialog","Label","Input","FormWarningText","Button","Typography","CopyField"],"sources":["../../src/components/api-key-dialogs.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { yupObject, yupString } from '@
|
|
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":";;;;;;;;;;;;;;;;;AAqBA,MAAa,YAAY,MAAO,KAAK,KAAK,KAAK,MAAM;AACrD,MAAa,mBAAmB;EAC7B,MAAO,KAAK,KAAK,KAAK,IAAI;EAC1B,MAAO,KAAK,KAAK,KAAK,IAAI;EAC1B,MAAO,KAAK,KAAK,KAAK,KAAK;EAC3B,MAAO,KAAK,KAAK,KAAK,KAAK;EAC3B,MAAO,KAAK,KAAK,KAAK,MAAM;EAC5B,YAAY;CACd;;;;AAKD,SAAgB,mBAAyD,OAMtE;CACD,MAAM,EAAE,kDAAsB;AACjB,0BAAQ,EAAE,IAAI,MAAM,WAAW,gBAAgB,YAAY,CAAC;CACzE,MAAM,CAAC,SAAS,kCAAuB,MAAM;CAO7C,MAAM,EAAE,UAAU,cAAc,WAAW,EAAE,UAAU,uCAAkB;EACvE,sGAN6B;GAC7B,iEAAwB,CAAC,SAAS,CAAC,SAAS,EAAE,0BAA0B,CAAC;GACzE,+DAAsB,CAAC,SAAS;GACjC,CAAC,CAGmC;EACnC,eAAe;GACb,aAAa;GACb,WAAW,OAAO,KAAK,iBAAiB,CAAC;GAC1C;EACF,CAAC;CAEF,MAAM,WAAW,OAAO,SAA6C;AACnE,aAAW,KAAK;AAChB,MAAI;GACF,MAAM,YAAY,IAAI,KAAK,KAAK,KAAK,GAAG,SAAS,KAAK,UAAU,CAAC;GACjE,MAAM,SAAS,MAAM,MAAM,aAAa;IACtC,aAAa,KAAK;IAClB;IACD,CAAC;AAEF,OAAI,MAAM,aACR,OAAM,aAAa,OAAO;AAG5B,UAAO;AACP,SAAM,aAAa,MAAM;WAClB,OAAO;AACd,wDAAa,4BAA4B,EAAE,OAAO,CAAC;YAC3C;AACR,cAAW,MAAM;;;AAIrB,QACE,2CAACA;EACC,MAAM,MAAM;EACZ,cAAc,MAAM;EACpB,OAAO,EAAE,iBAAiB;EAC1B,aAAa,EAAE,sDAAsD;YAErE,4CAAC;GACC,WAAW,MAAM;AACf,MAAE,gBAAgB;AAClB,gEAAkB,aAAa,SAAS,CAAC;;GAE3C,WAAU;;IAEV,4CAAC;KAAI,WAAU;;MACb,2CAACC;OAAM,SAAQ;iBAAe,EAAE,cAAc;QAAS;MACvD,2CAACC;OACC,IAAG;OACH,aAAa,EAAE,sCAAsC;OACrD,GAAI,SAAS,cAAc;QAC3B;MACD,OAAO,eAAe,2CAACC,0DAAgB,MAAM,OAAO,YAAY,UAAW;;MACxE;IAEN,4CAAC;KAAI,WAAU;;MACb,2CAACF;OAAM,SAAQ;iBAAa,EAAE,aAAa;QAAS;MACpD,2CAAC;OACC,IAAG;OACH,WAAU;OACV,GAAI,SAAS,YAAY;iBAExB,OAAO,QAAQ,iBAAiB,CAAC,KAAK,CAAC,OAAO,WAC7C,2CAAC;QAA0B;kBAAQ,EAAE,MAAM;UAA9B,MAAwC,CACrD;QACK;MACR,OAAO,aAAa,2CAACE,0DAAgB,MAAM,OAAO,UAAU,UAAW;;MACpE;IAEN,4CAAC;KAAI,WAAU;gBACb,2CAACC;MACC,MAAK;MACL,SAAQ;MACR,eAAe;AACb,cAAO;AACP,aAAM,aAAa,MAAM;;gBAG1B,EAAE,SAAS;OACL,EACT,2CAACA;MAAO,MAAK;MAAkB;gBAC5B,EAAE,SAAS;OACL;MACL;;IACD;GACM;;;;;AAOnB,SAAgB,iBAAuD,OAGpE;CACD,MAAM,EAAE,kDAAsB;AAE9B,QACE,2CAACJ;EACC,MAAM,CAAC,CAAC,MAAM;EACd,OAAO,EAAE,UAAU;EACnB,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE;EAC/B,SAAS,MAAM;EACf;EACA,aAAa,EAAE,+DAA+D;YAE9E,4CAAC;GAAI,WAAU;cACb,4CAACK;IACE,EAAE,wBAAwB;IAAE;IAC7B,2CAAC;KAAK,WAAU;eACb,EAAE,kEAAkE;MAChE;OACI,EACb,2CAACC;IACC,MAAK;IACL;IACA,OAAO,MAAM,QAAQ,SAAS;IAC9B,OAAO,EAAE,iBAAiB;KAC1B;IACE;GACO"}
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
4
|
const require_chunk = require('../chunk-BE-pF4vm.js');
|
|
5
|
-
let
|
|
5
|
+
let _hexclave_ui = require("@hexclave/ui");
|
|
6
6
|
let react = require("react");
|
|
7
7
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
8
|
|
|
9
9
|
//#region src/components/api-key-table.tsx
|
|
10
10
|
function toolbarRender(table) {
|
|
11
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
11
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.SearchToolbarItem, {
|
|
12
12
|
table,
|
|
13
13
|
placeholder: "Search table"
|
|
14
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
14
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.DataTableFacetedFilter, {
|
|
15
15
|
column: table.getColumn("status"),
|
|
16
16
|
title: "Status",
|
|
17
17
|
options: [
|
|
@@ -25,7 +25,7 @@ function toolbarRender(table) {
|
|
|
25
25
|
})] });
|
|
26
26
|
}
|
|
27
27
|
function RevokeDialog(props) {
|
|
28
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
28
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.ActionDialog, {
|
|
29
29
|
open: props.open,
|
|
30
30
|
onOpenChange: props.onOpenChange,
|
|
31
31
|
title: "Revoke API Key",
|
|
@@ -47,7 +47,7 @@ function Actions({ row }) {
|
|
|
47
47
|
apiKey: row.original,
|
|
48
48
|
open: isRevokeModalOpen,
|
|
49
49
|
onOpenChange: setIsRevokeModalOpen
|
|
50
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
50
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.ActionCell, {
|
|
51
51
|
invisible: row.original.status !== "valid",
|
|
52
52
|
items: [{
|
|
53
53
|
item: "Revoke",
|
|
@@ -59,55 +59,55 @@ function Actions({ row }) {
|
|
|
59
59
|
const columns = [
|
|
60
60
|
{
|
|
61
61
|
accessorKey: "description",
|
|
62
|
-
header: ({ column }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
62
|
+
header: ({ column }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.DataTableColumnHeader, {
|
|
63
63
|
column,
|
|
64
64
|
columnTitle: "Description"
|
|
65
65
|
}),
|
|
66
|
-
cell: ({ row }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
66
|
+
cell: ({ row }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TextCell, {
|
|
67
67
|
size: 100,
|
|
68
68
|
children: row.original.description
|
|
69
69
|
})
|
|
70
70
|
},
|
|
71
71
|
{
|
|
72
72
|
accessorKey: "status",
|
|
73
|
-
header: ({ column }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
73
|
+
header: ({ column }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.DataTableColumnHeader, {
|
|
74
74
|
column,
|
|
75
75
|
columnTitle: "Status"
|
|
76
76
|
}),
|
|
77
|
-
cell: ({ row }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
78
|
-
filterFn:
|
|
77
|
+
cell: ({ row }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.BadgeCell, { badges: [row.original.status] }),
|
|
78
|
+
filterFn: _hexclave_ui.standardFilterFn
|
|
79
79
|
},
|
|
80
80
|
{
|
|
81
81
|
id: "value",
|
|
82
82
|
accessorFn: (row) => row.value.lastFour,
|
|
83
|
-
header: ({ column }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
83
|
+
header: ({ column }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.DataTableColumnHeader, {
|
|
84
84
|
column,
|
|
85
85
|
columnTitle: "Client Key"
|
|
86
86
|
}),
|
|
87
|
-
cell: ({ row }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(
|
|
87
|
+
cell: ({ row }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_hexclave_ui.TextCell, { children: ["*******", row.original.value.lastFour] }),
|
|
88
88
|
enableSorting: false
|
|
89
89
|
},
|
|
90
90
|
{
|
|
91
91
|
accessorKey: "expiresAt",
|
|
92
|
-
header: ({ column }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
92
|
+
header: ({ column }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.DataTableColumnHeader, {
|
|
93
93
|
column,
|
|
94
94
|
columnTitle: "Expires At"
|
|
95
95
|
}),
|
|
96
96
|
cell: ({ row }) => {
|
|
97
|
-
if (row.original.status === "revoked") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
98
|
-
return row.original.expiresAt ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
97
|
+
if (row.original.status === "revoked") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TextCell, { children: "-" });
|
|
98
|
+
return row.original.expiresAt ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.DateCell, {
|
|
99
99
|
date: row.original.expiresAt,
|
|
100
100
|
ignoreAfterYears: 50
|
|
101
|
-
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
101
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.TextCell, { children: "Never" });
|
|
102
102
|
}
|
|
103
103
|
},
|
|
104
104
|
{
|
|
105
105
|
accessorKey: "createdAt",
|
|
106
|
-
header: ({ column }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
106
|
+
header: ({ column }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.DataTableColumnHeader, {
|
|
107
107
|
column,
|
|
108
108
|
columnTitle: "Created At"
|
|
109
109
|
}),
|
|
110
|
-
cell: ({ row }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
110
|
+
cell: ({ row }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.DateCell, {
|
|
111
111
|
date: row.original.createdAt,
|
|
112
112
|
ignoreAfterYears: 50
|
|
113
113
|
})
|
|
@@ -118,7 +118,7 @@ const columns = [
|
|
|
118
118
|
}
|
|
119
119
|
];
|
|
120
120
|
function ApiKeyTable(props) {
|
|
121
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
121
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.DataTable, {
|
|
122
122
|
data: (0, react.useMemo)(() => {
|
|
123
123
|
return props.apiKeys.map((apiKey) => ({
|
|
124
124
|
...apiKey,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-key-table.js","names":["SearchToolbarItem","DataTableFacetedFilter","ActionDialog","ActionCell","DataTableColumnHeader","TextCell","BadgeCell","standardFilterFn","DateCell","DataTable"],"sources":["../../src/components/api-key-table.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\nimport { ActionCell, ActionDialog, BadgeCell, DataTable, DataTableColumnHeader, DataTableFacetedFilter, DateCell, SearchToolbarItem, TextCell, standardFilterFn } from \"@
|
|
1
|
+
{"version":3,"file":"api-key-table.js","names":["SearchToolbarItem","DataTableFacetedFilter","ActionDialog","ActionCell","DataTableColumnHeader","TextCell","BadgeCell","standardFilterFn","DateCell","DataTable"],"sources":["../../src/components/api-key-table.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\nimport { ActionCell, ActionDialog, BadgeCell, DataTable, DataTableColumnHeader, DataTableFacetedFilter, DateCell, SearchToolbarItem, TextCell, standardFilterFn } from \"@hexclave/ui\";\nimport { ColumnDef, Row, Table } from \"@tanstack/react-table\";\nimport { useMemo, useState } from \"react\";\nimport { ApiKey } from \"../lib/stack-app/api-keys\";\n\ntype ExtendedApiKey = ApiKey & {\n status: 'valid' | 'expired' | 'revoked',\n};\n\nfunction toolbarRender<TData>(table: Table<TData>) {\n return (\n <>\n <SearchToolbarItem table={table} placeholder=\"Search table\" />\n <DataTableFacetedFilter\n column={table.getColumn(\"status\")}\n title=\"Status\"\n options={['valid', 'expired', 'revoked'].map((provider) => ({\n value: provider,\n label: provider,\n }))}\n />\n </>\n );\n}\n\nfunction RevokeDialog(props: {\n apiKey: ExtendedApiKey,\n open: boolean,\n onOpenChange: (open: boolean) => void,\n}) {\n return <ActionDialog\n open={props.open}\n onOpenChange={props.onOpenChange}\n title=\"Revoke API Key\"\n danger\n cancelButton\n okButton={{ label: \"Revoke Key\", onClick: async () => { await props.apiKey.revoke(); } }}\n confirmText=\"I understand this will unlink all the apps using this API key\"\n >\n {`Are you sure you want to revoke API key *****${props.apiKey.value.lastFour}?`}\n </ActionDialog>;\n}\n\nfunction Actions({ row }: { row: Row<ExtendedApiKey> }) {\n const [isRevokeModalOpen, setIsRevokeModalOpen] = useState(false);\n return (\n <>\n <RevokeDialog apiKey={row.original} open={isRevokeModalOpen} onOpenChange={setIsRevokeModalOpen} />\n <ActionCell\n invisible={row.original.status !== 'valid'}\n items={[{\n item: \"Revoke\",\n danger: true,\n onClick: () => setIsRevokeModalOpen(true),\n }]}\n />\n </>\n );\n}\n\nconst columns: ColumnDef<ExtendedApiKey>[] = [\n {\n accessorKey: \"description\",\n header: ({ column }) => <DataTableColumnHeader column={column} columnTitle=\"Description\" />,\n cell: ({ row }) => <TextCell size={100}>{row.original.description}</TextCell>,\n },\n {\n accessorKey: \"status\",\n header: ({ column }) => <DataTableColumnHeader column={column} columnTitle=\"Status\" />,\n cell: ({ row }) => <BadgeCell badges={[row.original.status]} />,\n filterFn: standardFilterFn,\n },\n {\n id: \"value\",\n accessorFn: (row) => row.value.lastFour,\n header: ({ column }) => <DataTableColumnHeader column={column} columnTitle=\"Client Key\" />,\n cell: ({ row }) => <TextCell>*******{row.original.value.lastFour}</TextCell>,\n enableSorting: false,\n },\n {\n accessorKey: \"expiresAt\",\n header: ({ column }) => <DataTableColumnHeader column={column} columnTitle=\"Expires At\" />,\n cell: ({ row }) => {\n if (row.original.status === 'revoked') return <TextCell>-</TextCell>;\n return row.original.expiresAt ? <DateCell date={row.original.expiresAt} ignoreAfterYears={50} /> : <TextCell>Never</TextCell>;\n },\n },\n {\n accessorKey: \"createdAt\",\n header: ({ column }) => <DataTableColumnHeader column={column} columnTitle=\"Created At\" />,\n cell: ({ row }) => <DateCell date={row.original.createdAt} ignoreAfterYears={50} />\n },\n {\n id: \"actions\",\n cell: ({ row }) => <Actions row={row} />,\n },\n];\n\nexport function ApiKeyTable(props: { apiKeys: ApiKey[] }) {\n const extendedApiKeys = useMemo(() => {\n const keys = props.apiKeys.map((apiKey) => ({\n ...apiKey,\n status: ({ 'valid': 'valid', 'manually-revoked': 'revoked', 'expired': 'expired' } as const)[apiKey.whyInvalid() || 'valid'],\n } satisfies ExtendedApiKey));\n // first sort based on status, then by createdAt\n return keys.sort((a, b) => {\n if (a.status === b.status) {\n return a.createdAt < b.createdAt ? 1 : -1;\n }\n return a.status === 'valid' ? -1 : 1;\n });\n }, [props.apiKeys]);\n\n return <DataTable\n data={extendedApiKeys}\n columns={columns}\n toolbarRender={toolbarRender}\n defaultColumnFilters={[]}\n defaultSorting={[]}\n />;\n}\n"],"mappings":";;;;;;;;;AAeA,SAAS,cAAqB,OAAqB;AACjD,QACE,qFACE,2CAACA;EAAyB;EAAO,aAAY;GAAiB,EAC9D,2CAACC;EACC,QAAQ,MAAM,UAAU,SAAS;EACjC,OAAM;EACN,SAAS;GAAC;GAAS;GAAW;GAAU,CAAC,KAAK,cAAc;GAC1D,OAAO;GACP,OAAO;GACR,EAAE;GACH,IACD;;AAIP,SAAS,aAAa,OAInB;AACD,QAAO,2CAACC;EACN,MAAM,MAAM;EACZ,cAAc,MAAM;EACpB,OAAM;EACN;EACA;EACA,UAAU;GAAE,OAAO;GAAc,SAAS,YAAY;AAAE,UAAM,MAAM,OAAO,QAAQ;;GAAK;EACxF,aAAY;YAEX,gDAAgD,MAAM,OAAO,MAAM,SAAS;GAChE;;AAGjB,SAAS,QAAQ,EAAE,OAAqC;CACtD,MAAM,CAAC,mBAAmB,4CAAiC,MAAM;AACjE,QACE,qFACE,2CAAC;EAAa,QAAQ,IAAI;EAAU,MAAM;EAAmB,cAAc;GAAwB,EACnG,2CAACC;EACC,WAAW,IAAI,SAAS,WAAW;EACnC,OAAO,CAAC;GACN,MAAM;GACN,QAAQ;GACR,eAAe,qBAAqB,KAAK;GAC1C,CAAC;GACF,IACD;;AAIP,MAAM,UAAwC;CAC5C;EACE,aAAa;EACb,SAAS,EAAE,aAAa,2CAACC;GAA8B;GAAQ,aAAY;IAAgB;EAC3F,OAAO,EAAE,UAAU,2CAACC;GAAS,MAAM;aAAM,IAAI,SAAS;IAAuB;EAC9E;CACD;EACE,aAAa;EACb,SAAS,EAAE,aAAa,2CAACD;GAA8B;GAAQ,aAAY;IAAW;EACtF,OAAO,EAAE,UAAU,2CAACE,0BAAU,QAAQ,CAAC,IAAI,SAAS,OAAO,GAAI;EAC/D,UAAUC;EACX;CACD;EACE,IAAI;EACJ,aAAa,QAAQ,IAAI,MAAM;EAC/B,SAAS,EAAE,aAAa,2CAACH;GAA8B;GAAQ,aAAY;IAAe;EAC1F,OAAO,EAAE,UAAU,4CAACC,oCAAS,WAAQ,IAAI,SAAS,MAAM,YAAoB;EAC5E,eAAe;EAChB;CACD;EACE,aAAa;EACb,SAAS,EAAE,aAAa,2CAACD;GAA8B;GAAQ,aAAY;IAAe;EAC1F,OAAO,EAAE,UAAU;AACjB,OAAI,IAAI,SAAS,WAAW,UAAW,QAAO,2CAACC,mCAAS,MAAY;AACpE,UAAO,IAAI,SAAS,YAAY,2CAACG;IAAS,MAAM,IAAI,SAAS;IAAW,kBAAkB;KAAM,GAAG,2CAACH,mCAAS,UAAgB;;EAEhI;CACD;EACE,aAAa;EACb,SAAS,EAAE,aAAa,2CAACD;GAA8B;GAAQ,aAAY;IAAe;EAC1F,OAAO,EAAE,UAAU,2CAACI;GAAS,MAAM,IAAI,SAAS;GAAW,kBAAkB;IAAM;EACpF;CACD;EACE,IAAI;EACJ,OAAO,EAAE,UAAU,2CAAC,WAAa,MAAO;EACzC;CACF;AAED,SAAgB,YAAY,OAA8B;AAexD,QAAO,2CAACC;EACN,+BAfoC;AAMpC,UALa,MAAM,QAAQ,KAAK,YAAY;IAC1C,GAAG;IACH,QAAS;KAAE,SAAS;KAAS,oBAAoB;KAAW,WAAW;KAAW,CAAW,OAAO,YAAY,IAAI;IACrH,EAA2B,CAEhB,MAAM,GAAG,MAAM;AACzB,QAAI,EAAE,WAAW,EAAE,OACjB,QAAO,EAAE,YAAY,EAAE,YAAY,IAAI;AAEzC,WAAO,EAAE,WAAW,UAAU,KAAK;KACnC;KACD,CAAC,MAAM,QAAQ,CAAC;EAIR;EACM;EACf,sBAAsB,EAAE;EACxB,gBAAgB,EAAE;GAClB"}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
4
|
const require_chunk = require('../chunk-BE-pF4vm.js');
|
|
5
5
|
let _hookform_resolvers_yup = require("@hookform/resolvers/yup");
|
|
6
|
-
let
|
|
7
|
-
let
|
|
8
|
-
let
|
|
6
|
+
let _hexclave_shared_dist_schema_fields = require("@hexclave/shared/dist/schema-fields");
|
|
7
|
+
let _hexclave_shared_dist_utils_promises = require("@hexclave/shared/dist/utils/promises");
|
|
8
|
+
let _hexclave_ui = require("@hexclave/ui");
|
|
9
9
|
let react = require("react");
|
|
10
10
|
let react_hook_form = require("react-hook-form");
|
|
11
11
|
let ___index_js = require("../index.js");
|
|
@@ -17,9 +17,9 @@ let __link_js = require("./link.js");
|
|
|
17
17
|
//#region src/components/credential-sign-in.tsx
|
|
18
18
|
function CredentialSignIn() {
|
|
19
19
|
const { t } = (0, ___lib_translations_js.useTranslation)();
|
|
20
|
-
const { register, handleSubmit, setError, formState: { errors } } = (0, react_hook_form.useForm)({ resolver: (0, _hookform_resolvers_yup.yupResolver)((0,
|
|
21
|
-
email: (0,
|
|
22
|
-
password:
|
|
20
|
+
const { register, handleSubmit, setError, formState: { errors } } = (0, react_hook_form.useForm)({ resolver: (0, _hookform_resolvers_yup.yupResolver)((0, _hexclave_shared_dist_schema_fields.yupObject)({
|
|
21
|
+
email: (0, _hexclave_shared_dist_schema_fields.strictEmailSchema)(t("Please enter a valid email")).defined().nonEmpty(t("Please enter your email")),
|
|
22
|
+
password: _hexclave_shared_dist_schema_fields.passwordSchema.defined().nonEmpty(t("Please enter your password"))
|
|
23
23
|
})) });
|
|
24
24
|
const app = (0, ___index_js.useStackApp)();
|
|
25
25
|
const [loading, setLoading] = (0, react.useState)(false);
|
|
@@ -41,27 +41,27 @@ function CredentialSignIn() {
|
|
|
41
41
|
};
|
|
42
42
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
|
|
43
43
|
className: "flex flex-col items-stretch stack-scope",
|
|
44
|
-
onSubmit: (e) => (0,
|
|
44
|
+
onSubmit: (e) => (0, _hexclave_shared_dist_utils_promises.runAsynchronouslyWithAlert)(handleSubmit(onSubmit)(e)),
|
|
45
45
|
noValidate: true,
|
|
46
46
|
children: [
|
|
47
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
47
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Label, {
|
|
48
48
|
htmlFor: "email",
|
|
49
49
|
className: "mb-1",
|
|
50
50
|
children: t("Email")
|
|
51
51
|
}),
|
|
52
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
52
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Input, {
|
|
53
53
|
id: "email",
|
|
54
54
|
type: "email",
|
|
55
55
|
autoComplete: "email",
|
|
56
56
|
...register("email")
|
|
57
57
|
}),
|
|
58
58
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(__elements_form_warning_js.FormWarningText, { text: errors.email?.message?.toString() }),
|
|
59
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
59
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Label, {
|
|
60
60
|
htmlFor: "password",
|
|
61
61
|
className: "mt-4 mb-1",
|
|
62
62
|
children: t("Password")
|
|
63
63
|
}),
|
|
64
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
64
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.PasswordInput, {
|
|
65
65
|
id: "password",
|
|
66
66
|
autoComplete: "current-password",
|
|
67
67
|
...register("password")
|
|
@@ -72,7 +72,7 @@ function CredentialSignIn() {
|
|
|
72
72
|
className: "mt-1 text-sm",
|
|
73
73
|
children: t("Forgot password?")
|
|
74
74
|
}),
|
|
75
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
75
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Button, {
|
|
76
76
|
type: "submit",
|
|
77
77
|
className: "mt-6",
|
|
78
78
|
loading,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-sign-in.js","names":["passwordSchema","Label","Input","FormWarningText","PasswordInput","StyledLink","Button"],"sources":["../../src/components/credential-sign-in.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { passwordSchema, strictEmailSchema, yupObject } from \"@
|
|
1
|
+
{"version":3,"file":"credential-sign-in.js","names":["passwordSchema","Label","Input","FormWarningText","PasswordInput","StyledLink","Button"],"sources":["../../src/components/credential-sign-in.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { passwordSchema, strictEmailSchema, yupObject } from \"@hexclave/shared/dist/schema-fields\";\nimport { runAsynchronouslyWithAlert } from \"@hexclave/shared/dist/utils/promises\";\nimport { Button, Input, Label, PasswordInput } from \"@hexclave/ui\";\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { useStackApp } from \"..\";\nimport { useTranslation } from \"../lib/translations\";\nimport { FormWarningText } from \"./elements/form-warning\";\nimport { StyledLink } from \"./link\";\n\nexport function CredentialSignIn() {\n const { t } = useTranslation();\n\n const schema = yupObject({\n email: strictEmailSchema(t('Please enter a valid email')).defined().nonEmpty(t('Please enter your email')),\n password: passwordSchema.defined().nonEmpty(t('Please enter your password'))\n });\n\n const { register, handleSubmit, setError, formState: { errors } } = useForm({\n resolver: yupResolver(schema)\n });\n const app = useStackApp();\n const [loading, setLoading] = useState(false);\n\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\n setLoading(true);\n\n try {\n const { email, password } = data;\n const result = await app.signInWithCredential({\n email,\n password,\n });\n if (result.status === 'error') {\n setError('email', { type: 'manual', message: result.error.message });\n }\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <form\n className=\"flex flex-col items-stretch stack-scope\"\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n >\n <Label htmlFor=\"email\" className=\"mb-1\">{t('Email')}</Label>\n <Input\n id=\"email\"\n type=\"email\"\n autoComplete=\"email\"\n {...register('email')}\n />\n <FormWarningText text={errors.email?.message?.toString()} />\n\n <Label htmlFor=\"password\" className=\"mt-4 mb-1\">{t('Password')}</Label>\n <PasswordInput\n id=\"password\"\n autoComplete=\"current-password\"\n {...register('password')}\n />\n <FormWarningText text={errors.password?.message?.toString()} />\n\n <StyledLink href={app.urls.forgotPassword} className=\"mt-1 text-sm\">\n {t('Forgot password?')}\n </StyledLink>\n\n <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n {t('Sign In')}\n </Button>\n </form>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,SAAgB,mBAAmB;CACjC,MAAM,EAAE,kDAAsB;CAO9B,MAAM,EAAE,UAAU,cAAc,UAAU,WAAW,EAAE,0CAAqB,EAC1E,sGANuB;EACvB,kEAAyB,EAAE,6BAA6B,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,0BAA0B,CAAC;EAC1G,UAAUA,mDAAe,SAAS,CAAC,SAAS,EAAE,6BAA6B,CAAC;EAC7E,CAAC,CAG6B,EAC9B,CAAC;CACF,MAAM,oCAAmB;CACzB,MAAM,CAAC,SAAS,kCAAuB,MAAM;CAE7C,MAAM,WAAW,OAAO,SAAuC;AAC7D,aAAW,KAAK;AAEhB,MAAI;GACF,MAAM,EAAE,OAAO,aAAa;GAC5B,MAAM,SAAS,MAAM,IAAI,qBAAqB;IAC5C;IACA;IACD,CAAC;AACF,OAAI,OAAO,WAAW,QACpB,UAAS,SAAS;IAAE,MAAM;IAAU,SAAS,OAAO,MAAM;IAAS,CAAC;YAE9D;AACR,cAAW,MAAM;;;AAIrB,QACE,4CAAC;EACC,WAAU;EACV,WAAU,2EAAgC,aAAa,SAAS,CAAC,EAAE,CAAC;EACpE;;GAEA,2CAACC;IAAM,SAAQ;IAAQ,WAAU;cAAQ,EAAE,QAAQ;KAAS;GAC5D,2CAACC;IACC,IAAG;IACH,MAAK;IACL,cAAa;IACb,GAAI,SAAS,QAAQ;KACrB;GACF,2CAACC,8CAAgB,MAAM,OAAO,OAAO,SAAS,UAAU,GAAI;GAE5D,2CAACF;IAAM,SAAQ;IAAW,WAAU;cAAa,EAAE,WAAW;KAAS;GACvE,2CAACG;IACC,IAAG;IACH,cAAa;IACb,GAAI,SAAS,WAAW;KACxB;GACF,2CAACD,8CAAgB,MAAM,OAAO,UAAU,SAAS,UAAU,GAAI;GAE/D,2CAACE;IAAW,MAAM,IAAI,KAAK;IAAgB,WAAU;cAClD,EAAE,mBAAmB;KACX;GAEb,2CAACC;IAAO,MAAK;IAAS,WAAU;IAAgB;cAC7C,EAAE,UAAU;KACN;;GACJ"}
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
4
|
const require_chunk = require('../chunk-BE-pF4vm.js');
|
|
5
5
|
let _hookform_resolvers_yup = require("@hookform/resolvers/yup");
|
|
6
|
-
let
|
|
7
|
-
let
|
|
8
|
-
let
|
|
6
|
+
let _hexclave_shared_dist_schema_fields = require("@hexclave/shared/dist/schema-fields");
|
|
7
|
+
let _hexclave_shared_dist_utils_promises = require("@hexclave/shared/dist/utils/promises");
|
|
8
|
+
let _hexclave_ui = require("@hexclave/ui");
|
|
9
9
|
let react = require("react");
|
|
10
10
|
react = require_chunk.__toESM(react);
|
|
11
11
|
let react_hook_form = require("react-hook-form");
|
|
12
12
|
let ___lib_translations_js = require("../lib/translations.js");
|
|
13
13
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
14
14
|
let __elements_form_warning_js = require("./elements/form-warning.js");
|
|
15
|
-
let
|
|
15
|
+
let _hexclave_shared_dist_helpers_password = require("@hexclave/shared/dist/helpers/password");
|
|
16
16
|
let yup = require("yup");
|
|
17
17
|
yup = require_chunk.__toESM(yup);
|
|
18
18
|
let ___lib_hooks_js = require("../lib/hooks.js");
|
|
@@ -20,17 +20,17 @@ let ___lib_hooks_js = require("../lib/hooks.js");
|
|
|
20
20
|
//#region src/components/credential-sign-up.tsx
|
|
21
21
|
function CredentialSignUp(props) {
|
|
22
22
|
const { t } = (0, ___lib_translations_js.useTranslation)();
|
|
23
|
-
const { register, handleSubmit, setError, formState: { errors }, clearErrors } = (0, react_hook_form.useForm)({ resolver: (0, _hookform_resolvers_yup.yupResolver)((0,
|
|
24
|
-
email: (0,
|
|
25
|
-
password:
|
|
23
|
+
const { register, handleSubmit, setError, formState: { errors }, clearErrors } = (0, react_hook_form.useForm)({ resolver: (0, _hookform_resolvers_yup.yupResolver)((0, _hexclave_shared_dist_schema_fields.yupObject)({
|
|
24
|
+
email: (0, _hexclave_shared_dist_schema_fields.strictEmailSchema)(t("Please enter a valid email")).defined().nonEmpty(t("Please enter your email")),
|
|
25
|
+
password: _hexclave_shared_dist_schema_fields.passwordSchema.defined().nonEmpty(t("Please enter your password")).test({
|
|
26
26
|
name: "is-valid-password",
|
|
27
27
|
test: (value, ctx) => {
|
|
28
|
-
const error = (0,
|
|
28
|
+
const error = (0, _hexclave_shared_dist_helpers_password.getPasswordError)(value);
|
|
29
29
|
if (error) return ctx.createError({ message: error.message });
|
|
30
30
|
else return true;
|
|
31
31
|
}
|
|
32
32
|
}),
|
|
33
|
-
...!props.noPasswordRepeat && { passwordRepeat:
|
|
33
|
+
...!props.noPasswordRepeat && { passwordRepeat: _hexclave_shared_dist_schema_fields.passwordSchema.nullable().oneOf([
|
|
34
34
|
yup.ref("password"),
|
|
35
35
|
"",
|
|
36
36
|
null
|
|
@@ -58,55 +58,55 @@ function CredentialSignUp(props) {
|
|
|
58
58
|
const registerPasswordRepeat = register("passwordRepeat");
|
|
59
59
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
|
|
60
60
|
className: "flex flex-col items-stretch stack-scope",
|
|
61
|
-
onSubmit: (e) => (0,
|
|
61
|
+
onSubmit: (e) => (0, _hexclave_shared_dist_utils_promises.runAsynchronouslyWithAlert)(handleSubmit(onSubmit)(e)),
|
|
62
62
|
noValidate: true,
|
|
63
63
|
children: [
|
|
64
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
64
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Label, {
|
|
65
65
|
htmlFor: "email",
|
|
66
66
|
className: "mb-1",
|
|
67
67
|
children: t("Email")
|
|
68
68
|
}),
|
|
69
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
69
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Input, {
|
|
70
70
|
id: "email",
|
|
71
71
|
type: "email",
|
|
72
72
|
autoComplete: "email",
|
|
73
73
|
...register("email")
|
|
74
74
|
}),
|
|
75
75
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(__elements_form_warning_js.FormWarningText, { text: errors.email?.message?.toString() }),
|
|
76
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
76
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Label, {
|
|
77
77
|
htmlFor: "password",
|
|
78
78
|
className: "mt-4 mb-1",
|
|
79
79
|
children: t("Password")
|
|
80
80
|
}),
|
|
81
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
81
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.PasswordInput, {
|
|
82
82
|
id: "password",
|
|
83
83
|
autoComplete: "new-password",
|
|
84
84
|
...registerPassword,
|
|
85
85
|
onChange: (e) => {
|
|
86
86
|
clearErrors("password");
|
|
87
87
|
clearErrors("passwordRepeat");
|
|
88
|
-
(0,
|
|
88
|
+
(0, _hexclave_shared_dist_utils_promises.runAsynchronously)(registerPassword.onChange(e));
|
|
89
89
|
}
|
|
90
90
|
}),
|
|
91
91
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(__elements_form_warning_js.FormWarningText, { text: errors.password?.message?.toString() }),
|
|
92
92
|
!props.noPasswordRepeat && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
93
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
93
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Label, {
|
|
94
94
|
htmlFor: "repeat-password",
|
|
95
95
|
className: "mt-4 mb-1",
|
|
96
96
|
children: t("Repeat Password")
|
|
97
97
|
}),
|
|
98
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
98
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.PasswordInput, {
|
|
99
99
|
id: "repeat-password",
|
|
100
100
|
...registerPasswordRepeat,
|
|
101
101
|
onChange: (e) => {
|
|
102
102
|
clearErrors("password");
|
|
103
103
|
clearErrors("passwordRepeat");
|
|
104
|
-
(0,
|
|
104
|
+
(0, _hexclave_shared_dist_utils_promises.runAsynchronously)(registerPasswordRepeat.onChange(e));
|
|
105
105
|
}
|
|
106
106
|
}),
|
|
107
107
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(__elements_form_warning_js.FormWarningText, { text: errors.passwordRepeat?.message?.toString() })
|
|
108
108
|
] }),
|
|
109
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
109
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Button, {
|
|
110
110
|
type: "submit",
|
|
111
111
|
className: "mt-6",
|
|
112
112
|
loading,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-sign-up.js","names":["passwordSchema","Label","Input","FormWarningText","PasswordInput","Button"],"sources":["../../src/components/credential-sign-up.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { getPasswordError } from \"@
|
|
1
|
+
{"version":3,"file":"credential-sign-up.js","names":["passwordSchema","Label","Input","FormWarningText","PasswordInput","Button"],"sources":["../../src/components/credential-sign-up.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { getPasswordError } from \"@hexclave/shared/dist/helpers/password\";\nimport { passwordSchema, strictEmailSchema, yupObject } from \"@hexclave/shared/dist/schema-fields\";\nimport { runAsynchronously, runAsynchronouslyWithAlert } from \"@hexclave/shared/dist/utils/promises\";\nimport { Button, Input, Label, PasswordInput } from \"@hexclave/ui\";\nimport React, { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { useStackApp } from \"../lib/hooks\";\nimport { useTranslation } from \"../lib/translations\";\nimport { FormWarningText } from \"./elements/form-warning\";\n\nexport function CredentialSignUp(props: { noPasswordRepeat?: boolean }) {\n const { t } = useTranslation();\n\n const schema = yupObject({\n email: strictEmailSchema(t('Please enter a valid email')).defined().nonEmpty(t('Please enter your email')),\n password: passwordSchema.defined().nonEmpty(t('Please enter your password')).test({\n name: 'is-valid-password',\n test: (value, ctx) => {\n const error = getPasswordError(value);\n if (error) {\n return ctx.createError({ message: error.message });\n } else {\n return true;\n }\n }\n }),\n ...(!props.noPasswordRepeat && {\n passwordRepeat: passwordSchema.nullable().oneOf([yup.ref('password'), \"\", null], t('Passwords do not match')).nonEmpty(t('Please repeat your password'))\n })\n });\n\n const { register, handleSubmit, setError, formState: { errors }, clearErrors } = useForm({\n resolver: yupResolver(schema)\n });\n const app = useStackApp();\n const [loading, setLoading] = useState(false);\n\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\n setLoading(true);\n try {\n const { email, password } = data;\n const result = await app.signUpWithCredential({ email, password });\n if (result.status === 'error') {\n setError('email', { type: 'manual', message: result.error.message });\n }\n } finally {\n setLoading(false);\n }\n };\n\n const registerPassword = register('password');\n const registerPasswordRepeat = register('passwordRepeat');\n\n return (\n <form\n className=\"flex flex-col items-stretch stack-scope\"\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n >\n <Label htmlFor=\"email\" className=\"mb-1\">{t('Email')}</Label>\n <Input id=\"email\" type=\"email\" autoComplete=\"email\" {...register('email')}/>\n <FormWarningText text={errors.email?.message?.toString()} />\n\n <Label htmlFor=\"password\" className=\"mt-4 mb-1\">{t('Password')}</Label>\n <PasswordInput\n id=\"password\"\n autoComplete=\"new-password\"\n {...registerPassword}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n clearErrors('password');\n clearErrors('passwordRepeat');\n runAsynchronously(registerPassword.onChange(e));\n }}\n />\n <FormWarningText text={errors.password?.message?.toString()} />\n {\n !props.noPasswordRepeat && (\n <>\n <Label htmlFor=\"repeat-password\" className=\"mt-4 mb-1\">{t('Repeat Password')}</Label>\n <PasswordInput\n id=\"repeat-password\"\n {...registerPasswordRepeat}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n clearErrors('password');\n clearErrors('passwordRepeat');\n runAsynchronously(registerPasswordRepeat.onChange(e));\n }}\n />\n <FormWarningText text={errors.passwordRepeat?.message?.toString()} />\n </>\n )\n }\n\n <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n {t('Sign Up')}\n </Button>\n </form>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAmBA,SAAgB,iBAAiB,OAAuC;CACtE,MAAM,EAAE,kDAAsB;CAoB9B,MAAM,EAAE,UAAU,cAAc,UAAU,WAAW,EAAE,UAAU,6CAAwB,EACvF,sGAnBuB;EACvB,kEAAyB,EAAE,6BAA6B,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,0BAA0B,CAAC;EAC1G,UAAUA,mDAAe,SAAS,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC,KAAK;GAChF,MAAM;GACN,OAAO,OAAO,QAAQ;IACpB,MAAM,qEAAyB,MAAM;AACrC,QAAI,MACF,QAAO,IAAI,YAAY,EAAE,SAAS,MAAM,SAAS,CAAC;QAElD,QAAO;;GAGZ,CAAC;EACF,GAAI,CAAC,MAAM,oBAAoB,EAC7B,gBAAgBA,mDAAe,UAAU,CAAC,MAAM;GAAC,IAAI,IAAI,WAAW;GAAE;GAAI;GAAK,EAAE,EAAE,yBAAyB,CAAC,CAAC,SAAS,EAAE,8BAA8B,CAAC,EACzJ;EACF,CAAC,CAG6B,EAC9B,CAAC;CACF,MAAM,wCAAmB;CACzB,MAAM,CAAC,SAAS,kCAAuB,MAAM;CAE7C,MAAM,WAAW,OAAO,SAAuC;AAC7D,aAAW,KAAK;AAChB,MAAI;GACF,MAAM,EAAE,OAAO,aAAa;GAC5B,MAAM,SAAS,MAAM,IAAI,qBAAqB;IAAE;IAAO;IAAU,CAAC;AAClE,OAAI,OAAO,WAAW,QACpB,UAAS,SAAS;IAAE,MAAM;IAAU,SAAS,OAAO,MAAM;IAAS,CAAC;YAE9D;AACR,cAAW,MAAM;;;CAIrB,MAAM,mBAAmB,SAAS,WAAW;CAC7C,MAAM,yBAAyB,SAAS,iBAAiB;AAEzD,QACE,4CAAC;EACC,WAAU;EACV,WAAU,2EAAgC,aAAa,SAAS,CAAC,EAAE,CAAC;EACpE;;GAEA,2CAACC;IAAM,SAAQ;IAAQ,WAAU;cAAQ,EAAE,QAAQ;KAAS;GAC5D,2CAACC;IAAM,IAAG;IAAQ,MAAK;IAAQ,cAAa;IAAQ,GAAI,SAAS,QAAQ;KAAG;GAC5E,2CAACC,8CAAgB,MAAM,OAAO,OAAO,SAAS,UAAU,GAAI;GAE5D,2CAACF;IAAM,SAAQ;IAAW,WAAU;cAAa,EAAE,WAAW;KAAS;GACvE,2CAACG;IACC,IAAG;IACH,cAAa;IACb,GAAI;IACJ,WAAW,MAA2C;AACpD,iBAAY,WAAW;AACvB,iBAAY,iBAAiB;AAC7B,iEAAkB,iBAAiB,SAAS,EAAE,CAAC;;KAEjD;GACF,2CAACD,8CAAgB,MAAM,OAAO,UAAU,SAAS,UAAU,GAAI;GAE7D,CAAC,MAAM,oBACL;IACE,2CAACF;KAAM,SAAQ;KAAkB,WAAU;eAAa,EAAE,kBAAkB;MAAS;IACrF,2CAACG;KACC,IAAG;KACH,GAAI;KACJ,WAAW,MAA2C;AACtD,kBAAY,WAAW;AACvB,kBAAY,iBAAiB;AAC7B,kEAAkB,uBAAuB,SAAS,EAAE,CAAC;;MAErD;IACF,2CAACD,8CAAgB,MAAM,OAAO,gBAAgB,SAAS,UAAU,GAAI;OACpE;GAIP,2CAACE;IAAO,MAAK;IAAS,WAAU;IAAgB;cAC7C,EAAE,UAAU;KACN;;GACJ"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
4
|
const require_chunk = require('../../chunk-BE-pF4vm.js');
|
|
5
|
-
let
|
|
5
|
+
let _hexclave_ui = require("@hexclave/ui");
|
|
6
6
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
7
|
|
|
8
8
|
//#region src/components/elements/separator-with-text.tsx
|
|
@@ -12,7 +12,7 @@ function SeparatorWithText({ text }) {
|
|
|
12
12
|
children: [
|
|
13
13
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
14
14
|
className: "flex-1",
|
|
15
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
15
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Separator, {})
|
|
16
16
|
}),
|
|
17
17
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
18
18
|
className: "mx-2 text-sm text-zinc-500",
|
|
@@ -20,7 +20,7 @@ function SeparatorWithText({ text }) {
|
|
|
20
20
|
}),
|
|
21
21
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
22
22
|
className: "flex-1",
|
|
23
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
23
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_hexclave_ui.Separator, {})
|
|
24
24
|
})
|
|
25
25
|
]
|
|
26
26
|
});
|