ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Open-Pencil Vue SDK 实战:用 useColorVariableBinding 实现填充与描边的颜色变量绑定

Open-Pencil Vue SDK 实战:用 useColorVariableBinding 实现填充与描边的颜色变量绑定 前端桌面应用AI 应用MCP 服务【免费下载链接】open-pencilAI-native design editor. Open-source Figma alternative.项目地址https://gitcode.com/gh_mirrors/op/open-pencil点击查看免费下载useColorVariableBinding(kind)是 Open-Pencil Vue SDK 提供的一个高级组合式 API专为填充fills与描边strokes等颜色编辑 UI 设计它把「在节点上查找、绑定、解绑颜色变量」这组高频操作封装成一组可直接调用的函数让自定义属性面板只需几行代码就能把普通色块升级为可绑定设计变量的颜色控件。读完本文你将掌握该 API 的完整签名与返回结构、它与useFillControls/useStrokeControls的分工关系以及它背后在场景图scene-graph层的绑定校验与状态同步原理。概览这个 API 解决什么问题在设计编辑器中一个节点的fills[0].color可能来自两种来源要么是写死的字面颜色值要么是通过变量系统与某个COLOR类型变量建立关联binding。一旦建立绑定修改变量即可批量驱动所有引用它的节点——这正是「变量驱动设计」的核心能力。useColorVariableBinding(kind)把「查找变量 → 绑定 → 解绑 → 按需新建变量并绑定」这一完整流程收拢成一个 composable签名如下源码见 packages/vue/src/controls/color-variable-binding/use.tsuseColorVariableBinding(kind: fills | strokes)kind决定它操作的是填充还是描边并直接决定绑定路径binding path的形态。从实现看该 composable 内部通过useVariableBinding构造了绑定描述// packages/vue/src/controls/color-variable-binding/use.ts节选 const binding useVariableBinding({ type: COLOR, path: (index) ${kind}/${index}/color })即type: COLOR限定只与颜色类型变量交互path: (index) \${kind}/${index}/color把第index个填充/描边的颜色字段映射为形如fills/0/color、strokes/1/color的绑定路径这与场景图中boundVariables的键格式一一对应见 [packages/scene-graph/src/types.ts](https://link.gitcode.com/i/fca4ff82ed8d83c3b7f644e1387da9af) 的boundVariables: Recordstring, string 定义。基础用法在 Vue 组件中直接导入并调用即可import { useColorVariableBinding } from open-pencil/vue const fillBinding useColorVariableBinding(fills) const strokeBinding useColorVariableBinding(strokes)典型的接入场景是构建支持设计变量的颜色控件fillBinding负责填充色列表的变量绑定strokeBinding负责描边色。两者返回的 API 完全同构只是kind不同因此可以共用同一套 UI 逻辑。返回对象完整的变量绑定工具箱useColorVariableBinding展开底层useVariableBinding的全部能力并额外补充颜色专属函数。其返回值包含以下成员对应 packages/vue/src/controls/variable-binding/use.ts 与颜色专属包装成员类型说明storeEditor通过useEditor()获取的编辑器实例用于读取节点与变量searchTermRefstring变量搜索关键词驱动filteredVariablesvariablesComputedRefVariable[]当前文档中全部COLOR类型变量响应式filteredVariablesComputedRefVariable[]按名称过滤后的变量列表colorVariables同variables颜色变量列表的别名语义更明确bindingPath(index?) string生成当前kind的绑定路径如fills/0/colorgetBoundVariable(nodeId, index?) Variable \| undefined读取某节点指定索引处已绑定的变量getBindingState(nodeIds, index?) unbound \| bound \| mixed多选场景下计算绑定状态bindVariable(nodeId, index, variableId) void将变量绑定到节点的第index个填充/描边颜色unbindVariable(nodeId, index) void解除指定索引处的绑定createAndBindVariable(nodeId, index, color, name?) void新建颜色变量并立即绑定其中颜色专属的部分是// packages/vue/src/controls/color-variable-binding/use.ts节选 function createAndBindVariable( nodeId: string, index: number, color: Color, name FALLBACK_COLOR_VARIABLE_NAME // New color ) { const collection colorCollection() const id var:${randomHex(8)} binding.store.addVariable({ id, name: name.trim() || FALLBACK_COLOR_VARIABLE_NAME, type: COLOR, collectionId: collection.id, valuesByMode: Object.fromEntries(collection.modes.map((mode) [mode.modeId, color])), description: , hiddenFromPublishing: false }) binding.bindVariable(nodeId, id, index) }注意createAndBindVariable的返回结构中有意重排了参数对外是(nodeId, index, variableId)而底层bindVariable内部调用的是(nodeId, variableId, index)顺序封装层已替你处理好映射见 packages/vue/src/controls/color-variable-binding/use.ts。使用返回值中的bindVariable/unbindVariable时按本表的签名传参即可无需关心底层顺序。实战构建支持变量绑定的填充控件结合 useFillControls 与 FillRoot可以组装一个完整的填充编辑区。useFillControls本身就是useColorVariableBinding(fills)的薄封装额外附带defaultFill默认填充值源码见 packages/vue/src/controls/fill/use.tsimport { useFillControls } from open-pencil/vue const fills useFillControls() // fills 展开自 useColorVariableBinding(fills) // 额外提供 defaultFill来自 DEFAULT_SHAPE_FILL 常量 // 新增一行填充 propertyList.add(fills.defaultFill) // 将第 0 个填充绑定到某个颜色变量 fills.bindVariable(activeNodeId, 0, variableId) // 解绑第 0 个填充 fills.unbindVariable(activeNodeId, 0) // 把当前填充色保存为变量并立即绑定 fills.createAndBindVariable(activeNodeId, 0, { r: 0.2, g: 0.4, b: 0.8, a: 1 })同理useStrokeControls 负责描边的对齐、边、端点、连接等几何属性若你的描边颜色编辑器也需要变量能力可自行在其上组合useColorVariableBinding(strokes)。两者与useColorVariableBinding的分工是前者管「面板业务状态」后者管「颜色与变量之间的绑定数据」。结合 FillRoot 渲染绑定状态Open-Pencil 还提供了无头组件 FillRoot导出见 packages/vue/src/primitives/Fill/index.ts。将useFillControls返回的colorVariables/filteredVariables传入填充选择器即可渲染一个既能选字面色、又能搜索并绑定变量的控件script setup langts import { useFillControls } from open-pencil/vue const fills useFillControls() /script template !-- 变量搜索框 -- input v-modelfills.searchTerm placeholder搜索颜色变量 / !-- 过滤后的变量列表 -- div v-forvariable in fills.filteredVariables :keyvariable.id {{ variable.name }} !-- 绑定到当前选中节点的第 0 个填充 -- button clickfills.bindVariable(activeNodeId, 0, variable.id)绑定/button /div /template多选状态unbound / bound / mixedgetBindingState是处理多选节点时的关键函数。其逻辑见 packages/vue/src/controls/variable-binding/use.ts为收集每个节点在指定索引处的绑定变量 ID若各节点绑定不同变量ID 集合大小 1返回mixed若某个节点未绑定ID 为undefined返回unbound否则返回bound。UI 可根据该状态切换控件外观unbound显示字面色值、bound显示变量名并提供解绑入口、mixed显示混合占位。这一状态机与属性面板中「多选混合值」的通用约定一致。搜索与过滤不区分大小写的变量查询searchTerm与filteredVariables实现了内置的变量搜索。底层使用reka-ui的useFilter({ sensitivity: base })做不区分大小写的名称匹配见 packages/vue/src/controls/variable-binding/use.tsconst filteredVariables computed(() { if (!searchTerm.value) return variables.value return variables.value.filter((variable) contains(variable.name, searchTerm.value)) })variables本身通过useSceneComputed派生该封装会追踪sceneVersion、selectedIds、currentPageId等场景状态见 packages/vue/src/internal/scene-computed/use.ts因此文档中任何颜色变量的新增、重命名或删除都会自动触发列表刷新无需手动维护响应式依赖。底层原理场景图中的变量绑定与校验useColorVariableBinding最终通过store.bindVariable/store.unbindVariable落到场景图层。这两个方法定义在 packages/scene-graph/src/index.ts实现在 packages/scene-graph/src/variables.ts。绑定过程包含严格的类型与范围校验变量必须存在variableId在graph.variables中不存在时直接抛出Variable xxx not found颜色字段必须绑COLOR变量绑定路径匹配/^(fills|strokes)\/(\d)\/color$/时若变量类型不是COLOR抛出Cannot bind ${type} variable to color field ${field}索引必须落在数组内如fills/2/color但节点当前只有 1 个填充抛出Index 2 out of range for fills (length 1)自动清理顶层死绑定设置索引级绑定时会删除同 key 的顶层绑定例如旧的fills键避免冲突其他字段的类型约束标量字段如width、opacity要求FLOATfontFamily要求STRINGvisible要求BOOLEAN均有对应的字段白名单见 packages/scene-graph/src/variables.ts。每次绑定/解绑后都会发出node:updated事件并同步实例覆盖markBoundVariablesOverrideOnInstance保证画布与属性面板即时刷新。unbindVariable则相对轻量字段不存在时直接返回packages/scene-graph/src/variables.ts。颜色变量的存取与解析colorCollection()负责定位或创建颜色变量所属的集合优先复用「包含至少一个COLOR类型变量」的现有集合若不存在则新建名为Colors、含默认Mode 1模式的集合源码见 packages/vue/src/controls/color-variable-binding/use.ts。createAndBindVariable会为该集合的每个 mode 写入同一份颜色值valuesByMode因此多模式下也能获得一致的初始表现。在读取侧packages/scene-graph/src/variables.ts 提供了完整的解析链resolveVariable按「节点 mode → 集合活跃 mode → 默认 mode → 任意值」的顺序取值并支持别名alias递归解析resolveColorVariableForNode则结合节点的variableModes为指定节点解析出实际颜色。整个变量系统的数据结构以Variable与VariableCollection为核心见 packages/scene-graph/src/types.tsboundVariables记录「字段 → 变量 ID」的映射。与其他 API 的关系useColorVariableBinding属于 SDK 中「公开但更专门化」的高级 API见 packages/docs/programmable/sdk/api/advanced/index.md 的 Advanced 分组。它的同级与上层 API 包括useFillControls填充面板组合式 API内部直接复用useColorVariableBinding(fills)useStrokeControls描边面板组合式 API管理对齐、边、端点等属性FillRoot填充渲染用的无头组件useNumberVariableBinding同类 API面向FLOAT数值字段如width、cornerRadius、opacity可用于构建数值变量绑定控件useVariableBinding以上两者的公共底层接受type与path两个选项是理解整个变量绑定体系的最佳入口。这些 API 均从 packages/vue/src/index.ts 统一导出安装open-pencil/vue后即可使用导出清单亦记录在 packages/vue/README.md 的 Advanced API 章节。若你的控件需要更细粒度的「绑定供给」能力例如指定目标字段、编辑策略与变更来源追踪可进一步研究 useColorBindingProvider 及其配套的 binding-provider 模块它提供了createAndBindColorVariable、useColorBindingProvider等面向复杂绑定场景的工具。小结useColorVariableBinding是一个「小而专」的 composable入口只需一个fills | strokes参数即可获得搜索、绑定、解绑、新建并绑定一条龙的完整变量绑定能力。配合useFillControls的defaultFill与FillRoot等无头组件你可以在 Open-Pencil 的 Vue SDK 之上快速搭建出符合设计工具习惯、支持多选混合状态与实时变量同步的颜色编辑面板。赞分享前端桌面应用AI 应用MCP 服务【免费下载链接】open-pencilAI-native design editor. Open-source Figma alternative.项目地址https://gitcode.com/gh_mirrors/op/open-pencil点击查看免费下载相关推荐Open-Pencil SDK使用 useColorVariableBinding 将填充与描边颜色绑定到设计变量Open Pencil SDK使用 useColorVariableBinding 将填充与描边颜色绑定到设计变量 useColorVariableBindi前端桌面应用AI 应用MCP 服务Open Pencil Vue SDK 中 useColorVariableBinding 详解把填充与描边颜色绑定到设计变量Open Pencil Vue SDK 中 useColorVariableBinding 详解把填充与描边颜色绑定到设计变量 useColorVariabl前端桌面应用AI 应用MCP 服务CubeSandbox 沙箱性能基准测试指南使用 cube-bench 测量创建/删除延迟与并发吞吐CubeSandbox 沙箱性能基准测试指南使用 cube bench 测量创建/删除延迟与并发吞吐 导读 cube bench 是 CubeSandbox前端桌面应用AI 应用MCP 服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表