summaryrefslogtreecommitdiffstats
path: root/src/components/molecules/forms/toggle.tsx
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2022-06-01 22:37:56 +0200
committerGitHub <noreply@github.com>2022-06-01 22:37:56 +0200
commit0a33a4658d848fe056715c6da053763407845b2a (patch)
tree7c679e54ba4bbadaf0a59bbde780f5742e3b875d /src/components/molecules/forms/toggle.tsx
parent97031a86ca38890e60ecec79828498b7bb13cbfa (diff)
parent6be20422494e3806fba3d1c5ad5c3e98bd6e67e5 (diff)
chore(a11y): improve website settings accessibility (#17)
The previous switch buttons (using checkbox) was not a11y compliant. So I change my approach to use radio buttons and to clearly separate the two different states. I also convert the Ackee select setting to improve consistency between settings.
Diffstat (limited to 'src/components/molecules/forms/toggle.tsx')
-rw-r--r--src/components/molecules/forms/toggle.tsx87
1 files changed, 0 insertions, 87 deletions
diff --git a/src/components/molecules/forms/toggle.tsx b/src/components/molecules/forms/toggle.tsx
deleted file mode 100644
index 0fac45c..0000000
--- a/src/components/molecules/forms/toggle.tsx
+++ /dev/null
@@ -1,87 +0,0 @@
-import Checkbox, { type CheckboxProps } from '@components/atoms/forms/checkbox';
-import Label, { type LabelProps } from '@components/atoms/forms/label';
-import { FC, ReactNode } from 'react';
-import styles from './toggle.module.scss';
-
-export type ToggleChoices = {
- /**
- * The left part of the toggle field (unchecked).
- */
- left: ReactNode;
- /**
- * The right part of the toggle field (checked).
- */
- right: ReactNode;
-};
-
-export type ToggleProps = Pick<CheckboxProps, 'id' | 'name'> & {
- /**
- * The toggle choices.
- */
- choices: ToggleChoices;
- /**
- * Set additional classnames to the toggle wrapper.
- */
- className?: string;
- /**
- * The toggle label.
- */
- label: string;
- /**
- * Set additional classnames to the label.
- */
- labelClassName?: LabelProps['className'];
- /**
- * The label size.
- */
- labelSize?: LabelProps['size'];
- /**
- * The toggle value. True if checked.
- */
- value: boolean;
- /**
- * A callback function to update the toggle value.
- */
- setValue: (value: boolean) => void;
-};
-
-/**
- * Toggle component
- *
- * Render a toggle with a label and two choices.
- */
-const Toggle: FC<ToggleProps> = ({
- choices,
- className = '',
- id,
- label,
- labelClassName = '',
- labelSize,
- name,
- setValue,
- value,
-}) => {
- return (
- <>
- <Checkbox
- name={name}
- id={id}
- value={value}
- setValue={() => setValue(!value)}
- className={styles.checkbox}
- />
- <Label
- size={labelSize}
- htmlFor={id}
- className={`${styles.label} ${className}`}
- >
- <span className={`${styles.title} ${labelClassName}`}>{label}</span>
- {choices.left}
- <span className={styles.toggle}></span>
- {choices.right}
- </Label>
- </>
- );
-};
-
-export default Toggle;