@rainbow-oh/yee-c 0.6.1 → 0.6.3

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 (72) hide show
  1. package/dist/cjs/Form/demo/layout.js +4 -14
  2. package/dist/cjs/Form/style/index.less +32 -8
  3. package/dist/cjs/Grid/item.js +2 -1
  4. package/dist/cjs/Select/demo/orphan.d.ts +3 -0
  5. package/dist/cjs/Select/demo/orphan.js +78 -0
  6. package/dist/cjs/Select/interface.d.ts +11 -0
  7. package/dist/cjs/Select/select.js +18 -5
  8. package/dist/cjs/Selector/interface.d.ts +11 -0
  9. package/dist/cjs/Selector/selector.js +51 -16
  10. package/dist/cjs/Table/tbody/index.js +2 -2
  11. package/dist/cjs/Tabs/demo/type.js +23 -1
  12. package/dist/cjs/Tabs/hooks/useActiveBar.d.ts +2 -1
  13. package/dist/cjs/Tabs/hooks/useActiveBar.js +7 -3
  14. package/dist/cjs/Tabs/style/index.less +24 -14
  15. package/dist/cjs/Tabs/tab-header/index.js +2 -1
  16. package/dist/cjs/Tabs/tab-header/tab-header-title.js +1 -0
  17. package/dist/cjs/Tag/style/index.less +9 -9
  18. package/dist/cjs/style/color.css +1 -0
  19. package/dist/cjs/style/mobile.css +5 -0
  20. package/dist/cjs/style/size.css +6 -3
  21. package/dist/cjs/style/themes.css +1 -1
  22. package/dist/cjs/style/variables.css +8 -4
  23. package/dist/cjs/version.d.ts +1 -1
  24. package/dist/cjs/version.js +1 -1
  25. package/dist/esm/Form/demo/layout.js +10 -10
  26. package/dist/esm/Form/style/index.less +32 -8
  27. package/dist/esm/Grid/item.js +2 -1
  28. package/dist/esm/Select/demo/orphan.d.ts +3 -0
  29. package/dist/esm/Select/demo/orphan.js +77 -0
  30. package/dist/esm/Select/interface.d.ts +11 -0
  31. package/dist/esm/Select/select.js +22 -6
  32. package/dist/esm/Selector/interface.d.ts +11 -0
  33. package/dist/esm/Selector/selector.js +34 -10
  34. package/dist/esm/Table/tbody/index.js +3 -2
  35. package/dist/esm/Tabs/demo/type.js +15 -4
  36. package/dist/esm/Tabs/hooks/useActiveBar.d.ts +2 -1
  37. package/dist/esm/Tabs/hooks/useActiveBar.js +7 -3
  38. package/dist/esm/Tabs/style/index.less +24 -14
  39. package/dist/esm/Tabs/tab-header/index.js +2 -1
  40. package/dist/esm/Tabs/tab-header/tab-header-title.js +1 -0
  41. package/dist/esm/Tag/style/index.less +9 -9
  42. package/dist/esm/style/color.css +1 -0
  43. package/dist/esm/style/mobile.css +5 -0
  44. package/dist/esm/style/size.css +6 -3
  45. package/dist/esm/style/themes.css +1 -1
  46. package/dist/esm/style/variables.css +8 -4
  47. package/dist/esm/version.d.ts +1 -1
  48. package/dist/esm/version.js +1 -1
  49. package/dist/umd/yee-c.min.css +2 -2
  50. package/dist/umd/yee-c.min.js +1 -1
  51. package/package.json +1 -1
  52. package/src/Form/demo/layout.tsx +7 -12
  53. package/src/Form/style/index.less +32 -8
  54. package/src/Grid/item.tsx +2 -1
  55. package/src/Select/demo/orphan.tsx +61 -0
  56. package/src/Select/index.en-US.md +3 -0
  57. package/src/Select/index.zh-CN.md +3 -0
  58. package/src/Select/interface.ts +11 -0
  59. package/src/Select/select.tsx +19 -3
  60. package/src/Selector/interface.ts +11 -0
  61. package/src/Selector/selector.tsx +56 -25
  62. package/src/Table/tbody/index.tsx +5 -3
  63. package/src/Tabs/demo/type.tsx +21 -2
  64. package/src/Tabs/hooks/useActiveBar.ts +8 -4
  65. package/src/Tabs/style/index.less +24 -14
  66. package/src/Tabs/tab-header/index.tsx +2 -1
  67. package/src/Tabs/tab-header/tab-header-title.tsx +1 -0
  68. package/src/Tag/style/index.less +9 -9
  69. package/src/style/color.css +1 -0
  70. package/src/style/mobile.css +5 -0
  71. package/src/style/size.css +6 -3
  72. package/src/version.ts +1 -1
