@soybeanjs/ui 0.28.2 → 0.29.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +143 -177
- package/README.zh-CN.md +144 -178
- package/dist/components/alert/alert.vue.d.ts +2 -2
- package/dist/components/autocomplete/autocomplete.vue.d.ts +2 -2
- package/dist/components/backtop/backtop.vue.d.ts +1 -1
- package/dist/components/button/button-icon.vue.d.ts +1 -1
- package/dist/components/button/button-link.vue.d.ts +1 -1
- package/dist/components/button/button-loading.vue.d.ts +2 -2
- package/dist/components/color-picker/color-picker.vue.d.ts +3 -3
- package/dist/components/combobox/combobox.vue.d.ts +2 -2
- package/dist/components/config-provider/config-provider.js +1 -1
- package/dist/components/context-menu/context-menu-checkbox.vue.d.ts +2 -2
- package/dist/components/context-menu/context-menu-radio.vue.d.ts +2 -2
- package/dist/components/date-picker/date-picker.js +1 -1
- package/dist/components/date-picker/date-picker.vue.d.ts +2 -2
- package/dist/components/date-range-picker/date-range-picker.vue.d.ts +2 -2
- package/dist/components/dialog/dialog.vue.d.ts +3 -3
- package/dist/components/drawer/drawer.vue.d.ts +3 -3
- package/dist/components/dropdown-menu/dropdown-menu-checkbox.vue.d.ts +2 -2
- package/dist/components/dropdown-menu/dropdown-menu-radio.vue.d.ts +2 -2
- package/dist/components/link/link.vue.d.ts +1 -1
- package/dist/components/menubar/menubar.vue.d.ts +2 -2
- package/dist/components/navigation-menu/navigation-menu.vue.d.ts +2 -2
- package/dist/components/page-tabs/page-tabs.vue.d.ts +1 -1
- package/dist/components/popconfirm/popconfirm.vue.d.ts +3 -3
- package/dist/components/select/select.vue.d.ts +2 -2
- package/dist/styles/alert.d.ts +3 -3
- package/dist/styles/badge.d.ts +1 -1
- package/dist/styles/button.d.ts +2 -2
- package/dist/styles/checkbox.d.ts +1 -1
- package/dist/styles/navigation-menu.js +1 -1
- package/dist/styles/pagination.d.ts +1 -1
- package/dist/styles/radio-group.d.ts +1 -1
- package/dist/styles/skeleton.d.ts +1 -1
- package/dist/styles/switch.d.ts +2 -2
- package/dist/styles/table.d.ts +2 -2
- package/dist/styles/tabs.d.ts +1 -1
- package/dist/styles/tag.d.ts +2 -2
- package/dist/styles/toggle-group.d.ts +1 -1
- package/dist/styles/toggle.d.ts +2 -2
- package/package.json +17 -62
package/README.zh-CN.md
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
<a href="https://github.com/soybeanjs/soybean-ui">
|
|
3
|
-
<img src="./public/logo.svg" alt="Logo" width="150" />
|
|
4
|
-
</a>
|
|
5
|
-
</p>
|
|
6
|
-
|
|
7
|
-
# SoybeanUI
|
|
1
|
+
# @soybeanjs/ui
|
|
8
2
|
|
|
9
3
|
[English](./README.md) | 中文
|
|
10
4
|
|
|
@@ -13,180 +7,37 @@
|
|
|
13
7
|
[](https://www.npmjs.com/package/@soybeanjs/ui)
|
|
14
8
|
[](https://github.com/soybeanjs/soybean-ui)
|
|
15
9
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
## 📚 架构
|
|
19
|
-
|
|
20
|
-
SoybeanUI 采用严格的**双层分离**设计:
|
|
21
|
-
|
|
22
|
-
```
|
|
23
|
-
┌─────────────────────────────────────────┐
|
|
24
|
-
│ @soybeanjs/ui (src/) │
|
|
25
|
-
│ S 前缀组件 (SButton、SDialog…) │
|
|
26
|
-
│ UnoCSS 类名 · @soybeanjs/cva │
|
|
27
|
-
│ provideXUi(ui) ──────────────────┐ │
|
|
28
|
-
└────────────────────────────────────┼────┘
|
|
29
|
-
│ 样式注入
|
|
30
|
-
┌────────────────────────────────────▼────┐
|
|
31
|
-
│ @soybeanjs/headless (headless/) │
|
|
32
|
-
│ 逻辑 · 状态 · A11y · 键盘导航 │
|
|
33
|
-
│ useUiContext() 读取注入的样式类名 │
|
|
34
|
-
│ 零样式 — 可配合任意 CSS 方案 │
|
|
35
|
-
└─────────────────────────────────────────┘
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
### 包结构
|
|
39
|
-
|
|
40
|
-
| 包 | 职责 | 组件数量 |
|
|
41
|
-
| ----------------------- | -------------------------------------------- | ------------------------------- |
|
|
42
|
-
| **@soybeanjs/headless** | 逻辑、状态、a11y,零样式 | 95 个组件目录,25 个 composable |
|
|
43
|
-
| **@soybeanjs/ui** | 样式包装层。UnoCSS + `@soybeanjs/cva` recipe | 91 个带 `S` 前缀的组件 |
|
|
10
|
+
一套优雅、现代、可访问的、具有 shadcn 风格设计的 Vue 3 UI 组件库,基于 `@soybeanjs/headless` 构建。
|
|
44
11
|
|
|
45
|
-
|
|
12
|
+
## 📖 简介
|
|
46
13
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
目前采用这类 Compact 约定式组合的能力还覆盖了 card、date-field、dialog、editable、hover-card、layout、navigation-menu、pagination、popover、stepper 等稳定结构场景。
|
|
50
|
-
|
|
51
|
-
### 样式注入机制
|
|
52
|
-
|
|
53
|
-
每个多插槽的 headless 组件都有对应的 `provide{Name}Ui` 函数。样式层通过 `@soybeanjs/cva` 的 recipe 计算类名后注入:
|
|
14
|
+
`@soybeanjs/ui` 提供开箱即用的带样式组件,由 UnoCSS 和 `@soybeanjs/cva` class-variance 配方驱动。每个组件都是对应 `@soybeanjs/headless` 原语的 `S`-前缀包装层,遵循 **样式注入** 模式:样式包装层计算类名并通过 `provide{Name}Ui` 注入,headless 组件通过 `useUiContext()` 读取。
|
|
54
15
|
|
|
55
16
|
```ts
|
|
56
|
-
//
|
|
17
|
+
// 样式注入 — 单向数据流
|
|
57
18
|
const ui = computed(() => accordionVariants({ size: props.size }, props.ui, { root: props.class }));
|
|
58
19
|
provideAccordionUi(ui); // headless 通过 useAccordionUi() 读取
|
|
59
20
|
```
|
|
60
21
|
|
|
61
|
-
### 主题系统
|
|
62
|
-
|
|
63
|
-
- **`ThemeColor`** — 8 种语义色:`primary` · `destructive` · `success` · `warning` · `info` · `carbon` · `secondary` · `accent`
|
|
64
|
-
- **`ThemeSize`** — 6 种尺寸:`xs` · `sm` · `md` · `lg` · `xl` · `2xl`(基准尺寸 `md` = 16px)
|
|
65
|
-
- **`ConfigProvider`** — 全局设置 `dir`、`locale`、`nonce` 及默认 `tooltip` 配置,应用于整个组件树,并支持 RTL 布局切换
|
|
66
|
-
|
|
67
|
-
### 语言支持
|
|
68
|
-
|
|
69
|
-
`ConfigProvider` 当前支持以下 locale 文案包:
|
|
70
|
-
|
|
71
|
-
| 代码 | 语言 |
|
|
72
|
-
| ------- | ------------ |
|
|
73
|
-
| `zh-CN` | 简体中文 |
|
|
74
|
-
| `zh-TW` | 繁體中文 |
|
|
75
|
-
| `en` | 英语 |
|
|
76
|
-
| `ar` | 阿拉伯语 |
|
|
77
|
-
| `ja` | 日语 |
|
|
78
|
-
| `ko` | 韩语 |
|
|
79
|
-
| `de` | 德语 |
|
|
80
|
-
| `fr` | 法语 |
|
|
81
|
-
| `es` | 西班牙语 |
|
|
82
|
-
| `pt-BR` | 巴西葡萄牙语 |
|
|
83
|
-
| `ru` | 俄语 |
|
|
84
|
-
| `tr` | 土耳其语 |
|
|
85
|
-
| `id` | 印度尼西亚语 |
|
|
86
|
-
|
|
87
|
-
默认只有 `en` 和 `zh-CN` 会被预注册。`registerLocale` 支持两种注册方式:
|
|
88
|
-
|
|
89
|
-
- 直接传入 `LocaleRegistry` 对象。`@soybeanjs/headless/locale/{code}` 导出的内置语言文件已经是这种结构,并且自带 `dir` 元数据。
|
|
90
|
-
- 传入 locale key 和 `LocaleMessages`,用于快速注册一个轻量自定义语言。
|
|
91
|
-
|
|
92
|
-
简写形式 `registerLocale(key, messages)` 会将 key 作为语言名,并在未显式提供方向时回退到 `ltr`。如果你需要像 `ar` 这样的 `rtl` 元数据,请优先使用对象形式。
|
|
93
|
-
|
|
94
|
-
```ts
|
|
95
|
-
import { en, registerLocale } from '@soybeanjs/headless/locale';
|
|
96
|
-
import type { LocaleMessages } from '@soybeanjs/headless/locale';
|
|
97
|
-
import ar from '@soybeanjs/headless/locale/ar';
|
|
98
|
-
|
|
99
|
-
registerLocale(ar);
|
|
100
|
-
|
|
101
|
-
const customMessages: LocaleMessages = {
|
|
102
|
-
...en.messages,
|
|
103
|
-
pagination: {
|
|
104
|
-
...en.messages.pagination,
|
|
105
|
-
nextPage: '下一页 →',
|
|
106
|
-
prevPage: '← 上一页'
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
registerLocale('custom', customMessages);
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### 包导出
|
|
114
|
-
|
|
115
|
-
**@soybeanjs/headless** 提供精细化子路径导出:
|
|
116
|
-
|
|
117
|
-
```ts
|
|
118
|
-
import { AccordionRoot } from '@soybeanjs/headless'; // 所有组件
|
|
119
|
-
import { useControllableState } from '@soybeanjs/headless/composables'; // 25 个 composable
|
|
120
|
-
import { transformPropsToContext } from '@soybeanjs/headless/shared'; // 纯 TS 工具
|
|
121
|
-
import { createMonth } from '@soybeanjs/headless/date'; // 日期工具
|
|
122
|
-
import * as Headless from '@soybeanjs/headless/namespaced'; // 命名空间导入
|
|
123
|
-
import type { AccordionUiSlot } from '@soybeanjs/headless/accordion'; // 单组件类型
|
|
124
|
-
import type { UiClass } from '@soybeanjs/headless/types'; // 共享类型导出
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
**@soybeanjs/ui** 导出:
|
|
128
|
-
|
|
129
|
-
```ts
|
|
130
|
-
import { SButton, SAccordion } from '@soybeanjs/ui'; // 所有组件
|
|
131
|
-
import '@soybeanjs/ui/styles.css'; // 预构建的 UnoCSS 样式表
|
|
132
|
-
// 同时提供:@soybeanjs/ui/nuxt · @soybeanjs/ui/resolver
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
## 🛠 开发工作流
|
|
136
|
-
|
|
137
|
-
如果您在仓库内新增公共组件、调整导出入口或修改 API 描述,请通过官方脚本同步生成产物,而不是手动编辑生成文件。
|
|
138
|
-
|
|
139
|
-
```bash
|
|
140
|
-
pnpm sui headless # 同步 headless 组件名称与命名空间导出
|
|
141
|
-
pnpm sui ui # 同步 ui 组件名称
|
|
142
|
-
pnpm sui api # 重新生成 docs api json 与 locale 英文基线数据
|
|
143
|
-
pnpm sui api-locales # 仅刷新 api locale 模板数据
|
|
144
|
-
pnpm sui changelog # 重新生成 docs changelog json 与 locale 英文基线数据
|
|
145
|
-
pnpm sui api-translate -- --locale zh-CN
|
|
146
|
-
pnpm sui changelog-translate -- --locale zh-CN
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
当前文档站默认通过 `UsageCode`、`PlaygroundGallery` 与 `ComponentApi` 渲染组件文档;组件详情页与 `/releases` 还会消费 `docs/src/generated/changelog/` 和 `docs/src/generated/changelog-locales/` 下的版本日志生成数据。
|
|
150
|
-
|
|
151
|
-
因此,一旦公共 API 或示例交付面变化,也要同步维护 docs、playground 示例和 API 生成数据;如果调整了 changelog 映射、发布页展示或 changelog locale 模板,也要同步更新 changelog 生成数据。
|
|
152
|
-
|
|
153
22
|
## 📦 安装
|
|
154
23
|
|
|
155
|
-
### 使用带样式的 UI 库 (推荐)
|
|
156
|
-
|
|
157
|
-
如果您想要具有现代设计的现成组件:
|
|
158
|
-
|
|
159
24
|
```bash
|
|
160
25
|
pnpm add @soybeanjs/ui
|
|
161
26
|
```
|
|
162
27
|
|
|
163
|
-
### 使用 Headless 库
|
|
164
|
-
|
|
165
|
-
如果您想从头开始构建自己的设计系统:
|
|
166
|
-
|
|
167
|
-
```bash
|
|
168
|
-
pnpm add @soybeanjs/headless
|
|
169
|
-
```
|
|
170
|
-
|
|
171
28
|
## 🚀 使用方法
|
|
172
29
|
|
|
173
|
-
###
|
|
174
|
-
|
|
175
|
-
1. **引入样式**
|
|
30
|
+
### 1. 引入样式
|
|
176
31
|
|
|
177
|
-
|
|
32
|
+
在主入口文件(如 `main.ts`)中引入预构建的 UnoCSS 样式表:
|
|
178
33
|
|
|
179
34
|
```ts
|
|
180
35
|
import '@soybeanjs/ui/styles.css';
|
|
181
36
|
```
|
|
182
37
|
|
|
183
|
-
2.
|
|
38
|
+
### 2. 按需引入(推荐)
|
|
184
39
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
3. **按需引入 (推荐)**
|
|
188
|
-
|
|
189
|
-
我们推荐使用 `unplugin-vue-components` 来自动引入组件。
|
|
40
|
+
使用 `unplugin-vue-components` 配合内置解析器实现自动导入:
|
|
190
41
|
|
|
191
42
|
```ts
|
|
192
43
|
// vite.config.ts
|
|
@@ -202,7 +53,7 @@ export default defineConfig({
|
|
|
202
53
|
});
|
|
203
54
|
```
|
|
204
55
|
|
|
205
|
-
|
|
56
|
+
### 3. Nuxt 模块
|
|
206
57
|
|
|
207
58
|
```ts
|
|
208
59
|
// nuxt.config.ts
|
|
@@ -211,37 +62,152 @@ export default defineNuxtConfig({
|
|
|
211
62
|
});
|
|
212
63
|
```
|
|
213
64
|
|
|
214
|
-
###
|
|
65
|
+
### 4. 直接引入
|
|
215
66
|
|
|
216
|
-
|
|
67
|
+
```vue
|
|
68
|
+
<script setup>
|
|
69
|
+
import { SButton, SDialog } from '@soybeanjs/ui';
|
|
70
|
+
</script>
|
|
71
|
+
|
|
72
|
+
<template>
|
|
73
|
+
<SDialog>
|
|
74
|
+
<SButton>打开对话框</SButton>
|
|
75
|
+
</SDialog>
|
|
76
|
+
</template>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## ✨ 特性
|
|
217
80
|
|
|
218
|
-
|
|
81
|
+
- **shadcn 风格设计**: 现代、简洁的美学,受 shadcn/ui 启发。
|
|
82
|
+
- **可访问性**: 基于 `@soybeanjs/headless` 原语构建,全面支持 WAI-ARIA。
|
|
83
|
+
- **RTL 就绪**: 通过 `ConfigProvider` 即可切换 LTR / RTL 布局。
|
|
84
|
+
- **多级自定义**: 通过 `ui` prop 覆盖单个插槽类名,也可替换整个样式层。
|
|
85
|
+
- **主题系统**: 8 种语义色彩和 6 种尺寸,通过 `ConfigProvider` 控制。
|
|
86
|
+
- **轻量可摇树**: 按需引入,每个组件独立 Tree-shakable。
|
|
87
|
+
- **类型安全**: 严格 TypeScript 编写,完整类型支持。
|
|
88
|
+
- **Nuxt 就绪**: 提供官方 Nuxt 模块,支持自动注册。
|
|
89
|
+
- **unplugin 支持**: 提供 `unplugin-vue-components` 自动导入解析器。
|
|
90
|
+
|
|
91
|
+
## 🎨 主题系统
|
|
92
|
+
|
|
93
|
+
### 主题色彩
|
|
94
|
+
|
|
95
|
+
| 色彩 | Token | 用途 |
|
|
96
|
+
| --------------- | ------------- | -------------------- |
|
|
97
|
+
| **Primary** | `primary` | 主要操作、激活状态 |
|
|
98
|
+
| **Destructive** | `destructive` | 删除、错误、危险操作 |
|
|
99
|
+
| **Success** | `success` | 确认、成功状态 |
|
|
100
|
+
| **Warning** | `warning` | 警告、待处理状态 |
|
|
101
|
+
| **Info** | `info` | 信息提示 |
|
|
102
|
+
| **Carbon** | `carbon` | 中性背景、表面色 |
|
|
103
|
+
| **Secondary** | `secondary` | 次要操作、弱化元素 |
|
|
104
|
+
| **Accent** | `accent` | 高亮、徽章 |
|
|
105
|
+
|
|
106
|
+
### 主题尺寸
|
|
107
|
+
|
|
108
|
+
| 尺寸 | 基准 (rem) | 像素对照 |
|
|
109
|
+
| ----- | ---------- | ------------ |
|
|
110
|
+
| `xs` | 0.75 | 12px |
|
|
111
|
+
| `sm` | 0.875 | 14px |
|
|
112
|
+
| `md` | 1 | 16px(默认) |
|
|
113
|
+
| `lg` | 1.125 | 18px |
|
|
114
|
+
| `xl` | 1.25 | 20px |
|
|
115
|
+
| `2xl` | 1.5 | 24px |
|
|
219
116
|
|
|
220
117
|
```vue
|
|
221
118
|
<script setup>
|
|
222
|
-
import {
|
|
119
|
+
import { SConfigProvider, SButton } from '@soybeanjs/ui';
|
|
223
120
|
</script>
|
|
224
121
|
|
|
225
122
|
<template>
|
|
226
|
-
<
|
|
227
|
-
<
|
|
228
|
-
|
|
229
|
-
<AccordionContent>Yes. It adheres to the WAI-ARIA design pattern.</AccordionContent>
|
|
230
|
-
</AccordionItem>
|
|
231
|
-
</AccordionRoot>
|
|
123
|
+
<SConfigProvider :theme="{ color: 'primary', size: 'md' }">
|
|
124
|
+
<SButton>点击我</SButton>
|
|
125
|
+
</SConfigProvider>
|
|
232
126
|
</template>
|
|
233
127
|
```
|
|
234
128
|
|
|
235
|
-
##
|
|
129
|
+
## 🌐 语言支持
|
|
130
|
+
|
|
131
|
+
`@soybeanjs/ui` 通过 `ConfigProvider` 继承 `@soybeanjs/headless` 的国际化支持:
|
|
132
|
+
|
|
133
|
+
| 代码 | 语言 |
|
|
134
|
+
| ------- | ------------ |
|
|
135
|
+
| `zh-CN` | 简体中文 |
|
|
136
|
+
| `zh-TW` | 繁體中文 |
|
|
137
|
+
| `en` | 英语 |
|
|
138
|
+
| `ar` | 阿拉伯语 |
|
|
139
|
+
| `ja` | 日语 |
|
|
140
|
+
| `ko` | 韩语 |
|
|
141
|
+
| `de` | 德语 |
|
|
142
|
+
| `fr` | 法语 |
|
|
143
|
+
| `es` | 西班牙语 |
|
|
144
|
+
| `pt-BR` | 巴西葡萄牙语 |
|
|
145
|
+
| `ru` | 俄语 |
|
|
146
|
+
| `tr` | 土耳其语 |
|
|
147
|
+
| `id` | 印度尼西亚语 |
|
|
148
|
+
|
|
149
|
+
```vue
|
|
150
|
+
<template>
|
|
151
|
+
<SConfigProvider :locale="zhCN">
|
|
152
|
+
<App />
|
|
153
|
+
</SConfigProvider>
|
|
154
|
+
</template>
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## 📚 包结构
|
|
158
|
+
|
|
159
|
+
```
|
|
160
|
+
packages/ui/src/
|
|
161
|
+
├── components/ # 86 个样式组件目录(SButton、SDialog、SSelect…)
|
|
162
|
+
├── styles/ # UnoCSS 样式配方和层级定义
|
|
163
|
+
├── theme/ # 主题 Token、色彩梯度和尺寸映射
|
|
164
|
+
├── constants/ # 组件和主题常量
|
|
165
|
+
├── nuxt/ # Nuxt 模块入口
|
|
166
|
+
├── resolver/ # unplugin-vue-components 解析器
|
|
167
|
+
└── index.ts # 主 barrel 导出
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### 包导出
|
|
171
|
+
|
|
172
|
+
```ts
|
|
173
|
+
import { SButton, SAccordion } from '@soybeanjs/ui'; // 所有组件
|
|
174
|
+
import '@soybeanjs/ui/styles.css'; // 预构建 UnoCSS 样式表
|
|
175
|
+
// 另见: @soybeanjs/ui/nuxt · @soybeanjs/ui/resolver
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## 🧩 组件
|
|
179
|
+
|
|
180
|
+
`@soybeanjs/ui` 提供 86 个 `S`-前缀样式组件,每个都包装一个 `@soybeanjs/headless` 原语:
|
|
181
|
+
|
|
182
|
+
| 分类 | 组件 |
|
|
183
|
+
| ------------ | ------------------------------------------------------------------- |
|
|
184
|
+
| **布局** | `SAccordion`、`SCard`、`SDialog`、`SDrawer`、`SPopover`、`STooltip` |
|
|
185
|
+
| **表单** | `SButton`、`SCheckbox`、`SInput`、`SSelect`、`SSwitch`、`STextarea` |
|
|
186
|
+
| **导航** | `SBreadcrumb`、`SPagination`、`SStepper`、`STabs` |
|
|
187
|
+
| **数据** | `STable`、`SDataList`、`STree` |
|
|
188
|
+
| **反馈** | `SAlert`、`SBadge`、`SToast`、`SProgress` |
|
|
189
|
+
| **排版** | `SHeading`、`SText`、`SCode`、`SKbd` |
|
|
190
|
+
| **日期时间** | `SCalendar`、`SDatePicker`、`STimePicker` |
|
|
191
|
+
| **媒体** | `SAvatar`、`SCarousel`、`SImage` |
|
|
192
|
+
|
|
193
|
+
## 🔧 自定义组件
|
|
194
|
+
|
|
195
|
+
通过 `ui` prop 覆盖单个插槽的类名:
|
|
196
|
+
|
|
197
|
+
```vue
|
|
198
|
+
<template>
|
|
199
|
+
<SAccordion :ui="{ trigger: 'bg-blue-100 hover:bg-blue-200 rounded-lg' }">
|
|
200
|
+
<SAccordionItem value="item-1">
|
|
201
|
+
<SAccordionTrigger>自定义样式的触发器</SAccordionTrigger>
|
|
202
|
+
<SAccordionContent>这里是内容</SAccordionContent>
|
|
203
|
+
</SAccordionItem>
|
|
204
|
+
</SAccordion>
|
|
205
|
+
</template>
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## 📖 文档
|
|
236
209
|
|
|
237
|
-
|
|
238
|
-
- **RTL 就绪**:通过 `ConfigProvider` 即可在已支持组件间切换 LTR / RTL 布局。
|
|
239
|
-
- **Headless 优先**:逻辑与样式完全分离—单独使用 `@soybeanjs/headless` 可构建任意设计系统。
|
|
240
|
-
- **类型安全**:严格 TypeScript 编写,所有 props、emits、slot 及 context 均有完整类型。
|
|
241
|
-
- **多级自定义**:通过 `ui` prop 覆盖单个橪位类名,也可替换整个样式层。
|
|
242
|
-
- **轻量可摇树**:每个组件独立 Tree-shakable,按需引入。
|
|
243
|
-
- **Nuxt 就绪**:提供官方 Nuxt 模块,支持组件自动注册(`@soybeanjs/ui/nuxt`)。
|
|
244
|
-
- **unplugin 支持**:提供 `unplugin-vue-components` 自动导入解析器(`@soybeanjs/ui/resolver`)。
|
|
210
|
+
完整文档、Playground 示例和组件 API 参考,请访问 [SoybeanUI 文档站点](https://soybeanjs.github.io/soybean-ui)。
|
|
245
211
|
|
|
246
212
|
## 💝 致谢
|
|
247
213
|
|
|
@@ -3,11 +3,11 @@ import { AlertProps, AlertSlots } from "./types.js";
|
|
|
3
3
|
//#region src/components/alert/alert.vue.d.ts
|
|
4
4
|
type __VLS_Slots = AlertSlots;
|
|
5
5
|
declare const __VLS_base: import("vue").DefineComponent<AlertProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
6
|
-
"update:open": (open: boolean) => any;
|
|
7
6
|
close: (event: PointerEvent) => any;
|
|
7
|
+
"update:open": (open: boolean) => any;
|
|
8
8
|
}, string, import("vue").PublicProps, Readonly<AlertProps> & Readonly<{
|
|
9
|
-
"onUpdate:open"?: ((open: boolean) => any) | undefined;
|
|
10
9
|
onClose?: ((event: PointerEvent) => any) | undefined;
|
|
10
|
+
"onUpdate:open"?: ((open: boolean) => any) | undefined;
|
|
11
11
|
}>, {
|
|
12
12
|
open: boolean;
|
|
13
13
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
@@ -5,8 +5,8 @@ import { AutocompleteSingleOptionData } from "@soybeanjs/headless/autocomplete";
|
|
|
5
5
|
declare const __VLS_export: <T extends AutocompleteSingleOptionData = AutocompleteSingleOptionData>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
6
6
|
props: import("vue").PublicProps & __VLS_PrettifyLocal<AutocompleteProps<T> & {
|
|
7
7
|
onSelect?: ((item: T) => any) | undefined;
|
|
8
|
-
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
9
8
|
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
9
|
+
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
10
10
|
onHighlight?: ((payload?: import("@soybeanjs/headless").AutocompleteHighlightPayload | undefined) => any) | undefined;
|
|
11
11
|
}> & (typeof globalThis extends {
|
|
12
12
|
__VLS_PROPS_FALLBACK: infer P;
|
|
@@ -14,7 +14,7 @@ declare const __VLS_export: <T extends AutocompleteSingleOptionData = Autocomple
|
|
|
14
14
|
expose: (exposed: {}) => void;
|
|
15
15
|
attrs: any;
|
|
16
16
|
slots: AutocompleteSlots<T>;
|
|
17
|
-
emit: ((evt: "select", item: T) => void) & ((evt: "update:
|
|
17
|
+
emit: ((evt: "select", item: T) => void) & ((evt: "update:open", value: boolean) => void) & ((evt: "update:modelValue", value: string) => void) & ((evt: "highlight", payload?: import("@soybeanjs/headless").AutocompleteHighlightPayload | undefined) => void);
|
|
18
18
|
}>) => import("vue").VNode & {
|
|
19
19
|
__ctx?: Awaited<typeof __VLS_setup>;
|
|
20
20
|
};
|
|
@@ -16,8 +16,8 @@ declare const __VLS_base: import("vue").DefineComponent<BacktopProps, {}, {}, {}
|
|
|
16
16
|
icon: string;
|
|
17
17
|
size: ThemeSize;
|
|
18
18
|
color: ThemeColor;
|
|
19
|
-
shape: ButtonShape;
|
|
20
19
|
variant: ButtonVariant;
|
|
20
|
+
shape: ButtonShape;
|
|
21
21
|
shadow: ButtonShadow;
|
|
22
22
|
fitContent: boolean;
|
|
23
23
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
@@ -4,8 +4,8 @@ import { ButtonIconProps } from "./types.js";
|
|
|
4
4
|
//#region src/components/button/button-icon.vue.d.ts
|
|
5
5
|
declare const __VLS_export: import("vue").DefineComponent<ButtonIconProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ButtonIconProps> & Readonly<{}>, {
|
|
6
6
|
color: ThemeColor;
|
|
7
|
-
shape: ButtonShape;
|
|
8
7
|
variant: ButtonVariant;
|
|
8
|
+
shape: ButtonShape;
|
|
9
9
|
fitContent: boolean;
|
|
10
10
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
11
11
|
declare const _default: typeof __VLS_export;
|
|
@@ -11,9 +11,9 @@ type __VLS_Slots = {} & {
|
|
|
11
11
|
default?: (props: typeof __VLS_14) => any;
|
|
12
12
|
};
|
|
13
13
|
declare const __VLS_base: import("vue").DefineComponent<ButtonLinkProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ButtonLinkProps> & Readonly<{}>, {
|
|
14
|
-
replace: boolean;
|
|
15
14
|
variant: ButtonVariant;
|
|
16
15
|
disabled: boolean;
|
|
16
|
+
replace: boolean;
|
|
17
17
|
external: boolean;
|
|
18
18
|
viewTransition: boolean;
|
|
19
19
|
noRel: boolean;
|
|
@@ -17,9 +17,9 @@ type __VLS_Slots = {} & {
|
|
|
17
17
|
trailing?: (props: typeof __VLS_33) => any;
|
|
18
18
|
};
|
|
19
19
|
declare const __VLS_base: import("vue").DefineComponent<ButtonLoadingProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ButtonLoadingProps> & Readonly<{}>, {
|
|
20
|
-
loadingIcon: string | import("vue").
|
|
20
|
+
loadingIcon: string | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
21
21
|
[key: string]: any;
|
|
22
|
-
}> | null;
|
|
22
|
+
}> | import("vue").Component | null;
|
|
23
23
|
loadingPosition: Align;
|
|
24
24
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
25
25
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -2,7 +2,6 @@ import { ColorPickerProps } from "./types.js";
|
|
|
2
2
|
|
|
3
3
|
//#region src/components/color-picker/color-picker.vue.d.ts
|
|
4
4
|
declare const __VLS_export: import("vue").DefineComponent<ColorPickerProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
5
|
-
"update:modelValue": (value: string) => any;
|
|
6
5
|
"update:open": (value: boolean) => any;
|
|
7
6
|
escapeKeyDown: (event: KeyboardEvent) => any;
|
|
8
7
|
pointerDownOutside: (event: import("@soybeanjs/headless").PointerDownOutsideEvent) => any;
|
|
@@ -10,11 +9,11 @@ declare const __VLS_export: import("vue").DefineComponent<ColorPickerProps, {},
|
|
|
10
9
|
interactOutside: (event: import("@soybeanjs/headless").PointerDownOutsideEvent | import("@soybeanjs/headless").FocusOutsideEvent) => any;
|
|
11
10
|
openAutoFocus: (event: Event) => any;
|
|
12
11
|
closeAutoFocus: (event: Event) => any;
|
|
12
|
+
"update:modelValue": (value: string) => any;
|
|
13
13
|
change: (value: string) => any;
|
|
14
14
|
"update:color": (value: import("@soybeanjs/headless/types").NormalizedColor) => any;
|
|
15
15
|
"update:format": (value: import("@soybeanjs/headless/types").ColorFormat) => any;
|
|
16
16
|
}, string, import("vue").PublicProps, Readonly<ColorPickerProps> & Readonly<{
|
|
17
|
-
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
18
17
|
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
19
18
|
onEscapeKeyDown?: ((event: KeyboardEvent) => any) | undefined;
|
|
20
19
|
onPointerDownOutside?: ((event: import("@soybeanjs/headless").PointerDownOutsideEvent) => any) | undefined;
|
|
@@ -22,15 +21,16 @@ declare const __VLS_export: import("vue").DefineComponent<ColorPickerProps, {},
|
|
|
22
21
|
onInteractOutside?: ((event: import("@soybeanjs/headless").PointerDownOutsideEvent | import("@soybeanjs/headless").FocusOutsideEvent) => any) | undefined;
|
|
23
22
|
onOpenAutoFocus?: ((event: Event) => any) | undefined;
|
|
24
23
|
onCloseAutoFocus?: ((event: Event) => any) | undefined;
|
|
24
|
+
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
25
25
|
onChange?: ((value: string) => any) | undefined;
|
|
26
26
|
"onUpdate:color"?: ((value: import("@soybeanjs/headless/types").NormalizedColor) => any) | undefined;
|
|
27
27
|
"onUpdate:format"?: ((value: import("@soybeanjs/headless/types").ColorFormat) => any) | undefined;
|
|
28
28
|
}>, {
|
|
29
29
|
open: boolean;
|
|
30
|
+
showArrow: boolean;
|
|
30
31
|
showAlpha: boolean;
|
|
31
32
|
showFields: boolean;
|
|
32
33
|
showSwatches: boolean;
|
|
33
|
-
showArrow: boolean;
|
|
34
34
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
35
35
|
declare const _default: typeof __VLS_export;
|
|
36
36
|
//#endregion
|
|
@@ -4,7 +4,6 @@ import { ComboboxProps, ComboboxSlots } from "./types.js";
|
|
|
4
4
|
declare const __VLS_export: <M extends boolean = false>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
5
5
|
props: import("vue").PublicProps & __VLS_PrettifyLocal<ComboboxProps<M> & {
|
|
6
6
|
onSelect?: ((event: import("@soybeanjs/headless").SelectEvent<string>) => any) | undefined;
|
|
7
|
-
"onUpdate:modelValue"?: ((value: M extends true ? string[] : string) => any) | undefined;
|
|
8
7
|
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
9
8
|
onEscapeKeyDown?: ((event: KeyboardEvent) => any) | undefined;
|
|
10
9
|
onPointerDownOutside?: ((event: import("@soybeanjs/headless").PointerDownOutsideEvent) => any) | undefined;
|
|
@@ -12,6 +11,7 @@ declare const __VLS_export: <M extends boolean = false>(__VLS_props: NonNullable
|
|
|
12
11
|
onInteractOutside?: ((event: import("@soybeanjs/headless").PointerDownOutsideEvent | import("@soybeanjs/headless").FocusOutsideEvent) => any) | undefined;
|
|
13
12
|
onOpenAutoFocus?: ((event: Event) => any) | undefined;
|
|
14
13
|
onCloseAutoFocus?: ((event: Event) => any) | undefined;
|
|
14
|
+
"onUpdate:modelValue"?: ((value: M extends true ? string[] : string) => any) | undefined;
|
|
15
15
|
onHighlight?: ((payload?: import("@soybeanjs/headless/composables").CollectionItemData<import("@soybeanjs/headless").ListboxCollectionItemData> | undefined) => any) | undefined;
|
|
16
16
|
onPlaced?: (() => any) | undefined;
|
|
17
17
|
}> & (typeof globalThis extends {
|
|
@@ -20,7 +20,7 @@ declare const __VLS_export: <M extends boolean = false>(__VLS_props: NonNullable
|
|
|
20
20
|
expose: (exposed: {}) => void;
|
|
21
21
|
attrs: any;
|
|
22
22
|
slots: ComboboxSlots<M>;
|
|
23
|
-
emit: ((evt: "select", event: import("@soybeanjs/headless").SelectEvent<string>) => void) & ((evt: "update:
|
|
23
|
+
emit: ((evt: "select", event: import("@soybeanjs/headless").SelectEvent<string>) => void) & ((evt: "update:open", value: boolean) => void) & ((evt: "escapeKeyDown", event: KeyboardEvent) => void) & ((evt: "pointerDownOutside", event: import("@soybeanjs/headless").PointerDownOutsideEvent) => void) & ((evt: "focusOutside", event: import("@soybeanjs/headless").FocusOutsideEvent) => void) & ((evt: "interactOutside", event: import("@soybeanjs/headless").PointerDownOutsideEvent | import("@soybeanjs/headless").FocusOutsideEvent) => void) & ((evt: "openAutoFocus", event: Event) => void) & ((evt: "closeAutoFocus", event: Event) => void) & ((evt: "update:modelValue", value: M extends true ? string[] : string) => void) & ((evt: "highlight", payload?: import("@soybeanjs/headless/composables").CollectionItemData<import("@soybeanjs/headless").ListboxCollectionItemData> | undefined) => void) & ((evt: "placed") => void);
|
|
24
24
|
}>) => import("vue").VNode & {
|
|
25
25
|
__ctx?: Awaited<typeof __VLS_setup>;
|
|
26
26
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{themeSizeMap as e}from"../../theme/config.js";import"../../theme/index.js";import t from"../dialog/dialog-provider.js";import n from"../progress/progress-provider.js";import r from"../toast/toast-provider.js";import{provideConfigProviderContext as i}from"./context.js";import a from"../icon/icon.js";import{createBlock as o,createCommentVNode as s,createVNode as c,defineComponent as l,guardReactiveProps as u,h as d,mergeProps as f,normalizeProps as p,openBlock as m,renderSlot as h,shallowRef as g,unref as _,watch as v,watchEffect as y,withCtx as b}from"vue";import{useOmitProps as x}from"@soybeanjs/headless/composables";import{useStyleTag as S}from"@vueuse/core";import{ConfigProvider as C}from"@soybeanjs/headless/config-provider";import{isClient as w,
|
|
1
|
+
import{themeSizeMap as e}from"../../theme/config.js";import"../../theme/index.js";import t from"../dialog/dialog-provider.js";import n from"../progress/progress-provider.js";import r from"../toast/toast-provider.js";import{provideConfigProviderContext as i}from"./context.js";import a from"../icon/icon.js";import{createBlock as o,createCommentVNode as s,createVNode as c,defineComponent as l,guardReactiveProps as u,h as d,mergeProps as f,normalizeProps as p,openBlock as m,renderSlot as h,shallowRef as g,unref as _,watch as v,watchEffect as y,withCtx as b}from"vue";import{useOmitProps as x}from"@soybeanjs/headless/composables";import{useStyleTag as S}from"@vueuse/core";import{ConfigProvider as C}from"@soybeanjs/headless/config-provider";import{isClient as w,transformPropsToContext as T}from"@soybeanjs/headless/shared";import{createShadcnTheme as E}from"@soybeanjs/shadcn-theme";const D=l({name:`SConfigProvider`,__name:`config-provider`,props:{theme:{default:()=>({})},size:{default:`md`},iconify:{default:()=>({width:`1.25em`,height:`1.25em`})},progress:{},toast:{},customToast:{type:Boolean},dir:{},locale:{},nonce:{},tooltip:{},iconRender:{},messages:{}},setup(l){let D=l,O=x(D,[`iconRender`,`theme`,`size`,`iconify`,`progress`,`toast`,`customToast`]),k=D.iconRender??(e=>d(a,{icon:e,ssr:import.meta.env.SSR}));i({...T(D),iconRender:k});let A=g(``),j=()=>{let{getCss:e}=E(D.theme);A.value=e(D.theme,D.theme.radius)};return S(A,{id:`__SoybeanUI_theme`}),y(()=>{if(!w)return;let t=e[D.size??`md`];document.documentElement.style.fontSize=`${t}px`},{flush:`post`}),v(()=>D.theme,()=>{w&&j()},{deep:!0,flush:`post`,immediate:!0}),(e,i)=>(m(),o(_(C),f(_(O),{"icon-render":_(k)}),{default:b(()=>[h(e.$slots,`default`),D.customToast?s(`v-if`,!0):(m(),o(r,p(f({key:0},D.toast)),null,16)),c(t),c(n,p(u(D.progress)),null,16)]),_:3},16,[`icon-render`]))}});export{D as default};
|
|
@@ -5,7 +5,6 @@ import { DefinedValue } from "@soybeanjs/headless/types";
|
|
|
5
5
|
declare const __VLS_export: <T extends DefinedValue = DefinedValue>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
6
6
|
props: import("vue").PublicProps & __VLS_PrettifyLocal<ContextMenuCheckboxProps<T> & {
|
|
7
7
|
onSelect?: ((item: import("@soybeanjs/headless").MenuCheckboxOptionData<T>, event: Event) => any) | undefined;
|
|
8
|
-
"onUpdate:modelValue"?: ((value: T[]) => any) | undefined;
|
|
9
8
|
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
10
9
|
onEscapeKeyDown?: ((event: KeyboardEvent) => any) | undefined;
|
|
11
10
|
onPointerDownOutside?: ((event: import("@soybeanjs/headless").PointerDownOutsideEvent) => any) | undefined;
|
|
@@ -13,6 +12,7 @@ declare const __VLS_export: <T extends DefinedValue = DefinedValue>(__VLS_props:
|
|
|
13
12
|
onInteractOutside?: ((event: import("@soybeanjs/headless").PointerDownOutsideEvent | import("@soybeanjs/headless").FocusOutsideEvent) => any) | undefined;
|
|
14
13
|
onOpenAutoFocus?: ((event: Event) => any) | undefined;
|
|
15
14
|
onCloseAutoFocus?: ((event: Event) => any) | undefined;
|
|
15
|
+
"onUpdate:modelValue"?: ((value: T[]) => any) | undefined;
|
|
16
16
|
onEntryFocus?: ((event: Event) => any) | undefined;
|
|
17
17
|
}> & (typeof globalThis extends {
|
|
18
18
|
__VLS_PROPS_FALLBACK: infer P;
|
|
@@ -20,7 +20,7 @@ declare const __VLS_export: <T extends DefinedValue = DefinedValue>(__VLS_props:
|
|
|
20
20
|
expose: (exposed: {}) => void;
|
|
21
21
|
attrs: any;
|
|
22
22
|
slots: ContextMenuCheckboxSlots<T>;
|
|
23
|
-
emit: ((evt: "select", item: import("@soybeanjs/headless").MenuCheckboxOptionData<T>, event: Event) => void) & ((evt: "update:
|
|
23
|
+
emit: ((evt: "select", item: import("@soybeanjs/headless").MenuCheckboxOptionData<T>, event: Event) => void) & ((evt: "update:open", value: boolean) => void) & ((evt: "escapeKeyDown", event: KeyboardEvent) => void) & ((evt: "pointerDownOutside", event: import("@soybeanjs/headless").PointerDownOutsideEvent) => void) & ((evt: "focusOutside", event: import("@soybeanjs/headless").FocusOutsideEvent) => void) & ((evt: "interactOutside", event: import("@soybeanjs/headless").PointerDownOutsideEvent | import("@soybeanjs/headless").FocusOutsideEvent) => void) & ((evt: "openAutoFocus", event: Event) => void) & ((evt: "closeAutoFocus", event: Event) => void) & ((evt: "update:modelValue", value: T[]) => void) & ((evt: "entryFocus", event: Event) => void);
|
|
24
24
|
}>) => import("vue").VNode & {
|
|
25
25
|
__ctx?: Awaited<typeof __VLS_setup>;
|
|
26
26
|
};
|
|
@@ -5,7 +5,6 @@ import { AcceptableBooleanValue } from "@soybeanjs/headless/types";
|
|
|
5
5
|
declare const __VLS_export: <T extends AcceptableBooleanValue = AcceptableBooleanValue>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
6
6
|
props: import("vue").PublicProps & __VLS_PrettifyLocal<ContextMenuRadioProps<T> & {
|
|
7
7
|
onSelect?: ((item: import("@soybeanjs/headless").MenuRadioOptionData<T>, event: Event) => any) | undefined;
|
|
8
|
-
"onUpdate:modelValue"?: ((payload: Exclude<T, undefined>) => any) | undefined;
|
|
9
8
|
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
10
9
|
onEscapeKeyDown?: ((event: KeyboardEvent) => any) | undefined;
|
|
11
10
|
onPointerDownOutside?: ((event: import("@soybeanjs/headless").PointerDownOutsideEvent) => any) | undefined;
|
|
@@ -13,6 +12,7 @@ declare const __VLS_export: <T extends AcceptableBooleanValue = AcceptableBoolea
|
|
|
13
12
|
onInteractOutside?: ((event: import("@soybeanjs/headless").PointerDownOutsideEvent | import("@soybeanjs/headless").FocusOutsideEvent) => any) | undefined;
|
|
14
13
|
onOpenAutoFocus?: ((event: Event) => any) | undefined;
|
|
15
14
|
onCloseAutoFocus?: ((event: Event) => any) | undefined;
|
|
15
|
+
"onUpdate:modelValue"?: ((payload: Exclude<T, undefined>) => any) | undefined;
|
|
16
16
|
onEntryFocus?: ((event: Event) => any) | undefined;
|
|
17
17
|
}> & (typeof globalThis extends {
|
|
18
18
|
__VLS_PROPS_FALLBACK: infer P;
|
|
@@ -20,7 +20,7 @@ declare const __VLS_export: <T extends AcceptableBooleanValue = AcceptableBoolea
|
|
|
20
20
|
expose: (exposed: {}) => void;
|
|
21
21
|
attrs: any;
|
|
22
22
|
slots: ContextMenuRadioSlots<T>;
|
|
23
|
-
emit: ((evt: "select", item: import("@soybeanjs/headless").MenuRadioOptionData<T>, event: Event) => void) & ((evt: "update:
|
|
23
|
+
emit: ((evt: "select", item: import("@soybeanjs/headless").MenuRadioOptionData<T>, event: Event) => void) & ((evt: "update:open", value: boolean) => void) & ((evt: "escapeKeyDown", event: KeyboardEvent) => void) & ((evt: "pointerDownOutside", event: import("@soybeanjs/headless").PointerDownOutsideEvent) => void) & ((evt: "focusOutside", event: import("@soybeanjs/headless").FocusOutsideEvent) => void) & ((evt: "interactOutside", event: import("@soybeanjs/headless").PointerDownOutsideEvent | import("@soybeanjs/headless").FocusOutsideEvent) => void) & ((evt: "openAutoFocus", event: Event) => void) & ((evt: "closeAutoFocus", event: Event) => void) & ((evt: "update:modelValue", payload: Exclude<T, undefined>) => void) & ((evt: "entryFocus", event: Event) => void);
|
|
24
24
|
}>) => import("vue").VNode & {
|
|
25
25
|
__ctx?: Awaited<typeof __VLS_setup>;
|
|
26
26
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"../calendar/calendar.js";import{datePickerVariants as t}from"../../styles/date-picker.js";import{computed as n,createBlock as r,createVNode as i,defineComponent as a,mergeProps as o,openBlock as s,toHandlers as c,unref as l,withCtx as u}from"vue";import{useForwardListeners as d,useOmitProps as f}from"@soybeanjs/headless/composables";import{DatePickerCompact as p,provideDatePickerUi as m}from"@soybeanjs/headless/date-picker";const h=a({name:`SDatePicker`,__name:`date-picker`,props:{class:{type:[Boolean,null,String,Object,Array]},size:{},ui:{},calendarUi:{},dateFieldProps:{},placement:{},showArrow:{type:Boolean},triggerProps:{},portalProps:{},positionerProps:{},popupProps:{},arrowProps:{},closeProps:{},disabled:{type:Boolean},dir:{},open:{type:Boolean,default:void 0},defaultOpen:{type:Boolean},modal:{type:Boolean},headerProps:{},headingProps:{},prevProps:{},nextProps:{},gridProps:{},gridHeadProps:{},gridBodyProps:{},gridRowProps:{},headCellProps:{},cellProps:{},cellTriggerProps:{},locale:{},modelValue:{},defaultValue:{},multiple:{},placeholder:{},defaultPlaceholder:{},readonly:{type:Boolean},pagedNavigation:{type:Boolean},preventDeselect:{type:Boolean},weekStartsOn:{},weekdayFormat:{},calendarLabel:{},fixedWeeks:{type:Boolean},maxValue:{},minValue:{},numberOfMonths:{},initialFocus:{type:Boolean},isDateDisabled:{},isDateUnavailable:{},nextPage:{},prevPage:{},disableDaysOutsideCurrentView:{type:Boolean},asChild:{type:Boolean},as:{}},emits:[`update:open`,`escapeKeyDown`,`pointerDownOutside`,`focusOutside`,`interactOutside`,`openAutoFocus`,`closeAutoFocus`,`update:modelValue`,`update:placeholder`],setup(a,{emit:h}){let g=a,_=h,v=f(g,[`class`,`size`,`ui`]),y=d(_);return m(n(()=>t({size:g.size},g.ui,{root:g.class}))),(t,n)=>(s(),r(l(p),o(l(v),c(l(y))),{default:u(({calendarProps:t,close:n,onUpdateModelValue:r,onUpdatePlaceholder:s})=>[i(e,o(t,{size:a.size,ui:a.calendarUi,"onUpdate:modelValue":e=>{r(e),n()},"onUpdate:placeholder":s}),null,16,[`size`,`ui`,`onUpdate:modelValue`,`onUpdate:placeholder`])]),_:1},16))}});export{h as default};
|
|
1
|
+
import e from"../calendar/calendar.js";import{datePickerVariants as t}from"../../styles/date-picker.js";import{computed as n,createBlock as r,createVNode as i,defineComponent as a,mergeProps as o,openBlock as s,toHandlers as c,unref as l,withCtx as u}from"vue";import{useForwardListeners as d,useOmitProps as f}from"@soybeanjs/headless/composables";import{DatePickerCompact as p,provideDatePickerUi as m}from"@soybeanjs/headless/date-picker";const h=a({name:`SDatePicker`,__name:`date-picker`,props:{class:{type:[Boolean,null,String,Object,Array]},size:{},ui:{},calendarUi:{},dateFieldProps:{},placement:{},showArrow:{type:Boolean},triggerProps:{},portalProps:{},positionerProps:{},popupProps:{},arrowProps:{},closeProps:{},disabled:{type:Boolean},dir:{},open:{type:Boolean,default:void 0},defaultOpen:{type:Boolean},modal:{type:Boolean},headerProps:{},headingProps:{},prevProps:{},nextProps:{},gridProps:{},gridHeadProps:{},gridBodyProps:{},gridRowProps:{},headCellProps:{},cellProps:{},cellTriggerProps:{},locale:{},modelValue:{},defaultValue:{},multiple:{type:Boolean},placeholder:{},defaultPlaceholder:{},readonly:{type:Boolean},pagedNavigation:{type:Boolean},preventDeselect:{type:Boolean},weekStartsOn:{},weekdayFormat:{},calendarLabel:{},fixedWeeks:{type:Boolean},maxValue:{},minValue:{},numberOfMonths:{},initialFocus:{type:Boolean},isDateDisabled:{},isDateUnavailable:{},nextPage:{},prevPage:{},disableDaysOutsideCurrentView:{type:Boolean},asChild:{type:Boolean},as:{}},emits:[`update:open`,`escapeKeyDown`,`pointerDownOutside`,`focusOutside`,`interactOutside`,`openAutoFocus`,`closeAutoFocus`,`update:modelValue`,`update:placeholder`],setup(a,{emit:h}){let g=a,_=h,v=f(g,[`class`,`size`,`ui`]),y=d(_);return m(n(()=>t({size:g.size},g.ui,{root:g.class}))),(t,n)=>(s(),r(l(p),o(l(v),c(l(y))),{default:u(({calendarProps:t,close:n,onUpdateModelValue:r,onUpdatePlaceholder:s})=>[i(e,o(t,{size:a.size,ui:a.calendarUi,"onUpdate:modelValue":e=>{r(e),n()},"onUpdate:placeholder":s}),null,16,[`size`,`ui`,`onUpdate:modelValue`,`onUpdate:placeholder`])]),_:1},16))}});export{h as default};
|
|
@@ -2,7 +2,6 @@ import { DatePickerProps } from "./types.js";
|
|
|
2
2
|
|
|
3
3
|
//#region src/components/date-picker/date-picker.vue.d.ts
|
|
4
4
|
declare const __VLS_export: import("vue").DefineComponent<DatePickerProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
5
|
-
"update:modelValue": (date: import("@internationalized/date").DateValue | undefined) => any;
|
|
6
5
|
"update:open": (value: boolean) => any;
|
|
7
6
|
escapeKeyDown: (event: KeyboardEvent) => any;
|
|
8
7
|
pointerDownOutside: (event: import("@soybeanjs/headless").PointerDownOutsideEvent) => any;
|
|
@@ -10,9 +9,9 @@ declare const __VLS_export: import("vue").DefineComponent<DatePickerProps, {}, {
|
|
|
10
9
|
interactOutside: (event: import("@soybeanjs/headless").PointerDownOutsideEvent | import("@soybeanjs/headless").FocusOutsideEvent) => any;
|
|
11
10
|
openAutoFocus: (event: Event) => any;
|
|
12
11
|
closeAutoFocus: (event: Event) => any;
|
|
12
|
+
"update:modelValue": (date: import("@internationalized/date").DateValue | undefined) => any;
|
|
13
13
|
"update:placeholder": (date: import("@internationalized/date").DateValue) => any;
|
|
14
14
|
}, string, import("vue").PublicProps, Readonly<DatePickerProps> & Readonly<{
|
|
15
|
-
"onUpdate:modelValue"?: ((date: import("@internationalized/date").DateValue | undefined) => any) | undefined;
|
|
16
15
|
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
17
16
|
onEscapeKeyDown?: ((event: KeyboardEvent) => any) | undefined;
|
|
18
17
|
onPointerDownOutside?: ((event: import("@soybeanjs/headless").PointerDownOutsideEvent) => any) | undefined;
|
|
@@ -20,6 +19,7 @@ declare const __VLS_export: import("vue").DefineComponent<DatePickerProps, {}, {
|
|
|
20
19
|
onInteractOutside?: ((event: import("@soybeanjs/headless").PointerDownOutsideEvent | import("@soybeanjs/headless").FocusOutsideEvent) => any) | undefined;
|
|
21
20
|
onOpenAutoFocus?: ((event: Event) => any) | undefined;
|
|
22
21
|
onCloseAutoFocus?: ((event: Event) => any) | undefined;
|
|
22
|
+
"onUpdate:modelValue"?: ((date: import("@internationalized/date").DateValue | undefined) => any) | undefined;
|
|
23
23
|
"onUpdate:placeholder"?: ((date: import("@internationalized/date").DateValue) => any) | undefined;
|
|
24
24
|
}>, {
|
|
25
25
|
open: boolean;
|