@rainbow-oh/yee-c 0.8.16 → 0.8.18

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 (61) hide show
  1. package/dist/cjs/Select/demo/loading.d.ts +3 -0
  2. package/dist/cjs/Select/demo/loading.js +61 -0
  3. package/dist/cjs/Select/interface.d.ts +6 -1
  4. package/dist/cjs/Select/select.js +3 -0
  5. package/dist/cjs/Selector/selector.js +10 -1
  6. package/dist/cjs/TableSelect/interface.d.ts +5 -0
  7. package/dist/cjs/TableSelect/table-select.js +3 -0
  8. package/dist/cjs/Tree/interface.d.ts +16 -0
  9. package/dist/cjs/Tree/tree-node.js +7 -2
  10. package/dist/cjs/Tree/tree.d.ts +2 -1
  11. package/dist/cjs/Tree/tree.js +6 -2
  12. package/dist/cjs/Tree/utils/tree-tools.d.ts +1 -0
  13. package/dist/cjs/Tree/utils/tree-tools.js +3 -1
  14. package/dist/cjs/TreeSelect/interface.d.ts +5 -0
  15. package/dist/cjs/TreeSelect/tree-select.js +4 -1
  16. package/dist/cjs/style/themes.css +1 -1
  17. package/dist/cjs/style/variables.css +1 -1
  18. package/dist/cjs/version.d.ts +1 -1
  19. package/dist/cjs/version.js +1 -1
  20. package/dist/esm/Select/demo/loading.d.ts +3 -0
  21. package/dist/esm/Select/demo/loading.js +32 -0
  22. package/dist/esm/Select/interface.d.ts +6 -1
  23. package/dist/esm/Select/select.js +3 -1
  24. package/dist/esm/Selector/selector.js +5 -1
  25. package/dist/esm/TableSelect/interface.d.ts +5 -0
  26. package/dist/esm/TableSelect/table-select.js +3 -1
  27. package/dist/esm/Tree/interface.d.ts +16 -0
  28. package/dist/esm/Tree/tree-node.js +12 -2
  29. package/dist/esm/Tree/tree.d.ts +2 -1
  30. package/dist/esm/Tree/tree.js +15 -13
  31. package/dist/esm/Tree/utils/tree-tools.d.ts +1 -0
  32. package/dist/esm/Tree/utils/tree-tools.js +4 -1
  33. package/dist/esm/TreeSelect/interface.d.ts +5 -0
  34. package/dist/esm/TreeSelect/tree-select.js +3 -1
  35. package/dist/esm/style/themes.css +1 -1
  36. package/dist/esm/style/variables.css +1 -1
  37. package/dist/esm/version.d.ts +1 -1
  38. package/dist/esm/version.js +1 -1
  39. package/dist/umd/yee-c.min.js +1 -1
  40. package/package.json +1 -1
  41. package/src/Select/demo/loading.tsx +28 -0
  42. package/src/Select/index.en-US.md +2 -0
  43. package/src/Select/index.zh-CN.md +2 -0
  44. package/src/Select/interface.ts +10 -3
  45. package/src/Select/select.tsx +2 -0
  46. package/src/Selector/selector.tsx +10 -1
  47. package/src/TableSelect/index.en-US.md +1 -0
  48. package/src/TableSelect/index.zh-CN.md +1 -0
  49. package/src/TableSelect/interface.ts +5 -0
  50. package/src/TableSelect/table-select.tsx +2 -0
  51. package/src/Tree/index.en-US.md +20 -2
  52. package/src/Tree/index.zh-CN.md +20 -2
  53. package/src/Tree/interface.ts +16 -1
  54. package/src/Tree/tree-node.tsx +15 -2
  55. package/src/Tree/tree.tsx +6 -2
  56. package/src/Tree/utils/tree-tools.ts +4 -1
  57. package/src/TreeSelect/index.en-US.md +1 -0
  58. package/src/TreeSelect/index.zh-CN.md +1 -0
  59. package/src/TreeSelect/interface.ts +5 -0
  60. package/src/TreeSelect/tree-select.tsx +2 -0
  61. package/src/version.ts +1 -1
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const _default: () => React.JSX.Element;
3
+ export default _default;
@@ -0,0 +1,61 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/Select/demo/loading.tsx
30
+ var loading_exports = {};
31
+ __export(loading_exports, {
32
+ default: () => loading_default
33
+ });
34
+ module.exports = __toCommonJS(loading_exports);
35
+ var import_yee_c = require("../..");
36
+ var import_react = __toESM(require("react"));
37
+ var options = [
38
+ { label: "Apple", value: "apple" },
39
+ { label: "Banana", value: "banana" },
40
+ { label: "Orange", value: "orange" }
41
+ ];
42
+ var loading_default = () => {
43
+ return /* @__PURE__ */ import_react.default.createElement(import_yee_c.Space, { direction: "vertical" }, /* @__PURE__ */ import_react.default.createElement(
44
+ import_yee_c.Select,
45
+ {
46
+ loading: true,
47
+ options,
48
+ style: { width: 200 },
49
+ placeholder: "Loading"
50
+ }
51
+ ), /* @__PURE__ */ import_react.default.createElement(
52
+ import_yee_c.Select,
53
+ {
54
+ loading: true,
55
+ disabled: true,
56
+ defaultValue: "apple",
57
+ options,
58
+ style: { width: 200 }
59
+ }
60
+ ));
61
+ };
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
- import type { TriggerProps } from '../Trigger';
3
2
  import type { SelectorProps } from '../Selector';
