@rainbow-oh/yee-c 0.6.0 → 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 (65) hide show
  1. package/dist/cjs/Anchor/anchor-item.js +10 -2
  2. package/dist/cjs/Anchor/interface.d.ts +1 -1
  3. package/dist/cjs/Dialog/dialog.js +16 -2
  4. package/dist/cjs/Dialog/interface.d.ts +1 -1
  5. package/dist/cjs/Form/demo/layout.js +4 -14
  6. package/dist/cjs/Form/style/index.less +32 -8
  7. package/dist/cjs/Grid/item.js +2 -1
  8. package/dist/cjs/Input/style/index.less +2 -0
  9. package/dist/cjs/Tabs/demo/type.js +23 -1
  10. package/dist/cjs/Tabs/hooks/useActiveBar.d.ts +2 -1
  11. package/dist/cjs/Tabs/hooks/useActiveBar.js +7 -3
  12. package/dist/cjs/Tabs/style/index.less +24 -14
  13. package/dist/cjs/Tabs/tab-header/index.js +2 -1
  14. package/dist/cjs/Tabs/tab-header/tab-header-title.js +1 -0
  15. package/dist/cjs/TextArea/style/index.less +1 -0
  16. package/dist/cjs/style/color.css +1 -0
  17. package/dist/cjs/style/mobile.css +5 -0
  18. package/dist/cjs/style/size.css +7 -3
  19. package/dist/cjs/style/themes.css +1 -1
  20. package/dist/cjs/style/variables.css +9 -4
  21. package/dist/cjs/version.d.ts +1 -1
  22. package/dist/cjs/version.js +1 -1
  23. package/dist/esm/Anchor/anchor-item.js +4 -3
  24. package/dist/esm/Anchor/interface.d.ts +1 -1
  25. package/dist/esm/Dialog/dialog.js +4 -2
  26. package/dist/esm/Dialog/interface.d.ts +1 -1
  27. package/dist/esm/Form/demo/layout.js +10 -10
  28. package/dist/esm/Form/style/index.less +32 -8
  29. package/dist/esm/Grid/item.js +2 -1
  30. package/dist/esm/Input/style/index.less +2 -0
  31. package/dist/esm/Tabs/demo/type.js +15 -4
  32. package/dist/esm/Tabs/hooks/useActiveBar.d.ts +2 -1
  33. package/dist/esm/Tabs/hooks/useActiveBar.js +7 -3
  34. package/dist/esm/Tabs/style/index.less +24 -14
  35. package/dist/esm/Tabs/tab-header/index.js +2 -1
  36. package/dist/esm/Tabs/tab-header/tab-header-title.js +1 -0
  37. package/dist/esm/TextArea/style/index.less +1 -0
  38. package/dist/esm/style/color.css +1 -0
  39. package/dist/esm/style/mobile.css +5 -0
  40. package/dist/esm/style/size.css +7 -3
  41. package/dist/esm/style/themes.css +1 -1
  42. package/dist/esm/style/variables.css +9 -4
  43. package/dist/esm/version.d.ts +1 -1
  44. package/dist/esm/version.js +1 -1
  45. package/dist/umd/yee-c.min.css +2 -2
  46. package/dist/umd/yee-c.min.js +1 -1
  47. package/package.json +1 -1
  48. package/src/Anchor/anchor-item.tsx +7 -3
  49. package/src/Anchor/interface.ts +1 -1
  50. package/src/Dialog/dialog.tsx +10 -2
  51. package/src/Dialog/interface.ts +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/Input/style/index.less +2 -0
  56. package/src/Tabs/demo/type.tsx +21 -2
  57. package/src/Tabs/hooks/useActiveBar.ts +8 -4
  58. package/src/Tabs/style/index.less +24 -14
  59. package/src/Tabs/tab-header/index.tsx +2 -1
  60. package/src/Tabs/tab-header/tab-header-title.tsx +1 -0
  61. package/src/TextArea/style/index.less +1 -0
  62. package/src/style/color.css +1 -0
  63. package/src/style/mobile.css +5 -0
  64. package/src/style/size.css +7 -3
  65. package/src/version.ts +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rainbow-oh/yee-c",
3
- "version": "0.6.0",
3
+ "version": "0.6.2",
4
4
  "description": "yee basic components",
