@king-design/intact 2.0.17-beta.0 → 2.1.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 (173) hide show
  1. package/components/cascader/index.md +18 -0
  2. package/components/cascader/index.spec.ts +56 -0
  3. package/components/cascader/index.ts +35 -12
  4. package/components/cascader/index.vdt +9 -8
  5. package/components/cascader/useFields.ts +22 -0
  6. package/components/cascader/useFilterable.ts +23 -8
  7. package/components/cascader/useLabel.ts +7 -4
  8. package/components/cascader/useLoad.ts +4 -2
  9. package/components/code/demos/basic.md +1 -1
  10. package/components/colorpicker/index.md +16 -0
  11. package/components/colorpicker/index.ts +4 -0
  12. package/components/colorpicker/index.vdt +3 -2
  13. package/components/datepicker/index.md +11 -0
  14. package/components/dialog/index.spec.ts +2 -2
  15. package/components/dropdown/dropdown.ts +34 -71
  16. package/components/dropdown/index.spec.ts +53 -4
  17. package/components/dropdown/item.ts +18 -7
  18. package/components/dropdown/menu.ts +3 -3
  19. package/components/dropdown/usePosition.ts +12 -1
  20. package/components/editable/index.ts +17 -3
  21. package/components/editable/index.vdt +1 -0
  22. package/components/input/demos/autoRows.md +44 -0
  23. package/components/input/demos/password.md +12 -0
  24. package/components/input/demos/textarea.md +2 -2
  25. package/components/input/index.md +1 -0
  26. package/components/input/index.spec.ts +97 -1
  27. package/components/input/index.ts +17 -3
  28. package/components/input/index.vdt +29 -6
  29. package/components/input/styles.ts +18 -1
  30. package/components/input/useAutoRows.ts +65 -0
  31. package/components/input/useAutoWidth.ts +12 -3
  32. package/components/input/useShowPassword.ts +27 -0
  33. package/components/menu/demos/collapse.md +1 -1
  34. package/components/menu/index.spec.ts +9 -1
  35. package/components/menu/item.ts +7 -0
  36. package/components/pagination/index.spec.ts +24 -1
  37. package/components/pagination/index.ts +2 -1
  38. package/components/portal.ts +4 -4
  39. package/components/position.ts +5 -1
  40. package/components/select/base.ts +3 -1
  41. package/components/select/base.vdt +2 -0
  42. package/components/select/index.md +11 -1
  43. package/components/table/cell.ts +4 -5
  44. package/components/table/demos/hideHeader.md +33 -0
  45. package/components/table/demos/pagination.md +53 -0
  46. package/components/table/index.md +22 -0
  47. package/components/table/index.spec.ts +73 -1
  48. package/components/table/row.ts +3 -3
  49. package/components/table/styles.ts +5 -0
  50. package/components/table/table.ts +29 -4
  51. package/components/table/table.vdt +21 -3
  52. package/components/table/useChecked.ts +21 -6
  53. package/components/table/useDisableRow.ts +3 -2
  54. package/components/table/useDraggable.ts +11 -8
  55. package/components/table/useGroup.ts +2 -0
  56. package/components/table/useMerge.ts +6 -3
  57. package/components/table/usePagination.ts +71 -0
  58. package/components/table/useRestRowStatus.ts +4 -1
  59. package/components/table/useTree.ts +4 -3
  60. package/components/timepicker/index.md +11 -0
  61. package/components/tooltip/content.ts +15 -1
  62. package/components/tooltip/content.vdt +6 -1
  63. package/components/tooltip/demos/trigger.md +1 -1
  64. package/components/tooltip/index.md +1 -1
  65. package/components/tooltip/index.spec.ts +65 -6
  66. package/components/tooltip/styles.ts +1 -1
  67. package/components/tooltip/tooltip.ts +8 -0
  68. package/components/treeSelect/index.md +9 -0
  69. package/components/virtual.ts +98 -0
  70. package/es/components/cascader/index.d.ts +22 -11
  71. package/es/components/cascader/index.js +9 -12
  72. package/es/components/cascader/index.spec.js +81 -0
  73. package/es/components/cascader/index.vdt.js +10 -8
  74. package/es/components/cascader/useFields.d.ts +2 -0
  75. package/es/components/cascader/useFields.js +18 -0
  76. package/es/components/cascader/useFilterable.d.ts +2 -1
  77. package/es/components/cascader/useFilterable.js +17 -6
  78. package/es/components/cascader/useLabel.d.ts +2 -1
  79. package/es/components/cascader/useLabel.js +4 -4
  80. package/es/components/cascader/useLoad.d.ts +2 -1
  81. package/es/components/cascader/useLoad.js +9 -7
  82. package/es/components/colorpicker/index.d.ts +2 -0
  83. package/es/components/colorpicker/index.js +7 -2
  84. package/es/components/colorpicker/index.vdt.js +3 -6
  85. package/es/components/dialog/index.spec.js +2 -2
  86. package/es/components/dropdown/dropdown.d.ts +6 -5
  87. package/es/components/dropdown/dropdown.js +40 -69
  88. package/es/components/dropdown/index.spec.js +96 -17
  89. package/es/components/dropdown/item.d.ts +1 -1
  90. package/es/components/dropdown/item.js +19 -7
  91. package/es/components/dropdown/usePosition.js +11 -2
  92. package/es/components/editable/index.d.ts +1 -0
  93. package/es/components/editable/index.js +20 -6
  94. package/es/components/editable/index.vdt.js +2 -1
  95. package/es/components/input/index.d.ts +10 -2
  96. package/es/components/input/index.js +10 -3
  97. package/es/components/input/index.spec.js +169 -1
  98. package/es/components/input/index.vdt.js +26 -7
  99. package/es/components/input/styles.js +8 -3
  100. package/es/components/input/useAutoRows.d.ts +2 -0
  101. package/es/components/input/useAutoRows.js +79 -0
  102. package/es/components/input/useAutoWidth.js +13 -3
  103. package/es/components/input/useShowPassword.d.ts +7 -0
  104. package/es/components/input/useShowPassword.js +31 -0
  105. package/es/components/menu/index.spec.js +26 -15
  106. package/es/components/menu/item.d.ts +2 -0
  107. package/es/components/menu/item.js +5 -0
  108. package/es/components/pagination/index.js +2 -1
  109. package/es/components/pagination/index.spec.js +51 -4
  110. package/es/components/portal.d.ts +6 -2
  111. package/es/components/portal.js +4 -3
  112. package/es/components/position.js +2 -1
  113. package/es/components/select/base.d.ts +2 -1
  114. package/es/components/select/base.js +3 -1
  115. package/es/components/select/base.vdt.js +3 -1
  116. package/es/components/table/cell.js +1 -6
  117. package/es/components/table/index.spec.js +130 -19
  118. package/es/components/table/row.d.ts +1 -1
  119. package/es/components/table/row.js +2 -1
  120. package/es/components/table/styles.js +1 -1
  121. package/es/components/table/table.d.ts +15 -0
  122. package/es/components/table/table.js +16 -7
  123. package/es/components/table/table.vdt.js +20 -6
  124. package/es/components/table/useChecked.d.ts +3 -2
  125. package/es/components/table/useChecked.js +23 -12
  126. package/es/components/table/useDisableRow.d.ts +2 -1
  127. package/es/components/table/useDisableRow.js +4 -4
  128. package/es/components/table/useDraggable.d.ts +3 -2
  129. package/es/components/table/useDraggable.js +11 -8
  130. package/es/components/table/useGroup.js +3 -0
  131. package/es/components/table/useMerge.d.ts +2 -1
  132. package/es/components/table/useMerge.js +5 -4
  133. package/es/components/table/usePagination.d.ts +8 -0
  134. package/es/components/table/usePagination.js +81 -0
  135. package/es/components/table/useTree.d.ts +2 -1
  136. package/es/components/table/useTree.js +3 -4
  137. package/es/components/tooltip/content.d.ts +1 -0
  138. package/es/components/tooltip/content.js +18 -1
  139. package/es/components/tooltip/content.vdt.js +3 -1
  140. package/es/components/tooltip/index.spec.js +117 -10
  141. package/es/components/tooltip/styles.d.ts +22 -0
  142. package/es/components/tooltip/styles.js +1 -1
  143. package/es/components/tooltip/tooltip.d.ts +1 -0
  144. package/es/components/tooltip/tooltip.js +11 -0
  145. package/es/components/virtual.d.ts +8 -0
  146. package/es/components/virtual.js +126 -0
  147. package/es/index.d.ts +3 -3
  148. package/es/index.js +3 -3
  149. package/es/packages/kpc-react/__tests__/components/cascader.spec.d.ts +1 -0
  150. package/es/packages/kpc-react/__tests__/components/cascader.spec.js +79 -0
  151. package/es/site/data/components/input/demos/autoRows/index.d.ts +9 -0
  152. package/es/site/data/components/input/demos/autoRows/index.js +24 -0
  153. package/es/site/data/components/input/demos/autoRows/react.d.ts +8 -0
  154. package/es/site/data/components/input/demos/autoRows/react.js +62 -0
  155. package/es/site/data/components/input/demos/password/index.d.ts +5 -0
  156. package/es/site/data/components/input/demos/password/index.js +17 -0
  157. package/es/site/data/components/input/demos/password/react.d.ts +5 -0
  158. package/es/site/data/components/input/demos/password/react.js +41 -0
  159. package/es/site/data/components/input/demos/textarea/react.js +4 -2
  160. package/es/site/data/components/menu/demos/collapse/index.js +1 -1
  161. package/es/site/data/components/menu/demos/collapse/react.js +1 -1
  162. package/es/site/data/components/table/demos/hideHeader/index.d.ts +12 -0
  163. package/es/site/data/components/table/demos/hideHeader/index.js +30 -0
  164. package/es/site/data/components/table/demos/hideHeader/react.d.ts +11 -0
  165. package/es/site/data/components/table/demos/hideHeader/react.js +60 -0
  166. package/es/site/data/components/table/demos/pagination/index.d.ts +12 -0
  167. package/es/site/data/components/table/demos/pagination/index.js +35 -0
  168. package/es/site/data/components/table/demos/pagination/react.d.ts +16 -0
  169. package/es/site/data/components/table/demos/pagination/react.js +65 -0
  170. package/es/styles/fonts/ionicons.js +1 -1
  171. package/index.ts +3 -3
  172. package/package.json +5 -4
  173. package/styles/fonts/ionicons.ts +0 -1
