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}
/>
);
}0.3.0Semi Design community edition · Built for admin apps
One component library.
Native in four frameworks.
Logic lives in a framework-agnostic Foundation, and each framework connects in its own idiom.
85 components, from forms and tables to AI chat.
pnpm add @fibrae/semi-ui-reactpnpm add @fibrae/semi-ui-vuepnpm add @fibrae/semi-ui-solidpnpm add @fibrae/semi-ui-svelte| Report ID | Applicant | Status | Amount | Date | |
|---|---|---|---|---|---|
| EX-20261031-018 | EEmily Chen | Pending | $3,860.00 | Oct 31 | |
| EX-20261030-054 | RRyan Wang | Approved | $1,248.50 | Oct 30 | |
| EX-20261030-032 | GGrace Zhou | Pending | $12,400.00 | Oct 30 | |
| EX-20261029-077 | DDaniel Zhao | Rejected | $568.00 | Oct 29 | |
| EX-20261029-041 | OOlivia Liu | Approved | $2,190.00 | Oct 29 |
01Cross-framework
Write the logic once. Connect it natively.
Foundation owns the interaction logic. Adapters bind it to each framework's state: useState in React, v-model in Vue, signals in Solid, $state in Svelte.
React
Vue
Solid
Svelte
<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>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)}
/>
);
}<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}
/>02Enterprise-ready
Accessibility, i18n, theming and SSR.
Ready by default.
ACCESSIBILITY
Accessible by default
Roles and keyboard interactions follow WAI-ARIA and APG. Focus stays visible throughout.
INTERNATIONALIZATION
57 languages, native RTL
Built-in text and accessible names come from locale packs. RTL languages mirror the entire page layout.
THEMING
One token set, light and dark
Styles use --semi-* variables inside @layer semi, so they never fight your own CSS.
ENGINEERING
- SSR
- hydration
- format
- ESM only
- Chrome
- ≥ 120
- Firefox
- ≥ 125
- Safari
- ≥ 17.2
SSR and hydration
Server rendering and hydration are supported. ESM only, built for modern bundlers.
OPEN SOURCE
MIT licensed
A community fork of Semi Design. Fully open source and free for commercial use.