aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/molecules/forms
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/molecules/forms')
-rw-r--r--src/components/molecules/forms/ackee-toggle.stories.tsx10
-rw-r--r--src/components/molecules/forms/ackee-toggle.test.tsx2
-rw-r--r--src/components/molecules/forms/ackee-toggle.tsx20
-rw-r--r--src/components/molecules/forms/fieldset.stories.tsx2
-rw-r--r--src/components/molecules/forms/fieldset.test.tsx2
-rw-r--r--src/components/molecules/forms/fieldset.tsx23
-rw-r--r--src/components/molecules/forms/flipping-label.stories.tsx4
-rw-r--r--src/components/molecules/forms/flipping-label.test.tsx2
-rw-r--r--src/components/molecules/forms/flipping-label.tsx9
-rw-r--r--src/components/molecules/forms/index.ts10
-rw-r--r--src/components/molecules/forms/labelled-boolean-field.stories.tsx2
-rw-r--r--src/components/molecules/forms/labelled-boolean-field.test.tsx2
-rw-r--r--src/components/molecules/forms/labelled-boolean-field.tsx29
-rw-r--r--src/components/molecules/forms/labelled-field.stories.tsx2
-rw-r--r--src/components/molecules/forms/labelled-field.test.tsx2
-rw-r--r--src/components/molecules/forms/labelled-field.tsx17
-rw-r--r--src/components/molecules/forms/labelled-select.stories.tsx2
-rw-r--r--src/components/molecules/forms/labelled-select.test.tsx2
-rw-r--r--src/components/molecules/forms/labelled-select.tsx13
-rw-r--r--src/components/molecules/forms/motion-toggle.stories.tsx10
-rw-r--r--src/components/molecules/forms/motion-toggle.test.tsx2
-rw-r--r--src/components/molecules/forms/motion-toggle.tsx12
-rw-r--r--src/components/molecules/forms/prism-theme-toggle.stories.tsx2
-rw-r--r--src/components/molecules/forms/prism-theme-toggle.test.tsx2
-rw-r--r--src/components/molecules/forms/prism-theme-toggle.tsx12
-rw-r--r--src/components/molecules/forms/radio-group.stories.tsx2
-rw-r--r--src/components/molecules/forms/radio-group.test.tsx2
-rw-r--r--src/components/molecules/forms/radio-group.tsx18
-rw-r--r--src/components/molecules/forms/theme-toggle.stories.tsx2
-rw-r--r--src/components/molecules/forms/theme-toggle.test.tsx2
-rw-r--r--src/components/molecules/forms/theme-toggle.tsx12
31 files changed, 108 insertions, 125 deletions
diff --git a/src/components/molecules/forms/ackee-toggle.stories.tsx b/src/components/molecules/forms/ackee-toggle.stories.tsx
index 3f3f11e..779f49d 100644
--- a/src/components/molecules/forms/ackee-toggle.stories.tsx
+++ b/src/components/molecules/forms/ackee-toggle.stories.tsx
@@ -1,5 +1,5 @@
import { ComponentMeta, ComponentStory } from '@storybook/react';
-import AckeeToggleComponent from './ackee-toggle';
+import { AckeeToggle } from './ackee-toggle';
import { storageKey } from './ackee-toggle.fixture';
/**
@@ -7,7 +7,7 @@ import { storageKey } from './ackee-toggle.fixture';
*/
export default {
title: 'Molecules/Forms/Toggle',
- component: AckeeToggleComponent,
+ component: AckeeToggle,
argTypes: {
bodyClassName: {
control: {
@@ -109,10 +109,10 @@ export default {
},
},
},
-} as ComponentMeta<typeof AckeeToggleComponent>;
+} as ComponentMeta<typeof AckeeToggle>;
-const Template: ComponentStory<typeof AckeeToggleComponent> = (args) => (
- <AckeeToggleComponent {...args} />
+const Template: ComponentStory<typeof AckeeToggle> = (args) => (
+ <AckeeToggle {...args} />
);
/**
diff --git a/src/components/molecules/forms/ackee-toggle.test.tsx b/src/components/molecules/forms/ackee-toggle.test.tsx
index a4d36b3..97ebbe5 100644
--- a/src/components/molecules/forms/ackee-toggle.test.tsx
+++ b/src/components/molecules/forms/ackee-toggle.test.tsx
@@ -1,5 +1,5 @@
import { render, screen } from '../../../../tests/utils';
-import AckeeToggle from './ackee-toggle';
+import { AckeeToggle } from './ackee-toggle';
import { storageKey } from './ackee-toggle.fixture';
describe('AckeeToggle', () => {
diff --git a/src/components/molecules/forms/ackee-toggle.tsx b/src/components/molecules/forms/ackee-toggle.tsx
index ba77c10..32949b2 100644
--- a/src/components/molecules/forms/ackee-toggle.tsx
+++ b/src/components/molecules/forms/ackee-toggle.tsx
@@ -1,16 +1,18 @@
import { FC } from 'react';
import { useIntl } from 'react-intl';
-import useLocalStorage from '../../../utils/hooks/use-local-storage';
-import useUpdateAckeeOptions, {
+import {
type AckeeOptions,
-} from '../../../utils/hooks/use-update-ackee-options';
-import RadioGroup, {
+ useLocalStorage,
+ useUpdateAckeeOptions,
+} from '../../../utils/hooks';
+import {
+ RadioGroup,
type RadioGroupCallback,
type RadioGroupCallbackProps,
type RadioGroupOption,
type RadioGroupProps,
} from './radio-group';
-import Tooltip, { type TooltipProps } from '../modals/tooltip';
+import { Tooltip, type TooltipProps } from '../modals/tooltip';
export type AckeeToggleProps = Pick<
RadioGroupProps,
@@ -43,7 +45,7 @@ export type AckeeToggleProps = Pick<
*
* Render a Toggle component to set reduce motion.
*/
-const AckeeToggle: FC<AckeeToggleProps> = ({
+export const AckeeToggle: FC<AckeeToggleProps> = ({
defaultValue,
storageKey,
tooltipClassName,
@@ -126,8 +128,9 @@ const AckeeToggle: FC<AckeeToggleProps> = ({
return (
<RadioGroup
- initialChoice={value}
+ {...props}
kind="toggle"
+ initialChoice={value}
legend={ackeeLabel}
onChange={handleChange}
options={options}
@@ -139,9 +142,6 @@ const AckeeToggle: FC<AckeeToggleProps> = ({
className={tooltipClassName}
/>
}
- {...props}
/>
);
};
-
-export default AckeeToggle;
diff --git a/src/components/molecules/forms/fieldset.stories.tsx b/src/components/molecules/forms/fieldset.stories.tsx
index 85aeb7f..d53a21a 100644
--- a/src/components/molecules/forms/fieldset.stories.tsx
+++ b/src/components/molecules/forms/fieldset.stories.tsx
@@ -1,5 +1,5 @@
import { ComponentMeta, ComponentStory } from '@storybook/react';
-import FieldsetComponent from './fieldset';
+import { Fieldset as FieldsetComponent } from './fieldset';
import { body, legend, Tooltip } from './fieldset.fixture';
/**
diff --git a/src/components/molecules/forms/fieldset.test.tsx b/src/components/molecules/forms/fieldset.test.tsx
index aec7a51..f397bcd 100644
--- a/src/components/molecules/forms/fieldset.test.tsx
+++ b/src/components/molecules/forms/fieldset.test.tsx
@@ -1,5 +1,5 @@
import { render, screen } from '../../../../tests/utils';
-import Fieldset from './fieldset';
+import { Fieldset } from './fieldset';
import { body, legend, Tooltip } from './fieldset.fixture';
describe('Fieldset', () => {
diff --git a/src/components/molecules/forms/fieldset.tsx b/src/components/molecules/forms/fieldset.tsx
index 4cbf71d..7564d14 100644
--- a/src/components/molecules/forms/fieldset.tsx
+++ b/src/components/molecules/forms/fieldset.tsx
@@ -6,9 +6,9 @@ import {
useRef,
useState,
} from 'react';
-import useOnClickOutside from '../../../utils/hooks/use-on-click-outside';
-import HelpButton from '../buttons/help-button';
-import Tooltip from '../modals/tooltip';
+import { useOnClickOutside } from '../../../utils/hooks';
+import { HelpButton } from '../buttons';
+import { Tooltip } from '../modals';
import styles from './fieldset.module.scss';
export type FieldsetProps = {
@@ -59,7 +59,7 @@ export type FieldsetProps = {
*
* Render a fieldset with a legend.
*/
-const Fieldset: FC<FieldsetProps> = ({
+export const Fieldset: FC<FieldsetProps> = ({
bodyClassName = '',
buttonClassName = '',
children,
@@ -92,17 +92,12 @@ const Fieldset: FC<FieldsetProps> = ({
};
const tooltipRef = useOnClickOutside<HTMLDivElement>(closeTooltip);
+ const fieldsetClass = `${styles.wrapper} ${styles[wrapperModifier]} ${className}`;
+ const legendClass = `${styles.legend} ${styles[legendModifier]} ${legendClassName}`;
return (
- <fieldset
- className={`${styles.wrapper} ${styles[wrapperModifier]} ${className}`}
- {...props}
- >
- <legend
- className={`${styles.legend} ${styles[legendModifier]} ${legendClassName}`}
- >
- {legend}
- </legend>
+ <fieldset {...props} className={fieldsetClass}>
+ <legend className={legendClass}>{legend}</legend>
{TooltipComponent && (
<>
<HelpButton
@@ -121,5 +116,3 @@ const Fieldset: FC<FieldsetProps> = ({
</fieldset>
);
};
-
-export default Fieldset;
diff --git a/src/components/molecules/forms/flipping-label.stories.tsx b/src/components/molecules/forms/flipping-label.stories.tsx
index 9391fd2..7dad3cb 100644
--- a/src/components/molecules/forms/flipping-label.stories.tsx
+++ b/src/components/molecules/forms/flipping-label.stories.tsx
@@ -1,7 +1,7 @@
import { ComponentMeta, ComponentStory } from '@storybook/react';
import { useState } from 'react';
-import MagnifyingGlass from '../../atoms/icons/magnifying-glass';
-import FlippingLabel from './flipping-label';
+import { MagnifyingGlass } from '../../atoms';
+import { FlippingLabel } from './flipping-label';
export default {
title: 'Organisms/Forms/FlippingLabel',
diff --git a/src/components/molecules/forms/flipping-label.test.tsx b/src/components/molecules/forms/flipping-label.test.tsx
index 61864fd..0f5dd30 100644
--- a/src/components/molecules/forms/flipping-label.test.tsx
+++ b/src/components/molecules/forms/flipping-label.test.tsx
@@ -1,5 +1,5 @@
import { render, screen } from '../../../../tests/utils';
-import FlippingLabel from './flipping-label';
+import { FlippingLabel } from './flipping-label';
describe('FlippingLabel', () => {
it('renders a label', () => {
diff --git a/src/components/molecules/forms/flipping-label.tsx b/src/components/molecules/forms/flipping-label.tsx
index ca83c6d..c85642b 100644
--- a/src/components/molecules/forms/flipping-label.tsx
+++ b/src/components/molecules/forms/flipping-label.tsx
@@ -1,6 +1,5 @@
import { FC } from 'react';
-import Label, { LabelProps } from '../../atoms/forms/label';
-import Close from '../../atoms/icons/close';
+import { Close, Label, type LabelProps } from '../../atoms';
import styles from './flipping-label.module.scss';
export type FlippingLabelProps = Pick<
@@ -17,7 +16,7 @@ export type FlippingLabelProps = Pick<
isActive: boolean;
};
-const FlippingLabel: FC<FlippingLabelProps> = ({
+export const FlippingLabel: FC<FlippingLabelProps> = ({
children,
className = '',
isActive,
@@ -26,7 +25,7 @@ const FlippingLabel: FC<FlippingLabelProps> = ({
const wrapperModifier = isActive ? 'wrapper--active' : 'wrapper--inactive';
return (
- <Label className={`${styles.label} ${className}`} {...props}>
+ <Label {...props} className={`${styles.label} ${className}`}>
<span className={`${styles.wrapper} ${styles[wrapperModifier]}`}>
<span className={styles.front}>{children}</span>
<span className={styles.back}>
@@ -36,5 +35,3 @@ const FlippingLabel: FC<FlippingLabelProps> = ({
</Label>
);
};
-
-export default FlippingLabel;
diff --git a/src/components/molecules/forms/index.ts b/src/components/molecules/forms/index.ts
new file mode 100644
index 0000000..4d0497d
--- /dev/null
+++ b/src/components/molecules/forms/index.ts
@@ -0,0 +1,10 @@
+export * from './ackee-toggle';
+export * from './fieldset';
+export * from './flipping-label';
+export * from './labelled-boolean-field';
+export * from './labelled-field';
+export * from './labelled-select';
+export * from './motion-toggle';
+export * from './prism-theme-toggle';
+export * from './radio-group';
+export * from './theme-toggle';
diff --git a/src/components/molecules/forms/labelled-boolean-field.stories.tsx b/src/components/molecules/forms/labelled-boolean-field.stories.tsx
index 6098b51..b1f8194 100644
--- a/src/components/molecules/forms/labelled-boolean-field.stories.tsx
+++ b/src/components/molecules/forms/labelled-boolean-field.stories.tsx
@@ -1,6 +1,6 @@
import { ComponentMeta, ComponentStory } from '@storybook/react';
import { useState } from 'react';
-import LabelledBooleanField from './labelled-boolean-field';
+import { LabelledBooleanField } from './labelled-boolean-field';
import { label } from './labelled-boolean-field.fixture';
/**
diff --git a/src/components/molecules/forms/labelled-boolean-field.test.tsx b/src/components/molecules/forms/labelled-boolean-field.test.tsx
index 4e7728c..6916f95 100644
--- a/src/components/molecules/forms/labelled-boolean-field.test.tsx
+++ b/src/components/molecules/forms/labelled-boolean-field.test.tsx
@@ -1,5 +1,5 @@
import { render, screen } from '../../../../tests/utils';
-import LabelledBooleanField from './labelled-boolean-field';
+import { LabelledBooleanField } from './labelled-boolean-field';
import { label } from './labelled-boolean-field.fixture';
describe('LabelledBooleanField', () => {
diff --git a/src/components/molecules/forms/labelled-boolean-field.tsx b/src/components/molecules/forms/labelled-boolean-field.tsx
index 661e549..d110d45 100644
--- a/src/components/molecules/forms/labelled-boolean-field.tsx
+++ b/src/components/molecules/forms/labelled-boolean-field.tsx
@@ -1,8 +1,10 @@
import { FC } from 'react';
-import BooleanField, {
+import {
+ BooleanField,
type BooleanFieldProps,
-} from '../../atoms/forms/boolean-field';
-import Label, { type LabelProps } from '../../atoms/forms/label';
+ Label,
+ type LabelProps,
+} from '../../atoms';
import styles from './labelled-boolean-field.module.scss';
export type LabelledBooleanFieldProps = Omit<
@@ -40,7 +42,7 @@ export type LabelledBooleanFieldProps = Omit<
*
* Render a checkbox or radio button with a label.
*/
-const LabelledBooleanField: FC<LabelledBooleanFieldProps> = ({
+export const LabelledBooleanField: FC<LabelledBooleanFieldProps> = ({
className = '',
fieldClassName,
hidden,
@@ -53,40 +55,31 @@ const LabelledBooleanField: FC<LabelledBooleanFieldProps> = ({
}) => {
const labelHiddenModifier = hidden ? 'label--hidden' : 'label--visible';
const labelPositionModifier = `label--${labelPosition}`;
+ const labelClass = `${styles[labelPositionModifier]} ${styles[labelHiddenModifier]} ${labelClassName}`;
return labelPosition === 'left' ? (
<span className={`${styles.wrapper} ${className}`}>
- <Label
- className={`${styles[labelPositionModifier]} ${styles[labelHiddenModifier]} ${labelClassName}`}
- htmlFor={id}
- size={labelSize}
- >
+ <Label className={labelClass} htmlFor={id} size={labelSize}>
{label}
</Label>
<BooleanField
+ {...props}
className={fieldClassName}
hidden={hidden}
id={id}
- {...props}
/>
</span>
) : (
<span className={`${styles.wrapper} ${className}`}>
<BooleanField
+ {...props}
className={fieldClassName}
hidden={hidden}
id={id}
- {...props}
/>
- <Label
- className={`${styles[labelPositionModifier]} ${styles[labelHiddenModifier]} ${labelClassName}`}
- htmlFor={id}
- size={labelSize}
- >
+ <Label className={labelClass} htmlFor={id} size={labelSize}>
{label}
</Label>
</span>
);
};
-
-export default LabelledBooleanField;
diff --git a/src/components/molecules/forms/labelled-field.stories.tsx b/src/components/molecules/forms/labelled-field.stories.tsx
index 795e785..840421b 100644
--- a/src/components/molecules/forms/labelled-field.stories.tsx
+++ b/src/components/molecules/forms/labelled-field.stories.tsx
@@ -1,6 +1,6 @@
import { ComponentMeta, ComponentStory } from '@storybook/react';
import { useState } from 'react';
-import LabelledField from './labelled-field';
+import { LabelledField } from './labelled-field';
/**
* LabelledField - Storybook Meta
diff --git a/src/components/molecules/forms/labelled-field.test.tsx b/src/components/molecules/forms/labelled-field.test.tsx
index 97681dc..e16c129 100644
--- a/src/components/molecules/forms/labelled-field.test.tsx
+++ b/src/components/molecules/forms/labelled-field.test.tsx
@@ -1,5 +1,5 @@
import { render, screen } from '../../../../tests/utils';
-import LabelledField from './labelled-field';
+import { LabelledField } from './labelled-field';
describe('LabelledField', () => {
it('renders a labelled field', () => {
diff --git a/src/components/molecules/forms/labelled-field.tsx b/src/components/molecules/forms/labelled-field.tsx
index 63c91fe..fca1c54 100644
--- a/src/components/molecules/forms/labelled-field.tsx
+++ b/src/components/molecules/forms/labelled-field.tsx
@@ -1,6 +1,5 @@
import { forwardRef, ForwardRefRenderFunction } from 'react';
-import Field, { type FieldProps } from '../../atoms/forms/field';
-import Label from '../../atoms/forms/label';
+import { Field, type FieldProps, Label } from '../../atoms';
import styles from './labelled-field.module.scss';
export type LabelledFieldProps = FieldProps & {
@@ -18,12 +17,7 @@ export type LabelledFieldProps = FieldProps & {
labelPosition?: 'left' | 'top';
};
-/**
- * LabelledField component
- *
- * Render a field tied to a label.
- */
-const LabelledField: ForwardRefRenderFunction<
+const LabelledFieldWithRef: ForwardRefRenderFunction<
HTMLInputElement,
LabelledFieldProps
> = (
@@ -47,4 +41,9 @@ const LabelledField: ForwardRefRenderFunction<
);
};
-export default forwardRef(LabelledField);
+/**
+ * LabelledField component
+ *
+ * Render a field tied to a label.
+ */
+export const LabelledField = forwardRef(LabelledFieldWithRef);
diff --git a/src/components/molecules/forms/labelled-select.stories.tsx b/src/components/molecules/forms/labelled-select.stories.tsx
index d02732c..d6029a5 100644
--- a/src/components/molecules/forms/labelled-select.stories.tsx
+++ b/src/components/molecules/forms/labelled-select.stories.tsx
@@ -1,6 +1,6 @@
import { ComponentMeta, ComponentStory } from '@storybook/react';
import { useState } from 'react';
-import LabelledSelect from './labelled-select';
+import { LabelledSelect } from './labelled-select';
const selectOptions = [
{ id: 'option1', name: 'Option 1', value: 'option1' },
diff --git a/src/components/molecules/forms/labelled-select.test.tsx b/src/components/molecules/forms/labelled-select.test.tsx
index 3823117..1ef4a25 100644
--- a/src/components/molecules/forms/labelled-select.test.tsx
+++ b/src/components/molecules/forms/labelled-select.test.tsx
@@ -1,5 +1,5 @@
import { render, screen } from '../../../../tests/utils';
-import LabelledSelect from './labelled-select';
+import { LabelledSelect } from './labelled-select';
const selectOptions = [
{ id: 'option1', name: 'Option 1', value: 'option1' },
diff --git a/src/components/molecules/forms/labelled-select.tsx b/src/components/molecules/forms/labelled-select.tsx
index a12956c..300ae8a 100644
--- a/src/components/molecules/forms/labelled-select.tsx
+++ b/src/components/molecules/forms/labelled-select.tsx
@@ -1,6 +1,5 @@
import { FC } from 'react';
-import Label, { type LabelProps } from '../../atoms/forms/label';
-import Select, { type SelectProps } from '../../atoms/forms/select';
+import { Label, type LabelProps, Select, type SelectProps } from '../../atoms';
import styles from './labelled-select.module.scss';
export type LabelledSelectProps = Omit<
@@ -34,7 +33,7 @@ export type LabelledSelectProps = Omit<
*
* Render a select with a label.
*/
-const LabelledSelect: FC<LabelledSelectProps> = ({
+export const LabelledSelect: FC<LabelledSelectProps> = ({
id,
label,
labelClassName = '',
@@ -49,21 +48,19 @@ const LabelledSelect: FC<LabelledSelectProps> = ({
return (
<>
<Label
+ className={`${styles[positionModifier]} ${labelClassName}`}
htmlFor={id}
required={required}
size={labelSize}
- className={`${styles[positionModifier]} ${labelClassName}`}
>
{label}
</Label>
<Select
- id={id}
- required={required}
{...props}
className={selectClassName}
+ id={id}
+ required={required}
/>
</>
);
};
-
-export default LabelledSelect;
diff --git a/src/components/molecules/forms/motion-toggle.stories.tsx b/src/components/molecules/forms/motion-toggle.stories.tsx
index 541ca8e..bb51e26 100644
--- a/src/components/molecules/forms/motion-toggle.stories.tsx
+++ b/src/components/molecules/forms/motion-toggle.stories.tsx
@@ -1,5 +1,5 @@
import { ComponentMeta, ComponentStory } from '@storybook/react';
-import MotionToggleComponent from './motion-toggle';
+import { MotionToggle } from './motion-toggle';
import { storageKey } from './motion-toggle.fixture';
/**
@@ -7,7 +7,7 @@ import { storageKey } from './motion-toggle.fixture';
*/
export default {
title: 'Molecules/Forms/Toggle',
- component: MotionToggleComponent,
+ component: MotionToggle,
argTypes: {
bodyClassName: {
control: {
@@ -70,10 +70,10 @@ export default {
},
},
},
-} as ComponentMeta<typeof MotionToggleComponent>;
+} as ComponentMeta<typeof MotionToggle>;
-const Template: ComponentStory<typeof MotionToggleComponent> = (args) => (
- <MotionToggleComponent {...args} />
+const Template: ComponentStory<typeof MotionToggle> = (args) => (
+ <MotionToggle {...args} />
);
/**
diff --git a/src/components/molecules/forms/motion-toggle.test.tsx b/src/components/molecules/forms/motion-toggle.test.tsx
index f6cf3ac..93df3a0 100644
--- a/src/components/molecules/forms/motion-toggle.test.tsx
+++ b/src/components/molecules/forms/motion-toggle.test.tsx
@@ -1,5 +1,5 @@
import { render, screen } from '../../../../tests/utils';
-import MotionToggle from './motion-toggle';
+import { MotionToggle } from './motion-toggle';
import { storageKey } from './motion-toggle.fixture';
describe('MotionToggle', () => {
diff --git a/src/components/molecules/forms/motion-toggle.tsx b/src/components/molecules/forms/motion-toggle.tsx
index 7e150ca..c1a55f0 100644
--- a/src/components/molecules/forms/motion-toggle.tsx
+++ b/src/components/molecules/forms/motion-toggle.tsx
@@ -1,8 +1,8 @@
import { FC } from 'react';
import { useIntl } from 'react-intl';
-import useAttributes from '../../../utils/hooks/use-attributes';
-import useLocalStorage from '../../../utils/hooks/use-local-storage';
-import RadioGroup, {
+import { useAttributes, useLocalStorage } from '../../../utils/hooks';
+import {
+ RadioGroup,
type RadioGroupCallback,
type RadioGroupCallbackProps,
type RadioGroupOption,
@@ -30,7 +30,7 @@ export type MotionToggleProps = Pick<
*
* Render a Toggle component to set reduce motion.
*/
-const MotionToggle: FC<MotionToggleProps> = ({
+export const MotionToggle: FC<MotionToggleProps> = ({
defaultValue,
storageKey,
...props
@@ -107,14 +107,12 @@ const MotionToggle: FC<MotionToggleProps> = ({
return (
<RadioGroup
+ {...props}
initialChoice={defaultValue}
kind="toggle"
legend={reduceMotionLabel}
onChange={handleChange}
options={options}
- {...props}
/>
);
};
-
-export default MotionToggle;
diff --git a/src/components/molecules/forms/prism-theme-toggle.stories.tsx b/src/components/molecules/forms/prism-theme-toggle.stories.tsx
index 86f9773..bf0f2df 100644
--- a/src/components/molecules/forms/prism-theme-toggle.stories.tsx
+++ b/src/components/molecules/forms/prism-theme-toggle.stories.tsx
@@ -1,5 +1,5 @@
import { ComponentMeta, ComponentStory } from '@storybook/react';
-import PrismThemeToggle from './prism-theme-toggle';
+import { PrismThemeToggle } from './prism-theme-toggle';
/**
* PrismThemeToggle - Storybook Meta
diff --git a/src/components/molecules/forms/prism-theme-toggle.test.tsx b/src/components/molecules/forms/prism-theme-toggle.test.tsx
index a488720..bd63762 100644
--- a/src/components/molecules/forms/prism-theme-toggle.test.tsx
+++ b/src/components/molecules/forms/prism-theme-toggle.test.tsx
@@ -1,5 +1,5 @@
import { render, screen } from '../../../../tests/utils';
-import PrismThemeToggle from './prism-theme-toggle';
+import { PrismThemeToggle } from './prism-theme-toggle';
describe('PrismThemeToggle', () => {
it('renders a toggle component', () => {
diff --git a/src/components/molecules/forms/prism-theme-toggle.tsx b/src/components/molecules/forms/prism-theme-toggle.tsx
index b058230..5427fec 100644
--- a/src/components/molecules/forms/prism-theme-toggle.tsx
+++ b/src/components/molecules/forms/prism-theme-toggle.tsx
@@ -4,9 +4,9 @@ import {
type PrismTheme,
usePrismTheme,
} from '../../../utils/providers/prism-theme';
-import Moon from '../../atoms/icons/moon';
-import Sun from '../../atoms/icons/sun';
-import RadioGroup, {
+import { Moon, Sun } from '../../atoms';
+import {
+ RadioGroup,
type RadioGroupCallback,
type RadioGroupCallbackProps,
type RadioGroupOption,
@@ -23,7 +23,7 @@ export type PrismThemeToggleProps = Pick<
*
* Render a Toggle component to set code blocks theme.
*/
-const PrismThemeToggle: FC<PrismThemeToggleProps> = (props) => {
+export const PrismThemeToggle: FC<PrismThemeToggleProps> = (props) => {
const intl = useIntl();
const { theme, setTheme, resolvedTheme } = usePrismTheme();
@@ -107,14 +107,12 @@ const PrismThemeToggle: FC<PrismThemeToggleProps> = (props) => {
return (
<RadioGroup
+ {...props}
initialChoice={isDarkTheme(theme) ? 'dark' : 'light'}
kind="toggle"
legend={themeLabel}
onChange={handleChange}
options={options}
- {...props}
/>
);
};
-
-export default PrismThemeToggle;
diff --git a/src/components/molecules/forms/radio-group.stories.tsx b/src/components/molecules/forms/radio-group.stories.tsx
index de5da7c..b727e28 100644
--- a/src/components/molecules/forms/radio-group.stories.tsx
+++ b/src/components/molecules/forms/radio-group.stories.tsx
@@ -1,5 +1,5 @@
import { ComponentMeta, ComponentStory } from '@storybook/react';
-import RadioGroup from './radio-group';
+import { RadioGroup } from './radio-group';
import { getOptions, initialChoice, legend } from './radio-group.fixture';
/**
diff --git a/src/components/molecules/forms/radio-group.test.tsx b/src/components/molecules/forms/radio-group.test.tsx
index 9fb4249..c4a01e4 100644
--- a/src/components/molecules/forms/radio-group.test.tsx
+++ b/src/components/molecules/forms/radio-group.test.tsx
@@ -1,5 +1,5 @@
import { render, screen } from '../../../../tests/utils';
-import RadioGroup from './radio-group';
+import { RadioGroup } from './radio-group';
import { getOptions, initialChoice, legend } from './radio-group.fixture';
describe('RadioGroup', () => {
diff --git a/src/components/molecules/forms/radio-group.tsx b/src/components/molecules/forms/radio-group.tsx
index 7f47673..a747395 100644
--- a/src/components/molecules/forms/radio-group.tsx
+++ b/src/components/molecules/forms/radio-group.tsx
@@ -1,7 +1,8 @@
import { ChangeEvent, FC, MouseEvent, SetStateAction } from 'react';
-import useStateChange from '../../../utils/hooks/use-state-change';
-import Fieldset, { type FieldsetProps } from '../forms/fieldset';
-import LabelledBooleanField, {
+import { useStateChange } from '../../../utils/hooks';
+import { Fieldset, type FieldsetProps } from './fieldset';
+import {
+ LabelledBooleanField,
type LabelledBooleanFieldProps,
} from './labelled-boolean-field';
import styles from './radio-group.module.scss';
@@ -74,7 +75,7 @@ export type RadioGroupProps = Pick<
*
* Render a group of labelled radio buttons.
*/
-const RadioGroup: FC<RadioGroupProps> = ({
+export const RadioGroup: FC<RadioGroupProps> = ({
className,
groupClassName = '',
initialChoice,
@@ -93,6 +94,7 @@ const RadioGroup: FC<RadioGroupProps> = ({
const isToggle = kind === 'toggle';
const alignmentModifier = `wrapper--${legendPosition}`;
const toggleModifier = isToggle ? 'wrapper--toggle' : 'wrapper--regular';
+ const fieldsetClass = `${styles.wrapper} ${styles[alignmentModifier]} ${styles[toggleModifier]} ${className}`;
/**
* Update the selected choice on click or change event.
@@ -119,6 +121,7 @@ const RadioGroup: FC<RadioGroupProps> = ({
const getOptions = (): JSX.Element[] => {
return options.map((option) => (
<LabelledBooleanField
+ {...option}
key={option.id}
checked={selectedChoice === option.value}
className={`${styles.option} ${optionClassName}`}
@@ -130,18 +133,17 @@ const RadioGroup: FC<RadioGroupProps> = ({
onChange={updateChoice}
onClick={updateChoice}
type="radio"
- {...option}
/>
));
};
return (
<Fieldset
- className={`${styles.wrapper} ${styles[alignmentModifier]} ${styles[toggleModifier]} ${className}`}
+ {...props}
+ className={fieldsetClass}
legendClassName={`${styles.legend} ${legendClassName}`}
legendPosition={legendPosition}
role="radiogroup"
- {...props}
>
{isToggle ? (
<span className={`${styles.toggle} ${groupClassName}`}>
@@ -153,5 +155,3 @@ const RadioGroup: FC<RadioGroupProps> = ({
</Fieldset>
);
};
-
-export default RadioGroup;
diff --git a/src/components/molecules/forms/theme-toggle.stories.tsx b/src/components/molecules/forms/theme-toggle.stories.tsx
index ff1034d..40f4d8c 100644
--- a/src/components/molecules/forms/theme-toggle.stories.tsx
+++ b/src/components/molecules/forms/theme-toggle.stories.tsx
@@ -1,5 +1,5 @@
import { ComponentMeta, ComponentStory } from '@storybook/react';
-import ThemeToggle from './theme-toggle';
+import { ThemeToggle } from './theme-toggle';
/**
* ThemeToggle - Storybook Meta
diff --git a/src/components/molecules/forms/theme-toggle.test.tsx b/src/components/molecules/forms/theme-toggle.test.tsx
index d379423..aae627a 100644
--- a/src/components/molecules/forms/theme-toggle.test.tsx
+++ b/src/components/molecules/forms/theme-toggle.test.tsx
@@ -1,5 +1,5 @@
import { render, screen } from '../../../../tests/utils';
-import ThemeToggle from './theme-toggle';
+import { ThemeToggle } from './theme-toggle';
describe('ThemeToggle', () => {
it('renders a toggle component', () => {
diff --git a/src/components/molecules/forms/theme-toggle.tsx b/src/components/molecules/forms/theme-toggle.tsx
index e0a6683..25e2a39 100644
--- a/src/components/molecules/forms/theme-toggle.tsx
+++ b/src/components/molecules/forms/theme-toggle.tsx
@@ -1,9 +1,9 @@
import { useTheme } from 'next-themes';
import { FC } from 'react';
import { useIntl } from 'react-intl';
-import Moon from '../../atoms/icons/moon';
-import Sun from '../../atoms/icons/sun';
-import RadioGroup, {
+import { Moon, Sun } from '../../atoms';
+import {
+ RadioGroup,
type RadioGroupCallback,
type RadioGroupCallbackProps,
type RadioGroupOption,
@@ -20,7 +20,7 @@ export type ThemeToggleProps = Pick<
*
* Render a Toggle component to set theme.
*/
-const ThemeToggle: FC<ThemeToggleProps> = (props) => {
+export const ThemeToggle: FC<ThemeToggleProps> = (props) => {
const intl = useIntl();
const { resolvedTheme, setTheme } = useTheme();
const isDarkTheme = resolvedTheme === 'dark';
@@ -95,14 +95,12 @@ const ThemeToggle: FC<ThemeToggleProps> = (props) => {
return (
<RadioGroup
+ {...props}
initialChoice={isDarkTheme ? 'dark' : 'light'}
kind="toggle"
legend={themeLabel}
onChange={handleChange}
options={options}
- {...props}
/>
);
};
-
-export default ThemeToggle;