@kingsoft-ai/design 0.1.9

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 (97) hide show
  1. package/README.md +67 -0
  2. package/dist/index.cjs +2485 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.mjs +9638 -0
  5. package/dist/index.mjs.map +1 -0
  6. package/dist/types/__tests__/setup.d.ts +1 -0
  7. package/dist/types/__tests__/test-utils.d.ts +26 -0
  8. package/dist/types/button/Button.d.ts +56 -0
  9. package/dist/types/button/Button.style.d.ts +69 -0
  10. package/dist/types/button/IconButton.d.ts +47 -0
  11. package/dist/types/button/IconButton.style.d.ts +32 -0
  12. package/dist/types/button/__tests__/Button.test.d.ts +14 -0
  13. package/dist/types/button/__tests__/IconButton.test.d.ts +1 -0
  14. package/dist/types/button/index.d.ts +4 -0
  15. package/dist/types/button/tokens.d.ts +4 -0
  16. package/dist/types/checkbox/Checkbox.d.ts +42 -0
  17. package/dist/types/checkbox/Checkbox.style.d.ts +9 -0
  18. package/dist/types/checkbox/CheckboxButton.d.ts +52 -0
  19. package/dist/types/checkbox/CheckboxButton.style.d.ts +26 -0
  20. package/dist/types/checkbox/__tests__/Checkbox.test.d.ts +4 -0
  21. package/dist/types/checkbox/__tests__/CheckboxButton.test.d.ts +4 -0
  22. package/dist/types/checkbox/index.d.ts +7 -0
  23. package/dist/types/checkbox/tokens.d.ts +3 -0
  24. package/dist/types/collapse/Collapse.d.ts +50 -0
  25. package/dist/types/collapse/Collapse.style.d.ts +153 -0
  26. package/dist/types/collapse/CollapseItem.d.ts +46 -0
  27. package/dist/types/collapse/__tests__/Collapse.test.d.ts +14 -0
  28. package/dist/types/collapse/index.d.ts +4 -0
  29. package/dist/types/collapse/tokens.d.ts +3 -0
  30. package/dist/types/index.d.ts +18 -0
  31. package/dist/types/input/Input.d.ts +73 -0
  32. package/dist/types/input/Input.style.d.ts +96 -0
  33. package/dist/types/input/__tests__/Input.test.d.ts +17 -0
  34. package/dist/types/input/index.d.ts +2 -0
  35. package/dist/types/input/tokens.d.ts +3 -0
  36. package/dist/types/menu/Menu.d.ts +37 -0
  37. package/dist/types/menu/Menu.style.d.ts +122 -0
  38. package/dist/types/menu/MenuFooter.d.ts +32 -0
  39. package/dist/types/menu/MenuGroup.d.ts +26 -0
  40. package/dist/types/menu/MenuHeader.d.ts +32 -0
  41. package/dist/types/menu/MenuItem.d.ts +40 -0
  42. package/dist/types/menu/SubMenuItem.d.ts +26 -0
  43. package/dist/types/menu/SubMenuPopover.d.ts +29 -0
  44. package/dist/types/menu/__tests__/Menu.test.d.ts +1 -0
  45. package/dist/types/menu/index.d.ts +13 -0
  46. package/dist/types/menu/tokens.d.ts +3 -0
  47. package/dist/types/numberInput/NumberInput.d.ts +59 -0
  48. package/dist/types/numberInput/NumberInput.style.d.ts +44 -0
  49. package/dist/types/numberInput/__tests__/NumberInput.test.d.ts +1 -0
  50. package/dist/types/numberInput/index.d.ts +2 -0
  51. package/dist/types/numberInput/tokens.d.ts +3 -0
  52. package/dist/types/progress/Progress.d.ts +64 -0
  53. package/dist/types/progress/Progress.style.d.ts +117 -0
  54. package/dist/types/progress/__tests__/Progress.test.d.ts +1 -0
  55. package/dist/types/progress/index.d.ts +3 -0
  56. package/dist/types/radio/Radio.d.ts +9 -0
  57. package/dist/types/radio/Radio.style.d.ts +36 -0
  58. package/dist/types/radio/__tests__/Radio.test.d.ts +13 -0
  59. package/dist/types/radio/index.d.ts +2 -0
  60. package/dist/types/radio/tokens.d.ts +3 -0
  61. package/dist/types/select/ListBox.d.ts +11 -0
  62. package/dist/types/select/Popover.d.ts +10 -0
  63. package/dist/types/select/Select.d.ts +140 -0
  64. package/dist/types/select/Select.style.d.ts +73 -0
  65. package/dist/types/select/__tests__/Select.test.d.ts +1 -0
  66. package/dist/types/select/index.d.ts +3 -0
  67. package/dist/types/select/tokens.d.ts +3 -0
  68. package/dist/types/skeleton/Skeleton.d.ts +23 -0
  69. package/dist/types/skeleton/Skeleton.style.d.ts +32 -0
  70. package/dist/types/skeleton/index.d.ts +3 -0
  71. package/dist/types/skeleton/tokens.d.ts +3 -0
  72. package/dist/types/stepper/Step.d.ts +24 -0
  73. package/dist/types/stepper/Stepper.d.ts +20 -0
  74. package/dist/types/stepper/Stepper.style.d.ts +57 -0
  75. package/dist/types/stepper/index.d.ts +3 -0
  76. package/dist/types/stepper/tokens.d.ts +3 -0
  77. package/dist/types/switch/Switch.d.ts +68 -0
  78. package/dist/types/switch/Switch.style.d.ts +100 -0
  79. package/dist/types/switch/__tests__/Switch.test.d.ts +14 -0
  80. package/dist/types/switch/index.d.ts +6 -0
  81. package/dist/types/switch/tokens.d.ts +3 -0
  82. package/dist/types/table/Table.d.ts +88 -0
  83. package/dist/types/table/Table.style.d.ts +97 -0
  84. package/dist/types/table/index.d.ts +2 -0
  85. package/dist/types/tag/Tag.d.ts +80 -0
  86. package/dist/types/tag/Tag.style.d.ts +83 -0
  87. package/dist/types/tag/__tests__/Tag.test.d.ts +14 -0
  88. package/dist/types/tag/index.d.ts +2 -0
  89. package/dist/types/tag/tokens.d.ts +3 -0
  90. package/dist/types/theme.d.ts +14 -0
  91. package/dist/types/types/component-tokens.types.d.ts +765 -0
  92. package/dist/types/types/theme-utils.d.ts +20 -0
  93. package/dist/types/upload/Upload.d.ts +80 -0
  94. package/dist/types/upload/Upload.style.d.ts +158 -0
  95. package/dist/types/upload/__tests__/Upload.test.d.ts +16 -0
  96. package/dist/types/upload/index.d.ts +3 -0
  97. package/package.json +73 -0
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Collapse 组件测试
3
+ *
4
+ * 测试覆盖:
5
+ * - 基础渲染
6
+ * - 展开/收起交互
7
+ * - 受控/非受控模式
8
+ * - 手风琴模式
9
+ * - 禁用状态
10
+ * - 自定义标题和后缀
11
+ * - 键盘导航
12
+ * - 无障碍性
13
+ */
14
+ export {};
@@ -0,0 +1,4 @@
1
+ export { Collapse } from './Collapse';
2
+ export type { CollapseProps } from './Collapse';
3
+ export { CollapseItem } from './CollapseItem';
4
+ export type { CollapseItemProps } from './CollapseItem';
@@ -0,0 +1,3 @@
1
+ import { TokenGenerator } from '../types/theme-utils';
2
+ import { CollapseTokens } from '../types/component-tokens.types';
3
+ export declare const getCollapseTokens: TokenGenerator<CollapseTokens>;
@@ -0,0 +1,18 @@
1
+ export * from './button';
2
+ export * from './checkbox';
3
+ export * from './collapse';
4
+ export * from './input';
5
+ export * from './menu';
6
+ export * from './numberInput';
7
+ export * from './radio';
8
+ export * from './skeleton';
9
+ export * from './stepper';
10
+ export * from './progress';
11
+ export * from './select';
12
+ export * from './table';
13
+ export * from './switch';
14
+ export * from './tag';
15
+ export * from './upload';
16
+ export * from './theme';
17
+ export * from './types/theme-utils';
18
+ export * from './types/component-tokens.types';
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Input 输入框组件
3
+ *
4
+ * 基于 react-aria 实现无障碍访问的输入框组件
5
+ * 完全符合 Figma 设计稿规范
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * <Input
10
+ * size="md"
11
+ * placeholder="请输入内容"
12
+ * clearable
13
+ * showCounter
14
+ * maxLength={100}
15
+ * />
16
+ * ```
17
+ */
18
+ import { type ReactNode } from 'react';
19
+ import { type InputSize } from './Input.style';
20
+ export declare const SIZES: readonly ["sm", "md", "lg"];
21
+ export type InputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'> & {
22
+ /** 输入框尺寸:小号(24px)、标准(32px)、大号(40px) */
23
+ size?: InputSize;
24
+ /** 前缀图标 */
25
+ prefix?: ReactNode;
26
+ /** 后缀图标 */
27
+ suffix?: ReactNode;
28
+ /** 是否显示清除按钮(有值时显示) */
29
+ clearable?: boolean;
30
+ /** 错误状态 */
31
+ error?: boolean;
32
+ /** 错误提示信息 */
33
+ errorMessage?: ReactNode;
34
+ /** 是否显示字符计数器 */
35
+ showCounter?: boolean;
36
+ /** 全宽输入框 */
37
+ fullWidth?: boolean;
38
+ /** 是否禁用 */
39
+ disabled?: boolean;
40
+ /** 输入框标签 */
41
+ label?: ReactNode;
42
+ /** 输入框描述 */
43
+ description?: ReactNode;
44
+ };
45
+ /**
46
+ * Input 输入框组件
47
+ *
48
+ * 基于 Figma 设计规范实现的输入框组件,支持多种尺寸和状态
49
+ */
50
+ export declare const Input: import("react").ForwardRefExoticComponent<Omit<import("react").InputHTMLAttributes<HTMLInputElement>, "size" | "prefix"> & {
51
+ /** 输入框尺寸:小号(24px)、标准(32px)、大号(40px) */
52
+ size?: InputSize;
53
+ /** 前缀图标 */
54
+ prefix?: ReactNode;
55
+ /** 后缀图标 */
56
+ suffix?: ReactNode;
57
+ /** 是否显示清除按钮(有值时显示) */
58
+ clearable?: boolean;
59
+ /** 错误状态 */
60
+ error?: boolean;
61
+ /** 错误提示信息 */
62
+ errorMessage?: ReactNode;
63
+ /** 是否显示字符计数器 */
64
+ showCounter?: boolean;
65
+ /** 全宽输入框 */
66
+ fullWidth?: boolean;
67
+ /** 是否禁用 */
68
+ disabled?: boolean;
69
+ /** 输入框标签 */
70
+ label?: ReactNode;
71
+ /** 输入框描述 */
72
+ description?: ReactNode;
73
+ } & import("react").RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Input 输入框样式
3
+ *
4
+ * 基于三层 Token 体系:
5
+ * - Tier 1 (Global): 全局基础值
6
+ * - Tier 2 (Semantic): 语义化映射
7
+ * - Tier 3 (Component): 组件专用 Token
8
+ *
9
+ * 完全还原 Figma 设计稿规范
10
+ */
11
+ export declare const inputSizes: readonly ["sm", "md", "lg"];
12
+ export type InputSize = (typeof inputSizes)[number];
13
+ /**
14
+ * Input 根容器
15
+ *
16
+ * 特性:
17
+ * - 处理边框颜色状态切换
18
+ * - 支持全宽模式
19
+ * - 基于三层 Token 设计
20
+ */
21
+ export declare const InputRoot: import("@emotion/styled").StyledComponent<{
22
+ theme?: import("@emotion/react").Theme;
23
+ as?: React.ElementType;
24
+ } & {
25
+ size: InputSize;
26
+ fullWidth: boolean;
27
+ isFocused: boolean;
28
+ isError: boolean;
29
+ isDisabled: boolean;
30
+ isHovered: boolean;
31
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
32
+ /**
33
+ * 输入框内部包装器
34
+ *
35
+ * 用于布局前缀图标、输入框、后缀图标、清除按钮和计数器
36
+ */
37
+ export declare const InputWrapper: import("@emotion/styled").StyledComponent<{
38
+ theme?: import("@emotion/react").Theme;
39
+ as?: React.ElementType;
40
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
41
+ /**
42
+ * 原生 input 元素
43
+ *
44
+ * 特性:
45
+ * - 无边框、背景透明(由容器处理)
46
+ * - 支持错误状态文字颜色
47
+ * - 占位符样式
48
+ */
49
+ export declare const StyledInput: import("@emotion/styled").StyledComponent<{
50
+ theme?: import("@emotion/react").Theme;
51
+ as?: React.ElementType;
52
+ } & {
53
+ isError: boolean;
54
+ isDisabled: boolean;
55
+ }, import("react").DetailedHTMLProps<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, {}>;
56
+ /**
57
+ * 图标包装器(前缀/后缀图标)
58
+ *
59
+ * 特性:
60
+ * - 灵活的尺寸适配
61
+ * - 颜色自动继承或根据状态调整
62
+ */
63
+ export declare const IconWrapper: import("@emotion/styled").StyledComponent<{
64
+ theme?: import("@emotion/react").Theme;
65
+ as?: React.ElementType;
66
+ } & {
67
+ isError: boolean;
68
+ isDisabled: boolean;
69
+ position: "prefix" | "suffix";
70
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {}>;
71
+ /**
72
+ * 清除按钮
73
+ *
74
+ * 特性:
75
+ * - 仅在有内容且未禁用时显示
76
+ * - hover 时有反馈效果
77
+ * - 无障碍友好
78
+ */
79
+ export declare const ClearButton: import("@emotion/styled").StyledComponent<{
80
+ theme?: import("@emotion/react").Theme;
81
+ as?: React.ElementType;
82
+ } & {
83
+ isError: boolean;
84
+ }, import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, {}>;
85
+ /**
86
+ * 字符计数器
87
+ *
88
+ * 显示格式:当前字数/最大字数
89
+ */
90
+ export declare const Counter: import("@emotion/styled").StyledComponent<{
91
+ theme?: import("@emotion/react").Theme;
92
+ as?: React.ElementType;
93
+ } & {
94
+ isError: boolean;
95
+ isDisabled: boolean;
96
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {}>;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Input 组件测试
3
+ *
4
+ * 测试覆盖:
5
+ * - 基础渲染
6
+ * - 尺寸 (sm, md, lg)
7
+ * - 前缀/后缀图标
8
+ * - 清除按钮功能
9
+ * - 错误状态
10
+ * - 禁用状态
11
+ * - 字符计数器
12
+ * - 全宽模式
13
+ * - 键盘交互
14
+ * - 无障碍性
15
+ * - ref 转发
16
+ */
17
+ export {};
@@ -0,0 +1,2 @@
1
+ export { Input } from './Input';
2
+ export type { InputProps } from './Input';
@@ -0,0 +1,3 @@
1
+ import { TokenGenerator } from '../types/theme-utils';
2
+ import { InputTokens } from '../types/component-tokens.types';
3
+ export declare const getInputTokens: TokenGenerator<InputTokens>;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Menu 侧边栏菜单组件
3
+ *
4
+ * 基于 Figma 设计稿的导航菜单组件
5
+ * 支持展开/折叠、分组、子菜单等功能
6
+ */
7
+ import { type ReactNode } from 'react';
8
+ export interface MenuProps {
9
+ /** 菜单是否折叠 */
10
+ collapsed?: boolean;
11
+ /** 子元素(自定义内容、MenuGroup、MenuItem等) */
12
+ children: ReactNode;
13
+ /** 自定义类名 */
14
+ className?: string;
15
+ /** 自定义样式 */
16
+ style?: React.CSSProperties;
17
+ }
18
+ /**
19
+ * Menu 侧边栏菜单组件
20
+ *
21
+ * 主容器组件,用于包裹所有菜单相关子组件
22
+ *
23
+ * @example
24
+ * ```tsx
25
+ * <Menu collapsed={false}>
26
+ * <div style={{ padding: 24 }}>自定义头部</div>
27
+ *
28
+ * <MenuGroup title="主要功能">
29
+ * <MenuItem icon={<HomeIcon />} label="首页" active />
30
+ * <MenuItem icon={<UserIcon />} label="用户" />
31
+ * </MenuGroup>
32
+ *
33
+ * <div style={{ padding: 24 }}>自定义底部</div>
34
+ * </Menu>
35
+ * ```
36
+ */
37
+ export declare const Menu: import("react").ForwardRefExoticComponent<MenuProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Menu 菜单样式
3
+ *
4
+ * 基于三层 Token 体系的侧边栏导航菜单组件样式
5
+ * 完全还原 Figma 设计稿规范
6
+ */
7
+ export interface MenuStyleProps {
8
+ collapsed?: boolean;
9
+ }
10
+ export interface MenuItemStyleProps {
11
+ active?: boolean;
12
+ disabled?: boolean;
13
+ isSubItem?: boolean;
14
+ collapsed?: boolean;
15
+ }
16
+ /**
17
+ * Menu 根容器
18
+ *
19
+ * 特性:
20
+ * - 支持展开/折叠状态
21
+ * - 固定宽度
22
+ * - 滚动区域
23
+ */
24
+ export declare const MenuContainer: import("@emotion/styled").StyledComponent<{
25
+ theme?: import("@emotion/react").Theme;
26
+ as?: React.ElementType;
27
+ } & MenuStyleProps, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
28
+ /**
29
+ * Menu 内容滚动区域
30
+ */
31
+ export declare const MenuContent: import("@emotion/styled").StyledComponent<{
32
+ theme?: import("@emotion/react").Theme;
33
+ as?: React.ElementType;
34
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
35
+ /**
36
+ * MenuItem 容器
37
+ *
38
+ * 支持:
39
+ * - 激活状态
40
+ * - 禁用状态
41
+ * - 子菜单缩进
42
+ */
43
+ export declare const MenuItemContainer: import("@emotion/styled").StyledComponent<{
44
+ theme?: import("@emotion/react").Theme;
45
+ as?: React.ElementType;
46
+ } & MenuItemStyleProps, import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, {}>;
47
+ /**
48
+ * MenuItem 图标容器
49
+ */
50
+ export declare const MenuItemIcon: import("@emotion/styled").StyledComponent<{
51
+ theme?: import("@emotion/react").Theme;
52
+ as?: React.ElementType;
53
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {}>;
54
+ /**
55
+ * MenuItem 文字标签
56
+ */
57
+ export declare const MenuItemLabel: import("@emotion/styled").StyledComponent<{
58
+ theme?: import("@emotion/react").Theme;
59
+ as?: React.ElementType;
60
+ } & {
61
+ collapsed?: boolean;
62
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {}>;
63
+ /**
64
+ * MenuItem 箭头图标
65
+ */
66
+ export declare const MenuItemArrow: import("@emotion/styled").StyledComponent<{
67
+ theme?: import("@emotion/react").Theme;
68
+ as?: React.ElementType;
69
+ } & {
70
+ collapsed?: boolean;
71
+ expanded?: boolean;
72
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {}>;
73
+ /**
74
+ * MenuGroup 容器
75
+ */
76
+ export declare const MenuGroupContainer: import("@emotion/styled").StyledComponent<{
77
+ theme?: import("@emotion/react").Theme;
78
+ as?: React.ElementType;
79
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
80
+ /**
81
+ * MenuGroup 标题
82
+ */
83
+ export declare const MenuGroupTitle: import("@emotion/styled").StyledComponent<{
84
+ theme?: import("@emotion/react").Theme;
85
+ as?: React.ElementType;
86
+ } & {
87
+ collapsed?: boolean;
88
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
89
+ /**
90
+ * MenuGroup 项目容器
91
+ */
92
+ export declare const MenuGroupItems: import("@emotion/styled").StyledComponent<{
93
+ theme?: import("@emotion/react").Theme;
94
+ as?: React.ElementType;
95
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
96
+ /**
97
+ * SubMenuPopover 容器
98
+ *
99
+ * 折叠状态下的二级菜单悬浮层
100
+ */
101
+ export declare const SubMenuPopoverContainer: import("@emotion/styled").StyledComponent<{
102
+ theme?: import("@emotion/react").Theme;
103
+ as?: React.ElementType;
104
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
105
+ /**
106
+ * SubMenuPopover 内容区域
107
+ */
108
+ export declare const SubMenuPopoverContent: import("@emotion/styled").StyledComponent<{
109
+ theme?: import("@emotion/react").Theme;
110
+ as?: React.ElementType;
111
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
112
+ /**
113
+ * SubMenuPopover 菜单项容器
114
+ *
115
+ * 悬浮层中的菜单项样式
116
+ */
117
+ export declare const SubMenuPopoverItem: import("@emotion/styled").StyledComponent<{
118
+ theme?: import("@emotion/react").Theme;
119
+ as?: React.ElementType;
120
+ } & {
121
+ active?: boolean;
122
+ }, import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, {}>;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * MenuFooter 菜单底部组件
3
+ *
4
+ * 用于显示用户信息和设置按钮
5
+ */
6
+ import { type ReactNode } from 'react';
7
+ export interface MenuFooterProps {
8
+ /** 用户头像 */
9
+ avatar?: ReactNode;
10
+ /** 用户名 */
11
+ username?: string;
12
+ /** 操作按钮(如设置按钮) */
13
+ action?: ReactNode;
14
+ /** 菜单是否折叠 */
15
+ collapsed?: boolean;
16
+ /** 用户区域点击事件 */
17
+ onUserClick?: () => void;
18
+ /** 操作按钮点击事件 */
19
+ onActionClick?: () => void;
20
+ /** 自定义类名 */
21
+ className?: string;
22
+ }
23
+ /**
24
+ * MenuFooter 菜单底部组件
25
+ *
26
+ * 显示用户信息和相关操作
27
+ * 支持折叠状态下的简化显示
28
+ */
29
+ export declare const MenuFooter: {
30
+ ({ avatar, username, action, collapsed, onUserClick, onActionClick, className, }: MenuFooterProps): import("react/jsx-runtime").JSX.Element;
31
+ displayName: string;
32
+ };
@@ -0,0 +1,26 @@
1
+ /**
2
+ * MenuGroup 菜单分组组件
3
+ *
4
+ * 用于对菜单项进行分组,并显示分组标题
5
+ */
6
+ import { type ReactNode } from 'react';
7
+ export interface MenuGroupProps {
8
+ /** 分组标题 */
9
+ title?: string;
10
+ /** 子元素(菜单项) */
11
+ children: ReactNode;
12
+ /** 菜单是否折叠 */
13
+ collapsed?: boolean;
14
+ /** 自定义类名 */
15
+ className?: string;
16
+ }
17
+ /**
18
+ * MenuGroup 菜单分组组件
19
+ *
20
+ * 用于将相关的菜单项组织在一起
21
+ * 可选的分组标题和分割线
22
+ */
23
+ export declare const MenuGroup: {
24
+ ({ title, children, collapsed, className, }: MenuGroupProps): import("react/jsx-runtime").JSX.Element;
25
+ displayName: string;
26
+ };
@@ -0,0 +1,32 @@
1
+ /**
2
+ * MenuHeader 菜单头部组件
3
+ *
4
+ * 用于显示Logo、标题、描述和操作按钮
5
+ */
6
+ import { type ReactNode } from 'react';
7
+ export interface MenuHeaderProps {
8
+ /** Logo 图片或组件 */
9
+ logo?: ReactNode;
10
+ /** 标题 */
11
+ title?: string;
12
+ /** 描述文字 */
13
+ description?: string;
14
+ /** 操作按钮(如收起按钮) */
15
+ action?: ReactNode;
16
+ /** 菜单是否折叠 */
17
+ collapsed?: boolean;
18
+ /** 点击事件 */
19
+ onClick?: () => void;
20
+ /** 自定义类名 */
21
+ className?: string;
22
+ }
23
+ /**
24
+ * MenuHeader 菜单头部组件
25
+ *
26
+ * 显示应用Logo和标题信息
27
+ * 支持折叠状态下的简化显示
28
+ */
29
+ export declare const MenuHeader: {
30
+ ({ logo, title, description, action, collapsed, onClick, className, }: MenuHeaderProps): import("react/jsx-runtime").JSX.Element;
31
+ displayName: string;
32
+ };
@@ -0,0 +1,40 @@
1
+ /**
2
+ * MenuItem 菜单项组件
3
+ *
4
+ * 基于 react-aria 实现无障碍访问的菜单项
5
+ * 支持图标、文字、箭头指示器、悬浮子菜单
6
+ */
7
+ import { type ReactNode } from 'react';
8
+ export interface MenuItemProps {
9
+ /** 唯一标识符 */
10
+ id?: string;
11
+ /** 菜单项图标 */
12
+ icon?: ReactNode;
13
+ /** 菜单项文字 */
14
+ label: string;
15
+ /** 是否激活/选中 */
16
+ active?: boolean;
17
+ /** 是否禁用 */
18
+ disabled?: boolean;
19
+ /** 是否为子菜单项 */
20
+ isSubItem?: boolean;
21
+ /** 是否显示箭头(用于可展开项) */
22
+ showArrow?: boolean;
23
+ /** 箭头是否展开 */
24
+ arrowExpanded?: boolean;
25
+ /** 菜单是否折叠 */
26
+ collapsed?: boolean;
27
+ /** 子菜单内容(折叠状态下悬浮显示) */
28
+ subMenu?: ReactNode;
29
+ /** 点击事件 */
30
+ onClick?: () => void;
31
+ /** 自定义类名 */
32
+ className?: string;
33
+ }
34
+ /**
35
+ * MenuItem 菜单项组件
36
+ *
37
+ * 用于侧边栏导航的单个菜单项
38
+ * 支持激活状态、禁用状态、子菜单缩进、折叠时的悬浮子菜单
39
+ */
40
+ export declare const MenuItem: import("react").ForwardRefExoticComponent<MenuItemProps & import("react").RefAttributes<HTMLButtonElement>>;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * SubMenuItem 子菜单项组件
3
+ *
4
+ * 用于在悬浮层中展示的子菜单项
5
+ */
6
+ export interface SubMenuItemProps {
7
+ /** 唯一标识符 */
8
+ id?: string;
9
+ /** 菜单项文字 */
10
+ label: string;
11
+ /** 是否激活/选中 */
12
+ active?: boolean;
13
+ /** 点击事件 */
14
+ onClick?: () => void;
15
+ /** 自定义类名 */
16
+ className?: string;
17
+ }
18
+ /**
19
+ * SubMenuItem 子菜单项组件
20
+ *
21
+ * 用于悬浮层中的子菜单项
22
+ */
23
+ export declare const SubMenuItem: {
24
+ ({ id, label, active, onClick, className, }: SubMenuItemProps): import("react/jsx-runtime").JSX.Element;
25
+ displayName: string;
26
+ };
@@ -0,0 +1,29 @@
1
+ /**
2
+ * SubMenuPopover 子菜单悬浮层组件
3
+ *
4
+ * 用于在折叠状态下显示二级菜单
5
+ */
6
+ import { type ReactNode } from 'react';
7
+ export interface SubMenuPopoverProps {
8
+ /** 是否显示 */
9
+ visible: boolean;
10
+ /** 触发元素的引用 */
11
+ anchorRef: React.RefObject<HTMLElement>;
12
+ /** 子菜单内容 */
13
+ children: ReactNode;
14
+ /** 关闭回调 */
15
+ onClose?: () => void;
16
+ /** 鼠标移入事件 */
17
+ onMouseEnter?: () => void;
18
+ /** 鼠标移出事件 */
19
+ onMouseLeave?: () => void;
20
+ }
21
+ /**
22
+ * SubMenuPopover 子菜单悬浮层组件
23
+ *
24
+ * 在折叠状态下,鼠标悬浮一级菜单时展示二级菜单
25
+ */
26
+ export declare const SubMenuPopover: {
27
+ ({ visible, anchorRef, children, onClose, onMouseEnter, onMouseLeave, }: SubMenuPopoverProps): any;
28
+ displayName: string;
29
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Menu 菜单组件导出
3
+ */
4
+ export { Menu } from './Menu';
5
+ export type { MenuProps } from './Menu';
6
+ export { MenuItem } from './MenuItem';
7
+ export type { MenuItemProps } from './MenuItem';
8
+ export { MenuGroup } from './MenuGroup';
9
+ export type { MenuGroupProps } from './MenuGroup';
10
+ export { SubMenuPopover } from './SubMenuPopover';
11
+ export type { SubMenuPopoverProps } from './SubMenuPopover';
12
+ export { SubMenuItem } from './SubMenuItem';
13
+ export type { SubMenuItemProps } from './SubMenuItem';
@@ -0,0 +1,3 @@
1
+ import { TokenGenerator } from '../types/theme-utils';
2
+ import { MenuTokens } from '../types/component-tokens.types';
3
+ export declare const getMenuTokens: TokenGenerator<MenuTokens>;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * 数字输入框组件
3
+ *
4
+ * 基于 react-aria 实现无障碍访问的数字输入框组件
5
+ * 完全符合 Figma 设计稿规范
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * <NumberInput
10
+ * size="md"
11
+ * defaultValue={10}
12
+ * min={0}
13
+ * max={100}
14
+ * step={1}
15
+ * label="数量"
16
+ * description="请输入数量"
17
+ * controls="buttons"
18
+ * onValueChange={(v) => console.log(v)}
19
+ * />
20
+ * ```
21
+ */
22
+ import { type ReactNode, type ChangeEvent } from 'react';
23
+ export type NumberInputProps = {
24
+ /** 初始数值(受控请使用 value) */
25
+ defaultValue?: number;
26
+ /** 受控数值 */
27
+ value?: number;
28
+ /** 最小值 */
29
+ min?: number;
30
+ /** 最大值 */
31
+ max?: number;
32
+ /** 步长 */
33
+ step?: number;
34
+ /** 控件样式:'buttons' - 左右 加/减 按钮;'arrows' - 右侧竖直箭头 */
35
+ controls?: 'buttons' | 'arrows';
36
+ /** 大小:'md' | 'lg' */
37
+ size?: 'md' | 'lg';
38
+ /** 值变化回调(返回 number | undefined) */
39
+ onValueChange?: (v: number | undefined) => void;
40
+ /** 标签文本 */
41
+ label?: ReactNode;
42
+ /** 描述文本 */
43
+ description?: ReactNode;
44
+ /** 是否显示错误状态 */
45
+ error?: boolean;
46
+ /** 错误提示文本 */
47
+ errorMessage?: ReactNode;
48
+ /** 是否禁用 */
49
+ disabled?: boolean;
50
+ /** 自定义类名 */
51
+ className?: string;
52
+ /** 自定义 ID */
53
+ id?: string;
54
+ /** 原生 onChange 保留以便外部使用 */
55
+ onChange?: (e: ChangeEvent<HTMLInputElement>) => void;
56
+ };
57
+ /** 数字输入框组件 */
58
+ export declare const NumberInput: import("react").ForwardRefExoticComponent<NumberInputProps & import("react").RefAttributes<HTMLInputElement>>;
59
+ export default NumberInput;