@king-design/react 3.0.0-beta.0 → 3.0.0-beta.1

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 (202) hide show
  1. package/__tests__/__snapshots__/Dialog.md +1 -1
  2. package/__tests__/__snapshots__/React Demos.md +461 -309
  3. package/__tests__/components/cascader.spec.tsx +53 -0
  4. package/__tests__/components/drawer.spec.tsx +67 -5
  5. package/components/button/index.d.ts +1 -1
  6. package/components/button/index.js +1 -1
  7. package/components/button/styles.js +1 -1
  8. package/components/cascader/index.d.ts +22 -11
  9. package/components/cascader/index.js +9 -12
  10. package/components/cascader/index.spec.js +81 -0
  11. package/components/cascader/index.vdt.js +10 -8
  12. package/components/cascader/styles.js +1 -1
  13. package/components/cascader/useFields.d.ts +2 -0
  14. package/components/cascader/useFields.js +18 -0
  15. package/components/cascader/useFilterable.d.ts +2 -1
  16. package/components/cascader/useFilterable.js +17 -6
  17. package/components/cascader/useLabel.d.ts +2 -1
  18. package/components/cascader/useLabel.js +4 -4
  19. package/components/cascader/useLoad.d.ts +2 -1
  20. package/components/cascader/useLoad.js +9 -7
  21. package/components/colorpicker/index.d.ts +2 -0
  22. package/components/colorpicker/index.js +7 -2
  23. package/components/colorpicker/index.vdt.js +3 -6
  24. package/components/copy/index.d.ts +17 -0
  25. package/components/copy/index.js +43 -0
  26. package/components/copy/index.spec.d.ts +1 -0
  27. package/components/copy/index.spec.js +52 -0
  28. package/components/copy/index.vdt.js +45 -0
  29. package/components/copy/styles.d.ts +2 -0
  30. package/components/copy/styles.js +14 -0
  31. package/components/copy/useCopy.d.ts +4 -0
  32. package/components/copy/useCopy.js +90 -0
  33. package/components/datepicker/index.spec.js +1 -1
  34. package/components/datepicker/index.vdt.js +1 -1
  35. package/components/datepicker/styles.js +1 -1
  36. package/components/diagram/shapes/callout.d.ts +1 -1
  37. package/components/diagram/shapes/circle.d.ts +1 -1
  38. package/components/diagram/shapes/document.d.ts +1 -1
  39. package/components/diagram/shapes/ellipse.d.ts +1 -1
  40. package/components/diagram/shapes/hexagon.d.ts +1 -1
  41. package/components/diagram/shapes/image.d.ts +1 -1
  42. package/components/diagram/shapes/parallelogram.d.ts +1 -1
  43. package/components/diagram/shapes/rectangle.d.ts +1 -1
  44. package/components/diagram/shapes/square.d.ts +1 -1
  45. package/components/diagram/shapes/text.d.ts +1 -1
  46. package/components/dialog/alert.vdt.js +6 -5
  47. package/components/dialog/index.spec.js +6 -6
  48. package/components/dropdown/dropdown.d.ts +6 -6
  49. package/components/dropdown/dropdown.js +58 -75
  50. package/components/dropdown/index.spec.js +96 -17
  51. package/components/dropdown/item.d.ts +1 -1
  52. package/components/dropdown/item.js +19 -7
  53. package/components/dropdown/menu.js +1 -1
  54. package/components/dropdown/usePosition.js +11 -2
  55. package/components/editable/index.d.ts +1 -0
  56. package/components/editable/index.js +20 -6
  57. package/components/editable/index.vdt.js +2 -1
  58. package/components/form/index.spec.js +4 -2
  59. package/components/form/item.vdt.js +2 -1
  60. package/components/form/styles.js +4 -4
  61. package/components/grid/useGutter.js +8 -8
  62. package/components/input/index.d.ts +11 -2
  63. package/components/input/index.js +13 -13
  64. package/components/input/index.spec.js +169 -1
  65. package/components/input/index.vdt.js +28 -7
  66. package/components/input/styles.js +20 -3
  67. package/components/input/useAutoRows.d.ts +2 -0
  68. package/components/input/useAutoRows.js +79 -0
  69. package/components/input/useAutoWidth.js +13 -3
  70. package/components/input/useShowPassword.d.ts +7 -0
  71. package/components/input/useShowPassword.js +31 -0
  72. package/components/menu/index.spec.js +26 -15
  73. package/components/menu/item.d.ts +2 -0
  74. package/components/menu/item.js +5 -0
  75. package/components/pagination/index.d.ts +1 -1
  76. package/components/pagination/index.js +3 -2
  77. package/components/pagination/index.spec.js +49 -0
  78. package/components/pagination/index.vdt.js +8 -10
  79. package/components/pagination/styles.js +1 -1
  80. package/components/popover/content.d.ts +19 -0
  81. package/components/popover/content.js +31 -0
  82. package/components/popover/content.vdt.js +68 -0
  83. package/components/popover/index.d.ts +16 -0
  84. package/components/popover/index.js +44 -0
  85. package/components/popover/index.spec.d.ts +1 -0
  86. package/components/popover/index.spec.js +195 -0
  87. package/components/popover/styles.d.ts +1 -0
  88. package/components/popover/styles.js +22 -0
  89. package/components/portal.d.ts +6 -2
  90. package/components/portal.js +4 -3
  91. package/components/position.js +2 -1
  92. package/components/progress/index.js +1 -1
  93. package/components/progress/index.vdt.js +46 -8
  94. package/components/progress/styles.js +19 -13
  95. package/components/rate/styles.js +1 -1
  96. package/components/select/base.d.ts +7 -3
  97. package/components/select/base.js +9 -3
  98. package/components/select/base.vdt.js +46 -35
  99. package/components/select/index.spec.js +2 -2
  100. package/components/select/menu.vdt.js +1 -1
  101. package/components/select/styles.js +11 -5
  102. package/components/select/useDraggble.d.ts +2 -0
  103. package/components/select/useDraggble.js +11 -0
  104. package/components/select/useNowrap.d.ts +3 -0
  105. package/components/select/useNowrap.js +19 -0
  106. package/components/slider/index.spec.js +48 -9
  107. package/components/slider/index.vdt.js +23 -12
  108. package/components/slider/styles.js +23 -14
  109. package/components/slider/useValue.d.ts +3 -1
  110. package/components/slider/useValue.js +12 -0
  111. package/components/spinner/index.d.ts +0 -1
  112. package/components/spinner/index.js +1 -19
  113. package/components/spinner/index.vdt.js +9 -4
  114. package/components/spinner/useChange.d.ts +1 -1
  115. package/components/spinner/useChange.js +2 -2
  116. package/components/spinner/useValue.d.ts +1 -0
  117. package/components/spinner/useValue.js +16 -1
  118. package/components/split/index.vdt.js +32 -20
  119. package/components/split/memo.d.ts +9 -0
  120. package/components/split/memo.js +26 -0
  121. package/components/steps/index.d.ts +1 -0
  122. package/components/steps/index.js +2 -1
  123. package/components/steps/index.spec.js +1 -1
  124. package/components/steps/index.vdt.js +7 -4
  125. package/components/steps/step.vdt.js +0 -1
  126. package/components/steps/styles.d.ts +1 -0
  127. package/components/steps/styles.js +45 -16
  128. package/components/switch/index.spec.js +82 -65
  129. package/components/table/cell.js +1 -6
  130. package/components/table/index.spec.js +130 -19
  131. package/components/table/row.d.ts +1 -1
  132. package/components/table/row.js +2 -1
  133. package/components/table/styles.js +1 -1
  134. package/components/table/table.d.ts +15 -0
  135. package/components/table/table.js +16 -7
  136. package/components/table/table.vdt.js +20 -6
  137. package/components/table/useChecked.d.ts +3 -2
  138. package/components/table/useChecked.js +23 -12
  139. package/components/table/useDisableRow.d.ts +2 -1
  140. package/components/table/useDisableRow.js +4 -4
  141. package/components/table/useDraggable.d.ts +3 -2
  142. package/components/table/useDraggable.js +11 -15
  143. package/components/table/useGroup.js +3 -0
  144. package/components/table/useMerge.d.ts +2 -1
  145. package/components/table/useMerge.js +5 -4
  146. package/components/table/usePagination.d.ts +8 -0
  147. package/components/table/usePagination.js +81 -0
  148. package/components/table/useStickyScrollbar.js +2 -2
  149. package/components/table/useTree.d.ts +2 -1
  150. package/components/table/useTree.js +3 -4
  151. package/components/table/useWidth.js +2 -2
  152. package/components/tabs/index.d.ts +1 -1
  153. package/components/tabs/index.js +1 -1
  154. package/components/tabs/index.spec.js +67 -0
  155. package/components/tabs/index.vdt.js +4 -4
  156. package/components/tabs/styles.js +32 -34
  157. package/components/tabs/useScroll.d.ts +1 -1
  158. package/components/tabs/useScroll.js +75 -48
  159. package/components/tag/base.d.ts +1 -0
  160. package/components/tag/base.js +1 -1
  161. package/components/tag/index.d.ts +1 -0
  162. package/components/tag/index.js +2 -1
  163. package/components/tag/index.spec.js +147 -4
  164. package/components/tag/styles.d.ts +67 -0
  165. package/components/tag/styles.js +33 -8
  166. package/components/tag/tags.d.ts +27 -0
  167. package/components/tag/tags.js +51 -0
  168. package/components/tag/tags.vdt.js +79 -0
  169. package/components/tag/useChildren.d.ts +2 -0
  170. package/components/tag/useChildren.js +39 -0
  171. package/components/tag/useDraggable.d.ts +3 -0
  172. package/components/tag/useDraggable.js +89 -0
  173. package/components/tag/useNowrap.d.ts +7 -0
  174. package/components/tag/useNowrap.js +115 -0
  175. package/components/timepicker/index.spec.js +1 -1
  176. package/components/tooltip/content.d.ts +3 -2
  177. package/components/tooltip/content.js +18 -1
  178. package/components/tooltip/content.vdt.js +22 -10
  179. package/components/tooltip/index.spec.js +147 -92
  180. package/components/tooltip/styles.d.ts +23 -0
  181. package/components/tooltip/styles.js +2 -2
  182. package/components/tooltip/tooltip.d.ts +1 -1
  183. package/components/tooltip/tooltip.js +11 -11
  184. package/components/upload/index.spec.js +5 -6
  185. package/components/upload/index.vdt.js +3 -1
  186. package/components/utils.d.ts +2 -0
  187. package/components/utils.js +24 -3
  188. package/components/virtual.d.ts +8 -0
  189. package/components/virtual.js +126 -0
  190. package/hooks/useResizeObserver.d.ts +1 -1
  191. package/hooks/useResizeObserver.js +19 -6
  192. package/i18n/en-US.d.ts +4 -1
  193. package/i18n/en-US.js +6 -2
  194. package/index.d.ts +5 -3
  195. package/index.js +5 -3
  196. package/package.json +2 -2
  197. package/styles/fonts/iconfont.js +1 -1
  198. package/styles/fonts/ionicons.js +3 -3
  199. package/styles/global.js +1 -1
  200. package/yarn-error.log +41 -43
  201. package/components/table/useResizeObserver.d.ts +0 -2
  202. package/components/table/useResizeObserver.js +0 -20
