@salutejs/plasma-new-hope 0.340.0-canary.2305.18873573377.0 → 0.340.0-canary.2314.19038910206.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/cjs/components/Combobox/ComboboxNew/Combobox.css +19 -0
  2. package/cjs/components/Combobox/ComboboxNew/Combobox.js +78 -15
  3. package/cjs/components/Combobox/ComboboxNew/Combobox.js.map +1 -1
  4. package/cjs/components/Combobox/ComboboxNew/Combobox.tokens.js +2 -0
  5. package/cjs/components/Combobox/ComboboxNew/Combobox.tokens.js.map +1 -1
  6. package/cjs/components/Combobox/ComboboxNew/hooks/getPathMaps.js +8 -2
  7. package/cjs/components/Combobox/ComboboxNew/hooks/getPathMaps.js.map +1 -1
  8. package/cjs/components/Combobox/ComboboxNew/hooks/useKeyboardNavigation.js +319 -1
  9. package/cjs/components/Combobox/ComboboxNew/hooks/useKeyboardNavigation.js.map +1 -1
  10. package/cjs/components/Combobox/ComboboxNew/reducers/focusedPathReducer.js +7 -0
  11. package/cjs/components/Combobox/ComboboxNew/reducers/focusedPathReducer.js.map +1 -1
  12. package/cjs/components/Combobox/ComboboxNew/reducers/treePathReducer.js +135 -0
  13. package/cjs/components/Combobox/ComboboxNew/reducers/treePathReducer.js.map +1 -0
  14. package/cjs/components/Combobox/ComboboxNew/ui/TreeList/TreeList.css +57 -0
  15. package/cjs/components/Combobox/ComboboxNew/ui/TreeList/TreeList.js +96 -0
  16. package/cjs/components/Combobox/ComboboxNew/ui/TreeList/TreeList.js.map +1 -0
  17. package/cjs/components/Combobox/ComboboxNew/ui/TreeList/TreeList.styles.js +30 -0
  18. package/cjs/components/Combobox/ComboboxNew/ui/TreeList/TreeList.styles.js.map +1 -0
  19. package/cjs/components/Combobox/ComboboxNew/ui/TreeList/TreeList.styles_1auklgl.css +2 -0
  20. package/cjs/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.css +54 -0
  21. package/cjs/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.js +144 -0
  22. package/cjs/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.js.map +1 -0
  23. package/cjs/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.styles.js +205 -0
  24. package/cjs/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.styles.js.map +1 -0
  25. package/cjs/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.styles_7nhjnm.css +15 -0
  26. package/cjs/components/Select/Select.js +2 -1
  27. package/cjs/components/Select/Select.js.map +1 -1
  28. package/cjs/components/Select/hooks/useKeyboardNavigation.js +127 -38
  29. package/cjs/components/Select/hooks/useKeyboardNavigation.js.map +1 -1
  30. package/cjs/components/Select/reducers/focusedPathReducer.js +7 -0
  31. package/cjs/components/Select/reducers/focusedPathReducer.js.map +1 -1
  32. package/cjs/components/Select/reducers/treePathReducer.js +12 -0
  33. package/cjs/components/Select/reducers/treePathReducer.js.map +1 -1
  34. package/cjs/components/Select/ui/TreeList/TreeList.js +3 -3
  35. package/cjs/components/Select/ui/TreeList/TreeList.js.map +1 -1
  36. package/cjs/components/Select/ui/TreeList/ui/Item/Item.js +22 -5
  37. package/cjs/components/Select/ui/TreeList/ui/Item/Item.js.map +1 -1
  38. package/cjs/index.css +19 -0
  39. package/cjs/index.js +2 -0
  40. package/cjs/index.js.map +1 -1
  41. package/cjs/utils/index.js.map +1 -1
  42. package/cjs/utils/isArraysEqual.js +12 -0
  43. package/cjs/utils/isArraysEqual.js.map +1 -0
  44. package/emotion/cjs/components/Combobox/ComboboxNew/Combobox.js +66 -13
  45. package/emotion/cjs/components/Combobox/ComboboxNew/Combobox.tokens.js +2 -0
  46. package/emotion/cjs/components/Combobox/ComboboxNew/hooks/getPathMaps.js +35 -3
  47. package/emotion/cjs/components/Combobox/ComboboxNew/hooks/useKeyboardNavigation.js +312 -0
  48. package/emotion/cjs/components/Combobox/ComboboxNew/reducers/focusedPathReducer.js +7 -0
  49. package/emotion/cjs/components/Combobox/ComboboxNew/reducers/index.js +1 -0
  50. package/emotion/cjs/components/Combobox/ComboboxNew/reducers/treePathReducer.js +152 -0
  51. package/emotion/cjs/components/Combobox/ComboboxNew/ui/TreeList/TreeList.js +130 -0
  52. package/emotion/cjs/components/Combobox/ComboboxNew/ui/TreeList/TreeList.styles.js +36 -0
  53. package/emotion/cjs/components/Combobox/ComboboxNew/ui/TreeList/TreeList.types.js +4 -0
  54. package/emotion/cjs/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.js +192 -0
  55. package/emotion/cjs/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.styles.js +183 -0
  56. package/emotion/cjs/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.types.js +4 -0
  57. package/emotion/cjs/components/Combobox/ComboboxNew/ui/index.js +1 -0
  58. package/emotion/cjs/components/Select/Select.js +2 -1
  59. package/emotion/cjs/components/Select/hooks/useKeyboardNavigation.js +156 -44
  60. package/emotion/cjs/components/Select/reducers/focusedPathReducer.js +7 -0
  61. package/emotion/cjs/components/Select/reducers/treePathReducer.js +12 -0
  62. package/emotion/cjs/components/Select/ui/TreeList/TreeList.js +7 -3
  63. package/emotion/cjs/components/Select/ui/TreeList/ui/Item/Item.js +49 -5
  64. package/emotion/cjs/examples/components/Combobox/Combobox.config.js +15 -15
  65. package/emotion/cjs/utils/index.js +4 -0
  66. package/emotion/cjs/utils/isArraysEqual.js +15 -0
  67. package/emotion/es/components/Combobox/ComboboxNew/Combobox.js +68 -15
  68. package/emotion/es/components/Combobox/ComboboxNew/Combobox.tokens.js +2 -0
  69. package/emotion/es/components/Combobox/ComboboxNew/hooks/getPathMaps.js +35 -3
  70. package/emotion/es/components/Combobox/ComboboxNew/hooks/useKeyboardNavigation.js +313 -0
  71. package/emotion/es/components/Combobox/ComboboxNew/reducers/focusedPathReducer.js +7 -0
  72. package/emotion/es/components/Combobox/ComboboxNew/reducers/index.js +1 -0
  73. package/emotion/es/components/Combobox/ComboboxNew/reducers/treePathReducer.js +135 -0
  74. package/emotion/es/components/Combobox/ComboboxNew/ui/TreeList/TreeList.js +79 -0
  75. package/emotion/es/components/Combobox/ComboboxNew/ui/TreeList/TreeList.styles.js +13 -0
  76. package/emotion/es/components/Combobox/ComboboxNew/ui/TreeList/TreeList.types.js +1 -0
  77. package/emotion/es/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.js +141 -0
  78. package/emotion/es/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.styles.js +119 -0
  79. package/emotion/es/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.types.js +1 -0
  80. package/emotion/es/components/Combobox/ComboboxNew/ui/index.js +1 -0
  81. package/emotion/es/components/Select/Select.js +2 -1
  82. package/emotion/es/components/Select/hooks/useKeyboardNavigation.js +157 -44
  83. package/emotion/es/components/Select/reducers/focusedPathReducer.js +7 -0
  84. package/emotion/es/components/Select/reducers/treePathReducer.js +12 -0
  85. package/emotion/es/components/Select/ui/TreeList/TreeList.js +7 -3
  86. package/emotion/es/components/Select/ui/TreeList/ui/Item/Item.js +50 -6
  87. package/emotion/es/examples/components/Combobox/Combobox.config.js +15 -15
  88. package/emotion/es/utils/index.js +1 -0
  89. package/emotion/es/utils/isArraysEqual.js +5 -0
  90. package/es/components/Combobox/ComboboxNew/Combobox.css +19 -0
  91. package/es/components/Combobox/ComboboxNew/Combobox.js +79 -16
  92. package/es/components/Combobox/ComboboxNew/Combobox.js.map +1 -1
  93. package/es/components/Combobox/ComboboxNew/Combobox.tokens.js +2 -0
  94. package/es/components/Combobox/ComboboxNew/Combobox.tokens.js.map +1 -1
  95. package/es/components/Combobox/ComboboxNew/hooks/getPathMaps.js +8 -2
  96. package/es/components/Combobox/ComboboxNew/hooks/getPathMaps.js.map +1 -1
  97. package/es/components/Combobox/ComboboxNew/hooks/useKeyboardNavigation.js +319 -1
  98. package/es/components/Combobox/ComboboxNew/hooks/useKeyboardNavigation.js.map +1 -1
  99. package/es/components/Combobox/ComboboxNew/reducers/focusedPathReducer.js +7 -0
  100. package/es/components/Combobox/ComboboxNew/reducers/focusedPathReducer.js.map +1 -1
  101. package/es/components/Combobox/ComboboxNew/reducers/treePathReducer.js +130 -0
  102. package/es/components/Combobox/ComboboxNew/reducers/treePathReducer.js.map +1 -0
  103. package/es/components/Combobox/ComboboxNew/ui/TreeList/TreeList.css +57 -0
  104. package/es/components/Combobox/ComboboxNew/ui/TreeList/TreeList.js +88 -0
  105. package/es/components/Combobox/ComboboxNew/ui/TreeList/TreeList.js.map +1 -0
  106. package/es/components/Combobox/ComboboxNew/ui/TreeList/TreeList.styles.js +25 -0
  107. package/es/components/Combobox/ComboboxNew/ui/TreeList/TreeList.styles.js.map +1 -0
  108. package/es/components/Combobox/ComboboxNew/ui/TreeList/TreeList.styles_1auklgl.css +2 -0
  109. package/es/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.css +54 -0
  110. package/es/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.js +136 -0
  111. package/es/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.js.map +1 -0
  112. package/es/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.styles.js +187 -0
  113. package/es/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.styles.js.map +1 -0
  114. package/es/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.styles_7nhjnm.css +15 -0
  115. package/es/components/Select/Select.js +2 -1
  116. package/es/components/Select/Select.js.map +1 -1
  117. package/es/components/Select/hooks/useKeyboardNavigation.js +127 -38
  118. package/es/components/Select/hooks/useKeyboardNavigation.js.map +1 -1
  119. package/es/components/Select/reducers/focusedPathReducer.js +7 -0
  120. package/es/components/Select/reducers/focusedPathReducer.js.map +1 -1
  121. package/es/components/Select/reducers/treePathReducer.js +12 -0
  122. package/es/components/Select/reducers/treePathReducer.js.map +1 -1
  123. package/es/components/Select/ui/TreeList/TreeList.js +3 -3
  124. package/es/components/Select/ui/TreeList/TreeList.js.map +1 -1
  125. package/es/components/Select/ui/TreeList/ui/Item/Item.js +23 -6
  126. package/es/components/Select/ui/TreeList/ui/Item/Item.js.map +1 -1
  127. package/es/index.css +19 -0
  128. package/es/index.js +1 -0
  129. package/es/index.js.map +1 -1
  130. package/es/utils/index.js.map +1 -1
  131. package/es/utils/isArraysEqual.js +8 -0
  132. package/es/utils/isArraysEqual.js.map +1 -0
  133. package/package.json +4 -4
  134. package/styled-components/cjs/components/Combobox/ComboboxNew/Combobox.js +66 -13
  135. package/styled-components/cjs/components/Combobox/ComboboxNew/Combobox.tokens.js +2 -0
  136. package/styled-components/cjs/components/Combobox/ComboboxNew/hooks/getPathMaps.js +35 -3
  137. package/styled-components/cjs/components/Combobox/ComboboxNew/hooks/useKeyboardNavigation.js +312 -0
  138. package/styled-components/cjs/components/Combobox/ComboboxNew/reducers/focusedPathReducer.js +7 -0
  139. package/styled-components/cjs/components/Combobox/ComboboxNew/reducers/index.js +1 -0
  140. package/styled-components/cjs/components/Combobox/ComboboxNew/reducers/treePathReducer.js +152 -0
  141. package/styled-components/cjs/components/Combobox/ComboboxNew/ui/TreeList/TreeList.js +130 -0
  142. package/styled-components/cjs/components/Combobox/ComboboxNew/ui/TreeList/TreeList.styles.js +50 -0
  143. package/styled-components/cjs/components/Combobox/ComboboxNew/ui/TreeList/TreeList.types.js +4 -0
  144. package/styled-components/cjs/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.js +192 -0
  145. package/styled-components/cjs/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.styles.js +296 -0
  146. package/styled-components/cjs/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.types.js +4 -0
  147. package/styled-components/cjs/components/Combobox/ComboboxNew/ui/index.js +1 -0
  148. package/styled-components/cjs/components/Select/Select.js +2 -1
  149. package/styled-components/cjs/components/Select/hooks/useKeyboardNavigation.js +156 -44
  150. package/styled-components/cjs/components/Select/reducers/focusedPathReducer.js +7 -0
  151. package/styled-components/cjs/components/Select/reducers/treePathReducer.js +12 -0
  152. package/styled-components/cjs/components/Select/ui/TreeList/TreeList.js +7 -3
  153. package/styled-components/cjs/components/Select/ui/TreeList/ui/Item/Item.js +49 -5
  154. package/styled-components/cjs/examples/components/Combobox/Combobox.config.js +12 -4
  155. package/styled-components/cjs/utils/index.js +4 -0
  156. package/styled-components/cjs/utils/isArraysEqual.js +15 -0
  157. package/styled-components/es/components/Combobox/ComboboxNew/Combobox.js +68 -15
  158. package/styled-components/es/components/Combobox/ComboboxNew/Combobox.tokens.js +2 -0
  159. package/styled-components/es/components/Combobox/ComboboxNew/hooks/getPathMaps.js +35 -3
  160. package/styled-components/es/components/Combobox/ComboboxNew/hooks/useKeyboardNavigation.js +313 -0
  161. package/styled-components/es/components/Combobox/ComboboxNew/reducers/focusedPathReducer.js +7 -0
  162. package/styled-components/es/components/Combobox/ComboboxNew/reducers/index.js +1 -0
  163. package/styled-components/es/components/Combobox/ComboboxNew/reducers/treePathReducer.js +135 -0
  164. package/styled-components/es/components/Combobox/ComboboxNew/ui/TreeList/TreeList.js +79 -0
  165. package/styled-components/es/components/Combobox/ComboboxNew/ui/TreeList/TreeList.styles.js +27 -0
  166. package/styled-components/es/components/Combobox/ComboboxNew/ui/TreeList/TreeList.types.js +1 -0
  167. package/styled-components/es/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.js +141 -0
  168. package/styled-components/es/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.styles.js +232 -0
  169. package/styled-components/es/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.types.js +1 -0
  170. package/styled-components/es/components/Combobox/ComboboxNew/ui/index.js +1 -0
  171. package/styled-components/es/components/Select/Select.js +2 -1
  172. package/styled-components/es/components/Select/hooks/useKeyboardNavigation.js +157 -44
  173. package/styled-components/es/components/Select/reducers/focusedPathReducer.js +7 -0
  174. package/styled-components/es/components/Select/reducers/treePathReducer.js +12 -0
  175. package/styled-components/es/components/Select/ui/TreeList/TreeList.js +7 -3
  176. package/styled-components/es/components/Select/ui/TreeList/ui/Item/Item.js +50 -6
  177. package/styled-components/es/examples/components/Combobox/Combobox.config.js +12 -4
  178. package/styled-components/es/examples/components/Combobox/Combobox.js +0 -7
  179. package/styled-components/es/utils/index.js +1 -0
  180. package/styled-components/es/utils/isArraysEqual.js +5 -0
  181. package/types/components/Combobox/ComboboxNew/Combobox.d.ts.map +1 -1
  182. package/types/components/Combobox/ComboboxNew/Combobox.tokens.d.ts +2 -0
  183. package/types/components/Combobox/ComboboxNew/Combobox.tokens.d.ts.map +1 -1
  184. package/types/components/Combobox/ComboboxNew/Combobox.types.d.ts +17 -3
  185. package/types/components/Combobox/ComboboxNew/Combobox.types.d.ts.map +1 -1
  186. package/types/components/Combobox/ComboboxNew/hooks/getPathMaps.d.ts +2 -1
  187. package/types/components/Combobox/ComboboxNew/hooks/getPathMaps.d.ts.map +1 -1
  188. package/types/components/Combobox/ComboboxNew/hooks/useKeyboardNavigation.d.ts +7 -2
  189. package/types/components/Combobox/ComboboxNew/hooks/useKeyboardNavigation.d.ts.map +1 -1
  190. package/types/components/Combobox/ComboboxNew/reducers/focusedPathReducer.d.ts +3 -0
  191. package/types/components/Combobox/ComboboxNew/reducers/focusedPathReducer.d.ts.map +1 -1
  192. package/types/components/Combobox/ComboboxNew/reducers/index.d.ts +1 -0
  193. package/types/components/Combobox/ComboboxNew/reducers/index.d.ts.map +1 -1
  194. package/types/components/Combobox/ComboboxNew/reducers/treePathReducer.d.ts +24 -0
  195. package/types/components/Combobox/ComboboxNew/reducers/treePathReducer.d.ts.map +1 -0
  196. package/types/components/Combobox/ComboboxNew/ui/TreeList/TreeList.d.ts +4 -0
  197. package/types/components/Combobox/ComboboxNew/ui/TreeList/TreeList.d.ts.map +1 -0
  198. package/types/components/Combobox/ComboboxNew/ui/TreeList/TreeList.styles.d.ts +6 -0
  199. package/types/components/Combobox/ComboboxNew/ui/TreeList/TreeList.styles.d.ts.map +1 -0
  200. package/types/components/Combobox/ComboboxNew/ui/TreeList/TreeList.types.d.ts +11 -0
  201. package/types/components/Combobox/ComboboxNew/ui/TreeList/TreeList.types.d.ts.map +1 -0
  202. package/types/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.d.ts +4 -0
  203. package/types/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.d.ts.map +1 -0
  204. package/types/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.styles.d.ts +62 -0
  205. package/types/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.styles.d.ts.map +1 -0
  206. package/types/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.types.d.ts +6 -0
  207. package/types/components/Combobox/ComboboxNew/ui/TreeList/ui/Item/Item.types.d.ts.map +1 -0
  208. package/types/components/Combobox/ComboboxNew/ui/index.d.ts +1 -0
  209. package/types/components/Combobox/ComboboxNew/ui/index.d.ts.map +1 -1
  210. package/types/components/Select/Select.d.ts.map +1 -1
  211. package/types/components/Select/hooks/useKeyboardNavigation.d.ts +2 -1
  212. package/types/components/Select/hooks/useKeyboardNavigation.d.ts.map +1 -1
  213. package/types/components/Select/reducers/focusedPathReducer.d.ts +3 -0
  214. package/types/components/Select/reducers/focusedPathReducer.d.ts.map +1 -1
  215. package/types/components/Select/reducers/treePathReducer.d.ts +6 -0
  216. package/types/components/Select/reducers/treePathReducer.d.ts.map +1 -1
  217. package/types/components/Select/ui/TreeList/ui/Item/Item.d.ts.map +1 -1
  218. package/types/components/Select/ui/TreeList/ui/Item/Item.types.d.ts +1 -9
  219. package/types/components/Select/ui/TreeList/ui/Item/Item.types.d.ts.map +1 -1
  220. package/types/examples/components/Combobox/Combobox.config.d.ts.map +1 -1
  221. package/types/examples/components/Combobox/Combobox.d.ts +48 -0
  222. package/types/examples/components/Combobox/Combobox.d.ts.map +1 -1
  223. package/types/utils/index.d.ts +1 -0
  224. package/types/utils/index.d.ts.map +1 -1
  225. package/types/utils/isArraysEqual.d.ts +2 -0
  226. package/types/utils/isArraysEqual.d.ts.map +1 -0
