mirror of https://github.com/buster-so/buster.git
create in put component
This commit is contained in:
parent
de8d6783f2
commit
e3b5f9c991
|
@ -19,6 +19,10 @@ const meta: Meta<typeof Input> = {
|
||||||
},
|
},
|
||||||
placeholder: {
|
placeholder: {
|
||||||
control: 'text'
|
control: 'text'
|
||||||
|
},
|
||||||
|
type: {
|
||||||
|
control: 'select',
|
||||||
|
options: ['text', 'textarea', 'number', 'email', 'password']
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,20 +1,21 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { cn } from '@/lib/classMerge';
|
import { cn } from '@/lib/classMerge';
|
||||||
import { cva, type VariantProps } from 'class-variance-authority';
|
import { cva, type VariantProps } from 'class-variance-authority';
|
||||||
|
import { useMemoizedFn } from 'ahooks';
|
||||||
|
|
||||||
const inputVariants = cva(
|
const inputVariants = cva(
|
||||||
'flex w-full rounded-md border px-2.5 text-base transition-all duration-200 disabled:cursor-not-allowed disabled:bg-disabled disabled:text-gray-light ',
|
'flex w-full rounded border px-2.5 text-base transition-all duration-200 disabled:cursor-not-allowed disabled:bg-item-select disabled:text-gray-light ',
|
||||||
{
|
{
|
||||||
variants: {
|
variants: {
|
||||||
variant: {
|
variant: {
|
||||||
default:
|
default:
|
||||||
'shadow bg-background border placeholder:text-gray-light hover:border-primary focus:border-primary focus-visible:border-primary outline-none',
|
'shadow bg-background border placeholder:text-gray-light hover:border-primary focus:border-primary focus-visible:border-primary outline-none disabled:border-border',
|
||||||
ghost: 'border-none bg-transparent shadow-none'
|
ghost: 'border-none bg-transparent shadow-none'
|
||||||
},
|
},
|
||||||
size: {
|
size: {
|
||||||
default: 'h-7',
|
default: 'h-7',
|
||||||
tall: 'h-8',
|
tall: 'h-8',
|
||||||
small: 'h-[18px]'
|
small: 'h-6'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,15 +23,36 @@ const inputVariants = cva(
|
||||||
|
|
||||||
export interface InputProps
|
export interface InputProps
|
||||||
extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,
|
extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,
|
||||||
VariantProps<typeof inputVariants> {}
|
VariantProps<typeof inputVariants> {
|
||||||
|
onPressEnter?: (e: React.KeyboardEvent<HTMLInputElement>) => void;
|
||||||
|
}
|
||||||
|
|
||||||
export const Input = React.forwardRef<HTMLInputElement, InputProps>(
|
export const Input = React.forwardRef<HTMLInputElement, InputProps>(
|
||||||
({ className, size = 'default', variant = 'default', type = 'text', ...props }, ref) => {
|
(
|
||||||
|
{
|
||||||
|
className,
|
||||||
|
size = 'default',
|
||||||
|
variant = 'default',
|
||||||
|
type = 'text',
|
||||||
|
onPressEnter,
|
||||||
|
onKeyDown,
|
||||||
|
...props
|
||||||
|
},
|
||||||
|
ref
|
||||||
|
) => {
|
||||||
|
const handleKeyDown = useMemoizedFn((e: React.KeyboardEvent<HTMLInputElement>) => {
|
||||||
|
if (e.key === 'Enter' && onPressEnter) {
|
||||||
|
onPressEnter(e);
|
||||||
|
}
|
||||||
|
onKeyDown?.(e);
|
||||||
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<input
|
<input
|
||||||
type={type}
|
type={type}
|
||||||
className={cn(inputVariants({ size, variant }), className)}
|
className={cn(inputVariants({ size, variant }), className)}
|
||||||
ref={ref}
|
ref={ref}
|
||||||
|
onKeyDown={handleKeyDown}
|
||||||
{...props}
|
{...props}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in New Issue