@@ -0,0 +1,53 @@
1
+ import React, {createRef, useState} from 'react';
2
+ import * as ReactDOM from 'react-dom';
3
+ import {Cascader} from '../../';
4
+ import {Component} from 'intact-react';
5
+ import {getElement, wait, dispatchEvent} from '../../../../test/utils';
6
+
7
+ describe('Cascader', () => {
8
+ let container: HTMLDivElement;
9
+ beforeEach(() => {
10
+ container = document.createElement('div');
11
+ document.body.appendChild(container);
12
+ });
13
+ afterEach(() => {
14
+ ReactDOM.unmountComponentAtNode(container);
15
+ document.body.removeChild(container);
16
+ });
17
+
18
+ it('should hide all menu on selected', async () => {
19
+ function App() {
20
+ const [value, setValue] = useState<string[][]>([]);
21
+ return (
22
+ <div>
23
+ <Cascader
24
+ data={[{value: 'a', label: 'a', children: [{value: 'b', label: 'b'}]}]}
25
+ value={value}
26
+ multiple
27
+ filterable
28
+ onChangeValue={(v) => {
29
+ setValue(v!);
30
+ }}
31
+ />
32
+ </div>
33
+ );
34
+ }
35
+
36
+ ReactDOM.render(<App />, container);
37
+
38
+ const select = container.querySelector('.k-cascader') as HTMLElement;
39
+ select.click();
40
+ await wait();
41
+ const dropdown1 = getElement('.k-cascader-menu')!;
42
+ const [item1] = dropdown1.querySelectorAll<HTMLElement>(':scope > .k-dropdown-item');
43
+ item1.click();
44
+ await wait();
45
+ const dropdown2 = getElement('.k-cascader-menu')!;
46
+ const [item11] = dropdown2.querySelectorAll<HTMLElement>(':scope > .k-dropdown-item');
47
+ item11.click();
48
+ await wait(500);
49
+ // should hide all menu
50
+ expect(dropdown1.style.display).to.eql('none');
51
+ expect(dropdown2.style.display).to.eql('none');
52
+ });
53
+ })
@@ -1,6 +1,6 @@
1
1
  import React, {createRef, useState, useEffect} from 'react';
