diff --git a/app/javascript/mastodon/components/form_fields/redesign.module.scss b/app/javascript/mastodon/components/form_fields/redesign.module.scss new file mode 100644 index 00000000000..5072e0efe84 --- /dev/null +++ b/app/javascript/mastodon/components/form_fields/redesign.module.scss @@ -0,0 +1,19 @@ +.toggle.toggle { + background: rgb(from var(--color-bg-inverted) r g b / 70%); + + &::before { + box-shadow: none; + background: var(--color-bg-primary); + } +} + +.toggle.toggleSmall { + --padding: 2px; + --diameter: 14px; + + width: 32px; +} + +input:checked + .toggle.toggleSmall::before { + transform: translateX(var(--diameter)); +} diff --git a/app/javascript/mastodon/components/form_fields/redesign.stories.tsx b/app/javascript/mastodon/components/form_fields/redesign.stories.tsx new file mode 100644 index 00000000000..d87460c8cdc --- /dev/null +++ b/app/javascript/mastodon/components/form_fields/redesign.stories.tsx @@ -0,0 +1,38 @@ +import type { Meta, StoryObj } from '@storybook/react-vite'; + +import { ToggleField } from './redesign'; + +interface FieldProps { + label: string; + hint?: string; + disabled?: boolean; +} + +const meta = { + title: 'Redesign/Form Fields', + // eslint-disable-next-line @typescript-eslint/no-unused-vars -- We need to add args or TS doesn't see it in other render functions. + render(args) { + return <>Empty; // Override elsewhere + }, + args: { + label: 'Label', + hint: 'This is a description of this form field', + disabled: false, + }, +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const Toggle: Story = { + render(args) { + return ; + }, +}; + +export const ToggleSmall: Story = { + render(args) { + return ; + }, +}; diff --git a/app/javascript/mastodon/components/form_fields/redesign.tsx b/app/javascript/mastodon/components/form_fields/redesign.tsx new file mode 100644 index 00000000000..e5b73b44ee5 --- /dev/null +++ b/app/javascript/mastodon/components/form_fields/redesign.tsx @@ -0,0 +1,49 @@ +import classNames from 'classnames'; + +import type { Merge } from 'type-fest'; + +import classes from './redesign.module.scss'; +import { + Toggle as OldToggle, + ToggleField as OldToggleField, +} from './toggle_field'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type ToggleComponent> = React.FC< + Merge< + React.ComponentProps, + { + size?: 'sm' | 'lg'; + } + > +>; + +export const Toggle: ToggleComponent = ({ + className, + size, + ...props +}) => ( + +); + +export const ToggleField: ToggleComponent = ({ + className, + size, + ...props +}) => ( + +);