@@ -45,6 +45,9 @@ _export(exports, {
45
45
  get getSizeValueFromProp () {
46
46
  return _getSizeValueFromProp.getSizeValueFromProp;
47
47
  },
48
+ get isArraysEqual () {
49
+ return _isArraysEqual.isArraysEqual;
50
+ },
48
51
  get isEmpty () {
49
52
  return _isEmpty.isEmpty;
50
53
  },
@@ -79,6 +82,7 @@ var _noop = require("./noop");
79
82
  var _getHeightAsNumber = require("./getHeightAsNumber");
80
83
  var _createConditionalComponent = require("./createConditionalComponent");
81
84
  var _deepCopy = require("./deepCopy");
85
+ var _isArraysEqual = require("./isArraysEqual");
82
86
  var _fixedForwardRef = require("./fixedForwardRef");
83
87
  function _export_star(from, to) {
84
88
  Object.keys(from).forEach(function(k) {
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "isArraysEqual", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return isArraysEqual;
9
+ }
10
+ });
11
+ var isArraysEqual = function(a, b) {
12
+ return a.length === b.length && a.every(function(val, i) {
13
+ return val === b[i];
14
+ });
15
+ };
@@ -136,8 +136,8 @@ import { classes } from "./Combobox.tokens";
136
136
  import { FloatingPopover } from "./FloatingPopover";
137
137
  import { useKeyNavigation, getItemByFocused } from "./hooks/useKeyboardNavigation";
138
138
  import { initialItemsTransform, updateAncestors, updateDescendants, updateSingleAncestors, filterItems, getItemId, getTextValue } from "./utils";
139
- import { Inner, StyledTextField, VirtualList, SelectAll } from "./ui";
140
- import { pathReducer, focusedPathReducer } from "./reducers";
139
+ import { Inner, StyledTextField, VirtualList, SelectAll, TreeList } from "./ui";
140
+ import { pathReducer, focusedPathReducer, treePathReducer } from "./reducers";
141
141
  import { getPathMap, getTreeMaps } from "./hooks/getPathMaps";
142
142
  import { Ul, base, StyledArrow, IconArrowWrapper, StyledEmptyState, StyledLeftHelper, ListWrapper } from "./Combobox.styles";
143
143
  import { base as viewCSS } from "./variations/_view/base";
@@ -149,7 +149,7 @@ import { Context } from "./Combobox.context";
149
149
  */ export var comboboxRoot = function(Root) {
150
150
  return /*#__PURE__*/ forwardRef(function(props, ref) {
151
151
  var _getItemByFocused;
152
- var name = props.name, multiple = props.multiple, outerValue = props.value, outerOnChange = props.onChange, defaultValue = props.defaultValue, isTargetAmount = props.isTargetAmount, targetAmount = props.targetAmount, items = props.items, _props_placement = props.placement, placement = _props_placement === void 0 ? 'bottom-start' : _props_placement, label = props.label, placeholder = props.placeholder, helperText = props.helperText, contentLeft = props.contentLeft, textBefore = props.textBefore, textAfter = props.textAfter, _props_variant = props.variant, variant = _props_variant === void 0 ? 'normal' : _props_variant, listOverflow = props.listOverflow, listHeight = props.listHeight, listMaxHeight = props.listMaxHeight, listWidth = props.listWidth, portal = props.portal, renderItem = props.renderItem, view = props.view, size = props.size, labelPlacement = props.labelPlacement, keepPlaceholder = props.keepPlaceholder, _props_readOnly = props.readOnly, readOnly = _props_readOnly === void 0 ? false : _props_readOnly, _props_disabled = props.disabled, disabled = _props_disabled === void 0 ? false : _props_disabled, _props_alwaysOpened = props.alwaysOpened, alwaysOpened = _props_alwaysOpened === void 0 ? false : _props_alwaysOpened, filter = props.filter, outerCloseAfterSelect = props.closeAfterSelect, renderValue = props.renderValue, zIndex = props.zIndex, beforeList = props.beforeList, afterList = props.afterList, _props_virtual = props.virtual, virtual = _props_virtual === void 0 ? false : _props_virtual, hintView = props.hintView, hintSize = props.hintSize, emptyStateDescription = props.emptyStateDescription, onChangeValue = props.onChangeValue, onScroll = props.onScroll, onToggle = props.onToggle, _props_mode = props.mode, mode = _props_mode === void 0 ? 'default' : _props_mode, _props_chipClickArea = props.chipClickArea, chipClickArea = _props_chipClickArea === void 0 ? 'full' : _props_chipClickArea, // @ts-ignore
152
+ var name = props.name, multiple = props.multiple, outerValue = props.value, outerOnChange = props.onChange, defaultValue = props.defaultValue, isTargetAmount = props.isTargetAmount, targetAmount = props.targetAmount, items = props.items, _props_treeView = props.treeView, treeView = _props_treeView === void 0 ? false : _props_treeView, _props_arrowPlacement = props.arrowPlacement, arrowPlacement = _props_arrowPlacement === void 0 ? 'left' : _props_arrowPlacement, _props_placement = props.placement, placement = _props_placement === void 0 ? 'bottom-start' : _props_placement, label = props.label, placeholder = props.placeholder, helperText = props.helperText, contentLeft = props.contentLeft, textBefore = props.textBefore, textAfter = props.textAfter, _props_variant = props.variant, variant = _props_variant === void 0 ? 'normal' : _props_variant, listOverflow = props.listOverflow, listHeight = props.listHeight, listMaxHeight = props.listMaxHeight, listWidth = props.listWidth, portal = props.portal, renderItem = props.renderItem, view = props.view, size = props.size, labelPlacement = props.labelPlacement, keepPlaceholder = props.keepPlaceholder, _props_readOnly = props.readOnly, readOnly = _props_readOnly === void 0 ? false : _props_readOnly, _props_disabled = props.disabled, disabled = _props_disabled === void 0 ? false : _props_disabled, _props_alwaysOpened = props.alwaysOpened, alwaysOpened = _props_alwaysOpened === void 0 ? false : _props_alwaysOpened, filter = props.filter, outerCloseAfterSelect = props.closeAfterSelect, renderValue = props.renderValue, zIndex = props.zIndex, beforeList = props.beforeList, afterList = props.afterList, _props_virtual = props.virtual, virtual = _props_virtual === void 0 ? false : _props_virtual, hintView = props.hintView, hintSize = props.hintSize, emptyStateDescription = props.emptyStateDescription, onChangeValue = props.onChangeValue, onScroll = props.onScroll, onToggle = props.onToggle, _props_mode = props.mode, mode = _props_mode === void 0 ? 'default' : _props_mode, _props_chipClickArea = props.chipClickArea, chipClickArea = _props_chipClickArea === void 0 ? 'full' : _props_chipClickArea, // @ts-ignore
153
153
  _offset = props._offset, rest = _object_without_properties(props, [
154
154
  "name",
155
155
  "multiple",
@@ -159,6 +159,8 @@ import { Context } from "./Combobox.context";
159
159
  "isTargetAmount",
160
160
  "targetAmount",
161
161
  "items",
162
+ "treeView",
163
+ "arrowPlacement",
162
164
  "placement",
163
165
  "label",
164
166
  "placeholder",
@@ -207,8 +209,10 @@ import { Context } from "./Combobox.context";
207
209
  return getTreeMaps(transformedItems);
208
210
  }, [
209
211
  items
210
- ]), 2), valueToCheckedMap = _useMemo[0], valueToItemMap = _useMemo[1];
212
+ ]), 3), valueToCheckedMap = _useMemo[0], valueToItemMap = _useMemo[1], valueToPathMap = _useMemo[2];
213
+ // Состояние поля поиска в target
211
214
  var _useState = _sliced_to_array(useState(getTextValue(multiple, outerValue, valueToItemMap, renderValue)), 2), textValue = _useState[0], setTextValue = _useState[1];
215
+ // Внутреннее состояние выбранных элементов
212
216
  var _useState1 = _sliced_to_array(useState(multiple ? [] : ''), 2), internalValue = _useState1[0], setInternalValue = _useState1[1];
213
217
  var value = outerValue !== null && outerValue !== undefined ? outerValue : internalValue;
214
218
  var rootRef = useRef(null);
@@ -237,6 +241,7 @@ import { Context } from "./Combobox.context";
237
241
  var _useReducer = _sliced_to_array(useReducer(pathReducer, initialPath), 2), path = _useReducer[0], dispatchPath = _useReducer[1];
238
242
  var _useReducer1 = _sliced_to_array(useReducer(focusedPathReducer, []), 2), focusedPath = _useReducer1[0], dispatchFocusedPath = _useReducer1[1];
239
243
  var _useState2 = _sliced_to_array(useState(valueToCheckedMap), 2), checked = _useState2[0], setChecked = _useState2[1];
244
+ var _useReducer2 = _sliced_to_array(useReducer(treePathReducer, {}), 2), treePath = _useReducer2[0], dispatchTreePath = _useReducer2[1];
240
245
  var isCurrentListOpen = Boolean(path[0]);
241
246
  var activeDescendantItemValue = ((_getItemByFocused = getItemByFocused(focusedPath, focusedToValueMap)) === null || _getItemByFocused === void 0 ? void 0 : _getItemByFocused.value) || '';
242
247
  var withArrowInverse = isCurrentListOpen ? classes.arrowInverse : undefined;
@@ -246,8 +251,6 @@ import { Context } from "./Combobox.context";
246
251
  return;
247
252
  }