2
2
  import * as ReactDOM from 'react-dom';
3
- import {Drawer, Card, Button, Select, Option} from '../../';
3
+ import {Drawer, Card, Button, Select, Option, Cascader} from '../../';
4
4
  import {Component} from 'intact-react';
5
5
  import {getElement, wait, dispatchEvent} from '../../../../test/utils';
6
6
 
@@ -10,10 +10,10 @@ describe('Drawer', () => {
10
10
  container = document.createElement('div');
11
11
  document.body.appendChild(container);
12
12
  });
13
- afterEach(() => {
14
- ReactDOM.unmountComponentAtNode(container);
15
- document.body.removeChild(container);
16
- });
13
+ // afterEach(() => {
14
+ // ReactDOM.unmountComponentAtNode(container);
15
+ // document.body.removeChild(container);
16
+ // });
17
17
 
18
18
  it('should render react element correctly', async () => {
19
19
  class Test extends Component {
@@ -103,4 +103,66 @@ describe('Drawer', () => {
103
103
  await wait();
104
104
  expect(document.querySelector<HTMLElement>('.k-dialog-body .k-select-menu')!.textContent).to.eql('1');
105
105
  });
106
+
107
+ it('reproduce #832', async () => {
108
+ function Test({value}: {value: boolean}) {
109
+ const [data, setData] = useState<any[]>([])
110
+
111
+ useEffect(() => {
112
+ if (!value) return;
113
+ setData([{
114
+ value: 'beijing',
115
+ label: '北京',
116
+ children: [
117
+ {
118
+ value: 'haidian',
119
+ label: '海淀区'
120
+ },
121
+ {
122
+ value: 'chaoyang',
123
+ label: '朝阳区'
124
+ },
125
+ {
126
+ value: 'fengtai',
127
+ label: '丰台区'
128
+ }
129
+ ]
130
+ }]);
131
+ }, [value]);
132
+
133
+ return (
134
+ <Card>
135
+ {value && (
136
+ <Wrapper>
137
+ <Cascader data={data} />
138
+ </Wrapper>
139
+ )}
140
+ </Card>
141
+ );
142
+ }
143
+
144
+ function Wrapper(props: any) {
145
+ return <div>
146
+ <Card><div className="test">a</div></Card>
147
+ <div>{props.children}</div>
148
+ </div>
149
+ }
150
+
151
+ function App() {
152
+ const [value, setValue] = useState(false);
153
+
154
+ return <>
155
+ <div onClick={() => setValue(true)} className="click">show</div>
156
+ <Test value={value} />
157
+ </>
158
+ }
159
+
160
+ ReactDOM.render(<App />, container);
161
+
162
+
163
+ // const click = container.querySelector<HTMLElement>('.click')!;
164
+ // click.click();
165
+ // await wait();
166
+ // expect(container.querySelector<HTMLElement>('.test')).to.be.exist;
167
+ });
106
168
  });
@@ -14,7 +14,7 @@ interface ButtonHTMLAttributes {
14
14
  download?: string;
15
15
  }
16
16
  export interface ButtonProps extends ButtonHTMLAttributes {
17
- type?: Colors | 'none' | 'secondary' | 'link';
17
+ type?: Colors | 'none' | 'secondary' | 'link' | 'flat';
18
18
  size?: Sizes;
19
19
  icon?: boolean;
20
20
  circle?: boolean;
@@ -7,7 +7,7 @@ import { bind } from '../utils';
7
7
  import { BUTTON_GROUP } from './constants';
8
8
  export * from './group';
9
9
  var typeDefs = {
10
- type: ['default', 'primary', 'warning', 'danger', 'success', 'none', 'secondary', 'link'],
10
+ type: ['default', 'primary', 'warning', 'danger', 'success', 'none', 'secondary', 'link', 'flat'],
11
11
  size: ['large', 'default', 'small', 'mini'],
12
12
  icon: Boolean,
13
13
  circle: Boolean,
@@ -238,7 +238,7 @@ export function makeButtonStyles(_ref) {
238
238
  css("display:inline-flex;align-items:center;justify-content:center;cursor:pointer;height:", button.height, ";padding:", button.padding, ";outline:none;vertical-align:middle;color:", button.color, ";background:", button.bgColor, ";border-radius:", button.borderRadius, ";border:1px solid ", button.borderColor, ";font-size:", button.fontSize, ";white-space:nowrap;transition:all ", button.transition, ";line-height:", button.lineHeight, ";.k-icon{color:inherit;}&:hover,&:focus{border-color:", button.hoverBorderColor, ";color:", button.hoverColor, ";}&:active{background:", palette(theme.color.primary, -4), ";}.k-button-input{position:absolute;opacity:0;width:0;height:0;}", _mapInstanceProperty(types).call(types, function (type) {
239
239
  var typeStyles = button[type];
240
240
  return /*#__PURE__*/css("&.k-", type, "{background:", typeStyles.bgColor, ";color:", typeStyles.color, ";border-color:", typeStyles.borderColor, ";&:hover,&:focus{background:", palette(typeStyles.bgColor, -1), ";border-color:", typeStyles.hoverBorderColor, ";color:", typeStyles.color, ";}&:active{background:", palette(typeStyles.bgColor, 1), ";border-color:", palette(typeStyles.borderColor, 1), ";}}");
241
- }), "&.k-secondary{color:", secondary.color, ";border-color:", secondary.borderColor, ";&:hover,&:focus{background:", secondary.hoverBgColor, ";}&:active{background:", secondary.activeBgColor, ";}}&.k-link{color:", link.color, ";&:hover{color:", link.hoverColor, ";background:", link.hoverBgColor, ";}}&.k-disabled{&,&:hover{color:", button.disabled.color, ";background:", button.disabled.bgColor, ";border-color:", button.disabled.borderColor, ";cursor:not-allowed;}}&.k-none,&.k-link{background:transparent;&,&:hover{border:none;}&.k-active{color:", theme.color.primary, ";}}&.k-none:hover{background:", button.none.hoverBgColor, ";}", _mapInstanceProperty(sizes).call(sizes, function (size) {
241
+ }), "&.k-secondary{color:", secondary.color, ";border-color:", secondary.borderColor, ";&:hover,&:focus{background:", secondary.hoverBgColor, ";}&:active{background:", secondary.activeBgColor, ";}}&.k-link{color:", link.color, ";&:hover{color:", link.hoverColor, ";background:", link.hoverBgColor, ";}}&.k-disabled{&,&:hover{color:", button.disabled.color, ";background:", button.disabled.bgColor, ";border-color:", button.disabled.borderColor, ";cursor:not-allowed;}}&.k-none,&.k-link,&.k-flat{background:transparent;&,&:hover{border:none;}&.k-active{color:", theme.color.primary, ";}}&.k-none:hover{background:", button.none.hoverBgColor, ";}&.k-flat{background:", button.none.hoverBgColor, ";}", _mapInstanceProperty(sizes).call(sizes, function (size) {
242
242
  var styles = button[size];
243
243
  return /*#__PURE__*/css("&.k-", size, "{font-size:", styles.fontSize, ";height:", styles.height, ";padding:", styles.padding, ";&.k-btn-icon{width:", styles.height, ";}}");
244
244
  }), "&.k-btn-icon{width:", button.height, ";padding:0;.k-icon{margin:0;}}&.k-fluid{width:100%;padding:0;}&.k-circle{border-radius:calc(", button.large.height, " / 2);}&.k-loading{", _mapInstanceProperty(types).call(types, function (type) {
@@ -1,28 +1,39 @@
1
1
  import { TypeDefs } from 'intact-react';
2
2
  import { BaseSelect, BaseSelectProps, BaseSelectEvents, BaseSelectBlocks } from '../select/base';
3
- export interface CascaderProps<V = any, Multipe extends boolean = boolean> extends BaseSelectProps<V[], Multipe> {
4
- data?: CascaderData<V>[];
3
+ export interface CascaderProps<V = any, Multipe extends boolean = boolean, Data extends BaseCascaderData = CascaderData<V>> extends BaseSelectProps<V[], Multipe> {
4
+ data?: Data[];
5
5
  trigger?: 'click' | 'hover';
6
6
  changeOnSelect?: boolean;
7
7
  format?: (labels: string[]) => string;
8
- loadData?: (data: CascaderData<V>) => any;
9
- filter?: (keywords: string, data: CascaderData<V>) => boolean;
8
+ loadData?: (data: Data) => any;
9
+ filter?: (keywords: string, data: Data) => boolean;
10
+ fields?: CascaderFields<Data>;
10
11
  }
11
- export declare type CascaderData<V> = {
12
+ export declare type CascaderFields<Data> = {
13
+ value?: keyof Data;
14
+ label?: keyof Data;
15
+ children?: keyof Data;
16
+ disabled?: keyof Data;
17
+ };
18
+ export interface BaseCascaderData {
19
+ loaded?: boolean;
20
+ [key: string]: any;
21
+ }
22
+ export interface CascaderData<V> extends BaseCascaderData {
12
23
  value: V;
13
24
  label: string;
14
- disabled?: boolean;
15
- loaded?: boolean;
16
25
  children?: CascaderData<V>[];
17
- };
26
+ disabled?: boolean;
27
+ }
18
28
  export interface CascaderEvents extends BaseSelectEvents {
19
29
  }
20
30
  export interface CascaderBlocks<V> extends BaseSelectBlocks<V> {
21
31
  }
22
- export declare class Cascader<V = any, Multipe extends boolean = false> extends BaseSelect<CascaderProps<V, Multipe>, CascaderEvents, CascaderBlocks<V>> {
32
+ export declare class Cascader<V = any, Multipe extends boolean = false, Data extends BaseCascaderData = CascaderData<V>> extends BaseSelect<CascaderProps<V, Multipe, Data>, CascaderEvents, CascaderBlocks<V>> {
23
33
  static template: string | import("intact").Template<any>;
24
- static typeDefs: Required<TypeDefs<CascaderProps<any, boolean>>>;
25
- static defaults: () => Partial<CascaderProps<any, boolean>>;
34
+ static typeDefs: Required<TypeDefs<CascaderProps<any, boolean, CascaderData<any>>>>;
35
+ static defaults: () => Partial<CascaderProps<any, boolean, CascaderData<any>>>;
36
+ private fields;
26
37
  private value;
27
38
  private label;
28
39
  private load;
@@ -1,6 +1,5 @@
1
1
  import _inheritsLoose from "@babel/runtime-corejs3/helpers/inheritsLoose";
2
2
  import _extends from "@babel/runtime-corejs3/helpers/extends";
3
- import _includesInstanceProperty from "@babel/runtime-corejs3/core-js/instance/includes";
4
3
  import _concatInstanceProperty from "@babel/runtime-corejs3/core-js/instance/concat";
5
4
  import template from './index.vdt';
6
5
  import { BaseSelect } from '../select/base';
@@ -10,6 +9,7 @@ import { useValue } from './useValue';
10
9
  import { useLabel } from './useLabel';
11
10
  import { useLoad } from './useLoad';
12
11
  import { useFilterable } from './useFilterable';
12
+ import { useFields } from './useFields';
13
13
 
14
14
  var typeDefs = _extends({}, BaseSelect.typeDefs, {
15
15
  data: Array,
@@ -17,7 +17,8 @@ var typeDefs = _extends({}, BaseSelect.typeDefs, {
17
17
  changeOnSelect: Boolean,
18
18
  format: Function,
19
19
  loadData: Function,
20
- filter: Function
20
+ filter: Function,
21
+ fields: Object
21
22
  });
22
23
 
23
24
  var defaults = function defaults() {
@@ -26,11 +27,6 @@ var defaults = function defaults() {
26
27
  trigger: 'click',
27
28
  format: function format(labels) {
28
29
  return labels.join(' / ');
29
- },
30
- filter: function filter(keywords, data) {
31
- var _context;
32
-
33
- return _includesInstanceProperty(_context = data.label).call(_context, keywords);
34
30
  }
35
31
  });
36
32
  };
@@ -39,7 +35,7 @@ export var Cascader = /*#__PURE__*/function (_BaseSelect) {
39
35
  _inheritsLoose(Cascader, _BaseSelect);
40
36
 
41
37
  function Cascader() {
42
- var _context2;
38
+ var _context;
43
39
 
44
40
  var _this;
45
41
 
@@ -47,11 +43,12 @@ export var Cascader = /*#__PURE__*/function (_BaseSelect) {
47
43
  args[_key] = arguments[_key];
48
44
  }
49
45
 
50
- _this = _BaseSelect.call.apply(_BaseSelect, _concatInstanceProperty(_context2 = [this]).call(_context2, args)) || this;
46
+ _this = _BaseSelect.call.apply(_BaseSelect, _concatInstanceProperty(_context = [this]).call(_context, args)) || this;
47
+ _this.fields = useFields();
51
48
  _this.value = useValue();
52
- _this.label = useLabel();
53
- _this.load = useLoad();
54
- _this.filterable = useFilterable(_this.input.keywords, _this.value.setValue);
49
+ _this.label = useLabel(_this.fields);
50
+ _this.load = useLoad(_this.fields);
51
+ _this.filterable = useFilterable(_this.input.keywords, _this.value.setValue, _this.fields);
55
52
  _this.positionObj = {
56
53
  my: 'left top',
57
54
  at: 'right top',
@@ -366,4 +366,85 @@ describe('Cascader', function () {
366
366
  }
367
367
  }, _callee8);
368
368
  })));
369
+ it('specify fields', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee9() {
370
+ var Demo, _mount8, instance, element, select, dropdown1, _dropdown1$querySelec5, item1, dropdown2, _dropdown2$querySelec4, item11;
371
+
372
+ return _regeneratorRuntime.wrap(function _callee9$(_context11) {
373
+ while (1) {
374
+ switch (_context11.prev = _context11.next) {
375
+ case 0:
376
+ Demo = /*#__PURE__*/function (_Component2) {
377
+ _inheritsLoose(Demo, _Component2);
378
+
379
+ function Demo() {
380
+ var _context10;
381
+
382
+ var _this2;
383
+
384
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
385
+ args[_key2] = arguments[_key2];
386
+ }
387
+
388
+ _this2 = _Component2.call.apply(_Component2, _concatInstanceProperty(_context10 = [this]).call(_context10, args)) || this;
389
+ _this2.Cascader = Cascader;
390
+ return _this2;
391
+ }
392
+
393
+ Demo.defaults = function defaults() {
394
+ return {
395
+ value: [],
396
+ data: [{
397
+ v: 'beijing',
398
+ l: '北京',
399
+ c: [{
400
+ v: 'haidian',
401
+ l: '海淀区'
402
+ }]
403
+ }, {
404
+ v: 'hunan',
405
+ l: '湖南',
406
+ c: [{
407
+ v: 'haidian',
408
+ l: '海淀区'
409
+ }]
410
+ }]
411
+ };
412
+ };
413
+
414
+ return Demo;
415
+ }(Component);
416
+
417
+ Demo.template = "\n const {Cascader} = this;\n <Cascader data={this.get('data')}\n v-model=\"value\"\n fields={{value: 'v', label: 'l', children: 'c'}}\n />\n ";
418
+ _mount8 = mount(Demo), instance = _mount8[0], element = _mount8[1];
419
+ select = element;
420
+ select.click();
421
+ _context11.next = 7;
422
+ return wait();
423
+
424
+ case 7:
425
+ dropdown1 = getElement('.k-cascader-menu');
426
+ _dropdown1$querySelec5 = dropdown1.querySelectorAll(':scope > .k-dropdown-item'), item1 = _dropdown1$querySelec5[0];
427
+ item1.click();
428
+ _context11.next = 12;
429
+ return wait();
430
+
431
+ case 12:
432
+ expect(dropdown1.innerHTML).to.matchSnapshot();
433
+ dropdown2 = getElement('.k-cascader-menu');
434
+ _dropdown2$querySelec4 = dropdown2.querySelectorAll(':scope > .k-dropdown-item'), item11 = _dropdown2$querySelec4[0];
435
+ item11.click();
436
+ _context11.next = 18;
437
+ return wait();
438
+
439
+ case 18:
440
+ expect(element.innerHTML).to.matchSnapshot();
441
+ expect(instance.get('value')).to.eql(['beijing', 'haidian']);
442
+
443
+ case 20:
444
+ case "end":
445
+ return _context11.stop();
446
+ }
447
+ }
448
+ }, _callee9);
449
+ })));
369
450
  });
@@ -27,12 +27,14 @@ export default function ($props, $blocks, $__proto__) {
27
27
  var _this$get = this.get(),
28
28
  data = _this$get.data,
29
29
  trigger = _this$get.trigger,
30
- filterable = _this$get.filterable;
30
+ filterable = _this$get.filterable,
31
+ fields = _this$get.fields;
31
32
 
32
33
  var baseMenuStyles = makeMenuStyles();
33
34
  var classNameObj = (_classNameObj = {
34
35
  'k-cascader-menu': true
35
36
  }, _classNameObj[baseMenuStyles] = true, _classNameObj);
37
+ var getField = this.fields;
36
38
 
37
39
  var _this$value = this.value,
38
40
  values = _valuesInstanceProperty(_this$value),
@@ -51,31 +53,31 @@ export default function ($props, $blocks, $__proto__) {
51
53
  }
52
54
 
53
55
  return _mapInstanceProperty(data).call(data, function (item, index) {
54
- var value = item.value;
56
+ var value = getField(item, 'value');
55
57
  var showed = isShowed(value, level);
56
58
  var selected = parentSelected && isSelected(value, level);
57
- var children = item.children;
59
+ var children = getField(item, 'children');
58
60
 
59
61
  var Item = function Item() {
60
62
  return _$cc(DropdownItem, {
61
- 'disabled': item.disabled,
63
+ 'disabled': getField(item, 'disabled'),
62
64
  'className': _$cn({
63
65
  'k-cascader-option': true,
64
66
  'k-active': showed,
65
67
  'k-selected': selected
66
68
  }),
67
69
  'ev-select': onSelect.bind(null, value, level),
68
- 'children': [item.label, children ? _$cc(Icon, _$tmp1) : undefined]
70
+ 'children': [getField(item, 'label'), children ? _$cc(Icon, _$tmp1) : undefined]
69
71
  });
70
72
  };
71
73
 
72
74
  return children ? _$cc(Dropdown, {
73
75
  'position': _this.positionObj,
74
76
  'of': 'parent',
75
- 'disabled': item.disabled,
77
+ 'disabled': getField(item, 'disabled'),
76
78
  'trigger': trigger,
77
79
  'value': showed,
78
- 'ev-$changed:value': toggleShowedValue.bind(null, value, level),
80
+ 'ev-$change:value': toggleShowedValue.bind(null, value, level),
79
81
  'ev-show': _this.load.bind(null, item),
80
82
  'children': [Item(), _$cc(DropdownMenu, {
81
83
  'className': _$cn(classNameObj),
@@ -116,7 +118,7 @@ export default function ($props, $blocks, $__proto__) {
116
118
  'children': function () {
117
119
  // highlight keywords
118
120
  var label = _mapInstanceProperty($value).call($value, function (item) {
119
- return item.label;
121
+ return getField(item, 'label');
120
122
  }).join(' / ');
121
123
 
122
124
  var labels = label.split(keywords);
@@ -43,7 +43,7 @@ setDefault(function () {
43
43
  }).cascader;
44
44
  });
45
45
  export function makeMenuStyles() {
46
- return /*#__PURE__*/css("min-width:", cascader.width, "!important;min-height:", cascader.height, ";.k-cascader-arrow{float:right;height:100%;margin-left:", cascader.arrowGap, ";line-height:inherit;}.k-cascader-loading{display:block;text-align:center;margin-top:", cascader.loadingGap, ";}.k-cascader-empty{padding:", cascader.empty.padding, ";color:", cascader.empty.color, ";text-align:center;}.k-cascader-option{&.k-selected{color:", cascader.selectedColor, ";}&.k-active{background:", cascader.activeBgColor, ";}}");
46
+ return /*#__PURE__*/css("min-width:", cascader.width, "!important;height:", cascader.height, ";overflow:auto;.k-cascader-arrow{float:right;height:100%;margin-left:", cascader.arrowGap, ";line-height:inherit;}.k-cascader-loading{display:block;text-align:center;margin-top:", cascader.loadingGap, ";}.k-cascader-empty{padding:", cascader.empty.padding, ";color:", cascader.empty.color, ";text-align:center;}.k-cascader-option{&.k-selected{color:", cascader.selectedColor, ";}&.k-active{background:", cascader.activeBgColor, ";}}");
47
47
  }
48
48
  export function makeFilterMenuStyles() {
49
49
  return /*#__PURE__*/css("min-width:", _filterInstanceProperty(cascader).minWidth, "!important;height:auto;max-height:", _filterInstanceProperty(cascader).maxHeight, ";em{font-style:normal;color:", _filterInstanceProperty(cascader).highlightColor, ";}");
@@ -0,0 +1,2 @@
1
+ import type { CascaderData, BaseCascaderData } from './';
2
+ export declare function useFields(): <Data extends BaseCascaderData = CascaderData<unknown>, Key extends keyof Data = keyof Data>(data: Data, key: Key) => Data[Key];
@@ -0,0 +1,18 @@
1
+ import { useInstance } from 'intact-react';
2
+ export function useFields() {
3
+ var instance = useInstance();
4
+ return function getField(data, key) {
5
+ var _instance$get = instance.get(),
6
+ fields = _instance$get.fields;
7
+
8
+ if (fields) {
9
+ var field = fields[key];
10
+
11
+ if (field) {
12
+ return data[field];
13
+ }
14
+ }
15
+
16
+ return data[key];
17
+ };
18
+ }
@@ -1,7 +1,8 @@
1
1
  import type { CascaderData } from './';
2
2
  import { State } from '../../hooks/useState';
3
3
  import type { Value } from './useValue';
4
- export declare function useFilterable(keywords: State<string>, setValue: (value: Value) => void): {
4
+ import type { useFields } from './useFields';
5
+ export declare function useFilterable(keywords: State<string>, setValue: (value: Value) => void, getField: ReturnType<typeof useFields>): {
5
6
  filter: () => CascaderData<any>[][];
6
7
  selectByFilter: (data: CascaderData<any>[]) => void;
7
8
  keywords: State<string>;
@@ -1,16 +1,25 @@
1
1
  import _filterInstanceProperty from "@babel/runtime-corejs3/core-js/instance/filter";
2
+ import _includesInstanceProperty from "@babel/runtime-corejs3/core-js/instance/includes";
2
3
  import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js/instance/slice";
3
4
  import _mapInstanceProperty from "@babel/runtime-corejs3/core-js/instance/map";
4
5
  import { useInstance } from 'intact-react';
5
- export function useFilterable(keywords, setValue) {
6
+ export function useFilterable(keywords, setValue, getField) {
6
7
  var instance = useInstance();
7
8
 
8
9
  function filter() {
10
+ var ret = [];
11
+
9
12
  var _instance$get = instance.get(),
10
13
  data = _instance$get.data,
11
14
  filter = _filterInstanceProperty(_instance$get);
12
15
 
13
- var ret = [];
16
+ if (!filter) {
17
+ filter = function filter(keywords, data) {
18
+ var _context;
19
+
20
+ return _includesInstanceProperty(_context = getField(data, 'label')).call(_context, keywords);
21
+ };
22
+ }
14
23
 
15
24
  var loop = function loop(data, prefix, valid, disabled) {
16
25
  if (prefix === void 0) {
@@ -28,14 +37,16 @@ export function useFilterable(keywords, setValue) {
28
37
  data.forEach(function (item) {
29
38
  var _valid = valid || filter(keywords.value, item);
30
39
 
31
- var _disabled = disabled || item.disabled;
40
+ var _disabled = disabled || getField(item, 'disabled');
32
41
 
33
42
  var _prefix = _sliceInstanceProperty(prefix).call(prefix, 0);
34
43
 
35
44
  _prefix.push(item);
36
45
 
37
- if (item.children) {
38
- loop(item.children, _prefix, _valid, _disabled);
46
+ var children = getField(item, 'children');
47
+
48
+ if (children) {
49
+ loop(children, _prefix, _valid, _disabled);
39
50
  } else if (_valid) {
40
51
  _prefix.disabled = _disabled;
41
52
  ret.push(_prefix);
@@ -49,7 +60,7 @@ export function useFilterable(keywords, setValue) {
49
60
 
50
61
  function selectByFilter(data) {
51
62
  var value = _mapInstanceProperty(data).call(data, function (item) {
52
- return item.value;
63
+ return getField(item, 'value');
53
64
  });
54
65
 
55
66
  setValue(value);
@@ -1,3 +1,4 @@
1
- export declare function useLabel(): {
1
+ import type { useFields } from './useFields';
2
+ export declare function useLabel(getField: ReturnType<typeof useFields>): {
2
3
  getLabel: () => import('intact-react').Children;
3
4
  };
@@ -1,6 +1,6 @@
1
1
  import { useInstance } from 'intact-react';
2
2
  import { useBaseLabel } from '../select/useBaseLabel';
3
- export function useLabel() {
3
+ export function useLabel(getField) {
4
4
  var instance = useInstance();
5
5
 
6
6
  function findLabel(data, value) {
@@ -16,9 +16,9 @@ export function useLabel() {
16
16
  for (var i = 0; i < data.length; i++) {
17
17
  var item = data[i];
18
18
 
19
- if (item.value === value[level]) {
20
- labels.push(item.label);
21
- var children = item.children;
19
+ if (getField(item, 'value') === value[level]) {
20
+ labels.push(getField(item, 'label'));
21
+ var children = getField(item, 'children');
22
22
 
23
23
  if (children) {
24
24
  loop(children, level + 1);
@@ -1,2 +1,3 @@
1
1
  import type { CascaderData } from './';
2
- export declare function useLoad(): (item: CascaderData<any>) => Promise<void>;
2
+ import type { useFields } from './useFields';
3
+ export declare function useLoad(getField: ReturnType<typeof useFields>): (item: CascaderData<any>) => Promise<void>;
@@ -1,7 +1,7 @@
1
1
  import _asyncToGenerator from "@babel/runtime-corejs3/helpers/asyncToGenerator";
2
2
  import _regeneratorRuntime from "@babel/runtime-corejs3/regenerator";
3
3
  import { useInstance } from 'intact-react';
4
- export function useLoad() {
4
+ export function useLoad(getField) {
5
5
  var instance = useInstance();
6
6
 
7
7
  function loadData(_x) {
@@ -10,7 +10,7 @@ export function useLoad() {
10
10
 
11
11
  function _loadData() {
12
12
  _loadData = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(item) {
13
- var _instance$get, loadData;
13
+ var _instance$get, loadData, children;
14
14
 
15
15
  return _regeneratorRuntime.wrap(function _callee$(_context) {
16
16
  while (1) {
@@ -26,19 +26,21 @@ export function useLoad() {
26
26
  return _context.abrupt("return");
27
27
 
28
28
  case 3:
29
- if (!(item.children && !item.children.length && !item.loaded)) {
30
- _context.next = 8;
29
+ children = getField(item, 'children');
30
+
31
+ if (!(children && !children.length && !item.loaded)) {
32
+ _context.next = 9;
31
33
  break;
32
34
  }
33
35
 
34
- _context.next = 6;
36
+ _context.next = 7;
35
37
  return loadData(item);
36
38
 
37
- case 6:
39
+ case 7:
38
40
  item.loaded = true;
39
41
  instance.forceUpdate();
40
42
 
41
- case 8:
43
+ case 9:
42
44
  case "end":
43
45
  return _context.stop();
44
46
  }
@@ -1,6 +1,7 @@
1
1
  import { Component, TypeDefs } from 'intact-react';
2
2
  import { Sizes } from '../../styles/utils';
3
3
  import { Container } from '../portal';
4
+ import { DropdownProps } from '../dropdown';
4
5
  export interface ColorpickerProps {
5
6
  value: string;
6
7
  presets?: string[];
@@ -8,6 +9,7 @@ export interface ColorpickerProps {
8
9
  disabled?: boolean;
9
10
  container?: Container;
10
11
  show?: boolean;
12
+ position?: DropdownProps['position'];
11
13
  }
12
14
  export interface ColorpickerEvents {
13
15
  }