@rainbow-oh/yee-c 0.4.3 → 0.4.5

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 (254) hide show
  1. package/dist/cjs/Button/button.d.ts +1 -1
  2. package/dist/cjs/CSV/download.d.ts +1 -1
  3. package/dist/cjs/Carousel/carousel.d.ts +2 -2
  4. package/dist/cjs/Carousel/carousel.js +9 -2
  5. package/dist/cjs/Carousel/interface.d.ts +5 -0
  6. package/dist/cjs/Cascader/cascader.js +53 -62
  7. package/dist/cjs/Cascader/interface.d.ts +19 -2
  8. package/dist/cjs/Cascader/node.js +11 -6
  9. package/dist/cjs/Cascader/search-list.js +2 -1
  10. package/dist/cjs/Cascader/utils/index.d.ts +58 -14
  11. package/dist/cjs/Cascader/utils/index.js +57 -73
  12. package/dist/cjs/Drawer/style/index.less +4 -0
  13. package/dist/cjs/FloatButton/float-button.d.ts +1 -1
  14. package/dist/cjs/Form/demo/basic.js +2 -2
  15. package/dist/cjs/Form/style/index.less +15 -0
  16. package/dist/cjs/Input/style/index.less +19 -17
  17. package/dist/cjs/InputNumber/style/index.less +0 -29
  18. package/dist/cjs/PickerPanel/interface.d.ts +44 -2
  19. package/dist/cjs/PickerPanel/panels/DatePanel/DateBody.d.ts +2 -1
  20. package/dist/cjs/PickerPanel/panels/DatePanel/DateHeader.d.ts +2 -1
  21. package/dist/cjs/PickerPanel/panels/DatePanel/DateHeader.js +1 -1
  22. package/dist/cjs/PickerPanel/panels/DatePanel/index.d.ts +2 -1
  23. package/dist/cjs/PickerPanel/panels/DateTimePanel/index.d.ts +7 -1
  24. package/dist/cjs/PickerPanel/panels/DateTimePanel/index.js +18 -4
  25. package/dist/cjs/PickerPanel/panels/DecadePanel/DecadeBody.d.ts +2 -1
  26. package/dist/cjs/PickerPanel/panels/DecadePanel/DecadeBody.js +1 -1
  27. package/dist/cjs/PickerPanel/panels/DecadePanel/DecadeHeader.d.ts +2 -1
  28. package/dist/cjs/PickerPanel/panels/DecadePanel/DecadeHeader.js +1 -1
  29. package/dist/cjs/PickerPanel/panels/DecadePanel/index.d.ts +2 -1
  30. package/dist/cjs/PickerPanel/panels/DecadePanel/index.js +1 -1
  31. package/dist/cjs/PickerPanel/panels/Header.d.ts +13 -1
  32. package/dist/cjs/PickerPanel/panels/MonthPanel/MonthBody.d.ts +2 -1
  33. package/dist/cjs/PickerPanel/panels/MonthPanel/MonthHeader.d.ts +2 -1
  34. package/dist/cjs/PickerPanel/panels/MonthPanel/MonthHeader.js +1 -1
  35. package/dist/cjs/PickerPanel/panels/MonthPanel/index.d.ts +2 -1
  36. package/dist/cjs/PickerPanel/panels/MonthPanel/index.js +1 -1
  37. package/dist/cjs/PickerPanel/panels/PanelBody.d.ts +21 -1
  38. package/dist/cjs/PickerPanel/panels/PanelBody.js +3 -3
  39. package/dist/cjs/PickerPanel/panels/QuarterPanel/QuarterBody.d.ts +2 -1
  40. package/dist/cjs/PickerPanel/panels/QuarterPanel/QuarterHeader.d.ts +2 -1
  41. package/dist/cjs/PickerPanel/panels/QuarterPanel/index.d.ts +2 -1
  42. package/dist/cjs/PickerPanel/panels/RangePanel/index.d.ts +2 -1
  43. package/dist/cjs/PickerPanel/panels/RangePanel/index.js +2 -2
  44. package/dist/cjs/PickerPanel/panels/RangePanel/interface.d.ts +5 -5
  45. package/dist/cjs/PickerPanel/panels/TimePanel/TimeBody.d.ts +17 -1
  46. package/dist/cjs/PickerPanel/panels/TimePanel/TimeCell.d.ts +7 -1
  47. package/dist/cjs/PickerPanel/panels/TimePanel/TimeCell.js +1 -1
  48. package/dist/cjs/PickerPanel/panels/TimePanel/TimeColumn.d.ts +14 -1
  49. package/dist/cjs/PickerPanel/panels/TimePanel/TimeColumn.js +1 -1
  50. package/dist/cjs/PickerPanel/panels/TimePanel/TimeHeader.d.ts +4 -1
  51. package/dist/cjs/PickerPanel/panels/TimePanel/index.d.ts +9 -1
  52. package/dist/cjs/PickerPanel/panels/WeekPanel/WeekBody.d.ts +2 -1
  53. package/dist/cjs/PickerPanel/panels/WeekPanel/WeekHeader.d.ts +2 -1
  54. package/dist/cjs/PickerPanel/panels/WeekPanel/index.d.ts +2 -1
  55. package/dist/cjs/PickerPanel/panels/YearPanel/YearBody.d.ts +2 -1
  56. package/dist/cjs/PickerPanel/panels/YearPanel/YearBody.js +2 -2
  57. package/dist/cjs/PickerPanel/panels/YearPanel/YearHeader.d.ts +2 -1
  58. package/dist/cjs/PickerPanel/panels/YearPanel/YearHeader.js +7 -1
  59. package/dist/cjs/PickerPanel/panels/YearPanel/index.d.ts +2 -1
  60. package/dist/cjs/PickerPanel/panels/YearPanel/index.js +1 -1
  61. package/dist/cjs/PickerPanel/utils/pickerUtils.d.ts +7 -7
  62. package/dist/cjs/PickerPanel/utils/pickerUtils.js +2 -2
  63. package/dist/cjs/Popover/style/index.less +1 -0
  64. package/dist/cjs/Select/interface.d.ts +77 -0
  65. package/dist/cjs/Select/option.d.ts +2 -1
  66. package/dist/cjs/Select/option.js +6 -3
  67. package/dist/cjs/Select/options.d.ts +3 -2
  68. package/dist/cjs/Select/options.js +53 -47
  69. package/dist/cjs/Select/select.js +1 -1
  70. package/dist/cjs/Select/style/index.less +8 -13
  71. package/dist/cjs/Selector/interface.d.ts +4 -0
  72. package/dist/cjs/Selector/selector.js +3 -0
  73. package/dist/cjs/Selector/style/index.less +21 -137
  74. package/dist/cjs/Table/hooks/useFilter.js +1 -1
  75. package/dist/cjs/Table/interface.d.ts +4 -0
  76. package/dist/cjs/Table/style/index.less +2 -0
  77. package/dist/cjs/Table/theader/filter.js +2 -1
  78. package/dist/cjs/Tabs/demo/basic.js +8 -1
  79. package/dist/cjs/Tabs/tabs.js +3 -1
  80. package/dist/cjs/Tag/demo/checkable.js +1 -0
  81. package/dist/cjs/Tag/tag.js +1 -1
  82. package/dist/cjs/TextArea/style/index.less +0 -17
  83. package/dist/cjs/Trigger/trigger.js +1 -1
  84. package/dist/cjs/hooks/useEvent.js +4 -1
  85. package/dist/cjs/style/color.css +1 -1
  86. package/dist/cjs/style/size.css +11 -2
  87. package/dist/cjs/style/themes.css +1 -1
  88. package/dist/cjs/style/variables.css +13 -4
  89. package/dist/cjs/version.d.ts +1 -1
  90. package/dist/cjs/version.js +1 -1
  91. package/dist/esm/Button/button.d.ts +1 -1
  92. package/dist/esm/CSV/download.d.ts +1 -1
  93. package/dist/esm/Carousel/carousel.d.ts +2 -2
  94. package/dist/esm/Carousel/carousel.js +5 -1
  95. package/dist/esm/Carousel/interface.d.ts +5 -0
  96. package/dist/esm/Cascader/cascader.js +49 -56
  97. package/dist/esm/Cascader/interface.d.ts +19 -2
  98. package/dist/esm/Cascader/node.js +8 -11
  99. package/dist/esm/Cascader/search-list.js +2 -1
  100. package/dist/esm/Cascader/utils/index.d.ts +58 -14
  101. package/dist/esm/Cascader/utils/index.js +124 -75
  102. package/dist/esm/Drawer/style/index.less +4 -0
  103. package/dist/esm/FloatButton/float-button.d.ts +1 -1
  104. package/dist/esm/Form/demo/basic.js +4 -2
  105. package/dist/esm/Form/style/index.less +15 -0
  106. package/dist/esm/Input/style/index.less +19 -17
  107. package/dist/esm/InputNumber/style/index.less +0 -29
  108. package/dist/esm/PickerPanel/interface.d.ts +44 -2
  109. package/dist/esm/PickerPanel/panels/DatePanel/DateBody.d.ts +2 -1
  110. package/dist/esm/PickerPanel/panels/DatePanel/DateHeader.d.ts +2 -1
  111. package/dist/esm/PickerPanel/panels/DatePanel/DateHeader.js +1 -1
  112. package/dist/esm/PickerPanel/panels/DatePanel/index.d.ts +2 -1
  113. package/dist/esm/PickerPanel/panels/DateTimePanel/index.d.ts +7 -1
  114. package/dist/esm/PickerPanel/panels/DateTimePanel/index.js +11 -7
  115. package/dist/esm/PickerPanel/panels/DecadePanel/DecadeBody.d.ts +2 -1
  116. package/dist/esm/PickerPanel/panels/DecadePanel/DecadeBody.js +2 -1
  117. package/dist/esm/PickerPanel/panels/DecadePanel/DecadeHeader.d.ts +2 -1
  118. package/dist/esm/PickerPanel/panels/DecadePanel/DecadeHeader.js +2 -1
  119. package/dist/esm/PickerPanel/panels/DecadePanel/index.d.ts +2 -1
  120. package/dist/esm/PickerPanel/panels/DecadePanel/index.js +1 -1
  121. package/dist/esm/PickerPanel/panels/Header.d.ts +13 -1
  122. package/dist/esm/PickerPanel/panels/MonthPanel/MonthBody.d.ts +2 -1
  123. package/dist/esm/PickerPanel/panels/MonthPanel/MonthHeader.d.ts +2 -1
  124. package/dist/esm/PickerPanel/panels/MonthPanel/MonthHeader.js +2 -1
  125. package/dist/esm/PickerPanel/panels/MonthPanel/index.d.ts +2 -1
  126. package/dist/esm/PickerPanel/panels/MonthPanel/index.js +1 -1
  127. package/dist/esm/PickerPanel/panels/PanelBody.d.ts +21 -1
  128. package/dist/esm/PickerPanel/panels/PanelBody.js +2 -4
  129. package/dist/esm/PickerPanel/panels/QuarterPanel/QuarterBody.d.ts +2 -1
  130. package/dist/esm/PickerPanel/panels/QuarterPanel/QuarterHeader.d.ts +2 -1
  131. package/dist/esm/PickerPanel/panels/QuarterPanel/index.d.ts +2 -1
  132. package/dist/esm/PickerPanel/panels/RangePanel/index.d.ts +2 -1
  133. package/dist/esm/PickerPanel/panels/RangePanel/index.js +2 -2
  134. package/dist/esm/PickerPanel/panels/RangePanel/interface.d.ts +5 -5
  135. package/dist/esm/PickerPanel/panels/TimePanel/TimeBody.d.ts +17 -1
  136. package/dist/esm/PickerPanel/panels/TimePanel/TimeCell.d.ts +7 -1
  137. package/dist/esm/PickerPanel/panels/TimePanel/TimeCell.js +1 -1
  138. package/dist/esm/PickerPanel/panels/TimePanel/TimeColumn.d.ts +14 -1
  139. package/dist/esm/PickerPanel/panels/TimePanel/TimeColumn.js +1 -1
  140. package/dist/esm/PickerPanel/panels/TimePanel/TimeHeader.d.ts +4 -1
  141. package/dist/esm/PickerPanel/panels/TimePanel/index.d.ts +9 -1
  142. package/dist/esm/PickerPanel/panels/WeekPanel/WeekBody.d.ts +2 -1
  143. package/dist/esm/PickerPanel/panels/WeekPanel/WeekHeader.d.ts +2 -1
  144. package/dist/esm/PickerPanel/panels/WeekPanel/index.d.ts +2 -1
  145. package/dist/esm/PickerPanel/panels/YearPanel/YearBody.d.ts +2 -1
  146. package/dist/esm/PickerPanel/panels/YearPanel/YearBody.js +3 -2
  147. package/dist/esm/PickerPanel/panels/YearPanel/YearHeader.d.ts +2 -1
  148. package/dist/esm/PickerPanel/panels/YearPanel/YearHeader.js +2 -1
  149. package/dist/esm/PickerPanel/panels/YearPanel/index.d.ts +2 -1
  150. package/dist/esm/PickerPanel/panels/YearPanel/index.js +1 -1
  151. package/dist/esm/PickerPanel/picker-panel.js +3 -0
  152. package/dist/esm/PickerPanel/utils/pickerUtils.d.ts +7 -7
  153. package/dist/esm/PickerPanel/utils/pickerUtils.js +4 -10
  154. package/dist/esm/Popover/style/index.less +1 -0
  155. package/dist/esm/Select/interface.d.ts +77 -0
  156. package/dist/esm/Select/option.d.ts +2 -1
  157. package/dist/esm/Select/option.js +11 -2
  158. package/dist/esm/Select/options.d.ts +3 -2
  159. package/dist/esm/Select/options.js +3 -1
  160. package/dist/esm/Select/select.js +1 -3
  161. package/dist/esm/Select/style/index.less +8 -13
  162. package/dist/esm/Selector/interface.d.ts +4 -0
  163. package/dist/esm/Selector/selector.js +4 -2
  164. package/dist/esm/Selector/style/index.less +21 -137
  165. package/dist/esm/Table/hooks/useFilter.js +1 -1
  166. package/dist/esm/Table/interface.d.ts +4 -0
  167. package/dist/esm/Table/style/index.less +2 -0
  168. package/dist/esm/Table/theader/filter.js +3 -4
  169. package/dist/esm/Tabs/demo/basic.js +4 -1
  170. package/dist/esm/Tabs/tabs.js +3 -1
  171. package/dist/esm/Tag/demo/checkable.js +1 -0
  172. package/dist/esm/Tag/tag.js +1 -1
  173. package/dist/esm/TextArea/style/index.less +0 -17
  174. package/dist/esm/Trigger/trigger.js +1 -1
  175. package/dist/esm/style/color.css +1 -1
  176. package/dist/esm/style/size.css +11 -2
  177. package/dist/esm/style/themes.css +1 -1
  178. package/dist/esm/style/variables.css +13 -4
  179. package/dist/esm/version.d.ts +1 -1
  180. package/dist/esm/version.js +1 -1
  181. package/dist/umd/yee-c.min.css +2 -2
  182. package/dist/umd/yee-c.min.js +1 -1
  183. package/package.json +1 -1
  184. package/src/Carousel/carousel.tsx +14 -3
  185. package/src/Carousel/interface.ts +6 -0
  186. package/src/Cascader/cascader.tsx +68 -63
  187. package/src/Cascader/column.tsx +1 -1
  188. package/src/Cascader/interface.ts +19 -2
  189. package/src/Cascader/node.tsx +12 -7
  190. package/src/Cascader/search-list.tsx +1 -1
  191. package/src/Cascader/utils/index.ts +130 -68
  192. package/src/Drawer/style/index.less +4 -0
  193. package/src/Dropdown/dropdown.tsx +1 -1
  194. package/src/FloatButton/float-button.tsx +5 -3
  195. package/src/Form/demo/basic.tsx +2 -2
  196. package/src/Form/style/index.less +15 -0
  197. package/src/Input/style/index.less +19 -17
  198. package/src/InputNumber/style/index.less +0 -29
  199. package/src/PickerPanel/interface.ts +43 -2
  200. package/src/PickerPanel/panels/DatePanel/DateBody.tsx +2 -1
  201. package/src/PickerPanel/panels/DatePanel/DateHeader.tsx +3 -2
  202. package/src/PickerPanel/panels/DatePanel/index.tsx +2 -1
  203. package/src/PickerPanel/panels/DateTimePanel/index.tsx +12 -5
  204. package/src/PickerPanel/panels/DecadePanel/DecadeBody.tsx +3 -2
  205. package/src/PickerPanel/panels/DecadePanel/DecadeHeader.tsx +3 -2
  206. package/src/PickerPanel/panels/DecadePanel/index.tsx +3 -2
  207. package/src/PickerPanel/panels/Header.tsx +14 -1
  208. package/src/PickerPanel/panels/MonthPanel/MonthBody.tsx +2 -1
  209. package/src/PickerPanel/panels/MonthPanel/MonthHeader.tsx +3 -2
  210. package/src/PickerPanel/panels/MonthPanel/index.tsx +3 -2
  211. package/src/PickerPanel/panels/PanelBody.tsx +27 -5
  212. package/src/PickerPanel/panels/QuarterPanel/QuarterBody.tsx +2 -1
  213. package/src/PickerPanel/panels/QuarterPanel/QuarterHeader.tsx +2 -1
  214. package/src/PickerPanel/panels/QuarterPanel/index.tsx +2 -1
  215. package/src/PickerPanel/panels/RangePanel/index.tsx +11 -9
  216. package/src/PickerPanel/panels/RangePanel/interface.ts +5 -5
  217. package/src/PickerPanel/panels/TimePanel/TimeBody.tsx +21 -5
  218. package/src/PickerPanel/panels/TimePanel/TimeCell.tsx +9 -2
  219. package/src/PickerPanel/panels/TimePanel/TimeColumn.tsx +15 -2
  220. package/src/PickerPanel/panels/TimePanel/TimeHeader.tsx +5 -1
  221. package/src/PickerPanel/panels/TimePanel/index.tsx +10 -1
  222. package/src/PickerPanel/panels/WeekPanel/WeekBody.tsx +2 -1
  223. package/src/PickerPanel/panels/WeekPanel/WeekHeader.tsx +2 -1
  224. package/src/PickerPanel/panels/WeekPanel/index.tsx +2 -1
  225. package/src/PickerPanel/panels/YearPanel/YearBody.tsx +4 -3
  226. package/src/PickerPanel/panels/YearPanel/YearHeader.tsx +9 -3
  227. package/src/PickerPanel/panels/YearPanel/index.tsx +3 -2
  228. package/src/PickerPanel/picker-panel.tsx +5 -3
  229. package/src/PickerPanel/utils/pickerUtils.ts +17 -8
  230. package/src/Popover/style/index.less +1 -0
  231. package/src/Select/interface.ts +87 -0
  232. package/src/Select/option.tsx +13 -4
  233. package/src/Select/options.tsx +49 -43
  234. package/src/Select/select.tsx +5 -2
  235. package/src/Select/style/index.less +8 -13
  236. package/src/Selector/interface.ts +4 -0
  237. package/src/Selector/selector.tsx +2 -0
  238. package/src/Selector/style/index.less +21 -137
  239. package/src/Splitter/hooks/useMove.ts +2 -2
  240. package/src/Table/hooks/useFilter.ts +1 -1
  241. package/src/Table/interface.ts +4 -0
  242. package/src/Table/style/index.less +2 -0
  243. package/src/Table/theader/filter.tsx +2 -2
  244. package/src/Tabs/demo/basic.tsx +7 -1
  245. package/src/Tabs/tabs.tsx +3 -2
  246. package/src/Tag/demo/checkable.tsx +1 -0
  247. package/src/Tag/tag.tsx +1 -1
  248. package/src/TextArea/style/index.less +0 -17
  249. package/src/Trigger/trigger.tsx +1 -1
  250. package/src/hooks/useEvent.ts +7 -4
  251. package/src/hooks/useMergedState.ts +6 -4
  252. package/src/style/color.css +1 -1
  253. package/src/style/size.css +11 -2
  254. package/src/version.ts +1 -1