@@ -36,26 +36,16 @@ var import_yee_c = require("../..");
36
36
  var import_react = __toESM(require("react"));
37
37
  var layout_default = () => {
38
38
  const [form] = import_yee_c.Form.useForm();
39
+ const [layout, setLayout] = (0, import_react.useState)("vertical");
39
40
  return /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement(
40
41
  import_yee_c.Radio.Group,
41
42
  {
42
- defaultValue: "vertical",
43
- onChange: (value) => {
44
- form.setFieldsValue({ layout: value });
45
- },
43
+ value: layout,
44
+ onChange: (value) => setLayout(value),
46
45
  options: [
47
46
  { value: "vertical", label: "Vertical" },
48
47
  { value: "horizontal", label: "Horizontal" }
49
48
  ]
50
49
  }
51
- ), /* @__PURE__ */ import_react.default.createElement("br", null), /* @__PURE__ */ import_react.default.createElement("br", null), /* @__PURE__ */ import_react.default.createElement(
52
- import_yee_c.Form,
53
- {
54
- form,
55
- initialValues: { layout: "vertical" },
56
- layout: "vertical"
57
- },
58
- /* @__PURE__ */ import_react.default.createElement(import_yee_c.Grid, { cols: 1 }, /* @__PURE__ */ import_react.default.createElement(import_yee_c.Form.Field, { name: "name", label: "Name", required: true }, /* @__PURE__ */ import_react.default.createElement(import_yee_c.Input, { placeholder: "Please input your name" })), /* @__PURE__ */ import_react.default.createElement(import_yee_c.Form.Field, { name: "email", label: "Email", required: true }, /* @__PURE__ */ import_react.default.createElement(import_yee_c.Input, { placeholder: "Please input your email" })), /* @__PURE__ */ import_react.default.createElement(import_yee_c.Form.Field, { name: "phone", label: "Phone" }, /* @__PURE__ */ import_react.default.createElement(import_yee_c.Input, { placeholder: "Please input your phone" }))),
59
- /* @__PURE__ */ import_react.default.createElement(import_yee_c.Space, { style: { marginTop: 16 } }, /* @__PURE__ */ import_react.default.createElement(import_yee_c.Button, { type: "primary", htmlType: "submit" }, "Submit"))
60
- ));
50
+ ), /* @__PURE__ */ import_react.default.createElement("br", null), /* @__PURE__ */ import_react.default.createElement("br", null), /* @__PURE__ */ import_react.default.createElement(import_yee_c.Form, { form, initialValues: {}, layout }, /* @__PURE__ */ import_react.default.createElement(import_yee_c.Grid, { cols: 2 }, /* @__PURE__ */ import_react.default.createElement(import_yee_c.Form.Field, { name: "name", label: "Name", required: true }, /* @__PURE__ */ import_react.default.createElement(import_yee_c.Input, { placeholder: "Please input your name" })), /* @__PURE__ */ import_react.default.createElement(import_yee_c.Form.Field, { name: "email", label: "Email", required: true }, /* @__PURE__ */ import_react.default.createElement(import_yee_c.Input, { placeholder: "Please input your email" })), /* @__PURE__ */ import_react.default.createElement(import_yee_c.Form.Field, { name: "phone", label: "Phone" }, /* @__PURE__ */ import_react.default.createElement(import_yee_c.Input, { placeholder: "Please input your phone" }))), /* @__PURE__ */ import_react.default.createElement(import_yee_c.Space, { style: { marginTop: 16 } }, /* @__PURE__ */ import_react.default.createElement(import_yee_c.Button, { type: "primary", htmlType: "submit" }, "Submit"))));
61
51
  };