248
253
  handleListToggle(false);
249
- // Возвращаем актуальное значение поля ввода после закрытия выпадающего списка.
250
- setTextValue(getTextValue(multiple, value, valueToItemMap, renderValue));
251
254
  }, [
252
255
  floatingPopoverRef,
253
256
  listWrapperRef
@@ -321,6 +324,11 @@ import { Context } from "./Combobox.context";
321
324
  dispatchPath({
322
325
  type: 'reset'
323
326
  });
327
+ dispatchTreePath({
328
+ type: 'reset'
329
+ });
330
+ // Возвращаем актуальное значение поля ввода после закрытия выпадающего списка.
331
+ setTextValue(getTextValue(multiple, value, valueToItemMap, renderValue));
324
332
  // Скроллим чипы к левому краю при закрытии компонента
325
333
  var el = rootRef === null || rootRef === void 0 ? void 0 : (_rootRef_current = rootRef.current) === null || _rootRef_current === void 0 ? void 0 : _rootRef_current.querySelector('.input-scrollable-wrapper');
326
334
  if (multiple && value.length > 0 && el) {
@@ -384,6 +392,9 @@ import { Context } from "./Combobox.context";
384
392
  dispatchFocusedPath({
385
393
  type: 'reset'
386
394
  });
395
+ dispatchTreePath({
396
+ type: 'reset'
397
+ });
387
398
  }
388
399
  if (onChange) {
389
400
  onChange(newValues, item);
@@ -409,6 +420,9 @@ import { Context } from "./Combobox.context";
409
420
  dispatchFocusedPath({
410
421
  type: 'reset'
411
422
  });
423
+ dispatchTreePath({
424
+ type: 'reset'
425
+ });
412
426
  }
413
427
  // Закрываем список, если элемент уже выбран.
414
428
  if (mode === 'radio' && isCurrentChecked) {
@@ -477,7 +491,12 @@ import { Context } from "./Combobox.context";
477
491
  multiple: multiple,
478
492
  value: value,
479
493
  textValue: textValue,
480
- valueToItemMap: valueToItemMap
494
+ valueToItemMap: valueToItemMap,
495
+ treePath: treePath,
496
+ dispatchTreePath: dispatchTreePath,
497
+ treeView: treeView,
498
+ valueToPathMap: valueToPathMap,
499
+ items: filteredItems
481
500
  }).onKeyDown;
