lingee-ui 0.0.24 → 0.0.26

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.
Files changed (51) hide show
  1. package/README.md +3 -2
  2. package/dist/button/index.d.mts +1 -1
  3. package/dist/button/index.d.ts +1 -1
  4. package/dist/chunk-CATPKTPR.mjs +1 -0
  5. package/dist/{chunk-UERX2ELG.js → chunk-ENYYJ7ES.js} +1 -1
  6. package/dist/{chunk-BSZVT2WO.js → chunk-IVBJOGYS.js} +1 -1
  7. package/dist/chunk-TDJG7ZB6.js +1 -0
  8. package/dist/{chunk-PSF4FKBF.js → chunk-VKZD4ESR.js} +1 -1
  9. package/dist/{chunk-XLUVO6OV.mjs → chunk-VLFNSJ2J.mjs} +1 -1
  10. package/dist/{chunk-TZBVVMLM.mjs → chunk-XVM4RPVQ.mjs} +1 -1
  11. package/dist/{chunk-IJJQRKPH.mjs → chunk-Y463GZ2F.mjs} +1 -1
  12. package/dist/{index-7pb5YOcq.d.mts → index-BVXwKHfX.d.mts} +1 -1
  13. package/dist/{index-7pb5YOcq.d.ts → index-BVXwKHfX.d.ts} +1 -1
  14. package/dist/index.css +1 -1
  15. package/dist/index.d.mts +266 -11
  16. package/dist/index.d.ts +266 -11
  17. package/dist/index.js +2 -2
  18. package/dist/index.mjs +2 -2
  19. package/dist/input/index.js +1 -1
  20. package/dist/input/index.mjs +1 -1
  21. package/dist/tabs/index.css +1 -1
  22. package/dist/tabs/index.d.mts +1 -1
  23. package/dist/tabs/index.d.ts +1 -1
  24. package/dist/tabs/index.js +1 -1
  25. package/dist/tabs/index.mjs +1 -1
  26. package/dist/toast/index.js +1 -1
  27. package/dist/toast/index.mjs +1 -1
  28. package/dist/tokens.css +1 -1
  29. package/dist/tree/index.css +1 -1
  30. package/dist/tree/index.js +1 -1
  31. package/dist/tree/index.mjs +1 -1
  32. package/package.json +1 -1
  33. package/skill/AGENTS-SNIPPET.md +38 -10
  34. package/skill/SKILL.md +14 -11
  35. package/skill/VERSION.json +5 -5
  36. package/skill/references/components/cascader.md +97 -0
  37. package/skill/references/components/color-picker.md +11 -4
  38. package/skill/references/components/date-picker.md +1 -1
  39. package/skill/references/components/dialog.md +1 -1
  40. package/skill/references/components/drawer.md +1 -1
  41. package/skill/references/components/scroll-area.md +2 -2
  42. package/skill/references/components/slider.md +1 -1
  43. package/skill/references/components/table.md +2 -1
  44. package/skill/references/components/timeline.md +75 -0
  45. package/skill/references/components/tree-select.md +86 -0
  46. package/skill/references/components/upload.md +2 -1
  47. package/skill/references/icons.md +5 -3
  48. package/skill/references/setup.md +11 -3
  49. package/skill/references/tokens.md +36 -9
  50. package/dist/chunk-BNUZ57QH.mjs +0 -1
  51. package/dist/chunk-JYFAP23O.js +0 -1
package/skill/SKILL.md CHANGED
@@ -2,17 +2,17 @@
2
2
  name: lingee-ui-usage
3
3
  description: 使用 lingee-ui 组件库与 lingee-icon 图标库开发 React 界面。当需要编写含按钮、表单、弹窗、表格、下拉、页签、图标等 UI 的 React/TypeScript 代码,或需要查询 lingee-ui 组件 API、Design Token 语义变量、可用图标名时触发。关键词:lingee-ui、lingee-icon、组件库、图标库、Design Token、语义变量、lg- 前缀、UI 组件。
4
4
  metadata:
5
- lingeeUi: "0.0.24"
6
- lingeeIcon: "1.0.22"
5
+ lingeeUi: "0.0.26"
6
+ lingeeIcon: "1.0.23"
7
7
  generatedBy: "gen-skill.mjs"
8
8
  ---
9
9
 
10
10
  # lingee-ui 组件库使用技能
11
11
 
12
- Kingdee Lingee 设计体系的 React 组件库(42 个组件)与图标库(990 个图标)。
12
+ Kingdee Lingee 设计体系的 React 组件库(45 个组件)与图标库(992 个图标)。
13
13
  本技能面向**消费方项目**,只覆盖「如何用」,不含组件库内部开发约定。
14
14
 
15
- - 组件库版本 `0.0.24` | 图标库版本 `1.0.22`
15
+ - 组件库版本 `0.0.26` | 图标库版本 `1.0.23`
16
16
  - 组件在线预览:https://kingdee.github.io/lingee-ui/
17
17
  - 图标在线预览:https://kingdee.github.io/lingee-icon/
18
18
 
@@ -50,7 +50,7 @@ createRoot(el).render(
50
50
  );
