@wasp.sh/wasp-cli-darwin-arm64-unknown 0.17.2 → 0.18.2
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.
Potentially problematic release.
This version of @wasp.sh/wasp-cli-darwin-arm64-unknown might be problematic. Click here for more details.
- package/data/Cli/starters/basic/eslint.config.js +9 -0
- package/data/Cli/starters/basic/package.json +1 -1
- package/data/Cli/starters/basic/{postcss.config.cjs → postcss.config.js} +1 -1
- package/data/Cli/starters/basic/{tailwind.config.cjs → tailwind.config.js} +1 -1
- package/data/Cli/starters/minimal/package.json +1 -1
- package/data/Generator/templates/Dockerfile +3 -1
- package/data/Generator/templates/react-app/package.json +2 -1
- package/data/Generator/templates/react-app/tsconfig.app.json +9 -1
- package/data/Generator/templates/react-app/vite.config.ts +1 -1
- package/data/Generator/templates/sdk/wasp/auth/email/actions/signup.ts +1 -1
- package/data/Generator/templates/sdk/wasp/auth/forms/Auth.module.css +16 -0
- package/data/Generator/templates/sdk/wasp/auth/forms/Auth.tsx +12 -26
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/Form.module.css +99 -0
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/Form.tsx +62 -95
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/Message.module.css +22 -0
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/Message.tsx +28 -15
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/auth-styles.css +30 -0
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/common/LoginSignupForm.module.css +55 -0
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/common/LoginSignupForm.tsx +16 -81
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/social/SocialButton.module.css +33 -0
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/social/SocialButton.tsx +12 -31
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/social/SocialIcons.module.css +4 -0
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/social/SocialIcons.tsx +7 -11
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/util.ts +16 -0
- package/data/Generator/templates/sdk/wasp/auth/forms/types.ts +27 -2
- package/data/Generator/templates/sdk/wasp/client/config.ts +3 -2
- package/data/Generator/templates/sdk/wasp/client/env/schema.ts +2 -2
- package/data/Generator/templates/sdk/wasp/core/serialization/index.ts +2 -2
- package/data/Generator/templates/sdk/wasp/package.json +26 -26
- package/data/Generator/templates/sdk/wasp/scripts/copy-assets.js +14 -0
- package/data/Generator/templates/sdk/wasp/server/config.ts +3 -3
- package/data/Generator/templates/sdk/wasp/server/env.ts +11 -11
- package/data/Generator/templates/sdk/wasp/tsconfig.json +11 -23
- package/package.json +1 -1
- package/wasp-bin +0 -0
- package/data/Cli/bash-completion +0 -5
- package/data/Generator/templates/react-app/src/stitches.config.js +0 -33
- package/data/Generator/templates/sdk/wasp/core/stitches.config.ts +0 -39
|
@@ -12,4 +12,13 @@ export default defineConfig([
|
|
|
12
12
|
eslintReact.configs.flat.recommended,
|
|
13
13
|
eslintReact.configs.flat['jsx-runtime'],
|
|
14
14
|
eslintPrettier,
|
|
15
|
+
// Overrides:
|
|
16
|
+
{
|
|
17
|
+
// `@typescript-eslint/no-require-imports` is enabled by default in `typescript-eslint/recommended` config.
|
|
18
|
+
// This allows us to use `require` syntax in CJS files.
|
|
19
|
+
files: ["**/*.{cjs,cts}"],
|
|
20
|
+
rules: {
|
|
21
|
+
"@typescript-eslint/no-require-imports": ["off"]
|
|
22
|
+
}
|
|
23
|
+
}
|
|
15
24
|
]);
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
# Because if not, we had situations where it would use the different version
|
|
4
4
|
# locally and on Github CI. This way we ensure exact version is used,
|
|
5
5
|
# and also have control over updating it (instead of update surprising us).
|
|
6
|
-
|
|
6
|
+
{=! TODO: Upgrade this to the latest Alpine version once we update Prisma #2504 =}
|
|
7
|
+
{=! (Alpine 3.21 at time of writing) =}
|
|
8
|
+
FROM node:{= nodeVersion =}-alpine3.20 AS node
|
|
7
9
|
|
|
8
10
|
|
|
9
11
|
# We split Dockerfile into base, server-builder and server-production.
|
|
@@ -5,11 +5,19 @@
|
|
|
5
5
|
// Temporary loosen the type checking until we can address all the errors.
|
|
6
6
|
"jsx": "preserve",
|
|
7
7
|
"allowJs": true,
|
|
8
|
-
"strict": false,
|
|
9
8
|
"skipLibCheck": true,
|
|
10
9
|
// Allow importing pages with the .tsx extension.
|
|
11
10
|
"allowImportingTsExtensions": true,
|
|
12
11
|
"noEmit": true,
|
|
12
|
+
// Overriding Vite 7 linting-focused options to be less strict since we
|
|
13
|
+
// don't want to block web-app builds on linting errors.
|
|
14
|
+
// We'll tackle it when we do: https://github.com/wasp-lang/wasp/issues/2777
|
|
15
|
+
"strict": false,
|
|
16
|
+
"noUnusedLocals": false,
|
|
17
|
+
"noUnusedParameters": false,
|
|
18
|
+
"erasableSyntaxOnly": false,
|
|
19
|
+
"noFallthroughCasesInSwitch": false,
|
|
20
|
+
"noUncheckedSideEffectImports": false
|
|
13
21
|
},
|
|
14
22
|
"include": [
|
|
15
23
|
"src"
|
|
@@ -45,7 +45,7 @@ const defaultViteConfig = {
|
|
|
45
45
|
{
|
|
46
46
|
// Vite doesn't look for `.prisma/client` imports in the `node_modules`
|
|
47
47
|
// folder. We point it to the correct place here.
|
|
48
|
-
// TODO: Check if we can remove when updating
|
|
48
|
+
// TODO: Check if we can remove when updating Prisma (#2504)
|
|
49
49
|
find: /^\.prisma\/(.+)$/,
|
|
50
50
|
replacement: path.join(
|
|
51
51
|
"{= projectDir =}",
|
|
@@ -5,7 +5,7 @@ import { type UserEmailSignupFields } from '../../providers'
|
|
|
5
5
|
{=/ emailUserSignupFields.isDefined =}
|
|
6
6
|
|
|
7
7
|
type EmailSignupData = {
|
|
8
|
-
|
|
8
|
+
email: string
|
|
9
9
|
password: string
|
|
10
10
|
}{=# emailUserSignupFields.isDefined =} & UserEmailSignupFields{=/ emailUserSignupFields.isDefined =}
|
|
11
11
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Using !important with some of the components is a workaround for Tailwind
|
|
3
|
+
CSS's having too much precedence.
|
|
4
|
+
https://github.com/wasp-lang/wasp/issues/1764
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
.container {
|
|
8
|
+
display: flex;
|
|
9
|
+
flex-direction: column;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.headerText {
|
|
13
|
+
font-size: 1.875rem !important;
|
|
14
|
+
font-weight: 700 !important;
|
|
15
|
+
margin-top: 1.5rem !important;
|
|
16
|
+
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
{{={= =}=}}
|
|
2
|
-
import { useState, createContext } from 'react'
|
|
3
|
-
import
|
|
4
|
-
import
|
|
2
|
+
import { useState, createContext, useMemo } from 'react'
|
|
3
|
+
import styles from './Auth.module.css'
|
|
4
|
+
import './internal/auth-styles.css'
|
|
5
|
+
import { tokenObjToCSSVars } from "./internal/util"
|
|
6
|
+
import { CSSProperties } from "react"
|
|
5
7
|
|
|
6
8
|
import {
|
|
7
9
|
type State,
|
|
@@ -21,22 +23,6 @@ const logoStyle = {
|
|
|
21
23
|
height: '3rem'
|
|
22
24
|
}
|
|
23
25
|
|
|
24
|
-
const Container = styled('div', {
|
|
25
|
-
display: 'flex',
|
|
26
|
-
flexDirection: 'column',
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
// Note about using !important with some of the components:
|
|
30
|
-
// This is a workaround for CSS generated by Stitches not being specific enough
|
|
31
|
-
// and thus being overridden by Tailwind CSS. https://github.com/wasp-lang/wasp/issues/1764
|
|
32
|
-
// Long term we want to move away from Stitches and this is an acceptable workaround for now.
|
|
33
|
-
|
|
34
|
-
const HeaderText = styled('h2', {
|
|
35
|
-
fontSize: '1.875rem !important',
|
|
36
|
-
fontWeight: '700 !important',
|
|
37
|
-
marginTop: '1.5rem !important'
|
|
38
|
-
})
|
|
39
|
-
|
|
40
26
|
|
|
41
27
|
// PRIVATE API
|
|
42
28
|
export const AuthContext = createContext({
|
|
@@ -55,10 +41,10 @@ function Auth ({ state, appearance, logo, socialLayout = 'horizontal', additiona
|
|
|
55
41
|
const [successMessage, setSuccessMessage] = useState<string | null>(null);
|
|
56
42
|
const [isLoading, setIsLoading] = useState(false);
|
|
57
43
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
44
|
+
const customStyle = useMemo(() => ({
|
|
45
|
+
...tokenObjToCSSVars('color', appearance?.colors ?? {}),
|
|
46
|
+
...tokenObjToCSSVars('font-size', appearance?.fontSizes ?? {}),
|
|
47
|
+
}), [appearance])
|
|
62
48
|
|
|
63
49
|
const titles: Record<State, string> = {
|
|
64
50
|
login: 'Log in to your account',
|
|
@@ -74,10 +60,10 @@ function Auth ({ state, appearance, logo, socialLayout = 'horizontal', additiona
|
|
|
74
60
|
const socialButtonsDirection = socialLayout === 'vertical' ? 'vertical' : 'horizontal'
|
|
75
61
|
|
|
76
62
|
return (
|
|
77
|
-
<
|
|
63
|
+
<div className={styles.container} style={customStyle}>
|
|
78
64
|
<div>
|
|
79
65
|
{logo && (<img style={logoStyle} src={logo} alt='Your Company' />)}
|
|
80
|
-
<
|
|
66
|
+
<h2 className={styles.headerText}>{title}</h2>
|
|
81
67
|
</div>
|
|
82
68
|
|
|
83
69
|
{errorMessage && (
|
|
@@ -100,7 +86,7 @@ function Auth ({ state, appearance, logo, socialLayout = 'horizontal', additiona
|
|
|
100
86
|
{state === 'verify-email' && (<VerifyEmailForm />)}
|
|
101
87
|
{=/ isEmailAuthEnabled =}
|
|
102
88
|
</AuthContext.Provider>
|
|
103
|
-
</
|
|
89
|
+
</div>
|
|
104
90
|
)
|
|
105
91
|
}
|
|
106
92
|
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Using !important with some of the components is a workaround for Tailwind
|
|
3
|
+
CSS's having too much precedence.
|
|
4
|
+
https://github.com/wasp-lang/wasp/issues/1764
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
.form {
|
|
8
|
+
margin-top: 1.5rem;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.formItemGroup {
|
|
12
|
+
/* Empty class to use as marker */
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.formItemGroup + .formItemGroup {
|
|
16
|
+
margin-top: 1.5rem;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.formLabel {
|
|
20
|
+
display: block !important;
|
|
21
|
+
font-size: var(--font-size-sm) !important;
|
|
22
|
+
font-weight: 500 !important;
|
|
23
|
+
margin-bottom: 0.5rem !important;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.formInput,
|
|
27
|
+
.formTextarea {
|
|
28
|
+
display: block !important;
|
|
29
|
+
line-height: 1.5rem !important;
|
|
30
|
+
font-size: var(--font-size-sm) !important;
|
|
31
|
+
border-width: 1px !important;
|
|
32
|
+
border-color: var(--color-gray600) !important;
|
|
33
|
+
background-color: #f8f4ff !important;
|
|
34
|
+
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05) !important;
|
|
35
|
+
border-radius: 0.375rem !important;
|
|
36
|
+
width: 100% !important;
|
|
37
|
+
padding-top: 0.375rem !important;
|
|
38
|
+
padding-bottom: 0.375rem !important;
|
|
39
|
+
padding-left: 0.75rem !important;
|
|
40
|
+
padding-right: 0.75rem !important;
|
|
41
|
+
margin: 0 !important;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.formInput:focus,
|
|
45
|
+
.formTextarea:focus {
|
|
46
|
+
border-width: 1px !important;
|
|
47
|
+
border-color: var(--color-gray700) !important;
|
|
48
|
+
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05) !important;
|
|
49
|
+
outline: none;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.formInput:disabled,
|
|
53
|
+
.formTextarea:disabled {
|
|
54
|
+
opacity: 0.5 !important;
|
|
55
|
+
cursor: not-allowed !important;
|
|
56
|
+
background-color: var(--color-gray400) !important;
|
|
57
|
+
border-color: var(--color-gray400) !important;
|
|
58
|
+
color: var(--color-gray500) !important;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.formError {
|
|
62
|
+
display: block;
|
|
63
|
+
font-size: var(--font-size-sm);
|
|
64
|
+
font-weight: 500;
|
|
65
|
+
color: var(--color-formErrorText);
|
|
66
|
+
margin-top: 0.5rem;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.submitButton {
|
|
70
|
+
display: flex !important;
|
|
71
|
+
justify-content: center !important;
|
|
72
|
+
width: 100% !important;
|
|
73
|
+
border-width: 1px !important;
|
|
74
|
+
border-color: var(--color-brand) !important;
|
|
75
|
+
background-color: var(--color-brand) !important;
|
|
76
|
+
color: var(--color-submitButtonText) !important;
|
|
77
|
+
padding: 0.5rem 0.75rem !important;
|
|
78
|
+
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05) !important;
|
|
79
|
+
font-weight: 600 !important;
|
|
80
|
+
font-size: var(--font-size-sm) !important;
|
|
81
|
+
line-height: 1.25rem !important;
|
|
82
|
+
border-radius: 0.375rem !important;
|
|
83
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !important;
|
|
84
|
+
transition-duration: 100ms !important;
|
|
85
|
+
cursor: pointer;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.submitButton:hover {
|
|
89
|
+
background-color: var(--color-brandAccent) !important;
|
|
90
|
+
border-color: var(--color-brandAccent) !important;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.submitButton:disabled {
|
|
94
|
+
opacity: 0.5 !important;
|
|
95
|
+
cursor: not-allowed !important;
|
|
96
|
+
background-color: var(--color-gray400) !important;
|
|
97
|
+
border-color: var(--color-gray400) !important;
|
|
98
|
+
color: var(--color-gray500) !important;
|
|
99
|
+
}
|
|
@@ -1,107 +1,74 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
// and thus being overridden by Tailwind CSS. https://github.com/wasp-lang/wasp/issues/1764
|
|
6
|
-
// Long term we want to move away from Stitches and this is an acceptable workaround for now.
|
|
1
|
+
import { ComponentPropsWithoutRef, ComponentRef, forwardRef } from "react";
|
|
2
|
+
import styles from "./Form.module.css";
|
|
3
|
+
import "./auth-styles.css";
|
|
4
|
+
import { clsx } from "./util";
|
|
7
5
|
|
|
8
6
|
// PRIVATE API
|
|
9
|
-
export const Form =
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
export const Form = forwardRef<
|
|
8
|
+
ComponentRef<"form">,
|
|
9
|
+
ComponentPropsWithoutRef<"form">
|
|
10
|
+
>(({ children, className, ...props }, ref) => (
|
|
11
|
+
<form className={clsx(styles.form, className)} {...props} ref={ref}>
|
|
12
|
+
{children}
|
|
13
|
+
</form>
|
|
14
|
+
));
|
|
12
15
|
|
|
13
16
|
// PUBLIC API
|
|
14
|
-
export const FormItemGroup =
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
17
|
+
export const FormItemGroup = forwardRef<
|
|
18
|
+
ComponentRef<"div">,
|
|
19
|
+
ComponentPropsWithoutRef<"div">
|
|
20
|
+
>(({ children, className, ...props }, ref) => (
|
|
21
|
+
<div className={clsx(styles.formItemGroup, className)} {...props} ref={ref}>
|
|
22
|
+
{children}
|
|
23
|
+
</div>
|
|
24
|
+
));
|
|
19
25
|
|
|
20
26
|
// PUBLIC API
|
|
21
|
-
export const FormLabel =
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
display: 'block !important',
|
|
30
|
-
lineHeight: '1.5rem !important',
|
|
31
|
-
fontSize: '$sm !important',
|
|
32
|
-
borderWidth: '1px !important',
|
|
33
|
-
borderColor: '$gray600 !important',
|
|
34
|
-
backgroundColor: '#f8f4ff !important',
|
|
35
|
-
boxShadow: '0 1px 2px 0 rgba(0, 0, 0, 0.05) !important',
|
|
36
|
-
'&:focus': {
|
|
37
|
-
borderWidth: '1px !important',
|
|
38
|
-
borderColor: '$gray700 !important',
|
|
39
|
-
boxShadow: '0 1px 2px 0 rgba(0, 0, 0, 0.05) !important',
|
|
40
|
-
},
|
|
41
|
-
'&:disabled': {
|
|
42
|
-
opacity: '0.5 !important',
|
|
43
|
-
cursor: 'not-allowed !important',
|
|
44
|
-
backgroundColor: '$gray400 !important',
|
|
45
|
-
borderColor: '$gray400 !important',
|
|
46
|
-
color: '$gray500 !important',
|
|
47
|
-
},
|
|
48
|
-
|
|
49
|
-
borderRadius: '0.375rem !important',
|
|
50
|
-
width: '100% !important',
|
|
51
|
-
|
|
52
|
-
paddingTop: '0.375rem !important',
|
|
53
|
-
paddingBottom: '0.375rem !important',
|
|
54
|
-
paddingLeft: '0.75rem !important',
|
|
55
|
-
paddingRight: '0.75rem !important',
|
|
56
|
-
margin: '0 !important',
|
|
57
|
-
}
|
|
27
|
+
export const FormLabel = forwardRef<
|
|
28
|
+
ComponentRef<"label">,
|
|
29
|
+
ComponentPropsWithoutRef<"label">
|
|
30
|
+
>(({ children, className, ...props }, ref) => (
|
|
31
|
+
<label className={clsx(styles.formLabel, className)} {...props} ref={ref}>
|
|
32
|
+
{children}
|
|
33
|
+
</label>
|
|
34
|
+
));
|
|
58
35
|
|
|
59
36
|
// PUBLIC API
|
|
60
|
-
export const FormInput =
|
|
37
|
+
export const FormInput = forwardRef<
|
|
38
|
+
ComponentRef<"input">,
|
|
39
|
+
ComponentPropsWithoutRef<"input">
|
|
40
|
+
>(({ className, ...props }, ref) => (
|
|
41
|
+
<input className={clsx(styles.formInput, className)} {...props} ref={ref} />
|
|
42
|
+
));
|
|
61
43
|
|
|
62
|
-
// PUBLIC API
|
|
63
|
-
export const FormTextarea =
|
|
44
|
+
// PUBLIC API)
|
|
45
|
+
export const FormTextarea = forwardRef<
|
|
46
|
+
ComponentRef<"textarea">,
|
|
47
|
+
ComponentPropsWithoutRef<"textarea">
|
|
48
|
+
>(({ className, ...props }, ref) => (
|
|
49
|
+
<textarea
|
|
50
|
+
className={clsx(styles.formTextarea, className)}
|
|
51
|
+
{...props}
|
|
52
|
+
ref={ref}
|
|
53
|
+
/>
|
|
54
|
+
));
|
|
64
55
|
|
|
65
|
-
// PUBLIC API
|
|
66
|
-
export const FormError =
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
56
|
+
// PUBLIC API)
|
|
57
|
+
export const FormError = forwardRef<
|
|
58
|
+
ComponentRef<"div">,
|
|
59
|
+
ComponentPropsWithoutRef<"div">
|
|
60
|
+
>(({ children, className, ...props }, ref) => (
|
|
61
|
+
<div className={clsx(styles.formError, className)} {...props} ref={ref}>
|
|
62
|
+
{children}
|
|
63
|
+
</div>
|
|
64
|
+
));
|
|
73
65
|
|
|
74
66
|
// PRIVATE API
|
|
75
|
-
export const SubmitButton =
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
color: '$submitButtonText !important',
|
|
84
|
-
|
|
85
|
-
padding: '0.5rem 0.75rem !important',
|
|
86
|
-
boxShadow: '0 1px 2px 0 rgba(0, 0, 0, 0.05) !important',
|
|
87
|
-
|
|
88
|
-
fontWeight: '600 !important',
|
|
89
|
-
fontSize: '$sm !important',
|
|
90
|
-
lineHeight: '1.25rem !important',
|
|
91
|
-
borderRadius: '0.375rem !important',
|
|
92
|
-
|
|
93
|
-
// TODO(matija): extract this into separate BaseButton component and then inherit it.
|
|
94
|
-
'&:hover': {
|
|
95
|
-
backgroundColor: '$brandAccent !important',
|
|
96
|
-
borderColor: '$brandAccent !important',
|
|
97
|
-
},
|
|
98
|
-
'&:disabled': {
|
|
99
|
-
opacity: '0.5 !important',
|
|
100
|
-
cursor: 'not-allowed !important',
|
|
101
|
-
backgroundColor: '$gray400 !important',
|
|
102
|
-
borderColor: '$gray400 !important',
|
|
103
|
-
color: '$gray500 !important',
|
|
104
|
-
},
|
|
105
|
-
transitionTimingFunction: 'cubic-bezier(0.4, 0, 0.2, 1) !important',
|
|
106
|
-
transitionDuration: '100ms !important',
|
|
107
|
-
})
|
|
67
|
+
export const SubmitButton = forwardRef<
|
|
68
|
+
ComponentRef<"button">,
|
|
69
|
+
ComponentPropsWithoutRef<"button">
|
|
70
|
+
>(({ children, className, ...props }, ref) => (
|
|
71
|
+
<button className={clsx(styles.submitButton, className)} {...props} ref={ref}>
|
|
72
|
+
{children}
|
|
73
|
+
</button>
|
|
74
|
+
));
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
.message {
|
|
2
|
+
padding: 0.5rem 0.75rem;
|
|
3
|
+
border-radius: 0.375rem;
|
|
4
|
+
margin-top: 1rem;
|
|
5
|
+
background: var(--color-gray400);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.messageError {
|
|
9
|
+
padding: 0.5rem 0.75rem;
|
|
10
|
+
border-radius: 0.375rem;
|
|
11
|
+
margin-top: 1rem;
|
|
12
|
+
background: var(--color-errorBackground);
|
|
13
|
+
color: var(--color-errorText);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.messageSuccess {
|
|
17
|
+
padding: 0.5rem 0.75rem;
|
|
18
|
+
border-radius: 0.375rem;
|
|
19
|
+
margin-top: 1rem;
|
|
20
|
+
background: var(--color-successBackground);
|
|
21
|
+
color: var(--color-successText);
|
|
22
|
+
}
|
|
@@ -1,21 +1,34 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ComponentPropsWithoutRef, ComponentRef, forwardRef } from "react";
|
|
2
|
+
import styles from "./Message.module.css";
|
|
3
|
+
import "./auth-styles.css";
|
|
4
|
+
import { clsx } from "./util";
|
|
2
5
|
|
|
3
6
|
// PRIVATE API
|
|
4
|
-
export const Message =
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
7
|
+
export const Message = forwardRef<
|
|
8
|
+
ComponentRef<"div">,
|
|
9
|
+
ComponentPropsWithoutRef<"div">
|
|
10
|
+
>(({ children, className, ...props }, ref) => (
|
|
11
|
+
<div className={clsx(styles.message, className)} {...props} ref={ref}>
|
|
12
|
+
{children}
|
|
13
|
+
</div>
|
|
14
|
+
));
|
|
10
15
|
|
|
11
16
|
// PRIVATE API
|
|
12
|
-
export const MessageError =
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
})
|
|
17
|
+
export const MessageError = forwardRef<
|
|
18
|
+
ComponentRef<"div">,
|
|
19
|
+
ComponentPropsWithoutRef<"div">
|
|
20
|
+
>(({ children, className, ...props }, ref) => (
|
|
21
|
+
<div className={clsx(styles.messageError, className)} {...props} ref={ref}>
|
|
22
|
+
{children}
|
|
23
|
+
</div>
|
|
24
|
+
));
|
|
16
25
|
|
|
17
26
|
// PRIVATE API
|
|
18
|
-
export const MessageSuccess =
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
})
|
|
27
|
+
export const MessageSuccess = forwardRef<
|
|
28
|
+
ComponentRef<"div">,
|
|
29
|
+
ComponentPropsWithoutRef<"div">
|
|
30
|
+
>(({ children, className, ...props }, ref) => (
|
|
31
|
+
<div className={clsx(styles.messageSuccess, className)} {...props} ref={ref}>
|
|
32
|
+
{children}
|
|
33
|
+
</div>
|
|
34
|
+
));
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
/* ATTENTION: Keep this list in sync with the one at ../types.ts */
|
|
3
|
+
/*
|
|
4
|
+
This is the list of CSS variables that are used in the auth forms, and that
|
|
5
|
+
the user can override.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/* Colors */
|
|
9
|
+
--color-waspYellow: #ffcc00;
|
|
10
|
+
--color-gray700: #a1a5ab;
|
|
11
|
+
--color-gray600: #d1d5db;
|
|
12
|
+
--color-gray500: gainsboro;
|
|
13
|
+
--color-gray400: #f0f0f0;
|
|
14
|
+
--color-red: #FED7D7;
|
|
15
|
+
--color-darkRed: #fa3838;
|
|
16
|
+
--color-green: #C6F6D5;
|
|
17
|
+
|
|
18
|
+
/* Semantic colors */
|
|
19
|
+
--color-brand: var(--color-waspYellow);
|
|
20
|
+
--color-brandAccent: #ffdb46;
|
|
21
|
+
--color-errorBackground: var(--color-red);
|
|
22
|
+
--color-errorText: #2D3748;
|
|
23
|
+
--color-successBackground: var(--color-green);
|
|
24
|
+
--color-successText: #2D3748;
|
|
25
|
+
--color-submitButtonText: black;
|
|
26
|
+
--color-formErrorText: var(--color-darkRed);
|
|
27
|
+
|
|
28
|
+
/* Font sizes */
|
|
29
|
+
--font-size-sm: 1rem;
|
|
30
|
+
}
|
package/data/Generator/templates/sdk/wasp/auth/forms/internal/common/LoginSignupForm.module.css
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
.orContinueWith {
|
|
2
|
+
position: relative;
|
|
3
|
+
margin-top: 1.5rem;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.orContinueWithLineContainer {
|
|
7
|
+
position: absolute;
|
|
8
|
+
inset: 0px;
|
|
9
|
+
display: flex;
|
|
10
|
+
align-items: center;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.orContinueWithLine {
|
|
14
|
+
width: 100%;
|
|
15
|
+
border-top-width: 1px;
|
|
16
|
+
border-color: var(--color-gray500);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.orContinueWithTextContainer {
|
|
20
|
+
position: relative;
|
|
21
|
+
display: flex;
|
|
22
|
+
justify-content: center;
|
|
23
|
+
font-size: var(--font-size-sm);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.orContinueWithText {
|
|
27
|
+
background-color: white;
|
|
28
|
+
padding-left: 0.5rem;
|
|
29
|
+
padding-right: 0.5rem;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.socialAuth {
|
|
33
|
+
margin-top: 1.5rem;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.socialAuthLabel {
|
|
37
|
+
font-weight: 500;
|
|
38
|
+
font-size: var(--font-size-sm);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.socialAuthButtons {
|
|
42
|
+
gap: 16px;
|
|
43
|
+
margin-top: 0.5rem;
|
|
44
|
+
display: flex;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.socialAuthButtons.horizontal {
|
|
48
|
+
display: grid;
|
|
49
|
+
grid-template-columns: repeat(auto-fit, minmax(48px, 1fr));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.socialAuthButtons.vertical {
|
|
53
|
+
flex-direction: column;
|
|
54
|
+
margin: 8px 0;
|
|
55
|
+
}
|