@@ -1,16 +1,40 @@
1
1
  @pls: .yee-form;
2
2
 
3
+ // Horizontal form-item layout: label pinned left at a fixed width (right-
4
+ // aligned), control fills the remaining space. Shared by Form-level layout
5
+ // (ancestor .yee-form-horizontal cascades onto every item, including
6
+ // Field.Group) and Field-level layout (the item carries .yee-form-item-
7
+ // horizontal itself). Uses descendant selectors (not &) so the mixin expands
8
+ // correctly under either anchor.
9
+ .horizontal-layout() {
10
+ @{pls}-item-row {
11
+ display: flex;
12
+ align-items: flex-start;
13
+ gap: var(--yee-form-item-horizontal-label-gap, 12px);
14
+ }
15
+
16
+ @{pls}-item-label {
17
+ width: var(--yee-form-item-horizontal-label-width, 120px);
18
+ flex-shrink: 0;
19
+ margin-bottom: 0;
20
+ justify-content: flex-end;
21
+ }
22
+
23
+ @{pls}-item-control {
24
+ flex: 1;
25
+ min-width: 0;
26
+ }
27
+ }
28
+
3
29
  @{pls} {
30
+ // Form-level horizontal: cascades onto every descendant item.
4
31
  &-horizontal {
5
- @{pls}-item {
6
- &-row {
7
- display: flex;
8
- }
32
+ .horizontal-layout();
33
+ }
9
34
 
10
- &-label {
11
- margin-bottom: 0;
12
- }
13
- }
35
+ // Field-level horizontal: a single item opts in via layout="horizontal".
36
+ &-item-horizontal {
37
+ .horizontal-layout();
14
38
  }
15
39
 
16
40
  &-item {
@@ -60,6 +60,7 @@ __export(item_exports, {
60
60
  module.exports = __toCommonJS(item_exports);
61
61
  var import_clsx = __toESM(require("clsx"));
62
62
  var import_react = __toESM(require("react"));
63
+ var import_omit = __toESM(require("../utils/omit"));
63
64
  var Item = (props) => {
64
65
  const _a = props, {
65
66
  prefixCls = "yee-grid",
@@ -79,7 +80,7 @@ var Item = (props) => {
79
80
  __spreadValues({
80
81
  className: (0, import_clsx.default)(`${prefixCls}-item`, className),
81
82
  style: __spreadValues(__spreadValues({}, spanStyle), style)
82
- }, rest),
83
+ }, (0, import_omit.default)(rest, ["colspan"])),
83
84
  children
84
85
  );
85
86
  };
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const _default: () => React.JSX.Element;
3
+ export default _default;
@@ -0,0 +1,78 @@
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/orphan.tsx
30
+ var orphan_exports = {};
31
+ __export(orphan_exports, {
32
+ default: () => orphan_default
33
+ });
34
+ module.exports = __toCommonJS(orphan_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
+ { label: "Pineapple", value: "pineapple" }
42
+ ];
43
+ var orphanStyle = {
44
+ color: "#fa8c16",
45
+ fontStyle: "italic",
46
+ textDecoration: "underline dotted"
47
+ };
48
+ var orphan_default = () => {
49
+ const [single, setSingle] = (0, import_react.useState)("mangox");
50
+ const [multi, setMulti] = (0, import_react.useState)(["apple", "durian", "banana"]);
51
+ return /* @__PURE__ */ import_react.default.createElement(import_yee_c.Space, { direction: "vertical", style: { width: "100%" } }, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("div", { style: { marginBottom: 8 } }, "Single — orphan value styled via ", /* @__PURE__ */ import_react.default.createElement("code", null, "orphanStyle")), /* @__PURE__ */ import_react.default.createElement(
52
+ import_yee_c.Select,
53
+ {
54
+ value: single,
55
+ onChange: (val) => setSingle(val),
56
+ options,
57
+ orphanStyle,
58
+ style: { width: 300 },
59
+ placeholder: "Please select"
60
+ }
61
+ )), /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("div", { style: { marginBottom: 8 } }, "Multiple — orphan tag styled via ", /* @__PURE__ */ import_react.default.createElement("code", null, "orphanClassName")), /* @__PURE__ */ import_react.default.createElement(
62
+ import_yee_c.Select,
63
+ {
64
+ mode: "multiple",
65
+ value: multi,
66
+ onChange: (val) => setMulti(val),
67
+ options,
68
+ orphanClassName: "demo-orphan-tag",
69
+ style: { width: 300 },
70
+ placeholder: "Please select"
71
+ }
72
+ )), /* @__PURE__ */ import_react.default.createElement("style", null, `
73
+ .demo-orphan-tag {
74
+ color: #fa541c;
75
+ font-style: italic;
76
+ }
77
+ `));
78
+ };
@@ -87,6 +87,17 @@ export interface SelectProps extends DataAttributeProps, Pick<SelectorProps, 'si
87
87
  * Property to backfill into the select box
88
88
  */
89
89
  optionLabelProp?: 'string' | (() => string);
90
+ /**
91
+ * Extra class name applied to the displayed value when it is not found
92
+ * in `options` (an "orphan" value). An orphan value is shown as the raw
93
+ * value itself; this lets you style it differently (e.g. to flag stale data).
94
+ */
95
+ orphanClassName?: string;
96
+ /**
97
+ * Extra inline style applied to the displayed value when it is not found
98
+ * in `options` (an "orphan" value).
99
+ */
100
+ orphanStyle?: React.CSSProperties;
90
101
  /**
91
102
  * Callback when value changes
92
103
  */
@@ -86,7 +86,9 @@ var Select = (baseprops) => {
86
86
  onFilter,
87
87
  virtual,
88
88
  itemHeight,
89
- listHeight
89
+ listHeight,
90
+ orphanClassName,
91
+ orphanStyle
90
92
  } = _a, rest = __objRest(_a, [
91
93
  "prefixCls",
92
94
  "options",
@@ -100,7 +102,9 @@ var Select = (baseprops) => {
100
102
  "onFilter",
101
103
  "virtual",
102
104
  "itemHeight",
103
- "listHeight"
105
+ "listHeight",
106
+ "orphanClassName",
107
+ "orphanStyle"
104
108
  ]);
105
109
  const single = mode !== "multiple" && mode !== "tags" ? true : false;
106
110
  const handleState = (value2) => {
@@ -126,6 +130,7 @@ var Select = (baseprops) => {
126
130
  (_a2 = virtualApiRef.current) == null ? void 0 : _a2.scrollToIndex(index);
127
131
  }, []);
128
132
  const getOptions = (keys) => {
133
+ var _a2;
129
134
  if (keys === "" || keys === null) {
130
135
  return void 0;
131
136
  }
@@ -133,9 +138,15 @@ var Select = (baseprops) => {
133
138
  if (keys.length === 0) {
134
139
  return [];
135
140
  }
136
- return options.filter((opt) => keys.includes(opt.value));
141
+ return keys.map((key) => {
142
+ const opt = options.find((o) => o.value === key);
143
+ return opt != null ? opt : { value: key, label: String(key) };
144
+ });
137
145
  }
138
- return options.find((opt) => opt.value === keys);
146
+ return (_a2 = options.find((opt) => opt.value === keys)) != null ? _a2 : {
147
+ value: keys,
148
+ label: String(keys)
149
+ };
139
150
  };
140
151
  const handleSelect = (key, e) => {
141
152
  let keys;
@@ -236,7 +247,9 @@ var Select = (baseprops) => {
236
247
  onClear: handleClear,
237
248
  onRemove: handleRemove,
238
249
  onSearch: handleSearch,
239
- onKeyDown
250
+ onKeyDown,
251
+ orphanClassName,
252
+ orphanStyle
240
253
  })
241
254
  )
242
255
  );