51
51
  ```
52
52
 
53
- 详细接入说明(暗色模式、仅用 Token、样式覆盖、SSR)见 `references/setup.md`。
53
+ 详细接入说明(主题切换、仅用 Token、样式覆盖、SSR)见 `references/setup.md`。
54
54
 
55
55
  ## 组件清单
56
56
 
@@ -61,6 +61,7 @@ createRoot(el).render(
61
61
  | `Breadcrumb` | 面包屑 | 显示当前页面在系统层级结构中的位置,并提供返回之前层级的导航。 | `breadcrumb.md` | — |
62
62
  | `Button` | 按钮 | 用于触发一个操作,是用户与系统交互的基础元素。 | `button.md` | ✓ |
63
63
  | `Carousel`、`CarouselItem` | 轮播容器 | 水平轮播容器,用于在一屏内循环展示一组内容,支持自动播放、拖拽切换与圆点指示器。 | `carousel.md` | — |
64
+ | `Cascader` | 级联选择 | 逐级展开的多列菜单,用于选择省市区等层级路径。 | `cascader.md` | — |
64
65
  | `Checkbox`、`CheckboxGroup` | 多选框 | 在一组选项中进行多项选择。 | `checkbox.md` | — |
65
66
  | `ColorPicker` | 颜色选择器 | 用于选择颜色值的交互组件。 | `color-picker.md` | — |
66
67
  | `DatePicker` | 日期选择器 | 用于选择日期的输入组件。 | `date-picker.md` | — |
@@ -94,9 +95,11 @@ createRoot(el).render(
94
95
  | `Tag` | 标签 | 用于标记和分类的小型标签元素。 | `tag.md` | — |
95
96
  | `Textarea` | 多行文本框 | 多行纯文本编辑控件,支持字数统计和自动高度。 | `textarea.md` | — |
96
97
  | `TimePicker` | 时间选择器 | 用于选择时间的输入组件。 | `time-picker.md` | — |
98
+ | `Timeline`、`TimelineCard` | 时间轴 | 纵向展示按时间或流程先后排列的一组节点,可配合卡片承载节点详情。 | `timeline.md` | — |
97
99
  | `toast` | 全局提示 | 命令式全局提示组件,用于操作反馈。 | `toast.md` | ✓ |
98
100
  | `Tooltip` | 文字提示 | 鼠标悬停时显示的简短提示信息。 | `tooltip.md` | ✓ |
99
101
  | `Tree` | 树形控件 | 用于展示层级结构数据,支持勾选、拖拽排序、异步加载与虚拟滚动。 | `tree.md` | ✓ |
102
+ | `TreeSelect` | 树选择 | 下拉面板中以树形结构选择单个节点。 | `tree-select.md` | — |
100
103
  | `Upload` | 上传 | 文件上传组件,支持点击和拖拽上传。 | `upload.md` | — |
101
104
 
102
105
  - 「文档」列对应 `references/components/` 下的文件名,含完整 Props 与示例
@@ -137,14 +140,14 @@ import { Search, Trash } from "lingee-icon";
137
140
  图标默认 `size="1em"`、`color="currentColor"`,即随父级字号与文字颜色走,
138
141
  所以**优先用 CSS 控制颜色**而不是传 `color` prop。
139
142
 
140
- 完整 Props 见 `references/setup.md`,990 个图标的名称与中文语义索引见 `references/icons.md`。
143
+ 完整 Props 见 `references/setup.md`,992 个图标的名称与中文语义索引见 `references/icons.md`。
141
144
  选图标时必须从索引中查找,**不要凭猜测写图标名**,也不要从 `@ant-design/icons`、`lucide-react` 等其他库引入。
142
145
 
143
146
  ## 颜色:优先用语义 Token
144
147
 
145
148
  两条铁律:
146
149
 
147
- 1. **禁止使用 primitives 色板变量**(`--lg-primary-600`、`--lg-black-82`),它们不随暗色模式切换,这条没有例外
150
+ 1. **禁止使用 primitives 色板变量**(`--lg-primary-600`、`--lg-black-82`),它们不随主题切换,这条没有例外
148
151
  2. 优先用语义层 `--lg-g-*` 变量,按 CSS 属性选前缀:
149
152
 
150
153
  | CSS 属性 | Token 前缀 |
@@ -177,7 +180,7 @@ import { Search, Trash } from "lingee-icon";
177
180
  | 边框-品牌 | `var(--lg-g-border-color-primary-default)` | `#495DFF` |
178
181
  | 边框-危险 | `var(--lg-g-border-color-danger-default)` | `#F12234` |
179
182
 
180
- 暗色模式给 `<html>` 加 `data-theme="dark"` 即自动切换,无需额外处理。
183
+ 主题给 `<html>` 设 `data-theme` 即自动切换:暗色为 `dark`,暖棕为 `warm`,不设为亮色,无需额外处理。
181
184
 
182
185
  ### 已废弃的错拼 Token
183
186
 
@@ -205,7 +208,7 @@ import { Search, Trash } from "lingee-icon";
205
208
 
206
209
  设计稿给的是 hex 时,到 `references/tokens.md` 搜该 hex,表格含亮/暗两列最终色值,可直接反查。
207
210
 
208
- 全量 211 个语义 Token 见 `references/tokens.md`。
211
+ 全量 227 个语义 Token 见 `references/tokens.md`。
209
212
 
210
213
  ## 查阅详细 API
211
214
 
@@ -214,7 +217,7 @@ import { Search, Trash } from "lingee-icon";
214
217
 
215
218
  | 文件 | 内容 |
216
219
  |------|------|
217
- | `references/setup.md` | 安装、样式引入、Provider、暗色模式、样式覆盖、图标 Props |
220
+ | `references/setup.md` | 安装、样式引入、Provider、主题切换、样式覆盖、图标 Props |
218
221
  | `references/components/*.md` | 逐组件 API 表 + 最小示例 |
219
- | `references/tokens.md` | 全量语义 Token(含亮/暗色值,可按 hex 反查) |
222
+ | `references/tokens.md` | 全量语义 Token(含亮 / 暗色值与暖棕差异项,可按 hex 反查) |
220
223
  | `references/icons.md` | 全量图标索引(含中文语义) |
@@ -1,7 +1,7 @@
1
1
  {
2
- "lingeeUi": "0.0.24",
3
- "lingeeIcon": "1.0.22",
4
- "componentCount": 42,
5
- "iconCount": 990,
6
- "sourceHash": "3c511f3923bbbc2a"
2
+ "lingeeUi": "0.0.26",
3
+ "lingeeIcon": "1.0.23",
4
+ "componentCount": 45,
5
+ "iconCount": 992,
6
+ "sourceHash": "901fcc95868741b1"
7
7
  }
