快速开始
装包、挂插件、把 EtProvider 写在根上,工具界面就能跑。
安装
peer 是 vue 与 @wil-works/evoke-business-ui(底座,提供 reset 与 --eb-* 令牌):
bash
pnpm add @wil-works/evoke-tools-ui @wil-works/evoke-business-ui vue全量引入
js
import { createApp } from 'vue'
import EvokeToolsUI from '@wil-works/evoke-tools-ui'
import '@wil-works/evoke-tools-ui/styles'
import '@wil-works/evoke-business-ui/styles'
import App from './App.vue'
createApp(App).use(EvokeToolsUI).mount('#app')app.use(EvokeToolsUI) 注册全部 Et* 组件(36 个入口)。也可以只装一层:
js
import CommonTools from '@wil-works/evoke-tools-ui/common'
import OfficeTools from '@wil-works/evoke-tools-ui/office'
createApp(App).use(CommonTools).use(OfficeTools)common-tools(29 件:基准件 / 通用壳 / 命令面 / 面板 / 反馈 / 输入,不含办公语义)与 office-tools(7 件:功能区 / 溢出菜单 / 后台页 / 表页签 / 公式栏 / 画布宿主 / 画布桥)的分工见设计规范, 逐件清单见 common-tools 与 office-tools。
按需引入
子路径按组件粒度导出,样式随入口一起进产物:
vue
<script setup>
import { EtToolButton } from '@wil-works/evoke-tools-ui/tool-button'
</script>
<template>
<et-tool-button icon="copy" label="复制" size="small" tip="复制" @click="copied = true" />
</template>运行时契约走 ./runtime,图标机制走 ./icons,两条入口不随组件树打包:
js
import { createCommandRegistry } from '@wil-works/evoke-tools-ui/runtime'
import { registerDomainIcons } from '@wil-works/evoke-tools-ui/icons'密度写在根上
密度是根级属性而非组件 prop:EtProvider 把它写进 <html data-density>,组件只引用令牌。 切换档位即时生效(A-19 修复后),下面的分段一点就换:
⌘K
当前:default
密度是根级属性(<html data-density>),由 EtProvider 写入,不是组件 prop。卸载时还原挂载前的外部值;嵌套 EtProvider 以最后挂载者为准:
vue
<template>
<et-provider :density="density">
<app />
</et-provider>
</template>
<script setup>
import { ref } from 'vue'
const density = ref('default') // compact / default / relaxed
</script>运行时切档即时生效,不需要刷新页面。三档度量见设计规范,令牌表不在这页重复。
最小可跑片段
一个 EtProvider 加一个工具钮,拷贝即可运行:
vue
<template>
<et-provider>
<et-tool-button icon="copy" label="复制" size="small" tip="复制" @click="copied = true" />
</et-provider>
</template>
<script setup>
import { ref } from 'vue'
const copied = ref(false)
</script>label 同时是 small 钮的可访问名(G4);tip 给字符串时 ScreenTip 只显示名称。
一个真实装配
标题栏 + 工具区 + 左停靠(两块面板并列,可拖分隔条,也可纯键盘调尺寸)+ 画布 + 状态栏: