diff options
| author | Armand Philippot <git@armandphilippot.com> | 2022-02-25 19:17:09 +0100 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2022-02-25 19:17:09 +0100 |
| commit | e26d821f738525477472e631d170d9ed218c1603 (patch) | |
| tree | 70ec0c29d003d462de6926f1faa09354e3ff6d90 /src/components/FormElements/Form | |
| parent | cb4764f8670f67627c407591c89b8d3637c190a7 (diff) | |
chore: combine input/textarea/select in a single component
Diffstat (limited to 'src/components/FormElements/Form')
| -rw-r--r-- | src/components/FormElements/Form/Form.module.scss | 37 | ||||
| -rw-r--r-- | src/components/FormElements/Form/Form.tsx | 27 |
2 files changed, 64 insertions, 0 deletions
diff --git a/src/components/FormElements/Form/Form.module.scss b/src/components/FormElements/Form/Form.module.scss new file mode 100644 index 0000000..0f7c437 --- /dev/null +++ b/src/components/FormElements/Form/Form.module.scss @@ -0,0 +1,37 @@ +@use "@styles/abstracts/functions" as fun; + +.wrapper { + width: 100%; +} + +.centered { + max-width: 45ch; + margin-left: auto; + margin-right: auto; +} + +.search { + display: flex; + flex-flow: row nowrap; + align-items: center; + + > input { + padding-right: calc(var(--btn-size) + var(--spacing-2xs)); + + &:hover ~ button { + transform: translate(fun.convert-px(-3), fun.convert-px(-3)); + } + + &:focus ~ button { + transform: translate(fun.convert-px(3), fun.convert-px(3)); + } + } +} + +.settings { + display: flex; + flex-flow: row nowrap; + align-items: center; + margin: var(--spacing-sm) 0; + position: relative; +} diff --git a/src/components/FormElements/Form/Form.tsx b/src/components/FormElements/Form/Form.tsx new file mode 100644 index 0000000..10fdcdf --- /dev/null +++ b/src/components/FormElements/Form/Form.tsx @@ -0,0 +1,27 @@ +import { ReactNode } from 'react'; +import styles from './Form.module.scss'; + +type FormKind = 'centered' | 'search' | 'settings'; + +const Form = ({ + children, + submitHandler, + kind, + id, +}: { + children: ReactNode; + submitHandler: any; + kind?: FormKind; + id?: string; +}) => { + const kindStyles = kind ? styles[kind] : ''; + const classes = `${styles.wrapper} ${kindStyles}`; + + return ( + <form onSubmit={submitHandler} className={classes} id={id}> + {children} + </form> + ); +}; + +export default Form; |