@@ -105,3 +105,90 @@ export interface SelectProps extends DataAttributeProps {
105
105
  */
106
106
  onFilter?: (value: string, options: Array<Option>) => Array<Option>;
107
107
  }
108
+
109
+ /**
110
+ * Props for the internal Option component (renders a single dropdown option).
111
+ */
112
+ export interface OptionProps {
113
+ /**
114
+ * Display label
115
+ */
116
+ label: string;
117
+ /**
118
+ * Value
119
+ */
120
+ value: string | number;
121
+ /**
122
+ * Whether disabled
123
+ */
124
+ disabled?: boolean;
125
+ /**
126
+ * Native title attribute
127
+ */
128
+ title?: string;
129
+ /**
130
+ * Test id forwarded to the option element
131
+ */
132
+ dataTestId?: string;
133
+ }
134
+
135
+ /**
136
+ * Context value shared between Options and each Option.
137
+ */
138
+ export interface OptionsContextValue {
139
+ prefixCls: string;
140
+ selectedKeys: Array<string | number>;
141
+ focusedKey: string | number;
142
+ multiple: boolean;
143
+ onSelect: (
144
+ key: string | number,
145
+ e?: React.MouseEvent | React.KeyboardEvent,
146
+ ) => void;
147
+ }
148
+
149
+ /**
150
+ * Props for the internal Options (popup list) component.
151
+ */
152
+ export interface OptionsProps
153
+ extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {
154
+ /**
155
+ * Custom class name prefix
156
+ */
157
+ prefixCls: string;
158
+ /**
159
+ * Dropdown options
160
+ */
161
+ options: Array<Option>;
162
+ /**
163
+ * Popup container class name
164
+ */
165
+ popupClassName?: string;
166
+ /**
167
+ * Popup container inline style
168
+ */
169
+ popupStyle?: React.CSSProperties;
170
+ /**
171
+ * Selected option values
172
+ */
173
+ selectedKeys: Array<string | number>;
174
+ /**
175
+ * Currently focused option value
176
+ */
177
+ focusedKey: string | number;
178
+ /**
179
+ * Test id prefix used to generate each option's test id.
180
+ * Accepts any `data-*` attribute value (see DataAttributeProps).
181
+ */
182
+ dataTestId?: string | number | boolean;
183
+ /**
184
+ * Whether multiple selection mode is active
185
+ */
186
+ multiple: boolean;
187
+ /**
188
+ * Callback when an option is selected
189
+ */
190
+ onSelect: (
191
+ key: string | number,
192
+ e?: React.MouseEvent | React.KeyboardEvent,
193
+ ) => void;
194
+ }
@@ -1,11 +1,13 @@
1
1
  import clsx from 'clsx';