482
501
  // В данном эффекте мы следим за изменениями value снаружи и вносим коррективы в дерево чекбоксов.
483
502
  // Пример: когда юзер очистил value извне, тогда нужно пройтись по элементам и выключить все чекбоксы.
@@ -539,6 +558,29 @@ import { Context } from "./Combobox.context";
539
558
  }, [
540
559
  defaultValue
541
560
  ]);
561
+ // Эффект для раскрытия дерева при поиске.
562
+ useLayoutEffect(function() {
563
+ if (treeView) {
564
+ // Если пользователь выбирает элемент, то выходим из эффекта.
565
+ if (textValue === getTextValue(multiple, value, valueToItemMap, renderValue)) {
566
+ return;
567
+ }
568
+ // Если поле ввода стало пустым, то скрывает все узлы дерева.
569
+ if (textValue === '') {
570
+ dispatchTreePath({
571
+ type: 'reset'
572
+ });
573
+ } else {
574
+ // Иначе раскрываем все узлы, когда пользователь начинает вводить текст в поле ввода.
575
+ dispatchTreePath({
576
+ type: 'expand_all',
577
+ value: filteredItems
578
+ });
579
+ }
580
+ }
581
+ }, [
582
+ textValue
583
+ ]);
542
584
  return /*#__PURE__*/ React.createElement(Root, {
543
585
  size: size,
544
586
  view: view,
@@ -571,7 +613,11 @@ import { Context } from "./Combobox.context";
571
613
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
572
614
  // @ts-ignore
573
615
  // eslint-disable-next-line no-underscore-dangle
574
- _checkboxAppearance: rest._checkboxAppearance
616
+ _checkboxAppearance: rest._checkboxAppearance,
617
+ treePath: treePath,
618
+ dispatchTreePath: dispatchTreePath,
619
+ arrowPlacement: arrowPlacement,
620
+ valueToPathMap: valueToPathMap
575
621
  }
576
622
  }, /*#__PURE__*/ React.createElement(FloatingPopover, {
577
623
  ref: floatingPopoverRef,
@@ -637,7 +683,18 @@ import { Context } from "./Combobox.context";
637
683
  disabled: disabled,
638
684
  readOnly: readOnly,
639
685
  name: name
640
- }, /*#__PURE__*/ React.createElement(ListWrapper, {
686
+ }, isEmpty(filteredItems) ? /*#__PURE__*/ React.createElement(StyledEmptyState, {
687
+ className: classes.emptyStateWrapper,
688
+ size: size,
689
+ description: emptyStateDescription || 'Ничего не найдено'
690
+ }) : /*#__PURE__*/ React.createElement(React.Fragment, null, treeView ? /*#__PURE__*/ React.createElement(TreeList, {
691
+ items: filteredItems,
692
+ listMaxHeight: listMaxHeight || listHeight,
693
+ onScroll: virtual ? undefined : onScroll,
694
+ virtual: virtual,
695
+ beforeList: beforeList,
696
+ afterList: afterList
697
+ }) : /*#__PURE__*/ React.createElement(ListWrapper, {
641
698
  ref: listWrapperRef,
642
699
  listWidth: listWidth
643
700
  }, /*#__PURE__*/ React.createElement(Ul, {
@@ -647,11 +704,7 @@ import { Context } from "./Combobox.context";
647
704
  listMaxHeight: listMaxHeight || listHeight,
648
705
  virtual: virtual,
649
706
  onScroll: virtual ? undefined : onScroll
650
- }, beforeList, isEmpty(filteredItems) ? /*#__PURE__*/ React.createElement(StyledEmptyState, {
651
- className: classes.emptyStateWrapper,
652
- size: size,
653
- description: emptyStateDescription || 'Ничего не найдено'
654
- }) : /*#__PURE__*/ React.createElement(React.Fragment, null, props.multiple && props.selectAllOptions && // TODO: #2004
707
+ }, beforeList, props.multiple && props.selectAllOptions && // TODO: #2004
655
708
  /*#__PURE__*/ React.createElement(SelectAll, {
656
709
  selectAllOptions: props.selectAllOptions,
657
710
  variant: variant
@@ -670,7 +723,7 @@ import { Context } from "./Combobox.context";
670
723
  listWidth: listWidth,
671
724
  portal: listWrapperRef
672
725
  });
673
- })), afterList)))))));
726
+ }), afterList))))))));
674
727
  });
