# designable **Repository Path**: bill_law6/designable ## Basic Information - **Project Name**: designable - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-05-14 - **Last Updated**: 2025-07-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Designable 项目 - 通用可视化拖拽设计器

--- ## 项目简介 Designable 是一个通用的可视化拖拽设计器引擎,专为构建表单设计器、图表设计器、应用构建器等低代码/无代码场景而设计。基于现代化的 React/Vue 生态系统,提供了完整的设计器解决方案。 ### 核心特性 - 🚀 **高性能**:流畅美观的拖拽体验,采用虚拟滚动和优化渲染 - 💡 **全场景覆盖**:支持表单、图表、页面等多种设计场景 - 🎨 **低代码/无代码**:可视化操作,无需编写代码 - 🏅 **强扩展性**:插件化架构,易于定制和扩展 - 🔧 **现代化架构**:基于 Vite、TypeScript、Vitest 构建 - 🌍 **多框架支持**:同时支持 React 和 Vue 框架 ## 在线预览 - [基础示例](https://designable.netlify.app) - [Antd 组件库示例](https://localhost:5173) - [Shadcn 组件库示例](https://localhost:3100) ## 项目结构 ``` designable/ ├── packages/ # 核心包 │ ├── core/ # 设计器核心引擎 │ ├── shared/ # 共享工具库 │ ├── react/ # React 适配层 │ ├── vue/ # Vue 适配层 │ ├── react-sandbox/ # React 沙箱组件 │ └── react-settings-form/ # 属性设置表单 ├── formily/ # Formily 集成 │ ├── antd/ # Ant Design 组件库 │ ├── shadcn/ # Shadcn/UI 组件库 │ ├── setters/ # 属性设置器 │ └── transformer/ # 数据转换器 ├── examples/ # 示例项目 │ ├── basic/ # 基础示例 │ ├── sandbox/ # 沙箱示例 │ └── multi-workspace/ # 多工作区示例 ├── docs/ # 文档 └── scripts/ # 构建脚本 ``` ## 快速开始 ### 环境要求 - Node.js >= 16.0.0 - pnpm >= 8.0.0 ### 安装依赖 ```bash # 安装项目依赖 pnpm install # 构建所有包 pnpm run build ``` ### 本地开发 ```bash # 启动开发模式(监听文件变化自动重新构建) pnpm run dev # 启动不同示例项目 pnpm run start:basic # 基础示例 (http://localhost:5174) pnpm run start:shadcn # Shadcn 示例 (http://localhost:3100) pnpm run start:sandbox # 沙箱示例 (http://localhost:5174) pnpm run start:designable # Antd 示例 (http://localhost:3000) ``` ### 运行测试 ```bash # 运行所有测试 pnpm run test # 监听模式运行测试 pnpm run test:watch # 生成测试覆盖率报告 pnpm run test:coverage # 运行测试 UI 界面 pnpm run test:ui ``` ### 代码质量检查 ```bash # 代码格式检查和修复 pnpm run lint # 仅检查不修复 pnpm run lint:check # TypeScript 类型检查 pnpm run type-check ``` ## 核心概念 ### 设计器引擎 (Engine) 设计器引擎是整个系统的核心,负责管理设计器的状态、事件和生命周期。 ```typescript import { Engine } from '@bill_law6/designable-core' const engine = new Engine({ drivers: [], // 驱动器配置 effects: [], // 副作用配置 shortcuts: [], // 快捷键配置 }) ``` ### 树节点系统 (TreeNode) TreeNode 是设计器中所有组件的抽象表示,支持树形结构的增删改查操作。 ```typescript import { TreeNode } from '@bill_law6/designable-core' const node = new TreeNode({ componentName: 'Form', props: { title: '表单标题' }, children: [] }) ``` ### 组件资源 (Resources) 组件资源定义了可以拖拽到设计器中的组件列表。 ```typescript import { ComponentResource } from '@bill_law6/designable-react' const resources = [ { componentName: 'Form', title: '表单', icon: 'FormOutlined', elements: [ { componentName: 'Form', props: {} } ] } ] ``` ## 开发指南 ### 创建自定义组件 1. **定义组件资源**: ```typescript // 定义组件行为 export const FormBehavior = createBehavior({ name: 'Form', extends: ['Field'], selector: (node) => node.componentName === 'Form', designerProps: { droppable: true, cloneable: true, deletable: true, }, designerLocales: { 'zh-CN': { title: '表单', addFormItem: '添加表单项', } } }) // 定义组件资源 export const FormResource = createResource({ icon: 'FormOutlined', elements: [ { componentName: 'Form', props: { labelCol: 6, wrapperCol: 12, }, }, ], }) ``` 2. **注册组件**: ```typescript import { GlobalRegistry } from '@bill_law6/designable-core' GlobalRegistry.registerDesignerBehaviors(FormBehavior) GlobalRegistry.registerDesignerIcons({ FormOutlined }) ``` ### 构建打包 ```bash # 构建所有包 pnpm run build # 构建特定包 pnpm --filter @bill_law6/designable-core run build # 清理构建产物 pnpm run clean ``` ### 版本发布 ```bash # 版本升级 pnpm run version:patch # 补丁版本 x.x.1 pnpm run version:minor # 次版本 x.1.x pnpm run version:major # 主版本 1.x.x # 发布到 npm pnpm run release ``` ## 可用包列表 | 包名 | 版本 | 描述 | |------|------|------| | @bill_law6/designable-core | 1.0.8 | 设计器核心引擎 | | @bill_law6/designable-shared | 1.0.8 | 共享工具库 | | @bill_law6/designable-react | 1.0.8 | React 适配层 | | @bill_law6/designable-vue | 1.0.8 | Vue 适配层 | | @bill_law6/designable-react-sandbox | 1.0.8 | React 沙箱组件 | | @bill_law6/designable-react-settings-form | 1.0.8 | 属性设置表单 | | @bill_law6/designable-formily-antd | 1.0.8 | Antd 组件库 | | @bill_law6/designable-formily-shadcn | 1.0.8 | Shadcn 组件库 | | @bill_law6/designable-formily-setters | 1.0.8 | 属性设置器 | | @bill_law6/designable-formily-transformer | 1.0.8 | 数据转换器 | ## 技术栈 - **构建工具**: Vite 5.x - **包管理**: pnpm 8.x + Lerna 8.x - **开发语言**: TypeScript 5.x - **测试框架**: Vitest 1.x - **UI 框架**: React 18.x / Vue 3.x - **组件库**: Ant Design 5.x / Shadcn/UI - **状态管理**: @formily/reactive - **样式处理**: Less / CSS Modules ## 设计理念 ### 1. 响应式架构 基于 @formily/reactive 的响应式状态管理,确保数据变化时 UI 的自动更新。 ### 2. 可插拔设计 采用插件化架构,核心功能通过插件扩展,支持自定义驱动器、副作用和快捷键。 ### 3. 多框架支持 通过适配层模式,同时支持 React 和 Vue 框架,共享核心逻辑。 ### 4. 类型安全 全面使用 TypeScript,提供完整的类型定义和类型推导。 ### 5. 性能优化 - 虚拟滚动优化大量节点渲染 - 异步组件加载减少初始包体积 - 精确的重新渲染控制 ## 贡献指南 欢迎贡献代码!请遵循以下步骤: 1. Fork 本仓库 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 打开 Pull Request ### 代码规范 - 使用 ESLint + Prettier 进行代码格式化 - 提交信息遵循 Conventional Commits 规范 - 添加必要的测试用例 - 更新相关文档 ## 常见问题 ### Q: 如何添加自定义组件? A: 参考 `formily/shadcn/src/components` 目录下的组件实现,创建组件行为定义、资源定义和属性设置器。 ### Q: 如何自定义主题? A: 通过修改 CSS 变量或 Less 变量来自定义主题,参考 `packages/react/src/styles` 目录。 ### Q: 如何调试设计器? A: 使用浏览器开发者工具,结合 React/Vue DevTools 进行调试。 ### Q: 性能优化建议? A: - 避免在渲染组件中进行复杂计算 - 使用 memo/computed 缓存计算结果 - 合理使用组件懒加载 ## 版本历史 ### v1.0.8 (2025-07-05) - ✅ 完成 Vite 生态系统迁移 - ✅ 升级所有依赖到最新版本 - ✅ 优化构建配置和测试环境 - ✅ 添加 Shadcn/UI 组件库支持 - ✅ 完善 TypeScript 类型定义 - ✅ 重构文档和示例项目 ### v1.0.7 及之前版本 参考 [CHANGELOG.md](./CHANGELOG.md) 了解详细版本历史。 ## 许可证 MIT License - 详见 [LICENSE](./LICENSE) 文件。 ## 鸣谢 本项目基于以下优秀的开源项目: - [Formily](https://formilyjs.org/) - 阿里巴巴统一前端表单解决方案 - [Ant Design](https://ant.design/) - 企业级 UI 设计语言 - [Shadcn/UI](https://ui.shadcn.com/) - 现代化组件库 - [Vite](https://vitejs.dev/) - 下一代前端构建工具 感谢所有贡献者的辛勤付出! --- **注意**: 本项目持续开发中,欢迎反馈问题和建议。更多技术细节请参考 [开发文档](./docs/README.md)。