# ldesign-select **Repository Path**: ldesign-v1/ldesign-select ## Basic Information - **Project Name**: ldesign-select - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-23 - **Last Updated**: 2026-07-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # @ldesign/select 下拉选择器组件库 — 框架无关的核心库 + Vue 3 适配层 ## 📋 项目简介 `@ldesign/select` 是一个功能完整的下拉选择器组件库,采用 **Core + Vue** 双层架构: - `@ldesign/select-core` — 框架无关的核心逻辑(状态机 + DOM 渲染器) - `@ldesign/select-vue` — Vue 3 组件封装 ## ✨ 核心特性 ### 📝 选择模式 - **单选模式** — 标准下拉单选 - **多选模式** — 标签式多选,支持 maxTagCount - **树形选择** — 多层级树形结构 ### 🔍 搜索 - **本地搜索** — 基于 label 的模糊匹配 - **远程搜索** — 通过 `remoteMethod` 异步加载选项 - **自定义过滤** — 通过 `filterFn` 自定义搜索逻辑 ### 🎨 自定义渲染 - **renderOption** — 自定义选项 HTML 渲染 - **renderLabel** — 自定义触发器标签文本 ### ⌨️ 键盘导航 - `↑↓` 切换选项、`←→` 展开/折叠树节点 - `Enter` 确认选择、`Escape` 关闭 - `Backspace` 删除最后标签(多选模式) ### 📐 尺寸变体 - `small` / `medium`(默认)/ `large` ### 🎯 设计系统集成 - 颜色引用 `packages/color` 生成的 `--ld-*` 全局 CSS 变量 - 尺寸引用 `packages/size` 生成的 `--ld-*` 全局 CSS 变量 - 所有 class 以 `ldesign-` 为前缀 - 自动适配 light/dark 主题 ### 🔧 其他功能 - **Loading 状态** — 远程搜索时自动显示加载指示器 - **Form 集成** — 自动生成隐藏 `` 用于表单提交 - **自动翻转** — 空间不足时下拉面板自动向上展开 ## 🚀 快速开始 ### 安装 ```bash pnpm add @ldesign/select-vue ``` ### Vue 组件使用 ```vue ``` ### 多选 + 远程搜索 ```vue ``` ### Core 直接使用(无框架) ```ts import { SelectCore, createSelect } from '@ldesign/select-core' const select = createSelect({ options: [ { value: '1', label: '选项1' }, { value: '2', label: '选项2' }, ], placeholder: '请选择', searchable: true, allowClear: true, }) select.on('change', (value) => console.log('选中:', value)) select.setValue('1') ``` ### DOM 渲染器使用 ```ts import { SelectDOM } from '@ldesign/select-core' import '@ldesign/select-core/styles/select.css' const select = new SelectDOM({ container: '#my-select', options: [...], searchable: true, size: 'large', theme: { primaryColor: '#667eea' }, }) ``` ## 📁 项目结构 ``` select/ ├── packages/ │ ├── core/ # @ldesign/select-core │ │ ├── src/ │ │ │ ├── types.ts # 类型定义 │ │ │ ├── core/ # SelectCore 状态机 │ │ │ ├── dom/ # SelectDOM 渲染器 │ │ │ ├── utils/ # 过滤/键盘/树形工具 │ │ │ └── styles/ # CSS 样式 │ │ └── package.json │ └── vue/ # @ldesign/select-vue │ ├── src/ │ │ ├── components/ # Vue 组件 │ │ ├── composables/ # useSelect │ │ └── plugins/ # Vue 插件 │ └── package.json └── README.md ``` ## 📦 构建产物 | 目录 | 格式 | 说明 | |------|------|------| | `es/` | ESM | ES Modules(preserveModules) | | `esm/` | ESM | ES Modules(保留模块结构) | | `lib/` | CJS | CommonJS(.cjs 后缀) | | `dist/` | UMD | 浏览器直接引用 | ## 📄 许可证 MIT License