675
728
  };
676
729
  export var comboboxConfig = {
@@ -33,6 +33,8 @@ export var tokens = {
33
33
  itemIconMargin: '--plasma-combobox-item-icon-margin',
34
34
  itemBackgroundHover: '--plasma-combobox-item-background-hover',
35
35
  itemIconColor: '--plasma-combobox-item-icon-color',
36
+ itemGap: '--plasma-select-item-gap',
37
+ itemTreeOffsetWidth: '--plasma-select-item-tree-offset-width',
36
38
  cellPadding: '--plasma-combobox-cell-padding',
37
39
  cellPaddingLeftContent: '--plasma-combobox-cell-padding-left-content',
38
40
  cellPaddingContent: '--plasma-combobox-cell-padding-content',
@@ -1,3 +1,28 @@
1
+ function _array_like_to_array(arr, len) {
2
+ if (len == null || len > arr.length) len = arr.length;
3
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
4
+ return arr2;
5
+ }
6
+ function _array_without_holes(arr) {
7
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
8
+ }
9
+ function _iterable_to_array(iter) {
10
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
11
+ }
12
+ function _non_iterable_spread() {
13
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
14
+ }
15
+ function _to_consumable_array(arr) {
16
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
17
+ }
18
+ function _unsupported_iterable_to_array(o, minLen) {
19
+ if (!o) return;
20
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
21
+ var n = Object.prototype.toString.call(o).slice(8, -1);
22
+ if (n === "Object" && o.constructor) n = o.constructor.name;
23
+ if (n === "Map" || n === "Set") return Array.from(n);
24
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
25
+ }
1
26
  import { isEmpty } from "../../../../utils";
2
27
  export var getPathMap = function(items) {
3
28
  var pathMap = new Map();
@@ -24,22 +49,29 @@ export var getPathMap = function(items) {
24
49
  export var getTreeMaps = function(items) {
25
50
  var valueToCheckedMap = new Map();
26
51
  var valueToItemMap = new Map();
52
+ var valueToPathMap = new Map();
27
53
  var rec = function(items) {
28
- var prevIndex = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : '';
54
+ var prevIndex = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : '', path = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [];
29
55
  items === null || items === void 0 ? void 0 : items.forEach(function(item, index) {
30
56
  var value = item.value, innerItems = item.items;
31
57
  var currIndex = "".concat(prevIndex, "/").concat(index).replace(/^(\/)/, '');
32
58
  valueToCheckedMap.set(value, false);
59
+ valueToPathMap.set(value.toString(), _to_consumable_array(path).concat([
60
+ value.toString()
61
+ ]));
33
62
  if (isEmpty(innerItems) || !innerItems) {
34
63
  valueToItemMap.set(value, item);
35
64
  } else {
36
- rec(innerItems, currIndex);
65
+ rec(innerItems, currIndex, _to_consumable_array(path).concat([
66
+ value.toString()
67
+ ]));
37
68
  }
38
69
  });
39
70
  };
40
71
  rec(items);
41
72
  return [
42
73
  valueToCheckedMap,
43
- valueToItemMap
74
+ valueToItemMap,
75
+ valueToPathMap
44
76
  ];
45
77
  };
@@ -1,4 +1,30 @@
1
+ function _array_like_to_array(arr, len) {
2
+ if (len == null || len > arr.length) len = arr.length;
3
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
4
+ return arr2;
5
+ }
6
+ function _array_without_holes(arr) {
7
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
8
+ }
9
+ function _iterable_to_array(iter) {
10
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
11
+ }
12
+ function _non_iterable_spread() {
13
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
14
+ }
15
+ function _to_consumable_array(arr) {
16
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
17
+ }
18
+ function _unsupported_iterable_to_array(o, minLen) {
19
+ if (!o) return;
20
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
21
+ var n = Object.prototype.toString.call(o).slice(8, -1);
22
+ if (n === "Object" && o.constructor) n = o.constructor.name;
23
+ if (n === "Map" || n === "Set") return Array.from(n);
24
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
25
+ }
1
26
  import { isEmpty } from "../../../../utils";
27
+ import { keyExists } from "../../../Select/reducers";
2
28
  var JUMP_SIZE = 10;
3
29
  export var keys = {
4
30
  Enter: 'Enter',
@@ -21,7 +47,53 @@ export var getItemByFocused = function(focusedPath, focusedToValueMap) {
21
47
  }, '').replace(/^(\/)/, '');
22
48
  return focusedToValueMap.get(focusedPathAsString);
23
49
  };
50
+ // #TODO: подумать над идеей выноса логики фокуса непосредственно в focusedPathReducer.
24
51
  export var useKeyNavigation = function(param) {
52
+ var focusedPath = param.focusedPath, dispatchFocusedPath = param.dispatchFocusedPath, path = param.path, dispatchPath = param.dispatchPath, pathMap = param.pathMap, focusedToValueMap = param.focusedToValueMap, handleListToggle = param.handleListToggle, handlePressDown = param.handlePressDown, setTextValue = param.setTextValue, multiple = param.multiple, value = param.value, textValue = param.textValue, valueToItemMap = param.valueToItemMap, treePath = param.treePath, dispatchTreePath = param.dispatchTreePath, treeView = param.treeView, valueToPathMap = param.valueToPathMap, items = param.items;
53
+ if (treeView) {
54
+ return keyboardNavigationTree({
55
+ focusedPath: focusedPath,
56
+ dispatchFocusedPath: dispatchFocusedPath,
57
+ path: path,
58
+ dispatchPath: dispatchPath,
59
+ pathMap: pathMap,
60
+ focusedToValueMap: focusedToValueMap,
61
+ handleListToggle: handleListToggle,
62
+ handlePressDown: handlePressDown,
63
+ setTextValue: setTextValue,
64
+ multiple: multiple,
65
+ value: value,
66
+ textValue: textValue,
67
+ valueToItemMap: valueToItemMap,
68
+ treePath: treePath,
69
+ dispatchTreePath: dispatchTreePath,
70
+ treeView: treeView,
71
+ valueToPathMap: valueToPathMap,
72
+ items: items
73
+ });
74
+ }
75
+ return keyboardNavigationDefault({
76
+ focusedPath: focusedPath,
77
+ dispatchFocusedPath: dispatchFocusedPath,
78
+ path: path,
79
+ dispatchPath: dispatchPath,
80
+ pathMap: pathMap,
81
+ focusedToValueMap: focusedToValueMap,
82
+ handleListToggle: handleListToggle,
83
+ handlePressDown: handlePressDown,
84
+ setTextValue: setTextValue,
85
+ multiple: multiple,
86
+ value: value,
87
+ textValue: textValue,
88
+ valueToItemMap: valueToItemMap,
89
+ treePath: treePath,
90
+ dispatchTreePath: dispatchTreePath,
91
+ treeView: treeView,
92
+ valueToPathMap: valueToPathMap,
93
+ items: items
94
+ });
95
+ };
96
+ var keyboardNavigationDefault = function(param) {
25
97
  var focusedPath = param.focusedPath, dispatchFocusedPath = param.dispatchFocusedPath, path = param.path, dispatchPath = param.dispatchPath, pathMap = param.pathMap, focusedToValueMap = param.focusedToValueMap, handleListToggle = param.handleListToggle, handlePressDown = param.handlePressDown, setTextValue = param.setTextValue, multiple = param.multiple, value = param.value, textValue = param.textValue, valueToItemMap = param.valueToItemMap;
26
98
  var currentIndex = (focusedPath === null || focusedPath === void 0 ? void 0 : focusedPath[focusedPath.length - 1]) || 0;
27
99
  var currentLength = pathMap.get(path === null || path === void 0 ? void 0 : path[focusedPath.length - 1]) || 0;
@@ -280,3 +352,244 @@ export var useKeyNavigation = function(param) {
280
352
  onKeyDown: onKeyDown
281
353
  };
282
354
  };
355
+ var keyboardNavigationTree = function(param) {
356
+ var focusedPath = param.focusedPath, dispatchFocusedPath = param.dispatchFocusedPath, path = param.path, dispatchPath = param.dispatchPath, pathMap = param.pathMap, focusedToValueMap = param.focusedToValueMap, handleListToggle = param.handleListToggle, handlePressDown = param.handlePressDown, setTextValue = param.setTextValue, multiple = param.multiple, value = param.value, textValue = param.textValue, valueToItemMap = param.valueToItemMap, treePath = param.treePath, dispatchTreePath = param.dispatchTreePath, valueToPathMap = param.valueToPathMap, items = param.items;
357
+ var _currentItem_parent_items, _currentItem_parent;
358
+ var currentItem = getItemByFocused(focusedPath, focusedToValueMap);
359
+ var currentIndex = (focusedPath === null || focusedPath === void 0 ? void 0 : focusedPath[focusedPath.length - 1]) || 0;
360
+ var currentLength = (currentItem === null || currentItem === void 0 ? void 0 : (_currentItem_parent = currentItem.parent) === null || _currentItem_parent === void 0 ? void 0 : (_currentItem_parent_items = _currentItem_parent.items) === null || _currentItem_parent_items === void 0 ? void 0 : _currentItem_parent_items.length) || pathMap.get('root') || 0;
361
+ var isValidFocus = function(focusCandidate) {
362
+ if (!Array.isArray(items) || !Array.isArray(focusCandidate)) return false;
363
+ var currentLevel = items;
364
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
365
+ try {
366
+ for(var _iterator = focusCandidate[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
367
+ var index = _step.value;
368
+ if (!Array.isArray(currentLevel) || index >= currentLevel.length) {
369
+ return false;
370
+ }
371
+ var node = currentLevel[index];
372
+ currentLevel = node.items || [];
373
+ }
374
+ } catch (err) {
375
+ _didIteratorError = true;
376
+ _iteratorError = err;
377
+ } finally{
378
+ try {
379
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
380
+ _iterator.return();
381
+ }
382
+ } finally{
383
+ if (_didIteratorError) {
384
+ throw _iteratorError;
385
+ }
386
+ }
387
+ }
388
+ return true;
389
+ };
390
+ var onKeyDown = function(event) {
391
+ switch(event.code){
392
+ case keys.ArrowUp:
393
+ {
394
+ if (path[0]) {
395
+ event.stopPropagation();
396
+ event.preventDefault();
397
+ }
398
+ /**
399
+ * Если список открыт и фокус уже установлен на каком-либо элементе.
400
+ * */ if (focusedPath.length) {
401
+ /**
402
+ * Если это не первый элемент, то нужно вначале найти элемент для фокуса.
403
+ * Т.к. если верхний элемент раскрыт, то и перемещаться нужно не на него,
404
+ * а на его самый нижний дочерний элемент.
405
+ * */ if (currentIndex > 0) {
406
+ var nextFocus = _to_consumable_array(focusedPath.slice(0, -1)).concat([
407
+ currentIndex - 1
408
+ ]);
409
+ for(var i = 0; i <= focusedPath.length; i++){
410
+ var focusedPathAsString = nextFocus.reduce(function(acc, n) {
411
+ return "".concat(acc, "/").concat(n);
412
+ }, '').replace(/^(\/)/, '');
413
+ var item = focusedToValueMap.get(focusedPathAsString);
414
+ var isLevelOpened = keyExists(treePath, valueToPathMap.get(item === null || item === void 0 ? void 0 : item.value.toString()) || []);
415
+ if (isLevelOpened) {
416
+ var _item_items;
417
+ nextFocus = _to_consumable_array(nextFocus).concat([
418
+ ((item === null || item === void 0 ? void 0 : (_item_items = item.items) === null || _item_items === void 0 ? void 0 : _item_items.length) || 0) - 1
419
+ ]);
420
+ } else {
421
+ break;
422
+ }
423
+ }
424
+ dispatchFocusedPath({
425
+ type: 'set_focus',
426
+ value: nextFocus
427
+ });
428
+ } else {
429
+ /**
430
+ * Если элемент первый, то нужно лишь подняться к его родителю.
431
+ * */ dispatchFocusedPath({
432
+ type: 'return_prev_focus'
433
+ });
434
+ }
435
+ } else {
436
+ /**
437
+ * Если список закрыт, то нужно его открыть и установить фокус на первый элемент.
438
+ * */ dispatchPath({
439
+ type: 'opened_first_level'
440
+ });
441
+ dispatchFocusedPath({
442
+ type: 'set_initial_focus'
443
+ });
444
+ handleListToggle(true);
445
+ }
446
+ break;
447
+ }
448
+ case keys.ArrowDown:
449
+ {
450
+ if (path[0]) {
451
+ event.stopPropagation();
452
+ event.preventDefault();
453
+ }
454
+ /**
455
+ * Если список открыт и фокус уже установлен на каком-либо элементе.
456
+ * */ if (focusedPath.length) {
457
+ /**
458
+ * Заходим сюда если у элемента есть другие вложенные элементы.
459
+ * */ if ((currentItem === null || currentItem === void 0 ? void 0 : currentItem.items) && (currentItem === null || currentItem === void 0 ? void 0 : currentItem.items.length)) {
460
+ var isCurrentLevelOpened = keyExists(treePath, valueToPathMap.get(currentItem.value.toString()) || []);
461
+ /**
462
+ * Если у этого элемента открыт его дочерний список,
463
+ * то устанавливаем фокус на первый элемент из этого списка
464
+ * и сразу же выходим из обработчика события.
465
+ * */ if (isCurrentLevelOpened) {
466
+ dispatchFocusedPath({
467
+ type: 'add_focus',
468
+ value: 0
469
+ });
470
+ break;
471
+ }
472
+ }
473
+ /**
474
+ * Если мы еще не достигли конца списка, то движемся к следующему элементу.
475
+ * */ if (currentIndex + 1 < currentLength) {
476
+ dispatchFocusedPath({
477
+ type: 'change_last_focus',
478
+ value: currentIndex + 1
479
+ });
480
+ } else {
481
+ /**
482
+ * Если же достигли последнего элемента на текущем уровне, то нужно определить,
483
+ * на какой из элементов ниже мы перейдем.
484
+ * Переход фокуса отсюда может быть только на уровни выше, при чем сразу на несколько.
485
+ * */ var focusCandidate = _to_consumable_array(focusedPath);
486
+ var nextFocus1 = null;
487
+ while(focusCandidate.length > 1){
488
+ focusCandidate = _to_consumable_array(focusCandidate.slice(0, -2)).concat([
489
+ (focusCandidate.at(-2) || 0) + 1
490
+ ]);
491
+ if (isValidFocus(focusCandidate)) {
492
+ nextFocus1 = focusCandidate;
493
+ break;
494
+ }
495
+ }
496
+ if (nextFocus1) {
497
+ dispatchFocusedPath({
498
+ type: 'set_focus',
499
+ value: nextFocus1
500
+ });
501
+ } else {
502
+ break;
503
+ }
504
+ }
505
+ } else {
506
+ /**
507
+ * Если список закрыт, то нужно его открыть и установить фокус на первый элемент.
508
+ * */ dispatchPath({
509
+ type: 'opened_first_level'
510
+ });
511
+ dispatchFocusedPath({
512
+ type: 'set_initial_focus'
513
+ });
514
+ handleListToggle(true);
515
+ }
516
+ break;
517
+ }
518
+ case keys.ArrowLeft:
519
+ {
520
+ if (path[0]) {
521
+ event.stopPropagation();
522
+ event.preventDefault();
523
+ if (focusedPath.length) {
524
+ dispatchTreePath({
525
+ type: 'close_level',
526
+ value: valueToPathMap.get((currentItem === null || currentItem === void 0 ? void 0 : currentItem.value.toString()) || '') || []
527
+ });
528
+ }
529
+ }
530
+ break;
531
+ }
532
+ case keys.ArrowRight:
533
+ {
534
+ if (path[0]) {
535
+ event.stopPropagation();
536
+ event.preventDefault();
537
+ if (!focusedPath.length || (currentItem === null || currentItem === void 0 ? void 0 : currentItem.disabled) || !(currentItem === null || currentItem === void 0 ? void 0 : currentItem.items)) {
538
+ break;
539
+ }
540
+ dispatchTreePath({
541
+ type: 'open_level',
542
+ value: valueToPathMap.get(currentItem.value.toString()) || []
543
+ });
544
+ }
545
+ break;
546
+ }
547
+ case keys.Enter:
548
+ {
549
+ event.preventDefault();
550
+ if (!currentItem || (currentItem === null || currentItem === void 0 ? void 0 : currentItem.disabled)) {
551
+ break;
552
+ }
553
+ if (!path[0]) {
554
+ dispatchPath({
555
+ type: 'opened_first_level'
556
+ });
557
+ dispatchFocusedPath({
558
+ type: 'set_initial_focus'
559
+ });
560
+ break;
561
+ }
562
+ handlePressDown(currentItem);
563
+ break;
564
+ }
565
+ case keys.Tab:
566
+ case keys.Escape:
567
+ {
568
+ if (path[0]) {
569
+ handleListToggle(false);
570
+ }
571
+ if (multiple) {
572
+ setTextValue('');
573
+ } else if (textValue !== value) {
574
+ // Проверяем, отличается ли значение в инпуте от выбранного value после нажатия Tab/Enter.
575
+ // Если изменилось, то возвращаем label выбранного айтема.
576
+ // Если нет выбранного элемента, то стираем значение инпута.
577
+ if (isEmpty(value)) {
578
+ setTextValue('');
579
+ } else {
580
+ var _valueToItemMap_get;
581
+ setTextValue(((_valueToItemMap_get = valueToItemMap.get(value)) === null || _valueToItemMap_get === void 0 ? void 0 : _valueToItemMap_get.label) || '');
582
+ }
583
+ }
584
+ break;
585
+ }
586
+ default:
587
+ {
588
+ break;
589
+ }
590
+ }
591
+ };
592
+ return {
593
+ onKeyDown: onKeyDown
594
+ };
595
+ };
@@ -29,6 +29,10 @@ export function focusedPathReducer(state, action) {
29
29
  {
30
30
  return [];
31
31
  }
32
+ case 'set_focus':
33
+ {
34
+ return action.value;
35
+ }
32
36
  case 'set_initial_focus':
33
37
  {
34
38
  return [
@@ -49,6 +53,9 @@ export function focusedPathReducer(state, action) {
49
53
  }
50
54
  case 'return_prev_focus':
51
55
  {
56
+ if (state.length === 1) {
57
+ return state;
58
+ }
52
59
  return state.slice(0, -1);
53
60
  }
54
61
  default:
@@ -1,2 +1,3 @@
1
1
  export * from "./pathReducer";
2
2
  export * from "./focusedPathReducer";
3
+ export * from "./treePathReducer";