Toggles with redesign tokens (#39917)

This commit is contained in:
Echo
2026-07-23 14:06:59 +02:00
committed by GitHub
parent db5e19da58
commit 89f4ef2bf0
3 changed files with 106 additions and 0 deletions

View File

@@ -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));
}

View File

@@ -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<FieldProps>;
export default meta;
type Story = StoryObj<typeof meta>;
export const Toggle: Story = {
render(args) {
return <ToggleField {...args} />;
},
};
export const ToggleSmall: Story = {
render(args) {
return <ToggleField {...args} size='sm' />;
},
};

View File

@@ -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<T extends React.JSXElementConstructor<any>> = React.FC<
Merge<
React.ComponentProps<T>,
{
size?: 'sm' | 'lg';
}
>
>;
export const Toggle: ToggleComponent<typeof OldToggle> = ({
className,
size,
...props
}) => (
<OldToggle
{...props}
className={classNames(
className,
classes.toggle,
size === 'sm' && classes.toggleSmall,
)}
/>
);
export const ToggleField: ToggleComponent<typeof OldToggleField> = ({
className,
size,
...props
}) => (
<OldToggleField
{...props}
className={classNames(
className,
classes.toggle,
size === 'sm' && classes.toggleSmall,
)}
/>
);