mirror of
https://github.com/mastodon/mastodon.git
synced 2026-08-11 14:55:34 -05:00
Redesign Components: Text Input (#39941)
This commit is contained in:
@@ -1,5 +1,41 @@
|
||||
.inputWrapper {
|
||||
label {
|
||||
font-size: var(--fs-sm);
|
||||
}
|
||||
|
||||
span {
|
||||
color: var(--color-text-tertiary);
|
||||
font-size: var(--fs-2xs);
|
||||
line-height: var(--fs-lg);
|
||||
}
|
||||
}
|
||||
|
||||
input.input {
|
||||
font-size: var(--fs-lg);
|
||||
background: none;
|
||||
border-radius: var(--space-xs);
|
||||
border: 0.5px solid var(--color-text-tertiary);
|
||||
padding: var(--space-xs);
|
||||
transition: background 200ms;
|
||||
|
||||
&:hover:not(:disabled) {
|
||||
box-shadow: 0 1px var(--space-2xs) 0
|
||||
rgb(from var(--color-text-primary) r g b / 10%);
|
||||
background: var(--color-bg-highlight);
|
||||
}
|
||||
|
||||
&:focus {
|
||||
outline: 2px solid var(--color-border-strong);
|
||||
}
|
||||
|
||||
&:disabled {
|
||||
border-color: var(--color-bg-disabled);
|
||||
}
|
||||
}
|
||||
|
||||
// Use double class to override original styles.
|
||||
.toggle.toggle {
|
||||
background: rgb(from var(--color-bg-inverted) r g b / 70%);
|
||||
background: var(--color-text-tertiary);
|
||||
|
||||
&::before {
|
||||
box-shadow: none;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { Meta, StoryObj } from '@storybook/react-vite';
|
||||
|
||||
import { ToggleField } from './redesign';
|
||||
import { TextInputField, ToggleField } from './redesign';
|
||||
|
||||
interface FieldProps {
|
||||
label: string;
|
||||
@@ -19,12 +19,21 @@ const meta = {
|
||||
hint: 'This is a description of this form field',
|
||||
disabled: false,
|
||||
},
|
||||
parameters: {
|
||||
redesign: true,
|
||||
},
|
||||
} satisfies Meta<FieldProps>;
|
||||
|
||||
export default meta;
|
||||
|
||||
type Story = StoryObj<typeof meta>;
|
||||
|
||||
export const TextInput: Story = {
|
||||
render(args) {
|
||||
return <TextInputField {...args} />;
|
||||
},
|
||||
};
|
||||
|
||||
export const Toggle: Story = {
|
||||
render(args) {
|
||||
return <ToggleField {...args} />;
|
||||
|
||||
@@ -3,22 +3,49 @@ import classNames from 'classnames';
|
||||
import type { Merge } from 'type-fest';
|
||||
|
||||
import classes from './redesign.module.scss';
|
||||
import {
|
||||
TextInput as OldTextInput,
|
||||
TextInputField as OldTextInputField,
|
||||
} from './text_input_field';
|
||||
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';
|
||||
}
|
||||
>
|
||||
>;
|
||||
type RedesignComponent<
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
T extends React.JSXElementConstructor<any>,
|
||||
P = object,
|
||||
> = React.FC<Merge<React.ComponentProps<T>, P>>;
|
||||
|
||||
export const Toggle: ToggleComponent<typeof OldToggle> = ({
|
||||
// Text field
|
||||
|
||||
export const TextInputField: RedesignComponent<typeof OldTextInputField> = ({
|
||||
className,
|
||||
wrapperClassName,
|
||||
...props
|
||||
}) => (
|
||||
<OldTextInputField
|
||||
{...props}
|
||||
className={classNames(className, classes.input)}
|
||||
wrapperClassName={classNames(wrapperClassName, classes.inputWrapper)}
|
||||
/>
|
||||
);
|
||||
|
||||
export const TextInput: RedesignComponent<typeof OldTextInput> = ({
|
||||
className,
|
||||
...props
|
||||
}) => (
|
||||
<OldTextInput {...props} className={classNames(className, classes.input)} />
|
||||
);
|
||||
|
||||
// Toggles
|
||||
|
||||
interface ToggleProps {
|
||||
size?: 'sm' | 'lg';
|
||||
}
|
||||
|
||||
export const Toggle: RedesignComponent<typeof OldToggle, ToggleProps> = ({
|
||||
className,
|
||||
size,
|
||||
...props
|
||||
@@ -33,11 +60,10 @@ export const Toggle: ToggleComponent<typeof OldToggle> = ({
|
||||
/>
|
||||
);
|
||||
|
||||
export const ToggleField: ToggleComponent<typeof OldToggleField> = ({
|
||||
className,
|
||||
size,
|
||||
...props
|
||||
}) => (
|
||||
export const ToggleField: RedesignComponent<
|
||||
typeof OldToggleField,
|
||||
ToggleProps
|
||||
> = ({ className, size, ...props }) => (
|
||||
<OldToggleField
|
||||
{...props}
|
||||
className={classNames(
|
||||
|
||||
Reference in New Issue
Block a user