@homecode/ui 4.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +29 -0
  3. package/dist/esm/index.js +78 -0
  4. package/dist/esm/node_modules/style-inject/dist/style-inject.es.js +28 -0
  5. package/dist/esm/src/components/AssistiveText/AssistiveText.js +10 -0
  6. package/dist/esm/src/components/AssistiveText/AssistiveText.styl.js +7 -0
  7. package/dist/esm/src/components/Button/Button.helpers.js +12 -0
  8. package/dist/esm/src/components/Button/Button.js +38 -0
  9. package/dist/esm/src/components/Button/Button.styl.js +7 -0
  10. package/dist/esm/src/components/ButtonGroup/ButtonGroup.js +10 -0
  11. package/dist/esm/src/components/ButtonGroup/ButtonGroup.styl.js +7 -0
  12. package/dist/esm/src/components/Checkbox/Checkbox.js +48 -0
  13. package/dist/esm/src/components/Checkbox/Checkbox.styl.js +7 -0
  14. package/dist/esm/src/components/Container/Container.js +12 -0
  15. package/dist/esm/src/components/Container/Container.styl.js +7 -0
  16. package/dist/esm/src/components/DateTime/DateTime.js +17 -0
  17. package/dist/esm/src/components/Draggable/Draggable.js +136 -0
  18. package/dist/esm/src/components/Draggable/Draggable.styl.js +7 -0
  19. package/dist/esm/src/components/Expand/Expand.js +24 -0
  20. package/dist/esm/src/components/Expand/Expand.styl.js +7 -0
  21. package/dist/esm/src/components/Form/Form.helpers.js +42 -0
  22. package/dist/esm/src/components/Form/Form.js +286 -0
  23. package/dist/esm/src/components/Form/Form.styl.js +7 -0
  24. package/dist/esm/src/components/Form/Form.types.js +1 -0
  25. package/dist/esm/src/components/Form/SubmitButtons/SubmitButtons.js +8 -0
  26. package/dist/esm/src/components/Form/SubmitButtons/SubmitButtons.styl.js +7 -0
  27. package/dist/esm/src/components/Form/Validator.js +36 -0
  28. package/dist/esm/src/components/Gallery/Dots/Dots.js +9 -0
  29. package/dist/esm/src/components/Gallery/Dots/Dots.styl.js +7 -0
  30. package/dist/esm/src/components/Gallery/Gallery.js +180 -0
  31. package/dist/esm/src/components/Gallery/Gallery.styl.js +7 -0
  32. package/dist/esm/src/components/Heading/Heading.js +37 -0
  33. package/dist/esm/src/components/Heading/Heading.styl.js +7 -0
  34. package/dist/esm/src/components/Icon/Icon.js +27 -0
  35. package/dist/esm/src/components/Icon/Icon.styl.js +7 -0
  36. package/dist/esm/src/components/Icon/icons/avatar.svg.js +15 -0
  37. package/dist/esm/src/components/Icon/icons/brokenImage.svg.js +15 -0
  38. package/dist/esm/src/components/Icon/icons/check.svg.js +19 -0
  39. package/dist/esm/src/components/Icon/icons/chevronDown.svg.js +20 -0
  40. package/dist/esm/src/components/Icon/icons/chevronLeft.svg.js +20 -0
  41. package/dist/esm/src/components/Icon/icons/chevronRight.svg.js +20 -0
  42. package/dist/esm/src/components/Icon/icons/chevronUp.svg.js +20 -0
  43. package/dist/esm/src/components/Icon/icons/close.svg.js +15 -0
  44. package/dist/esm/src/components/Icon/icons/colors.svg.js +60 -0
  45. package/dist/esm/src/components/Icon/icons/copy.svg.js +15 -0
  46. package/dist/esm/src/components/Icon/icons/delete.svg.js +15 -0
  47. package/dist/esm/src/components/Icon/icons/draft.svg.js +15 -0
  48. package/dist/esm/src/components/Icon/icons/edit.svg.js +15 -0
  49. package/dist/esm/src/components/Icon/icons/externalLink.svg.js +15 -0
  50. package/dist/esm/src/components/Icon/icons/fullscreen.svg.js +15 -0
  51. package/dist/esm/src/components/Icon/icons/fullscreenExit.svg.js +15 -0
  52. package/dist/esm/src/components/Icon/icons/gear.svg.js +20 -0
  53. package/dist/esm/src/components/Icon/icons/history.svg.js +17 -0
  54. package/dist/esm/src/components/Icon/icons/home.svg.js +19 -0
  55. package/dist/esm/src/components/Icon/icons/index.js +41 -0
  56. package/dist/esm/src/components/Icon/icons/loader.svg.js +45 -0
  57. package/dist/esm/src/components/Icon/icons/menu.svg.js +18 -0
  58. package/dist/esm/src/components/Icon/icons/mic.svg.js +15 -0
  59. package/dist/esm/src/components/Icon/icons/minus.svg.js +15 -0
  60. package/dist/esm/src/components/Icon/icons/moreHorizontal.svg.js +15 -0
  61. package/dist/esm/src/components/Icon/icons/moreVertical.svg.js +15 -0
  62. package/dist/esm/src/components/Icon/icons/plus.svg.js +15 -0
  63. package/dist/esm/src/components/Icon/icons/redo.svg.js +15 -0
  64. package/dist/esm/src/components/Icon/icons/requiredStar.svg.js +15 -0
  65. package/dist/esm/src/components/Icon/icons/save.svg.js +17 -0
  66. package/dist/esm/src/components/Icon/icons/send.svg.js +16 -0
  67. package/dist/esm/src/components/Icon/icons/settings.svg.js +52 -0
  68. package/dist/esm/src/components/Icon/icons/shoppingBag.svg.js +17 -0
  69. package/dist/esm/src/components/Icon/icons/social_email.svg.js +15 -0
  70. package/dist/esm/src/components/Icon/icons/social_instagram.svg.js +15 -0
  71. package/dist/esm/src/components/Icon/icons/social_telegram.svg.js +19 -0
  72. package/dist/esm/src/components/Icon/icons/undo.svg.js +15 -0
  73. package/dist/esm/src/components/Input/Input.js +331 -0
  74. package/dist/esm/src/components/Input/Input.styl.js +7 -0
  75. package/dist/esm/src/components/InputFile/InputFile.js +292 -0
  76. package/dist/esm/src/components/InputFile/InputFile.styl.js +7 -0
  77. package/dist/esm/src/components/InputFile/InputFile.types.js +1 -0
  78. package/dist/esm/src/components/InputFile/Item/Item.js +18 -0
  79. package/dist/esm/src/components/InputFile/Item/Item.styl.js +7 -0
  80. package/dist/esm/src/components/Label/Label.constants.json.js +8 -0
  81. package/dist/esm/src/components/Label/Label.helpers.js +35 -0
  82. package/dist/esm/src/components/Label/Label.js +58 -0
  83. package/dist/esm/src/components/Label/Label.styl.js +7 -0
  84. package/dist/esm/src/components/Lazy/Lazy.js +65 -0
  85. package/dist/esm/src/components/LightBox/LightBox.js +28 -0
  86. package/dist/esm/src/components/LightBox/LightBox.styl.js +7 -0
  87. package/dist/esm/src/components/Notifications/Notifications.constants.json.js +6 -0
  88. package/dist/esm/src/components/Notifications/Notifications.js +67 -0
  89. package/dist/esm/src/components/Notifications/Notifications.styl.js +7 -0
  90. package/dist/esm/src/components/Notifications/store.js +62 -0
  91. package/dist/esm/src/components/Paranja/Paranja.js +14 -0
  92. package/dist/esm/src/components/Paranja/Paranja.styl.js +7 -0
  93. package/dist/esm/src/components/Popup/Popup.helpers.js +31 -0
  94. package/dist/esm/src/components/Popup/Popup.js +396 -0
  95. package/dist/esm/src/components/Popup/Popup.styl.js +7 -0
  96. package/dist/esm/src/components/PopupMenu/PopupMenu.js +15 -0
  97. package/dist/esm/src/components/PopupMenu/PopupMenu.styl.js +7 -0
  98. package/dist/esm/src/components/Portal/Portal.js +19 -0
  99. package/dist/esm/src/components/RequiredStar/RequiredStar.js +12 -0
  100. package/dist/esm/src/components/RequiredStar/RequiredStar.styl.js +7 -0
  101. package/dist/esm/src/components/Router/Link/Link.js +61 -0
  102. package/dist/esm/src/components/Router/Link/Link.styl.js +7 -0
  103. package/dist/esm/src/components/Router/Redirect.js +12 -0
  104. package/dist/esm/src/components/Router/Route.js +4 -0
  105. package/dist/esm/src/components/Router/Router.helpers.js +33 -0
  106. package/dist/esm/src/components/Router/Router.js +68 -0
  107. package/dist/esm/src/components/Router/context.js +5 -0
  108. package/dist/esm/src/components/Router/store.js +55 -0
  109. package/dist/esm/src/components/Scroll/Scroll.js +274 -0
  110. package/dist/esm/src/components/Scroll/Scroll.styl.js +7 -0
  111. package/dist/esm/src/components/Select/Select.helpers.js +37 -0
  112. package/dist/esm/src/components/Select/Select.js +583 -0
  113. package/dist/esm/src/components/Select/Select.styl.js +7 -0
  114. package/dist/esm/src/components/Spinner/Spinner.js +11 -0
  115. package/dist/esm/src/components/Spinner/Spinner.styl.js +7 -0
  116. package/dist/esm/src/components/Spinner/spinner.svg.js +24 -0
  117. package/dist/esm/src/components/Table/Table.js +24 -0
  118. package/dist/esm/src/components/Table/Table.styl.js +7 -0
  119. package/dist/esm/src/components/Tabs/Tabs.js +43 -0
  120. package/dist/esm/src/components/Tabs/Tabs.styl.js +7 -0
  121. package/dist/esm/src/components/Text/Text.js +44 -0
  122. package/dist/esm/src/components/Text/Text.styl.js +7 -0
  123. package/dist/esm/src/components/Theme/Theme.defaults.js +50 -0
  124. package/dist/esm/src/components/Theme/Theme.helpers.js +67 -0
  125. package/dist/esm/src/components/Theme/Theme.js +13 -0
  126. package/dist/esm/src/components/VH/VH.js +33 -0
  127. package/dist/esm/src/components/Virtualized/List/List.js +124 -0
  128. package/dist/esm/src/components/Virtualized/List/List.styl.js +7 -0
  129. package/dist/esm/src/components/Virtualized/List/ListScroll.js +21 -0
  130. package/dist/esm/src/components/Virtualized/List/ListScroll.styl.js +7 -0
  131. package/dist/esm/src/components/Virtualized/Virtualized.helpers.js +14 -0
  132. package/dist/esm/src/components/Virtualized/Virtualized.js +200 -0
  133. package/dist/esm/src/components/Virtualized/Virtualized.styl.js +7 -0
  134. package/dist/esm/src/components/Virtualized/Virtualized.types.js +1 -0
  135. package/dist/esm/src/services/i18n.js +68 -0
  136. package/dist/esm/src/tools/array.js +60 -0
  137. package/dist/esm/src/tools/config.js +9 -0
  138. package/dist/esm/src/tools/debounce.js +11 -0
  139. package/dist/esm/src/tools/dom.js +46 -0
  140. package/dist/esm/src/tools/env.js +3 -0
  141. package/dist/esm/src/tools/file.js +11 -0
  142. package/dist/esm/src/tools/localStorage.js +31 -0
  143. package/dist/esm/src/tools/number.js +27 -0
  144. package/dist/esm/src/tools/object.js +5 -0
  145. package/dist/esm/src/tools/queryParams.js +20 -0
  146. package/dist/esm/src/tools/rangeMap.js +3 -0
  147. package/dist/esm/src/tools/resizeObserver.js +64 -0
  148. package/dist/esm/src/tools/scroll.js +41 -0
  149. package/dist/esm/src/tools/string.js +7 -0
  150. package/dist/esm/src/tools/throttle.js +30 -0
  151. package/dist/esm/src/tools/uid.js +7 -0
  152. package/dist/esm/types/index.d.ts +1 -0
  153. package/dist/esm/types/src/components/AssistiveText/AssistiveText.d.ts +3 -0
  154. package/dist/esm/types/src/components/AssistiveText/AssistiveText.types.d.ts +7 -0
  155. package/dist/esm/types/src/components/Button/Button.d.ts +4 -0
  156. package/dist/esm/types/src/components/Button/Button.helpers.d.ts +1 -0
  157. package/dist/esm/types/src/components/Button/Button.types.d.ts +14 -0
  158. package/dist/esm/types/src/components/ButtonGroup/ButtonGroup.d.ts +3 -0
  159. package/dist/esm/types/src/components/ButtonGroup/ButtonGroup.types.d.ts +5 -0
  160. package/dist/esm/types/src/components/Checkbox/Checkbox.d.ts +18 -0
  161. package/dist/esm/types/src/components/Checkbox/Checkbox.types.d.ts +10 -0
  162. package/dist/esm/types/src/components/Container/Container.d.ts +3 -0
  163. package/dist/esm/types/src/components/Container/Container.types.d.ts +13 -0
  164. package/dist/esm/types/src/components/DateTime/DateTime.d.ts +8 -0
  165. package/dist/esm/types/src/components/DateTime/DateTime.types.d.ts +6 -0
  166. package/dist/esm/types/src/components/Draggable/Draggable.d.ts +24 -0
  167. package/dist/esm/types/src/components/Draggable/Draggable.types.d.ts +11 -0
  168. package/dist/esm/types/src/components/Expand/Expand.d.ts +3 -0
  169. package/dist/esm/types/src/components/Expand/Expand.types.d.ts +16 -0
  170. package/dist/esm/types/src/components/Form/Form.d.ts +32 -0
  171. package/dist/esm/types/src/components/Form/Form.helpers.d.ts +6 -0
  172. package/dist/esm/types/src/components/Form/Form.types.d.ts +71 -0
  173. package/dist/esm/types/src/components/Form/SubmitButtons/SubmitButtons.d.ts +13 -0
  174. package/dist/esm/types/src/components/Form/Validator.d.ts +2 -0
  175. package/dist/esm/types/src/components/Form/index.d.ts +2 -0
  176. package/dist/esm/types/src/components/Gallery/Dots/Dots.d.ts +5 -0
  177. package/dist/esm/types/src/components/Gallery/Gallery.d.ts +36 -0
  178. package/dist/esm/types/src/components/Gallery/Gallery.types.d.ts +12 -0
  179. package/dist/esm/types/src/components/Heading/Heading.d.ts +3 -0
  180. package/dist/esm/types/src/components/Heading/Heading.types.d.ts +5 -0
  181. package/dist/esm/types/src/components/Icon/Icon.d.ts +45 -0
  182. package/dist/esm/types/src/components/Icon/Icon.example.d.ts +3 -0
  183. package/dist/esm/types/src/components/Icon/Icon.helpers.d.ts +1 -0
  184. package/dist/esm/types/src/components/Icon/Icon.types.d.ts +8 -0
  185. package/dist/esm/types/src/components/Icon/icons/index.d.ts +39 -0
  186. package/dist/esm/types/src/components/Input/Input.d.ts +42 -0
  187. package/dist/esm/types/src/components/Input/Input.types.d.ts +21 -0
  188. package/dist/esm/types/src/components/InputFile/InputFile.d.ts +48 -0
  189. package/dist/esm/types/src/components/InputFile/InputFile.types.d.ts +22 -0
  190. package/dist/esm/types/src/components/InputFile/Item/Item.d.ts +16 -0
  191. package/dist/esm/types/src/components/Label/Label.d.ts +19 -0
  192. package/dist/esm/types/src/components/Label/Label.helpers.d.ts +1 -0
  193. package/dist/esm/types/src/components/Label/Label.types.d.ts +8 -0
  194. package/dist/esm/types/src/components/Lazy/Lazy.d.ts +18 -0
  195. package/dist/esm/types/src/components/Lazy/Lazy.types.d.ts +15 -0
  196. package/dist/esm/types/src/components/LightBox/LightBox.d.ts +3 -0
  197. package/dist/esm/types/src/components/LightBox/LightBox.types.d.ts +7 -0
  198. package/dist/esm/types/src/components/Notifications/Notifications.d.ts +2 -0
  199. package/dist/esm/types/src/components/Notifications/Notifications.types.d.ts +19 -0
  200. package/dist/esm/types/src/components/Notifications/store.d.ts +2 -0
  201. package/dist/esm/types/src/components/Paranja/Paranja.d.ts +3 -0
  202. package/dist/esm/types/src/components/Paranja/Paranja.types.d.ts +8 -0
  203. package/dist/esm/types/src/components/Popup/Popup.d.ts +73 -0
  204. package/dist/esm/types/src/components/Popup/Popup.helpers.d.ts +8 -0
  205. package/dist/esm/types/src/components/Popup/Popup.types.d.ts +34 -0
  206. package/dist/esm/types/src/components/PopupMenu/PopupMenu.d.ts +3 -0
  207. package/dist/esm/types/src/components/PopupMenu/PopupMenu.types.d.ts +13 -0
  208. package/dist/esm/types/src/components/Portal/Portal.d.ts +7 -0
  209. package/dist/esm/types/src/components/RequiredStar/RequiredStar.d.ts +3 -0
  210. package/dist/esm/types/src/components/RequiredStar/RequiredStar.types.d.ts +6 -0
  211. package/dist/esm/types/src/components/Router/Link/Link.d.ts +1 -0
  212. package/dist/esm/types/src/components/Router/Link/Link.types.d.ts +12 -0
  213. package/dist/esm/types/src/components/Router/Redirect.d.ts +5 -0
  214. package/dist/esm/types/src/components/Router/Route.d.ts +5 -0
  215. package/dist/esm/types/src/components/Router/Router.d.ts +7 -0
  216. package/dist/esm/types/src/components/Router/Router.helpers.d.ts +2 -0
  217. package/dist/esm/types/src/components/Router/Router.types.d.ts +18 -0
  218. package/dist/esm/types/src/components/Router/context.d.ts +6 -0
  219. package/dist/esm/types/src/components/Router/store.d.ts +2 -0
  220. package/dist/esm/types/src/components/Scroll/Scroll.d.ts +67 -0
  221. package/dist/esm/types/src/components/Scroll/Scroll.types.d.ts +27 -0
  222. package/dist/esm/types/src/components/Select/Select.d.ts +94 -0
  223. package/dist/esm/types/src/components/Select/Select.helpers.d.ts +14 -0
  224. package/dist/esm/types/src/components/Select/Select.types.d.ts +74 -0
  225. package/dist/esm/types/src/components/Spinner/Spinner.d.ts +3 -0
  226. package/dist/esm/types/src/components/Spinner/Spinner.types.d.ts +4 -0
  227. package/dist/esm/types/src/components/Table/Table.d.ts +8 -0
  228. package/dist/esm/types/src/components/Table/Table.types.d.ts +19 -0
  229. package/dist/esm/types/src/components/Tabs/Tabs.d.ts +3 -0
  230. package/dist/esm/types/src/components/Tabs/Tabs.types.d.ts +27 -0
  231. package/dist/esm/types/src/components/Text/Text.d.ts +7 -0
  232. package/dist/esm/types/src/components/Theme/Theme.d.ts +5 -0
  233. package/dist/esm/types/src/components/Theme/Theme.defaults.d.ts +32 -0
  234. package/dist/esm/types/src/components/Theme/Theme.helpers.d.ts +15 -0
  235. package/dist/esm/types/src/components/Theme/Theme.types.d.ts +6 -0
  236. package/dist/esm/types/src/components/VH/VH.d.ts +12 -0
  237. package/dist/esm/types/src/components/Virtualized/Cards/Cards.d.ts +26 -0
  238. package/dist/esm/types/src/components/Virtualized/List/List.d.ts +44 -0
  239. package/dist/esm/types/src/components/Virtualized/List/ListScroll.d.ts +8 -0
  240. package/dist/esm/types/src/components/Virtualized/Table/Table.d.ts +26 -0
  241. package/dist/esm/types/src/components/Virtualized/Virtualized.d.ts +34 -0
  242. package/dist/esm/types/src/components/Virtualized/Virtualized.helpers.d.ts +18 -0
  243. package/dist/esm/types/src/components/Virtualized/Virtualized.types.d.ts +53 -0
  244. package/dist/esm/types/src/components/Virtualized/index.d.ts +4 -0
  245. package/dist/esm/types/src/components/index.d.ts +33 -0
  246. package/dist/esm/types/src/index.d.ts +3 -0
  247. package/dist/esm/types/src/services/i18n.d.ts +16 -0
  248. package/dist/esm/types/src/services/index.d.ts +1 -0
  249. package/dist/esm/types/src/tools/array.d.ts +8 -0
  250. package/dist/esm/types/src/tools/config.d.ts +10 -0
  251. package/dist/esm/types/src/tools/debounce.d.ts +1 -0
  252. package/dist/esm/types/src/tools/dom.d.ts +12 -0
  253. package/dist/esm/types/src/tools/env.d.ts +1 -0
  254. package/dist/esm/types/src/tools/file.d.ts +1 -0
  255. package/dist/esm/types/src/tools/index.d.ts +16 -0
  256. package/dist/esm/types/src/tools/localStorage.d.ts +12 -0
  257. package/dist/esm/types/src/tools/number.d.ts +5 -0
  258. package/dist/esm/types/src/tools/object.d.ts +1 -0
  259. package/dist/esm/types/src/tools/queryParams.d.ts +3 -0
  260. package/dist/esm/types/src/tools/rangeMap.d.ts +2 -0
  261. package/dist/esm/types/src/tools/resizeObserver.d.ts +2 -0
  262. package/dist/esm/types/src/tools/scroll.d.ts +5 -0
  263. package/dist/esm/types/src/tools/string.d.ts +1 -0
  264. package/dist/esm/types/src/tools/throttle.d.ts +6 -0
  265. package/dist/esm/types/src/tools/uid.d.ts +1 -0
  266. package/dist/esm/types/src/types.d.ts +15 -0
  267. package/package.json +117 -0