2
+ import { Check } from 'lucide-react';
2
3
  import React, { useContext } from 'react';
3
4
 
5
+ import type { OptionProps } from './interface';
4
6
  import { OptionsCtx } from './options';
5
7
 
6
- const Option = (props: any) => {
8
+ const Option = (props: OptionProps) => {
7
9
  const { label, value, disabled, title, dataTestId } = props;
8
- const { prefixCls, selectedKeys, focusedKey, onSelect } =
10
+ const { prefixCls, selectedKeys, focusedKey, multiple, onSelect } =
9
11
  useContext(OptionsCtx);
10
12
 
11
13
  const handleClick = (e: React.MouseEvent | React.KeyboardEvent) => {
@@ -20,10 +22,12 @@ const Option = (props: any) => {
20
22
  ? label
21
23
  : undefined;
22
24
 
25
+ const selected = selectedKeys.includes(value);
26
+
23
27
  return (
24
28
  <div
25
29
  className={clsx(`${prefixCls}-option`, {
26
- [`${prefixCls}-option-selected`]: selectedKeys.includes(value),
30
+ [`${prefixCls}-option-selected`]: selected,
27
31
  [`${prefixCls}-option-focused`]: focusedKey === value,
28
32
  [`${prefixCls}-option-disabled`]: disabled,
29
33
  })}
@@ -39,7 +43,12 @@ const Option = (props: any) => {
39
43
  title={htmlTitle}
40
44
  data-testid={dataTestId}
41
45
  >
42
- {label}
46
+ <div className={`${prefixCls}-option-content`}>{label}</div>
47
+ {multiple && selected && (
48
+ <span className={`${prefixCls}-option-state`}>
49
+ <Check size={16} />
50
+ </span>
51
+ )}
43
52
  </div>
44
53
  );
45
54
  };
@@ -1,54 +1,60 @@
1
1
  import clsx from 'clsx';
2
2
  import React, { createContext, forwardRef, useRef } from 'react';
3
3
  import { useLocale } from '../locale';
4
+ import type { OptionsContextValue, OptionsProps } from './interface';
4
5
  import Option from './option';
5
6
 
6
- export const OptionsCtx = createContext({} as any);
7
+ export const OptionsCtx = createContext<OptionsContextValue>(
8
+ {} as OptionsContextValue,
9
+ );
7
10
 
8
- const Options = forwardRef((props: any, ref: React.Ref<HTMLDivElement>) => {
9
- const { locale } = useLocale();
10
- const { select } = locale;
11
+ const Options = forwardRef<HTMLDivElement, OptionsProps>(
12
+ (props, ref: React.Ref<HTMLDivElement>) => {
13
+ const { locale } = useLocale();
14
+ const { select } = locale;
11
15
 
12
- const {
13
- prefixCls,
14
- options,
15
- popupClassName,
16
- popupStyle,
17
- selectedKeys,
18
- focusedKey,
19
- dataTestId,
20
- onSelect,
21
- ...rest
22
- } = props;
16
+ const {
17
+ prefixCls,
18
+ options,
19
+ popupClassName,
20
+ popupStyle,
21
+ selectedKeys,
22
+ focusedKey,
23
+ dataTestId,
24
+ multiple,
25
+ onSelect,
26
+ ...rest
27
+ } = props;
23
28
 
24
- // eslint-disable-next-line react-hooks/rules-of-hooks
25
- const componentRef = ref || useRef<HTMLDivElement>(null);
29
+ // eslint-disable-next-line react-hooks/rules-of-hooks
30
+ const componentRef = ref || useRef<HTMLDivElement>(null);
26
31
 
27
- return (
28
- <div
29
- {...rest}
30
- className={clsx(`${prefixCls}-popup`, popupClassName)}
31
- style={popupStyle}
32
- ref={componentRef}
33
- tabIndex={-1}
34
- >
35
- {options.length === 0 ? (
36
- <div className={`${prefixCls}-empty`}>{select.noData}</div>
37
- ) : (
38
- <OptionsCtx.Provider
39
- value={{ prefixCls, selectedKeys, focusedKey, onSelect }}
40
- >
41
- {options.map((option: any, index: number) => (
42
- <Option
43
- {...option}
44
- key={option.value}
45
- dataTestId={`${dataTestId}-${index}`}
46
- />
47
- ))}
48
- </OptionsCtx.Provider>
49
- )}
50
- </div>
51
- );
52
- });
32
+ return (
33
+ <div
34
+ {...rest}
35
+ className={clsx(`${prefixCls}-popup`, popupClassName)}
36
+ style={popupStyle}
37
+ ref={componentRef}
38
+ tabIndex={-1}
39
+ >
40
+ {options.length === 0 ? (
41
+ <div className={`${prefixCls}-empty`}>{select.noData}</div>
42
+ ) : (
43
+ <OptionsCtx.Provider
44
+ value={{ prefixCls, selectedKeys, focusedKey, multiple, onSelect }}
45
+ >
46
+ {options.map((option, index: number) => (
47
+ <Option
48
+ {...option}
49
+ key={option.value}
50
+ dataTestId={`${dataTestId}-${index}`}
51
+ />
52
+ ))}
53
+ </OptionsCtx.Provider>
54
+ )}
55
+ </div>
56
+ );
57
+ },
58
+ );
53
59
 
54
60
  export default Options;
@@ -65,7 +65,10 @@ const Select = (baseprops: SelectProps) => {
65
65
  return options.find((opt) => opt.value === keys);
66
66
  };
67
67
 
68
- const handleSelect = (key: string | number, e?: React.MouseEvent) => {
68
+ const handleSelect = (
69
+ key: string | number,
70
+ e?: React.MouseEvent | React.KeyboardEvent,
71
+ ) => {
69
72
  let keys;
70
73
  if (single) {
71
74
  setMergedValue([key]);
@@ -137,12 +140,12 @@ const Select = (baseprops: SelectProps) => {
137
140
  const popup = (
138
141
  <Options
139
142
  prefixCls={prefixCls}
143
+ multiple={mode === 'multiple' || mode === 'tags'}
140
144
  options={filteredOpts}
141
145
  focusedKey={focusedKey}
142
146
  selectedKeys={mergedValue}
143
147
  dataTestId={rest['data-testid']}
144
148
  onSelect={handleSelect}
145
- onClose={() => setOpen(false)}
146
149
  ref={popupRef}
147
150
  />
148
151
  );
@@ -9,12 +9,20 @@
9
9
  }
10
10
 
11
11
  &-option {
12
+ display: flex;
12
13
  padding: var(--yee-select-option-padding);
13
14
  overflow: hidden;
14
15
  white-space: nowrap;
15
16
  text-overflow: ellipsis;
16
17
  cursor: pointer;
17
18
 
19
+ &-content {
20
+ flex: 1;
21
+ overflow: hidden;
22
+ white-space: nowrap;
23
+ text-overflow: ellipsis;
24
+ }
25
+
18
26
  &:not(&-disabled):hover {
19
27
  background-color: var(--yee-select-option-hover-bg-color);
20
28
  }
@@ -33,16 +41,3 @@
33
41
  padding: var(--yee-select-option-padding);
34
42
  }
35
43
  }
36
-
37
- // form error status
38
- .yee-form-item-error {
39
- @{pls} {
40
- border-color: var(--yee-error-color);
41
- }
42
- }
43
-
44
- .yee-form-item-warning {
45
- @{pls} {
46
- border-color: var(--yee-warning-color);
47
- }
48
- }
@@ -39,6 +39,10 @@ export interface PureSelectorProps {
39
39
  * In multiple or tags mode, the maximum number of selectable items
40
40
  */
41
41
  maxCount?: number;
42
+ /**
43
+ * size
44
+ * */
45
+ size?: 'small' | 'default' | 'large';
42
46
  /**
43
47
  * Selection mode
44
48
  */
@@ -44,6 +44,7 @@ const Selector = React.forwardRef(
44
44
  value,
45
45
  open,
46
46
  loading,
47
+ size = 'default',
47
48
  onSearch,
48
49
  onRemove,
49
50
  onClear,
@@ -104,6 +105,7 @@ const Selector = React.forwardRef(
104
105
 
105
106
  const cls = clsx(
106
107
  prefixCls,
108
+ [`${prefixCls}-${size}`],
107
109
  [`${prefixCls}-searchable`],
108
110
  [`${prefixCls}-${mode || 'single'}`],
109
111
  {
@@ -5,10 +5,17 @@
5
5
  box-sizing: border-box;
6
6
  width: 100%;
7
7
  padding: var(--yee-selector-padding);
8
- border: var(--yee-selector-border-width) solid
9
- var(--yee-selector-border-color);
8
+ border: var(--yee-selector-border-width) solid var(--yee-input-border-color);
10
9
  border-radius: var(--yee-selector-border-radius);
11
10
 
11
+ &-small {
12
+ padding: var(--yee-selector-small-padding);
13
+ }
14
+
15
+ &-large {
16
+ padding: var(--yee-selector-large-padding);
17
+ }
18
+
12
19
  &:focus-visible {
13
20
  outline: none;
14
21
  }
@@ -31,6 +38,13 @@
31
38
  line-height: var(--yee-selector-input-line-height);
32
39
  }
33
40
 
41
+ @{pls}-selection-item {
42
+ white-space: nowrap;
43
+ overflow: hidden;
44
+ text-overflow: ellipsis;
45
+ padding-right: 16px;
46
+ }
47
+
34
48
  &:focus-within,
35
49
  &:focus {
36
50
  @{pls}-input-wrapper {
@@ -39,6 +53,10 @@
39
53
 
40
54
  &.with-input-value {
41
55
  opacity: 1;
56
+
57
+ & + @{pls}-selection-item {
58
+ opacity: 0;
59
+ }
42
60
  }
43
61
  }
44
62
 
@@ -126,7 +144,7 @@
126
144
 
127
145
  &:not(@{pls}-disabled) {
128
146
  &:hover {
129
- border-color: var(--yee-selector-hover-border-color);
147
+ border-color: var(--yee-input-hover-border-color);
130
148
  }
131
149
  }
132
150
 
@@ -187,137 +205,3 @@
187
205
  }
188
206
  }
189
207
  }
190
-
191
- .yee-tags-searchable {
192
- cursor: text;
193
-
194
- .yee-tags-input-wrapper {
195
- width: 100%;
196
- padding: 0;
197
- border: none;
198
- outline: none;
199
-
200
- &:focus {
201
- border: none;
202
- box-shadow: none;
203
- }
204
- }
205
-
206
- .yee-tags-icon {
207
- width: auto;
208
- }
209
- }
210
-
211
- .yee-tags-single-mode {
212
- height: var(--yee-tags-height);
213
-
214
- .yee-tags-input-container {
215
- position: absolute;
216
- z-index: -1;
217
- width: 100%;
218
- font-size: var(--yee-tags-input-font-size);
219
- line-height: var(--yee-tags-input-line-height);
220
-
221
- input {
222
- width: 100%;
223
- }
224
- }
225
-
226
- &.yee-tags-searchable {
227
- .yee-tags-single-option {
228
- width: 100%;
229
- }
230
-
231
- .yee-tags-container {
232
- &:focus-within,
233
- &:focus {
234
- .yee-tags-input-container {
235
- z-index: 1;
236
- opacity: var(--yee-tags-input-focus-opacity);
237
-
238
- &.has-value {
239
- opacity: 1;
240
-
241
- + .yee-tags-single-option {
242
- display: none;
243
- }
244
- }
245
- }
246
-
247
- .yee-tags-single-option {
248
- opacity: var(--yee-tags-single-option-focus-opacity);
249
- }
250
- }
251
- }
252
- }
253
- }
254
-
255
- .yee-tags-multi-mode {
256
- height: auto;
257
- min-height: var(--yee-tags-multi-min-height);
258
-
259
- &.yee-tags-searchable {
260
- .yee-tag {
261
- max-width: var(--yee-tags-multi-tag-max-width);
262
- height: var(--yee-tags-multi-tag-height);
263
- }
264
- }
265
-
266
- .yee-tags-container {
267
- flex-wrap: wrap;
268
- }
269
-
270
- .yee-tags-input-container {
271
- display: inline-grid;
272
- // color: var(--yee-tags-input-container-font-color);
273
- flex: 1 1 auto;
274
- grid-area: 1 / 1 / 2 / 3;
275
- grid-template-columns: 0 min-content;
276
- box-sizing: border-box;
277
- height: var(--yee-tags-multi-input-height);
278
-
279
- &::after {
280
- grid-area: 1 / 2 / auto / auto;
281
- min-width: var(--yee-tags-multi-input-after-min-width);
282
- margin: 0;
283
- padding: 0;
284
- font: inherit;
285
- white-space: pre;
286
- border: 0;
287
- outline: 0;
288
- visibility: hidden;
289
- content: attr(data-value) ' ';
290
- }
291
-
292
- & > input {
293
- grid-area: 1 / 2 / auto / auto;
294
- width: 100%;
295
- min-width: var(--yee-tags-multi-input-min-width);
296
- height: var(--yee-tags-multi-input-height);
297
- margin: 0;
298
- padding: 0;
299
- font: inherit;
300
- background-color: transparent;
301
- border: 0;
302
- outline: 0;
303
- opacity: 1;
304
- }
305
- }
306
- }
307
-
308
- // form error status
309
- .yee-form-item-error {
310
- @{pls} {
311
- border-color: var(--yee-error-color);
312
-
313
- &:hover {
314
- border-color: var(--yee-error-color-hover);
315
- }
316
- }
317
- }
318
-
319
- .yee-form-item-warning {
320
- @{pls} {
321
- border-color: var(--yee-warning-color);
322
- }
323
- }
@@ -15,13 +15,13 @@ export default function useMove(
15
15
  React.useEffect(() => {
16
16
  if (!handler.current) return;
17
17
  const ele = handler.current as HTMLElement;
18
- const onMouseDown = (e: any) => {
18
+ const onMouseDown = (e: MouseEvent) => {
19
19
  e.preventDefault();
20
20
  let x = e.pageX;
21
21
  let y = e.pageY;
22
22
  setMoving(true);
23
23
 
24
- const onMouseMove = debounce((e: any) => {
24
+ const onMouseMove = debounce((e: MouseEvent) => {
25
25
  document.body.style.userSelect = 'none';
26
26
  document.body.style.cursor =
27
27
  direction === 'horizontal' ? 'col-resize' : 'row-resize';
@@ -18,7 +18,7 @@ export default function useFilter({
18
18
  const [filterRecords, setFilterRecords] = useState<Array<FilterRecord>>([]);
19
19
  const onFilter = ({ value, dataIndex }: FilterOptions) => {
20
20
  let newFilterMap = [...filterRecords];
21
- if (!value) {
21
+ if (!value || (Array.isArray(value) && !value.length)) {
22
22
  newFilterMap = newFilterMap.filter(
23
23
  (item) => item.dataIndex !== dataIndex,
24
24
  );
@@ -520,6 +520,10 @@ export interface TableProps
520
520
  * Row class name, unlike classNames, this prop can be set dynamically via a function
521
521
  */
522
522
  rowClassName?: (record: object) => string;
523
+ /**
524
+ * Row style, unlike styles, this prop can be set dynamically via a function
525
+ */
526
+ rowStyle?: (record: object) => React.CSSProperties;
523
527
  /**
524
528
  * Pagination config
525
529
  */
@@ -47,6 +47,8 @@
47
47
  }
48
48
 
49
49
  &-filter {
50
+ padding: var(--yee-table-filter-popup-padding);
51
+
50
52
  &-trigger {
51
53
  display: inline-flex;
52
54
  cursor: pointer;
@@ -175,8 +175,7 @@ const HeaderFilter = React.memo((props: any) => {
175
175
  <Search size={14} strokeWidth={1.5} />
176
176
  )
177
177
  }
178
- // variant={selectNodes.length ? 'filled' : undefined}
179
- color="info"
178
+ variant={selectNodes.length ? 'filled' : undefined}
180
179
  type="text"
181
180
  size="small"
182
181
  />
@@ -188,6 +187,7 @@ const HeaderFilter = React.memo((props: any) => {
188
187
  <Popover
189
188
  trigger="click"
190
189
  placement="bottomRight"
190
+ className={clsx(`${prefixCls}-filter`)}
191
191
  content={popup}
192
192
  arrow
193
193
  open={open}
@@ -90,5 +90,11 @@ export default () => {
90
90
  },
91
91
  ];
92
92
 
93
- return <Tabs defaultActiveKey="1" items={items} />;
93
+ return (
94
+ <Tabs
95
+ defaultActiveKey="1"
96
+ items={items}
97
+ onChange={(key) => console.log(key)}
98
+ />
99
+ );
94
100
  };
package/src/Tabs/tabs.tsx CHANGED
@@ -91,9 +91,10 @@ const Tabs: FC<TabsProps> = (baseprops) => {
91
91
  if (result === false) {
92
92
  return;
93
93
  }
94
-
95
94
  setMergedActiveKey(key);
96
- onChange?.(key);
95
+ if (key !== mergedActiveKey) {
96
+ onChange?.(key);
97
+ }
97
98
  };
98
99
 
99
100
  const contextValue = useMemo(
@@ -8,6 +8,7 @@ export default () => {
8
8
  <Space>
9
9
  <Tag
10
10
  checkable
11
+ variant="outlined"
11
12
  checked={checked}
12
13
  onChange={(checked) => setChecked(checked)}
13
14
  >
package/src/Tag/tag.tsx CHANGED
@@ -38,7 +38,6 @@ const Tag = forwardRef(
38
38
 
39
39
  const cls = clsx(
40
40
  prefixCls,
41
- [`${prefixCls}-${variant}`],
42
41
  {
43
42
  [`${prefixCls}-${status}`]: status,
44
43
  [`${prefixCls}-dashed`]: dashed,
@@ -46,6 +45,7 @@ const Tag = forwardRef(
46
45
  [`${prefixCls}-${size}`]: size,
47
46
  [`${prefixCls}-checkable`]: checkable,
48
47
  },
48
+ [`${prefixCls}-${variant}`],
49
49
  className,
50
50
  );
51
51
 
@@ -98,20 +98,3 @@
98
98
  cursor: not-allowed;
99
99
  }
100
100
  }
101
-
102
- // form error status
103
- .yee-form-item-error {
104
- @{pls} {
105
- border-color: var(--yee-error-color);
106
-
107
- &:hover {
108
- border-color: var(--yee-error-color-hover);
109
- }
110
- }
111
- }
112
-
113
- .yee-form-item-warning {
114
- @{pls} {
115
- border-color: var(--yee-warning-color);
116
- }
117
- }
@@ -135,7 +135,7 @@ const Trigger: FC<TriggerProps> = (baseprops) => {
135
135
  return (
136
136
  <RcTrigger
137
137
  {...rest}
138
- prefixCls="yee-trigger"
138
+ prefixCls={prefixCls}
139
139
  mouseEnterDelay={mouseEnterDelay}
140
140
  mouseLeaveDelay={mouseLeaveDelay}
141
141
  arrow={arrow}