haob-design

输入框

一个功能齐全、可高度定制的输入框组件,支持多种类型、状态和样式,适用于各种表单场景。

安装

npx
npx hb-design-cli add input

预览

浏览并体验不同样式和状态的输入框组件。

使用示例

组件
import { Input } from '@/components/ui/input'

组件源码

组件

import React from 'react';

export interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {
  variant?: 'default' | 'outline' | 'filled';
  size?: 'sm' | 'md' | 'lg';
}

export const Inputs = React.forwardRef<HTMLInputElement, InputProps>(
  ({ className, variant = 'default', size = 'md', ...props }, ref) => {
    const baseClasses = 'w-full rounded-md font-medium transition-all focus-visible:outline-none border-2 focus-visible:border-blue-500/70  disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50';
    
    const variantClasses = {
      default: "bg-transparent border-input border",
      outline: "bg-transparent border-input border focus-visible:border-blue-500/70 ",
      filled: "bg-muted border-transparent focus-visible:bg-background focus-visible:border-blue-500/70  "
    };
    
    const sizeClasses = {
      sm: "h-9 px-2 text-sm",
      md: "h-10 px-3 text-base",
      lg: "h-12 px-4 text-lg"
    };
    

    const placeholderClasses = "placeholder:text-muted-foreground";
    

    const selectionClasses = "selection:bg-primary selection:text-primary-foreground";
    
    const classes = (
      [baseClasses].filter(Boolean).join(" "),
      variantClasses[variant],
      sizeClasses[size],
      placeholderClasses,
      selectionClasses,
      className
    );

    return (
      <input
        ref={ref}
        className={classes}
        {...props}
      />
    );
  }
);

Inputs.displayName = "Input";

属性说明

属性名类型默认值说明
typestringtext输入框类型
placeholderstring-占位文本
valuestring-输入值
onChangefunction-值变化回调
disabledbooleanfalse是否禁用
aria-invalidbooleanfalse错误状态
classNamestring-自定义样式