@stackframe/stack 2.4.28 → 2.5.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/CHANGELOG.md +23 -0
- package/dist/components/credential-sign-in-form.d.mts +5 -0
- package/dist/components/credential-sign-in-form.d.ts +5 -0
- package/dist/components/{credential-sign-in.js → credential-sign-in-form.js} +33 -23
- package/dist/components/credential-sign-in-form.js.map +1 -0
- package/dist/components/credential-sign-up-form.d.mts +5 -0
- package/dist/components/credential-sign-up-form.d.ts +5 -0
- package/dist/components/{credential-sign-up.js → credential-sign-up-form.js} +34 -24
- package/dist/components/credential-sign-up-form.js.map +1 -0
- package/dist/components/{form-warning.d.mts → elements/form-warning.d.mts} +1 -1
- package/dist/components/{form-warning.d.ts → elements/form-warning.d.ts} +1 -1
- package/dist/components/{form-warning.js → elements/form-warning.js} +7 -4
- package/dist/components/elements/form-warning.js.map +1 -0
- package/dist/components/{maybe-full-page.d.mts → elements/maybe-full-page.d.mts} +3 -3
- package/dist/components/{maybe-full-page.d.ts → elements/maybe-full-page.d.ts} +3 -3
- package/dist/components/{maybe-full-page.js → elements/maybe-full-page.js} +11 -10
- package/dist/components/elements/maybe-full-page.js.map +1 -0
- package/dist/components/{separator-with-text.d.mts → elements/separator-with-text.d.mts} +1 -1
- package/dist/components/{separator-with-text.d.ts → elements/separator-with-text.d.ts} +1 -1
- package/dist/components/{separator-with-text.js → elements/separator-with-text.js} +11 -7
- package/dist/components/elements/separator-with-text.js.map +1 -0
- package/dist/components/elements/ssr-layout-effect.d.mts +7 -0
- package/dist/components/elements/ssr-layout-effect.d.ts +7 -0
- package/dist/{joy.js → components/elements/ssr-layout-effect.js} +17 -8
- package/dist/components/elements/ssr-layout-effect.js.map +1 -0
- package/dist/components/{user-avatar.d.mts → elements/user-avatar.d.mts} +2 -2
- package/dist/components/{user-avatar.d.ts → elements/user-avatar.d.ts} +2 -2
- package/dist/components/elements/user-avatar.js +40 -0
- package/dist/components/elements/user-avatar.js.map +1 -0
- package/dist/components/{forgot-password.d.mts → forgot-password-form.d.mts} +2 -2
- package/dist/components/{forgot-password.d.ts → forgot-password-form.d.ts} +2 -2
- package/dist/components/{forgot-password.js → forgot-password-form.js} +28 -24
- package/dist/components/forgot-password-form.js.map +1 -0
- package/dist/components/magic-link-sign-in-form.d.mts +5 -0
- package/dist/components/magic-link-sign-in-form.d.ts +5 -0
- package/dist/components/{magic-link-sign-in.js → magic-link-sign-in-form.js} +30 -20
- package/dist/components/magic-link-sign-in-form.js.map +1 -0
- package/dist/components/message-cards/known-error-message-card.d.mts +1 -1
- package/dist/components/message-cards/known-error-message-card.d.ts +1 -1
- package/dist/components/message-cards/known-error-message-card.js +10 -16
- package/dist/components/message-cards/known-error-message-card.js.map +1 -1
- package/dist/components/message-cards/message-card.d.mts +3 -3
- package/dist/components/message-cards/message-card.d.ts +3 -3
- package/dist/components/message-cards/message-card.js +11 -17
- package/dist/components/message-cards/message-card.js.map +1 -1
- package/dist/components/message-cards/predefined-message-card.d.mts +1 -1
- package/dist/components/message-cards/predefined-message-card.d.ts +1 -1
- package/dist/components/message-cards/predefined-message-card.js +9 -15
- package/dist/components/message-cards/predefined-message-card.js.map +1 -1
- package/dist/components/{oauth-group.d.mts → oauth-button-group.d.mts} +2 -2
- package/dist/components/{oauth-group.d.ts → oauth-button-group.d.ts} +2 -2
- package/dist/components/oauth-button-group.js +43 -0
- package/dist/components/oauth-button-group.js.map +1 -0
- package/dist/components/oauth-button.d.mts +1 -1
- package/dist/components/oauth-button.d.ts +1 -1
- package/dist/components/oauth-button.js +40 -7
- package/dist/components/oauth-button.js.map +1 -1
- package/dist/components/{password-reset-inner.d.mts → password-reset-form.d.mts} +2 -2
- package/dist/components/{password-reset-inner.d.ts → password-reset-form.d.ts} +2 -2
- package/dist/components/{password-reset-inner.js → password-reset-form.js} +35 -30
- package/dist/components/password-reset-form.js.map +1 -0
- package/dist/components/selected-team-switcher.d.mts +12 -2
- package/dist/components/selected-team-switcher.d.ts +12 -2
- package/dist/components/selected-team-switcher.js +43 -35
- package/dist/components/selected-team-switcher.js.map +1 -1
- package/dist/components/user-button.d.mts +3 -3
- package/dist/components/user-button.d.ts +3 -3
- package/dist/components/user-button.js +32 -59
- package/dist/components/user-button.js.map +1 -1
- package/dist/components-page/account-settings.d.mts +1 -1
- package/dist/components-page/account-settings.d.ts +1 -1
- package/dist/components-page/account-settings.js +39 -45
- package/dist/components-page/account-settings.js.map +1 -1
- package/dist/components-page/auth-page.d.mts +1 -1
- package/dist/components-page/auth-page.d.ts +1 -1
- package/dist/components-page/auth-page.js +31 -36
- package/dist/components-page/auth-page.js.map +1 -1
- package/dist/components-page/email-verification.d.mts +1 -1
- package/dist/components-page/email-verification.d.ts +1 -1
- package/dist/components-page/email-verification.js +13 -19
- package/dist/components-page/email-verification.js.map +1 -1
- package/dist/components-page/error-page.d.mts +1 -1
- package/dist/components-page/error-page.d.ts +1 -1
- package/dist/components-page/error-page.js +15 -20
- package/dist/components-page/error-page.js.map +1 -1
- package/dist/components-page/forgot-password.d.mts +1 -1
- package/dist/components-page/forgot-password.d.ts +1 -1
- package/dist/components-page/forgot-password.js +17 -23
- package/dist/components-page/forgot-password.js.map +1 -1
- package/dist/components-page/magic-link-callback.d.mts +1 -1
- package/dist/components-page/magic-link-callback.d.ts +1 -1
- package/dist/components-page/magic-link-callback.js +14 -20
- package/dist/components-page/magic-link-callback.js.map +1 -1
- package/dist/components-page/oauth-callback.d.mts +1 -1
- package/dist/components-page/oauth-callback.d.ts +1 -1
- package/dist/components-page/oauth-callback.js +10 -16
- package/dist/components-page/oauth-callback.js.map +1 -1
- package/dist/components-page/password-reset.d.mts +1 -1
- package/dist/components-page/password-reset.d.ts +1 -1
- package/dist/components-page/password-reset.js +15 -11
- package/dist/components-page/password-reset.js.map +1 -1
- package/dist/components-page/sign-in.d.mts +1 -1
- package/dist/components-page/sign-in.d.ts +1 -1
- package/dist/components-page/sign-in.js +7 -13
- package/dist/components-page/sign-in.js.map +1 -1
- package/dist/components-page/sign-out.d.mts +1 -1
- package/dist/components-page/sign-out.d.ts +1 -1
- package/dist/components-page/sign-out.js +7 -13
- package/dist/components-page/sign-out.js.map +1 -1
- package/dist/components-page/sign-up.d.mts +1 -1
- package/dist/components-page/sign-up.d.ts +1 -1
- package/dist/components-page/sign-up.js +7 -13
- package/dist/components-page/sign-up.js.map +1 -1
- package/dist/components-page/stack-handler.js +22 -32
- package/dist/components-page/stack-handler.js.map +1 -1
- package/dist/esm/components/{credential-sign-in.js → credential-sign-in-form.js} +23 -17
- package/dist/esm/components/credential-sign-in-form.js.map +1 -0
- package/dist/esm/components/{credential-sign-up.js → credential-sign-up-form.js} +23 -17
- package/dist/esm/components/credential-sign-up-form.js.map +1 -0
- package/dist/esm/components/elements/form-warning.js +15 -0
- package/dist/esm/components/elements/form-warning.js.map +1 -0
- package/dist/esm/components/{maybe-full-page.js → elements/maybe-full-page.js} +7 -10
- package/dist/esm/components/elements/maybe-full-page.js.map +1 -0
- package/dist/esm/components/elements/separator-with-text.js +17 -0
- package/dist/esm/components/elements/separator-with-text.js.map +1 -0
- package/dist/esm/components/elements/ssr-layout-effect.js +16 -0
- package/dist/esm/components/elements/ssr-layout-effect.js.map +1 -0
- package/dist/esm/components/elements/user-avatar.js +15 -0
- package/dist/esm/components/elements/user-avatar.js.map +1 -0
- package/dist/esm/components/{forgot-password.js → forgot-password-form.js} +19 -19
- package/dist/esm/components/forgot-password-form.js.map +1 -0
- package/dist/esm/components/{magic-link-sign-in.js → magic-link-sign-in-form.js} +21 -15
- package/dist/esm/components/magic-link-sign-in-form.js.map +1 -0
- package/dist/esm/components/message-cards/known-error-message-card.js +5 -5
- package/dist/esm/components/message-cards/known-error-message-card.js.map +1 -1
- package/dist/esm/components/message-cards/message-card.js +4 -4
- package/dist/esm/components/message-cards/message-card.js.map +1 -1
- package/dist/esm/components/message-cards/predefined-message-card.js +4 -4
- package/dist/esm/components/message-cards/predefined-message-card.js.map +1 -1
- package/dist/esm/components/oauth-button-group.js +19 -0
- package/dist/esm/components/oauth-button-group.js.map +1 -0
- package/dist/esm/components/oauth-button.js +26 -7
- package/dist/esm/components/oauth-button.js.map +1 -1
- package/dist/esm/components/{password-reset-inner.js → password-reset-form.js} +28 -23
- package/dist/esm/components/password-reset-form.js.map +1 -0
- package/dist/esm/components/selected-team-switcher.js +50 -45
- package/dist/esm/components/selected-team-switcher.js.map +1 -1
- package/dist/esm/components/user-button.js +23 -52
- package/dist/esm/components/user-button.js.map +1 -1
- package/dist/esm/components-page/account-settings.js +29 -29
- package/dist/esm/components-page/account-settings.js.map +1 -1
- package/dist/esm/components-page/auth-page.js +25 -24
- package/dist/esm/components-page/auth-page.js.map +1 -1
- package/dist/esm/components-page/email-verification.js +6 -6
- package/dist/esm/components-page/email-verification.js.map +1 -1
- package/dist/esm/components-page/error-page.js +8 -7
- package/dist/esm/components-page/error-page.js.map +1 -1
- package/dist/esm/components-page/forgot-password.js +10 -10
- package/dist/esm/components-page/forgot-password.js.map +1 -1
- package/dist/esm/components-page/magic-link-callback.js +6 -6
- package/dist/esm/components-page/magic-link-callback.js.map +1 -1
- package/dist/esm/components-page/oauth-callback.js +5 -5
- package/dist/esm/components-page/oauth-callback.js.map +1 -1
- package/dist/esm/components-page/password-reset.js +11 -11
- package/dist/esm/components-page/password-reset.js.map +1 -1
- package/dist/esm/components-page/sign-in.js +2 -2
- package/dist/esm/components-page/sign-in.js.map +1 -1
- package/dist/esm/components-page/sign-out.js +3 -3
- package/dist/esm/components-page/sign-out.js.map +1 -1
- package/dist/esm/components-page/sign-up.js +2 -2
- package/dist/esm/components-page/sign-up.js.map +1 -1
- package/dist/esm/components-page/stack-handler.js +11 -11
- package/dist/esm/components-page/stack-handler.js.map +1 -1
- package/dist/esm/generated/global-css.js +6 -0
- package/dist/esm/generated/global-css.js.map +1 -0
- package/dist/esm/index.js +33 -40
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/stack-app.js +3 -6
- package/dist/esm/lib/stack-app.js.map +1 -1
- package/dist/esm/providers/theme-provider.js +43 -4
- package/dist/esm/providers/theme-provider.js.map +1 -1
- package/dist/esm/utils/browser-script.js +2 -1
- package/dist/esm/utils/browser-script.js.map +1 -1
- package/dist/esm/utils/constants.js +43 -12
- package/dist/esm/utils/constants.js.map +1 -1
- package/dist/generated/global-css.d.mts +3 -0
- package/dist/generated/global-css.d.ts +3 -0
- package/dist/generated/global-css.js +31 -0
- package/dist/generated/global-css.js.map +1 -0
- package/dist/index.d.mts +16 -30
- package/dist/index.d.ts +16 -30
- package/dist/index.js +33 -45
- package/dist/index.js.map +1 -1
- package/dist/lib/stack-app.d.mts +4 -4
- package/dist/lib/stack-app.d.ts +4 -4
- package/dist/lib/stack-app.js +3 -6
- package/dist/lib/stack-app.js.map +1 -1
- package/dist/providers/stack-provider-client.d.mts +3 -3
- package/dist/providers/stack-provider-client.d.ts +3 -3
- package/dist/providers/stack-provider.d.mts +2 -2
- package/dist/providers/stack-provider.d.ts +2 -2
- package/dist/providers/styled-components-registry.d.mts +2 -2
- package/dist/providers/styled-components-registry.d.ts +2 -2
- package/dist/providers/theme-provider.d.mts +34 -17
- package/dist/providers/theme-provider.d.ts +34 -17
- package/dist/providers/theme-provider.js +43 -4
- package/dist/providers/theme-provider.js.map +1 -1
- package/dist/utils/browser-script.js +2 -1
- package/dist/utils/browser-script.js.map +1 -1
- package/dist/utils/constants.d.mts +43 -12
- package/dist/utils/constants.d.ts +43 -12
- package/dist/utils/constants.js +44 -13
- package/dist/utils/constants.js.map +1 -1
- package/package.json +25 -32
- package/dist/components/credential-sign-in.d.mts +0 -5
- package/dist/components/credential-sign-in.d.ts +0 -5
- package/dist/components/credential-sign-in.js.map +0 -1
- package/dist/components/credential-sign-up.d.mts +0 -5
- package/dist/components/credential-sign-up.d.ts +0 -5
- package/dist/components/credential-sign-up.js.map +0 -1
- package/dist/components/forgot-password.js.map +0 -1
- package/dist/components/form-warning.js.map +0 -1
- package/dist/components/magic-link-sign-in.d.mts +0 -5
- package/dist/components/magic-link-sign-in.d.ts +0 -5
- package/dist/components/magic-link-sign-in.js.map +0 -1
- package/dist/components/maybe-full-page.js.map +0 -1
- package/dist/components/oauth-group.js +0 -49
- package/dist/components/oauth-group.js.map +0 -1
- package/dist/components/password-field.d.mts +0 -5
- package/dist/components/password-field.d.ts +0 -5
- package/dist/components/password-field.js +0 -111
- package/dist/components/password-field.js.map +0 -1
- package/dist/components/password-reset-inner.js.map +0 -1
- package/dist/components/separator-with-text.js.map +0 -1
- package/dist/components/user-avatar.js +0 -56
- package/dist/components/user-avatar.js.map +0 -1
- package/dist/components-core/avatar.d.mts +0 -8
- package/dist/components-core/avatar.d.ts +0 -8
- package/dist/components-core/avatar.js +0 -94
- package/dist/components-core/avatar.js.map +0 -1
- package/dist/components-core/button.d.mts +0 -13
- package/dist/components-core/button.d.ts +0 -13
- package/dist/components-core/button.js +0 -217
- package/dist/components-core/button.js.map +0 -1
- package/dist/components-core/card.d.mts +0 -8
- package/dist/components-core/card.d.ts +0 -8
- package/dist/components-core/card.js +0 -89
- package/dist/components-core/card.js.map +0 -1
- package/dist/components-core/collapsible.d.mts +0 -8
- package/dist/components-core/collapsible.d.ts +0 -8
- package/dist/components-core/collapsible.js +0 -50
- package/dist/components-core/collapsible.js.map +0 -1
- package/dist/components-core/container.d.mts +0 -8
- package/dist/components-core/container.d.ts +0 -8
- package/dist/components-core/container.js +0 -70
- package/dist/components-core/container.js.map +0 -1
- package/dist/components-core/dropdown.d.mts +0 -15
- package/dist/components-core/dropdown.d.ts +0 -15
- package/dist/components-core/dropdown.js +0 -149
- package/dist/components-core/dropdown.js.map +0 -1
- package/dist/components-core/index.d.mts +0 -59
- package/dist/components-core/index.d.ts +0 -59
- package/dist/components-core/index.js +0 -148
- package/dist/components-core/index.js.map +0 -1
- package/dist/components-core/input.d.mts +0 -6
- package/dist/components-core/input.d.ts +0 -6
- package/dist/components-core/input.js +0 -119
- package/dist/components-core/input.js.map +0 -1
- package/dist/components-core/label.d.mts +0 -6
- package/dist/components-core/label.d.ts +0 -6
- package/dist/components-core/label.js +0 -72
- package/dist/components-core/label.js.map +0 -1
- package/dist/components-core/link.d.mts +0 -10
- package/dist/components-core/link.d.ts +0 -10
- package/dist/components-core/link.js +0 -73
- package/dist/components-core/link.js.map +0 -1
- package/dist/components-core/popover.d.mts +0 -8
- package/dist/components-core/popover.d.ts +0 -8
- package/dist/components-core/popover.js +0 -81
- package/dist/components-core/popover.js.map +0 -1
- package/dist/components-core/separator.d.mts +0 -6
- package/dist/components-core/separator.d.ts +0 -6
- package/dist/components-core/separator.js +0 -71
- package/dist/components-core/separator.js.map +0 -1
- package/dist/components-core/skeleton.d.mts +0 -7
- package/dist/components-core/skeleton.d.ts +0 -7
- package/dist/components-core/skeleton.js +0 -87
- package/dist/components-core/skeleton.js.map +0 -1
- package/dist/components-core/tabs.d.mts +0 -9
- package/dist/components-core/tabs.d.ts +0 -9
- package/dist/components-core/tabs.js +0 -124
- package/dist/components-core/tabs.js.map +0 -1
- package/dist/components-core/text.d.mts +0 -10
- package/dist/components-core/text.d.ts +0 -10
- package/dist/components-core/text.js +0 -98
- package/dist/components-core/text.js.map +0 -1
- package/dist/components-core-joy/button.d.mts +0 -6
- package/dist/components-core-joy/button.d.ts +0 -6
- package/dist/components-core-joy/button.js +0 -88
- package/dist/components-core-joy/button.js.map +0 -1
- package/dist/components-core-joy/input.d.mts +0 -5
- package/dist/components-core-joy/input.d.ts +0 -5
- package/dist/components-core-joy/input.js +0 -53
- package/dist/components-core-joy/input.js.map +0 -1
- package/dist/components-core-joy/separator.d.mts +0 -6
- package/dist/components-core-joy/separator.d.ts +0 -6
- package/dist/components-core-joy/separator.js +0 -52
- package/dist/components-core-joy/separator.js.map +0 -1
- package/dist/components-core-joy/tabs.d.mts +0 -9
- package/dist/components-core-joy/tabs.d.ts +0 -9
- package/dist/components-core-joy/tabs.js +0 -67
- package/dist/components-core-joy/tabs.js.map +0 -1
- package/dist/components-core-joy/text.d.mts +0 -9
- package/dist/components-core-joy/text.d.ts +0 -9
- package/dist/components-core-joy/text.js +0 -70
- package/dist/components-core-joy/text.js.map +0 -1
- package/dist/esm/components/credential-sign-in.js.map +0 -1
- package/dist/esm/components/credential-sign-up.js.map +0 -1
- package/dist/esm/components/forgot-password.js.map +0 -1
- package/dist/esm/components/form-warning.js +0 -16
- package/dist/esm/components/form-warning.js.map +0 -1
- package/dist/esm/components/magic-link-sign-in.js.map +0 -1
- package/dist/esm/components/maybe-full-page.js.map +0 -1
- package/dist/esm/components/oauth-group.js +0 -19
- package/dist/esm/components/oauth-group.js.map +0 -1
- package/dist/esm/components/password-field.js +0 -81
- package/dist/esm/components/password-field.js.map +0 -1
- package/dist/esm/components/password-reset-inner.js.map +0 -1
- package/dist/esm/components/separator-with-text.js +0 -17
- package/dist/esm/components/separator-with-text.js.map +0 -1
- package/dist/esm/components/user-avatar.js +0 -25
- package/dist/esm/components/user-avatar.js.map +0 -1
- package/dist/esm/components-core/avatar.js +0 -57
- package/dist/esm/components-core/avatar.js.map +0 -1
- package/dist/esm/components-core/button.js +0 -183
- package/dist/esm/components-core/button.js.map +0 -1
- package/dist/esm/components-core/card.js +0 -52
- package/dist/esm/components-core/card.js.map +0 -1
- package/dist/esm/components-core/collapsible.js +0 -14
- package/dist/esm/components-core/collapsible.js.map +0 -1
- package/dist/esm/components-core/container.js +0 -36
- package/dist/esm/components-core/container.js.map +0 -1
- package/dist/esm/components-core/dropdown.js +0 -110
- package/dist/esm/components-core/dropdown.js.map +0 -1
- package/dist/esm/components-core/index.js +0 -94
- package/dist/esm/components-core/index.js.map +0 -1
- package/dist/esm/components-core/input.js +0 -85
- package/dist/esm/components-core/input.js.map +0 -1
- package/dist/esm/components-core/label.js +0 -38
- package/dist/esm/components-core/label.js.map +0 -1
- package/dist/esm/components-core/link.js +0 -39
- package/dist/esm/components-core/link.js.map +0 -1
- package/dist/esm/components-core/popover.js +0 -44
- package/dist/esm/components-core/popover.js.map +0 -1
- package/dist/esm/components-core/separator.js +0 -37
- package/dist/esm/components-core/separator.js.map +0 -1
- package/dist/esm/components-core/skeleton.js +0 -53
- package/dist/esm/components-core/skeleton.js.map +0 -1
- package/dist/esm/components-core/tabs.js +0 -86
- package/dist/esm/components-core/tabs.js.map +0 -1
- package/dist/esm/components-core/text.js +0 -64
- package/dist/esm/components-core/text.js.map +0 -1
- package/dist/esm/components-core-joy/button.js +0 -54
- package/dist/esm/components-core-joy/button.js.map +0 -1
- package/dist/esm/components-core-joy/input.js +0 -19
- package/dist/esm/components-core-joy/input.js.map +0 -1
- package/dist/esm/components-core-joy/separator.js +0 -18
- package/dist/esm/components-core-joy/separator.js.map +0 -1
- package/dist/esm/components-core-joy/tabs.js +0 -30
- package/dist/esm/components-core-joy/tabs.js.map +0 -1
- package/dist/esm/components-core-joy/text.js +0 -36
- package/dist/esm/components-core-joy/text.js.map +0 -1
- package/dist/esm/joy.js +0 -6
- package/dist/esm/joy.js.map +0 -1
- package/dist/esm/providers/component-provider.js +0 -77
- package/dist/esm/providers/component-provider.js.map +0 -1
- package/dist/esm/providers/design-provider.js +0 -37
- package/dist/esm/providers/design-provider.js.map +0 -1
- package/dist/esm/providers/joy-provider.js +0 -36
- package/dist/esm/providers/joy-provider.js.map +0 -1
- package/dist/joy.d.mts +0 -16
- package/dist/joy.d.ts +0 -16
- package/dist/joy.js.map +0 -1
- package/dist/providers/component-provider.d.mts +0 -113
- package/dist/providers/component-provider.d.ts +0 -113
- package/dist/providers/component-provider.js +0 -96
- package/dist/providers/component-provider.js.map +0 -1
- package/dist/providers/design-provider.d.mts +0 -34
- package/dist/providers/design-provider.d.ts +0 -34
- package/dist/providers/design-provider.js +0 -62
- package/dist/providers/design-provider.js.map +0 -1
- package/dist/providers/joy-provider.d.mts +0 -36
- package/dist/providers/joy-provider.d.ts +0 -36
- package/dist/providers/joy-provider.js +0 -61
- package/dist/providers/joy-provider.js.map +0 -1
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
"use client";
|
|
3
3
|
|
|
4
4
|
// src/components-page/account-settings.tsx
|
|
5
|
-
import {
|
|
6
|
-
import PredefinedMessageCard from "../components/message-cards/predefined-message-card";
|
|
7
|
-
import {
|
|
8
|
-
import UserAvatar from "../components/user-avatar";
|
|
5
|
+
import { useUser } from "..";
|
|
6
|
+
import { PredefinedMessageCard } from "../components/message-cards/predefined-message-card";
|
|
7
|
+
import { UserAvatar } from "../components/elements/user-avatar";
|
|
9
8
|
import { useState } from "react";
|
|
10
|
-
import FormWarningText from "../components/form-warning";
|
|
9
|
+
import { FormWarningText } from "../components/elements/form-warning";
|
|
11
10
|
import { getPasswordError } from "@stackframe/stack-shared/dist/helpers/password";
|
|
11
|
+
import { Button, Card, CardContent, CardFooter, CardHeader, Container, Input, Label, PasswordInput, Typography, cn } from "@stackframe/stack-ui";
|
|
12
12
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
13
13
|
function SettingSection(props) {
|
|
14
14
|
return /* @__PURE__ */ jsxs(Card, { children: [
|
|
15
|
-
/* @__PURE__ */
|
|
16
|
-
/* @__PURE__ */ jsx(
|
|
17
|
-
/* @__PURE__ */ jsx(
|
|
18
|
-
] }),
|
|
19
|
-
props.children && /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx("div", {
|
|
20
|
-
props.buttonText && /* @__PURE__ */ jsx(CardFooter, { children: /* @__PURE__ */ jsx("div", {
|
|
15
|
+
/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs("div", { children: [
|
|
16
|
+
/* @__PURE__ */ jsx(Typography, { type: "h4", children: props.title }),
|
|
17
|
+
/* @__PURE__ */ jsx(Typography, { type: "label", variant: "secondary", children: props.desc })
|
|
18
|
+
] }) }),
|
|
19
|
+
props.children && /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-4", children: props.children }) }),
|
|
20
|
+
props.buttonText && /* @__PURE__ */ jsx(CardFooter, { children: /* @__PURE__ */ jsx("div", { className: "flex justify-end w-full", children: /* @__PURE__ */ jsx(
|
|
21
21
|
Button,
|
|
22
22
|
{
|
|
23
23
|
disabled: props.buttonDisabled,
|
|
@@ -44,15 +44,15 @@ function ProfileSection() {
|
|
|
44
44
|
setChanged(false);
|
|
45
45
|
},
|
|
46
46
|
children: [
|
|
47
|
-
/* @__PURE__ */ jsxs("div", {
|
|
47
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-4 items-center", children: [
|
|
48
48
|
/* @__PURE__ */ jsx(UserAvatar, { user, size: 50 }),
|
|
49
|
-
/* @__PURE__ */ jsxs("div", {
|
|
50
|
-
/* @__PURE__ */ jsx(
|
|
51
|
-
/* @__PURE__ */ jsx(
|
|
49
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
|
|
50
|
+
/* @__PURE__ */ jsx(Typography, { children: user?.displayName }),
|
|
51
|
+
/* @__PURE__ */ jsx(Typography, { variant: "secondary", type: "label", children: user?.primaryEmail })
|
|
52
52
|
] })
|
|
53
53
|
] }),
|
|
54
|
-
/* @__PURE__ */ jsxs("div", {
|
|
55
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "display-name", children: "Display Name" }),
|
|
54
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
|
|
55
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "display-name", className: "mb-1", children: "Display Name" }),
|
|
56
56
|
/* @__PURE__ */ jsx(
|
|
57
57
|
Input,
|
|
58
58
|
{
|
|
@@ -83,7 +83,7 @@ function EmailVerificationSection() {
|
|
|
83
83
|
await user?.sendVerificationEmail();
|
|
84
84
|
setEmailSent(true);
|
|
85
85
|
},
|
|
86
|
-
children: user?.primaryEmailVerified ? /* @__PURE__ */ jsx(
|
|
86
|
+
children: user?.primaryEmailVerified ? /* @__PURE__ */ jsx(Typography, { variant: "success", children: "Your email has been verified" }) : /* @__PURE__ */ jsx(Typography, { variant: "destructive", children: "Your email has not been verified" })
|
|
87
87
|
}
|
|
88
88
|
);
|
|
89
89
|
}
|
|
@@ -124,10 +124,10 @@ function PasswordSection() {
|
|
|
124
124
|
}
|
|
125
125
|
},
|
|
126
126
|
children: [
|
|
127
|
-
/* @__PURE__ */ jsxs("div", {
|
|
128
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "old-password", children: "Old Password" }),
|
|
127
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
|
|
128
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "old-password", className: "mb-1", children: "Old Password" }),
|
|
129
129
|
/* @__PURE__ */ jsx(
|
|
130
|
-
|
|
130
|
+
PasswordInput,
|
|
131
131
|
{
|
|
132
132
|
id: "old-password",
|
|
133
133
|
value: oldPassword,
|
|
@@ -139,10 +139,10 @@ function PasswordSection() {
|
|
|
139
139
|
),
|
|
140
140
|
/* @__PURE__ */ jsx(FormWarningText, { text: oldPasswordError })
|
|
141
141
|
] }),
|
|
142
|
-
/* @__PURE__ */ jsxs("div", {
|
|
143
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "new-password", children: "New Password" }),
|
|
142
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
|
|
143
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "new-password", className: "mb-1", children: "New Password" }),
|
|
144
144
|
/* @__PURE__ */ jsx(
|
|
145
|
-
|
|
145
|
+
PasswordInput,
|
|
146
146
|
{
|
|
147
147
|
id: "new-password",
|
|
148
148
|
value: newPassword,
|
|
@@ -176,10 +176,10 @@ function AccountSettings({ fullPage = false }) {
|
|
|
176
176
|
if (!user) {
|
|
177
177
|
return /* @__PURE__ */ jsx(PredefinedMessageCard, { type: "signedOut", fullPage });
|
|
178
178
|
}
|
|
179
|
-
const inner = /* @__PURE__ */ jsxs("div", {
|
|
179
|
+
const inner = /* @__PURE__ */ jsxs("div", { className: cn(fullPage ? "p-4" : "", "flex flex-col gap-4"), children: [
|
|
180
180
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
181
|
-
/* @__PURE__ */ jsx(
|
|
182
|
-
/* @__PURE__ */ jsx(
|
|
181
|
+
/* @__PURE__ */ jsx(Typography, { type: "h2", children: "Account Settings" }),
|
|
182
|
+
/* @__PURE__ */ jsx(Typography, { variant: "secondary", type: "label", children: "Manage your account" })
|
|
183
183
|
] }),
|
|
184
184
|
/* @__PURE__ */ jsx(ProfileSection, {}),
|
|
185
185
|
/* @__PURE__ */ jsx(EmailVerificationSection, {}),
|
|
@@ -187,12 +187,12 @@ function AccountSettings({ fullPage = false }) {
|
|
|
187
187
|
/* @__PURE__ */ jsx(SignOutSection, {})
|
|
188
188
|
] });
|
|
189
189
|
if (fullPage) {
|
|
190
|
-
return /* @__PURE__ */ jsx(Container, { size: "
|
|
190
|
+
return /* @__PURE__ */ jsx(Container, { size: 600, className: "stack-scope", children: inner });
|
|
191
191
|
} else {
|
|
192
192
|
return inner;
|
|
193
193
|
}
|
|
194
194
|
}
|
|
195
195
|
export {
|
|
196
|
-
AccountSettings
|
|
196
|
+
AccountSettings
|
|
197
197
|
};
|
|
198
198
|
//# sourceMappingURL=account-settings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components-page/account-settings.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport { PasswordField, useUser } from '..';\nimport PredefinedMessageCard from '../components/message-cards/predefined-message-card';\nimport { Text, Label, Input, Button, Card, CardHeader, CardContent, CardFooter, Container } from \"../components-core\";\nimport UserAvatar from '../components/user-avatar';\nimport { useState } from 'react';\nimport FormWarningText from '../components/form-warning';\nimport { getPasswordError } from '@stackframe/stack-shared/dist/helpers/password';\n\nfunction SettingSection(props: {\n title: string, \n desc: string, \n buttonText?: string, \n buttonDisabled?: boolean,\n onButtonClick?: React.ComponentProps<typeof Button>[\"onClick\"],\n buttonVariant?: 'primary' | 'secondary',\n children?: React.ReactNode, \n}) {\n return (\n <Card>\n <CardHeader>\n <Text as='h3' style={{ fontWeight: 500 }}>{props.title}</Text>\n <Text variant='secondary' size='sm'>{props.desc}</Text>\n </CardHeader>\n {props.children && <CardContent>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {props.children}\n </div>\n </CardContent>}\n {props.buttonText && <CardFooter>\n <div style={{ display: 'flex', justifyContent: 'flex-end', width: '100%' }}>\n <Button\n disabled={props.buttonDisabled}\n onClick={props.onButtonClick}\n variant={props.buttonVariant}\n >\n {props.buttonText}\n </Button>\n </div>\n </CardFooter>}\n </Card>\n );\n}\n\nfunction ProfileSection() {\n const user = useUser();\n const [userInfo, setUserInfo] = useState<{ displayName: string }>({ displayName: user?.displayName || '' });\n const [changed, setChanged] = useState(false);\n\n return (\n <SettingSection\n title='Profile'\n desc='Your profile information'\n buttonDisabled={!changed}\n buttonText='Save'\n onButtonClick={async () => {\n await user?.update(userInfo);\n setChanged(false);\n }}\n >\n <div style={{ display: 'flex', gap: '1rem', alignItems: 'center' }}>\n <UserAvatar user={user} size={50}/>\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Text>{user?.displayName}</Text>\n <Text variant='secondary' size='sm'>{user?.primaryEmail}</Text>\n </div>\n </div>\n\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Label htmlFor='display-name'>Display Name</Label>\n <Input\n id='display-name'\n value={userInfo.displayName}\n onChange={(e) => {\n setUserInfo((i) => ({...i, displayName: e.target.value }));\n setChanged(true);\n }}\n />\n </div>\n </SettingSection>\n );\n}\n\nfunction EmailVerificationSection() {\n const user = useUser();\n const [emailSent, setEmailSent] = useState(false);\n\n return (\n <SettingSection\n title='Email Verification'\n desc='We want to make sure that you own the email address.'\n buttonDisabled={emailSent}\n buttonText={\n !user?.primaryEmailVerified ? \n emailSent ? \n 'Email sent!' : \n 'Send Email'\n : undefined\n }\n onButtonClick={async () => {\n await user?.sendVerificationEmail();\n setEmailSent(true);\n }}\n >\n {user?.primaryEmailVerified ? \n <Text variant='success'>Your email has been verified</Text> : \n <Text variant='warning'>Your email has not been verified</Text>}\n </SettingSection>\n );\n}\n\nfunction PasswordSection() {\n const user = useUser();\n const [oldPassword, setOldPassword] = useState<string>('');\n const [oldPasswordError, setOldPasswordError] = useState<string>('');\n const [newPassword, setNewPassword] = useState<string>('');\n const [newPasswordError, setNewPasswordError] = useState<string>('');\n\n if (!user?.hasPassword) {\n return null;\n }\n\n return (\n <SettingSection\n title='Password'\n desc='Change your password here.'\n buttonDisabled={!oldPassword || !newPassword}\n buttonText='Save'\n onButtonClick={async () => {\n if (oldPassword && newPassword) {\n const errorMessage = getPasswordError(newPassword);\n if (errorMessage) {\n setNewPasswordError(errorMessage.message);\n } else {\n const errorCode = await user.updatePassword({ oldPassword, newPassword });\n if (errorCode) {\n setOldPasswordError('Incorrect password');\n } else {\n setOldPassword('');\n setNewPassword('');\n }\n }\n } else if (oldPassword && !newPassword) {\n setNewPasswordError('Please enter a new password');\n } else if (newPassword && !oldPassword) {\n setOldPasswordError('Please enter your old password');\n }\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Label htmlFor='old-password'>Old Password</Label>\n <PasswordField\n id='old-password' \n value={oldPassword} \n onChange={(e) => {\n setOldPassword(e.target.value);\n setOldPasswordError('');\n }}\n />\n <FormWarningText text={oldPasswordError} />\n </div>\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Label htmlFor='new-password'>New Password</Label>\n <PasswordField\n id='new-password' \n value={newPassword} \n onChange={(e) => {\n setNewPassword(e.target.value);\n setNewPasswordError('');\n }}\n />\n <FormWarningText text={newPasswordError} />\n </div>\n </SettingSection>\n );\n}\n\nfunction SignOutSection() {\n const user = useUser();\n return (\n <SettingSection\n title='Sign out'\n desc='Sign out of your account on this device.'\n buttonVariant='secondary'\n buttonText='Sign Out'\n onButtonClick={() => user?.signOut()}\n >\n </SettingSection>\n );\n}\n\nexport default function AccountSettings({ fullPage=false }: { fullPage?: boolean }) {\n const user = useUser();\n if (!user) {\n return <PredefinedMessageCard type='signedOut' fullPage={fullPage} />;\n }\n\n const inner = (\n <div style={{ padding: fullPage ? '1rem' : 0, display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n <div>\n <Text size=\"xl\" as='h1' style={{ fontWeight: '600' }}>Account Settings</Text>\n <Text variant='secondary' size='sm'>Manage your account</Text>\n </div>\n \n <ProfileSection />\n <EmailVerificationSection />\n <PasswordSection />\n <SignOutSection />\n </div>\n );\n\n if (fullPage) {\n return (\n <Container size='sm'>\n {inner}\n </Container>\n );\n } else {\n return inner;\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components-page/account-settings.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport { useUser } from '..';\nimport { PredefinedMessageCard } from '../components/message-cards/predefined-message-card';\nimport { UserAvatar } from '../components/elements/user-avatar';\nimport { useState } from 'react';\nimport { FormWarningText } from '../components/elements/form-warning';\nimport { getPasswordError } from '@stackframe/stack-shared/dist/helpers/password';\nimport { Button, Card, CardContent, CardFooter, CardHeader, Container, Input, Label, PasswordInput, Typography, cn } from '@stackframe/stack-ui';\n\nfunction SettingSection(props: {\n title: string, \n desc: string, \n buttonText?: string, \n buttonDisabled?: boolean,\n onButtonClick?: React.ComponentProps<typeof Button>[\"onClick\"],\n buttonVariant?: 'default' | 'secondary',\n children?: React.ReactNode, \n}) {\n return (\n <Card>\n <CardHeader>\n <div>\n <Typography type='h4'>{props.title}</Typography>\n <Typography type='label' variant='secondary'>{props.desc}</Typography>\n </div>\n </CardHeader>\n {props.children && <CardContent>\n <div className='flex flex-col gap-4'>\n {props.children}\n </div>\n </CardContent>}\n {props.buttonText && <CardFooter>\n <div className='flex justify-end w-full'>\n <Button\n disabled={props.buttonDisabled}\n onClick={props.onButtonClick}\n variant={props.buttonVariant}\n >\n {props.buttonText}\n </Button>\n </div>\n </CardFooter>}\n </Card>\n );\n}\n\nfunction ProfileSection() {\n const user = useUser();\n const [userInfo, setUserInfo] = useState<{ displayName: string }>({ displayName: user?.displayName || '' });\n const [changed, setChanged] = useState(false);\n\n return (\n <SettingSection\n title='Profile'\n desc='Your profile information'\n buttonDisabled={!changed}\n buttonText='Save'\n onButtonClick={async () => {\n await user?.update(userInfo);\n setChanged(false);\n }}\n >\n <div className='flex gap-4 items-center'>\n <UserAvatar user={user} size={50}/>\n <div className='flex flex-col'>\n <Typography>{user?.displayName}</Typography>\n <Typography variant='secondary' type='label'>{user?.primaryEmail}</Typography>\n </div>\n </div>\n\n <div className='flex flex-col'>\n <Label htmlFor='display-name' className='mb-1'>Display Name</Label>\n <Input\n id='display-name'\n value={userInfo.displayName}\n onChange={(e) => {\n setUserInfo((i) => ({...i, displayName: e.target.value }));\n setChanged(true);\n }}\n />\n </div>\n </SettingSection>\n );\n}\n\nfunction EmailVerificationSection() {\n const user = useUser();\n const [emailSent, setEmailSent] = useState(false);\n\n return (\n <SettingSection\n title='Email Verification'\n desc='We want to make sure that you own the email address.'\n buttonDisabled={emailSent}\n buttonText={\n !user?.primaryEmailVerified ? \n emailSent ? \n 'Email sent!' : \n 'Send Email'\n : undefined\n }\n onButtonClick={async () => {\n await user?.sendVerificationEmail();\n setEmailSent(true);\n }}\n >\n {user?.primaryEmailVerified ? \n <Typography variant='success'>Your email has been verified</Typography> :\n <Typography variant='destructive'>Your email has not been verified</Typography>}\n </SettingSection>\n );\n}\n\nfunction PasswordSection() {\n const user = useUser();\n const [oldPassword, setOldPassword] = useState<string>('');\n const [oldPasswordError, setOldPasswordError] = useState<string>('');\n const [newPassword, setNewPassword] = useState<string>('');\n const [newPasswordError, setNewPasswordError] = useState<string>('');\n\n if (!user?.hasPassword) {\n return null;\n }\n\n return (\n <SettingSection\n title='Password'\n desc='Change your password here.'\n buttonDisabled={!oldPassword || !newPassword}\n buttonText='Save'\n onButtonClick={async () => {\n if (oldPassword && newPassword) {\n const errorMessage = getPasswordError(newPassword);\n if (errorMessage) {\n setNewPasswordError(errorMessage.message);\n } else {\n const errorCode = await user.updatePassword({ oldPassword, newPassword });\n if (errorCode) {\n setOldPasswordError('Incorrect password');\n } else {\n setOldPassword('');\n setNewPassword('');\n }\n }\n } else if (oldPassword && !newPassword) {\n setNewPasswordError('Please enter a new password');\n } else if (newPassword && !oldPassword) {\n setOldPasswordError('Please enter your old password');\n }\n }}\n >\n <div className='flex flex-col'>\n <Label htmlFor='old-password' className='mb-1'>Old Password</Label>\n <PasswordInput\n id='old-password' \n value={oldPassword} \n onChange={(e) => {\n setOldPassword(e.target.value);\n setOldPasswordError('');\n }}\n />\n <FormWarningText text={oldPasswordError} />\n </div>\n <div className='flex flex-col'>\n <Label htmlFor='new-password' className='mb-1'>New Password</Label>\n <PasswordInput\n id='new-password' \n value={newPassword} \n onChange={(e) => {\n setNewPassword(e.target.value);\n setNewPasswordError('');\n }}\n />\n <FormWarningText text={newPasswordError} />\n </div>\n </SettingSection>\n );\n}\n\nfunction SignOutSection() {\n const user = useUser();\n return (\n <SettingSection\n title='Sign out'\n desc='Sign out of your account on this device.'\n buttonVariant='secondary'\n buttonText='Sign Out'\n onButtonClick={() => user?.signOut()}\n >\n </SettingSection>\n );\n}\n\nexport function AccountSettings({ fullPage=false }: { fullPage?: boolean }) {\n const user = useUser();\n if (!user) {\n return <PredefinedMessageCard type='signedOut' fullPage={fullPage} />;\n }\n\n const inner = (\n <div className={cn(fullPage ? 'p-4' : '', 'flex flex-col gap-4')}>\n <div>\n <Typography type='h2'>Account Settings</Typography>\n <Typography variant='secondary' type='label'>Manage your account</Typography>\n </div>\n \n <ProfileSection />\n <EmailVerificationSection />\n <PasswordSection />\n <SignOutSection />\n </div>\n );\n\n if (fullPage) {\n return (\n <Container size={600} className='stack-scope'>\n {inner}\n </Container>\n );\n } else {\n return inner;\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
"use client";
|
|
3
3
|
|
|
4
4
|
// src/components-page/auth-page.tsx
|
|
5
|
-
import
|
|
6
|
-
import SeparatorWithText from "../components/separator-with-text";
|
|
7
|
-
import
|
|
8
|
-
import MaybeFullPage from "../components/maybe-full-page";
|
|
9
|
-
import { useUser, useStackApp
|
|
10
|
-
import PredefinedMessageCard from "../components/message-cards/predefined-message-card";
|
|
11
|
-
import {
|
|
12
|
-
import
|
|
5
|
+
import { CredentialSignInForm } from "../components/credential-sign-in-form";
|
|
6
|
+
import { SeparatorWithText } from "../components/elements/separator-with-text";
|
|
7
|
+
import { OAuthButtonGroup } from "../components/oauth-button-group";
|
|
8
|
+
import { MaybeFullPage } from "../components/elements/maybe-full-page";
|
|
9
|
+
import { useUser, useStackApp } from "..";
|
|
10
|
+
import { PredefinedMessageCard } from "../components/message-cards/predefined-message-card";
|
|
11
|
+
import { MagicLinkSignInForm } from "../components/magic-link-sign-in-form";
|
|
12
|
+
import { CredentialSignUpForm } from "../components/credential-sign-up-form";
|
|
13
|
+
import { StyledLink, Tabs, TabsContent, TabsList, TabsTrigger, Typography } from "@stackframe/stack-ui";
|
|
13
14
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
14
15
|
function AuthPage({
|
|
15
16
|
fullPage = false,
|
|
@@ -24,30 +25,30 @@ function AuthPage({
|
|
|
24
25
|
return /* @__PURE__ */ jsx(PredefinedMessageCard, { type: "signedIn", fullPage });
|
|
25
26
|
}
|
|
26
27
|
const enableSeparator = (project.credentialEnabled || project.magicLinkEnabled) && project.oauthProviders.filter((p) => p.enabled).length > 0;
|
|
27
|
-
return /* @__PURE__ */
|
|
28
|
-
/* @__PURE__ */ jsxs("div", {
|
|
29
|
-
/* @__PURE__ */ jsx(
|
|
30
|
-
type === "sign-in" ? /* @__PURE__ */ jsxs(
|
|
28
|
+
return /* @__PURE__ */ jsx(MaybeFullPage, { fullPage, children: /* @__PURE__ */ jsxs("div", { className: "stack-scope flex flex-col items-stretch", children: [
|
|
29
|
+
/* @__PURE__ */ jsxs("div", { className: "text-center mb-6", children: [
|
|
30
|
+
/* @__PURE__ */ jsx(Typography, { type: "h2", children: type === "sign-in" ? "Sign in to your account" : "Create a new account" }),
|
|
31
|
+
type === "sign-in" ? /* @__PURE__ */ jsxs(Typography, { children: [
|
|
31
32
|
"Don't have an account? ",
|
|
32
|
-
/* @__PURE__ */ jsx(
|
|
33
|
-
] }) : /* @__PURE__ */ jsxs(
|
|
33
|
+
/* @__PURE__ */ jsx(StyledLink, { href: stackApp.urls.signUp, children: "Sign up" })
|
|
34
|
+
] }) : /* @__PURE__ */ jsxs(Typography, { children: [
|
|
34
35
|
"Already have an account? ",
|
|
35
|
-
/* @__PURE__ */ jsx(
|
|
36
|
+
/* @__PURE__ */ jsx(StyledLink, { href: stackApp.urls.signIn, children: "Sign in" })
|
|
36
37
|
] })
|
|
37
38
|
] }),
|
|
38
|
-
/* @__PURE__ */ jsx(
|
|
39
|
+
/* @__PURE__ */ jsx(OAuthButtonGroup, { type, mockProject }),
|
|
39
40
|
enableSeparator && /* @__PURE__ */ jsx(SeparatorWithText, { text: "Or continue with" }),
|
|
40
41
|
project.credentialEnabled && project.magicLinkEnabled ? /* @__PURE__ */ jsxs(Tabs, { defaultValue: "magic-link", children: [
|
|
41
|
-
/* @__PURE__ */ jsxs(TabsList, { children: [
|
|
42
|
-
/* @__PURE__ */ jsx(TabsTrigger, { value: "magic-link", children: "Magic Link" }),
|
|
43
|
-
/* @__PURE__ */ jsx(TabsTrigger, { value: "password", children: "Password" })
|
|
42
|
+
/* @__PURE__ */ jsxs(TabsList, { className: "w-full mb-2", children: [
|
|
43
|
+
/* @__PURE__ */ jsx(TabsTrigger, { value: "magic-link", className: "flex-1", children: "Magic Link" }),
|
|
44
|
+
/* @__PURE__ */ jsx(TabsTrigger, { value: "password", className: "flex-1", children: "Password" })
|
|
44
45
|
] }),
|
|
45
|
-
/* @__PURE__ */ jsx(TabsContent, { value: "magic-link", children: /* @__PURE__ */ jsx(
|
|
46
|
-
/* @__PURE__ */ jsx(TabsContent, { value: "password", children: type === "sign-up" ? /* @__PURE__ */ jsx(
|
|
47
|
-
] }) : project.credentialEnabled ? type === "sign-up" ? /* @__PURE__ */ jsx(
|
|
48
|
-
] });
|
|
46
|
+
/* @__PURE__ */ jsx(TabsContent, { value: "magic-link", children: /* @__PURE__ */ jsx(MagicLinkSignInForm, {}) }),
|
|
47
|
+
/* @__PURE__ */ jsx(TabsContent, { value: "password", children: type === "sign-up" ? /* @__PURE__ */ jsx(CredentialSignUpForm, {}) : /* @__PURE__ */ jsx(CredentialSignInForm, {}) })
|
|
48
|
+
] }) : project.credentialEnabled ? type === "sign-up" ? /* @__PURE__ */ jsx(CredentialSignUpForm, {}) : /* @__PURE__ */ jsx(CredentialSignInForm, {}) : project.magicLinkEnabled ? /* @__PURE__ */ jsx(MagicLinkSignInForm, {}) : null
|
|
49
|
+
] }) });
|
|
49
50
|
}
|
|
50
51
|
export {
|
|
51
|
-
AuthPage
|
|
52
|
+
AuthPage
|
|
52
53
|
};
|
|
53
54
|
//# sourceMappingURL=auth-page.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components-page/auth-page.tsx"],"sourcesContent":["'use client';\n\nimport
|
|
1
|
+
{"version":3,"sources":["../../../src/components-page/auth-page.tsx"],"sourcesContent":["'use client';\n\nimport { CredentialSignInForm } from '../components/credential-sign-in-form';\nimport { SeparatorWithText } from '../components/elements/separator-with-text';\nimport { OAuthButtonGroup } from '../components/oauth-button-group';\nimport { MaybeFullPage } from '../components/elements/maybe-full-page';\nimport { useUser, useStackApp } from '..';\nimport { PredefinedMessageCard } from '../components/message-cards/predefined-message-card';\nimport { MagicLinkSignInForm } from '../components/magic-link-sign-in-form';\nimport { ClientProjectJson } from \"@stackframe/stack-shared\";\nimport { CredentialSignUpForm } from '../components/credential-sign-up-form';\nimport { StyledLink, Tabs, TabsContent, TabsList, TabsTrigger, Typography } from '@stackframe/stack-ui';\n\nexport function AuthPage({ \n fullPage=false,\n type,\n mockProject,\n}: { \n fullPage?: boolean, \n type: 'sign-in' | 'sign-up',\n mockProject?: ClientProjectJson,\n}) {\n const stackApp = useStackApp();\n const user = useUser();\n const projectFromHook = stackApp.useProject();\n const project = mockProject || projectFromHook;\n\n if (user && !mockProject) {\n return <PredefinedMessageCard type='signedIn' fullPage={fullPage} />;\n }\n\n const enableSeparator = (project.credentialEnabled || project.magicLinkEnabled) && project.oauthProviders.filter(p => p.enabled).length > 0;\n\n return (\n <MaybeFullPage fullPage={fullPage}>\n <div className='stack-scope flex flex-col items-stretch'>\n <div className=\"text-center mb-6\">\n <Typography type='h2'>\n {type === 'sign-in' ? 'Sign in to your account' : 'Create a new account'}\n </Typography>\n {type === 'sign-in' ? (\n <Typography>\n {\"Don't have an account? \"}\n <StyledLink href={stackApp.urls.signUp}>\n Sign up\n </StyledLink>\n </Typography>\n ) : (\n <Typography>\n {\"Already have an account? \"}\n <StyledLink href={stackApp.urls.signIn}>\n Sign in\n </StyledLink>\n </Typography>\n )}\n </div>\n <OAuthButtonGroup type={type} mockProject={mockProject} />\n {enableSeparator && <SeparatorWithText text={'Or continue with'} />}\n {project.credentialEnabled && project.magicLinkEnabled ? (\n <Tabs defaultValue='magic-link'>\n <TabsList className='w-full mb-2'>\n <TabsTrigger value='magic-link' className='flex-1'>Magic Link</TabsTrigger>\n <TabsTrigger value='password' className='flex-1'>Password</TabsTrigger>\n </TabsList>\n <TabsContent value='magic-link'>\n <MagicLinkSignInForm/>\n </TabsContent>\n <TabsContent value='password'>\n {type === 'sign-up' ? <CredentialSignUpForm/> : <CredentialSignInForm/>}\n </TabsContent>\n </Tabs>\n ) : project.credentialEnabled ? (\n type === 'sign-up' ? <CredentialSignUpForm/> : <CredentialSignInForm/>\n ) : project.magicLinkEnabled ? (\n <MagicLinkSignInForm/>\n ) : null}\n </div>\n </MaybeFullPage>\n );\n}\n"],"mappings":";;;AAEA,SAAS,4BAA4B;AACrC,SAAS,yBAAyB;AAClC,SAAS,wBAAwB;AACjC,SAAS,qBAAqB;AAC9B,SAAS,SAAS,mBAAmB;AACrC,SAAS,6BAA6B;AACtC,SAAS,2BAA2B;AAEpC,SAAS,4BAA4B;AACrC,SAAS,YAAY,MAAM,aAAa,UAAU,aAAa,kBAAkB;AAiBtE,cAaC,YAbD;AAfJ,SAAS,SAAS;AAAA,EACvB,WAAS;AAAA,EACT;AAAA,EACA;AACF,GAIG;AACD,QAAM,WAAW,YAAY;AAC7B,QAAM,OAAO,QAAQ;AACrB,QAAM,kBAAkB,SAAS,WAAW;AAC5C,QAAM,UAAU,eAAe;AAE/B,MAAI,QAAQ,CAAC,aAAa;AACxB,WAAO,oBAAC,yBAAsB,MAAK,YAAW,UAAoB;AAAA,EACpE;AAEA,QAAM,mBAAmB,QAAQ,qBAAqB,QAAQ,qBAAqB,QAAQ,eAAe,OAAO,OAAK,EAAE,OAAO,EAAE,SAAS;AAE1I,SACE,oBAAC,iBAAc,UACb,+BAAC,SAAI,WAAU,2CACb;AAAA,yBAAC,SAAI,WAAU,oBACb;AAAA,0BAAC,cAAW,MAAK,MACd,mBAAS,YAAY,4BAA4B,wBACpD;AAAA,MACC,SAAS,YACR,qBAAC,cACE;AAAA;AAAA,QACD,oBAAC,cAAW,MAAM,SAAS,KAAK,QAAQ,qBAExC;AAAA,SACF,IAEA,qBAAC,cACE;AAAA;AAAA,QACD,oBAAC,cAAW,MAAM,SAAS,KAAK,QAAQ,qBAExC;AAAA,SACF;AAAA,OAEJ;AAAA,IACA,oBAAC,oBAAiB,MAAY,aAA0B;AAAA,IACvD,mBAAmB,oBAAC,qBAAkB,MAAM,oBAAoB;AAAA,IAChE,QAAQ,qBAAqB,QAAQ,mBACpC,qBAAC,QAAK,cAAa,cACjB;AAAA,2BAAC,YAAS,WAAU,eAClB;AAAA,4BAAC,eAAY,OAAM,cAAa,WAAU,UAAS,wBAAU;AAAA,QAC7D,oBAAC,eAAY,OAAM,YAAW,WAAU,UAAS,sBAAQ;AAAA,SAC3D;AAAA,MACA,oBAAC,eAAY,OAAM,cACjB,8BAAC,uBAAmB,GACtB;AAAA,MACA,oBAAC,eAAY,OAAM,YAChB,mBAAS,YAAY,oBAAC,wBAAoB,IAAK,oBAAC,wBAAoB,GACvE;AAAA,OACF,IACE,QAAQ,oBACV,SAAS,YAAY,oBAAC,wBAAoB,IAAK,oBAAC,wBAAoB,IAClE,QAAQ,mBACV,oBAAC,uBAAmB,IAClB;AAAA,KACN,GACF;AAEJ;","names":[]}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
// src/components-page/email-verification.tsx
|
|
5
5
|
import { use } from "react";
|
|
6
6
|
import { useStackApp } from "..";
|
|
7
|
-
import MessageCard from "../components/message-cards/message-card";
|
|
8
|
-
import PredefinedMessageCard from "../components/message-cards/predefined-message-card";
|
|
7
|
+
import { MessageCard } from "../components/message-cards/message-card";
|
|
8
|
+
import { PredefinedMessageCard } from "../components/message-cards/predefined-message-card";
|
|
9
9
|
import { KnownErrors } from "@stackframe/stack-shared";
|
|
10
10
|
import { jsx } from "react/jsx-runtime";
|
|
11
11
|
function EmailVerification({
|
|
@@ -21,17 +21,17 @@ function EmailVerification({
|
|
|
21
21
|
return invalidJsx;
|
|
22
22
|
}
|
|
23
23
|
const error = use(stackApp.verifyEmail(code));
|
|
24
|
-
if (error instanceof KnownErrors.
|
|
24
|
+
if (error instanceof KnownErrors.VerificationCodeNotFound) {
|
|
25
25
|
return invalidJsx;
|
|
26
|
-
} else if (error instanceof KnownErrors.
|
|
26
|
+
} else if (error instanceof KnownErrors.VerificationCodeExpired) {
|
|
27
27
|
return expiredJsx;
|
|
28
|
-
} else if (error instanceof KnownErrors.
|
|
28
|
+
} else if (error instanceof KnownErrors.VerificationCodeAlreadyUsed) {
|
|
29
29
|
} else if (error) {
|
|
30
30
|
throw error;
|
|
31
31
|
}
|
|
32
32
|
return /* @__PURE__ */ jsx(PredefinedMessageCard, { type: "emailVerified", fullPage });
|
|
33
33
|
}
|
|
34
34
|
export {
|
|
35
|
-
EmailVerification
|
|
35
|
+
EmailVerification
|
|
36
36
|
};
|
|
37
37
|
//# sourceMappingURL=email-verification.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components-page/email-verification.tsx"],"sourcesContent":["'use client';\n\nimport { use } from \"react\";\nimport { useStackApp } from \"..\";\nimport MessageCard from \"../components/message-cards/message-card\";\nimport PredefinedMessageCard from \"../components/message-cards/predefined-message-card\";\nimport { KnownErrors } from \"@stackframe/stack-shared\";\n\nexport
|
|
1
|
+
{"version":3,"sources":["../../../src/components-page/email-verification.tsx"],"sourcesContent":["'use client';\n\nimport { use } from \"react\";\nimport { useStackApp } from \"..\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\nimport { KnownErrors } from \"@stackframe/stack-shared\";\n\nexport function EmailVerification({ \n searchParams: {\n code = \"\",\n } = {},\n fullPage = false,\n}: { \n searchParams?: Record<string, string>,\n fullPage?: boolean,\n}) {\n const stackApp = useStackApp();\n\n const invalidJsx = (\n <MessageCard title=\"Invalid Verification Link\" fullPage={fullPage}>\n <p>Please check if you have the correct link. If you continue to have issues, please contact support.</p>\n </MessageCard>\n );\n\n const expiredJsx = (\n <MessageCard title=\"Expired Verification Link\" fullPage={fullPage}>\n <p>Your email verification link has expired. Please request a new verification link from your account settings.</p>\n </MessageCard>\n );\n\n if (!code) {\n return invalidJsx;\n }\n\n const error = use(stackApp.verifyEmail(code));\n\n if (error instanceof KnownErrors.VerificationCodeNotFound) {\n return invalidJsx;\n } else if (error instanceof KnownErrors.VerificationCodeExpired) {\n return expiredJsx;\n } else if (error instanceof KnownErrors.VerificationCodeAlreadyUsed) {\n // everything fine, continue\n } else if (error) {\n throw error;\n }\n\n return <PredefinedMessageCard type='emailVerified' fullPage={fullPage} />;\n}\n"],"mappings":";;;AAEA,SAAS,WAAW;AACpB,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAC5B,SAAS,6BAA6B;AACtC,SAAS,mBAAmB;AAetB;AAbC,SAAS,kBAAkB;AAAA,EAChC,cAAc;AAAA,IACZ,OAAO;AAAA,EACT,IAAI,CAAC;AAAA,EACL,WAAW;AACb,GAGG;AACD,QAAM,WAAW,YAAY;AAE7B,QAAM,aACJ,oBAAC,eAAY,OAAM,6BAA4B,UAC7C,8BAAC,OAAE,gHAAkG,GACvG;AAGF,QAAM,aACJ,oBAAC,eAAY,OAAM,6BAA4B,UAC7C,8BAAC,OAAE,0HAA4G,GACjH;AAGF,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,IAAI,SAAS,YAAY,IAAI,CAAC;AAE5C,MAAI,iBAAiB,YAAY,0BAA0B;AACzD,WAAO;AAAA,EACT,WAAW,iBAAiB,YAAY,yBAAyB;AAC/D,WAAO;AAAA,EACT,WAAW,iBAAiB,YAAY,6BAA6B;AAAA,EAErE,WAAW,OAAO;AAChB,UAAM;AAAA,EACR;AAEA,SAAO,oBAAC,yBAAsB,MAAK,iBAAgB,UAAoB;AACzE;","names":[]}
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
"use client";
|
|
3
3
|
|
|
4
4
|
// src/components-page/error-page.tsx
|
|
5
|
-
import {
|
|
6
|
-
import PredefinedMessageCard from "../components/message-cards/predefined-message-card";
|
|
7
|
-
import { Text } from "../components-core";
|
|
5
|
+
import { useStackApp } from "..";
|
|
6
|
+
import { PredefinedMessageCard } from "../components/message-cards/predefined-message-card";
|
|
8
7
|
import { KnownError, KnownErrors } from "@stackframe/stack-shared";
|
|
9
|
-
import KnownErrorMessageCard from "../components/message-cards/known-error-message-card";
|
|
8
|
+
import { KnownErrorMessageCard } from "../components/message-cards/known-error-message-card";
|
|
9
|
+
import { Typography } from "@stackframe/stack-ui";
|
|
10
|
+
import { MessageCard } from "../components/message-cards/message-card";
|
|
10
11
|
import { jsx } from "react/jsx-runtime";
|
|
11
12
|
function ErrorPage({ fullPage = false, searchParams }) {
|
|
12
13
|
const stackApp = useStackApp();
|
|
@@ -31,7 +32,7 @@ function ErrorPage({ fullPage = false, searchParams }) {
|
|
|
31
32
|
fullPage,
|
|
32
33
|
primaryButtonText: "Go to Home",
|
|
33
34
|
primaryAction: () => stackApp.redirectToHome(),
|
|
34
|
-
children: /* @__PURE__ */ jsx(
|
|
35
|
+
children: /* @__PURE__ */ jsx(Typography, { children: "This account is already connected to another user. Please connect a different account." })
|
|
35
36
|
}
|
|
36
37
|
);
|
|
37
38
|
}
|
|
@@ -43,13 +44,13 @@ function ErrorPage({ fullPage = false, searchParams }) {
|
|
|
43
44
|
fullPage,
|
|
44
45
|
primaryButtonText: "Go to Home",
|
|
45
46
|
primaryAction: () => stackApp.redirectToHome(),
|
|
46
|
-
children: /* @__PURE__ */ jsx(
|
|
47
|
+
children: /* @__PURE__ */ jsx(Typography, { children: "The user is already connected to another OAuth account. Did you maybe selected the wrong account on the OAuth provider page?" })
|
|
47
48
|
}
|
|
48
49
|
);
|
|
49
50
|
}
|
|
50
51
|
return /* @__PURE__ */ jsx(KnownErrorMessageCard, { error, fullPage });
|
|
51
52
|
}
|
|
52
53
|
export {
|
|
53
|
-
ErrorPage
|
|
54
|
+
ErrorPage
|
|
54
55
|
};
|
|
55
56
|
//# sourceMappingURL=error-page.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components-page/error-page.tsx"],"sourcesContent":["'use client';\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/components-page/error-page.tsx"],"sourcesContent":["'use client';\n\nimport { useStackApp } from \"..\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\nimport { KnownError, KnownErrors } from \"@stackframe/stack-shared\";\nimport { KnownErrorMessageCard } from \"../components/message-cards/known-error-message-card\";\nimport { Typography } from \"@stackframe/stack-ui\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\n\n\nexport function ErrorPage({ fullPage=false, searchParams }: { fullPage?: boolean, searchParams: Record<string, string> }) {\n const stackApp = useStackApp();\n const errorCode = searchParams.errorCode;\n const message = searchParams.message;\n const details = searchParams.details;\n\n const unknownErrorCard = <PredefinedMessageCard type='unknownError' fullPage={fullPage} />;\n\n if (!errorCode || !message || !details) {\n return unknownErrorCard;\n }\n\n let error;\n try {\n error = KnownError.fromJson({ code: errorCode, message, details });\n } catch (e) {\n return unknownErrorCard;\n }\n\n if (error instanceof KnownErrors.OAuthConnectionAlreadyConnectedToAnotherUser) {\n // TODO: add \"Connect a different account\" button\n return (\n <MessageCard\n title=\"Failed to connect account\" \n fullPage={fullPage}\n primaryButtonText=\"Go to Home\"\n primaryAction={() => stackApp.redirectToHome()}\n >\n <Typography>\n This account is already connected to another user. Please connect a different account.\n </Typography>\n </MessageCard>\n );\n }\n\n if (error instanceof KnownErrors.UserAlreadyConnectedToAnotherOAuthConnection) {\n // TODO: add \"Connect again\" button\n return (\n <MessageCard \n title=\"Failed to connect account\" \n fullPage={fullPage}\n primaryButtonText=\"Go to Home\"\n primaryAction={() => stackApp.redirectToHome()}\n >\n <Typography>\n The user is already connected to another OAuth account. Did you maybe selected the wrong account on the OAuth provider page?\n </Typography>\n </MessageCard>\n );\n }\n\n return <KnownErrorMessageCard error={error} fullPage={fullPage} />;\n}\n"],"mappings":";;;AAEA,SAAS,mBAAmB;AAC5B,SAAS,6BAA6B;AACtC,SAAS,YAAY,mBAAmB;AACxC,SAAS,6BAA6B;AACtC,SAAS,kBAAkB;AAC3B,SAAS,mBAAmB;AASD;AANpB,SAAS,UAAU,EAAE,WAAS,OAAO,aAAa,GAAiE;AACxH,QAAM,WAAW,YAAY;AAC7B,QAAM,YAAY,aAAa;AAC/B,QAAM,UAAU,aAAa;AAC7B,QAAM,UAAU,aAAa;AAE7B,QAAM,mBAAmB,oBAAC,yBAAsB,MAAK,gBAAe,UAAoB;AAExF,MAAI,CAAC,aAAa,CAAC,WAAW,CAAC,SAAS;AACtC,WAAO;AAAA,EACT;AAEA,MAAI;AACJ,MAAI;AACF,YAAQ,WAAW,SAAS,EAAE,MAAM,WAAW,SAAS,QAAQ,CAAC;AAAA,EACnE,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AAEA,MAAI,iBAAiB,YAAY,8CAA8C;AAE7E,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN;AAAA,QACA,mBAAkB;AAAA,QAClB,eAAe,MAAM,SAAS,eAAe;AAAA,QAE7C,8BAAC,cAAW,oGAEZ;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,MAAI,iBAAiB,YAAY,8CAA8C;AAE7E,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN;AAAA,QACA,mBAAkB;AAAA,QAClB,eAAe,MAAM,SAAS,eAAe;AAAA,QAE7C,8BAAC,cAAW,0IAEZ;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SAAO,oBAAC,yBAAsB,OAAc,UAAoB;AAClE;","names":[]}
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"use client";
|
|
3
3
|
|
|
4
4
|
// src/components-page/forgot-password.tsx
|
|
5
|
-
import
|
|
6
|
-
import MaybeFullPage from "../components/maybe-full-page";
|
|
5
|
+
import { ForgotPasswordForm } from "../components/forgot-password-form";
|
|
6
|
+
import { MaybeFullPage } from "../components/elements/maybe-full-page";
|
|
7
7
|
import { useUser, useStackApp } from "..";
|
|
8
|
-
import PredefinedMessageCard from "../components/message-cards/predefined-message-card";
|
|
8
|
+
import { PredefinedMessageCard } from "../components/message-cards/predefined-message-card";
|
|
9
9
|
import { useState } from "react";
|
|
10
|
-
import {
|
|
10
|
+
import { StyledLink, Typography } from "@stackframe/stack-ui";
|
|
11
11
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
12
12
|
function ForgotPassword({ fullPage = false }) {
|
|
13
13
|
const stackApp = useStackApp();
|
|
@@ -20,17 +20,17 @@ function ForgotPassword({ fullPage = false }) {
|
|
|
20
20
|
return /* @__PURE__ */ jsx(PredefinedMessageCard, { type: "emailSent", fullPage });
|
|
21
21
|
}
|
|
22
22
|
return /* @__PURE__ */ jsxs(MaybeFullPage, { fullPage, children: [
|
|
23
|
-
/* @__PURE__ */ jsxs("div", {
|
|
24
|
-
/* @__PURE__ */ jsx(
|
|
25
|
-
/* @__PURE__ */ jsxs(
|
|
23
|
+
/* @__PURE__ */ jsxs("div", { className: "text-center mb-6 stack-scope", children: [
|
|
24
|
+
/* @__PURE__ */ jsx(Typography, { type: "h2", children: "Reset Your Password" }),
|
|
25
|
+
/* @__PURE__ */ jsxs(Typography, { children: [
|
|
26
26
|
"Don't need to reset? ",
|
|
27
|
-
/* @__PURE__ */ jsx(
|
|
27
|
+
/* @__PURE__ */ jsx(StyledLink, { href: stackApp.urls["signUp"], children: "Sign in" })
|
|
28
28
|
] })
|
|
29
29
|
] }),
|
|
30
|
-
/* @__PURE__ */ jsx(
|
|
30
|
+
/* @__PURE__ */ jsx(ForgotPasswordForm, { onSent: () => setSent(true) })
|
|
31
31
|
] });
|
|
32
32
|
}
|
|
33
33
|
export {
|
|
34
|
-
ForgotPassword
|
|
34
|
+
ForgotPassword
|
|
35
35
|
};
|
|
36
36
|
//# sourceMappingURL=forgot-password.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components-page/forgot-password.tsx"],"sourcesContent":["'use client';\n\nimport
|
|
1
|
+
{"version":3,"sources":["../../../src/components-page/forgot-password.tsx"],"sourcesContent":["'use client';\n\nimport { ForgotPasswordForm } from \"../components/forgot-password-form\";\nimport { MaybeFullPage } from \"../components/elements/maybe-full-page\";\nimport { useUser, useStackApp } from \"..\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\nimport { useState } from \"react\";\nimport { StyledLink, Typography } from \"@stackframe/stack-ui\";\n\n\nexport function ForgotPassword({ fullPage=false }: { fullPage?: boolean }) {\n const stackApp = useStackApp();\n const user = useUser();\n const [sent, setSent] = useState(false);\n\n if (user) {\n return <PredefinedMessageCard type='signedIn' fullPage={fullPage} />;\n }\n\n if (sent) {\n return <PredefinedMessageCard type='emailSent' fullPage={fullPage} />;\n }\n\n return (\n <MaybeFullPage fullPage={fullPage}>\n <div className=\"text-center mb-6 stack-scope\">\n <Typography type='h2'>Reset Your Password</Typography>\n <Typography>\n {\"Don't need to reset? \"}\n <StyledLink href={stackApp.urls['signUp']}>\n Sign in\n </StyledLink>\n </Typography>\n </div>\n <ForgotPasswordForm onSent={() => setSent(true)} />\n </MaybeFullPage>\n );\n};\n"],"mappings":";;;AAEA,SAAS,0BAA0B;AACnC,SAAS,qBAAqB;AAC9B,SAAS,SAAS,mBAAmB;AACrC,SAAS,6BAA6B;AACtC,SAAS,gBAAgB;AACzB,SAAS,YAAY,kBAAkB;AAS5B,cAWH,YAXG;AANJ,SAAS,eAAe,EAAE,WAAS,MAAM,GAA2B;AACzE,QAAM,WAAW,YAAY;AAC7B,QAAM,OAAO,QAAQ;AACrB,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AAEtC,MAAI,MAAM;AACR,WAAO,oBAAC,yBAAsB,MAAK,YAAW,UAAoB;AAAA,EACpE;AAEA,MAAI,MAAM;AACR,WAAO,oBAAC,yBAAsB,MAAK,aAAY,UAAoB;AAAA,EACrE;AAEA,SACE,qBAAC,iBAAc,UACb;AAAA,yBAAC,SAAI,WAAU,gCACb;AAAA,0BAAC,cAAW,MAAK,MAAK,iCAAmB;AAAA,MACzC,qBAAC,cACE;AAAA;AAAA,QACD,oBAAC,cAAW,MAAM,SAAS,KAAK,QAAQ,GAAG,qBAE3C;AAAA,SACF;AAAA,OACF;AAAA,IACA,oBAAC,sBAAmB,QAAQ,MAAM,QAAQ,IAAI,GAAG;AAAA,KACnD;AAEJ;","names":[]}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
// src/components-page/magic-link-callback.tsx
|
|
5
5
|
import { use } from "react";
|
|
6
6
|
import { useStackApp, useUser } from "..";
|
|
7
|
-
import MessageCard from "../components/message-cards/message-card";
|
|
8
|
-
import PredefinedMessageCard from "../components/message-cards/predefined-message-card";
|
|
7
|
+
import { MessageCard } from "../components/message-cards/message-card";
|
|
8
|
+
import { PredefinedMessageCard } from "../components/message-cards/predefined-message-card";
|
|
9
9
|
import { KnownErrors } from "@stackframe/stack-shared";
|
|
10
10
|
import { neverResolve } from "@stackframe/stack-shared/dist/utils/promises";
|
|
11
11
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -27,11 +27,11 @@ function MagicLinkCallback({
|
|
|
27
27
|
return invalidJsx;
|
|
28
28
|
}
|
|
29
29
|
const error = use(stackApp.signInWithMagicLink(code));
|
|
30
|
-
if (error instanceof KnownErrors.
|
|
30
|
+
if (error instanceof KnownErrors.VerificationCodeNotFound) {
|
|
31
31
|
return invalidJsx;
|
|
32
|
-
} else if (error instanceof KnownErrors.
|
|
32
|
+
} else if (error instanceof KnownErrors.VerificationCodeExpired) {
|
|
33
33
|
return expiredJsx;
|
|
34
|
-
} else if (error instanceof KnownErrors.
|
|
34
|
+
} else if (error instanceof KnownErrors.VerificationCodeAlreadyUsed) {
|
|
35
35
|
return alreadyUsedJsx;
|
|
36
36
|
} else if (error) {
|
|
37
37
|
throw error;
|
|
@@ -39,6 +39,6 @@ function MagicLinkCallback({
|
|
|
39
39
|
use(neverResolve());
|
|
40
40
|
}
|
|
41
41
|
export {
|
|
42
|
-
MagicLinkCallback
|
|
42
|
+
MagicLinkCallback
|
|
43
43
|
};
|
|
44
44
|
//# sourceMappingURL=magic-link-callback.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components-page/magic-link-callback.tsx"],"sourcesContent":["'use client';\n\nimport { use } from \"react\";\nimport { useStackApp, useUser } from \"..\";\nimport MessageCard from \"../components/message-cards/message-card\";\nimport PredefinedMessageCard from \"../components/message-cards/predefined-message-card\";\nimport { KnownErrors } from \"@stackframe/stack-shared\";\nimport { neverResolve } from \"@stackframe/stack-shared/dist/utils/promises\";\n\nexport
|
|
1
|
+
{"version":3,"sources":["../../../src/components-page/magic-link-callback.tsx"],"sourcesContent":["'use client';\n\nimport { use } from \"react\";\nimport { useStackApp, useUser } from \"..\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\nimport { KnownErrors } from \"@stackframe/stack-shared\";\nimport { neverResolve } from \"@stackframe/stack-shared/dist/utils/promises\";\n\nexport function MagicLinkCallback({ \n searchParams: {\n code = \"\",\n } = {},\n fullPage = false,\n}: { \n searchParams?: Record<string, string>,\n fullPage?: boolean,\n}) {\n const stackApp = useStackApp();\n const user = useUser();\n\n if (user) {\n return <PredefinedMessageCard type='signedIn' fullPage={fullPage} />;\n }\n\n const invalidJsx = (\n <MessageCard title=\"Invalid Magic Link\" fullPage={fullPage}>\n <p>Please check if you have the correct link. If you continue to have issues, please contact support.</p>\n </MessageCard>\n );\n\n const expiredJsx = (\n <MessageCard title=\"Expired Magic Link\" fullPage={fullPage}>\n <p>Your magic link has expired. Please request a new magic link if you need to sign-in.</p>\n </MessageCard>\n );\n\n const alreadyUsedJsx = (\n <MessageCard title=\"Magic Link Already Used\" fullPage={fullPage}>\n <p>The magic link has already been used. The link can only be used once. Please request a new magic link if you need to sign-in again.</p>\n </MessageCard>\n );\n\n if (!code) {\n return invalidJsx;\n }\n\n const error = use(stackApp.signInWithMagicLink(code));\n\n if (error instanceof KnownErrors.VerificationCodeNotFound) {\n return invalidJsx;\n } else if (error instanceof KnownErrors.VerificationCodeExpired) {\n return expiredJsx;\n } else if (error instanceof KnownErrors.VerificationCodeAlreadyUsed) {\n return alreadyUsedJsx;\n } else if (error) {\n throw error;\n }\n\n use(neverResolve());\n}\n"],"mappings":";;;AAEA,SAAS,WAAW;AACpB,SAAS,aAAa,eAAe;AACrC,SAAS,mBAAmB;AAC5B,SAAS,6BAA6B;AACtC,SAAS,mBAAmB;AAC5B,SAAS,oBAAoB;AAelB;AAbJ,SAAS,kBAAkB;AAAA,EAChC,cAAc;AAAA,IACZ,OAAO;AAAA,EACT,IAAI,CAAC;AAAA,EACL,WAAW;AACb,GAGG;AACD,QAAM,WAAW,YAAY;AAC7B,QAAM,OAAO,QAAQ;AAErB,MAAI,MAAM;AACR,WAAO,oBAAC,yBAAsB,MAAK,YAAW,UAAoB;AAAA,EACpE;AAEA,QAAM,aACJ,oBAAC,eAAY,OAAM,sBAAqB,UACtC,8BAAC,OAAE,gHAAkG,GACvG;AAGF,QAAM,aACJ,oBAAC,eAAY,OAAM,sBAAqB,UACtC,8BAAC,OAAE,kGAAoF,GACzF;AAGF,QAAM,iBACJ,oBAAC,eAAY,OAAM,2BAA0B,UAC3C,8BAAC,OAAE,iJAAmI,GACxI;AAGF,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,IAAI,SAAS,oBAAoB,IAAI,CAAC;AAEpD,MAAI,iBAAiB,YAAY,0BAA0B;AACzD,WAAO;AAAA,EACT,WAAW,iBAAiB,YAAY,yBAAyB;AAC/D,WAAO;AAAA,EACT,WAAW,iBAAiB,YAAY,6BAA6B;AACnE,WAAO;AAAA,EACT,WAAW,OAAO;AAChB,UAAM;AAAA,EACR;AAEA,MAAI,aAAa,CAAC;AACpB;","names":[]}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
import { useRef, useEffect, useState } from "react";
|
|
6
6
|
import { useStackApp } from "..";
|
|
7
7
|
import { runAsynchronously } from "@stackframe/stack-shared/dist/utils/promises";
|
|
8
|
-
import MessageCard from "../components/message-cards/message-card";
|
|
9
|
-
import {
|
|
8
|
+
import { MessageCard } from "../components/message-cards/message-card";
|
|
9
|
+
import { StyledLink } from "@stackframe/stack-ui";
|
|
10
10
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
11
11
|
function OAuthCallback(props) {
|
|
12
12
|
const app = useStackApp();
|
|
@@ -22,7 +22,7 @@ function OAuthCallback(props) {
|
|
|
22
22
|
} catch (e) {
|
|
23
23
|
setError(e);
|
|
24
24
|
}
|
|
25
|
-
if (!hasRedirected && process.env.NODE_ENV === "production") {
|
|
25
|
+
if (!hasRedirected && (!error || process.env.NODE_ENV === "production")) {
|
|
26
26
|
await app.redirectToSignIn();
|
|
27
27
|
}
|
|
28
28
|
}), []);
|
|
@@ -32,7 +32,7 @@ function OAuthCallback(props) {
|
|
|
32
32
|
return /* @__PURE__ */ jsxs(MessageCard, { title: "Redirecting...", fullPage: props.fullPage, children: [
|
|
33
33
|
showRedirectLink ? /* @__PURE__ */ jsxs("p", { children: [
|
|
34
34
|
"If you are not redirected automatically, ",
|
|
35
|
-
/* @__PURE__ */ jsx(
|
|
35
|
+
/* @__PURE__ */ jsx(StyledLink, { href: app.urls.home, children: "click here" }),
|
|
36
36
|
"."
|
|
37
37
|
] }) : null,
|
|
38
38
|
error ? /* @__PURE__ */ jsxs("div", { children: [
|
|
@@ -43,6 +43,6 @@ function OAuthCallback(props) {
|
|
|
43
43
|
] });
|
|
44
44
|
}
|
|
45
45
|
export {
|
|
46
|
-
OAuthCallback
|
|
46
|
+
OAuthCallback
|
|
47
47
|
};
|
|
48
48
|
//# sourceMappingURL=oauth-callback.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components-page/oauth-callback.tsx"],"sourcesContent":["'use client';\n\nimport { useRef, useEffect, useState } from \"react\";\nimport { useStackApp } from \"..\";\nimport { runAsynchronously } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport MessageCard from \"../components/message-cards/message-card\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/components-page/oauth-callback.tsx"],"sourcesContent":["'use client';\n\nimport { useRef, useEffect, useState } from \"react\";\nimport { useStackApp } from \"..\";\nimport { runAsynchronously } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { StyledLink } from \"@stackframe/stack-ui\";\n\nexport function OAuthCallback(props: { fullPage?: boolean }) {\n const app = useStackApp();\n const called = useRef(false);\n const [error, setError] = useState<unknown>(null);\n const [showRedirectLink, setShowRedirectLink] = useState(false);\n\n useEffect(() => runAsynchronously(async () => {\n if (called.current) return;\n called.current = true;\n let hasRedirected = false;\n try {\n hasRedirected = await app.callOAuthCallback();\n } catch (e: any) {\n setError(e);\n }\n if (!hasRedirected && (!error || process.env.NODE_ENV === 'production')) {\n await app.redirectToSignIn();\n }\n }), []);\n\n useEffect(() => {\n setTimeout(() => setShowRedirectLink(true), 3000);\n }, []);\n\n return <MessageCard title='Redirecting...' fullPage={props.fullPage}>\n {showRedirectLink ? <p>If you are not redirected automatically, <StyledLink href={app.urls.home}>click here</StyledLink>.</p> : null}\n {error ? <div>\n <p>Something went wrong while processing the OAuth callback:</p>\n <pre>{JSON.stringify(error, null, 2)}</pre>\n <p>This is most likely an error in Stack. Please report it.</p>\n </div> : null}\n </MessageCard>;\n}\n"],"mappings":";;;AAEA,SAAS,QAAQ,WAAW,gBAAgB;AAC5C,SAAS,mBAAmB;AAC5B,SAAS,yBAAyB;AAClC,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AA2BH,SAA4C,KAA5C;AAzBjB,SAAS,cAAc,OAA+B;AAC3D,QAAM,MAAM,YAAY;AACxB,QAAM,SAAS,OAAO,KAAK;AAC3B,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAkB,IAAI;AAChD,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAS,KAAK;AAE9D,YAAU,MAAM,kBAAkB,YAAY;AAC5C,QAAI,OAAO,QAAS;AACpB,WAAO,UAAU;AACjB,QAAI,gBAAgB;AACpB,QAAI;AACF,sBAAgB,MAAM,IAAI,kBAAkB;AAAA,IAC9C,SAAS,GAAQ;AACf,eAAS,CAAC;AAAA,IACZ;AACA,QAAI,CAAC,kBAAkB,CAAC,SAAS,QAAQ,IAAI,aAAa,eAAe;AACvE,YAAM,IAAI,iBAAiB;AAAA,IAC7B;AAAA,EACF,CAAC,GAAG,CAAC,CAAC;AAEN,YAAU,MAAM;AACd,eAAW,MAAM,oBAAoB,IAAI,GAAG,GAAI;AAAA,EAClD,GAAG,CAAC,CAAC;AAEL,SAAO,qBAAC,eAAY,OAAM,kBAAiB,UAAU,MAAM,UACxD;AAAA,uBAAmB,qBAAC,OAAE;AAAA;AAAA,MAAyC,oBAAC,cAAW,MAAM,IAAI,KAAK,MAAM,wBAAU;AAAA,MAAa;AAAA,OAAC,IAAO;AAAA,IAC/H,QAAQ,qBAAC,SACR;AAAA,0BAAC,OAAE,uEAAyD;AAAA,MAC5D,oBAAC,SAAK,eAAK,UAAU,OAAO,MAAM,CAAC,GAAE;AAAA,MACrC,oBAAC,OAAE,sEAAwD;AAAA,OAC7D,IAAS;AAAA,KACX;AACF;","names":[]}
|