使用 reka-ui 原语

@swift-web/framework 以 reka-ui 为底层基础,reka-ui 已作为直接依赖安装,无需在项目中单独 pnpm add。

Sw* 组件专注于业务场景(加密图片、分块上传、HLS 播放器、富文本编辑器等),通用 UI 原语(Select、Tooltip、Tabs、Accordion、Popover 等)由 reka-ui 提供。

直接 import 使用

无需注册,直接在 <script setup> 中导入即可:

<script setup lang="ts">
import {
  SelectRoot,
  SelectTrigger,
  SelectValue,
  SelectContent,
  SelectItem,
  SelectItemText,
} from 'reka-ui'

const city = ref('')
</script>

<template>
  <SelectRoot v-model="city">
    <SelectTrigger class="select-trigger">
      <SelectValue placeholder="请选择城市" />
    </SelectTrigger>
    <SelectContent class="select-content">
      <SelectItem value="beijing">
        <SelectItemText>北京</SelectItemText>
      </SelectItem>
      <SelectItem value="shanghai">
        <SelectItemText>上海</SelectItemText>
      </SelectItem>
    </SelectContent>
  </SelectRoot>
</template>

reka-ui 是无样式原语库,所有视觉样式需自行编写。推荐在 app/assets/styles/ 下为用到的组件单独建一个 CSS 文件,便于维护。

已有 Sw* 封装的 reka-ui 组件

以下 reka-ui 原语已被框架封装,请直接使用对应的 Sw* 组件,不要绕过封装层:

reka-ui 原语对应 Sw* 组件说明
Dialog<SwModal>增加了命令式 API、按钮插槽、useModal()
Dialog<SwAdPopup>广告弹窗场景(同基于 Dialog,增加频控 + 曝光埋点)
Toast<SwToast>增加了全局队列管理、四种语义类型、useToast()

可直接使用的 reka-ui 组件(部分)

以下是框架尚未封装、可直接使用的常用原语:

类别组件
表单Select、Checkbox、RadioGroup、TagsInput、PinInput、NumberField、Slider
弹出层Tooltip、Popover、DropdownMenu、ContextMenu、HoverCard
导航Tabs、NavigationMenu、Pagination、Accordion
数据展示Avatar、Progress、ScrollArea、Separator
高级输入Combobox、Editable、DateField、DatePicker

完整组件列表请参考 reka-ui 官方文档。