wssf-kage-ui 0.1.1 → 0.1.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.
Files changed (179) hide show
  1. package/dist/cjs/Avatar/index.d.ts +47 -0
  2. package/dist/cjs/Avatar/index.js +147 -0
  3. package/dist/cjs/Avatar/style.less +193 -0
  4. package/dist/cjs/Badge/index.d.ts +48 -0
  5. package/dist/cjs/Badge/index.js +141 -0
  6. package/dist/cjs/Badge/style.less +237 -0
  7. package/dist/cjs/Calendar/index.d.ts +33 -0
  8. package/dist/cjs/Calendar/index.js +296 -0
  9. package/dist/cjs/Calendar/style.less +384 -0
  10. package/dist/cjs/Card/index.d.ts +68 -0
  11. package/dist/cjs/Card/index.js +155 -0
  12. package/dist/cjs/Card/style.less +356 -0
  13. package/dist/cjs/Carousel/index.d.ts +33 -0
  14. package/dist/cjs/Carousel/index.js +169 -0
  15. package/dist/cjs/Carousel/style.less +232 -0
  16. package/dist/cjs/Collapse/index.d.ts +55 -0
  17. package/dist/cjs/Collapse/index.js +191 -0
  18. package/dist/cjs/Collapse/style.less +217 -0
  19. package/dist/cjs/Descriptions/index.d.ts +54 -0
  20. package/dist/cjs/Descriptions/index.js +181 -0
  21. package/dist/cjs/Descriptions/style.less +259 -0
  22. package/dist/cjs/Empty/index.d.ts +21 -0
  23. package/dist/cjs/Empty/index.js +115 -0
  24. package/dist/cjs/Empty/style.less +103 -0
  25. package/dist/cjs/Image/index.d.ts +30 -0
  26. package/dist/cjs/Image/index.js +153 -0
  27. package/dist/cjs/Image/style.less +156 -0
  28. package/dist/cjs/Input/index.d.ts +24 -0
  29. package/dist/cjs/Input/index.js +158 -0
  30. package/dist/cjs/Input/style.less +276 -0
  31. package/dist/cjs/InputNumber/index.d.ts +47 -0
  32. package/dist/cjs/InputNumber/index.js +323 -0
  33. package/dist/cjs/InputNumber/style.less +392 -0
  34. package/dist/cjs/Mentions/index.d.ts +57 -0
  35. package/dist/cjs/Mentions/index.js +378 -0
  36. package/dist/cjs/Mentions/style.less +297 -0
  37. package/dist/cjs/Popover/index.d.ts +30 -0
  38. package/dist/cjs/Popover/index.js +131 -0
  39. package/dist/cjs/Popover/style.less +279 -0
  40. package/dist/cjs/QRCode/index.d.ts +30 -0
  41. package/dist/cjs/QRCode/index.js +167 -0
  42. package/dist/cjs/QRCode/style.less +201 -0
  43. package/dist/cjs/Radio/index.d.ts +70 -0
  44. package/dist/cjs/Radio/index.js +199 -0
  45. package/dist/cjs/Radio/style.less +326 -0
  46. package/dist/cjs/Rate/index.d.ts +37 -0
  47. package/dist/cjs/Rate/index.js +151 -0
  48. package/dist/cjs/Rate/style.less +170 -0
  49. package/dist/cjs/Segmented/index.d.ts +31 -0
  50. package/dist/cjs/Segmented/index.js +121 -0
  51. package/dist/cjs/Segmented/style.less +167 -0
  52. package/dist/cjs/Select/index.d.ts +67 -0
  53. package/dist/cjs/Select/index.js +403 -0
  54. package/dist/cjs/Select/style.less +523 -0
  55. package/dist/cjs/Slider/index.d.ts +41 -0
  56. package/dist/cjs/Slider/index.js +325 -0
  57. package/dist/cjs/Slider/style.less +287 -0
  58. package/dist/cjs/Statistic/index.d.ts +26 -0
  59. package/dist/cjs/Statistic/index.js +71 -0
  60. package/dist/cjs/Statistic/style.less +94 -0
  61. package/dist/cjs/Switch/index.d.ts +28 -0
  62. package/dist/cjs/Switch/index.js +71 -0
  63. package/dist/cjs/Switch/style.less +212 -0
  64. package/dist/cjs/Table/index.d.ts +188 -0
  65. package/dist/cjs/Table/index.js +787 -0
  66. package/dist/cjs/Table/style.less +663 -0
  67. package/dist/cjs/Tag/index.d.ts +51 -0
  68. package/dist/cjs/Tag/index.js +142 -0
  69. package/dist/cjs/Tag/style.less +356 -0
  70. package/dist/cjs/TimePicker/index.d.ts +51 -0
  71. package/dist/cjs/TimePicker/index.js +332 -0
  72. package/dist/cjs/TimePicker/style.less +384 -0
  73. package/dist/cjs/Timeline/index.d.ts +47 -0
  74. package/dist/cjs/Timeline/index.js +127 -0
  75. package/dist/cjs/Timeline/style.less +265 -0
  76. package/dist/cjs/Tooltip/index.d.ts +53 -0
  77. package/dist/cjs/Tooltip/index.js +468 -0
  78. package/dist/cjs/Tooltip/style.less +237 -0
  79. package/dist/cjs/Transfer/index.d.ts +52 -0
  80. package/dist/cjs/Transfer/index.js +344 -0
  81. package/dist/cjs/Transfer/style.less +331 -0
  82. package/dist/cjs/TreeSelect/index.d.ts +54 -0
  83. package/dist/cjs/TreeSelect/index.js +373 -0
  84. package/dist/cjs/TreeSelect/style.less +471 -0
  85. package/dist/cjs/Upload/index.d.ts +65 -0
  86. package/dist/cjs/Upload/index.js +517 -0
  87. package/dist/cjs/Upload/style.less +424 -0
  88. package/dist/cjs/index.d.ts +58 -0
  89. package/dist/cjs/index.js +227 -0
  90. package/dist/esm/Avatar/index.d.ts +47 -0
  91. package/dist/esm/Avatar/index.js +142 -0
  92. package/dist/esm/Avatar/style.less +193 -0
  93. package/dist/esm/Badge/index.d.ts +48 -0
  94. package/dist/esm/Badge/index.js +137 -0
  95. package/dist/esm/Badge/style.less +237 -0
  96. package/dist/esm/Calendar/index.d.ts +33 -0
  97. package/dist/esm/Calendar/index.js +291 -0
  98. package/dist/esm/Calendar/style.less +384 -0
  99. package/dist/esm/Card/index.d.ts +68 -0
  100. package/dist/esm/Card/index.js +149 -0
  101. package/dist/esm/Card/style.less +356 -0
  102. package/dist/esm/Carousel/index.d.ts +33 -0
  103. package/dist/esm/Carousel/index.js +163 -0
  104. package/dist/esm/Carousel/style.less +232 -0
  105. package/dist/esm/Collapse/index.d.ts +55 -0
  106. package/dist/esm/Collapse/index.js +187 -0
  107. package/dist/esm/Collapse/style.less +217 -0
  108. package/dist/esm/Descriptions/index.d.ts +54 -0
  109. package/dist/esm/Descriptions/index.js +179 -0
  110. package/dist/esm/Descriptions/style.less +259 -0
  111. package/dist/esm/Empty/index.d.ts +21 -0
  112. package/dist/esm/Empty/index.js +109 -0
  113. package/dist/esm/Empty/style.less +103 -0
  114. package/dist/esm/Image/index.d.ts +30 -0
  115. package/dist/esm/Image/index.js +149 -0
  116. package/dist/esm/Image/style.less +156 -0
  117. package/dist/esm/Input/index.d.ts +24 -0
  118. package/dist/esm/Input/index.js +151 -0
  119. package/dist/esm/Input/style.less +276 -0
  120. package/dist/esm/InputNumber/index.d.ts +47 -0
  121. package/dist/esm/InputNumber/index.js +316 -0
  122. package/dist/esm/InputNumber/style.less +392 -0
  123. package/dist/esm/Mentions/index.d.ts +57 -0
  124. package/dist/esm/Mentions/index.js +374 -0
  125. package/dist/esm/Mentions/style.less +297 -0
  126. package/dist/esm/Popover/index.d.ts +30 -0
  127. package/dist/esm/Popover/index.js +126 -0
  128. package/dist/esm/Popover/style.less +279 -0
  129. package/dist/esm/QRCode/index.d.ts +30 -0
  130. package/dist/esm/QRCode/index.js +158 -0
  131. package/dist/esm/QRCode/style.less +201 -0
  132. package/dist/esm/Radio/index.d.ts +70 -0
  133. package/dist/esm/Radio/index.js +193 -0
  134. package/dist/esm/Radio/style.less +326 -0
  135. package/dist/esm/Rate/index.d.ts +37 -0
  136. package/dist/esm/Rate/index.js +143 -0
  137. package/dist/esm/Rate/style.less +170 -0
  138. package/dist/esm/Segmented/index.d.ts +31 -0
  139. package/dist/esm/Segmented/index.js +113 -0
  140. package/dist/esm/Segmented/style.less +167 -0
  141. package/dist/esm/Select/index.d.ts +67 -0
  142. package/dist/esm/Select/index.js +398 -0
  143. package/dist/esm/Select/style.less +523 -0
  144. package/dist/esm/Slider/index.d.ts +41 -0
  145. package/dist/esm/Slider/index.js +318 -0
  146. package/dist/esm/Slider/style.less +287 -0
  147. package/dist/esm/Statistic/index.d.ts +26 -0
  148. package/dist/esm/Statistic/index.js +65 -0
  149. package/dist/esm/Statistic/style.less +94 -0
  150. package/dist/esm/Switch/index.d.ts +28 -0
  151. package/dist/esm/Switch/index.js +63 -0
  152. package/dist/esm/Switch/style.less +212 -0
  153. package/dist/esm/Table/index.d.ts +188 -0
  154. package/dist/esm/Table/index.js +797 -0
  155. package/dist/esm/Table/style.less +663 -0
  156. package/dist/esm/Tag/index.d.ts +51 -0
  157. package/dist/esm/Tag/index.js +144 -0
  158. package/dist/esm/Tag/style.less +356 -0
  159. package/dist/esm/TimePicker/index.d.ts +51 -0
  160. package/dist/esm/TimePicker/index.js +327 -0
  161. package/dist/esm/TimePicker/style.less +384 -0
  162. package/dist/esm/Timeline/index.d.ts +47 -0
  163. package/dist/esm/Timeline/index.js +130 -0
  164. package/dist/esm/Timeline/style.less +265 -0
  165. package/dist/esm/Tooltip/index.d.ts +53 -0
  166. package/dist/esm/Tooltip/index.js +471 -0
  167. package/dist/esm/Tooltip/style.less +237 -0
  168. package/dist/esm/Transfer/index.d.ts +52 -0
  169. package/dist/esm/Transfer/index.js +340 -0
  170. package/dist/esm/Transfer/style.less +331 -0
  171. package/dist/esm/TreeSelect/index.d.ts +54 -0
  172. package/dist/esm/TreeSelect/index.js +369 -0
  173. package/dist/esm/TreeSelect/style.less +471 -0
  174. package/dist/esm/Upload/index.d.ts +65 -0
  175. package/dist/esm/Upload/index.js +513 -0
  176. package/dist/esm/Upload/style.less +424 -0
  177. package/dist/esm/index.d.ts +58 -0
  178. package/dist/esm/index.js +30 -1
  179. package/package.json +6 -3