3
+ import type { TriggerProps } from '../Trigger';
4
4
  import type { DataAttributeProps } from '../utils/types';
5
5
  export type Option = {
6
6
  /**
@@ -58,6 +58,11 @@ export interface SelectProps extends DataAttributeProps, Pick<SelectorProps, 'si
58
58
  * Whether disabled
59
59
  */
60
60
  disabled?: boolean;
61
+ /**
62
+ * Whether data is loading
63
+ * @default false
64
+ */
65
+ loading?: boolean;
61
66
  /**
62
67
  * Placeholder text for the select box
63
68
  */
@@ -92,6 +92,7 @@ var Select = (baseprops) => {
92
92
  defaultValue,
93
93
  optionFilterProp = "label",
94
94
  disabled,
95
+ loading,
95
96
  onChange,
96
97
  onFilter,
97
98
  virtual,
@@ -111,6 +112,7 @@ var Select = (baseprops) => {
111
112
  "defaultValue",
112
113
  "optionFilterProp",
113
114
  "disabled",
115
+ "loading",
114
116
  "onChange",
115
117
  "onFilter",
116
118
  "virtual",
@@ -267,6 +269,7 @@ var Select = (baseprops) => {
267
269
  value: searchValue,
268
270
  options,
269
271
  disabled,
272
+ loading,
270
273
  selectedKeys: mergedValue,
271
274
  onOpenChange: handleOpenChange,
272
275
  onClear: handleClear,
@@ -265,7 +265,16 @@ var Selector = import_react.default.forwardRef(
265
265
  ));
266
266
  };
267
267
  const renderSuffix = () => {
268
- return /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-arrow` }, loading ? /* @__PURE__ */ import_react.default.createElement(import_Spin.default, { size: "small" }) : suffix ? typeof suffix === "function" ? suffix() : suffix : /* @__PURE__ */ import_react.default.createElement(import_lucide_react.ChevronDown, { size: 16, strokeWidth: 1.5 }));
268
+ return /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-arrow` }, loading ? /* @__PURE__ */ import_react.default.createElement(
269
+ import_Spin.default,
270
+ {
271
+ variant: "ring",
272
+ size: "small",
273
+ style: {
274
+ "--m-indicator-dot-bg-color": "var(--yee-text-color-secondary)"
275
+ }
276
+ }
277
+ ) : suffix ? typeof suffix === "function" ? suffix() : suffix : /* @__PURE__ */ import_react.default.createElement(import_lucide_react.ChevronDown, { size: 16, strokeWidth: 1.5 }));
269
278
  };
