/**
 * 表单输入组件共享基础
 * 统一 size / disabled / clearable / modelValue 这一组在 Input / Select / Cascader /
 * DatePicker / InputNumber / TimePicker 等组件中重复出现的包装模式。
 *
 * 设计原则：纯函数 + 类型导出，不引入基类继承，避免 Stencil 装饰器在继承链上的隐式行为。
 * 组件按需 import 对应工具，渲染时调用即可。
 */
/** 全部合法尺寸，用于运行期校验 */
export const COMPONENT_SIZES = ['large', 'default', 'small'];
/**
 * 生成尺寸 class 名：buildSizeClass('hb-input', 'large') -> 'hb-input--large'
 * 用于替代各组件 render 中重复的 `[`hb-input--${this.size}`]: true` 模板字面量。
 */
export function buildSizeClass(base, size) {
    const normalized = size && COMPONENT_SIZES.includes(size) ? size : 'default';
    return `${base}--${normalized}`;
}
/**
 * 判定清空按钮是否应显示。
 * 抽取自 Input/Select/Cascader 中重复的 `clearable && !disabled && !readonly && hasValue`。
 */
export function isClearVisible(options) {
    return Boolean(options.clearable && !options.disabled && !options.readonly && options.hasValue);
}
/**
 * 判定一个值是否「非空」（用于清空按钮显隐）。
 * 兼容字符串、数字、数组（多选）。
 */
export function hasInputValue(value) {
    if (value === null || value === undefined)
        return false;
    if (typeof value === 'string')
        return value.length > 0;
    if (typeof value === 'number')
        return !Number.isNaN(value);
    if (Array.isArray(value))
        return value.length > 0;
    return true;
}
/**
 * 尺寸 class 集合生成器：返回包含 base 与 size class 的对象，可直接展开进 JSX class 绑定。
 * 例：sizeClassMap('hb-input', 'large', this.size) -> { 'hb-input': true, 'hb-input--large': true }
 */
export function sizeClassMap(base, size) {
    return { [base]: true, [buildSizeClass(base, size)]: true };
}
//# sourceMappingURL=form-input-base.js.map