@@ -0,0 +1,47 @@
1
+ import React from 'react';
2
+ import './style.less';
3
+ export type AvatarSize = number | 'large' | 'default' | 'small';
4
+ export type AvatarShape = 'circle' | 'square';
5
+ export interface AvatarProps {
6
+ /** 头像的图片地址 */
7
+ src?: string;
8
+ /** 图片无法显示时的替代文本 */
9
+ alt?: string;
10
+ /** 头像的图标 */
11
+ icon?: React.ReactNode;
12
+ /** 头像的形状 */
13
+ shape?: AvatarShape;
14
+ /** 头像的大小 */
15
+ size?: AvatarSize;
16
+ /** 图片加载失败的事件 */
17
+ onError?: () => boolean;
18
+ /** 自定义类名 */
19
+ className?: string;
20
+ /** 自定义样式 */
21
+ style?: React.CSSProperties;
22
+ /** 文本内容 */
23
+ children?: React.ReactNode;
24
+ }
25
+ export declare const Avatar: React.FC<AvatarProps>;
26
+ export interface AvatarGroupProps {
27
+ /** 头像列表 */
28
+ children: React.ReactNode;
29
+ /** 最多显示的头像数量 */
30
+ maxCount?: number;
31
+ /** 多余头像的提示 */
32
+ maxPopoverPlacement?: 'top' | 'bottom';
33
+ /** 多余头像样式 */
34
+ maxStyle?: React.CSSProperties;
35
+ /** 头像的大小 */
36
+ size?: AvatarSize;
37
+ /** 自定义类名 */
38
+ className?: string;
39
+ /** 自定义样式 */
40
+ style?: React.CSSProperties;
41
+ }
42
+ declare const AvatarGroup: React.FC<AvatarGroupProps>;
43
+ export interface AvatarComponent extends React.FC<AvatarProps> {
44
+ Group: typeof AvatarGroup;
45
+ }
46
+ declare const AvatarWithGroup: AvatarComponent;
47
+ export default AvatarWithGroup;
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = exports.Avatar = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ require("./style.less");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
12
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
13
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
16
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
17
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
18
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
19
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
20
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
21
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
22
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
23
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } // ============ Avatar Props ============
24
+ // ============ Avatar Component ============
25
+ var Avatar = exports.Avatar = function Avatar(_ref) {
26
+ var src = _ref.src,
27
+ alt = _ref.alt,
28
+ icon = _ref.icon,
29
+ _ref$shape = _ref.shape,
30
+ shape = _ref$shape === void 0 ? 'circle' : _ref$shape,
31
+ _ref$size = _ref.size,
32
+ size = _ref$size === void 0 ? 'default' : _ref$size,
33
+ onError = _ref.onError,
34
+ _ref$className = _ref.className,
35
+ className = _ref$className === void 0 ? '' : _ref$className,
36
+ style = _ref.style,
37
+ children = _ref.children;
38
+ var _useState = (0, _react.useState)(false),
39
+ _useState2 = _slicedToArray(_useState, 2),
40
+ isImgError = _useState2[0],
41
+ setIsImgError = _useState2[1];
42
+ var handleImgError = (0, _react.useCallback)(function () {
43
+ var errorHandled = onError === null || onError === void 0 ? void 0 : onError();
44
+ if (errorHandled !== false) {
45
+ setIsImgError(true);
46
+ }
47
+ }, [onError]);
48
+
49
+ // 计算尺寸
50
+ var sizeStyle = {};
51
+ if (typeof size === 'number') {
52
+ sizeStyle.width = size;
53
+ sizeStyle.height = size;
54
+ sizeStyle.fontSize = size / 2;
55
+ sizeStyle.lineHeight = "".concat(size, "px");
56
+ }
57
+ var classNames = ['kage-avatar', "kage-avatar-".concat(shape), typeof size === 'string' ? "kage-avatar-".concat(size) : '', !src && !icon && children ? 'kage-avatar-text' : '', src && !isImgError ? 'kage-avatar-image' : '', icon ? 'kage-avatar-icon' : '', className].filter(Boolean).join(' ');
58
+ var mergedStyle = _objectSpread(_objectSpread({}, sizeStyle), style);
59
+
60
+ // 渲染头像内容
61
+ var renderAvatar = function renderAvatar() {
62
+ // 优先显示图片
63
+ if (src && !isImgError) {
64
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
65
+ src: src,
66
+ alt: alt,
67
+ onError: handleImgError
68
+ });
69
+ }
70
+
71
+ // 其次显示图标
72
+ if (icon) {
73
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
74
+ className: "kage-avatar-icon-content",
75
+ children: icon
76
+ });
77
+ }
78
+
79
+ // 最后显示文本
80
+ if (children) {
81
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
82
+ className: "kage-avatar-text-content",
83
+ children: children
84
+ });
85
+ }
86
+
87
+ // 默认显示用户图标
88
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
89
+ className: "kage-avatar-icon-content",
90
+ children: "\uD83D\uDC64"
91
+ });
92
+ };
93
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
94
+ className: classNames,
95
+ style: mergedStyle,
96
+ children: renderAvatar()
97
+ });
98
+ };
99
+
100
+ // ============ Avatar.Group Props ============
101
+
102
+ // ============ Avatar.Group Component ============
103
+ var AvatarGroup = function AvatarGroup(_ref2) {
104
+ var children = _ref2.children,
105
+ maxCount = _ref2.maxCount,
106
+ _ref2$maxPopoverPlace = _ref2.maxPopoverPlacement,
107
+ maxPopoverPlacement = _ref2$maxPopoverPlace === void 0 ? 'top' : _ref2$maxPopoverPlace,
108
+ maxStyle = _ref2.maxStyle,
109
+ size = _ref2.size,
110
+ _ref2$className = _ref2.className,
111
+ className = _ref2$className === void 0 ? '' : _ref2$className,
112
+ style = _ref2.style;
113
+ var childrenArray = _react.default.Children.toArray(children);
114
+ var numOfChildren = childrenArray.length;
115
+
116
+ // 如果没有设置 maxCount 或者子元素数量小于等于 maxCount,直接显示所有
117
+ var visibleChildren = maxCount && numOfChildren > maxCount ? childrenArray.slice(0, maxCount) : childrenArray;
118
+ var excessCount = maxCount && numOfChildren > maxCount ? numOfChildren - maxCount : 0;
119
+
120
+ // 为子元素添加 size 属性
121
+ var childrenWithSize = visibleChildren.map(function (child, index) {
122
+ if ( /*#__PURE__*/_react.default.isValidElement(child)) {
123
+ return /*#__PURE__*/_react.default.cloneElement(child, {
124
+ size: child.props.size || size,
125
+ key: index
126
+ });
127
+ }
128
+ return child;
129
+ });
130
+ var classNames = ['kage-avatar-group', className].filter(Boolean).join(' ');
131
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
132
+ className: classNames,
133
+ style: style,
134
+ children: [childrenWithSize, excessCount > 0 && /*#__PURE__*/(0, _jsxRuntime.jsxs)(Avatar, {
135
+ size: size,
136
+ className: "kage-avatar-group-excess",
137
+ style: maxStyle,
138
+ children: ["+", excessCount]
139
+ })]
140
+ });
141
+ };
142
+
143
+ // 将 Group 组件附加到 Avatar 上
144
+ Avatar.displayName = 'Avatar';
145
+ var AvatarWithGroup = Avatar;
146
+ AvatarWithGroup.Group = AvatarGroup;
147
+ var _default = exports.default = AvatarWithGroup;
@@ -0,0 +1,193 @@
1
+ // Avatar 头像组件样式
2
+
3
+ @prefix: kage-avatar;
4
+
5
+ // 颜色变量
6
+ @avatar-bg: #f5f5f5;
7
+ @avatar-color: rgba(0, 0, 0, 0.88);
8
+ @avatar-border: transparent;
9
+ @avatar-size-default: 40px;
10
+ @avatar-size-large: 48px;
11
+ @avatar-size-small: 32px;
12
+
13
+ // ============ 基础样式 ============
14
+ .@{prefix} {
15
+ position: relative;
16
+ display: inline-flex;
17
+ align-items: center;
18
+ justify-content: center;
19
+ width: @avatar-size-default;
20
+ height: @avatar-size-default;
21
+ font-size: 18px;
22
+ line-height: @avatar-size-default;
23
+ background: @avatar-bg;
24
+ color: @avatar-color;
25
+ border-radius: 50%;
26
+ overflow: hidden;
27
+ user-select: none;
28
+ vertical-align: middle;
29
+ flex-shrink: 0;
30
+
31
+ * {
32
+ box-sizing: border-box;
33
+ }
34
+
35
+ img {
36
+ width: 100%;
37
+ height: 100%;
38
+ object-fit: cover;
39
+ display: block;
40
+ }
41
+ }
42
+
43
+ // ============ 尺寸变体 ============
44
+ .@{prefix}-large {
45
+ width: @avatar-size-large;
46
+ height: @avatar-size-large;
47
+ font-size: 24px;
48
+ line-height: @avatar-size-large;
49
+ }
50
+
51
+ .@{prefix}-small {
52
+ width: @avatar-size-small;
53
+ height: @avatar-size-small;
54
+ font-size: 14px;
55
+ line-height: @avatar-size-small;
56
+ }
57
+
58
+ // ============ 形状变体 ============
59
+ .@{prefix}-square {
60
+ border-radius: 6px;
61
+ }
62
+
63
+ // ============ 内容类型 ============
64
+ .@{prefix}-icon-content {
65
+ display: flex;
66
+ align-items: center;
67
+ justify-content: center;
68
+ font-size: 1em;
69
+ }
70
+
71
+ .@{prefix}-text-content {
72
+ display: flex;
73
+ align-items: center;
74
+ justify-content: center;
75
+ font-weight: 500;
76
+ text-transform: uppercase;
77
+ }
78
+
79
+ .@{prefix}-image {
80
+ background: transparent;
81
+ }
82
+
83
+ // ============ Avatar Group ============
84
+ .@{prefix}-group {
85
+ display: inline-flex;
86
+ align-items: center;
87
+
88
+ .@{prefix} {
89
+ margin-left: -8px;
90
+ border: 2px solid #fff;
91
+ cursor: pointer;
92
+ transition: all 0.2s ease;
93
+
94
+ &:first-child {
95
+ margin-left: 0;
96
+ }
97
+
98
+ &:hover {
99
+ z-index: 1;
100
+ transform: translateY(-2px);
101
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
102
+ }
103
+ }
104
+ }
105
+
106
+ .@{prefix}-group-excess {
107
+ background: #fafafa;
108
+ color: rgba(0, 0, 0, 0.45);
109
+ font-size: 14px;
110
+ cursor: default;
111
+
112
+ &:hover {
113
+ transform: none;
114
+ box-shadow: none;
115
+ }
116
+ }
117
+
118
+ // ============ 颜色变体(可选) ============
119
+ .@{prefix}[data-color='primary'] {
120
+ background: #6366f1;
121
+ color: #fff;
122
+ }
123
+
124
+ .@{prefix}[data-color='success'] {
125
+ background: #52c41a;
126
+ color: #fff;
127
+ }
128
+
129
+ .@{prefix}[data-color='warning'] {
130
+ background: #faad14;
131
+ color: #fff;
132
+ }
133
+
134
+ .@{prefix}[data-color='error'] {
135
+ background: #ff4d4f;
136
+ color: #fff;
137
+ }
138
+
139
+ .@{prefix}[data-color='info'] {
140
+ background: #1890ff;
141
+ color: #fff;
142
+ }
143
+
144
+ // ============ 暗色模式适配 ============
145
+ [data-theme='dark'],
146
+ [data-prefers-color-scheme='dark'],
147
+ [data-prefers-color='dark'] {
148
+ .@{prefix} {
149
+ background: #262626;
150
+ color: rgba(255, 255, 255, 0.88);
151
+ }
152
+
153
+ .@{prefix}-group {
154
+ .@{prefix} {
155
+ border-color: #1f1f1f;
156
+
157
+ &:hover {
158
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.45);
159
+ }
160
+ }
161
+ }
162
+
163
+ .@{prefix}-group-excess {
164
+ background: #141414;
165
+ color: rgba(255, 255, 255, 0.45);
166
+ }
167
+
168
+ .@{prefix}[data-color='primary'] {
169
+ background: #6366f1;
170
+ color: #fff;
171
+ }
172
+
173
+ .@{prefix}[data-color='success'] {
174
+ background: #52c41a;
175
+ color: #fff;
176
+ }
177
+
178
+ .@{prefix}[data-color='warning'] {
179
+ background: #faad14;
180
+ color: #fff;
181
+ }
182
+
183
+ .@{prefix}[data-color='error'] {
184
+ background: #ff4d4f;
185
+ color: #fff;
186
+ }
187
+
188
+ .@{prefix}[data-color='info'] {
189
+ background: #1890ff;
190
+ color: #fff;
191
+ }
192
+ }
193
+
@@ -0,0 +1,48 @@
1
+ import React, { CSSProperties } from 'react';
2
+ import './style.less';
3
+ export type BadgeStatus = 'success' | 'processing' | 'default' | 'error' | 'warning';
4
+ export interface BadgeProps {
5
+ /** 展示的数字,大于 overflowCount 时显示为 ${overflowCount}+ */
6
+ count?: number | React.ReactNode;
7
+ /** 展示封顶的数字值 */
8
+ overflowCount?: number;
9
+ /** 不展示数字,只有一个小红点 */
10
+ dot?: boolean;
11
+ /** 设置状态点 */
12
+ status?: BadgeStatus;
13
+ /** 设置状态点的文本 */
14
+ text?: React.ReactNode;
15
+ /** 自定义小圆点的颜色 */
16
+ color?: string;
17
+ /** 是否显示 Badge */
18
+ showZero?: boolean;
19
+ /** 设置 Badge 为状态点 */
20
+ offset?: [number, number];
21
+ /** 自定义类名 */
22
+ className?: string;
23
+ /** 自定义样式 */
24
+ style?: CSSProperties;
25
+ /** 子元素 */
26
+ children?: React.ReactNode;
27
+ }
28
+ export declare const Badge: React.FC<BadgeProps>;
29
+ export interface BadgeRibbonProps {
30
+ /** 缎带的文本 */
31
+ text?: React.ReactNode;
32
+ /** 缎带的颜色 */
33
+ color?: string;
34
+ /** 缎带的位置 */
35
+ placement?: 'start' | 'end';
36
+ /** 自定义类名 */
37
+ className?: string;
38
+ /** 自定义样式 */
39
+ style?: CSSProperties;
40
+ /** 子元素 */
41
+ children?: React.ReactNode;
42
+ }
43
+ declare const BadgeRibbon: React.FC<BadgeRibbonProps>;
44
+ export interface BadgeComponent extends React.FC<BadgeProps> {
45
+ Ribbon: typeof BadgeRibbon;
46
+ }
47
+ declare const BadgeWithRibbon: BadgeComponent;
48
+ export default BadgeWithRibbon;
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.Badge = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ require("./style.less");
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
12
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
15
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
16
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } // ============ Badge Props ============
17
+ // ============ Badge Component ============
18
+ var Badge = exports.Badge = function Badge(_ref) {
19
+ var _ref$count = _ref.count,
20
+ count = _ref$count === void 0 ? 0 : _ref$count,
21
+ _ref$overflowCount = _ref.overflowCount,
22
+ overflowCount = _ref$overflowCount === void 0 ? 99 : _ref$overflowCount,
23
+ _ref$dot = _ref.dot,
24
+ dot = _ref$dot === void 0 ? false : _ref$dot,
25
+ status = _ref.status,
26
+ text = _ref.text,
27
+ color = _ref.color,
28
+ _ref$showZero = _ref.showZero,
29
+ showZero = _ref$showZero === void 0 ? false : _ref$showZero,
30
+ offset = _ref.offset,
31
+ _ref$className = _ref.className,
32
+ className = _ref$className === void 0 ? '' : _ref$className,
33
+ style = _ref.style,
34
+ children = _ref.children;
35
+ // 计算显示的内容
36
+ var getDisplayCount = function getDisplayCount() {
37
+ if (typeof count === 'number') {
38
+ if (count === 0 && !showZero) {
39
+ return null;
40
+ }
41
+ if (count > overflowCount) {
42
+ return "".concat(overflowCount, "+");
43
+ }
44
+ return count;
45
+ }
46
+ return count;
47
+ };
48
+ var displayCount = getDisplayCount();
49
+ var shouldShowBadge = dot || displayCount !== null;
50
+
51
+ // 状态点样式
52
+ if (status || !children && text) {
53
+ var statusClassNames = ['kage-badge-status', status && "kage-badge-status-".concat(status), className].filter(Boolean).join(' ');
54
+ var dotStyle = color ? {
55
+ backgroundColor: color
56
+ } : {};
57
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("span", {
58
+ className: statusClassNames,
59
+ style: style,
60
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
61
+ className: "kage-badge-status-dot",
62
+ style: dotStyle
63
+ }), text && /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
64
+ className: "kage-badge-status-text",
65
+ children: text
66
+ })]
67
+ });
68
+ }
69
+
70
+ // 如果没有子元素,直接显示数字
71
+ if (!children) {
72
+ if (!shouldShowBadge) return null;
73
+ var standaloneClassNames = ['kage-badge-standalone', dot && 'kage-badge-dot', className].filter(Boolean).join(' ');
74
+ var badgeStyle = color ? {
75
+ backgroundColor: color
76
+ } : {};
77
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
78
+ className: standaloneClassNames,
79
+ style: _objectSpread(_objectSpread({}, badgeStyle), style),
80
+ children: !dot && displayCount
81
+ });
82
+ }
83
+
84
+ // 带子元素的徽章
85
+ var wrapperClassNames = ['kage-badge', className].filter(Boolean).join(' ');
86
+ var supClassNames = ['kage-badge-count', dot && 'kage-badge-dot', !shouldShowBadge && 'kage-badge-hidden'].filter(Boolean).join(' ');
87
+ var supStyle = _objectSpread(_objectSpread({}, color ? {
88
+ backgroundColor: color
89
+ } : {}), offset ? {
90
+ right: -offset[0],
91
+ top: offset[1]
92
+ } : {});
93
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("span", {
94
+ className: wrapperClassNames,
95
+ style: style,
96
+ children: [children, shouldShowBadge && /*#__PURE__*/(0, _jsxRuntime.jsx)("sup", {
97
+ className: supClassNames,
98
+ style: supStyle,
99
+ children: !dot && displayCount
100
+ })]
101
+ });
102
+ };
103
+
104
+ // ============ Badge.Ribbon Props ============
105
+
106
+ // ============ Badge.Ribbon Component ============
107
+ var BadgeRibbon = function BadgeRibbon(_ref2) {
108
+ var text = _ref2.text,
109
+ color = _ref2.color,
110
+ _ref2$placement = _ref2.placement,
111
+ placement = _ref2$placement === void 0 ? 'end' : _ref2$placement,
112
+ _ref2$className = _ref2.className,
113
+ className = _ref2$className === void 0 ? '' : _ref2$className,
114
+ style = _ref2.style,
115
+ children = _ref2.children;
116
+ var ribbonClassNames = ['kage-badge-ribbon', "kage-badge-ribbon-".concat(placement), className].filter(Boolean).join(' ');
117
+ var ribbonStyle = color ? {
118
+ backgroundColor: color
119
+ } : {};
120
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
121
+ className: "kage-badge-ribbon-wrapper",
122
+ style: style,
123
+ children: [children, /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
124
+ className: ribbonClassNames,
125
+ style: ribbonStyle,
126
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
127
+ className: "kage-badge-ribbon-text",
128
+ children: text
129
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
130
+ className: "kage-badge-ribbon-corner",
131
+ style: ribbonStyle
132
+ })]
133
+ })]
134
+ });
135
+ };
136
+
137
+ // 将 Ribbon 组件附加到 Badge 上
138
+ Badge.displayName = 'Badge';
139
+ var BadgeWithRibbon = Badge;
140
+ BadgeWithRibbon.Ribbon = BadgeRibbon;
141
+ var _default = exports.default = BadgeWithRibbon;