@rainbow-oh/yee-c 0.6.1 → 0.6.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 (47) 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/Tabs/demo/type.js +23 -1
  5. package/dist/cjs/Tabs/hooks/useActiveBar.d.ts +2 -1
  6. package/dist/cjs/Tabs/hooks/useActiveBar.js +7 -3
  7. package/dist/cjs/Tabs/style/index.less +24 -14
  8. package/dist/cjs/Tabs/tab-header/index.js +2 -1
  9. package/dist/cjs/Tabs/tab-header/tab-header-title.js +1 -0
  10. package/dist/cjs/style/color.css +1 -0
  11. package/dist/cjs/style/mobile.css +5 -0
  12. package/dist/cjs/style/size.css +6 -3
  13. package/dist/cjs/style/themes.css +1 -1
  14. package/dist/cjs/style/variables.css +8 -4
  15. package/dist/cjs/version.d.ts +1 -1
  16. package/dist/cjs/version.js +1 -1
  17. package/dist/esm/Form/demo/layout.js +10 -10
  18. package/dist/esm/Form/style/index.less +32 -8
  19. package/dist/esm/Grid/item.js +2 -1
  20. package/dist/esm/Tabs/demo/type.js +15 -4
  21. package/dist/esm/Tabs/hooks/useActiveBar.d.ts +2 -1
  22. package/dist/esm/Tabs/hooks/useActiveBar.js +7 -3
  23. package/dist/esm/Tabs/style/index.less +24 -14
  24. package/dist/esm/Tabs/tab-header/index.js +2 -1
  25. package/dist/esm/Tabs/tab-header/tab-header-title.js +1 -0
  26. package/dist/esm/style/color.css +1 -0
  27. package/dist/esm/style/mobile.css +5 -0
  28. package/dist/esm/style/size.css +6 -3
  29. package/dist/esm/style/themes.css +1 -1
  30. package/dist/esm/style/variables.css +8 -4
  31. package/dist/esm/version.d.ts +1 -1
  32. package/dist/esm/version.js +1 -1
  33. package/dist/umd/yee-c.min.css +2 -2
  34. package/dist/umd/yee-c.min.js +1 -1
  35. package/package.json +1 -1
  36. package/src/Form/demo/layout.tsx +7 -12
  37. package/src/Form/style/index.less +32 -8
  38. package/src/Grid/item.tsx +2 -1
  39. package/src/Tabs/demo/type.tsx +21 -2
  40. package/src/Tabs/hooks/useActiveBar.ts +8 -4
  41. package/src/Tabs/style/index.less +24 -14
  42. package/src/Tabs/tab-header/index.tsx +2 -1
  43. package/src/Tabs/tab-header/tab-header-title.tsx +1 -0
  44. package/src/style/color.css +1 -0
  45. package/src/style/mobile.css +5 -0
  46. package/src/style/size.css +6 -3
  47. 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
  };