@@ -0,0 +1,97 @@
1
+ # Cascader 级联选择
2
+
3
+ 逐级展开的多列菜单,用于选择省市区等层级路径。
4
+
5
+ - 导入:`import { Cascader } from "lingee-ui";`
6
+ - 可用类型:`CascaderProps`, `CascaderOption`, `CascaderSize`, `CascaderDropdownProps`
7
+
8
+ ## 最小示例
9
+
10
+ ```tsx
11
+ import { useState } from "react";
12
+ import { Cascader } from "lingee-ui";
13
+ import type { CascaderOption } from "lingee-ui";
14
+
15
+ const options: CascaderOption[] = [
16
+ {
17
+ value: "a",
18
+ label: "Level A",
19
+ children: [
20
+ {
21
+ value: "a-1",
22
+ label: "Level A-1",
23
+ children: [
24
+ { value: "a-1-1", label: "Level A-1-1" },
25
+ { value: "a-1-2", label: "Level A-1-2" },
26
+ ],
27
+ },
28
+ { value: "a-2", label: "Level A-2" },
29
+ ],
30
+ },
31
+ {
32
+ value: "b",
33
+ label: "Level B",
34
+ children: [{ value: "b-1", label: "Level B-1" }],
35
+ },
36
+ ];
37
+
38
+ export default function BasicDemo() {
39
+ const [value, setValue] = useState<string[]>([]);
40
+
41
+ return (
42
+ <div style={{ width: 280 }}>
43
+ <Cascader
44
+ options={options}
45
+ value={value}
46
+ onChange={setValue}
47
+ placeholder="Select a path"
48
+ allowClear
49
+ />
50
+ </div>
51
+ );
52
+ }
53
+ ```
54
+
55
+ ## API
56
+
57
+ ### Cascader
58
+
59
+ | 属性 | 说明 | 类型 | 默认值 |
60
+ |------|------|------|--------|
61
+ | `options` | 级联数据 | `CascaderOption[]` | - |
62
+ | `value` | 当前选中路径(受控),显式传 `undefined` 也视为受控的空值 | `string[]` | - |
63
+ | `defaultValue` | 默认选中路径(非受控) | `string[]` | - |
64
+ | `onChange` | 选中叶子或清空时回调,清空时路径为空数组 | `(value: string[], selectedOptions: CascaderOption[]) => void` | - |
65
+ | `placeholder` | 占位文本 | `string` | - |
66
+ | `disabled` | 是否禁用 | `boolean` | `false` |
67
+ | `error` | 是否错误态 | `boolean` | `false` |
68
+ | `allowClear` | 是否可清空 | `boolean` | `false` |
69
+ | `size` | 尺寸 | `"sm" \| "md" \| "lg"` | `"md"` |
70
+ | `separator` | 触发器中各级文本的分隔符 | `string` | `" / "` |
71
+ | `notFoundContent` | 无数据时面板中展示的内容 | `ReactNode` | 「暂无数据」缺省态 |
72
+ | `dropdown` | 下拉面板配置,字段见 CascaderDropdownProps | `CascaderDropdownProps` | - |
73
+ | `className` | 自定义类名 | `string` | - |
74
+ | `style` | 自定义样式 | `CSSProperties` | - |
75
+
76
+ ### CascaderOption
77
+
78
+ | 属性 | 说明 | 类型 | 默认值 |
79
+ |------|------|------|--------|
80
+ | `value` | 选项值,同一层级内需唯一 | `string` | - |
81
+ | `label` | 选项文本,选中后按层级拼接显示在触发器中 | `ReactNode` | - |
82
+ | `children` | 下一级选项 | `CascaderOption[]` | - |
83
+ | `disabled` | 是否禁用 | `boolean` | `false` |
84
+
85
+ ### CascaderDropdownProps
86
+
87
+ | 属性 | 说明 | 类型 | 默认值 |
88
+ |------|------|------|--------|
89
+ | `maxHeight` | 每列的最大高度(px),超出时该列滚动;同时不超出视口可用高度 | `number` | `346` |
90
+ | `className` | 下拉浮层的自定义类名 | `string` | - |
91
+ | `container` | Portal 挂载容器,传 `null` 时就地渲染;长文本的悬浮提示挂在同一容器 | `HTMLElement \| null` | `document.body` |
92
+
93
+ ### CSS 变量
94
+
95
+ | 变量 | 说明 | 默认值 |
96
+ |------|------|--------|
97
+ | `--lg-cascader-menu-max-width` | 每列的最大宽度,超出的文字省略 | `200px` |
@@ -3,7 +3,7 @@
3
3
  用于选择颜色值的交互组件。
4
4
 
5
5
  - 导入:`import { ColorPicker } from "lingee-ui";`
6
- - 可用类型:`ColorPickerProps`, `ColorPickerSize`
6
+ - 可用类型:`ColorPickerProps`, `ColorPickerRgba`, `ColorPickerSize`
7
7
 
8
8
  ## 最小示例
9
9
 
