@progress/kendo-react-dropdowns 6.1.1 → 7.0.0-develop.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 (177) hide show
  1. package/{dist/es/AutoComplete → AutoComplete}/AutoComplete.d.ts +12 -8
  2. package/{dist/npm/AutoComplete → AutoComplete}/AutoCompleteProps.d.ts +4 -1
  3. package/{dist/es/ComboBox → ComboBox}/ComboBox.d.ts +12 -8
  4. package/{dist/es/ComboBox → ComboBox}/ComboBoxProps.d.ts +4 -1
  5. package/{dist/es/DropDownList → DropDownList}/DropDownList.d.ts +9 -5
  6. package/{dist/es/DropDownList → DropDownList}/DropDownListProps.d.ts +4 -1
  7. package/{dist/es/DropDownTree → DropDownTree}/DropDownTree.d.ts +4 -0
  8. package/{dist/npm/DropDownTree → DropDownTree}/DropDownTreeProps.d.ts +4 -1
  9. package/DropDownTree/ListNoData.d.ts +10 -0
  10. package/DropDownTree/useDropdownWidth.d.ts +9 -0
  11. package/LICENSE.md +1 -1
  12. package/{dist/es/MultiColumnComboBox → MultiColumnComboBox}/MultiColumnComboBox.d.ts +4 -0
  13. package/{dist/npm/MultiSelect → MultiSelect}/MultiSelect.d.ts +9 -5
  14. package/{dist/es/MultiSelect → MultiSelect}/MultiSelectProps.d.ts +4 -1
  15. package/{dist/npm/MultiSelect → MultiSelect}/TagList.d.ts +5 -1
  16. package/{dist/es/MultiSelectTree → MultiSelectTree}/MultiSelectTree.d.ts +4 -0
  17. package/{dist/es/MultiSelectTree → MultiSelectTree}/MultiSelectTreeProps.d.ts +5 -1
  18. package/{dist/npm/MultiSelectTree → MultiSelectTree}/utils.d.ts +5 -1
  19. package/{dist/npm/common → common}/AdaptiveMode.d.ts +5 -1
  20. package/common/ClearButton.d.ts +18 -0
  21. package/{dist/npm/common → common}/DropDownBase.d.ts +5 -1
  22. package/{dist/es/common → common}/GroupStickyHeader.d.ts +5 -1
  23. package/{dist/es/common → common}/List.d.ts +7 -3
  24. package/common/ListContainer.d.ts +22 -0
  25. package/common/ListDefaultItem.d.ts +20 -0
  26. package/{dist/npm/common → common}/ListFilter.d.ts +4 -0
  27. package/{dist/npm/common → common}/ListGroupItem.d.ts +5 -1
  28. package/{dist/npm/common → common}/ListItem.d.ts +5 -1
  29. package/common/MultiColumnList.d.ts +9 -0
  30. package/common/Navigation.d.ts +17 -0
  31. package/{dist/es/common → common}/SearchBar.d.ts +5 -1
  32. package/{dist/npm/common → common}/VirtualScroll.d.ts +4 -1
  33. package/common/constants.d.ts +8 -0
  34. package/{dist/es/common → common}/events.d.ts +4 -1
  35. package/{dist/npm/common → common}/filterDescriptor.d.ts +4 -0
  36. package/{dist/es/common → common}/settings.d.ts +5 -2
  37. package/{dist/npm/common → common}/utils.d.ts +4 -0
  38. package/dist/cdn/js/kendo-react-dropdowns.js +5 -1
  39. package/index.d.ts +29 -0
  40. package/index.js +5 -0
  41. package/index.mjs +4383 -0
  42. package/{dist/npm/messages → messages}/index.d.ts +4 -0
  43. package/package-metadata.d.ts +9 -0
  44. package/package.json +34 -62
  45. package/about.md +0 -3
  46. package/dist/es/AutoComplete/AutoComplete.js +0 -652
  47. package/dist/es/AutoComplete/AutoCompleteProps.d.ts +0 -243
  48. package/dist/es/AutoComplete/AutoCompleteProps.js +0 -2
  49. package/dist/es/ComboBox/ComboBox.js +0 -915
  50. package/dist/es/ComboBox/ComboBoxProps.js +0 -2
  51. package/dist/es/DropDownList/DropDownList.js +0 -887
  52. package/dist/es/DropDownList/DropDownListProps.js +0 -2
  53. package/dist/es/DropDownTree/DropDownTree.js +0 -540
  54. package/dist/es/DropDownTree/DropDownTreeProps.d.ts +0 -294
  55. package/dist/es/DropDownTree/DropDownTreeProps.js +0 -2
  56. package/dist/es/DropDownTree/ListNoData.d.ts +0 -6
  57. package/dist/es/DropDownTree/ListNoData.js +0 -8
  58. package/dist/es/DropDownTree/useDropdownWidth.d.ts +0 -5
  59. package/dist/es/DropDownTree/useDropdownWidth.js +0 -13
  60. package/dist/es/MultiColumnComboBox/MultiColumnComboBox.js +0 -213
  61. package/dist/es/MultiSelect/MultiSelect.d.ts +0 -256
  62. package/dist/es/MultiSelect/MultiSelect.js +0 -1110
  63. package/dist/es/MultiSelect/MultiSelectProps.js +0 -2
  64. package/dist/es/MultiSelect/TagList.d.ts +0 -38
  65. package/dist/es/MultiSelect/TagList.js +0 -39
  66. package/dist/es/MultiSelectTree/MultiSelectTree.js +0 -619
  67. package/dist/es/MultiSelectTree/MultiSelectTreeProps.js +0 -2
  68. package/dist/es/MultiSelectTree/utils.d.ts +0 -17
  69. package/dist/es/MultiSelectTree/utils.js +0 -191
  70. package/dist/es/common/AdaptiveMode.d.ts +0 -21
  71. package/dist/es/common/AdaptiveMode.js +0 -45
  72. package/dist/es/common/ClearButton.d.ts +0 -14
  73. package/dist/es/common/ClearButton.js +0 -39
  74. package/dist/es/common/DropDownBase.d.ts +0 -175
  75. package/dist/es/common/DropDownBase.js +0 -297
  76. package/dist/es/common/GroupStickyHeader.js +0 -34
  77. package/dist/es/common/List.js +0 -75
  78. package/dist/es/common/ListContainer.d.ts +0 -18
  79. package/dist/es/common/ListContainer.js +0 -43
  80. package/dist/es/common/ListDefaultItem.d.ts +0 -16
  81. package/dist/es/common/ListDefaultItem.js +0 -36
  82. package/dist/es/common/ListFilter.d.ts +0 -19
  83. package/dist/es/common/ListFilter.js +0 -37
  84. package/dist/es/common/ListGroupItem.d.ts +0 -33
  85. package/dist/es/common/ListGroupItem.js +0 -33
  86. package/dist/es/common/ListItem.d.ts +0 -61
  87. package/dist/es/common/ListItem.js +0 -44
  88. package/dist/es/common/MultiColumnList.d.ts +0 -6
  89. package/dist/es/common/MultiColumnList.js +0 -22
  90. package/dist/es/common/Navigation.d.ts +0 -13
  91. package/dist/es/common/Navigation.js +0 -34
  92. package/dist/es/common/SearchBar.js +0 -62
  93. package/dist/es/common/VirtualScroll.d.ts +0 -42
  94. package/dist/es/common/VirtualScroll.js +0 -161
  95. package/dist/es/common/constants.d.ts +0 -4
  96. package/dist/es/common/constants.js +0 -4
  97. package/dist/es/common/events.js +0 -1
  98. package/dist/es/common/filterDescriptor.d.ts +0 -41
  99. package/dist/es/common/filterDescriptor.js +0 -2
  100. package/dist/es/common/settings.js +0 -8
  101. package/dist/es/common/utils.d.ts +0 -62
  102. package/dist/es/common/utils.js +0 -194
  103. package/dist/es/main.d.ts +0 -25
  104. package/dist/es/main.js +0 -19
  105. package/dist/es/messages/index.d.ts +0 -40
  106. package/dist/es/messages/index.js +0 -41
  107. package/dist/es/package-metadata.d.ts +0 -5
  108. package/dist/es/package-metadata.js +0 -11
  109. package/dist/npm/AutoComplete/AutoComplete.d.ts +0 -230
  110. package/dist/npm/AutoComplete/AutoComplete.js +0 -655
  111. package/dist/npm/AutoComplete/AutoCompleteProps.js +0 -3
  112. package/dist/npm/ComboBox/ComboBox.d.ts +0 -248
  113. package/dist/npm/ComboBox/ComboBox.js +0 -918
  114. package/dist/npm/ComboBox/ComboBoxProps.d.ts +0 -313
  115. package/dist/npm/ComboBox/ComboBoxProps.js +0 -3
  116. package/dist/npm/DropDownList/DropDownList.d.ts +0 -258
  117. package/dist/npm/DropDownList/DropDownList.js +0 -890
  118. package/dist/npm/DropDownList/DropDownListProps.d.ts +0 -326
  119. package/dist/npm/DropDownList/DropDownListProps.js +0 -3
  120. package/dist/npm/DropDownTree/DropDownTree.d.ts +0 -70
  121. package/dist/npm/DropDownTree/DropDownTree.js +0 -543
  122. package/dist/npm/DropDownTree/DropDownTreeProps.js +0 -3
  123. package/dist/npm/DropDownTree/ListNoData.d.ts +0 -6
  124. package/dist/npm/DropDownTree/ListNoData.js +0 -12
  125. package/dist/npm/DropDownTree/useDropdownWidth.d.ts +0 -5
  126. package/dist/npm/DropDownTree/useDropdownWidth.js +0 -17
  127. package/dist/npm/MultiColumnComboBox/MultiColumnComboBox.d.ts +0 -287
  128. package/dist/npm/MultiColumnComboBox/MultiColumnComboBox.js +0 -216
  129. package/dist/npm/MultiSelect/MultiSelect.js +0 -1113
  130. package/dist/npm/MultiSelect/MultiSelectProps.d.ts +0 -314
  131. package/dist/npm/MultiSelect/MultiSelectProps.js +0 -3
  132. package/dist/npm/MultiSelect/TagList.js +0 -41
  133. package/dist/npm/MultiSelectTree/MultiSelectTree.d.ts +0 -81
  134. package/dist/npm/MultiSelectTree/MultiSelectTree.js +0 -622
  135. package/dist/npm/MultiSelectTree/MultiSelectTreeProps.d.ts +0 -320
  136. package/dist/npm/MultiSelectTree/MultiSelectTreeProps.js +0 -3
  137. package/dist/npm/MultiSelectTree/utils.js +0 -196
  138. package/dist/npm/common/AdaptiveMode.js +0 -49
  139. package/dist/npm/common/ClearButton.d.ts +0 -14
  140. package/dist/npm/common/ClearButton.js +0 -41
  141. package/dist/npm/common/DropDownBase.js +0 -299
  142. package/dist/npm/common/GroupStickyHeader.d.ts +0 -24
  143. package/dist/npm/common/GroupStickyHeader.js +0 -36
  144. package/dist/npm/common/List.d.ts +0 -45
  145. package/dist/npm/common/List.js +0 -77
  146. package/dist/npm/common/ListContainer.d.ts +0 -18
  147. package/dist/npm/common/ListContainer.js +0 -45
  148. package/dist/npm/common/ListDefaultItem.d.ts +0 -16
  149. package/dist/npm/common/ListDefaultItem.js +0 -38
  150. package/dist/npm/common/ListFilter.js +0 -39
  151. package/dist/npm/common/ListGroupItem.js +0 -35
  152. package/dist/npm/common/ListItem.js +0 -46
  153. package/dist/npm/common/MultiColumnList.d.ts +0 -6
  154. package/dist/npm/common/MultiColumnList.js +0 -26
  155. package/dist/npm/common/Navigation.d.ts +0 -13
  156. package/dist/npm/common/Navigation.js +0 -37
  157. package/dist/npm/common/SearchBar.d.ts +0 -43
  158. package/dist/npm/common/SearchBar.js +0 -64
  159. package/dist/npm/common/VirtualScroll.js +0 -163
  160. package/dist/npm/common/constants.d.ts +0 -4
  161. package/dist/npm/common/constants.js +0 -7
  162. package/dist/npm/common/events.d.ts +0 -73
  163. package/dist/npm/common/events.js +0 -2
  164. package/dist/npm/common/filterDescriptor.js +0 -3
  165. package/dist/npm/common/settings.d.ts +0 -114
  166. package/dist/npm/common/settings.js +0 -11
  167. package/dist/npm/common/utils.js +0 -211
  168. package/dist/npm/main.d.ts +0 -25
  169. package/dist/npm/main.js +0 -62
  170. package/dist/npm/messages/index.js +0 -44
  171. package/dist/npm/package-metadata.d.ts +0 -5
  172. package/dist/npm/package-metadata.js +0 -14
  173. package/dist/systemjs/kendo-react-dropdowns.js +0 -1
  174. package/e2e-next/combobox.basic.ts +0 -24
  175. package/e2e-next/dropdownlist.basic.tests.ts +0 -24
  176. package/e2e-next/dropdowntree.basic.tests.ts +0 -24
  177. package/e2e-next/multicolumncombobox.basic.tests.ts +0 -24
