-
-
Notifications
You must be signed in to change notification settings - Fork 32.5k
/
Copy pathindex.js
95 lines (81 loc) · 2.79 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import * as React from 'react';
import PropTypes from 'prop-types';
import { FormControl, useFormControlContext } from '@mui/base/FormControl';
import { Input } from '@mui/base/Input';
import { useTheme } from '@mui/system';
import clsx from 'clsx';
function useIsDarkMode() {
const theme = useTheme();
return theme.palette.mode === 'dark';
}
export default function BasicFormControl() {
// Replace this with your app logic for determining dark mode
const isDarkMode = useIsDarkMode();
return (
<div className={`${isDarkMode ? 'dark' : ''}`}>
<FormControl defaultValue="" className="font-sans" required>
<Label>Name</Label>
<Input
placeholder="Write your name here"
slotProps={{
input: {
className:
'w-80 text-sm font-sans font-normal leading-5 px-3 py-2 rounded-lg shadow-md shadow-slate-100 dark:shadow-slate-900 focus:shadow-outline-purple dark:focus:shadow-outline-purple focus:shadow-lg border border-solid border-slate-300 hover:border-purple-500 dark:hover:border-purple-500 focus:border-purple-500 dark:focus:border-purple-500 dark:border-slate-600 bg-white dark:bg-slate-900 text-slate-900 dark:text-slate-300 focus-visible:outline-0',
},
}}
/>
<HelperText />
</FormControl>
</div>
);
}
const Label = React.forwardRef(({ className: classNameProp, children }, ref) => {
const formControlContext = useFormControlContext();
const [dirty, setDirty] = React.useState(false);
React.useEffect(() => {
if (formControlContext?.filled) {
setDirty(true);
}
}, [formControlContext]);
if (formControlContext === undefined) {
return <p className={clsx('mb-1 text-sm', classNameProp)}>{children}</p>;
}
const { error, required, filled } = formControlContext;
const showRequiredError = dirty && required && !filled;
return (
<p
ref={ref}
className={clsx(
'mb-1 text-sm',
classNameProp,
error || showRequiredError ? 'invalid text-red-500' : '',
)}
>
{children}
{required ? ' *' : ''}
</p>
);
});
const HelperText = React.forwardRef((props, ref) => {
const { className, ...other } = props;
const formControlContext = useFormControlContext();
const [dirty, setDirty] = React.useState(false);
React.useEffect(() => {
if (formControlContext?.filled) {
setDirty(true);
}
}, [formControlContext]);
if (formControlContext === undefined) {
return null;
}
const { required, filled } = formControlContext;
const showRequiredError = dirty && required && !filled;
return showRequiredError ? (
<p ref={ref} className={clsx('text-sm', className)} {...other}>
This field is required.
</p>
) : null;
});
HelperText.propTypes = {
className: PropTypes.string,
};