@@ -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}`
@@ -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;
@@ -1,5 +1,6 @@
1
1
  :root {
2
2
  --yee-font-family: inherit;
3
+
3
4
  /* ── z-index 基础层级 ── */
4
5
  --yee-z-index-fixed: 990; /* L1 吸顶 */
5
6
  --yee-z-index-mask: 1000; /* L2 遮罩背景 */
@@ -270,6 +271,8 @@
270
271
  --yee-form-item-label-line-height: 24px;
271
272
  --yee-form-item-required-margin-inline-start: 4px;
272
273
  --yee-form-item-additional-bottom: 2px;
274
+ --yee-form-item-horizontal-label-width: 120px;
275
+ --yee-form-item-horizontal-label-gap: 12px;
273
276
 
274
277
  /* --Grid-- */
275
278
  --yee-grid-column-min-width: 50px;
@@ -685,7 +688,7 @@
685
688
  --yee-tabs-active-bar-height: 2px;
686
689
  --yee-tabs-active-bar-width: 2px;
687
690
  --yee-tabs-vertical-padding: 8px 0;
688
- --yee-tabs-vertical-nav-wrap-padding: 8px 0;
691
+ --yee-tabs-vertical-nav-track-padding: 8px 0;
689
692
  --yee-tabs-vertical-container-padding: 0 20px;
690
693
  --yee-tabs-vertical-active-bar-height: 32px;
691
694
  --yee-tabs-nav-wrapper-height: 46px;
@@ -722,8 +725,8 @@
722
725
  --yee-tabs-card-tab-border-width: 1px;
723
726
  --yee-tabs-card-tab-border-radius: 4px;
724
727
  --yee-tabs-card-tab-not-active-height: 39px;
725
- --yee-tabs-nav-wrap-scroll-width: calc(100% - 64px);
726
- --yee-tabs-nav-wrap-scroll-margin-left: 32px;
728
+ --yee-tabs-nav-track-scroll-width: calc(100% - 64px);
729
+ --yee-tabs-nav-track-scroll-margin-left: 32px;
727
730
  --yee-tabs-nav-wrapper-shadow-width: 8px;
728
731
  --yee-tabs-nav-wrapper-shadow-inset: 4px;
729
732
  --yee-tabs-nav-wrapper-top-z-index: var(--yee-z-index-fixed);
@@ -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-07-13T08:55:27.235Z
4
+ * Generated on 2026-07-14T03:59:52.475Z
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-07-13T08:55:27.235Z
4
+ * Generated on 2026-07-14T03:59:52.475Z
5
5
  */
6
6
 
7
7
  /* ========== color.css ========== */
@@ -910,6 +910,7 @@
910
910
  --yee-tabs-card-border-bg-color: var(--yee-color-bg-head);
911
911
  --yee-tabs-card-active-bg-color: var(--yee-color-bg-container);
912
912
  --yee-tabs-card-bg-color: transparent;
913
+ --yee-tabs-conatiner-bg-color: var(--yee-color-bg-container);
913
914
  --yee-tabs-header-custom-btn-text-color: var(--yee-text-color);
914
915
  --yee-tabs-header-custom-btn-text-hover-color: var(--yee-primary-color);
915
916
  --yee-tabs-header-custom-btn-text-active-color: var(--yee-primary-color);
@@ -1118,6 +1119,7 @@
1118
1119
  /* ========== size.css ========== */
1119
1120
  :root {
1120
1121
  --yee-font-family: inherit;
1122
+
1121
1123
  /* ── z-index 基础层级 ── */
1122
1124
  --yee-z-index-fixed: 990; /* L1 吸顶 */
1123
1125
  --yee-z-index-mask: 1000; /* L2 遮罩背景 */
@@ -1388,6 +1390,8 @@
1388
1390
  --yee-form-item-label-line-height: 24px;
1389
1391
  --yee-form-item-required-margin-inline-start: 4px;
1390
1392
  --yee-form-item-additional-bottom: 2px;
1393
+ --yee-form-item-horizontal-label-width: 120px;
1394
+ --yee-form-item-horizontal-label-gap: 12px;
1391
1395
 
1392
1396
  /* --Grid-- */
1393
1397
  --yee-grid-column-min-width: 50px;
@@ -1803,7 +1807,7 @@
1803
1807
  --yee-tabs-active-bar-height: 2px;
1804
1808
  --yee-tabs-active-bar-width: 2px;
1805
1809
  --yee-tabs-vertical-padding: 8px 0;
1806
- --yee-tabs-vertical-nav-wrap-padding: 8px 0;
1810
+ --yee-tabs-vertical-nav-track-padding: 8px 0;
1807
1811
  --yee-tabs-vertical-container-padding: 0 20px;
1808
1812
  --yee-tabs-vertical-active-bar-height: 32px;
1809
1813
  --yee-tabs-nav-wrapper-height: 46px;
@@ -1840,8 +1844,8 @@
1840
1844
  --yee-tabs-card-tab-border-width: 1px;
1841
1845
  --yee-tabs-card-tab-border-radius: 4px;
1842
1846
  --yee-tabs-card-tab-not-active-height: 39px;
1843
- --yee-tabs-nav-wrap-scroll-width: calc(100% - 64px);
1844
- --yee-tabs-nav-wrap-scroll-margin-left: 32px;
1847
+ --yee-tabs-nav-track-scroll-width: calc(100% - 64px);
1848
+ --yee-tabs-nav-track-scroll-margin-left: 32px;
1845
1849
  --yee-tabs-nav-wrapper-shadow-width: 8px;
1846
1850
  --yee-tabs-nav-wrapper-shadow-inset: 4px;
1847
1851
  --yee-tabs-nav-wrapper-top-z-index: var(--yee-z-index-fixed);
@@ -3,4 +3,4 @@ declare global {
3
3
  __yee_c_version__: string;
4
4
  }
5
5
  }
6
- export declare const version = "0.6.1";
6
+ export declare const version = "0.6.2";
@@ -22,7 +22,7 @@ __export(version_exports, {
22
22
  version: () => version
23
23
  });
24
24
  module.exports = __toCommonJS(version_exports);
25
- var version = "0.6.1";
25
+ var version = "0.6.2";
26
26
  if (typeof window !== "undefined") {
27
27
  window.__yee_c_version__ = version;
28
28
  }
@@ -5,17 +5,19 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
5
5
  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; } }
6
6
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
7
  import { Button, Form, Grid, Input, Radio, Space } from "../..";
8
- import React from 'react';
8
+ import React, { useState } from 'react';
9
9
  export default (function () {
10
10
  var _Form$useForm = Form.useForm(),
11
11
  _Form$useForm2 = _slicedToArray(_Form$useForm, 1),
12
12
  form = _Form$useForm2[0];
13
+ var _useState = useState('vertical'),
14
+ _useState2 = _slicedToArray(_useState, 2),
15
+ layout = _useState2[0],
16
+ setLayout = _useState2[1];
13
17
  return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Radio.Group, {
14
- defaultValue: "vertical",
18
+ value: layout,
15
19
  onChange: function onChange(value) {
16
- form.setFieldsValue({
17
- layout: value
18
- });
20
+ return setLayout(value);
19
21
  },
20
22
  options: [{
21
23
  value: 'vertical',
@@ -26,12 +28,10 @@ export default (function () {
26
28
  }]
27
29
  }), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement(Form, {
28
30
  form: form,
29
- initialValues: {
30
- layout: 'vertical'
31
- },
32
- layout: "vertical"
31
+ initialValues: {},
32
+ layout: layout
33
33
  }, /*#__PURE__*/React.createElement(Grid, {
34
- cols: 1
34
+ cols: 2
35
35
  }, /*#__PURE__*/React.createElement(Form.Field, {
36
36
  name: "name",
37
37
  label: "Name",
@@ -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 {
@@ -10,6 +10,7 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
10
10
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
11
11
  import clsx from 'clsx';
12
12
  import React from 'react';
13
+ import omit from "../utils/omit";
13
14
  var Item = function Item(props) {
14
15
  var _props$prefixCls = props.prefixCls,
15
16
  prefixCls = _props$prefixCls === void 0 ? 'yee-grid' : _props$prefixCls,
@@ -21,7 +22,7 @@ var Item = function Item(props) {
21
22
  return /*#__PURE__*/React.createElement("div", _extends({
22
23
  className: clsx("".concat(prefixCls, "-item"), className),
23
24
  style: _objectSpread(_objectSpread({}, spanStyle), style)
24
- }, rest), children);
25
+ }, omit(rest, ['colspan'])), children);
25
26
  };
26
27
  Item.displayName = 'GridItem';
27
28
  export default Item;
@@ -1,4 +1,4 @@
1
- import { Tabs } from "../..";
1
+ import { Box, Tabs } from "../..";
2
2
  import React from 'react';
3
3
  export default (function () {
4
4
  var items = [{
@@ -14,9 +14,20 @@ export default (function () {
14
14
  label: 'Tab 3',
15
15
  children: 'Content of Tab Pane 3'
16
16
  }];
17
- return /*#__PURE__*/React.createElement(Tabs, {
17
+ return /*#__PURE__*/React.createElement(Box, {
18
+ style: {
19
+ padding: 16,
20
+ backgroundColor: '#efefef'
21
+ }
22
+ }, /*#__PURE__*/React.createElement(Tabs, {
18
23
  defaultActiveKey: "1",
19
24
  items: items,
20
- type: "card"
21
- });
25
+ type: "card",
26
+ styles: {
27
+ content: {
28
+ padding: 24,
29
+ height: 120
30
+ }
31
+ }
32
+ }));
22
33
  });
@@ -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 {};
@@ -4,20 +4,24 @@ export function useActiveBar(_ref) {
4
4
  activeKey = _ref.activeKey,
5
5
  activetab = _ref.activetab,
6
6
  activebar = _ref.activebar,
7
+ listEle = _ref.listEle,
7
8
  enabled = _ref.enabled;
8
9
  var rafIdRef = useRef(0);
9
10
  var moveActiveBar = useCallback(function () {
10
11
  var bar = activebar.current;
11
12
  var tab = activetab.current;
12
- if (!bar || !tab || !enabled) return;
13
+ var nav = listEle.current;
14
+ if (!bar || !tab || !enabled || !nav) return;
13
15
  var rect = tab.getBoundingClientRect();
16
+ var listPaddingLeft = parseFloat(getComputedStyle(nav).paddingLeft) || 0;
17
+ var listPaddingTop = parseFloat(getComputedStyle(nav).paddingTop) || 0;
14
18
  var isHorizontal = direction === 'horizontal';
15
19
  if (isHorizontal) {
16
20
  bar.style.width = "".concat(rect.width, "px");
17
- bar.style.transform = "translateX(".concat(tab.offsetLeft, "px)");
21
+ bar.style.transform = "translateX(".concat(tab.offsetLeft - listPaddingLeft, "px)");
18
22
  } else {
19
23
  bar.style.height = "".concat(rect.height, "px");
20
- bar.style.transform = "translateY(".concat(tab.offsetTop, "px)");
24
+ bar.style.transform = "translateY(".concat(tab.offsetTop - listPaddingTop, "px)");
21
25
  }
22
26
  }, [direction, activetab, activebar, enabled]);
23
27
  useEffect(function () {