0.3.0Semi Design 社区版 · 面向中后台

一套组件,
四个框架原生可用

交互逻辑沉在与框架无关的 Foundation 中,四个框架各自以原生写法接入。
85 个组件,覆盖表单、表格到 AI 对话。

pnpm add @fibrae/semi-ui-react
pnpm add @fibrae/semi-ui-vue
pnpm add @fibrae/semi-ui-solid
pnpm add @fibrae/semi-ui-svelte
报销审批
~
报销单号申请人状态金额提交时间
BX-20261031-018陈陈雨桐
待审批
¥3,860.0010-31 09:42
BX-20261030-054王王嘉树
已通过
¥1,248.5010-30 17:15
BX-20261030-032周周思齐
待审批
¥12,400.0010-30 11:08
BX-20261029-077赵赵明哲
已驳回
¥568.0010-29 15:36
BX-20261029-041刘刘若溪
已通过
¥2,190.0010-29 10:20
共 128 条

01跨框架

逻辑写一次,四个框架原生接入

Foundation 负责交互逻辑,Adapter 对接各框架的状态与绑定:React 用 useState,Vue 用 v-model,Solid 用 signal,Svelte 用 $state。

Foundation交互逻辑,只写一次
Adapter
  • React
  • Vue
  • Solid
  • Svelte
ReactJSX · useState
import { useState } from 'react';
import { Select } from '@fibrae/semi-ui-react';

const optionList = [
    { value: 'douyin', label: '抖音' },
    { value: 'jianying', label: '剪映' },
];

export default function Demo() {
    const [value, setValue] = useState<string | undefined>('douyin');

    return (
        <Select
            value={value}
            optionList={optionList}
            onChange={setValue}
        />
    );
}
@fibrae/semi-ui-react
VueSFC · v-model
<script setup lang="ts">
    import { ref } from 'vue';
    import { Select } from '@fibrae/semi-ui-vue';

    const optionList = [
        { value: 'douyin', label: '抖音' },
        { value: 'jianying', label: '剪映' },
    ];

    const value = ref<string | undefined>('douyin');
</script>

<template>
    <Select
        v-model="value"
        :optionList="optionList"
    />
</template>
@fibrae/semi-ui-vue
SolidJSX · createSignal
import { createSignal } from 'solid-js';
import { Select } from '@fibrae/semi-ui-solid';

const optionList = [
    { value: 'douyin', label: '抖音' },
    { value: 'jianying', label: '剪映' },
];

export default function Demo() {
    const [value, setValue] = createSignal<string | undefined>('douyin');

    return (
        <Select
            value={value()}
            optionList={optionList}
            onChange={(v) => setValue(v)}
        />
    );
}
@fibrae/semi-ui-solid
Svelte 5runes · $state
<script lang="ts">
    import { Select } from '@fibrae/semi-ui-svelte';

    const optionList = [
        { value: 'douyin', label: '抖音' },
        { value: 'jianying', label: '剪映' },
    ];

    let value = $state<string | undefined>('douyin');
</script>

<Select
    bind:value
    {optionList}
/>
@fibrae/semi-ui-svelte

02企业级

无障碍、国际化、主题与 SSR,
默认就绪

无障碍

TabEnterEsc

默认无障碍

角色与键盘交互按 WAI-ARIA 与 APG 实现,焦点状态始终可见。

国际化

57 种语言,原生 RTL

内置文案与可访问名称均来自语言包,从右向左的语言整体镜像。

主题

一套变量,深浅双色

样式基于 --semi-* 变量并置于 @layer semi,不与业务样式争夺优先级。

工程

SSR
hydration
format
ESM only
Chrome
≥ 120
Firefox
≥ 125
Safari
≥ 17.2

SSR 与 hydration

支持服务端渲染与 hydration,仅发布 ESM,面向现代构建工具。

开源

MIT 开源

Semi Design 的社区 fork,代码完全公开,可用于商业项目。