270
279
  const renderClear = () => {
271
280
  if (!allowClear || disabled) {
@@ -112,6 +112,11 @@ export interface TableSelectProps extends Omit<InternalTableProps, 'value' | 'on
112
112
  * Whether disabled
113
113
  */
114
114
  disabled?: boolean;
115
+ /**
116
+ * Whether data is loading
117
+ * @default false
118
+ */
119
+ loading?: boolean;
115
120
  /**
116
121
  * Input direction (for special scenarios)
117
122
  */
@@ -90,6 +90,7 @@ var TableSelect = (baseprops) => {
90
90
  defaultValue,
91
91
  placement = "bottomLeft",
92
92
  disabled,
93
+ loading,
93
94
  rowSelection,
94
95
  dataSource,
95
96
  rowKey = "id",
@@ -108,6 +109,7 @@ var TableSelect = (baseprops) => {
108
109
  "defaultValue",
109
110
  "placement",
110
111
  "disabled",
112
+ "loading",
111
113
  "rowSelection",
112
114
  "dataSource",
113
115
  "rowKey",
@@ -205,6 +207,7 @@ var TableSelect = (baseprops) => {
205
207
  options: selectorOptions,
206
208
  open,
207
209
  disabled,
210
+ loading,
208
211
  value: searchValue,
209
212
  selectedKeys: mergedValue,
210
213
  onSearch: handleSearch,
@@ -61,6 +61,13 @@ export type TreeNode<T> = {
61
61
  * All descendant uids (collected bottom-up). Used for check/uncheck propagation.
62
62
  */
63
63
  childUids?: Array<string>;
64
+ /**
65
+ * Extra content rendered after the label (e.g. tags, badges, action buttons).
66
+ * Only takes effect when `labelRender` is NOT provided at the Tree level.
67
+ * When `labelRender` is present, access this value via `node.extra` in your
68
+ * custom render function.
69
+ */
70
+ extra?: React.ReactNode | ((node: T) => React.ReactNode);
64
71
  /**
65
72
  * Original data
66
73
  */
@@ -157,6 +164,14 @@ export interface TreeProps<T> extends DataAttributeProps {
157
164
  * @default false
158
165
  */
159
166
  multiple?: boolean;
167
+ /**
168
+ * Custom render function for node label.
169
+ * When provided, takes full control of the label area rendering.
170
+ * The node's `extra` will NOT be appended automatically in this case;
171
+ * access it via `node.extra` if you need it in your custom render.
172
+ * The original `label` string is still used for `title` attribute fallback.
173
+ */
174
+ labelRender?: (node: TreeNode<T>) => React.ReactNode;
160
175
  /**
161
176
  * Customize node key, title, children field names
162
177
  */
@@ -164,6 +179,7 @@ export interface TreeProps<T> extends DataAttributeProps {
164
179
  key?: keyof T;
165
180
  label?: keyof T;
166
181
  children?: keyof T;
182
+ extra?: keyof T;
167
183
  };
168
184
  /**
169
185
  * Asynchronous data loading
@@ -64,6 +64,7 @@ var Node = (props) => {
64
64
  disabled,
65
65
  depth,
66
66
  icon,
67
+ extra,
67
68
  original,
68
69
  lines
69
70
  } = node;
@@ -78,6 +79,7 @@ var Node = (props) => {
78
79
  indeterminateUids,
79
80
  expandedUids,
80
81
  switcherIcon,
82
+ labelRender,
81
83
  draggable,
82
84
  draggingUid,
83
85
  dropState,
@@ -132,6 +134,8 @@ var Node = (props) => {
132
134
  const _title = title || (typeof label === "string" ? label : void 0);
133
135
  const mergedIcon = icon || contextIcon;
134
136
  const _icon = typeof mergedIcon === "function" ? mergedIcon(original) : mergedIcon;
137
+ const content = labelRender ? labelRender(node) : label;
138
+ const _extra = !labelRender && extra ? typeof extra === "function" ? extra(original) : extra : null;
135
139
  return /* @__PURE__ */ import_react.default.createElement(
136
140
  import_Button.default,
137
141
  {
@@ -144,7 +148,8 @@ var Node = (props) => {
144
148
  icon: showIcon ? _icon : void 0,
145
149
  onClick: disabled ? void 0 : () => onSelect(uid)
146
150
  },
147
- label
151
+ content,
152
+ _extra && /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-node-extra` }, _extra)
148
153
  );
149
154
  };
150
155
  const renderEmptyNodes = (depth2) => {
@@ -166,7 +171,7 @@ var Node = (props) => {
166
171
  {
167
172
  "aria-hidden": "true",
168
173
  className: `${prefixCls}-node-indent`,
169
- key: index
174
+ key: `node-empty-${index}`
170
175
  }
171
176
  ));
172
177
  };
@@ -1,5 +1,5 @@
1
1
  import React, { ChangeEvent } from 'react';
2
- import type { DragPosition, TreeProps } from './interface';
2
+ import type { DragPosition, TreeNode, TreeProps } from './interface';
3
3
  import './style/index.less';
4
4
  type DropState = {
5
5
  uid: string;
@@ -12,6 +12,7 @@ export declare const TreeContext: React.Context<{
12
12
  icon?: React.ReactNode | ((props: any) => React.ReactNode);
13
13
  showLine?: boolean | undefined;
14
14
  switcherIcon?: [React.ReactNode, React.ReactNode] | undefined;
15
+ labelRender?: ((node: TreeNode<any>) => React.ReactNode) | undefined;
15
16
  selectedUids: Set<string>;
16
17
  checkedUids: Set<string>;
17
18
  indeterminateUids: Set<string>;
@@ -184,6 +184,7 @@ var Tree = (baseprops) => {
184
184
  onSelect,
185
185
  onCheck,
186
186
  onExpand,
187
+ labelRender,
187
188
  virtual = false,
188
189
  height,
189
190
  itemHeight = 28
@@ -212,6 +213,7 @@ var Tree = (baseprops) => {
212
213
  "onSelect",
213
214
  "onCheck",
214
215
  "onExpand",
216
+ "labelRender",
215
217
  "virtual",
216
218
  "height",
217
219
  "itemHeight"
@@ -498,6 +500,7 @@ var Tree = (baseprops) => {
498
500
  icon,
499
501
  showLine,
500
502
  switcherIcon,
503
+ labelRender,
501
504
  selectedUids: selectedUidSet,
502
505
  checkedUids: checkedUidSet,
503
506
  indeterminateUids: indeterminateUidSet,
@@ -520,6 +523,7 @@ var Tree = (baseprops) => {
520
523
  icon,
521
524
  showLine,
522
525
  switcherIcon,
526
+ labelRender,
523
527
  selectedUidSet,
524
528
  checkedUidSet,
525
529
  indeterminateUidSet,
@@ -609,14 +613,14 @@ var Tree = (baseprops) => {
609
613
  role: "tree",
610
614
  onDragEnd: handleDragEnd
611
615
  }, dataAttrs),
612
- /* @__PURE__ */ import_react2.default.createElement(TreeContext.Provider, { value: contextValue }, /* @__PURE__ */ import_react2.default.createElement(import_react.AnimatePresence, { initial: false }, segments.map((segment) => {
616
+ /* @__PURE__ */ import_react2.default.createElement(TreeContext.Provider, { value: contextValue }, /* @__PURE__ */ import_react2.default.createElement(import_react.AnimatePresence, { initial: false }, segments.map((segment, index) => {
613
617
  if (segment.type === "node") {
614
618
  return /* @__PURE__ */ import_react2.default.createElement(import_tree_node.default, { node: segment.node, key: segment.node.uid });
615
619
  }
616
620
  return /* @__PURE__ */ import_react2.default.createElement(
617
621
  import_react.motion.div,
618
622
  {
619
- key: segment.pUid + "children",
623
+ key: segment.pUid + index + "children",
620
624
  initial: { height: 0, opacity: 0 },
621
625
  animate: { height: "auto", opacity: 1 },
622
626
  exit: { height: 0, opacity: 0 },
@@ -49,6 +49,7 @@ export declare function tree2array<T extends Record<string, unknown>>(tree: T |
49
49
  key: keyof T;
50
50
  label: keyof T;
51
51
  children: keyof T;
52
+ extra?: keyof T;
52
53
  }): [TreeNode<T>[], Map<string, TreeNode<T>>];
53
54
  /**
54
55
  * Check whether array `a` contains every element in `b`.
@@ -135,7 +135,7 @@ function tree2array(tree, fieldNames) {
135
135
  const data = Array.isArray(tree) ? tree : [tree];
136
136
  const res = [];
137
137
  const map = /* @__PURE__ */ new Map();
138
- const { key, label, children } = fieldNames;
138
+ const { key, label, children, extra } = fieldNames;
139
139
  function walk({
140
140
  data: node,
141
141
  pUid,
@@ -147,6 +147,7 @@ function tree2array(tree, fieldNames) {
147
147
  const rawKey = node[key];
148
148
  const _label = node[label];
149
149
  const _children = node[children];
150
+ const _extra = extra ? node[extra] : node.extra;
150
151
  const nextPath = [...path, rawKey];
151
152
  const uid = pUid ? `${pUid}\0${String(rawKey)}` : String(rawKey);
152
153
  const isParent = Array.isArray(_children) && _children.length > 0;
@@ -155,6 +156,7 @@ function tree2array(tree, fieldNames) {
155
156
  key: rawKey,
156
157
  label: _label,
157
158
  title: node.title,
159
+ extra: _extra,
158
160
  path,
159
161
  pUid,
160
162
  depth,
@@ -34,6 +34,11 @@ export interface TreeSelectProps<T = any> extends Omit<TreeProps<T>, 'onSelect'
34
34
  * Whether disabled
35
35
  */
36
36
  disabled?: boolean;
37
+ /**
38
+ * Whether data is loading
39
+ * @default false
40
+ */
41
+ loading?: boolean;
37
42
  /**
38
43
  * Placeholder text for the select box
39
44
  */
@@ -89,7 +89,8 @@ var TreeSelect = (baseprops) => {
89
89
  defaultValue,
90
90
  checkable = false,
91
91
  multiple = false,
92
- optionLabelProp: optionLabelProp = "label",
92
+ loading: loading,
93
+ optionLabelProp = "label",
93
94
  onChange,
94
95
  onFilter
95
96
  } = _a, rest = __objRest(_a, [
@@ -103,6 +104,7 @@ var TreeSelect = (baseprops) => {
103
104
  "checkable",
104
105
  "multiple",
105
106
  // eslint-disable-line @typescript-eslint/no-unused-vars
107
+ "loading",
106
108
  "optionLabelProp",
107
109
  "onChange",
108
110
  "onFilter"
@@ -267,6 +269,7 @@ var TreeSelect = (baseprops) => {
267
269
  mode,
268
270
  value: searchValue,
269
271
  options: selectedOptions,
272
+ loading,
270
273
  selectedKeys: mergedValue,
271
274
  onOpenChange: handleOpenChange,
272
275
  onClear: handleClear,
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * @rainbow-oh/yee-c CSS Variables
3
3
  * Auto-generated, do not edit manually
4
- * Generated on 2026-08-03T08:40:43.552Z
4
+ * Generated on 2026-08-11T09:02:55.587Z
5
5
  */
6
6
 
7
7
  /* ========== color.blue.css ========== */
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * @rainbow-oh/yee-c CSS Variables
3
3
  * Auto-generated, do not edit manually
4
- * Generated on 2026-08-03T08:40:43.552Z
4
+ * Generated on 2026-08-11T09:02:55.587Z
5
5
  */
6
6
 
7
7
  /* ========== color.css ========== */
@@ -3,4 +3,4 @@ declare global {
3
3
  __yee_c_version__: string;
4
4
  }
5
5
  }
6
- export declare const version = "0.8.16";
6
+ export declare const version = "0.8.18";
@@ -22,7 +22,7 @@ __export(version_exports, {
22
22
  version: () => version
23
23
  });
24
24
  module.exports = __toCommonJS(version_exports);
25
- var version = "0.8.16";
25
+ var version = "0.8.18";
26
26
  if (typeof window !== "undefined") {
27
27
  window.__yee_c_version__ = version;
28
28
  }
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const _default: () => React.JSX.Element;
3
+ export default _default;
@@ -0,0 +1,32 @@
1
+ import { Select, Space } from "../..";
2
+ import React from 'react';
3
+ var options = [{
4
+ label: 'Apple',
5
+ value: 'apple'
6
+ }, {
7
+ label: 'Banana',
8
+ value: 'banana'
9
+ }, {
10
+ label: 'Orange',
11
+ value: 'orange'
12
+ }];
13
+ export default (function () {
14
+ return /*#__PURE__*/React.createElement(Space, {
15
+ direction: "vertical"
16
+ }, /*#__PURE__*/React.createElement(Select, {
17
+ loading: true,
18
+ options: options,
19
+ style: {
20
+ width: 200
21
+ },
22
+ placeholder: "Loading"
23
+ }), /*#__PURE__*/React.createElement(Select, {
24
+ loading: true,
25
+ disabled: true,
26
+ defaultValue: "apple",
27
+ options: options,
28
+ style: {
29
+ width: 200
30
+ }
31
+ }));
32
+ });
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
- import type { TriggerProps } from '../Trigger';
3
2
  import type { SelectorProps } from '../Selector';
3
+ import type { TriggerProps } from '../Trigger';
4
4
  import type { DataAttributeProps } from '../utils/types';
5
5
  export type Option = {
6
6
  /**
@@ -58,6 +58,11 @@ export interface SelectProps extends DataAttributeProps, Pick<SelectorProps, 'si
58
58
  * Whether disabled
59
59
  */
60
60
  disabled?: boolean;
61
+ /**
62
+ * Whether data is loading
63
+ * @default false
64
+ */
65
+ loading?: boolean;
61
66
  /**
62
67
  * Placeholder text for the select box
63
68
  */
@@ -1,4 +1,4 @@
1
- var _excluded = ["prefixCls", "options", "placement", "mode", "value", "defaultValue", "optionFilterProp", "disabled", "onChange", "onFilter", "virtual", "itemHeight", "listHeight", "columns", "popupWidth", "looseMatch", "orphanClassName", "orphanStyle"];
1
+ var _excluded = ["prefixCls", "options", "placement", "mode", "value", "defaultValue", "optionFilterProp", "disabled", "loading", "onChange", "onFilter", "virtual", "itemHeight", "listHeight", "columns", "popupWidth", "looseMatch", "orphanClassName", "orphanStyle"];
2
2
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
3
3
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
4
4
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -56,6 +56,7 @@ var Select = function Select(baseprops) {
56
56
  _props$optionFilterPr = props.optionFilterProp,
57
57
  optionFilterProp = _props$optionFilterPr === void 0 ? 'label' : _props$optionFilterPr,
58
58
  disabled = props.disabled,
59
+ loading = props.loading,
59
60
  onChange = props.onChange,
60
61
  onFilter = props.onFilter,
61
62
  virtual = props.virtual,
@@ -232,6 +233,7 @@ var Select = function Select(baseprops) {
232
233
  value: searchValue,
233
234
  options: options,
234
235
  disabled: disabled,
236
+ loading: loading,
235
237
  selectedKeys: mergedValue,
236
238
  onOpenChange: handleOpenChange,
237
239
  onClear: handleClear,
@@ -177,7 +177,11 @@ var Selector = /*#__PURE__*/React.forwardRef(function (props, ref) {
177
177
  return /*#__PURE__*/React.createElement("span", {
178
178
  className: "".concat(prefixCls, "-arrow")
179
179
  }, loading ? /*#__PURE__*/React.createElement(Spin, {
180
- size: "small"
180
+ variant: "ring",
181
+ size: "small",
182
+ style: {
183
+ '--m-indicator-dot-bg-color': 'var(--yee-text-color-secondary)'
184
+ }
181
185
  }) : suffix ? typeof suffix === 'function' ? suffix() : suffix : /*#__PURE__*/React.createElement(ChevronDown, {
182
186
  size: 16,
183
187
  strokeWidth: 1.5
@@ -112,6 +112,11 @@ export interface TableSelectProps extends Omit<InternalTableProps, 'value' | 'on
112
112
  * Whether disabled
113
113
  */
114
114
  disabled?: boolean;
115
+ /**
116
+ * Whether data is loading
117
+ * @default false
118
+ */
119
+ loading?: boolean;
115
120
  /**
116
121
  * Input direction (for special scenarios)
117
122
  */
@@ -1,5 +1,5 @@
1
1
  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); }
2
- var _excluded = ["prefixCls", "value", "defaultValue", "placement", "disabled", "rowSelection", "dataSource", "rowKey", "optionLabelProp", "allowClear", "closable", "searchable", "searchOnInput", "placeholder", "onChange", "onSearch", "onOpenChange"];
2
+ var _excluded = ["prefixCls", "value", "defaultValue", "placement", "disabled", "loading", "rowSelection", "dataSource", "rowKey", "optionLabelProp", "allowClear", "closable", "searchable", "searchOnInput", "placeholder", "onChange", "onSearch", "onOpenChange"];
3
3
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
4
4
  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; }
5
5
  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; }
@@ -51,6 +51,7 @@ var TableSelect = function TableSelect(baseprops) {
51
51
  _props$placement = props.placement,
52
52
  placement = _props$placement === void 0 ? 'bottomLeft' : _props$placement,
53
53
  disabled = props.disabled,
54
+ loading = props.loading,
54
55
  rowSelection = props.rowSelection,
55
56
  dataSource = props.dataSource,
56
57
  _props$rowKey = props.rowKey,
@@ -152,6 +153,7 @@ var TableSelect = function TableSelect(baseprops) {
152
153
  options: selectorOptions,
153
154
  open: open,
154
155
  disabled: disabled,
156
+ loading: loading,
155
157
  value: searchValue,
156
158
  selectedKeys: mergedValue,
157
159
  onSearch: handleSearch,
@@ -61,6 +61,13 @@ export type TreeNode<T> = {
61
61
  * All descendant uids (collected bottom-up). Used for check/uncheck propagation.
62
62
  */
63
63
  childUids?: Array<string>;
64
+ /**
65
+ * Extra content rendered after the label (e.g. tags, badges, action buttons).
66
+ * Only takes effect when `labelRender` is NOT provided at the Tree level.
67
+ * When `labelRender` is present, access this value via `node.extra` in your
68
+ * custom render function.
69
+ */
70
+ extra?: React.ReactNode | ((node: T) => React.ReactNode);
64
71
  /**
65
72
  * Original data
66
73
  */
@@ -157,6 +164,14 @@ export interface TreeProps<T> extends DataAttributeProps {
157
164
  * @default false
158
165
  */
159
166
  multiple?: boolean;
167
+ /**
168
+ * Custom render function for node label.
169
+ * When provided, takes full control of the label area rendering.
170
+ * The node's `extra` will NOT be appended automatically in this case;
171
+ * access it via `node.extra` if you need it in your custom render.
172
+ * The original `label` string is still used for `title` attribute fallback.
173
+ */
174
+ labelRender?: (node: TreeNode<T>) => React.ReactNode;
160
175
  /**
161
176
  * Customize node key, title, children field names
162
177
  */
@@ -164,6 +179,7 @@ export interface TreeProps<T> extends DataAttributeProps {
164
179
  key?: keyof T;
165
180
  label?: keyof T;
166
181
  children?: keyof T;
182
+ extra?: keyof T;
167
183
  };
168
184
  /**
169
185
  * Asynchronous data loading
@@ -21,6 +21,7 @@ var Node = function Node(props) {
21
21
  disabled = node.disabled,
22
22
  depth = node.depth,
23
23
  icon = node.icon,
24
+ extra = node.extra,
24
25
  original = node.original,
25
26
  lines = node.lines;
26
27
  var _useContext = useContext(TreeContext),
@@ -34,6 +35,7 @@ var Node = function Node(props) {
34
35
  indeterminateUids = _useContext.indeterminateUids,
35
36
  expandedUids = _useContext.expandedUids,
36
37
  switcherIcon = _useContext.switcherIcon,
38
+ labelRender = _useContext.labelRender,
37
39
  draggable = _useContext.draggable,
38
40
  draggingUid = _useContext.draggingUid,
39
41
  dropState = _useContext.dropState,
@@ -86,6 +88,12 @@ var Node = function Node(props) {
86
88
  var _title = title || (typeof label === 'string' ? label : undefined);
87
89
  var mergedIcon = icon || contextIcon;
88
90
  var _icon = typeof mergedIcon === 'function' ? mergedIcon(original) : mergedIcon;
91
+
92
+ // labelRender takes full control of the label content when provided
93
+ var content = labelRender ? labelRender(node) : label;
94
+
95
+ // extra: appended after the label content (only when labelRender is NOT used)
96
+ var _extra = !labelRender && extra ? typeof extra === 'function' ? extra(original) : extra : null;
89
97
  return /*#__PURE__*/React.createElement(Button, {
90
98
  className: clsx("".concat(prefixCls, "-node-label"), _defineProperty({}, "".concat(prefixCls, "-node-label-selected"), selected)),
91
99
  size: "small",
@@ -95,7 +103,9 @@ var Node = function Node(props) {
95
103
  onClick: disabled ? undefined : function () {
96
104
  return onSelect(uid);
97
105
  }
98
- }, label);
106
+ }, content, _extra && /*#__PURE__*/React.createElement("span", {
107
+ className: "".concat(prefixCls, "-node-extra")
108
+ }, _extra));
99
109
  };
100
110
  var renderEmptyNodes = function renderEmptyNodes(depth) {
101
111
  var temp = new Array(depth).fill(0);
@@ -111,7 +121,7 @@ var Node = function Node(props) {
111
121
  return /*#__PURE__*/React.createElement("span", {
112
122
  "aria-hidden": "true",
113
123
  className: "".concat(prefixCls, "-node-indent"),
114
- key: index
124
+ key: "node-empty-".concat(index)
115
125
  });
116
126
  });
117
127
  };
@@ -1,5 +1,5 @@
1
1
  import React, { ChangeEvent } from 'react';
2
- import type { DragPosition, TreeProps } from './interface';
2
+ import type { DragPosition, TreeNode, TreeProps } from './interface';
3
3
  import './style/index.less';
4
4
  type DropState = {
5
5
  uid: string;
@@ -12,6 +12,7 @@ export declare const TreeContext: React.Context<{
12
12
  icon?: React.ReactNode | ((props: any) => React.ReactNode);
13
13
  showLine?: boolean | undefined;
14
14
  switcherIcon?: [React.ReactNode, React.ReactNode] | undefined;
15
+ labelRender?: ((node: TreeNode<any>) => React.ReactNode) | undefined;
15
16
  selectedUids: Set<string>;
16
17
  checkedUids: Set<string>;
17
18
  indeterminateUids: Set<string>;