@@ -17,7 +17,7 @@ export default function BasicDemo() {
17
17
  return (
18
18
  <div style={{ width: 260 }}>
19
19
  <ColorPicker value={color} onChange={setColor} />
20
- <p style={{ marginTop: 12, fontSize: 14, color: "#666" }}>
20
+ <p style={{ marginTop: 12, fontSize: 14, color: "var(--lg-g-fg-color-black-muted)" }}>
21
21
  Current color: {color}
22
22
  </p>
23
23
  </div>
@@ -31,7 +31,8 @@ export default function BasicDemo() {
31
31
  |------|------|------|--------|
32
32
  | `value` | 当前颜色值(受控) | `string` | - |
33
33
  | `defaultValue` | 默认颜色值(非受控) | `string` | - |
34
- | `onChange` | 颜色变化回调 | `(color: string) => void` | - |
34
+ | `onChange` | 颜色变化回调,`color` 为 hex(含透明度时为 8 位) | `(color: string, rgba: ColorPickerRgba) => void` | - |
35
+ | `onChangeComplete` | 拖拽结束回调,适合只在最终色值上触发请求的场景 | `(color: string, rgba: ColorPickerRgba) => void` | - |
35
36
  | `disabled` | 是否禁用 | `boolean` | `false` |
36
37
  | `disabledAlpha` | 是否禁用透明度 | `boolean` | `false` |
37
38
  | `size` | 尺寸 | `"sm" \| "md" \| "lg"` | `"md"` |
@@ -39,4 +40,10 @@ export default function BasicDemo() {
39
40
  | `placement` | 面板弹出方向 | `"top" \| "bottom" \| "left" \| "right"` | `"bottom"` |
40
41
  | `panelExtra` | 面板额外内容(如预设色板) | `ReactNode` | - |
41
42
  | `placeholder` | 占位文本 | `string` | - |
42
- | `onChangeComplete` | 拖拽结束回调,适合只在最终色值上触发请求的场景 | `(color: string) => void` | - |
43
+ | `children` | 自定义触发器,需为能接收 ref 与点击事件的单个元素;传入后 `size` / `error` / `placeholder` / `className` / `style` 不再作用于触发器 | `ReactElement` | - |
44
+ | `showInput` | 面板内显示十六进制与透明度输入框 | `boolean` | `false` |
45
+ | `getPopupContainer` | 浮层挂载容器,打开面板时求值;全屏元素内使用时需返回该元素,否则面板不可见 | `() => HTMLElement` | `document.body` |
46
+ | `className` | 默认触发器的自定义类名 | `string` | - |
47
+ | `style` | 默认触发器的自定义样式 | `CSSProperties` | - |
48
+
49
+ `ColorPickerRgba` 为 `{ r: number; g: number; b: number; a: number }`,`r` / `g` / `b` 取 0–255,`a` 取 0–1。
@@ -18,7 +18,7 @@ export default function BasicDemo() {
18
18
  <div style={{ width: 292 }}>
19
19
  {/* 不传 placeholder,展示组件跟随 Provider 语言的默认占位符 */}
20
20
  <DatePicker value={value} onChange={(v) => setValue(v)} />
21
- <p style={{ marginTop: 12, fontSize: 14, color: "#666" }}>
21
+ <p style={{ marginTop: 12, fontSize: 14, color: "var(--lg-g-fg-color-black-muted)" }}>
22
22
  {value ? value.toLocaleDateString() : "—"}
23
23
  </p>
24
24
  </div>
@@ -28,7 +28,7 @@ export default function BasicDemo() {
28
28
  onOk={() => setOpen(false)}
29
29
  onCancel={() => setOpen(false)}
30
30
  >
31
- <p style={{ padding: "0 20px", color: "rgba(0,0,0,0.64)" }}>
31
+ <p style={{ padding: "0 20px", color: "var(--lg-g-fg-color-black-muted)" }}>
32
32
  This is the dialog content area. You can put anything here.
33
33
  </p>
34
34
  </Dialog>
@@ -40,6 +40,6 @@ export default function BasicDemo() {
40
40
  | `modal` | 是否为模态模式 | `boolean` | `false` |
41
41
  | `footer` | 底部操作区 | `ReactNode` | - |
42
42
  | `extra` | 标题栏右侧额外内容 | `ReactNode` | - |
43
- | `destroyOnHidden` | 关闭后是否销毁子节点 | `boolean` | `true` |
43
+ | `destroyOnHidden` | 关闭后是否销毁子节点。`false` 时首次打开后子节点常驻,关闭只隐藏、重开复用原实例(适合承载需保留会话的 iframe);隐藏期间面板仍挂着 Esc 监听,处于最上层时 Esc 事件会被标记 `defaultPrevented` | `boolean` | `true` |
44
44
  | `zIndex` | 自定义 z-index,优先于 Provider 基线 | `number` | - |
45
45
  | `children` | 内容区域 | `ReactNode` | - |
@@ -14,7 +14,7 @@ const items = Array.from({ length: 50 }, (_, i) => `Item ${i + 1}`);
14
14
 
15
15
  export default function BasicDemo() {
16
16
  return (
17
- <div style={{ width: 280, border: "1px solid #e0e0e0", borderRadius: 8 }}>
17
+ <div style={{ width: 280, border: "1px solid var(--lg-g-border-color-black-muted)", borderRadius: 8 }}>
18
18
  <ScrollArea style={{ maxHeight: 300 }}>
19
19
  <div style={{ padding: 8 }}>
20
20
  {items.map((item) => (
@@ -22,7 +22,7 @@ export default function BasicDemo() {
22
22
  key={item}
23
23
  style={{
24
24
  padding: "8px 12px",
25
- borderBottom: "1px solid #f0f0f0",
25
+ borderBottom: "1px solid var(--lg-g-border-color-black-subtle)",
26
26
  fontSize: 14,
27
27
  }}
28
28
  >
@@ -17,7 +17,7 @@ export default function BasicDemo() {
17
17
  return (
18
18
  <div style={{ width: 300 }}>
19
19
  <Slider value={value} onChange={setValue} />
20
- <p style={{ marginTop: 12, fontSize: 14, color: "#666" }}>
20
+ <p style={{ marginTop: 12, fontSize: 14, color: "var(--lg-g-fg-color-black-muted)" }}>
21
21
  Current value: {value[0]}
22
22
  </p>
23
23
  </div>
@@ -3,7 +3,7 @@
3
3
  用于展示行列数据的表格组件,支持排序、行选择、加载态等。
4
4
 
5
5
  - 导入:`import { Table } from "lingee-ui";`
6
- - 可用类型:`TableProps`, `TableColumnType`, `TableRowSelection`, `TableSize`, `TableSorterState`, `TableStatusType`, `TableStatusText`
6
+ - 可用类型:`TableProps`, `TableColumnType`, `TableRowSelection`, `TableSize`, `TableSorterState`, `TableStatusType`, `TableStatusText`, `TableComponents`
7
7
 
8
8
  ## 最小示例
9
9
 
@@ -44,6 +44,7 @@ export default function BasicDemo() {
44
44
  | `bordered` | 是否显示边框 | `boolean` | `false` |
45
45
  | `striped` | 是否显示斑马纹 | `boolean` | `false` |
46
46
  | `hoverable` | 是否行悬浮高亮 | `boolean` | `true` |
47
+ | `components` | 替换表格内部元素的渲染组件,需保持引用稳定 | `TableComponents` | - |
47
48
  | `scroll` | 滚动设置 | `{ x?: number, y?: number }` | - |
48
49
  | `showHeader` | 是否显示表头 | `boolean` | `true` |
49
50
  | `title` | 表格标题 | `ReactNode \| (() => ReactNode)` | - |
@@ -0,0 +1,75 @@
1
+ # Timeline 时间轴
2
+
3
+ 纵向展示按时间或流程先后排列的一组节点,可配合卡片承载节点详情。
4
+
5
+ - 导入:`import { Timeline, TimelineCard } from "lingee-ui";`
6
+ - 可用类型:`TimelineProps`, `TimelineItem`, `TimelineStatus`, `TimelineCardProps`, `TimelineCardStatus`
7
+
8
+ ## 最小示例
9
+
10
+ ```tsx
11
+ import { Timeline } from "lingee-ui";
12
+
13
+ const items = [
14
+ { key: "1", time: "09:00", content: "Item 1" },
15
+ { key: "2", time: "11:00", content: "Item 2" },
16
+ { key: "3", time: "12:40", content: "Item 3" },
17
+ { key: "4", time: "14:00", content: "Item 4" },
18
+ ];
19
+
20
+ export default function BasicDemo() {
21
+ return <Timeline items={items} />;
22
+ }
23
+ ```
24
+
25
+ ## API
26
+
27
+ ### Timeline
28
+
29
+ | 属性 | 说明 | 类型 | 默认值 |
30
+ |------|------|------|--------|
31
+ | `items` | 节点数据 | `TimelineItem[]` | - |
32
+ | `className` | 自定义类名 | `string` | - |
33
+ | `style` | 自定义样式 | `CSSProperties` | - |
34
+
35
+ ### TimelineItem
36
+
37
+ 继承 `HTMLAttributes<HTMLLIElement>`(`content`、`color` 除外)。
38
+
39
+ | 属性 | 说明 | 类型 | 默认值 |
40
+ |------|------|------|--------|
41
+ | `key` | 唯一标识,缺省用索引 | `Key` | - |
42
+ | `time` | 节点左侧的时间或标签,右对齐 | `ReactNode` | - |
43
+ | `content` | 节点内容 | `ReactNode` | - |
44
+ | `status` | 节点状态,决定圆点颜色 | `"default" \| "processing" \| "completed" \| "unfinished" \| "disabled"` | `"default"` |
45
+ | `color` | 自定义圆点颜色,优先于 `status` | `string` | - |
46
+ | `filled` | 是否实心圆点 | `boolean` | `false` |
47
+
48
+ ### TimelineCard
49
+
50
+ 即 `Timeline.Card`,继承 `HTMLAttributes<HTMLDivElement>`(`title` 除外)。
51
+
52
+ | 属性 | 说明 | 类型 | 默认值 |
53
+ |------|------|------|--------|
54
+ | `time` | 卡片顶部的时间段 | `ReactNode` | - |
55
+ | `extra` | 右上角内容,有 `time` 时与它同行,否则放在标题行末尾 | `ReactNode` | - |
56
+ | `title` | 标题 | `ReactNode` | - |
57
+ | `titleLines` | 标题最多显示的行数,超出省略 | `number` | `1` |
58
+ | `tag` | 紧跟标题的标签 | `ReactNode` | - |
59
+ | `description` | 描述 | `ReactNode` | - |
60
+ | `descriptionLines` | 描述最多显示的行数,超出省略 | `number` | `2` |
61
+ | `footer` | 底部内容,如操作或附加信息 | `ReactNode` | - |
62
+ | `status` | 卡片状态 | `"default" \| "processing" \| "completed"` | `"default"` |
63
+ | `hoverable` | 悬停时高亮背景 | `boolean` | `false` |
64
+
65
+ ### CSS 变量
66
+
67
+ | 变量 | 说明 | 默认值 |
68
+ |------|------|--------|
69
+ | `--_timeline-dot-size` | 圆点直径 | `10px` |
70
+ | `--_timeline-rail-color` | 连接线颜色 | `var(--lg-timeline-border-color-line)` |
71
+ | `--_timeline-tail-width` | 连接线宽度 | `2px` |
72
+ | `--_timeline-line-height` | 时间与内容首行的行高,圆点按它垂直居中 | `22px` |
73
+ | `--_timeline-head-offset` | 内容首行距节点顶部的距离,需带单位;内容是卡片时自动取 `16px` | `0px` |
74
+ | `--_timeline-time-width` | 时间列宽度 | `72px` |
75
+ | `--_timeline-gap` | 节点间距 | `var(--lg-spacing-small)` |
@@ -0,0 +1,86 @@
1
+ # TreeSelect 树选择
2
+
3
+ 下拉面板中以树形结构选择单个节点。
4
+
5
+ - 导入:`import { TreeSelect } from "lingee-ui";`
6
+ - 可用类型:`TreeSelectProps`, `TreeSelectNode`, `TreeSelectSize`, `TreeSelectDropdownProps`
7
+
8
+ ## 最小示例
9
+
10
+ ```tsx
11
+ import { useState } from "react";
12
+ import { TreeSelect } from "lingee-ui";
13
+ import type { TreeSelectNode } from "lingee-ui";
14
+
15
+ const treeData: TreeSelectNode[] = [
16
+ {
17
+ value: "folder-1",
18
+ title: "Folder 1",
19
+ children: [
20
+ { value: "folder-1-1", title: "Folder 1-1" },
21
+ { value: "folder-1-2", title: "Folder 1-2" },
22
+ ],
23
+ },
24
+ {
25
+ value: "folder-2",
26
+ title: "Folder 2",
27
+ children: [{ value: "folder-2-1", title: "Folder 2-1" }],
28
+ },
29
+ ];
30
+
31
+ export default function BasicDemo() {
32
+ const [value, setValue] = useState<string>();
33
+
34
+ return (
35
+ <div style={{ width: 280 }}>
36
+ <TreeSelect
37
+ treeData={treeData}
38
+ value={value}
39
+ onChange={setValue}
40
+ placeholder="Select a folder"
41
+ defaultExpandAll
42
+ allowClear
43
+ />
44
+ </div>
45
+ );
46
+ }
47
+ ```
48
+
49
+ ## API
50
+
51
+ ### TreeSelect
52
+
53
+ | 属性 | 说明 | 类型 | 默认值 |
54
+ |------|------|------|--------|
55
+ | `treeData` | 树形数据 | `TreeSelectNode[]` | - |
56
+ | `value` | 当前选中值(受控),显式传 `undefined` 也视为受控的空值 | `string` | - |
57
+ | `defaultValue` | 默认选中值(非受控) | `string` | - |
58
+ | `onChange` | 选中或清空时回调,清空时两个参数均为 `undefined` | `(value: string \| undefined, node: TreeSelectNode \| undefined) => void` | - |
59
+ | `placeholder` | 占位文本 | `string` | - |
60
+ | `disabled` | 是否禁用 | `boolean` | `false` |
61
+ | `error` | 是否错误态 | `boolean` | `false` |
62
+ | `allowClear` | 是否可清空 | `boolean` | `false` |
63
+ | `size` | 尺寸 | `"sm" \| "md" \| "lg"` | `"md"` |
64
+ | `defaultExpandAll` | 是否默认展开全部节点 | `boolean` | `false` |
65
+ | `notFoundContent` | 无数据时面板中展示的内容 | `ReactNode` | 「暂无数据」缺省态 |
66
+ | `dropdown` | 下拉面板配置,字段见 TreeSelectDropdownProps | `TreeSelectDropdownProps` | - |
67
+ | `className` | 自定义类名 | `string` | - |
68
+ | `style` | 自定义样式 | `CSSProperties` | - |
69
+
70
+ ### TreeSelectNode
71
+
72
+ | 属性 | 说明 | 类型 | 默认值 |
73
+ |------|------|------|--------|
74
+ | `value` | 节点值,同一棵树内需唯一 | `string` | - |
75
+ | `title` | 节点标题,选中后同时作为触发器中的文本 | `ReactNode` | - |
76
+ | `children` | 子节点 | `TreeSelectNode[]` | - |
77
+ | `disabled` | 是否禁用 | `boolean` | `false` |
78
+
79
+ ### TreeSelectDropdownProps
80
+
81
+ | 属性 | 说明 | 类型 | 默认值 |
82
+ |------|------|------|--------|
83
+ | `maxHeight` | 面板最大高度(px),超出时滚动 | `number` | `346` |
84
+ | `width` | 面板宽度(px),`"auto"` 时按内容自适应 | `number \| "auto"` | 与触发器同宽 |
85
+ | `className` | 下拉浮层的自定义类名 | `string` | - |
86
+ | `container` | Portal 挂载容器,传 `null` 时就地渲染 | `HTMLElement \| null` | `document.body` |
@@ -3,7 +3,7 @@
3
3
  文件上传组件,支持点击和拖拽上传。
4
4
 
5
5
  - 导入:`import { Upload } from "lingee-ui";`
6
- - 可用类型:`UploadProps`, `UploadFile`, `UploadFileStatus`, `CustomRequestOptions`, `CustomRequestReturn`, `RejectReason`, `FileItemActions`
6
+ - 可用类型:`UploadProps`, `UploadFile`, `UploadFileStatus`, `CustomRequestOptions`, `CustomRequestReturn`, `RejectReason`, `FileItemActions`, `UploadListType`
7
7
 
8
8
  ## 最小示例
9
9
 
@@ -33,6 +33,7 @@ export default function BasicDemo() {
33
33
  | `maxSize` | 单文件最大大小(字节) | `number` | - |
34
34
  | `fileList` | 文件列表(受控) | `UploadFile[]` | - |
35
35
  | `showFileList` | 是否显示文件列表 | `boolean` | `true` |
36
+ | `listType` | 文件列表形态,`picture-card` 为图片缩略卡片 | `"text" \| "picture-card"` | `"text"` |
36
37
  | `onChange` | 文件列表变化回调 | `(fileList: UploadFile[]) => void` | - |
37
38
  | `onReject` | 校验未通过回调 | `(files: File[], reason: "size" \| "type" \| "count") => void` | - |
38
39
  | `customRequest` | 自定义上传请求。与 `action` 同时传入时优先 | `(options: CustomRequestOptions) => { abort }` | - |
@@ -1,6 +1,6 @@
1
1
  # 图标索引
2
2
 
3
- 图标库 `1.0.22`,共 990 个图标、27 个分类。图标名为 PascalCase,直接作为 React 组件名从 `lingee-icon` 导入。
3
+ 图标库 `1.0.23`,共 992 个图标、27 个分类。图标名为 PascalCase,直接作为 React 组件名从 `lingee-icon` 导入。
4
4
 
5
5
  ```tsx
6
6
  import { Search } from "lingee-icon";
@@ -12,7 +12,7 @@ import { Search } from "lingee-icon";
12
12
 
13
13
  ---
14
14
 
15
- ## 通用类(58)
15
+ ## 通用类(59)
16
16
 
17
17
  | 图标名 | 语义/用途 |
18
18
  |--------|----------|
@@ -49,6 +49,7 @@ import { Search } from "lingee-icon";
49
49
  | LayoutDashboard | 更多操作(竖向) |
50
50
  | Like | 点赞(选中) |
51
51
  | Like1 | 点赞 |
52
+ | LingeeLogo | 灵基 Logo(品牌标识) |
52
53
  | Location | 定位/位置 |
53
54
  | Map | 地图 |
54
55
  | MeetingRoom | 会议室 |
@@ -544,7 +545,7 @@ import { Search } from "lingee-icon";
544
545
  | Wifi | WiFi |
545
546
  | WifiOff | WiFi关闭 |
546
547
 
547
- ## 代码开发(33)
548
+ ## 代码开发(34)
548
549
 
549
550
  | 图标名 | 语义/用途 |
550
551
  |--------|----------|
@@ -570,6 +571,7 @@ import { Search } from "lingee-icon";
570
571
  | Hourglass | 沙漏/等待 |
571
572
  | Key | 密钥 |
572
573
  | Layers | 图层 |
574
+ | LayersOutline | 层叠描边/企业资产(kcode) |
573
575
  | Organize | 组织/整理 |
574
576
  | SquareCode | 代码块 |
575
577
  | Terminal | 终端 |
@@ -1,6 +1,6 @@
1
1
  # 接入指南
2
2
 
3
- 组件库 `0.0.24` | 图标库 `1.0.22`
3
+ 组件库 `0.0.26` | 图标库 `1.0.23`
4
4
 
5
5
  ## 安装
6
6
 
@@ -56,14 +56,22 @@ import { LingeeProvider, enUS } from "lingee-ui";
56
56
 
57
57
  需要在业务代码里复用组件库文案时,用 `useLocale()` 取完整语言包,或 `useComponentLocale("Pagination")` 取单个组件的片段。
58
58
 
59
- ## 暗色模式
59
+ ## 主题切换
60
60
 
61
- 给 `<html>` 加 `data-theme="dark"`,全部语义 Token 自动切换:
61
+ 内置亮色(默认)、暗色、暖棕三套主题。给 `<html>` 设 `data-theme`,全部语义 Token 自动切换:
62
62
 
63
63
  ```ts
64
64
  document.documentElement.setAttribute("data-theme", "dark");
65
65
  ```
66
66
 
67
+ | 主题 | `data-theme` | `color-scheme` |
68
+ |------|----------------|------------------|
69
+ | 亮色 | 不设,或 `light` | `light` |
70
+ | 暗色 | `dark` | `dark` |
71
+ | 暖棕 | `warm` | `light` |
72
+
73
+ 暖棕是浅底主题,与亮色只有少数底色不同,差异项见 `references/tokens.md` 的「暖棕主题」。原生控件与滚动条按 `color-scheme` 绘制,它只认 `light` / `dark`,暖棕写 `light`。业务代码按主题分支时只认 `dark`,其余值(含 `warm`)按亮色处理,不要写成「不是 `light` 就是暗色」。
74
+
67
75
  前提是组件与业务样式都只用语义层 `--lg-g-*` 变量。用了 primitives 或硬编码色值的地方不会跟随切换。
68
76
 
69
77
  ## 按需引入
@@ -1,8 +1,10 @@
1
1
  # 语义 Token 全表
2
2
 
3
- 组件库 `0.0.24`。仅列语义层(`--lg-g-*`)。
3
+ 组件库 `0.0.26`。仅列语义层(`--lg-g-*`)。
4
4
 
5
- 亮色与暗色**变量名完全相同**,给 `<html>` 加 `data-theme="dark"` 即自动切换,业务代码只写一次。
5
+ 亮色、暗色与暖棕**变量名完全相同**,给 `<html>` 加 `data-theme="dark"` 或 `data-theme="warm"` 即自动切换,业务代码只写一次。
6
+
7
+ 暖棕与亮色只有少数 Token 取值不同,单独列在「暖棕主题」一节,全表不再重复暖棕列。
6
8
 
7
9
  下表「亮色 / 暗色」列是各主题下的最终色值,用途有两个:
8
10
 
@@ -24,6 +26,15 @@
24
26
  | `var(--lg-g-fg-color-violet-default)` | ~~`--lg-g-fg-color-violet-defauit`~~ |
25
27
  | `var(--lg-g-bg-color-emerald-translucent-soft)` | ~~`--lg-g-bg-color-emeraid-translucent-soft`~~ |
26
28
 
29
+ ## 暖棕主题(2)
30
+
31
+ `data-theme="warm"` 是亮色的浅底变体,只有下列 Token 与亮色取值不同,其余同亮色:
32
+
33
+ | Token | 亮色 | 暖棕 |
34
+ |-------|------|------|
35
+ | `var(--lg-g-bg-color-page-default)` | `#F7F7FA` | `#F5F5F2` |
36
+ | `var(--lg-g-bg-color-navigation)` | `#F1F1F6` | `#F0EFEB` |
37
+
27
38
  ## 前景色 fg(color / fill / stroke)(54)
28
39
 
29
40
  | Token | 亮色 | 暗色 |
@@ -76,12 +87,12 @@
76
87
  | `var(--lg-g-fg-color-lime-low)` | `#74D70B` | `#74D70B` |
77
88
  | `var(--lg-g-fg-color-violet-low)` | `#7858F9` | `#7858F9` |
78
89
  | `var(--lg-g-fg-color-black-title)` | `rgba(0, 0, 0, 0.64)` | `rgba(255, 255, 255, 0.46)` |
79
- | `var(--lg-g-fg-color-black-blue-moderate)` | `rgba(0, 29, 65, 0.18)` | `#FFFFFF` |
80
- | `var(--lg-g-fg-color-black-blue-faint)` | `rgba(0, 29, 65, 0.28)` | `#FFFFFF` |
81
- | `var(--lg-g-fg-color-black-blue-default)` | `rgba(0, 29, 65, 0.46)` | `#FFFFFF` |
82
- | `var(--lg-g-fg-color-black-blue-muted)` | `rgba(0, 29, 65, 0.64)` | `#FFFFFF` |
83
- | `var(--lg-g-fg-color-black-blue-strong)` | `rgba(0, 29, 65, 0.82)` | `#FFFFFF` |
84
- | `var(--lg-g-fg-color-black-blue-intense)` | `rgba(0, 29, 65, 0.94)` | `#FFFFFF` |
90
+ | `var(--lg-g-fg-color-black-blue-moderate)` | `rgba(0, 29, 65, 0.18)` | `rgba(255, 255, 255, 0.18)` |
91
+ | `var(--lg-g-fg-color-black-blue-faint)` | `rgba(0, 29, 65, 0.28)` | `rgba(255, 255, 255, 0.28)` |
92
+ | `var(--lg-g-fg-color-black-blue-default)` | `rgba(0, 29, 65, 0.46)` | `rgba(255, 255, 255, 0.46)` |
93
+ | `var(--lg-g-fg-color-black-blue-muted)` | `rgba(0, 29, 65, 0.64)` | `rgba(255, 255, 255, 0.64)` |
94
+ | `var(--lg-g-fg-color-black-blue-strong)` | `rgba(0, 29, 65, 0.82)` | `rgba(255, 255, 255, 0.82)` |
95
+ | `var(--lg-g-fg-color-black-blue-intense)` | `rgba(0, 29, 65, 0.94)` | `rgba(255, 255, 255, 0.94)` |
85
96
 
86
97
  ## 背景色 bg(background)(108)
87
98
 
@@ -196,7 +207,7 @@
196
207
  | `var(--lg-g-bg-color-black-translucent-muted)` | `rgba(0, 0, 0, 0.02)` | `rgba(255, 255, 255, 0.06)` |
197
208
  | `var(--lg-g-bg-color-color)` | `#E4EEFF` | `#E4EEFF` |
198
209
 
199
- ## 边框色 border(border-color / outline)(45)
210
+ ## 边框色 border(border-color / outline)(61)
200
211
 
201
212
  | Token | 亮色 | 暗色 |
202
213
  |-------|------|------|
@@ -245,6 +256,22 @@
245
256
  | `var(--lg-g-border-color-black-stroke)` | `rgba(0, 0, 0, 0.06)` | `rgba(255, 255, 255, 0.08)` |
246
257
  | `var(--lg-g-border-color-warning-muted)` | `#FFBE90` | `#BA5002` |
247
258
  | `var(--lg-g-border-color-success-muted)` | `#7AEB9C` | `#0C5B31` |
259
+ | `var(--lg-g-border-color-white-heavy)` | `#FFFFFF` | `#FFFFFF` |
260
+ | `var(--lg-g-border-color-primary-translucent-moderate)` | `rgba(109, 128, 255, 0.28)` | `rgba(109, 128, 255, 0.28)` |
261
+ | `var(--lg-g-border-color-warning-translucent-moderate)` | `rgba(255, 119, 0, 0.28)` | `rgba(255, 119, 0, 0.28)` |
262
+ | `var(--lg-g-border-color-danger-translucent-moderate)` | `rgba(255, 41, 59, 0.28)` | `rgba(255, 41, 59, 0.28)` |
263
+ | `var(--lg-g-border-color-success-translucent-moderate)` | `rgba(8, 204, 80, 0.28)` | `rgba(8, 204, 80, 0.28)` |
264
+ | `var(--lg-g-border-color-blue-translucent-moderate)` | `rgba(77, 137, 255, 0.28)` | `rgba(77, 137, 255, 0.28)` |
265
+ | `var(--lg-g-border-color-amber-translucent-moderate)` | `rgba(255, 178, 0, 0.28)` | `rgba(255, 178, 0, 0.28)` |
266
+ | `var(--lg-g-border-color-teal-translucent-moderate)` | `rgba(0, 229, 229, 0.28)` | `rgba(0, 229, 229, 0.28)` |
267
+ | `var(--lg-g-border-color-emerald-translucent-moderate)` | `rgba(8, 199, 135, 0.28)` | `rgba(8, 199, 135, 0.28)` |
268
+ | `var(--lg-g-border-color-lime-translucent-moderate)` | `rgba(116, 215, 11, 0.28)` | `rgba(116, 215, 11, 0.28)` |
269
+ | `var(--lg-g-border-color-cyan-translucent-moderate)` | `rgba(0, 163, 244, 0.28)` | `rgba(0, 163, 244, 0.28)` |
270
+ | `var(--lg-g-border-color-purple-translucent-moderate)` | `rgba(143, 64, 255, 0.28)` | `rgba(143, 64, 255, 0.28)` |
271
+ | `var(--lg-g-border-color-indigo-translucent-moderate)` | `rgba(81, 85, 246, 0.28)` | `rgba(81, 85, 246, 0.28)` |
272
+ | `var(--lg-g-border-color-violet-translucent-moderate)` | `rgba(120, 88, 249, 0.28)` | `rgba(120, 88, 249, 0.28)` |
273
+ | `var(--lg-g-border-color-fuchsia-translucent-moderate)` | `rgba(248, 88, 208, 0.28)` | `rgba(248, 88, 208, 0.28)` |
274
+ | `var(--lg-g-border-color-pink-translucent-moderate)` | `rgba(255, 36, 109, 0.28)` | `rgba(255, 36, 109, 0.28)` |
248
275
 
249
276
  ## 其他(4)
250
277