@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
@@ -206,7 +206,7 @@ function _unsupported_iterable_to_array(o, minLen) {
206
206
  var comboboxRoot = function(Root) {
207
207
  return /*#__PURE__*/ (0, _react.forwardRef)(function(props, ref) {
208
208
  var _getItemByFocused;
209
- 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
209
+ 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
210
210
  _offset = props._offset, rest = _object_without_properties(props, [
211
211
  "name",
212
212
  "multiple",
@@ -216,6 +216,8 @@ var comboboxRoot = function(Root) {
216
216
  "isTargetAmount",
217
217
  "targetAmount",
218
218
  "items",
219
+ "treeView",
220
+ "arrowPlacement",
219
221
  "placement",
220
222
  "label",
221
223
  "placeholder",
@@ -264,8 +266,10 @@ var comboboxRoot = function(Root) {
264
266
  return (0, _getPathMaps.getTreeMaps)(transformedItems);
265
267
  }, [
266
268
  items
267
- ]), 2), valueToCheckedMap = _useMemo[0], valueToItemMap = _useMemo[1];
269
+ ]), 3), valueToCheckedMap = _useMemo[0], valueToItemMap = _useMemo[1], valueToPathMap = _useMemo[2];
270
+ // Состояние поля поиска в target
268
271
  var _useState = _sliced_to_array((0, _react.useState)((0, _utils2.getTextValue)(multiple, outerValue, valueToItemMap, renderValue)), 2), textValue = _useState[0], setTextValue = _useState[1];
272
+ // Внутреннее состояние выбранных элементов
269
273
  var _useState1 = _sliced_to_array((0, _react.useState)(multiple ? [] : ''), 2), internalValue = _useState1[0], setInternalValue = _useState1[1];
270
274
  var value = outerValue !== null && outerValue !== undefined ? outerValue : internalValue;
271
275
  var rootRef = (0, _react.useRef)(null);
@@ -294,6 +298,7 @@ var comboboxRoot = function(Root) {
294
298
  var _useReducer = _sliced_to_array((0, _react.useReducer)(_reducers.pathReducer, initialPath), 2), path = _useReducer[0], dispatchPath = _useReducer[1];
295
299
  var _useReducer1 = _sliced_to_array((0, _react.useReducer)(_reducers.focusedPathReducer, []), 2), focusedPath = _useReducer1[0], dispatchFocusedPath = _useReducer1[1];
296
300
  var _useState2 = _sliced_to_array((0, _react.useState)(valueToCheckedMap), 2), checked = _useState2[0], setChecked = _useState2[1];
301
+ var _useReducer2 = _sliced_to_array((0, _react.useReducer)(_reducers.treePathReducer, {}), 2), treePath = _useReducer2[0], dispatchTreePath = _useReducer2[1];
297
302
  var isCurrentListOpen = Boolean(path[0]);
298
303
  var activeDescendantItemValue = ((_getItemByFocused = (0, _useKeyboardNavigation.getItemByFocused)(focusedPath, focusedToValueMap)) === null || _getItemByFocused === void 0 ? void 0 : _getItemByFocused.value) || '';
299
304
  var withArrowInverse = isCurrentListOpen ? _Comboboxtokens.classes.arrowInverse : undefined;
@@ -303,8 +308,6 @@ var comboboxRoot = function(Root) {
303
308
  return;
304
309
  }
305
310
  handleListToggle(false);
306
- // Возвращаем актуальное значение поля ввода после закрытия выпадающего списка.
307
- setTextValue((0, _utils2.getTextValue)(multiple, value, valueToItemMap, renderValue));
308
311
  }, [
309
312
  floatingPopoverRef,
310
313
  listWrapperRef
@@ -378,6 +381,11 @@ var comboboxRoot = function(Root) {
378
381
  dispatchPath({
379
382
  type: 'reset'
380
383
  });
384
+ dispatchTreePath({
385
+ type: 'reset'
386
+ });
387
+ // Возвращаем актуальное значение поля ввода после закрытия выпадающего списка.
388
+ setTextValue((0, _utils2.getTextValue)(multiple, value, valueToItemMap, renderValue));
381
389
  // Скроллим чипы к левому краю при закрытии компонента
382
390
  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');
383
391
  if (multiple && value.length > 0 && el) {
@@ -441,6 +449,9 @@ var comboboxRoot = function(Root) {
441
449
  dispatchFocusedPath({
442
450
  type: 'reset'
443
451
  });
452
+ dispatchTreePath({
453
+ type: 'reset'
454
+ });
444
455
  }
445
456
  if (onChange) {
446
457
  onChange(newValues, item);
@@ -466,6 +477,9 @@ var comboboxRoot = function(Root) {
466
477
  dispatchFocusedPath({
467
478
  type: 'reset'
468
479
  });
480
+ dispatchTreePath({
481
+ type: 'reset'
482
+ });
469
483
  }
470
484
  // Закрываем список, если элемент уже выбран.
471
485
  if (mode === 'radio' && isCurrentChecked) {
@@ -534,7 +548,12 @@ var comboboxRoot = function(Root) {
534
548
  multiple: multiple,
535
549
  value: value,
536
550
  textValue: textValue,
537
- valueToItemMap: valueToItemMap
551
+ valueToItemMap: valueToItemMap,
552
+ treePath: treePath,
553
+ dispatchTreePath: dispatchTreePath,
554
+ treeView: treeView,
555
+ valueToPathMap: valueToPathMap,
556
+ items: filteredItems
538
557
  }).onKeyDown;
539
558
  // В данном эффекте мы следим за изменениями value снаружи и вносим коррективы в дерево чекбоксов.
540
559
  // Пример: когда юзер очистил value извне, тогда нужно пройтись по элементам и выключить все чекбоксы.
@@ -596,6 +615,29 @@ var comboboxRoot = function(Root) {
596
615
  }, [
597
616
  defaultValue
598
617
  ]);
618
+ // Эффект для раскрытия дерева при поиске.
619
+ (0, _react.useLayoutEffect)(function() {
620
+ if (treeView) {
621
+ // Если пользователь выбирает элемент, то выходим из эффекта.
622
+ if (textValue === (0, _utils2.getTextValue)(multiple, value, valueToItemMap, renderValue)) {
623
+ return;
624
+ }
625
+ // Если поле ввода стало пустым, то скрывает все узлы дерева.
626
+ if (textValue === '') {
627
+ dispatchTreePath({
628
+ type: 'reset'
629
+ });
630
+ } else {
631
+ // Иначе раскрываем все узлы, когда пользователь начинает вводить текст в поле ввода.
632
+ dispatchTreePath({
633
+ type: 'expand_all',
634
+ value: filteredItems
635
+ });
636
+ }
637
+ }
638
+ }, [
639
+ textValue
640
+ ]);
599
641
  return /*#__PURE__*/ _react.default.createElement(Root, {
600
642
  size: size,
601
643
  view: view,
@@ -628,7 +670,11 @@ var comboboxRoot = function(Root) {
628
670
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
629
671
  // @ts-ignore
630
672
  // eslint-disable-next-line no-underscore-dangle
631
- _checkboxAppearance: rest._checkboxAppearance
673
+ _checkboxAppearance: rest._checkboxAppearance,
674
+ treePath: treePath,
675
+ dispatchTreePath: dispatchTreePath,
676
+ arrowPlacement: arrowPlacement,
677
+ valueToPathMap: valueToPathMap
632
678
  }
633
679
  }, /*#__PURE__*/ _react.default.createElement(_FloatingPopover.FloatingPopover, {
634
680
  ref: floatingPopoverRef,
@@ -694,7 +740,18 @@ var comboboxRoot = function(Root) {
694
740
  disabled: disabled,
695
741
  readOnly: readOnly,
696
742
  name: name
697
- }, /*#__PURE__*/ _react.default.createElement(_Comboboxstyles.ListWrapper, {
743
+ }, (0, _utils.isEmpty)(filteredItems) ? /*#__PURE__*/ _react.default.createElement(_Comboboxstyles.StyledEmptyState, {
744
+ className: _Comboboxtokens.classes.emptyStateWrapper,
745
+ size: size,
746
+ description: emptyStateDescription || 'Ничего не найдено'
747
+ }) : /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, treeView ? /*#__PURE__*/ _react.default.createElement(_ui.TreeList, {
748
+ items: filteredItems,
749
+ listMaxHeight: listMaxHeight || listHeight,
750
+ onScroll: virtual ? undefined : onScroll,
751
+ virtual: virtual,
752
+ beforeList: beforeList,
753
+ afterList: afterList
754
+ }) : /*#__PURE__*/ _react.default.createElement(_Comboboxstyles.ListWrapper, {
698
755
  ref: listWrapperRef,
699
756
  listWidth: listWidth
700
757
  }, /*#__PURE__*/ _react.default.createElement(_Comboboxstyles.Ul, {
@@ -704,11 +761,7 @@ var comboboxRoot = function(Root) {
704
761
  listMaxHeight: listMaxHeight || listHeight,
705
762
  virtual: virtual,
706
763
  onScroll: virtual ? undefined : onScroll
707
- }, beforeList, (0, _utils.isEmpty)(filteredItems) ? /*#__PURE__*/ _react.default.createElement(_Comboboxstyles.StyledEmptyState, {
708
- className: _Comboboxtokens.classes.emptyStateWrapper,
709
- size: size,
710
- description: emptyStateDescription || 'Ничего не найдено'
711
- }) : /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, props.multiple && props.selectAllOptions && // TODO: #2004
764
+ }, beforeList, props.multiple && props.selectAllOptions && // TODO: #2004
712
765
  /*#__PURE__*/ _react.default.createElement(_ui.SelectAll, {
713
766
  selectAllOptions: props.selectAllOptions,
714
767
  variant: variant
@@ -727,7 +780,7 @@ var comboboxRoot = function(Root) {
727
780
  listWidth: listWidth,
728
781
  portal: listWrapperRef
729
782
  });
730
- })), afterList)))))));
783
+ }), afterList))))))));
731
784
  });
