@rc-component/cascader 1.1.1 → 1.3.0

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.
package/es/Cascader.d.ts CHANGED
@@ -55,7 +55,15 @@ export interface FieldNames<OptionType extends DefaultOptionType = DefaultOption
55
55
  export type ValueType<OptionType extends DefaultOptionType = DefaultOptionType, ValueField extends keyof OptionType = keyof OptionType> = keyof OptionType extends ValueField ? unknown extends OptionType['value'] ? OptionType[ValueField] : OptionType['value'] : OptionType[ValueField];
56
56
  export type GetValueType<OptionType extends DefaultOptionType = DefaultOptionType, ValueField extends keyof OptionType = keyof OptionType, Multiple extends boolean | React.ReactNode = false> = false extends Multiple ? ValueType<Required<OptionType>, ValueField>[] : ValueType<Required<OptionType>, ValueField>[][];
57
57
  export type GetOptionType<OptionType extends DefaultOptionType = DefaultOptionType, Multiple extends boolean | React.ReactNode = false> = false extends Multiple ? OptionType[] : OptionType[][];
58
+ type SemanticName = 'input' | 'prefix' | 'suffix';
59
+ type PopupSemantic = 'list' | 'listItem';
58
60
  export interface CascaderProps<OptionType extends DefaultOptionType = DefaultOptionType, ValueField extends keyof OptionType = keyof OptionType, Multiple extends boolean | React.ReactNode = false> extends BaseCascaderProps<OptionType, ValueField> {
61
+ styles?: Partial<Record<SemanticName, React.CSSProperties>> & {
62
+ popup?: Partial<Record<PopupSemantic, React.CSSProperties>>;
63
+ };
64
+ classNames?: Partial<Record<SemanticName, string>> & {
65
+ popup?: Partial<Record<PopupSemantic, string>>;
66
+ };
59
67
  checkable?: Multiple;
60
68
  value?: GetValueType<OptionType, ValueField, Multiple>;
61
69
  defaultValue?: GetValueType<OptionType, ValueField, Multiple>;
package/es/Cascader.js CHANGED
@@ -45,6 +45,8 @@ const Cascader = /*#__PURE__*/React.forwardRef((props, ref) => {
45
45
  popupClassName,
46
46
  popupMenuColumnStyle,
47
47
  popupStyle: customPopupStyle,
48
+ classNames,
49
+ styles,
48
50
  placement,
49
51
  onPopupVisibleChange,
50
52
  // Icon
@@ -147,6 +149,8 @@ const Cascader = /*#__PURE__*/React.forwardRef((props, ref) => {
147
149
 
148
150
  // ========================== Context ===========================
149
151
  const cascaderContext = React.useMemo(() => ({
152
+ classNames,
153
+ styles,
150
154
  options: mergedOptions,
151
155
  fieldNames: mergedFieldNames,
152
156
  values: checkedValues,
@@ -184,6 +188,16 @@ const Cascader = /*#__PURE__*/React.forwardRef((props, ref) => {
184
188
  prefixCls: prefixCls,
185
189
  autoClearSearchValue: autoClearSearchValue,
186
190
  popupMatchSelectWidth: popupMatchSelectWidth,
191
+ classNames: {
192
+ prefix: classNames?.prefix,
193
+ suffix: classNames?.suffix,
194
+ input: classNames?.input
195
+ },
196
+ styles: {
197
+ prefix: styles?.prefix,
198
+ suffix: styles?.suffix,
199
+ input: styles?.input
200
+ },
187
201
  popupStyle: {
188
202
  ...popupStyle,
189
203
  ...customPopupStyle
@@ -1,5 +1,7 @@
1
- import classNames from 'classnames';
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+ import cls from 'classnames';
2
3
  import * as React from 'react';
4
+ import pickAttrs from "rc-util/es/pickAttrs";
3
5
  import CascaderContext from "../context";
4
6
  import { SEARCH_MARK } from "../hooks/useSearchOptions";
5
7
  import { isLeaf, toPathKey } from "../utils/commonUtil";
@@ -30,7 +32,9 @@ export default function Column({
30
32
  expandIcon,
31
33
  loadingIcon,
32
34
  popupMenuColumnStyle,
33
- optionRender
35
+ optionRender,
36
+ classNames,
37
+ styles
34
38
  } = React.useContext(CascaderContext);
35
39
  const hoverOpen = expandTrigger === 'hover';
36
40
  const isOptionDisabled = disabled => propsDisabled || disabled;
@@ -85,7 +89,8 @@ export default function Column({
85
89
 
86
90
  // ============================ Render ============================
87
91
  return /*#__PURE__*/React.createElement("ul", {
88
- className: menuPrefixCls,
92
+ className: cls(menuPrefixCls, classNames?.popup?.list),
93
+ style: styles?.popup?.list,
89
94
  ref: menuRef,
90
95
  role: "menu"
91
96
  }, optionInfoList.map(({
@@ -101,6 +106,10 @@ export default function Column({
101
106
  fullPathKey,
102
107
  disableCheckbox
103
108
  }) => {
109
+ const ariaProps = pickAttrs(option, {
110
+ aria: true,
111
+ data: true
112
+ });
104
113
  // >>>>> Open
105
114
  const triggerOpenPath = () => {
106
115
  if (isOptionDisabled(disabled)) {
@@ -129,15 +138,19 @@ export default function Column({
129
138
  }
130
139
 
131
140
  // >>>>> Render
132
- return /*#__PURE__*/React.createElement("li", {
133
- key: fullPathKey,
134
- className: classNames(menuItemPrefixCls, {
141
+ return /*#__PURE__*/React.createElement("li", _extends({
142
+ key: fullPathKey
143
+ }, ariaProps, {
144
+ className: cls(menuItemPrefixCls, classNames?.popup?.listItem, {
135
145
  [`${menuItemPrefixCls}-expand`]: !isMergedLeaf,
136
146
  [`${menuItemPrefixCls}-active`]: activeValue === value || activeValue === fullPathKey,
137
147
  [`${menuItemPrefixCls}-disabled`]: isOptionDisabled(disabled),
138
148
  [`${menuItemPrefixCls}-loading`]: isLoading
139
149
  }),
140
- style: popupMenuColumnStyle,
150
+ style: {
151
+ ...popupMenuColumnStyle,
152
+ ...styles?.popup?.listItem
153
+ },
141
154
  role: "menuitemcheckbox",
142
155
  title: title,
143
156
  "aria-checked": checked,
@@ -165,7 +178,7 @@ export default function Column({
165
178
  // Prevent selector from blurring
166
179
  e.preventDefault();
167
180
  }
168
- }, multiple && /*#__PURE__*/React.createElement(Checkbox, {
181
+ }), multiple && /*#__PURE__*/React.createElement(Checkbox, {
169
182
  prefixCls: `${prefixCls}-checkbox`,
170
183
  checked: checked,
171
184
  halfChecked: halfChecked,
package/es/context.d.ts CHANGED
@@ -16,6 +16,8 @@ export interface CascaderContextProps {
16
16
  loadingIcon?: React.ReactNode;
17
17
  popupMenuColumnStyle?: React.CSSProperties;
18
18
  optionRender?: CascaderProps['optionRender'];
19
+ classNames?: CascaderProps['classNames'];
20
+ styles?: CascaderProps['styles'];
19
21
  }
20
22
  declare const CascaderContext: React.Context<CascaderContextProps>;
21
23
  export default CascaderContext;
package/lib/Cascader.d.ts CHANGED
@@ -55,7 +55,15 @@ export interface FieldNames<OptionType extends DefaultOptionType = DefaultOption
55
55
  export type ValueType<OptionType extends DefaultOptionType = DefaultOptionType, ValueField extends keyof OptionType = keyof OptionType> = keyof OptionType extends ValueField ? unknown extends OptionType['value'] ? OptionType[ValueField] : OptionType['value'] : OptionType[ValueField];
56
56
  export type GetValueType<OptionType extends DefaultOptionType = DefaultOptionType, ValueField extends keyof OptionType = keyof OptionType, Multiple extends boolean | React.ReactNode = false> = false extends Multiple ? ValueType<Required<OptionType>, ValueField>[] : ValueType<Required<OptionType>, ValueField>[][];
57
57
  export type GetOptionType<OptionType extends DefaultOptionType = DefaultOptionType, Multiple extends boolean | React.ReactNode = false> = false extends Multiple ? OptionType[] : OptionType[][];
58
+ type SemanticName = 'input' | 'prefix' | 'suffix';
59
+ type PopupSemantic = 'list' | 'listItem';
58
60
  export interface CascaderProps<OptionType extends DefaultOptionType = DefaultOptionType, ValueField extends keyof OptionType = keyof OptionType, Multiple extends boolean | React.ReactNode = false> extends BaseCascaderProps<OptionType, ValueField> {
61
+ styles?: Partial<Record<SemanticName, React.CSSProperties>> & {
62
+ popup?: Partial<Record<PopupSemantic, React.CSSProperties>>;
63
+ };
64
+ classNames?: Partial<Record<SemanticName, string>> & {
65
+ popup?: Partial<Record<PopupSemantic, string>>;
66
+ };
59
67
  checkable?: Multiple;
60
68
  value?: GetValueType<OptionType, ValueField, Multiple>;
61
69
  defaultValue?: GetValueType<OptionType, ValueField, Multiple>;
package/lib/Cascader.js CHANGED
@@ -54,6 +54,8 @@ const Cascader = /*#__PURE__*/React.forwardRef((props, ref) => {
54
54
  popupClassName,
55
55
  popupMenuColumnStyle,
56
56
  popupStyle: customPopupStyle,
57
+ classNames,
58
+ styles,
57
59
  placement,
58
60
  onPopupVisibleChange,
59
61
  // Icon
@@ -156,6 +158,8 @@ const Cascader = /*#__PURE__*/React.forwardRef((props, ref) => {
156
158
 
157
159
  // ========================== Context ===========================
158
160
  const cascaderContext = React.useMemo(() => ({
161
+ classNames,
162
+ styles,
159
163
  options: mergedOptions,
160
164
  fieldNames: mergedFieldNames,
161
165
  values: checkedValues,
@@ -193,6 +197,16 @@ const Cascader = /*#__PURE__*/React.forwardRef((props, ref) => {
193
197
  prefixCls: prefixCls,
194
198
  autoClearSearchValue: autoClearSearchValue,
195
199
  popupMatchSelectWidth: popupMatchSelectWidth,
200
+ classNames: {
201
+ prefix: classNames?.prefix,
202
+ suffix: classNames?.suffix,
203
+ input: classNames?.input
204
+ },
205
+ styles: {
206
+ prefix: styles?.prefix,
207
+ suffix: styles?.suffix,
208
+ input: styles?.input
209
+ },
196
210
  popupStyle: {
197
211
  ...popupStyle,
198
212
  ...customPopupStyle
@@ -7,6 +7,7 @@ exports.FIX_LABEL = void 0;
7
7
  exports.default = Column;
8
8
  var _classnames = _interopRequireDefault(require("classnames"));
9
9
  var React = _interopRequireWildcard(require("react"));
10
+ var _pickAttrs = _interopRequireDefault(require("rc-util/lib/pickAttrs"));
10
11
  var _context = _interopRequireDefault(require("../context"));
11
12
  var _useSearchOptions = require("../hooks/useSearchOptions");
12
13
  var _commonUtil = require("../utils/commonUtil");
@@ -14,6 +15,7 @@ var _Checkbox = _interopRequireDefault(require("./Checkbox"));
14
15
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
15
16
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
17
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
17
19
  const FIX_LABEL = exports.FIX_LABEL = '__cascader_fix_label__';
18
20
  function Column({
19
21
  prefixCls,
@@ -40,7 +42,9 @@ function Column({
40
42
  expandIcon,
41
43
  loadingIcon,
42
44
  popupMenuColumnStyle,
43
- optionRender
45
+ optionRender,
46
+ classNames,
47
+ styles
44
48
  } = React.useContext(_context.default);
45
49
  const hoverOpen = expandTrigger === 'hover';
46
50
  const isOptionDisabled = disabled => propsDisabled || disabled;
@@ -95,7 +99,8 @@ function Column({
95
99
 
96
100
  // ============================ Render ============================
97
101
  return /*#__PURE__*/React.createElement("ul", {
98
- className: menuPrefixCls,
102
+ className: (0, _classnames.default)(menuPrefixCls, classNames?.popup?.list),
103
+ style: styles?.popup?.list,
99
104
  ref: menuRef,
100
105
  role: "menu"
101
106
  }, optionInfoList.map(({
@@ -111,6 +116,10 @@ function Column({
111
116
  fullPathKey,
112
117
  disableCheckbox
113
118
  }) => {
119
+ const ariaProps = (0, _pickAttrs.default)(option, {
120
+ aria: true,
121
+ data: true
122
+ });
114
123
  // >>>>> Open
115
124
  const triggerOpenPath = () => {
116
125
  if (isOptionDisabled(disabled)) {
@@ -139,15 +148,19 @@ function Column({
139
148
  }
140
149
 
141
150
  // >>>>> Render
142
- return /*#__PURE__*/React.createElement("li", {
143
- key: fullPathKey,
144
- className: (0, _classnames.default)(menuItemPrefixCls, {
151
+ return /*#__PURE__*/React.createElement("li", _extends({
152
+ key: fullPathKey
153
+ }, ariaProps, {
154
+ className: (0, _classnames.default)(menuItemPrefixCls, classNames?.popup?.listItem, {
145
155
  [`${menuItemPrefixCls}-expand`]: !isMergedLeaf,
146
156
  [`${menuItemPrefixCls}-active`]: activeValue === value || activeValue === fullPathKey,
147
157
  [`${menuItemPrefixCls}-disabled`]: isOptionDisabled(disabled),
148
158
  [`${menuItemPrefixCls}-loading`]: isLoading
149
159
  }),
150
- style: popupMenuColumnStyle,
160
+ style: {
161
+ ...popupMenuColumnStyle,
162
+ ...styles?.popup?.listItem
163
+ },
151
164
  role: "menuitemcheckbox",
152
165
  title: title,
153
166
  "aria-checked": checked,
@@ -175,7 +188,7 @@ function Column({
175
188
  // Prevent selector from blurring
176
189
  e.preventDefault();
177
190
  }
178
- }, multiple && /*#__PURE__*/React.createElement(_Checkbox.default, {
191
+ }), multiple && /*#__PURE__*/React.createElement(_Checkbox.default, {
179
192
  prefixCls: `${prefixCls}-checkbox`,
180
193
  checked: checked,
181
194
  halfChecked: halfChecked,
package/lib/context.d.ts CHANGED
@@ -16,6 +16,8 @@ export interface CascaderContextProps {
16
16
  loadingIcon?: React.ReactNode;
17
17
  popupMenuColumnStyle?: React.CSSProperties;
18
18
  optionRender?: CascaderProps['optionRender'];
19
+ classNames?: CascaderProps['classNames'];
20
+ styles?: CascaderProps['styles'];
19
21
  }
20
22
  declare const CascaderContext: React.Context<CascaderContextProps>;
21
23
  export default CascaderContext;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rc-component/cascader",
3
- "version": "1.1.1",
3
+ "version": "1.3.0",
4
4
  "description": "cascade select ui component for react",
5
5
  "keywords": [
6
6
  "react",
@@ -70,7 +70,7 @@
70
70
  "enzyme-to-json": "^3.2.1",
71
71
  "eslint": "^8.54.0",
72
72
  "eslint-plugin-jest": "^28.8.3",
73
- "eslint-plugin-unicorn": "^52.0.0",
73
+ "eslint-plugin-unicorn": "^56.0.1",
74
74
  "father": "^4.0.0",
75
75
  "gh-pages": "^6.1.1",
76
76
  "glob": "^7.1.6",