@stackframe/stack 2.4.27 → 2.5.0
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 +22 -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 +10 -16
- 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 +11 -17
- 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 +12 -8
- 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 +3 -3
- 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 +3 -3
- 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 +8 -8
- 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 +29 -21
- 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 -1
- package/dist/lib/stack-app.d.ts +4 -1
- package/dist/lib/stack-app.js +29 -21
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/credential-sign-up-form.tsx"],"sourcesContent":["'use client';\n\nimport { useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as yup from \"yup\";\nimport { FormWarningText } from \"./elements/form-warning\";\nimport { useStackApp } from \"..\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { getPasswordError } from \"@stackframe/stack-shared/dist/helpers/password\";\nimport { Button, Input, Label, PasswordInput } from \"@stackframe/stack-ui\";\nimport { useState } from \"react\";\n\nconst schema = yup.object().shape({\n email: yup.string().email('Please enter a valid email').required('Please enter your email'),\n password: yup.string().required('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 passwordRepeat: yup.string().nullable().oneOf([yup.ref('password'), null], 'Passwords do not match').required('Please repeat your password')\n});\n\nexport function CredentialSignUpForm() {\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 error = await app.signUpWithCredential({ email, password });\n setError('email', { type: 'manual', message: error?.message });\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\">Email</Label>\n <Input\n id=\"email\"\n type=\"email\"\n {...register('email')}\n />\n <FormWarningText text={errors.email?.message?.toString()} />\n\n <Label htmlFor=\"password\" className=\"mt-4 mb-1\">Password</Label>\n <PasswordInput\n id=\"password\"\n {...register('password')}\n onChange={(e) => {\n clearErrors('password');\n clearErrors('passwordRepeat');\n }}\n />\n <FormWarningText text={errors.password?.message?.toString()} />\n \n <Label htmlFor=\"repeat-password\" className=\"mt-4 mb-1\">Repeat Password</Label>\n <PasswordInput\n id=\"repeat-password\"\n {...register('passwordRepeat')}\n onChange={(e) => {\n clearErrors('password');\n clearErrors('passwordRepeat');\n }}\n />\n <FormWarningText text={errors.passwordRepeat?.message?.toString()} />\n \n <Button type=\"submit\" className=\"mt-6\">\n Sign Up\n </Button>\n </form>\n );\n}\n"],"mappings":";;;AAEA,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAC5B,YAAY,SAAS;AACrB,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAC5B,SAAS,kCAAkC;AAC3C,SAAS,wBAAwB;AACjC,SAAS,QAAQ,OAAO,OAAO,qBAAqB;AACpD,SAAS,gBAAgB;AAqCrB,SAKE,KALF;AAnCJ,IAAM,SAAa,WAAO,EAAE,MAAM;AAAA,EAChC,OAAW,WAAO,EAAE,MAAM,4BAA4B,EAAE,SAAS,yBAAyB;AAAA,EAC1F,UAAc,WAAO,EAAE,SAAS,4BAA4B,EAAE,KAAK;AAAA,IACjE,MAAM;AAAA,IACN,MAAM,CAAC,OAAO,QAAQ;AACpB,YAAM,QAAQ,iBAAiB,KAAK;AACpC,UAAI,OAAO;AACT,eAAO,IAAI,YAAY,EAAE,SAAS,MAAM,QAAQ,CAAC;AAAA,MACnD,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,CAAC;AAAA,EACD,gBAAoB,WAAO,EAAE,SAAS,EAAE,MAAM,CAAK,QAAI,UAAU,GAAG,IAAI,GAAG,wBAAwB,EAAE,SAAS,6BAA6B;AAC7I,CAAC;AAEM,SAAS,uBAAuB;AACrC,QAAM,EAAE,UAAU,cAAc,UAAU,WAAW,EAAE,OAAO,GAAG,YAAY,IAAI,QAAQ;AAAA,IACvF,UAAU,YAAY,MAAM;AAAA,EAC9B,CAAC;AACD,QAAM,MAAM,YAAY;AACxB,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAE5C,QAAM,WAAW,OAAO,SAAuC;AAC7D,eAAW,IAAI;AACf,QAAI;AACF,YAAM,EAAE,OAAO,SAAS,IAAI;AAC5B,YAAM,QAAQ,MAAM,IAAI,qBAAqB,EAAE,OAAO,SAAS,CAAC;AAClE,eAAS,SAAS,EAAE,MAAM,UAAU,SAAS,OAAO,QAAQ,CAAC;AAAA,IAC7D,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,UAAU,OAAK,2BAA2B,aAAa,QAAQ,EAAE,CAAC,CAAC;AAAA,MACnE,YAAU;AAAA,MAEV;AAAA,4BAAC,SAAM,SAAQ,SAAQ,WAAU,QAAO,mBAAK;AAAA,QAC7C;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,MAAK;AAAA,YACJ,GAAG,SAAS,OAAO;AAAA;AAAA,QACtB;AAAA,QACA,oBAAC,mBAAgB,MAAM,OAAO,OAAO,SAAS,SAAS,GAAG;AAAA,QAE1D,oBAAC,SAAM,SAAQ,YAAW,WAAU,aAAY,sBAAQ;AAAA,QACxD;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACF,GAAG,SAAS,UAAU;AAAA,YACvB,UAAU,CAAC,MAAM;AACf,0BAAY,UAAU;AACtB,0BAAY,gBAAgB;AAAA,YAC9B;AAAA;AAAA,QACF;AAAA,QACA,oBAAC,mBAAgB,MAAM,OAAO,UAAU,SAAS,SAAS,GAAG;AAAA,QAE7D,oBAAC,SAAM,SAAQ,mBAAkB,WAAU,aAAY,6BAAe;AAAA,QACtE;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACF,GAAG,SAAS,gBAAgB;AAAA,YAC7B,UAAU,CAAC,MAAM;AACf,0BAAY,UAAU;AACtB,0BAAY,gBAAgB;AAAA,YAC9B;AAAA;AAAA,QACF;AAAA,QACA,oBAAC,mBAAgB,MAAM,OAAO,gBAAgB,SAAS,SAAS,GAAG;AAAA,QAEnE,oBAAC,UAAO,MAAK,UAAS,WAAU,QAAO,qBAEvC;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use client";
|
|
3
|
+
|
|
4
|
+
// src/components/elements/form-warning.tsx
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
function FormWarningText({ text }) {
|
|
7
|
+
if (!text) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
return /* @__PURE__ */ jsx("div", { className: "text-red-500 text-sm mt-1", children: text });
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
FormWarningText
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=form-warning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/elements/form-warning.tsx"],"sourcesContent":["'use client';\n\nexport function FormWarningText({ text }: { text?: string }) {\n if (!text) {\n return null;\n }\n return (\n <div className=\"text-red-500 text-sm mt-1\">\n {text}\n </div>\n );\n}\n"],"mappings":";;;AAOI;AALG,SAAS,gBAAgB,EAAE,KAAK,GAAsB;AAC3D,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AACA,SACE,oBAAC,SAAI,WAAU,6BACZ,gBACH;AAEJ;","names":[]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
"use client";
|
|
3
3
|
|
|
4
|
-
// src/components/maybe-full-page.tsx
|
|
5
|
-
import { Container } from "
|
|
6
|
-
import {
|
|
4
|
+
// src/components/elements/maybe-full-page.tsx
|
|
5
|
+
import { Container } from "@stackframe/stack-ui";
|
|
6
|
+
import { useId } from "react";
|
|
7
|
+
import { SsrScript } from "./ssr-layout-effect";
|
|
7
8
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
8
9
|
function MaybeFullPage({
|
|
9
10
|
children,
|
|
@@ -20,9 +21,6 @@ function MaybeFullPage({
|
|
|
20
21
|
const offset = el.getBoundingClientRect().top + document.documentElement.scrollTop;
|
|
21
22
|
el.style.minHeight = \`calc(100vh - \${offset}px)\`;
|
|
22
23
|
})(${JSON.stringify([id])})`;
|
|
23
|
-
useEffect(() => {
|
|
24
|
-
(0, eval)(scriptString);
|
|
25
|
-
}, []);
|
|
26
24
|
if (fullPage) {
|
|
27
25
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
28
26
|
/* @__PURE__ */ jsx(
|
|
@@ -37,18 +35,17 @@ function MaybeFullPage({
|
|
|
37
35
|
alignItems: "center",
|
|
38
36
|
justifyContent: "center"
|
|
39
37
|
},
|
|
38
|
+
className: "stack-scope",
|
|
40
39
|
children: /* @__PURE__ */ jsx(Container, { size: 380, style: { padding: "1rem 1rem" }, children })
|
|
41
40
|
}
|
|
42
41
|
),
|
|
43
|
-
/* @__PURE__ */ jsx(
|
|
44
|
-
__html: scriptString
|
|
45
|
-
} })
|
|
42
|
+
/* @__PURE__ */ jsx(SsrScript, { script: scriptString })
|
|
46
43
|
] });
|
|
47
44
|
} else {
|
|
48
45
|
return /* @__PURE__ */ jsx(Fragment, { children });
|
|
49
46
|
}
|
|
50
47
|
}
|
|
51
48
|
export {
|
|
52
|
-
MaybeFullPage
|
|
49
|
+
MaybeFullPage
|
|
53
50
|
};
|
|
54
51
|
//# sourceMappingURL=maybe-full-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/elements/maybe-full-page.tsx"],"sourcesContent":["\"use client\";\n\nimport { Container } from \"@stackframe/stack-ui\";\nimport React, { useId } from \"react\";\nimport { SsrScript } from \"./ssr-layout-effect\";\n\nexport function MaybeFullPage({ \n children, \n fullPage=true\n}: { \n children: React.ReactNode, \n fullPage?: boolean, \n}) {\n const uniqueId = useId();\n const id = `stack-card-frame-${uniqueId}`;\n\n const scriptString = `(([id]) => {\n const el = document.getElementById(id);\n if (!el) {\n // component is not full page\n return;\n }\n const offset = el.getBoundingClientRect().top + document.documentElement.scrollTop;\n el.style.minHeight = \\`calc(100vh - \\${offset}px)\\`;\n })(${JSON.stringify([id])})`;\n\n if (fullPage) {\n return (\n <>\n <div \n id={id}\n suppressHydrationWarning\n style={{ \n minHeight: '100vh',\n alignSelf: 'stretch',\n display: 'flex', \n alignItems: 'center', \n justifyContent: 'center',\n }}\n className=\"stack-scope\"\n >\n <Container size={380} style={{ padding: '1rem 1rem' }}>\n {children}\n </Container>\n </div>\n <SsrScript script={scriptString} />\n </>\n );\n } else {\n return <>\n {children}\n </>;\n }\n \n}\n"],"mappings":";;;AAEA,SAAS,iBAAiB;AAC1B,SAAgB,aAAa;AAC7B,SAAS,iBAAiB;AAwBpB,mBAaI,KAbJ;AAtBC,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA,WAAS;AACX,GAGG;AACD,QAAM,WAAW,MAAM;AACvB,QAAM,KAAK,oBAAoB,QAAQ;AAEvC,QAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAQhB,KAAK,UAAU,CAAC,EAAE,CAAC,CAAC;AAEzB,MAAI,UAAU;AACZ,WACE,iCACE;AAAA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,0BAAwB;AAAA,UACxB,OAAO;AAAA,YACL,WAAW;AAAA,YACX,WAAW;AAAA,YACX,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,gBAAgB;AAAA,UAClB;AAAA,UACA,WAAU;AAAA,UAEV,8BAAC,aAAU,MAAM,KAAK,OAAO,EAAE,SAAS,YAAY,GACjD,UACH;AAAA;AAAA,MACF;AAAA,MACA,oBAAC,aAAU,QAAQ,cAAc;AAAA,OACnC;AAAA,EAEJ,OAAO;AACL,WAAO,gCACJ,UACH;AAAA,EACF;AAEF;","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use client";
|
|
3
|
+
|
|
4
|
+
// src/components/elements/separator-with-text.tsx
|
|
5
|
+
import { Separator } from "@stackframe/stack-ui";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
function SeparatorWithText({ text }) {
|
|
8
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center my-6 stack-scope", children: [
|
|
9
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsx(Separator, {}) }),
|
|
10
|
+
/* @__PURE__ */ jsx("div", { className: "mx-2 text-sm text-zinc-500", children: text }),
|
|
11
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsx(Separator, {}) })
|
|
12
|
+
] });
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
SeparatorWithText
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=separator-with-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/elements/separator-with-text.tsx"],"sourcesContent":["'use client';\n\nimport { Separator } from \"@stackframe/stack-ui\";\n\nexport function SeparatorWithText({ text }: { text: string }) {\n return (\n <div className=\"flex items-center justify-center my-6 stack-scope\">\n <div className=\"flex-1\">\n <Separator />\n </div>\n <div className=\"mx-2 text-sm text-zinc-500\">{text}</div>\n <div className=\"flex-1\">\n <Separator />\n </div>\n </div>\n );\n}\n"],"mappings":";;;AAEA,SAAS,iBAAiB;AAItB,SAEI,KAFJ;AAFG,SAAS,kBAAkB,EAAE,KAAK,GAAqB;AAC5D,SACE,qBAAC,SAAI,WAAU,qDACb;AAAA,wBAAC,SAAI,WAAU,UACb,8BAAC,aAAU,GACb;AAAA,IACA,oBAAC,SAAI,WAAU,8BAA8B,gBAAK;AAAA,IAClD,oBAAC,SAAI,WAAU,UACb,8BAAC,aAAU,GACb;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use client";
|
|
3
|
+
|
|
4
|
+
// src/components/elements/ssr-layout-effect.tsx
|
|
5
|
+
import { useLayoutEffect } from "react";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
function SsrScript(props) {
|
|
8
|
+
useLayoutEffect(() => {
|
|
9
|
+
(0, eval)(props.script);
|
|
10
|
+
}, []);
|
|
11
|
+
return /* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: props.script } });
|
|
12
|
+
}
|
|
13
|
+
export {
|
|
14
|
+
SsrScript
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=ssr-layout-effect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/elements/ssr-layout-effect.tsx"],"sourcesContent":["\"use client\";\nimport { useLayoutEffect } from \"react\";\n\nexport function SsrScript(props: { script: string }) {\n useLayoutEffect(() => {\n // TODO fix workaround: React has a bug where it doesn't run the script on the first CSR render if SSR has been skipped due to suspense\n // As a workaround, we run the script in the <script> tag again after the first render\n // Note that we do an indirect eval as described here: https://esbuild.github.io/content-types/#direct-eval\n (0, eval)(props.script);\n }, []);\n\n return <script dangerouslySetInnerHTML={{ __html: props.script }} />;\n}\n"],"mappings":";;;AACA,SAAS,uBAAuB;AAUvB;AARF,SAAS,UAAU,OAA2B;AACnD,kBAAgB,MAAM;AAIpB,KAAC,GAAG,MAAM,MAAM,MAAM;AAAA,EACxB,GAAG,CAAC,CAAC;AAEL,SAAO,oBAAC,YAAO,yBAAyB,EAAE,QAAQ,MAAM,OAAO,GAAG;AACpE;","names":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// src/components/elements/user-avatar.tsx
|
|
2
|
+
import { UserRound } from "lucide-react";
|
|
3
|
+
import { Avatar, AvatarFallback, AvatarImage } from "@stackframe/stack-ui";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
function UserAvatar(props) {
|
|
6
|
+
const user = props.user;
|
|
7
|
+
return /* @__PURE__ */ jsxs(Avatar, { style: { height: props.size || "34px", width: props.size || "34px" }, children: [
|
|
8
|
+
/* @__PURE__ */ jsx(AvatarImage, { src: user?.profileImageUrl || "" }),
|
|
9
|
+
/* @__PURE__ */ jsx(AvatarFallback, { children: user ? /* @__PURE__ */ jsx("div", { className: "font-medium", children: (user.displayName || user.primaryEmail)?.slice(0, 2).toUpperCase() }) : /* @__PURE__ */ jsx(UserRound, { className: "h-5 w-5 text-zinc-500" }) })
|
|
10
|
+
] });
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
UserAvatar
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=user-avatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/elements/user-avatar.tsx"],"sourcesContent":["import { UserRound } from \"lucide-react\";\nimport { User } from \"../../lib/stack-app\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"@stackframe/stack-ui\";\n\nexport function UserAvatar(props: { size?: number, user: User | null }) {\n const user = props.user;\n return (\n <Avatar style={{ height: props.size || '34px', width: props.size || '34px' }}>\n <AvatarImage src={user?.profileImageUrl || ''} />\n <AvatarFallback>\n {user ? \n <div className='font-medium'>\n {(user.displayName || user.primaryEmail)?.slice(0, 2).toUpperCase()}\n </div> :\n <UserRound className=\"h-5 w-5 text-zinc-500\" />}\n </AvatarFallback>\n </Avatar>\n );\n}\n"],"mappings":";AAAA,SAAS,iBAAiB;AAE1B,SAAS,QAAQ,gBAAgB,mBAAmB;AAKhD,SACE,KADF;AAHG,SAAS,WAAW,OAA6C;AACtE,QAAM,OAAO,MAAM;AACnB,SACE,qBAAC,UAAO,OAAO,EAAE,QAAQ,MAAM,QAAQ,QAAQ,OAAO,MAAM,QAAQ,OAAO,GACzE;AAAA,wBAAC,eAAY,KAAK,MAAM,mBAAmB,IAAI;AAAA,IAC/C,oBAAC,kBACE,iBACC,oBAAC,SAAI,WAAU,eACX,gBAAK,eAAe,KAAK,eAAe,MAAM,GAAG,CAAC,EAAE,YAAY,GACpE,IACA,oBAAC,aAAU,WAAU,yBAAwB,GACjD;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -1,36 +1,43 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
"use client";
|
|
3
3
|
|
|
4
|
-
// src/components/forgot-password.tsx
|
|
4
|
+
// src/components/forgot-password-form.tsx
|
|
5
5
|
import { useForm } from "react-hook-form";
|
|
6
6
|
import { yupResolver } from "@hookform/resolvers/yup";
|
|
7
7
|
import * as yup from "yup";
|
|
8
|
-
import FormWarningText from "./form-warning";
|
|
8
|
+
import { FormWarningText } from "./elements/form-warning";
|
|
9
9
|
import { useStackApp } from "..";
|
|
10
|
-
import { Button, Input, Label } from "../components-core";
|
|
11
10
|
import { runAsynchronouslyWithAlert } from "@stackframe/stack-shared/dist/utils/promises";
|
|
11
|
+
import { Button, Input, Label } from "@stackframe/stack-ui";
|
|
12
|
+
import { useState } from "react";
|
|
12
13
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
13
14
|
var schema = yup.object().shape({
|
|
14
15
|
email: yup.string().email("Please enter a valid email").required("Please enter your email")
|
|
15
16
|
});
|
|
16
|
-
function
|
|
17
|
+
function ForgotPasswordForm({ onSent }) {
|
|
17
18
|
const { register, handleSubmit, formState: { errors }, clearErrors } = useForm({
|
|
18
19
|
resolver: yupResolver(schema)
|
|
19
20
|
});
|
|
20
21
|
const stackApp = useStackApp();
|
|
22
|
+
const [loading, setLoading] = useState(false);
|
|
21
23
|
const onSubmit = async (data) => {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
setLoading(true);
|
|
25
|
+
try {
|
|
26
|
+
const { email } = data;
|
|
27
|
+
await stackApp.sendForgotPasswordEmail(email);
|
|
28
|
+
onSent?.();
|
|
29
|
+
} finally {
|
|
30
|
+
setLoading(false);
|
|
31
|
+
}
|
|
25
32
|
};
|
|
26
33
|
return /* @__PURE__ */ jsxs(
|
|
27
34
|
"form",
|
|
28
35
|
{
|
|
29
|
-
|
|
36
|
+
className: "flex flex-col items-stretch stack-scope",
|
|
30
37
|
onSubmit: (e) => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e)),
|
|
31
38
|
noValidate: true,
|
|
32
39
|
children: [
|
|
33
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "email", children: "Your Email" }),
|
|
40
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "email", className: "mb-1", children: "Your Email" }),
|
|
34
41
|
/* @__PURE__ */ jsx(
|
|
35
42
|
Input,
|
|
36
43
|
{
|
|
@@ -41,19 +48,12 @@ function ForgotPassword({ onSent }) {
|
|
|
41
48
|
}
|
|
42
49
|
),
|
|
43
50
|
/* @__PURE__ */ jsx(FormWarningText, { text: errors.email?.message?.toString() }),
|
|
44
|
-
/* @__PURE__ */ jsx(
|
|
45
|
-
Button,
|
|
46
|
-
{
|
|
47
|
-
type: "submit",
|
|
48
|
-
style: { marginTop: "1.5rem" },
|
|
49
|
-
children: "Send Email"
|
|
50
|
-
}
|
|
51
|
-
)
|
|
51
|
+
/* @__PURE__ */ jsx(Button, { type: "submit", className: "mt-6", loading, children: "Send Email" })
|
|
52
52
|
]
|
|
53
53
|
}
|
|
54
54
|
);
|
|
55
55
|
}
|
|
56
56
|
export {
|
|
57
|
-
|
|
57
|
+
ForgotPasswordForm
|
|
58
58
|
};
|
|
59
|
-
//# sourceMappingURL=forgot-password.js.map
|
|
59
|
+
//# sourceMappingURL=forgot-password-form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/forgot-password-form.tsx"],"sourcesContent":["'use client';\n\nimport { useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as yup from \"yup\";\nimport { FormWarningText } from \"./elements/form-warning\";\nimport { useStackApp } from \"..\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Button, Input, Label } from \"@stackframe/stack-ui\";\nimport { useState } from \"react\";\n\nconst schema = yup.object().shape({\n email: yup.string().email('Please enter a valid email').required('Please enter your email')\n});\n\nexport function ForgotPasswordForm({ onSent }: { onSent?: () => void }) {\n const { register, handleSubmit, formState: { errors }, clearErrors } = useForm({\n resolver: yupResolver(schema)\n });\n const stackApp = 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 } = data;\n await stackApp.sendForgotPasswordEmail(email);\n onSent?.();\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\">Your Email</Label>\n <Input\n id=\"email\"\n type=\"email\"\n {...register('email')}\n onChange={() => clearErrors('email')}\n />\n <FormWarningText text={errors.email?.message?.toString()} />\n\n <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n Send Email\n </Button>\n </form>\n );\n}\n"],"mappings":";;;AAEA,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAC5B,YAAY,SAAS;AACrB,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAC5B,SAAS,kCAAkC;AAC3C,SAAS,QAAQ,OAAO,aAAa;AACrC,SAAS,gBAAgB;AAyBrB,SAKE,KALF;AAvBJ,IAAM,SAAa,WAAO,EAAE,MAAM;AAAA,EAChC,OAAW,WAAO,EAAE,MAAM,4BAA4B,EAAE,SAAS,yBAAyB;AAC5F,CAAC;AAEM,SAAS,mBAAmB,EAAE,OAAO,GAA4B;AACtE,QAAM,EAAE,UAAU,cAAc,WAAW,EAAE,OAAO,GAAG,YAAY,IAAI,QAAQ;AAAA,IAC7E,UAAU,YAAY,MAAM;AAAA,EAC9B,CAAC;AACD,QAAM,WAAW,YAAY;AAC7B,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAE5C,QAAM,WAAW,OAAO,SAAuC;AAC7D,eAAW,IAAI;AACf,QAAI;AACF,YAAM,EAAE,MAAM,IAAI;AAClB,YAAM,SAAS,wBAAwB,KAAK;AAC9C,eAAS;AAAA,IACT,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,UAAU,OAAK,2BAA2B,aAAa,QAAQ,EAAE,CAAC,CAAC;AAAA,MACnE,YAAU;AAAA,MAEV;AAAA,4BAAC,SAAM,SAAQ,SAAQ,WAAU,QAAO,wBAAU;AAAA,QAClD;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,MAAK;AAAA,YACJ,GAAG,SAAS,OAAO;AAAA,YACpB,UAAU,MAAM,YAAY,OAAO;AAAA;AAAA,QACrC;AAAA,QACA,oBAAC,mBAAgB,MAAM,OAAO,OAAO,SAAS,SAAS,GAAG;AAAA,QAE1D,oBAAC,UAAO,MAAK,UAAS,WAAU,QAAO,SAAkB,wBAEzD;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -1,42 +1,48 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
"use client";
|
|
3
3
|
|
|
4
|
-
// src/components/magic-link-sign-in.tsx
|
|
4
|
+
// src/components/magic-link-sign-in-form.tsx
|
|
5
5
|
import { useState } from "react";
|
|
6
6
|
import { useForm } from "react-hook-form";
|
|
7
7
|
import { yupResolver } from "@hookform/resolvers/yup";
|
|
8
8
|
import * as yup from "yup";
|
|
9
|
-
import FormWarningText from "./form-warning";
|
|
9
|
+
import { FormWarningText } from "./elements/form-warning";
|
|
10
10
|
import { useStackApp } from "..";
|
|
11
|
-
import { Button, Input, Label } from "../components-core";
|
|
12
11
|
import { runAsynchronouslyWithAlert } from "@stackframe/stack-shared/dist/utils/promises";
|
|
12
|
+
import { Button, Input, Label } from "@stackframe/stack-ui";
|
|
13
13
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
14
14
|
var schema = yup.object().shape({
|
|
15
15
|
email: yup.string().email("Please enter a valid email").required("Please enter your email")
|
|
16
16
|
});
|
|
17
|
-
function
|
|
17
|
+
function MagicLinkSignInForm() {
|
|
18
18
|
const { register, handleSubmit, setError, formState: { errors }, clearErrors } = useForm({
|
|
19
19
|
resolver: yupResolver(schema)
|
|
20
20
|
});
|
|
21
21
|
const [sent, setSent] = useState(false);
|
|
22
22
|
const app = useStackApp();
|
|
23
|
+
const [loading, setLoading] = useState(false);
|
|
23
24
|
const onSubmit = async (data) => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
setLoading(true);
|
|
26
|
+
try {
|
|
27
|
+
const { email } = data;
|
|
28
|
+
const error = await app.sendMagicLinkEmail(email);
|
|
29
|
+
if (error) {
|
|
30
|
+
setError("email", { type: "manual", message: error.message });
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
setSent(true);
|
|
34
|
+
} finally {
|
|
35
|
+
setLoading(false);
|
|
29
36
|
}
|
|
30
|
-
setSent(true);
|
|
31
37
|
};
|
|
32
38
|
return /* @__PURE__ */ jsxs(
|
|
33
39
|
"form",
|
|
34
40
|
{
|
|
35
|
-
|
|
41
|
+
className: "flex flex-col items-stretch stack-scope",
|
|
36
42
|
onSubmit: (e) => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e)),
|
|
37
43
|
noValidate: true,
|
|
38
44
|
children: [
|
|
39
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "email", children: "Email" }),
|
|
45
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "email", className: "mb-1", children: "Email" }),
|
|
40
46
|
/* @__PURE__ */ jsx(
|
|
41
47
|
Input,
|
|
42
48
|
{
|
|
@@ -47,12 +53,12 @@ function MagicLinkSignIn() {
|
|
|
47
53
|
}
|
|
48
54
|
),
|
|
49
55
|
/* @__PURE__ */ jsx(FormWarningText, { text: errors.email?.message?.toString() }),
|
|
50
|
-
/* @__PURE__ */ jsx(Button, { disabled: sent,
|
|
56
|
+
/* @__PURE__ */ jsx(Button, { disabled: sent, type: "submit", className: "mt-6", loading, children: sent ? "Email sent!" : "Send magic link" })
|
|
51
57
|
]
|
|
52
58
|
}
|
|
53
59
|
);
|
|
54
60
|
}
|
|
55
61
|
export {
|
|
56
|
-
|
|
62
|
+
MagicLinkSignInForm
|
|
57
63
|
};
|
|
58
|
-
//# sourceMappingURL=magic-link-sign-in.js.map
|
|
64
|
+
//# sourceMappingURL=magic-link-sign-in-form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/magic-link-sign-in-form.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as yup from \"yup\";\nimport { FormWarningText } from \"./elements/form-warning\";\nimport { useStackApp } from \"..\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Button, Input, Label } from \"@stackframe/stack-ui\";\n\nconst schema = yup.object().shape({\n email: yup.string().email('Please enter a valid email').required('Please enter your email')\n});\n\nexport function MagicLinkSignInForm() {\n const { register, handleSubmit, setError, formState: { errors }, clearErrors } = useForm({\n resolver: yupResolver(schema)\n });\n const [sent, setSent] = useState(false);\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 } = data;\n const error = await app.sendMagicLinkEmail(email);\n if (error) {\n setError('email', { type: 'manual', message: error.message });\n return;\n }\n setSent(true);\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\">Email</Label>\n <Input\n id=\"email\"\n type=\"email\"\n {...register('email')}\n disabled={sent}\n />\n <FormWarningText text={errors.email?.message?.toString()} />\n\n <Button disabled={sent} type=\"submit\" className=\"mt-6\" loading={loading}>\n {sent ? 'Email sent!' : 'Send magic link'}\n </Button>\n </form>\n );\n}\n"],"mappings":";;;AAEA,SAAS,gBAAgB;AACzB,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAC5B,YAAY,SAAS;AACrB,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAC5B,SAAS,kCAAkC;AAC3C,SAAS,QAAQ,OAAO,aAAa;AA8BjC,SAKE,KALF;AA5BJ,IAAM,SAAa,WAAO,EAAE,MAAM;AAAA,EAChC,OAAW,WAAO,EAAE,MAAM,4BAA4B,EAAE,SAAS,yBAAyB;AAC5F,CAAC;AAEM,SAAS,sBAAsB;AACpC,QAAM,EAAE,UAAU,cAAc,UAAU,WAAW,EAAE,OAAO,GAAG,YAAY,IAAI,QAAQ;AAAA,IACvF,UAAU,YAAY,MAAM;AAAA,EAC9B,CAAC;AACD,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,QAAM,MAAM,YAAY;AACxB,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAE5C,QAAM,WAAW,OAAO,SAAuC;AAC7D,eAAW,IAAI;AACf,QAAI;AACF,YAAM,EAAE,MAAM,IAAI;AAClB,YAAM,QAAQ,MAAM,IAAI,mBAAmB,KAAK;AAChD,UAAI,OAAO;AACT,iBAAS,SAAS,EAAE,MAAM,UAAU,SAAS,MAAM,QAAQ,CAAC;AAC5D;AAAA,MACF;AACF,cAAQ,IAAI;AAAA,IACZ,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,UAAU,OAAK,2BAA2B,aAAa,QAAQ,EAAE,CAAC,CAAC;AAAA,MACnE,YAAU;AAAA,MAEV;AAAA,4BAAC,SAAM,SAAQ,SAAQ,WAAU,QAAO,mBAAK;AAAA,QAC7C;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,MAAK;AAAA,YACJ,GAAG,SAAS,OAAO;AAAA,YACpB,UAAU;AAAA;AAAA,QACZ;AAAA,QACA,oBAAC,mBAAgB,MAAM,OAAO,OAAO,SAAS,SAAS,GAAG;AAAA,QAE1D,oBAAC,UAAO,UAAU,MAAM,MAAK,UAAS,WAAU,QAAO,SACpD,iBAAO,gBAAgB,mBAC1B;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
// src/components/message-cards/known-error-message-card.tsx
|
|
5
5
|
import { useStackApp } from "../..";
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
6
|
+
import { Typography } from "@stackframe/stack-ui";
|
|
7
|
+
import { MessageCard } from "./message-card";
|
|
8
8
|
import { jsxs } from "react/jsx-runtime";
|
|
9
9
|
function KnownErrorMessageCard({
|
|
10
10
|
error,
|
|
@@ -19,11 +19,11 @@ function KnownErrorMessageCard({
|
|
|
19
19
|
primaryButtonText: "Go to Home",
|
|
20
20
|
primaryAction: () => stackApp.redirectToHome(),
|
|
21
21
|
children: [
|
|
22
|
-
/* @__PURE__ */ jsxs(
|
|
22
|
+
/* @__PURE__ */ jsxs(Typography, { children: [
|
|
23
23
|
"Error Code: ",
|
|
24
24
|
error.errorCode
|
|
25
25
|
] }),
|
|
26
|
-
/* @__PURE__ */ jsxs(
|
|
26
|
+
/* @__PURE__ */ jsxs(Typography, { children: [
|
|
27
27
|
"Error Message: ",
|
|
28
28
|
error.message
|
|
29
29
|
] })
|
|
@@ -32,6 +32,6 @@ function KnownErrorMessageCard({
|
|
|
32
32
|
);
|
|
33
33
|
}
|
|
34
34
|
export {
|
|
35
|
-
KnownErrorMessageCard
|
|
35
|
+
KnownErrorMessageCard
|
|
36
36
|
};
|
|
37
37
|
//# sourceMappingURL=known-error-message-card.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/message-cards/known-error-message-card.tsx"],"sourcesContent":["\"use client\";\n\nimport { useStackApp } from \"../..\";\nimport
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/message-cards/known-error-message-card.tsx"],"sourcesContent":["\"use client\";\n\nimport { useStackApp } from \"../..\";\nimport { Typography } from \"@stackframe/stack-ui\";\nimport { MessageCard } from \"./message-card\";\nimport { KnownError } from \"@stackframe/stack-shared\";\n\nexport function KnownErrorMessageCard({ \n error,\n fullPage=false,\n}: { \n error: KnownError,\n fullPage?: boolean, \n}) {\n const stackApp = useStackApp();\n\n return (\n <MessageCard \n title={\"An error occurred\"}\n fullPage={fullPage} \n primaryButtonText={\"Go to Home\"}\n primaryAction={() => stackApp.redirectToHome()}\n >\n {<Typography>Error Code: {error.errorCode}</Typography>}\n {<Typography>Error Message: {error.message}</Typography>}\n </MessageCard>\n );\n}\n"],"mappings":";;;AAEA,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AAC3B,SAAS,mBAAmB;AAmBrB;AAhBA,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA,WAAS;AACX,GAGG;AACD,QAAM,WAAW,YAAY;AAE7B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,MACP;AAAA,MACA,mBAAmB;AAAA,MACnB,eAAe,MAAM,SAAS,eAAe;AAAA,MAE5C;AAAA,6BAAC,cAAW;AAAA;AAAA,UAAa,MAAM;AAAA,WAAU;AAAA,QACzC,qBAAC,cAAW;AAAA;AAAA,UAAgB,MAAM;AAAA,WAAQ;AAAA;AAAA;AAAA,EAC7C;AAEJ;","names":[]}
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"use client";
|
|
3
3
|
|
|
4
4
|
// src/components/message-cards/message-card.tsx
|
|
5
|
-
import MaybeFullPage from "../maybe-full-page";
|
|
6
|
-
import { Button,
|
|
5
|
+
import { MaybeFullPage } from "../elements/maybe-full-page";
|
|
6
|
+
import { Button, Typography } from "@stackframe/stack-ui";
|
|
7
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
8
|
function MessageCard({ fullPage = false, ...props }) {
|
|
9
9
|
return /* @__PURE__ */ jsx(MaybeFullPage, { fullPage, children: /* @__PURE__ */ jsxs("div", { style: { textAlign: "center" }, children: [
|
|
10
|
-
/* @__PURE__ */ jsx(
|
|
10
|
+
/* @__PURE__ */ jsx(Typography, { type: "h3", className: "mb-6", children: props.title }),
|
|
11
11
|
props.children,
|
|
12
12
|
(props.primaryButtonText || props.secondaryButtonText) && /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "row", alignItems: "center", justifyContent: "center", gap: "16px", marginTop: 20 }, children: [
|
|
13
13
|
props.secondaryButtonText && /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: props.secondaryAction, children: props.secondaryButtonText }),
|
|
@@ -16,6 +16,6 @@ function MessageCard({ fullPage = false, ...props }) {
|
|
|
16
16
|
] }) });
|
|
17
17
|
}
|
|
18
18
|
export {
|
|
19
|
-
MessageCard
|
|
19
|
+
MessageCard
|
|
20
20
|
};
|
|
21
21
|
//# sourceMappingURL=message-card.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/message-cards/message-card.tsx"],"sourcesContent":["'use client';\n\nimport React from \"react\";\nimport MaybeFullPage from \"../maybe-full-page\";\nimport { Button,
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/message-cards/message-card.tsx"],"sourcesContent":["'use client';\n\nimport React from \"react\";\nimport { MaybeFullPage } from \"../elements/maybe-full-page\";\nimport { Button, Typography } from \"@stackframe/stack-ui\";\n\nexport function MessageCard(\n { fullPage=false, ...props }: \n { \n children?: React.ReactNode, \n title: string, \n fullPage?: boolean,\n primaryButtonText?: string,\n primaryAction?: () => Promise<void> | void,\n secondaryButtonText?: string,\n secondaryAction?: () => Promise<void> | void,\n }\n) {\n return (\n <MaybeFullPage fullPage={fullPage}>\n <div style={{ textAlign: 'center' }}>\n <Typography type='h3' className=\"mb-6\">{props.title}</Typography>\n {props.children}\n {(props.primaryButtonText || props.secondaryButtonText) && (\n <div style={{ display: 'flex', flexDirection: 'row', alignItems: 'center', justifyContent: 'center', gap: '16px', marginTop: 20 }}>\n {props.secondaryButtonText && (\n <Button variant=\"secondary\" onClick={props.secondaryAction}>\n {props.secondaryButtonText}\n </Button>\n )}\n {props.primaryButtonText && (\n <Button onClick={props.primaryAction}>\n {props.primaryButtonText}\n </Button>\n )}\n </div>\n )}\n </div>\n </MaybeFullPage>\n );\n}\n"],"mappings":";;;AAGA,SAAS,qBAAqB;AAC9B,SAAS,QAAQ,kBAAkB;AAiB3B,cAGE,YAHF;AAfD,SAAS,YACd,EAAE,WAAS,OAAO,GAAG,MAAM,GAU3B;AACA,SACE,oBAAC,iBAAc,UACb,+BAAC,SAAI,OAAO,EAAE,WAAW,SAAS,GAChC;AAAA,wBAAC,cAAW,MAAK,MAAK,WAAU,QAAQ,gBAAM,OAAM;AAAA,IACnD,MAAM;AAAA,KACL,MAAM,qBAAqB,MAAM,wBACjC,qBAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,OAAO,YAAY,UAAU,gBAAgB,UAAU,KAAK,QAAQ,WAAW,GAAG,GAC7H;AAAA,YAAM,uBACL,oBAAC,UAAO,SAAQ,aAAY,SAAS,MAAM,iBACxC,gBAAM,qBACT;AAAA,MAED,MAAM,qBACL,oBAAC,UAAO,SAAS,MAAM,eACpB,gBAAM,mBACT;AAAA,OAEJ;AAAA,KAEJ,GACF;AAEJ;","names":[]}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"use client";
|
|
3
3
|
|
|
4
4
|
// src/components/message-cards/predefined-message-card.tsx
|
|
5
|
+
import { Typography } from "@stackframe/stack-ui";
|
|
5
6
|
import { useStackApp } from "../..";
|
|
6
|
-
import MessageCard from "./message-card";
|
|
7
|
-
import { Text } from "../../components-core";
|
|
7
|
+
import { MessageCard } from "./message-card";
|
|
8
8
|
import { jsx } from "react/jsx-runtime";
|
|
9
9
|
function PredefinedMessageCard({
|
|
10
10
|
type,
|
|
@@ -70,11 +70,11 @@ function PredefinedMessageCard({
|
|
|
70
70
|
primaryAction,
|
|
71
71
|
secondaryButtonText: secondaryButton || void 0,
|
|
72
72
|
secondaryAction: secondaryAction || void 0,
|
|
73
|
-
children: message && /* @__PURE__ */ jsx(
|
|
73
|
+
children: message && /* @__PURE__ */ jsx(Typography, { children: message })
|
|
74
74
|
}
|
|
75
75
|
);
|
|
76
76
|
}
|
|
77
77
|
export {
|
|
78
|
-
PredefinedMessageCard
|
|
78
|
+
PredefinedMessageCard
|
|
79
79
|
};
|
|
80
80
|
//# sourceMappingURL=predefined-message-card.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/message-cards/predefined-message-card.tsx"],"sourcesContent":["\"use client\";\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/message-cards/predefined-message-card.tsx"],"sourcesContent":["\"use client\";\n\nimport { Typography } from \"@stackframe/stack-ui\";\nimport { useStackApp } from \"../..\";\nimport { MessageCard } from \"./message-card\";\n\nexport function PredefinedMessageCard({ \n type,\n fullPage=false,\n}: { \n type: 'signedIn' | 'signedOut' | 'emailSent' | 'passwordReset' | 'emailVerified' | 'unknownError',\n fullPage?: boolean, \n}) {\n const stackApp = useStackApp();\n\n let title: string;\n let message: string | null = null;\n let primaryButton: string | null = null;\n let secondaryButton: string | null = null;\n let primaryAction: (() => Promise<void> | void) | null = null;\n let secondaryAction: (() => Promise<void> | void) | null = null;\n\n switch (type) {\n case 'signedIn': {\n title = \"You are already signed in\";\n primaryAction = () => stackApp.redirectToAfterSignOut();\n secondaryAction = () => stackApp.redirectToSignOut();\n primaryButton = \"Go to Home\";\n secondaryButton = \"Sign Out\";\n break;\n }\n case 'signedOut': {\n title = \"You are not currently signed in.\";\n primaryAction = () => stackApp.redirectToSignIn();\n primaryButton = \"Go to Home\";\n break;\n }\n case 'emailSent': {\n title = \"Email sent!\";\n message = 'Please check your inbox. Make sure to check your spam folder.';\n primaryAction = () => stackApp.redirectToHome();\n primaryButton = \"Go to Home\";\n break;\n }\n case 'passwordReset': {\n title = \"Password reset successfully!\";\n message = 'Your password has been reset. You can now sign in with your new password.';\n primaryAction = () => stackApp.redirectToSignIn();\n primaryButton = \"Go to Sign In\";\n break;\n }\n case 'emailVerified': {\n title = \"Email verified!\";\n message = 'Your have successfully verified your email.';\n primaryAction = () => stackApp.redirectToSignIn();\n primaryButton = \"Go to Home\";\n break;\n }\n case 'unknownError': {\n title = \"An unknown error occurred\";\n message = 'Please try again and if the problem persists, contact support.';\n primaryAction = () => stackApp.redirectToHome();\n primaryButton = \"Go to Home\";\n break;\n }\n }\n\n return (\n <MessageCard\n title={title} \n fullPage={fullPage} \n primaryButtonText={primaryButton} \n primaryAction={primaryAction} \n secondaryButtonText={secondaryButton || undefined} \n secondaryAction={secondaryAction || undefined}\n >\n {message && <Typography>{message}</Typography>}\n </MessageCard>\n );\n}\n"],"mappings":";;;AAEA,SAAS,kBAAkB;AAC3B,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAwEV;AAtEX,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA,WAAS;AACX,GAGG;AACD,QAAM,WAAW,YAAY;AAE7B,MAAI;AACJ,MAAI,UAAyB;AAC7B,MAAI,gBAA+B;AACnC,MAAI,kBAAiC;AACrC,MAAI,gBAAqD;AACzD,MAAI,kBAAuD;AAE3D,UAAQ,MAAM;AAAA,IACZ,KAAK,YAAY;AACf,cAAQ;AACR,sBAAgB,MAAM,SAAS,uBAAuB;AACtD,wBAAkB,MAAM,SAAS,kBAAkB;AACnD,sBAAgB;AAChB,wBAAkB;AAClB;AAAA,IACF;AAAA,IACA,KAAK,aAAa;AAChB,cAAQ;AACR,sBAAgB,MAAM,SAAS,iBAAiB;AAChD,sBAAgB;AAChB;AAAA,IACF;AAAA,IACA,KAAK,aAAa;AAChB,cAAQ;AACR,gBAAU;AACV,sBAAgB,MAAM,SAAS,eAAe;AAC9C,sBAAgB;AAChB;AAAA,IACF;AAAA,IACA,KAAK,iBAAiB;AACpB,cAAQ;AACR,gBAAU;AACV,sBAAgB,MAAM,SAAS,iBAAiB;AAChD,sBAAgB;AAChB;AAAA,IACF;AAAA,IACA,KAAK,iBAAiB;AACpB,cAAQ;AACR,gBAAU;AACV,sBAAgB,MAAM,SAAS,iBAAiB;AAChD,sBAAgB;AAChB;AAAA,IACF;AAAA,IACA,KAAK,gBAAgB;AACnB,cAAQ;AACR,gBAAU;AACV,sBAAgB,MAAM,SAAS,eAAe;AAC9C,sBAAgB;AAChB;AAAA,IACF;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,mBAAmB;AAAA,MACnB;AAAA,MACA,qBAAqB,mBAAmB;AAAA,MACxC,iBAAiB,mBAAmB;AAAA,MAEnC,qBAAW,oBAAC,cAAY,mBAAQ;AAAA;AAAA,EACnC;AAEJ;","names":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use client";
|
|
3
|
+
|
|
4
|
+
// src/components/oauth-button-group.tsx
|
|
5
|
+
import { useStackApp } from "../lib/hooks";
|
|
6
|
+
import { OAuthButton } from "./oauth-button";
|
|
7
|
+
import { jsx } from "react/jsx-runtime";
|
|
8
|
+
function OAuthButtonGroup({
|
|
9
|
+
type,
|
|
10
|
+
mockProject
|
|
11
|
+
}) {
|
|
12
|
+
const stackApp = useStackApp();
|
|
13
|
+
const project = mockProject || stackApp.useProject();
|
|
14
|
+
return /* @__PURE__ */ jsx("div", { className: "gap-4 flex flex-col items-stretch stack-scope", children: project.oauthProviders.filter((p) => p.enabled).map((p) => /* @__PURE__ */ jsx(OAuthButton, { provider: p.id, type }, p.id)) });
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
OAuthButtonGroup
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=oauth-button-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/oauth-button-group.tsx"],"sourcesContent":["'use client';\n\nimport { ClientProjectJson } from \"@stackframe/stack-shared\";\nimport { useStackApp } from \"../lib/hooks\";\nimport { OAuthButton } from \"./oauth-button\";\n\nexport function OAuthButtonGroup({\n type,\n mockProject,\n}: {\n type: 'sign-in' | 'sign-up',\n mockProject?: ClientProjectJson,\n}) {\n const stackApp = useStackApp();\n const project = mockProject || stackApp.useProject();\n\n return (\n <div className='gap-4 flex flex-col items-stretch stack-scope'>\n {project.oauthProviders.filter(p => p.enabled).map(p => (\n <OAuthButton key={p.id} provider={p.id} type={type}/>\n ))}\n </div>\n );\n}\n"],"mappings":";;;AAGA,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAepB;AAbD,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AACF,GAGG;AACD,QAAM,WAAW,YAAY;AAC7B,QAAM,UAAU,eAAe,SAAS,WAAW;AAEnD,SACE,oBAAC,SAAI,WAAU,iDACZ,kBAAQ,eAAe,OAAO,OAAK,EAAE,OAAO,EAAE,IAAI,OACjD,oBAAC,eAAuB,UAAU,EAAE,IAAI,QAAtB,EAAE,EAA+B,CACpD,GACH;AAEJ;","names":[]}
|
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
"use client";
|
|
3
3
|
|
|
4
4
|
// src/components/oauth-button.tsx
|
|
5
|
+
import { Button } from "@stackframe/stack-ui";
|
|
5
6
|
import { useStackApp } from "..";
|
|
6
|
-
import
|
|
7
|
+
import Color from "color";
|
|
8
|
+
import styled from "styled-components";
|
|
7
9
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
10
|
var iconSize = 22;
|
|
9
11
|
function GoogleIcon({ iconSize: iconSize2 }) {
|
|
@@ -33,6 +35,21 @@ function MicrosoftIcon({ iconSize: iconSize2 }) {
|
|
|
33
35
|
function SpotifyIcon({ iconSize: iconSize2 }) {
|
|
34
36
|
return /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: iconSize2, height: iconSize2, viewBox: "0 0 496 512", children: /* @__PURE__ */ jsx("path", { fill: "#ffffff", d: "M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm100.7 364.9c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4zm26.9-65.6c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm31-76.2c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3z" }) });
|
|
35
37
|
}
|
|
38
|
+
var changeColor = (c, value) => {
|
|
39
|
+
if (c.isLight()) {
|
|
40
|
+
value = -value;
|
|
41
|
+
}
|
|
42
|
+
return c.hsl(c.hue(), c.saturationl(), c.lightness() + value).toString();
|
|
43
|
+
};
|
|
44
|
+
var StyledButton = styled(Button)`
|
|
45
|
+
${(props) => props.$bgColor ? `background-color: ${props.$bgColor} !important;` : ""}
|
|
46
|
+
${(props) => props.$textColor ? `color: ${props.$textColor} !important;` : ""}
|
|
47
|
+
${(props) => props.$border ? `border: ${props.$border} !important;` : ""}
|
|
48
|
+
|
|
49
|
+
&:hover {
|
|
50
|
+
${(props) => props.$hoverBgColor ? `background-color: ${props.$hoverBgColor} !important;` : ""}
|
|
51
|
+
}
|
|
52
|
+
`;
|
|
36
53
|
function OAuthButton({
|
|
37
54
|
provider,
|
|
38
55
|
type
|
|
@@ -95,14 +112,16 @@ function OAuthButton({
|
|
|
95
112
|
}
|
|
96
113
|
}
|
|
97
114
|
return /* @__PURE__ */ jsx(
|
|
98
|
-
|
|
115
|
+
StyledButton,
|
|
99
116
|
{
|
|
100
|
-
color: style.backgroundColor,
|
|
101
|
-
style: { border: style.border, height: "2.5rem", color: style.textColor },
|
|
102
117
|
onClick: () => stackApp.signInWithOAuth(provider),
|
|
103
|
-
|
|
118
|
+
$bgColor: style.backgroundColor,
|
|
119
|
+
$hoverBgColor: changeColor(Color(style.backgroundColor), 10),
|
|
120
|
+
$textColor: style.textColor,
|
|
121
|
+
$border: style.border,
|
|
122
|
+
children: /* @__PURE__ */ jsxs("div", { className: "flex items-center w-full gap-4", children: [
|
|
104
123
|
style.icon,
|
|
105
|
-
/* @__PURE__ */ jsxs("span", {
|
|
124
|
+
/* @__PURE__ */ jsxs("span", { className: "flex-1", children: [
|
|
106
125
|
type === "sign-up" ? "Sign up with " : "Sign in with ",
|
|
107
126
|
style.name
|
|
108
127
|
] })
|
|
@@ -111,6 +130,6 @@ function OAuthButton({
|
|
|
111
130
|
);
|
|
112
131
|
}
|
|
113
132
|
export {
|
|
114
|
-
OAuthButton
|
|
133
|
+
OAuthButton
|
|
115
134
|
};
|
|
116
135
|
//# sourceMappingURL=oauth-button.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/oauth-button.tsx"],"sourcesContent":["'use client';\n\nimport { useStackApp } from '..';\nimport { Button } from \"../components-core\";\n\nconst iconSize = 22;\n\nfunction GoogleIcon({ iconSize } : { iconSize: number} ) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={iconSize} height={iconSize} viewBox=\"0 0 24 24\">\n <path fill=\"#4285F4\" d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"/>\n <path fill=\"#34A853\" d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"/>\n <path fill=\"#FBBC05\" d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"/>\n <path fill=\"#EA4335\" d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"/>\n <path fill=\"none\" d=\"M1 1h22v22H1z\" />\n </svg>\n );\n}\n\nfunction FacebookIcon({ iconSize } : { iconSize: number} ) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={iconSize} height={iconSize} viewBox=\"0 0 512 512\">\n <path fill='#FFFFFF' d=\"M512 256C512 114.6 397.4 0 256 0S0 114.6 0 256C0 376 82.7 476.8 194.2 504.5V334.2H141.4V256h52.8V222.3c0-87.1 39.4-127.5 125-127.5c16.2 0 44.2 3.2 55.7 6.4V172c-6-.6-16.5-1-29.6-1c-42 0-58.2 15.9-58.2 57.2V256h83.6l-14.4 78.2H287V510.1C413.8 494.8 512 386.9 512 256h0z\"/>\n </svg>\n );\n}\n\nfunction GitHubIcon({ iconSize } : { iconSize: number} ) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={iconSize} height={iconSize} viewBox=\"0 0 496 512\">\n <path fill='#FFFFFF' d=\"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3 .3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5 .3-6.2 2.3zm44.2-1.7c-2.9 .7-4.9 2.6-4.6 4.9 .3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3 .7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3 .3 2.9 2.3 3.9 1.6 1 3.6 .7 4.3-.7 .7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3 .7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3 .7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"/>\n </svg>\n );\n}\n\nfunction MicrosoftIcon({ iconSize } : { iconSize: number} ) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={iconSize} height={iconSize} viewBox=\"0 0 21 21\">\n <title>{\"MS-SymbolLockup\"}</title>\n <path fill=\"#f25022\" d=\"M1 1h9v9H1z\" />\n <path fill=\"#00a4ef\" d=\"M1 11h9v9H1z\" />\n <path fill=\"#7fba00\" d=\"M11 1h9v9h-9z\" />\n <path fill=\"#ffb900\" d=\"M11 11h9v9h-9z\" />\n </svg>\n );\n}\n\nfunction SpotifyIcon({ iconSize } : { iconSize: number} ) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={iconSize} height={iconSize} viewBox=\"0 0 496 512\">\n <path fill='#ffffff' d=\"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm100.7 364.9c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4zm26.9-65.6c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm31-76.2c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3z\"/>\n </svg>\n );\n}\nexport default function OAuthButton({\n provider,\n type,\n}: {\n provider: string,\n type: 'sign-in' | 'sign-up',\n}) {\n const stackApp = useStackApp();\n\n let style : {\n backgroundColor?: string,\n textColor?: string,\n name: string,\n icon: JSX.Element | null,\n border?: string,\n };\n switch (provider) {\n case 'google': {\n style = {\n backgroundColor: '#fff',\n textColor: '#000',\n name: 'Google',\n border: '1px solid #ddd',\n icon: <GoogleIcon iconSize={iconSize} />,\n };\n break;\n }\n case 'github': {\n style = {\n backgroundColor: '#111',\n textColor: '#fff',\n border: '1px solid #333',\n name: 'GitHub',\n icon: <GitHubIcon iconSize={iconSize} />,\n };\n break;\n }\n case 'facebook': {\n style = {\n backgroundColor: '#1877F2',\n textColor: '#fff',\n name: 'Facebook',\n icon: <FacebookIcon iconSize={iconSize} />,\n };\n break;\n }\n case 'microsoft': {\n style = {\n backgroundColor: '#2f2f2f',\n textColor: '#fff',\n name: 'Microsoft',\n icon: <MicrosoftIcon iconSize={iconSize} />,\n };\n break;\n }\n case 'spotify': {\n style = {\n backgroundColor: '#1DB954',\n textColor: '#fff',\n name: 'Spotify',\n icon: <SpotifyIcon iconSize={iconSize} />,\n };\n break;\n }\n default: {\n style = {\n name: provider,\n icon: null\n };\n }\n }\n\n return (\n <Button\n color={style.backgroundColor}\n style={{ border: style.border, height: '2.5rem', color: style.textColor }}\n onClick={() => stackApp.signInWithOAuth(provider)}\n >\n <div style={{ display: 'flex', alignItems: 'center', width: '100%', gap: '1rem' }}>\n {style.icon}\n <span style={{ flexGrow: 1 }}>{type === 'sign-up' ? 'Sign up with ' : 'Sign in with '}{style.name}</span>\n </div>\n </Button>\n );\n}\n"],"mappings":"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","names":["iconSize"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/oauth-button.tsx"],"sourcesContent":["'use client';\n\nimport { Button } from '@stackframe/stack-ui';\nimport { useStackApp } from '..';\nimport Color from 'color';\nimport styled from 'styled-components';\n\nconst iconSize = 22;\n\nfunction GoogleIcon({ iconSize } : { iconSize: number} ) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={iconSize} height={iconSize} viewBox=\"0 0 24 24\">\n <path fill=\"#4285F4\" d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"/>\n <path fill=\"#34A853\" d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"/>\n <path fill=\"#FBBC05\" d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"/>\n <path fill=\"#EA4335\" d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"/>\n <path fill=\"none\" d=\"M1 1h22v22H1z\" />\n </svg>\n );\n}\n\nfunction FacebookIcon({ iconSize } : { iconSize: number} ) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={iconSize} height={iconSize} viewBox=\"0 0 512 512\">\n <path fill='#FFFFFF' d=\"M512 256C512 114.6 397.4 0 256 0S0 114.6 0 256C0 376 82.7 476.8 194.2 504.5V334.2H141.4V256h52.8V222.3c0-87.1 39.4-127.5 125-127.5c16.2 0 44.2 3.2 55.7 6.4V172c-6-.6-16.5-1-29.6-1c-42 0-58.2 15.9-58.2 57.2V256h83.6l-14.4 78.2H287V510.1C413.8 494.8 512 386.9 512 256h0z\"/>\n </svg>\n );\n}\n\nfunction GitHubIcon({ iconSize } : { iconSize: number} ) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={iconSize} height={iconSize} viewBox=\"0 0 496 512\">\n <path fill='#FFFFFF' d=\"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3 .3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5 .3-6.2 2.3zm44.2-1.7c-2.9 .7-4.9 2.6-4.6 4.9 .3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3 .7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3 .3 2.9 2.3 3.9 1.6 1 3.6 .7 4.3-.7 .7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3 .7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3 .7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"/>\n </svg>\n );\n}\n\nfunction MicrosoftIcon({ iconSize } : { iconSize: number} ) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={iconSize} height={iconSize} viewBox=\"0 0 21 21\">\n <title>{\"MS-SymbolLockup\"}</title>\n <path fill=\"#f25022\" d=\"M1 1h9v9H1z\" />\n <path fill=\"#00a4ef\" d=\"M1 11h9v9H1z\" />\n <path fill=\"#7fba00\" d=\"M11 1h9v9h-9z\" />\n <path fill=\"#ffb900\" d=\"M11 11h9v9h-9z\" />\n </svg>\n );\n}\n\nfunction SpotifyIcon({ iconSize } : { iconSize: number} ) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={iconSize} height={iconSize} viewBox=\"0 0 496 512\">\n <path fill='#ffffff' d=\"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm100.7 364.9c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4zm26.9-65.6c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm31-76.2c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3z\"/>\n </svg>\n );\n}\n\nconst changeColor = (c: Color, value: number) => {\n if (c.isLight()) {\n value = -value;\n }\n return c.hsl(c.hue(), c.saturationl(), c.lightness() + value).toString();\n};\n\nconst StyledButton = styled(Button)<{ $bgColor?: string, $hoverBgColor?: string, $textColor?: string, $border?: string }>`\n ${props => props.$bgColor ? `background-color: ${props.$bgColor} !important;` : ''}\n ${props => props.$textColor ? `color: ${props.$textColor} !important;` : ''}\n ${props => props.$border ? `border: ${props.$border} !important;` : ''}\n\n &:hover {\n ${props => props.$hoverBgColor ? `background-color: ${props.$hoverBgColor} !important;` : ''}\n }\n`;\n\nexport function OAuthButton({\n provider,\n type,\n}: {\n provider: string,\n type: 'sign-in' | 'sign-up',\n}) {\n const stackApp = useStackApp();\n\n let style : {\n backgroundColor?: string,\n textColor?: string,\n name: string,\n icon: JSX.Element | null,\n border?: string,\n };\n switch (provider) {\n case 'google': {\n style = {\n backgroundColor: '#fff',\n textColor: '#000',\n name: 'Google',\n border: '1px solid #ddd',\n icon: <GoogleIcon iconSize={iconSize} />,\n };\n break;\n }\n case 'github': {\n style = {\n backgroundColor: '#111',\n textColor: '#fff',\n border: '1px solid #333',\n name: 'GitHub',\n icon: <GitHubIcon iconSize={iconSize} />,\n };\n break;\n }\n case 'facebook': {\n style = {\n backgroundColor: '#1877F2',\n textColor: '#fff',\n name: 'Facebook',\n icon: <FacebookIcon iconSize={iconSize} />,\n };\n break;\n }\n case 'microsoft': {\n style = {\n backgroundColor: '#2f2f2f',\n textColor: '#fff',\n name: 'Microsoft',\n icon: <MicrosoftIcon iconSize={iconSize} />,\n };\n break;\n }\n case 'spotify': {\n style = {\n backgroundColor: '#1DB954',\n textColor: '#fff',\n name: 'Spotify',\n icon: <SpotifyIcon iconSize={iconSize} />,\n };\n break;\n }\n default: {\n style = {\n name: provider,\n icon: null,\n };\n }\n }\n \n return (\n <StyledButton\n onClick={() => stackApp.signInWithOAuth(provider)}\n $bgColor={style.backgroundColor}\n $hoverBgColor={changeColor(Color(style.backgroundColor), 10)}\n $textColor={style.textColor}\n $border={style.border}\n >\n <div className='flex items-center w-full gap-4'>\n {style.icon}\n <span className='flex-1'>\n {type === 'sign-up' ? 'Sign up with ' : 'Sign in with '}{style.name}\n </span>\n </div>\n </StyledButton>\n );\n}\n"],"mappings":"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","names":["iconSize"]}
|