@@ -78,6 +78,17 @@ export interface PureSelectorProps {
78
78
  * Custom text displayed in the input
79
79
  */
80
80
  optionLabelProp?: string | ((option: TagType) => string);
81
+ /**
82
+ * Extra class name applied to the displayed value/tag when its key is not
83
+ * found in `options` (an "orphan" value). The orphan value is shown as the
84
+ * raw key itself; this lets you style it differently (e.g. to flag stale data).
85
+ */
86
+ orphanClassName?: string;
87
+ /**
88
+ * Extra inline style applied to the displayed value/tag when its key is not
89
+ * found in `options` (an "orphan" value).
90
+ */
91
+ orphanStyle?: React.CSSProperties;
81
92
  /**
82
93
  * Control the open state
83
94
  * */
@@ -98,6 +98,8 @@ var Selector = import_react.default.forwardRef(
98
98
  disabled,
99
99
  options = [],
100
100
  selectedKeys,
101
+ orphanClassName,
102
+ orphanStyle,
101
103
  allowClear = true,
102
104
  placeholder,
103
105
  closable = true,
@@ -121,6 +123,8 @@ var Selector = import_react.default.forwardRef(
121
123
  "disabled",
122
124
  "options",
123
125
  "selectedKeys",
126
+ "orphanClassName",
127
+ "orphanStyle",
124
128
  "allowClear",
125
129
  "placeholder",
126
130
  "closable",
@@ -141,9 +145,24 @@ var Selector = import_react.default.forwardRef(
141
145
  value
142
146
  });
143
147
  const tags = (0, import_react.useMemo)(() => {
144
- return Array.isArray(options) ? options.filter((opt) => selectedKeys.includes(opt.value)).map((opt) => __spreadProps(__spreadValues({}, opt), {
145
- children: typeof optionLabelProp === "function" ? optionLabelProp(opt) : opt[optionLabelProp]
146
- })) : [];
148
+ if (!Array.isArray(options)) {
149
+ return [];
150
+ }
151
+ return selectedKeys.map((key) => {
152
+ const opt = options.find((o) => o.value === key);
153
+ if (opt) {
154
+ return __spreadProps(__spreadValues({}, opt), {
155
+ children: typeof optionLabelProp === "function" ? optionLabelProp(opt) : opt[optionLabelProp],
156
+ _orphan: false
157
+ });
158
+ }
159
+ return {
160
+ value: key,
161
+ label: String(key),
162
+ children: String(key),
163
+ _orphan: true
164
+ };
165
+ });
147
166
  }, [options, selectedKeys, optionLabelProp]);
148
167
  const handleClick = () => {
149
168
  if (inputRef.current && !disabled) {
@@ -210,22 +229,38 @@ var Selector = import_react.default.forwardRef(
210
229
  };
211
230
  const renderContent = () => {
212
231
  if (multi) {
213
- return tags.map((item, index) => {
214
- const _closable = typeof closable === "function" ? closable(item) : closable;
215
- return /* @__PURE__ */ import_react.default.createElement(
216
- import_Tag.default,
217
- __spreadProps(__spreadValues({}, item), {
218
- closable: _closable,
219
- onClose: (e) => handleRemove(item, e),
220
- key: item.value || index
221
- })
222
- );
223
- });
232
+ return tags.map(
233
+ (item, index) => {
234
+ const _a2 = item, { _orphan } = _a2, tagRest = __objRest(_a2, ["_orphan"]);
235
+ const _closable = typeof closable === "function" ? closable(item) : closable;
236
+ return /* @__PURE__ */ import_react.default.createElement(
237
+ import_Tag.default,
238
+ __spreadProps(__spreadValues({}, tagRest), {
239
+ className: _orphan ? orphanClassName : void 0,
240
+ style: _orphan ? orphanStyle : void 0,
241
+ closable: _closable,
242
+ onClose: (e) => handleRemove(item, e),
243
+ key: item.value || index
244
+ })
245
+ );
246
+ }
247
+ );
224
248
  }
225
249
  const key = selectedKeys.length ? selectedKeys[0] : "";
226
250
  const opt = Array.isArray(options) ? options.find((opt2) => opt2.value === key) : null;
227
- const label = opt ? typeof optionLabelProp === "function" ? optionLabelProp(opt) : opt[optionLabelProp] : null;
228
- return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, renderSearch(), label && /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-selection-item` }, label));
251
+ const isOrphan = !opt && key !== "";
252
+ const label = opt ? typeof optionLabelProp === "function" ? optionLabelProp(opt) : opt[optionLabelProp] : isOrphan ? String(key) : null;
253
+ return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, renderSearch(), label && /* @__PURE__ */ import_react.default.createElement(
254
+ "div",
255
+ {
256
+ className: (0, import_clsx.default)(
257
+ `${prefixCls}-selection-item`,
258
+ isOrphan && orphanClassName
259
+ ),
260
+ style: isOrphan ? orphanStyle : void 0
261
+ },
262
+ label
263
+ ));
229
264
  };
230
265
  const renderSuffix = () => {
231
266
  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 }));
@@ -68,11 +68,11 @@ var import_lazy_row = __toESM(require("./lazy-row"));
68
68
  var import_row = __toESM(require("./row"));
69
69
  var TableBody = (props) => {
70
70
  var _b, _c, _d;
71
- const _a = props, { columns, pageData, lazyLoad } = _a, rest = __objRest(_a, ["columns", "pageData", "lazyLoad"]);
71
+ const _a = props, { columns, pageData, lazyLoad, noData } = _a, rest = __objRest(_a, ["columns", "pageData", "lazyLoad", "noData"]);
72
72
  const { prefixCls, components, rowKey } = import_react.default.useContext(import_table.TableCtx);
73
73
  const { locale } = (0, import_locale.useLocale)();
74
74
  const { table: tableLocale } = locale;
75
- const empty = /* @__PURE__ */ import_react.default.createElement("tbody", { className: `${prefixCls}-tbody` }, /* @__PURE__ */ import_react.default.createElement("tr", { className: `${prefixCls}-no-record` }, /* @__PURE__ */ import_react.default.createElement("td", { colSpan: 999 }, tableLocale.emptyText)));
75
+ const empty = /* @__PURE__ */ import_react.default.createElement("tbody", { className: `${prefixCls}-tbody` }, /* @__PURE__ */ import_react.default.createElement("tr", { className: `${prefixCls}-no-record` }, /* @__PURE__ */ import_react.default.createElement("td", { colSpan: 999 }, noData != null ? noData : tableLocale.emptyText)));
76
76
  const dataLength = pageData.length;
77
77
  if (dataLength === 0)
78
78
  return empty;
@@ -52,5 +52,27 @@ var type_default = () => {
52
52
  children: "Content of Tab Pane 3"
53
53
  }
54
54
  ];
55
- return /* @__PURE__ */ import_react.default.createElement(import_yee_c.Tabs, { defaultActiveKey: "1", items, type: "card" });
55
+ return /* @__PURE__ */ import_react.default.createElement(
56
+ import_yee_c.Box,
57
+ {
58
+ style: {
59
+ padding: 16,
60
+ backgroundColor: "#efefef"
61
+ }
62
+ },
63
+ /* @__PURE__ */ import_react.default.createElement(
64
+ import_yee_c.Tabs,
65
+ {
66
+ defaultActiveKey: "1",
67
+ items,
68
+ type: "card",
69
+ styles: {
70
+ content: {
71
+ padding: 24,
72
+ height: 120
73
+ }
74
+ }
75
+ }
76
+ )
77
+ );
56
78
  };
@@ -4,7 +4,8 @@ interface UseActiveBarOptions {
4
4
  activeKey: string | number;
5
5
  activetab: React.RefObject<HTMLElement | null>;
6
6
  activebar: React.RefObject<HTMLDivElement | null>;
7
+ listEle: React.RefObject<HTMLDivElement | null>;
7
8
  enabled: boolean;
8
9
  }
9
- export declare function useActiveBar({ direction, activeKey, activetab, activebar, enabled, }: UseActiveBarOptions): () => void;
10
+ export declare function useActiveBar({ direction, activeKey, activetab, activebar, listEle, enabled, }: UseActiveBarOptions): () => void;
10
11
  export {};
@@ -28,22 +28,26 @@ function useActiveBar({
28
28
  activeKey,
29
29
  activetab,
30
30
  activebar,
31
+ listEle,
31
32
  enabled
32
33
  }) {
33
34
  const rafIdRef = (0, import_react.useRef)(0);
34
35
  const moveActiveBar = (0, import_react.useCallback)(() => {
35
36
  const bar = activebar.current;
36
37
  const tab = activetab.current;
37
- if (!bar || !tab || !enabled)
38
+ const nav = listEle.current;
39
+ if (!bar || !tab || !enabled || !nav)
38
40
  return;
39
41
  const rect = tab.getBoundingClientRect();
42
+ const listPaddingLeft = parseFloat(getComputedStyle(nav).paddingLeft) || 0;
43
+ const listPaddingTop = parseFloat(getComputedStyle(nav).paddingTop) || 0;
40
44
  const isHorizontal = direction === "horizontal";
41
45
  if (isHorizontal) {
42
46
  bar.style.width = `${rect.width}px`;
43
- bar.style.transform = `translateX(${tab.offsetLeft}px)`;
47
+ bar.style.transform = `translateX(${tab.offsetLeft - listPaddingLeft}px)`;
44
48
  } else {
45
49
  bar.style.height = `${rect.height}px`;
46
- bar.style.transform = `translateY(${tab.offsetTop}px)`;
50
+ bar.style.transform = `translateY(${tab.offsetTop - listPaddingTop}px)`;
47
51
  }
48
52
  }, [direction, activetab, activebar, enabled]);
49
53
  (0, import_react.useEffect)(() => {
@@ -51,9 +51,9 @@
51
51
  padding: var(--yee-tabs-vertical-padding);
52
52
  overflow: hidden;
53
53
 
54
- @{pls}-nav-wrap {
54
+ @{pls}-nav-track {
55
55
  height: 100%;
56
- padding: var(--yee-tabs-vertical-nav-wrap-padding);
56
+ padding: var(--yee-tabs-vertical-nav-track-padding);
57
57
  overflow-y: auto;
58
58
  scrollbar-width: none;
59
59
  -ms-overflow-style: none;
@@ -109,9 +109,9 @@
109
109
  overflow: hidden;
110
110
  transition: transform 3s ease-in-out;
111
111
 
112
- &:not(@{pls}-card) {
113
- background-color: var(--yee-tabs-bg-color);
114
- }
112
+ // &:not(@{pls}-card) {
113
+ // background-color: var(--yee-tabs-bg-color);
114
+ // }
115
115
 
116
116
  &@{pls}-nav-wrapper-left,
117
117
  &@{pls}-nav-wrapper-right {
@@ -141,7 +141,7 @@
141
141
  }
142
142
 
143
143
  &.center {
144
- @{pls}-nav-wrap {
144
+ @{pls}-nav-track {
145
145
  justify-content: center;
146
146
  }
147
147
  }
@@ -261,7 +261,7 @@
261
261
  display: none;
262
262
  }
263
263
 
264
- @{pls}-nav-wrap {
264
+ @{pls}-nav-track {
265
265
  padding: 0;
266
266
  }
267
267
 
@@ -276,6 +276,16 @@
276
276
  background-color: var(--yee-tabs-card-bg-color);
277
277
  }
278
278
 
279
+ &@{pls}-top {
280
+ @{pls}-nav-wrapper {
281
+ border-bottom: none;
282
+ }
283
+ }
284
+
285
+ @{pls}-container {
286
+ background-color: var(--yee-tabs-conatiner-bg-color);
287
+ }
288
+
279
289
  &@{pls}-border-card {
280
290
  > @{pls}-nav-wrapper {
281
291
  bottom: var(--yee-tabs-card-border-bottom);
@@ -313,7 +323,7 @@
313
323
 
314
324
  @{pls}-editable-card,
315
325
  @{pls}-card {
316
- @{pls}-nav-wrap {
326
+ @{pls}-nav-track {
317
327
  padding: 0;
318
328
  }
319
329
 
@@ -344,16 +354,16 @@
344
354
  }
345
355
  }
346
356
 
347
- @{pls}-nav-wrap {
357
+ @{pls}-nav-track {
348
358
  position: relative;
349
359
  width: 100%;
350
360
  overflow: hidden;
351
361
  white-space: nowrap;
352
362
 
353
- &.is-scroll {
354
- width: var(--yee-tabs-nav-wrap-scroll-width);
355
- margin-left: var(--yee-tabs-nav-wrap-scroll-margin-left);
356
- }
363
+ // &.is-scroll {
364
+ // width: var(--yee-tabs-nav-track-scroll-width);
365
+ // margin-left: var(--yee-tabs-nav-track-scroll-margin-left);
366
+ // }
357
367
 
358
368
  &::-webkit-scrollbar {
359
369
  display: none;
@@ -513,7 +523,7 @@
513
523
  }
514
524
  }
515
525
 
516
- @{pls}-nav-wrap {
526
+ @{pls}-nav-track {
517
527
  padding: 0;
518
528
  }
519
529
  }
@@ -95,6 +95,7 @@ var TabHeader = (props) => {
95
95
  activeKey,
96
96
  activetab,
97
97
  activebar,
98
+ listEle: navList,
98
99
  enabled: !type
99
100
  // Only show active bar for non-card types
100
101
  });
@@ -147,7 +148,7 @@ var TabHeader = (props) => {
147
148
  return /* @__PURE__ */ import_react.default.createElement("div", { className: cls, style: styles == null ? void 0 : styles.header }, renderPrefixExtra(), /* @__PURE__ */ import_react.default.createElement(TabHeaderCtx.Provider, { value: contextValue }, /* @__PURE__ */ import_react.default.createElement(
148
149
  "div",
149
150
  {
150
- className: (0, import_clsx.default)(`${prefixCls}-nav-wrap`, classNames == null ? void 0 : classNames.track),
151
+ className: (0, import_clsx.default)(`${prefixCls}-nav-track`, classNames == null ? void 0 : classNames.track),
151
152
  style: styles == null ? void 0 : styles.track,
152
153
  ref: navContainer
153
154
  },
@@ -237,6 +237,7 @@ var TabHeaderTitle = (props) => {
237
237
  {
238
238
  type: "text",
239
239
  size: "small",
240
+ className: `${prefixCls}-close`,
240
241
  icon: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.X, { size: 14 }),
241
242
  onClick: handleEdit,
242
243
  "aria-label": `Close ${label}`
@@ -149,15 +149,6 @@
149
149
  line-height: var(--yee-tag-large-height);
150
150
  }
151
151
 
152
- &-close {
153
- display: inline-flex;
154
- padding: 0;
155
- width: 16px;
156
- height: 16px;
157
- margin-left: var(--yee-tag-close-margin-left);
158
- cursor: pointer;
159
- }
160
-
161
152
  &-checkable {
162
153
  margin: var(--yee-tag-checkable-margin);
163
154
  color: var(--yee-tag-item-not-check-color);
@@ -177,4 +168,13 @@
177
168
  background-color: var(--yee-tag-item-check-active-bg-color);
178
169
  border-color: var(--yee-tag-item-check-active-border-color);
179
170
  }
171
+
172
+ & &-close {
173
+ display: inline-flex;
174
+ padding: 0;
175
+ width: 16px;
176
+ height: 16px;
177
+ margin-left: var(--yee-tag-close-margin-left);
178
+ cursor: pointer;
179
+ }
180
180
  }
@@ -903,6 +903,7 @@
903
903
  --yee-tabs-card-border-bg-color: var(--yee-color-bg-head);
904
904
  --yee-tabs-card-active-bg-color: var(--yee-color-bg-container);
905
905
  --yee-tabs-card-bg-color: transparent;
906
+ --yee-tabs-conatiner-bg-color: var(--yee-color-bg-container);
906
907
  --yee-tabs-header-custom-btn-text-color: var(--yee-text-color);
907
908
  --yee-tabs-header-custom-btn-text-hover-color: var(--yee-primary-color);
908
909
  --yee-tabs-header-custom-btn-text-active-color: var(--yee-primary-color);
@@ -202,6 +202,11 @@
202
202
  flex-direction: column;
203
203
  }
204
204
 
205
+ /* Field-level horizontal collapses too on narrow screens */
206
+ .yee-form-item-horizontal .yee-form-item-row {
207
+ flex-direction: column;
208
+ }
209
+
205
210
  /* ── Table: ensure horizontal scroll ── */
206
211
  .yee-table-wrapper {
207
212
  -webkit-overflow-scrolling: touch;