@teamix-evo/ui 0.1.1 → 0.2.0
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 +1 -1
- package/package.json +8 -4
- package/src/components/accordion/accordion.meta.md +10 -5
- package/src/components/accordion/accordion.stories.tsx +11 -6
- package/src/components/affix/affix.meta.md +19 -10
- package/src/components/affix/affix.stories.tsx +4 -2
- package/src/components/alert/alert.meta.md +19 -14
- package/src/components/alert/alert.stories.tsx +1 -1
- package/src/components/alert/alert.tsx +5 -5
- package/src/components/alert-dialog/alert-dialog.meta.md +23 -10
- package/src/components/alert-dialog/alert-dialog.stories.tsx +1 -1
- package/src/components/alert-dialog/alert-dialog.tsx +1 -1
- package/src/components/anchor/anchor.meta.md +20 -11
- package/src/components/anchor/anchor.stories.tsx +1 -1
- package/src/components/app/app.meta.md +19 -10
- package/src/components/app/app.stories.tsx +4 -2
- package/src/components/aspect-ratio/aspect-ratio.meta.md +10 -5
- package/src/components/aspect-ratio/aspect-ratio.stories.tsx +1 -1
- package/src/components/auto-complete/auto-complete.meta.md +25 -16
- package/src/components/auto-complete/auto-complete.stories.tsx +4 -2
- package/src/components/avatar/avatar.meta.md +23 -11
- package/src/components/avatar/avatar.stories.tsx +1 -1
- package/src/components/badge/badge.meta.md +26 -21
- package/src/components/badge/badge.tsx +7 -13
- package/src/components/breadcrumb/breadcrumb.meta.md +21 -10
- package/src/components/breadcrumb/breadcrumb.stories.tsx +8 -0
- package/src/components/button/button.meta.md +22 -17
- package/src/components/button/button.stories.tsx +1 -1
- package/src/components/button/demo/as-child.tsx +24 -0
- package/src/components/button/demo/basic.tsx +8 -0
- package/src/components/button/demo/block.tsx +16 -0
- package/src/components/button/demo/loading.tsx +19 -0
- package/src/components/button/demo/shapes.tsx +18 -0
- package/src/components/button/demo/sizes.tsx +19 -0
- package/src/components/button/demo/variants.tsx +19 -0
- package/src/components/button/demo/with-icon.tsx +20 -0
- package/src/components/button-group/button-group.meta.md +18 -9
- package/src/components/button-group/button-group.stories.tsx +5 -2
- package/src/components/calendar/calendar.meta.md +14 -9
- package/src/components/calendar/calendar.stories.tsx +1 -1
- package/src/components/calendar/calendar.tsx +1 -1
- package/src/components/card/card.meta.md +36 -11
- package/src/components/card/card.stories.tsx +8 -0
- package/src/components/carousel/carousel.meta.md +16 -11
- package/src/components/carousel/carousel.stories.tsx +10 -5
- package/src/components/cascader/cascader.meta.md +28 -19
- package/src/components/cascader/cascader.stories.tsx +9 -8
- package/src/components/cascader/cascader.tsx +2 -2
- package/src/components/checkbox/checkbox.meta.md +26 -8
- package/src/components/checkbox/checkbox.stories.tsx +1 -1
- package/src/components/collapsible/collapsible.meta.md +11 -4
- package/src/components/collapsible/collapsible.stories.tsx +8 -0
- package/src/components/color-picker/color-picker.meta.md +27 -18
- package/src/components/color-picker/color-picker.stories.tsx +1 -1
- package/src/components/color-picker/color-picker.tsx +1 -0
- package/src/components/combobox/combobox.meta.md +29 -20
- package/src/components/combobox/combobox.stories.tsx +1 -1
- package/src/components/combobox/combobox.tsx +3 -3
- package/src/components/command/command.meta.md +32 -12
- package/src/components/command/command.stories.tsx +1 -1
- package/src/components/command/command.tsx +1 -1
- package/src/components/context-menu/context-menu.meta.md +34 -11
- package/src/components/context-menu/context-menu.stories.tsx +8 -0
- package/src/components/context-menu/context-menu.tsx +2 -2
- package/src/components/data-table/data-table.meta.md +24 -19
- package/src/components/data-table/data-table.stories.tsx +12 -5
- package/src/components/date-picker/date-picker.meta.md +40 -20
- package/src/components/date-picker/date-picker.stories.tsx +1 -1
- package/src/components/descriptions/descriptions.meta.md +23 -14
- package/src/components/descriptions/descriptions.stories.tsx +1 -1
- package/src/components/dialog/dialog.meta.md +25 -12
- package/src/components/dialog/dialog.stories.tsx +1 -1
- package/src/components/dialog/dialog.tsx +1 -1
- package/src/components/drawer/drawer.meta.md +19 -8
- package/src/components/drawer/drawer.stories.tsx +1 -1
- package/src/components/drawer/drawer.tsx +1 -0
- package/src/components/dropdown-menu/dropdown-menu.meta.md +42 -14
- package/src/components/dropdown-menu/dropdown-menu.stories.tsx +8 -0
- package/src/components/dropdown-menu/dropdown-menu.tsx +2 -2
- package/src/components/empty/empty.meta.md +20 -11
- package/src/components/empty/empty.stories.tsx +1 -1
- package/src/components/field/field.meta.md +27 -10
- package/src/components/field/field.stories.tsx +6 -3
- package/src/components/flex/flex.meta.md +23 -14
- package/src/components/flex/flex.stories.tsx +46 -14
- package/src/components/float-button/float-button.meta.md +35 -11
- package/src/components/float-button/float-button.stories.tsx +4 -2
- package/src/components/float-button/float-button.tsx +1 -1
- package/src/components/form/form.meta.md +57 -14
- package/src/components/form/form.stories.tsx +1 -1
- package/src/components/grid/grid.meta.md +31 -6
- package/src/components/grid/grid.stories.tsx +4 -2
- package/src/components/hover-card/hover-card.meta.md +21 -9
- package/src/components/hover-card/hover-card.stories.tsx +6 -2
- package/src/components/image/image.meta.md +24 -15
- package/src/components/image/image.stories.tsx +1 -1
- package/src/components/image/image.tsx +4 -4
- package/src/components/input/demo/addon.tsx +15 -0
- package/src/components/input/demo/basic.tsx +12 -0
- package/src/components/input/demo/clearable.tsx +21 -0
- package/src/components/input/demo/show-count.tsx +18 -0
- package/src/components/input/demo/sizes.tsx +15 -0
- package/src/components/input/demo/with-prefix-suffix.tsx +19 -0
- package/src/components/input/input.meta.md +21 -16
- package/src/components/input/input.stories.tsx +1 -1
- package/src/components/input/input.tsx +51 -47
- package/src/components/input-group/input-group.meta.md +26 -8
- package/src/components/input-group/input-group.stories.tsx +1 -1
- package/src/components/input-group/input-group.tsx +4 -3
- package/src/components/input-number/input-number.meta.md +26 -17
- package/src/components/input-number/input-number.stories.tsx +14 -3
- package/src/components/input-number/input-number.tsx +20 -6
- package/src/components/input-otp/input-otp.meta.md +22 -9
- package/src/components/input-otp/input-otp.stories.tsx +1 -1
- package/src/components/item/item.meta.md +32 -9
- package/src/components/item/item.stories.tsx +5 -2
- package/src/components/kbd/kbd.meta.md +29 -8
- package/src/components/kbd/kbd.stories.tsx +1 -1
- package/src/components/kbd/kbd.tsx +2 -1
- package/src/components/label/label.meta.md +14 -9
- package/src/components/masonry/masonry.meta.md +18 -9
- package/src/components/masonry/masonry.stories.tsx +4 -2
- package/src/components/masonry/masonry.tsx +1 -0
- package/src/components/mentions/mentions.meta.md +28 -19
- package/src/components/mentions/mentions.stories.tsx +1 -1
- package/src/components/mentions/mentions.tsx +2 -1
- package/src/components/menubar/menubar.meta.md +36 -14
- package/src/components/menubar/menubar.stories.tsx +8 -0
- package/src/components/menubar/menubar.tsx +2 -2
- package/src/components/native-select/native-select.meta.md +17 -8
- package/src/components/native-select/native-select.stories.tsx +6 -3
- package/src/components/navigation-menu/navigation-menu.meta.md +25 -11
- package/src/components/navigation-menu/navigation-menu.stories.tsx +11 -11
- package/src/components/navigation-menu/navigation-menu.tsx +3 -2
- package/src/components/notification/notification.meta.md +14 -5
- package/src/components/notification/notification.stories.tsx +5 -3
- package/src/components/notification/notification.tsx +3 -3
- package/src/components/pagination/pagination.meta.md +59 -28
- package/src/components/pagination/pagination.stories.tsx +9 -3
- package/src/components/popconfirm/popconfirm.meta.md +30 -21
- package/src/components/popconfirm/popconfirm.stories.tsx +1 -2
- package/src/components/popconfirm/popconfirm.tsx +1 -1
- package/src/components/popover/popover.meta.md +13 -8
- package/src/components/popover/popover.stories.tsx +1 -1
- package/src/components/progress/progress.meta.md +28 -13
- package/src/components/progress/progress.stories.tsx +1 -1
- package/src/components/progress/progress.tsx +6 -6
- package/src/components/radio-group/radio-group.meta.md +17 -12
- package/src/components/radio-group/radio-group.stories.tsx +1 -1
- package/src/components/rate/rate.meta.md +25 -16
- package/src/components/rate/rate.stories.tsx +11 -3
- package/src/components/rate/rate.tsx +2 -2
- package/src/components/resizable/resizable.meta.md +19 -8
- package/src/components/resizable/resizable.stories.tsx +1 -1
- package/src/components/result/result.meta.md +21 -12
- package/src/components/result/result.stories.tsx +2 -6
- package/src/components/result/result.tsx +3 -3
- package/src/components/scroll-area/scroll-area.meta.md +10 -5
- package/src/components/scroll-area/scroll-area.stories.tsx +8 -0
- package/src/components/scroll-area/scroll-area.tsx +3 -3
- package/src/components/segmented/segmented.meta.md +19 -14
- package/src/components/segmented/segmented.stories.tsx +35 -6
- package/src/components/select/select.meta.md +22 -9
- package/src/components/select/select.stories.tsx +1 -1
- package/src/components/select/select.tsx +2 -2
- package/src/components/separator/separator.meta.md +16 -11
- package/src/components/separator/separator.stories.tsx +1 -1
- package/src/components/sheet/sheet.meta.md +22 -11
- package/src/components/sheet/sheet.stories.tsx +1 -1
- package/src/components/sidebar/sidebar.meta.md +47 -18
- package/src/components/sidebar/sidebar.stories.tsx +10 -5
- package/src/components/skeleton/skeleton.meta.md +33 -10
- package/src/components/skeleton/skeleton.stories.tsx +1 -1
- package/src/components/slider/slider.meta.md +12 -7
- package/src/components/slider/slider.stories.tsx +1 -1
- package/src/components/sonner/sonner.meta.md +8 -3
- package/src/components/sonner/sonner.stories.tsx +13 -8
- package/src/components/space/space.meta.md +22 -13
- package/src/components/space/space.stories.tsx +20 -6
- package/src/components/spinner/spinner.meta.md +23 -10
- package/src/components/spinner/spinner.stories.tsx +1 -1
- package/src/components/statistic/statistic.meta.md +37 -16
- package/src/components/statistic/statistic.stories.tsx +2 -6
- package/src/components/statistic/statistic.tsx +1 -1
- package/src/components/steps/steps.meta.md +21 -12
- package/src/components/steps/steps.stories.tsx +7 -2
- package/src/components/switch/switch.meta.md +16 -11
- package/src/components/switch/switch.stories.tsx +1 -1
- package/src/components/switch/switch.tsx +58 -36
- package/src/components/table/table.meta.md +24 -9
- package/src/components/table/table.stories.tsx +9 -4
- package/src/components/tabs/tabs.meta.md +14 -9
- package/src/components/tabs/tabs.stories.tsx +8 -0
- package/src/components/tag/tag.meta.md +39 -10
- package/src/components/tag/tag.stories.tsx +7 -2
- package/src/components/tag/tag.tsx +3 -3
- package/src/components/textarea/textarea.meta.md +17 -12
- package/src/components/textarea/textarea.stories.tsx +1 -1
- package/src/components/textarea/textarea.tsx +1 -1
- package/src/components/time-picker/time-picker.meta.md +38 -15
- package/src/components/time-picker/time-picker.stories.tsx +44 -6
- package/src/components/time-picker/time-picker.tsx +74 -10
- package/src/components/timeline/timeline.meta.md +20 -11
- package/src/components/timeline/timeline.stories.tsx +14 -4
- package/src/components/timeline/timeline.tsx +3 -2
- package/src/components/toggle/toggle.meta.md +14 -9
- package/src/components/toggle/toggle.stories.tsx +1 -1
- package/src/components/toggle-group/toggle-group.meta.md +16 -11
- package/src/components/toggle-group/toggle-group.stories.tsx +1 -1
- package/src/components/tooltip/tooltip.meta.md +18 -13
- package/src/components/tooltip/tooltip.stories.tsx +1 -1
- package/src/components/tour/tour.meta.md +25 -16
- package/src/components/tour/tour.stories.tsx +1 -1
- package/src/components/tour/tour.tsx +1 -1
- package/src/components/transfer/transfer.meta.md +29 -20
- package/src/components/transfer/transfer.stories.tsx +2 -6
- package/src/components/tree/tree.meta.md +36 -23
- package/src/components/tree/tree.stories.tsx +30 -11
- package/src/components/tree-select/tree-select.meta.md +37 -22
- package/src/components/tree-select/tree-select.stories.tsx +1 -1
- package/src/components/tree-select/tree-select.tsx +1 -1
- package/src/components/typography/typography.meta.md +41 -16
- package/src/components/typography/typography.stories.tsx +4 -8
- package/src/components/typography/typography.tsx +5 -3
- package/src/components/upload/upload.meta.md +31 -22
- package/src/components/upload/upload.stories.tsx +8 -14
- package/src/components/watermark/watermark.meta.md +26 -17
- package/src/components/watermark/watermark.stories.tsx +4 -2
- package/src/components/watermark/watermark.tsx +1 -0
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: sheet
|
|
3
3
|
name: Sheet
|
|
4
|
+
displayName: 侧边面板
|
|
4
5
|
type: component
|
|
5
6
|
category: feedback
|
|
6
7
|
since: 0.1.0
|
|
7
|
-
package:
|
|
8
|
+
package: '@teamix-evo/ui'
|
|
8
9
|
---
|
|
9
10
|
|
|
10
|
-
# Sheet
|
|
11
|
+
# Sheet 侧边面板
|
|
11
12
|
|
|
12
13
|
侧边滑出面板 — Radix Dialog 底座 + side 方向变体(left / right / top / bottom)+ antd Drawer `placement` 并集。
|
|
13
14
|
**与 Dialog 的关键差异**:Sheet 从屏幕边缘滑入,模态阻断同样;`Drawer` 是底部可拖拽抽屉(iOS 风格,移动端体验)。
|
|
@@ -30,9 +31,11 @@ package: "@teamix-evo/ui"
|
|
|
30
31
|
> 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成。下表是 `SheetContent` 的 props;`Sheet`(Root)透传 Radix `open / defaultOpen / onOpenChange / modal`。
|
|
31
32
|
|
|
32
33
|
<!-- auto:props:begin -->
|
|
33
|
-
|
|
34
|
-
|
|
|
35
|
-
|
|
|
34
|
+
|
|
35
|
+
| 名称 | 类型 | 默认值 | 必填 | 说明 |
|
|
36
|
+
| ------ | ---------------------------------------- | --------- | ---- | ---------------------------------------- |
|
|
37
|
+
| `side` | `'top' \| 'right' \| 'bottom' \| 'left'` | `"right"` | – | 弹出方向(antd Drawer `placement` 并集)。 |
|
|
38
|
+
|
|
36
39
|
<!-- auto:props:end -->
|
|
37
40
|
|
|
38
41
|
## 依赖
|
|
@@ -40,13 +43,14 @@ package: "@teamix-evo/ui"
|
|
|
40
43
|
> 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成,数据源是 [`manifest.json`](../../../manifest.json)。**手工编辑 marker 之间的内容会在下次生成时被覆盖**。
|
|
41
44
|
|
|
42
45
|
<!-- auto:deps:begin -->
|
|
46
|
+
|
|
43
47
|
### 同库依赖
|
|
44
48
|
|
|
45
49
|
> `teamix-evo ui add sheet` 时,以下 entry 会被自动连带安装(无需手动 add)。
|
|
46
50
|
|
|
47
|
-
| Entry | 类型 | 描述
|
|
48
|
-
|
|
|
49
|
-
| `cn`
|
|
51
|
+
| Entry | 类型 | 描述 |
|
|
52
|
+
| ----- | ---- | -------------------------------------------------- |
|
|
53
|
+
| `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
|
|
50
54
|
|
|
51
55
|
### npm 依赖
|
|
52
56
|
|
|
@@ -55,6 +59,7 @@ package: "@teamix-evo/ui"
|
|
|
55
59
|
```bash
|
|
56
60
|
pnpm add @radix-ui/react-dialog@^1.1.0 class-variance-authority@^0.7.0 lucide-react@^0.460.0
|
|
57
61
|
```
|
|
62
|
+
|
|
58
63
|
<!-- auto:deps:end -->
|
|
59
64
|
|
|
60
65
|
> 子组件:`Sheet` / `SheetTrigger` / `SheetContent`(`side` 在此)/ `SheetHeader` / `SheetFooter` / `SheetTitle` / `SheetDescription` / `SheetClose` / `SheetOverlay` / `SheetPortal`。
|
|
@@ -71,8 +76,14 @@ pnpm add @radix-ui/react-dialog@^1.1.0 class-variance-authority@^0.7.0 lucide-re
|
|
|
71
76
|
|
|
72
77
|
```tsx
|
|
73
78
|
import {
|
|
74
|
-
Sheet,
|
|
75
|
-
|
|
79
|
+
Sheet,
|
|
80
|
+
SheetTrigger,
|
|
81
|
+
SheetContent,
|
|
82
|
+
SheetHeader,
|
|
83
|
+
SheetTitle,
|
|
84
|
+
SheetDescription,
|
|
85
|
+
SheetFooter,
|
|
86
|
+
SheetClose,
|
|
76
87
|
} from '@/components/ui/sheet';
|
|
77
88
|
import { Button } from '@/components/ui/button';
|
|
78
89
|
|
|
@@ -93,5 +104,5 @@ import { Button } from '@/components/ui/button';
|
|
|
93
104
|
<Button>保存</Button>
|
|
94
105
|
</SheetFooter>
|
|
95
106
|
</SheetContent>
|
|
96
|
-
</Sheet
|
|
107
|
+
</Sheet>;
|
|
97
108
|
```
|
|
@@ -19,7 +19,7 @@ const meta: Meta<typeof SheetContent> = {
|
|
|
19
19
|
docs: {
|
|
20
20
|
description: {
|
|
21
21
|
component:
|
|
22
|
-
'侧边抽屉 — 从屏幕边缘滑入的补充内容面板,补充主区不中断主流程。语义上是 Dialog 的表弟但定位于边缘,对齐 antd `Drawer`;Radix Dialog 内核实现 + shadcn `Sheet` 的 `side` 变体 (top / right / bottom / left)
|
|
22
|
+
'侧边抽屉 — 从屏幕边缘滑入的补充内容面板,补充主区不中断主流程。语义上是 Dialog 的表弟但定位于边缘,对齐 antd `Drawer`;Radix Dialog 内核实现 + shadcn `Sheet` 的 `side` 变体 (top / right / bottom / left)。',
|
|
23
23
|
},
|
|
24
24
|
},
|
|
25
25
|
},
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: sidebar
|
|
3
3
|
name: Sidebar
|
|
4
|
+
displayName: 侧边栏
|
|
4
5
|
type: component
|
|
5
6
|
category: navigation
|
|
6
7
|
since: 0.1.0
|
|
7
|
-
package:
|
|
8
|
+
package: '@teamix-evo/ui'
|
|
8
9
|
---
|
|
9
10
|
|
|
10
|
-
# Sidebar
|
|
11
|
+
# Sidebar 侧边栏
|
|
11
12
|
|
|
12
13
|
侧边导航栏 — shadcn 风格复合组件,**对应 antd `Layout.Sider + Menu`**。
|
|
13
14
|
**精简版**(MVP):涵盖 Provider + 折叠状态 + Header/Footer/Content + Menu + Trigger。
|
|
@@ -30,12 +31,31 @@ package: "@teamix-evo/ui"
|
|
|
30
31
|
> 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成。下表是 `Sidebar` 主容器 props。
|
|
31
32
|
|
|
32
33
|
<!-- auto:props:begin -->
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
|
37
|
-
|
|
|
38
|
-
| `
|
|
34
|
+
|
|
35
|
+
#### Sidebar
|
|
36
|
+
|
|
37
|
+
| 名称 | 类型 | 默认值 | 必填 | 说明 |
|
|
38
|
+
| ---------------- | --------------------------------- | --------- | ---- | -------------------------------------------------------------------- |
|
|
39
|
+
| `side` | `'left' \| 'right'` | `"left"` | – | 侧边方向。 |
|
|
40
|
+
| `collapsible` | `'icon' \| 'offcanvas' \| 'none'` | `"icon"` | – | 折叠模式 — `icon` 折叠后只剩图标列(64px);`offcanvas` 完全收起(0px)。 |
|
|
41
|
+
| `width` | `string` | `"16rem"` | – | 展开宽度。 |
|
|
42
|
+
| `collapsedWidth` | `string` | `"3rem"` | – | 折叠后宽度(`collapsible="icon"` 时生效)。 |
|
|
43
|
+
|
|
44
|
+
#### SidebarProvider
|
|
45
|
+
|
|
46
|
+
| 名称 | 类型 | 默认值 | 必填 | 说明 |
|
|
47
|
+
| -------------- | ------------------------- | ------ | ---- | ------------------- |
|
|
48
|
+
| `open` | `boolean` | – | – | 受控 open 状态。 |
|
|
49
|
+
| `defaultOpen` | `boolean` | `true` | – | 非受控初始状态。 |
|
|
50
|
+
| `onOpenChange` | `(open: boolean) => void` | – | – | open 状态变化回调。 |
|
|
51
|
+
|
|
52
|
+
#### SidebarMenuButton
|
|
53
|
+
|
|
54
|
+
| 名称 | 类型 | 默认值 | 必填 | 说明 |
|
|
55
|
+
| ---------- | --------- | ------ | ---- | ------------------------------------- |
|
|
56
|
+
| `isActive` | `boolean` | – | – | 当前激活态(高亮显示)。 |
|
|
57
|
+
| `asChild` | `boolean` | – | – | 用 Slot 渲染为子元素(配合路由 Link)。 |
|
|
58
|
+
|
|
39
59
|
<!-- auto:props:end -->
|
|
40
60
|
|
|
41
61
|
## 依赖
|
|
@@ -43,15 +63,16 @@ package: "@teamix-evo/ui"
|
|
|
43
63
|
> 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成,数据源是 [`manifest.json`](../../../manifest.json)。**手工编辑 marker 之间的内容会在下次生成时被覆盖**。
|
|
44
64
|
|
|
45
65
|
<!-- auto:deps:begin -->
|
|
66
|
+
|
|
46
67
|
### 同库依赖
|
|
47
68
|
|
|
48
69
|
> `teamix-evo ui add sidebar` 时,以下 entry 会被自动连带安装(无需手动 add)。
|
|
49
70
|
|
|
50
|
-
| Entry
|
|
51
|
-
|
|
|
52
|
-
| `cn`
|
|
53
|
-
| `button`
|
|
54
|
-
| `separator` | component | 分隔线 — Radix Separator + antd Divider 的 dashed / 中间装饰文本
|
|
71
|
+
| Entry | 类型 | 描述 |
|
|
72
|
+
| ----------- | --------- | --------------------------------------------------------------------------------------- |
|
|
73
|
+
| `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
|
|
74
|
+
| `button` | component | 通用按钮 — shadcn 实现 + antd 功能扩展(loading / icon / shape / block / dashed variant) |
|
|
75
|
+
| `separator` | component | 分隔线 — Radix Separator + antd Divider 的 dashed / 中间装饰文本 |
|
|
55
76
|
|
|
56
77
|
### npm 依赖
|
|
57
78
|
|
|
@@ -60,9 +81,8 @@ package: "@teamix-evo/ui"
|
|
|
60
81
|
```bash
|
|
61
82
|
pnpm add @radix-ui/react-slot@^1.1.0 class-variance-authority@^0.7.0 lucide-react@^0.460.0
|
|
62
83
|
```
|
|
63
|
-
<!-- auto:deps:end -->
|
|
64
84
|
|
|
65
|
-
|
|
85
|
+
<!-- auto:deps:end -->
|
|
66
86
|
|
|
67
87
|
## AI 生成纪律
|
|
68
88
|
|
|
@@ -77,9 +97,18 @@ pnpm add @radix-ui/react-slot@^1.1.0 class-variance-authority@^0.7.0 lucide-reac
|
|
|
77
97
|
|
|
78
98
|
```tsx
|
|
79
99
|
import {
|
|
80
|
-
SidebarProvider,
|
|
81
|
-
|
|
82
|
-
|
|
100
|
+
SidebarProvider,
|
|
101
|
+
Sidebar,
|
|
102
|
+
SidebarHeader,
|
|
103
|
+
SidebarContent,
|
|
104
|
+
SidebarGroup,
|
|
105
|
+
SidebarGroupLabel,
|
|
106
|
+
SidebarMenu,
|
|
107
|
+
SidebarMenuItem,
|
|
108
|
+
SidebarMenuButton,
|
|
109
|
+
SidebarFooter,
|
|
110
|
+
SidebarTrigger,
|
|
111
|
+
SidebarInset,
|
|
83
112
|
} from '@/components/ui/sidebar';
|
|
84
113
|
import { Home, Settings, Inbox, Users } from 'lucide-react';
|
|
85
114
|
|
|
@@ -20,7 +20,15 @@ const meta: Meta<typeof Sidebar> = {
|
|
|
20
20
|
title: '导航 · Navigation/Sidebar',
|
|
21
21
|
component: Sidebar,
|
|
22
22
|
tags: ['autodocs'],
|
|
23
|
-
parameters: {
|
|
23
|
+
parameters: {
|
|
24
|
+
layout: 'fullscreen',
|
|
25
|
+
docs: {
|
|
26
|
+
description: {
|
|
27
|
+
component:
|
|
28
|
+
'侧边导航栏 — shadcn 风格复合组件,对应 antd Layout.Sider + Menu。支持 icon 折叠 / offcanvas 收起,提供 Provider + Menu + Trigger + Inset 全套子组件。',
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
24
32
|
};
|
|
25
33
|
|
|
26
34
|
export default meta;
|
|
@@ -46,10 +54,7 @@ function DemoLayout({ active }: { active: string }) {
|
|
|
46
54
|
<SidebarMenu>
|
|
47
55
|
{items.map((it) => (
|
|
48
56
|
<SidebarMenuItem key={it.title}>
|
|
49
|
-
<SidebarMenuButton
|
|
50
|
-
asChild
|
|
51
|
-
isActive={active === it.url}
|
|
52
|
-
>
|
|
57
|
+
<SidebarMenuButton asChild isActive={active === it.url}>
|
|
53
58
|
<a href={it.url} onClick={(e) => e.preventDefault()}>
|
|
54
59
|
<it.icon />
|
|
55
60
|
<span>{it.title}</span>
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: skeleton
|
|
3
3
|
name: Skeleton
|
|
4
|
+
displayName: 骨架屏
|
|
4
5
|
type: component
|
|
5
6
|
category: foundation
|
|
6
7
|
since: 0.1.0
|
|
7
|
-
package:
|
|
8
|
+
package: '@teamix-evo/ui'
|
|
8
9
|
---
|
|
9
10
|
|
|
10
|
-
# Skeleton
|
|
11
|
+
# Skeleton 骨架屏
|
|
11
12
|
|
|
12
13
|
骨架屏占位 — shadcn 单元素 pulse + antd 子组件家族(`SkeletonAvatar / SkeletonImage / SkeletonButton / SkeletonInput / SkeletonParagraph`)。
|
|
13
14
|
|
|
@@ -29,9 +30,31 @@ package: "@teamix-evo/ui"
|
|
|
29
30
|
> 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成。
|
|
30
31
|
|
|
31
32
|
<!-- auto:props:begin -->
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
|
|
34
|
+
#### Skeleton
|
|
35
|
+
|
|
36
|
+
| 名称 | 类型 | 默认值 | 必填 | 说明 |
|
|
37
|
+
| ------- | ------------------------------ | -------- | ---- | ------------------------------------------------------------------------------- |
|
|
38
|
+
| `shape` | `'rect' \| 'circle' \| 'line'` | `"rect"` | – | 形状变体。`rect` 默认矩形;`circle` 圆形(用于 Avatar 占位);`line` 单行文本占位。 |
|
|
39
|
+
|
|
40
|
+
#### SkeletonAvatar
|
|
41
|
+
|
|
42
|
+
| 名称 | 类型 | 默认值 | 必填 | 说明 |
|
|
43
|
+
| ------ | --------------------------- | ----------- | ---- | --------------------------------- |
|
|
44
|
+
| `size` | `'sm' \| 'default' \| 'lg'` | `"default"` | – | 尺寸:sm 32 / default 40 / lg 64。 |
|
|
45
|
+
|
|
46
|
+
#### SkeletonButton
|
|
47
|
+
|
|
48
|
+
| 名称 | 类型 | 默认值 | 必填 | 说明 |
|
|
49
|
+
| ------ | --------------------------- | ----------- | ---- | ------ |
|
|
50
|
+
| `size` | `'sm' \| 'default' \| 'lg'` | `"default"` | – | 尺寸。 |
|
|
51
|
+
|
|
52
|
+
#### SkeletonParagraph
|
|
53
|
+
|
|
54
|
+
| 名称 | 类型 | 默认值 | 必填 | 说明 |
|
|
55
|
+
| ------ | -------- | ------ | ---- | --------------------------------------------------- |
|
|
56
|
+
| `rows` | `number` | `3` | – | 段落行数。最后一行宽度自动收窄至 60%,模拟自然段尾。 |
|
|
57
|
+
|
|
35
58
|
<!-- auto:props:end -->
|
|
36
59
|
|
|
37
60
|
## 依赖
|
|
@@ -39,13 +62,14 @@ package: "@teamix-evo/ui"
|
|
|
39
62
|
> 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成,数据源是 [`manifest.json`](../../../manifest.json)。**手工编辑 marker 之间的内容会在下次生成时被覆盖**。
|
|
40
63
|
|
|
41
64
|
<!-- auto:deps:begin -->
|
|
65
|
+
|
|
42
66
|
### 同库依赖
|
|
43
67
|
|
|
44
68
|
> `teamix-evo ui add skeleton` 时,以下 entry 会被自动连带安装(无需手动 add)。
|
|
45
69
|
|
|
46
|
-
| Entry | 类型 | 描述
|
|
47
|
-
|
|
|
48
|
-
| `cn`
|
|
70
|
+
| Entry | 类型 | 描述 |
|
|
71
|
+
| ----- | ---- | -------------------------------------------------- |
|
|
72
|
+
| `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
|
|
49
73
|
|
|
50
74
|
### npm 依赖
|
|
51
75
|
|
|
@@ -54,9 +78,8 @@ package: "@teamix-evo/ui"
|
|
|
54
78
|
```bash
|
|
55
79
|
pnpm add class-variance-authority@^0.7.0
|
|
56
80
|
```
|
|
57
|
-
<!-- auto:deps:end -->
|
|
58
81
|
|
|
59
|
-
|
|
82
|
+
<!-- auto:deps:end -->
|
|
60
83
|
|
|
61
84
|
## AI 生成纪律
|
|
62
85
|
|
|
@@ -16,7 +16,7 @@ const meta: Meta<typeof Skeleton> = {
|
|
|
16
16
|
docs: {
|
|
17
17
|
description: {
|
|
18
18
|
component:
|
|
19
|
-
'骨架屏 — 在内容加载过程中呈现占位图形,减少加载期间的视觉跳动。shadcn `Skeleton` 原子 + antd
|
|
19
|
+
'骨架屏 — 在内容加载过程中呈现占位图形,减少加载期间的视觉跳动。shadcn `Skeleton` 原子 + antd 能力并集:支持 `shape: rect | circle | line`,同时提供预设组合 `SkeletonAvatar` / `SkeletonImage` / `SkeletonButton` / `SkeletonInput` / `SkeletonParagraph`。',
|
|
20
20
|
},
|
|
21
21
|
},
|
|
22
22
|
},
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: slider
|
|
3
3
|
name: Slider
|
|
4
|
+
displayName: 滑块
|
|
4
5
|
type: component
|
|
5
6
|
category: form
|
|
6
7
|
since: 0.1.0
|
|
7
8
|
package: '@teamix-evo/ui'
|
|
8
9
|
---
|
|
9
10
|
|
|
10
|
-
# Slider
|
|
11
|
+
# Slider 滑块
|
|
11
12
|
|
|
12
13
|
滑块 — Radix Slider + antd 的 `marks` 刻度标签。**单 / 双滑块由 `value`/`defaultValue` 数组长度决定**(传 `[lo, hi]` 自动变范围滑块)。
|
|
13
14
|
|
|
@@ -28,9 +29,11 @@ package: '@teamix-evo/ui'
|
|
|
28
29
|
> 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成。
|
|
29
30
|
|
|
30
31
|
<!-- auto:props:begin -->
|
|
31
|
-
|
|
32
|
-
|
|
|
33
|
-
|
|
|
32
|
+
|
|
33
|
+
| 名称 | 类型 | 默认值 | 必填 | 说明 |
|
|
34
|
+
| ------- | --------------------------------- | ------ | ---- | ------------------------------------------------------------------------------------------------------- |
|
|
35
|
+
| `marks` | `Record<number, React.ReactNode>` | – | – | 刻度标记(antd `marks` 并集)。键为 0~max 的数值,值为标签文本。 渲染时小标记点 + 文字标签出现在轨道下方。 |
|
|
36
|
+
|
|
34
37
|
<!-- auto:props:end -->
|
|
35
38
|
|
|
36
39
|
## 依赖
|
|
@@ -38,13 +41,14 @@ package: '@teamix-evo/ui'
|
|
|
38
41
|
> 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成,数据源是 [`manifest.json`](../../../manifest.json)。**手工编辑 marker 之间的内容会在下次生成时被覆盖**。
|
|
39
42
|
|
|
40
43
|
<!-- auto:deps:begin -->
|
|
44
|
+
|
|
41
45
|
### 同库依赖
|
|
42
46
|
|
|
43
47
|
> `teamix-evo ui add slider` 时,以下 entry 会被自动连带安装(无需手动 add)。
|
|
44
48
|
|
|
45
|
-
| Entry | 类型 | 描述
|
|
46
|
-
|
|
|
47
|
-
| `cn`
|
|
49
|
+
| Entry | 类型 | 描述 |
|
|
50
|
+
| ----- | ---- | -------------------------------------------------- |
|
|
51
|
+
| `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
|
|
48
52
|
|
|
49
53
|
### npm 依赖
|
|
50
54
|
|
|
@@ -53,6 +57,7 @@ package: '@teamix-evo/ui'
|
|
|
53
57
|
```bash
|
|
54
58
|
pnpm add @radix-ui/react-slider@^1.2.0
|
|
55
59
|
```
|
|
60
|
+
|
|
56
61
|
<!-- auto:deps:end -->
|
|
57
62
|
|
|
58
63
|
> 透传所有 Radix Slider.Root props(`min` / `max` / `step` / `disabled` / `onValueChange` / `name` / `inverted` 等)。
|
|
@@ -9,7 +9,7 @@ const meta: Meta<typeof Slider> = {
|
|
|
9
9
|
docs: {
|
|
10
10
|
description: {
|
|
11
11
|
component:
|
|
12
|
-
'滑块 — 在给定范围内选取一个数值或一段区间。Radix Slider 实现 + antd 的 `marks` 刻度能力:`value` / `defaultValue` 为数组,长度为 1 时为单滑块、为 2 时自动切换为区间滑块;可配 `marks`
|
|
12
|
+
'滑块 — 在给定范围内选取一个数值或一段区间。Radix Slider 实现 + antd 的 `marks` 刻度能力:`value` / `defaultValue` 为数组,长度为 1 时为单滑块、为 2 时自动切换为区间滑块;可配 `marks` 渲染轨道下方的刻度点与标签。',
|
|
13
13
|
},
|
|
14
14
|
},
|
|
15
15
|
},
|
|
@@ -4,10 +4,11 @@ name: Sonner
|
|
|
4
4
|
type: component
|
|
5
5
|
category: feedback
|
|
6
6
|
since: 0.1.0
|
|
7
|
-
package:
|
|
7
|
+
package: '@teamix-evo/ui'
|
|
8
|
+
displayName: 轻提示
|
|
8
9
|
---
|
|
9
10
|
|
|
10
|
-
# Sonner
|
|
11
|
+
# Sonner 轻提示
|
|
11
12
|
|
|
12
13
|
Toast 通知 — 基于 [`sonner`](https://sonner.emilkowal.ski/),已**同时覆盖** antd `message`(行内简短)+ `notification`(标题 + 描述 + 行动)的并集。
|
|
13
14
|
|
|
@@ -31,7 +32,9 @@ Toast 通知 — 基于 [`sonner`](https://sonner.emilkowal.ski/),已**同时覆
|
|
|
31
32
|
> 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成。下表是 `<Toaster />` 的 props。`toast()` 函数式 API 见下方 Examples。
|
|
32
33
|
|
|
33
34
|
<!-- auto:props:begin -->
|
|
35
|
+
|
|
34
36
|
_(no props)_
|
|
37
|
+
|
|
35
38
|
<!-- auto:props:end -->
|
|
36
39
|
|
|
37
40
|
## 依赖
|
|
@@ -39,6 +42,7 @@ _(no props)_
|
|
|
39
42
|
> 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成,数据源是 [`manifest.json`](../../../manifest.json)。**手工编辑 marker 之间的内容会在下次生成时被覆盖**。
|
|
40
43
|
|
|
41
44
|
<!-- auto:deps:begin -->
|
|
45
|
+
|
|
42
46
|
### 同库依赖
|
|
43
47
|
|
|
44
48
|
_无 — 本组件不依赖其他 ui entry。_
|
|
@@ -50,6 +54,7 @@ _无 — 本组件不依赖其他 ui entry。_
|
|
|
50
54
|
```bash
|
|
51
55
|
pnpm add sonner@^1.5.0
|
|
52
56
|
```
|
|
57
|
+
|
|
53
58
|
<!-- auto:deps:end -->
|
|
54
59
|
|
|
55
60
|
> 透传所有 sonner `<Toaster>` 原生属性(`position` / `richColors` / `expand` / `closeButton` 等)。
|
|
@@ -68,7 +73,7 @@ pnpm add sonner@^1.5.0
|
|
|
68
73
|
import { Toaster, toast } from '@/components/ui/sonner';
|
|
69
74
|
|
|
70
75
|
// 应用根
|
|
71
|
-
<Toaster position="top-right" richColors
|
|
76
|
+
<Toaster position="top-right" richColors />;
|
|
72
77
|
|
|
73
78
|
// 简单消息(等价 antd message)
|
|
74
79
|
toast('已复制到剪贴板');
|
|
@@ -6,6 +6,14 @@ const meta: Meta<typeof Toaster> = {
|
|
|
6
6
|
title: '反馈与浮层 · Feedback/Sonner',
|
|
7
7
|
component: Toaster,
|
|
8
8
|
tags: ['autodocs'],
|
|
9
|
+
parameters: {
|
|
10
|
+
docs: {
|
|
11
|
+
description: {
|
|
12
|
+
component:
|
|
13
|
+
'Toast 轻提示 — 基于 sonner 的函数式通知,同时覆盖 antd `message`(简短行内)和 `notification`(标题 + 描述 + 行动)的并集。应用根挂载 `<Toaster />`,任意位置 `toast()` 触发;支持 success / error / warning / promise 等语义方法。',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
},
|
|
9
17
|
argTypes: {
|
|
10
18
|
position: {
|
|
11
19
|
control: 'select',
|
|
@@ -64,14 +72,11 @@ export const Playground: Story = {
|
|
|
64
72
|
<Button
|
|
65
73
|
variant="outline"
|
|
66
74
|
onClick={() =>
|
|
67
|
-
toast.promise(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
error: '保存失败',
|
|
73
|
-
},
|
|
74
|
-
)
|
|
75
|
+
toast.promise(new Promise((res) => setTimeout(res, 1500)), {
|
|
76
|
+
loading: '保存中...',
|
|
77
|
+
success: '保存成功',
|
|
78
|
+
error: '保存失败',
|
|
79
|
+
})
|
|
75
80
|
}
|
|
76
81
|
>
|
|
77
82
|
Promise
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: space
|
|
3
3
|
name: Space
|
|
4
|
+
displayName: 间距
|
|
4
5
|
type: component
|
|
5
6
|
category: layout
|
|
6
7
|
since: 0.1.0
|
|
7
|
-
package:
|
|
8
|
+
package: '@teamix-evo/ui'
|
|
8
9
|
---
|
|
9
10
|
|
|
10
|
-
# Space
|
|
11
|
+
# Space 间距
|
|
11
12
|
|
|
12
13
|
间距容器 — antd 独有补足。**等价 antd `Space`**:把同语义并排子项统一间距、对齐与可选换行,可选 `split` 节点(常用 Separator)。与 `Flex` 区别:Space 偏向**小集合 inline 间距**(按钮组、tag 组、表单 label-value 对),Flex 偏向**完整布局容器**。
|
|
13
14
|
|
|
@@ -23,25 +24,32 @@ package: "@teamix-evo/ui"
|
|
|
23
24
|
- 按钮粘连共享边线 → `ButtonGroup`
|
|
24
25
|
- 大段排版分段 → `Typography Prose`
|
|
25
26
|
|
|
27
|
+
## Props
|
|
28
|
+
|
|
26
29
|
<!-- auto:props:begin -->
|
|
27
|
-
|
|
28
|
-
|
|
|
29
|
-
|
|
|
30
|
-
| `
|
|
31
|
-
| `
|
|
32
|
-
| `
|
|
33
|
-
| `
|
|
34
|
-
| `
|
|
30
|
+
|
|
31
|
+
| 名称 | 类型 | 默认值 | 必填 | 说明 |
|
|
32
|
+
| ----------- | --------------------------------------------------------- | -------------- | ---- | ------------------------------------------------------------------------ |
|
|
33
|
+
| `direction` | `'horizontal' \| 'vertical'` | `"horizontal"` | – | 排列方向(antd `direction` 并集)。 |
|
|
34
|
+
| `size` | `'sm' \| 'default' \| 'lg'` | `"default"` | – | 间距档位(antd `size` 并集) — 走 design 间距刻度,不接受 number。 |
|
|
35
|
+
| `wrap` | `boolean` | `false` | – | 是否自动换行(antd `wrap` 并集) — horizontal 模式生效。 |
|
|
36
|
+
| `align` | `'start' \| 'center' \| 'end' \| 'baseline' \| 'stretch'` | `"center"` | – | 主轴对齐方式(antd `align` 并集)。 |
|
|
37
|
+
| `justify` | `'start' \| 'center' \| 'end' \| 'between' \| 'around'` | – | – | 副轴对齐(antd `Space` 无,Space.Compact 也无 — 但中后台需求高,补)。 |
|
|
38
|
+
| `split` | `React.ReactNode` | – | – | 分隔节点(antd `split` 并集) — 在每两个子项之间插入(常用 `<Separator>`)。 |
|
|
39
|
+
|
|
35
40
|
<!-- auto:props:end -->
|
|
36
41
|
|
|
42
|
+
## 依赖
|
|
43
|
+
|
|
37
44
|
<!-- auto:deps:begin -->
|
|
45
|
+
|
|
38
46
|
### 同库依赖
|
|
39
47
|
|
|
40
48
|
> `teamix-evo ui add space` 时,以下 entry 会被自动连带安装(无需手动 add)。
|
|
41
49
|
|
|
42
|
-
| Entry | 类型 | 描述
|
|
43
|
-
|
|
|
44
|
-
| `cn`
|
|
50
|
+
| Entry | 类型 | 描述 |
|
|
51
|
+
| ----- | ---- | -------------------------------------------------- |
|
|
52
|
+
| `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
|
|
45
53
|
|
|
46
54
|
### npm 依赖
|
|
47
55
|
|
|
@@ -50,6 +58,7 @@ package: "@teamix-evo/ui"
|
|
|
50
58
|
```bash
|
|
51
59
|
pnpm add class-variance-authority@^0.7.0
|
|
52
60
|
```
|
|
61
|
+
|
|
53
62
|
<!-- auto:deps:end -->
|
|
54
63
|
|
|
55
64
|
## AI 生成纪律
|
|
@@ -11,7 +11,7 @@ const meta: Meta<typeof Space> = {
|
|
|
11
11
|
docs: {
|
|
12
12
|
description: {
|
|
13
13
|
component:
|
|
14
|
-
'间距容器 — 把同语义并排子项统一间距、对齐与可选换行(按钮组、tag 组、表单 label-value 对)。等价 antd `Space`,与 Flex 互补:Space 偏 inline 小集合,Flex
|
|
14
|
+
'间距容器 — 把同语义并排子项统一间距、对齐与可选换行(按钮组、tag 组、表单 label-value 对)。等价 antd `Space`,与 Flex 互补:Space 偏 inline 小集合,Flex 偏完整布局。',
|
|
15
15
|
},
|
|
16
16
|
},
|
|
17
17
|
},
|
|
@@ -28,7 +28,12 @@ const meta: Meta<typeof Space> = {
|
|
|
28
28
|
options: ['start', 'center', 'end', 'between', 'around'],
|
|
29
29
|
},
|
|
30
30
|
},
|
|
31
|
-
args: {
|
|
31
|
+
args: {
|
|
32
|
+
direction: 'horizontal',
|
|
33
|
+
size: 'default',
|
|
34
|
+
wrap: false,
|
|
35
|
+
align: 'center',
|
|
36
|
+
},
|
|
32
37
|
};
|
|
33
38
|
|
|
34
39
|
export default meta;
|
|
@@ -58,10 +63,19 @@ export const Vertical: Story = {
|
|
|
58
63
|
export const WithSplit: Story = {
|
|
59
64
|
parameters: { controls: { disable: true } },
|
|
60
65
|
render: () => (
|
|
61
|
-
<Space
|
|
62
|
-
<
|
|
63
|
-
|
|
64
|
-
|
|
66
|
+
<Space
|
|
67
|
+
split={<Separator orientation="vertical" className="h-4" />}
|
|
68
|
+
size="sm"
|
|
69
|
+
>
|
|
70
|
+
<a href="#" className="text-sm text-primary hover:underline">
|
|
71
|
+
查看
|
|
72
|
+
</a>
|
|
73
|
+
<a href="#" className="text-sm text-primary hover:underline">
|
|
74
|
+
编辑
|
|
75
|
+
</a>
|
|
76
|
+
<a href="#" className="text-sm text-destructive hover:underline">
|
|
77
|
+
删除
|
|
78
|
+
</a>
|
|
65
79
|
</Space>
|
|
66
80
|
),
|
|
67
81
|
};
|