@@ -0,0 +1,583 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { Component, createRef } from 'react';
3
+ import cn from 'classnames';
4
+ import compare from 'compareq';
5
+ import pick from 'lodash.pick';
6
+ import omit from 'lodash.omit';
7
+ import { createStore } from 'justorm/react';
8
+ import Time from 'timen';
9
+ import { Icon } from '../Icon/Icon.js';
10
+ import { Button } from '../Button/Button.js';
11
+ import { Input } from '../Input/Input.js';
12
+ import { Label } from '../Label/Label.js';
13
+ import { Popup } from '../Popup/Popup.js';
14
+ import { Scroll } from '../Scroll/Scroll.js';
15
+ import { RequiredStar } from '../RequiredStar/RequiredStar.js';
16
+ import { AssistiveText } from '../AssistiveText/AssistiveText.js';
17
+ import { INTERACTION_MODE, getInteractionMode } from '../../tools/dom.js';
18
+ import throttle from '../../tools/throttle.js';
19
+ import * as Select_helpers from './Select.helpers.js';
20
+ import { mapById, buildOptionsTree, isMultiple, renderLabel } from './Select.helpers.js';
21
+ import S from './Select.styl.js';
22
+
23
+ const SelectHelpers = Select_helpers;
24
+ class Select extends Component {
25
+ store;
26
+ inputRef = createRef();
27
+ triggerInputRef = createRef();
28
+ contentRef = createRef();
29
+ scrollInnerElem;
30
+ onScrollInnerRef = elem => (this.scrollInnerElem = elem);
31
+ focusedElem;
32
+ timers = Time.create();
33
+ items = [];
34
+ maxIndex = -1;
35
+ isFirstSelectedMeet = false;
36
+ isTree = false;
37
+ focusedItemId = '';
38
+ preventClose = false;
39
+ searchValLower = '';
40
+ optionsTree = [];
41
+ ids = {
42
+ items: {},
43
+ childIds: {},
44
+ };
45
+ static defaultProps = {
46
+ size: 'm',
47
+ additionalOptions: [],
48
+ };
49
+ constructor(props) {
50
+ super(props);
51
+ this.onOptionsChange();
52
+ this.store = createStore(this, {
53
+ searchVal: '',
54
+ isOpen: false,
55
+ isFocused: false,
56
+ focusedItemIndex: 0,
57
+ selected: this.getDefaultSelected(),
58
+ expanded: this.getDefaultExpanded(props.value),
59
+ labelClipPath: '',
60
+ });
61
+ }
62
+ componentDidUpdate(prevProps) {
63
+ const { options, value } = this.props;
64
+ if (!compare(value, prevProps.value)) {
65
+ this.store.selected = this.getDefaultSelected();
66
+ }
67
+ if (!compare(options, prevProps.options)) {
68
+ this.onOptionsChange();
69
+ }
70
+ }
71
+ componentWillUnmount() {
72
+ this.timers.clear();
73
+ this.unDocumetnKeyDown();
74
+ this.unDocumentClick();
75
+ }
76
+ onOptionsChange() {
77
+ const { options } = this.props;
78
+ this.ids = mapById(options);
79
+ this.optionsTree = buildOptionsTree(options, this.ids);
80
+ this.items = this.getItems();
81
+ this.maxIndex = Math.max(0, this.items.length - 1);
82
+ if (this.store?.focusedItemIndex > this.maxIndex) {
83
+ this.store.focusedItemIndex = this.maxIndex;
84
+ this.focusedItemId = this.items[this.maxIndex].id;
85
+ }
86
+ }
87
+ coerceType(id) {
88
+ const isNumber = typeof this.ids.items[id].id === 'number';
89
+ if (isNumber)
90
+ return parseFloat(id);
91
+ return id;
92
+ }
93
+ getDefaultExpanded(value) {
94
+ const { expandSelected } = this.props;
95
+ const { items } = this.ids;
96
+ if (!expandSelected)
97
+ return {};
98
+ if (!value)
99
+ return {};
100
+ const result = {};
101
+ const stack = [...(this.isMultiple() ? value : [value])];
102
+ // go through all selected items and mark their parents as expanded
103
+ while (stack.length) {
104
+ const pointerId = stack.shift();
105
+ const item = items[pointerId];
106
+ if (item.parentId) {
107
+ result[item.parentId] = true;
108
+ stack.push(item.parentId);
109
+ }
110
+ }
111
+ return result;
112
+ }
113
+ getDefaultSelected() {
114
+ const { value } = this.props;
115
+ if (!value)
116
+ return {};
117
+ if (this.isMultiple()) {
118
+ // @ts-ignore
119
+ return value.reduce((acc, id) => {
120
+ const parentId = this.getParentId(id);
121
+ if (parentId) {
122
+ if (!acc[parentId]) {
123
+ acc[parentId] = [id];
124
+ }
125
+ else {
126
+ acc[parentId].push(id);
127
+ }
128
+ }
129
+ else {
130
+ acc[id] = this.ids.childIds[id] ? [] : true;
131
+ }
132
+ return acc;
133
+ }, {});
134
+ }
135
+ // @ts-ignore
136
+ return { [value]: true };
137
+ }
138
+ isDisabled() {
139
+ return this.props.disabled || this.items.length === 0;
140
+ }
141
+ isClickedInside = elem => elem.closest(`.${S.root}`) || elem.closest(`.${S.options}`);
142
+ onFocusedElemRef = elem => {
143
+ this.focusedElem = elem;
144
+ if (elem) {
145
+ const content = this.contentRef.current;
146
+ if (!content)
147
+ return;
148
+ const { top, bottom } = elem.getBoundingClientRect();
149
+ const rect = this.contentRef.current.getBoundingClientRect();
150
+ const list = this.scrollInnerElem;
151
+ if (top < rect.top) {
152
+ list.scrollTop -= rect.top - top;
153
+ }
154
+ else if (bottom > rect.bottom) {
155
+ list.scrollTop += bottom - rect.bottom;
156
+ }
157
+ }
158
+ };
159
+ onDocumentClick = e => {
160
+ if (!this.isClickedInside(e.target)) {
161
+ this.store.isOpen = false;
162
+ }
163
+ };
164
+ onDocumentKeyDown = e => {
165
+ const currIndex = this.store.focusedItemIndex;
166
+ switch (e.key) {
167
+ case 'ArrowDown':
168
+ if (currIndex < this.maxIndex)
169
+ this.setItemFocus(currIndex + 1);
170
+ break;
171
+ case 'ArrowUp':
172
+ if (currIndex > 0)
173
+ this.setItemFocus(currIndex - 1);
174
+ break;
175
+ }
176
+ };
177
+ onDocumentKeyUp = e => {
178
+ const currIndex = this.store.focusedItemIndex;
179
+ if (currIndex === -1)
180
+ return;
181
+ switch (e.key) {
182
+ case 'Enter':
183
+ case 'Space':
184
+ if (this.store.isOpen) {
185
+ e.preventDefault();
186
+ e.stopPropagation();
187
+ this.onItemToggle(this.items[currIndex].id);
188
+ }
189
+ }
190
+ };
191
+ unDocumetnKeyDown = () => document.removeEventListener('keyup', this.onDocumentKeyUp, true);
192
+ unDocumentClick = () => document.removeEventListener('click', this.onDocumentClick);
193
+ onFocus = e => {
194
+ const { onFocus } = this.props;
195
+ this.setSearchVal('');
196
+ this.store.isFocused = true;
197
+ onFocus?.(e);
198
+ };
199
+ onBlur = e => {
200
+ const { onBlur } = this.props;
201
+ this.store.isFocused = false;
202
+ onBlur?.(e);
203
+ };
204
+ onSearchChange = (e, value) => {
205
+ this.setSearchVal(value);
206
+ };
207
+ onExpandClick(e, id) {
208
+ const { expanded } = this.store;
209
+ e.preventDefault();
210
+ e.stopPropagation();
211
+ this.store.expanded[id] = !expanded[id];
212
+ }
213
+ onItemToggle(id) {
214
+ this.onChange(this.getNewSelected(id));
215
+ if (!this.isMultiple())
216
+ this.store.isOpen = false;
217
+ }
218
+ onChange(selected) {
219
+ const { onChange } = this.props;
220
+ this.store.selected = selected;
221
+ onChange(this.getValue());
222
+ }
223
+ onLabelClipPathChange = clipPath => (this.store.labelClipPath = clipPath);
224
+ onPopupOpen = () => {
225
+ this.store.isOpen = true;
226
+ if (this.isMultiple()) {
227
+ document.addEventListener('click', this.onDocumentClick);
228
+ }
229
+ document.addEventListener('keydown', this.onDocumentKeyDown);
230
+ document.addEventListener('keyup', this.onDocumentKeyUp, true);
231
+ };
232
+ onPopupClose = () => {
233
+ this.setItemFocus(-1);
234
+ this.store.isOpen = false;
235
+ this.unDocumentClick();
236
+ this.unDocumetnKeyDown();
237
+ };
238
+ onOptionHover = throttle(id => {
239
+ const mode = getInteractionMode();
240
+ if (mode !== INTERACTION_MODE.POINTER)
241
+ return;
242
+ const index = this.items.findIndex(item => item.id === id);
243
+ this.setItemFocus(index);
244
+ }, 100, { trailing: true });
245
+ setItemFocus = index => {
246
+ this.focusedItemId = this.items[index]?.id;
247
+ this.store.focusedItemIndex = index;
248
+ };
249
+ toggle = () => {
250
+ this.store.isOpen = !this.store.isOpen;
251
+ };
252
+ setSearchVal(searchVal) {
253
+ this.searchValLower = searchVal.toLowerCase();
254
+ this.store.searchVal = searchVal;
255
+ }
256
+ getItems = () => [...this.props.additionalOptions, ...this.optionsTree];
257
+ getParentId = id => this.ids.items[id]?.parentId;
258
+ getChildIds = id => this.ids.childIds[id];
259
+ isMultiple = () => isMultiple(this.props.value);
260
+ isErrorVisible = () => !this.store.isOpen && Boolean(this.props.error);
261
+ isSelected(id) {
262
+ const { selected } = this.store;
263
+ const parentId = this.getParentId(id);
264
+ const hasParent = parentId !== undefined;
265
+ if (hasParent) {
266
+ // @ts-ignore
267
+ return selected[parentId]?.indexOf(id) > -1;
268
+ }
269
+ const selectedVal = selected[id];
270
+ if (Array.isArray(selectedVal)) {
271
+ const childCount = this.getChildIds(id).length;
272
+ if (selectedVal.length !== childCount)
273
+ return 'indeterminate';
274
+ return selectedVal.length > 0;
275
+ }
276
+ return selectedVal;
277
+ }
278
+ addSelected(id, selected) {
279
+ if (!this.isMultiple())
280
+ return { [id]: true };
281
+ const parentId = this.getParentId(id);
282
+ const childIds = this.getChildIds(id);
283
+ const hasParent = parentId !== undefined;
284
+ const hasChilds = childIds?.length > 0;
285
+ if (!hasParent && !hasChilds) {
286
+ // top level without childs
287
+ return { ...selected, [id]: true };
288
+ }
289
+ this.addSelectedToParent(id, selected);
290
+ childIds?.forEach(childId => this.addSelected(childId, selected));
291
+ return selected;
292
+ }
293
+ addSelectedToParent(id, selected) {
294
+ const parentId = this.getParentId(id);
295
+ if (parentId === undefined)
296
+ return;
297
+ if (!selected[parentId])
298
+ selected[parentId] = [];
299
+ const arr = selected[parentId];
300
+ const index = arr.indexOf(id);
301
+ if (index > -1)
302
+ return;
303
+ arr.push(id);
304
+ this.addSelectedToParent(parentId, selected);
305
+ }
306
+ removeSelected(id, selected) {
307
+ if (!this.isMultiple())
308
+ return {};
309
+ this.removeSelectedChilds(id, selected);
310
+ this.removeSelectedFromParent(id, selected);
311
+ return selected;
312
+ }
313
+ removeSelectedChilds(id, selected) {
314
+ if (Array.isArray(selected[id])) {
315
+ selected[id].forEach(childId => this.removeSelectedChilds(childId, selected));
316
+ }
317
+ delete selected[id];
318
+ }
319
+ removeSelectedFromParent(id, selected) {
320
+ const parentId = this.getParentId(id);
321
+ const parentSelected = selected[parentId];
322
+ if (parentId === undefined || !parentSelected)
323
+ return;
324
+ const index = parentSelected.indexOf(id);
325
+ if (index > -1)
326
+ parentSelected.splice(index, 1);
327
+ if (parentSelected.length === 0) {
328
+ delete selected[parentId];
329
+ this.removeSelectedFromParent(parentId, selected);
330
+ }
331
+ }
332
+ selectAll = () => {
333
+ let selected = {};
334
+ this.optionsTree.forEach(({ id }) => (selected = this.addSelected(id, selected)));
335
+ this.onChange(selected);
336
+ };
337
+ setSelected(ids) {
338
+ let selected = {};
339
+ ids.forEach(id => (selected = this.addSelected(id, selected)));
340
+ this.onChange(selected);
341
+ }
342
+ dropSelected = () => {
343
+ this.setSelected([]);
344
+ };
345
+ getNewSelected(id) {
346
+ const { required } = this.props;
347
+ const selected = JSON.parse(JSON.stringify(this.store.selected));
348
+ if (this.isSelected(id)) {
349
+ if (required &&
350
+ (!this.isMultiple() || Object.keys(selected).length === 1)) {
351
+ return selected;
352
+ }
353
+ return this.removeSelected(id, selected);
354
+ }
355
+ return this.addSelected(id, selected);
356
+ }
357
+ getValue() {
358
+ const { selected } = this.store;
359
+ const entries = Object.entries(selected);
360
+ if (this.isMultiple()) {
361
+ // @ts-ignore
362
+ return entries.reduce((acc, [id, val]) => {
363
+ if (Array.isArray(val))
364
+ return [...acc, ...val];
365
+ return [...acc, this.coerceType(id)];
366
+ }, []);
367
+ }
368
+ const entry = entries[0];
369
+ if (entry)
370
+ return this.coerceType(entry[0]);
371
+ return null;
372
+ }
373
+ getInputVal() {
374
+ const { isFocused, searchVal, selected } = this.store;
375
+ if (isFocused)
376
+ return searchVal;
377
+ const selectedPlain = Object.entries(selected).reduce((acc, entry) => {
378
+ const parentId = this.coerceType(entry[0]);
379
+ const val = entry[1];
380
+ if (acc.indexOf(parentId) === -1)
381
+ acc.push(parentId);
382
+ if (Array.isArray(val)) {
383
+ val.forEach(id => {
384
+ if (acc.indexOf(id) === -1)
385
+ acc.push(id);
386
+ });
387
+ }
388
+ return acc;
389
+ }, []);
390
+ return selectedPlain.map(id => this.ids.items[id].label).join(', ');
391
+ }
392
+ getLabel(id) {
393
+ const { label, render } = Object(this.ids.items[id]);
394
+ if (render)
395
+ return render(label);
396
+ return label;
397
+ }
398
+ getFieldLabel(label) {
399
+ // @ts-ignore
400
+ const length = this.props.value?.length;
401
+ if (this.isMultiple() && length)
402
+ return `${label} (${length})`;
403
+ return label;
404
+ }
405
+ getSelectedLabel() {
406
+ const { value } = this.props;
407
+ if (!this.isMultiple())
408
+ return this.getLabel(value);
409
+ if (!value)
410
+ return '';
411
+ return (value
412
+ // @ts-ignore
413
+ .reduce((acc, id) => {
414
+ const label = this.getLabel(id);
415
+ return label ? [...acc, label] : acc;
416
+ }, [])
417
+ .join(', '));
418
+ }
419
+ filterOption({ label }) {
420
+ return label.toLowerCase().includes(this.searchValLower);
421
+ }
422
+ getTriggerProps() {
423
+ const { triggerProps } = this.props;
424
+ const props = {
425
+ ...pick(this.props, [
426
+ 'name',
427
+ 'label',
428
+ 'size',
429
+ 'variant',
430
+ // 'inputProps',
431
+ // 'required',
432
+ 'autocomplete',
433
+ // 'hideRequiredStar',
434
+ ]),
435
+ ...triggerProps,
436
+ };
437
+ return props;
438
+ }
439
+ renderAdditionalLabel() {
440
+ const { additionalLabel } = this.props;
441
+ if (!additionalLabel)
442
+ return null;
443
+ return jsx("div", { className: S.additionalLabel, children: additionalLabel });
444
+ }
445
+ renderTriggerInput() {
446
+ const { inputProps, label } = this.props;
447
+ const value = this.getInputVal();
448
+ const props = {
449
+ ...this.getTriggerProps(),
450
+ ...inputProps,
451
+ error: this.isErrorVisible(),
452
+ // addonLeft: this.renderSelectedItems(),
453
+ addonRight: this.renderTriggerArrow(),
454
+ value,
455
+ onChange: this.onSearchChange,
456
+ ref: this.triggerInputRef,
457
+ label: this.getFieldLabel(label),
458
+ };
459
+ return jsx(Input, { ...props });
460
+ }
461
+ renderTriggerButton() {
462
+ const { size } = this.props;
463
+ const { labelClipPath } = this.store;
464
+ const { label, className, ...rest } = this.getTriggerProps();
465
+ const props = omit(rest, ['name', 'inputProps']);
466
+ const selectedLabel = [
467
+ this.getSelectedLabel(),
468
+ this.renderAdditionalLabel(),
469
+ ].filter(Boolean);
470
+ const hasSelected = selectedLabel.length > 0;
471
+ const displayLabel = hasSelected ? selectedLabel : label;
472
+ const title = hasSelected ? selectedLabel : null;
473
+ const triggerArrow = this.renderTriggerArrow();
474
+ const isError = this.isErrorVisible();
475
+ const classes = cn(S.triggerButton, isError && S.isError, triggerArrow && S.hasTriggerArrow, className);
476
+ return (jsxs("div", { children: [jsxs(Button, { className: classes, variant: "default", ...props, style: { clipPath: labelClipPath }, title: title?.join?.(', '), children: [jsx("div", { className: cn(S.triggerButtonLabel, hasSelected && S.hasSelected), children: displayLabel }), triggerArrow] }), jsx(Label, { size: size, isOnTop: hasSelected, isError: isError, onClipPathChange: this.onLabelClipPathChange, children: this.getFieldLabel(label) })] }));
477
+ }
478
+ renderTriggerArrow() {
479
+ const { size, inputProps } = this.props;
480
+ const { isOpen, searchVal } = this.store;
481
+ if (inputProps?.hasClear && searchVal)
482
+ return null;
483
+ return (jsx(Icon, { type: "chevronDown", className: cn(S.triggerArrow, isOpen && S.isOpen), size: size }));
484
+ }
485
+ renderTrigger() {
486
+ const { trigger, isSearchable, required, hideRequiredStar, size } = this.props;
487
+ if (trigger)
488
+ return trigger;
489
+ const triggerElem = isSearchable
490
+ ? this.renderTriggerInput()
491
+ : this.renderTriggerButton();
492
+ return (jsxs("div", { className: S.trigger, children: [triggerElem, required && !hideRequiredStar && jsx(RequiredStar, { size: size })] }));
493
+ }
494
+ renderFoldButton(id) {
495
+ const { size } = this.props;
496
+ return (jsx(Button, { variant: "clear", size: size, className: S.expandButton, onPointerUpCapture: e => this.onExpandClick(e, id), children: jsx(Icon, { type: "chevronRight", size: size, className: S.expandIcon }) }));
497
+ }
498
+ renderOption = (item, level = 0) => {
499
+ const { expanded } = this.store;
500
+ const { id, children, isGroup } = item;
501
+ const selectedState = this.isSelected(id);
502
+ const isFocused = id === this.focusedItemId;
503
+ const isExpanded = expanded[id];
504
+ const isSelected = selectedState === true;
505
+ const isIndeterminate = selectedState === 'indeterminate';
506
+ const items = [];
507
+ const className = cn(S.option, isGroup && S.isGroup, isFocused && S.isFocused, isSelected && S.isSelected, isIndeterminate && S.isIndeterminate, isExpanded && S.isExpanded, S[`level-${level}`]);
508
+ const props = {
509
+ className,
510
+ key: id,
511
+ onPointerUp: () => this.onItemToggle(id),
512
+ onPointerEnter: () => this.onOptionHover(id),
513
+ };
514
+ // @ts-ignore
515
+ if (isFocused)
516
+ props.ref = this.onFocusedElemRef;
517
+ if (isIndeterminate || (isSelected && !this.isFirstSelectedMeet)) {
518
+ this.isFirstSelectedMeet = true;
519
+ }
520
+ if (children) {
521
+ this.isTree = true;
522
+ if (isExpanded) {
523
+ children.forEach(child => items.push(...this.renderOption(child, level + 1)));
524
+ }
525
+ }
526
+ if (this.filterOption(item) || items.length > 0) {
527
+ items.unshift(jsxs("div", { ...props, children: [children?.length && this.renderFoldButton(item.id), renderLabel(item)] }));
528
+ }
529
+ return items;
530
+ };
531
+ renderOptions() {
532
+ const { additionalOptions = [] } = this.props;
533
+ const items = additionalOptions.concat(this.optionsTree);
534
+ const itemsList = [];
535
+ this.isFirstSelectedMeet = false;
536
+ items.forEach(item => {
537
+ itemsList.push(...this.renderOption(item));
538
+ });
539
+ return itemsList;
540
+ }
541
+ renderPresets() {
542
+ const { presets = [], clearButton, selectAllButton } = this.props;
543
+ const items = presets.map(({ label, ids }) => ({
544
+ children: label,
545
+ onClick: () => this.setSelected(ids),
546
+ key: label,
547
+ }));
548
+ if (selectAllButton) {
549
+ items.push({
550
+ children: 'Select all',
551
+ onClick: this.selectAll,
552
+ key: 'select-all-button',
553
+ });
554
+ }
555
+ if (clearButton) {
556
+ items.push({
557
+ children: 'Clear',
558
+ onClick: this.dropSelected,
559
+ key: 'clear-button',
560
+ });
561
+ }
562
+ if (items.length === 0)
563
+ return null;
564
+ return (jsx("div", { className: S.presetPanel, children: items.map(props => (jsx(Button, { className: S.presetButton, variant: "clear", ...props }))) }, "preset-panel"));
565
+ }
566
+ renderOptionsList() {
567
+ const { size } = this.props;
568
+ this.isTree = false;
569
+ const classes = cn(S.options, S[`size-${size}`], this.isTree && S.isTree);
570
+ return (jsxs("div", { ref: this.contentRef, children: [this.renderPresets(), jsx(Scroll, { y: true, offset: { y: { before: 10, after: 10 } }, className: classes, onInnerRef: this.onScrollInnerRef, children: this.renderOptions() }, "items-scroll")] }));
571
+ }
572
+ render() {
573
+ const { className, popupProps, size, error, blur } = this.props;
574
+ const { isOpen, isFocused } = this.store;
575
+ const classes = cn(S.root, className, S[`size-${size}`]);
576
+ return (jsxs(Fragment, { children: [jsx(Popup, { className: classes, direction: "bottom", size: size, focusControl: true, hoverControl: isFocused, blur: blur, ...popupProps, isOpen: isOpen, onOpen: this.onPopupOpen, onClose: this.onPopupClose, disabled: this.isDisabled(), trigger: this.renderTrigger(), triggerProps: {
577
+ onFocus: this.onFocus,
578
+ onBlur: this.onBlur,
579
+ }, content: this.renderOptionsList() }), this.isErrorVisible() && (jsx(AssistiveText, { variant: "danger", size: size, children: error }))] }));
580
+ }
581
+ }
582
+
583
+ export { Select, SelectHelpers };
@@ -0,0 +1,7 @@
1
+ import styleInject from '../../../node_modules/style-inject/dist/style-inject.es.js';
2
+
3
+ var css_248z = ".Select_root__mjOjv{max-height:200px;max-width:100%;position:relative}.Select_root__mjOjv.Select_disabled__AlOQi{opacity:.4;pointer-events:none}.Select_additionalLabel__K0--Z{flex-grow:1;overflow:hidden;text-align:left;text-overflow:ellipsis}.Select_trigger__OH48f{position:relative;z-index:1}.Select_triggerArrow__1LEop{flex-shrink:0;margin-left:var(--indent-s);margin-right:0!important;transition:transform .2s ease-out;width:14px!important}.Select_triggerArrow__1LEop.Select_isOpen__WlMUH{transform:rotateX(-180deg)}.Select_disabled__AlOQi .Select_triggerArrow__1LEop{color:var(--text3-color)}.Select_triggerButton__lErtt{justify-content:space-between;text-align:left;width:100%}.Select_size-s__qBK9t .Select_triggerButton__lErtt{padding-bottom:10px;padding-top:10px}.Select_size-m__jp7n- .Select_triggerButton__lErtt{padding-bottom:12px;padding-top:12px}.Select_size-l__b4EEy .Select_triggerButton__lErtt{padding-bottom:14px;padding-top:14px}.Select_triggerButton__lErtt.Select_hasTriggerArrow__vPLad>span{max-width:calc(100% - 22px)}.Select_triggerButton__lErtt.Select_isError__WJJLq{box-shadow:inset 0 0 0 2px var(--danger-color)}.Select_triggerButton__lErtt .Select_triggerButtonLabel__XXLzh{opacity:0;overflow:hidden;text-overflow:ellipsis}.Select_triggerButton__lErtt .Select_triggerButtonLabel__XXLzh.Select_hasSelected__zQhBV{opacity:1}.Select_presetPanel__Yu94r{box-shadow:inset 0 -1px 0 var(--decent-color-alpha-100);display:flex;padding:5px}.Select_presetButton__BAl0q{flex-grow:1;justify-content:center}.Select_presetButton__BAl0q+.Select_presetButton__BAl0q{margin-left:8px}.Select_options__3C0-v{max-height:200px;overflow-y:auto}.keyboard .Select_options__3C0-v{pointer-events:none}.Select_option__iJkfJ{align-items:center;animation:Select_fadeIn__QpAwZ .3s ease-out;cursor:pointer;display:flex;padding-bottom:0!important;padding-top:0!important;position:relative;text-align:left;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.Select_isTree__SiTaD .Select_option__iJkfJ{min-height:36px}.Select_size-s__qBK9t .Select_option__iJkfJ{font-size:12px;height:26px;padding:0 10px}.Select_size-m__jp7n- .Select_option__iJkfJ{font-size:16px;height:34px;padding:0 12px}.Select_size-l__b4EEy .Select_option__iJkfJ{font-size:20px;height:42px;padding:0 14px}.Select_size-xl__0OerX .Select_option__iJkfJ{height:50px}.Select_option__iJkfJ:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.Select_option__iJkfJ:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.Select_isTree__SiTaD .Select_option__iJkfJ{padding-left:30px}.Select_option__iJkfJ.Select_isGroup__aP1lY{color:var(--accent-color);font-weight:500;pointer-events:none}.Select_isExpanded__rG8R1>.Select_option__iJkfJ{display:flex}.Select_option__iJkfJ>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Select_option__iJkfJ:before{content:\"\";display:inline-block}.Select_option__iJkfJ.Select_level-0__vu03A:before{content:none}.Select_option__iJkfJ.Select_level-1__ozH2U:before{min-width:24px;width:24px}.Select_option__iJkfJ.Select_level-2__XDqeh:before{min-width:48px;width:48px}.Select_option__iJkfJ.Select_level-3__Bc9XS:before{min-width:72px;width:72px}.Select_option__iJkfJ.Select_level-4__KfQcQ:before{min-width:96px;width:96px}.Select_option__iJkfJ.Select_level-5__DGSDM:before{min-width:120px;width:120px}.Select_option__iJkfJ.Select_level-6__p688A:before{min-width:144px;width:144px}.Select_option__iJkfJ.Select_isIndeterminate__dy-xV,.Select_option__iJkfJ.Select_isSelected__n3ZeN{background-color:var(--active-color-alpha-500)}.keyboard .Select_option__iJkfJ.Select_isFocused__oZSgY,.pointer .Select_option__iJkfJ:hover{box-shadow:inset 100vw 0 0 0 var(--accent-color-alpha-200)}.Select_expandButton__UTwlR{background-color:transparent!important;display:flex;height:100%;justify-content:flex-end;overflow:visible;padding:0;position:relative;width:30px}.Select_expandButton__UTwlR:before{content:\"\";display:block;height:calc(100% + 20px);position:absolute;right:0;top:-10;width:100px}.Select_size-m__jp7n- .Select_expandButton__UTwlR{margin-left:-40px}.Select_size-l__b4EEy .Select_expandButton__UTwlR{margin-left:-46px}.Select_expandIcon__gWAIB{-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .1s ease-out}.Select_isExpanded__rG8R1 .Select_expandIcon__gWAIB{transform:rotate(90deg) translateZ(0)}.Select_expandButton__UTwlR:hover .Select_expandIcon__gWAIB{color:var(--primary-color)}@keyframes Select_fadeIn__QpAwZ{0%{opacity:0}10%{opacity:0}to{opacity:1}}";
4
+ var S = {"root":"Select_root__mjOjv","disabled":"Select_disabled__AlOQi","additionalLabel":"Select_additionalLabel__K0--Z","trigger":"Select_trigger__OH48f","triggerArrow":"Select_triggerArrow__1LEop","isOpen":"Select_isOpen__WlMUH","triggerButton":"Select_triggerButton__lErtt","size-s":"Select_size-s__qBK9t","size-m":"Select_size-m__jp7n-","size-l":"Select_size-l__b4EEy","hasTriggerArrow":"Select_hasTriggerArrow__vPLad","isError":"Select_isError__WJJLq","triggerButtonLabel":"Select_triggerButtonLabel__XXLzh","hasSelected":"Select_hasSelected__zQhBV","presetPanel":"Select_presetPanel__Yu94r","presetButton":"Select_presetButton__BAl0q","options":"Select_options__3C0-v","option":"Select_option__iJkfJ","fadeIn":"Select_fadeIn__QpAwZ","isTree":"Select_isTree__SiTaD","size-xl":"Select_size-xl__0OerX","isGroup":"Select_isGroup__aP1lY","isExpanded":"Select_isExpanded__rG8R1","level-0":"Select_level-0__vu03A","level-1":"Select_level-1__ozH2U","level-2":"Select_level-2__XDqeh","level-3":"Select_level-3__Bc9XS","level-4":"Select_level-4__KfQcQ","level-5":"Select_level-5__DGSDM","level-6":"Select_level-6__p688A","isSelected":"Select_isSelected__n3ZeN","isIndeterminate":"Select_isIndeterminate__dy-xV","isFocused":"Select_isFocused__oZSgY","expandButton":"Select_expandButton__UTwlR","expandIcon":"Select_expandIcon__gWAIB"};
5
+ styleInject(css_248z);
6
+
7
+ export { S as default };
@@ -0,0 +1,11 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import cn from 'classnames';
3
+ import SvgSpinner from './spinner.svg.js';
4
+ import S from './Spinner.styl.js';
5
+
6
+ const Spinner = ({ size = 'm', className = '', ...props }) => {
7
+ const classes = cn(S.root, S[`size-${size}`], className);
8
+ return jsx(SvgSpinner, { className: classes, ...props });
9
+ };
10
+
11
+ export { Spinner };
@@ -0,0 +1,7 @@
1
+ import styleInject from '../../../node_modules/style-inject/dist/style-inject.es.js';
2
+
3
+ var css_248z = ".Spinner_root__DsSOz{animation:Spinner_spin__7XKOR .5s linear infinite;color:inherit;display:inline-block}.Spinner_size-s__sc9kC{height:16px;width:16px}.Spinner_size-m__MY4q0{height:20px;width:20px}.Spinner_size-l__p16ZU{height:30px;width:30px}@keyframes Spinner_spin__7XKOR{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}";
4
+ var S = {"root":"Spinner_root__DsSOz","spin":"Spinner_spin__7XKOR","size-s":"Spinner_size-s__sc9kC","size-m":"Spinner_size-m__MY4q0","size-l":"Spinner_size-l__p16ZU"};
5
+ styleInject(css_248z);
6
+
7
+ export { S as default };
@@ -0,0 +1,24 @@
1
+ import * as React from 'react';
2
+
3
+ var _circle;
4
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
5
+ var SvgSpinner = function SvgSpinner(props) {
6
+ return /*#__PURE__*/React.createElement("svg", _extends({
7
+ width: 50,
8
+ height: 50,
9
+ xmlns: "http://www.w3.org/2000/svg",
10
+ viewBox: "0 0 100 100",
11
+ preserveAspectRatio: "xMidYMid"
12
+ }, props), _circle || (_circle = /*#__PURE__*/React.createElement("circle", {
13
+ cx: 50,
14
+ cy: 50,
15
+ fill: "none",
16
+ stroke: "currentColor",
17
+ strokeWidth: 8,
18
+ r: 45,
19
+ strokeDasharray: "212.05750411731105 72.68583470577035",
20
+ transform: "rotate(270 50 50)"
21
+ })));
22
+ };
23
+
24
+ export { SvgSpinner as default };
@@ -0,0 +1,24 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { Component } from 'react';
3
+ import cn from 'classnames';
4
+ import { Paranja } from '../Paranja/Paranja.js';
5
+ import { Scroll } from '../Scroll/Scroll.js';
6
+ import { Spinner } from '../Spinner/Spinner.js';
7
+ import S from './Table.styl.js';
8
+
9
+ class Table extends Component {
10
+ renderHeaderColumn = ({ id, label, sticky }) => (jsx("th", { className: cn(sticky && S.sticky), children: label }, id));
11
+ renderRow = data => {
12
+ const { columns } = this.props;
13
+ return (jsx("tr", { children: columns.map(param => this.renderDataCol(param, data)) }, data.id));
14
+ };
15
+ renderDataCol({ id, dataField, render, sticky }, data) {
16
+ return (jsx("td", { className: cn(sticky && S.sticky), children: render ? render(data) : data[dataField || id] }, id));
17
+ }
18
+ render() {
19
+ const { className, columns, isLoading = false, loadingText, blur, data, } = this.props;
20
+ return (jsxs("div", { className: cn(S.root, blur && S.blur, className), children: [jsx(Scroll, { x: true, y: true, offset: { x: { before: 10, after: 10 } }, children: jsxs("table", { children: [jsx("thead", { children: jsx("tr", { children: columns.map(this.renderHeaderColumn) }) }), jsx("tbody", { children: data.map(this.renderRow) })] }) }), jsx(Paranja, { inline: true, visible: isLoading, blur: blur, children: isLoading && (loadingText ?? jsx(Spinner, {})) })] }));
21
+ }
22
+ }
23
+
24
+ export { Table };
@@ -0,0 +1,7 @@
1
+ import styleInject from '../../../node_modules/style-inject/dist/style-inject.es.js';
2
+
3
+ var css_248z = ".Table_root__PxLR-{border-radius:var(--border-radius-l);box-shadow:0 0 0 2px var(--accent-color-alpha-100);overflow:hidden;position:relative}.Table_root__PxLR- table{min-width:100%}.Table_root__PxLR- tbody{overflow-scrolling:touch;overflow:auto}.Table_root__PxLR- thead{position:sticky;top:0;z-index:1}.Table_root__PxLR- td{box-shadow:inset 0 1px 0 0 var(--accent-color-alpha-100)}.Table_root__PxLR- td,.Table_root__PxLR- th{min-width:5em;padding:var(--indent-s);text-align:left}.Table_root__PxLR- th{background-color:var(--accent-color-alpha-100);padding-bottom:16px}.Table_root__PxLR- td{vertical-align:top}.Table_root__PxLR- tr:last-child td{padding-bottom:var(--indent-l)}.Table_sticky__99lks{background-color:var(--decent-color);left:0;position:sticky;z-index:1}th.Table_sticky__99lks{background-color:var(--accent-color);color:var(--decent-color)}.Table_blur__UwMAo .Table_sticky__99lks{-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);background-color:var(--decent-color-alpha-500)}.Table_blur__UwMAo th.Table_sticky__99lks{background-color:var(--accent-color-alpha-500);color:var(--decent-color-alpha-800)}";
4
+ var S = {"root":"Table_root__PxLR-","sticky":"Table_sticky__99lks","blur":"Table_blur__UwMAo"};
5
+ styleInject(css_248z);
6
+
7
+ export { S as default };