@@ -1,619 +0,0 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
11
- };
12
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
13
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
14
- if (ar || !(i in from)) {
15
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
16
- ar[i] = from[i];
17
- }
18
- }
19
- return to.concat(ar || Array.prototype.slice.call(from));
20
- };
21
- var _this = this;
22
- import * as React from 'react';
23
- import * as PropTypes from 'prop-types';
24
- import { classNames, noop, useRtl, getTabIndex, Keys, guid, kendoThemeMaps, createPropsContext, usePropsContext, IconWrap, canUseDOM } from '@progress/kendo-react-common';
25
- import { Popup } from '@progress/kendo-react-popup';
26
- import { useLocalization } from '@progress/kendo-react-intl';
27
- import { TreeView } from '@progress/kendo-react-treeview';
28
- import { validatePackage } from '@progress/kendo-react-common';
29
- import { packageMetadata } from './../package-metadata';
30
- import { getItemValue, areSame, matchTags } from '../common/utils';
31
- import { useDropdownWidth } from './../DropDownTree/useDropdownWidth';
32
- import { ListNoData } from './../DropDownTree/ListNoData';
33
- import { messages, nodata, adaptiveModeFooterCancel, adaptiveModeFooterApply } from './../messages';
34
- import { FloatingLabel } from '@progress/kendo-react-labels';
35
- import TagList from '../MultiSelect/TagList';
36
- import ClearButton from '../common/ClearButton';
37
- import ListFilter from '../common/ListFilter';
38
- import { AdaptiveMode } from '../common/AdaptiveMode';
39
- import { ActionSheetContent } from '@progress/kendo-react-layout';
40
- import { MOBILE_MEDIUM_DEVISE } from '../common/constants';
41
- var VALIDATION_MESSAGE = 'Please select a value from the list!';
42
- var sizeMap = kendoThemeMaps.sizeMap, roundedMap = kendoThemeMaps.roundedMap;
43
- var toLevel = function (hierarchicalIndex) {
44
- return hierarchicalIndex.split('_').map(function (i) { return parseInt(i, 10); });
45
- };
46
- var getValidity = function (parameters, hasValue) {
47
- var validationMessage = parameters.validationMessage, valid = parameters.valid, required = parameters.required;
48
- return ({
49
- customError: validationMessage !== undefined,
50
- valid: Boolean(valid !== undefined ? valid : (!required || hasValue)),
51
- valueMissing: !hasValue
52
- });
53
- };
54
- var defaultProps = {
55
- checkField: 'checkField',
56
- checkIndeterminateField: 'checkIndeterminateField',
57
- subItemsField: 'items',
58
- popupSettings: {
59
- animate: true,
60
- width: '200px',
61
- height: '200px'
62
- },
63
- size: 'medium',
64
- rounded: 'medium',
65
- fillMode: 'solid',
66
- required: false,
67
- validityStyles: true
68
- };
69
- /**
70
- * Represents the PropsContext of the `MultiSelectTree` component.
71
- * Used for global configuration of all `MultiSelectTree` instances.
72
- *
73
- * For more information, refer to the [Dropdowns Props Context]({% slug props-context_dropdowns %}) article.
74
- */
75
- export var MultiSelectTreePropsContext = createPropsContext();
76
- /**
77
- * Represents the MultiSelectTree component.
78
- *
79
- * Accepts properties of type [MultiSelectTreeProps]({% slug api_dropdowns_multiselecttreeprops %}).
80
- * Obtaining the `ref` returns an object of type [MultiSelectTreeHandle]({% slug api_dropdowns_multiselecttreehandle %}).
81
- *
82
- * @example
83
- * ```jsx
84
- * const dataItemKey = 'id';
85
- * const checkField = 'checkField';
86
- * const checkIndeterminateField = 'checkIndeterminateField';
87
- * const subItemsField = 'items';
88
- * const expandField = 'expanded';
89
- * const textField = 'text';
90
- * const fields = {
91
- * dataItemKey,
92
- * checkField,
93
- * checkIndeterminateField,
94
- * expandField,
95
- * subItemsField,
96
- * };
97
- * const App = () => {
98
- * const [value, setValue] = React.useState([]);
99
- * const [expanded, setExpanded] = React.useState([data[0][dataItemKey]]);
100
- * const onChange = (event) =>
101
- * setValue(
102
- * getMultiSelectTreeValue(data, {
103
- * ...fields,
104
- * ...event,
105
- * value,
106
- * })
107
- * );
108
- * const onExpandChange = React.useCallback(
109
- * (event) => setExpanded(expandedState(event.item, dataItemKey, expanded)),
110
- * [expanded]
111
- * );
112
- * const treeData = React.useMemo(
113
- * () =>
114
- * processMultiSelectTreeData(data, {
115
- * expanded,
116
- * value,
117
- * ...fields,
118
- * }),
119
- * [expanded, value]
120
- * );
121
- *
122
- * return (
123
- * <div>
124
- * <div>Categories:</div>
125
- * <MultiSelectTree
126
- * style={{
127
- * width: '300px',
128
- * }}
129
- * data={treeData}
130
- * value={value}
131
- * onChange={onChange}
132
- * placeholder="Please select ..."
133
- * textField={textField}
134
- * dataItemKey={dataItemKey}
135
- * checkField={checkField}
136
- * checkIndeterminateField={checkIndeterminateField}
137
- * expandField={expandField}
138
- * subItemsField={subItemsField}
139
- * onExpandChange={onExpandChange}
140
- * />
141
- * </div>
142
- * );
143
- * };
144
- * ReactDOM.render(<App />, document.querySelector('my-app'));
145
- * ```
146
- */
147
- export var MultiSelectTree = React.forwardRef(function (directProps, ref) {
148
- var _a, _b;
149
- var props = usePropsContext(MultiSelectTreePropsContext, directProps);
150
- validatePackage(packageMetadata);
151
- var componentGuid = React.useMemo(function () { return guid(); }, []);
152
- var id = props.id || componentGuid;
153
- var _c = props.data, data = _c === void 0 ? [] : _c, dataItemKey = props.dataItemKey, _d = props.popupSettings, popupSettings = _d === void 0 ? {} : _d, _e = props.style, style = _e === void 0 ? {} : _e, opened = props.opened, disabled = props.disabled, _f = props.onOpen, onOpen = _f === void 0 ? noop : _f, _g = props.onClose, onClose = _g === void 0 ? noop : _g, placeholder = props.placeholder, label = props.label, name = props.name, _h = props.checkField, checkField = _h === void 0 ? defaultProps.checkField : _h, _j = props.checkIndeterminateField, checkIndeterminateField = _j === void 0 ? defaultProps.checkIndeterminateField : _j, _k = props.subItemsField, subItemsField = _k === void 0 ? defaultProps.subItemsField : _k, validationMessage = props.validationMessage, valid = props.valid, tags = props.tags, value = props.value, _l = props.required, required = _l === void 0 ? defaultProps.required : _l, _m = props.validityStyles, validityStyles = _m === void 0 ? defaultProps.validityStyles : _m;
154
- var tabIndex = getTabIndex(props.tabIndex, disabled);
155
- var targetRef = React.useRef(null);
156
- var elementRef = React.useRef(null);
157
- var inputRef = React.useRef(null);
158
- var adaptiveInputRef = React.useRef(null);
159
- var selectRef = React.useRef(null);
160
- var treeViewRef = React.useRef(null);
161
- var skipFocusRef = React.useRef(false);
162
- var tagsToRenderRef = React.useRef([]);
163
- var popupRef = React.useRef(null);
164
- var _o = React.useState(), focusedTagState = _o[0], setFocusedTagState = _o[1];
165
- var _p = React.useState(false), openState = _p[0], setOpenState = _p[1];
166
- var _q = React.useState(false), focusedState = _q[0], setFocusedState = _q[1];
167
- var _r = React.useState(), windowWidth = _r[0], setWindowWidth = _r[1];
168
- var _s = React.useState([]), currentTreeValue = _s[0], setCurrentTreeValue = _s[1];
169
- var _t = React.useState(''), filterState = _t[0], setFilterState = _t[1];
170
- var isAdaptive = !!(windowWidth && windowWidth <= MOBILE_MEDIUM_DEVISE && props.adaptive);
171
- var isOpen = opened !== undefined ? opened : openState;
172
- var hasValue = Boolean(Array.isArray(value) && value.length);
173
- var validity = getValidity({ validationMessage: validationMessage, valid: valid, required: required }, hasValue);
174
- var dir = useRtl(elementRef, props.dir);
175
- var initialStyleWidth = popupSettings.width !== undefined ?
176
- popupSettings.width : (style.width !== undefined ? style.width : defaultProps.popupSettings.width);
177
- var popupWidth = useDropdownWidth(elementRef, initialStyleWidth);
178
- var popupStyles = __assign({ width: popupWidth }, (dir !== undefined ? { direction: dir } : {}));
179
- var focus = React.useCallback(function () { return elementRef.current && elementRef.current.focus(); }, []);
180
- tagsToRenderRef.current = tags === undefined ?
181
- (value || []).map(function (item) { return ({ text: getItemValue(item, props.textField), data: [item] }); }) : __spreadArray([], tags, true);
182
- React.useImperativeHandle(targetRef, function () { return ({
183
- props: props,
184
- element: elementRef.current,
185
- focus: focus
186
- }); });
187
- React.useImperativeHandle(ref, function () { return targetRef.current; });
188
- var setValidity = React.useCallback(function () {
189
- if (selectRef.current && selectRef.current.setCustomValidity) {
190
- selectRef.current.setCustomValidity(validity.valid
191
- ? ''
192
- : validationMessage === undefined ? VALIDATION_MESSAGE : validationMessage);
193
- }
194
- }, [validationMessage, validity]);
195
- React.useEffect(setValidity);
196
- React.useEffect(function () {
197
- var observerResize = canUseDOM && window.ResizeObserver && new window.ResizeObserver(calculateMedia.bind(_this));
198
- if ((document === null || document === void 0 ? void 0 : document.body) && observerResize) {
199
- observerResize.observe(document.body);
200
- }
201
- return function () {
202
- if (observerResize) {
203
- observerResize.disconnect();
204
- }
205
- };
206
- }, []);
207
- React.useEffect(function () {
208
- if (popupRef.current && isOpen) {
209
- popupRef.current.setPosition(popupRef.current._popup);
210
- }
211
- }, [value, isOpen]);
212
- var changeValue = React.useCallback(function (event, relatedItems, operation) {
213
- if (props.onChange) {
214
- var changeEvent = __assign({ items: relatedItems, operation: operation }, event);
215
- props.onChange.call(undefined, changeEvent);
216
- }
217
- }, [props.onChange]);
218
- var onChange = React.useCallback(function (event) {
219
- if (areSame(event.item, value, dataItemKey) || !targetRef.current) {
220
- return;
221
- }
222
- var item = event.item, nativeEvent = event.nativeEvent, syntheticEvent = event.syntheticEvent;
223
- var ev = {
224
- syntheticEvent: syntheticEvent,
225
- nativeEvent: nativeEvent,
226
- target: targetRef.current
227
- };
228
- changeValue(ev, [item], 'toggle');
229
- }, [value, dataItemKey, changeValue]);
230
- var openPopup = React.useCallback(function (event) {
231
- if (!isOpen) {
232
- if (onOpen) {
233
- var openEvent = __assign({}, event);
234
- onOpen.call(undefined, openEvent);
235
- }
236
- if (opened === undefined) {
237
- setOpenState(true);
238
- setCurrentTreeValue(value || []);
239
- if (isAdaptive) {
240
- setTimeout(function () {
241
- var _a;
242
- focusElement((_a = adaptiveInputRef.current) === null || _a === void 0 ? void 0 : _a.element);
243
- }, 300);
244
- }
245
- }
246
- }
247
- }, [isOpen, opened, onOpen, isAdaptive, adaptiveInputRef]);
248
- var closePopup = React.useCallback(function (event) {
249
- if (isOpen) {
250
- if (onClose) {
251
- var closeEvent = __assign({}, event);
252
- onClose.call(undefined, closeEvent);
253
- }
254
- if (opened === undefined) {
255
- setOpenState(false);
256
- }
257
- }
258
- }, [isOpen, opened, onClose]);
259
- var switchFocus = React.useCallback(function (focusFn) {
260
- skipFocusRef.current = true;
261
- focusFn();
262
- window.setTimeout(function () { return skipFocusRef.current = false; }, 0);
263
- }, []);
264
- var focusElement = React.useCallback(function (element) {
265
- if (element) {
266
- switchFocus(function () { return element.focus(); });
267
- }
268
- }, [switchFocus]);
269
- var onPopupOpened = React.useCallback(function () {
270
- var _a;
271
- if (!focusedState && isOpen) {
272
- closePopup({ target: targetRef.current });
273
- }
274
- else {
275
- if (props.filterable) {
276
- focusElement((_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.element);
277
- }
278
- else {
279
- focusElement(treeViewRef.current && treeViewRef.current.element);
280
- }
281
- }
282
- }, [focusedState, isOpen, focusElement, closePopup, props.filterable]);
283
- var onPopupClosed = React.useCallback(function () {
284
- if (focusedState) {
285
- // Move the focus from treeview to dropdown without triggering Focus or Blur events.
286
- focusElement(elementRef.current);
287
- }
288
- }, [focusedState, focusElement]);
289
- var onFocus = React.useCallback(function (event) {
290
- if (!focusedState && !skipFocusRef.current) {
291
- setFocusedState(true);
292
- if (props.onFocus && targetRef.current) {
293
- var focusEvent = {
294
- syntheticEvent: event,
295
- nativeEvent: event.nativeEvent,
296
- target: targetRef.current
297
- };
298
- props.onFocus.call(undefined, focusEvent);
299
- }
300
- }
301
- }, [focusedState, props.onFocus]);
302
- var onBlur = React.useCallback(function (event) {
303
- if (focusedState && !skipFocusRef.current && targetRef.current) {
304
- setFocusedState(false);
305
- var ev = {
306
- syntheticEvent: event,
307
- nativeEvent: event.nativeEvent,
308
- target: targetRef.current
309
- };
310
- if (props.onBlur) {
311
- var focusEvent = __assign({}, ev);
312
- props.onBlur.call(undefined, focusEvent);
313
- }
314
- if (!isAdaptive) {
315
- closePopup(ev);
316
- }
317
- }
318
- }, [focusedState, props.onBlur, isOpen, opened, onClose]);
319
- var onWrapperMouseDown = React.useCallback(function () {
320
- if (focusedState) {
321
- // moving focus from treeview to dropdown triggers Focus and Blur events.
322
- switchFocus(noop);
323
- }
324
- }, [focusedState, switchFocus]);
325
- var onWrapperClick = React.useCallback(function (event) {
326
- if (!event.isDefaultPrevented() && targetRef.current) {
327
- setFocusedState(true);
328
- var ev = {
329
- syntheticEvent: event,
330
- nativeEvent: event.nativeEvent,
331
- target: targetRef.current
332
- };
333
- if (!isOpen) {
334
- openPopup(ev);
335
- }
336
- }
337
- }, [isOpen, openPopup]);
338
- var onWrapperKeyDown = React.useCallback(function (event) {
339
- var _a, _b;
340
- var keyCode = event.keyCode, altKey = event.altKey;
341
- var treeviewElement = treeViewRef.current && treeViewRef.current.element;
342
- if (!targetRef.current || (event.isDefaultPrevented() && ((_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.element) === event.target)) {
343
- return;
344
- }
345
- var ev = {
346
- syntheticEvent: event,
347
- nativeEvent: event.nativeEvent,
348
- target: targetRef.current
349
- };
350
- if (value && value.length > 0 &&
351
- (keyCode === Keys.left || keyCode === Keys.right ||
352
- keyCode === Keys.home || keyCode === Keys.end ||
353
- keyCode === Keys.delete)) {
354
- var tagsToRender = tagsToRenderRef.current;
355
- var focusedIndex = focusedTagState ?
356
- tagsToRender.findIndex(function (t) { return matchTags(t, focusedTagState, dataItemKey); }) : -1;
357
- var newFocusedTag = undefined;
358
- var hasFocused = focusedIndex !== -1;
359
- if (keyCode === Keys.left) {
360
- if (hasFocused) {
361
- focusedIndex = Math.max(0, focusedIndex - 1);
362
- }
363
- else {
364
- focusedIndex = tagsToRender.length - 1;
365
- }
366
- newFocusedTag = tagsToRender[focusedIndex];
367
- }
368
- else if (keyCode === Keys.right) {
369
- if (focusedIndex === tagsToRender.length - 1) {
370
- newFocusedTag = undefined;
371
- }
372
- else if (hasFocused) {
373
- focusedIndex = Math.min(tagsToRender.length - 1, focusedIndex + 1);
374
- newFocusedTag = tagsToRender[focusedIndex];
375
- }
376
- }
377
- else if (keyCode === Keys.home) {
378
- newFocusedTag = tagsToRender[0];
379
- }
380
- else if (keyCode === Keys.end) {
381
- newFocusedTag = tagsToRender[tagsToRender.length - 1];
382
- }
383
- else if (keyCode === Keys.delete) {
384
- if (hasFocused) {
385
- changeValue(ev, tagsToRender[focusedIndex].data, 'delete');
386
- }
387
- }
388
- if (newFocusedTag !== focusedTagState) {
389
- setFocusedTagState(newFocusedTag);
390
- }
391
- }
392
- if (isOpen) {
393
- if (keyCode === Keys.esc || (altKey && keyCode === Keys.up)) {
394
- event.preventDefault();
395
- closePopup(ev);
396
- }
397
- else if (treeviewElement && treeviewElement.querySelector('.k-focus') &&
398
- (keyCode === Keys.up || keyCode === Keys.down ||
399
- keyCode === Keys.left || keyCode === Keys.right ||
400
- keyCode === Keys.home || keyCode === Keys.end)) {
401
- if (keyCode === Keys.up && ((_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.element)) {
402
- var items = Array.from(treeviewElement.querySelectorAll('.k-treeview-item'));
403
- var focusedItem = __spreadArray([], items, true).reverse().find(function (i) { return Boolean(i && i.querySelector('.k-focus')); });
404
- if (focusedItem && items.indexOf(focusedItem) === 0) {
405
- return switchFocus(function () { var _a; focusElement((_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.element); });
406
- }
407
- }
408
- switchFocus(noop);
409
- }
410
- else if (keyCode === Keys.down) {
411
- switchFocus(function () { var _a; focusElement(((_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.element) || treeviewElement); });
412
- }
413
- }
414
- else {
415
- if (altKey && keyCode === Keys.down) {
416
- event.preventDefault();
417
- openPopup(ev);
418
- }
419
- }
420
- }, [isOpen, closePopup, focusElement, switchFocus, openPopup, focusedTagState, dataItemKey, value, changeValue]);
421
- var onInputKeyDown = React.useCallback(function (event) {
422
- var keyCode = event.keyCode, altKey = event.altKey;
423
- if (altKey || (keyCode !== Keys.up && keyCode !== Keys.down)) {
424
- return;
425
- }
426
- event.preventDefault();
427
- switchFocus(keyCode === Keys.up ?
428
- function () { focusElement(elementRef.current); } :
429
- function () { focusElement(treeViewRef.current && treeViewRef.current.element); });
430
- }, [focusElement, switchFocus]);
431
- var onClear = React.useCallback(function (event) {
432
- if (!targetRef.current) {
433
- return;
434
- }
435
- var ev = {
436
- syntheticEvent: event,
437
- nativeEvent: event.nativeEvent,
438
- target: targetRef.current
439
- };
440
- changeValue(ev, [], 'clear');
441
- closePopup(ev);
442
- event.preventDefault();
443
- }, [changeValue, closePopup]);
444
- var onTagDelete = React.useCallback(function (itemsToRemove, event) {
445
- var _a;
446
- closePopup({ target: targetRef.current });
447
- if (!focusedState) {
448
- focusElement((_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.element);
449
- }
450
- changeValue({
451
- syntheticEvent: event,
452
- nativeEvent: event.nativeEvent,
453
- target: targetRef.current
454
- }, itemsToRemove, 'delete');
455
- }, [changeValue, closePopup, focusElement, focusedState]);
456
- var onExpand = React.useCallback(function (event) {
457
- if (props.onExpandChange && targetRef.current) {
458
- var item = event.item, itemHierarchicalIndex = event.itemHierarchicalIndex, nativeEvent = event.nativeEvent, syntheticEvent = event.syntheticEvent;
459
- var expandEvent = {
460
- level: toLevel(itemHierarchicalIndex),
461
- item: item,
462
- nativeEvent: nativeEvent,
463
- syntheticEvent: syntheticEvent,
464
- target: targetRef.current
465
- };
466
- props.onExpandChange.call(undefined, expandEvent);
467
- }
468
- }, [props.onExpandChange]);
469
- var onFilterChange = React.useCallback(function (event) {
470
- if (props.onFilterChange && targetRef.current) {
471
- var filterDesc = { field: props.textField, operator: 'contains', value: event.target.value };
472
- var ev = {
473
- filter: filterDesc,
474
- syntheticEvent: event.syntheticEvent,
475
- nativeEvent: event.nativeEvent,
476
- target: targetRef.current
477
- };
478
- props.onFilterChange.call(undefined, ev);
479
- if (props.filter === undefined) {
480
- setFilterState(event.target.value);
481
- }
482
- }
483
- }, [props.onFilterChange, props.filter, props.textField]);
484
- var onCancel = React.useCallback(function (event) {
485
- if (!targetRef.current) {
486
- return;
487
- }
488
- var ev = {
489
- syntheticEvent: event,
490
- nativeEvent: event.nativeEvent,
491
- target: targetRef.current
492
- };
493
- if (props.onCancel) {
494
- props.onCancel.call(undefined, ev);
495
- }
496
- ;
497
- closePopup(ev);
498
- event.preventDefault();
499
- }, [props.onCancel, closePopup]);
500
- var renderAdaptiveListContainer = function () {
501
- var mobileFilter = props.filterable ? (React.createElement(ListFilter, { value: props.filter === undefined ? filterState : props.filter, ref: adaptiveInputRef, onChange: onFilterChange, onKeyDown: onInputKeyDown, size: size, rounded: rounded, fillMode: fillMode })) : null;
502
- var actionSheetProps = {
503
- adaptiveTitle: props.adaptiveTitle,
504
- expand: isOpen,
505
- onClose: function (event) { return props.onCancel ? onCancel(event) : onClear(event); },
506
- windowWidth: windowWidth,
507
- mobileFilter: mobileFilter,
508
- footer: {
509
- cancelText: localization.toLanguageString(adaptiveModeFooterCancel, messages[adaptiveModeFooterCancel]),
510
- onCancel: function (event) { return props.onCancel ? onCancel(event) : onClear(event); },
511
- applyText: localization.toLanguageString(adaptiveModeFooterApply, messages[adaptiveModeFooterApply]),
512
- onApply: function (event) { return closePopup(event); }
513
- }
514
- };
515
- return (React.createElement(AdaptiveMode, __assign({}, actionSheetProps),
516
- React.createElement(ActionSheetContent, { className: '!k-overflow-hidden' },
517
- React.createElement("div", { className: 'k-list-container' },
518
- React.createElement("div", { className: 'k-list k-list-lg' }, data.length > 0 ? (React.createElement(TreeView, { ref: treeViewRef, tabIndex: tabIndex, data: data, focusIdField: dataItemKey, textField: props.textField, checkField: checkField, checkIndeterminateField: checkIndeterminateField, expandField: props.expandField, childrenField: subItemsField, expandIcons: true, onItemClick: onChange, onCheckChange: onChange, onExpandChange: onExpand, checkboxes: true, size: size, item: props.item, dir: dir })) : (React.createElement(NoData, null, localization.toLanguageString(nodata, messages[nodata]))))))));
519
- };
520
- var calculateMedia = React.useCallback(function (entries) {
521
- for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
522
- var entry = entries_1[_i];
523
- setWindowWidth(entry.target.clientWidth);
524
- }
525
- ;
526
- }, []);
527
- var NoData = props.listNoData || ListNoData;
528
- var localization = useLocalization();
529
- var isValid = !validityStyles || validity.valid;
530
- var size = props.size, rounded = props.rounded, fillMode = props.fillMode;
531
- var currentTagsToRender = isAdaptive && isOpen ? currentTreeValue : tagsToRenderRef.current;
532
- var multiselecttree = (React.createElement(React.Fragment, null,
533
- React.createElement("span", { className: classNames('k-multiselecttree k-input', props.className, (_a = {},
534
- _a["k-input-".concat(sizeMap[size] || size)] = size,
535
- _a["k-rounded-".concat(roundedMap[rounded] || rounded)] = rounded,
536
- _a["k-input-".concat(fillMode)] = fillMode,
537
- _a['k-focus'] = focusedState && !disabled,
538
- _a['k-invalid'] = !isValid,
539
- _a['k-disabled'] = disabled,
540
- _a['k-loading'] = props.loading,
541
- _a['k-required'] = required,
542
- _a)), tabIndex: tabIndex, accessKey: props.accessKey, id: id, style: label ? __assign(__assign({}, style), { width: undefined }) : style, dir: dir, ref: elementRef, onKeyDown: disabled ? undefined : onWrapperKeyDown, onMouseDown: onWrapperMouseDown, onFocus: onFocus, onBlur: onBlur, role: "combobox", "aria-haspopup": "tree", "aria-expanded": isOpen, "aria-disabled": disabled, "aria-label": label, "aria-labelledby": props.ariaLabelledBy, "aria-describedby": props.ariaDescribedBy ? props.ariaDescribedBy : 'tagslist-' + id, "aria-required": props.required, onClick: disabled ? undefined : onWrapperClick },
543
- React.createElement("div", { id: 'tagslist-' + id, className: classNames('k-input-values k-chip-list k-selection-multiple', (_b = {},
544
- _b["k-chip-list-".concat(sizeMap[size] || size)] = size,
545
- _b)) }, currentTagsToRender.length > 0 ? (React.createElement(TagList, { tag: props.tag, onTagDelete: onTagDelete, data: currentTagsToRender, guid: id, focused: focusedTagState ? tagsToRenderRef.current.find(function (t) { return matchTags(t, focusedTagState, dataItemKey); }) : undefined, size: size })) : placeholder),
546
- React.createElement("span", { className: "k-input-inner" },
547
- React.createElement("span", { className: "k-input-value-text" }, "\u00A0")),
548
- props.loading && React.createElement(IconWrap, { className: "k-input-loading-icon", name: 'loading' }),
549
- hasValue && !disabled && currentTagsToRender.length > 0 &&
550
- React.createElement(ClearButton, { onClick: onClear }),
551
- React.createElement("select", { name: name, ref: selectRef, tabIndex: -1, "aria-hidden": true, title: label, style: { opacity: 0, width: 1, border: 0, zIndex: -1, position: 'absolute', left: '50%' } },
552
- React.createElement("option", { value: props.valueMap ? props.valueMap.call(undefined, value) : value })),
553
- !isAdaptive && React.createElement(Popup, { popupClass: classNames(popupSettings.popupClass, 'k-multiselecttree-popup'), className: classNames(popupSettings.className, { 'k-rtl': dir === 'rtl' }), style: popupStyles, animate: popupSettings.animate, anchor: elementRef.current, show: isOpen, onOpen: onPopupOpened, onClose: onPopupClosed, appendTo: popupSettings.appendTo, ref: popupRef },
554
- props.filterable && (React.createElement(ListFilter, { value: props.filter === undefined ? filterState : props.filter, ref: inputRef, onChange: onFilterChange, onKeyDown: onInputKeyDown, tabIndex: tabIndex, size: size, rounded: rounded, fillMode: fillMode })),
555
- data.length > 0 ? (React.createElement(TreeView, { ref: treeViewRef, tabIndex: tabIndex, data: data, focusIdField: dataItemKey, textField: props.textField, checkField: checkField, checkIndeterminateField: checkIndeterminateField, expandField: props.expandField, childrenField: subItemsField, expandIcons: true, onItemClick: onChange, onCheckChange: onChange, onExpandChange: onExpand, checkboxes: true, size: size, item: props.item, dir: dir })) : (React.createElement(NoData, null, localization.toLanguageString(nodata, messages[nodata]))))),
556
- isAdaptive && renderAdaptiveListContainer()));
557
- return label ? (React.createElement(FloatingLabel, { label: label, editorValue: hasValue, editorPlaceholder: placeholder, editorValid: isValid, editorDisabled: disabled, editorId: id, style: { width: style ? style.width : undefined }, children: multiselecttree, dir: dir })) : multiselecttree;
558
- });
559
- var propTypes = {
560
- opened: PropTypes.bool,
561
- disabled: PropTypes.bool,
562
- dir: PropTypes.string,
563
- tabIndex: PropTypes.number,
564
- accessKey: PropTypes.string,
565
- data: PropTypes.array,
566
- value: PropTypes.any,
567
- valueMap: PropTypes.func,
568
- placeholder: PropTypes.string,
569
- dataItemKey: PropTypes.string.isRequired,
570
- textField: PropTypes.string.isRequired,
571
- checkField: PropTypes.string,
572
- checkIndeterminateField: PropTypes.string,
573
- expandField: PropTypes.string,
574
- subItemsField: PropTypes.string,
575
- className: PropTypes.string,
576
- style: PropTypes.object,
577
- label: PropTypes.string,
578
- validationMessage: PropTypes.string,
579
- validityStyles: PropTypes.bool,
580
- valid: PropTypes.bool,
581
- required: PropTypes.bool,
582
- name: PropTypes.string,
583
- id: PropTypes.string,
584
- ariaLabelledBy: PropTypes.string,
585
- ariaDescribedBy: PropTypes.string,
586
- filterable: PropTypes.bool,
587
- filter: PropTypes.string,
588
- loading: PropTypes.bool,
589
- tags: PropTypes.arrayOf(PropTypes.shape({
590
- text: PropTypes.string,
591
- data: PropTypes.arrayOf(PropTypes.any)
592
- })),
593
- popupSettings: PropTypes.shape({
594
- animate: PropTypes.oneOfType([PropTypes.bool, PropTypes.shape({
595
- openDuration: PropTypes.number,
596
- closeDuration: PropTypes.number
597
- })]),
598
- popupClass: PropTypes.string,
599
- className: PropTypes.string,
600
- appendTo: PropTypes.any,
601
- width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
602
- height: PropTypes.oneOfType([PropTypes.string, PropTypes.number])
603
- }),
604
- onOpen: PropTypes.func,
605
- onClose: PropTypes.func,
606
- onFocus: PropTypes.func,
607
- onBlur: PropTypes.func,
608
- onChange: PropTypes.func,
609
- onFilterChange: PropTypes.func,
610
- onExpandChange: PropTypes.func,
611
- onCancel: PropTypes.func,
612
- item: PropTypes.func,
613
- listNoData: PropTypes.func,
614
- adaptiveTitle: PropTypes.string,
615
- adaptive: PropTypes.bool
616
- };
617
- MultiSelectTree.displayName = 'KendoReactMultiSelectTree';
618
- MultiSelectTree.defaultProps = defaultProps;
619
- MultiSelectTree.propTypes = propTypes;
@@ -1,2 +0,0 @@
1
- export {};
2
- // tslint:enable:max-line-length
@@ -1,17 +0,0 @@
1
- import { MultiSelectTreeChangeEventOperation } from './MultiSelectTreeProps';
2
- /** @hidden */
3
- export declare const getValueMap: (value: any[], idGetter: any) => any;
4
- /**
5
- * Get MultiSelectTree new value from the component `onChange` event.
6
- *
7
- * @param {any[]} data
8
- * @param {object} options
9
- * @returns {any[]}
10
- */
11
- export declare const getMultiSelectTreeValue: (data: any[], options: {
12
- subItemsField?: string | undefined;
13
- dataItemKey: string;
14
- items: any;
15
- value: Array<any>;
16
- operation: MultiSelectTreeChangeEventOperation;
17
- }) => any[];