732
785
  };
733
786
  var comboboxConfig = {
@@ -54,6 +54,8 @@ var tokens = {
54
54
  itemIconMargin: '--plasma-combobox-item-icon-margin',
55
55
  itemBackgroundHover: '--plasma-combobox-item-background-hover',
56
56
  itemIconColor: '--plasma-combobox-item-icon-color',
57
+ itemGap: '--plasma-select-item-gap',
58
+ itemTreeOffsetWidth: '--plasma-select-item-tree-offset-width',
57
59
  cellPadding: '--plasma-combobox-cell-padding',
58
60
  cellPaddingLeftContent: '--plasma-combobox-cell-padding-left-content',
59
61
  cellPaddingContent: '--plasma-combobox-cell-padding-content',
@@ -17,6 +17,31 @@ _export(exports, {
17
17
  }
18
18
  });
19
19
  var _utils = require("../../../../utils");
20
+ function _array_like_to_array(arr, len) {
21
+ if (len == null || len > arr.length) len = arr.length;
22
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
23
+ return arr2;
24
+ }
25
+ function _array_without_holes(arr) {
26
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
27
+ }
28
+ function _iterable_to_array(iter) {
29
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
30
+ }
31
+ function _non_iterable_spread() {
32
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
33
+ }
34
+ function _to_consumable_array(arr) {
35
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
36
+ }
37
+ function _unsupported_iterable_to_array(o, minLen) {
38
+ if (!o) return;
39
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
40
+ var n = Object.prototype.toString.call(o).slice(8, -1);
41
+ if (n === "Object" && o.constructor) n = o.constructor.name;
42
+ if (n === "Map" || n === "Set") return Array.from(n);
43
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
44
+ }
20
45
  var getPathMap = function(items) {
21
46
  var pathMap = new Map();
22
47
  var focusedToValueMap = new Map();
@@ -42,22 +67,29 @@ var getPathMap = function(items) {
42
67
  var getTreeMaps = function(items) {
43
68
  var valueToCheckedMap = new Map();
44
69
  var valueToItemMap = new Map();
70
+ var valueToPathMap = new Map();
45
71
  var rec = function(items) {
46
- var prevIndex = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : '';
72
+ var prevIndex = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : '', path = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [];
47
73
  items === null || items === void 0 ? void 0 : items.forEach(function(item, index) {
48
74
  var value = item.value, innerItems = item.items;
49
75
  var currIndex = "".concat(prevIndex, "/").concat(index).replace(/^(\/)/, '');
50
76
  valueToCheckedMap.set(value, false);
77
+ valueToPathMap.set(value.toString(), _to_consumable_array(path).concat([
78
+ value.toString()
79
+ ]));
51
80
  if ((0, _utils.isEmpty)(innerItems) || !innerItems) {
52
81
  valueToItemMap.set(value, item);
53
82
  } else {
54
- rec(innerItems, currIndex);
83
+ rec(innerItems, currIndex, _to_consumable_array(path).concat([
84
+ value.toString()
85
+ ]));
55
86
  }
56
87
  });
57
88
  };
58
89
  rec(items);
59
90
  return [
60
91
  valueToCheckedMap,
61
- valueToItemMap
92
+ valueToItemMap,
93
+ valueToPathMap
62
94
  ];
63
95
  };
@@ -20,6 +20,32 @@ _export(exports, {
20
20
  }
21
21
  });
22
22
  var _utils = require("../../../../utils");
23
+ var _reducers = require("../../../Select/reducers");
24
+ function _array_like_to_array(arr, len) {
25
+ if (len == null || len > arr.length) len = arr.length;
26
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
27
+ return arr2;
28
+ }
29
+ function _array_without_holes(arr) {
30
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
31
+ }
32
+ function _iterable_to_array(iter) {
33
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
34
+ }
35
+ function _non_iterable_spread() {
36
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
37
+ }
38
+ function _to_consumable_array(arr) {
39
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
40
+ }
41
+ function _unsupported_iterable_to_array(o, minLen) {
42
+ if (!o) return;
43
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
44
+ var n = Object.prototype.toString.call(o).slice(8, -1);
45
+ if (n === "Object" && o.constructor) n = o.constructor.name;
46
+ if (n === "Map" || n === "Set") return Array.from(n);
47
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
48
+ }
23
49
  var JUMP_SIZE = 10;
24
50
  var keys = {
25
51
  Enter: 'Enter',
@@ -43,6 +69,51 @@ var getItemByFocused = function(focusedPath, focusedToValueMap) {
43
69
  return focusedToValueMap.get(focusedPathAsString);
44
70
  };
45
71
  var useKeyNavigation = function(param) {
72
+ 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;
73
+ if (treeView) {
74
+ return keyboardNavigationTree({
75
+ focusedPath: focusedPath,
76
+ dispatchFocusedPath: dispatchFocusedPath,
77
+ path: path,
78
+ dispatchPath: dispatchPath,
79
+ pathMap: pathMap,
80
+ focusedToValueMap: focusedToValueMap,
81
+ handleListToggle: handleListToggle,
82
+ handlePressDown: handlePressDown,
83
+ setTextValue: setTextValue,
84
+ multiple: multiple,
85
+ value: value,
86
+ textValue: textValue,
87
+ valueToItemMap: valueToItemMap,
88
+ treePath: treePath,
89
+ dispatchTreePath: dispatchTreePath,
90
+ treeView: treeView,
91
+ valueToPathMap: valueToPathMap,
92
+ items: items
93
+ });
94
+ }
95
+ return keyboardNavigationDefault({
96
+ focusedPath: focusedPath,
97
+ dispatchFocusedPath: dispatchFocusedPath,
98
+ path: path,
99
+ dispatchPath: dispatchPath,
100
+ pathMap: pathMap,
101
+ focusedToValueMap: focusedToValueMap,
102
+ handleListToggle: handleListToggle,
103
+ handlePressDown: handlePressDown,
104
+ setTextValue: setTextValue,
105
+ multiple: multiple,
106
+ value: value,
107
+ textValue: textValue,
108
+ valueToItemMap: valueToItemMap,
109
+ treePath: treePath,
110
+ dispatchTreePath: dispatchTreePath,
111
+ treeView: treeView,
112
+ valueToPathMap: valueToPathMap,
113
+ items: items
114
+ });
115
+ };
116
+ var keyboardNavigationDefault = function(param) {
46
117
  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;
47
118
  var currentIndex = (focusedPath === null || focusedPath === void 0 ? void 0 : focusedPath[focusedPath.length - 1]) || 0;
48
119
  var currentLength = pathMap.get(path === null || path === void 0 ? void 0 : path[focusedPath.length - 1]) || 0;
@@ -301,3 +372,244 @@ var useKeyNavigation = function(param) {
301
372
  onKeyDown: onKeyDown
302
373
  };
303
374
  };
375
+ var keyboardNavigationTree = function(param) {
376
+ 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;
377
+ var _currentItem_parent_items, _currentItem_parent;
378
+ var currentItem = getItemByFocused(focusedPath, focusedToValueMap);
379
+ var currentIndex = (focusedPath === null || focusedPath === void 0 ? void 0 : focusedPath[focusedPath.length - 1]) || 0;
380
+ 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;
381
+ var isValidFocus = function(focusCandidate) {
382
+ if (!Array.isArray(items) || !Array.isArray(focusCandidate)) return false;
383
+ var currentLevel = items;
384
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
385
+ try {
386
+ for(var _iterator = focusCandidate[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
387
+ var index = _step.value;
388
+ if (!Array.isArray(currentLevel) || index >= currentLevel.length) {
389
+ return false;
390
+ }
391
+ var node = currentLevel[index];
392
+ currentLevel = node.items || [];
393
+ }
394
+ } catch (err) {
395
+ _didIteratorError = true;
396
+ _iteratorError = err;
397
+ } finally{
398
+ try {
399
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
400
+ _iterator.return();
401
+ }
402
+ } finally{
403
+ if (_didIteratorError) {
404
+ throw _iteratorError;
405
+ }
406
+ }
407
+ }
408
+ return true;
409
+ };
410
+ var onKeyDown = function(event) {
411
+ switch(event.code){
412
+ case keys.ArrowUp:
413
+ {
414
+ if (path[0]) {
415
+ event.stopPropagation();
416
+ event.preventDefault();
417
+ }
418
+ /**
419
+ * Если список открыт и фокус уже установлен на каком-либо элементе.
420
+ * */ if (focusedPath.length) {
421
+ /**
422
+ * Если это не первый элемент, то нужно вначале найти элемент для фокуса.
423
+ * Т.к. если верхний элемент раскрыт, то и перемещаться нужно не на него,
424
+ * а на его самый нижний дочерний элемент.
425
+ * */ if (currentIndex > 0) {
426
+ var nextFocus = _to_consumable_array(focusedPath.slice(0, -1)).concat([
427
+ currentIndex - 1
428
+ ]);
429
+ for(var i = 0; i <= focusedPath.length; i++){
430
+ var focusedPathAsString = nextFocus.reduce(function(acc, n) {
431
+ return "".concat(acc, "/").concat(n);
432
+ }, '').replace(/^(\/)/, '');
433
+ var item = focusedToValueMap.get(focusedPathAsString);
434
+ var isLevelOpened = (0, _reducers.keyExists)(treePath, valueToPathMap.get(item === null || item === void 0 ? void 0 : item.value.toString()) || []);
435
+ if (isLevelOpened) {
436
+ var _item_items;
437
+ nextFocus = _to_consumable_array(nextFocus).concat([
438
+ ((item === null || item === void 0 ? void 0 : (_item_items = item.items) === null || _item_items === void 0 ? void 0 : _item_items.length) || 0) - 1
439
+ ]);
440
+ } else {
441
+ break;
442
+ }
443
+ }
444
+ dispatchFocusedPath({
445
+ type: 'set_focus',
446
+ value: nextFocus
447
+ });
448
+ } else {
449
+ /**
450
+ * Если элемент первый, то нужно лишь подняться к его родителю.
451
+ * */ dispatchFocusedPath({
452
+ type: 'return_prev_focus'
453
+ });
454
+ }
455
+ } else {
456
+ /**
457
+ * Если список закрыт, то нужно его открыть и установить фокус на первый элемент.
458
+ * */ dispatchPath({
459
+ type: 'opened_first_level'
460
+ });
461
+ dispatchFocusedPath({
462
+ type: 'set_initial_focus'
463
+ });
464
+ handleListToggle(true);
465
+ }
466
+ break;
467
+ }
468
+ case keys.ArrowDown:
469
+ {
470
+ if (path[0]) {
471
+ event.stopPropagation();
472
+ event.preventDefault();
473
+ }
474
+ /**
475
+ * Если список открыт и фокус уже установлен на каком-либо элементе.
476
+ * */ if (focusedPath.length) {
477
+ /**
478
+ * Заходим сюда если у элемента есть другие вложенные элементы.
479
+ * */ if ((currentItem === null || currentItem === void 0 ? void 0 : currentItem.items) && (currentItem === null || currentItem === void 0 ? void 0 : currentItem.items.length)) {
480
+ var isCurrentLevelOpened = (0, _reducers.keyExists)(treePath, valueToPathMap.get(currentItem.value.toString()) || []);
481
+ /**
482
+ * Если у этого элемента открыт его дочерний список,
483
+ * то устанавливаем фокус на первый элемент из этого списка
484
+ * и сразу же выходим из обработчика события.
485
+ * */ if (isCurrentLevelOpened) {
486
+ dispatchFocusedPath({
487
+ type: 'add_focus',
488
+ value: 0
489
+ });
490
+ break;
491
+ }
492
+ }
493
+ /**
494
+ * Если мы еще не достигли конца списка, то движемся к следующему элементу.
495
+ * */ if (currentIndex + 1 < currentLength) {
496
+ dispatchFocusedPath({
497
+ type: 'change_last_focus',
498
+ value: currentIndex + 1
499
+ });
500
+ } else {
501
+ /**
502
+ * Если же достигли последнего элемента на текущем уровне, то нужно определить,
503
+ * на какой из элементов ниже мы перейдем.
504
+ * Переход фокуса отсюда может быть только на уровни выше, при чем сразу на несколько.
505
+ * */ var focusCandidate = _to_consumable_array(focusedPath);
506
+ var nextFocus1 = null;
507
+ while(focusCandidate.length > 1){
508
+ focusCandidate = _to_consumable_array(focusCandidate.slice(0, -2)).concat([
509
+ (focusCandidate.at(-2) || 0) + 1
510
+ ]);
511
+ if (isValidFocus(focusCandidate)) {
512
+ nextFocus1 = focusCandidate;
513
+ break;
514
+ }
515
+ }
516
+ if (nextFocus1) {
517
+ dispatchFocusedPath({
518
+ type: 'set_focus',
519
+ value: nextFocus1
520
+ });
521
+ } else {
522
+ break;
523
+ }
524
+ }
525
+ } else {
526
+ /**
527
+ * Если список закрыт, то нужно его открыть и установить фокус на первый элемент.
528
+ * */ dispatchPath({
529
+ type: 'opened_first_level'
530
+ });
531
+ dispatchFocusedPath({
532
+ type: 'set_initial_focus'
533
+ });
534
+ handleListToggle(true);
535
+ }
536
+ break;
537
+ }
538
+ case keys.ArrowLeft:
539
+ {
540
+ if (path[0]) {
541
+ event.stopPropagation();
542
+ event.preventDefault();
543
+ if (focusedPath.length) {
544
+ dispatchTreePath({
545
+ type: 'close_level',
546
+ value: valueToPathMap.get((currentItem === null || currentItem === void 0 ? void 0 : currentItem.value.toString()) || '') || []
547
+ });
548
+ }
549
+ }
550
+ break;
551
+ }
552
+ case keys.ArrowRight:
553
+ {
554
+ if (path[0]) {
555
+ event.stopPropagation();
556
+ event.preventDefault();
557
+ if (!focusedPath.length || (currentItem === null || currentItem === void 0 ? void 0 : currentItem.disabled) || !(currentItem === null || currentItem === void 0 ? void 0 : currentItem.items)) {
558
+ break;
559
+ }
560
+ dispatchTreePath({
561
+ type: 'open_level',
562
+ value: valueToPathMap.get(currentItem.value.toString()) || []
563
+ });
564
+ }
565
+ break;
566
+ }
567
+ case keys.Enter:
568
+ {
569
+ event.preventDefault();
570
+ if (!currentItem || (currentItem === null || currentItem === void 0 ? void 0 : currentItem.disabled)) {
571
+ break;
572
+ }
573
+ if (!path[0]) {
574
+ dispatchPath({
575
+ type: 'opened_first_level'
576
+ });
577
+ dispatchFocusedPath({
578
+ type: 'set_initial_focus'
579
+ });
580
+ break;
581
+ }
582
+ handlePressDown(currentItem);
583
+ break;
584
+ }
585
+ case keys.Tab:
586
+ case keys.Escape:
587
+ {
588
+ if (path[0]) {
589
+ handleListToggle(false);
590
+ }
591
+ if (multiple) {
592
+ setTextValue('');
593
+ } else if (textValue !== value) {
594
+ // Проверяем, отличается ли значение в инпуте от выбранного value после нажатия Tab/Enter.
595
+ // Если изменилось, то возвращаем label выбранного айтема.
596
+ // Если нет выбранного элемента, то стираем значение инпута.
597
+ if ((0, _utils.isEmpty)(value)) {
598
+ setTextValue('');
599
+ } else {
600
+ var _valueToItemMap_get;
601
+ setTextValue(((_valueToItemMap_get = valueToItemMap.get(value)) === null || _valueToItemMap_get === void 0 ? void 0 : _valueToItemMap_get.label) || '');
602
+ }
603
+ }
604
+ break;
605
+ }
606
+ default:
607
+ {
608
+ break;
609
+ }
610
+ }
611
+ };
612
+ return {
613
+ onKeyDown: onKeyDown
614
+ };
615
+ };
@@ -39,6 +39,10 @@ function focusedPathReducer(state, action) {
39
39
  {
40
40
  return [];
41
41
  }
42
+ case 'set_focus':
43
+ {
44
+ return action.value;
45
+ }
42
46
  case 'set_initial_focus':
43
47
  {
44
48
  return [
@@ -59,6 +63,9 @@ function focusedPathReducer(state, action) {
59
63
  }
60
64
  case 'return_prev_focus':
61
65
  {
66
+ if (state.length === 1) {
67
+ return state;
68
+ }
62
69
  return state.slice(0, -1);
63
70
  }
64
71
  default:
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  });
5
5
  _export_star(require("./pathReducer"), exports);
6
6
  _export_star(require("./focusedPathReducer"), exports);
7
+ _export_star(require("./treePathReducer"), exports);
7
8
  function _export_star(from, to) {
8
9
  Object.keys(from).forEach(function(k) {
9
10
  if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {