aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/atoms/forms
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/atoms/forms')
-rw-r--r--src/components/atoms/forms/toggle.module.scss3
-rw-r--r--src/components/atoms/forms/toggle.stories.tsx14
-rw-r--r--src/components/atoms/forms/toggle.tsx26
3 files changed, 35 insertions, 8 deletions
diff --git a/src/components/atoms/forms/toggle.module.scss b/src/components/atoms/forms/toggle.module.scss
index 00e87a2..24b867e 100644
--- a/src/components/atoms/forms/toggle.module.scss
+++ b/src/components/atoms/forms/toggle.module.scss
@@ -6,10 +6,11 @@
display: inline-flex;
align-items: center;
+ width: 100%;
}
.title {
- margin-right: var(--spacing-xs);
+ margin-right: auto;
}
.toggle {
diff --git a/src/components/atoms/forms/toggle.stories.tsx b/src/components/atoms/forms/toggle.stories.tsx
index 6e7323b..ea08694 100644
--- a/src/components/atoms/forms/toggle.stories.tsx
+++ b/src/components/atoms/forms/toggle.stories.tsx
@@ -34,6 +34,20 @@ export default {
required: true,
},
},
+ labelSize: {
+ control: {
+ type: 'select',
+ },
+ description: 'The label size.',
+ options: ['medium', 'small'],
+ table: {
+ category: 'Options',
+ },
+ type: {
+ name: 'string',
+ required: false,
+ },
+ },
name: {
control: {
type: 'text',
diff --git a/src/components/atoms/forms/toggle.tsx b/src/components/atoms/forms/toggle.tsx
index e8e8c0f..7ef40ed 100644
--- a/src/components/atoms/forms/toggle.tsx
+++ b/src/components/atoms/forms/toggle.tsx
@@ -1,9 +1,16 @@
-import { FC, ReactElement } from 'react';
+import { ReactNode, VFC } from 'react';
+import Label, { LabelProps } from './label';
import styles from './toggle.module.scss';
export type ToggleChoices = {
- left: ReactElement | string;
- right: ReactElement | string;
+ /**
+ * The left part of the toggle field (unchecked).
+ */
+ left: ReactNode;
+ /**
+ * The right part of the toggle field (checked).
+ */
+ right: ReactNode;
};
export type ToggleProps = {
@@ -20,6 +27,10 @@ export type ToggleProps = {
*/
label: string;
/**
+ * The label size.
+ */
+ labelSize?: LabelProps['size'];
+ /**
* The input name.
*/
name: string;
@@ -38,13 +49,14 @@ export type ToggleProps = {
*
* Render a toggle with a label and two choices.
*/
-const Toggle: FC<ToggleProps> = ({
+const Toggle: VFC<ToggleProps> = ({
choices,
id,
label,
+ labelSize,
name,
- value,
setValue,
+ value,
}) => {
return (
<>
@@ -56,12 +68,12 @@ const Toggle: FC<ToggleProps> = ({
onChange={() => setValue(!value)}
className={styles.checkbox}
/>
- <label htmlFor={id} className={styles.label}>
+ <Label size={labelSize} htmlFor={id} className={styles.label}>
<span className={styles.title}>{label}</span>
{choices.left}
<span className={styles.toggle}></span>
{choices.right}
- </label>
+ </Label>
</>
);
};