@@ -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);
@@ -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';
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';
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").Children;
3
4
  };
@@ -1,6 +1,6 @@
1
1
  import { useInstance } from 'intact';
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';
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';
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
  }
@@ -2,6 +2,7 @@ import _inheritsLoose from "@babel/runtime-corejs3/helpers/inheritsLoose";
2
2
  import { Component } from 'intact';
3
3
  import template from './index.vdt';
4
4
  import { sizes } from '../../styles/utils';
5
+ import { Dropdown } from '../dropdown';
5
6
  var typeDefs = {
6
7
  value: {
7
8
  type: String,
@@ -11,13 +12,17 @@ var typeDefs = {
11
12
  size: sizes,
12
13
  disabled: Boolean,
13
14
  container: [Function, String],
14
- show: Boolean
15
+ show: Boolean,
16
+ position: Dropdown.typeDefs.position
15
17
  };
16
18
 
17
19
  var defaults = function defaults() {
18
20
  return {
19
21
  presets: ['#D0021B', '#F5A623', '#F8E71C', '#8B572A', '#7ED321', '#417505', '#BD10E0', '#9013FE', '#4A90E2', '#50E3C2', '#B8E986', '#000000', '#4A4A4A', '#9B9B9B', '#FFFFFF'],
20
- size: 'default'
22
+ size: 'default',
23
+ position: {
24
+ collision: 'fit'
25
+ }
21
26
  };
22
27
  };
23
28
 
@@ -19,7 +19,8 @@ export default function ($props, $blocks, $__proto__) {
19
19
  value = _this$get.value,
20
20
  size = _this$get.size,
21
21
  disabled = _this$get.disabled,
22
- container = _this$get.container;
22
+ container = _this$get.container,
23
+ position = _this$get.position;
23
24
 
24
25
  var classNameObj = (_classNameObj = {
25
26
  'k-colorpicker': true
@@ -27,11 +28,7 @@ export default function ($props, $blocks, $__proto__) {
27
28
  return _$cv('div', _extends({
28
29
  'className': _$cn(classNameObj)
29
30
  }, getRestProps(this)), _$cc(Dropdown, {
30
- 'position': {
31
- my: 'left top+8',
32
- at: 'left bottom',
33
- collision: 'flip'
34
- },
31
+ 'position': position,
35
32
  'trigger': 'click',
36
33
  'disabled': disabled,
37
34
  'container': container,
@@ -243,7 +243,7 @@ describe('Dialog', function () {
243
243
  return wait(500);
244
244
 
245
245
  case 20:
246
- expect(document.body.getAttribute('style')).to.be.null;
246
+ expect(!!document.body.getAttribute('style')).to.be.false;
247
247
 
248
248
  case 21:
249
249
  case "end":
@@ -347,7 +347,7 @@ describe('Dialog', function () {
347
347
  return wait(500);
348
348
 
349
349
  case 18:
350
- expect(document.body.getAttribute('style')).to.be.null;
350
+ expect(!!document.body.getAttribute('style')).to.be.false;
351
351
 
352
352
  case 19:
353
353
  case "end":
@@ -3,6 +3,7 @@ import { Options, Feedback } from '../position';
3
3
  import { Portal, PortalProps } from '../portal';
4
4
  import { FeedbackCallback } from './usePosition';
5
5
  import type { Events } from '../types';
6
+ import { Virtual } from '../virtual';
6
7
  export declare type Position = Options;
7
8
  export declare type PositionShorthand = 'left' | 'bottom' | 'right' | 'top';
8
9
  export declare const DROPDOWN = "Dropdown";
@@ -12,6 +13,7 @@ export interface DropdownProps {
12
13
  disabled?: boolean;
13
14
  value?: boolean;
14
15
  position?: Position | 'left' | 'bottom' | 'right' | 'top';
16
+ collison?: Position['collision'];
15
17
  of?: 'self' | 'parent' | Event;
16
18
  container?: PortalProps['container'];
17
19
  }
@@ -21,6 +23,8 @@ export interface DropdownEvents {
21
23
  hide: [];
22
24
  mouseenter: [MouseEvent];
23
25
  mouseleave: [MouseEvent];
26
+ click: [MouseEvent];
27
+ contextmenu: [MouseEvent];
24
28
  positioned: [Feedback];
25
29
  }
26
30
  export interface DropdownBlocks {
@@ -30,7 +34,7 @@ export declare class Dropdown<T extends DropdownProps = DropdownProps, E extends
30
34
  static typeDefs: Required<TypeDefs<DropdownProps>>;
31
35
  static defaults: () => Partial<DropdownProps>;
32
36
  static events: Events<DropdownEvents>;
33
- static template: (this: Dropdown) => (VNode<import("intact").VNodeTag> | VNode<typeof Portal>)[];
37
+ static template: (this: Dropdown) => (VNode<typeof Virtual> | VNode<typeof Portal>)[];
34
38
  menuVNode: VNode | null;
35
39
  dropdown: Dropdown | null;
36
40
  rootDropdown: Dropdown | null;
@@ -41,8 +45,7 @@ export declare class Dropdown<T extends DropdownProps = DropdownProps, E extends
41
45
  value: boolean;
42
46
  };
43
47
  };
44
- private timer;
45
- private triggerProps;
48
+ protected timer: number | undefined;
46
49
  init(): void;
47
50
  show(shouldFocus?: boolean): void;
48
51
  hide(immediately?: boolean): void;
@@ -52,6 +55,4 @@ export declare class Dropdown<T extends DropdownProps = DropdownProps, E extends
52
55
  private onContextMenu;
53
56
  private onLeave;
54
57
  private initEventCallbacks;
55
- private callOriginalCallback;
56
- private normalizeTriggerProps;
57
58
  }
@@ -3,14 +3,15 @@ import _inheritsLoose from "@babel/runtime-corejs3/helpers/inheritsLoose";
3
3
  import _concatInstanceProperty from "@babel/runtime-corejs3/core-js/instance/concat";
4
4
  import _filterInstanceProperty from "@babel/runtime-corejs3/core-js/instance/filter";
5
5
  import { __decorate } from "tslib";
6
- import { Component, createVNode as h, directClone, provide, inject, findDomFromVNode, createVNode, nextTick } from 'intact';
7
- import { bind, isTextChildren } from '../utils';
8
- import { EMPTY_OBJ, isFunction, noop } from 'intact-shared';
6
+ import { Component, createVNode as h, provide, inject, findDomFromVNode, nextTick } from 'intact';
7
+ import { bind, getRestProps } from '../utils';
8
+ import { noop } from 'intact-shared';
9
9
  import { cx } from '@emotion/css';
10
10
  import { useDocumentClick, containsOrEqual } from '../../hooks/useDocumentClick';
11
11
  import { Portal } from '../portal';
12
12
  import { useShowHideEvents } from '../../hooks/useShowHideEvents';
13
13
  import { usePosition } from './usePosition';
14
+ import { Virtual } from '../virtual';
14
15
  export var DROPDOWN = 'Dropdown';
15
16
  export var ROOT_DROPDOWN = 'RootDropdown';
16
17
  var typeDefs = {
@@ -20,13 +21,13 @@ var typeDefs = {
20
21
  position: [Object, 'left', 'bottom', 'right', 'top'],
21
22
  // Event is undefined in NodeJs
22
23
  of: ['self', 'parent', typeof Event === 'undefined' ? undefined : Event],
23
- container: [String, Function]
24
+ container: [String, Function],
25
+ collison: ['none', 'fit', 'flip', 'flipfit', Array]
24
26
  };
25
27
 
26
28
  var defaults = function defaults() {
27
29
  return {
28
30
  trigger: 'hover',
29
- position: {},
30
31
  of: 'self'
31
32
  };
32
33
  };
@@ -37,6 +38,8 @@ var events = {
37
38
  hide: true,
38
39
  mouseenter: true,
39
40
  mouseleave: true,
41
+ click: true,
42
+ contextmenu: true,
40
43
  positioned: true
41
44
  };
42
45
  export var Dropdown = /*#__PURE__*/function (_Component) {
@@ -58,7 +61,6 @@ export var Dropdown = /*#__PURE__*/function (_Component) {
58
61
  _this.showedDropdown = null;
59
62
  _this.positionHook = usePosition();
60
63
  _this.timer = undefined;
61
- _this.triggerProps = null;
62
64
  return _this;
63
65
  }
64
66
 
@@ -96,7 +98,13 @@ export var Dropdown = /*#__PURE__*/function (_Component) {
96
98
 
97
99
  if (this.get('disabled')) return;
98
100
  clearTimeout(this.timer);
99
- this.set('value', true);
101
+ this.set('value', true); // should show parent dropdown
102
+
103
+ var parentDropdown = this.dropdown;
104
+
105
+ if (parentDropdown) {
106
+ parentDropdown.show();
107
+ }
100
108
 
101
109
  if (shouldFocus) {
102
110
  nextTick(function () {
@@ -114,10 +122,16 @@ export var Dropdown = /*#__PURE__*/function (_Component) {
114
122
 
115
123
  if (this.get('disabled')) return;
116
124
  if (!this.get('value')) return;
125
+ var showedDropdown = this.showedDropdown;
126
+
127
+ if (showedDropdown) {
128
+ showedDropdown.hide(immediately);
129
+ }
117
130
 
118
131
  if (immediately) {
119
132
  this.set('value', false);
120
133
  } else {
134
+ clearTimeout(this.timer);
121
135
  this.timer = window.setTimeout(function () {
122
136
  _this4.set('value', false);
123
137
  }, 200);
@@ -137,23 +151,24 @@ export var Dropdown = /*#__PURE__*/function (_Component) {
137
151
  };
138
152
 
139
153
  _proto.onEnter = function onEnter(e) {
140
- this.callOriginalCallback(e.type === 'click' ? 'ev-click' : 'ev-mouseenter', e);
141
154
  this.show();
155
+ this.trigger(e.type, e);
142
156
  };
143
157
 
144
158
  _proto.onContextMenu = function onContextMenu(e) {
145
- this.callOriginalCallback('ev-contextmenu', e);
146
159
  e.preventDefault();
147
160
  this.set('of', e);
148
161
  this.show();
162
+ this.trigger('contextmenu', e);
149
163
  };
150
164
 
151
165
  _proto.onLeave = function onLeave(e) {
152
- this.callOriginalCallback('ev-mouseleave', e);
153
166
  this.hide();
167
+ this.trigger(e.type, e);
154
168
  };
155
169
 
156
- _proto.initEventCallbacks = function initEventCallbacks(trigger) {
170
+ _proto.initEventCallbacks = function initEventCallbacks() {
171
+ var trigger = this.get('trigger');
157
172
  var props = {};
158
173
 
159
174
  switch (trigger) {
@@ -180,51 +195,6 @@ export var Dropdown = /*#__PURE__*/function (_Component) {
180
195
  return props;
181
196
  };
182
197
 
183
- _proto.callOriginalCallback = function callOriginalCallback(name, e) {
184
- var callback = this.triggerProps[name];
185
- var callbackOnDropdown = this.get(name);
186
- if (isFunction(callback)) callback(e);
187
- if (isFunction(callbackOnDropdown)) callbackOnDropdown(e);
188
- };
189
-
190
- _proto.normalizeTriggerProps = function normalizeTriggerProps(props) {
191
- // if use kpc in react or vue, normalize props by Wrapper.props.vnode;
192
- var vnode = props.vnode;
193
- if (!vnode) return props; // maybe we render the intact component in react slot property, in this case
194
- // the $isReact is false. so use the vnode $$typeof field as gauge
195
-
196
- if (vnode.$$typeof || this.$isVueNext) {
197
- var _props = vnode.props;
198
- if (!_props) return props;
199
- return {
200
- vnode: vnode,
201
- 'ev-click': _props.onClick,
202
- 'ev-mouseenter': _props.onMouseEnter,
203
- 'ev-mouseleave': _props.onMouseLeave,
204
- 'ev-contextmenu': _props.onContextMenu,
205
- className: _props.className || _props.class
206
- /* vue-next */
207
-
208
- };
209
- } else if (this.$isVue) {
210
- var data = vnode.data;
211
- var on = data && data.on || EMPTY_OBJ;
212
- var ret = {
213
- vnode: vnode
214
- };
215
- ['click', 'mouseenter', 'mouseleave', 'contextmenu'].forEach(function (event) {
216
- var method = on[event];
217
-
218
- if (method) {
219
- ret["ev-" + event] = method;
220
- }
221
- });
222
- return ret;
223
- }
224
-
225
- return props;
226
- };
227
-
228
198
  return Dropdown;
229
199
  }(Component);
230
200
  Dropdown.$doubleVNodes = true;
@@ -254,21 +224,22 @@ Dropdown.template = function () {
254
224
  var _children = children,
255
225
  trigger = _children[0],
256
226
  menu = _children[1];
257
- var triggerType = this.get('trigger');
258
- var props = this.initEventCallbacks(triggerType);
259
- var clonedTrigger = isTextChildren(trigger) ? createVNode('span', null, trigger) : directClone(trigger);
260
- var triggerProps = this.triggerProps = this.normalizeTriggerProps(trigger.props || EMPTY_OBJ); // add a className for opening status
261
-
262
- var className = trigger.className || triggerProps.className;
263
- className = cx((_cx = {}, _cx[className] = className, _cx['k-dropdown-open'] = this.get('value'), _cx));
264
- clonedTrigger.props = _extends({}, triggerProps, props, {
265
- className: className
266
- });
267
- clonedTrigger.className = className;
227
+ var props = this.initEventCallbacks();
228
+
229
+ var _this$get = this.get(),
230
+ className = _this$get.className,
231
+ value = _this$get.value,
232
+ container = _this$get.container;
233
+
234
+ className = cx((_cx = {
235
+ 'k-dropdown-open': value
236
+ }, _cx[className] = !!className, _cx));
268
237
  this.menuVNode = menu;
269
- return [clonedTrigger, h(Portal, {
238
+ return [h(Virtual, _extends({}, props, getRestProps(this), {
239
+ className: className
240
+ }), trigger), h(Portal, {
270
241
  children: menu,
271
- container: this.get('container')
242
+ container: container
272
243
  })];
273
244
  };
274
245