5
5
  "keywords": [
6
6
  "react",
@@ -44,10 +44,14 @@ const AnchorItem: React.FC<AnchorItemProps> = (props) => {
44
44
  paddingLeft: `${level * INDENT_WIDTH}px`,
45
45
  };
46
46
 
47
- const renderItem = (
47
+ const node = (
48
48
  <li className={cls} style={itemStyle} {...rest}>
49
49
  <a href={`#${targetKey}`} onClick={handleClick}>
50
- <span className={`${prefixCls}-item-label`} title={String(title)}>
50
+ <span
51
+ className={clsx(`${prefixCls}-item-label`, classNames?.label)}
52
+ style={styles?.label}
53
+ title={String(title)}
54
+ >
51
55
  {title}
52
56
  </span>
53
57
  </a>
@@ -56,7 +60,7 @@ const AnchorItem: React.FC<AnchorItemProps> = (props) => {
56
60
 
57
61
  return (
58
62
  <>
59
- {renderItem}
63
+ {node}
60
64
  {children}
61
65
  </>
62
66
  );
@@ -46,7 +46,7 @@ export interface AnchorItemProps {
46
46
  children?: React.ReactNode;
47
47
  }
48
48
 
49
- export type AnchorSemanticDOM = 'item' | 'active' | 'content';
49
+ export type AnchorSemanticDOM = 'item' | 'active' | 'content' | 'label';
50
50
 
51
51
  export interface AnchorProps extends DataAttributeProps {
52
52
  /**
@@ -171,11 +171,19 @@ const Dialog = (baseprops: DialogProps) => {
171
171
  ></Button>
172
172
  ) : null}
173
173
  {title ? (
174
- <div className={`${prefixCls}-header`}>
174
+ <div
175
+ className={clsx(`${prefixCls}-header`, classNames?.header)}
176
+ style={styles?.header}
177
+ >
175
178
  <div className={`${prefixCls}-title`}>{title}</div>
176
179
  </div>
177
180
  ) : null}
178
- <div className={`${prefixCls}-body`}>{children}</div>
181
+ <div
182
+ className={clsx(`${prefixCls}-body`, classNames?.body)}
183
+ style={styles?.body}
184
+ >
185
+ {children}
186
+ </div>
179
187
  {renderFooter()}
180
188
  </div>
181
189
  </div>
@@ -1,7 +1,7 @@
1
1
  import { ButtonType } from '../Button';
2
2
  import type { DataAttributeProps } from '../utils/types';
3
3
 
4
- export type SemanticDOM = 'content' | 'footer' | 'mask';
4
+ export type SemanticDOM = 'content' | 'header' | 'body' | 'footer' | 'mask';
5
5
 
6
6
  export interface DialogProps extends DataAttributeProps {
7
7
  /**
@@ -1,31 +1,26 @@
1
1
  import { Button, Form, Grid, Input, Radio, Space } from '@rainbow-oh/yee-c';
2
- import React from 'react';
2
+ import React, { useState } from 'react';
3
3
 
4
4
  export default () => {
5
5
  const [form] = Form.useForm();
6
+ const [layout, setLayout] = useState<'vertical' | 'horizontal'>('vertical');
6
7
 
7
8
  return (
8
9
  <div>
9
10
  <Radio.Group
10
- defaultValue="vertical"
11
- onChange={(value) => {
12
- form.setFieldsValue({ layout: value });
13
- }}
11
+ value={layout}
12
+ onChange={(value) => setLayout(value as 'vertical' | 'horizontal')}
14
13
  options={[
15
14
  { value: 'vertical', label: 'Vertical' },
16
15
  { value: 'horizontal', label: 'Horizontal' },
17
16
  ]}
18
- ></Radio.Group>
17
+ />
19
18
 
20
19
  <br />
21
20
  <br />
22
21
 
23
- <Form
24
- form={form}
25
- initialValues={{ layout: 'vertical' }}
26
- layout="vertical"
27
- >
28
- <Grid cols={1}>
22
+ <Form form={form} initialValues={{}} layout={layout}>
23
+ <Grid cols={2}>
29
24
  <Form.Field name="name" label="Name" required>
30
25
  <Input placeholder="Please input your name" />
31
26
  </Form.Field>
@@ -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 {
package/src/Grid/item.tsx CHANGED
@@ -1,5 +1,6 @@
1
1
  import clsx from 'clsx';
2
2
  import React from 'react';
3
+ import omit from '../utils/omit';
3
4
  import type { GridItemProps } from './interface';
4
5
 
5
6
  const Item: React.FC<GridItemProps> = (props) => {
@@ -15,7 +16,7 @@ const Item: React.FC<GridItemProps> = (props) => {
15
16
  <div
16
17
  className={clsx(`${prefixCls}-item`, className)}
17
18
  style={{ ...spanStyle, ...style }}
18
- {...rest}
19
+ {...omit(rest, ['colspan'])}
19
20
  >
20
21
  {children}
21
22
  </div>
@@ -11,6 +11,7 @@
11
11
  line-height: var(--yee-input-line-height);
12
12
  border: var(--yee-input-border-width) solid var(--yee-input-border-color);
13
13
  border-radius: var(--yee-input-border-radius, 4px);
14
+ font-family: var(--yee-font-family);
14
15
 
15
16
  &:not(@{pls}-disabled):hover {
16
17
  border-color: var(--yee-input-hover-border-color);
@@ -46,6 +47,7 @@
46
47
 
47
48
  &-inner {
48
49
  width: 100%;
50
+ font-family: var(--yee-font-family);
49
51
  line-height: var(--yee-input-line-height);
50
52
  background-color: inherit;
51
53
  border: none;
@@ -1,4 +1,4 @@
1
- import { Tabs } from '@rainbow-oh/yee-c';
1
+ import { Box, Tabs } from '@rainbow-oh/yee-c';
2
2
  import React from 'react';
3
3
 
4
4
  export default () => {
@@ -20,5 +20,24 @@ export default () => {
20
20
  },
21
21
  ];
22
22
 
23
- return <Tabs defaultActiveKey="1" items={items} type="card" />;
23
+ return (
24
+ <Box
25
+ style={{
26
+ padding: 16,
27
+ backgroundColor: '#efefef',
28
+ }}
29
+ >
30
+ <Tabs
31
+ defaultActiveKey="1"
32
+ items={items}
33
+ type="card"
34
+ styles={{
35
+ content: {
36
+ padding: 24,
37
+ height: 120,
38
+ },
39
+ }}
40
+ />
41
+ </Box>
42
+ );
24
43
  };
@@ -5,6 +5,7 @@ interface UseActiveBarOptions {
5
5
  activeKey: string | number;
6
6
  activetab: React.RefObject<HTMLElement | null>;
7
7
  activebar: React.RefObject<HTMLDivElement | null>;
8
+ listEle: React.RefObject<HTMLDivElement | null>;
8
9
  enabled: boolean;
9
10
  }
10
11
 
@@ -13,6 +14,7 @@ export function useActiveBar({
13
14
  activeKey,
14
15
  activetab,
15
16
  activebar,
17
+ listEle,
16
18
  enabled,
17
19
  }: UseActiveBarOptions) {
18
20
  const rafIdRef = useRef<number>(0);
@@ -20,18 +22,20 @@ export function useActiveBar({
20
22
  const moveActiveBar = useCallback(() => {
21
23
  const bar = activebar.current;
22
24
  const tab = activetab.current;
25
+ const nav = listEle.current;
23
26
 
24
- if (!bar || !tab || !enabled) return;
27
+ if (!bar || !tab || !enabled || !nav) return;
25
28
 
26
29
  const rect = tab.getBoundingClientRect();
30
+ const listPaddingLeft = parseFloat(getComputedStyle(nav).paddingLeft) || 0;
31
+ const listPaddingTop = parseFloat(getComputedStyle(nav).paddingTop) || 0;
27
32
  const isHorizontal = direction === 'horizontal';
28
-
29
33
  if (isHorizontal) {
30
34
  bar.style.width = `${rect.width}px`;
31
- bar.style.transform = `translateX(${tab.offsetLeft}px)`;
35
+ bar.style.transform = `translateX(${tab.offsetLeft - listPaddingLeft}px)`;
32
36
  } else {
33
37
  bar.style.height = `${rect.height}px`;
34
- bar.style.transform = `translateY(${tab.offsetTop}px)`;
38
+ bar.style.transform = `translateY(${tab.offsetTop - listPaddingTop}px)`;
35
39
  }
36
40
  }, [direction, activetab, activebar, enabled]);
37
41
 
@@ -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
  }
@@ -93,6 +93,7 @@ const TabHeader: React.FC<TabHeaderProps> = (props) => {
93
93
  activeKey,
94
94
  activetab,
95
95
  activebar,
96
+ listEle: navList,
96
97
  enabled: !type, // Only show active bar for non-card types
97
98
  });
98
99
 
@@ -161,7 +162,7 @@ const TabHeader: React.FC<TabHeaderProps> = (props) => {
161
162
 
162
163
  <TabHeaderCtx.Provider value={contextValue}>
163
164
  <div
164
- className={clsx(`${prefixCls}-nav-wrap`, classNames?.track)}
165
+ className={clsx(`${prefixCls}-nav-track`, classNames?.track)}
165
166
  style={styles?.track}
166
167
  ref={navContainer}
167
168
  >
@@ -181,6 +181,7 @@ const TabHeaderTitle: React.FC<TabsItemProps> = (props) => {
181
181
  <Button
182
182
  type="text"
183
183
  size="small"
184
+ className={`${prefixCls}-close`}
184
185
  icon={<X size={14} />}
185
186
  onClick={handleEdit}
186
187
  aria-label={`Close ${label}`}
@@ -67,6 +67,7 @@
67
67
  font-size: var(--yee-textarea-font-size);
68
68
  line-height: var(--yee-textarea-line-height);
69
69
  border-radius: var(--yee-textarea-border-radius, 4px);
70
+ font-family: var(--yee-font-family);
70
71
  width: 100%;
71
72
 
72
73
  &-borderless {
@@ -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,4 +1,6 @@
1
1
  :root {
2
+ --yee-font-family: inherit;
3
+
2
4
  /* ── z-index 基础层级 ── */
3
5
  --yee-z-index-fixed: 990; /* L1 吸顶 */
4
6
  --yee-z-index-mask: 1000; /* L2 遮罩背景 */
@@ -269,6 +271,8 @@
269
271
  --yee-form-item-label-line-height: 24px;
270
272
  --yee-form-item-required-margin-inline-start: 4px;
271
273
  --yee-form-item-additional-bottom: 2px;
274
+ --yee-form-item-horizontal-label-width: 120px;
275
+ --yee-form-item-horizontal-label-gap: 12px;
272
276
 
273
277
  /* --Grid-- */
274
278
  --yee-grid-column-min-width: 50px;
@@ -684,7 +688,7 @@
684
688
  --yee-tabs-active-bar-height: 2px;
685
689
  --yee-tabs-active-bar-width: 2px;
686
690
  --yee-tabs-vertical-padding: 8px 0;
687
- --yee-tabs-vertical-nav-wrap-padding: 8px 0;
691
+ --yee-tabs-vertical-nav-track-padding: 8px 0;
688
692
  --yee-tabs-vertical-container-padding: 0 20px;
689
693
  --yee-tabs-vertical-active-bar-height: 32px;
690
694
  --yee-tabs-nav-wrapper-height: 46px;
@@ -721,8 +725,8 @@
721
725
  --yee-tabs-card-tab-border-width: 1px;
722
726
  --yee-tabs-card-tab-border-radius: 4px;
723
727
  --yee-tabs-card-tab-not-active-height: 39px;
724
- --yee-tabs-nav-wrap-scroll-width: calc(100% - 64px);
725
- --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;
726
730
  --yee-tabs-nav-wrapper-shadow-width: 8px;
727
731
  --yee-tabs-nav-wrapper-shadow-inset: 4px;
728
732
  --yee-tabs-nav-wrapper-top-z-index: var(--yee-z-index-fixed);
package/src/version.ts CHANGED
@@ -4,7 +4,7 @@ declare global {
4
4
  }
5
5
  }
6
6
 
7
- export const version = "0.6.0";
7
+ export const version = "0.6.2";
8
8
 
9
9
  if (typeof window !== 'undefined') {
10
10
  window.__yee_c_version__ = version;